mirror of https://github.com/FongMi/TV.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
177 lines
5.3 KiB
177 lines
5.3 KiB
package com.fongmi.android.tv;
|
|
|
|
import android.app.Activity;
|
|
import android.app.Application;
|
|
import android.content.Context;
|
|
import android.content.pm.PackageManager;
|
|
import android.os.Bundle;
|
|
import android.os.Handler;
|
|
import android.os.Looper;
|
|
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.Nullable;
|
|
import androidx.core.os.HandlerCompat;
|
|
|
|
import com.fongmi.android.tv.event.EventIndex;
|
|
import com.fongmi.android.tv.ui.activity.CrashActivity;
|
|
import com.fongmi.android.tv.utils.Notify;
|
|
import com.fongmi.hook.Hook;
|
|
import com.github.catvod.Init;
|
|
import com.github.catvod.bean.Doh;
|
|
import com.github.catvod.net.OkHttp;
|
|
import com.google.gson.Gson;
|
|
import com.orhanobut.logger.AndroidLogAdapter;
|
|
import com.orhanobut.logger.LogAdapter;
|
|
import com.orhanobut.logger.Logger;
|
|
import com.orhanobut.logger.PrettyFormatStrategy;
|
|
|
|
import org.greenrobot.eventbus.EventBus;
|
|
|
|
import java.util.concurrent.Callable;
|
|
import java.util.concurrent.ExecutorService;
|
|
import java.util.concurrent.Executors;
|
|
import java.util.concurrent.Future;
|
|
|
|
import cat.ereza.customactivityoncrash.config.CaocConfig;
|
|
|
|
public class App extends Application {
|
|
|
|
private final ExecutorService executor;
|
|
private final Handler handler;
|
|
private static App instance;
|
|
private Activity activity;
|
|
private final Gson gson;
|
|
private final long time;
|
|
private Hook hook;
|
|
|
|
public App() {
|
|
instance = this;
|
|
executor = Executors.newFixedThreadPool(Product.THREAD_COUNT);
|
|
handler = HandlerCompat.createAsync(Looper.getMainLooper());
|
|
time = System.currentTimeMillis();
|
|
gson = new Gson();
|
|
}
|
|
|
|
public static App get() {
|
|
return instance;
|
|
}
|
|
|
|
public static Gson gson() {
|
|
return get().gson;
|
|
}
|
|
|
|
public static long time() {
|
|
return get().time;
|
|
}
|
|
|
|
public static Activity activity() {
|
|
return get().activity;
|
|
}
|
|
|
|
public static <T> Future<T> submit(Callable<T> task) {
|
|
return get().executor.submit(task);
|
|
}
|
|
|
|
public static Future<?> submit(Runnable task) {
|
|
return get().executor.submit(task);
|
|
}
|
|
|
|
public static void execute(Runnable runnable) {
|
|
get().executor.execute(runnable);
|
|
}
|
|
|
|
public static void post(Runnable runnable) {
|
|
get().handler.post(runnable);
|
|
}
|
|
|
|
public static void post(Runnable runnable, long delayMillis) {
|
|
get().handler.removeCallbacks(runnable);
|
|
if (delayMillis >= 0) get().handler.postDelayed(runnable, delayMillis);
|
|
}
|
|
|
|
public static void removeCallbacks(Runnable runnable) {
|
|
get().handler.removeCallbacks(runnable);
|
|
}
|
|
|
|
public static void removeCallbacks(Runnable... runnable) {
|
|
for (Runnable r : runnable) get().handler.removeCallbacks(r);
|
|
}
|
|
|
|
public void setHook(Hook hook) {
|
|
this.hook = hook;
|
|
}
|
|
|
|
private void setActivity(Activity activity) {
|
|
this.activity = activity;
|
|
}
|
|
|
|
private LogAdapter getLogAdapter() {
|
|
return new AndroidLogAdapter(PrettyFormatStrategy.newBuilder().methodCount(0).showThreadInfo(false).tag("").build()) {
|
|
@Override
|
|
public boolean isLoggable(int priority, String tag) {
|
|
return true;
|
|
}
|
|
};
|
|
}
|
|
|
|
@Override
|
|
protected void attachBaseContext(Context base) {
|
|
super.attachBaseContext(base);
|
|
Init.set(base);
|
|
}
|
|
|
|
@Override
|
|
public void onCreate() {
|
|
super.onCreate();
|
|
Notify.createChannel();
|
|
Logger.addLogAdapter(getLogAdapter());
|
|
OkHttp.get().setDoh(Doh.objectFrom(Setting.getDoh()));
|
|
EventBus.builder().addIndex(new EventIndex()).installDefaultEventBus();
|
|
CaocConfig.Builder.create().trackActivities(true).backgroundMode(CaocConfig.BACKGROUND_MODE_SILENT).errorActivity(CrashActivity.class).apply();
|
|
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
|
|
@Override
|
|
public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {
|
|
if (activity != activity()) setActivity(activity);
|
|
}
|
|
|
|
@Override
|
|
public void onActivityStarted(@NonNull Activity activity) {
|
|
if (activity != activity()) setActivity(activity);
|
|
}
|
|
|
|
@Override
|
|
public void onActivityResumed(@NonNull Activity activity) {
|
|
if (activity != activity()) setActivity(activity);
|
|
}
|
|
|
|
@Override
|
|
public void onActivityPaused(@NonNull Activity activity) {
|
|
if (activity == activity()) setActivity(null);
|
|
}
|
|
|
|
@Override
|
|
public void onActivityStopped(@NonNull Activity activity) {
|
|
if (activity == activity()) setActivity(null);
|
|
}
|
|
|
|
@Override
|
|
public void onActivityDestroyed(@NonNull Activity activity) {
|
|
if (activity == activity()) setActivity(null);
|
|
}
|
|
|
|
@Override
|
|
public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) {
|
|
}
|
|
});
|
|
}
|
|
|
|
@Override
|
|
public PackageManager getPackageManager() {
|
|
return hook != null ? hook : getBaseContext().getPackageManager();
|
|
}
|
|
|
|
@Override
|
|
public String getPackageName() {
|
|
return hook != null ? hook.getPackageName() : getBaseContext().getPackageName();
|
|
}
|
|
} |