package com.classic.car.ui.activity;
import android.Manifest;
import android.app.DownloadManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.StrictMode;
import android.support.annotation.IdRes;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.DecelerateInterpolator;
import com.classic.android.BasicProject;
import com.classic.android.permissions.AfterPermissionGranted;
import com.classic.android.permissions.AppSettingsDialog;
import com.classic.android.permissions.EasyPermissions;
import com.classic.android.utils.DoubleClickExitHelper;
import com.classic.car.BuildConfig;
import com.classic.car.R;
import com.classic.car.consts.Consts;
import com.classic.car.ui.base.AppBaseActivity;
import com.classic.car.ui.fragment.AboutFragment;
import com.classic.car.ui.fragment.ChartFragment;
import com.classic.car.ui.fragment.MainFragment;
import com.classic.car.ui.fragment.TimelineFragment;
import com.classic.car.utils.IntentUtil;
import com.classic.car.utils.PgyUtil;
import com.elvishew.xlog.LogLevel;
import com.roughike.bottombar.BottomBar;
import com.roughike.bottombar.OnTabSelectListener;
import java.io.File;
import java.util.List;
import butterknife.BindView;
public class MainActivity extends AppBaseActivity {
@BindView(R.id.main_bottombar) BottomBar mBottomBar;
private MainFragment mMainFragment;
private ChartFragment mChartFragment;
private TimelineFragment mTimelineFragment;
private AboutFragment mAboutFragment;
private DoubleClickExitHelper mDoubleClickExitHelper;
private AppUpdateReceiver mAppUpdateReceiver;
@Override public int getLayoutResId() {
return R.layout.activity_main;
}
@Override public void initView(Bundle savedInstanceState) {
if(BuildConfig.DEBUG) {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog().build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectAll().penaltyLog().build());
}
super.initView(savedInstanceState);
setTitle(R.string.app_name);
mDoubleClickExitHelper = new DoubleClickExitHelper(mActivity);
checkStoragePermissions();
initBottomBar();
PgyUtil.register(mAppContext);
PgyUtil.checkUpdate(mActivity, false);
}
private static final int REQUEST_CODE_STORAGE = 101;
private static final int REQUEST_CODE_SETTINGS = 102;
private static final String[] STORAGE_PERMISSIONS = {
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
};
@AfterPermissionGranted(REQUEST_CODE_STORAGE)
private void checkStoragePermissions(){
if (EasyPermissions.hasPermissions(this, STORAGE_PERMISSIONS)) {
init();
} else {
EasyPermissions.requestPermissions(this, Consts.STORAGE_PERMISSIONS_DESCRIBE,
REQUEST_CODE_STORAGE, STORAGE_PERMISSIONS);
}
}
@Override public void onPermissionsGranted(int requestCode, List<String> perms) {
super.onPermissionsGranted(requestCode, perms);
if(requestCode == REQUEST_CODE_STORAGE){
init();
}
}
@Override public void onPermissionsDenied(int requestCode, List<String> perms) {
super.onPermissionsDenied(requestCode, perms);
if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
new AppSettingsDialog.Builder(this, Consts.STORAGE_PERMISSIONS_DESCRIBE)
.setTitle("权限申请")
.setPositiveButton("设置")
.setNegativeButton("取消", null)
.setRequestCode(REQUEST_CODE_SETTINGS)
.build()
.show();
}
}
private void init() {
BasicProject.config(new BasicProject.Builder().setDebug(BuildConfig.DEBUG)
.setRootDirectoryName(Consts.DIR_NAME)
.setExceptionHandler(mAppContext)
.setLog(BuildConfig.DEBUG
? LogLevel.ALL
: LogLevel.NONE));
}
private void initBottomBar(){
mBottomBar.setOnTabSelectListener(new OnTabSelectListener() {
@Override
public void onTabSelected(@IdRes int tabId) {
switch (tabId) {
case R.id.tab_main:
if (null == mMainFragment) {
mMainFragment = MainFragment.newInstance();
}
changeFragment(R.id.main_fragment_layout, mMainFragment);
break;
case R.id.tab_chart:
if (null == mChartFragment) {
mChartFragment = ChartFragment.newInstance();
}
changeFragment(R.id.main_fragment_layout, mChartFragment);
break;
case R.id.tab_timeline:
if (null == mTimelineFragment) {
mTimelineFragment = TimelineFragment.newInstance();
}
changeFragment(R.id.main_fragment_layout, mTimelineFragment);
break;
case R.id.tab_about:
if (null == mAboutFragment) {
mAboutFragment = AboutFragment.newInstance();
}
changeFragment(R.id.main_fragment_layout, mAboutFragment);
break;
}
}
});
}
@Override public void unRegister() {
super.unRegister();
if (null != mAppUpdateReceiver) {
unregisterReceiver(mAppUpdateReceiver);
mAppUpdateReceiver = null;
}
PgyUtil.destroy();
}
@Override public boolean onKeyDown(int keyCode, KeyEvent event) {
return mDoubleClickExitHelper.onKeyDown(keyCode, event);
}
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
public void onHide() {
getToolbar().animate().translationY(-getToolbar().getHeight()).setInterpolator(new AccelerateInterpolator(2));
mBottomBar.animate().translationY(mBottomBar.getHeight()).setInterpolator(new AccelerateInterpolator(2));
}
public void onShow() {
getToolbar().animate().translationY(0).setInterpolator(new DecelerateInterpolator(2));
mBottomBar.animate().translationY(0).setInterpolator(new DecelerateInterpolator(2)).start();
}
public void registerAppUpdateReceiver(long downloadId, String apkPath) {
mAppUpdateReceiver = new AppUpdateReceiver(downloadId, apkPath);
IntentFilter filter = new IntentFilter();
filter.addAction(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
registerReceiver(mAppUpdateReceiver, filter);
}
private final class AppUpdateReceiver extends BroadcastReceiver {
private long downloadId;
private String apkPath;
public AppUpdateReceiver(long downloadId, String apkPath) {
this.downloadId = downloadId;
this.apkPath = apkPath;
}
@Override public void onReceive(Context context, Intent intent) {
long id = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
if (id == downloadId && !TextUtils.isEmpty(apkPath) && new File(apkPath).exists()) {
IntentUtil.installApp(mAppContext, apkPath, getPackageName() + Consts.AUTHORITIES_SUFFIX);
}
}
}
}