version:2.1.4

update:第一次联网逻辑更新,可能会造成后面不能继续其他请求
fix:修复第一次使用联网不能自动下载apk
add:增加应用内部白名单管控,增加通过系统自定义版本号添加桌面快捷方式
This commit is contained in:
2021-06-18 17:48:15 +08:00
parent 26ab77e885
commit 7511d944f2
20 changed files with 527 additions and 248 deletions

View File

@@ -41,9 +41,9 @@ android {
//新平台正式 //新平台正式
newly { newly {
flavorDimensions "default" flavorDimensions "default"
versionCode 513 versionCode 514
//versionCode 1037 //versionCode 1037
versionName "2.1.2" versionName "2.1.4"
/*********************************极光推送************************************/ /*********************************极光推送************************************/
manifestPlaceholders = [ manifestPlaceholders = [
JPUSH_PKGNAME: "com.jiaoguanyi.appstore", JPUSH_PKGNAME: "com.jiaoguanyi.appstore",
@@ -60,8 +60,8 @@ android {
//新平台测试 //新平台测试
beta { beta {
flavorDimensions "default" flavorDimensions "default"
versionCode 174 versionCode 513
versionName "1.7.4" versionName "2.1.3"
/*********************************极光推送************************************/ /*********************************极光推送************************************/
manifestPlaceholders = [ manifestPlaceholders = [
JPUSH_PKGNAME: "com.jiaoguanyi.appstore", JPUSH_PKGNAME: "com.jiaoguanyi.appstore",
@@ -130,6 +130,15 @@ android {
v2SigningEnabled true v2SigningEnabled true
} }
zhanRuiUserdebug {
storeFile file("keystore/zhanxunUserdebug.keystore")
storePassword "123456"
keyAlias "zhanxunUserdebug"
keyPassword "123456"
v1SigningEnabled true
v2SigningEnabled true
}
debug { debug {
storeFile file("keystore/xueshibaoos.jks") storeFile file("keystore/xueshibaoos.jks")
storePassword "123456" storePassword "123456"
@@ -147,7 +156,6 @@ android {
v1SigningEnabled true v1SigningEnabled true
v2SigningEnabled false v2SigningEnabled false
} }
} }
// Disable release builds for now // Disable release builds for now
@@ -186,6 +194,18 @@ android {
signingConfig signingConfigs.zhanRui signingConfig signingConfigs.zhanRui
} }
//userdebug rom使用这个版本
zhanRuiUserdebug.initWith(zhanRuiDebug)
zhanRuiUserdebug {
manifestPlaceholders = [
AMAP_KEY: "546eb5646a65ac6a5b7d1c7456466e05"
]
versionNameSuffix "-debug"
buildConfigField "String", "platform", '"ZhanRui"'
debuggable true
signingConfig signingConfigs.zhanRuiUserdebug
}
debug { debug {
buildConfigField "String", "platform", '"MTK"' buildConfigField "String", "platform", '"MTK"'
manifestPlaceholders = [ manifestPlaceholders = [

Binary file not shown.

View File

@@ -56,10 +56,13 @@
android:maxSdkVersion="22" /> android:maxSdkVersion="22" />
<uses-permission <uses-permission
android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS" android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"
android:maxSdkVersion="23" /> <!-- 高德地图 --> android:maxSdkVersion="23" />
<!-- 高德地图 -->
<!-- 用于进行网络定位 --> <!-- 用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- 用于访问GPS定位 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 用于获取运营商信息,用于支持提供运营商信息相关的接口 --> <!-- 用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 用于获取运营商信息,用于支持提供运营商信息相关的接口 -->
<!-- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> --> <!-- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> -->
<!-- 用于访问wifi网络信息wifi信息会用于进行网络定位 --> <!-- 用于访问wifi网络信息wifi信息会用于进行网络定位 -->
<!-- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> --> <!-- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> -->
@@ -72,8 +75,10 @@
<!-- 用于写入缓存数据到扩展存储卡 --> <!-- 用于写入缓存数据到扩展存储卡 -->
<!-- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> --> <!-- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> -->
<!-- 用于申请调用A-GPS模块 --> <!-- 用于申请调用A-GPS模块 -->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> <!-- 如果设置了target >= 28 如果需要启动后台定位则必须声明这个权限 --> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <!-- 如果您的应用需要后台定位权限且有可能运行在Android Q设备上,并且设置了target>28必须增加这个权限声明 --> <!-- 如果设置了target >= 28 如果需要启动后台定位则必须声明这个权限 -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<!-- 如果您的应用需要后台定位权限且有可能运行在Android Q设备上,并且设置了target>28必须增加这个权限声明 -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="com.jiaoguanyi.appstore.permissions.INSTALL_APK" /> <uses-permission android:name="com.jiaoguanyi.appstore.permissions.INSTALL_APK" />
@@ -364,7 +369,8 @@
android:value="developer-default" /> <!-- Required. AppKey copied from Portal --> android:value="developer-default" /> <!-- Required. AppKey copied from Portal -->
<meta-data <meta-data
android:name="JPUSH_APPKEY" android:name="JPUSH_APPKEY"
android:value="${JPUSH_APPKEY}" /> <!-- 高德地图 --> android:value="${JPUSH_APPKEY}" />
<!-- 高德地图 -->
<!-- 设置key --> <!-- 设置key -->
<meta-data <meta-data
android:name="com.amap.api.v2.apikey" android:name="com.amap.api.v2.apikey"

View File

@@ -63,7 +63,6 @@ import com.mjsheng.myappstore.utils.ExampleUtil;
import com.mjsheng.myappstore.utils.JGYUtils; import com.mjsheng.myappstore.utils.JGYUtils;
import com.mjsheng.myappstore.utils.SPUtils; import com.mjsheng.myappstore.utils.SPUtils;
import com.mjsheng.myappstore.utils.SaveListUtils; import com.mjsheng.myappstore.utils.SaveListUtils;
import com.mjsheng.myappstore.utils.SysSettingUtils;
import com.mjsheng.myappstore.utils.ToastUtil; import com.mjsheng.myappstore.utils.ToastUtil;
import com.mjsheng.myappstore.utils.Utils; import com.mjsheng.myappstore.utils.Utils;
@@ -537,7 +536,7 @@ public class DiscardActivity extends AppCompatActivity {
// getDeselectBrowerID();//浏览器网址管控 // getDeselectBrowerID();//浏览器网址管控
HTTPInterface.setBrowserBlackList(DiscardActivity.this);//浏览器网址管控 HTTPInterface.setBrowserBlackList(DiscardActivity.this);//浏览器网址管控
HTTPInterface.setHomepagtag(DiscardActivity.this);//设置主页和标签 HTTPInterface.setHomepagtag(DiscardActivity.this);//设置主页和标签
HTTPInterface.setAppinsideWeb(DiscardActivity.this);//app内部网页管控 // HTTPInterface.getAppinsideWeb(DiscardActivity.this);//app内部网页管控
HTTPInterface.setHideDesktopIcon(DiscardActivity.this);//设置桌面图标隐藏 HTTPInterface.setHideDesktopIcon(DiscardActivity.this);//设置桌面图标隐藏
getDeselectID();//ID管控 getDeselectID();//ID管控
getAppLimitApi();//写入可被安装的包名 getAppLimitApi();//写入可被安装的包名
@@ -1213,7 +1212,7 @@ public class DiscardActivity extends AppCompatActivity {
.subscribe(new Observer<ForceDownloadBean>() { .subscribe(new Observer<ForceDownloadBean>() {
@Override @Override
public void onSubscribe(Disposable d) { public void onSubscribe(Disposable d) {
Log.e("getForceDownload", "forceDownloadApi---onSubscribe"); // Log.e("getForceDownload", "forceDownloadApi---onSubscribe");
} }
@@ -1221,7 +1220,7 @@ public class DiscardActivity extends AppCompatActivity {
public void onNext(ForceDownloadBean forceDownloadBean) { public void onNext(ForceDownloadBean forceDownloadBean) {
switch (forceDownloadBean.getCode()) { switch (forceDownloadBean.getCode()) {
case 200: case 200:
Log.e("getForceDownload", "isDownloading=" + BaseApplication.getInstance().isDownloading()); // Log.e("getForceDownload", "isDownloading=" + BaseApplication.getInstance().isDownloading());
BaseApplication.getInstance().checkIsDownloading(); BaseApplication.getInstance().checkIsDownloading();
if (!BaseApplication.getInstance().isDownloading()) { if (!BaseApplication.getInstance().isDownloading()) {
Aria.download(this).removeAllTask(true); Aria.download(this).removeAllTask(true);
@@ -1236,22 +1235,22 @@ public class DiscardActivity extends AppCompatActivity {
break; break;
case -200: case -200:
boolean qch_force_app = Settings.System.putString(DiscardActivity.this.getContentResolver(), "qch_force_app", "invalid"); boolean qch_force_app = Settings.System.putString(DiscardActivity.this.getContentResolver(), "qch_force_app", "invalid");
Log.e("fht", "qch_force_app:" + qch_force_app); // Log.e("fht", "qch_force_app:" + qch_force_app);
break; break;
default: default:
Log.e("getForceDownload", forceDownloadBean.getMsg()); // Log.e("getForceDownload", forceDownloadBean.getMsg());
break; break;
} }
} }
@Override @Override
public void onError(Throwable e) { public void onError(Throwable e) {
Log.e("getForceDownload", "forceDownloadApi=onError:"); // Log.e("getForceDownload", "forceDownloadApi=onError:");
} }
@Override @Override
public void onComplete() { public void onComplete() {
Log.e("getForceDownload", "forceDownloadApi---onComplete"); // Log.e("getForceDownload", "forceDownloadApi---onComplete");
} }
}); });
} }

View File

@@ -364,6 +364,11 @@ public class MainActivity extends BaseActivity implements MainContact.MainView {
@Override @Override
public void setSystemSettingFinished() { public void setSystemSettingFinished() {
mPresenter.getROMApp();
}
@Override
public void getROMAppFinished() {
mPresenter.getDeveloper(); mPresenter.getDeveloper();
} }

View File

@@ -61,6 +61,8 @@ public class MainContact {
void setAppinsideWebFinished(); void setAppinsideWebFinished();
//获取系统其他管控设置结束 //获取系统其他管控设置结束
void setSystemSettingFinished(); void setSystemSettingFinished();
//获取自定义版本内置app
void getROMAppFinished();
//获取开发者选项结束 //获取开发者选项结束
void getDeveloperFinished(); void getDeveloperFinished();
//设置开机动画 //设置开机动画
@@ -128,6 +130,8 @@ public class MainContact {
void setAppinsideWeb(); void setAppinsideWeb();
//获取系统其他管控设置 //获取系统其他管控设置
void setSystemSetting(); void setSystemSetting();
//获取自定义版本内置app
void getROMApp();
//获取开发者选项 //获取开发者选项
void getDeveloper(); void getDeveloper();
//设置开机动画 //设置开机动画

View File

@@ -215,6 +215,7 @@ public class MainPresenter implements MainContact.Presenter {
int oldState = Settings.System.getInt(mContext.getContentResolver(), "qch_unlock_ipad", 0); int oldState = Settings.System.getInt(mContext.getContentResolver(), "qch_unlock_ipad", 0);
Log.e("getLockedState", "qch_unlock_ipad: " + oldState); Log.e("getLockedState", "qch_unlock_ipad: " + oldState);
//后台1是锁定底层0是锁定 //后台1是锁定底层0是锁定
SPUtils.put(mContext, "first_connect", 1);
if (locked == 1) { if (locked == 1) {
if (oldState == 1) { if (oldState == 1) {
Log.e("getLockedState", "onNext: " + "state changed , reset devices"); Log.e("getLockedState", "onNext: " + "state changed , reset devices");
@@ -222,7 +223,6 @@ public class MainPresenter implements MainContact.Presenter {
} }
Settings.System.putInt(mContext.getContentResolver(), "qch_unlock_ipad", 0); Settings.System.putInt(mContext.getContentResolver(), "qch_unlock_ipad", 0);
} else { } else {
SPUtils.put(mContext, "first_connect", 1);
// SysSettingUtils.setEnableSetting(mContext); // SysSettingUtils.setEnableSetting(mContext);
Settings.System.putInt(mContext.getContentResolver(), "qch_unlock_ipad", 1); Settings.System.putInt(mContext.getContentResolver(), "qch_unlock_ipad", 1);
} }
@@ -688,6 +688,7 @@ public class MainPresenter implements MainContact.Presenter {
boolean write = Settings.System.putString(mContext.getContentResolver(), "only_jgy_shortcut_list", ""); boolean write = Settings.System.putString(mContext.getContentResolver(), "only_jgy_shortcut_list", "");
Log.e(TAG, "onNext: only_jgy_shortcut_list: " + write); Log.e(TAG, "onNext: only_jgy_shortcut_list: " + write);
Log.e("getAppLimit", "onNext: " + bodyString); Log.e("getAppLimit", "onNext: " + bodyString);
mView.getAppLimitFinished("");
} }
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
@@ -712,11 +713,12 @@ public class MainPresenter implements MainContact.Presenter {
@Override @Override
public void getDeviceBatch(String packageList) { public void getDeviceBatch(String packageList) {
if (JGYUtils.isOfficialVersion()) { if (JGYUtils.isOfficialVersion() || TextUtils.isEmpty(packageList)) {
mView.getDeviceBatchFinished(); mView.getDeviceBatchFinished();
return; return;
} }
int locked = Settings.System.getInt(mContext.getContentResolver(), "qch_unlock_ipad", 0); int locked = Settings.System.getInt(mContext.getContentResolver(), "qch_unlock_ipad", 0);
Log.e(TAG, "getDeviceBatch: " + locked);
if (locked == 0) { if (locked == 0) {
// NetInterfaceManager.getInstance() // NetInterfaceManager.getInstance()
// .getBatchObservable() // .getBatchObservable()
@@ -1290,72 +1292,14 @@ public class MainPresenter implements MainContact.Presenter {
@Override @Override
public void setAppinsideWeb() { public void setAppinsideWeb() {
// if (JGYUtils.isOfficialVersion()) { HTTPInterface.getAppinsideWeb(mContext, new HTTPInterface.GetAppinsideWebCallback() {
getAppinsideWeb();
// } else {
// getNewAppinsideWeb();
// }
}
private void getAppinsideWeb() {
NetInterfaceManager.getInstance()
.getAppinsideWebObservable()
.observeOn(Schedulers.io())
.subscribe(new Observer<BaseResponse<List<Appground>>>() {
@Override @Override
public void onSubscribe(@NonNull Disposable d) { public void ononComplete() {
Log.e("setAppinsideWeb", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse<List<Appground>> listBaseResponse) {
Log.e("setAppinsideWeb", "onNext: ");
JGYUtils.getInstance().setAppinsideWeb(listBaseResponse);
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("setAppinsideWeb", "onError: " + e.getMessage());
onComplete();
}
@Override
public void onComplete() {
Log.e("setAppinsideWeb", "onComplete: ");
mView.setAppinsideWebFinished(); mView.setAppinsideWebFinished();
} }
}); });
} }
private void getNewAppinsideWeb() {
NetInterfaceManager.getInstance()
.getNewAppinsideWebObservable()
.observeOn(Schedulers.io())
.subscribe(new Observer<BaseResponse>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("getNewAppinsideWeb", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse listBaseResponse) {
Log.e("getNewAppinsideWeb", "onNext: ");
JGYUtils.getInstance().setNewAppinsideWeb(listBaseResponse);
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("getNewAppinsideWeb", "onError: " + e.getMessage());
onComplete();
}
@Override
public void onComplete() {
Log.e("getNewAppinsideWeb", "onComplete: ");
mView.setAppinsideWebFinished();
}
});
}
@Override @Override
public void setSystemSetting() { public void setSystemSetting() {
@@ -1414,6 +1358,48 @@ public class MainPresenter implements MainContact.Presenter {
} }
@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())
.subscribe(new Observer<BaseResponse>() {
@Override
public void onSubscribe(Disposable d) {
Log.e("getROMApp", "onSubscribe: ");
}
@Override
public void onNext(BaseResponse baseResponse) {
Log.e("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("getROMApp", "onNext: " + baseResponse.msg);
Settings.System.putString(mContext.getContentResolver(), "jgy_customromapp", "");
onComplete();
}
}
@Override
public void onError(Throwable e) {
Log.e("getROMApp", "onError: " + e.getMessage());
onComplete();
}
@Override
public void onComplete() {
Log.e("getROMApp", "onComplete: ");
mView.getROMAppFinished();
}
});
}
@Override @Override
public void getDeveloper() { public void getDeveloper() {
NetInterfaceManager.getInstance().getDeveloperControl() NetInterfaceManager.getInstance().getDeveloperControl()

View File

@@ -1,8 +1,10 @@
package com.mjsheng.myappstore.bean; package com.mjsheng.myappstore.bean;
import androidx.annotation.Nullable;
import java.io.Serializable; import java.io.Serializable;
public class NewAppground implements Serializable { public class TTAppground implements Serializable {
private static final long serialVersionUID = -2071117846816082338L; private static final long serialVersionUID = -2071117846816082338L;
private String packages; private String packages;
private String address; private String address;
@@ -37,4 +39,20 @@ public class NewAppground implements Serializable {
public String toString() { public String toString() {
return packages + "," + address; return packages + "," + address;
} }
@Override
public boolean equals(@Nullable Object obj) {
if (obj instanceof TTAppground) {
TTAppground appground = (TTAppground) obj;
return packages.equalsIgnoreCase(appground.getPackages())
&& address.equalsIgnoreCase(appground.getAddress())
&& type == appground.getType();
}
return false;
}
@Override
public int hashCode() {
return super.hashCode();
}
} }

View File

@@ -12,7 +12,6 @@ import com.mjsheng.myappstore.bean.ForceDownloadBean;
import com.mjsheng.myappstore.bean.ForceDownloadData; import com.mjsheng.myappstore.bean.ForceDownloadData;
import com.mjsheng.myappstore.bean.LogoImg; import com.mjsheng.myappstore.bean.LogoImg;
import com.mjsheng.myappstore.bean.NetAndLaunchBean; import com.mjsheng.myappstore.bean.NetAndLaunchBean;
import com.mjsheng.myappstore.bean.NewAppground;
import com.mjsheng.myappstore.bean.StudentsInfo; import com.mjsheng.myappstore.bean.StudentsInfo;
import com.mjsheng.myappstore.network.api.AppLimitApi; import com.mjsheng.myappstore.network.api.AppLimitApi;
import com.mjsheng.myappstore.network.api.BrankPicApi; import com.mjsheng.myappstore.network.api.BrankPicApi;
@@ -30,6 +29,7 @@ import com.mjsheng.myappstore.network.api.newapi.BrowserBookmarksApi;
import com.mjsheng.myappstore.network.api.newapi.BrowserListApi; import com.mjsheng.myappstore.network.api.newapi.BrowserListApi;
import com.mjsheng.myappstore.network.api.newapi.CheckTestUpdateApi; import com.mjsheng.myappstore.network.api.newapi.CheckTestUpdateApi;
import com.mjsheng.myappstore.network.api.newapi.CheckUpdateApi; import com.mjsheng.myappstore.network.api.newapi.CheckUpdateApi;
import com.mjsheng.myappstore.network.api.newapi.CustomROMApp;
import com.mjsheng.myappstore.network.api.newapi.DesktopIconApi; import com.mjsheng.myappstore.network.api.newapi.DesktopIconApi;
import com.mjsheng.myappstore.network.api.newapi.DevicesLockedStateApi; import com.mjsheng.myappstore.network.api.newapi.DevicesLockedStateApi;
import com.mjsheng.myappstore.network.api.newapi.GetBatchApi; import com.mjsheng.myappstore.network.api.newapi.GetBatchApi;
@@ -177,7 +177,6 @@ public class NetInterfaceManager {
.observeOn(AndroidSchedulers.mainThread()); .observeOn(AndroidSchedulers.mainThread());
} }
public Observable<BaseResponse<BrowserData>> getBrowserListSettingObservable() { public Observable<BaseResponse<BrowserData>> getBrowserListSettingObservable() {
return mRetrofit return mRetrofit
.create(BrowserListApi.class) .create(BrowserListApi.class)
@@ -313,6 +312,7 @@ public class NetInterfaceManager {
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()); .observeOn(AndroidSchedulers.mainThread());
} }
public Observable<BaseResponse> getDeveloperControl() { public Observable<BaseResponse> getDeveloperControl() {
return mRetrofit.create(GetDeveloper.class) return mRetrofit.create(GetDeveloper.class)
.getDeveloperState(Utils.getSerial()) .getDeveloperState(Utils.getSerial())
@@ -320,8 +320,6 @@ public class NetInterfaceManager {
.observeOn(AndroidSchedulers.mainThread()); .observeOn(AndroidSchedulers.mainThread());
} }
/* /*
* *
* API * API
@@ -399,4 +397,8 @@ public class NetInterfaceManager {
.create(CheckUpdateApi.class); .create(CheckUpdateApi.class);
} }
public CustomROMApp getCustomROMAppApi() {
return mRetrofit.create(CustomROMApp.class);
}
} }

View File

@@ -411,77 +411,81 @@ public class HTTPInterface {
}); });
} }
public interface GetAppinsideWebCallback {
void ononComplete();
}
synchronized public static void setAppinsideWeb(final Context context) { synchronized public static void getAppinsideWeb(Context context, GetAppinsideWebCallback callback) {
OkGo.post(URLAddress.SET_APPINSIDEWEB) if (JGYUtils.getInstance().checkAppPlatform() == JGYUtils.MTKPlatform) {
.params("key", NetInterfaceManager.HTTP_KEY) setAppinsideWeb(callback);
.params("sn", Utils.getSerial())
.execute(new StringCallback() {
@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) {
String data = jsonObject.getString("data");
List<Appground> appgrounds = JSON.parseArray(data, Appground.class);
if (appgrounds != null && appgrounds.size() > 0) {
String strings = "";
String packageList = "";//单条管控名单
for (Appground appground : appgrounds) {
if (appground.getAddress().equals("")) {
packageList += appground.getPackages() + ",";
}else { }else {
strings += appground.toString() + ";"; setNewAppinsideWeb(callback);
}
}
if (packageList.length() > 0) {
//app内所有的网页禁止
// packageList = packageList.substring(0, packageList.length() - 1);
//去掉多余的,
Log.e("setAppinsideWeb ", "packageList:" + packageList);
Intent qch_app_website = new Intent("qch_app_website")
.setPackage("com.android.settings");
qch_app_website.putExtra("package_name", packageList);
context.sendBroadcast(qch_app_website);
} else {
sendAllweb(context);
}
if (strings.length() > 0) {
//app内单个网页地址禁止打开
// strings = strings.substring(0, strings.length() - 1);
//去掉多余的;
Log.e("setAppinsideWeb ", "strings:" + strings);
Intent intent = new Intent("qch_app_inside_website")
.setPackage("com.android.settings");
intent.putExtra("websitelist", strings);
context.sendBroadcast(intent);
} else {
sendwebUrl(context);
}
}
} else if (code == 400) {
//列表为空的情况
sendAllweb(context);
sendwebUrl(context);
// ToastUtil.show(msg);
Log.e("fht", "setAppinsideWeb" + msg);
}
} catch (Exception e) {
Log.e("setAppinsideWeb", e.getMessage());
// ToastUtil.show("数据错误");
} }
} }
private static void setAppinsideWeb(GetAppinsideWebCallback callback) {
NetInterfaceManager.getInstance()
.getAppinsideWebObservable()
.observeOn(Schedulers.io())
.subscribe(new Observer<BaseResponse<List<Appground>>>() {
@Override @Override
public void onError(Call call, Response response, Exception e) { public void onSubscribe(@NonNull Disposable d) {
super.onError(call, response, e); Log.e("setAppinsideWeb", "onSubscribe: ");
// ToastUtil.show("网络连接失败"); }
@Override
public void onNext(@NonNull BaseResponse<List<Appground>> listBaseResponse) {
Log.e("setAppinsideWeb", "onNext: " + listBaseResponse);
JGYUtils.getInstance().setAppinsideWeb(listBaseResponse);
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("setAppinsideWeb", "onError: " + e.getMessage());
onComplete();
}
@Override
public void onComplete() {
Log.e("setAppinsideWeb", "onComplete: ");
callback.ononComplete();
} }
}); });
} }
private static void setNewAppinsideWeb(GetAppinsideWebCallback callback) {
NetInterfaceManager.getInstance()
.getNewAppinsideWebObservable()
.observeOn(Schedulers.io())
.subscribe(new Observer<BaseResponse>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("getNewAppinsideWeb", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse listBaseResponse) {
Log.e("getNewAppinsideWeb", "onNext: " + listBaseResponse);
long time1 = System.currentTimeMillis();
JGYUtils.getInstance().setNewAppinsideWeb(listBaseResponse);
Log.e(TAG, "setWhiteApp: time = " + (System.currentTimeMillis() - time1));
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("getNewAppinsideWeb", "onError: " + e.getMessage());
onComplete();
}
@Override
public void onComplete() {
Log.e("getNewAppinsideWeb", "onComplete: ");
callback.ononComplete();
}
});
}
private static void sendAllweb(Context context) { private static void sendAllweb(Context context) {
Intent intent = new Intent("qch_app_website") Intent intent = new Intent("qch_app_website")
.setPackage("com.android.settings"); .setPackage("com.android.settings");

View File

@@ -60,5 +60,7 @@ public class URLAddress {
public final static String GET_LOGO_IMG = HTTP_TAG_HEAD_NEW + "Sn/getLogoImg"; 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"; public final static String GET_DEVELOPER = HTTP_TAG_HEAD_NEW + "Sn/getDeveloper";
//通过固件名获取内置应用
public final static String GET_ROM_APP = HTTP_TAG_HEAD_NEW + "And/getFirmwareApp";
} }

View File

@@ -0,0 +1,18 @@
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.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;
public interface CustomROMApp {
@FormUrlEncoded
@POST(URLAddress.GET_ROM_APP)
Observable<BaseResponse> getROMApp(
@Field("key") String key,
@Field("version_number") String version_number
);
}

View File

@@ -2,11 +2,8 @@ package com.mjsheng.myappstore.network.api.newapi;
import com.mjsheng.myappstore.bean.BaseResponse; import com.mjsheng.myappstore.bean.BaseResponse;
import com.mjsheng.myappstore.bean.NewAppground;
import com.mjsheng.myappstore.network.URLAddress; import com.mjsheng.myappstore.network.URLAddress;
import java.util.List;
import io.reactivex.Observable; import io.reactivex.Observable;
import retrofit2.http.Field; import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded; import retrofit2.http.FormUrlEncoded;

View File

@@ -11,6 +11,8 @@ import com.mjsheng.myappstore.server.GuardService;
import com.mjsheng.myappstore.server.LogcatService; import com.mjsheng.myappstore.server.LogcatService;
import com.mjsheng.myappstore.server.MainService; import com.mjsheng.myappstore.server.MainService;
import com.mjsheng.myappstore.server.StepService; import com.mjsheng.myappstore.server.StepService;
import com.mjsheng.myappstore.utils.JGYUtils;
import com.mjsheng.myappstore.utils.SPUtils;
public class BootReceiver extends BroadcastReceiver { public class BootReceiver extends BroadcastReceiver {
private String TAG = BootReceiver.class.getSimpleName() + ":myappstore"; private String TAG = BootReceiver.class.getSimpleName() + ":myappstore";
@@ -28,6 +30,7 @@ public class BootReceiver extends BroadcastReceiver {
Settings.System.putString(context.getContentResolver(), "qch_launcher_icon_app", ""); Settings.System.putString(context.getContentResolver(), "qch_launcher_icon_app", "");
} }
startService(context); startService(context);
SPUtils.put(context, JGYUtils.JGY_APPINSIDE_FIRST_WRITE,0);
break; break;
case BOOT_COMPLETED: case BOOT_COMPLETED:
case Intent.ACTION_BATTERY_CHANGED: case Intent.ACTION_BATTERY_CHANGED:

View File

@@ -1068,7 +1068,13 @@ public class MyJPushReceiver extends BroadcastReceiver {
private void setAPPinsideWebsite(String s) { private void setAPPinsideWebsite(String s) {
//禁止app内部网页访问包名用,隔开 //禁止app内部网页访问包名用,隔开
HTTPInterface.setAppinsideWeb(mContext);//app内部网页管控 HTTPInterface.getAppinsideWeb(mContext, new HTTPInterface.GetAppinsideWebCallback() {
@Override
public void ononComplete() {
Log.e(TAG, "ononComplete: setAPPinsideWebsite");
}
});//app内部网页管控
// if (TextUtils.isEmpty(s)) { // if (TextUtils.isEmpty(s)) {
// Log.e(TAG, "setAPPinsideWebsite extras is null"); // Log.e(TAG, "setAPPinsideWebsite extras is null");
// //

View File

@@ -49,16 +49,16 @@ public class NewAppReceiver extends BroadcastReceiver {
String packageName = intent.getDataString().replace("package:", ""); String packageName = intent.getDataString().replace("package:", "");
switch (action) { switch (action) {
case Intent.ACTION_PACKAGE_ADDED: case Intent.ACTION_PACKAGE_ADDED:
state = "安装了"; state = "安装了:";
break; break;
case Intent.ACTION_PACKAGE_REPLACED: case Intent.ACTION_PACKAGE_REPLACED:
state = "重装了"; state = "重装了:";
break; break;
case Intent.ACTION_PACKAGE_REMOVED: case Intent.ACTION_PACKAGE_REMOVED:
state = "卸载了"; state = "卸载了:";
break; break;
default: default:
state = "未知"; state = "未知:";
break; break;
} }
Log.e(TAG, "sendAppInfo: " + state + packageName); Log.e(TAG, "sendAppInfo: " + state + packageName);

View File

@@ -61,7 +61,6 @@ import com.mjsheng.myappstore.utils.ForegroundAppUtil;
import com.mjsheng.myappstore.utils.MySQLData; import com.mjsheng.myappstore.utils.MySQLData;
import com.mjsheng.myappstore.utils.SPUtils; import com.mjsheng.myappstore.utils.SPUtils;
import com.mjsheng.myappstore.utils.SaveListUtils; import com.mjsheng.myappstore.utils.SaveListUtils;
import com.mjsheng.myappstore.utils.SysSettingUtils;
import com.mjsheng.myappstore.utils.TimeUtils; import com.mjsheng.myappstore.utils.TimeUtils;
import com.mjsheng.myappstore.utils.Utils; import com.mjsheng.myappstore.utils.Utils;
@@ -812,7 +811,7 @@ public class DiscardServer extends Service {
.subscribe(new Observer<ForceDownloadBean>() { .subscribe(new Observer<ForceDownloadBean>() {
@Override @Override
public void onSubscribe(Disposable d) { public void onSubscribe(Disposable d) {
Log.e("getForceDownload", "forceDownloadApi---onSubscribe"); // Log.e("getForceDownload", "forceDownloadApi---onSubscribe");
} }
@@ -820,7 +819,7 @@ public class DiscardServer extends Service {
public void onNext(ForceDownloadBean forceDownloadBean) { public void onNext(ForceDownloadBean forceDownloadBean) {
switch (forceDownloadBean.getCode()) { switch (forceDownloadBean.getCode()) {
case 200: case 200:
Log.e("getForceDownload", "isDownloading=" + BaseApplication.getInstance().isDownloading()); // Log.e("getForceDownload", "isDownloading=" + BaseApplication.getInstance().isDownloading());
BaseApplication.getInstance().checkIsDownloading(); BaseApplication.getInstance().checkIsDownloading();
if (!BaseApplication.getInstance().isDownloading()) { if (!BaseApplication.getInstance().isDownloading()) {
Aria.download(this).removeAllTask(true); Aria.download(this).removeAllTask(true);
@@ -835,10 +834,10 @@ public class DiscardServer extends Service {
break; break;
case -200: case -200:
boolean qch_force_app = Settings.System.putString(getContentResolver(), "qch_force_app", "invalid"); boolean qch_force_app = Settings.System.putString(getContentResolver(), "qch_force_app", "invalid");
Log.e("getForceDownload", "qch_force_app:" + qch_force_app); // Log.e("getForceDownload", "qch_force_app:" + qch_force_app);
break; break;
default: default:
Log.e("getForceDownload", forceDownloadBean.getMsg()); // Log.e("getForceDownload", forceDownloadBean.getMsg());
break; break;
} }
} }
@@ -1185,7 +1184,7 @@ public class DiscardServer extends Service {
HTTPInterface.setJpushTags(DiscardServer.this); HTTPInterface.setJpushTags(DiscardServer.this);
sendMACaddress(); sendMACaddress();
HTTPInterface.setBrowserBlackList(DiscardServer.this);//浏览器网址管控 HTTPInterface.setBrowserBlackList(DiscardServer.this);//浏览器网址管控
HTTPInterface.setAppinsideWeb(DiscardServer.this);//app内部网页管控 // HTTPInterface.getAppinsideWeb(DiscardServer.this);//app内部网页管控
HTTPInterface.setHomepagtag(DiscardServer.this);//设置主页和标签 HTTPInterface.setHomepagtag(DiscardServer.this);//设置主页和标签
HTTPInterface.setHideDesktopIcon(DiscardServer.this);//设置桌面图标隐藏 HTTPInterface.setHideDesktopIcon(DiscardServer.this);//设置桌面图标隐藏
// getAppLimitApi();//获取可以写入的app包名 // getAppLimitApi();//获取可以写入的app包名

View File

@@ -139,7 +139,7 @@ public class MainService extends Service implements MainContact.MainView {
public int onStartCommand(Intent intent, int flags, int startId) { public int onStartCommand(Intent intent, int flags, int startId) {
JPushInterface.init(this); JPushInterface.init(this);
if (MainActivity.isForeground) { if (MainActivity.isForeground) {
Log.e(TAG, "onStartCommand: MainActivity: isForeground: " + MainActivity.isForeground); Log.e(TAG, "onStartCommand: MainService: isForeground: " + MainActivity.isForeground);
} else { } else {
// if (((SystemClock.elapsedRealtime() - startCommandTime) < 60000) && startCommandTime != 0) { // if (((SystemClock.elapsedRealtime() - startCommandTime) < 60000) && startCommandTime != 0) {
// Log.e(TAG, "onStartCommand: " + "启动时间过短"); // Log.e(TAG, "onStartCommand: " + "启动时间过短");
@@ -394,12 +394,15 @@ public class MainService extends Service implements MainContact.MainView {
installApkByPackage(filePath, packageName); installApkByPackage(filePath, packageName);
} else if (!TextUtils.isEmpty(filePath)) { } else if (!TextUtils.isEmpty(filePath)) {
String pkg = ApkUtils.getPackageName(MainService.this, filePath); String pkg = ApkUtils.getPackageName(MainService.this, filePath);
if (TextUtils.isEmpty(pkg)) {
Log.e(TAG, "onReceive: " + "unknow packageName");
} else {
Log.e(TAG, "onReceive: " + "pkg: " + pkg + "\tfilePath: " + filePath); Log.e(TAG, "onReceive: " + "pkg: " + pkg + "\tfilePath: " + filePath);
installApkByPackage(filePath, pkg); installApkByPackage(filePath, pkg);
}
} else { } else {
Log.e(TAG, "onReceive: " + "no filePath and packageName"); Log.e(TAG, "onReceive: " + "no filePath and packageName");
} }
} }
} }
@@ -411,12 +414,12 @@ public class MainService extends Service implements MainContact.MainView {
synchronized private void installApkByPackage(String filePath, String pkg) { synchronized private void installApkByPackage(String filePath, String pkg) {
String oldListString = Settings.System.getString(getContentResolver(), "qch_app_forbid"); String oldListString = Settings.System.getString(getContentResolver(), "qch_app_forbid");
HashSet<String> packageList = new HashSet<>(Arrays.asList(oldListString.split(","))); HashSet<String> packageList = new HashSet<>(Arrays.asList(oldListString.split(",")));
packageList.add(pkg); if (!packageList.contains(pkg)) {
String join = String.join(",", packageList); Log.e(TAG, "installApkByPackage: " + "packageName: " + pkg + " not in whitelist");
Log.e(TAG, "installApkByPackage: " + join); } else {
Settings.System.putString(getContentResolver(), "qch_app_forbid", join);
ApkUtils.installApp(MainService.this, filePath); ApkUtils.installApp(MainService.this, filePath);
} }
}
@Override @Override
public void setBatchText(String text, int visibility) { public void setBatchText(String text, int visibility) {
@@ -441,18 +444,19 @@ public class MainService extends Service implements MainContact.MainView {
@Override @Override
public void setLockedState(boolean loocked) { public void setLockedState(boolean loocked) {
if (loocked) { if (loocked) {
Log.e(TAG, "setLockedState: " + netWorkIsRunning);
//上传APP信息 //上传APP信息
ApkUtils.getAppInfo(this); ApkUtils.getAppInfo(this);
if (netWorkIsRunning) {
//如果正在执行,不执行
return;
}
//发送设备mac地址和信息 //发送设备mac地址和信息
mPresenter.sendMACAddress(); mPresenter.sendMACAddress();
//设置极光推送别名 //设置极光推送别名
mPresenter.setJpushAlias(); mPresenter.setJpushAlias();
//设置极光推送标签 //设置极光推送标签
SaveListUtils.getList(); SaveListUtils.getList();
if (netWorkIsRunning) {
//如果正在执行,不执行
// return;
}
//获取系统管控 //获取系统管控
mPresenter.getSystemSettingbegin(); mPresenter.getSystemSettingbegin();
netWorkIsRunning = true; netWorkIsRunning = true;
@@ -469,7 +473,7 @@ public class MainService extends Service implements MainContact.MainView {
*/ */
@Override @Override
public void setFirstConnect(boolean state) { public void setFirstConnect(boolean state) {
Log.e(TAG, "isFirstConnect: " + "end request"); Log.e(TAG, "isFirstConnect: " + "end request: " + state);
if (state) { if (state) {
mPresenter.setDisableSetting(); mPresenter.setDisableSetting();
} else { } else {
@@ -576,6 +580,11 @@ public class MainService extends Service implements MainContact.MainView {
@Override @Override
public void setSystemSettingFinished() { public void setSystemSettingFinished() {
mPresenter.getROMApp();
}
@Override
public void getROMAppFinished() {
mPresenter.getDeveloper(); mPresenter.getDeveloper();
} }

View File

@@ -49,7 +49,9 @@ import java.lang.reflect.Method;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Enumeration; import java.util.Enumeration;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
import java.util.zip.ZipFile; import java.util.zip.ZipFile;
@@ -1088,15 +1090,24 @@ public class ApkUtils {
} }
Log.e("addShortcut", "addShortcut: " + result); Log.e("addShortcut", "addShortcut: " + result);
String[] stringList = result.split(","); String[] stringList = result.split(",");
List<String> packages = new ArrayList<>(Arrays.asList(stringList)); HashSet<String> packages = new HashSet<>(Arrays.asList(stringList));
String romapps = Settings.System.getString(context.getContentResolver(), "jgy_customromapp");
Log.e(TAG, "addShortcut: romapps: " + romapps);
HashSet<String> appSet = new HashSet<>();
if (!TextUtils.isEmpty(romapps)) {
appSet = new HashSet<>(Arrays.asList(romapps.split(",")));
packages.addAll(appSet);
}
StringBuilder installedListBuilder = new StringBuilder(); StringBuilder installedListBuilder = new StringBuilder();
for (String s : packages) { for (String s : packages) {
if ("com.jiaoguanyi.store".equals(s) || "com.jiaoguanyi.appstore".equals(s)) { if ("com.jiaoguanyi.store".equals(s) || "com.jiaoguanyi.appstore".equals(s)) {
continue; continue;
} }
if (ApkUtils.isSystemApp(context, s)) { if (ApkUtils.isSystemApp(context, s)) {
if (!appSet.contains(s)) {
continue; continue;
} }
}
if (!ApkUtils.isAvailable(context, s)) { if (!ApkUtils.isAvailable(context, s)) {
continue; continue;
} }

View File

@@ -26,7 +26,9 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.blankj.utilcode.util.FileUtils; import com.blankj.utilcode.util.FileUtils;
import com.blankj.utilcode.util.PathUtils; import com.blankj.utilcode.util.PathUtils;
import com.google.gson.Gson;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;
import com.mjsheng.myappstore.BuildConfig; import com.mjsheng.myappstore.BuildConfig;
import com.mjsheng.myappstore.base.BaseApplication; import com.mjsheng.myappstore.base.BaseApplication;
import com.mjsheng.myappstore.bean.Appground; import com.mjsheng.myappstore.bean.Appground;
@@ -34,7 +36,7 @@ import com.mjsheng.myappstore.bean.BaseResponse;
import com.mjsheng.myappstore.bean.ForceDownloadData; import com.mjsheng.myappstore.bean.ForceDownloadData;
import com.mjsheng.myappstore.bean.NetAndLaunchBean; import com.mjsheng.myappstore.bean.NetAndLaunchBean;
import com.mjsheng.myappstore.bean.NetAndLaunchData; import com.mjsheng.myappstore.bean.NetAndLaunchData;
import com.mjsheng.myappstore.bean.NewAppground; import com.mjsheng.myappstore.bean.TTAppground;
import com.mjsheng.myappstore.comm.CommonDatas; import com.mjsheng.myappstore.comm.CommonDatas;
import java.io.File; import java.io.File;
@@ -43,6 +45,7 @@ import java.io.IOException;
import java.lang.reflect.Constructor; import java.lang.reflect.Constructor;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
@@ -52,6 +55,7 @@ import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Map;
import static android.app.ActivityManager.RECENT_IGNORE_UNAVAILABLE; import static android.app.ActivityManager.RECENT_IGNORE_UNAVAILABLE;
@@ -313,7 +317,7 @@ public class JGYUtils {
} }
public void setAppinsideWeb(BaseResponse<List<Appground>> response) { synchronized public void setAppinsideWeb(BaseResponse<List<Appground>> response) {
if (response.code == 200) { if (response.code == 200) {
List<Appground> appgrounds = response.data; List<Appground> appgrounds = response.data;
if (appgrounds != null && appgrounds.size() > 0) { if (appgrounds != null && appgrounds.size() > 0) {
@@ -364,25 +368,234 @@ public class JGYUtils {
} }
} }
public void setNewAppinsideWeb(BaseResponse response) { /**
* @param response 黑白名单都可以管控
*/
synchronized public void setNewAppinsideWeb(BaseResponse response) {
if (response.code == 200) { if (response.code == 200) {
String jsonString = JSONArray.toJSONString(response.data); String jsonString = JSONArray.toJSONString(response.data);
List<NewAppground> appgrounds = JSONObject.parseArray(jsonString, NewAppground.class); List<TTAppground> appgrounds = JSONObject.parseArray(jsonString, TTAppground.class);
StringBuilder whiteList = new StringBuilder(); List<TTAppground> whiteApp = new ArrayList<>();
List<TTAppground> blackApp = new ArrayList<>();
if (appgrounds != null && appgrounds.size() > 0) {
for (TTAppground appground : appgrounds) {
if (appground.getType() == 1) {
whiteApp.add(appground);
} else {
blackApp.add(appground);
}
}
setWhiteApp(whiteApp);
setBlackApp(blackApp);
}
} else if (response.code == 400) {
//列表为空的情况
sendAllweb(mContext);
sendwebUrl(mContext);
//ToastUtil.show(msg);
Log.e("setAppinsideWeb", "setAppinsideWeb: " + response.msg);
}
}
public static final String JGY_APPINSIDE_WHITELIST = "JGY_APPINSIDE_WHITELIST";
public static final String JGY_APPINSIDE_FIRST_WRITE = "JGY_APPINSIDE_FIRST_WRITE";
@SuppressLint("NewApi")
synchronized private void setWhiteApp(List<TTAppground> appgrounds) {
int first = (int) SPUtils.get(mContext, JGYUtils.JGY_APPINSIDE_FIRST_WRITE, 0);
if (first == 0) {
for (TTAppground appground : appgrounds) {
if (TextUtils.isEmpty(appground.getAddress())) {
Log.e(TAG, "setWhiteApp: " + "skip: " + appground.getAddress());
} else {
addPackage(appground.getPackages());
addToWhitelist(appground.getPackages(), appground.getAddress());
}
}
SPUtils.put(mContext, JGYUtils.JGY_APPINSIDE_FIRST_WRITE, 1);
} else {
List<TTAppground> old = getOldWhitelist();
comparedAppground(old, appgrounds);
setWhiteList(appgrounds);
}
}
synchronized private void comparedAppground(List<TTAppground> oldAppgrounds, List<TTAppground> newAppgrounds) {
List<TTAppground> addAppgrounds = new ArrayList<>();
List<TTAppground> deleteAppgrounds = new ArrayList<>();
List<TTAppground> changedAppgrounds = new ArrayList<>();
HashMap<String, TTAppground> oldAppgroundsMap = new HashMap<>();
HashMap<String, TTAppground> newAppgroundsMap = new HashMap<>();
for (TTAppground appground : oldAppgrounds) {
oldAppgroundsMap.put(appground.getPackages(), appground);
}
for (TTAppground appground : newAppgrounds) {
newAppgroundsMap.put(appground.getPackages(), appground);
}
for (TTAppground appground : oldAppgrounds) {
String packageName = appground.getPackages();
TTAppground mapground = newAppgroundsMap.get(packageName);
if (mapground == null) {
deleteAppgrounds.add(appground);
} else {
if (!appground.equals(mapground)) {
changedAppgrounds.add(mapground);
}
}
newAppgroundsMap.remove(packageName);
}
for (Map.Entry<String, TTAppground> entry : newAppgroundsMap.entrySet()) {
addAppgrounds.add(entry.getValue());
}
Log.e(TAG, "comparedAppground: addAppgrounds.size():" + addAppgrounds.size());
Log.e(TAG, "comparedAppground: deleteAppgrounds.size():" + deleteAppgrounds.size());
Log.e(TAG, "comparedAppground: changedAppgrounds.size():" + changedAppgrounds.size());
addAppground(addAppgrounds);
deleteAppground(deleteAppgrounds);
changeAppground(oldAppgroundsMap, changedAppgrounds);
}
private void addAppground(List<TTAppground> appgroundList) {
for (TTAppground appground : appgroundList) {
addPackage(appground.getPackages());
addToWhitelist(appground.getPackages(), appground.getAddress());
Log.e("comparedAppground", "addAppground: " + appground.getAddress());
}
}
private void deleteAppground(List<TTAppground> appgroundList) {
for (TTAppground appground : appgroundList) {
deleteWhitelistUrl(appground.getPackages(), appground.getAddress());
Log.e("comparedAppground", "deleteAppground: " + appground.getAddress());
}
}
private void changeAppground(HashMap<String, TTAppground> oldAppgroundsMap, List<TTAppground> appgroundList) {
for (TTAppground appground : appgroundList) {
HashSet<String> newURL = new HashSet<>(Arrays.asList(appground.getAddress().split(",")));
TTAppground oldAppground = oldAppgroundsMap.get(appground.getPackages());
HashSet<String> oldURL = new HashSet<>(Arrays.asList(oldAppground.getAddress().split(",")));
for (String url : newURL) {
if (oldURL.contains(url)) {
oldURL.remove(url);
} else {
addToWhitelist(appground.getPackages(), url);
Log.e("comparedAppground", "addToWhitelist: " + url);
}
}
for (String url : oldURL) {
deleteWhitelistUrl(appground.getPackages(), url);
Log.e("comparedAppground", "deleteWhitelistUrl: " + url);
}
}
}
private List<TTAppground> getOldWhitelist() {
String whiteListString = (String) SPUtils.get(mContext, JGY_APPINSIDE_WHITELIST, "");
Log.e(TAG, "getOldWhitelist: " + whiteListString);
Gson gson = new Gson();
Type listType = new TypeToken<List<TTAppground>>() {
}.getType();
List<TTAppground> whiteList = gson.fromJson(whiteListString, listType);
if (whiteList == null) {
whiteList = new ArrayList<>();
}
return whiteList;
}
private void setWhiteList(List<TTAppground> appgrounds) {
String data = new Gson().toJson(appgrounds);
SPUtils.put(mContext, JGY_APPINSIDE_WHITELIST, data);
}
/**
* @param pkg 开启app白名单
*/
synchronized private void addPackage(String pkg) {
Log.e(TAG, "addPackage: " + pkg);
Intent intent26 = new Intent();
intent26.setAction("qch_app_inside_website");
intent26.putExtra("WEBURLforbidapp", pkg);
intent26.setPackage("com.android.settings");
mContext.sendBroadcast(intent26);
}
/**
* @param pkg
* @param urls 添加app白名单
*/
synchronized private void addToWhitelist(String pkg, String urls) {
if (TextUtils.isEmpty(urls.trim())) {
Log.e(TAG, "addToWhitelist: " + "urls is NULL");
return;
}
HashSet<String> urlSet = new HashSet<>(Arrays.asList(urls.trim().split(",")));
for (String url : urlSet) {
if (TextUtils.isEmpty(url)) {
continue;
}
Intent intent25 = new Intent();
intent25.setAction("qch_app_setAddAppWhitWebUid");
intent25.putExtra("AddAppWhitWebUidPackage", pkg);
intent25.putExtra("AddAppWhitWebUid", url);
intent25.setPackage("com.android.settings");
mContext.sendBroadcast(intent25);
}
}
/**
* @param pkg
* @param urls 删除某个app 内某个白名单
*/
synchronized private void deleteWhitelistUrl(String pkg, String urls) {
if (TextUtils.isEmpty(urls.trim())) {
Log.e(TAG, "addToWhitelist: " + "urls is NULL");
return;
}
HashSet<String> urlSet = new HashSet<>(Arrays.asList(urls.trim().split(",")));
for (String url : urlSet) {
if (TextUtils.isEmpty(url)) {
continue;
}
Intent intent25 = new Intent();
intent25.setAction("qch_app_setAddAppWhitWebUid");
intent25.putExtra("DelAppWhitWebUidPackage", pkg);
intent25.putExtra("DelAppWhitWebUid", url);
intent25.setPackage("com.android.settings");
mContext.sendBroadcast(intent25);
}
}
/**
* @param pkg 取消某个白名单app
*/
// TODO: 2021/6/16 底层未实现功能
synchronized private void disableAppWhitelist(String pkg) {
Log.e(TAG, "disableAppWhitelist: " + pkg);
Intent intent24 = new Intent();
intent24.setAction("qch_app_setDelAppWhitUid");
intent24.putExtra("DelAppWhitUidPackage", pkg);
intent24.setPackage("com.android.settings");
mContext.sendBroadcast(intent24);
}
/**
* @param appgrounds 设置黑名单管控
*/
synchronized private void setBlackApp(List<TTAppground> appgrounds) {
StringBuilder blackList = new StringBuilder(); StringBuilder blackList = new StringBuilder();
StringBuilder packageList = new StringBuilder();//单条管控名单 StringBuilder packageList = new StringBuilder();//单条管控名单
if (appgrounds != null && appgrounds.size() > 0) { for (TTAppground appground : appgrounds) {
for (NewAppground appground : appgrounds) {
if (appground.getType() == 1) {
if (TextUtils.isEmpty(appground.getAddress())) {
return;
} else {
if (whiteList.length() > 0) {
whiteList.append(",");
}
whiteList.append(appground.getAddress());
}
} else {
if (TextUtils.isEmpty(appground.getAddress())) { if (TextUtils.isEmpty(appground.getAddress())) {
if (packageList.length() > 0) { if (packageList.length() > 0) {
packageList.append(","); packageList.append(",");
@@ -395,19 +608,6 @@ public class JGYUtils {
blackList.append(appground.toString()); blackList.append(appground.toString());
} }
} }
}
// TODO: 2021/6/9
if (whiteList.length() > 0) {
Intent intent = new Intent();
intent.setAction("黑名单key");
intent.putExtra("package_name", "应用包名");
intent.setPackage("com.android.settings");
mContext.sendBroadcast(intent);
android.provider.Settings.System.putString(mContext.getContentResolver(), "黑名单网址key", "黑名单网址");
} else {
}
//old //old
if (packageList.length() > 0) { if (packageList.length() > 0) {
//app内所有的网页禁止 //app内所有的网页禁止
@@ -429,34 +629,24 @@ public class JGYUtils {
} else { } else {
sendwebUrl(mContext); sendwebUrl(mContext);
} }
}
} else if (response.code == 400) {
//列表为空的情况
sendAllweb(mContext);
sendwebUrl(mContext);
//ToastUtil.show(msg);
Log.e("setAppinsideWeb", "setAppinsideWeb: " + response.msg);
} }
}
private static void sendAllweb(Context context) { synchronized private static void sendAllweb(Context context) {
Intent intent = new Intent("qch_app_website") Intent intent = new Intent("qch_app_website")
.setPackage("com.android.settings"); .setPackage("com.android.settings");
intent.putExtra("package_name", "Invalid"); intent.putExtra("package_name", "Invalid");
context.sendBroadcast(intent); context.sendBroadcast(intent);
} }
private static void sendwebUrl(Context context) { synchronized private static void sendwebUrl(Context context) {
Intent intent = new Intent("qch_app_inside_website") Intent intent = new Intent("qch_app_inside_website")
.setPackage("com.android.settings"); .setPackage("com.android.settings");
intent.putExtra("websitelist", "Invalid"); intent.putExtra("websitelist", "Invalid");
context.sendBroadcast(intent); context.sendBroadcast(intent);
} }
public void SettingSysData(String data) { synchronized public void SettingSysData(String data) {
if (TextUtils.isEmpty(data)) { if (TextUtils.isEmpty(data)) {
Log.e(TAG, "SettingSysData: " + "data is empty"); Log.e(TAG, "SettingSysData: " + "data is empty");
return; return;