package me.wcy.music.application; import android.app.Activity; import android.app.Application; import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; import android.os.Bundle; import android.support.v4.util.LongSparseArray; import android.util.DisplayMetrics; import android.util.Log; import com.amap.api.location.AMapLocalWeatherLive; import java.util.ArrayList; import java.util.List; import me.wcy.music.model.Music; import me.wcy.music.model.SongListInfo; import me.wcy.music.service.PlayService; import me.wcy.music.utils.Preferences; import me.wcy.music.utils.ScreenUtils; import me.wcy.music.utils.ToastUtils; /** * Created by hzwangchenyan on 2016/11/23. */ public class AppCache { private Context mContext; private PlayService mPlayService; // 本地歌曲列表 private final List<Music> mMusicList = new ArrayList<>(); // 歌单列表 private final List<SongListInfo> mSongListInfos = new ArrayList<>(); private final List<Activity> mActivityStack = new ArrayList<>(); private final LongSparseArray<String> mDownloadList = new LongSparseArray<>(); private AMapLocalWeatherLive mAMapLocalWeatherLive; private AppCache() { } private static class SingletonHolder { private static AppCache sAppCache = new AppCache(); } private static AppCache getInstance() { return SingletonHolder.sAppCache; } public static void init(Application application) { getInstance().onInit(application); } private void onInit(Application application) { mContext = application.getApplicationContext(); ToastUtils.init(mContext); Preferences.init(mContext); ScreenUtils.init(mContext); CrashHandler.getInstance().init(); application.registerActivityLifecycleCallbacks(new ActivityLifecycle()); } public static Context getContext() { return getInstance().mContext; } public static PlayService getPlayService() { return getInstance().mPlayService; } public static void setPlayService(PlayService service) { getInstance().mPlayService = service; } public static void updateNightMode(boolean on) { Resources resources = getContext().getResources(); DisplayMetrics dm = resources.getDisplayMetrics(); Configuration config = resources.getConfiguration(); config.uiMode &= ~Configuration.UI_MODE_NIGHT_MASK; config.uiMode |= on ? Configuration.UI_MODE_NIGHT_YES : Configuration.UI_MODE_NIGHT_NO; resources.updateConfiguration(config, dm); } public static List<Music> getMusicList() { return getInstance().mMusicList; } public static List<SongListInfo> getSongListInfos() { return getInstance().mSongListInfos; } public static void clearStack() { List<Activity> activityStack = getInstance().mActivityStack; for (int i = activityStack.size() - 1; i >= 0; i--) { Activity activity = activityStack.get(i); if (!activity.isFinishing()) { activity.finish(); } } activityStack.clear(); } public static LongSparseArray<String> getDownloadList() { return getInstance().mDownloadList; } public static AMapLocalWeatherLive getAMapLocalWeatherLive() { return getInstance().mAMapLocalWeatherLive; } public static void setAMapLocalWeatherLive(AMapLocalWeatherLive aMapLocalWeatherLive) { getInstance().mAMapLocalWeatherLive = aMapLocalWeatherLive; } private static class ActivityLifecycle implements Application.ActivityLifecycleCallbacks { private static final String TAG = "Activity"; @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { Log.i(TAG, "onCreate: " + activity.getClass().getSimpleName()); getInstance().mActivityStack.add(activity); } @Override public void onActivityStarted(Activity activity) { } @Override public void onActivityResumed(Activity activity) { } @Override public void onActivityPaused(Activity activity) { } @Override public void onActivityStopped(Activity activity) { } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { } @Override public void onActivityDestroyed(Activity activity) { Log.i(TAG, "onDestroy: " + activity.getClass().getSimpleName()); getInstance().mActivityStack.remove(activity); } } }