From 88ac4c0824046462cefa227f912b22e8ce3c841e Mon Sep 17 00:00:00 2001 From: tongtongstudio Date: Wed, 4 Mar 2026 14:15:32 +0800 Subject: [PATCH] =?UTF-8?q?version:1.2.6=20fix:=20update:=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E6=9C=80=E6=96=B0=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 4 +- app/src/main/AndroidManifest.xml | 20 +- .../aidl/com/xwad/os/IGetInfoInterface.aidl | 16 ++ .../com/xwad/os/activity/ExitActivity.java | 60 +---- .../activation/ActivationActivity.java | 4 +- .../os/activity/app/OtherAppActivity.java | 136 ++++++++++++ .../os/activity/app/OtherAppViewModel.java | 74 +++++++ .../activity/download/DownloadActivity.java | 149 +++++++++++++ .../activity/download/DownloadViewModel.java | 110 ++++++++++ .../xwad/os/activity/home/HomeViewModel.java | 8 +- .../login/result/LoginSuccessfulActivity.java | 11 +- .../result/LoginSuccessfulViewModel.java | 59 +++++ .../os/activity/update/UpdateActivity.java | 2 +- .../xwad/os/activity/user/UserActivity.java | 6 +- .../java/com/xwad/os/adapter/AppAdapter.java | 2 - .../com/xwad/os/adapter/AppInfoAdapter.java | 111 ++++++++++ .../main/java/com/xwad/os/bean/AppInfo.java | 18 ++ .../java/com/xwad/os/config/CommonConfig.java | 13 ++ .../xwad/os/fragment/mine/MineFragment.java | 45 +++- .../xwad/os/fragment/user/UserFragment.java | 2 - .../usercenter/account/AccountFragment.java | 30 +-- .../usercenter/account/AccountViewModel.java | 66 ++++++ .../usercenter/info/InfoFragment.java | 5 + .../com/xwad/os/manager/ControlManager.java | 4 +- .../com/xwad/os/manager/DeviceSNManager.java | 1 - .../xwad/os/network/NetInterfaceManager.java | 32 ++- .../java/com/xwad/os/network/UrlAddress.java | 2 + .../java/com/xwad/os/network/api/AppApi.java | 22 +- .../java/com/xwad/os/push/PushManager.java | 7 +- .../com/xwad/os/service/DownloadService.java | 2 +- .../com/xwad/os/service/ManagerService.java | 3 +- .../com/xwad/os/service/RemoteService.java | 52 +++++ .../xwad/os/service/main/MainSContact.java | 2 + .../xwad/os/service/main/MainSPresenter.java | 162 +++++++++++++- .../com/xwad/os/service/main/MainService.java | 2 + .../main/java/com/xwad/os/utils/ApkUtils.java | 7 +- .../java/com/xwad/os/utils/FileUtils.java | 2 +- .../java/com/xwad/os/utils/OpenApkUtils.java | 79 ++++++- .../main/java/com/xwad/os/utils/Utils.java | 92 +++++--- app/src/main/res/drawable-hdpi/icon_back1.png | Bin 0 -> 1424 bytes app/src/main/res/drawable-hdpi/icon_btk.png | Bin 0 -> 35050 bytes app/src/main/res/drawable-hdpi/icon_qdy.webp | Bin 0 -> 20840 bytes app/src/main/res/drawable-hdpi/icon_qst.png | Bin 0 -> 63707 bytes app/src/main/res/drawable/ic_download_all.xml | 9 + app/src/main/res/drawable/ic_update.xml | 9 + .../main/res/layout/activity_activation.xml | 163 +++++++------- app/src/main/res/layout/activity_download.xml | 205 ++++++++++++++++++ .../main/res/layout/activity_other_app.xml | 107 +++++++++ .../main/res/layout/book_layout_title_bar.xml | 35 +++ .../main/res/layout/dialog_default_apps.xml | 2 +- app/src/main/res/layout/fragment_mine.xml | 2 +- app/src/main/res/layout/item_app_info.xml | 57 +++++ .../main/res/layout/item_dialog_app_force.xml | 3 +- app/src/main/res/values/colors_jxw.xml | 1 + app/src/main/res/values/string_jxw.xml | 4 + app/src/main/res/values/strings.xml | 1 + app/src/main/res/values/styles.xml | 20 ++ 57 files changed, 1776 insertions(+), 264 deletions(-) create mode 100644 app/src/main/aidl/com/xwad/os/IGetInfoInterface.aidl create mode 100644 app/src/main/java/com/xwad/os/activity/app/OtherAppActivity.java create mode 100644 app/src/main/java/com/xwad/os/activity/app/OtherAppViewModel.java create mode 100644 app/src/main/java/com/xwad/os/activity/download/DownloadActivity.java create mode 100644 app/src/main/java/com/xwad/os/activity/download/DownloadViewModel.java create mode 100644 app/src/main/java/com/xwad/os/adapter/AppInfoAdapter.java create mode 100644 app/src/main/java/com/xwad/os/service/RemoteService.java create mode 100644 app/src/main/res/drawable-hdpi/icon_back1.png create mode 100644 app/src/main/res/drawable-hdpi/icon_btk.png create mode 100644 app/src/main/res/drawable-hdpi/icon_qdy.webp create mode 100644 app/src/main/res/drawable-hdpi/icon_qst.png create mode 100644 app/src/main/res/drawable/ic_download_all.xml create mode 100644 app/src/main/res/drawable/ic_update.xml create mode 100644 app/src/main/res/layout/activity_download.xml create mode 100644 app/src/main/res/layout/activity_other_app.xml create mode 100644 app/src/main/res/layout/book_layout_title_bar.xml create mode 100644 app/src/main/res/layout/item_app_info.xml diff --git a/app/build.gradle b/app/build.gradle index 9b1b2f2..6ae1d1b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ android { minSdkVersion 23 targetSdkVersion 29 - versionCode 26 - versionName "1.2.5" + versionCode 27 + versionName "1.2.6" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5364d95..a8a6ac7 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -253,7 +253,20 @@ - + + + + getAllLauncherApps() { - PackageManager packageManager = getPackageManager(); - - // 构建用于查询桌面应用的Intent - Intent intent = new Intent(Intent.ACTION_MAIN); - intent.addCategory(Intent.CATEGORY_HOME); - - // 查询所有可以处理该Intent的Activity - List resolveInfoList = packageManager.queryIntentActivities(intent, PackageManager.MATCH_ALL); - - List launcherPackageList = resolveInfoList.stream().filter(new Predicate() { - @Override - public boolean test(ResolveInfo resolveInfo) { - return !BuildConfig.APPLICATION_ID.equals(resolveInfo.activityInfo.packageName) - || !"com.jxw.launcher".equals(resolveInfo.activityInfo.packageName) - || !"com.handuan.os".equals(resolveInfo.activityInfo.packageName); - } - }).map(new Function() { - @Override - public ComponentName apply(ResolveInfo resolveInfo) { - return resolveInfo.getComponentInfo().getComponentName(); - } - }).collect(Collectors.toList()); - - return launcherPackageList; - } - - private void exitDesktop() { - List componentNames = getAllLauncherApps(); - Log.e(TAG, "exitDesktop: " + componentNames); - if (componentNames != null && componentNames.size() != 0) { - ComponentName componentName = componentNames.get(0); - Intent intent = new Intent(); - intent.setComponent(componentName); - try { - startActivity(intent); - } catch (Exception e) { - Log.e(TAG, "exitDesktop: " + e.getMessage()); - } - } - - startActivity(new Intent(Settings.ACTION_HOME_SETTINGS)); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - finishAndRemoveTask(); - } else { - finishAffinity(); - } - android.os.Process.killProcess(android.os.Process.myPid()); - System.exit(0); - } - - private void setEmpty() { + private void setEmpty() { new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { @Override public void run() { diff --git a/app/src/main/java/com/xwad/os/activity/activation/ActivationActivity.java b/app/src/main/java/com/xwad/os/activity/activation/ActivationActivity.java index 4b9883c..7a9df0d 100644 --- a/app/src/main/java/com/xwad/os/activity/activation/ActivationActivity.java +++ b/app/src/main/java/com/xwad/os/activity/activation/ActivationActivity.java @@ -94,7 +94,7 @@ public class ActivationActivity extends BaseMvvmActivity { + 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 new file mode 100644 index 0000000..1cba80a --- /dev/null +++ b/app/src/main/java/com/xwad/os/activity/download/DownloadActivity.java @@ -0,0 +1,149 @@ +package com.xwad.os.activity.download; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.graphics.Color; +import android.text.SpannableString; +import android.text.Spanned; +import android.text.TextUtils; +import android.text.style.ForegroundColorSpan; +import android.util.Log; +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; +import com.xwad.os.databinding.ActivityDownloadBinding; +import com.xwad.os.utils.ActivationUtil; +import com.xwad.os.utils.ApkUtils; +import com.xwad.os.utils.FileUtils; + +import java.util.List; +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() { + return R.layout.activity_download; + } + + @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); + + SpannableString spannableString = new SpannableString(getResources().getString(R.string.bibeizujian_permission)); + spannableString.setSpan(new ForegroundColorSpan(Color.RED), 21, 35, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + mViewDataBinding.tvPermission.setText(spannableString); + + 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 openOtherApp(View view) { + startActivity(new Intent(DownloadActivity.this, OtherAppActivity.class)); + } + + 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.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 new file mode 100644 index 0000000..9ac96bd --- /dev/null +++ b/app/src/main/java/com/xwad/os/activity/download/DownloadViewModel.java @@ -0,0 +1,110 @@ +package com.xwad.os.activity.download; + +import android.util.Log; + +import androidx.lifecycle.MutableLiveData; + +import com.tencent.mmkv.MMKV; +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.config.CommonConfig; +import com.xwad.os.databinding.ActivityDownloadBinding; +import com.xwad.os.network.NetInterfaceManager; + +import java.util.Comparator; +import java.util.List; +import java.util.Set; +import java.util.function.Function; +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 DownloadViewModel extends BaseViewModel { + + MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + + @Override + public ActivityDownloadBinding 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() + .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); + Set packageSets = appInfoList.stream() + .filter(new Predicate() { + @Override + public boolean test(AppInfo appInfo) { + return appInfo.getIs_must_components() == 1; + } + }) + .map(new Function() { + @Override + public String apply(AppInfo appInfo) { + return appInfo.getApp_package(); + } + }) + .collect(Collectors.toSet()); + mMMKV.encode(CommonConfig.ESSENTIAL_COMPONENT_APPLICATIONS, packageSets); + + } + } + + @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/home/HomeViewModel.java b/app/src/main/java/com/xwad/os/activity/home/HomeViewModel.java index e575bab..9b92fb4 100644 --- a/app/src/main/java/com/xwad/os/activity/home/HomeViewModel.java +++ b/app/src/main/java/com/xwad/os/activity/home/HomeViewModel.java @@ -175,12 +175,12 @@ public class HomeViewModel extends BaseViewModel>() { @Override public void onSubscribe(@NonNull Disposable d) { - Log.e("checkUpdateUiUiOS", "onSubscribe: "); + Log.e("checkUpdate", "onSubscribe: "); } @Override public void onNext(@NonNull BaseResponse appUpdateInfoBaseResponse) { - Log.e("checkUpdateUiUiOS", "onNext: " + appUpdateInfoBaseResponse); + Log.e("checkUpdate", "onNext: " + appUpdateInfoBaseResponse); if (appUpdateInfoBaseResponse.code == 200) { AppUpdateInfo appUpdateInfo = appUpdateInfoBaseResponse.data; mAppUpdateInfoUiUiOSData.setValue(appUpdateInfo); @@ -191,13 +191,13 @@ public class HomeViewModel extends BaseViewModel() { + @Override + public void onChanged(Boolean aBoolean) { + finish(); + } + }); } @Override @@ -57,7 +64,9 @@ public class LoginSuccessfulActivity extends BaseMvvmActivity { + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + @Override public void onDestroy() { } + public MutableLiveData mCompleteLiveData = new MutableLiveData<>(); + + 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; + Set packageSets = appInfoList.stream() + .filter(new Predicate() { + @Override + public boolean test(AppInfo appInfo) { + return appInfo.getIs_must_components() == 1; + } + }) + .map(new Function() { + @Override + public String apply(AppInfo appInfo) { + return appInfo.getApp_package(); + } + }) + .collect(Collectors.toSet()); + mMMKV.encode(CommonConfig.ESSENTIAL_COMPONENT_APPLICATIONS, packageSets); + + } + mCompleteLiveData.setValue(true); + } + + @Override + public void onError(@NonNull Throwable e) { + Log.e("getAdminAppDownload", "onError: " + e.getMessage()); + onComplete(); + } + + @Override + public void onComplete() { + Log.e("getAdminAppDownload", "onComplete: "); + mCompleteLiveData.setValue(true); + } + }); + } + public MutableLiveData mBooleanMutableLiveData = new MutableLiveData<>(); public void getAppInfo() { diff --git a/app/src/main/java/com/xwad/os/activity/update/UpdateActivity.java b/app/src/main/java/com/xwad/os/activity/update/UpdateActivity.java index c387071..5104995 100644 --- a/app/src/main/java/com/xwad/os/activity/update/UpdateActivity.java +++ b/app/src/main/java/com/xwad/os/activity/update/UpdateActivity.java @@ -67,7 +67,7 @@ public class UpdateActivity extends BaseMvvmActivity { + private static final String TAG = "AppInfoAdapter"; + + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + + private FragmentActivity mContext; + + private List mAppInfos; + + public void setAppInfos(List appInfos) { + mAppInfos = appInfos; + notifyDataSetChanged(); + } + + @NonNull + @Override + public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + mContext = (FragmentActivity) parent.getContext(); + AutoSizeCompat.autoConvertDensityOfGlobal(mContext.getResources()); + return new AppInfoAdapter.Holder(LayoutInflater.from(mContext).inflate(R.layout.item_app_info, parent, false)); + } + + @Override + public void onBindViewHolder(@NonNull Holder holder, int position) { + AutoSizeCompat.autoConvertDensityOfGlobal(mContext.getResources()); + AppInfo appInfo = mAppInfos.get(position); + GlideLoadUtils.getInstance().glideLoad(mContext, appInfo.getApp_img(), holder.iv_app_icon, R.drawable.icon_bbx_app); + if (!TextUtils.isEmpty(appInfo.getApp_name())) { + holder.tv_app_name.setText(appInfo.getApp_name()); + } else { + holder.tv_app_name.setText("未知应用"); + } + if (ApkUtils.isAvailable(mContext, appInfo.getApp_package())) { + holder.iv_download.setVisibility(View.GONE); + if (ApkUtils.isUpdate(mContext, appInfo)) { + holder.iv_update.setVisibility(View.VISIBLE); + } else { + holder.iv_update.setVisibility(View.GONE); + } + } else { + holder.iv_download.setVisibility(View.VISIBLE); + holder.iv_update.setVisibility(View.GONE); + } + holder.rl_root.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (ApkUtils.isAvailable(mContext, appInfo.getApp_package())) { + if (ApkUtils.isUpdate(mContext, appInfo)) { + OpenApkUtils.getInstance().showDownloadDialog(mContext, appInfo, "\"" + appInfo.getApp_name() + "\"\n更新后可继续使用!"); + } else { + ApkUtils.openPackage(mContext, appInfo.getApp_package()); + } + } else { + if (ActivationUtil.getInstance().isActivation()) { + OpenApkUtils.getInstance().showDownloadDialog(mContext, appInfo, "未安装\"" + appInfo.getApp_name() + "\"\n下载后可继续使用!"); + } else { + Toaster.show("请先激活设备"); + } + } + } + }); + } + + @Override + public int getItemCount() { + return mAppInfos == null ? 0 : mAppInfos.size(); + } + + public class Holder extends RecyclerView.ViewHolder { + ConstraintLayout rl_root; + ImageView iv_app_icon, iv_download, iv_update; + TextView tv_app_name; + + public Holder(@NonNull View itemView) { + super(itemView); + rl_root = itemView.findViewById(R.id.rl_root); + iv_app_icon = itemView.findViewById(R.id.iv_app_icon); + iv_download = itemView.findViewById(R.id.iv_download); + iv_update = itemView.findViewById(R.id.iv_update); + tv_app_name = itemView.findViewById(R.id.tv_app_name); + } + } +} diff --git a/app/src/main/java/com/xwad/os/bean/AppInfo.java b/app/src/main/java/com/xwad/os/bean/AppInfo.java index 436ed23..93cb25f 100644 --- a/app/src/main/java/com/xwad/os/bean/AppInfo.java +++ b/app/src/main/java/com/xwad/os/bean/AppInfo.java @@ -32,6 +32,8 @@ public class AppInfo implements Serializable { private String use_type; private int is_autodown; private String third_url; + private int is_must_components; + private int is_must_components_down; public int getId() { return id; @@ -209,6 +211,22 @@ public class AppInfo implements Serializable { this.third_url = third_url; } + public int getIs_must_components() { + return is_must_components; + } + + public void setIs_must_components(int is_must_components) { + this.is_must_components = is_must_components; + } + + public int getIs_must_components_down() { + return is_must_components_down; + } + + public void setIs_must_components_down(int is_must_components_down) { + this.is_must_components_down = is_must_components_down; + } + @NonNull @Override public String toString() { diff --git a/app/src/main/java/com/xwad/os/config/CommonConfig.java b/app/src/main/java/com/xwad/os/config/CommonConfig.java index 005ec52..802eeb7 100644 --- a/app/src/main/java/com/xwad/os/config/CommonConfig.java +++ b/app/src/main/java/com/xwad/os/config/CommonConfig.java @@ -1,10 +1,23 @@ package com.xwad.os.config; +import java.util.HashSet; +import java.util.Set; + public class CommonConfig { public static final String MMKV_ID = "InterProcessKV"; public static final String CLOUD_LESSON_SETTINGS_KEY = "cloud_lesson_settings_key"; public static final String DISALLOWED_RUNNING_APP_KEY = "disallowed_running_app"; + public static final String ESSENTIAL_COMPONENT_APPLICATIONS = "essential_component_applications"; + public static final Set ESSENTIAL_APPLICATIONS_SETS = new HashSet() {{ + this.add("com.jxw.jpkc"); + this.add("com.jxw.zncd"); + this.add("com.jxw.question"); + this.add("com.jxw.launcher"); + this.add("com.jxw.tbdd"); + this.add("com.jxw.download"); + this.add("com.jxw.tbfd"); + }}; public static final String ALIYUN_PUSH_ID = "aliyun_push_id_key"; diff --git a/app/src/main/java/com/xwad/os/fragment/mine/MineFragment.java b/app/src/main/java/com/xwad/os/fragment/mine/MineFragment.java index a258b36..61b8f60 100644 --- a/app/src/main/java/com/xwad/os/fragment/mine/MineFragment.java +++ b/app/src/main/java/com/xwad/os/fragment/mine/MineFragment.java @@ -16,6 +16,9 @@ import com.hjq.toast.Toaster; import com.tencent.mmkv.MMKV; import com.xwad.os.R; import com.xwad.os.activity.ExitActivity; +import com.xwad.os.activity.activation.ActivationActivity; +import com.xwad.os.activity.download.DownloadActivity; +import com.xwad.os.activity.login.LoginActivity; import com.xwad.os.activity.user.UserActivity; import com.xwad.os.base.mvvm.fragment.BaseMvvmFragment; import com.xwad.os.bean.SnInfo; @@ -25,9 +28,10 @@ import com.xwad.os.databinding.FragmentMineBinding; import com.xwad.os.jxw.StudyRecordMng; import com.xwad.os.jxw.ToastUtil; import com.xwad.os.jxw.event.UpdateColorEvent; +import com.xwad.os.utils.ActivationUtil; import com.xwad.os.utils.OpenApkUtils; +import com.xwad.os.utils.Utils; import com.xwad.os.view.jxw.view.dialog.QhbzDialog; -import com.xwad.os.view.jxw.widget.DefaultAppsDialog; import org.greenrobot.eventbus.EventBus; @@ -386,24 +390,41 @@ public class MineFragment extends BaseMvvmFragment { @@ -87,15 +85,16 @@ public class AccountFragment extends BaseMvvmFragment>() { @Override public void onSubscribe(@NonNull Disposable d) { @@ -135,4 +142,63 @@ public class AccountViewModel extends BaseViewModel>>() { + @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(getCtx(), appInfo.getApp_package())) { + FileUtils.ariaDownload(getCtx(), 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: "); + } + }); + } } diff --git a/app/src/main/java/com/xwad/os/fragment/usercenter/info/InfoFragment.java b/app/src/main/java/com/xwad/os/fragment/usercenter/info/InfoFragment.java index 9b410f0..2c38a44 100644 --- a/app/src/main/java/com/xwad/os/fragment/usercenter/info/InfoFragment.java +++ b/app/src/main/java/com/xwad/os/fragment/usercenter/info/InfoFragment.java @@ -132,6 +132,11 @@ public class InfoFragment extends BaseMvvmFragment>> getTestAppObservable() { + return getAppApi() + .getTestApp(DeviceSNManager.getDeviceSN()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()); + } + public Observable getPhoneCodeObservable(String mobile) { return mRetrofit.create(LoginApi.class) .getCode(mobile) @@ -537,28 +544,35 @@ public class NetInterfaceManager { public Observable> getLockScreenPwdObservable() { return getSnInfoApi() - .getLockScreenPwd(Utils.getSerial()) + .getLockScreenPwd(DeviceSNManager.getDeviceSN()) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()); } public Observable getUpdateLockScreenObservable() { return mRetrofit.create(SnInfoApi.class) - .updateLockScreen(Utils.getSerial()) + .updateLockScreen(DeviceSNManager.getDeviceSN()) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()); } public Observable>> getAdminAppObservable() { return mRetrofit.create(AppApi.class) - .getAdminApp(Utils.getSerial()) + .getAdminApp(DeviceSNManager.getDeviceSN()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()); + } + + public Observable>> get365AdminAppObservable() { + return mRetrofit.create(AppApi.class) + .getAdminApp(DeviceSNManager.getDeviceSN(), "11", BuildConfig.APPLICATION_ID) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()); } public Observable>> getAppIconObservable() { return mRetrofit.create(GetAppIconApi.class) - .getAppIcon(Utils.getSerial()) + .getAppIcon(DeviceSNManager.getDeviceSN()) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()); } @@ -1075,7 +1089,7 @@ public class NetInterfaceManager { Log.e(TAG, "updateAdminInfo: software = " + software); } getSnInfoApi().sendAdminSn( - Utils.getSerial(), + DeviceSNManager.getDeviceSN(), "", machine, hardware, @@ -1241,7 +1255,7 @@ public class NetInterfaceManager { public ObservableSource apply(String s) throws Throwable { Log.e("SendAppInstallInfo", "apply: " + s); return getAppApi() - .installorRemove(Utils.getSerial(), s); + .installorRemove(DeviceSNManager.getDeviceSN(), s); } }).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) @@ -1298,7 +1312,7 @@ public class NetInterfaceManager { MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), fileBody); Map params = new HashMap<>(); params.put("package", NetInterfaceManager.convertToRequestBody(packageInfo.packageName)); - Call call = getUploadAppImgApi().uploadAppImg(Utils.getSerial(), params, body); + Call call = getUploadAppImgApi().uploadAppImg(DeviceSNManager.getDeviceSN(), params, body); call.enqueue(new RetryCallback(call, 1, 30 * 1000) { @Override public void onRequestResponse(Call call, retrofit2.Response response) { @@ -1334,7 +1348,7 @@ public class NetInterfaceManager { public void screenshot() { // String path = mContext.getExternalFilesDir("db").getAbsolutePath(); String path = ContextCompat.getExternalFilesDirs(mContext, Environment.DIRECTORY_DOWNLOADS)[0].getAbsolutePath(); - String filePath = path + File.separator + Utils.getSerial() + ".png"; + String filePath = path + File.separator + DeviceSNManager.getDeviceSN() + ".png"; getScreenshot(filePath).concatMap(new Function>() { @Override public ObservableSource apply(Integer integer) throws Exception { @@ -1406,7 +1420,7 @@ public class NetInterfaceManager { private Observable getSendFile(String path, MultipartBody.Part body) { return getUploadScreenshotControl() - .getControlScreenshot(Utils.getSerial(), body) + .getControlScreenshot(DeviceSNManager.getDeviceSN(), body) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()); } diff --git a/app/src/main/java/com/xwad/os/network/UrlAddress.java b/app/src/main/java/com/xwad/os/network/UrlAddress.java index 0f52b22..0688892 100644 --- a/app/src/main/java/com/xwad/os/network/UrlAddress.java +++ b/app/src/main/java/com/xwad/os/network/UrlAddress.java @@ -39,6 +39,8 @@ public class UrlAddress { public final static String APP_FORCE_INSTALL = "app/force-install"; /*根据包名获取更新*/ public final static String GET_NEWEST_APPUPDATE = "app/newestAppUpdate"; + /*获取灰度更新*/ + public static final String GET_TEST_APP_INFO = "app/getTestAppInfo"; /*发送卸载或者安装信息*/ public final static String SEND_INSTALLEDORREMOVED = "app/addAppInstall"; 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 51e8c1e..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 @@ -14,6 +14,18 @@ import retrofit2.http.POST; import retrofit2.http.Query; public interface AppApi { + @GET(UrlAddress.GET_ADMIN_APP) + Observable>> getAdminApp( + @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, @@ -27,15 +39,15 @@ public interface AppApi { @Query("type") int type ); + @GET(UrlAddress.GET_TEST_APP_INFO) + Observable>> getTestApp( + @Query("sn") String sn + ); + @FormUrlEncoded @POST(UrlAddress.SEND_INSTALLEDORREMOVED) Observable installorRemove( @Field("sn") String sn, @Field("app") String jsonString ); - - @GET(UrlAddress.GET_ADMIN_APP) - Observable>> getAdminApp( - @Query("sn") String sn - ); } diff --git a/app/src/main/java/com/xwad/os/push/PushManager.java b/app/src/main/java/com/xwad/os/push/PushManager.java index beaf6a8..9c90e9b 100644 --- a/app/src/main/java/com/xwad/os/push/PushManager.java +++ b/app/src/main/java/com/xwad/os/push/PushManager.java @@ -6,7 +6,6 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; -import android.graphics.Bitmap; import android.os.Build; import android.os.Handler; import android.os.Looper; @@ -29,12 +28,12 @@ import com.xwad.os.disklrucache.CacheHelper; import com.xwad.os.fragment.user.UserFragment; import com.xwad.os.gson.GsonUtils; import com.xwad.os.manager.ControlManager; +import com.xwad.os.manager.DeviceSNManager; import com.xwad.os.network.NetInterfaceManager; import com.xwad.os.network.RetryCallback; import com.xwad.os.service.ManagerService; import com.xwad.os.service.main.MainService; import com.xwad.os.utils.ApkUtils; -import com.xwad.os.utils.BitmapUtils; import com.xwad.os.utils.FileUtils; import com.xwad.os.utils.JgyUtils; import com.xwad.os.utils.ServiceAliveUtils; @@ -818,9 +817,9 @@ public class PushManager { //设置一个file文件 MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), fileBody); Map params = new HashMap<>(); - params.put("sn", Utils.getSerial(mContext)); + params.put("sn", DeviceSNManager.getDeviceSN()); params.put("createtime", String.valueOf(time)); - Call call = NetInterfaceManager.getInstance().getUploadScreenshotControl().uploadScreenshotCall(Utils.getSerial(mContext), body); + Call call = NetInterfaceManager.getInstance().getUploadScreenshotControl().uploadScreenshotCall(DeviceSNManager.getDeviceSN(), body); call.enqueue(new RetryCallback(call, 10, 30 * 1000) { @Override public void onRequestResponse(Call call, Response response) { diff --git a/app/src/main/java/com/xwad/os/service/DownloadService.java b/app/src/main/java/com/xwad/os/service/DownloadService.java index 9c93912..c6d7da0 100644 --- a/app/src/main/java/com/xwad/os/service/DownloadService.java +++ b/app/src/main/java/com/xwad/os/service/DownloadService.java @@ -204,7 +204,7 @@ public class DownloadService extends Service { @Download.onTaskComplete void taskComplete(DownloadTask task) { Log.e(TAG, "taskComplete: " + task.getFilePath()); - ApkUtils.installApp(DownloadService.this, task.getFilePath()); + ApkUtils.installApkFile(DownloadService.this, task.getFilePath()); String jsonString = task.getExtendField(); Log.e(TAG, "taskComplete: " + "下载完成:" + jsonString); AriaDownloadInfo ariaDownloadInfo = getAriaDownloadInfo(jsonString); diff --git a/app/src/main/java/com/xwad/os/service/ManagerService.java b/app/src/main/java/com/xwad/os/service/ManagerService.java index a3d08f3..a570b79 100644 --- a/app/src/main/java/com/xwad/os/service/ManagerService.java +++ b/app/src/main/java/com/xwad/os/service/ManagerService.java @@ -38,6 +38,7 @@ import com.xwad.os.R; import com.xwad.os.bean.BaseResponse; import com.xwad.os.config.CommonConfig; import com.xwad.os.gson.GsonUtils; +import com.xwad.os.manager.DeviceSNManager; import com.xwad.os.network.NetInterfaceManager; import com.xwad.os.receiver.ApkInstallReceiver; import com.xwad.os.receiver.BootReceiver; @@ -275,7 +276,7 @@ public class ManagerService extends Service implements NetworkUtils.OnNetworkSta private void getScreenLockState() { NetInterfaceManager.getInstance() .getSnInfoApi() - .getScreenshot(Utils.getSerial()) + .getScreenshot(DeviceSNManager.getDeviceSN()) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer() { diff --git a/app/src/main/java/com/xwad/os/service/RemoteService.java b/app/src/main/java/com/xwad/os/service/RemoteService.java new file mode 100644 index 0000000..b7452ba --- /dev/null +++ b/app/src/main/java/com/xwad/os/service/RemoteService.java @@ -0,0 +1,52 @@ +package com.xwad.os.service; + +import android.app.Service; +import android.content.Intent; +import android.os.IBinder; +import android.os.RemoteException; +import android.util.Log; + +import com.tencent.mmkv.MMKV; +import com.xwad.os.IGetInfoInterface; +import com.xwad.os.config.CommonConfig; +import com.xwad.os.manager.DeviceSNManager; +import com.xwad.os.utils.Utils; + +public class RemoteService extends Service { + private static final String TAG = "RemoteService"; + + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + + public RemoteService() { + } + + @Override + public IBinder onBind(Intent intent) { + Log.e(TAG, "onBind: "); + return mBinde; + } + + @Override + public void onCreate() { + Log.e(TAG, "onCreate: "); + super.onCreate(); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + Log.e(TAG, "onStartCommand: "); + return super.onStartCommand(intent, flags, startId); + } + + private IBinder mBinde = new IGetInfoInterface.Stub() { + @Override + public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException { + + } + + @Override + public String getSerial() throws RemoteException { + return DeviceSNManager.getDeviceSN(); + } + }; +} 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 1a4d020..7f8ba92 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; @@ -14,7 +17,7 @@ import com.xwad.os.bean.BaseResponse; import com.xwad.os.bean.UserInfo; import com.xwad.os.config.CommonConfig; import com.xwad.os.gson.GsonUtils; -import com.xwad.os.jxw.JxwPackageConfig; +import com.xwad.os.manager.DeviceSNManager; import com.xwad.os.network.NetInterfaceManager; import com.xwad.os.service.ManagerService; import com.xwad.os.utils.ActivationUtil; @@ -23,8 +26,12 @@ 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; +import java.util.function.Function; +import java.util.function.Predicate; import java.util.stream.Collectors; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; @@ -114,15 +121,16 @@ public class MainSPresenter implements MainSContact.Presenter { UserInfo userInfo = userInfoBaseResponse.data; int vip_level_id = userInfo.getVip_level_id(); if (vip_level_id != 0) { - if (!ApkUtils.isAvailable(mContext, JxwPackageConfig.JXW_LAUNCHER_PACKAGE_NAME)) { - getAppInfo(JxwPackageConfig.JXW_LAUNCHER_PACKAGE_NAME); - } - if (!ApkUtils.isAvailable(mContext, "com.jxw.download")) { - getAppInfo("com.jxw.download"); - } - if (!ApkUtils.isAvailable(mContext, "com.study.flashplayer")) { - getAppInfo("com.study.flashplayer"); - } +// if (!ApkUtils.isAvailable(mContext, JxwPackageConfig.JXW_LAUNCHER_PACKAGE_NAME)) { +// getAppInfo(JxwPackageConfig.JXW_LAUNCHER_PACKAGE_NAME); +// } +// if (!ApkUtils.isAvailable(mContext, "com.jxw.download")) { +// getAppInfo("com.jxw.download"); +// } +// if (!ApkUtils.isAvailable(mContext, "com.study.flashplayer")) { +// getAppInfo("com.study.flashplayer"); +// } + getAdminAppDownload(); } } else if (userInfoBaseResponse.code == 401) { @@ -224,7 +232,7 @@ public class MainSPresenter implements MainSContact.Presenter { public void getScreenLock() { NetInterfaceManager.getInstance() .getSnInfoApi() - .getScreenshot(Utils.getSerial()) + .getScreenshot(DeviceSNManager.getDeviceSN()) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY)) @@ -282,12 +290,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) { @@ -319,6 +383,82 @@ 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); + } + } + } + }); + + Set packageSets = appInfoList.stream() + .filter(new Predicate() { + @Override + public boolean test(AppInfo appInfo) { + return appInfo.getIs_must_components() == 1; + } + }) + .map(new Function() { + @Override + public String apply(AppInfo appInfo) { + return appInfo.getApp_package(); + } + }) + .collect(Collectors.toSet()); + mMMKV.encode(CommonConfig.ESSENTIAL_COMPONENT_APPLICATIONS, packageSets); + } + } + + @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..ec3de0a 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,7 +96,9 @@ public class MainService extends BaseRxService implements MainSContact.MainSView mPresenter.updateDeviceInfo(); mPresenter.getAppIcon(); mPresenter.getScreenLock(); + mPresenter.getTestApp(); mPresenter.getAdminApp(); + mPresenter.getAdminAppDownload(); mPresenter.getSystemSettings(); mPresenter.getLockScreenPwd(); diff --git a/app/src/main/java/com/xwad/os/utils/ApkUtils.java b/app/src/main/java/com/xwad/os/utils/ApkUtils.java index 173343d..0db3363 100644 --- a/app/src/main/java/com/xwad/os/utils/ApkUtils.java +++ b/app/src/main/java/com/xwad/os/utils/ApkUtils.java @@ -597,6 +597,7 @@ public class ApkUtils { * @param context 上下文 * @param filePath apk文件路径 */ + @Deprecated public static void installApp(Context context, String filePath) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { installAppatPie(context, filePath); @@ -853,9 +854,9 @@ public class ApkUtils { } } - public static boolean isUpdate(Context context, AppInfo appUpdateInfo) { - String packageName = appUpdateInfo.getApp_package(); - long versionCode = appUpdateInfo.getApp_version_code(); + public static boolean isUpdate(Context context, AppInfo appInfo) { + String packageName = appInfo.getApp_package(); + long versionCode = appInfo.getApp_version_code(); return isUpdate(context, packageName, versionCode); } diff --git a/app/src/main/java/com/xwad/os/utils/FileUtils.java b/app/src/main/java/com/xwad/os/utils/FileUtils.java index c07e923..54ff164 100644 --- a/app/src/main/java/com/xwad/os/utils/FileUtils.java +++ b/app/src/main/java/com/xwad/os/utils/FileUtils.java @@ -269,7 +269,7 @@ public class FileUtils { String fileMd5 = com.blankj.utilcode.util.FileUtils.getFileMD5ToString(file); Log.e("ariaDownload", "fileMD5 = " + fileMd5); if (fileMd5.equalsIgnoreCase(app_md5)) { - ApkUtils.installApp(context, file.getAbsolutePath()); + ApkUtils.installApkFile(context, file.getAbsolutePath()); } else { file.delete(); Aria.download(context) 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 ee45cd2..3a14de3 100644 --- a/app/src/main/java/com/xwad/os/utils/OpenApkUtils.java +++ b/app/src/main/java/com/xwad/os/utils/OpenApkUtils.java @@ -25,6 +25,7 @@ import com.hjq.toast.Toaster; import com.tencent.mmkv.MMKV; import com.xwad.os.R; import com.xwad.os.activity.activation.ActivationActivity; +import com.xwad.os.activity.download.DownloadActivity; import com.xwad.os.activity.login.LoginActivity; import com.xwad.os.bean.AppInfo; import com.xwad.os.bean.BaseResponse; @@ -689,16 +690,6 @@ public class OpenApkUtils { } public void openJxwAppWithParam(Activity activity, String paramStr, boolean checkInstall) { - if (checkInstall) { - if (!ApkUtils.isAvailable(activity, "com.jxw.launcher") || !ApkUtils.isAvailable(activity, "com.jxw.download")) { - DefaultAppsDialog appsDialog = new DefaultAppsDialog(activity); - appsDialog.show(); - Toaster.show("请先安装必备组件"); - return; - } - } - -// if (!BuildConfig.DEBUG){ if (!ActivationUtil.getInstance().isLogin()) { Toaster.show("请先登录"); activity.startActivity(new Intent(activity, LoginActivity.class)); @@ -711,15 +702,39 @@ public class OpenApkUtils { return; } + if (checkInstall) { + if (!checkEssentialAppAllInstall()) { + activity.startActivity(new Intent(activity, DownloadActivity.class)); +// DefaultAppsDialog appsDialog = new DefaultAppsDialog(activity); +// appsDialog.show(); + Toaster.show("请先安装必备组件"); + return; + } + } + if (TextUtils.isEmpty(paramStr)) { Log.e(TAG, "context为空或参数字符串为空"); return; } -// } openJxwApp(activity, paramStr); } + private boolean checkEssentialAppAllInstall() { + Set essentialAppSets = mMMKV.decodeStringSet(CommonConfig.ESSENTIAL_COMPONENT_APPLICATIONS, CommonConfig.ESSENTIAL_APPLICATIONS_SETS); + Log.e(TAG, "checkEssentialAppAllInstall: " + essentialAppSets); + boolean allTrue = essentialAppSets.stream().allMatch(new Predicate() { + @Override + public boolean test(String s) { + boolean install = ApkUtils.isAvailable(mContext, s); + Log.e(TAG, "checkEssentialAppAllInstall: " + s + " " + install); + return install; + } + }); + Log.e(TAG, "checkEssentialAppAllInstall: " + allTrue); + return allTrue; + } + /** * 根据参数字符串打开对应页面 * @@ -864,6 +879,48 @@ public class OpenApkUtils { } } + public void showDownloadDialog(Activity context, AppInfo appInfo, String conetnt) { + 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(conetnt); + } + 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/java/com/xwad/os/utils/Utils.java b/app/src/main/java/com/xwad/os/utils/Utils.java index 3a071b9..b3c1595 100644 --- a/app/src/main/java/com/xwad/os/utils/Utils.java +++ b/app/src/main/java/com/xwad/os/utils/Utils.java @@ -1,6 +1,7 @@ package com.xwad.os.utils; import android.Manifest; +import android.app.Activity; import android.app.ActivityManager; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; @@ -10,6 +11,7 @@ import android.content.ContextWrapper; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; @@ -44,6 +46,7 @@ import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeWriter; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; import com.tencent.mmkv.MMKV; +import com.xwad.os.BuildConfig; import com.xwad.os.R; import com.xwad.os.config.CommonConfig; import com.xwad.os.network.NetInterfaceManager; @@ -66,7 +69,10 @@ import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; +import java.util.function.Function; +import java.util.function.Predicate; import java.util.regex.Pattern; +import java.util.stream.Collectors; import static android.content.Context.WIFI_SERVICE; @@ -101,6 +107,8 @@ public class Utils { // } // return serial; // } + + public static String getAndroiodScreenProperty(Context context) { Log.e("getAndroiodScreenProperty", "heightPixels:" + context.getResources().getDisplayMetrics().heightPixels); Log.e("getAndroiodScreenProperty", "widthPixels:" + context.getResources().getDisplayMetrics().widthPixels); @@ -474,39 +482,57 @@ public class Utils { return powerManager.isInteractive(); } -// public static void exitDesktop(Activity context) { -// if ("HONOR".equalsIgnoreCase(Build.BRAND)) { -//// AdminManager.getInstance().exitDesktop(); -//// AdminManager.getInstance().setDefaultDesktop("com.hihonor.android.launcher"); -// } else { -// if ("U807".equals(BuildConfig.platform) && ApkUtils.isAvailable(context, "com.uiuipad.os")) { -// AdminManager.getInstance().setDefaultLauncher("com.uiuipad.os"); -// } else { -// AdminManager.getInstance().setDefaultLauncher(ApkUtils.ANDROID_LAUNCHER3_PACKAGE_NAME); -// } -// -// if (Build.VERSION.SDK_INT > Build.VERSION_CODES.Q) { -// if ("U807".equals(BuildConfig.platform) && ApkUtils.isAvailable(context, "com.uiuipad.os")) { -// -// if (!ApkUtils.openPackage(context, "com.uiuipad.os", "com.uiuipad.os.Launcher")) { -// ApkUtils.gotoLauncher(context); -// } -// } else { -// -// if (!ApkUtils.openPackage(context, ApkUtils.ANDROID_LAUNCHER3_PACKAGE_NAME, ApkUtils.ANDROID_LAUNCHER3_Quickstep_CLASS_NAME)) { -// ApkUtils.gotoLauncher(context); -// } -// } -// } else { -// -// if (!ApkUtils.openPackage(context, ApkUtils.ANDROID_LAUNCHER3_PACKAGE_NAME, ApkUtils.ANDROID_LAUNCHER3_CLASS_NAME)) { -// ApkUtils.gotoLauncher(context); -// } -// } -// } -// context.finish(); -// System.exit(0); -// } + public static void exitDesktop(Activity activity) { + activity.startActivity(new Intent(Settings.ACTION_HOME_SETTINGS)); + + List componentNames = getAllLauncherApps(activity); + Log.e(TAG, "exitDesktop: " + componentNames); + if (componentNames != null && componentNames.size() != 0) { + ComponentName componentName = componentNames.get(0); + Intent intent = new Intent(); + intent.setComponent(componentName); + try { + activity.startActivity(intent); + } catch (Exception e) { + Log.e(TAG, "exitDesktop: " + e.getMessage()); + } + } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + activity.finishAndRemoveTask(); + } else { + activity.finishAffinity(); + } + android.os.Process.killProcess(android.os.Process.myPid()); + System.exit(0); + } + + private static List getAllLauncherApps(Context context) { + PackageManager packageManager = context.getPackageManager(); + + // 构建用于查询桌面应用的Intent + Intent intent = new Intent(Intent.ACTION_MAIN); + intent.addCategory(Intent.CATEGORY_HOME); + + // 查询所有可以处理该Intent的Activity + List resolveInfoList = packageManager.queryIntentActivities(intent, PackageManager.MATCH_ALL); + + List launcherPackageList = resolveInfoList.stream().filter(new Predicate() { + @Override + public boolean test(ResolveInfo resolveInfo) { + return !BuildConfig.APPLICATION_ID.equals(resolveInfo.activityInfo.packageName) + || !"com.jxw.launcher".equals(resolveInfo.activityInfo.packageName) + || !"com.handuan.os".equals(resolveInfo.activityInfo.packageName); + } + }).map(new Function() { + @Override + public ComponentName apply(ResolveInfo resolveInfo) { + return resolveInfo.getComponentInfo().getComponentName(); + } + }).collect(Collectors.toList()); + + return launcherPackageList; + } public static void triggerRebirth(Context context) { PackageManager packageManager = context.getPackageManager(); diff --git a/app/src/main/res/drawable-hdpi/icon_back1.png b/app/src/main/res/drawable-hdpi/icon_back1.png new file mode 100644 index 0000000000000000000000000000000000000000..e4b6c8bdcf2bf43fa8e84aa086827ce77fe66705 GIT binary patch literal 1424 zcmXYxeK=HE9LH~ww+2Hq%n(Z&q1eW3d6}_|%rHYr<8AaJTd@&EF_)1Iy^zLJ^eCai zP~>$6vGLG`u|^4r$V)`ErFJW&bZ73KYxjA6_uO;7=X1Wl-}(J<&iQQj(AF~2f*?qn z%VF`r{~-2hsDROf5gG9{hwiA4B{ZbJe^}fYV6?J zD6mujg%OTAM4>jAKVsvLU1Vc4Rt#8z0F}^S-~+0~ZnPP616wLUJsXoz8X!S!5Cp6? z#i8_gga*Vg)FuLD!~+uRn@cq6BE*vVgI2)Ek5g$_vyaB|w)+y3#ubUTzg4J;3B@Mb zT1D61)DKpu6kA-&Xc#kYNGKSqSIw&{km^gn-;hX_*VYtO5#Cl8PL!;yt|~RDG_1)> zzP?&)@ElQ}tku&|t5h?>Uw>Avse7_2WtAzciYM1WH%NtAD{y*g6=ZV0O4}#qMF>(! z=CWM<4oy594Nn|k;-TlC0|tfD=K=?Z4!iu5krCfv<=N*-*=6G=I&GzaqWMgx&9)DF z=Wd3-I{vXmw2@GmJsKaLC+4u&QXtg?Ht2W4orsTrriy@m`2Xh%^Q!$PfEB`1@o;7+vsV z_~2?%+44fYP{MuRLZY>uhlp{=ed3~dtNQ3vQii)Hm6TLUIP+CPO6uJA19iXsVur-@ z{wMtInQzV`(U4Gs$+pDi z+$asWD%txE_FKVr8Cn~y7J>{i#`L7z?ggY&~`bQCR3bxbb}rh4gJ5q8`p${S4wa`Yp<`^#5%zBA0>Sk2rkVlBU-f2J-WkH=aE zo6q98SKDuuPit1dsl~CHnlNYNLSW=T|1ZKf@4AfZr~7nVhg@7o()>?M#~k5NNF6V5 zg8FoI-?!pIhMTqRq8_~@^Hss92O%d4RP literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/icon_btk.png b/app/src/main/res/drawable-hdpi/icon_btk.png new file mode 100644 index 0000000000000000000000000000000000000000..94d20713ccfc6e4fd0957b60566e2cc5ca969681 GIT binary patch literal 35050 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%0Dn2570 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/icon_qdy.webp b/app/src/main/res/drawable-hdpi/icon_qdy.webp new file mode 100644 index 0000000000000000000000000000000000000000..c0b3b9e89c7071c644321ccaeb9ba5a625a31b53 GIT binary patch literal 20840 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�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 literal 0 HcmV?d00001 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/drawable/ic_update.xml b/app/src/main/res/drawable/ic_update.xml new file mode 100644 index 0000000..88c0179 --- /dev/null +++ b/app/src/main/res/drawable/ic_update.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_activation.xml b/app/src/main/res/layout/activity_activation.xml index 4defda8..0912630 100644 --- a/app/src/main/res/layout/activity_activation.xml +++ b/app/src/main/res/layout/activity_activation.xml @@ -119,7 +119,8 @@ + android:layout_weight="1" + android:visibility="gone"> + android:layout_height="wrap_content"> - + app:layout_constraintTop_toTopOf="parent"> + + + + + + + android:layout_height="wrap_content" + android:layout_marginTop="4dp"> + + + + + + + + + + + + android:src="@drawable/icon_alipay" + android:visibility="gone" /> - - - - - - - - - - - - - - - - - - + app:layout_constraintTop_toTopOf="parent" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file 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..972a2e1 --- /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/book_layout_title_bar.xml b/app/src/main/res/layout/book_layout_title_bar.xml new file mode 100644 index 0000000..7cecdbc --- /dev/null +++ b/app/src/main/res/layout/book_layout_title_bar.xml @@ -0,0 +1,35 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_default_apps.xml b/app/src/main/res/layout/dialog_default_apps.xml index 057a7d0..06fe9ec 100644 --- a/app/src/main/res/layout/dialog_default_apps.xml +++ b/app/src/main/res/layout/dialog_default_apps.xml @@ -23,7 +23,7 @@ android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_marginTop="3dp" - android:text="必备组件" + android:text="组件安装" android:textColor="#333333" android:textSize="12sp" /> diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml index 57b416d..85a915c 100644 --- a/app/src/main/res/layout/fragment_mine.xml +++ b/app/src/main/res/layout/fragment_mine.xml @@ -763,7 +763,7 @@ android:layout_gravity="center_horizontal" android:layout_marginTop="2dp" android:singleLine="true" - android:text="必备组件" + android:text="组件安装" android:textColor="@color/white" android:textSize="@dimen/mine_app_name_size" app:layout_constraintEnd_toEndOf="@+id/app_icon11" diff --git a/app/src/main/res/layout/item_app_info.xml b/app/src/main/res/layout/item_app_info.xml new file mode 100644 index 0000000..d92a5f7 --- /dev/null +++ b/app/src/main/res/layout/item_app_info.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_dialog_app_force.xml b/app/src/main/res/layout/item_dialog_app_force.xml index b410b8d..7584823 100644 --- a/app/src/main/res/layout/item_dialog_app_force.xml +++ b/app/src/main/res/layout/item_dialog_app_force.xml @@ -1,6 +1,7 @@ @@ -31,7 +32,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" - android:text="当前壁纸" + tools:text="当前壁纸" android:textColor="#333333" android:textSize="9sp" app:layout_constraintBottom_toBottomOf="parent" diff --git a/app/src/main/res/values/colors_jxw.xml b/app/src/main/res/values/colors_jxw.xml index 7ca640f..f638f7f 100644 --- a/app/src/main/res/values/colors_jxw.xml +++ b/app/src/main/res/values/colors_jxw.xml @@ -10,6 +10,7 @@ #bbffffff #ff33b5e5 + #333333 \ No newline at end of file diff --git a/app/src/main/res/values/string_jxw.xml b/app/src/main/res/values/string_jxw.xml index 8611f45..634efb2 100644 --- a/app/src/main/res/values/string_jxw.xml +++ b/app/src/main/res/values/string_jxw.xml @@ -836,4 +836,8 @@ 设\t置 pag/exp_baoxiang_ywc.pag pag/exp_liwuhe_ywc.pag + + + 暂无内容,请先去下载吧! + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 997915f..4af8b59 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -70,5 +70,6 @@ 为学王365提供管控功能,请激活后使用 开启我吧 + 1、必备组件维持系统基本运行,请优先安装,并【允许】所有权限弹窗请求; diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index ac4f8c6..e993d30 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -137,4 +137,24 @@ stateVisible|adjustPan + + + + + +