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 + + + + + +