diff --git a/app/build.gradle b/app/build.gradle
index 7cb2155..939636d 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -103,17 +103,17 @@ android {
buildConfigField "String", "WebsocketURL", '"ws://39.98.59.202:2345"'
}
- newl {
+ newly {
flavorDimensions "default"
- versionCode 171
-// versionCode 1036
- versionName "1.3.1"
+ versionCode 174
+// versionCode 1037
+ versionName "1.3.4"
/*********************************极光推送************************************/
manifestPlaceholders = [
JPUSH_PKGNAME: "com.jiaoguanyi.appstore",
JPUSH_APPKEY : "52d81643665bb2cadacf0e9e", //JPush上注册的包名对应的appkey.
JPUSH_CHANNEL: "developer-default", //暂时填写默认值即可.
- channel_value: "newl"
+ channel_value: "newly"
]
signingConfig signingConfigs.debug
/*********************************极光推送end************************************/
@@ -123,7 +123,7 @@ android {
}
sourceSets {
beta.res.srcDirs = ['src/beta/res']
- newl.res.srcDirs = ['src/beta/res']
+ newly.res.srcDirs = ['src/beta/res']
}
//签名
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d8fc1ad..cd56643 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -27,7 +27,8 @@
-
+
+
factoryClass = Class.forName("android.webkit.WebViewFactory");
- Field field = factoryClass.getDeclaredField("sProviderInstance");
- field.setAccessible(true);
- Object sProviderInstance = field.get(null);
- if (sProviderInstance != null) {
- Log.i(TAG, "sProviderInstance isn't null");
- return;
- }
-
- Method getProviderClassMethod;
- if (sdkInt > 22) {
- getProviderClassMethod = factoryClass.getDeclaredMethod("getProviderClass");
- } else if (sdkInt == 22) {
- getProviderClassMethod = factoryClass.getDeclaredMethod("getFactoryClass");
- } else {
- Log.i(TAG, "Don't need to Hook WebView");
- return;
- }
- getProviderClassMethod.setAccessible(true);
- Class> factoryProviderClass = (Class>) getProviderClassMethod.invoke(factoryClass);
- Class> delegateClass = Class.forName("android.webkit.WebViewDelegate");
- Constructor> delegateConstructor = delegateClass.getDeclaredConstructor();
- delegateConstructor.setAccessible(true);
- if (sdkInt < 26) {//低于Android O版本
- Constructor> providerConstructor = factoryProviderClass.getConstructor(delegateClass);
- if (providerConstructor != null) {
- providerConstructor.setAccessible(true);
- sProviderInstance = providerConstructor.newInstance(delegateConstructor.newInstance());
- }
- } else {
- Field chromiumMethodName = factoryClass.getDeclaredField("CHROMIUM_WEBVIEW_FACTORY_METHOD");
- chromiumMethodName.setAccessible(true);
- String chromiumMethodNameStr = (String) chromiumMethodName.get(null);
- if (chromiumMethodNameStr == null) {
- chromiumMethodNameStr = "create";
- }
- Method staticFactory = factoryProviderClass.getMethod(chromiumMethodNameStr, delegateClass);
- if (staticFactory != null) {
- sProviderInstance = staticFactory.invoke(null, delegateConstructor.newInstance());
- }
- }
-
- if (sProviderInstance != null) {
- field.set("sProviderInstance", sProviderInstance);
- Log.i(TAG, "Hook success!");
- } else {
- Log.i(TAG, "Hook failed!");
- }
- } catch (Throwable e) {
- Log.w(TAG, e);
- }
- }
}
diff --git a/app/src/main/java/com/mjsheng/myappstore/activity/MainActivity.java b/app/src/main/java/com/mjsheng/myappstore/activity/MainActivity.java
index af9f20a..f4ae678 100644
--- a/app/src/main/java/com/mjsheng/myappstore/activity/MainActivity.java
+++ b/app/src/main/java/com/mjsheng/myappstore/activity/MainActivity.java
@@ -20,6 +20,7 @@ import com.google.gson.JsonObject;
import com.mjsheng.myappstore.BuildConfig;
import com.mjsheng.myappstore.R;
import com.mjsheng.myappstore.base.BaseActivity;
+import com.mjsheng.myappstore.server.MainService;
import com.mjsheng.myappstore.utils.ApkUtils;
import com.mjsheng.myappstore.utils.ExampleUtil;
import com.mjsheng.myappstore.utils.JGYUtils;
@@ -175,7 +176,7 @@ public class MainActivity extends BaseActivity implements MainContact.MainView {
iv_locked.setVisibility(View.VISIBLE);
ApkUtils.getAppInfo(this);
//上传APP信息
- if (netWorkIsRunning) {
+ if (netWorkIsRunning|| MainService.netWorkIsRunning) {
//如果正在执行,不执行
return;
}
@@ -335,6 +336,16 @@ public class MainActivity extends BaseActivity implements MainContact.MainView {
@Override
public void setLogoImgFinished() {
+ mPresenter.setTopApp();
+ }
+
+ @Override
+ public void setTopAppFinished() {
+ mPresenter.getDeveloper();
+ }
+
+ @Override
+ public void getDeveloperFinished() {
netWorkIsRunning = false;
Log.e(TAG, "SettingFinished: " + (System.currentTimeMillis() - timeMillis) + " ms");
}
diff --git a/app/src/main/java/com/mjsheng/myappstore/activity/MainContact.java b/app/src/main/java/com/mjsheng/myappstore/activity/MainContact.java
index fc4700f..cd8da82 100644
--- a/app/src/main/java/com/mjsheng/myappstore/activity/MainContact.java
+++ b/app/src/main/java/com/mjsheng/myappstore/activity/MainContact.java
@@ -61,6 +61,10 @@ public class MainContact {
//获取系统其他管控设置结束
void setLogoImgFinished ();
//设置开机动画
+ void setTopAppFinished();
+ //获取应用霸屏结束
+ void getDeveloperFinished();
+ //获取开发者选项结束
/*
* MainService
* */
@@ -122,6 +126,10 @@ public class MainContact {
//获取系统其他管控设置
void setLogoImg();
//设置开机动画
+ void setTopApp();
+ //应用霸屏
+ void getDeveloper();
+ //获取开发者选项
/*
* MainService
* */
diff --git a/app/src/main/java/com/mjsheng/myappstore/activity/MainPresenter.java b/app/src/main/java/com/mjsheng/myappstore/activity/MainPresenter.java
index 5b2f327..02dec75 100644
--- a/app/src/main/java/com/mjsheng/myappstore/activity/MainPresenter.java
+++ b/app/src/main/java/com/mjsheng/myappstore/activity/MainPresenter.java
@@ -35,6 +35,7 @@ import com.mjsheng.myappstore.manager.NetInterfaceManager;
import com.mjsheng.myappstore.network.api.newapi.UpdateDeviceInfoApi;
import com.mjsheng.myappstore.server.MainService;
import com.mjsheng.myappstore.utils.ApkUtils;
+import com.mjsheng.myappstore.utils.ForegroundAppUtil;
import com.mjsheng.myappstore.utils.JGYUtils;
import com.mjsheng.myappstore.utils.SPUtils;
import com.mjsheng.myappstore.utils.SysSettingUtils;
@@ -80,7 +81,6 @@ public class MainPresenter implements MainContact.Presenter {
this.mView = null;
}
-
/**
* 通过sn获取用户信息
@@ -675,6 +675,7 @@ public class MainPresenter implements MainContact.Presenter {
String data = jsonObject.getString("data");
List batchList = JSON.parseArray(data, Batch.class);
if (null != batchList && batchList.size() > 1) {
+ Log.e("getDeviceBatch", "onNext: " + "deleteOtherApp");
if (!BuildConfig.DEBUG) {
JGYUtils.getInstance().deleteOtherApp(packageList);
}
@@ -753,6 +754,15 @@ public class MainPresenter implements MainContact.Presenter {
@Override
public void getBrowserList() {
+// if (JGYUtils.isOfficialVersion()) {
+ oldSetBrowserList();
+// } else {
+// setBrowserList();
+// }
+ }
+
+
+ private void setBrowserList() {
NetInterfaceManager.getInstance()
.getBrowserListSettingObservable()
.observeOn(Schedulers.io())
@@ -767,28 +777,36 @@ public class MainPresenter implements MainContact.Presenter {
Log.e("getBrowserList", "onNext: ");
if (browserDataBaseResponse.code == 200) {
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("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)) {
+ 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("setBrowserList", "setBrowserList white: " + white + ":" + whiteList);
boolean blackList = Settings.System.putString(mContext.getContentResolver(), "qch_webblack_url", black);
- Log.e("getBrowserList", "setBrowserList black: " + black + ":" + blackList);
- } else {
+ Log.e("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", " ");
}
}
@@ -805,8 +823,64 @@ public class MainPresenter implements MainContact.Presenter {
});
}
+ private void oldSetBrowserList() {
+ NetInterfaceManager.getInstance()
+ .getBrowserListSettingObservable()
+ .observeOn(Schedulers.io())
+ .subscribe(new Observer>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("oldSetBrowserList", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse browserDataBaseResponse) {
+ Settings.System.putInt(mContext.getContentResolver(), "qch_website_isBlackWebUrl", 0);
+ Log.e("oldSetBrowserList", "onNext: ");
+ if (browserDataBaseResponse.code == 200) {
+ //白名单
+ 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("oldSetBrowserList", "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("oldSetBrowserList", "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("oldSetBrowserList", "onError: " + e.getMessage());
+ onComplete();
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("oldSetBrowserList", "onComplete: ");
+ }
+ });
+ }
+
@Override
public void getBrowserBookmarks(String whitelist) {
+ Log.e(TAG, "getBrowserBookmarks: " + "whitelist: " + whitelist);
List whiteLists = Arrays.asList(whitelist.split(","));
NetInterfaceManager.getInstance()
.getBrowserBookmarksObservable()
@@ -828,6 +902,7 @@ public class MainPresenter implements MainContact.Presenter {
Log.e("getBrowserBookmarks", "onNext: homepagURL: save homepagURL = " + home);
if (whiteLists.size() <= 0 || !whiteLists.contains(homepagURL)) {
whiteString.append(",").append(homepagURL);
+ Log.e("getBrowserBookmarks ", "homepagURL: " + homepagURL);
boolean white = Settings.System.putString(mContext.getContentResolver(), "DeselectBrowserArray", whiteString.toString());
Log.e("getBrowserBookmarks", "onNext: homepagURL: add to whiteList = " + whiteString + "write: " + white);
}
@@ -865,6 +940,7 @@ public class MainPresenter implements MainContact.Presenter {
}
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) {
@@ -893,6 +969,18 @@ public class MainPresenter implements MainContact.Presenter {
@Override
public void getBrowserWhiteList() {
new URLUtils(mContext).setBrowserList();
+ 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("getBrowserWhiteList", "qch_website_isBlackWebUrl: " + qch_website_isBlackWebUrl);
+ Log.e("getBrowserWhiteList", "BlackBrowserArray: " + BlackBrowserArray);
+ Log.e("getBrowserWhiteList", "DeselectBrowserArray: " + DeselectBrowserArray);
+ Log.e("getBrowserWhiteList", "qch_webblack_url: " + qch_webblack_url);
+ } catch (Settings.SettingNotFoundException e) {
+ e.printStackTrace();
+ }
}
@Override
@@ -948,7 +1036,8 @@ public class MainPresenter implements MainContact.Presenter {
public void getAppAutoStartUpdateAndNet() {
NetInterfaceManager.getInstance()
.getAppAutoStartUpdateAndNetObservable()
- .observeOn(Schedulers.io())
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer() {
@Override
public void onSubscribe(@NonNull Disposable d) {
@@ -1192,6 +1281,89 @@ public class MainPresenter implements MainContact.Presenter {
});
}
+ @Override
+ public void setTopApp() {
+ NetInterfaceManager.getInstance().getTopAppControl()
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(Disposable d) {
+ Log.e("setTopApp", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(BaseResponse response) {
+ Log.e("setTopApp", "onNext: " + response.data);
+ if (response.code == 200) {
+ JSONObject jsonObject = (JSONObject) JSON.toJSON(response.data);
+ String app_package = jsonObject.getString("app_package");
+ SPUtils.put(mContext, ForegroundAppUtil.TOPAPP_KEY, app_package);
+ ForegroundAppUtil.openTopApp(mContext);
+ } else {
+ SPUtils.put(mContext, ForegroundAppUtil.TOPAPP_KEY, "");
+ }
+ }
+
+ @Override
+ public void onError(Throwable e) {
+ Log.e("setTopApp", "onError: " + e.getMessage());
+ onComplete();
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("setTopApp", "onComplete: ");
+ mView.setTopAppFinished();
+ }
+ });
+ }
+
+ @Override
+ public void getDeveloper() {
+ NetInterfaceManager.getInstance().getDeveloperControl()
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(Disposable d) {
+ Log.e("getDeveloper", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(BaseResponse baseResponse) {
+ Log.e("getDeveloper", "onNext: ");
+ if (baseResponse.code == 200) {
+ JSONObject jsonObject = (JSONObject) JSON.toJSON(baseResponse.data);
+ int is_developer = jsonObject.getInteger("is_developer");
+ //后台1是0否 底层0是1否
+ setDeveloper(is_developer == 0 ? 1 : 0);
+ } else {
+ setDeveloper(1);
+ }
+ }
+
+ @Override
+ public void onError(Throwable e) {
+ Log.e("getDeveloper", "onError: " + e.getMessage());
+ onComplete();
+ }
+
+ @Override
+ public void onComplete() {
+ mView.getDeveloperFinished();
+ Log.e("getDeveloper", "onComplete: ");
+ }
+ });
+ }
+
+
+ private void setDeveloper(int state) {
+ Settings.System.putInt(mContext.getContentResolver(), "qch_Developeroptions", state);
+ if (state == 1) {
+ Intent intent = new Intent();
+ intent.setAction("qch_developeroptions_close");
+ intent.setPackage("com.android.settings");
+ mContext.sendBroadcast(intent);
+ }
+ }
+
@Override
public void getScreenLockState() {
int locked = Settings.System.getInt(mContext.getContentResolver(), "qch_unlock_ipad", 1);
diff --git a/app/src/main/java/com/mjsheng/myappstore/activity/OldActivity.java b/app/src/main/java/com/mjsheng/myappstore/activity/OldActivity.java
index 448725b..6a2f3fe 100644
--- a/app/src/main/java/com/mjsheng/myappstore/activity/OldActivity.java
+++ b/app/src/main/java/com/mjsheng/myappstore/activity/OldActivity.java
@@ -533,7 +533,7 @@ public class OldActivity extends AppCompatActivity {
@Override
public void call(Long aLong) {
// getDeselectBrowerID();//浏览器网址管控
- HTTPInterface.setBrowserList(OldActivity.this);//浏览器网址管控
+ HTTPInterface.setBrowserBlackList(OldActivity.this);//浏览器网址管控
HTTPInterface.setHomepagtag(OldActivity.this);//设置主页和标签
HTTPInterface.setAppinsideWeb(OldActivity.this);//app内部网页管控
HTTPInterface.setHideDesktopIcon(OldActivity.this);//设置桌面图标隐藏
diff --git a/app/src/main/java/com/mjsheng/myappstore/base/BaseApplication.java b/app/src/main/java/com/mjsheng/myappstore/base/BaseApplication.java
index 2eb9f59..ed53a3d 100644
--- a/app/src/main/java/com/mjsheng/myappstore/base/BaseApplication.java
+++ b/app/src/main/java/com/mjsheng/myappstore/base/BaseApplication.java
@@ -55,6 +55,9 @@ import org.json.JSONObject;
import java.io.File;
import java.io.IOException;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
@@ -112,6 +115,7 @@ public class BaseApplication extends MultiDexApplication {
JGYUtils.init(this);
XAPKUtils.init(this);
FileManager.init(this);
+ hookWebView();
Configuration config = getResources().getConfiguration();
int smallestScreenWidthDp = config.smallestScreenWidthDp;
Log.e("mjsheng", "smallestScreenWidthDp=" + smallestScreenWidthDp);
@@ -158,6 +162,63 @@ public class BaseApplication extends MultiDexApplication {
AmapManager.init(this);
}
+ public void hookWebView() {
+ int sdkInt = Build.VERSION.SDK_INT;
+ try {
+ Class> factoryClass = Class.forName("android.webkit.WebViewFactory");
+ Field field = factoryClass.getDeclaredField("sProviderInstance");
+ field.setAccessible(true);
+ Object sProviderInstance = field.get(null);
+ if (sProviderInstance != null) {
+ Log.i(TAG, "sProviderInstance isn't null");
+ return;
+ }
+
+ Method getProviderClassMethod;
+ if (sdkInt > 22) {
+ getProviderClassMethod = factoryClass.getDeclaredMethod("getProviderClass");
+ } else if (sdkInt == 22) {
+ getProviderClassMethod = factoryClass.getDeclaredMethod("getFactoryClass");
+ } else {
+ Log.i(TAG, "Don't need to Hook WebView");
+ return;
+ }
+ getProviderClassMethod.setAccessible(true);
+ Class> factoryProviderClass = (Class>) getProviderClassMethod.invoke(factoryClass);
+ Class> delegateClass = Class.forName("android.webkit.WebViewDelegate");
+ Constructor> delegateConstructor = delegateClass.getDeclaredConstructor();
+ delegateConstructor.setAccessible(true);
+ if (sdkInt < 26) {//低于Android O版本
+ Constructor> providerConstructor = factoryProviderClass.getConstructor(delegateClass);
+ if (providerConstructor != null) {
+ providerConstructor.setAccessible(true);
+ sProviderInstance = providerConstructor.newInstance(delegateConstructor.newInstance());
+ }
+ } else {
+ Field chromiumMethodName = factoryClass.getDeclaredField("CHROMIUM_WEBVIEW_FACTORY_METHOD");
+ chromiumMethodName.setAccessible(true);
+ String chromiumMethodNameStr = (String) chromiumMethodName.get(null);
+ if (chromiumMethodNameStr == null) {
+ chromiumMethodNameStr = "create";
+ }
+ Method staticFactory = factoryProviderClass.getMethod(chromiumMethodNameStr, delegateClass);
+ if (staticFactory != null) {
+ sProviderInstance = staticFactory.invoke(null, delegateConstructor.newInstance());
+ }
+ }
+
+ if (sProviderInstance != null) {
+ field.set("sProviderInstance", sProviderInstance);
+ Log.i(TAG, "Hook success!");
+ } else {
+ Log.i(TAG, "Hook failed!");
+ }
+ } catch (Throwable e) {
+ Log.w(TAG, e);
+ }
+ }
+
+
/**
* 忽略电池优化
@@ -722,7 +783,7 @@ public class BaseApplication extends MultiDexApplication {
new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
- Log.d("捕获异常子线程:", Thread.currentThread().getName() +
+ Log.e("捕获异常子线程:", Thread.currentThread().getName() +
"在:" + e.getStackTrace()[0].getClassName());
}
}
diff --git a/app/src/main/java/com/mjsheng/myappstore/manager/NetInterfaceManager.java b/app/src/main/java/com/mjsheng/myappstore/manager/NetInterfaceManager.java
index 9325d0b..7b36b65 100644
--- a/app/src/main/java/com/mjsheng/myappstore/manager/NetInterfaceManager.java
+++ b/app/src/main/java/com/mjsheng/myappstore/manager/NetInterfaceManager.java
@@ -33,6 +33,7 @@ import com.mjsheng.myappstore.network.api.newapi.DesktopIconApi;
import com.mjsheng.myappstore.network.api.newapi.DevicesLockedStateApi;
import com.mjsheng.myappstore.network.api.newapi.GetBatchApi;
import com.mjsheng.myappstore.network.api.newapi.GetDesktopApi;
+import com.mjsheng.myappstore.network.api.newapi.GetDeveloper;
import com.mjsheng.myappstore.network.api.newapi.GetLockStateApi;
import com.mjsheng.myappstore.network.api.newapi.JpushTagsApi;
import com.mjsheng.myappstore.network.api.newapi.LogoImgApi;
@@ -305,6 +306,20 @@ public class NetInterfaceManager {
.observeOn(AndroidSchedulers.mainThread());
}
+ public Observable getTopAppControl() {
+ return mRetrofit.create(TopAppControlApi.class)
+ .getSnAppControl(Utils.getSerial())
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+ public Observable getDeveloperControl() {
+ return mRetrofit.create(GetDeveloper.class)
+ .getDeveloperState(Utils.getSerial())
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+
+
/*
*
diff --git a/app/src/main/java/com/mjsheng/myappstore/network/HTTPInterface.java b/app/src/main/java/com/mjsheng/myappstore/network/HTTPInterface.java
index 0abede2..c40e2f8 100644
--- a/app/src/main/java/com/mjsheng/myappstore/network/HTTPInterface.java
+++ b/app/src/main/java/com/mjsheng/myappstore/network/HTTPInterface.java
@@ -16,6 +16,8 @@ import android.util.Log;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
+import com.mjsheng.myappstore.bean.BrowserData;
+import com.mjsheng.myappstore.utils.JGYUtils;
import com.mjsheng.myappstore.utils.URLUtils;
import com.lzy.okgo.OkGo;
import com.lzy.okgo.callback.StringCallback;
@@ -45,6 +47,7 @@ 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.Call;
@@ -487,50 +490,126 @@ public class HTTPInterface {
}
//设置浏览器黑白名单
- synchronized public static void setBrowserList(final Context context) {
- OkGo.post(URLAddress.SET_BROWSER_LIST)
- .params("key", NetInterfaceManager.HTTP_KEY)
- .params("sn", Utils.getSerial())
- .execute(new StringCallback() {
+ synchronized public static void setBrowserBlackList(final Context context) {
+// if (JGYUtils.isOfficialVersion()) {
+ oldSetBrowserList(context);
+// } else {
+// setBrowserList(context);
+// }
+ }
+ private static void setBrowserList(Context context) {
+ NetInterfaceManager.getInstance()
+ .getBrowserListSettingObservable()
+ .observeOn(Schedulers.io())
+ .subscribe(new Observer>() {
@Override
- public void onSuccess(String s, Call call, Response response) {
- try {
- JSONObject jsonObject = JSON.parseObject(s);
- int code = jsonObject.getInteger("code");
- String msg = jsonObject.getString("msg");
- if (code == 200) {
- JSONObject data = JSON.parseObject(jsonObject.getString("data"));
- String white = data.getString("white");
- String homePage = Settings.System.getString(context.getContentResolver(), "homepagURL");
- if (!TextUtils.isEmpty(white)) {
- if (!TextUtils.isEmpty(homePage) && !white.contains(homePage)) {
- white += "," + homePage;
- }
- boolean whiteList = Settings.System.putString(context.getContentResolver(), "DeselectBrowserArray", white);
- new URLUtils(context).setBrowserList();
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("getBrowserList", "onSubscribe: ");
+ }
- Log.e("SystemSetting", "setBrowserList----white-----" + whiteList + ":" + white);
- } else {
- Settings.System.putString(context.getContentResolver(), "DeselectBrowserArray", " ");
- }
- String black = data.getString("black");
- if (!TextUtils.isEmpty(black)) {
- boolean blackList = Settings.System.putString(context.getContentResolver(), "qch_webblack_url", black);
- Log.e("SystemSetting", "setBrowserList----black-----" + blackList + ":" + black);
- } else {
- Settings.System.putString(context.getContentResolver(), "qch_webblack_url", " ");
- }
- } else {
- Log.e("fht", "setBrowserList" + msg);
+ @Override
+ public void onNext(@NonNull BaseResponse browserDataBaseResponse) {
+ Log.e("getBrowserList", "onNext: ");
+ if (browserDataBaseResponse.code == 200) {
+ String white = browserDataBaseResponse.data.getWhite();
+ String black = browserDataBaseResponse.data.getBlack();
+ if (!TextUtils.isEmpty(white) && !TextUtils.isEmpty(black)) {
+ Settings.System.putInt(context.getContentResolver(), "qch_website_isBlackWebUrl", 0);
+ Settings.System.putString(context.getContentResolver(), "BlackBrowserArray", " ");
+ //黑白名单同时存在时由以前的逻辑管控
+ boolean whiteList = Settings.System.putString(context.getContentResolver(), "DeselectBrowserArray", white);
+ Log.e("setBrowserList", "setBrowserList white: " + white + ":" + whiteList);
+ boolean blackList = Settings.System.putString(context.getContentResolver(), "qch_webblack_url", black);
+ Log.e("setBrowserList", "setBrowserList black: " + black + ":" + blackList);
+ } else if (TextUtils.isEmpty(white)) {
+ //设置黑名单
+ Settings.System.putInt(context.getContentResolver(), "qch_website_isBlackWebUrl", 1);
+ Settings.System.putString(context.getContentResolver(), "BlackBrowserArray", black);
+ //白名单为空由新的管控执行
+ Settings.System.putString(context.getContentResolver(), "DeselectBrowserArray", " ");
+ Settings.System.putString(context.getContentResolver(), "qch_webblack_url", " ");
+ } else if (TextUtils.isEmpty(black)) {
+ Settings.System.putInt(context.getContentResolver(), "qch_website_isBlackWebUrl", 0);
+ Settings.System.putString(context.getContentResolver(), "BlackBrowserArray", " ");
+ //黑名单为空由旧的管控执行
+ Settings.System.putString(context.getContentResolver(), "DeselectBrowserArray", white);
+ Settings.System.putString(context.getContentResolver(), "qch_webblack_url", " ");
}
- } catch (JSONException e) {
- Log.e("fht", "setBrowserList" + e.getMessage());
+ } else {
+ //所有置空
+ Settings.System.putInt(context.getContentResolver(), "qch_website_isBlackWebUrl", 0);
+ Settings.System.putString(context.getContentResolver(), "BlackBrowserArray", " ");
+ Settings.System.putString(context.getContentResolver(), "DeselectBrowserArray", " ");
+ Settings.System.putString(context.getContentResolver(), "qch_webblack_url", " ");
}
}
@Override
- public void onError(Call call, Response response, Exception e) {
- super.onError(call, response, e);
+ public void onError(@NonNull Throwable e) {
+ Log.e("getBrowserList", "onError: " + e.getMessage());
+ onComplete();
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("getBrowserList", "onComplete: ");
+ new URLUtils(context).setBrowserList();
+ }
+ });
+ }
+
+
+ private static void oldSetBrowserList(Context context) {
+ NetInterfaceManager.getInstance()
+ .getBrowserListSettingObservable()
+ .observeOn(Schedulers.io())
+ .subscribe(new Observer>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("oldSetBrowserList", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse browserDataBaseResponse) {
+ Settings.System.putInt(context.getContentResolver(), "qch_website_isBlackWebUrl", 0);
+ Log.e("oldSetBrowserList", "onNext: ");
+ if (browserDataBaseResponse.code == 200) {
+ //白名单
+ String white = browserDataBaseResponse.data.getWhite();
+ if (!TextUtils.isEmpty(white)) {
+ String homePage = Settings.System.getString(context.getContentResolver(), "homepagURL");
+ if (!TextUtils.isEmpty(homePage) && !white.contains(homePage)) {
+ white += "," + homePage;
+ }
+ boolean whiteList = Settings.System.putString(context.getContentResolver(), "DeselectBrowserArray", white);
+ Log.e("oldSetBrowserList", "setBrowserList white: " + white + ":" + whiteList);
+ } else {
+ Settings.System.putString(context.getContentResolver(), "DeselectBrowserArray", " ");
+ }
+ //黑名单
+ String black = browserDataBaseResponse.data.getBlack();
+ if (!TextUtils.isEmpty(black)) {
+ boolean blackList = Settings.System.putString(context.getContentResolver(), "qch_webblack_url", black);
+ Log.e("oldSetBrowserList", "setBrowserList black: " + black + ":" + blackList);
+ } else {
+ Settings.System.putString(context.getContentResolver(), "qch_webblack_url", " ");
+ }
+ } else {
+ Settings.System.putString(context.getContentResolver(), "DeselectBrowserArray", " ");
+ Settings.System.putString(context.getContentResolver(), "qch_webblack_url", " ");
+ }
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("oldSetBrowserList", "onError: " + e.getMessage());
+ onComplete();
+ }
+
+ @Override
+ public void onComplete() {
+ new URLUtils(context).setBrowserList();
+ Log.e("oldSetBrowserList", "onComplete: ");
}
});
}
diff --git a/app/src/main/java/com/mjsheng/myappstore/network/URLAddress.java b/app/src/main/java/com/mjsheng/myappstore/network/URLAddress.java
index 7db9e61..e18c36f 100644
--- a/app/src/main/java/com/mjsheng/myappstore/network/URLAddress.java
+++ b/app/src/main/java/com/mjsheng/myappstore/network/URLAddress.java
@@ -53,5 +53,7 @@ public class URLAddress {
public final static String GET_SN_APP_TEST = HTTP_TAG_HEAD_NEW + "Sn/getSnAppTest";
//获取测试app
public final static String GET_LOGO_IMG = HTTP_TAG_HEAD_NEW + "Sn/getLogoImg";
+ //开机动画
+ public final static String GET_DEVELOPER = HTTP_TAG_HEAD_NEW + "Sn/getDeveloper";
}
diff --git a/app/src/main/java/com/mjsheng/myappstore/network/api/newapi/GetDeveloper.java b/app/src/main/java/com/mjsheng/myappstore/network/api/newapi/GetDeveloper.java
new file mode 100644
index 0000000..615c4d8
--- /dev/null
+++ b/app/src/main/java/com/mjsheng/myappstore/network/api/newapi/GetDeveloper.java
@@ -0,0 +1,15 @@
+package com.mjsheng.myappstore.network.api.newapi;
+
+import com.mjsheng.myappstore.bean.BaseResponse;
+import com.mjsheng.myappstore.network.URLAddress;
+
+import io.reactivex.Observable;
+import retrofit2.http.GET;
+import retrofit2.http.Query;
+
+public interface GetDeveloper {
+ @GET(URLAddress.GET_DEVELOPER)
+ Observable getDeveloperState(
+ @Query("sn") String sn
+ );
+}
diff --git a/app/src/main/java/com/mjsheng/myappstore/receiver/MyJPushReceiver.java b/app/src/main/java/com/mjsheng/myappstore/receiver/MyJPushReceiver.java
index 2551de9..47cbf9a 100644
--- a/app/src/main/java/com/mjsheng/myappstore/receiver/MyJPushReceiver.java
+++ b/app/src/main/java/com/mjsheng/myappstore/receiver/MyJPushReceiver.java
@@ -9,6 +9,10 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
+import android.media.AudioManager;
+import android.media.MediaPlayer;
+import android.media.RingtoneManager;
+import android.net.Uri;
import android.os.BatteryManager;
import android.os.Build;
import android.os.Bundle;
@@ -21,6 +25,7 @@ import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationListener;
import com.blankj.utilcode.util.PathUtils;
+import com.mjsheng.myappstore.R;
import com.mjsheng.myappstore.utils.CacheUtils;
import com.mjsheng.myappstore.utils.JGYUtils;
import com.lzy.okgo.OkGo;
@@ -120,6 +125,10 @@ public class MyJPushReceiver extends BroadcastReceiver {
private final String LOGO_IMG = "29";//开机动画
+ private final String DEFAULTP_APP = "30";//默认应用
+
+ private final String PLAY_SOUND = "31";//发出声音
+
private final String CLEAN_APP_CACHE = "32";//清除app数据
@@ -347,6 +356,12 @@ public class MyJPushReceiver extends BroadcastReceiver {
setBootanimation(context, extras);
Log.e(TAG, "processCustomMessage: " + extras);
break;
+
+ case DEFAULTP_APP:
+ break;
+ case PLAY_SOUND:
+ playSound(context, extras);
+ break;
case CLEAN_APP_CACHE:
cleanCache(context, extras);
break;
@@ -850,7 +865,7 @@ public class MyJPushReceiver extends BroadcastReceiver {
}
private void getDeselectBrowerID() {
- HTTPInterface.setBrowserList(mContext);//浏览器网址管控
+ HTTPInterface.setBrowserBlackList(mContext);//浏览器网址管控
// Network.getDeselectBrowserIDApi().getDeselectBrowserIDApi("YTM3YTAxNTJmMmZmNzkyM2E2YzIwZjlhZTc0NzNmMGI=", Utils.getSerial()).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() {
// public void onComplete() {
@@ -1310,9 +1325,9 @@ public class MyJPushReceiver extends BroadcastReceiver {
private void getTopApp(Context context, String extras) {
com.alibaba.fastjson.JSONObject jsonObject = JSON.parseObject(extras);
String packageName = jsonObject.getString("app_package");
- if (TextUtils.isEmpty(packageName)) {
- return;
- }
+// if (TextUtils.isEmpty(packageName)) {
+// return;
+// }
SPUtils.put(context, ForegroundAppUtil.TOPAPP_KEY, packageName);
ForegroundAppUtil.openTopApp(context);
}
@@ -1329,6 +1344,76 @@ public class MyJPushReceiver extends BroadcastReceiver {
}
}
+
+ private void playSound(Context context, String extras) {
+ com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(extras);
+ defaultCallMediaPlayer(context);
+ }
+
+ /**
+ * 播放系统默认来电铃声
+ *
+ * @return MediaPlayer对象
+ * @throws Exception
+ */
+ public void defaultCallMediaPlayer(Context context) {
+// Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
+// Ringtone r = RingtoneManager.getRingtone(mContext, notification);
+// r.play();
+ MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.test);
+ try {
+// mediaPlayer.prepare();
+ mediaPlayer.setLooping(false);
+ int duration = mediaPlayer.getDuration() / 1000;
+ Log.e(TAG, "defaultCallMediaPlayer: " + "duration: " + duration);
+ int loop = 0;
+ if (duration <= 1) {
+ loop = 30;
+ } else {
+ loop = (30 / duration);
+ }
+ final int[] soundCount = {0};
+ int finalLoop = loop;
+ mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
+ @Override
+ public void onCompletion(MediaPlayer mediaPlayer) {
+ if (soundCount[0] <= finalLoop) {
+ setMaxVolume(context);
+ mediaPlayer.start();
+ soundCount[0] += 1;
+ Log.e(TAG, "onCompletion: " + "loop: " + finalLoop);
+ Log.e(TAG, "onCompletion: " + "soundCount: " + soundCount[0]);
+ } else {
+ mediaPlayer.stop();
+ mediaPlayer.release();
+ Log.e(TAG, "onCompletion: " + "loop: " + finalLoop);
+ Log.e(TAG, "onCompletion: " + "soundCount: " + soundCount[0]);
+ }
+ }
+ });
+ mediaPlayer.setLooping(false);
+ setMaxVolume(context);
+ mediaPlayer.start();
+ } catch (Exception e) {
+ e.printStackTrace();
+ Log.e(TAG, "defaultCallMediaPlayer: " + e.getMessage());
+ }
+
+ }
+
+ private void setMaxVolume(Context context) {
+ AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
+ int ringMax = audioManager.getStreamMaxVolume(AudioManager.STREAM_RING);
+ int musicMax = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
+ int voiceMax = audioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL);
+ audioManager.setStreamVolume(AudioManager.STREAM_RING, ringMax, 0);
+ audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, voiceMax, 0);
+ audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, musicMax, 0); //音乐音量
+ audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
+ audioManager.setSpeakerphoneOn(true);
+ }
+
+
private void cleanCache(Context context, String extras) {
com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(extras);
String packageName = jsonObject.getString("app_package");
diff --git a/app/src/main/java/com/mjsheng/myappstore/server/InitJpushServer.java b/app/src/main/java/com/mjsheng/myappstore/server/InitJpushServer.java
index 405d25d..066675e 100644
--- a/app/src/main/java/com/mjsheng/myappstore/server/InitJpushServer.java
+++ b/app/src/main/java/com/mjsheng/myappstore/server/InitJpushServer.java
@@ -761,7 +761,7 @@ public class InitJpushServer extends Service {
List batchList = JSON.parseArray(data, Batch.class);
if (null != batchList && batchList.size() > 1) {
if (!BuildConfig.DEBUG) {
- deleteOtherApp(result);
+ JGYUtils.getInstance().deleteOtherApp(result);
}
} else {
Log.e("getDeviceBatch", "批次为空");
@@ -783,39 +783,6 @@ public class InitJpushServer extends Service {
}
- //删除用户除了在应用市场的其他应用
- private void deleteOtherApp(String packageList) {
- Log.e("deleteOtherApp", "packageList:" + packageList);
- String[] result = packageList.split(",");
- List resultList = new ArrayList<>(Arrays.asList(result));
- List packageLists = ApkUtils.queryFilterAppInfo(this);
-
- Log.e("deleteOtherApp", "packageLists:" + packageLists.toString());
- if (resultList.size() > 0) {
- for (final String packageName : packageLists) {
- if (Utils.isSystemApp(this, packageName)) {
- Log.e("deleteOtherApp", "is systemApp:" + packageName);
- continue;
- }
- if (ApkUtils.canremove_systemapp.contains(packageName)) {
- continue;
- }
- if (!resultList.contains(packageName)) {
- new Thread(new Runnable() {
- @Override
- public void run() {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- ApkUtils.uninstall(InitJpushServer.this, packageName);
- } else {
- ApkUtils.deleteApkInSilence(packageName);
- }
- }
- }).start();
- Log.e("deleteOtherApp", "uninstall apkName:" + packageName);
- }
- }
- }
- }
private void getNetAndLaunchSetting() {
NetAndLaunchApi netAndLaunchApi = NetInterfaceManager.getNetAndLaunchApi();
@@ -1260,7 +1227,7 @@ public class InitJpushServer extends Service {
initJpush();
HTTPInterface.setJpushTags(InitJpushServer.this);
sendMACaddress();
- HTTPInterface.setBrowserList(InitJpushServer.this);//浏览器网址管控
+ HTTPInterface.setBrowserBlackList(InitJpushServer.this);//浏览器网址管控
HTTPInterface.setAppinsideWeb(InitJpushServer.this);//app内部网页管控
HTTPInterface.setHomepagtag(InitJpushServer.this);//设置主页和标签
HTTPInterface.setHideDesktopIcon(InitJpushServer.this);//设置桌面图标隐藏
diff --git a/app/src/main/java/com/mjsheng/myappstore/server/MainService.java b/app/src/main/java/com/mjsheng/myappstore/server/MainService.java
index af435e7..c5f9a17 100644
--- a/app/src/main/java/com/mjsheng/myappstore/server/MainService.java
+++ b/app/src/main/java/com/mjsheng/myappstore/server/MainService.java
@@ -23,7 +23,6 @@ import android.widget.TextView;
import com.google.gson.JsonObject;
import com.mjsheng.myappstore.R;
-import com.mjsheng.myappstore.activity.HomeActivity;
import com.mjsheng.myappstore.activity.MainActivity;
import com.mjsheng.myappstore.activity.MainContact;
import com.mjsheng.myappstore.activity.MainPresenter;
@@ -35,12 +34,64 @@ import com.mjsheng.myappstore.utils.SaveListUtils;
import com.mjsheng.myappstore.utils.SysSettingUtils;
import com.mjsheng.myappstore.utils.TimeUtils;
+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();
- private boolean netWorkIsRunning = false;
+ 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() {
@@ -58,6 +109,9 @@ public class MainService extends Service implements MainContact.MainView {
mPresenter.attachView(this);
registerReceivers();
addShortcut();
+ Observable.create(subscribe)
+ .throttleLast(60, TimeUnit.SECONDS)
+ .subscribe(TimeObserver);
// cleanLauncherCache();
super.onCreate();
}
@@ -81,16 +135,18 @@ public class MainService extends Service implements MainContact.MainView {
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));
- }
+// 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;
}
@@ -170,17 +226,23 @@ public class MainService extends Service implements MainContact.MainView {
// 设置LayoutParam
WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
+ layoutParams.type = WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG;
} else {
layoutParams.type = WindowManager.LayoutParams.TYPE_PHONE;
}
- layoutParams.flags = WindowManager.LayoutParams.FLAG_BLUR_BEHIND;
+ 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");
@@ -422,6 +484,7 @@ public class MainService extends Service implements MainContact.MainView {
@Override
public void getBrowserBookmarksFinished() {
+ mPresenter.getBrowserWhiteList();
mPresenter.getDesktopIcon();
}
@@ -452,6 +515,16 @@ public class MainService extends Service implements MainContact.MainView {
@Override
public void setLogoImgFinished() {
+ mPresenter.setTopApp();
+ }
+
+ @Override
+ public void setTopAppFinished() {
+ mPresenter.getDeveloper();
+ }
+
+ @Override
+ public void getDeveloperFinished() {
netWorkIsRunning = false;
Log.e(TAG, "SettingFinished: " + (SystemClock.elapsedRealtime() - runningTime) + " ms");
}
diff --git a/app/src/main/java/com/mjsheng/myappstore/utils/URLUtils.java b/app/src/main/java/com/mjsheng/myappstore/utils/URLUtils.java
index e9a2712..21295a8 100644
--- a/app/src/main/java/com/mjsheng/myappstore/utils/URLUtils.java
+++ b/app/src/main/java/com/mjsheng/myappstore/utils/URLUtils.java
@@ -41,7 +41,7 @@ public class URLUtils {
if (TextUtils.isEmpty(whiteList)) {
Log.e(TAG, "getBrowserWhiteList: " + "whiteList is empty");
} else {
- List URLList = Arrays.asList(whiteList.split(","));
+ List URLList = new ArrayList<>(Arrays.asList(whiteList.split(",")));
Observable.create(new ObservableOnSubscribe() {
@Override
public void subscribe(ObservableEmitter emitter) throws Exception {
@@ -53,14 +53,19 @@ public class URLUtils {
if (!baseURLList.contains(noHttp)) {
baseURLList.add(noHttp);
}
- }
- if (url.startsWith("https://")) {
+ emitter.onNext(getOkHttpURL(url));
+ } else if (url.startsWith("https://")) {
String noHttps = url.substring(8);
if (!baseURLList.contains(noHttps)) {
baseURLList.add(noHttps);
}
+ emitter.onNext(getOkHttpURL(url));
+ } else {
+ baseURLList.add("http://" + url);
+ emitter.onNext(getOkHttpURL("http://" + url));
+ baseURLList.add("https://" + url);
+ emitter.onNext(getOkHttpURL("https://" + url));
}
- emitter.onNext(getOkHttpURL(url));
Log.e(TAG, "subscribe: " + url);
}
emitter.onComplete();
@@ -97,7 +102,7 @@ public class URLUtils {
@Override
public void onError(Throwable e) {
-
+ Log.e(TAG, "onError: " + e.getMessage());
}
@Override
@@ -223,6 +228,7 @@ public class URLUtils {
sb.append(c);
}
}
+ Log.e(TAG, "getUserAgent: " + sb.toString());
return sb.toString();
}
}
diff --git a/app/src/main/java/com/mjsheng/myappstore/utils/Utils.java b/app/src/main/java/com/mjsheng/myappstore/utils/Utils.java
index 266de46..04c26ec 100644
--- a/app/src/main/java/com/mjsheng/myappstore/utils/Utils.java
+++ b/app/src/main/java/com/mjsheng/myappstore/utils/Utils.java
@@ -1501,5 +1501,7 @@ public class Utils {
long availableSize = sf.getAvailableBytes();
return Formatter.formatFileSize(context, availableSize);
}
+
+
}
diff --git a/app/src/main/res/layout-land/activity_top.xml b/app/src/main/res/layout-land/activity_top.xml
index e65de29..c347415 100644
--- a/app/src/main/res/layout-land/activity_top.xml
+++ b/app/src/main/res/layout-land/activity_top.xml
@@ -12,7 +12,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
- android:textSize="20sp"
+ android:textSize="24sp"
android:textColor="@color/white"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
diff --git a/app/src/main/res/layout-port/activity_top.xml b/app/src/main/res/layout-port/activity_top.xml
index e65de29..c347415 100644
--- a/app/src/main/res/layout-port/activity_top.xml
+++ b/app/src/main/res/layout-port/activity_top.xml
@@ -12,7 +12,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
- android:textSize="20sp"
+ android:textSize="24sp"
android:textColor="@color/white"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
diff --git a/app/src/main/res/raw/test.mp3 b/app/src/main/res/raw/test.mp3
new file mode 100644
index 0000000..f975192
Binary files /dev/null and b/app/src/main/res/raw/test.mp3 differ
diff --git a/local.properties b/local.properties
index c54b19c..6716690 100644
--- a/local.properties
+++ b/local.properties
@@ -4,6 +4,6 @@
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
-#Thu Feb 25 11:39:17 CST 2021
+#Thu Apr 29 10:59:48 CST 2021
ndk.dir=E\:\\Sdk\\ndk\\android-ndk-r15c
-sdk.dir=E\:\\Sdk
+sdk.dir=F\:\\AndroidSDK