package cn.denua.v2ex; import android.app.Activity; import android.app.Application; import android.content.Context; import android.content.res.Configuration; import android.os.Bundle; import com.blankj.utilcode.util.Utils; import com.orhanobut.logger.AndroidLogAdapter; import com.orhanobut.logger.Logger; import com.tencent.bugly.crashreport.CrashReport; import java.util.ArrayList; import java.util.List; import cn.denua.v2ex.base.BaseActivity; import cn.denua.v2ex.http.RetrofitManager; import cn.denua.v2ex.interfaces.Secret; public class App extends Application implements Application.ActivityLifecycleCallbacks { private static App app; private static List<Activity> mActivities = new ArrayList<>(); private Configuration mConfig; private Secret mSecretConfig; @Override public void onCreate() { super.onCreate(); app = this; mSecretConfig = new SecretImpl(); mSecretConfig.init(this); Config.init(this); setTheme(getResources().getIdentifier(Config.getConfig(ConfigRefEnum.CONFIG_THEME), "style", getPackageName())); Logger.addLogAdapter(new AndroidLogAdapter()); RetrofitManager.init(this); Utils.init(this); registerActivityLifecycleCallbacks(this); setFontScaleAndUiScale(); } public static Activity getPreActivity(Activity activity){ return (mActivities.size() <= 1) ? null : mActivities.get(mActivities.indexOf(activity) - 1); } public static Activity getLatestActivity(){ return (mActivities.size() == 0) ? null : mActivities.get(mActivities.size() - 1); } private void setFontScaleAndUiScale(){ if (mConfig == null){ mConfig = getResources().getConfiguration(); System.out.println((String) Config.getConfig(ConfigRefEnum.CONFIG_FONT_SCALE)); mConfig.fontScale = mConfig.fontScale * Float.valueOf(Config.getConfig(ConfigRefEnum.CONFIG_FONT_SCALE)); mConfig.densityDpi = (int) (mConfig.densityDpi * Float.valueOf(Config.getConfig(ConfigRefEnum.CONFIG_UI_SCALE))); } onConfigurationChanged(mConfig); getResources().updateConfiguration(mConfig, getResources().getDisplayMetrics()); } public static Application getApplication(){ return app; } @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { mActivities.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) { mActivities.remove(activity); } }