• 今日总结


    package me.wcy.music.activity;
    
    import android.app.ProgressDialog;
    import android.content.ComponentName;
    import android.content.Context;
    import android.content.Intent;
    import android.content.ServiceConnection;
    import android.graphics.Color;
    import android.media.AudioManager;
    import android.os.Build;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.IBinder;
    import android.os.Looper;
    import android.support.annotation.NonNull;
    import android.support.annotation.Nullable;
    import android.support.annotation.StyleRes;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.util.Log;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.ViewGroup;
    import android.view.WindowManager;
    
    import me.wcy.music.R;
    import me.wcy.music.service.PlayService;
    import me.wcy.music.storage.preference.Preferences;
    import me.wcy.music.utils.PermissionReq;
    import me.wcy.music.utils.binding.ViewBinder;
    
    /**
     * 基类<br>
     * 如果继承本类,需要在 layout 中添加 {@link Toolbar} ,并将 AppTheme 继承 Theme.AppCompat.NoActionBar 。
     * Created by wcy on 2015/11/26.
     */
    public abstract class BaseActivity extends AppCompatActivity {
        protected Handler handler;
        protected PlayService playService;
        private ServiceConnection serviceConnection;
        private ProgressDialog progressDialog;
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            if (Preferences.isNightMode()) {
                setTheme(getDarkTheme());
            }
    
            super.onCreate(savedInstanceState);
    
            setSystemBarTransparent();
            setVolumeControlStream(AudioManager.STREAM_MUSIC);
            handler = new Handler(Looper.getMainLooper());
            bindService();
        }
    
        @StyleRes
        protected int getDarkTheme() {
            return R.style.AppThemeDark;
        }
    
        @Override
        public void setContentView(int layoutResID) {
            super.setContentView(layoutResID);
            initView();
        }
    
        @Override
        public void setContentView(View view) {
            super.setContentView(view);
            initView();
        }
    
        @Override
        public void setContentView(View view, ViewGroup.LayoutParams params) {
            super.setContentView(view, params);
            initView();
        }
    
        private void initView() {
            ViewBinder.bind(this);
    
            Toolbar mToolbar = findViewById(R.id.toolbar);
            if (mToolbar == null) {
                throw new IllegalStateException("Layout is required to include a Toolbar with id 'toolbar'");
            }
            setSupportActionBar(mToolbar);
            if (getSupportActionBar() != null) {
                getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            }
        }
    
        private void bindService() {
            Intent intent = new Intent();
            intent.setClass(this, PlayService.class);
            serviceConnection = new PlayServiceConnection();
            bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
        }
    
        private class PlayServiceConnection implements ServiceConnection {
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                playService = ((PlayService.PlayBinder) service).getService();
                onServiceBound();
            }
    
            @Override
            public void onServiceDisconnected(ComponentName name) {
                Log.e(getClass().getSimpleName(), "service disconnected");
            }
        }
    
        protected void onServiceBound() {
        }
    
        private void setSystemBarTransparent() {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                // LOLLIPOP解决方案
                getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
                getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                getWindow().setStatusBarColor(Color.TRANSPARENT);
            } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                // KITKAT解决方案
                getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            }
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            if (item.getItemId() == android.R.id.home) {
                finish();
                return true;
            }
            return super.onOptionsItemSelected(item);
        }
    
        public void showProgress() {
            showProgress(getString(R.string.loading));
        }
    
        public void showProgress(String message) {
            if (progressDialog == null) {
                progressDialog = new ProgressDialog(this);
                progressDialog.setCancelable(false);
            }
            progressDialog.setMessage(message);
            if (!progressDialog.isShowing()) {
                progressDialog.show();
            }
        }
    
        public void cancelProgress() {
            if (progressDialog != null && progressDialog.isShowing()) {
                progressDialog.cancel();
            }
        }
    
        @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            PermissionReq.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    
        @Override
        protected void onDestroy() {
            if (serviceConnection != null) {
                unbindService(serviceConnection);
            }
            super.onDestroy();
        }
    }
    package me.wcy.music.activity;
    
    import android.Manifest;
    import android.annotation.SuppressLint;
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.annotation.NonNull;
    import android.support.design.widget.NavigationView;
    import android.support.v4.app.FragmentTransaction;
    import android.support.v4.view.GravityCompat;
    import android.support.v4.view.ViewPager;
    import android.support.v4.widget.DrawerLayout;
    import android.view.LayoutInflater;
    import android.view.MenuItem;
    import android.view.View;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;
    import android.widget.FrameLayout;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    import me.wcy.music.R;
    import me.wcy.music.adapter.FragmentAdapter;
    import me.wcy.music.constants.Extras;
    import me.wcy.music.constants.Keys;
    import me.wcy.music.executor.ControlPanel;
    import me.wcy.music.executor.NaviMenuExecutor;
    import me.wcy.music.executor.WeatherExecutor;
    import me.wcy.music.fragment.LocalMusicFragment;
    import me.wcy.music.fragment.PlayFragment;
    import me.wcy.music.fragment.SheetListFragment;
    import me.wcy.music.service.AudioPlayer;
    import me.wcy.music.service.QuitTimer;
    import me.wcy.music.utils.PermissionReq;
    import me.wcy.music.utils.SystemUtils;
    import me.wcy.music.utils.ToastUtils;
    import me.wcy.music.utils.binding.Bind;
    
    public class MusicActivity extends BaseActivity implements View.OnClickListener, QuitTimer.OnTimerListener,
            NavigationView.OnNavigationItemSelectedListener, ViewPager.OnPageChangeListener {
        @Bind(R.id.drawer_layout)
        private DrawerLayout drawerLayout;
        @Bind(R.id.navigation_view)
        private NavigationView navigationView;
        @Bind(R.id.iv_menu)
        private ImageView ivMenu;
        @Bind(R.id.iv_search)
        private ImageView ivSearch;
    
        @Bind(R.id.tv_local_music)
        private TextView tvLocalMusic;
    
        @Bind(R.id.tv_online_music)
        private TextView tvOnlineMusic;
    
        @Bind(R.id.tv_random_music)
        private TextView tvRandomMusic;//随机
    
        @Bind(R.id.viewpager)
        private ViewPager mViewPager;
        @Bind(R.id.fl_play_bar)
        private FrameLayout flPlayBar;
    
        private View vNavigationHeader;
        private LocalMusicFragment mLocalMusicFragment;
        private SheetListFragment mSheetListFragment;
        private PlayFragment mPlayFragment;
        private ControlPanel controlPanel;
        private NaviMenuExecutor naviMenuExecutor;
        private MenuItem timerItem;
        private boolean isPlayFragmentShow;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_music);
        }
    
        @Override
        protected void onServiceBound() {
            setupView();
            updateWeather();
            controlPanel = new ControlPanel(flPlayBar);
            naviMenuExecutor = new NaviMenuExecutor(this);
            AudioPlayer.get().addOnPlayEventListener(controlPanel);
            QuitTimer.get().setOnTimerListener(this);
            parseIntent();
        }
    
        @Override
        protected void onNewIntent(Intent intent) {
            setIntent(intent);
            parseIntent();
        }
    
        private void setupView() {
            // add navigation header
            vNavigationHeader = LayoutInflater.from(this).inflate(R.layout.navigation_header, navigationView, false);
            navigationView.addHeaderView(vNavigationHeader);
    
            // setup view pager
            mLocalMusicFragment = new LocalMusicFragment();
            mSheetListFragment = new SheetListFragment();
    
            FragmentAdapter adapter = new FragmentAdapter(getSupportFragmentManager());
            adapter.addFragment(mLocalMusicFragment);
            adapter.addFragment(mSheetListFragment);
            mViewPager.setAdapter(adapter);
            tvLocalMusic.setSelected(true);
    
            ivMenu.setOnClickListener(this);
            ivSearch.setOnClickListener(this);
            tvLocalMusic.setOnClickListener(this);
            tvOnlineMusic.setOnClickListener(this);
            flPlayBar.setOnClickListener(this);
            mViewPager.addOnPageChangeListener(this);
            navigationView.setNavigationItemSelectedListener(this);
        }
    
        private void updateWeather() {
            PermissionReq.with(this)
                    .permissions(Manifest.permission.ACCESS_FINE_LOCATION,
                            Manifest.permission.ACCESS_COARSE_LOCATION)
                    .result(new PermissionReq.Result() {
                        @Override
                        public void onGranted() {
                            new WeatherExecutor(MusicActivity.this, vNavigationHeader).execute();
                        }
    
                        @Override
                        public void onDenied() {
                            ToastUtils.show(R.string.no_permission_location);
                        }
                    })
                    .request();
        }
    
        private void parseIntent() {
            Intent intent = getIntent();
            if (intent.hasExtra(Extras.EXTRA_NOTIFICATION)) {
                showPlayingFragment();
                setIntent(new Intent());
            }
        }
    
        @Override
        public void onTimer(long remain) {
            if (timerItem == null) {
                timerItem = navigationView.getMenu().findItem(R.id.action_timer);
            }
            String title = getString(R.string.menu_timer);
            timerItem.setTitle(remain == 0 ? title : SystemUtils.formatTime(title + "(mm:ss)", remain));
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.iv_menu:
                    drawerLayout.openDrawer(GravityCompat.START);
                    break;
                case R.id.iv_search:
                    startActivity(new Intent(this, SearchMusicActivity.class));
                    break;
                case R.id.tv_local_music:
                    mViewPager.setCurrentItem(0);
                    break;
                case R.id.tv_online_music:
                    startActivity(new Intent(this, online.class));
                    break;
    
                case R.id.tv_random_music:
                    mViewPager.setCurrentItem(1);
                    break;
                case R.id.fl_play_bar:
                    showPlayingFragment();
                    break;
    
            }
        }
    
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            drawerLayout.closeDrawers();
            handler.postDelayed(() -> item.setChecked(false), 500);
            return naviMenuExecutor.onNavigationItemSelected(item);
        }
    
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        }
    
        @Override
        public void onPageSelected(int position) {
            if (position == 0) {
                tvLocalMusic.setSelected(true);
                tvOnlineMusic.setSelected(false);
            } else {
                tvLocalMusic.setSelected(false);
                tvOnlineMusic.setSelected(true);
            }
        }
    
        @Override
        public void onPageScrollStateChanged(int state) {
        }
    
        private void showPlayingFragment() {
            if (isPlayFragmentShow) {
                return;
            }
    
            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.setCustomAnimations(R.anim.fragment_slide_up, 0);
            if (mPlayFragment == null) {
                mPlayFragment = new PlayFragment();
                ft.replace(android.R.id.content, mPlayFragment);
            } else {
                ft.show(mPlayFragment);
            }
            ft.commitAllowingStateLoss();
            isPlayFragmentShow = true;
        }
    
        private void hidePlayingFragment() {
            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.setCustomAnimations(0, R.anim.fragment_slide_down);
            ft.hide(mPlayFragment);
            ft.commitAllowingStateLoss();
            isPlayFragmentShow = false;
        }
    
        @Override
        public void onBackPressed() {
            if (mPlayFragment != null && isPlayFragmentShow) {
                hidePlayingFragment();
                return;
            }
            if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
                drawerLayout.closeDrawers();
                return;
            }
    
            super.onBackPressed();
        }
    
        @SuppressLint("MissingSuperCall")
        @Override
        protected void onSaveInstanceState(Bundle outState) {
            outState.putInt(Keys.VIEW_PAGER_INDEX, mViewPager.getCurrentItem());
            mLocalMusicFragment.onSaveInstanceState(outState);
            mSheetListFragment.onSaveInstanceState(outState);
        }
    
        @Override
        protected void onRestoreInstanceState(final Bundle savedInstanceState) {
            mViewPager.post(() -> {
                mViewPager.setCurrentItem(savedInstanceState.getInt(Keys.VIEW_PAGER_INDEX), false);
                mLocalMusicFragment.onRestoreInstanceState(savedInstanceState);
                mSheetListFragment.onRestoreInstanceState(savedInstanceState);
            });
        }
    
        @Override
        protected void onDestroy() {
            AudioPlayer.get().removeOnPlayEventListener(controlPanel);
            QuitTimer.get().setOnTimerListener(null);
            super.onDestroy();
        }
    }
  • 相关阅读:
    动手动脑2
    假期第五周学习记录
    假期第四周学习记录
    假期第三周学习记录
    假期第二周学习记录
    执行$JAVA_HOME/bin/java -version和java -version命令输出结果不一致
    假期第一周学习记录
    使用VMware创建虚拟机并下载linux系统镜像文件
    VMware Worstation下载安装
    第十七周学习进度
  • 原文地址:https://www.cnblogs.com/feng747/p/14910483.html
Copyright © 2020-2023  润新知