package com.rehome.zhdcoa; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.os.Build; import android.text.TextUtils; import android.util.Log; import android.widget.Toast; import androidx.annotation.Nullable; import androidx.emoji.bundled.BundledEmojiCompatConfig; import androidx.emoji.text.EmojiCompat; import androidx.multidex.MultiDex; //import com.blankj.utilcode.util.Utils; import com.github.mikephil.charting.utils.Utils; //import com.hjq.http.EasyConfig; //import com.hjq.http.config.IRequestInterceptor; //import com.hjq.http.config.IRequestServer; //import com.hjq.http.model.HttpHeaders; //import com.hjq.http.model.HttpParams; import com.rehome.zhdcoa.bean.UserInfoBean; import com.rehome.zhdcoa.ui.activity.VpnAuthActivity; import com.rehome.zhdcoa.utils.DpPxSpTransformUtil; import com.rehome.zhdcoa.utils.SPUtils; //import com.squareup.leakcanary.LeakCanary; //import com.squareup.leakcanary.RefWatcher; import com.rehome.zhdcoa.vpn.GlobalListenerManager; import com.sangfor.sdk.SFUemSDK; import com.sangfor.sdk.base.SFBaseMessage; import com.sangfor.sdk.base.SFSDKExtras; import com.sangfor.sdk.base.SFSDKFlags; import com.sangfor.sdk.base.SFSDKMode; import com.sangfor.sdk.base.SFSetSpaConfigListener; import com.sangfor.sdk.utils.SFLogN; import com.tencent.bugly.crashreport.CrashReport; import com.xuexiang.xui.XUI; import com.yolanda.nohttp.NoHttp; import com.zhy.autolayout.config.AutoLayoutConifg; import org.litepal.LitePalApplication; import java.util.HashMap; import java.util.Map; public class App extends LitePalApplication { private UserInfoBean.UserInfo userInfo; private String DateSave; public String getDateSave() { return DateSave; } public void setDateSave(String dateSave) { DateSave = dateSave; } private static App mInstance; //public static boolean mIsInitTBSSuccess = false; public static boolean mqttIsInit = false; private int activityAount = 0; private boolean isForeground = false; public static Context mContext; public static App getInstance() { return mInstance; } //private RefWatcher refWatcher; @Override public void onCreate() { super.onCreate(); mInstance = this; // if (LeakCanary.isInAnalyzerProcess(this)) { //1 // // This process is dedicated to LeakCanary for heap analysis. // // You should not init your app in this process. // return; // } //refWatcher = LeakCanary.install(this); NoHttp.initialize(this); MultiDex.install(this); NoHttp.setDefaultConnectTimeout(6 * 1000); NoHttp.setDefaultReadTimeout(60 * 1000); initUser(); AutoLayoutConifg.getInstance().useDeviceSize(); Utils.init(this); XUI.init(this); //初始化UI框架 CrashReport.UserStrategy strategy = new CrashReport.UserStrategy(getApplicationContext()); // 通过UserStrategy设置 strategy.setDeviceModel(Build.MODEL); CrashReport.initCrashReport(getApplicationContext(), "13d735012a", true, strategy); loadEmojiFromBundled(); //BuildConfig.DEBUG // 网络请求框架初始化 // IRequestServer server; // if (BuildConfig.DEBUG) { // server = new TestServer(); // } else { // server = new ReleaseServer(); // } // // OkHttpClient okHttpClient = new OkHttpClient.Builder() // .build(); // // EasyConfig.with(okHttpClient) // // 是否打印日志 // //.setLogEnabled(BuildConfig.DEBUG) // // 设置服务器配置 // .setServer(server) // // 设置请求处理策略 // .setHandler(new RequestHandler(this)) // // 设置请求参数拦截器 // .setInterceptor(new IRequestInterceptor() { // @Override // public void intercept(String url, String tag, HttpParams params, HttpHeaders headers) { // headers.put("timestamp", String.valueOf(System.currentTimeMillis())); // } // }) // // 设置请求重试次数 // .setRetryCount(1) // // 设置请求重试时间 // .setRetryTime(1000) // // 添加全局请求参数 // .addParam("token", "6666666") // // 添加全局请求头 // //.addHeader("time", "20191030") // .into(); } private void initUser() { this.userInfo = SPUtils.getUser(this); } public UserInfoBean.UserInfo getUserInfo() { return userInfo; } public void setUserInfo(UserInfoBean.UserInfo userInfo) { this.userInfo = userInfo; SPUtils.putUser(this, userInfo); } @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); mContext = base; /** * 初始化深信服sdk,推荐在attachBaseContext中调用,因为sdk延后初始化会导致多进程场景下,子进程无法拥有sdk的能力 * 初始化深信服注销监听回调 * 初始化深信服dp,sp转px的工具类 */ if (isApkInDebug(base)) { showLog("attachBaseContext base"); initSdk(base); GlobalListenerManager.getInstance().init(base); DpPxSpTransformUtil.init(getResources().getDisplayMetrics().density); // String config = "{\"loginAddress\":\"https://vpn.zhp.geg.com.cn:55420\", \"spaSecret\":\"7FFQ-rWE5-V6xX\"}"; // SFUemSDK.setSpaConfig(config, new SFSetSpaConfigListener() { // @Override // public void onSetSpaConfig(String result, SFBaseMessage error) { // SFLogN.info("app", "spa result:"+ result + ", error:" + error); // Log.i("app", "spa result:"+ result + ", error:" + error); // if (error.mErrCode != 0) { // Toast.makeText(mContext, // "SPA设置失败"+ ", Error Message:" + error.toString(), // Toast.LENGTH_SHORT) // .show(); // } else { // Toast.makeText(mContext, "SPA设置成功, result:" + result, // Toast.LENGTH_SHORT) // .show(); // } // } // }); } } public void clearUser() { this.userInfo = null; SPUtils.clearUser(this); } private void loadEmojiFromBundled() { EmojiCompat.Config config = new BundledEmojiCompatConfig(getApplicationContext()); config.setReplaceAll(true) .registerInitCallback(new EmojiCompat.InitCallback() { @Override public void onInitialized() { //Log.i("app", "loadEmojiFromBundled()->onInitialized()"); } @Override public void onFailed(@Nullable Throwable throwable) { //Log.e("app", "loadEmojiFromBundled()->onFailed()", throwable); } }); EmojiCompat.init(config); } // public static RefWatcher getRefWatcher(Context context) { // App application = (App) context.getApplicationContext(); // return application.refWatcher; // } /** * 判断当前应用是否是debug状态 */ public static boolean isApkInDebug(Context context) { try { ApplicationInfo info = context.getApplicationInfo(); return (info.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0; } catch (Exception e) { return false; } } public static String getApplicationId(Context context) { PackageManager packageManager = context.getPackageManager(); String packageName = context.getPackageName(); try { ApplicationInfo applicationInfo = packageManager.getApplicationInfo(packageName, 0); return applicationInfo.packageName; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); return null; } } public void showLog(String logText) { if (isApkInDebug(mContext)) { if (TextUtils.isEmpty(logText)) { Log.i("app", "logText is null"); } else { Log.i("app", logText); } } } void initSdk(Context context) { Map extra = new HashMap<>(); SFSDKMode sdkMode = SFSDKMode.MODE_SUPPORT_MUTABLE; // 表明启用可变授权功能,详情参考集成指导文档 switch (sdkMode) { case MODE_SUPPORT_MUTABLE:{ int sdkFlags = SFSDKFlags.FLAGS_HOST_APPLICATION; //表明是单应用或者是主应用 sdkFlags |= SFSDKFlags.FLAGS_VPN_MODE_TCP; //表明使用VPN功能中的TCP模式 SFUemSDK.getInstance().initSDK(this, sdkMode,sdkFlags,extra); break; } case MODE_VPN: { //只使用VPN功能场景 int sdkFlags = SFSDKFlags.FLAGS_HOST_APPLICATION; //表明是单应用或者是主应用 sdkFlags |= SFSDKFlags.FLAGS_VPN_MODE_TCP; //表明使用VPN功能中的TCP模式 SFUemSDK.getInstance().initSDK(this, sdkMode,sdkFlags,null); break; } case MODE_SANDBOX: { //只使用安全沙箱功能场景 int sdkFlags = SFSDKFlags.FLAGS_HOST_APPLICATION; //表明是单应用或者是主应用 SFUemSDK.getInstance().initSDK(this, sdkMode,sdkFlags,null); break; } case MODE_VPN_SANDBOX: { //同时使用VPN功能+安全沙箱功能场景 int sdkFlags = SFSDKFlags.FLAGS_HOST_APPLICATION; //表明是单应用或者是主应用 sdkFlags |= SFSDKFlags.FLAGS_VPN_MODE_TCP; //表明使用VPN功能中的TCP模式 SFUemSDK.getInstance().initSDK(this, sdkMode,sdkFlags,null); break; } default: { Toast.makeText(context, "SDK模式错误", Toast.LENGTH_LONG).show(); } } } }