diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d513373..780c00e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -87,6 +87,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:networkSecurityConfig="@xml/network" + android:requestLegacyExternalStorage="true" android:supportsRtl="true" android:theme="@style/AppTheme"> diff --git a/app/src/main/java/com/jiaoguanyi/appstore/activity/MainActivity.java b/app/src/main/java/com/jiaoguanyi/appstore/activity/MainActivity.java index 53fce3f..17ff5a1 100644 --- a/app/src/main/java/com/jiaoguanyi/appstore/activity/MainActivity.java +++ b/app/src/main/java/com/jiaoguanyi/appstore/activity/MainActivity.java @@ -293,8 +293,8 @@ public class MainActivity extends BaseActivity implements MainContact.MainView { } @Override - public void getBrowserListFinished() { - mPresenter.getBrowserBookmarks(); + public void getBrowserListFinished(String whitelist) { + mPresenter.getBrowserBookmarks(whitelist); } @Override diff --git a/app/src/main/java/com/jiaoguanyi/appstore/activity/MainContact.java b/app/src/main/java/com/jiaoguanyi/appstore/activity/MainContact.java index fced0a6..f5668ba 100644 --- a/app/src/main/java/com/jiaoguanyi/appstore/activity/MainContact.java +++ b/app/src/main/java/com/jiaoguanyi/appstore/activity/MainContact.java @@ -45,7 +45,7 @@ public class MainContact { //获取设备批次结束 void getForceDownloadFinished(); //获取强制下载apk结束 - void getBrowserListFinished(); + void getBrowserListFinished(String whitelist); //获取浏览器上网管控设置结束 void getBrowserBookmarksFinished(); //获取浏览器书签设置管控结束 @@ -106,7 +106,7 @@ public class MainContact { //获取强制下载apk void getBrowserList(); //获取浏览器上网管控设置 - void getBrowserBookmarks(); + void getBrowserBookmarks(String whitelist); //获取浏览器书签设置管控 void getDesktopIcon(); //获取应用图标桌面可见性管控 diff --git a/app/src/main/java/com/jiaoguanyi/appstore/activity/MainPresenter.java b/app/src/main/java/com/jiaoguanyi/appstore/activity/MainPresenter.java index 461137b..501b9b3 100644 --- a/app/src/main/java/com/jiaoguanyi/appstore/activity/MainPresenter.java +++ b/app/src/main/java/com/jiaoguanyi/appstore/activity/MainPresenter.java @@ -29,6 +29,7 @@ import com.jiaoguanyi.appstore.bean.Desktop; import com.jiaoguanyi.appstore.bean.ForceDownloadBean; import com.jiaoguanyi.appstore.bean.LogoImg; import com.jiaoguanyi.appstore.bean.NetAndLaunchBean; +import com.jiaoguanyi.appstore.bean.NewAppground; import com.jiaoguanyi.appstore.bean.StudentsInfo; import com.jiaoguanyi.appstore.jpush.TagAliasOperatorHelper; import com.jiaoguanyi.appstore.manager.NetInterfaceManager; @@ -716,7 +717,7 @@ public class MainPresenter implements MainContact.Presenter { Log.e("getForceDownload", "isDownloading=" + BaseApplication.getInstance().isDownloading()); BaseApplication.getInstance().checkIsDownloading(); if (!BaseApplication.getInstance().isDownloading()) { - Aria.download(this).removeAllTask(true); +// Aria.download(this).removeAllTask(true); JGYUtils.getInstance().forceDownload(forceDownloadBean.getData()); } else { Aria.download(this).resumeAllTask(); @@ -762,7 +763,12 @@ public class MainPresenter implements MainContact.Presenter { Log.e("getBrowserList", "onNext: "); if (browserDataBaseResponse.code == 200) { String white = browserDataBaseResponse.data.getWhite(); + mView.getBrowserListFinished(white); if (!TextUtils.isEmpty(white)) { + String homePage = Settings.System.getString(mContext.getContentResolver(), "homepagURL"); + if (!white.contains(homePage) && !TextUtils.isEmpty(homePage)) { + white += "," + homePage; + } boolean whiteList = Settings.System.putString(mContext.getContentResolver(), "DeselectBrowserArray", white); Log.e("getBrowserList", "setBrowserList white: " + white + ":" + whiteList); } else { @@ -775,6 +781,8 @@ public class MainPresenter implements MainContact.Presenter { } else { Settings.System.putString(mContext.getContentResolver(), "qch_webblack_url", " "); } + } else { + mView.getBrowserListFinished(""); } } @@ -787,13 +795,13 @@ public class MainPresenter implements MainContact.Presenter { @Override public void onComplete() { Log.e("getBrowserList", "onComplete: "); - mView.getBrowserListFinished(); } }); } @Override - public void getBrowserBookmarks() { + public void getBrowserBookmarks(String whitelist) { + List whiteLists = Arrays.asList(whitelist.split(",")); NetInterfaceManager.getInstance() .getBrowserBookmarksObservable() .observeOn(Schedulers.io()) @@ -806,15 +814,24 @@ public class MainPresenter implements MainContact.Presenter { @Override public void onNext(@NonNull BaseResponse browserBookmarksBaseResponse) { Log.e("getBrowserBookmarks", "onNext: "); + String whiteString = whitelist; if (browserBookmarksBaseResponse.code == 200) { //主页 String homepagURL = browserBookmarksBaseResponse.data.getHomepage(); + boolean home = Settings.System.putString(mContext.getContentResolver(), "homepagURL", homepagURL); + Log.e("getBrowserBookmarks", "onNext: homepagURL: save homepagURL = " + home); + if (whiteLists.size() <= 0 || !whiteLists.contains(homepagURL)) { + whiteString += "," + homepagURL; + boolean white = Settings.System.putString(mContext.getContentResolver(), "DeselectBrowserArray", whiteString); + Log.e("getBrowserBookmarks", "onNext: homepagURL: add to whiteList = " + whiteString + "write: " + white); + } + Intent homepag = new Intent("qch_app_brower_homepage"); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { homepag.setPackage("com.android.settings") .setPackage("com.android.browser"); } - if (homepagURL != null && !homepagURL.equals("")) { + if (!TextUtils.isEmpty(homepagURL)) { homepag.putExtra("homepage", homepagURL); } else { homepag.putExtra("homepage", "Invalid"); @@ -828,7 +845,7 @@ public class MainPresenter implements MainContact.Presenter { websiteBookMark.setPackage("com.android.settings") .setPackage("com.android.browser"); } - if (labelpage != null && !labelpage.equals("")) { + if (!TextUtils.isEmpty(labelpage)) { websiteBookMark.putExtra("websiteBookMark", labelpage); } else { websiteBookMark.putExtra("websiteBookMark", "Invalid"); @@ -842,6 +859,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) { intent2.setPackage("com.android.settings") @@ -1002,6 +1020,15 @@ public class MainPresenter implements MainContact.Presenter { @Override public void setAppinsideWeb() { + String channel_value = JGYUtils.getInstance().getStringMetaData(); + if ("official".equals(channel_value)) { + getAppinsideWeb(); + } else { + getNewAppinsideWeb(); + } + } + + private void getAppinsideWeb() { NetInterfaceManager.getInstance() .getAppinsideWebObservable() .observeOn(Schedulers.io()) @@ -1031,6 +1058,35 @@ public class MainPresenter implements MainContact.Presenter { }); } + private void getNewAppinsideWeb() { + NetInterfaceManager.getInstance() + .getNewAppinsideWebObservable() + .observeOn(Schedulers.io()) + .subscribe(new Observer>>() { + @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: "); + onComplete(); + } + + @Override + public void onComplete() { + Log.e("getNewAppinsideWeb", "onComplete: "); + } + }); + } + @Override public void setSystemSetting() { NetInterfaceManager.getInstance() @@ -1123,7 +1179,8 @@ public class MainPresenter implements MainContact.Presenter { @Override public void getScreenLockState() { String channel_value = JGYUtils.getInstance().getStringMetaData(); - if ("official".equals(channel_value)) { + int locked = Settings.System.getInt(mContext.getContentResolver(), "qch_unlock_ipad", 1); + if ("official".equals(channel_value) || locked == 1) { mView.setScreenLockStateFinished(false, ""); return; } @@ -1185,9 +1242,14 @@ public class MainPresenter implements MainContact.Presenter { Log.e("getDefaultDesktop", "onNext: "); try { JSONObject jsonObject = JSONObject.parseObject(responseBody.string()); - JSONObject data = jsonObject.getJSONObject("data"); - JGYUtils.getInstance().installDesktop(data); - Log.e("getDefaultDesktop", "onNext: " + data.toJSONString()); + int code = jsonObject.getInteger("code"); + if (code == 200) { + JSONObject data = jsonObject.getJSONObject("data"); + JGYUtils.getInstance().installDesktop(data); + } else { + Log.e("getDefaultDesktop", "onNext: " + jsonObject.toJSONString()); + } + } catch (IOException e) { e.printStackTrace(); Log.e("getDefaultDesktop", "onNext: IOException: " + e.getMessage()); diff --git a/app/src/main/java/com/jiaoguanyi/appstore/activity/SplashActivity.java b/app/src/main/java/com/jiaoguanyi/appstore/activity/SplashActivity.java index 2ad432c..6e87e0c 100644 --- a/app/src/main/java/com/jiaoguanyi/appstore/activity/SplashActivity.java +++ b/app/src/main/java/com/jiaoguanyi/appstore/activity/SplashActivity.java @@ -3,10 +3,14 @@ package com.jiaoguanyi.appstore.activity; import android.app.StatusBarManager; import android.content.Context; import android.content.Intent; +import android.graphics.Bitmap; +import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.util.Log; +import android.webkit.WebView; +import android.webkit.WebViewClient; import androidx.appcompat.app.AppCompatActivity; @@ -17,12 +21,16 @@ import com.jiaoguanyi.appstore.utils.Utils; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class SplashActivity extends AppCompatActivity { + private static String TAG = SplashActivity.class.getSimpleName(); @Override protected void onCreate(Bundle savedInstanceState) { @@ -42,28 +50,112 @@ public class SplashActivity extends AppCompatActivity { } private void DebugTest() { - Utils.getHardware(this); +// Utils.getHardware(this); + hookWebView(); + setWebView(); + } - File file = new File(Environment.getExternalStorageDirectory() + File.separator + "bootanimation.zip"); - String path0 = "/data/local/qchmedia/bootanimation.zip"; - if (file.exists()) { - File file1 = new File(path0); - if (!file1.exists()) { - file.mkdirs(); - try { - file.createNewFile(); - } catch (IOException e) { - e.printStackTrace(); - Log.e("bootanimation", e.getMessage()); + private void bootanimotion() { + // File file = new File(Environment.getExternalStorageDirectory() + File.separator + "bootanimation.zip"); +// String path0 = "/data/local/qchmedia/bootanimation.zip"; +// if (file.exists()) { +// File file1 = new File(path0); +// if (!file1.exists()) { +// file.mkdirs(); +// try { +// file.createNewFile(); +// } catch (IOException e) { +// e.printStackTrace(); +// Log.e("bootanimation", e.getMessage()); +// } +// } +// Log.e("bootanimation", "SD卡路径存在"); +// try { +// Path path = Paths.get(file.getAbsolutePath()); +// Files.copy(path, new FileOutputStream(path0)); +// } catch (Exception e) { +// Log.e("bootanimation", e.getMessage()); +// } +// } + } + + static final String url = "www.baidu.com"; + + private void setWebView() { + WebView webView = new WebView(this); + webView.loadUrl(url); + webView.getSettings().setJavaScriptEnabled(true); + webView.setWebViewClient(new WebViewClient() { + //页面加载开始 + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + super.onPageStarted(view, url, favicon); + } + + //页面加载完成 + @Override + public void onPageFinished(WebView view, String url) { + super.onPageFinished(view, url); + String realUrl = url; +//这个realUrl即为重定向之后的地址 + Log.e(TAG, "onPageFinished: " + realUrl); + } + }); + } + public static 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()); } } - Log.e("bootanimation", "SD卡路径存在"); - try { - Path path = Paths.get(file.getAbsolutePath()); - Files.copy(path, new FileOutputStream(path0)); - } catch (Exception e) { - Log.e("bootanimation", e.getMessage()); + + 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/jiaoguanyi/appstore/bean/NewAppground.java b/app/src/main/java/com/jiaoguanyi/appstore/bean/NewAppground.java new file mode 100644 index 0000000..ec24b8c --- /dev/null +++ b/app/src/main/java/com/jiaoguanyi/appstore/bean/NewAppground.java @@ -0,0 +1,34 @@ +package com.jiaoguanyi.appstore.bean; + +import java.io.Serializable; + +public class NewAppground implements Serializable { + private static final long serialVersionUID = -2071117846816082338L; + private String packages; + private String address; + private String type; + + public String getPackages() { + return packages; + } + + public void setPackages(String packages) { + this.packages = packages; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } +} diff --git a/app/src/main/java/com/jiaoguanyi/appstore/manager/NetInterfaceManager.java b/app/src/main/java/com/jiaoguanyi/appstore/manager/NetInterfaceManager.java index 0606b10..828d983 100644 --- a/app/src/main/java/com/jiaoguanyi/appstore/manager/NetInterfaceManager.java +++ b/app/src/main/java/com/jiaoguanyi/appstore/manager/NetInterfaceManager.java @@ -12,6 +12,7 @@ import com.jiaoguanyi.appstore.bean.Desktop; import com.jiaoguanyi.appstore.bean.ForceDownloadBean; import com.jiaoguanyi.appstore.bean.LogoImg; import com.jiaoguanyi.appstore.bean.NetAndLaunchBean; +import com.jiaoguanyi.appstore.bean.NewAppground; import com.jiaoguanyi.appstore.bean.StudentsInfo; import com.jiaoguanyi.appstore.network.api.AppLimitApi; import com.jiaoguanyi.appstore.network.api.BrankPicApi; @@ -37,6 +38,7 @@ import com.jiaoguanyi.appstore.network.api.newapi.GetLockStateApi; import com.jiaoguanyi.appstore.network.api.newapi.JpushTagsApi; import com.jiaoguanyi.appstore.network.api.newapi.LogoImgApi; import com.jiaoguanyi.appstore.network.api.newapi.MACAddressApi; +import com.jiaoguanyi.appstore.network.api.newapi.NewAppinsideWebApi; import com.jiaoguanyi.appstore.network.api.newapi.ScreenLockStateApi; import com.jiaoguanyi.appstore.network.api.newapi.SnTimeControl; import com.jiaoguanyi.appstore.network.api.newapi.StudentsInfosApi; @@ -224,6 +226,14 @@ public class NetInterfaceManager { .observeOn(AndroidSchedulers.mainThread()); } + public Observable>> getNewAppinsideWebObservable() { + return mRetrofit + .create(NewAppinsideWebApi.class) + .getAppinsideWeb(NetInterfaceManager.HTTP_KEY, Utils.getSerial()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()); + } + public Observable getSystemSettingObservable() { return mRetrofit .create(SystemSettingApi.class) diff --git a/app/src/main/java/com/jiaoguanyi/appstore/network/HTTPInterface.java b/app/src/main/java/com/jiaoguanyi/appstore/network/HTTPInterface.java index 233f62b..f7cb81a 100644 --- a/app/src/main/java/com/jiaoguanyi/appstore/network/HTTPInterface.java +++ b/app/src/main/java/com/jiaoguanyi/appstore/network/HTTPInterface.java @@ -400,77 +400,6 @@ public class HTTPInterface { }); } - synchronized public static void setHomepagtag(final Context context) { - //7.0setPackage不加没有问题,.setPackage("com.android.settings"),10.0需要加上,待底层修改后 - OkGo.post(URLAddress.SET_HOMEPAG_TAG) - .params("key", NetInterfaceManager.HTTP_KEY) - .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"); - JSONObject jsondata = JSON.parseObject(data); - //主页 - String homepagURL = jsondata.getString("homepage"); - Intent homepag = new Intent("qch_app_brower_homepage"); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - homepag.setPackage("com.android.settings") - .setPackage("com.android.browser"); - } - if (homepagURL != null && !homepagURL.equals("")) { - homepag.putExtra("homepage", homepagURL); - } else { - homepag.putExtra("homepage", "Invalid"); - } - context.sendBroadcast(homepag); - - //书签 - String labelpage = jsondata.getString("labelpage"); - Intent websiteBookMark = new Intent("qch_app_brower_website"); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - websiteBookMark.setPackage("com.android.settings") - .setPackage("com.android.browser"); - } - if (labelpage != null && !labelpage.equals("")) { - websiteBookMark.putExtra("websiteBookMark", labelpage); - } else { - websiteBookMark.putExtra("websiteBookMark", "Invalid"); - } - context.sendBroadcast(websiteBookMark); - } else { - Intent intent1 = new Intent("qch_app_brower_homepage"); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - intent1.setPackage("com.android.settings") - .setPackage("com.android.browser"); - } - intent1.putExtra("homepage", "Invalid"); - context.sendBroadcast(intent1); - Intent intent2 = new Intent("qch_app_brower_website"); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - intent2.setPackage("com.android.settings") - .setPackage("com.android.browser"); - } - intent2.putExtra("websiteBookMark", "Invalid"); - context.sendBroadcast(intent2); - } -// } catch (Exception e) { -// Log.e("fht", "setHomepagtag" + e.getMessage()); -//// ToastUtil.show("数据错误"); -// } - } - - @Override - public void onError(Call call, Response response, Exception e) { - super.onError(call, response, e); -// ToastUtil.show("网络连接失败"); - } - }); - } synchronized public static void setAppinsideWeb(final Context context) { OkGo.post(URLAddress.SET_APPINSIDEWEB) @@ -571,14 +500,18 @@ public class HTTPInterface { if (code == 200) { JSONObject data = JSON.parseObject(jsonObject.getString("data")); String white = data.getString("white"); - if (white != null && !white.equals("")) { + String homePage = Settings.System.getString(context.getContentResolver(), "homepagURL"); + if (!TextUtils.isEmpty(white)) { + if (!white.contains(homePage) && !TextUtils.isEmpty(homePage)) { + white += "," + homePage; + } boolean whiteList = Settings.System.putString(context.getContentResolver(), "DeselectBrowserArray", white); Log.e("SystemSetting", "setBrowserList----white-----" + whiteList + ":" + white); } else { Settings.System.putString(context.getContentResolver(), "DeselectBrowserArray", " "); } String black = data.getString("black"); - if (black != null && !black.equals("")) { + if (!TextUtils.isEmpty(black)) { boolean blackList = Settings.System.putString(context.getContentResolver(), "qch_webblack_url", black); Log.e("SystemSetting", "setBrowserList----black-----" + blackList + ":" + black); } else { @@ -599,6 +532,88 @@ public class HTTPInterface { }); } + synchronized public static void setHomepagtag(final Context context) { + //7.0setPackage不加没有问题,.setPackage("com.android.settings"),10.0需要加上,待底层修改后 + OkGo.post(URLAddress.SET_HOMEPAG_TAG) + .params("key", NetInterfaceManager.HTTP_KEY) + .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"); + JSONObject jsondata = JSON.parseObject(data); + //主页 + String homepagURL = jsondata.getString("homepage"); + boolean home = Settings.System.putString(context.getContentResolver(), "homepagURL", homepagURL); + String DeselectBrowserArray = Settings.System.getString(context.getContentResolver(), "DeselectBrowserArray"); + Log.e("setHomepagtag", "execute: DeselectBrowserArray: = " + DeselectBrowserArray); + if (!DeselectBrowserArray.contains(homepagURL)) { + DeselectBrowserArray += "," + homepagURL; + boolean white = Settings.System.putString(context.getContentResolver(), "DeselectBrowserArray", DeselectBrowserArray); + Log.e("setHomepagtag", "execute: homepagURL: add to whiteList = " + DeselectBrowserArray + "write: " + white); + } + Intent homepag = new Intent("qch_app_brower_homepage"); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + homepag.setPackage("com.android.settings") + .setPackage("com.android.browser"); + } + if (!TextUtils.isEmpty(homepagURL)) { + homepag.putExtra("homepage", homepagURL); + } else { + homepag.putExtra("homepage", "Invalid"); + } + context.sendBroadcast(homepag); + + //书签 + String labelpage = jsondata.getString("labelpage"); + Intent websiteBookMark = new Intent("qch_app_brower_website"); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + websiteBookMark.setPackage("com.android.settings") + .setPackage("com.android.browser"); + } + if (!TextUtils.isEmpty(labelpage)) { + websiteBookMark.putExtra("websiteBookMark", labelpage); + } else { + websiteBookMark.putExtra("websiteBookMark", "Invalid"); + } + context.sendBroadcast(websiteBookMark); + } else { + Intent intent1 = new Intent("qch_app_brower_homepage"); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + intent1.setPackage("com.android.settings") + .setPackage("com.android.browser"); + } + intent1.putExtra("homepage", "Invalid"); + context.sendBroadcast(intent1); + Settings.System.putString(context.getContentResolver(), "homepagURL", ""); + Intent intent2 = new Intent("qch_app_brower_website"); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + intent2.setPackage("com.android.settings") + .setPackage("com.android.browser"); + } + intent2.putExtra("websiteBookMark", "Invalid"); + context.sendBroadcast(intent2); + } +// } catch (Exception e) { +// Log.e("fht", "setHomepagtag" + e.getMessage()); +//// ToastUtil.show("数据错误"); +// } + } + + @Override + public void onError(Call call, Response response, Exception e) { + super.onError(call, response, e); +// ToastUtil.show("网络连接失败"); + } + }); + } + + public static void setHideDesktopIcon(final Context context) { OkGo.post(URLAddress.GET_HIDE_DESKTOPICON) .params("key", NetInterfaceManager.HTTP_KEY) diff --git a/app/src/main/java/com/jiaoguanyi/appstore/network/api/newapi/NewAppinsideWebApi.java b/app/src/main/java/com/jiaoguanyi/appstore/network/api/newapi/NewAppinsideWebApi.java new file mode 100644 index 0000000..2f23f04 --- /dev/null +++ b/app/src/main/java/com/jiaoguanyi/appstore/network/api/newapi/NewAppinsideWebApi.java @@ -0,0 +1,22 @@ +package com.jiaoguanyi.appstore.network.api.newapi; + + +import com.jiaoguanyi.appstore.bean.BaseResponse; +import com.jiaoguanyi.appstore.bean.NewAppground; +import com.jiaoguanyi.appstore.network.URLAddress; + +import java.util.List; + +import io.reactivex.Observable; +import retrofit2.http.Field; +import retrofit2.http.FormUrlEncoded; +import retrofit2.http.POST; + +public interface NewAppinsideWebApi { + @FormUrlEncoded + @POST(URLAddress.SET_APPINSIDEWEB) + Observable>> getAppinsideWeb( + @Field("key") String key, + @Field("sn") String sn + ); +} diff --git a/app/src/main/java/com/jiaoguanyi/appstore/receiver/MyJPushReceiver.java b/app/src/main/java/com/jiaoguanyi/appstore/receiver/MyJPushReceiver.java index 26246b9..ddde01d 100644 --- a/app/src/main/java/com/jiaoguanyi/appstore/receiver/MyJPushReceiver.java +++ b/app/src/main/java/com/jiaoguanyi/appstore/receiver/MyJPushReceiver.java @@ -21,6 +21,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.jiaoguanyi.appstore.utils.JGYUtils; import com.lzy.okgo.OkGo; import com.lzy.okgo.callback.StringCallback; import com.jiaoguanyi.appstore.base.BaseApplication; @@ -116,6 +117,8 @@ public class MyJPushReceiver extends BroadcastReceiver { private final String TOP_APP = "28";//app霸屏 + private final String LOGO_IMG = "29";//开机动画 + private Context mContext; @@ -337,6 +340,10 @@ public class MyJPushReceiver extends BroadcastReceiver { case TOP_APP: getTopApp(context, extras); break; + case LOGO_IMG: + setBootanimation(context, extras); + Log.e(TAG, "processCustomMessage: " + extras); + break; } } @@ -1325,7 +1332,24 @@ 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; + } SPUtils.put(context, ForegroundAppUtil.TOPAPP_KEY, packageName); ForegroundAppUtil.openTopApp(context); } + + private void setBootanimation(Context context, String extras) { + com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(extras); + int type = jsonObject.getInteger("type"); + if (type == 1) { + String file_url = jsonObject.getString("file_url"); + String file_md5 = jsonObject.getString("file_md5"); + JGYUtils.getInstance().checkBootFile(file_url, file_md5); + } else { + JGYUtils.getInstance().removeBootanimation(); + + } + + } } diff --git a/app/src/main/java/com/jiaoguanyi/appstore/server/GuardService.java b/app/src/main/java/com/jiaoguanyi/appstore/server/GuardService.java index 8b49a05..69e9349 100644 --- a/app/src/main/java/com/jiaoguanyi/appstore/server/GuardService.java +++ b/app/src/main/java/com/jiaoguanyi/appstore/server/GuardService.java @@ -277,7 +277,7 @@ public class GuardService extends Service { JSONObject jsonObject = JSON.parseObject(task.getExtendField()); String app_name = jsonObject.getString("app_name"); String app_package = jsonObject.getString("app_package"); - Log.e("aria", "正在下载---:" + task.getPercent() + ":" + task.getExtendField()); + Log.e("aria", "正在下载:" + task.getPercent() + ":" + task.getExtendField()); ToastUtil.show("正在下载:" + app_name + "-" + task.getPercent() + "%" + "\t" + Formatter.formatFileSize(GuardService.this, task.getSpeed()) + "/s"); } @@ -343,6 +343,7 @@ public class GuardService extends Service { Log.e("aria", "isDownloading=" + BaseApplication.getInstance().isDownloading()); } } else if (filepath.endsWith("zip")) { + Log.e("aria", "下载完成:" + task.getPercent() + ":" + task.getExtendField()); JGYUtils.getInstance().setBootanimation(task.getFilePath()); } } diff --git a/app/src/main/java/com/jiaoguanyi/appstore/server/MainService.java b/app/src/main/java/com/jiaoguanyi/appstore/server/MainService.java index 3575189..2e77114 100644 --- a/app/src/main/java/com/jiaoguanyi/appstore/server/MainService.java +++ b/app/src/main/java/com/jiaoguanyi/appstore/server/MainService.java @@ -70,13 +70,13 @@ public class MainService extends Service implements MainContact.MainView { @Override public int onStartCommand(Intent intent, int flags, int startId) { - if (MainActivity.isForeground){ + if (MainActivity.isForeground) { Log.e(TAG, "onStartCommand: MainActivity: " + MainActivity.isForeground); - }else { - if (((SystemClock.elapsedRealtime() - startCommandTime) < 60000) ){ + } else { + if (((SystemClock.elapsedRealtime() - startCommandTime) < 60000) && startCommandTime != 0) { Log.e(TAG, "onStartCommand: " + "启动时间过短"); //一分钟内防止多次调用 - }else { + } else { mPresenter.getFirstConnect(); mPresenter.getLockedState(); startCommandTime = runningTime = SystemClock.elapsedRealtime(); @@ -391,8 +391,8 @@ public class MainService extends Service implements MainContact.MainView { } @Override - public void getBrowserListFinished() { - mPresenter.getBrowserBookmarks(); + public void getBrowserListFinished(String whitelist) { + mPresenter.getBrowserBookmarks(whitelist); } @Override diff --git a/app/src/main/java/com/jiaoguanyi/appstore/utils/JGYUtils.java b/app/src/main/java/com/jiaoguanyi/appstore/utils/JGYUtils.java index a7925d8..1347995 100644 --- a/app/src/main/java/com/jiaoguanyi/appstore/utils/JGYUtils.java +++ b/app/src/main/java/com/jiaoguanyi/appstore/utils/JGYUtils.java @@ -27,6 +27,7 @@ import com.jiaoguanyi.appstore.bean.BaseResponse; import com.jiaoguanyi.appstore.bean.ForceDownloadData; import com.jiaoguanyi.appstore.bean.NetAndLaunchBean; import com.jiaoguanyi.appstore.bean.NetAndLaunchData; +import com.jiaoguanyi.appstore.bean.NewAppground; import com.jiaoguanyi.appstore.comm.CommonDatas; import org.w3c.dom.Text; @@ -270,7 +271,7 @@ public class JGYUtils { String strings = ""; String packageList = "";//单条管控名单 for (Appground appground : appgrounds) { - if (appground.getAddress().equals("")) { + if (TextUtils.isEmpty(appground.getAddress())) { packageList += appground.getPackages() + ","; } else { strings += appground.toString() + ";"; @@ -310,6 +311,54 @@ public class JGYUtils { } } + public void setNewAppinsideWeb(BaseResponse> response){ + if (response.code == 200) { + List appgrounds = response.data; + if (appgrounds != null && appgrounds.size() > 0) { + String strings = ""; + String packageList = "";//单条管控名单 + for (NewAppground appground : appgrounds) { + if (TextUtils.isEmpty(appground.getAddress())) { + packageList += appground.getPackages() + ","; + } else { + strings += appground.toString() + ";"; + } + } + 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); + mContext.sendBroadcast(qch_app_website); + } else { + sendAllweb(mContext); + } + 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); + mContext.sendBroadcast(intent); + } else { + 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) { Intent intent = new Intent("qch_app_website") .setPackage("com.android.settings"); @@ -585,6 +634,8 @@ public class JGYUtils { public void checkBootFile(String url, String MD5) { String urlFileName = Utils.getFileNamefromURL(url); File bootFile = new File(PathUtils.getExternalDownloadsPath() + File.separator + "jgy" + File.separator + urlFileName); + Log.e(TAG, "checkBootFile: bootFile file path=" + bootFile.getAbsolutePath()); + Log.e(TAG, "checkBootFile: bootFile exists=" + bootFile.exists() + " isFile=" + bootFile.isFile()); if (bootFile.exists() && bootFile.isFile()) { String oldMd5 = FileUtils.getFileMD5ToString(bootFile); if (!TextUtils.isEmpty(oldMd5) && oldMd5.equalsIgnoreCase(MD5)) { @@ -598,14 +649,25 @@ public class JGYUtils { } else { JSONObject jsonObject = new JSONObject(); jsonObject.put("MD5", MD5); + jsonObject.put("app_name", urlFileName); Utils.ariaDownload(mContext, url, jsonObject); } } private static final String BOOTANIMATION_PATH = "/data/local/qchmedia/bootanimation.zip"; + @SuppressLint("NewApi") public void setBootanimation(String filePath) { File systemFile = new File(BOOTANIMATION_PATH); + if (!systemFile.exists()) { + systemFile.mkdirs(); + try { + systemFile.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + Log.e("setBootanimation: ", "createNewFile: " + e.getMessage()); + } + } File newFile = new File(filePath); if (systemFile.exists() && systemFile.isFile()) { String systemMD5 = FileUtils.getFileMD5ToString(systemFile); @@ -616,7 +678,9 @@ public class JGYUtils { Path path = Paths.get(newFile.getAbsolutePath()); try { Files.copy(path, new FileOutputStream(systemFile)); + Log.e(TAG, "setBootanimation: 设置新开机动画"); } catch (IOException e) { + Log.e(TAG, "setBootanimation: IOException: " + e.getMessage()); e.printStackTrace(); } } @@ -626,8 +690,20 @@ public class JGYUtils { Files.copy(path, new FileOutputStream(systemFile)); Log.e(TAG, "setBootanimation: 设置新开机动画"); } catch (IOException e) { + Log.e(TAG, "setBootanimation: IOException: " + e.getMessage()); e.printStackTrace(); } } } + + public void removeBootanimation() { + File systemFile = new File(BOOTANIMATION_PATH); + if (systemFile.exists()) { + if (systemFile.delete()) { + Log.e(TAG, "removeBootanimation: delete: " + "ture"); + }else { + Log.e(TAG, "removeBootanimation: delete: " + "false"); + } + } + } }