diff --git a/app/build.gradle b/app/build.gradle
index 0cc988c..dbe1fc2 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -91,7 +91,7 @@ android {
//签名
signingConfigs {
debug {
- storeFile file("src/jks/tt.jks")
+ storeFile file("src/keystore/tt.jks")
storePassword "fht19961207"
keyAlias "key0"
keyPassword "981964879aa"
@@ -100,7 +100,7 @@ android {
}
release {
- storeFile file("src/jks/tt.jks")
+ storeFile file("src/keystore/tt.jks")
storePassword "fht19961207"
keyAlias "key0"
keyPassword "981964879aa"
diff --git a/app/src/jks/tt.jks b/app/src/keystore/tt.jks
similarity index 100%
rename from app/src/jks/tt.jks
rename to app/src/keystore/tt.jks
diff --git a/app/src/jks/xueshibaoos.jks b/app/src/keystore/xueshibaoos.jks
similarity index 100%
rename from app/src/jks/xueshibaoos.jks
rename to app/src/keystore/xueshibaoos.jks
diff --git a/app/src/keystore/zhanxun.keystore b/app/src/keystore/zhanxun.keystore
new file mode 100644
index 0000000..7c46fbc
Binary files /dev/null and b/app/src/keystore/zhanxun.keystore differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 76b8645..70efa67 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -35,6 +35,7 @@
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
{
+
+ void attachView(@NonNull V view);
+
+ void detachView();
+}
diff --git a/app/src/main/java/com/tt/mvp/BaseView.java b/app/src/main/java/com/tt/mvp/BaseView.java
new file mode 100644
index 0000000..3ba96b3
--- /dev/null
+++ b/app/src/main/java/com/tt/mvp/BaseView.java
@@ -0,0 +1,4 @@
+package com.tt.mvp;
+
+public interface BaseView {
+}
diff --git a/app/src/main/java/com/tt/mvp/MainContact.java b/app/src/main/java/com/tt/mvp/MainContact.java
new file mode 100644
index 0000000..da1142e
--- /dev/null
+++ b/app/src/main/java/com/tt/mvp/MainContact.java
@@ -0,0 +1,143 @@
+package com.tt.mvp;
+
+import android.view.View;
+
+import com.google.gson.JsonObject;
+
+public class MainContact {
+ public interface MainView extends BaseView {
+ //设置批次信息
+ 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 setLockedState(boolean loocked);
+ //是否第一次联网
+ void setFirstConnect(boolean state);
+ //发送mac地址
+ void sendMACFinished();
+ //更新设备信息
+ void updateDeviceInfoFinished();
+ //获取时间管控
+ void getSnTimeControlFinished();
+ //设置击关推送别名
+ void setAliasFinished();
+ //设置极光推送标签
+ void setTagsFinished();
+ //设置极光推送平台标签
+ void setJpushPlatformTagsFinished();
+ //获取应用市场更新
+ void checkStoreUpdateFinished();
+ //获取测试应用更新
+ void checkTestUpdateFinished();
+ //手动获取设备信息更新
+ void buttonCheckUpdateFinished(boolean update, JsonObject jsonObject);
+ //开始
+ //设置设备后台设置
+ void getSystemSettingbegin();
+ //获取可被写入的安装包名结束
+ void getAppLimitFinished(String packageList);
+ //获取设备批次结束
+ void getDeviceBatchFinished();
+ //获取强制下载apk结束
+ void getForceDownloadFinished();
+ //获取浏览器上网管控设置结束
+ void getBrowserListFinished(String whitelist);
+ //获取浏览器书签设置管控结束
+ void getBrowserBookmarksFinished();
+ //获取应用图标桌面可见性管控结束
+ void getDesktopIconFinished();
+ //获取应用自启升级和网络权限管理结束
+ void getAppAutoStartUpdateAndNetFinished();
+ //获取第三方应用子页面ID连网限制结束
+ void getAppIDControlFinished();
+ //获取第三方应用内部网页跳转屏蔽结束
+ void setAppinsideWebFinished();
+ //获取系统其他管控设置结束
+ void setSystemSettingFinished();
+ //获取开发者选项结束
+ void getDeveloperFinished();
+ //设置开机动画
+ void setLogoImgFinished();
+ //获取应用霸屏结束
+ void setTopAppFinished();
+ /*
+ * MainService
+ * */
+ //设置屏幕锁状态结束
+ void setScreenLockStateFinished(boolean locked, String tips);
+ //获取桌面结束
+ void getDefaultDesktopFinished();
+ }
+
+ public interface Presenter extends BasePresenter {
+ //获取学生信息
+ void getStudesInfo();
+ //获取设备锁定状态
+ void getLockedState();
+ //是否第一次联网
+ void getFirstConnect();
+ //关闭所有功能
+ void setDisableSetting();
+ //发送mac地址
+ void sendMACAddress();
+ //更新设备信息
+ void updateDeviceInfo();
+ //获取时间管控
+ void getSnTimeControl();
+ //设置击关推送别名
+ void setJpushAlias();
+ //设置极光推送标签
+ void setJpushTags();
+ //设置极光推送平台标签
+ void setJpushPlatformTags(int platform);
+ //获取应用更新
+ void checkStoreUpdate();
+ //手动获取设备信息更新
+ void buttonCheckUpdate(View view);
+ //获取测试应用更新
+ void checkTestUpdate();
+ //开始
+ //获取设备后台设置
+ 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 getDeveloper();
+ //设置开机动画
+ void setLogoImg();
+ //应用霸屏
+ void setTopApp();
+ /*
+ * MainService
+ * */
+ //获取屏幕锁状态
+ void getScreenLockState();
+ //获取桌面
+ void getDefaultDesktop();
+ }
+}
diff --git a/app/src/main/java/com/tt/mvp/MainPresenter.java b/app/src/main/java/com/tt/mvp/MainPresenter.java
new file mode 100644
index 0000000..0bb5cdd
--- /dev/null
+++ b/app/src/main/java/com/tt/mvp/MainPresenter.java
@@ -0,0 +1,217 @@
+package com.tt.mvp;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.os.Build;
+import android.provider.Settings;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.View;
+
+
+import com.google.gson.Gson;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+
+
+import java.io.IOException;
+import java.lang.reflect.Type;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Random;
+import java.util.Set;
+
+import cn.jpush.android.api.JPushInterface;
+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 jgy02
+ */
+public class MainPresenter implements MainContact.Presenter {
+ private static final String TAG = MainPresenter.class.getSimpleName();
+ private MainContact.MainView mView;
+ private Context mContext;
+
+ private final String DEFAULT_INFO = "暂无信息";
+ private final int OK = 200;
+
+ public MainPresenter(Context context) {
+ this.mContext = context;
+ Log.e(TAG, "MainPresenter: " + context.getClass());
+ }
+
+ @Override
+ public void attachView(@androidx.annotation.NonNull MainContact.MainView view) {
+ this.mView = view;
+ }
+
+ @Override
+ public void detachView() {
+ this.mView = null;
+ }
+
+ @Override
+ public void getStudesInfo() {
+
+ }
+
+ @Override
+ public void getLockedState() {
+
+ }
+
+ @Override
+ public void getFirstConnect() {
+
+ }
+
+ @Override
+ public void setDisableSetting() {
+
+ }
+
+
+ @Override
+ public void sendMACAddress() {
+
+ }
+
+ @Override
+ public void updateDeviceInfo() {
+
+ }
+
+ @Override
+ public void getSnTimeControl() {
+
+ }
+
+ @Override
+ public void setJpushAlias() {
+
+ }
+
+ @Override
+ public void setJpushTags() {
+
+ }
+
+ @Override
+ public void setJpushPlatformTags(int platform) {
+ mView.setJpushPlatformTagsFinished();
+ }
+
+ @Override
+ public void checkStoreUpdate() {
+
+ }
+
+ @Override
+ public void buttonCheckUpdate(View view) {
+
+ }
+
+ @Override
+ public void checkTestUpdate() {
+
+ }
+
+
+ @Override
+ public void getSystemSettingbegin() {
+
+ }
+
+ @Override
+ public void getAppLimit() {
+
+ }
+
+ @Override
+ public void getDeviceBatch(String packageList) {
+
+ }
+
+ @Override
+ public void getForceDownload() {
+
+ }
+
+ @Override
+ public void getBrowserList() {
+
+ }
+
+ @Override
+ public void getBrowserBookmarks(String whitelist) {
+
+ }
+
+ @Override
+ public void getBrowserWhiteList() {
+
+ }
+
+ @Override
+ public void getDesktopIcon() {
+
+ }
+
+ @Override
+ public void getAppAutoStartUpdateAndNet() {
+
+ }
+
+ @Override
+ public void getAppIDControl() {
+
+ }
+
+ @Override
+ public void setAppinsideWeb() {
+
+ }
+
+ @Override
+ public void setSystemSetting() {
+
+ }
+
+ @Override
+ public void getDeveloper() {
+
+ }
+
+ @Override
+ public void setLogoImg() {
+
+ }
+
+ @Override
+ public void setTopApp() {
+
+ }
+
+ @Override
+ public void getScreenLockState() {
+
+ }
+
+ @Override
+ public void getDefaultDesktop() {
+
+ }
+}
diff --git a/app/src/main/java/com/tt/server/MainService.java b/app/src/main/java/com/tt/server/MainService.java
new file mode 100644
index 0000000..24b58e3
--- /dev/null
+++ b/app/src/main/java/com/tt/server/MainService.java
@@ -0,0 +1,580 @@
+package com.tt.server;
+
+import android.annotation.SuppressLint;
+import android.app.Service;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.graphics.Color;
+import android.graphics.PixelFormat;
+import android.os.Build;
+import android.os.IBinder;
+import android.os.SystemClock;
+import android.provider.Settings;
+import android.text.TextUtils;
+import android.util.DisplayMetrics;
+import android.util.Log;
+import android.view.View;
+import android.view.WindowManager;
+import android.widget.Button;
+import android.widget.TextView;
+
+import com.google.gson.JsonObject;
+import com.tt.mvp.MainContact;
+import com.tt.mvp.MainPresenter;
+import com.tt.ttutils.R;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.concurrent.TimeUnit;
+
+import cn.jpush.android.api.JPushInterface;
+import io.reactivex.Observable;
+import io.reactivex.ObservableEmitter;
+import io.reactivex.ObservableOnSubscribe;
+import io.reactivex.Observer;
+import io.reactivex.disposables.Disposable;
+
+public class MainService extends Service implements MainContact.MainView {
+ private MainPresenter mPresenter;
+ private static final String TAG = MainService.class.getSimpleName();
+ public static boolean netWorkIsRunning = false;
+
+ private interface Start {
+ void onstar(long time);
+ }
+
+ private Start start;
+
+ private ObservableOnSubscribe subscribe = new ObservableOnSubscribe() {
+ @Override
+ public void subscribe(ObservableEmitter emitter) throws Exception {
+ start = new Start() {
+ @Override
+ public void onstar(long time) {
+ emitter.onNext(time);
+ }
+ };
+ }
+ };
+
+ private Observer timeObserver = new Observer() {
+ @Override
+ public void onSubscribe(Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(Long aLong) {
+ Log.e("TimeObserver", "onNext: " + aLong);
+ startCommandTime = runningTime = SystemClock.elapsedRealtime();
+ mPresenter.getFirstConnect();
+ mPresenter.getLockedState();
+ }
+
+ @Override
+ public void onError(Throwable e) {
+
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ };
+
+ public MainService() {
+
+ }
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ return null;
+ }
+
+
+ @Override
+ public void onCreate() {
+ mPresenter = new MainPresenter(this);
+ mPresenter.attachView(this);
+ registerReceivers();
+ Observable.create(subscribe)
+ .throttleLast(60, TimeUnit.SECONDS)
+ .subscribe(timeObserver);
+// cleanLauncherCache();
+ super.onCreate();
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ unRegisterReceivers();
+ mPresenter.detachView();
+ }
+
+ //执行所有请求的时间
+ long runningTime;
+
+ //MainService上次执行时间
+ long startCommandTime = 0;
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ JPushInterface.init(this);
+// if (MainActivity.isForeground) {
+// Log.e(TAG, "onStartCommand: MainActivity: 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("timeObserver", "onStartCommand: " + (SystemClock.elapsedRealtime() - startCommandTime) + "ms");
+// }
+ return START_STICKY;
+ }
+
+ private void registerReceivers() {
+ registerLockScreenReceiver();
+ registerTimeReceiver();
+ registerInstallReceiver();
+ }
+
+ private void unRegisterReceivers() {
+ if (null != lockScreenReceiver) {
+ unregisterReceiver(lockScreenReceiver);
+ }
+ if (null != mTimeChangedReceiver) {
+ unregisterReceiver(mTimeChangedReceiver);
+ }
+ if (null != mInstallReceiver) {
+ unregisterReceiver(mInstallReceiver);
+ }
+ }
+
+ private static WindowManager windowManager;
+ private View topView;
+ boolean screenlocked = false;
+ boolean timelocked = false;
+
+ @SuppressLint("NewApi")
+ private void showFloatingWindow(String name) {
+ if (Settings.canDrawOverlays(this)) {
+ // 获取WindowManager服务
+ if (null == windowManager) {
+ windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
+ }
+ DisplayMetrics dm = new DisplayMetrics();
+ windowManager.getDefaultDisplay().getRealMetrics(dm);
+ int width = dm.widthPixels; // 屏幕宽度(像素)
+ int height = dm.heightPixels; // 屏幕高度(像素)
+ // 新建悬浮窗控件
+ final Button button = new Button(getApplicationContext());
+ button.setText("霸屏测试");
+ button.setAlpha(0.9f);
+ button.setBackgroundColor(Color.WHITE);
+ button.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+// windowManager.removeView(button);
+ }
+ });
+ if (null == topView) {
+// topView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.activity_top, null);
+ TextView textView = topView.findViewById(R.id.textView);
+ textView.setText(name);
+ } else {
+ if (topView.getTag().equals("added")) {
+ TextView textView = topView.findViewById(R.id.textView);
+ textView.setText(name);
+ return;
+ }
+ }
+// topView.setAlpha(0.8f);
+ TextView textView = topView.findViewById(R.id.textView);
+ textView.setText(name);
+ // 设置LayoutParam
+ WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ layoutParams.type = WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG;
+ } else {
+ layoutParams.type = WindowManager.LayoutParams.TYPE_PHONE;
+ }
+ layoutParams.flags |= WindowManager.LayoutParams.FLAG_BLUR_BEHIND
+ | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
+ | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
+ layoutParams.format = PixelFormat.RGBA_8888;
+ layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
+ layoutParams.height = WindowManager.LayoutParams.MATCH_PARENT;
+ //systemUiVisibility 关闭通知栏和导航栏
+ layoutParams.systemUiVisibility =
+ View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
+ | View.SYSTEM_UI_FLAG_IMMERSIVE
+ | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
+ layoutParams.x = 0;
+ layoutParams.y = 0;
+ // 将悬浮窗控件添加到WindowManager
+ windowManager.addView(topView, layoutParams);
+ topView.setTag("added");
+ }
+ }
+
+ private void hideFloatingWindow() {
+ if (null == windowManager) {
+ return;
+ }
+ if (null != topView) {
+ windowManager.removeView(topView);
+ topView = null;
+ }
+ }
+
+ private LockScreenReceiver lockScreenReceiver;
+
+ private void registerLockScreenReceiver() {
+ if (null == lockScreenReceiver) {
+ lockScreenReceiver = new LockScreenReceiver();
+ IntentFilter filter = new IntentFilter();
+ filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
+ filter.addAction(LockScreenReceiver.action_lock);
+ filter.addAction(LockScreenReceiver.action_unlock);
+ registerReceiver(lockScreenReceiver, filter);
+ }
+ }
+
+ //锁屏管控广播
+ public class LockScreenReceiver extends BroadcastReceiver {
+ public static final String action_lock = "LockScreenReceiver_lockscreen";
+ public static final String action_unlock = "LockScreenReceiver_unlockscreen";
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ Log.e("LockScreenReceiver", "onReceive: " + action);
+ if (TextUtils.isEmpty(action)) {
+ return;
+ }
+ if (action_lock.equals(action)) {
+ String name = intent.getStringExtra("name");
+ if (!timelocked) {
+ showFloatingWindow(name);
+ }
+ screenlocked = true;
+ } else if (action_unlock.equals(action)) {
+ if (!timelocked) {
+ hideFloatingWindow();
+ }
+ screenlocked = false;
+ }
+ }
+ }
+
+ private TimeChangedReceiver mTimeChangedReceiver;
+
+ /**
+ * 监听时间变化
+ */
+ public void registerTimeReceiver() {
+ mTimeChangedReceiver = new TimeChangedReceiver();
+ IntentFilter filter = new IntentFilter();
+ filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
+ filter.addAction(Intent.ACTION_DATE_CHANGED);
+ filter.addAction(Intent.ACTION_TIME_CHANGED);
+ filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
+ filter.addAction(Intent.ACTION_TIME_TICK);
+ filter.addAction(TimeChangedReceiver.ACTION_UPDATE);
+ registerReceiver(mTimeChangedReceiver, filter);
+ }
+
+ public class TimeChangedReceiver extends BroadcastReceiver {
+
+ public static final String ACTION_UPDATE = "TimeChangedReceiver_update";
+
+ @SuppressLint("NewApi")
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (Intent.ACTION_DATE_CHANGED.equals(intent.getAction())) {
+ Log.e("fht", "TimeChangedReceiver:" + "data changed");
+ } else if (Intent.ACTION_TIME_CHANGED.equals(intent.getAction())) {
+ Log.e("fht", "TimeChangedReceiver:" + "time changed");
+ } else if (Intent.ACTION_TIMEZONE_CHANGED.equals(intent.getAction())) {
+ Log.e("fht", "TimeChangedReceiver:" + "timezone changed");
+ } else if (Intent.ACTION_TIME_TICK.equals(intent.getAction())) {
+ Log.e("fht", "TimeChangedReceiver:" + "time tick");
+ } else if (ACTION_UPDATE.equals(intent.getAction())) {
+ Log.e("fht", "TimeChangedReceiver:" + "date update");
+ }
+// ForegroundAppUtil.openTopApp(context);
+// long nowTime = System.currentTimeMillis();
+// TimeUtils.ContralTime contralTime = TimeUtils.getDefaltContralTime(MainService.this);
+// if (null != contralTime) {
+// if (contralTime.inControlTime(nowTime)) {
+// if (!screenlocked) {
+// showFloatingWindow("管控时间:" + contralTime.toString());
+// } else {
+// TextView textView = topView.findViewById(R.id.textView);
+// textView.setText("管控时间:" + contralTime.toString());
+// }
+// timelocked = true;
+// } else {
+// mPresenter.getScreenLockState();
+// if (!screenlocked) {
+// hideFloatingWindow();
+// }
+// timelocked = false;
+// }
+// } else {
+// if (!screenlocked) {
+// hideFloatingWindow();
+// }
+// mPresenter.getScreenLockState();
+// timelocked = false;
+// }
+
+ }
+ }
+
+ private void registerInstallReceiver() {
+ if (mInstallReceiver == null) {
+ mInstallReceiver = new InstallReceiver();
+ }
+ IntentFilter intentFilter = new IntentFilter(INSTALLAPK_ACTION);
+ registerReceiver(mInstallReceiver, intentFilter, INSTALLAPK_PREMISSIONS, null);
+ }
+
+ private String INSTALLAPK_ACTION = "JGY_INSTALLAPK_ACTION";
+ private String INSTALLAPK_PREMISSIONS = "com.jiaoguanyi.appstore.permissions.INSTALL_APK";
+
+ private InstallReceiver mInstallReceiver;
+
+ /**
+ * https://blog.csdn.net/jdsjlzx/article/details/82630113
+ */
+ class InstallReceiver extends BroadcastReceiver {
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ if (TextUtils.isEmpty(action)) {
+ Log.e(TAG, "onReceive: " + "Action is NULL!");
+ return;
+ }
+ Log.e(TAG, "onReceive: " + "Sender is " + intent.getPackage());
+ String packageName = intent.getStringExtra("packageName");
+ String filePath = intent.getStringExtra("filePath");
+ if (!TextUtils.isEmpty(packageName) && !TextUtils.isEmpty(filePath)) {
+ Log.e(TAG, "onReceive: " + "packageName: " + packageName + "filePath: " + filePath);
+ installApkByPackage(filePath, packageName);
+ } else if (!TextUtils.isEmpty(filePath)) {
+// String pkg = ApkUtils.getPackageName(MainService.this, filePath);
+// Log.e(TAG, "onReceive: " + "pkg: " + pkg + "\tfilePath: " + filePath);
+// installApkByPackage(filePath, pkg);
+ } else {
+ Log.e(TAG, "onReceive: " + "no filePath and packageName");
+ }
+
+ }
+ }
+
+ /**
+ * @param filePath 路径
+ * @param pkg 包名
+ */
+ @SuppressLint("NewApi")
+ synchronized private void installApkByPackage(String filePath, String pkg) {
+ String oldListString = Settings.System.getString(getContentResolver(), "qch_app_forbid");
+ HashSet packageList = new HashSet<>(Arrays.asList(oldListString.split(",")));
+ packageList.add(pkg);
+ String join = String.join(",", packageList);
+ Log.e(TAG, "installApkByPackage: " + join);
+ Settings.System.putString(getContentResolver(), "qch_app_forbid", join);
+// ApkUtils.installApp(MainService.this, filePath);
+ }
+
+ @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 setLockedState(boolean loocked) {
+
+ }
+
+ /**
+ * 首次使用默认关闭所有功能
+ *
+ * @param state
+ */
+ @Override
+ public void setFirstConnect(boolean state) {
+ Log.e(TAG, "isFirstConnect: " + "end request");
+ if (state) {
+ mPresenter.setDisableSetting();
+ } else {
+
+ }
+ }
+
+ @Override
+ public void sendMACFinished() {
+ mPresenter.updateDeviceInfo();
+ }
+
+ @Override
+ public void updateDeviceInfoFinished() {
+ mPresenter.getSnTimeControl();
+ }
+
+ @Override
+ public void getSnTimeControlFinished() {
+
+ }
+
+ @Override
+ public void setAliasFinished() {
+ mPresenter.setJpushTags();
+ //设置极光推送tag
+ }
+
+ @Override
+ public void setTagsFinished() {
+ mPresenter.checkStoreUpdate();
+ }
+
+ @Override
+ public void setJpushPlatformTagsFinished() {
+
+ }
+
+ @Override
+ public void checkStoreUpdateFinished() {
+ mPresenter.checkTestUpdate();
+ }
+
+ @Override
+ public void checkTestUpdateFinished() {
+ mPresenter.getDefaultDesktop();
+ }
+
+ @Override
+ public void buttonCheckUpdateFinished(boolean update, JsonObject jsonObject) {
+
+ }
+
+ @Override
+ public void getSystemSettingbegin() {
+ mPresenter.getAppLimit();
+ }
+
+ @Override
+ public void getAppLimitFinished(String packageList) {
+ mPresenter.getDeviceBatch(packageList);
+ }
+
+ @Override
+ public void getDeviceBatchFinished() {
+ mPresenter.getForceDownload();
+ }
+
+ @Override
+ public void getForceDownloadFinished() {
+ mPresenter.getBrowserList();
+ }
+
+ @Override
+ public void getBrowserListFinished(String whitelist) {
+ mPresenter.getBrowserBookmarks(whitelist);
+ }
+
+ @Override
+ public void getBrowserBookmarksFinished() {
+ mPresenter.getBrowserWhiteList();
+ mPresenter.getDesktopIcon();
+ }
+
+ @Override
+ public void getDesktopIconFinished() {
+ mPresenter.getAppAutoStartUpdateAndNet();
+ }
+
+ @Override
+ public void getAppAutoStartUpdateAndNetFinished() {
+ mPresenter.getAppIDControl();
+ }
+
+ @Override
+ public void getAppIDControlFinished() {
+ mPresenter.setAppinsideWeb();
+ }
+
+ @Override
+ public void setAppinsideWebFinished() {
+ mPresenter.setSystemSetting();
+ }
+
+ @Override
+ public void setSystemSettingFinished() {
+ mPresenter.getDeveloper();
+ }
+
+ @Override
+ public void getDeveloperFinished() {
+ mPresenter.setLogoImg();
+ }
+
+ @Override
+ public void setLogoImgFinished() {
+ mPresenter.setTopApp();
+ }
+
+ @Override
+ public void setTopAppFinished() {
+ netWorkIsRunning = false;
+ Log.e(TAG, "SettingFinished: " + (SystemClock.elapsedRealtime() - runningTime) + " ms");
+ }
+
+ @Override
+ public void setScreenLockStateFinished(boolean locked, String tips) {
+ if (locked) {
+ if (!timelocked) {
+ showFloatingWindow(tips);
+ }
+ screenlocked = true;
+ } else {
+ if (!timelocked) {
+ hideFloatingWindow();
+ }
+ screenlocked = false;
+ }
+ }
+
+ @Override
+ public void getDefaultDesktopFinished() {
+
+ }
+
+
+}
diff --git a/app/src/main/res/layout-land/activity_main.xml b/app/src/main/res/layout-land/activity_main.xml
index cef4901..9b2e58a 100644
--- a/app/src/main/res/layout-land/activity_main.xml
+++ b/app/src/main/res/layout-land/activity_main.xml
@@ -16,4 +16,39 @@
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout-port/activity_main.xml b/app/src/main/res/layout-port/activity_main.xml
index e548d91..9b2e58a 100644
--- a/app/src/main/res/layout-port/activity_main.xml
+++ b/app/src/main/res/layout-port/activity_main.xml
@@ -16,6 +16,15 @@
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
+
+