diff --git a/app/build.gradle b/app/build.gradle
index c7d9e90..f5c9295 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -17,8 +17,8 @@ android {
minSdkVersion 23
targetSdkVersion 29
- versionCode 22
- versionName "1.2.1"
+ versionCode 23
+ versionName "1.2.2"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3a134a2..3f7b8b6 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -285,11 +285,14 @@
android:exported="true"
android:launchMode="standard"
android:screenOrientation="sensorLandscape"
- android:theme="@style/ActivityTheme2">
-
-
-
-
+ android:theme="@style/ActivityTheme2" />
+
{
+ private static final String TAG = "DownloadActivity";
+
+ private AppInfoAdapter mAppInfoAdapter;
+ private List mAppInfos;
+
+ @Override
+ protected int getLayoutId() {
+ return R.layout.activity_other_app;
+ }
+
+ @Override
+ protected void initDataBinding() {
+ mViewModel.setCtx(this);
+ mViewModel.setLifecycle(getLifecycleSubject());
+ mViewModel.setVDBinding(mViewDataBinding);
+ mViewDataBinding.setClick(new BtnClick());
+ }
+
+ @Override
+ protected void initView() {
+ mAppInfoAdapter = new AppInfoAdapter();
+ GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 4);
+ mViewDataBinding.rvContent.setLayoutManager(gridLayoutManager);
+ mViewDataBinding.rvContent.setAdapter(mAppInfoAdapter);
+
+ registerAppChangedReceiver();
+ }
+
+ @Override
+ protected void initData() {
+ mViewModel.mListMutableLiveData.observe(this, new Observer>() {
+ @Override
+ public void onChanged(List appInfos) {
+ mAppInfos = appInfos;
+ mAppInfoAdapter.setAppInfos(appInfos);
+ if (appInfos == null || appInfos.isEmpty()) {
+ mViewDataBinding.clContent.setVisibility(View.GONE);
+ mViewDataBinding.llNodata.setVisibility(View.VISIBLE);
+ } else {
+ mViewDataBinding.clContent.setVisibility(View.VISIBLE);
+ mViewDataBinding.llNodata.setVisibility(View.GONE);
+ }
+ }
+ });
+ mViewModel.getAdminApp();
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ if (mAppChangedReceiver != null) {
+ unregisterReceiver(mAppChangedReceiver);
+ }
+ }
+
+ private AppChangedReceiver mAppChangedReceiver;
+
+ private void registerAppChangedReceiver() {
+ if (mAppChangedReceiver == null) {
+ mAppChangedReceiver = new AppChangedReceiver();
+ }
+ IntentFilter filter = new IntentFilter();
+ filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
+ filter.addAction(Intent.ACTION_PACKAGE_ADDED);
+ filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
+ filter.addAction(Intent.ACTION_PACKAGE_REPLACED);
+ filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
+ filter.addDataScheme("package");
+ registerReceiver(mAppChangedReceiver, filter);
+ }
+
+ class AppChangedReceiver extends BroadcastReceiver {
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ Log.e("AppChangedReceiver", "onReceive: " + action);
+ if (TextUtils.isEmpty(action)) {
+ return;
+ }
+ mAppInfoAdapter.notifyDataSetChanged();
+ }
+ }
+
+ public class BtnClick {
+ public void exit(View view) {
+ finish();
+ }
+
+ public void downloadApp(View view) {
+ if (mAppInfos == null || mAppInfos.isEmpty()) {
+ Toaster.show("没有要下载的应用");
+ } else {
+ if (ActivationUtil.getInstance().isActivation()) {
+ mAppInfos.forEach(new Consumer() {
+ @Override
+ public void accept(AppInfo appInfo) {
+ if (appInfo.getIs_must_components_down() == 1) {
+ if (!ApkUtils.isAvailable(OtherAppActivity.this, appInfo.getApp_package())) {
+ FileUtils.ariaDownload(OtherAppActivity.this, appInfo.getApp_url(), appInfo);
+ }
+ }
+ }
+ });
+ }
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/xwad/os/activity/app/OtherAppViewModel.java b/app/src/main/java/com/xwad/os/activity/app/OtherAppViewModel.java
new file mode 100644
index 0000000..49a705e
--- /dev/null
+++ b/app/src/main/java/com/xwad/os/activity/app/OtherAppViewModel.java
@@ -0,0 +1,74 @@
+package com.xwad.os.activity.app;
+
+import android.util.Log;
+
+import androidx.lifecycle.MutableLiveData;
+
+import com.trello.rxlifecycle4.RxLifecycle;
+import com.trello.rxlifecycle4.android.ActivityEvent;
+import com.xwad.os.base.mvvm.BaseViewModel;
+import com.xwad.os.bean.AppInfo;
+import com.xwad.os.bean.BaseResponse;
+import com.xwad.os.databinding.ActivityOtherAppBinding;
+import com.xwad.os.network.NetInterfaceManager;
+
+import java.util.List;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+
+import io.reactivex.rxjava3.annotations.NonNull;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+
+public class OtherAppViewModel extends BaseViewModel {
+
+ @Override
+ public ActivityOtherAppBinding getVDBinding() {
+ return binding;
+ }
+
+ @Override
+ public void onDestroy() {
+
+ }
+
+ public MutableLiveData> mListMutableLiveData = new MutableLiveData<>();
+
+ public void getAdminApp() {
+ NetInterfaceManager.getInstance().get365AdminAppObservable()
+ .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
+ .subscribe(new Observer>>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("getAdminApp", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse> listBaseResponse) {
+ Log.e("getAdminApp", "onNext: " + listBaseResponse);
+ if (listBaseResponse.code == 200) {
+ List appInfoList = listBaseResponse.data;
+ List forceAppInfoList = appInfoList.stream()
+ .filter(new Predicate() {
+ @Override
+ public boolean test(AppInfo appInfo) {
+ return appInfo.getIs_must_components() == 0;
+ }
+ }).collect(Collectors.toList());
+ mListMutableLiveData.setValue(forceAppInfoList);
+ }
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("getAdminApp", "onError: " + e.getMessage());
+ onComplete();
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("getAdminApp", "onComplete: ");
+ }
+ });
+ }
+}
diff --git a/app/src/main/java/com/xwad/os/activity/download/DownloadActivity.java b/app/src/main/java/com/xwad/os/activity/download/DownloadActivity.java
index 48b5caf..0079433 100644
--- a/app/src/main/java/com/xwad/os/activity/download/DownloadActivity.java
+++ b/app/src/main/java/com/xwad/os/activity/download/DownloadActivity.java
@@ -11,7 +11,9 @@ import android.view.View;
import androidx.lifecycle.Observer;
import androidx.recyclerview.widget.GridLayoutManager;
+import com.hjq.toast.Toaster;
import com.xwad.os.R;
+import com.xwad.os.activity.app.OtherAppActivity;
import com.xwad.os.adapter.AppInfoAdapter;
import com.xwad.os.base.mvvm.BaseMvvmActivity;
import com.xwad.os.bean.AppInfo;
@@ -26,8 +28,8 @@ import java.util.function.Consumer;
public class DownloadActivity extends BaseMvvmActivity {
private static final String TAG = "DownloadActivity";
-
private AppInfoAdapter mAppInfoAdapter;
+ private List mAppInfos;
@Override
protected int getLayoutId() {
@@ -57,25 +59,14 @@ public class DownloadActivity extends BaseMvvmActivity>() {
@Override
public void onChanged(List appInfos) {
+ mAppInfos = appInfos;
mAppInfoAdapter.setAppInfos(appInfos);
if (appInfos == null || appInfos.isEmpty()) {
- mViewDataBinding.rvContent.setVisibility(View.GONE);
+ mViewDataBinding.clContent.setVisibility(View.GONE);
mViewDataBinding.llNodata.setVisibility(View.VISIBLE);
} else {
- mViewDataBinding.rvContent.setVisibility(View.VISIBLE);
+ mViewDataBinding.clContent.setVisibility(View.VISIBLE);
mViewDataBinding.llNodata.setVisibility(View.GONE);
- if (ActivationUtil.getInstance().isActivation()) {
- appInfos.forEach(new Consumer() {
- @Override
- public void accept(AppInfo appInfo) {
- if (appInfo.getIs_must_components_down() == 1) {
- if (!ApkUtils.isAvailable(DownloadActivity.this, appInfo.getApp_package())) {
- FileUtils.ariaDownload(DownloadActivity.this, appInfo.getApp_url(), appInfo);
- }
- }
- }
- });
- }
}
}
});
@@ -123,5 +114,28 @@ public class DownloadActivity extends BaseMvvmActivity() {
+ @Override
+ public void accept(AppInfo appInfo) {
+ if (appInfo.getIs_must_components_down() == 1) {
+ if (ApkUtils.isUpdate(DownloadActivity.this, appInfo)) {
+ FileUtils.ariaDownload(DownloadActivity.this, appInfo.getApp_url(), appInfo);
+ }
+ }
+ }
+ });
+ }
+ }
+ }
}
}
diff --git a/app/src/main/java/com/xwad/os/activity/download/DownloadViewModel.java b/app/src/main/java/com/xwad/os/activity/download/DownloadViewModel.java
index 8ab6074..c4eaa11 100644
--- a/app/src/main/java/com/xwad/os/activity/download/DownloadViewModel.java
+++ b/app/src/main/java/com/xwad/os/activity/download/DownloadViewModel.java
@@ -12,6 +12,7 @@ import com.xwad.os.bean.BaseResponse;
import com.xwad.os.databinding.ActivityDownloadBinding;
import com.xwad.os.network.NetInterfaceManager;
+import java.util.Comparator;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
@@ -36,7 +37,7 @@ public class DownloadViewModel extends BaseViewModel> mListMutableLiveData = new MutableLiveData<>();
public void getAdminApp() {
- NetInterfaceManager.getInstance().getAdminAppObservable()
+ NetInterfaceManager.getInstance().get365AdminAppObservable()
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
.subscribe(new Observer>>() {
@Override
@@ -49,12 +50,25 @@ public class DownloadViewModel extends BaseViewModel appInfoList = listBaseResponse.data;
- List forceAppInfoList = appInfoList.stream().filter(new Predicate() {
- @Override
- public boolean test(AppInfo appInfo) {
- return appInfo.getIs_must_components() == 1;
- }
- }).collect(Collectors.toList());
+ List forceAppInfoList = appInfoList.stream()
+ .sorted(new Comparator() {
+ @Override
+ public int compare(AppInfo o1, AppInfo o2) {
+ if ("com.jxw.launcher".equals(o1.getApp_package()) && !"com.jxw.launcher".equals(o2.getApp_package())) {
+ return -1;
+ } else if (!"com.jxw.launcher".equals(o1.getApp_package()) && "com.jxw.launcher".equals(o2.getApp_package())) {
+ return 1;
+ } else {
+ return o1.getApp_package().compareTo(o2.getApp_package()); // 非目标包名按字母排序
+ }
+ }
+ })
+ .filter(new Predicate() {
+ @Override
+ public boolean test(AppInfo appInfo) {
+ return appInfo.getIs_must_components() == 1;
+ }
+ }).collect(Collectors.toList());
mListMutableLiveData.setValue(forceAppInfoList);
}
}
diff --git a/app/src/main/java/com/xwad/os/adapter/AppInfoAdapter.java b/app/src/main/java/com/xwad/os/adapter/AppInfoAdapter.java
index 4eed447..27129a4 100644
--- a/app/src/main/java/com/xwad/os/adapter/AppInfoAdapter.java
+++ b/app/src/main/java/com/xwad/os/adapter/AppInfoAdapter.java
@@ -70,7 +70,7 @@ public class AppInfoAdapter extends RecyclerView.Adapter
ApkUtils.openPackage(mContext, appInfo.getApp_package());
} else {
if (ActivationUtil.getInstance().isActivation()) {
- OpenApkUtils.getInstance().showDownloadDialog(mContext, appInfo.getApp_package(), appInfo.getApp_name());
+ OpenApkUtils.getInstance().showDownloadDialog(mContext, appInfo);
} else {
Toaster.show("请先激活设备");
}
diff --git a/app/src/main/java/com/xwad/os/fragment/usercenter/account/AccountViewModel.java b/app/src/main/java/com/xwad/os/fragment/usercenter/account/AccountViewModel.java
index c5629bc..5e94374 100644
--- a/app/src/main/java/com/xwad/os/fragment/usercenter/account/AccountViewModel.java
+++ b/app/src/main/java/com/xwad/os/fragment/usercenter/account/AccountViewModel.java
@@ -20,6 +20,7 @@ import com.xwad.os.utils.ActivationUtil;
import com.xwad.os.utils.ApkUtils;
import com.xwad.os.utils.FileUtils;
+import java.util.Comparator;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Predicate;
@@ -157,6 +158,18 @@ public class AccountViewModel extends BaseViewModel appInfoList = listBaseResponse.data;
appInfoList.stream()
+ .sorted(new Comparator() {
+ @Override
+ public int compare(AppInfo o1, AppInfo o2) {
+ if ("com.jxw.launcher".equals(o1.getApp_package()) && !"com.jxw.launcher".equals(o2.getApp_package())) {
+ return -1;
+ } else if (!"com.jxw.launcher".equals(o1.getApp_package()) && "com.jxw.launcher".equals(o2.getApp_package())) {
+ return 1;
+ } else {
+ return o1.getApp_package().compareTo(o2.getApp_package()); // 非目标包名按字母排序
+ }
+ }
+ })
.filter(new Predicate() {
@Override
public boolean test(AppInfo appInfo) {
diff --git a/app/src/main/java/com/xwad/os/network/NetInterfaceManager.java b/app/src/main/java/com/xwad/os/network/NetInterfaceManager.java
index 865be78..ce972f8 100644
--- a/app/src/main/java/com/xwad/os/network/NetInterfaceManager.java
+++ b/app/src/main/java/com/xwad/os/network/NetInterfaceManager.java
@@ -563,6 +563,13 @@ public class NetInterfaceManager {
.observeOn(AndroidSchedulers.mainThread());
}
+ public Observable>> get365AdminAppObservable() {
+ return mRetrofit.create(AppApi.class)
+ .getAdminApp(Utils.getSerial(), "11", BuildConfig.APPLICATION_ID)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+
public Observable>> getAppIconObservable() {
return mRetrofit.create(GetAppIconApi.class)
.getAppIcon(Utils.getSerial())
diff --git a/app/src/main/java/com/xwad/os/network/api/AppApi.java b/app/src/main/java/com/xwad/os/network/api/AppApi.java
index 89082e8..93ec846 100644
--- a/app/src/main/java/com/xwad/os/network/api/AppApi.java
+++ b/app/src/main/java/com/xwad/os/network/api/AppApi.java
@@ -19,6 +19,13 @@ public interface AppApi {
@Query("sn") String sn
);
+ @GET(UrlAddress.GET_ADMIN_APP)
+ Observable>> getAdminApp(
+ @Query("sn") String sn,
+ @Query("class_id") String class_id,
+ @Query("desktop_package") String desktop_package
+ );
+
@GET(UrlAddress.APP_FORCE_INSTALL)
Observable> getAdminApp(
@Query("desktop_app_package") String desktop_app_package,
diff --git a/app/src/main/java/com/xwad/os/service/main/MainSContact.java b/app/src/main/java/com/xwad/os/service/main/MainSContact.java
index 60d1699..35368a0 100644
--- a/app/src/main/java/com/xwad/os/service/main/MainSContact.java
+++ b/app/src/main/java/com/xwad/os/service/main/MainSContact.java
@@ -54,6 +54,8 @@ public class MainSContact {
void getTestApp();
/*获取管理员应用*/
void getAdminApp();
+
+ void getAdminAppDownload();
/*获取id管控*/
void getAppInside();
diff --git a/app/src/main/java/com/xwad/os/service/main/MainSPresenter.java b/app/src/main/java/com/xwad/os/service/main/MainSPresenter.java
index c3bdc6c..574ec23 100644
--- a/app/src/main/java/com/xwad/os/service/main/MainSPresenter.java
+++ b/app/src/main/java/com/xwad/os/service/main/MainSPresenter.java
@@ -2,6 +2,9 @@ package com.xwad.os.service.main;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.os.Build;
import android.util.Log;
import com.google.gson.JsonObject;
@@ -22,6 +25,7 @@ import com.xwad.os.utils.FileUtils;
import com.xwad.os.utils.ServiceAliveUtils;
import com.xwad.os.utils.Utils;
+import java.util.Comparator;
import java.util.List;
import java.util.Set;
import java.util.function.Consumer;
@@ -145,53 +149,6 @@ public class MainSPresenter implements MainSContact.Presenter {
});
}
- public void getAdminAppDownload() {
- NetInterfaceManager.getInstance().getAdminAppObservable()
- .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
- .subscribe(new Observer>>() {
- @Override
- public void onSubscribe(@NonNull Disposable d) {
- Log.e("getAdminAppDownload", "onSubscribe: ");
- }
-
- @Override
- public void onNext(@NonNull BaseResponse> listBaseResponse) {
- Log.e("getAdminAppDownload", "onNext: " + listBaseResponse);
- if (listBaseResponse.code == 200) {
- List appInfoList = listBaseResponse.data;
- appInfoList.stream()
- .filter(new Predicate() {
- @Override
- public boolean test(AppInfo appInfo) {
- return appInfo.getIs_must_components() == 1;
- }
- })
- .forEach(new Consumer() {
- @Override
- public void accept(AppInfo appInfo) {
- if (appInfo.getIs_must_components_down() == 1) {
- if (!ApkUtils.isAvailable(mContext, appInfo.getApp_package())) {
- FileUtils.ariaDownload(mContext, appInfo.getApp_url(), appInfo);
- }
- }
- }
- });
- }
- }
-
- @Override
- public void onError(@NonNull Throwable e) {
- Log.e("getAdminAppDownload", "onError: " + e.getMessage());
- onComplete();
- }
-
- @Override
- public void onComplete() {
- Log.e("getAdminAppDownload", "onComplete: ");
- }
- });
- }
-
public void getAppInfo(String pkg) {
NetInterfaceManager.getInstance().getAdminAppObservable(pkg)
.subscribe(new Observer>() {
@@ -331,12 +288,68 @@ public class MainSPresenter implements MainSContact.Presenter {
@Override
public void getTestApp() {
+ NetInterfaceManager.getInstance().getTestAppObservable()
+ .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
+ .subscribe(new Observer>>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("getTestApp", "onSubscribe: ");
+ }
+ @Override
+ public void onNext(@NonNull BaseResponse> listBaseResponse) {
+ Log.e("getTestApp", "onNext: " + listBaseResponse);
+ if (listBaseResponse.code == 200) {
+ List appInfos = listBaseResponse.data;
+ PackageManager pm = mContext.getPackageManager();
+ appInfos.forEach(new Consumer() {
+ @Override
+ public void accept(AppInfo appInfo) {
+ String packages = appInfo.getApp_package();
+ long app_version_code = appInfo.getApp_version_code();
+ PackageInfo packageInfo = null;
+ try {
+ packageInfo = pm.getPackageInfo(packages, 0);
+
+ } catch (PackageManager.NameNotFoundException e) {
+ e.printStackTrace();
+ }
+ if (packageInfo != null) {
+ long appVersionCode;
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+ appVersionCode = packageInfo.getLongVersionCode();
+ } else {
+ appVersionCode = packageInfo.versionCode;
+ }
+ if (app_version_code > appVersionCode) {
+ FileUtils.ariaDownload(mContext, appInfo.getApp_url(), appInfo);
+ } else {
+ Log.e("getTestApp", "intallApk: " + packages + " is up to date");
+ }
+ } else {
+ FileUtils.ariaDownload(mContext, appInfo.getApp_url(), appInfo);
+ }
+ }
+ });
+ }
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("getTestApp", "onError: ");
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("getTestApp", "onComplete: ");
+ }
+ });
}
@Override
public void getAdminApp() {
NetInterfaceManager.getInstance().getAdminAppObservable()
+ .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
.subscribe(new Observer>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
@@ -368,6 +381,66 @@ public class MainSPresenter implements MainSContact.Presenter {
});
}
+ @Override
+ public void getAdminAppDownload() {
+ NetInterfaceManager.getInstance().getAdminAppObservable()
+ .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
+ .subscribe(new Observer>>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("getAdminAppDownload", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse> listBaseResponse) {
+ Log.e("getAdminAppDownload", "onNext: " + listBaseResponse);
+ if (listBaseResponse.code == 200) {
+ List appInfoList = listBaseResponse.data;
+ appInfoList.stream()
+ .sorted(new Comparator() {
+ @Override
+ public int compare(AppInfo o1, AppInfo o2) {
+ if ("com.jxw.launcher".equals(o1.getApp_package()) && !"com.jxw.launcher".equals(o2.getApp_package())) {
+ return -1;
+ } else if (!"com.jxw.launcher".equals(o1.getApp_package()) && "com.jxw.launcher".equals(o2.getApp_package())) {
+ return 1;
+ } else {
+ return o1.getApp_package().compareTo(o2.getApp_package()); // 非目标包名按字母排序
+ }
+ }
+ })
+ .filter(new Predicate() {
+ @Override
+ public boolean test(AppInfo appInfo) {
+ return appInfo.getIs_must_components() == 1;
+ }
+ })
+ .forEach(new Consumer() {
+ @Override
+ public void accept(AppInfo appInfo) {
+ if (appInfo.getIs_must_components_down() == 1) {
+ if (!ApkUtils.isAvailable(mContext, appInfo.getApp_package())) {
+// FileUtils.ariaDownload(mContext, appInfo.getApp_url(), appInfo);
+ }
+ }
+ }
+ });
+ }
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("getAdminAppDownload", "onError: " + e.getMessage());
+ onComplete();
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("getAdminAppDownload", "onComplete: ");
+ }
+ });
+ }
+
@Override
public void getAppInside() {
diff --git a/app/src/main/java/com/xwad/os/service/main/MainService.java b/app/src/main/java/com/xwad/os/service/main/MainService.java
index 6d6d856..81ac6bc 100644
--- a/app/src/main/java/com/xwad/os/service/main/MainService.java
+++ b/app/src/main/java/com/xwad/os/service/main/MainService.java
@@ -96,6 +96,7 @@ public class MainService extends BaseRxService implements MainSContact.MainSView
mPresenter.updateDeviceInfo();
mPresenter.getAppIcon();
mPresenter.getScreenLock();
+ mPresenter.getTestApp();
mPresenter.getAdminApp();
mPresenter.getSystemSettings();
mPresenter.getLockScreenPwd();
diff --git a/app/src/main/java/com/xwad/os/utils/JgyUtils.java b/app/src/main/java/com/xwad/os/utils/JgyUtils.java
index 75a46a7..0cd0994 100644
--- a/app/src/main/java/com/xwad/os/utils/JgyUtils.java
+++ b/app/src/main/java/com/xwad/os/utils/JgyUtils.java
@@ -1283,13 +1283,13 @@ public class JgyUtils {
boolean noti = mMMKV.decodeBool(CommonConfig.ALLOW_NOTIFICATION, true);
Log.e(TAG, "startServices: noti = " + noti);
// if (noti) {
-// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// long time = System.currentTimeMillis();
-// mContext.startForegroundService(new Intent(mContext, MainService.class));
+ mContext.startForegroundService(new Intent(mContext, MainService.class));
// Log.e(TAG, "setDefault: startServices time = " + (System.currentTimeMillis() - time) + "ms");
-// } else {
+ } else {
mContext.startService(new Intent(mContext, MainService.class));
-// }
+ }
// }
}
diff --git a/app/src/main/java/com/xwad/os/utils/OpenApkUtils.java b/app/src/main/java/com/xwad/os/utils/OpenApkUtils.java
index 4a02e81..9b68523 100644
--- a/app/src/main/java/com/xwad/os/utils/OpenApkUtils.java
+++ b/app/src/main/java/com/xwad/os/utils/OpenApkUtils.java
@@ -859,6 +859,48 @@ public class OpenApkUtils {
}
}
+ public void showDownloadDialog(Activity context, AppInfo appInfo) {
+ Dialog dialog = new Dialog(context, R.style.ActionSheet);
+ Window window = dialog.getWindow();
+ View inflate = ((LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.download_dialog, null);
+ TextView textView = inflate.findViewById(R.id.download_cancel);
+ TextView textView2 = inflate.findViewById(R.id.tag_title);
+ if (!TextUtils.isEmpty(appInfo.getApp_name())) {
+ textView2.setText("未安装\"" + appInfo.getApp_name() + "\"\n下载后可继续使用!");
+ }
+ TextView textView3 = inflate.findViewById(R.id.download_ok);
+ textView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ dialog.dismiss();
+ }
+ });
+ textView3.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ FileUtils.ariaDownload(mContext, appInfo.getApp_url(), appInfo);
+ Intent intent = new Intent(mContext, DownloadService.class);
+// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+// mContext.startForegroundService(intent);
+// } else {
+ mContext.startService(intent);
+// }
+ dialog.dismiss();
+ }
+ });
+ WindowManager.LayoutParams attributes = window.getAttributes();
+ attributes.x = 0;
+ attributes.y = 0;
+ attributes.gravity = Gravity.CENTER;
+ dialog.onWindowAttributesChanged(attributes);
+ dialog.setCanceledOnTouchOutside(true);
+ dialog.setContentView(inflate);
+ window.setDimAmount(0.6f);
+ dialog.show();
+ window.setAttributes(attributes);
+ }
+
+
public void showDownloadDialog(Activity context, String pkg, String appName) {
Dialog dialog = new Dialog(context, R.style.ActionSheet);
Window window = dialog.getWindow();
diff --git a/app/src/main/res/drawable/ic_download_all.xml b/app/src/main/res/drawable/ic_download_all.xml
new file mode 100644
index 0000000..dd2cfc8
--- /dev/null
+++ b/app/src/main/res/drawable/ic_download_all.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_download.xml b/app/src/main/res/layout/activity_download.xml
index 47e169c..ffc9a13 100644
--- a/app/src/main/res/layout/activity_download.xml
+++ b/app/src/main/res/layout/activity_download.xml
@@ -1,6 +1,8 @@
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ tools:context=".activity.download.DownloadActivity">
@@ -43,25 +45,72 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:includeFontPadding="false"
+ android:maxLines="1"
android:paddingBottom="@dimen/x5"
+ android:singleLine="true"
android:tag="binding_1"
- android:text="学王365必备组件下载"
+ android:text="必备组件下载"
android:textColor="@color/res_text_color1"
android:textSize="@dimen/x50"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
+
+
+
-
+ app:layout_constraintTop_toBottomOf="@id/title_bar">
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_other_app.xml b/app/src/main/res/layout/activity_other_app.xml
new file mode 100644
index 0000000..0da70fb
--- /dev/null
+++ b/app/src/main/res/layout/activity_other_app.xml
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_app_info.xml b/app/src/main/res/layout/item_app_info.xml
index 32b2030..c266ef4 100644
--- a/app/src/main/res/layout/item_app_info.xml
+++ b/app/src/main/res/layout/item_app_info.xml
@@ -20,10 +20,11 @@
android:layout_width="14dp"
android:layout_height="14dp"
android:layout_marginTop="32dp"
+ android:visibility="gone"
android:layout_marginStart="32dp"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
- android:src="@drawable/ic_download"
+ android:src="@drawable/ic_download_all"
app:layout_constraintStart_toStartOf="@+id/iv_app_icon"
app:layout_constraintTop_toTopOf="@+id/iv_app_icon" />