version:1.2.3
fix: update:必备组件增加更新状态,增加必备组件检测
This commit is contained in:
@@ -17,8 +17,8 @@ android {
|
|||||||
minSdkVersion 23
|
minSdkVersion 23
|
||||||
targetSdkVersion 29
|
targetSdkVersion 29
|
||||||
|
|
||||||
versionCode 23
|
versionCode 24
|
||||||
versionName "1.2.2"
|
versionName "1.2.3"
|
||||||
|
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,11 @@ import android.content.BroadcastReceiver;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
|
import android.graphics.Color;
|
||||||
|
import android.text.SpannableString;
|
||||||
|
import android.text.Spanned;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
import android.text.style.ForegroundColorSpan;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
@@ -51,6 +55,10 @@ public class DownloadActivity extends BaseMvvmActivity<DownloadViewModel, Activi
|
|||||||
mViewDataBinding.rvContent.setLayoutManager(gridLayoutManager);
|
mViewDataBinding.rvContent.setLayoutManager(gridLayoutManager);
|
||||||
mViewDataBinding.rvContent.setAdapter(mAppInfoAdapter);
|
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();
|
registerAppChangedReceiver();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,16 +4,20 @@ import android.util.Log;
|
|||||||
|
|
||||||
import androidx.lifecycle.MutableLiveData;
|
import androidx.lifecycle.MutableLiveData;
|
||||||
|
|
||||||
|
import com.tencent.mmkv.MMKV;
|
||||||
import com.trello.rxlifecycle4.RxLifecycle;
|
import com.trello.rxlifecycle4.RxLifecycle;
|
||||||
import com.trello.rxlifecycle4.android.ActivityEvent;
|
import com.trello.rxlifecycle4.android.ActivityEvent;
|
||||||
import com.xwad.os.base.mvvm.BaseViewModel;
|
import com.xwad.os.base.mvvm.BaseViewModel;
|
||||||
import com.xwad.os.bean.AppInfo;
|
import com.xwad.os.bean.AppInfo;
|
||||||
import com.xwad.os.bean.BaseResponse;
|
import com.xwad.os.bean.BaseResponse;
|
||||||
|
import com.xwad.os.config.CommonConfig;
|
||||||
import com.xwad.os.databinding.ActivityDownloadBinding;
|
import com.xwad.os.databinding.ActivityDownloadBinding;
|
||||||
import com.xwad.os.network.NetInterfaceManager;
|
import com.xwad.os.network.NetInterfaceManager;
|
||||||
|
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.function.Function;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@@ -23,6 +27,8 @@ import io.reactivex.rxjava3.disposables.Disposable;
|
|||||||
|
|
||||||
public class DownloadViewModel extends BaseViewModel<ActivityDownloadBinding, ActivityEvent> {
|
public class DownloadViewModel extends BaseViewModel<ActivityDownloadBinding, ActivityEvent> {
|
||||||
|
|
||||||
|
MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ActivityDownloadBinding getVDBinding() {
|
public ActivityDownloadBinding getVDBinding() {
|
||||||
return binding;
|
return binding;
|
||||||
@@ -70,6 +76,22 @@ public class DownloadViewModel extends BaseViewModel<ActivityDownloadBinding, Ac
|
|||||||
}
|
}
|
||||||
}).collect(Collectors.toList());
|
}).collect(Collectors.toList());
|
||||||
mListMutableLiveData.setValue(forceAppInfoList);
|
mListMutableLiveData.setValue(forceAppInfoList);
|
||||||
|
Set<String> packageSets = appInfoList.stream()
|
||||||
|
.filter(new Predicate<AppInfo>() {
|
||||||
|
@Override
|
||||||
|
public boolean test(AppInfo appInfo) {
|
||||||
|
return appInfo.getIs_must_components() == 1;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.map(new Function<AppInfo, String>() {
|
||||||
|
@Override
|
||||||
|
public String apply(AppInfo appInfo) {
|
||||||
|
return appInfo.getApp_package();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
mMMKV.encode(CommonConfig.ESSENTIAL_COMPONENT_APPLICATIONS, packageSets);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ import com.tencent.mmkv.MMKV;
|
|||||||
import com.xwad.os.BuildConfig;
|
import com.xwad.os.BuildConfig;
|
||||||
import com.xwad.os.R;
|
import com.xwad.os.R;
|
||||||
import com.xwad.os.activity.activation.ActivationActivity;
|
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.login.LoginActivity;
|
||||||
import com.xwad.os.activity.permission.PermissionActivity;
|
import com.xwad.os.activity.permission.PermissionActivity;
|
||||||
import com.xwad.os.activity.update.UpdateActivity;
|
import com.xwad.os.activity.update.UpdateActivity;
|
||||||
@@ -83,7 +84,6 @@ import com.xwad.os.utils.DataUtil;
|
|||||||
import com.xwad.os.utils.JgyUtils;
|
import com.xwad.os.utils.JgyUtils;
|
||||||
import com.xwad.os.utils.OpenApkUtils;
|
import com.xwad.os.utils.OpenApkUtils;
|
||||||
import com.xwad.os.utils.Utils;
|
import com.xwad.os.utils.Utils;
|
||||||
import com.xwad.os.view.jxw.widget.DefaultAppsDialog;
|
|
||||||
|
|
||||||
import org.greenrobot.eventbus.EventBus;
|
import org.greenrobot.eventbus.EventBus;
|
||||||
import org.greenrobot.eventbus.Subscribe;
|
import org.greenrobot.eventbus.Subscribe;
|
||||||
@@ -862,8 +862,9 @@ public class HomeActivity extends BaseMvvmActivity<HomeViewModel, ActivityHomeBi
|
|||||||
// mViewPager.setCurrentItem(defaultCurrent);
|
// mViewPager.setCurrentItem(defaultCurrent);
|
||||||
break;
|
break;
|
||||||
case "show_activation_dialog":
|
case "show_activation_dialog":
|
||||||
DefaultAppsDialog appsDialog = new DefaultAppsDialog(this);
|
startActivity(new Intent(this, DownloadActivity.class));
|
||||||
appsDialog.show();
|
// DefaultAppsDialog appsDialog = new DefaultAppsDialog(this);
|
||||||
|
// appsDialog.show();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import android.util.Log;
|
|||||||
import androidx.lifecycle.MutableLiveData;
|
import androidx.lifecycle.MutableLiveData;
|
||||||
|
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.hjq.toast.Toaster;
|
|
||||||
import com.tencent.mmkv.MMKV;
|
import com.tencent.mmkv.MMKV;
|
||||||
import com.trello.rxlifecycle4.RxLifecycle;
|
import com.trello.rxlifecycle4.RxLifecycle;
|
||||||
import com.trello.rxlifecycle4.android.ActivityEvent;
|
import com.trello.rxlifecycle4.android.ActivityEvent;
|
||||||
@@ -188,7 +187,7 @@ public class HomeViewModel extends BaseViewModel<ActivityHomeBinding, ActivityEv
|
|||||||
@Override
|
@Override
|
||||||
public void onError(@NonNull Throwable e) {
|
public void onError(@NonNull Throwable e) {
|
||||||
Log.e("checkUpdate", "onError: ");
|
Log.e("checkUpdate", "onError: ");
|
||||||
Toaster.show("网络连接失败");
|
// Toaster.show("网络连接失败");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import android.view.View;
|
|||||||
import androidx.lifecycle.Observer;
|
import androidx.lifecycle.Observer;
|
||||||
|
|
||||||
import com.xwad.os.R;
|
import com.xwad.os.R;
|
||||||
|
import com.xwad.os.activity.download.DownloadActivity;
|
||||||
import com.xwad.os.activity.home.HomeActivity;
|
import com.xwad.os.activity.home.HomeActivity;
|
||||||
import com.xwad.os.base.mvvm.BaseMvvmActivity;
|
import com.xwad.os.base.mvvm.BaseMvvmActivity;
|
||||||
import com.xwad.os.databinding.ActivityLoginSuccessfulBinding;
|
import com.xwad.os.databinding.ActivityLoginSuccessfulBinding;
|
||||||
@@ -39,6 +40,12 @@ public class LoginSuccessfulActivity extends BaseMvvmActivity<LoginSuccessfulVie
|
|||||||
Utils.triggerRebirth(LoginSuccessfulActivity.this);
|
Utils.triggerRebirth(LoginSuccessfulActivity.this);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
mViewModel.mCompleteLiveData.observe(this, new Observer<Boolean>() {
|
||||||
|
@Override
|
||||||
|
public void onChanged(Boolean aBoolean) {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -57,7 +64,9 @@ public class LoginSuccessfulActivity extends BaseMvvmActivity<LoginSuccessfulVie
|
|||||||
|
|
||||||
public class BtnClick {
|
public class BtnClick {
|
||||||
public void toHome(View view) {
|
public void toHome(View view) {
|
||||||
mViewModel.getAppInfo();
|
// mViewModel.getAppInfo();
|
||||||
|
mViewModel.getAdminAppDownload();
|
||||||
|
startActivity(new Intent(LoginSuccessfulActivity.this, DownloadActivity.class));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,10 +4,13 @@ import android.util.Log;
|
|||||||
|
|
||||||
import androidx.lifecycle.MutableLiveData;
|
import androidx.lifecycle.MutableLiveData;
|
||||||
|
|
||||||
|
import com.tencent.mmkv.MMKV;
|
||||||
|
import com.trello.rxlifecycle4.RxLifecycle;
|
||||||
import com.trello.rxlifecycle4.android.ActivityEvent;
|
import com.trello.rxlifecycle4.android.ActivityEvent;
|
||||||
import com.xwad.os.base.mvvm.BaseViewModel;
|
import com.xwad.os.base.mvvm.BaseViewModel;
|
||||||
import com.xwad.os.bean.AppInfo;
|
import com.xwad.os.bean.AppInfo;
|
||||||
import com.xwad.os.bean.BaseResponse;
|
import com.xwad.os.bean.BaseResponse;
|
||||||
|
import com.xwad.os.config.CommonConfig;
|
||||||
import com.xwad.os.databinding.ActivityLoginSuccessfulBinding;
|
import com.xwad.os.databinding.ActivityLoginSuccessfulBinding;
|
||||||
import com.xwad.os.jxw.JxwPackageConfig;
|
import com.xwad.os.jxw.JxwPackageConfig;
|
||||||
import com.xwad.os.network.NetInterfaceManager;
|
import com.xwad.os.network.NetInterfaceManager;
|
||||||
@@ -16,7 +19,11 @@ import com.xwad.os.utils.FileUtils;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.function.Consumer;
|
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;
|
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
|
||||||
import io.reactivex.rxjava3.annotations.NonNull;
|
import io.reactivex.rxjava3.annotations.NonNull;
|
||||||
@@ -27,11 +34,63 @@ import io.reactivex.rxjava3.functions.Function3;
|
|||||||
import io.reactivex.rxjava3.schedulers.Schedulers;
|
import io.reactivex.rxjava3.schedulers.Schedulers;
|
||||||
|
|
||||||
public class LoginSuccessfulViewModel extends BaseViewModel<ActivityLoginSuccessfulBinding, ActivityEvent> {
|
public class LoginSuccessfulViewModel extends BaseViewModel<ActivityLoginSuccessfulBinding, ActivityEvent> {
|
||||||
|
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDestroy() {
|
public void onDestroy() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public MutableLiveData<Boolean> mCompleteLiveData = new MutableLiveData<>();
|
||||||
|
|
||||||
|
public void getAdminAppDownload() {
|
||||||
|
NetInterfaceManager.getInstance().getAdminAppObservable()
|
||||||
|
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
|
||||||
|
.subscribe(new Observer<BaseResponse<List<AppInfo>>>() {
|
||||||
|
@Override
|
||||||
|
public void onSubscribe(@NonNull Disposable d) {
|
||||||
|
Log.e("getAdminAppDownload", "onSubscribe: ");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onNext(@NonNull BaseResponse<List<AppInfo>> listBaseResponse) {
|
||||||
|
Log.e("getAdminAppDownload", "onNext: " + listBaseResponse);
|
||||||
|
if (listBaseResponse.code == 200) {
|
||||||
|
List<AppInfo> appInfoList = listBaseResponse.data;
|
||||||
|
Set<String> packageSets = appInfoList.stream()
|
||||||
|
.filter(new Predicate<AppInfo>() {
|
||||||
|
@Override
|
||||||
|
public boolean test(AppInfo appInfo) {
|
||||||
|
return appInfo.getIs_must_components() == 1;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.map(new Function<AppInfo, String>() {
|
||||||
|
@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<Boolean> mBooleanMutableLiveData = new MutableLiveData<>();
|
public MutableLiveData<Boolean> mBooleanMutableLiveData = new MutableLiveData<>();
|
||||||
|
|
||||||
public void getAppInfo() {
|
public void getAppInfo() {
|
||||||
|
|||||||
@@ -198,7 +198,11 @@ public class UserActivity extends BaseMvvmActivity<UserViewModel, ActivityUserBi
|
|||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
|
if (ActivationUtil.getInstance().isLogin()) {
|
||||||
|
mViewModel.getUserAvatarInfo();
|
||||||
|
} else {
|
||||||
|
setLocalData();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final static int DEBUGCOUNTS = 8;//点击次数
|
final static int DEBUGCOUNTS = 8;//点击次数
|
||||||
|
|||||||
@@ -60,17 +60,27 @@ public class AppInfoAdapter extends RecyclerView.Adapter<AppInfoAdapter.Holder>
|
|||||||
}
|
}
|
||||||
if (ApkUtils.isAvailable(mContext, appInfo.getApp_package())) {
|
if (ApkUtils.isAvailable(mContext, appInfo.getApp_package())) {
|
||||||
holder.iv_download.setVisibility(View.GONE);
|
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 {
|
} else {
|
||||||
holder.iv_download.setVisibility(View.VISIBLE);
|
holder.iv_download.setVisibility(View.VISIBLE);
|
||||||
|
holder.iv_update.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
holder.rl_root.setOnClickListener(new View.OnClickListener() {
|
holder.rl_root.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
if (ApkUtils.isAvailable(mContext, appInfo.getApp_package())) {
|
if (ApkUtils.isAvailable(mContext, appInfo.getApp_package())) {
|
||||||
ApkUtils.openPackage(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 {
|
} else {
|
||||||
if (ActivationUtil.getInstance().isActivation()) {
|
if (ActivationUtil.getInstance().isActivation()) {
|
||||||
OpenApkUtils.getInstance().showDownloadDialog(mContext, appInfo);
|
OpenApkUtils.getInstance().showDownloadDialog(mContext, appInfo, "未安装\"" + appInfo.getApp_name() + "\"\n下载后可继续使用!");
|
||||||
} else {
|
} else {
|
||||||
Toaster.show("请先激活设备");
|
Toaster.show("请先激活设备");
|
||||||
}
|
}
|
||||||
@@ -86,7 +96,7 @@ public class AppInfoAdapter extends RecyclerView.Adapter<AppInfoAdapter.Holder>
|
|||||||
|
|
||||||
public class Holder extends RecyclerView.ViewHolder {
|
public class Holder extends RecyclerView.ViewHolder {
|
||||||
ConstraintLayout rl_root;
|
ConstraintLayout rl_root;
|
||||||
ImageView iv_app_icon, iv_download;
|
ImageView iv_app_icon, iv_download, iv_update;
|
||||||
TextView tv_app_name;
|
TextView tv_app_name;
|
||||||
|
|
||||||
public Holder(@NonNull View itemView) {
|
public Holder(@NonNull View itemView) {
|
||||||
@@ -94,6 +104,7 @@ public class AppInfoAdapter extends RecyclerView.Adapter<AppInfoAdapter.Holder>
|
|||||||
rl_root = itemView.findViewById(R.id.rl_root);
|
rl_root = itemView.findViewById(R.id.rl_root);
|
||||||
iv_app_icon = itemView.findViewById(R.id.iv_app_icon);
|
iv_app_icon = itemView.findViewById(R.id.iv_app_icon);
|
||||||
iv_download = itemView.findViewById(R.id.iv_download);
|
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);
|
tv_app_name = itemView.findViewById(R.id.tv_app_name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,23 @@
|
|||||||
package com.xwad.os.config;
|
package com.xwad.os.config;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
public class CommonConfig {
|
public class CommonConfig {
|
||||||
public static final String MMKV_ID = "InterProcessKV";
|
public static final String MMKV_ID = "InterProcessKV";
|
||||||
|
|
||||||
public static final String CLOUD_LESSON_SETTINGS_KEY = "cloud_lesson_settings_key";
|
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 DISALLOWED_RUNNING_APP_KEY = "disallowed_running_app";
|
||||||
|
public static final String ESSENTIAL_COMPONENT_APPLICATIONS = "essential_component_applications";
|
||||||
|
public static final Set<String> ESSENTIAL_APPLICATIONS_SETS = new HashSet<String>() {{
|
||||||
|
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";
|
public static final String ALIYUN_PUSH_ID = "aliyun_push_id_key";
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,9 @@ import com.hjq.toast.Toaster;
|
|||||||
import com.tencent.mmkv.MMKV;
|
import com.tencent.mmkv.MMKV;
|
||||||
import com.xwad.os.R;
|
import com.xwad.os.R;
|
||||||
import com.xwad.os.activity.ExitActivity;
|
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.download.DownloadActivity;
|
||||||
|
import com.xwad.os.activity.login.LoginActivity;
|
||||||
import com.xwad.os.activity.user.UserActivity;
|
import com.xwad.os.activity.user.UserActivity;
|
||||||
import com.xwad.os.base.mvvm.fragment.BaseMvvmFragment;
|
import com.xwad.os.base.mvvm.fragment.BaseMvvmFragment;
|
||||||
import com.xwad.os.bean.SnInfo;
|
import com.xwad.os.bean.SnInfo;
|
||||||
@@ -26,6 +28,7 @@ import com.xwad.os.databinding.FragmentMineBinding;
|
|||||||
import com.xwad.os.jxw.StudyRecordMng;
|
import com.xwad.os.jxw.StudyRecordMng;
|
||||||
import com.xwad.os.jxw.ToastUtil;
|
import com.xwad.os.jxw.ToastUtil;
|
||||||
import com.xwad.os.jxw.event.UpdateColorEvent;
|
import com.xwad.os.jxw.event.UpdateColorEvent;
|
||||||
|
import com.xwad.os.utils.ActivationUtil;
|
||||||
import com.xwad.os.utils.OpenApkUtils;
|
import com.xwad.os.utils.OpenApkUtils;
|
||||||
import com.xwad.os.view.jxw.view.dialog.QhbzDialog;
|
import com.xwad.os.view.jxw.view.dialog.QhbzDialog;
|
||||||
|
|
||||||
@@ -396,6 +399,18 @@ public class MineFragment extends BaseMvvmFragment<MineViewModel, FragmentMineBi
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void openAppsDialog(View view) {
|
public void openAppsDialog(View view) {
|
||||||
|
if (!ActivationUtil.getInstance().isLogin()) {
|
||||||
|
Toaster.show("请先登录");
|
||||||
|
startActivity(new Intent(mContext, LoginActivity.class));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ActivationUtil.getInstance().isActivation()) {
|
||||||
|
Toaster.show("请先激活后使用");
|
||||||
|
startActivity(new Intent(mContext, ActivationActivity.class));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
startActivity(new Intent(mContext, DownloadActivity.class));
|
startActivity(new Intent(mContext, DownloadActivity.class));
|
||||||
// DefaultAppsDialog appsDialog = new DefaultAppsDialog(getActivity());
|
// DefaultAppsDialog appsDialog = new DefaultAppsDialog(getActivity());
|
||||||
// appsDialog.show();
|
// appsDialog.show();
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ public class AccountFragment extends BaseMvvmFragment<AccountViewModel, Fragment
|
|||||||
// if (!ApkUtils.isAvailable(getCtx(), "com.study.flashplayer")) {
|
// if (!ApkUtils.isAvailable(getCtx(), "com.study.flashplayer")) {
|
||||||
// mViewModel.getAppInfo("com.study.flashplayer");
|
// mViewModel.getAppInfo("com.study.flashplayer");
|
||||||
// }
|
// }
|
||||||
mViewModel.getAdminAppDownload();
|
// mViewModel.getAdminAppDownload();
|
||||||
mViewModel.getActivation();
|
mViewModel.getActivation();
|
||||||
} else {
|
} else {
|
||||||
mViewDataBinding.tvVipName.setText("学王365AI旗舰版");
|
mViewDataBinding.tvVipName.setText("学王365AI旗舰版");
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import java.util.Comparator;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
import java.util.function.Function;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@@ -425,6 +426,22 @@ public class MainSPresenter implements MainSContact.Presenter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Set<String> packageSets = appInfoList.stream()
|
||||||
|
.filter(new Predicate<AppInfo>() {
|
||||||
|
@Override
|
||||||
|
public boolean test(AppInfo appInfo) {
|
||||||
|
return appInfo.getIs_must_components() == 1;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.map(new Function<AppInfo, String>() {
|
||||||
|
@Override
|
||||||
|
public String apply(AppInfo appInfo) {
|
||||||
|
return appInfo.getApp_package();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
mMMKV.encode(CommonConfig.ESSENTIAL_COMPONENT_APPLICATIONS, packageSets);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -98,6 +98,7 @@ public class MainService extends BaseRxService implements MainSContact.MainSView
|
|||||||
mPresenter.getScreenLock();
|
mPresenter.getScreenLock();
|
||||||
mPresenter.getTestApp();
|
mPresenter.getTestApp();
|
||||||
mPresenter.getAdminApp();
|
mPresenter.getAdminApp();
|
||||||
|
mPresenter.getAdminAppDownload();
|
||||||
mPresenter.getSystemSettings();
|
mPresenter.getSystemSettings();
|
||||||
mPresenter.getLockScreenPwd();
|
mPresenter.getLockScreenPwd();
|
||||||
|
|
||||||
|
|||||||
@@ -853,9 +853,9 @@ public class ApkUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isUpdate(Context context, AppInfo appUpdateInfo) {
|
public static boolean isUpdate(Context context, AppInfo appInfo) {
|
||||||
String packageName = appUpdateInfo.getApp_package();
|
String packageName = appInfo.getApp_package();
|
||||||
long versionCode = appUpdateInfo.getApp_version_code();
|
long versionCode = appInfo.getApp_version_code();
|
||||||
return isUpdate(context, packageName, versionCode);
|
return isUpdate(context, packageName, versionCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import com.hjq.toast.Toaster;
|
|||||||
import com.tencent.mmkv.MMKV;
|
import com.tencent.mmkv.MMKV;
|
||||||
import com.xwad.os.R;
|
import com.xwad.os.R;
|
||||||
import com.xwad.os.activity.activation.ActivationActivity;
|
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.login.LoginActivity;
|
||||||
import com.xwad.os.bean.AppInfo;
|
import com.xwad.os.bean.AppInfo;
|
||||||
import com.xwad.os.bean.BaseResponse;
|
import com.xwad.os.bean.BaseResponse;
|
||||||
@@ -35,7 +36,6 @@ import com.xwad.os.jxw.SPUtils;
|
|||||||
import com.xwad.os.mdm.AdminManager;
|
import com.xwad.os.mdm.AdminManager;
|
||||||
import com.xwad.os.network.NetInterfaceManager;
|
import com.xwad.os.network.NetInterfaceManager;
|
||||||
import com.xwad.os.service.DownloadService;
|
import com.xwad.os.service.DownloadService;
|
||||||
import com.xwad.os.view.jxw.widget.DefaultAppsDialog;
|
|
||||||
|
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
@@ -689,16 +689,6 @@ public class OpenApkUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void openJxwAppWithParam(Activity activity, String paramStr, boolean checkInstall) {
|
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()) {
|
if (!ActivationUtil.getInstance().isLogin()) {
|
||||||
Toaster.show("请先登录");
|
Toaster.show("请先登录");
|
||||||
activity.startActivity(new Intent(activity, LoginActivity.class));
|
activity.startActivity(new Intent(activity, LoginActivity.class));
|
||||||
@@ -711,15 +701,39 @@ public class OpenApkUtils {
|
|||||||
return;
|
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)) {
|
if (TextUtils.isEmpty(paramStr)) {
|
||||||
Log.e(TAG, "context为空或参数字符串为空");
|
Log.e(TAG, "context为空或参数字符串为空");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// }
|
|
||||||
|
|
||||||
openJxwApp(activity, paramStr);
|
openJxwApp(activity, paramStr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean checkEssentialAppAllInstall() {
|
||||||
|
Set<String> essentialAppSets = mMMKV.decodeStringSet(CommonConfig.ESSENTIAL_COMPONENT_APPLICATIONS, CommonConfig.ESSENTIAL_APPLICATIONS_SETS);
|
||||||
|
Log.e(TAG, "checkEssentialAppAllInstall: " + essentialAppSets);
|
||||||
|
boolean allTrue = essentialAppSets.stream().allMatch(new Predicate<String>() {
|
||||||
|
@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;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据参数字符串打开对应页面
|
* 根据参数字符串打开对应页面
|
||||||
*
|
*
|
||||||
@@ -859,14 +873,14 @@ public class OpenApkUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void showDownloadDialog(Activity context, AppInfo appInfo) {
|
public void showDownloadDialog(Activity context, AppInfo appInfo, String conetnt) {
|
||||||
Dialog dialog = new Dialog(context, R.style.ActionSheet);
|
Dialog dialog = new Dialog(context, R.style.ActionSheet);
|
||||||
Window window = dialog.getWindow();
|
Window window = dialog.getWindow();
|
||||||
View inflate = ((LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.download_dialog, null);
|
View inflate = ((LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.download_dialog, null);
|
||||||
TextView textView = inflate.findViewById(R.id.download_cancel);
|
TextView textView = inflate.findViewById(R.id.download_cancel);
|
||||||
TextView textView2 = inflate.findViewById(R.id.tag_title);
|
TextView textView2 = inflate.findViewById(R.id.tag_title);
|
||||||
if (!TextUtils.isEmpty(appInfo.getApp_name())) {
|
if (!TextUtils.isEmpty(appInfo.getApp_name())) {
|
||||||
textView2.setText("未安装\"" + appInfo.getApp_name() + "\"\n下载后可继续使用!");
|
textView2.setText(conetnt);
|
||||||
}
|
}
|
||||||
TextView textView3 = inflate.findViewById(R.id.download_ok);
|
TextView textView3 = inflate.findViewById(R.id.download_ok);
|
||||||
textView.setOnClickListener(new View.OnClickListener() {
|
textView.setOnClickListener(new View.OnClickListener() {
|
||||||
@@ -925,7 +939,7 @@ public class OpenApkUtils {
|
|||||||
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
// mContext.startForegroundService(intent);
|
// mContext.startForegroundService(intent);
|
||||||
// } else {
|
// } else {
|
||||||
mContext.startService(intent);
|
mContext.startService(intent);
|
||||||
// }
|
// }
|
||||||
dialog.dismiss();
|
dialog.dismiss();
|
||||||
}
|
}
|
||||||
|
|||||||
9
app/src/main/res/drawable/ic_update.xml
Normal file
9
app/src/main/res/drawable/ic_update.xml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="50dp"
|
||||||
|
android:height="50dp"
|
||||||
|
android:viewportWidth="1024"
|
||||||
|
android:viewportHeight="1024">
|
||||||
|
<path
|
||||||
|
android:pathData="M501.97,124.24c208.59,0 377.71,169.11 377.71,377.74 0,208.59 -169.11,377.71 -377.71,377.71 -208.62,0 -377.74,-169.11 -377.74,-377.71 0,-208.62 169.11,-377.74 377.74,-377.74zM359.45,546.79c-9.04,-28.79 -51.5,-22.29 -51.5,7.89v105.41l0.21,3.31a26.35,26.35 0,0 0,26.17 23.04l3.31,-0.21a26.35,26.35 0,0 0,23.01 -26.14v-13.73l4.28,4.1a202.09,202.09 0,0 0,329.79 -87.88,26.35 26.35,0 0,0 -50.27,-15.81 149.38,149.38 0,0 1,-285 0zM501.97,299.91a202.09,202.09 0,0 0,-192.78 141.43,26.35 26.35,0 1,0 50.3,15.81 149.38,149.38 0,0 1,284.97 0c9.04,28.76 51.5,22.29 51.5,-7.89v-105.41l-0.21,-3.31a26.35,26.35 0,0 0,-26.14 -23.04l-3.31,0.18a26.35,26.35 0,0 0,-23.04 26.17v13.7l-4.25,-4.1a201.82,201.82 0,0 0,-137.04 -53.55z"
|
||||||
|
android:fillColor="#3c77fc" />
|
||||||
|
</vector>
|
||||||
@@ -88,16 +88,80 @@
|
|||||||
style="@style/recycler_view_style"
|
style="@style/recycler_view_style"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
|
android:orientation="vertical"
|
||||||
|
app:layout_constraintBottom_toTopOf="@+id/linearLayout7"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/linearLayout7"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="80dp"
|
||||||
|
android:layout_marginEnd="80dp"
|
||||||
android:layout_marginBottom="8dp"
|
android:layout_marginBottom="8dp"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
app:layout_constraintBottom_toTopOf="@+id/download_ok"
|
app:layout_constraintBottom_toTopOf="@+id/download_ok">
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:duplicateParentState="true"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:text="注意事项:"
|
||||||
|
android:textColor="@color/res_text_color1"
|
||||||
|
android:textSize="@dimen/x30"
|
||||||
|
android:textStyle="bold"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_permission"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:layout_marginTop="4dp"
|
||||||
|
android:duplicateParentState="true"
|
||||||
|
android:text="@string/bibeizujian_permission"
|
||||||
|
android:textColor="@color/res_text_color1"
|
||||||
|
android:textSize="@dimen/x28"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:duplicateParentState="true"
|
||||||
|
android:text="2、“许可证校验”为正版验证程序,部分设备因系统限制,如未自动激活请重启APP或重启设备,若始终不能自动激活请联系客服索要许可证代码手动激活;"
|
||||||
|
android:textColor="@color/res_text_color1"
|
||||||
|
android:textSize="@dimen/x28"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:duplicateParentState="true"
|
||||||
|
android:text="3、其他应用列表请点击右上角下载安装,也可在学习界面点击相应功能按钮按需安装。"
|
||||||
|
android:textColor="@color/res_text_color1"
|
||||||
|
android:textSize="@dimen/x28"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/download_ok"
|
android:id="@+id/download_ok"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="28dp"
|
android:layout_height="28dp"
|
||||||
android:layout_marginBottom="32dp"
|
android:layout_marginBottom="24dp"
|
||||||
android:background="@drawable/download_ok_bg"
|
android:background="@drawable/download_ok_bg"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:onClick="@{click::downloadApp}"
|
android:onClick="@{click::downloadApp}"
|
||||||
|
|||||||
@@ -71,7 +71,7 @@
|
|||||||
style="@style/recycler_view_style"
|
style="@style/recycler_view_style"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
android:layout_marginBottom="32dp"
|
android:layout_marginBottom="24dp"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_centerInParent="true"
|
android:layout_centerInParent="true"
|
||||||
android:layout_marginTop="3dp"
|
android:layout_marginTop="3dp"
|
||||||
android:text="必备组件"
|
android:text="组件安装"
|
||||||
android:textColor="#333333"
|
android:textColor="#333333"
|
||||||
android:textSize="12sp" />
|
android:textSize="12sp" />
|
||||||
|
|
||||||
|
|||||||
@@ -763,7 +763,7 @@
|
|||||||
android:layout_gravity="center_horizontal"
|
android:layout_gravity="center_horizontal"
|
||||||
android:layout_marginTop="2dp"
|
android:layout_marginTop="2dp"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:text="必备组件"
|
android:text="组件安装"
|
||||||
android:textColor="@color/white"
|
android:textColor="@color/white"
|
||||||
android:textSize="@dimen/mine_app_name_size"
|
android:textSize="@dimen/mine_app_name_size"
|
||||||
app:layout_constraintEnd_toEndOf="@+id/app_icon11"
|
app:layout_constraintEnd_toEndOf="@+id/app_icon11"
|
||||||
|
|||||||
@@ -19,26 +19,39 @@
|
|||||||
android:id="@+id/iv_download"
|
android:id="@+id/iv_download"
|
||||||
android:layout_width="14dp"
|
android:layout_width="14dp"
|
||||||
android:layout_height="14dp"
|
android:layout_height="14dp"
|
||||||
android:layout_marginTop="32dp"
|
|
||||||
android:visibility="gone"
|
|
||||||
android:layout_marginStart="32dp"
|
android:layout_marginStart="32dp"
|
||||||
|
android:layout_marginTop="32dp"
|
||||||
android:adjustViewBounds="true"
|
android:adjustViewBounds="true"
|
||||||
android:scaleType="centerCrop"
|
android:scaleType="centerCrop"
|
||||||
android:src="@drawable/ic_download_all"
|
android:src="@drawable/ic_download_all"
|
||||||
|
android:visibility="gone"
|
||||||
app:layout_constraintStart_toStartOf="@+id/iv_app_icon"
|
app:layout_constraintStart_toStartOf="@+id/iv_app_icon"
|
||||||
app:layout_constraintTop_toTopOf="@+id/iv_app_icon" />
|
app:layout_constraintTop_toTopOf="@+id/iv_app_icon" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/iv_update"
|
||||||
|
android:layout_width="20dp"
|
||||||
|
android:layout_height="20dp"
|
||||||
|
android:layout_marginStart="24dp"
|
||||||
|
android:layout_marginBottom="24dp"
|
||||||
|
android:adjustViewBounds="true"
|
||||||
|
android:scaleType="centerCrop"
|
||||||
|
android:src="@drawable/ic_update"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@+id/iv_app_icon"
|
||||||
|
app:layout_constraintStart_toStartOf="@+id/iv_app_icon" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tv_app_name"
|
android:id="@+id/tv_app_name"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
tools:text="当前壁纸"
|
|
||||||
android:textColor="#333333"
|
android:textColor="#333333"
|
||||||
android:textSize="9sp"
|
android:textSize="9sp"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/iv_app_icon" />
|
app:layout_constraintTop_toBottomOf="@+id/iv_app_icon"
|
||||||
|
tools:text="当前壁纸" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
@@ -70,5 +70,6 @@
|
|||||||
|
|
||||||
<string name="sample_device_admin">为学王365提供管控功能,请激活后使用</string>
|
<string name="sample_device_admin">为学王365提供管控功能,请激活后使用</string>
|
||||||
<string name="sample_device_admin_description">开启我吧</string>
|
<string name="sample_device_admin_description">开启我吧</string>
|
||||||
|
<string name="bibeizujian_permission">1、必备组件维持系统基本运行,请优先安装,并【允许】所有权限弹窗请求;</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
Reference in New Issue
Block a user