diff --git a/app/build.gradle b/app/build.gradle index aa0f8a8..5e53907 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,8 +61,8 @@ android { //新平台正式 newly { flavorDimensions "default" - versionCode 12 - versionName "2.1" + versionCode 14 + versionName "2.3" /*********************************极光推送************************************/ manifestPlaceholders = [ XG_ACCESS_ID : "1500026372", @@ -83,8 +83,8 @@ android { MTKnewly { flavorDimensions "default" - versionCode 4 - versionName "1.3" + versionCode 5 + versionName "1.4" /*********************************极光推送************************************/ manifestPlaceholders = [ XG_ACCESS_ID : "1500026372", diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 946ce72..920c05e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,8 +1,8 @@ @@ -75,11 +75,11 @@ - - - + + + - + @@ -87,17 +87,17 @@ - + - + - + - + - + - + @@ -131,20 +131,23 @@ android:launchMode="singleTop" /> + - - - + + + - - + + - + @@ -294,160 +297,164 @@ - - - - - + + + + + - - - - - - - - + + + + + + + + - - - - + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - + + + - - - - - + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - + + + - - - + + + - - - - - - - + + + + + + + - - - + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - + + + - - - + + + - - - + + + - - - - - - + + + + + + - + - + android:host="com.aoleyun.sn" + android:scheme="tpns" /> + @@ -480,7 +487,8 @@ android:process=":xg_vip_service" /> - @@ -517,14 +525,15 @@ - + + android:authorities="com.aoleyun.sn.XG_SETTINGS_PROVIDER" + android:exported="false" /> diff --git a/app/src/main/java/com/aoleyun/sn/action/JGYActions.java b/app/src/main/java/com/aoleyun/sn/action/JGYActions.java deleted file mode 100644 index f76685a..0000000 --- a/app/src/main/java/com/aoleyun/sn/action/JGYActions.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.aoleyun.sn.action; - -public class JGYActions { - /* - * 需要写到底层的数据 - * */ - //设备锁定状态 - public final static String ACTION_QCH_UNLOCK_IPAD = "qch_unlock_ipad"; - //应用管理-允许联网 - public final static String ACTION_HR_RECEIVER_JGY = "qch_jgy_network_allow"; - //应用管理-禁止联网 - public final static String ACTION_HR_RECEIVER_JGY_DIS = "qch_jgy_network_disallow"; - // - public final static String ACTION_STATUS_BAR_STATUS = "jgy_statusbar_status"; - // - - /* - * 应用内部的数据 - * */ - - //后台上传所有应用包名 将添加到桌面 - // TODO: 2021/10/13 - public final static String ACTION_JGY_SHORTCUTLIST = "only_jgy_shortcut_list"; - - -} diff --git a/app/src/main/java/com/aoleyun/sn/activity/SplashActivity.java b/app/src/main/java/com/aoleyun/sn/activity/SplashActivity.java index c7f5ad4..b212df8 100644 --- a/app/src/main/java/com/aoleyun/sn/activity/SplashActivity.java +++ b/app/src/main/java/com/aoleyun/sn/activity/SplashActivity.java @@ -23,10 +23,11 @@ import androidx.core.content.ContextCompat; import com.aoleyun.sn.BuildConfig; import com.aoleyun.sn.R; -import com.aoleyun.sn.action.JGYActions; import com.aoleyun.sn.activity.main.MainActivity; import com.aoleyun.sn.base.BaseApplication; +import com.aoleyun.sn.comm.JGYActions; import com.aoleyun.sn.comm.PackageNames; +import com.aoleyun.sn.network.NetInterfaceManager; import com.aoleyun.sn.service.LogcatService; import com.aoleyun.sn.utils.JGYUtils; import com.aoleyun.sn.utils.SPUtils; @@ -43,7 +44,6 @@ import java.nio.file.Path; import java.nio.file.Paths; - public class SplashActivity extends AppCompatActivity { private static String TAG = SplashActivity.class.getSimpleName(); private Button bt_log; @@ -78,6 +78,8 @@ public class SplashActivity extends AppCompatActivity { private void initView() { if (BuildConfig.DEBUG) { + JGYUtils.getInstance().cleanBackgroundMemory(); + NetInterfaceManager.getInstance().uploadLogFile(); bt_log = findViewById(R.id.bt_log); bt_log.setVisibility(View.VISIBLE); bt_log.setOnClickListener(view -> { diff --git a/app/src/main/java/com/aoleyun/sn/activity/CheckNetActivity.java b/app/src/main/java/com/aoleyun/sn/activity/checknet/CheckNetActivity.java similarity index 93% rename from app/src/main/java/com/aoleyun/sn/activity/CheckNetActivity.java rename to app/src/main/java/com/aoleyun/sn/activity/checknet/CheckNetActivity.java index 85d3750..d738b5f 100644 --- a/app/src/main/java/com/aoleyun/sn/activity/CheckNetActivity.java +++ b/app/src/main/java/com/aoleyun/sn/activity/checknet/CheckNetActivity.java @@ -1,6 +1,4 @@ -package com.aoleyun.sn.activity; - -import androidx.localbroadcastmanager.content.LocalBroadcastManager; +package com.aoleyun.sn.activity.checknet; import android.app.AlertDialog; import android.content.BroadcastReceiver; @@ -18,12 +16,11 @@ import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; + import com.aoleyun.sn.R; -import com.aoleyun.sn.activity.main.MainContact; -import com.aoleyun.sn.activity.main.MainPresenter; import com.aoleyun.sn.base.BaseActivity; -import com.aoleyun.sn.service.MainService; -import com.aoleyun.sn.utils.ApkUtils; +import com.aoleyun.sn.service.main.MainService; import com.aoleyun.sn.utils.ExampleUtil; import com.aoleyun.sn.utils.JGYUtils; import com.aoleyun.sn.utils.SaveListUtils; @@ -37,7 +34,7 @@ import butterknife.BindView; import butterknife.ButterKnife; import pl.droidsonroids.gif.GifImageView; -public class CheckNetActivity extends BaseActivity implements MainContact.MainView, NetworkUtils.OnNetworkStatusChangedListener { +public class CheckNetActivity extends BaseActivity implements CheckNetContact.MainView, NetworkUtils.OnNetworkStatusChangedListener { @BindView(R.id.giv_1) GifImageView giv_1; @BindView(R.id.giv_2) @@ -54,7 +51,7 @@ public class CheckNetActivity extends BaseActivity implements MainContact.MainVi Button bt_confirm; private static final String TAG = CheckNetActivity.class.getSimpleName(); - private MainPresenter mPresenter; + private CheckNetPresenter mPresenter; private boolean netWorkIsRunning = false; private boolean updateApp = false; @@ -92,7 +89,7 @@ public class CheckNetActivity extends BaseActivity implements MainContact.MainVi @Override public void initView() { ButterKnife.bind(this); - mPresenter = new MainPresenter(this); + mPresenter = new CheckNetPresenter(this); mPresenter.attachView(this); mPresenter.setProvider(this); JGYUtils.startServices(CheckNetActivity.this); @@ -121,6 +118,7 @@ public class CheckNetActivity extends BaseActivity implements MainContact.MainVi finish(); } }); + mPresenter.getFirstConnect(); } private static class Resut { @@ -176,32 +174,6 @@ public class CheckNetActivity extends BaseActivity implements MainContact.MainVi // mPresenter.getStudesInfo(); } - @Override - public void setQRImage(Bitmap qrImage) { - - } - - @Override - public void setBatchText(String text, int visibility) { - } - - @Override - public void setClassText(String text, int visibility) { - } - - @Override - public void setNumberText(String text, int visibility) { - } - - @Override - public void setNameText(String text, int visibility) { - } - - @Override - public void setHead(String url) { - - } - /** * @param loocked 后台1是锁定,底层0是锁定 */ @@ -212,8 +184,6 @@ public class CheckNetActivity extends BaseActivity implements MainContact.MainVi //设置极光推送别名 mPresenter.setJpushAlias(); if (loocked) { - //上传APP信息 - ApkUtils.getAppInfo(this); if (netWorkIsRunning || MainService.netWorkIsRunning) { //如果正在执行,不执行 return; diff --git a/app/src/main/java/com/aoleyun/sn/activity/checknet/CheckNetContact.java b/app/src/main/java/com/aoleyun/sn/activity/checknet/CheckNetContact.java new file mode 100644 index 0000000..9d47f63 --- /dev/null +++ b/app/src/main/java/com/aoleyun/sn/activity/checknet/CheckNetContact.java @@ -0,0 +1,173 @@ +package com.aoleyun.sn.activity.checknet; + +import android.graphics.Bitmap; +import android.view.View; + +import com.google.gson.JsonObject; +import com.aoleyun.sn.base.BasePresenter; +import com.aoleyun.sn.base.BaseView; + +public class CheckNetContact { + public interface Presenter extends BasePresenter { + //获取设备锁定状态 + void getLockedState(); + //是否第一次联网 + void getFirstConnect(); + //关闭所有功能 + void setDisableSetting(); + //发送mac地址 + void sendMACAddress(); + //更新设备信息 + void updateDeviceInfo(); + //获取时间管控 + void getSnTimeControl(); + //获取电子书包激活码 + void getEBagCode(); + //设置击关推送别名 + void setJpushAlias(); + //设置极光推送平台标签 + void setJpushPlatformTags(int platform); + //获取应用市场更新 + void checkStoreUpdate(); + //获取设备信息更新 + void checkInfoUpdate(); + //获取桌面升级 + void checkDesktopUpdate(); + //获取通知升级 + void checkNotifyUpdate(); + //获取浏览器升级 + void checkBrowserUpdate(); + //手动获取设备信息更新 + void buttonCheckUpdate(View view); + //获取测试应用更新 + void checkTestUpdate(); + //开始 + //设置极光推送标签 + void setPushTags(); + //获取开发者选项 + void getDeveloper(); + //获取设备后台设置 + void getSystemSettingbegin(); + //获取可被写入的安装包名 + void getAppLimit(); + //获取设备批次 + void getDeviceBatch(String packageList); + //获取强制下载apk + void getForceDownload(); + //获取浏览器上网管控设置 + void getBrowserList(); + //获取浏览器书签设置管控 + void getBrowserBookmarks(String whitelist); + //设置白名单的url + void getBrowserWhiteList(); + //获取应用图标桌面可见性管控 + void getDesktopIcon(); + //获取应用自启升级和网络权限管理 + void getAppAutoStartUpdateAndNet(); + //获取第三方应用子页面ID连网限制 + void getAppIDControl(); + //获取第三方应用内部网页跳转屏蔽 + void setAppinsideWeb(); + //获取系统其他管控设置 + void setSystemSetting(); + //获取系统默认程序设置 + void getDefaultApp(); + //获取自定义版本内置app + void getROMApp(); + //设置开机动画 + void setLogoImg(); + //应用霸屏 + void setTopApp(); + //获取桌面 + void getDefaultDesktop(); + //获取关机时间 + void getPoweroffTime(); + //获取wifi密码 + void getWiFiPasswd(); + /* + * MainService + * */ + //获取屏幕锁状态 + void getScreenLockState(); + } + + public interface MainView extends BaseView { + //获取设备锁定状态 + void setLockedState(boolean loocked); + //是否第一次联网 + void setFirstConnect(boolean state); + //发送mac地址 + void sendMACFinish(); + //更新设备信息 + void updateDeviceInfoFinish(); + //获取时间管控 + void getSnTimeControlFinish(); + //获取电子书包激活码 + void getEBagCodeFinish(); + //设置击关推送别名 + void setAliasFinish(); + //设置极光推送平台标签 + void setJpushPlatformTagsFinish(); + //获取应用市场更新 + void checkStoreUpdateFinish(); + //获取设备信息更新 + void checkInfoUpdateFinish(); + //获取桌面升级 + void checkDesktopUpdateFinish(); + //获取通知升级 + void checkNotifyUpdateFinish(); + //获取浏览器升级 + void checkBrowserUpdateFinish(); + //手动获取设备信息更新 + void buttonCheckUpdateFinish(boolean update, JsonObject jsonObject); + //获取测试应用更新 + void checkTestUpdateFinish(); + //开始 + //设置极光推送标签 + void setTagsFinish(boolean noTag); + //获取开发者选项结束 + void getDeveloperFinish(); + //设置设备后台设置 + void getSystemSettingbegin(); + //获取可被写入的安装包名结束 + void getAppLimitFinish(String packageList); + //获取设备批次结束 + void getDeviceBatchFinish(); + //获取强制下载apk结束 + void getForceDownloadFinish(); + //获取浏览器上网管控设置结束 + void getBrowserListFinish(String whitelist); + //获取浏览器书签设置管控结束 + void getBrowserBookmarksFinish(); + //获取应用图标桌面可见性管控结束 + void getDesktopIconFinish(); + //获取应用自启升级和网络权限管理结束 + void getAppAutoStartUpdateAndNetFinish(); + //获取第三方应用子页面ID连网限制结束 + void getAppIDControlFinish(); + //获取第三方应用内部网页跳转屏蔽结束 + void setAppinsideWebFinish(); + //获取系统其他管控设置结束 + void setSystemSettingFinish(); + //获取系统默认程序设置 + void setDefaultAppFinish(); + //获取自定义版本内置app + void getROMAppFinish(); + + //设置开机动画 + void setLogoImgFinish(); + //获取应用霸屏结束 + void setTopAppFinish(); + //获取桌面结束 + void getDefaultDesktopFinish(); + //获取关机时间 + void setPoweroffTime(); + //获取wifi密码结束 + void setWiFiPasswd(); + /* + * MainService + * */ + //设置屏幕锁状态结束 + void setScreenLockStateFinish(boolean locked, String tips); + } +} diff --git a/app/src/main/java/com/aoleyun/sn/activity/checknet/CheckNetPresenter.java b/app/src/main/java/com/aoleyun/sn/activity/checknet/CheckNetPresenter.java new file mode 100644 index 0000000..bbb544c --- /dev/null +++ b/app/src/main/java/com/aoleyun/sn/activity/checknet/CheckNetPresenter.java @@ -0,0 +1,1960 @@ +package com.aoleyun.sn.activity.checknet; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.provider.Settings; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.aoleyun.sn.BuildConfig; +import com.aoleyun.sn.base.BaseApplication; +import com.aoleyun.sn.bean.BaseResponse; +import com.aoleyun.sn.bean.DefaultApp; +import com.aoleyun.sn.bean.ForceDownloadBean; +import com.aoleyun.sn.bean.ForceDownloadData; +import com.aoleyun.sn.bean.LogoImg; +import com.aoleyun.sn.bean.NetAndLaunchBean; +import com.aoleyun.sn.bean.PoweroffBean; +import com.aoleyun.sn.bean.WiFiAlias; +import com.aoleyun.sn.comm.CommonConfig; +import com.aoleyun.sn.comm.JGYActions; +import com.aoleyun.sn.comm.PackageNames; +import com.aoleyun.sn.network.HTTPInterface; +import com.aoleyun.sn.network.NetInterfaceManager; +import com.aoleyun.sn.service.main.MainService; +import com.aoleyun.sn.utils.ApkUtils; +import com.aoleyun.sn.utils.ForegroundAppUtil; +import com.aoleyun.sn.utils.JGYUtils; +import com.aoleyun.sn.utils.SPUtils; +import com.aoleyun.sn.utils.SysSettingUtils; +import com.aoleyun.sn.utils.TimeUtils; +import com.aoleyun.sn.utils.ToastUtil; +import com.aoleyun.sn.utils.URLUtils; +import com.aoleyun.sn.utils.Utils; +import com.aoleyun.sn.utils.WiFiUtils; +import com.arialyy.aria.core.Aria; +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.reflect.TypeToken; +import com.tencent.android.tpush.XGIOperateCallback; +import com.tencent.android.tpush.XGPushManager; +import com.tencent.mmkv.MMKV; +import com.trello.rxlifecycle2.LifecycleProvider; +import com.trello.rxlifecycle2.android.ActivityEvent; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import io.reactivex.Observer; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.annotations.NonNull; +import io.reactivex.disposables.Disposable; +import io.reactivex.schedulers.Schedulers; +import okhttp3.ResponseBody; + +/** + * MainActivity和MainService 的 Presenter + * + * @author jgy + */ +public class CheckNetPresenter implements CheckNetContact.Presenter { + private static final String TAG = CheckNetPresenter.class.getSimpleName(); + private CheckNetContact.MainView mView; + private Context mContext; + + public static final String GET_SETTING_FINISH_TIME = "GET_SETTING_FINISH_TIME"; + + //是否有接口请求成功 + public boolean requestSucceeded = false; + private final int OK = 200; + + private LifecycleProvider provider; + + public void setProvider(LifecycleProvider provider) { + this.provider = provider; + } + + public LifecycleProvider getProvider() { + return provider; + } + + public CheckNetPresenter(Context context) { + this.mContext = context; + Log.e(TAG, "MainPresenter: " + context.getClass()); + } + + public boolean isRequestSucceeded() { + return requestSucceeded; + } + + @Override + public void attachView(@androidx.annotation.NonNull CheckNetContact.MainView view) { + this.mView = view; + } + + @Override + public void detachView() { + this.mView = null; + } + + private long lastgetLockedTime; + private long one_minute = 1000 * 60; + + @Override + public void getLockedState() { + MMKV mmkv = MMKV.defaultMMKV(); + lastgetLockedTime = mmkv.decodeLong(CheckNetPresenter.GET_SETTING_FINISH_TIME); + Log.e(TAG, "getLockedState: " + lastgetLockedTime); + if (System.currentTimeMillis() - lastgetLockedTime < one_minute) { + Log.e(TAG, "getLockedState: lastgetLockedTime = " + lastgetLockedTime); + return; + } + +// lastgetLockedTime = System.currentTimeMillis(); + NetInterfaceManager.getInstance() + .getDevicesLockedStateObservable() + .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e(TAG + ":" + "getLockedState", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse response) { + requestSucceeded = true; + Log.e(TAG + ":" + "getLockedState", "onNext: " + JSONObject.toJSONString(response)); + if (response.code == OK) { + JsonObject jsonObject = JsonParser.parseString(new Gson().toJson(response.data)).getAsJsonObject(); + int locked = jsonObject.get("lock").getAsInt(); + Log.e(TAG + ":" + "getLockedState", "locked: " + locked); + int oldState = Settings.System.getInt(mContext.getContentResolver(), JGYActions.ACTION_QCH_UNLOCK_IPAD, 0); + Log.e(TAG + ":" + "getLockedState", "qch_unlock_ipad: " + oldState); + //后台1是锁定,底层0是锁定 + SPUtils.put(mContext, CommonConfig.JGY_FIRST_CONNECT, 1); + if (locked == 1) { + if (oldState == 1) { + Log.e(TAG + ":" + "getLockedState", "onNext: " + "state changed , reset devices"); + Utils.doMasterClear(mContext); + } + Settings.System.putInt(mContext.getContentResolver(), JGYActions.ACTION_QCH_UNLOCK_IPAD, 0); + } else { +// SysSettingUtils.setEnableSetting(mContext); + Settings.System.putInt(mContext.getContentResolver(), JGYActions.ACTION_QCH_UNLOCK_IPAD, 1); + } + mView.setLockedState(locked == 1); + } else if (response.code == -300) { + mView.setLockedState(false); + Log.e(TAG + ":" + "getLockedState", "locked: " + false); + } + + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e(TAG + ":" + "getLockedState", "onError: " + e.getMessage()); + int locked = Settings.System.getInt(mContext.getContentResolver(), JGYActions.ACTION_QCH_UNLOCK_IPAD, 0); + Log.e(TAG + ":" + "getLockedState", "locked: " + locked); + mView.setLockedState(locked == 0); + } + + @Override + public void onComplete() { + Log.e(TAG + ":" + "getLockedState", "onComplete: "); + } + }); + } + + /** + * 第一次连接 + */ + @Override + public void getFirstConnect() { + int first = (int) SPUtils.get(mContext, CommonConfig.JGY_FIRST_CONNECT, 0); + Log.e(TAG, "getFirstConnect: " + "first_connect = " + first); + mView.setFirstConnect(first == 0); + } + + @Override + public void setDisableSetting() { + Log.e(TAG, "setDisableSetting: "); + //设置系统管控 + SysSettingUtils.setDisableSetting(mContext); + } + + + private long lastSendMACTime; + + @Override + public void sendMACAddress() { + if (System.currentTimeMillis() - lastSendMACTime < 60 * 60 * 1000) { + mView.sendMACFinish(); + return; + } + lastSendMACTime = System.currentTimeMillis(); + String macJson = (String) SPUtils.get(mContext, "macJson", ""); + String jsonString = JGYUtils.getInstance().getMacJson(); + if (macJson.equals(jsonString)) { + mView.sendMACFinish(); + return; + } + NetInterfaceManager.getInstance() + .sendMACAddressObservable() + .observeOn(Schedulers.io()) + .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e(TAG + ":" + "sendMACAddress", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse response) { + requestSucceeded = true; + if (response.code == OK) { + Log.e(TAG + ":" + "sendMACAddress", response.msg); + SPUtils.put(mContext, "macJson", JGYUtils.getInstance().getMacJson()); + } else { + Log.e(TAG + ":" + "sendMACAddress", response.toString()); + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e(TAG + ":" + "sendMACAddress", "onError: " + e.getMessage()); + onComplete(); + } + + @Override + public void onComplete() { + Log.e(TAG + ":" + "sendMACAddress", "onComplete: "); + lastSendMACTime = System.currentTimeMillis(); + mView.sendMACFinish(); + } + }); + } + + @Override + public void updateDeviceInfo() { + if (JGYUtils.isOfficialVersion()) { + mView.updateDeviceInfoFinish(); + return; + } + updateDevicesInfo(mContext); + mView.updateDeviceInfoFinish(); + } + + @SuppressLint("NewApi") + synchronized private void updateDevicesInfo(Context context) { + String address = String.valueOf(SPUtils.get(context, "AmapAddress", "-")); + if ("-".equals(address)) { + address = (String) SPUtils.get(context, "AmapError", "-"); + } + String longitude = String.valueOf(SPUtils.get(context, "longitude", "0")); + String latitude = String.valueOf(SPUtils.get(context, "latitude", "0")); + JsonObject jsonObject = new JsonObject(); + jsonObject.addProperty("address", address); + jsonObject.addProperty("longitude", longitude); + jsonObject.addProperty("latitude", latitude); + String add = jsonObject.toString(); + Log.e(TAG, "updateDevicesInfo: " + add); + NetInterfaceManager.getInstance().getUpdateDeviceInfo() + .updateDeviceInfo( + Utils.getSerial(), + NetInterfaceManager.HTTP_KEY, + Utils.getMachine(context), + Utils.getHardware(context), + add) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e(TAG + ":" + "updateDevicesInfo", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse baseResponse) { + requestSucceeded = true; + Log.e(TAG + ":" + "updateDevicesInfo", "onNext: " + baseResponse); + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e(TAG + ":" + "updateDevicesInfo", "onError: " + e.getMessage()); + onComplete(); + } + + @Override + public void onComplete() { + Log.e(TAG + ":" + "updateDevicesInfo", "onComplete: "); + } + }); + } + + @Override + public void getSnTimeControl() { + if (JGYUtils.isOfficialVersion()) { + mView.getSnTimeControlFinish(); + return; + } + NetInterfaceManager.getInstance() + .getSnTimeObservable() + .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e(TAG + ":" + "getSnTimeControl", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse response) { + requestSucceeded = true; + Log.e(TAG + ":" + "getSnTimeControl", "onNext: "); + int code = response.code; + if (code == OK) { + JSONObject jsonObject = (JSONObject) JSON.toJSON(response.data); + String start_time = jsonObject.getString("start_time"); + String end_time = jsonObject.getString("end_time"); + TimeUtils.ContralTime c = TimeUtils.String2ContralTime(mContext, start_time + "-" + end_time); + if (null != c) { + Log.e(TAG + ":" + "getTimeControl", "OK:" + c.toString()); + } + } else { + TimeUtils.setEmpty(mContext); + TimeUtils.ContralTime c = TimeUtils.getDefaltContralTime(mContext); + if (null != c) { + Log.e(TAG + ":" + "getTimeControl", c.toString()); + } + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e(TAG + ":" + "getSnTimeControl", "onError: " + e.getMessage()); + onComplete(); + } + + @Override + public void onComplete() { + Log.e(TAG + ":" + "getSnTimeControl", "onComplete: "); + Intent intent = new Intent(); + intent.setAction(MainService.TimeChangedReceiver.ACTION_UPDATE); + mContext.sendBroadcast(intent); + mView.getSnTimeControlFinish(); + } + }); + + } + + @Override + public void getEBagCode() { + NetInterfaceManager.getInstance() + .getEBagCodeControl() + .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer() { + @Override + public void onSubscribe(Disposable d) { + Log.e(TAG + ":" + "getEBagCode", "onSubscribe: "); + } + + @Override + public void onNext(BaseResponse baseResponse) { + requestSucceeded = true; + Log.e(TAG + ":" + "getEBagCode", "onNext: " + baseResponse); + int code = baseResponse.code; + if (code == OK) { + JsonObject jsonObject = JsonParser.parseString(new Gson().toJson(baseResponse.data)).getAsJsonObject(); + String ebagCode = jsonObject.get("ebagCode").getAsString(); + SPUtils.put(mContext, "ebagCode", ebagCode); + } else { + Log.e(TAG + ":" + "getEBagCode", "onNext: " + baseResponse.data); + } + } + + @Override + public void onError(Throwable e) { + Log.e(TAG + ":" + "getEBagCode", "onError: " + e.getMessage()); + onComplete(); + } + + @Override + public void onComplete() { + Log.e(TAG + ":" + "getEBagCode", "onComplete: "); + mView.getEBagCodeFinish(); + } + }); + } + + @Override + public void setJpushAlias() { + mView.setAliasFinish(); + } + + @Override + public void setPushTags() { + NetInterfaceManager.getInstance() + .getJpushTagsObservable() + .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e(TAG + ":" + "setPushTags", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse response) { + requestSucceeded = true; + if (response.code == OK) { + JsonObject jsonObject = JsonParser.parseString(new Gson().toJson(response.data)).getAsJsonObject(); + String batch = jsonObject.get("batch").getAsString(); + Log.e(TAG + ":" + "setPushTags", "onNext: " + batch); + if (!TextUtils.isEmpty(batch)) { + mView.setTagsFinish(false); + Set set = new HashSet(); + set.add(batch); + JGYUtils.getInstance().getAppPlatform(new JGYUtils.GetAppPlatformCallback() { + @Override + public void AppPlatform(int platform) { + if (platform == JGYUtils.MTKPlatform) { + set.add(JGYUtils.MTKTag); + } else if (platform == JGYUtils.ZhanruiPlatform) { + set.add(JGYUtils.ZhanruiTag); + } + } + }); + Set tagsSet = new HashSet<>(set); + XGPushManager.clearAndAppendTags(mContext, "clearAndAppendTags :" + System.currentTimeMillis(), tagsSet, new XGIOperateCallback() { + @Override + public void onSuccess(Object o, int i) { + Log.e("setPushTags", "onSuccess: " + o); + } + + @Override + public void onFail(Object o, int i, String s) { + Log.e("setPushTags", "onFail: " + o); + } + }); +// setTag(set); + } else { + mView.setTagsFinish(true); + Log.e(TAG + ":" + "setPushTags", "onNext: " + "batch empty"); + } + } else { + mView.setTagsFinish(true); + Log.e(TAG + ":" + "setPushTags", "onNext: " + response.toString()); + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e(TAG + ":" + "setPushTags", "onError: " + e.getMessage()); + mView.setTagsFinish(true); + onComplete(); + } + + @Override + public void onComplete() { + Log.e(TAG + ":" + "setPushTags", "onComplete: "); + } + }); + } + + @Override + public void setJpushPlatformTags(int platform) { + mView.setJpushPlatformTagsFinish(); + } + +// private void setTag(Set set) { +// TagAliasOperatorHelper.TagAliasBean tagAliasBean = new TagAliasOperatorHelper.TagAliasBean(); +// tagAliasBean.action = ACTION_SET; +// sequence++; +// tagAliasBean.tags = set; +// tagAliasBean.isAliasAction = false; +// TagAliasOperatorHelper.getInstance().handleAction(mContext, sequence, tagAliasBean); +// } + + @Override + public void checkStoreUpdate() { + checkUpdateStore(); + } + + private void checkUpdateStore() { + NetInterfaceManager.getInstance() + .getUpdateApi() + .getUpdate(PackageNames.APPSTORE, + JGYUtils.getInstance().checkAppPlatform()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e(TAG + ":" + "checkUpdateStore", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse response) { + requestSucceeded = true; + Log.e(TAG + ":" + "checkUpdateStore", "onNext: " + response.data); + if (response.code == OK) { + JsonObject jsonObject = JsonParser.parseString(new Gson().toJson(response.data)).getAsJsonObject(); + JGYUtils.getInstance().installAPK(jsonObject); + } else { + Log.e(TAG + ":" + "checkUpdateStore", "onNext: " + response); + } + Log.e(TAG + ":" + "checkUpdateStore", "onNext: "); + + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e(TAG + ":" + "checkUpdateStore", "onError: " + e.getMessage()); + onComplete(); + } + + @Override + public void onComplete() { + Log.e(TAG + ":" + "checkUpdateStore", "onComplete: "); + mView.checkStoreUpdateFinish(); + } + }); + } + + @Override + public void checkInfoUpdate() { + NetInterfaceManager.getInstance() + .getUpdateApi() + .getUpdate(BuildConfig.APPLICATION_ID, + JGYUtils.getInstance().checkAppPlatform()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e("checkInfoUpdate", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse response) { + requestSucceeded = true; + Log.e("checkInfoUpdate", "onNext: " + response.data); + if (response.code == OK) { + JsonObject jsonObject = JsonParser.parseString(new Gson().toJson(response.data)).getAsJsonObject(); + JGYUtils.getInstance().installAPK(jsonObject); + } else { + Log.e("checkInfoUpdate", "onNext: " + response); + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e("checkInfoUpdate", "onError: " + e.getMessage()); + onComplete(); + } + + @Override + public void onComplete() { + Log.e("checkInfoUpdate", "onComplete: "); + mView.checkInfoUpdateFinish(); + } + }); + } + + @Override + public void checkDesktopUpdate() { + NetInterfaceManager.getInstance() + .getUpdateApi() + .getUpdate(PackageNames.DESKTOP, + JGYUtils.getInstance().checkAppPlatform()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e("checkDesktopUpdate", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse response) { + requestSucceeded = true; + Log.e("checkDesktopUpdate", "onNext: " + response.data); + if (response.code == OK) { + JsonObject jsonObject = JsonParser.parseString(new Gson().toJson(response.data)).getAsJsonObject(); + JGYUtils.getInstance().installAPK(jsonObject); + } else { + Log.e("checkDesktopUpdate", "onNext: " + response); + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e("checkDesktopUpdate", "onError: " + e.getMessage()); + onComplete(); + } + + @Override + public void onComplete() { + Log.e("checkDesktopUpdate", "onComplete: "); + mView.checkDesktopUpdateFinish(); + } + }); + } + + @Override + public void checkNotifyUpdate() { + NetInterfaceManager.getInstance() + .getUpdateApi() + .getUpdate(PackageNames.NOTIFICATIONS, + JGYUtils.getInstance().checkAppPlatform()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e("checkNotifyUpdate", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse response) { + requestSucceeded = true; + Log.e("checkNotifyUpdate", "onNext: " + response.data); + if (response.code == OK) { + JsonObject jsonObject = JsonParser.parseString(new Gson().toJson(response.data)).getAsJsonObject(); + JGYUtils.getInstance().installAPK(jsonObject); + } else { + Log.e("checkNotifyUpdate", "onNext: " + response); + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e("checkNotifyUpdate", "onError: " + e.getMessage()); + onComplete(); + } + + @Override + public void onComplete() { + Log.e("checkNotifyUpdate", "onComplete: "); + mView.checkNotifyUpdateFinish(); + } + }); + } + + @Override + public void checkBrowserUpdate() { + NetInterfaceManager.getInstance() + .getUpdateApi() + .getUpdate(PackageNames.BROWSER, + JGYUtils.getInstance().checkAppPlatform()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e("checkBrowserUpdate", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse response) { + requestSucceeded = true; + Log.e("checkBrowserUpdate", "onNext: " + response.data); + if (response.code == OK) { + JsonObject jsonObject = JsonParser.parseString(new Gson().toJson(response.data)).getAsJsonObject(); + JGYUtils.getInstance().installAPK(jsonObject); + } else { + Log.e("checkBrowserUpdate", "onNext: " + response); + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e("checkBrowserUpdate", "onError: " + e.getMessage()); + onComplete(); + } + + @Override + public void onComplete() { + Log.e("checkBrowserUpdate", "onComplete: "); + mView.checkBrowserUpdateFinish(); + } + }); + } + + long buttonCheckUpdateTime = 0; + + @Override + public void buttonCheckUpdate(View view) { +// if ((System.currentTimeMillis() - buttonCheckUpdateTime) < 10000) { +// buttonCheckUpdateTime = System.currentTimeMillis(); +// ToastUtil.show("正在检查更新"); +// } else { +// ToastUtil.show("你已经过检查,请稍后再来"); +// } + checkUpdateInfo(); + } + + private void checkUpdateInfo() { + NetInterfaceManager.getInstance() + .getUpdateApi() + .getUpdate(BuildConfig.APPLICATION_ID, + JGYUtils.getInstance().checkAppPlatform()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e(TAG + ":" + "checkUpdateInfo", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse response) { + requestSucceeded = true; + Log.e(TAG + ":" + "checkUpdateInfo", "onNext: " + response); + if (response.code == OK) { + JsonObject jsonObject = JsonParser.parseString(new Gson().toJson(response.data)).getAsJsonObject(); + long versionCode = jsonObject.get("version_code").getAsLong(); + PackageManager pm = mContext.getPackageManager(); + PackageInfo info = null; + try { + info = pm.getPackageInfo(BuildConfig.APPLICATION_ID, 0); + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + if (null == info || info.versionCode < versionCode) { + mView.buttonCheckUpdateFinish(true, jsonObject); + } else { + mView.buttonCheckUpdateFinish(false, null); + } + } else { + mView.buttonCheckUpdateFinish(false, null); + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e(TAG + ":" + "checkUpdateInfo", "onError: " + e.getMessage()); + onComplete(); + } + + @Override + public void onComplete() { + Log.e(TAG + ":" + "checkUpdateInfo", "onComplete: "); + } + }); + } + + /** + * 获取灰度测试更新 + */ + @Override + public void checkTestUpdate() { + NetInterfaceManager.getInstance() + .getTestUpdateObservable() + .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer>>() { + @Override + public void onSubscribe(Disposable d) { + Log.e(TAG + ":" + "checkTestUpdate", "onSubscribe: "); + } + + @Override + public void onNext(BaseResponse> listBaseResponse) { + requestSucceeded = true; + Log.e(TAG + ":" + "checkTestUpdate", "onNext: " + listBaseResponse.data); + if (listBaseResponse.code == OK) { + List APPlist = listBaseResponse.data; + JGYUtils.getInstance().installTestAPK(APPlist); + } else { + Log.e(TAG + ":" + "checkTestUpdate", "onNext: " + listBaseResponse.msg); + } + } + + @Override + public void onError(Throwable e) { + Log.e(TAG + ":" + "checkTestUpdate", "onError: " + e.getMessage()); + onComplete(); + } + + @Override + public void onComplete() { + Log.e(TAG + ":" + "checkTestUpdate", "onComplete: "); + mView.checkTestUpdateFinish(); + } + }); + } + + + @Override + public void getSystemSettingbegin() { + //重置设备 + JGYUtils.getInstance().resetDevice(); + mView.getSystemSettingbegin(); + ToastUtil.betaShow("开始获取管控"); + } + + @Override + public void getAppLimit() { + NetInterfaceManager.getInstance() + .getAppLimitObservable() + .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e(TAG + ":" + "getAppLimit", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull ResponseBody responseBody) { + requestSucceeded = true; + try { + String bodyString = responseBody.string(); + Log.e(TAG + ":" + "getAppLimit", "onNext: " + bodyString); + JsonObject jsonObject = JsonParser.parseString(bodyString).getAsJsonObject(); + int code = jsonObject.get("code").getAsInt(); + if (code == OK) { + String data = jsonObject.get("data").getAsJsonObject().get("result").getAsString(); + //开机图标 + boolean write = Settings.System.putString(mContext.getContentResolver(), JGYActions.ACTION_JGY_SHORTCUTLIST, data); + Log.e(TAG, "onNext: only_jgy_shortcut_list: " + write); + JGYUtils.getInstance().writeAppPackageList(mContext, data); + mView.getAppLimitFinish(data); + } else { + boolean write = Settings.System.putString(mContext.getContentResolver(), JGYActions.ACTION_JGY_SHORTCUTLIST, " "); + JGYUtils.getInstance().writeAppPackageList(mContext, ""); + Log.e(TAG, "onNext: only_jgy_shortcut_list: " + write); + Log.e(TAG + ":" + "getAppLimit", "onNext: " + bodyString); + mView.getAppLimitFinish(""); + } + } catch (IOException e) { + e.printStackTrace(); + Log.e(TAG + ":" + "getAppLimit", "onNext: IOException: " + e.getMessage()); + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e(TAG + ":" + "getAppLimit", "onError: " + e.getMessage()); + String oldListString = Settings.System.getString(mContext.getContentResolver(), JGYActions.ACTION_JGY_SHORTCUTLIST); + Log.e(TAG + ":" + "getAppLimit", "oldListString: " + oldListString); + mView.getAppLimitFinish(oldListString); + } + + @Override + public void onComplete() { + Log.e(TAG + ":" + "getAppLimit", "onComplete: "); + } + }); + } + + @Override + public void getDeviceBatch(String packageList) { +// if (JGYUtils.isOfficialVersion() || TextUtils.isEmpty(packageList)) { +// mView.getDeviceBatchFinished(); +// return; +// } + int locked = Settings.System.getInt(mContext.getContentResolver(), JGYActions.ACTION_QCH_UNLOCK_IPAD, 0); + Log.e(TAG, "getDeviceBatch: " + locked); + if (locked == 0) { +// NetInterfaceManager.getInstance() +// .getBatchObservable() +// .observeOn(Schedulers.io()) +// .subscribe(new Observer() { +// @Override +// public void onSubscribe(@NonNull Disposable d) { +// Log.e(TAG+":"+"getDeviceBatch", "onSubscribe: "); +// } +// +// @Override +// public void onNext(@NonNull ResponseBody responseBody) { +// Log.e(TAG+":"+"getDeviceBatch", "onNext: "); +// try { +// String respons = responseBody.string(); +// JSONObject jsonObject = JSON.parseObject(respons); +// int code = jsonObject.getInteger("code"); +// if (code == OK) { +// String data = jsonObject.getString("data"); +// List batchList = JSON.parseArray(data, Batch.class); +// if (null != batchList && batchList.size() > 1) { +// Log.e(TAG+":"+"getDeviceBatch", "onNext: " + "deleteOtherApp"); +// if (!BuildConfig.DEBUG) { + JGYUtils.getInstance().deleteOtherApp(); +// } +// } else { +// Log.e(TAG+":"+"getDeviceBatch", "批次为空"); +// Log.e(TAG+":"+"getDeviceBatch", "onNext: respons:" + respons); +// } +// } +// } catch (IOException e) { +// e.printStackTrace(); +// } +// } +// +// @Override +// public void onError(@NonNull Throwable e) { +// Log.e(TAG+":"+"getDeviceBatch", "onError: " + e.getMessage()); +// onComplete(); +// } +// +// @Override +// public void onComplete() { +// Log.e(TAG+":"+"getDeviceBatch", "onComplete: "); + mView.getDeviceBatchFinish(); +// } +// }); + // mView.getDeviceBatchFinished(); + } + } + + @Override + public void getForceDownload() { + NetInterfaceManager.getInstance() + .getForceDownloadObservable() + .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e(TAG + ":" + "getForceDownload", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull ForceDownloadBean forceDownloadBean) { + requestSucceeded = true; + Log.e(TAG + ":" + "getForceDownload", "onNext: "); + switch (forceDownloadBean.getCode()) { + case OK: + Log.e(TAG + ":" + "getForceDownload", "isDownloading=" + BaseApplication.getInstance().isDownloading()); + BaseApplication.getInstance().checkIsDownloading(); + if (!BaseApplication.getInstance().isDownloading()) { + Type type = new TypeToken>() { + }.getType(); + Gson gson = new Gson(); + List forceDownloadData = gson.fromJson(gson.toJson(forceDownloadBean.getData()), type); + JGYUtils.getInstance().forceDownload(forceDownloadData); + } else { + Aria.download(this).resumeAllTask(); + } + break; + case -200: + boolean qch_force_app = Settings.System.putString(mContext.getContentResolver(), "qch_force_app", "invalid"); + Log.e(TAG + ":" + "getForceDownload", "qch_force_app:" + qch_force_app); + break; + default: + Log.e(TAG + ":" + "getForceDownload", forceDownloadBean.getMsg()); + break; + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e(TAG + ":" + "getForceDownload", "onError: " + e.getMessage()); + onComplete(); + } + + @Override + public void onComplete() { + Log.e(TAG + ":" + "getForceDownload", "onComplete: "); + mView.getForceDownloadFinish(); + } + }); + } + + // TODO: 2021/6/8 使用现有代码会影响浏览器主页管控 +// @Override +// public void getBrowserList() { +//// if (JGYUtils.isOfficialVersion()) { +// SetBrowserList(); +//// } else { +//// NewSetBrowserList(); +//// } +// } + + @Override + public void getBrowserList() { +// NetInterfaceManager.getInstance() + //// .getBrowserListSettingObservable() + //// .observeOn(Schedulers.io()) + //// .subscribe(new Observer>() { + //// @Override + //// public void onSubscribe(@NonNull Disposable d) { + //// Log.e(TAG + ":" + "getBrowserList", "onSubscribe: "); + //// } + //// + //// @Override + //// public void onNext(@NonNull BaseResponse browserDataBaseResponse) { + //// Log.e(TAG + ":" + "getBrowserList", "onNext: "); + //// if (browserDataBaseResponse.code == OK) { + //// String white = browserDataBaseResponse.data.getWhite(); + //// + //// if (!TextUtils.isEmpty(white)) { + //// String homePage = Settings.System.getString(mContext.getContentResolver(), "homepagURL"); + //// if (!TextUtils.isEmpty(homePage) && !white.contains(homePage)) { + //// white += "," + homePage; + //// } + //// boolean whiteList = Settings.System.putString(mContext.getContentResolver(), "DeselectBrowserArray", white); + //// Log.e(TAG + ":" + "getBrowserList", "setBrowserList white: " + white + ":" + whiteList); + //// mView.getBrowserListFinished(white); + //// } else { + //// Settings.System.putString(mContext.getContentResolver(), "DeselectBrowserArray", " "); + //// mView.getBrowserListFinished(""); + //// } + //// String black = browserDataBaseResponse.data.getBlack(); + //// if (!TextUtils.isEmpty(black)) { + //// boolean blackList = Settings.System.putString(mContext.getContentResolver(), "qch_webblack_url", black); + //// Log.e(TAG + ":" + "getBrowserList", "setBrowserList black: " + black + ":" + blackList); + //// } else { + //// Settings.System.putString(mContext.getContentResolver(), "qch_webblack_url", " "); + //// } + //// } else { + //// mView.getBrowserListFinished(""); + //// } + //// } + //// + //// @Override + //// public void onError(@NonNull Throwable e) { + //// Log.e(TAG + ":" + "getBrowserList", "onError: " + e.getMessage()); + //// String whiteURLList = Settings.System.getString(mContext.getContentResolver(), "DeselectBrowserArray"); + //// Log.e(TAG + ":" + "getBrowserList", "whiteURLList: " + whiteURLList); + //// mView.getBrowserListFinished(whiteURLList); + //// onComplete(); + //// } + //// + //// @Override + //// public void onComplete() { + //// Log.e(TAG + ":" + "getBrowserList", "onComplete: "); + //// } + //// }); + // //获取书签后会获取黑白名单 + Log.e(TAG, "getBrowserList: "); + mView.getBrowserListFinish(""); + } + +// private void NewSetBrowserList() { +// NetInterfaceManager.getInstance() +// .getBrowserListSettingObservable() +// .observeOn(Schedulers.io()) +// .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) +// .subscribe(new Observer>() { +// @Override +// public void onSubscribe(@NonNull Disposable d) { +// Log.e(TAG + ":" + "NewSetBrowserList", "onSubscribe: "); +// } +// +// @Override +// public void onNext(@NonNull BaseResponse browserDataBaseResponse) { +// Log.e(TAG + ":" + "NewSetBrowserList", "onNext: "); +// if (browserDataBaseResponse.code == OK) { +// String white = browserDataBaseResponse.data.getWhite(); +// String black = browserDataBaseResponse.data.getBlack(); +// if (!TextUtils.isEmpty(white) && !TextUtils.isEmpty(black)) { +// Settings.System.putInt(mContext.getContentResolver(), "qch_website_isBlackWebUrl", 0); +// Settings.System.putString(mContext.getContentResolver(), "BlackBrowserArray", " "); +// //黑白名单同时存在时由以前的逻辑管控 +// boolean whiteList = Settings.System.putString(mContext.getContentResolver(), "DeselectBrowserArray", white); +// Log.e(TAG + ":" + "setBrowserList", "setBrowserList white: " + white + ":" + whiteList); +// boolean blackList = Settings.System.putString(mContext.getContentResolver(), "qch_webblack_url", black); +// Log.e(TAG + ":" + "setBrowserList", "setBrowserList black: " + black + ":" + blackList); +// mView.getBrowserListFinished(white); +// } else if (TextUtils.isEmpty(white)) { +// //设置黑名单 +// Settings.System.putInt(mContext.getContentResolver(), "qch_website_isBlackWebUrl", 1); +// Settings.System.putString(mContext.getContentResolver(), "BlackBrowserArray", black); +// //白名单为空由新的管控执行 +// mView.getBrowserListFinished(""); +// Settings.System.putString(mContext.getContentResolver(), "qch_webblack_url", " "); +// } else if (TextUtils.isEmpty(black)) { +// Settings.System.putInt(mContext.getContentResolver(), "qch_website_isBlackWebUrl", 0); +// Settings.System.putString(mContext.getContentResolver(), "BlackBrowserArray", " "); +// //黑名单为空由旧的管控执行 +// mView.getBrowserListFinished(white); +// Settings.System.putString(mContext.getContentResolver(), "qch_webblack_url", " "); +// } +// } else { +// //所有置空 +// Settings.System.putInt(mContext.getContentResolver(), "qch_website_isBlackWebUrl", 0); +// Settings.System.putString(mContext.getContentResolver(), "BlackBrowserArray", " "); +// mView.getBrowserListFinished(""); +// Settings.System.putString(mContext.getContentResolver(), "qch_webblack_url", " "); +// } +// } +// +// @Override +// public void onError(@NonNull Throwable e) { +// Log.e(TAG + ":" + "NewSetBrowserList", "onError: " + e.getMessage()); +// onComplete(); +// } +// +// @Override +// public void onComplete() { +// Log.e(TAG + ":" + "NewSetBrowserList", "onComplete: "); +// } +// }); +// } + +// private void SetBrowserList() { +// NetInterfaceManager.getInstance() +// .getBrowserListSettingObservable() +// .observeOn(Schedulers.io()) +// .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) +// .subscribe(new Observer>() { +// @Override +// public void onSubscribe(@NonNull Disposable d) { +// Log.e(TAG + ":" + "SetBrowserList", "onSubscribe: "); +// } +// +// @Override +// public void onNext(@NonNull BaseResponse browserDataBaseResponse) { +// Settings.System.putInt(mContext.getContentResolver(), "qch_website_isBlackWebUrl", 0); +// Log.e(TAG + ":" + "SetBrowserList", "onNext: "); +// if (browserDataBaseResponse.code == OK) { +// //白名单 +// String white = browserDataBaseResponse.data.getWhite(); +// if (!TextUtils.isEmpty(white)) { +// String homePage = Settings.System.getString(mContext.getContentResolver(), "homepagURL"); +// if (!TextUtils.isEmpty(homePage) && !white.contains(homePage)) { +// white += "," + homePage; +// } +// boolean whiteList = Settings.System.putString(mContext.getContentResolver(), "DeselectBrowserArray", white); +// Log.e(TAG + ":" + "SetBrowserList", "setBrowserList white: " + white + " :" + whiteList); +// String black = Settings.System.getString(mContext.getContentResolver(), "qch_webblack_url"); +// Log.e(TAG + ":" + "SetBrowserList", "getBrowserList black: " + black); +// mView.getBrowserListFinished(white); +// } else { +// Settings.System.putString(mContext.getContentResolver(), "DeselectBrowserArray", " "); +// mView.getBrowserListFinished(""); +// } +// //黑名单 +// String black = browserDataBaseResponse.data.getBlack(); +// if (!TextUtils.isEmpty(black)) { +// boolean blackList = Settings.System.putString(mContext.getContentResolver(), "qch_webblack_url", black); +// Log.e(TAG + ":" + "SetBrowserList", "setBrowserList black: " + black + " :" + blackList); +// String whiteList = Settings.System.getString(mContext.getContentResolver(), "DeselectBrowserArray"); +// Log.e(TAG + ":" + "SetBrowserList", "getBrowserList white: " + whiteList); +// } else { +// Settings.System.putString(mContext.getContentResolver(), "qch_webblack_url", " "); +// } +// } else { +// mView.getBrowserListFinished(""); +// } +// } +// +// @Override +// public void onError(@NonNull Throwable e) { +// Log.e(TAG + ":" + "SetBrowserList", "onError: " + e.getMessage()); +// String whiteURLList = Settings.System.getString(mContext.getContentResolver(), "DeselectBrowserArray"); +// Log.e(TAG + ":" + "SetBrowserList", "whiteURLList: " + whiteURLList); +// mView.getBrowserListFinished(whiteURLList); +// } +// +// @Override +// public void onComplete() { +// Log.e(TAG + ":" + "SetBrowserList", "onComplete: "); +// } +// }); +// } + + @Override + public void getBrowserBookmarks(String whitelist) { +// Log.e(TAG, "getBrowserBookmarks: " + "whitelist: " + whitelist); +// List whiteLists = Arrays.asList(whitelist.split(",")); +// NetInterfaceManager.getInstance() +// .getBrowserBookmarksObservable() +// .observeOn(Schedulers.io()) +// .subscribe(new Observer>() { +// @Override +// public void onSubscribe(@NonNull Disposable d) { +// Log.e(TAG+":"+"getBrowserBookmarks", "onSubscribe: "); +// } +// +// @Override +// public void onNext(@NonNull BaseResponse browserBookmarksBaseResponse) { +// Log.e(TAG+":"+"getBrowserBookmarks", "onNext: "); +// StringBuilder whiteString = new StringBuilder(whitelist); +// if (browserBookmarksBaseResponse.code == OK) { +// //主页不包含白名单添加进去 +// String homepagURL = browserBookmarksBaseResponse.data.getHomepage(); +//// boolean home = Settings.System.putString(mContext.getContentResolver(), "homepagURL", homepagURL); +//// Log.e(TAG+":"+"getBrowserBookmarks", "onNext: homepagURL: save homepagURL = " + homepagURL); +// if (whiteLists.size() <= 0 || !whiteLists.contains(homepagURL)) { +// whiteString.append(",").append(homepagURL); +// Log.e(TAG+":"+"getBrowserBookmarks ", "homepagURL: " + homepagURL); +// boolean white = Settings.System.putString(mContext.getContentResolver(), "DeselectBrowserArray", whiteString.toString()); +// Log.e(TAG+":"+"getBrowserBookmarks", "onNext: homepagURL: add to whiteList = " + whiteString + "write: " + white); +// } +// //主页 +// Intent homepag = new Intent("qch_app_brower_homepage"); +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { +// homepag.setPackage("com.android.settings") +// .setPackage("com.android.browser"); +// } +// if (!TextUtils.isEmpty(homepagURL)) { +// homepag.putExtra("homepage", homepagURL); +// } else { +// homepag.putExtra("homepage", "Invalid"); +// } +// mContext.sendBroadcast(homepag); +// +// //书签 +// String labelpage = browserBookmarksBaseResponse.data.getLabelpage(); +// Intent websiteBookMark = new Intent("qch_app_brower_website"); +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { +// websiteBookMark.setPackage("com.android.settings") +// .setPackage("com.android.browser"); +// } +// if (!TextUtils.isEmpty(labelpage)) { +// websiteBookMark.putExtra("websiteBookMark", labelpage); +// } else { +// websiteBookMark.putExtra("websiteBookMark", "Invalid"); +// } +// mContext.sendBroadcast(websiteBookMark); +// } else { +// Intent intent1 = new Intent("qch_app_brower_homepage"); +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { +// intent1.setPackage("com.android.settings") +// .setPackage("com.android.browser"); +// } +// intent1.putExtra("homepage", "Invalid"); +// mContext.sendBroadcast(intent1); +// +// Settings.System.putString(mContext.getContentResolver(), "homepagURL", ""); +// Intent intent2 = new Intent("qch_app_brower_website"); +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { +// intent2.setPackage("com.android.settings") +// .setPackage("com.android.browser"); +// } +// intent2.putExtra("websiteBookMark", "Invalid"); +// mContext.sendBroadcast(intent2); +// } +// } +// +// @Override +// public void onError(@NonNull Throwable e) { +// Log.e(TAG+":"+"getBrowserBookmarks", "onError: " + e.getMessage()); +// onComplete(); +// } +// +// @Override +// public void onComplete() { +// Log.e(TAG+":"+"getBrowserBookmarks", "onComplete: "); +// mView.getBrowserBookmarksFinished(); +// } +// }); + HTTPInterface.getHomePageBookmarks(mContext, new HTTPInterface.BookmarksCallback() { + @Override + public void onSubscribe() { + Log.e(TAG + ":" + "getBrowserBookmarks", "onSubscribe: "); + } + + @Override + public void onNext() { + requestSucceeded = true; + Log.e(TAG + ":" + "getBrowserBookmarks", "onNext: "); + } + + @Override + public void onError(Throwable e) { + Log.e(TAG + ":" + "getBrowserBookmarks", "onError: " + e.getMessage()); + } + + @Override + public void onComplete() { + Log.e(TAG + ":" + "getBrowserBookmarks", "onComplete: "); +// String homepagURL = Settings.System.getString(mContext.getContentResolver(), "homepagURL"); +// HashSet hashSet = new HashSet<>(Arrays.asList(whitelist.split(","))); +// hashSet.add(homepagURL); +// String DeselectBrowserArray = String.join(",", hashSet); +// if (Utils.isEmpty(DeselectBrowserArray)) { +// Settings.System.putString(mContext.getContentResolver(), "DeselectBrowserArray", " "); +// } else { +// Settings.System.putString(mContext.getContentResolver(), "DeselectBrowserArray", DeselectBrowserArray); +// } + if (mView != null) { + mView.getBrowserBookmarksFinish(); + } + } + }); + } + + @Override + public void getBrowserWhiteList() { +// new URLUtils(mContext).setBrowserWhiteList(); + new URLUtils(mContext).setBrowserBlackList(); + +// try { +// int qch_website_isBlackWebUrl = Settings.System.getInt(mContext.getContentResolver(), "qch_website_isBlackWebUrl"); +// String BlackBrowserArray = Settings.System.getString(mContext.getContentResolver(), "BlackBrowserArray"); +// String DeselectBrowserArray = Settings.System.getString(mContext.getContentResolver(), "DeselectBrowserArray"); +// String qch_webblack_url = Settings.System.getString(mContext.getContentResolver(), "qch_webblack_url"); +// Log.e(TAG+":"+"getBrowserWhiteList", "qch_website_isBlackWebUrl: " + qch_website_isBlackWebUrl); +// Log.e(TAG+":"+"getBrowserWhiteList", "BlackBrowserArray: " + BlackBrowserArray); +// Log.e(TAG+":"+"getBrowserWhiteList", "DeselectBrowserArray: " + DeselectBrowserArray); +// Log.e(TAG+":"+"getBrowserWhiteList", "qch_webblack_url: " + qch_webblack_url); +// } catch (Settings.SettingNotFoundException e) { +// e.printStackTrace(); +// } + } + + @Override + public void getDesktopIcon() { + NetInterfaceManager.getInstance() + .getDesktopIconObservable() + .observeOn(Schedulers.io()) + .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e(TAG + ":" + "getDesktopIcon", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse response) { + requestSucceeded = true; + Log.e(TAG + ":" + "getDesktopIcon", "onNext: "); + ApkUtils.showAllAPP(mContext); + if (response.code == OK) { + String data = response.data.toString(); + Log.e(TAG + ":" + "getDesktopIcon", "data: " + data); + if (!TextUtils.isEmpty(data)) { + List newList = Arrays.asList(data.split(","));//新的list + PackageManager pm = mContext.getPackageManager(); + for (String pack : newList) { + try { + // TODO: 2021/5/24 需要后端替换包名,暂时解决方案 + try { + if ("com.mediatek.camera".equals(pack)) { + pm.setApplicationEnabledSetting("com.android.camera2", PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0); + } + if ("com.android.mms".equals(pack)) { + pm.setApplicationEnabledSetting("com.android.messaging", PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0); + } + } catch (Exception ex) { + Log.e(TAG + ":" + "getDesktopIcon", "Exception: ex: " + ex.getMessage()); + } + pm.setApplicationEnabledSetting(pack, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0); + Log.e(TAG + ":" + "getDesktopIcon", pack); + } catch (Exception e) { + Log.e(TAG + ":" + "getDesktopIcon", "Exception: " + e.getMessage()); + } + } + } + } else { + Log.e(TAG + ":" + "getDesktopIcon", "onNext: " + response.toString()); + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e(TAG + ":" + "getDesktopIcon", "onError: " + e.getMessage()); + onComplete(); + } + + @Override + public void onComplete() { + Log.e(TAG + ":" + "getDesktopIcon", "onComplete: "); + mView.getDesktopIconFinish(); + } + }); + } + + @Override + public void getAppAutoStartUpdateAndNet() { + NetInterfaceManager.getInstance() + .getAppAutoStartUpdateAndNetObservable() + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e(TAG + ":" + "getAppAutoStart", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull NetAndLaunchBean netAndLaunchBean) { + requestSucceeded = true; + Log.e(TAG + ":" + "getAppAutoStart", "onNext: " + netAndLaunchBean.toString()); + if (netAndLaunchBean.getCode() == OK) { + JGYUtils.getInstance().setNetAndlaunch(netAndLaunchBean); + } else { + Log.e(TAG + ":" + "getAppAutoStart", "onNext: " + netAndLaunchBean.toString()); + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e(TAG + ":" + "getAppAutoStart", "onError: " + e.getMessage()); + onComplete(); + } + + @Override + public void onComplete() { + Log.e(TAG + ":" + "getAppAutoStart", "onComplete: "); + mView.getAppAutoStartUpdateAndNetFinish(); + } + }); + } + + @Override + public void getAppIDControl() { + NetInterfaceManager.getInstance() + .getAppIDControlObservable() + .observeOn(Schedulers.io()) + .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e(TAG + ":" + "getAppIDControl", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull ResponseBody responseBody) { + requestSucceeded = true; + Log.e(TAG + ":" + "getAppIDControl", "onNext: "); + try { + String bodyString = responseBody.string(); + Log.e(TAG + ":" + "getAppIDControl", "bodyString: " + bodyString); + JsonObject jsonObject = JsonParser.parseString(bodyString).getAsJsonObject(); + int code = jsonObject.get("code").getAsInt(); + if (code == OK) { + JsonObject data = jsonObject.getAsJsonObject("data"); + JsonElement ids = data.get("ids"); + JsonElement packages = data.get("package"); + if (null == ids || null == packages) { + JGYUtils.getInstance().writeDeselectIDtoSystem("", ""); + } else { + JGYUtils.getInstance().writeDeselectIDtoSystem(ids.getAsString(), packages.getAsString()); + } + } else { + JGYUtils.getInstance().writeDeselectIDtoSystem("", ""); + Log.e(TAG + ":" + "getAppIDControl", "onNext: " + bodyString); + } + } catch (IOException e) { + e.printStackTrace(); + Log.e(TAG + ":" + "getAppIDControl", "onNext: IOException: " + e.getMessage()); + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e(TAG + ":" + "getAppIDControl", "onError: " + e.getMessage()); + onComplete(); + } + + @Override + public void onComplete() { + Log.e(TAG + ":" + "getAppIDControl", "onComplete: "); + mView.getAppIDControlFinish(); + } + }); + } + + @Override + public void setAppinsideWeb() { + Log.e(TAG, "setAppinsideWeb: "); + HTTPInterface.getAppinsideWeb(mContext, new HTTPInterface.GetAppinsideWebCallback() { + @Override + public void onComplete() { + Log.e(TAG, "setAppinsideWeb: " + "onComplete"); + if (mView != null) { + mView.setAppinsideWebFinish(); + } + } + }); + } + + + @Override + public void setSystemSetting() { + NetInterfaceManager.getInstance() + .getSystemSettingObservable() + .observeOn(Schedulers.io()) + .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e(TAG + ":" + "setSystemSetting", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull ResponseBody responseBody) { + requestSucceeded = true; + SPUtils.put(mContext, CommonConfig.JGY_FIRST_CONNECT, 1); + try { + String bodyString = responseBody.string(); + Log.e(TAG + ":" + "setSystemSetting", "onNext: " + bodyString); + JsonObject jsonObject = JsonParser.parseString(bodyString).getAsJsonObject(); + int code = jsonObject.get("code").getAsInt(); + if (code == OK) { + String data = jsonObject.getAsJsonObject("data").toString(); + //结果保存到本地 + JGYUtils.getInstance().SettingSysData(data); + } else { + //没有数据全部关闭 +// SysSettingUtils.setDisableSetting(mContext); +// SPUtils.put(mContext, "SystemSettingData", ""); + JGYUtils.getInstance().SettingSysData(""); + //获取系统管控先不要关闭开发人员选项 + if (!BuildConfig.DEBUG) { + Settings.System.putInt(mContext.getContentResolver(), "qch_Developeroptions", 1); + } + } + } catch (IOException e) { + e.printStackTrace(); + Log.e(TAG + ":" + "setSystemSetting", "onNext: IOException: " + e.getMessage()); + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e(TAG + ":" + "setSystemSetting", "onError: " + e.getMessage()); + String oldData = (String) SPUtils.get(mContext, "SystemSettingData", ""); + Log.e(TAG + ":" + "setSystemSetting", "oldData: " + oldData); + JGYUtils.getInstance().SettingSysData(oldData); + onComplete(); + } + + @Override + public void onComplete() { + Log.e(TAG + ":" + "setSystemSetting", "onComplete: "); + mView.setSystemSettingFinish(); + } + }); + + } + + @Override + public void getDefaultApp() { + NetInterfaceManager.getInstance() + .getDefaultAppApi() + .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer>() { + @Override + public void onSubscribe(Disposable d) { + Log.e("getDefaultApp", "onSubscribe: "); + } + + @Override + public void onNext(BaseResponse defaultAppBaseResponse) { + requestSucceeded = true; + Log.e("getDefaultApp", "onNext: " + JSONObject.toJSONString(defaultAppBaseResponse.data)); + int code = defaultAppBaseResponse.code; + if (code == OK) { + DefaultApp defaultApp = defaultAppBaseResponse.data; + JGYUtils.getInstance().setDefaultDesktop(defaultApp.getDefault_launcher()); + if (defaultApp.getDefault_launcher() != null) { + SPUtils.put(mContext, "default_launcher", defaultApp.getDefault_launcher()); + } + } else { + Log.e("getDefaultApp", "onNext: " + defaultAppBaseResponse.msg); + } + } + + @Override + public void onError(Throwable e) { + Log.e("getDefaultApp", "onError: " + e.getMessage()); + onComplete(); + } + + @Override + public void onComplete() { + Log.e("getDefaultApp", "onComplete: "); + mView.setDefaultAppFinish(); + } + }); + } + + @Override + public void getROMApp() { + String customVersion = Utils.getCustomVersion(); + Log.e(TAG, "getROMApp: " + customVersion); + NetInterfaceManager.getInstance().getCustomROMAppApi() + .getROMApp(NetInterfaceManager.HTTP_KEY, customVersion) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer() { + @Override + public void onSubscribe(Disposable d) { + Log.e(TAG + ":" + "getROMApp", "onSubscribe: "); + } + + @Override + public void onNext(BaseResponse baseResponse) { + requestSucceeded = true; + Log.e(TAG + ":" + "getROMApp", "onNext: " + baseResponse); + if (baseResponse.code == OK) { + JsonObject jsonObject = JsonParser.parseString(new Gson().toJson(baseResponse.data)).getAsJsonObject(); + String packageName = jsonObject.get("package_name").getAsString(); + Settings.System.putString(mContext.getContentResolver(), "jgy_customromapp", packageName); + } else { + Log.e(TAG + ":" + "getROMApp", "onNext: " + baseResponse.msg); + Settings.System.putString(mContext.getContentResolver(), "jgy_customromapp", " "); +// onComplete(); + } + } + + @Override + public void onError(Throwable e) { + Log.e(TAG + ":" + "getROMApp", "onError: " + e.getMessage()); + onComplete(); + } + + @Override + public void onComplete() { + Log.e(TAG + ":" + "getROMApp", "onComplete: "); + mView.getROMAppFinish(); + } + }); + } + + @Override + public void getDeveloper() { + NetInterfaceManager.getInstance() + .getDeveloperControl() + .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer() { + @Override + public void onSubscribe(Disposable d) { + Log.e(TAG + ":" + "getDeveloper", "onSubscribe: "); + } + + @Override + public void onNext(BaseResponse baseResponse) { + requestSucceeded = true; + if (baseResponse.code == OK) { + JSONObject jsonObject = (JSONObject) JSON.toJSON(baseResponse.data); + int is_developer = jsonObject.getInteger("is_developer"); + Log.e(TAG + ":" + "getDeveloper", "onNext: " + is_developer); + //后台1是0否 底层0是1否 + JGYUtils.getInstance().setDeveloperOptions(is_developer == 0 ? 1 : 0); + } else { + JGYUtils.getInstance().setDeveloperOptions(1); + } + } + + @Override + public void onError(Throwable e) { + Log.e(TAG + ":" + "getDeveloper", "onError: " + e.getMessage()); + if (!BuildConfig.DEBUG) { + int oldStatus = Settings.System.getInt(mContext.getContentResolver(), "qch_Developeroptions", 1); + Log.e(TAG + ":" + "getDeveloper", "oldStatus: " + oldStatus); + JGYUtils.getInstance().setDeveloperOptions(oldStatus); + } + onComplete(); + } + + @Override + public void onComplete() { + mView.getDeveloperFinish(); + Log.e(TAG + ":" + "getDeveloper", "onComplete: "); + } + }); + } + + @Override + public void setLogoImg() { + if (JGYUtils.isOfficialVersion()) { + mView.setLogoImgFinish(); + return; + } + NetInterfaceManager.getInstance() + .getLogoImgObservable() + .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer>() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e(TAG + ":" + "setLogoImg", "onSubscribe: "); + + } + + @Override + public void onNext(@NonNull BaseResponse logoImgBaseResponse) { + requestSucceeded = true; + Log.e(TAG + ":" + "setLogoImg", "onNext: " + logoImgBaseResponse.data); + if (logoImgBaseResponse.code == OK) { + LogoImg logoImg = logoImgBaseResponse.data; + String file_url = logoImg.getFile_url(); + String file_md5 = logoImg.getFile_md5(); + String batch = logoImg.getBatch(); + if (TextUtils.isEmpty(file_url)) { + Log.e(TAG + ":" + "setLogoImg", "onNext: file_url is empty"); + } else { + JGYUtils.getInstance().checkBootFile(file_url, file_md5); + } + } else { + Log.e(TAG + ":" + "setLogoImg", "onNext: delete"); + JGYUtils.getInstance().removeBootanimation(); + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e(TAG + ":" + "setLogoImg", "onError: " + e.getMessage()); + onComplete(); + } + + @Override + public void onComplete() { + Log.e(TAG + ":" + "setLogoImg", "onComplete: "); + mView.setLogoImgFinish(); + } + }); + } + + @Override + public void setTopApp() { + if (JGYUtils.isOfficialVersion()) { + mView.setTopAppFinish(); + return; + } + NetInterfaceManager.getInstance() + .getTopAppControl() + .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer() { + @Override + public void onSubscribe(Disposable d) { + Log.e(TAG + ":" + "setTopApp", "onSubscribe: "); + } + + @Override + public void onNext(BaseResponse response) { + requestSucceeded = true; + Log.e(TAG + ":" + "setTopApp", "onNext: " + response.data); + if (response.code == OK) { + JSONObject jsonObject = (JSONObject) JSON.toJSON(response.data); + String app_package = jsonObject.getString("app_package"); + ForegroundAppUtil.setTopAppClass(mContext, app_package); + SPUtils.put(mContext, ForegroundAppUtil.TOPAPP_KEY, app_package); + ForegroundAppUtil.openTopApp(mContext); + } else { + ForegroundAppUtil.setTopAppClass(mContext, ""); + SPUtils.put(mContext, ForegroundAppUtil.TOPAPP_KEY, ""); + } + } + + @Override + public void onError(Throwable e) { + Log.e(TAG + ":" + "setTopApp", "onError: " + e.getMessage()); + onComplete(); + } + + @Override + public void onComplete() { + Log.e(TAG + ":" + "setTopApp", "onComplete: "); + mView.setTopAppFinish(); + ToastUtil.betaShow("获取管控结束"); + } + }); + } + + //上次运行的时间 + private long lastRunTime; + + @Override + synchronized public void getScreenLockState() { + if (System.currentTimeMillis() - lastRunTime < 60 * 1000) { + Log.e(TAG, "getScreenLockState: " + lastRunTime); + return; + } + lastRunTime = System.currentTimeMillis(); + int locked = Settings.System.getInt(mContext.getContentResolver(), JGYActions.ACTION_QCH_UNLOCK_IPAD, 0); + if (JGYUtils.isOfficialVersion() || locked == 1) { + mView.setScreenLockStateFinish(false, ""); + return; + } + NetInterfaceManager.getInstance() + .getScreenLockObservable() + .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e(TAG + ":" + "getScreenLockState", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse response) { + requestSucceeded = true; + Log.e(TAG + ":" + "getScreenLockState", "onNext: "); + if (response.code == OK) { + String bodyString = response.data.toString(); + JsonObject jsonObject = JsonParser.parseString(new Gson().toJson(response.data)).getAsJsonObject(); + int is_screen_lock = jsonObject.get("is_screen_lock").getAsInt(); + String name = jsonObject.get("name").getAsString(); + mView.setScreenLockStateFinish(is_screen_lock == 1, name); + } else { + mView.setScreenLockStateFinish(false, ""); + Log.e(TAG + ":" + "getScreenLockState", "onNext: " + response); + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e(TAG + ":" + "getScreenLockState", "onError: " + e.getMessage()); + boolean is_screen_lock = (boolean) SPUtils.get(mContext, "is_screen_lock", false); + String screen_tips = (String) SPUtils.get(mContext, "screen_tips", ""); + mView.setScreenLockStateFinish(is_screen_lock, screen_tips); + onComplete(); + } + + @Override + public void onComplete() { + lastRunTime = System.currentTimeMillis(); + Log.e(TAG + ":" + "getScreenLockState", "onComplete: "); + } + }); + } + + @Override + public void getDefaultDesktop() { + if (JGYUtils.isOfficialVersion()) { + mView.getDefaultDesktopFinish(); + HTTPInterface.getAppLimit(mContext); + return; + } + NetInterfaceManager.getInstance() + .getDesktopObservable() + .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e(TAG + ":" + "getDefaultDesktop", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull ResponseBody responseBody) { + requestSucceeded = true; + try { + JSONObject jsonObject = JSONObject.parseObject(responseBody.string()); + Log.e(TAG + ":" + "getDefaultDesktop", "onNext: " + jsonObject.toString()); + int code = jsonObject.getInteger("code"); + if (code == OK) { + JSONObject data = jsonObject.getJSONObject("data"); + JGYUtils.getInstance().installDesktop(data); + } else { + Log.e(TAG + ":" + "getDefaultDesktop", "onNext: " + "删除定制桌面"); + String whiteList = Settings.System.getString(mContext.getContentResolver(), JGYActions.ACTION_JGY_SHORTCUTLIST); + if (!TextUtils.isEmpty(whiteList)) { + if (!whiteList.contains(ApkUtils.desktopAPP.get(0))) { + ApkUtils.UninstallAPP(mContext, ApkUtils.desktopAPP.get(0)); + Log.e(TAG + ":" + "getDefaultDesktop", "skip: " + ApkUtils.desktopAPP.get(0)); + } + if (!whiteList.contains(ApkUtils.desktopAPP.get(1))) { + ApkUtils.UninstallAPP(mContext, ApkUtils.desktopAPP.get(1)); + Log.e(TAG + ":" + "getDefaultDesktop", "skip: " + ApkUtils.desktopAPP.get(1)); + } + } + } + } catch (IOException e) { + e.printStackTrace(); + Log.e(TAG + ":" + "getDefaultDesktop", "onNext: IOException: " + e.getMessage()); + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e(TAG + ":" + "getDefaultDesktop", "onError: " + e.getMessage()); + onComplete(); + } + + @Override + public void onComplete() { + Log.e(TAG + ":" + "getDefaultDesktop", "onComplete: "); + HTTPInterface.getAllAppList(mContext); + mView.getDefaultDesktopFinish(); + } + }); + } + + @Override + public void getPoweroffTime() { + NetInterfaceManager.getInstance() + .getPoweroffTimeControl() + .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer>>() { + @Override + public void onSubscribe(Disposable d) { + Log.e("getPoweroffTime", "onSubscribe: "); + } + + @Override + public void onNext(BaseResponse> listBaseResponse) { + Log.e("getPoweroffTime", "onNext: " + listBaseResponse); + MMKV mmkv = MMKV.defaultMMKV(); + if (listBaseResponse.code == 200) { + List poweroffBeanList = listBaseResponse.data; + String poweroffTime = new Gson().toJson(poweroffBeanList); + mmkv.encode("poweroffTime", poweroffTime); + } else { + mmkv.encode("PoweroffTime", ""); + } + } + + @Override + public void onError(Throwable e) { + Log.e("getPoweroffTime", "onError: " + e.getLocalizedMessage()); + onComplete(); + } + + @Override + public void onComplete() { + Log.e("getPoweroffTime", "onComplete: "); + mView.setPoweroffTime(); + } + }); + } + + @Override + public void getWiFiPasswd() { + NetInterfaceManager.getInstance().getWiFiControl() + .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer>>() { + @Override + public void onSubscribe(Disposable d) { + Log.e("getWiFiPasswd", "onSubscribe: "); + } + + @Override + public void onNext(BaseResponse> listBaseResponse) { + Log.e("getWiFiPasswd", "onNext: "); + if (listBaseResponse.code == 200) { + WiFiUtils.saveWiFiPasswd(listBaseResponse.data); + MMKV.defaultMMKV().encode("WiFiPassword", JsonParser.parseString(new Gson().toJson(listBaseResponse.data)).toString()); + } else { + Log.e("getWiFiPasswd", "onNext: msg = " + listBaseResponse.msg); + WiFiUtils.saveWiFiPasswd(listBaseResponse.data); + MMKV.defaultMMKV().encode("WiFiPassword", ""); + } + } + + @Override + public void onError(Throwable e) { + Log.e("getWiFiPasswd", "onError: " + e.getMessage()); + onComplete(); + } + + @Override + public void onComplete() { + Log.e("getWiFiPasswd", "onComplete: "); + mView.setWiFiPasswd(); + } + }); + } +} diff --git a/app/src/main/java/com/aoleyun/sn/activity/main/MainAContact.java b/app/src/main/java/com/aoleyun/sn/activity/main/MainAContact.java new file mode 100644 index 0000000..d1c218a --- /dev/null +++ b/app/src/main/java/com/aoleyun/sn/activity/main/MainAContact.java @@ -0,0 +1,40 @@ +package com.aoleyun.sn.activity.main; + +import android.graphics.Bitmap; +import android.view.View; + +import com.google.gson.JsonObject; +import com.aoleyun.sn.base.BasePresenter; +import com.aoleyun.sn.base.BaseView; + +public class MainAContact { + public interface Presenter extends BasePresenter { + //设置二维码 + void getQRImage(String mac); + //获取学生信息 + void getStudesInfo(); + //获取设备锁定状态 + void getLockedState(); + //手动获取设备信息更新 + void buttonCheckUpdate(View view); + } + + public interface MainView extends BaseView { + //获取二维码 + void setQRImage(Bitmap qrImage); + //设置批次信息 + void setBatchText(String text, int visibility); + //设置班级信息 + void setClassText(String text, int visibility); + //设置学号信息 + void setNumberText(String text, int visibility); + //设置姓名信息 + void setNameText(String text, int visibility); + //设置头像 + void setHead(String url); + //获取设备锁定状态 + void setLockedState(boolean loocked); + //手动获取设备信息更新 + void buttonCheckUpdateFinish(boolean update, JsonObject jsonObject); + } +} diff --git a/app/src/main/java/com/aoleyun/sn/activity/main/MainAPresenter.java b/app/src/main/java/com/aoleyun/sn/activity/main/MainAPresenter.java new file mode 100644 index 0000000..6d129e7 --- /dev/null +++ b/app/src/main/java/com/aoleyun/sn/activity/main/MainAPresenter.java @@ -0,0 +1,322 @@ +package com.aoleyun.sn.activity.main; + +import android.content.Context; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.provider.Settings; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; + +import com.aoleyun.sn.BuildConfig; +import com.aoleyun.sn.bean.BaseResponse; +import com.aoleyun.sn.bean.StudentsInfo; +import com.aoleyun.sn.comm.CommonConfig; +import com.aoleyun.sn.comm.JGYActions; +import com.aoleyun.sn.network.NetInterfaceManager; +import com.aoleyun.sn.utils.AES.CXAESUtil; +import com.aoleyun.sn.utils.JGYUtils; +import com.aoleyun.sn.utils.SPUtils; +import com.aoleyun.sn.utils.Utils; +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.tencent.mmkv.MMKV; +import com.trello.rxlifecycle2.LifecycleProvider; +import com.trello.rxlifecycle2.android.ActivityEvent; + +import io.reactivex.Observer; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.annotations.NonNull; +import io.reactivex.disposables.Disposable; +import io.reactivex.schedulers.Schedulers; + +/** + * MainActivity和MainService 的 Presenter + * + * @author jgy + */ +public class MainAPresenter implements MainAContact.Presenter { + private static final String TAG = MainAPresenter.class.getSimpleName(); + private MainAContact.MainView mView; + private Context mContext; + + public static final String GET_SETTING_FINISH_TIME = "GET_SETTING_FINISH_TIME"; + + //是否有接口请求成功 + public boolean requestSucceeded = false; + private final String DEFAULT_INFO = "暂无信息"; + private final int OK = 200; + + private final static int NOTFOUND = -300; + + private LifecycleProvider provider; + + public void setProvider(LifecycleProvider provider) { + this.provider = provider; + } + + public LifecycleProvider getProvider() { + return provider; + } + + public MainAPresenter(Context context) { + this.mContext = context; + Log.e(TAG, "MainSPresenter: " + context.getClass()); + } + + public boolean isRequestSucceeded() { + return requestSucceeded; + } + + @Override + public void attachView(@androidx.annotation.NonNull MainAContact.MainView view) { + this.mView = view; + } + + @Override + public void detachView() { + this.mView = null; + } + + private native String getAeskey(); + + @Override + public void getQRImage(String mac) { + Log.e(TAG, "getQRImage: " + mac); + JsonObject jsonObject = new JsonObject(); + jsonObject.addProperty("sn", Utils.getSerial()); + jsonObject.addProperty("mac", mac); + String json = jsonObject.toString(); + String content = mac; + try { + content = CXAESUtil.encrypt(getAeskey(), json); + Log.e(TAG, "getQRImage: " + content); + } catch (Exception e) { + Log.e(TAG, "getQRImage: " + e.getMessage()); + e.printStackTrace(); + } + mView.setQRImage(JGYUtils.getInstance().createQRImage(content, 300, 300)); + } + + /** + * 通过sn获取用户信息 + */ + @Override + public void getStudesInfo() { + setState(); + NetInterfaceManager.getInstance() + .getStudesInfoObservable() + .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer>() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e(TAG + ":" + "getStudesInfo", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse studentsInfoBaseResponse) { + requestSucceeded = true; + Log.e(TAG + ":" + "getStudesInfo", "onNext: " + studentsInfoBaseResponse.data); + if (studentsInfoBaseResponse.code == OK) { + String sno = studentsInfoBaseResponse.data.getSno(); + String realname = studentsInfoBaseResponse.data.getRealname(); + String classes = studentsInfoBaseResponse.data.getClasses(); + String batch = studentsInfoBaseResponse.data.getBatch(); + String head_img = studentsInfoBaseResponse.data.getHead_img(); + if (TextUtils.isEmpty(sno)) { + mView.setNumberText("", View.GONE); + SPUtils.put(mContext, CommonConfig.STUDENT_ID, DEFAULT_INFO); + } else { + mView.setNumberText(sno, View.VISIBLE); + SPUtils.put(mContext, CommonConfig.STUDENT_ID, sno); + } + if (TextUtils.isEmpty(realname)) { + mView.setNameText("", View.GONE); + SPUtils.put(mContext, CommonConfig.REALNAME, DEFAULT_INFO); + } else { + mView.setNameText(realname, View.VISIBLE); + SPUtils.put(mContext, CommonConfig.REALNAME, realname); + } + if (TextUtils.isEmpty(classes)) { + mView.setClassText("", View.GONE); + SPUtils.put(mContext, CommonConfig.CLASS_NAME, DEFAULT_INFO); + } else { + mView.setClassText(classes, View.VISIBLE); + SPUtils.put(mContext, CommonConfig.CLASS_NAME, classes); + } + if (TextUtils.isEmpty(batch)) { + mView.setBatchText("", View.GONE); + SPUtils.put(mContext, CommonConfig.BATCH_NAME, DEFAULT_INFO); + } else { + mView.setBatchText(batch, View.VISIBLE); + SPUtils.put(mContext, CommonConfig.BATCH_NAME, batch); + } + if (TextUtils.isEmpty(head_img)) { + mView.setHead(""); + SPUtils.put(mContext, CommonConfig.HEAD_IMG, ""); + } else { + mView.setHead(head_img); + SPUtils.put(mContext, CommonConfig.HEAD_IMG, head_img); + } + + SPUtils.put(mContext, CommonConfig.ADMIN_ID, studentsInfoBaseResponse.data.getAdmin_id()); + } else { + /* + * 没有获取到的时候显示缓存 + * */ + Log.e(TAG + ":" + "getStudesInfo", "onNext: " + studentsInfoBaseResponse.toString()); + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e(TAG + ":" + "getStudesInfo", "onError: " + e.getMessage()); + setState(); + onComplete(); + } + + @Override + public void onComplete() { + //如果是解锁状态就隐藏,锁定就显示缓存 + if (Settings.System.getInt(mContext.getContentResolver(), JGYActions.ACTION_QCH_UNLOCK_IPAD, 0) == 1) { + mView.setNumberText("", View.GONE); + mView.setNameText("", View.GONE); + mView.setClassText("", View.GONE); + mView.setBatchText("", View.GONE); + } + Log.e(TAG + ":" + "getStudesInfo", "onComplete: "); + } + }); + } + + private void setState() { + String batch = (String) SPUtils.get(mContext, CommonConfig.BATCH_NAME, DEFAULT_INFO); + if (TextUtils.isEmpty(batch) || batch.equalsIgnoreCase(DEFAULT_INFO)) { + mView.setBatchText("", View.GONE); + } else { + mView.setBatchText(batch, View.VISIBLE); + } + + String classes = (String) SPUtils.get(mContext, CommonConfig.CLASS_NAME, DEFAULT_INFO); + if (TextUtils.isEmpty(classes) || classes.equalsIgnoreCase(DEFAULT_INFO)) { + mView.setClassText("", View.GONE); + } else { + mView.setClassText(classes, View.VISIBLE); + } + + String sno = (String) SPUtils.get(mContext, CommonConfig.STUDENT_ID, DEFAULT_INFO); + if (TextUtils.isEmpty(sno) || sno.equalsIgnoreCase(DEFAULT_INFO)) { + mView.setNumberText("", View.GONE); + } else { + mView.setNumberText(sno, View.VISIBLE); + } + String realname = (String) SPUtils.get(mContext, CommonConfig.REALNAME, DEFAULT_INFO); + if (TextUtils.isEmpty(realname) || realname.equalsIgnoreCase(DEFAULT_INFO)) { + mView.setNameText("", View.GONE); + } else { + mView.setNameText(realname, View.VISIBLE); + } + String head_img = (String) SPUtils.get(mContext, CommonConfig.HEAD_IMG, DEFAULT_INFO); + if (TextUtils.isEmpty(head_img) || head_img.equalsIgnoreCase(DEFAULT_INFO)) { + mView.setHead(""); + } else { + mView.setHead(head_img); + } + } + + private long lastgetLockedTime; + + private long one_minute = 1000 * 60; + + @Override + public void getLockedState() { + MMKV mmkv = MMKV.defaultMMKV(); + lastgetLockedTime = mmkv.decodeLong(MainAPresenter.GET_SETTING_FINISH_TIME); + Log.e(TAG, "getLockedState: " + lastgetLockedTime); + if (System.currentTimeMillis() - lastgetLockedTime < one_minute) { + Log.e(TAG, "getLockedState: lastgetLockedTime = " + lastgetLockedTime); + return; + } + + NetInterfaceManager.getInstance().getLockedState(provider, new NetInterfaceManager.ObserverCallback() { + @Override + public void onSubscribe(Disposable d) { + + } + + @Override + public void onNext(BaseResponse response) { + + } + + @Override + public void onError(Throwable e) { + } + + @Override + public void onComplete() { + Log.e(TAG, "onComplete: "); + int locked = Settings.System.getInt(mContext.getContentResolver(), JGYActions.ACTION_QCH_UNLOCK_IPAD, JGYActions.FRAME_CODE_LOCKED); + Log.e(TAG + ":" + "getLockedState", "locked: " + locked); + mView.setLockedState(locked == JGYActions.FRAME_CODE_LOCKED); + } + }); + } + + @Override + public void buttonCheckUpdate(View view) { + checkUpdateInfo(); + } + + private void checkUpdateInfo() { + NetInterfaceManager.getInstance() + .getUpdateApi() + .getUpdate(BuildConfig.APPLICATION_ID, + JGYUtils.getInstance().checkAppPlatform()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e(TAG + ":" + "checkUpdateInfo", "onSubscribe: "); + } + + @Override + public void onNext(@NonNull BaseResponse response) { + requestSucceeded = true; + Log.e(TAG + ":" + "checkUpdateInfo", "onNext: " + response); + if (response.code == OK) { + JsonObject jsonObject = JsonParser.parseString(new Gson().toJson(response.data)).getAsJsonObject(); + long versionCode = jsonObject.get("version_code").getAsLong(); + PackageManager pm = mContext.getPackageManager(); + PackageInfo info = null; + try { + info = pm.getPackageInfo(BuildConfig.APPLICATION_ID, 0); + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + if (null == info || info.versionCode < versionCode) { + mView.buttonCheckUpdateFinish(true, jsonObject); + } else { + mView.buttonCheckUpdateFinish(false, null); + } + } else { + mView.buttonCheckUpdateFinish(false, null); + } + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e(TAG + ":" + "checkUpdateInfo", "onError: " + e.getMessage()); + onComplete(); + } + + @Override + public void onComplete() { + Log.e(TAG + ":" + "checkUpdateInfo", "onComplete: "); + } + }); + } +} diff --git a/app/src/main/java/com/aoleyun/sn/activity/main/MainActivity.java b/app/src/main/java/com/aoleyun/sn/activity/main/MainActivity.java index b162abe..77ea0b5 100644 --- a/app/src/main/java/com/aoleyun/sn/activity/main/MainActivity.java +++ b/app/src/main/java/com/aoleyun/sn/activity/main/MainActivity.java @@ -1,5 +1,6 @@ package com.aoleyun.sn.activity.main; +import android.annotation.SuppressLint; import android.app.AlertDialog; import android.content.BroadcastReceiver; import android.content.Context; @@ -19,13 +20,12 @@ import android.widget.TextView; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.localbroadcastmanager.content.LocalBroadcastManager; -import com.blankj.utilcode.util.NetworkUtils; -import com.bumptech.glide.Glide; -import com.google.gson.JsonObject; import com.aoleyun.sn.BuildConfig; import com.aoleyun.sn.R; +import com.aoleyun.sn.activity.requestlog.RequestLogActivity; import com.aoleyun.sn.base.BaseActivity; -import com.aoleyun.sn.service.MainService; +import com.aoleyun.sn.rlog.LogDBManager; +import com.aoleyun.sn.service.main.MainService; import com.aoleyun.sn.utils.ApkUtils; import com.aoleyun.sn.utils.ExampleUtil; import com.aoleyun.sn.utils.JGYUtils; @@ -33,7 +33,9 @@ import com.aoleyun.sn.utils.SaveListUtils; import com.aoleyun.sn.utils.SysSettingUtils; import com.aoleyun.sn.utils.ToastUtil; import com.aoleyun.sn.utils.Utils; -import com.tencent.mmkv.MMKV; +import com.blankj.utilcode.util.NetworkUtils; +import com.bumptech.glide.Glide; +import com.google.gson.JsonObject; import java.util.concurrent.TimeUnit; @@ -48,7 +50,7 @@ import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.annotations.NonNull; import io.reactivex.disposables.Disposable; -public class MainActivity extends BaseActivity implements MainContact.MainView, NetworkUtils.OnNetworkStatusChangedListener { +public class MainActivity extends BaseActivity implements MainAContact.MainView, NetworkUtils.OnNetworkStatusChangedListener { private static final String TAG = MainActivity.class.getSimpleName(); @BindView(R.id.imageView) @@ -84,9 +86,37 @@ public class MainActivity extends BaseActivity implements MainContact.MainView, @BindView(R.id.tv_customversion) TextView tv_customversion; - private MainPresenter mPresenter; + @OnClick({R.id.back, R.id.tv_title, R.id.chkupd}) + public void onClick(View view) { + switch (view.getId()) { + case R.id.back: + lazyExit(); + break; + case R.id.tv_title: + continuousClick(COUNTS, DURATION); + break; + default: + break; + } + } + + final static int COUNTS = 3;// 点击次数 + final static long DURATION = 1000;// 规定有效时间 + long[] mHits = new long[COUNTS]; + + private void continuousClick(int count, long time) { + //每次点击时,数组向前移动一位 + System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1); + //为数组最后一位赋值 + mHits[mHits.length - 1] = SystemClock.uptimeMillis(); + if (mHits[0] >= (SystemClock.uptimeMillis() - DURATION)) { + mHits = new long[COUNTS];//重新初始化数组 + startActivity(new Intent(MainActivity.this, RequestLogActivity.class)); + } + } + + private MainAPresenter mPresenter; - private boolean netWorkIsRunning = false; private boolean updateApp = false; //jiguang @@ -98,6 +128,19 @@ public class MainActivity extends BaseActivity implements MainContact.MainView, public static final String KEY_MESSAGE = "message"; public static final String KEY_EXTRAS = "extras"; + @Override + public void onDisconnected() { + Log.e("OnNetworkStatusChanged", "onDisconnected: "); + } + + @Override + public void onConnected(NetworkUtils.NetworkType networkType) { + Log.e("OnNetworkStatusChanged", "onConnected: "); + timeMillis = SystemClock.elapsedRealtime(); + //直接获取数据 + mPresenter.getLockedState(); + } + @Override public int getLayoutId() { return R.layout.activity_main; @@ -106,12 +149,11 @@ public class MainActivity extends BaseActivity implements MainContact.MainView, @Override public void initView() { ButterKnife.bind(this); - mPresenter = new MainPresenter(this); + mPresenter = new MainAPresenter(this); mPresenter.attachView(this); mPresenter.setProvider(this); JGYUtils.startServices(MainActivity.this); Log.e(TAG, "initView: " + "start request"); - mPresenter.getFirstConnect(); NetworkUtils.registerNetworkStatusChangedListener(this); getDevicesInfo(); setStoreUpdateListener(bt_checkupdate); @@ -149,7 +191,7 @@ public class MainActivity extends BaseActivity implements MainContact.MainView, // showSNErrorDialog("SN数据与平台不符,请联系管理员!"); } //设置极光推送标签 - JGYUtils.getInstance().getAppPlatform(platform -> mPresenter.setJpushPlatformTags(platform)); +// JGYUtils.getInstance().getAppPlatform(platform -> mPresenter.setJpushPlatformTags(platform)); } private void showSNErrorDialog(String content) { @@ -224,103 +266,19 @@ public class MainActivity extends BaseActivity implements MainContact.MainView, */ @Override public void setLockedState(boolean loocked) { - //发送设备mac地址和信息 - mPresenter.sendMACAddress(); - //设置极光推送别名 - mPresenter.setJpushAlias(); - //设置极光推送标签 - mPresenter.setPushTags(); - Log.e(TAG, "netWorkIsRunning: " + netWorkIsRunning); - Log.e(TAG, "MainService.netWorkIsRunning: " + MainService.netWorkIsRunning); + Log.e(TAG, "setLockedState: " + loocked); if (loocked) { iv_locked.setVisibility(View.VISIBLE); iv_locked.setImageDrawable(getDrawable(R.drawable.locked)); - //上传APP信息 - ApkUtils.getAppInfo(this); - if (netWorkIsRunning || MainService.netWorkIsRunning) { - //如果正在执行,不执行 - return; - } SaveListUtils.getList(); - netWorkIsRunning = true; } else { iv_locked.setVisibility(View.VISIBLE); iv_locked.setImageDrawable(getDrawable(R.drawable.unlock)); - netWorkIsRunning = false; SysSettingUtils.setEnableSetting(this); } } - /** - * 首次使用默认关闭所有功能 - * - * @param state - */ - @Override - public void setFirstConnect(boolean state) { - Log.e(TAG, "isFirstConnect: " + "end request"); - if (state) { - mPresenter.setDisableSetting(); - } else { - - } - } - - @Override - public void sendMACFinish() { - mPresenter.updateDeviceInfo(); - } - - @Override - public void updateDeviceInfoFinish() { - mPresenter.getSnTimeControl(); - } - - @Override - public void getSnTimeControlFinish() { - mPresenter.getEBagCode(); - } - - @Override - public void getEBagCodeFinish() { - - } - - @Override - public void setAliasFinish() { - mPresenter.checkStoreUpdate(); - } - - @Override - public void setJpushPlatformTagsFinish() { - - } - - @Override - public void checkStoreUpdateFinish() { - mPresenter.checkInfoUpdate(); - } - - @Override - public void checkInfoUpdateFinish() { - mPresenter.checkDesktopUpdate(); - } - - @Override - public void checkDesktopUpdateFinish() { - mPresenter.checkNotifyUpdate(); - } - - @Override - public void checkNotifyUpdateFinish() { - mPresenter.checkBrowserUpdate(); - } - - @Override - public void checkBrowserUpdateFinish() { - mPresenter.checkTestUpdate(); - } - + @SuppressLint("CheckResult") @Override public void buttonCheckUpdateFinish(boolean update, JsonObject jsonObject) { this.updateApp = !update; @@ -333,32 +291,6 @@ public class MainActivity extends BaseActivity implements MainContact.MainView, } } - @Override - public void checkTestUpdateFinish() { - - } - - /** - * @param noTag 为空,没有,错误都返回true - * 设备可以没有批次,但是没有批次相当于没有数据了,就不执行下面的请求了 - */ - @Override - public void setTagsFinish(boolean noTag) { - if (noTag) { - Log.e(TAG, "setTagsFinished: " + "not set tag"); - netWorkIsRunning = false; - Log.e(TAG, "SettingFinished: " + (SystemClock.elapsedRealtime() - timeMillis) + " ms"); - } else { - mPresenter.getSystemSettingbegin(); - } - mPresenter.getDeveloper(); - } - - @Override - public void getDeveloperFinish() { - Log.e(TAG, "getDeveloperFinished: "); - } - private void showDialog(JsonObject jsonObject) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("更新:"); @@ -383,113 +315,16 @@ public class MainActivity extends BaseActivity implements MainContact.MainView, builder.show(); } - @Override - public void getSystemSettingbegin() { - mPresenter.getAppLimit(); - } - - @Override - public void getAppLimitFinish(String packageList) { - mPresenter.getDeviceBatch(packageList); - } - - @Override - public void getDeviceBatchFinish() { - mPresenter.getForceDownload(); - } - - @Override - public void getForceDownloadFinish() { - mPresenter.getBrowserList(); - } - - @Override - public void getBrowserListFinish(String whitelist) { - mPresenter.getBrowserBookmarks(whitelist); - } - - @Override - public void getBrowserBookmarksFinish() { - mPresenter.getBrowserWhiteList(); - mPresenter.getDesktopIcon(); - } - - @Override - public void getDesktopIconFinish() { - mPresenter.getAppAutoStartUpdateAndNet(); - } - - @Override - public void getAppAutoStartUpdateAndNetFinish() { - mPresenter.getAppIDControl(); - } - - @Override - public void getAppIDControlFinish() { - mPresenter.setAppinsideWeb(); - } - - @Override - public void setAppinsideWebFinish() { - mPresenter.setSystemSetting(); - } - - @Override - public void setSystemSettingFinish() { - mPresenter.getDefaultApp(); - } - - @Override - public void setDefaultAppFinish() { - mPresenter.getROMApp(); - } - - @Override - public void getROMAppFinish() { - mPresenter.setLogoImg(); - } - - @Override - public void setLogoImgFinish() { - mPresenter.setTopApp(); - } - - @Override - public void setTopAppFinish() { - mPresenter.getDefaultDesktop(); - } - - @Override - public void getDefaultDesktopFinish() { - mPresenter.getPoweroffTime(); - } - - @Override - public void setPoweroffTime() { - mPresenter.getWiFiPasswd(); - } - - @Override - public void setWiFiPasswd() { - MMKV.defaultMMKV().encode(MainPresenter.GET_SETTING_FINISH_TIME, System.currentTimeMillis()); - netWorkIsRunning = false; - Log.e(TAG, "SettingFinished: " + (SystemClock.elapsedRealtime() - timeMillis) + " ms"); - } - - @Override - public void setScreenLockStateFinish(boolean locked, String tips) { - - } - @Override protected void onStop() { super.onStop(); + isForeground = false; } @Override protected void onPause() { - isForeground = false; super.onPause(); + isForeground = false; } @Override @@ -526,17 +361,6 @@ public class MainActivity extends BaseActivity implements MainContact.MainView, } } - @OnClick({R.id.back, R.id.chkupd}) - public void onClick(View view) { - switch (view.getId()) { - case R.id.back: - lazyExit(); - break; - default: - break; - } - } - private void setStoreUpdateListener(View view) { ObservableOnSubscribe mObservableOnSubscribe = new ObservableOnSubscribe() { @Override @@ -593,19 +417,6 @@ public class MainActivity extends BaseActivity implements MainContact.MainView, LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, filter); } - @Override - public void onDisconnected() { - Log.e("OnNetworkStatusChanged", "onDisconnected: "); - } - - @Override - public void onConnected(NetworkUtils.NetworkType networkType) { - Log.e("OnNetworkStatusChanged", "onConnected: "); - timeMillis = SystemClock.elapsedRealtime(); - //直接获取数据 - mPresenter.getLockedState(); - } - public static class MessageReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { diff --git a/app/src/main/java/com/aoleyun/sn/activity/requestlog/RequestLogActivity.java b/app/src/main/java/com/aoleyun/sn/activity/requestlog/RequestLogActivity.java new file mode 100644 index 0000000..e7cdc15 --- /dev/null +++ b/app/src/main/java/com/aoleyun/sn/activity/requestlog/RequestLogActivity.java @@ -0,0 +1,82 @@ +package com.aoleyun.sn.activity.requestlog; + +import android.view.View; +import android.widget.ImageView; + +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.aoleyun.sn.R; +import com.aoleyun.sn.base.BaseActivity; +import com.aoleyun.sn.rlog.LogBean; +import com.aoleyun.sn.rlog.LogDBManager; + +import java.util.List; + +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.OnClick; + +public class RequestLogActivity extends BaseActivity implements RequestLogContact.MainView { + private static final String TAG = RequestLogActivity.class.getSimpleName(); + private RequestLogAdapter mAdapter; + + @BindView(R.id.recyclerview) + RecyclerView mRecyclerView; + @BindView(R.id.iv_delete) + ImageView iv_delete; + @BindView(R.id.iv_refresh) + ImageView iv_refresh; + @BindView(R.id.back) + ImageView back; + + @OnClick({R.id.back, R.id.iv_refresh, R.id.iv_delete}) + public void onClick(View view) { + switch (view.getId()) { + case R.id.back: + finish(); + break; + case R.id.iv_refresh: + mPresenter.getDBList(); + break; + case R.id.iv_delete: + LogDBManager.getInstance().saveToFile(); + break; + default: + } + } + + private RequestLogPresenter mPresenter; + + @Override + public int getLayoutId() { + return R.layout.activity_request_log; + } + + @Override + public void initView() { + ButterKnife.bind(this); + mPresenter = new RequestLogPresenter(this); + mPresenter.attachView(this); + mPresenter.setProvider(this); + mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); + mAdapter = new RequestLogAdapter(); + mRecyclerView.setAdapter(mAdapter); + } + + @Override + public void initData() { + mPresenter.getDBList(); + } + + @Override + public void setDBList(List logBeanList) { + mAdapter.setLogBeans(logBeanList); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mPresenter.detachView(); + } +} diff --git a/app/src/main/java/com/aoleyun/sn/activity/requestlog/RequestLogAdapter.java b/app/src/main/java/com/aoleyun/sn/activity/requestlog/RequestLogAdapter.java new file mode 100644 index 0000000..f02cff1 --- /dev/null +++ b/app/src/main/java/com/aoleyun/sn/activity/requestlog/RequestLogAdapter.java @@ -0,0 +1,67 @@ +package com.aoleyun.sn.activity.requestlog; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.aoleyun.sn.R; +import com.aoleyun.sn.rlog.LogBean; +import com.aoleyun.sn.utils.Utils; + +import java.util.List; + +public class RequestLogAdapter extends RecyclerView.Adapter { + private List mLogBeans; + private Context context; + + public void setLogBeans(List logBeanList) { + this.mLogBeans = logBeanList; + notifyDataSetChanged(); + } + + @NonNull + @Override + public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + context = parent.getContext(); + View view = LayoutInflater.from(context).inflate(R.layout.item_requestlog, parent, false); + return new Holder(view); + } + + @Override + public void onBindViewHolder(@NonNull Holder holder, int position) { + LogBean logBean = mLogBeans.get(position); + if (logBean == null) return; + holder.tv_code.setText(logBean.getCode().toString()); + holder.tv_timestamp.setText(Utils.transferLongToDate(logBean.getTimestamp())); + holder.tv_event.setText(logBean.getEvent()); + holder.tv_operate.setText(logBean.getOperate()); + holder.tv_content.setText(logBean.getContent()); + } + + @Override + public int getItemCount() { + return mLogBeans == null ? 0 : mLogBeans.size(); + } + + static class Holder extends RecyclerView.ViewHolder { + TextView tv_code; + TextView tv_timestamp; + TextView tv_event; + TextView tv_operate; + TextView tv_content; + + public Holder(@NonNull View itemView) { + super(itemView); + tv_code = itemView.findViewById(R.id.tv_code); + tv_timestamp = itemView.findViewById(R.id.tv_timestamp); + tv_event = itemView.findViewById(R.id.tv_event); + tv_operate = itemView.findViewById(R.id.tv_operate); + tv_content = itemView.findViewById(R.id.tv_content); + } + } +} diff --git a/app/src/main/java/com/aoleyun/sn/activity/requestlog/RequestLogContact.java b/app/src/main/java/com/aoleyun/sn/activity/requestlog/RequestLogContact.java new file mode 100644 index 0000000..76b9477 --- /dev/null +++ b/app/src/main/java/com/aoleyun/sn/activity/requestlog/RequestLogContact.java @@ -0,0 +1,17 @@ +package com.aoleyun.sn.activity.requestlog; + +import com.aoleyun.sn.base.BasePresenter; +import com.aoleyun.sn.base.BaseView; +import com.aoleyun.sn.rlog.LogBean; + +import java.util.List; + +public class RequestLogContact { + public interface Presenter extends BasePresenter { + void getDBList(); + } + + public interface MainView extends BaseView { + void setDBList(List logBeanList); + } +} diff --git a/app/src/main/java/com/aoleyun/sn/activity/requestlog/RequestLogPresenter.java b/app/src/main/java/com/aoleyun/sn/activity/requestlog/RequestLogPresenter.java new file mode 100644 index 0000000..9a64fd3 --- /dev/null +++ b/app/src/main/java/com/aoleyun/sn/activity/requestlog/RequestLogPresenter.java @@ -0,0 +1,45 @@ +package com.aoleyun.sn.activity.requestlog; + +import android.content.Context; + +import androidx.annotation.NonNull; + +import com.aoleyun.sn.rlog.LogDBManager; +import com.trello.rxlifecycle2.LifecycleProvider; +import com.trello.rxlifecycle2.android.ActivityEvent; + +public class RequestLogPresenter implements RequestLogContact.Presenter { + private static final String TAG = RequestLogPresenter.class.getSimpleName(); + private RequestLogContact.MainView mView; + private Context mContext; + + + private LifecycleProvider provider; + + public void setProvider(LifecycleProvider provider) { + this.provider = provider; + } + + public LifecycleProvider getProvider() { + return provider; + } + + public RequestLogPresenter(Context context) { + this.mContext = context; + } + + @Override + public void getDBList() { + mView.setDBList(LogDBManager.getInstance().getLogList()); + } + + @Override + public void attachView(@NonNull RequestLogContact.MainView view) { + this.mView = view; + } + + @Override + public void detachView() { + this.mView = null; + } +} diff --git a/app/src/main/java/com/aoleyun/sn/base/BaseApplication.java b/app/src/main/java/com/aoleyun/sn/base/BaseApplication.java index 09e0ab9..ed83afa 100644 --- a/app/src/main/java/com/aoleyun/sn/base/BaseApplication.java +++ b/app/src/main/java/com/aoleyun/sn/base/BaseApplication.java @@ -12,6 +12,7 @@ import androidx.multidex.MultiDexApplication; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.aoleyun.sn.bean.BaseResponse; +import com.aoleyun.sn.rlog.LogDBManager; import com.aoleyun.sn.utils.WiFiUtils; import com.arialyy.aria.core.Aria; import com.arialyy.aria.core.download.DownloadEntity; @@ -94,6 +95,7 @@ public class BaseApplication extends MultiDexApplication { JGYUtils.init(this); WiFiUtils.init(this); XAPKUtils.init(this); + LogDBManager.init(this); FileManager.init(this); AmapManager.init(this); AmapManager.getInstance().initAmap(); diff --git a/app/src/main/java/com/aoleyun/sn/comm/CommonConfig.java b/app/src/main/java/com/aoleyun/sn/comm/CommonConfig.java new file mode 100644 index 0000000..b2f7fbe --- /dev/null +++ b/app/src/main/java/com/aoleyun/sn/comm/CommonConfig.java @@ -0,0 +1,37 @@ +package com.aoleyun.sn.comm; + + +public class CommonConfig { + //保存的用户信息 + /*用户id*/ + public final static String ADMIN_ID = "admin_id"; + /*批次名*/ + public final static String BATCH_NAME = "batch"; + /*班级*/ + public final static String CLASS_NAME = "classes"; + /*姓名*/ + public final static String REALNAME = "realname"; + /*学号*/ + public final static String STUDENT_ID = "sno"; + /*头像*/ + public final static String HEAD_IMG = "head_img"; + //保存的用户信息 + + /*首次启动app*/ + public final static String FIRST_STARTUP = "app_first_startup"; + /*保存的应用版本号*/ + public final static String SN_VERSIONCODE = "SN_VERSIONCODE"; + /*重启标识*/ + public final static String IS_RESET = "IS_RESET"; + /*最低电量*/ + public final static int MIN_POWER = 21; + /*强制安装列表*/ + public final static String FORCE_INSTALL = "FORCE_INSTALL"; + /*firstEnter状态*/ + public final static String FLAG_FIRST_ENTER = "qch_first_enter"; + /*首次连接*/ + public final static String JGY_FIRST_CONNECT = "first_connect"; + /*定时上传log*/ + public final static String UPLOAD_LOG_TYPE = "is_log_type"; + +} diff --git a/app/src/main/java/com/aoleyun/sn/comm/CommonDatas.java b/app/src/main/java/com/aoleyun/sn/comm/CommonDatas.java deleted file mode 100644 index 9ab1426..0000000 --- a/app/src/main/java/com/aoleyun/sn/comm/CommonDatas.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.aoleyun.sn.comm; - - -public class CommonDatas { - public final static String IS_RESET = "IS_RESET"; - public final static int MIN_POWER = 21; - public final static String FORCE_INSTALL = "FORCE_INSTALL"; - public final static String FLAG_FIRST_ENTER = "qch_first_enter"; -} diff --git a/app/src/main/java/com/aoleyun/sn/comm/JGYActions.java b/app/src/main/java/com/aoleyun/sn/comm/JGYActions.java new file mode 100644 index 0000000..420b1d6 --- /dev/null +++ b/app/src/main/java/com/aoleyun/sn/comm/JGYActions.java @@ -0,0 +1,34 @@ +package com.aoleyun.sn.comm; + +public class JGYActions { + /*锁定解锁设备 后台1是锁定,底层0是锁定*/ + public final static String ACTION_QCH_UNLOCK_IPAD = "qch_unlock_ipad"; + /*后台锁定*/ + public final static int NET_CODE_LOCKED = 1; + /*后台解锁*/ + public final static int NET_CODE_UNLOCKED = 0; + /*底层锁定*/ + public final static int FRAME_CODE_LOCKED = 0; + /*底层解锁*/ + public final static int FRAME_CODE_UNLOCKED = 1; + + /* + * 需要写到底层的数据 + * */ + + /*应用管理-允许联网*/ + public final static String ACTION_HRRECEIVER_JGY = "qch_jgy_network_allow"; + /*应用管理-禁止联网*/ + public final static String ACTION_HRRECEIVER_JGY_DIS = "qch_jgy_network_disallow"; + /*状态栏*/ + public final static String ACTION_STATUSBAR_STATUS = "jgy_statusbar_status"; + + + /* + * 应用内部的数据 + * */ + + //后台上传所有应用包名 将添加到桌面 + // TODO: 2021/10/13 + public final static String ACTION_JGY_SHORTCUTLIST = "only_jgy_shortcut_list"; +} diff --git a/app/src/main/java/com/aoleyun/sn/jpush/MyJPushReceiver.java b/app/src/main/java/com/aoleyun/sn/jpush/MyJPushReceiver.java index f0d8691..91074ca 100644 --- a/app/src/main/java/com/aoleyun/sn/jpush/MyJPushReceiver.java +++ b/app/src/main/java/com/aoleyun/sn/jpush/MyJPushReceiver.java @@ -12,29 +12,22 @@ import android.media.AudioManager; import android.media.MediaPlayer; import android.os.BatteryManager; import android.os.Build; -import android.os.Bundle; -import android.os.Handler; import android.provider.Settings; import android.text.TextUtils; import android.util.Log; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import com.amap.api.location.AMapLocation; -import com.amap.api.location.AMapLocationClient; -import com.amap.api.location.AMapLocationListener; -import com.aoleyun.sn.action.JGYActions; -import com.aoleyun.sn.base.BaseApplication; import com.aoleyun.sn.bean.BaseResponse; import com.aoleyun.sn.bean.RemoteDebug; import com.aoleyun.sn.R; -import com.aoleyun.sn.manager.AmapManager; +import com.aoleyun.sn.comm.CommonConfig; +import com.aoleyun.sn.comm.JGYActions; import com.aoleyun.sn.utils.CacheUtils; import com.aoleyun.sn.utils.JGYUtils; -import com.aoleyun.sn.comm.CommonDatas; import com.aoleyun.sn.network.NetInterfaceManager; import com.aoleyun.sn.network.HTTPInterface; -import com.aoleyun.sn.service.MainService; +import com.aoleyun.sn.service.main.MainService; import com.aoleyun.sn.utils.ApkUtils; import com.aoleyun.sn.utils.CmdUtil; import com.aoleyun.sn.utils.ForegroundAppUtil; @@ -42,9 +35,7 @@ import com.aoleyun.sn.utils.MySQLData; import com.aoleyun.sn.utils.SPUtils; import com.aoleyun.sn.utils.SaveListUtils; import com.aoleyun.sn.utils.ServiceAliveUtils; -import com.aoleyun.sn.utils.ToastUtil; import com.aoleyun.sn.utils.Utils; -import com.arialyy.aria.core.Aria; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; @@ -720,10 +711,10 @@ public class MyJPushReceiver extends BroadcastReceiver { Settings.System.putInt(this.mContext.getContentResolver(), JGYActions.ACTION_QCH_UNLOCK_IPAD, i); Log.e("SystemSetting", "qch_unlock_ipad---------" + i); - if (getBatteryLevel() >= CommonDatas.MIN_POWER) { + if (getBatteryLevel() >= CommonConfig.MIN_POWER) { Utils.doMasterClear(mContext); } else { - MySQLData.SetBooleanData(mContext, CommonDatas.IS_RESET, true); + MySQLData.SetBooleanData(mContext, CommonConfig.IS_RESET, true); } } diff --git a/app/src/main/java/com/aoleyun/sn/network/HTTPInterface.java b/app/src/main/java/com/aoleyun/sn/network/HTTPInterface.java index b4dc691..64a26b2 100644 --- a/app/src/main/java/com/aoleyun/sn/network/HTTPInterface.java +++ b/app/src/main/java/com/aoleyun/sn/network/HTTPInterface.java @@ -15,10 +15,10 @@ import android.util.Log; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import com.aoleyun.sn.action.JGYActions; import com.aoleyun.sn.bean.PoweroffBean; import com.aoleyun.sn.bean.SnRunLog; import com.aoleyun.sn.bean.WiFiAlias; +import com.aoleyun.sn.comm.JGYActions; import com.aoleyun.sn.network.api.newapi.GetPublicIPApi; import com.aoleyun.sn.service.LogcatService; import com.aoleyun.sn.utils.WiFiUtils; @@ -39,11 +39,10 @@ import com.aoleyun.sn.utils.URLUtils; import com.aoleyun.sn.bean.Appground; import com.aoleyun.sn.bean.BaseResponse; import com.aoleyun.sn.bean.NetAndLaunchBean; -import com.aoleyun.sn.jpush.TagAliasOperatorHelper; import com.aoleyun.sn.network.api.newapi.SnTimeControlApi; import com.aoleyun.sn.network.api.newapi.TopAppControlApi; import com.aoleyun.sn.network.api.newapi.UpdateDeviceInfoApi; -import com.aoleyun.sn.service.MainService; +import com.aoleyun.sn.service.main.MainService; import com.aoleyun.sn.utils.ApkUtils; import com.aoleyun.sn.utils.ForegroundAppUtil; import com.aoleyun.sn.utils.SPUtils; @@ -55,7 +54,6 @@ import com.tencent.mmkv.MMKV; import java.io.IOException; import java.lang.reflect.Type; -import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.HashSet; import java.util.List; @@ -537,58 +535,6 @@ public class HTTPInterface { }); } - - @SuppressLint("NewApi") - synchronized public static void updateDeviceInfo(Context context) { - String address = String.valueOf(SPUtils.get(context, "AmapAddress", "-")); - if ("-".equals(address)) { - address = (String) SPUtils.get(context, "AmapError", "-"); - } - String longitude = String.valueOf(SPUtils.get(context, "longitude", "0")); - String latitude = String.valueOf(SPUtils.get(context, "latitude", "0")); - JSONObject jsonObject = new JSONObject(); - jsonObject.put("address", address); - jsonObject.put("longitude", longitude); - jsonObject.put("latitude", latitude); - String add = jsonObject.toJSONString(); - UpdateDeviceInfoApi updateDeviceInfo = NetInterfaceManager.getInstance().getUpdateDeviceInfo(); - updateDeviceInfo.updateDeviceInfo( - Utils.getSerial(), - NetInterfaceManager.HTTP_KEY, - Utils.getMachine(context), - Utils.getHardware(context), - add - ) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onNext(ResponseBody responseBody) { - try { - Log.e("updateDeviceInfo", "上传的结果" + responseBody.string()); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @Override - public void onError(Throwable e) { - Log.e("updateDeviceInfo", e.getMessage()); - } - - @Override - public void onComplete() { - - } - }); - ApkUtils.getAppInfo(context); - } - public static void getSnTimeControl(final Context context) { SnTimeControlApi snTimeControl = NetInterfaceManager.getInstance().getSnTimeControlApi(); snTimeControl.getSnTimeControl(Utils.getSerial()) diff --git a/app/src/main/java/com/aoleyun/sn/network/NetInterfaceManager.java b/app/src/main/java/com/aoleyun/sn/network/NetInterfaceManager.java index a906f5b..b257d2b 100644 --- a/app/src/main/java/com/aoleyun/sn/network/NetInterfaceManager.java +++ b/app/src/main/java/com/aoleyun/sn/network/NetInterfaceManager.java @@ -2,8 +2,10 @@ package com.aoleyun.sn.network; import android.annotation.SuppressLint; import android.content.Context; +import android.provider.Settings; import android.util.Log; +import com.alibaba.fastjson.JSONObject; import com.aoleyun.sn.BuildConfig; import com.aoleyun.sn.bean.Appground; import com.aoleyun.sn.bean.BaseResponse; @@ -18,6 +20,8 @@ import com.aoleyun.sn.bean.PoweroffBean; import com.aoleyun.sn.bean.SnRunLog; import com.aoleyun.sn.bean.StudentsInfo; import com.aoleyun.sn.bean.WiFiAlias; +import com.aoleyun.sn.comm.CommonConfig; +import com.aoleyun.sn.comm.JGYActions; import com.aoleyun.sn.comm.PackageNames; import com.aoleyun.sn.network.api.AppLimitApi; import com.aoleyun.sn.network.api.DeselectIDApi; @@ -44,6 +48,7 @@ import com.aoleyun.sn.network.api.newapi.GetLockStateApi; import com.aoleyun.sn.network.api.newapi.GetJpushTagsApi; import com.aoleyun.sn.network.api.newapi.GetPoweroffApi; import com.aoleyun.sn.network.api.newapi.GetSnRunLogApi; +import com.aoleyun.sn.network.api.newapi.GetUploadIsLogApi; import com.aoleyun.sn.network.api.newapi.GetUploadLogApi; import com.aoleyun.sn.network.api.newapi.GetWiFiAliasApi; import com.aoleyun.sn.network.api.newapi.LogoImgApi; @@ -58,27 +63,42 @@ import com.aoleyun.sn.network.api.newapi.SnTimeControlApi; import com.aoleyun.sn.network.api.newapi.StudentsInfosApi; import com.aoleyun.sn.network.api.newapi.TopAppControlApi; import com.aoleyun.sn.network.api.newapi.UpdateDeviceInfoApi; +import com.aoleyun.sn.rlog.LogDBManager; +import com.aoleyun.sn.utils.ApkUtils; import com.aoleyun.sn.utils.JGYUtils; import com.aoleyun.sn.utils.MD5Util; import com.aoleyun.sn.utils.SPUtils; import com.aoleyun.sn.utils.Utils; +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.trello.rxlifecycle2.LifecycleProvider; +import com.trello.rxlifecycle2.android.ActivityEvent; import org.jetbrains.annotations.NotNull; import java.io.File; import java.io.IOException; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; import io.reactivex.Observable; +import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.annotations.NonNull; +import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; import okhttp3.Cache; import okhttp3.Interceptor; +import okhttp3.MediaType; +import okhttp3.MultipartBody; import okhttp3.OkHttpClient; import okhttp3.Protocol; import okhttp3.Request; +import okhttp3.RequestBody; import okhttp3.Response; import okhttp3.ResponseBody; import retrofit2.Retrofit; @@ -86,6 +106,8 @@ import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; public class NetInterfaceManager { + private static final String TAG = NetInterfaceManager.class.getSimpleName(); + @SuppressLint("StaticFieldLeak") private static NetInterfaceManager INSTANCE; private Context mContext; @@ -547,4 +569,207 @@ public class NetInterfaceManager { return mRetrofit.create(GetUploadLogApi.class); } + public GetUploadIsLogApi getUploadIsLogApi() { + return mRetrofit.create(GetUploadIsLogApi.class); + } + + /* + * + * execution + * + * */ + private final int OK = 200; + + private final static int NOTFOUND = -300; + + public interface ObserverCallback { + void onSubscribe(Disposable d); + + void onNext(BaseResponse response); + + void onError(Throwable e); + + void onComplete(); + } + + public void getLockedState(LifecycleProvider provider, ObserverCallback callback) { + NetInterfaceManager.getInstance() + .getDevicesLockedStateObservable() + .compose(provider.bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + Log.e(TAG + ":" + "getLockedState", "onSubscribe: "); + callback.onSubscribe(d); + } + + @Override + public void onNext(@NonNull BaseResponse response) { + Log.e(TAG + ":" + "getLockedState", "onNext: " + response); + if (response.code == OK) { + JsonObject jsonObject = JsonParser.parseString(new Gson().toJson(response.data)).getAsJsonObject(); + int locked = jsonObject.get("lock").getAsInt(); + Log.e(TAG + ":" + "getLockedState", "locked: " + locked); + int oldState = Settings.System.getInt(mContext.getContentResolver(), JGYActions.ACTION_QCH_UNLOCK_IPAD, JGYActions.FRAME_CODE_LOCKED); + Log.e(TAG + ":" + "getLockedState", "qch_unlock_ipad: " + oldState); + //后台1是锁定,底层0是锁定 + SPUtils.put(mContext, CommonConfig.JGY_FIRST_CONNECT, 1); + if (locked == JGYActions.NET_CODE_LOCKED) { + if (oldState == JGYActions.FRAME_CODE_UNLOCKED) { + Log.e(TAG + ":" + "getLockedState", "onNext: " + "state changed , reset devices"); + Utils.doMasterClear(mContext); + } + Settings.System.putInt(mContext.getContentResolver(), JGYActions.ACTION_QCH_UNLOCK_IPAD, JGYActions.FRAME_CODE_LOCKED); + } else if (locked == JGYActions.NET_CODE_UNLOCKED) { +// SysSettingUtils.setEnableSetting(mContext); + Settings.System.putInt(mContext.getContentResolver(), JGYActions.ACTION_QCH_UNLOCK_IPAD, JGYActions.FRAME_CODE_UNLOCKED); + } + } else if (response.code == NOTFOUND) { + Settings.System.putInt(mContext.getContentResolver(), JGYActions.ACTION_QCH_UNLOCK_IPAD, JGYActions.FRAME_CODE_LOCKED); + Log.e(TAG + ":" + "getLockedState", "locked: " + false); + } + callback.onNext(response); + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e(TAG + ":" + "getLockedState", "onError: " + e.getMessage()); + callback.onError(e); + onComplete(); + } + + @Override + public void onComplete() { + Log.e(TAG + ":" + "getLockedState", "onComplete: "); + callback.onComplete(); + } + }); + } + + + @SuppressLint("NewApi") + public void updateDeviceInfo(ObserverCallback callback) { + String address = String.valueOf(SPUtils.get(mContext, "AmapAddress", "-")); + if ("-".equals(address)) { + address = (String) SPUtils.get(mContext, "AmapError", "-"); + } + String longitude = String.valueOf(SPUtils.get(mContext, "longitude", "0")); + String latitude = String.valueOf(SPUtils.get(mContext, "latitude", "0")); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("address", address); + jsonObject.put("longitude", longitude); + jsonObject.put("latitude", latitude); + String add = jsonObject.toJSONString(); + getUpdateDeviceInfo().updateDeviceInfo( + Utils.getSerial(), + NetInterfaceManager.HTTP_KEY, + Utils.getMachine(mContext), + Utils.getHardware(mContext), + add + ) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(Disposable d) { + callback.onSubscribe(d); + } + + @Override + public void onNext(BaseResponse baseResponse) { + callback.onNext(baseResponse); + Log.e("updateDeviceInfo", "上传的结果" + baseResponse.toString()); + } + + @Override + public void onError(Throwable e) { + callback.onError(e); + Log.e("updateDeviceInfo", e.getMessage()); + onComplete(); + } + + @Override + public void onComplete() { + callback.onComplete(); + } + }); + } + + + public void sendRunningAppInfo(ObserverCallback callback) { + String jsonString = ApkUtils.getRunningAppInfo(mContext); + getUploadAppInfoApi().getUploadAppInfoApi(NetInterfaceManager.HTTP_KEY, + Utils.getSerial(), + jsonString) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(Disposable d) { + Log.e("sendRunningAppInfo", "onSubscribe: "); + callback.onSubscribe(d); + } + + @Override + public void onNext(BaseResponse baseResponse) { + Log.e("sendRunningAppInfo", "onNext: " + baseResponse.toString()); + callback.onNext(baseResponse); + } + + @Override + public void onError(Throwable e) { + Log.e("sendRunningAppInfo", "onError: " + e.getMessage()); + callback.onError(e); + onComplete(); + } + + @Override + public void onComplete() { + Log.e("sendRunningAppInfo", "onComplete: "); + callback.onComplete(); + } + }); + } + + public void uploadLogFile() { + String logFilePath = LogDBManager.getInstance().saveToFile(); + File logFile = new File(logFilePath); + if (!logFile.exists()) { + Log.e(TAG, "senSNLogFile: " + logFilePath + " is not exists"); + return; + } + Map params = new HashMap<>(); + params.put("sn", Utils.getSerial()); + MediaType mediaType = MediaType.Companion.parse("text/plain"); + RequestBody fileBody = RequestBody.Companion.create(logFile, mediaType); + //设置一个file文件 + MultipartBody.Part body = MultipartBody.Part.createFormData("file", logFile.getName(), fileBody); + + NetInterfaceManager.getInstance().getUploadIsLogApi() + .sendSnisLog(params, body) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(Disposable d) { + Log.e("uploadLogFile", "onSubscribe: "); + } + + @Override + public void onNext(BaseResponse baseResponse) { + Log.e("uploadLogFile", "onNext: " + baseResponse); + } + + @Override + public void onError(Throwable e) { + Log.e("uploadLogFile", "onError: " + e.getMessage()); + onComplete(); + } + + @Override + public void onComplete() { + Log.e("uploadLogFile", "onComplete: "); + } + }); + } } diff --git a/app/src/main/java/com/aoleyun/sn/network/UrlAddress.java b/app/src/main/java/com/aoleyun/sn/network/UrlAddress.java index b541165..48adbde 100644 --- a/app/src/main/java/com/aoleyun/sn/network/UrlAddress.java +++ b/app/src/main/java/com/aoleyun/sn/network/UrlAddress.java @@ -8,86 +8,87 @@ import rxhttp.wrapper.annotation.DefaultDomain; * @author Administrator */ public class UrlAddress { - //根网址 + /*根网址*/ @DefaultDomain public static final String HTTP_TAG_HEAD_NEW = BuildConfig.ROOT_URL; - // 下载接口 根据包名匹配 请求后更新下载次数 + /*下载接口 根据包名匹配 请求后更新下载次数*/ public static final String SEND_DOWNLOAD_TIMES = "count/index"; - //app下载完成发送下载次数 + /*app下载完成发送下载次数*/ public static final String SEND_DOWNLOAD_FILE_INFO = "app/downloadApp"; - //获取设备锁定状态 + /*获取设备锁定状态*/ public static final String GET_DEVICES_LOCKED = "lock/index"; - //发送设备信息 + /*发送设备信息*/ public static final String SEND_DEVICES = "Mac/getMac"; - //发送app使用情况 + /*发送app使用情况*/ public static final String GET_APP_LOG = "Applog/getAppLog"; - //更新接口 + /*更新接口*/ public static final String CHECK_UPDATE = "Silent/silent"; - //获取设备标签 + /*获取设备标签*/ public static final String GET_DEVICES_TAGS = "Sn/getSnTag"; - //删除Aliases + /*删除Aliases*/ public static final String DELETE_GEDEVICE_ALIAS = "Sn/deleteAliases"; - //浏览器书签主页设置 + /*浏览器书签主页设置*/ public static final String SET_HOMEPAG_TAG = "Label"; - //app内部网页管控 + /*app内部网页管控*/ public static final String SET_APPINSIDEWEB = "Appground"; - //浏览器黑白名单地址 + /*浏览器黑白名单地址*/ public static final String SET_BROWSER_LIST = "browser"; - //强制安装应用 + /*强制安装应用*/ public static final String GET_FORCE_INSTALL_LIST = "forceinstall/index"; - //应用白名单 + /*应用白名单*/ public static final String SET_WHITE_PACKAGE_LIST = "firmware/index"; - //获取隐藏桌面图标 + /*获取隐藏桌面图标*/ public static final String GET_HIDE_DESKTOPICON = "Icon"; - //获取应用升级自启 + /*获取应用升级自启*/ public static final String NET_AND_LAUNCH_API = "automatic/get"; - //通过sn获取信息 + /*通过sn获取信息*/ public static final String GET_STUDENTS_INFO = "Sn/getStudent"; - //上传截图 + /*上传截图*/ public static final String SEND_SCREENSHOT = "Screenshot/addImg"; - //上传我的设备 + /*上传我的设备*/ public static final String UPDATE_DEVICEINFO = "Mac/getInfo"; - //获取霸屏状态 + /*获取霸屏状态*/ public static final String GET_LOCK_SCREEN_STATE = "Sn/getSnScreen"; - //获取默认桌面升级 + /*获取默认桌面升级*/ public static final String GET_DESKTOP = "Sn/getSnDesktop"; - //获取时间管控 + /*获取时间管控*/ public static final String GET_SN_TIME_CONTROL = "Sn/getSnTimeControl"; - //获取顶部app管控 + /*获取顶部app管控*/ public static final String GET_TOP_APP_CONTROL = "Sn/getSnAppControl"; - //获取测试app + /*获取测试app*/ public static final String GET_SN_APP_TEST = "Sn/getSnAppTest"; - //开机动画 + /*开机动画*/ public static final String GET_LOGO_IMG = "Sn/getLogoImg"; - //开发人员选项开关 + /*开发人员选项开关*/ public static final String GET_DEVELOPER = "Sn/getDeveloper"; - //通过固件名获取内置应用 + /*通过固件名获取内置应用*/ public static final String GET_ROM_APP = "And/getFirmwareApp"; - //获取全部应用 + /*获取全部应用*/ public static final String GET_ALL_APP = "recommend/index"; - //获取电子书包激活码 + /*获取电子书包激活码*/ public static final String GET_EBAG_CODE = "And/getEbagCode"; - //获取系统默认程序 + /*获取系统默认程序*/ public static final String GET_DEFAULT_APP = "app/getDefaultApp"; - //恢复出厂设置次数 + /*恢复出厂设置次数*/ public static final String SEND_RESTORE_TIMES = "And/restore"; - //获取远程关机时间 + /*获取远程关机时间*/ public static final String GET_POWEROFF_TIME = "And/getTimedShutdown"; - //获取WiFi名和密码 + /*获取WiFi名和密码*/ public static final String GET_WIFI_ALIAS_PW = "And/getWifi"; - //获取log任务 + /*获取log任务*/ public static final String GET_LOG_ORDER = "And/getSnRunLog"; - //上传log文件 + /*上传log文件*/ public static final String UPLOAD_LOG_FILE = "And/uploadLogFile"; + /*上传运行日志设置文件*/ + public static final String UPLOAD_IS_LOG_FILE = "And/sn/uploadIsLogFile"; - - //获取公网IP + /*获取公网IP*/ public static final String SHOUHU_CITYJSON = "http://pv.sohu.com/cityjson/"; - //删除alias + /*删除alias*/ public static final String DELETE_JPUSH_ALIAS = "https://device.jpush.cn/v3/aliases/"; - //删除tags + /*删除tags*/ public static final String DELETE_JPUSH_TAG = "https://device.jpush.cn/v3/tags/"; } diff --git a/app/src/main/java/com/aoleyun/sn/network/api/UploadAppInfoApi.java b/app/src/main/java/com/aoleyun/sn/network/api/UploadAppInfoApi.java index f4158b1..1b4791e 100644 --- a/app/src/main/java/com/aoleyun/sn/network/api/UploadAppInfoApi.java +++ b/app/src/main/java/com/aoleyun/sn/network/api/UploadAppInfoApi.java @@ -1,5 +1,7 @@ package com.aoleyun.sn.network.api; +import com.aoleyun.sn.bean.BaseResponse; + import io.reactivex.Observable; import okhttp3.ResponseBody; import retrofit2.http.Field; @@ -9,7 +11,7 @@ import retrofit2.http.POST; public interface UploadAppInfoApi { @FormUrlEncoded @POST("log/index") - Observable getUploadAppInfoApi( + Observable getUploadAppInfoApi( @Field("key") String key, @Field("sn") String sn, @Field("app_infoes") String json diff --git a/app/src/main/java/com/aoleyun/sn/network/api/newapi/GetUploadIsLogApi.java b/app/src/main/java/com/aoleyun/sn/network/api/newapi/GetUploadIsLogApi.java new file mode 100644 index 0000000..638bbe7 --- /dev/null +++ b/app/src/main/java/com/aoleyun/sn/network/api/newapi/GetUploadIsLogApi.java @@ -0,0 +1,23 @@ +package com.aoleyun.sn.network.api.newapi; + +import com.aoleyun.sn.bean.BaseResponse; +import com.aoleyun.sn.bean.SnRunLog; +import com.aoleyun.sn.network.UrlAddress; + +import java.util.Map; + +import io.reactivex.Observable; +import okhttp3.MultipartBody; +import retrofit2.http.Multipart; +import retrofit2.http.POST; +import retrofit2.http.Part; +import retrofit2.http.QueryMap; + +public interface GetUploadIsLogApi { + @Multipart + @POST(UrlAddress.UPLOAD_IS_LOG_FILE) + Observable sendSnisLog( + @QueryMap Map params, + @Part MultipartBody.Part body + ); +} diff --git a/app/src/main/java/com/aoleyun/sn/network/api/newapi/UpdateDeviceInfoApi.java b/app/src/main/java/com/aoleyun/sn/network/api/newapi/UpdateDeviceInfoApi.java index 5ef752d..e6b3fda 100644 --- a/app/src/main/java/com/aoleyun/sn/network/api/newapi/UpdateDeviceInfoApi.java +++ b/app/src/main/java/com/aoleyun/sn/network/api/newapi/UpdateDeviceInfoApi.java @@ -1,9 +1,9 @@ package com.aoleyun.sn.network.api.newapi; +import com.aoleyun.sn.bean.BaseResponse; import com.aoleyun.sn.network.UrlAddress; import io.reactivex.Observable; -import okhttp3.ResponseBody; import retrofit2.http.Field; import retrofit2.http.FormUrlEncoded; import retrofit2.http.POST; @@ -11,7 +11,7 @@ import retrofit2.http.POST; public interface UpdateDeviceInfoApi { @FormUrlEncoded @POST(UrlAddress.UPDATE_DEVICEINFO) - Observable updateDeviceInfo( + Observable updateDeviceInfo( @Field("sn") String sn, @Field("key") String key, @Field("machine") String machine, diff --git a/app/src/main/java/com/aoleyun/sn/receiver/BootReceiver.java b/app/src/main/java/com/aoleyun/sn/receiver/BootReceiver.java index 13610b4..1e2ae27 100644 --- a/app/src/main/java/com/aoleyun/sn/receiver/BootReceiver.java +++ b/app/src/main/java/com/aoleyun/sn/receiver/BootReceiver.java @@ -6,10 +6,14 @@ import android.content.Intent; import android.os.SystemClock; import android.util.Log; -import com.aoleyun.sn.activity.CheckNetActivity; -import com.aoleyun.sn.service.MainService; +import com.aoleyun.sn.activity.checknet.CheckNetActivity; +import com.aoleyun.sn.comm.CommonConfig; +import com.aoleyun.sn.rlog.LogDBManager; +import com.aoleyun.sn.service.main.MainService; import com.aoleyun.sn.utils.BootManager; import com.aoleyun.sn.utils.JGYUtils; +import com.aoleyun.sn.utils.SPUtils; +import com.aoleyun.sn.utils.Utils; import java.util.concurrent.TimeUnit; @@ -64,7 +68,6 @@ public class BootReceiver extends BroadcastReceiver { private static Start start; - @Override public void onReceive(Context context, Intent intent) { Log.e(TAG, "action:" + intent.getAction()); @@ -72,6 +75,12 @@ public class BootReceiver extends BroadcastReceiver { default: break; case Intent.ACTION_BOOT_COMPLETED: + if ((int) SPUtils.get(context, CommonConfig.FIRST_STARTUP, 0) == 0) { + LogDBManager.getInstance().creatRebootLog("首次启动", Utils.transferLongToDate(System.currentTimeMillis())); + SPUtils.put(context, CommonConfig.FIRST_STARTUP, 1); + } else { + LogDBManager.getInstance().creatRebootLog("设备重启", Utils.transferLongToDate(System.currentTimeMillis())); + } Intent intent1 = new Intent(context, CheckNetActivity.class); intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent1); @@ -102,7 +111,7 @@ public class BootReceiver extends BroadcastReceiver { // case "android.intent.action.MEDIA_REMOVED": // case "android.intent.action.MEDIA_BAD_REMOVAL": //除了USER_PRESENT应该都收不到 -// Log.e("fht", "BootReceiver MSG:" + intent.getAction()); + Log.e("fht", "BootReceiver MSG:" + intent.getAction()); JGYUtils.startServices(context); break; } diff --git a/app/src/main/java/com/aoleyun/sn/receiver/NewAppReceiver.java b/app/src/main/java/com/aoleyun/sn/receiver/NewAppReceiver.java index 07d127b..6d4a8d9 100644 --- a/app/src/main/java/com/aoleyun/sn/receiver/NewAppReceiver.java +++ b/app/src/main/java/com/aoleyun/sn/receiver/NewAppReceiver.java @@ -9,8 +9,10 @@ import android.os.Build; import android.text.TextUtils; import android.util.Log; +import com.aoleyun.sn.bean.BaseResponse; import com.aoleyun.sn.comm.PackageNames; import com.aoleyun.sn.network.HTTPInterface; +import com.aoleyun.sn.network.NetInterfaceManager; import com.aoleyun.sn.utils.ApkUtils; import com.aoleyun.sn.utils.CacheUtils; import com.aoleyun.sn.utils.JGYUtils; @@ -106,7 +108,28 @@ public class NewAppReceiver extends BroadcastReceiver { public void onNext(@NonNull String s) { Log.e(TAG, "sendAppInfo: onNext: " + s); SaveListUtils.getDownLoadList().remove(s); - ApkUtils.getAppInfo(mContext); + NetInterfaceManager.getInstance().sendRunningAppInfo(new NetInterfaceManager.ObserverCallback() { + @Override + public void onSubscribe(Disposable d) { + + } + + @Override + public void onNext(BaseResponse response) { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onComplete() { + + } + }); + //HTTPInterface.getNetAndLaunchSetting(mContext); HTTPInterface.getAppLimit(mContext); // HTTPInterface.getAppinsideWeb(mContext, () -> Log.e(TAG, "onNext: setAPPinsideWebsite")); diff --git a/app/src/main/java/com/aoleyun/sn/rlog/LogBean.java b/app/src/main/java/com/aoleyun/sn/rlog/LogBean.java new file mode 100644 index 0000000..3df81da --- /dev/null +++ b/app/src/main/java/com/aoleyun/sn/rlog/LogBean.java @@ -0,0 +1,73 @@ +package com.aoleyun.sn.rlog; + +import com.aoleyun.sn.utils.Utils; + +import java.io.Serializable; + +public class LogBean implements Serializable { + private static final long serialVersionUID = -1608434464416521927L; + + Integer id; + String code; + Long timestamp; + String event; + String operate; + String content; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public Long getTimestamp() { + return timestamp; + } + + public void setTimestamp(Long timestamp) { + this.timestamp = timestamp; + } + + public String getEvent() { + return event; + } + + public void setEvent(String event) { + this.event = event; + } + + public String getOperate() { + return operate; + } + + public void setOperate(String operate) { + this.operate = operate; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String toLogString() { + return "执行代码:" + code + + ",时间: " + Utils.transferLongToDate(timestamp) + + ",事件: " + event + + ",操作: " + operate + + ",内容: " + content + ; + } +} diff --git a/app/src/main/java/com/aoleyun/sn/rlog/LogDBHelper.java b/app/src/main/java/com/aoleyun/sn/rlog/LogDBHelper.java new file mode 100644 index 0000000..914ef7f --- /dev/null +++ b/app/src/main/java/com/aoleyun/sn/rlog/LogDBHelper.java @@ -0,0 +1,36 @@ +package com.aoleyun.sn.rlog; + +import android.content.Context; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; +import android.os.Environment; + +import java.io.File; + +public class LogDBHelper extends SQLiteOpenHelper { + public static final String DATABASE_NAME = "requestlog.db"; + private static final String DATABASE_FILE_NAME = Environment.getExternalStorageDirectory().getPath() + File.separator + DATABASE_NAME; + private static final int DATABASE_VERSION = 1; + + public LogDBHelper(Context context) { + super(context, DATABASE_FILE_NAME, null, DATABASE_VERSION); + } + + @Override + public void onCreate(SQLiteDatabase sqLiteDatabase) { + sqLiteDatabase.execSQL("CREATE TABLE IF NOT EXISTS logtable (" + + "id integer primary key autoincrement," + + "code varchar(8)," + + "timestamp integer," + + "event varchar(64)," + + "operate varchar(64)," + + "content text" + + ")" + ); + } + + @Override + public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { + + } +} diff --git a/app/src/main/java/com/aoleyun/sn/rlog/LogDBManager.java b/app/src/main/java/com/aoleyun/sn/rlog/LogDBManager.java new file mode 100644 index 0000000..6fc1968 --- /dev/null +++ b/app/src/main/java/com/aoleyun/sn/rlog/LogDBManager.java @@ -0,0 +1,211 @@ +package com.aoleyun.sn.rlog; + +import android.annotation.SuppressLint; +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.os.Environment; +import android.util.Log; + +import androidx.core.content.ContextCompat; + +import com.aoleyun.sn.database.DBSqlBuilder; +import com.aoleyun.sn.utils.Utils; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class LogDBManager { + @SuppressLint("StaticFieldLeak") + private static LogDBManager sInstance; + private Context mContext; + private LogDBHelper mDBHelper; + + private static final String TABLE_NAME = "logtable"; + private static String TAG = LogDBManager.class.getSimpleName(); + + private LogDBManager(Context context) { + if (context == null) { + throw new RuntimeException("Context is NULL"); + } + mContext = context; + mDBHelper = new LogDBHelper(context); + } + + public static void init(Context context) { + if (sInstance == null) { + sInstance = new LogDBManager(context); + } + } + + public static LogDBManager getInstance() { + if (sInstance == null) { + throw new IllegalStateException("You must be init LogDBManager first"); + } + return sInstance; + } + + public LogDBHelper getDBHelper() { + if (mDBHelper == null) { + mDBHelper = new LogDBHelper(mContext); + } + return mDBHelper; + } + + private static final String LOG_CODE_REBOOT = "1001"; + private static final String LOG_CODE_NETWORK = "1002"; + private static final String LOG_CODE_NETCHANGE = "1003"; + + private static final String LOG_EVENT_REBOOT = "设备重启"; + private static final String LOG_EVENT_NETWORK = "首次联网"; + private static final String LOG_EVENT_NETCHANGE = "网络改变"; + public static final String LOG_EVENT_BATTERY = "充电改变"; + + public void creatRebootLog(String operate, String content) { + LogBean logBean = new LogBean(); + logBean.setCode(LOG_CODE_REBOOT); + logBean.setTimestamp(System.currentTimeMillis()); + logBean.setEvent(LOG_EVENT_REBOOT); + logBean.setOperate(operate); + logBean.setContent(content); + saveLog(logBean); + } + + public void creatNetworktLog(String operate, String content) { + LogBean logBean = new LogBean(); + logBean.setCode(LOG_CODE_NETWORK); + logBean.setTimestamp(System.currentTimeMillis()); + logBean.setEvent(LOG_EVENT_NETWORK); + logBean.setOperate(operate); + logBean.setContent(content); + saveLog(logBean); + } + + public void creatNetChangeLog(String operate, String content) { + LogBean logBean = new LogBean(); + logBean.setCode(LOG_CODE_NETCHANGE); + logBean.setTimestamp(System.currentTimeMillis()); + logBean.setEvent(LOG_EVENT_NETCHANGE); + logBean.setOperate(operate); + logBean.setContent(content); + saveLog(logBean); + } + + public void creatOtherLog(String event, String operate, String content) { + LogBean logBean = new LogBean(); + logBean.setCode("0000"); + logBean.setTimestamp(System.currentTimeMillis()); + logBean.setEvent(event); + logBean.setOperate(operate); + logBean.setContent(content); + saveLog(logBean); + } + + + public void saveLog(LogBean logBean) { + SQLiteDatabase db = mDBHelper.getWritableDatabase(); + ContentValues values = new ContentValues(); + values.put("code", logBean.getCode()); + values.put("timestamp", logBean.getTimestamp()); + values.put("event", logBean.getEvent()); + values.put("operate", logBean.getOperate()); + values.put("content", logBean.getContent()); + db.insert(TABLE_NAME, null, values); + } + + public void delete(Integer id) { + SQLiteDatabase db = mDBHelper.getWritableDatabase(); + db.delete(TABLE_NAME, "id=?", new String[]{id.toString()}); + } + + public void deleteAll() { + SQLiteDatabase db = mDBHelper.getWritableDatabase(); + db.delete(TABLE_NAME, "", null); + } + + public void update(LogBean logBean) { + SQLiteDatabase db = mDBHelper.getWritableDatabase(); + ContentValues values = new ContentValues(); + values.put("code", logBean.getCode()); + values.put("timestamp", logBean.getTimestamp()); + values.put("event", logBean.getEvent()); + values.put("operate", logBean.getOperate()); + values.put("content", logBean.getContent()); + db.update(TABLE_NAME, values, "id=?", new String[]{logBean.getId().toString()}); + } + + private long aWeekDayTime = 1000 * 60 * 60 * 24 * 7; + + public List getLogList() { + List logBeanList = new ArrayList<>(); + SQLiteDatabase db = mDBHelper.getReadableDatabase(); + long time = System.currentTimeMillis() - aWeekDayTime; + String sql = "select * from " + TABLE_NAME + " where" + " timestamp > " + time; + Cursor cursor = null; + try { + cursor = db.rawQuery(sql, null); + while (cursor.moveToNext()) { + LogBean logBean = new LogBean(); + logBean.setId(cursor.getInt(cursor.getColumnIndex("id"))); + logBean.setCode(cursor.getString(cursor.getColumnIndex("code"))); + logBean.setTimestamp(cursor.getLong(cursor.getColumnIndex("timestamp"))); + logBean.setEvent(cursor.getString(cursor.getColumnIndex("event"))); + logBean.setOperate(cursor.getString(cursor.getColumnIndex("operate"))); + logBean.setContent(cursor.getString(cursor.getColumnIndex("content"))); + logBeanList.add(logBean); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (cursor != null) { + cursor.close(); + } + db.close(); + } + return logBeanList; + } + + public String saveToFile() { + List logBeanList = getLogList(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy_MM_dd-HH_mm_ss"); + Date date = new Date(System.currentTimeMillis()); + String fileName = sdf.format(date) + " log.txt"; + String filePath = ContextCompat.getExternalFilesDirs(mContext, Environment.DIRECTORY_DOCUMENTS)[0].getAbsolutePath() + + File.separator + fileName; + File logFile = new File(filePath); + if (logFile.exists()) { + logFile.delete(); + } + StringBuilder stringBuilder = new StringBuilder(); + for (LogBean logBean : logBeanList) { + stringBuilder.append(logBean.toLogString()).append("\n"); + } + byte[] bs = stringBuilder.toString().getBytes(); + try { + OutputStream out = new FileOutputStream(logFile); + InputStream is = new ByteArrayInputStream(bs); + byte[] buff = new byte[1024]; + int len = 0; + while ((len = is.read(buff)) != -1) { + out.write(buff, 0, len); + } + is.close(); + out.close(); + } catch (IOException e) { + e.printStackTrace(); + } + Log.e(TAG, "saveToFile: " + logFile.getAbsolutePath()); + return logFile.getAbsolutePath(); + } + +} diff --git a/app/src/main/java/com/aoleyun/sn/service/MyDownloadService.java b/app/src/main/java/com/aoleyun/sn/service/DownloadService.java similarity index 93% rename from app/src/main/java/com/aoleyun/sn/service/MyDownloadService.java rename to app/src/main/java/com/aoleyun/sn/service/DownloadService.java index 53b37ed..4d18295 100644 --- a/app/src/main/java/com/aoleyun/sn/service/MyDownloadService.java +++ b/app/src/main/java/com/aoleyun/sn/service/DownloadService.java @@ -6,7 +6,7 @@ import android.content.Intent; import android.os.IBinder; // 下载管理服务 -public class MyDownloadService extends Service { +public class DownloadService extends Service { @Override public int onStartCommand(Intent intent, int flags, int startId) { flags = START_STICKY; diff --git a/app/src/main/java/com/aoleyun/sn/service/GuardService.java b/app/src/main/java/com/aoleyun/sn/service/GuardService.java index a70a844..3c68bb3 100644 --- a/app/src/main/java/com/aoleyun/sn/service/GuardService.java +++ b/app/src/main/java/com/aoleyun/sn/service/GuardService.java @@ -22,8 +22,11 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.amap.api.location.AMapLocationClient; import com.aoleyun.sn.bean.BaseResponse; +import com.aoleyun.sn.comm.CommonConfig; import com.aoleyun.sn.comm.PackageNames; import com.aoleyun.sn.network.api.newapi.SendScreenStatusApi; +import com.aoleyun.sn.rlog.LogDBManager; +import com.aoleyun.sn.service.main.MainService; import com.arialyy.annotations.Download; import com.arialyy.aria.core.Aria; import com.arialyy.aria.core.download.DownloadEntity; @@ -417,11 +420,25 @@ public class GuardService extends Service { if (elec == 50) { start.onstar(SystemClock.elapsedRealtime()); } - } else if (Intent.ACTION_POWER_CONNECTED.equals(action) - || Intent.ACTION_POWER_DISCONNECTED.equals(action) - || Intent.ACTION_BATTERY_LOW.equals(action) - || Intent.ACTION_BATTERY_OKAY.equals(action) - ) { + } else { + if (Intent.ACTION_POWER_CONNECTED.equals(action)) { + LogDBManager.getInstance().creatOtherLog(LogDBManager.LOG_EVENT_BATTERY, + "开始充电", "rlectricity: " + JGYUtils.getInstance().getBatteryLevel() + "%"); + + } + if (Intent.ACTION_POWER_DISCONNECTED.equals(action)) { + LogDBManager.getInstance().creatOtherLog(LogDBManager.LOG_EVENT_BATTERY, + "停止充电", "rlectricity: " + JGYUtils.getInstance().getBatteryLevel() + "%"); + } + if (Intent.ACTION_BATTERY_LOW.equals(action)) { + LogDBManager.getInstance().creatOtherLog(LogDBManager.LOG_EVENT_BATTERY, + "电量偏低", "rlectricity: " + JGYUtils.getInstance().getBatteryLevel() + "%"); + } + if (Intent.ACTION_BATTERY_OKAY.equals(action)) { + LogDBManager.getInstance().creatOtherLog(LogDBManager.LOG_EVENT_BATTERY, + "电量充足", "rlectricity: " + JGYUtils.getInstance().getBatteryLevel() + "%"); + } + setDefaultUSBStatus(); Log.e(TAG, action); start.onstar(SystemClock.elapsedRealtime()); @@ -515,7 +532,7 @@ public class GuardService extends Service { Log.e("SEND_DOWNLOAD_TIMES", "onComplete: "); } }); - int userId = (int) SPUtils.get(GuardService.this, "admin_id", 0); + int userId = (int) SPUtils.get(GuardService.this, CommonConfig.ADMIN_ID, 0); long appSize = task.getFileSize(); NetInterfaceManager.getInstance() .getSendInfoApi() diff --git a/app/src/main/java/com/aoleyun/sn/activity/main/MainContact.java b/app/src/main/java/com/aoleyun/sn/service/main/MainSContact.java similarity index 99% rename from app/src/main/java/com/aoleyun/sn/activity/main/MainContact.java rename to app/src/main/java/com/aoleyun/sn/service/main/MainSContact.java index f3d3e41..2932e4d 100644 --- a/app/src/main/java/com/aoleyun/sn/activity/main/MainContact.java +++ b/app/src/main/java/com/aoleyun/sn/service/main/MainSContact.java @@ -1,13 +1,13 @@ -package com.aoleyun.sn.activity.main; +package com.aoleyun.sn.service.main; import android.graphics.Bitmap; import android.view.View; -import com.google.gson.JsonObject; import com.aoleyun.sn.base.BasePresenter; import com.aoleyun.sn.base.BaseView; +import com.google.gson.JsonObject; -public class MainContact { +public class MainSContact { public interface Presenter extends BasePresenter { //设置二维码 void getQRImage(String mac); diff --git a/app/src/main/java/com/aoleyun/sn/activity/main/MainPresenter.java b/app/src/main/java/com/aoleyun/sn/service/main/MainSPresenter.java similarity index 97% rename from app/src/main/java/com/aoleyun/sn/activity/main/MainPresenter.java rename to app/src/main/java/com/aoleyun/sn/service/main/MainSPresenter.java index db671cd..2039af1 100644 --- a/app/src/main/java/com/aoleyun/sn/activity/main/MainPresenter.java +++ b/app/src/main/java/com/aoleyun/sn/service/main/MainSPresenter.java @@ -1,4 +1,4 @@ -package com.aoleyun.sn.activity.main; +package com.aoleyun.sn.service.main; import android.annotation.SuppressLint; import android.content.Context; @@ -12,17 +12,6 @@ import android.view.View; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import com.aoleyun.sn.action.JGYActions; -import com.aoleyun.sn.bean.PoweroffBean; -import com.aoleyun.sn.bean.WiFiAlias; -import com.aoleyun.sn.comm.PackageNames; -import com.aoleyun.sn.utils.WiFiUtils; -import com.arialyy.aria.core.Aria; -import com.google.gson.Gson; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import com.google.gson.reflect.TypeToken; import com.aoleyun.sn.BuildConfig; import com.aoleyun.sn.base.BaseApplication; import com.aoleyun.sn.bean.BaseResponse; @@ -31,12 +20,16 @@ import com.aoleyun.sn.bean.ForceDownloadBean; import com.aoleyun.sn.bean.ForceDownloadData; import com.aoleyun.sn.bean.LogoImg; import com.aoleyun.sn.bean.NetAndLaunchBean; +import com.aoleyun.sn.bean.PoweroffBean; import com.aoleyun.sn.bean.StudentsInfo; -import com.aoleyun.sn.network.NetInterfaceManager; +import com.aoleyun.sn.bean.WiFiAlias; +import com.aoleyun.sn.comm.CommonConfig; +import com.aoleyun.sn.comm.JGYActions; +import com.aoleyun.sn.comm.PackageNames; import com.aoleyun.sn.network.HTTPInterface; -import com.aoleyun.sn.service.MainService; -import com.aoleyun.sn.utils.ApkUtils; +import com.aoleyun.sn.network.NetInterfaceManager; import com.aoleyun.sn.utils.AES.CXAESUtil; +import com.aoleyun.sn.utils.ApkUtils; import com.aoleyun.sn.utils.ForegroundAppUtil; import com.aoleyun.sn.utils.JGYUtils; import com.aoleyun.sn.utils.SPUtils; @@ -45,6 +38,13 @@ import com.aoleyun.sn.utils.TimeUtils; import com.aoleyun.sn.utils.ToastUtil; import com.aoleyun.sn.utils.URLUtils; import com.aoleyun.sn.utils.Utils; +import com.aoleyun.sn.utils.WiFiUtils; +import com.arialyy.aria.core.Aria; +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.reflect.TypeToken; import com.tencent.android.tpush.XGIOperateCallback; import com.tencent.android.tpush.XGPushManager; import com.tencent.mmkv.MMKV; @@ -73,9 +73,9 @@ import okhttp3.ResponseBody; * * @author jgy02 */ -public class MainPresenter implements MainContact.Presenter { - private static final String TAG = MainPresenter.class.getSimpleName(); - private MainContact.MainView mView; +public class MainSPresenter implements MainSContact.Presenter { + private static final String TAG = MainSPresenter.class.getSimpleName(); + private MainSContact.MainView mView; private Context mContext; public static final String GET_SETTING_FINISH_TIME = "GET_SETTING_FINISH_TIME"; @@ -95,9 +95,9 @@ public class MainPresenter implements MainContact.Presenter { return provider; } - public MainPresenter(Context context) { + public MainSPresenter(Context context) { this.mContext = context; - Log.e(TAG, "MainPresenter: " + context.getClass()); + Log.e(TAG, "MainSPresenter: " + context.getClass()); } public boolean isRequestSucceeded() { @@ -105,7 +105,7 @@ public class MainPresenter implements MainContact.Presenter { } @Override - public void attachView(@androidx.annotation.NonNull MainContact.MainView view) { + public void attachView(@androidx.annotation.NonNull MainSContact.MainView view) { this.mView = view; } @@ -161,41 +161,41 @@ public class MainPresenter implements MainContact.Presenter { String head_img = studentsInfoBaseResponse.data.getHead_img(); if (TextUtils.isEmpty(sno)) { mView.setNumberText("", View.GONE); - SPUtils.put(mContext, "sno", DEFAULT_INFO); + SPUtils.put(mContext, CommonConfig.STUDENT_ID, DEFAULT_INFO); } else { mView.setNumberText(sno, View.VISIBLE); - SPUtils.put(mContext, "sno", sno); + SPUtils.put(mContext, CommonConfig.STUDENT_ID, sno); } if (TextUtils.isEmpty(realname)) { mView.setNameText("", View.GONE); - SPUtils.put(mContext, "realname", DEFAULT_INFO); + SPUtils.put(mContext, CommonConfig.REALNAME, DEFAULT_INFO); } else { mView.setNameText(realname, View.VISIBLE); - SPUtils.put(mContext, "realname", realname); + SPUtils.put(mContext, CommonConfig.REALNAME, realname); } if (TextUtils.isEmpty(classes)) { mView.setClassText("", View.GONE); - SPUtils.put(mContext, "classes", DEFAULT_INFO); + SPUtils.put(mContext, CommonConfig.CLASS_NAME, DEFAULT_INFO); } else { mView.setClassText(classes, View.VISIBLE); - SPUtils.put(mContext, "classes", classes); + SPUtils.put(mContext, CommonConfig.CLASS_NAME, classes); } if (TextUtils.isEmpty(batch)) { mView.setBatchText("", View.GONE); - SPUtils.put(mContext, "batch", DEFAULT_INFO); + SPUtils.put(mContext, CommonConfig.BATCH_NAME, DEFAULT_INFO); } else { mView.setBatchText(batch, View.VISIBLE); - SPUtils.put(mContext, "batch", batch); + SPUtils.put(mContext, CommonConfig.BATCH_NAME, batch); } if (TextUtils.isEmpty(head_img)) { mView.setHead(""); - SPUtils.put(mContext, "head_img", ""); + SPUtils.put(mContext, CommonConfig.HEAD_IMG, ""); } else { mView.setHead(head_img); - SPUtils.put(mContext, "head_img", head_img); + SPUtils.put(mContext, CommonConfig.HEAD_IMG, head_img); } - SPUtils.put(mContext, "admin_id", studentsInfoBaseResponse.data.getAdmin_id()); + SPUtils.put(mContext, CommonConfig.ADMIN_ID, studentsInfoBaseResponse.data.getAdmin_id()); } else { /* * 没有获取到的时候显示缓存 @@ -226,33 +226,33 @@ public class MainPresenter implements MainContact.Presenter { } private void setState() { - String batch = (String) SPUtils.get(mContext, "batch", DEFAULT_INFO); + String batch = (String) SPUtils.get(mContext, CommonConfig.BATCH_NAME, DEFAULT_INFO); if (TextUtils.isEmpty(batch) || batch.equalsIgnoreCase(DEFAULT_INFO)) { mView.setBatchText("", View.GONE); } else { mView.setBatchText(batch, View.VISIBLE); } - String classes = (String) SPUtils.get(mContext, "classes", DEFAULT_INFO); + String classes = (String) SPUtils.get(mContext, CommonConfig.CLASS_NAME, DEFAULT_INFO); if (TextUtils.isEmpty(classes) || classes.equalsIgnoreCase(DEFAULT_INFO)) { mView.setClassText("", View.GONE); } else { mView.setClassText(classes, View.VISIBLE); } - String sno = (String) SPUtils.get(mContext, "sno", DEFAULT_INFO); + String sno = (String) SPUtils.get(mContext, CommonConfig.STUDENT_ID, DEFAULT_INFO); if (TextUtils.isEmpty(sno) || sno.equalsIgnoreCase(DEFAULT_INFO)) { mView.setNumberText("", View.GONE); } else { mView.setNumberText(sno, View.VISIBLE); } - String realname = (String) SPUtils.get(mContext, "realname", DEFAULT_INFO); + String realname = (String) SPUtils.get(mContext, CommonConfig.REALNAME, DEFAULT_INFO); if (TextUtils.isEmpty(realname) || realname.equalsIgnoreCase(DEFAULT_INFO)) { mView.setNameText("", View.GONE); } else { mView.setNameText(realname, View.VISIBLE); } - String head_img = (String) SPUtils.get(mContext, "head_img", DEFAULT_INFO); + String head_img = (String) SPUtils.get(mContext, CommonConfig.HEAD_IMG, DEFAULT_INFO); if (TextUtils.isEmpty(head_img) || head_img.equalsIgnoreCase(DEFAULT_INFO)) { mView.setHead(""); } else { @@ -266,7 +266,7 @@ public class MainPresenter implements MainContact.Presenter { @Override public void getLockedState() { MMKV mmkv = MMKV.defaultMMKV(); - lastgetLockedTime = mmkv.decodeLong(MainPresenter.GET_SETTING_FINISH_TIME); + lastgetLockedTime = mmkv.decodeLong(MainSPresenter.GET_SETTING_FINISH_TIME); Log.e(TAG, "getLockedState: " + lastgetLockedTime); if (System.currentTimeMillis() - lastgetLockedTime < one_minute) { Log.e(TAG, "getLockedState: lastgetLockedTime = " + lastgetLockedTime); @@ -294,7 +294,7 @@ public class MainPresenter implements MainContact.Presenter { int oldState = Settings.System.getInt(mContext.getContentResolver(), JGYActions.ACTION_QCH_UNLOCK_IPAD, 0); Log.e(TAG + ":" + "getLockedState", "qch_unlock_ipad: " + oldState); //后台1是锁定,底层0是锁定 - SPUtils.put(mContext, "first_connect", 1); + SPUtils.put(mContext, CommonConfig.JGY_FIRST_CONNECT, 1); if (locked == 1) { if (oldState == 1) { Log.e(TAG + ":" + "getLockedState", "onNext: " + "state changed , reset devices"); @@ -334,7 +334,7 @@ public class MainPresenter implements MainContact.Presenter { */ @Override public void getFirstConnect() { - int first = (int) SPUtils.get(mContext, "first_connect", 0); + int first = (int) SPUtils.get(mContext, CommonConfig.JGY_FIRST_CONNECT, 0); Log.e(TAG, "getFirstConnect: " + "first_connect = " + first); mView.setFirstConnect(first == 0); } @@ -434,21 +434,16 @@ public class MainPresenter implements MainContact.Presenter { .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) - .subscribe(new Observer() { + .subscribe(new Observer() { @Override public void onSubscribe(@NonNull Disposable d) { Log.e(TAG + ":" + "updateDevicesInfo", "onSubscribe: "); } @Override - public void onNext(@NonNull ResponseBody responseBody) { + public void onNext(@NonNull BaseResponse baseResponse) { requestSucceeded = true; - try { - Log.e(TAG + ":" + "updateDevicesInfo", "onNext: " + responseBody.string()); - } catch (IOException e) { - e.printStackTrace(); - Log.e(TAG + ":" + "updateDevicesInfo", "onNext: IOException: " + e.getMessage()); - } + Log.e(TAG + ":" + "updateDevicesInfo", "onNext: " + baseResponse); } @Override @@ -1671,7 +1666,7 @@ public class MainPresenter implements MainContact.Presenter { @Override public void onNext(@NonNull ResponseBody responseBody) { requestSucceeded = true; - SPUtils.put(mContext, "first_connect", 1); + SPUtils.put(mContext, CommonConfig.JGY_FIRST_CONNECT, 1); try { String bodyString = responseBody.string(); Log.e(TAG + ":" + "setSystemSetting", "onNext: " + bodyString); diff --git a/app/src/main/java/com/aoleyun/sn/service/MainService.java b/app/src/main/java/com/aoleyun/sn/service/main/MainService.java similarity index 80% rename from app/src/main/java/com/aoleyun/sn/service/MainService.java rename to app/src/main/java/com/aoleyun/sn/service/main/MainService.java index f7bbb05..d4123e7 100644 --- a/app/src/main/java/com/aoleyun/sn/service/MainService.java +++ b/app/src/main/java/com/aoleyun/sn/service/main/MainService.java @@ -1,4 +1,4 @@ -package com.aoleyun.sn.service; +package com.aoleyun.sn.service.main; import android.annotation.SuppressLint; import android.app.NotificationChannel; @@ -12,6 +12,10 @@ import android.content.IntentFilter; import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.PixelFormat; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.net.wifi.WifiInfo; +import android.net.wifi.WifiManager; import android.os.Build; import android.os.IBinder; import android.os.SystemClock; @@ -30,14 +34,19 @@ import androidx.core.app.NotificationManagerCompat; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.aoleyun.sn.BuildConfig; import com.aoleyun.sn.R; -import com.aoleyun.sn.action.JGYActions; import com.aoleyun.sn.activity.main.MainActivity; -import com.aoleyun.sn.activity.main.MainContact; -import com.aoleyun.sn.activity.main.MainPresenter; +import com.aoleyun.sn.activity.main.MainAContact; +import com.aoleyun.sn.activity.main.MainAPresenter; +import com.aoleyun.sn.bean.BaseResponse; import com.aoleyun.sn.bean.PoweroffBean; +import com.aoleyun.sn.comm.CommonConfig; +import com.aoleyun.sn.comm.JGYActions; import com.aoleyun.sn.comm.PackageNames; +import com.aoleyun.sn.network.NetInterfaceManager; import com.aoleyun.sn.receiver.BootReceiver; +import com.aoleyun.sn.rlog.LogDBManager; import com.aoleyun.sn.utils.ApkUtils; import com.aoleyun.sn.utils.ForegroundAppUtil; import com.aoleyun.sn.utils.JGYUtils; @@ -59,7 +68,9 @@ import com.trello.rxlifecycle2.android.ActivityEvent; import com.trello.rxlifecycle2.android.RxLifecycleAndroid; import java.lang.reflect.Type; +import java.text.SimpleDateFormat; import java.util.Arrays; +import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.concurrent.TimeUnit; @@ -71,11 +82,12 @@ import io.reactivex.Observer; import io.reactivex.disposables.Disposable; import io.reactivex.subjects.BehaviorSubject; -public class MainService extends Service implements MainContact.MainView, NetworkUtils.OnNetworkStatusChangedListener, LifecycleProvider { +public class MainService extends Service implements MainSContact.MainView, NetworkUtils.OnNetworkStatusChangedListener, LifecycleProvider { @SuppressLint("StaticFieldLeak") - public static MainPresenter mPresenter; + public static MainSPresenter mPresenter; private static final String TAG = MainService.class.getSimpleName(); public static boolean netWorkIsRunning = false; + private MMKV mMMKV = MMKV.defaultMMKV(); @Override public void onDisconnected() { @@ -85,13 +97,79 @@ public class MainService extends Service implements MainContact.MainView, Networ @Override public void onConnected(NetworkUtils.NetworkType networkType) { - Log.e("OnNetworkStatusChanged", "onConnected: "); - runningTime = SystemClock.elapsedRealtime(); - //直接获取数据 ToastUtil.betaShow("网络已连接"); - Utils.getPublicIP(this); - mPresenter.getLockedState(); + Log.e("OnNetworkStatusChanged", "onConnected: " + Utils.getWifiAlias(this)); start.onstar(SystemClock.elapsedRealtime()); + Utils.getPublicIP(this); + } + + private WifiReceiver mWifiReceiver; + + private void registerWiFiReceiver() { + if (mWifiReceiver == null) { + mWifiReceiver = new WifiReceiver(); + } + IntentFilter filter = new IntentFilter(); + filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); + filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); + filter.addAction(WifiManager.RSSI_CHANGED_ACTION); + filter.addAction(WifiManager.NETWORK_IDS_CHANGED_ACTION); + filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION); + filter.addAction(WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION); + filter.addAction(WifiManager.LINK_CONFIGURATION_CHANGED_ACTION); + filter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION); + filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); + registerReceiver(mWifiReceiver, filter); + } + + public class WifiReceiver extends BroadcastReceiver { + private static final String TAG = "wifiReceiver"; + + @Override + public void onReceive(Context context, Intent intent) { + switch (intent.getAction()) { + case WifiManager.RSSI_CHANGED_ACTION: + Log.e(TAG, "wifi信号强度变化"); + break; + //wifi连接上与否 + case WifiManager.NETWORK_STATE_CHANGED_ACTION: + NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); + if (info.getState().equals(NetworkInfo.State.DISCONNECTED)) { + Log.e(TAG, "wifi断开"); + LogDBManager.getInstance().creatNetChangeLog("wifi断开", Utils.transferLongToDate(System.currentTimeMillis())); + } else if (info.getState().equals(NetworkInfo.State.CONNECTED)) { + WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); + WifiInfo wifiInfo = wifiManager.getConnectionInfo(); + //获取当前wifi名称 + String oldSSID = mMMKV.decodeString("WiFiSSID", ""); + Log.e(TAG, "oldSSID " + oldSSID); + String newSSID = wifiInfo.getSSID(); + Log.e(TAG, "连接到网络 " + newSSID); + if (!oldSSID.equals(newSSID)) { + LogDBManager.getInstance().creatNetChangeLog("", oldSSID + " change to: " + newSSID); + runningTime = SystemClock.elapsedRealtime(); + //直接获取数据 + mPresenter.getLockedState(); + } else { + LogDBManager.getInstance().creatNetChangeLog("接入WiFi", + "connect to: " + newSSID + " time: " + + Utils.transferLongToDate(System.currentTimeMillis())); + } + mMMKV.encode("WiFiSSID", Utils.getWifiAlias(context)); + } + break; + //wifi打开与否 + case WifiManager.WIFI_STATE_CHANGED_ACTION: + int wifistate = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_DISABLED); + if (wifistate == WifiManager.WIFI_STATE_DISABLED) { + Log.e(TAG, "系统关闭wifi"); + } else if (wifistate == WifiManager.WIFI_STATE_ENABLED) { + Log.e(TAG, "系统开启wifi"); + } + break; + default: + } + } } private final BehaviorSubject lifecycleSubject = BehaviorSubject.create(); @@ -162,14 +240,22 @@ public class MainService extends Service implements MainContact.MainView, Networ public void onCreate() { super.onCreate(); lifecycleSubject.onNext(ActivityEvent.CREATE); - mPresenter = new MainPresenter(this); + mPresenter = new MainSPresenter(this); mPresenter.attachView(this); mPresenter.setProvider(this); - if ((int) SPUtils.get(this, "first_connect", 0) == 0) { + if ((int) SPUtils.get(this, CommonConfig.JGY_FIRST_CONNECT, 0) == 0) { // TODO: 2021/5/26 待底层修改,临时解决办法 Log.e(TAG, "onCreate: " + "Disable All Settings"); mPresenter.setDisableSetting(); } + int oldVersionCode = (int) SPUtils.get(this, CommonConfig.SN_VERSIONCODE, 0); + if (oldVersionCode < BuildConfig.VERSION_CODE) { + Log.e(TAG, "onCreate: " + "upgrade successful"); + } else { + mPresenter.getFirstConnect(); + mPresenter.getLockedState(); + } + SPUtils.put(this, CommonConfig.SN_VERSIONCODE, BuildConfig.VERSION_CODE); registerReceivers(); NetworkUtils.registerNetworkStatusChangedListener(this); addShortcut(); @@ -209,23 +295,10 @@ public class MainService extends Service implements MainContact.MainView, Networ Intent bootIntent = new Intent(BootReceiver.BOOT_COMPLETED); bootIntent.setComponent(new ComponentName(PackageNames.APPSTORE, PackageNames.APP_STORE_BOOTRECEIVER)); sendBroadcast(bootIntent); -// JPushInterface.init(this); - if (MainActivity.isForeground) { - Log.e(TAG, "onStartCommand: MainService: isForeground: " + MainActivity.isForeground); - } else { -// if (((SystemClock.elapsedRealtime() - startCommandTime) < 60000) && startCommandTime != 0) { -// Log.e(TAG, "onStartCommand: " + "启动时间过短"); -// //一分钟内防止多次调用 -// } else { -// mPresenter.getFirstConnect(); -// mPresenter.getLockedState(); -// startCommandTime = runningTime = SystemClock.elapsedRealtime(); -// Log.e(TAG, "onStartCommand: isForeground: " + MainActivity.isForeground); -// Log.e(TAG, "onStartCommand: " + (SystemClock.elapsedRealtime() - startCommandTime)); -// } - start.onstar(SystemClock.elapsedRealtime()); - Log.e(TAG, "onStartCommand: " + (SystemClock.elapsedRealtime() - startCommandTime) + "ms"); - } +// mPresenter.getFirstConnect(); +// mPresenter.getLockedState(); + start.onstar(SystemClock.elapsedRealtime()); + Log.e(TAG, "onStartCommand: " + (SystemClock.elapsedRealtime() - startCommandTime) + "ms"); return START_STICKY; } @@ -269,7 +342,7 @@ public class MainService extends Service implements MainContact.MainView, Networ } private void setStatusbar() { - String status = (String) SPUtils.get(this, JGYActions.ACTION_STATUS_BAR_STATUS, ""); + String status = (String) SPUtils.get(this, JGYActions.ACTION_STATUSBAR_STATUS, ""); Log.e(TAG, "setStatusbar: String: " + status); if (TextUtils.isEmpty(status)) { Log.e(TAG, "setStatusbar: " + "status is NULL"); @@ -280,6 +353,7 @@ public class MainService extends Service implements MainContact.MainView, Networ } private void registerReceivers() { + registerWiFiReceiver(); registerLockScreenReceiver(); registerTimeReceiver(); registerInstallReceiver(); @@ -295,6 +369,9 @@ public class MainService extends Service implements MainContact.MainView, Networ if (null != mInstallReceiver) { unregisterReceiver(mInstallReceiver); } + if (null != mWifiReceiver) { + unregisterReceiver(mWifiReceiver); + } } private static WindowManager windowManager; @@ -483,6 +560,7 @@ public class MainService extends Service implements MainContact.MainView, Networ } else if (Intent.ACTION_TIME_TICK.equals(intent.getAction())) { Log.e("TimeChangedReceiver", "onReceive:" + "time tick"); checkShutdownTime(); + checkUploadLogTime(); setFloatingWindow(MainService.this); } else if (ACTION_UPDATE.equals(intent.getAction())) { setFloatingWindow(MainService.this); @@ -517,6 +595,23 @@ public class MainService extends Service implements MainContact.MainView, Networ } } + private static final String UPLOAD_LOG_TIME = "23:00:00"; + + private void checkUploadLogTime() { + int is_log_type = (int) SPUtils.get(MainService.this, CommonConfig.UPLOAD_LOG_TYPE, 0); + if (is_log_type == 0) { + Log.e(TAG, "checkUploadLogTime: " + "is_log_type = " + is_log_type); + } else { + SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); + Date date = new Date(System.currentTimeMillis()); + String nowTime = sdf.format(date); + Log.e(TAG, "checkUploadLogTime: " + nowTime); + if (UPLOAD_LOG_TIME.equals(nowTime)) { + NetInterfaceManager.getInstance().uploadLogFile(); + } + } + } + synchronized private void setFloatingWindow(Context context) { ForegroundAppUtil.openTopApp(context); long nowTime = System.currentTimeMillis(); @@ -652,7 +747,28 @@ public class MainService extends Service implements MainContact.MainView, Networ if (loocked) { ToastUtil.betaShow("设备已上锁"); //上传APP信息 - ApkUtils.getAppInfo(this); + NetInterfaceManager.getInstance().sendRunningAppInfo(new NetInterfaceManager.ObserverCallback() { + @Override + public void onSubscribe(Disposable d) { + + } + + @Override + public void onNext(BaseResponse response) { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onComplete() { + + } + }); + SaveListUtils.getList(); if (netWorkIsRunning) { //如果正在执行,不执行 @@ -851,7 +967,7 @@ public class MainService extends Service implements MainContact.MainView, Networ @Override public void setWiFiPasswd() { - MMKV.defaultMMKV().encode(MainPresenter.GET_SETTING_FINISH_TIME, System.currentTimeMillis()); + MMKV.defaultMMKV().encode(MainAPresenter.GET_SETTING_FINISH_TIME, System.currentTimeMillis()); netWorkIsRunning = false; Log.e(TAG, "SettingFinished: " + (SystemClock.elapsedRealtime() - runningTime) + " ms"); } diff --git a/app/src/main/java/com/aoleyun/sn/tpush/MessageReceiver.java b/app/src/main/java/com/aoleyun/sn/tpush/MessageReceiver.java index 051fa81..b0f4eee 100644 --- a/app/src/main/java/com/aoleyun/sn/tpush/MessageReceiver.java +++ b/app/src/main/java/com/aoleyun/sn/tpush/MessageReceiver.java @@ -12,7 +12,6 @@ import android.media.AudioManager; import android.media.MediaPlayer; import android.os.BatteryManager; import android.os.Build; -import android.os.Bundle; import android.os.Handler; import android.provider.Settings; import android.text.TextUtils; @@ -25,15 +24,17 @@ import com.amap.api.location.AMapLocation; import com.amap.api.location.AMapLocationClient; import com.amap.api.location.AMapLocationListener; import com.aoleyun.sn.R; -import com.aoleyun.sn.action.JGYActions; import com.aoleyun.sn.base.BaseApplication; import com.aoleyun.sn.bean.BaseResponse; import com.aoleyun.sn.bean.RemoteDebug; -import com.aoleyun.sn.comm.CommonDatas; +import com.aoleyun.sn.bean.SnRunLog; +import com.aoleyun.sn.comm.CommonConfig; +import com.aoleyun.sn.comm.JGYActions; import com.aoleyun.sn.manager.AmapManager; import com.aoleyun.sn.network.HTTPInterface; import com.aoleyun.sn.network.NetInterfaceManager; -import com.aoleyun.sn.service.MainService; +import com.aoleyun.sn.rlog.LogDBManager; +import com.aoleyun.sn.service.main.MainService; import com.aoleyun.sn.tpush.common.NotificationService; import com.aoleyun.sn.tpush.po.XGNotification; import com.aoleyun.sn.utils.ApkUtils; @@ -87,86 +88,90 @@ public class MessageReceiver extends XGPushBaseReceiver { private static final String TAG = MessageReceiver.class.getSimpleName(); - //删除应用 + /*删除应用*/ private final String MSG_DELETE = "1"; - //系统设置管控 + /*系统设置管控*/ private final String MSG_SETTING = "2"; - //浏览器网址管控 + /*浏览器网址管控*/ private final String MSG_BROWSER = "4"; - //app id管控 + /*app id管控*/ private final String MSG_APPID = "5"; - //应用联网管控 + /*应用联网管控*/ private final String MSG_NET_CONTROL = "6"; - //APP自启联网滑动管控 + /*APP自启联网滑动管控*/ private final String MSG_POWER_ON = "7"; - //重置 + /*重置*/ private final String MSG_RESET = "8"; - //强制安装 + /*强制安装*/ private final String MSG_INSTALL = "9"; - //解锁 + /*解锁*/ private final String MSG_LOCK = "10"; - //旧版相机管控 + /*旧版相机管控*/ private final String MSG_CAMERA = "11"; private final String MSG_ONEPACKAGES = "12"; - //app使用时间 + /*app使用时间*/ private final String GET_APP_USEDTIME = "13"; - //强制下载 + /*强制下载*/ private final String GET_FORCEDOWNLOADURL = "14"; - //主页和书签管控 + /*主页和书签管控*/ private final String SET_HOMEPAG_TAG = "15"; - //app内网页管控 + /*app内网页管控*/ private final String APP_WEBSITE = "16"; - //禁止app升级 + /*禁止app升级*/ private final String DISABLE_APPUPDATE = "17"; - //隐藏桌面图标 + /*隐藏桌面图标*/ private final String HIDE_DESKTOP_ICON = "18"; - //禁止滑动 + /*禁止滑动*/ private final String DISABLE_APP_SLIDE = "19"; - //更新引用白名单 + /*更新引用白名单*/ private final String UPDATE_INFO = "20"; - //截图 + /*截图*/ private final String SN_SCREENSHOT = "21"; - //重启 + /*重启*/ private final String DEVICES_REBOOT = "22"; - //获取设备详细信息 + /*获取设备详细信息*/ private final String GET_DEVICES_INFO = "23"; - //霸屏 + /*霸屏*/ private final String LOCK_SCREEN = "24"; - //取消霸屏 + /*取消霸屏*/ private final String UNLOCK_SCREEN = "25"; - //结束进程 + /*结束进程*/ private final String KILL_SERVER = "26"; - //时间管控 + /*时间管控*/ private final String TIME_CONTROL = "27"; - //app霸屏 + /*app霸屏*/ private final String TOP_APP = "28"; - //开机动画 + /*开机动画*/ private final String LOGO_IMG = "29"; - //默认应用 + /*默认应用*/ private final String DEFAULTP_APP = "30"; - //发出声音 + /*发出声音*/ private final String PLAY_SOUND = "31"; - //清除app数据 + /*清除app数据*/ private final String CLEAN_APP_CACHE = "32"; - //开发人员选项 + /*开发人员选项*/ private final String DEVELOPER_OPTIONS = "33"; - //全局更新 + /*全局更新*/ private final String GLOBAL_UPDATE = "34"; - //电子书包激活码 + /*电子书包激活码*/ private final String EBAG_CODE = "35"; - //更新白名单 + /*更新白名单*/ private final String UPDATE_WHITELIST = "36"; - //更换批次不恢复出厂 + /*更换批次不恢复出厂*/ private final String UPDATE_BATCH = "37"; - //添加wifi + /*添加wifi*/ private final String UPDATE_WIFI_PW = "38"; - //远程关机 + /*远程关机*/ private final String DEVICES_POWEROFF = "41"; - //远程log + /*远程log*/ private final String SN_RUN_LOG = "43"; - //自定义指令 + /*自定义指令*/ private final String CUSTOM_ORDER = "44"; + /*优化内存*/ + private final String CLEAN_MEMORY = "47"; + /*运行日志设置*/ + private final String SN_LOG_SETTING = "48"; private Context mContext; private ContentResolver mResolver; @@ -612,7 +617,28 @@ public class MessageReceiver extends XGPushBaseReceiver { Log.e(TAG, (String) SPUtils.get(mContext, "AmapAddress", "-")); Log.e(TAG, (String) SPUtils.get(mContext, "AmapError", "-")); Log.e(TAG, "amap: " + sb.toString()); - HTTPInterface.updateDeviceInfo(mContext); + NetInterfaceManager.getInstance().updateDeviceInfo(new NetInterfaceManager.ObserverCallback() { + @Override + public void onSubscribe(Disposable d) { + + } + + @Override + public void onNext(BaseResponse response) { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onComplete() { + + } + }); + } }); break; @@ -630,7 +656,7 @@ public class MessageReceiver extends XGPushBaseReceiver { ToastUtil.betaShow("收到管控:停止应用"); JSONObject killJSONObject = JSON.parseObject(extras); String packages = killJSONObject.getString("package_name"); - JGYUtils.getInstance().killBackgroundProcesses(mContext, packages); + JGYUtils.getInstance().killBackgroundProcesses(packages); break; case TIME_CONTROL: ToastUtil.betaShow("收到管控:使用时间管控"); @@ -668,7 +694,7 @@ public class MessageReceiver extends XGPushBaseReceiver { case EBAG_CODE: ToastUtil.betaShow("收到管控:电子书包激活码"); setEbagCode(extras); - JGYUtils.getInstance().killBackgroundProcesses(mContext, "com.jxw.launcher"); + JGYUtils.getInstance().killBackgroundProcesses("com.jxw.launcher"); break; case UPDATE_WHITELIST: ToastUtil.betaShow("收到管控:更新白名单"); @@ -702,6 +728,12 @@ public class MessageReceiver extends XGPushBaseReceiver { case CUSTOM_ORDER: customOrder(extras); break; + case CLEAN_MEMORY: + JGYUtils.getInstance().cleanBackgroundMemory(); + break; + case SN_LOG_SETTING: + senSNLogFile(extras); + break; } } @@ -960,10 +992,10 @@ public class MessageReceiver extends XGPushBaseReceiver { Settings.System.putInt(mResolver, JGYActions.ACTION_QCH_UNLOCK_IPAD, i); Log.e("SystemSetting", "qch_unlock_ipad---------" + i); - if (getBatteryLevel() >= CommonDatas.MIN_POWER) { + if (getBatteryLevel() >= CommonConfig.MIN_POWER) { Utils.doMasterClear(mContext); } else { - MySQLData.SetBooleanData(mContext, CommonDatas.IS_RESET, true); + MySQLData.SetBooleanData(mContext, CommonConfig.IS_RESET, true); } } @@ -1279,4 +1311,23 @@ public class MessageReceiver extends XGPushBaseReceiver { } } + /** + * @param jsonString + * "is_log": 1,//是否开启运行日志 0关闭 1开启 + * "is_log_type": 1 //获取运行日志类型 0即时 1定时 + */ + private void senSNLogFile(String jsonString) { + JSONObject jsonObject = JSON.parseObject(jsonString); + int is_log = jsonObject.getInteger("is_log"); + int is_log_type = jsonObject.getInteger("is_log_type"); + if (is_log == 0) { + return; + } + if (is_log_type == 0) { + NetInterfaceManager.getInstance().uploadLogFile(); + } else { + SPUtils.put(mContext, CommonConfig.UPLOAD_LOG_TYPE, 1); + } + } + } diff --git a/app/src/main/java/com/aoleyun/sn/utils/ApkUtils.java b/app/src/main/java/com/aoleyun/sn/utils/ApkUtils.java index 0f8fbd1..f15c105 100644 --- a/app/src/main/java/com/aoleyun/sn/utils/ApkUtils.java +++ b/app/src/main/java/com/aoleyun/sn/utils/ApkUtils.java @@ -30,7 +30,7 @@ import android.widget.Toast; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import com.aoleyun.sn.action.JGYActions; +import com.aoleyun.sn.comm.JGYActions; import com.aoleyun.sn.comm.PackageNames; import com.arialyy.aria.core.Aria; import com.arialyy.aria.core.download.DownloadEntity; @@ -1037,7 +1037,7 @@ public class ApkUtils { PackageManager pm = context.getPackageManager(); pi = pm.getPackageInfo(pkgName, 0); } catch (PackageManager.NameNotFoundException e) { - Log.e("isSystemApp: NameNotFoundException:", e.getMessage()); + Log.e("isSystemApp: ", "NameNotFoundException:" + e.getMessage()); } // 是系统中已安装的应用 if (pi != null) { @@ -1152,23 +1152,15 @@ public class ApkUtils { Log.e("addShortcut", "putstring:" + qch_force_app); } - public static void getAppInfo(Context context) { + public static String getRunningAppInfo(Context context) { ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); List infoList = activityManager.getRunningServices(Integer.MAX_VALUE); - for (ActivityManager.RunningServiceInfo info : infoList) { -// Log.e("fht", "getAppInfo1: "+info.process); -// Log.e("fht", "getAppInfo2: "+info.service.getPackageName()); -// Log.e("fht", "getAppInfo3: "+info.service.getClassName()); - } ArrayList appList = new ArrayList(); //用来存储获取的应用信息数据 List packages = context.getPackageManager().getInstalledPackages(0); for (PackageInfo packageInfo : packages) { String packageName = packageInfo.packageName; //排除桌面app和出厂自带app - if (desktopAPP.contains(packageName) - || factoryapp.contains(packageName) -// || aoleyunAPP.contains(packageName) - ) { + if (desktopAPP.contains(packageName) || factoryapp.contains(packageName)) { continue; } //排除所有系统应用,不显示 @@ -1180,79 +1172,27 @@ public class ApkUtils { continue; } } - - -// if (ApkUtils.systemapp.contains(packageInfo.packageName) -// || ApkUtils.show_canremove_systemapp.contains(packageInfo.packageName) -// || ApkUtils.canremove_systemapp.contains(packageInfo.packageName)) {continue;} -// //如果是系统应用且包名属于出厂app 跳过 -// if (((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1) && factoryapp.contains(packageInfo.packageName)) {continue;} -// if (desktopAPP.contains(packageInfo.packageName)) {continue;} -// if (JGYUtils.getInstance().checkAppPlatform() == 2) { -// if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1) { -// continue; -// } -// } - UploadAppInfo uploadAppInfo = new UploadAppInfo(); - uploadAppInfo.setApp_name(packageInfo.applicationInfo.loadLabel(context.getPackageManager()).toString()); uploadAppInfo.setPackage_name(packageInfo.packageName); - Log.e("getAppInfo", "getAppInfo:" + packageInfo.packageName); -// uploadAppInfo.setId(i); -// String firstInstallTime = Utils.transferLongToDate(packageInfo.firstInstallTime); -// String lastUpdateTime = Utils.transferLongToDate(packageInfo.lastUpdateTime); + Log.e("getRunningAppInfo", "getRunningAppInfo:" + packageInfo.packageName); String firstInstallTime = Utils.transferLongToDate(packageInfo.lastUpdateTime); uploadAppInfo.setInstall_time(firstInstallTime); uploadAppInfo.setVersionCode(String.valueOf(packageInfo.versionCode)); uploadAppInfo.setState(0); uploadAppInfo.setVersionName(packageInfo.versionName); - String appInstallDir = packageInfo.applicationInfo.publicSourceDir; - int size = Integer.valueOf((int) new File(appInstallDir).length()); - uploadAppInfo.setApp_size(Formatter.formatFileSize(context, size)); for (ActivityManager.RunningServiceInfo info : infoList) { if (info.process.contains(packageInfo.packageName)) { uploadAppInfo.setState(1); - Log.e("getAppInfo", "getAppInfo running: " + packageInfo.packageName); + Log.e("getRunningAppInfo", "getRunningAppInfo running: " + packageInfo.packageName); } } appList.add(uploadAppInfo); } Gson gson = new Gson(); String jsonString = gson.toJson(appList); - Log.e(TAG, "getAppInfo: " + jsonString); - - NetInterfaceManager.getInstance() - .getUploadAppInfoApi() - .getUploadAppInfoApi(NetInterfaceManager.HTTP_KEY, - Utils.getSerial(), jsonString) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onNext(ResponseBody responseBody) { - try { - Log.e("getAppInfo", "上传的结果" + responseBody.string()); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @Override - public void onError(Throwable e) { - Log.e("getAppInfo", "UploadAppInfoApi onError: " + e.getMessage()); - } - - @Override - public void onComplete() { - Log.e("getAppInfo", "onComplete: "); - } - }); + Log.e(TAG, "getRunningAppInfo: " + jsonString); + return jsonString; } public static void RemoveTask(final Context context, final String packageName) { diff --git a/app/src/main/java/com/aoleyun/sn/utils/BootManager.java b/app/src/main/java/com/aoleyun/sn/utils/BootManager.java index 72226b5..0d7c024 100644 --- a/app/src/main/java/com/aoleyun/sn/utils/BootManager.java +++ b/app/src/main/java/com/aoleyun/sn/utils/BootManager.java @@ -5,8 +5,8 @@ import android.content.Intent; import android.provider.Settings; import android.text.TextUtils; -import com.aoleyun.sn.action.JGYActions; -import com.aoleyun.sn.service.MainService; +import com.aoleyun.sn.comm.JGYActions; +import com.aoleyun.sn.service.main.MainService; public class BootManager { private Context mContext; diff --git a/app/src/main/java/com/aoleyun/sn/utils/JGYUtils.java b/app/src/main/java/com/aoleyun/sn/utils/JGYUtils.java index 8deec57..2e2af36 100644 --- a/app/src/main/java/com/aoleyun/sn/utils/JGYUtils.java +++ b/app/src/main/java/com/aoleyun/sn/utils/JGYUtils.java @@ -18,7 +18,6 @@ import android.graphics.Bitmap; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.Uri; -import android.net.wifi.WifiManager; import android.os.BatteryManager; import android.os.Build; import android.os.Environment; @@ -28,13 +27,15 @@ import android.provider.Settings; import android.text.TextUtils; import android.util.Log; +import androidx.annotation.RequiresApi; import androidx.core.content.ContextCompat; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.aoleyun.sn.comm.CommonConfig; +import com.aoleyun.sn.comm.JGYActions; import com.aoleyun.sn.comm.PackageNames; import com.blankj.utilcode.util.FileUtils; -import com.blankj.utilcode.util.PathUtils; import com.google.gson.Gson; import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; @@ -45,7 +46,6 @@ import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeWriter; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; import com.aoleyun.sn.BuildConfig; -import com.aoleyun.sn.action.JGYActions; import com.aoleyun.sn.base.BaseApplication; import com.aoleyun.sn.bean.AppListInfo; import com.aoleyun.sn.bean.Appground; @@ -54,10 +54,9 @@ import com.aoleyun.sn.bean.ForceDownloadData; import com.aoleyun.sn.bean.NetAndLaunchBean; import com.aoleyun.sn.bean.NetAndLaunchData; import com.aoleyun.sn.bean.TTAppground; -import com.aoleyun.sn.comm.CommonDatas; import com.aoleyun.sn.service.GuardService; import com.aoleyun.sn.service.LogcatService; -import com.aoleyun.sn.service.MainService; +import com.aoleyun.sn.service.main.MainService; import com.aoleyun.sn.service.StepService; import java.io.File; @@ -160,10 +159,10 @@ public class JGYUtils { } public void resetDevice() { - boolean isReset = MySQLData.GetBooleanData(mContext, CommonDatas.IS_RESET); + boolean isReset = MySQLData.GetBooleanData(mContext, CommonConfig.IS_RESET); int batteryLevel = getBatteryLevel(); Log.e(TAG, "batteryLevel:" + batteryLevel + " isReset" + isReset); - if (isReset && batteryLevel >= CommonDatas.MIN_POWER) { + if (isReset && batteryLevel >= CommonConfig.MIN_POWER) { Utils.doMasterClear(mContext); } } @@ -173,7 +172,7 @@ public class JGYUtils { return path + File.separator; } - private int getBatteryLevel() { + public int getBatteryLevel() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { BatteryManager batteryManager = (BatteryManager) mContext.getSystemService(Context.BATTERY_SERVICE); return batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY); @@ -398,19 +397,19 @@ public class JGYUtils { @SuppressLint("NewApi") synchronized public static void setAppNetwork(Context context, HashSet blackList) { Log.e(TAG, "setAppNetwork: " + "设置应用联网管控" + blackList); - String dis = Settings.System.getString(context.getContentResolver(), JGYActions.ACTION_HR_RECEIVER_JGY_DIS); - String not = Settings.System.getString(context.getContentResolver(), JGYActions.ACTION_HR_RECEIVER_JGY); + String dis = Settings.System.getString(context.getContentResolver(), JGYActions.ACTION_HRRECEIVER_JGY_DIS); + String not = Settings.System.getString(context.getContentResolver(), JGYActions.ACTION_HRRECEIVER_JGY); //清除旧数据 if (!TextUtils.isEmpty(dis)) { Log.e(TAG, "setAppNetwork: dis = " + dis); - Settings.System.putString(context.getContentResolver(), JGYActions.ACTION_HR_RECEIVER_JGY_DIS, "Invalid"); + Settings.System.putString(context.getContentResolver(), JGYActions.ACTION_HRRECEIVER_JGY_DIS, "Invalid"); } if (!TextUtils.isEmpty(not)) { Log.e(TAG, "setAppNetwork: not = " + not); - Settings.System.putString(context.getContentResolver(), JGYActions.ACTION_HR_RECEIVER_JGY, "Invalid"); + Settings.System.putString(context.getContentResolver(), JGYActions.ACTION_HRRECEIVER_JGY, "Invalid"); } - String oldBlackList = (String) SPUtils.get(context, JGYActions.ACTION_HR_RECEIVER_JGY_DIS, ""); + String oldBlackList = (String) SPUtils.get(context, JGYActions.ACTION_HRRECEIVER_JGY_DIS, ""); HashSet oldBlackListSet = new HashSet<>(Arrays.asList(oldBlackList.split(","))); oldBlackListSet.removeIf(s -> TextUtils.isEmpty(s.trim())); //之前禁止上网得列表 @@ -427,7 +426,7 @@ public class JGYUtils { } else { Log.e(TAG, "setAppNetwork: " + pkg + " 已安装"); } - Intent netControlNotIntent = new Intent(JGYActions.ACTION_HR_RECEIVER_JGY_DIS); + Intent netControlNotIntent = new Intent(JGYActions.ACTION_HRRECEIVER_JGY_DIS); netControlNotIntent.putExtra("package_name", pkg); netControlNotIntent.setPackage("com.android.settings"); context.sendBroadcast(netControlNotIntent); @@ -450,7 +449,7 @@ public class JGYUtils { Log.e(TAG, "setAppNetwork: addedNet: " + addedNet); for (String pkg : removedNet) { if (TextUtils.isEmpty(pkg)) continue; - Intent netControlNotIntent = new Intent(JGYActions.ACTION_HR_RECEIVER_JGY); + Intent netControlNotIntent = new Intent(JGYActions.ACTION_HRRECEIVER_JGY); netControlNotIntent.putExtra("package_name", pkg); netControlNotIntent.setPackage("com.android.settings"); context.sendBroadcast(netControlNotIntent); @@ -464,7 +463,7 @@ public class JGYUtils { } else { Log.e(TAG, "setAppNetwork: " + pkg + " 已安装"); } - Intent netControlNotIntent = new Intent(JGYActions.ACTION_HR_RECEIVER_JGY_DIS); + Intent netControlNotIntent = new Intent(JGYActions.ACTION_HRRECEIVER_JGY_DIS); netControlNotIntent.putExtra("package_name", pkg); netControlNotIntent.setPackage("com.android.settings"); context.sendBroadcast(netControlNotIntent); @@ -472,7 +471,7 @@ public class JGYUtils { } String net_not = String.join(",", blackList); - SPUtils.put(context, JGYActions.ACTION_HR_RECEIVER_JGY_DIS, net_not); + SPUtils.put(context, JGYActions.ACTION_HRRECEIVER_JGY_DIS, net_not); //Settings.System.putString(mContext.getContentResolver(), JGYActions.ACTION_HrReceiver_JGY_DIS, net_not); Log.e("fht", "not::" + net_not); @@ -487,7 +486,7 @@ public class JGYUtils { @SuppressLint("NewApi") synchronized public void onBootSendNetwork() { - String oldBlackListString = (String) SPUtils.get(mContext, JGYActions.ACTION_HR_RECEIVER_JGY_DIS, ""); + String oldBlackListString = (String) SPUtils.get(mContext, JGYActions.ACTION_HRRECEIVER_JGY_DIS, ""); HashSet oldBlackListSet = new HashSet<>(Arrays.asList(oldBlackListString.split(","))); Log.e(TAG, "setAppNetwork: oldBlackListSet: " + oldBlackListSet); oldBlackListSet.removeIf(new Predicate() { @@ -502,7 +501,7 @@ public class JGYUtils { Log.e(TAG, "setAppNetwork: skip: " + pkg); continue; } - Intent netControlNotIntent = new Intent(JGYActions.ACTION_HR_RECEIVER_JGY_DIS); + Intent netControlNotIntent = new Intent(JGYActions.ACTION_HRRECEIVER_JGY_DIS); netControlNotIntent.putExtra("package_name", pkg); netControlNotIntent.setPackage("com.android.settings"); mContext.sendBroadcast(netControlNotIntent); @@ -1556,11 +1555,26 @@ public class JGYUtils { } } - public void killBackgroundProcesses(Context context, String processName) { + @RequiresApi(api = Build.VERSION_CODES.M) + public void cleanBackgroundMemory() { + ActivityManager manager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE); + for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { + String pkg = service.service.getPackageName(); + Log.i("cleanBackgroundMemory", pkg); + if (ApkUtils.isSystemApp(mContext, pkg)) continue; + if (ApkUtils.desktopAPP.contains(pkg) || ApkUtils.aoleyunAPP.contains(pkg)) { + continue; + } + manager.forceStopPackage(service.service.getPackageName()); + Log.e("cleanBackgroundMemory", "kill :" + pkg); + } + } + + public void killBackgroundProcesses(String processName) { gotoLauncher(); // mIsScanning = true; removeTask(processName); - ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); + ActivityManager activityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE); String packageName = null; try { if (processName.indexOf(":") == -1) { diff --git a/app/src/main/java/com/aoleyun/sn/utils/MySQLData.java b/app/src/main/java/com/aoleyun/sn/utils/MySQLData.java index 513e79f..adf17d8 100644 --- a/app/src/main/java/com/aoleyun/sn/utils/MySQLData.java +++ b/app/src/main/java/com/aoleyun/sn/utils/MySQLData.java @@ -5,7 +5,6 @@ import android.content.Context; import android.database.Cursor; -import com.aoleyun.sn.comm.CommonDatas; import com.aoleyun.sn.database.DBHelper; import com.aoleyun.sn.database.DBSqlBuilder; diff --git a/app/src/main/java/com/aoleyun/sn/utils/SPUtils.java b/app/src/main/java/com/aoleyun/sn/utils/SPUtils.java index 766a325..9614380 100644 --- a/app/src/main/java/com/aoleyun/sn/utils/SPUtils.java +++ b/app/src/main/java/com/aoleyun/sn/utils/SPUtils.java @@ -8,7 +8,7 @@ import android.graphics.drawable.BitmapDrawable; import android.util.Base64; import android.widget.ImageView; -import com.aoleyun.sn.comm.CommonDatas; +import com.aoleyun.sn.comm.CommonConfig; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -94,8 +94,8 @@ public class SPUtils { } //还原状态firstEnter信息 - private static void reductFirstEnter(Context context){ - put(context, CommonDatas.FLAG_FIRST_ENTER,CommonDatas.FLAG_FIRST_ENTER); + private static void reductFirstEnter(Context context) { + put(context, CommonConfig.FLAG_FIRST_ENTER, CommonConfig.FLAG_FIRST_ENTER); } diff --git a/app/src/main/java/com/aoleyun/sn/utils/SaveListUtils.java b/app/src/main/java/com/aoleyun/sn/utils/SaveListUtils.java index 8b86503..7c765a4 100644 --- a/app/src/main/java/com/aoleyun/sn/utils/SaveListUtils.java +++ b/app/src/main/java/com/aoleyun/sn/utils/SaveListUtils.java @@ -4,10 +4,10 @@ import android.content.Context; import android.provider.Settings; import android.util.Log; +import com.aoleyun.sn.comm.CommonConfig; import com.blankj.utilcode.util.SPStaticUtils; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; -import com.aoleyun.sn.comm.CommonDatas; import java.lang.reflect.Type; import java.util.ArrayList; @@ -18,7 +18,7 @@ public class SaveListUtils { private static List forceList = new ArrayList<>(); public static List getList() { - String data = SPStaticUtils.getString(CommonDatas.FORCE_INSTALL); + String data = SPStaticUtils.getString(CommonConfig.FORCE_INSTALL); Log.e("SaveListUtils", data); Gson gson = new Gson(); Type listType = new TypeToken>() { @@ -41,7 +41,7 @@ public class SaveListUtils { list.add(data); Gson gson = new Gson(); String gsonData = gson.toJson(list); - SPStaticUtils.put(CommonDatas.FORCE_INSTALL, gsonData); + SPStaticUtils.put(CommonConfig.FORCE_INSTALL, gsonData); } Log.e("fht", "addToList:" + list.toString()); } @@ -57,7 +57,7 @@ public class SaveListUtils { } Gson gson = new Gson(); String gsonData = gson.toJson(forceList); - SPStaticUtils.put(CommonDatas.FORCE_INSTALL, gsonData); + SPStaticUtils.put(CommonConfig.FORCE_INSTALL, gsonData); Log.e("fht", "setList:" + forceList.toString()); } @@ -73,7 +73,7 @@ public class SaveListUtils { public static void setList() { Gson gson = new Gson(); String gsonData = gson.toJson(forceList); - SPStaticUtils.put(CommonDatas.FORCE_INSTALL, gsonData); + SPStaticUtils.put(CommonConfig.FORCE_INSTALL, gsonData); } diff --git a/app/src/main/java/com/aoleyun/sn/utils/SysSettingUtils.java b/app/src/main/java/com/aoleyun/sn/utils/SysSettingUtils.java index 8ceed3b..342a595 100644 --- a/app/src/main/java/com/aoleyun/sn/utils/SysSettingUtils.java +++ b/app/src/main/java/com/aoleyun/sn/utils/SysSettingUtils.java @@ -14,7 +14,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.aoleyun.sn.BuildConfig; -import com.aoleyun.sn.action.JGYActions; +import com.aoleyun.sn.comm.JGYActions; import java.util.ArrayList; import java.util.List; @@ -51,7 +51,7 @@ public class SysSettingUtils { setCanReset(context, jsonObject); setAutoTime(context, jsonObject); JSONObject navJson = jsonObject.getJSONObject("setting_nav"); - SPUtils.put(context, JGYActions.ACTION_STATUS_BAR_STATUS, jsonObject.getJSONObject("setting_nav").toJSONString()); + SPUtils.put(context, JGYActions.ACTION_STATUSBAR_STATUS, jsonObject.getJSONObject("setting_nav").toJSONString()); setStatusBar(context, navJson); setBrowserInput(context, jsonObject); //otg开关 diff --git a/app/src/main/java/com/aoleyun/sn/utils/TimeUtils.java b/app/src/main/java/com/aoleyun/sn/utils/TimeUtils.java index b9e4c88..5cc4645 100644 --- a/app/src/main/java/com/aoleyun/sn/utils/TimeUtils.java +++ b/app/src/main/java/com/aoleyun/sn/utils/TimeUtils.java @@ -10,7 +10,7 @@ import android.util.Log; import com.aoleyun.sn.bean.PoweroffBean; -import com.aoleyun.sn.service.MainService; +import com.aoleyun.sn.service.main.MainService; import java.text.DateFormat; import java.text.ParseException; diff --git a/app/src/main/java/com/aoleyun/sn/utils/Utils.java b/app/src/main/java/com/aoleyun/sn/utils/Utils.java index c61420c..62cb2ce 100644 --- a/app/src/main/java/com/aoleyun/sn/utils/Utils.java +++ b/app/src/main/java/com/aoleyun/sn/utils/Utils.java @@ -50,10 +50,10 @@ import android.widget.EditText; import android.widget.Toast; import com.alibaba.fastjson.JSONObject; +import com.aoleyun.sn.comm.CommonConfig; import com.aoleyun.sn.network.HTTPInterface; import com.arialyy.aria.core.Aria; import com.blankj.utilcode.util.FileUtils; -import com.blankj.utilcode.util.PathUtils; import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.WriterException; @@ -63,7 +63,6 @@ import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; import com.aoleyun.sn.BuildConfig; import com.aoleyun.sn.R; import com.aoleyun.sn.base.BaseApplication; -import com.aoleyun.sn.comm.CommonDatas; import java.io.BufferedReader; import java.io.DataOutputStream; @@ -931,12 +930,12 @@ public class Utils { context.sendBroadcast(intent); } else { //10.0的不需要最小电量 - if (getBatteryLevel(context) >= CommonDatas.MIN_POWER) { + if (getBatteryLevel(context) >= CommonConfig.MIN_POWER) { Intent intent = new Intent("android.intent.action.MASTER_CLEAR"); // intent.setPackage("com.android.settings"); context.sendBroadcast(intent); } else { - MySQLData.SetBooleanData(context, CommonDatas.IS_RESET, true); + MySQLData.SetBooleanData(context, CommonConfig.IS_RESET, true); } } } diff --git a/app/src/main/jni/jgy.cpp b/app/src/main/jni/jgy.cpp index 0b9fd17..571e17e 100644 --- a/app/src/main/jni/jgy.cpp +++ b/app/src/main/jni/jgy.cpp @@ -42,3 +42,9 @@ Java_com_aoleyun_sn_utils_JGYUtils_getAuthorization(JNIEnv *env, jclass clazz) { } +extern "C" +JNIEXPORT jstring JNICALL +Java_com_aoleyun_sn_activity_main_MainAPresenter_getAeskey(JNIEnv *env, jobject thiz) { + std::string key = "0123456789ABCDEF"; + return env->NewStringUTF(key.c_str()); +} \ No newline at end of file diff --git a/app/src/main/res/drawable-hdpi/delete.png b/app/src/main/res/drawable-hdpi/delete.png new file mode 100644 index 0000000..42eb11a Binary files /dev/null and b/app/src/main/res/drawable-hdpi/delete.png differ diff --git a/app/src/main/res/drawable-hdpi/refresh.png b/app/src/main/res/drawable-hdpi/refresh.png new file mode 100644 index 0000000..73256f7 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/refresh.png differ diff --git a/app/src/main/res/layout-land/activity_checknet.xml b/app/src/main/res/layout-land/activity_checknet.xml index 7bedb56..93be431 100644 --- a/app/src/main/res/layout-land/activity_checknet.xml +++ b/app/src/main/res/layout-land/activity_checknet.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".activity.CheckNetActivity"> + tools:context=".activity.checknet.CheckNetActivity"> - - - - - - - - - + app:layout_constraintTop_toTopOf="parent" /> + - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout-land/activity_request_log.xml b/app/src/main/res/layout-land/activity_request_log.xml new file mode 100644 index 0000000..7911f36 --- /dev/null +++ b/app/src/main/res/layout-land/activity_request_log.xml @@ -0,0 +1,8 @@ + + + + diff --git a/app/src/main/res/layout-port/activity_checknet.xml b/app/src/main/res/layout-port/activity_checknet.xml index 7bedb56..93be431 100644 --- a/app/src/main/res/layout-port/activity_checknet.xml +++ b/app/src/main/res/layout-port/activity_checknet.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".activity.CheckNetActivity"> + tools:context=".activity.checknet.CheckNetActivity"> - - - - - - - - - + app:layout_constraintTop_toTopOf="parent" /> + - - + app:layout_constraintVertical_bias="0.096" /> - -