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.
 
 
 
 
 
FONGMITV/app/src/main/java/com/fongmi/android/tv/App.java

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();
}
}