package io.hefuyi.listener; import android.Manifest; import android.app.Application; import android.content.Intent; import android.media.MediaScannerConnection; import android.net.Uri; import android.os.Build; import android.os.Environment; import com.afollestad.appthemeengine.ATE; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import java.util.ArrayList; import java.util.List; import io.hefuyi.listener.dataloader.SongLoader; import io.hefuyi.listener.event.MediaUpdateEvent; import io.hefuyi.listener.injector.component.ApplicationComponent; import io.hefuyi.listener.injector.component.DaggerApplicationComponent; import io.hefuyi.listener.injector.module.ApplicationModule; import io.hefuyi.listener.injector.module.NetworkModule; import io.hefuyi.listener.mvp.model.Song; import io.hefuyi.listener.permission.PermissionManager; import io.hefuyi.listener.util.ListenerUtil; import rx.functions.Action1; import rx.functions.Func1; import rx.schedulers.Schedulers; /** * Created by hefuyi on 2016/10/4. */ public class ListenerApp extends Application { private ApplicationComponent mApplicationComponent; @Override public void onCreate() { super.onCreate(); // initLeakCanary(); // setCrashHandler(); // initStetho(); // setStrictMode(); setupInjector(); initImageLoader(); PermissionManager.init(this); updataMedia(); setupATE(); } // private void initLeakCanary() { // if (LeakCanary.isInAnalyzerProcess(this)) { // return; // } // LeakCanary.install(this); // } // private void setStrictMode() { // if (BuildConfig.DEBUG) { // StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog().build()); // StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectAll().penaltyLog().build()); // } // } // private void setCrashHandler() { // CrashHandler crashHandler = CrashHandler.getInstance(this); // Thread.setDefaultUncaughtExceptionHandler(crashHandler); // } // private void initStetho() { // Stetho.initializeWithDefaults(this); // } private void setupInjector() { mApplicationComponent = DaggerApplicationComponent.builder() .applicationModule(new ApplicationModule(this)) .networkModule(new NetworkModule(this)).build(); } private void initImageLoader() { ImageLoaderConfiguration localImageLoaderConfiguration = new ImageLoaderConfiguration.Builder(this).build(); ImageLoader.getInstance().init(localImageLoaderConfiguration); } public ApplicationComponent getApplicationComponent() { return mApplicationComponent; } //应用启动时通知系统刷新媒体库, private void updataMedia() { //版本号的判断 4.4为分水岭,发送广播更新媒体库 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { if (ListenerUtil.isMarshmallow() && !PermissionManager.checkPermission(Manifest.permission.READ_EXTERNAL_STORAGE)) { return; } SongLoader.getAllSongs(this) .map(new Func1<List<Song>, String[]>() { @Override public String[] call(List<Song> songList) { List<String> folderPath = new ArrayList<String>(); int i = 0; for (Song song : songList) { folderPath.add(i, song.path); i++; } return folderPath.toArray(new String[0]); } }) .subscribeOn(Schedulers.io()) .subscribe(new Action1<String[]>() { @Override public void call(String[] paths) { MediaScannerConnection.scanFile(getApplicationContext(), paths, null, new MediaScannerConnection.OnScanCompletedListener() { @Override public void onScanCompleted(String path, Uri uri) { if (uri == null) { RxBus.getInstance().post(new MediaUpdateEvent()); } } }); } }); } else { sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory()))); } } private void setupATE() { if (!ATE.config(this, "light_theme").isConfigured()) { ATE.config(this, "light_theme") .activityTheme(R.style.AppThemeLight) .coloredNavigationBar(false) .usingMaterialDialogs(true) .commit(); } if (!ATE.config(this, "dark_theme").isConfigured()) { ATE.config(this, "dark_theme") .activityTheme(R.style.AppThemeDark) .coloredNavigationBar(false) .usingMaterialDialogs(true) .commit(); } } }