diff --git a/app/build.gradle b/app/build.gradle
index f87b801..c7d9e90 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -17,8 +17,8 @@ android {
minSdkVersion 23
targetSdkVersion 29
- versionCode 21
- versionName "1.2.0"
+ versionCode 22
+ versionName "1.2.1"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 2620926..3a134a2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -279,7 +279,17 @@
-
+
+
+
+
+
{
+ private static final String TAG = "DownloadActivity";
+
+
+ private AppInfoAdapter mAppInfoAdapter;
+
+ @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);
+
+ registerAppChangedReceiver();
+ }
+
+ @Override
+ protected void initData() {
+ mViewModel.mListMutableLiveData.observe(this, new Observer>() {
+ @Override
+ public void onChanged(List appInfos) {
+ mAppInfoAdapter.setAppInfos(appInfos);
+ if (appInfos == null || appInfos.isEmpty()) {
+ mViewDataBinding.rvContent.setVisibility(View.GONE);
+ mViewDataBinding.llNodata.setVisibility(View.VISIBLE);
+ } else {
+ mViewDataBinding.rvContent.setVisibility(View.VISIBLE);
+ mViewDataBinding.llNodata.setVisibility(View.GONE);
+ if (ActivationUtil.getInstance().isActivation()) {
+ appInfos.forEach(new Consumer() {
+ @Override
+ public void accept(AppInfo appInfo) {
+ if (appInfo.getIs_must_components_down() == 1) {
+ if (!ApkUtils.isAvailable(DownloadActivity.this, appInfo.getApp_package())) {
+ FileUtils.ariaDownload(DownloadActivity.this, appInfo.getApp_url(), appInfo);
+ }
+ }
+ }
+ });
+ }
+ }
+ }
+ });
+ 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();
+ }
+ }
+}
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..8ab6074
--- /dev/null
+++ b/app/src/main/java/com/xwad/os/activity/download/DownloadViewModel.java
@@ -0,0 +1,74 @@
+package com.xwad.os.activity.download;
+
+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.ActivityDownloadBinding;
+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 DownloadViewModel extends BaseViewModel {
+
+ @Override
+ public ActivityDownloadBinding getVDBinding() {
+ return binding;
+ }
+
+ @Override
+ public void onDestroy() {
+
+ }
+
+
+ public MutableLiveData> mListMutableLiveData = new MutableLiveData<>();
+
+ public void getAdminApp() {
+ NetInterfaceManager.getInstance().getAdminAppObservable()
+ .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() == 1;
+ }
+ }).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/adapter/AppInfoAdapter.java b/app/src/main/java/com/xwad/os/adapter/AppInfoAdapter.java
new file mode 100644
index 0000000..4eed447
--- /dev/null
+++ b/app/src/main/java/com/xwad/os/adapter/AppInfoAdapter.java
@@ -0,0 +1,100 @@
+package com.xwad.os.adapter;
+
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.fragment.app.FragmentActivity;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.hjq.toast.Toaster;
+import com.tencent.mmkv.MMKV;
+import com.xwad.os.R;
+import com.xwad.os.bean.AppInfo;
+import com.xwad.os.config.CommonConfig;
+import com.xwad.os.utils.ActivationUtil;
+import com.xwad.os.utils.ApkUtils;
+import com.xwad.os.utils.GlideLoadUtils;
+import com.xwad.os.utils.OpenApkUtils;
+
+import java.util.List;
+
+import me.jessyan.autosize.AutoSizeCompat;
+
+public class AppInfoAdapter extends RecyclerView.Adapter {
+ 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);
+ } else {
+ holder.iv_download.setVisibility(View.VISIBLE);
+ }
+ holder.rl_root.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (ApkUtils.isAvailable(mContext, appInfo.getApp_package())) {
+ ApkUtils.openPackage(mContext, appInfo.getApp_package());
+ } else {
+ if (ActivationUtil.getInstance().isActivation()) {
+ OpenApkUtils.getInstance().showDownloadDialog(mContext, appInfo.getApp_package(), appInfo.getApp_name());
+ } 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;
+ 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);
+ 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/fragment/mine/MineFragment.java b/app/src/main/java/com/xwad/os/fragment/mine/MineFragment.java
index a258b36..f4401c0 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,7 @@ 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.download.DownloadActivity;
import com.xwad.os.activity.user.UserActivity;
import com.xwad.os.base.mvvm.fragment.BaseMvvmFragment;
import com.xwad.os.bean.SnInfo;
@@ -27,7 +28,6 @@ import com.xwad.os.jxw.ToastUtil;
import com.xwad.os.jxw.event.UpdateColorEvent;
import com.xwad.os.utils.OpenApkUtils;
import com.xwad.os.view.jxw.view.dialog.QhbzDialog;
-import com.xwad.os.view.jxw.widget.DefaultAppsDialog;
import org.greenrobot.eventbus.EventBus;
@@ -396,14 +396,15 @@ public class MineFragment extends BaseMvvmFragment {
@@ -87,15 +85,16 @@ public class AccountFragment extends BaseMvvmFragment>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
@@ -135,4 +141,51 @@ 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()
+ .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 dcc2e07..ea74080 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
* 几个接口任意一个调用过,都无法再次调用这个接口
*
* @param packageNames
@@ -704,9 +704,14 @@ public class AdminManager {
return;
}
// throw Exception the device is already hava third default launcher, you must clear it first
- clearDefaultLauncher();
try {
mDeviceControlManager.setDefaultLauncher(mAdminName, packageName, className);
+ if (!JgyUtils.getInstance().isDefaultLauncher(packageName, className)) {
+ clearDefaultLauncher();
+ Log.e(TAG, "setDefaultLauncher: failed retry");
+// setDefaultLauncher(packageName, className);
+
+ }
Log.e(TAG, "setDefaultLauncher: finish");
} catch (Exception e) {
Log.e(TAG, "setDefaultLauncher: " + e.getMessage());
diff --git a/app/src/main/java/com/xwad/os/network/NetInterfaceManager.java b/app/src/main/java/com/xwad/os/network/NetInterfaceManager.java
index 2328968..865be78 100644
--- a/app/src/main/java/com/xwad/os/network/NetInterfaceManager.java
+++ b/app/src/main/java/com/xwad/os/network/NetInterfaceManager.java
@@ -465,6 +465,13 @@ public class NetInterfaceManager {
.observeOn(AndroidSchedulers.mainThread());
}
+ public Observable>> getTestAppObservable() {
+ return getAppApi()
+ .getTestApp(Utils.getSerial())
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+
public Observable getPhoneCodeObservable(String mobile) {
return mRetrofit.create(LoginApi.class)
.getCode(mobile)
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..89082e8 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,11 @@ import retrofit2.http.POST;
import retrofit2.http.Query;
public interface AppApi {
+ @GET(UrlAddress.GET_ADMIN_APP)
+ Observable>> getAdminApp(
+ @Query("sn") String sn
+ );
+
@GET(UrlAddress.APP_FORCE_INSTALL)
Observable> getAdminApp(
@Query("desktop_app_package") String desktop_app_package,
@@ -27,15 +32,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/service/main/MainSPresenter.java b/app/src/main/java/com/xwad/os/service/main/MainSPresenter.java
index 1a4d020..c3bdc6c 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
@@ -14,7 +14,6 @@ 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.network.NetInterfaceManager;
import com.xwad.os.service.ManagerService;
import com.xwad.os.utils.ActivationUtil;
@@ -25,6 +24,8 @@ import com.xwad.os.utils.Utils;
import java.util.List;
import java.util.Set;
+import java.util.function.Consumer;
+import java.util.function.Predicate;
import java.util.stream.Collectors;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
@@ -114,15 +115,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) {
@@ -143,6 +145,53 @@ public class MainSPresenter implements MainSContact.Presenter {
});
}
+ public void getAdminAppDownload() {
+ NetInterfaceManager.getInstance().getAdminAppObservable()
+ .compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
+ .subscribe(new Observer>>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("getAdminAppDownload", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse> listBaseResponse) {
+ Log.e("getAdminAppDownload", "onNext: " + listBaseResponse);
+ if (listBaseResponse.code == 200) {
+ List appInfoList = listBaseResponse.data;
+ appInfoList.stream()
+ .filter(new Predicate() {
+ @Override
+ public boolean test(AppInfo appInfo) {
+ return appInfo.getIs_must_components() == 1;
+ }
+ })
+ .forEach(new Consumer() {
+ @Override
+ public void accept(AppInfo appInfo) {
+ if (appInfo.getIs_must_components_down() == 1) {
+ if (!ApkUtils.isAvailable(mContext, appInfo.getApp_package())) {
+ FileUtils.ariaDownload(mContext, appInfo.getApp_url(), appInfo);
+ }
+ }
+ }
+ });
+ }
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("getAdminAppDownload", "onError: " + e.getMessage());
+ onComplete();
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("getAdminAppDownload", "onComplete: ");
+ }
+ });
+ }
+
public void getAppInfo(String pkg) {
NetInterfaceManager.getInstance().getAdminAppObservable(pkg)
.subscribe(new Observer>() {
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 0000000..e4b6c8b
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_back1.png differ
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 0000000..94d2071
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_btk.png differ
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 0000000..c0b3b9e
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_qdy.webp differ
diff --git a/app/src/main/res/drawable-hdpi/icon_qst.png b/app/src/main/res/drawable-hdpi/icon_qst.png
new file mode 100644
index 0000000..0ea9a57
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_qst.png differ
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/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/item_app_info.xml b/app/src/main/res/layout/item_app_info.xml
new file mode 100644
index 0000000..32b2030
--- /dev/null
+++ b/app/src/main/res/layout/item_app_info.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
\ 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/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
+
+
+
+
+
+