From 58b3e1872794a231986018527439d97e4494d5b7 Mon Sep 17 00:00:00 2001 From: tongtongstudio Date: Thu, 5 Sep 2024 09:36:49 +0800 Subject: [PATCH] =?UTF-8?q?version:1.8.9=20fix:=20update:=E5=AF=86?= =?UTF-8?q?=E7=A0=81=E7=95=8C=E9=9D=A2=E7=BB=9F=E4=B8=80=EF=BC=8C=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=9D=83=E9=99=90=E8=AF=B4=E6=98=8E=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 6 +- .../com/uiui/zyos/activity/ExitActivity.java | 23 +- .../uiui/zyos/activity/PasswordActivity.java | 7 +- .../uiui/zyos/activity/main/MainActivity.java | 24 +- .../permission/PermissionActivity.java | 167 ++++++++ .../permission/PermissionViewModel.java | 18 + .../PermissionDescriptionConvert.java | 54 +++ .../interceptor/PermissionInterceptor.java | 306 ++++++++++++++ .../interceptor/PermissionNameConvert.java | 333 +++++++++++++++ .../uiui/zyos/service/main/MainService.java | 6 +- .../main/res/drawable-hdpi/applet_qrcode.jpg | Bin 46859 -> 0 bytes .../main/res/drawable-hdpi/applet_qrcode.png | Bin 0 -> 33734 bytes .../icon_dialer_cancel_black.png | Bin 0 -> 713 bytes .../icon_dialer_cancel_white.png | Bin 0 -> 736 bytes .../icon_dialer_confirm_black.png | Bin 0 -> 711 bytes .../icon_dialer_confirm_white.png | Bin 0 -> 748 bytes app/src/main/res/drawable/bt_dialer_color.xml | 6 + .../main/res/drawable/bt_dialer_normnl.xml | 11 + .../main/res/drawable/bt_dialer_pressed.xml | 11 + .../main/res/drawable/bt_dialer_selector.xml | 13 + .../main/res/drawable/icon_dialer_cancel.xml | 13 + .../main/res/drawable/icon_dialer_confirm.xml | 13 + .../main/res/drawable/permission_auth_bg.xml | 13 + .../res/drawable/permission_auth_dis_bg.xml | 13 + .../res/drawable/permission_auth_selector.xml | 6 + .../drawable/permission_card_background.xml | 13 + .../permission_description_popup_bg.xml | 13 + .../main/res/layout-land/activity_exit.xml | 374 +++++++++++----- .../main/res/layout-land/activity_passwd.xml | 382 +++++++++++++++++ .../main/res/layout-land/fragment_chinese.xml | 3 +- .../main/res/layout-land/fragment_complex.xml | 3 +- .../main/res/layout-sw800dp/activity_exit.xml | 373 +++++++++++----- .../res/layout-sw800dp/activity_passwd.xml | 382 +++++++++++++++++ .../res/layout-sw800dp/fragment_chinese.xml | 3 +- .../res/layout-sw800dp/fragment_complex.xml | 3 +- app/src/main/res/layout/activity_exit.xml | 370 +++++++++++----- app/src/main/res/layout/activity_main.xml | 2 +- app/src/main/res/layout/activity_manual.xml | 3 +- app/src/main/res/layout/activity_passwd.xml | 336 ++++++++++----- .../main/res/layout/activity_permission.xml | 399 ++++++++++++++++++ app/src/main/res/layout/fragment_chinese.xml | 3 +- app/src/main/res/layout/fragment_complex.xml | 3 +- .../layout/permission_description_popup.xml | 43 ++ app/src/main/res/values/strings_demo.xml | 41 ++ .../main/res/values/strings_permission.xml | 59 +++ .../java/com/tuo/customview/PwdTextView.java | 4 +- .../src/main/res/values/colors.xml | 3 +- 47 files changed, 3415 insertions(+), 443 deletions(-) create mode 100644 app/src/main/java/com/uiui/zyos/activity/permission/PermissionActivity.java create mode 100644 app/src/main/java/com/uiui/zyos/activity/permission/PermissionViewModel.java create mode 100644 app/src/main/java/com/uiui/zyos/interceptor/PermissionDescriptionConvert.java create mode 100644 app/src/main/java/com/uiui/zyos/interceptor/PermissionInterceptor.java create mode 100644 app/src/main/java/com/uiui/zyos/interceptor/PermissionNameConvert.java delete mode 100644 app/src/main/res/drawable-hdpi/applet_qrcode.jpg create mode 100644 app/src/main/res/drawable-hdpi/applet_qrcode.png create mode 100644 app/src/main/res/drawable-hdpi/icon_dialer_cancel_black.png create mode 100644 app/src/main/res/drawable-hdpi/icon_dialer_cancel_white.png create mode 100644 app/src/main/res/drawable-hdpi/icon_dialer_confirm_black.png create mode 100644 app/src/main/res/drawable-hdpi/icon_dialer_confirm_white.png create mode 100644 app/src/main/res/drawable/bt_dialer_color.xml create mode 100644 app/src/main/res/drawable/bt_dialer_normnl.xml create mode 100644 app/src/main/res/drawable/bt_dialer_pressed.xml create mode 100644 app/src/main/res/drawable/bt_dialer_selector.xml create mode 100644 app/src/main/res/drawable/icon_dialer_cancel.xml create mode 100644 app/src/main/res/drawable/icon_dialer_confirm.xml create mode 100644 app/src/main/res/drawable/permission_auth_bg.xml create mode 100644 app/src/main/res/drawable/permission_auth_dis_bg.xml create mode 100644 app/src/main/res/drawable/permission_auth_selector.xml create mode 100644 app/src/main/res/drawable/permission_card_background.xml create mode 100644 app/src/main/res/drawable/permission_description_popup_bg.xml create mode 100644 app/src/main/res/layout-land/activity_passwd.xml create mode 100644 app/src/main/res/layout-sw800dp/activity_passwd.xml create mode 100644 app/src/main/res/layout/activity_permission.xml create mode 100644 app/src/main/res/layout/permission_description_popup.xml create mode 100644 app/src/main/res/values/strings_demo.xml create mode 100644 app/src/main/res/values/strings_permission.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1c97ea7..5d7d10d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -26,7 +26,7 @@ - + @@ -154,6 +154,10 @@ android:launchMode="singleTask" android:screenOrientation="userLandscape" android:theme="@style/DialogCloseOnTouchOutside" /> + () { @Override public void onChanged(AppUpdateInfo appUpdateInfo) { @@ -231,9 +234,7 @@ public class MainActivity extends BaseMvvmActivity { + private static final String TAG = "PermissionActivity"; + + + public static final String[] PERMISSION_CHECK = new String[]{ + Permission.WRITE_EXTERNAL_STORAGE, + Permission.READ_PHONE_STATE, +// Permission.WRITE_SETTINGS, + Permission.ACCESS_COARSE_LOCATION, + Permission.ACCESS_FINE_LOCATION, + Permission.ACCESS_BACKGROUND_LOCATION, + }; + + @Override + public boolean setNightMode() { + return true; + } + + @Override + protected int getLayoutId() { + return R.layout.activity_permission; + } + + @Override + protected void initDataBinding() { + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); + mViewDataBinding.setClick(new BtnClick()); + } + + @Override + protected void initView() { + + + } + + @Override + protected void initData() { + + } + + @Override + protected void onResume() { + super.onResume(); + if (XXPermissions.isGranted(this, PermissionActivity.PERMISSION_CHECK)) { + finish(); + } + if (XXPermissions.isGranted(this, Permission.WRITE_EXTERNAL_STORAGE)) { + mViewDataBinding.tvAuth0.setText("已授权"); + mViewDataBinding.tvAuth0.setEnabled(false); + } else { + mViewDataBinding.tvAuth0.setText("去授权"); + } + if (XXPermissions.isGranted(this, Permission.READ_PHONE_STATE)) { + mViewDataBinding.tvAuth1.setText("已授权"); + mViewDataBinding.tvAuth1.setEnabled(false); + } else { + mViewDataBinding.tvAuth1.setText("去授权"); + } + if (XXPermissions.isGranted(this, Permission.WRITE_SETTINGS)) { + mViewDataBinding.tvAuth2.setText("已授权"); + mViewDataBinding.tvAuth2.setEnabled(false); + } else { + mViewDataBinding.tvAuth2.setText("去授权"); + } + if (XXPermissions.isGranted(this, Permission.ACCESS_COARSE_LOCATION)) { + mViewDataBinding.tvAuth3.setText("已授权"); + mViewDataBinding.tvAuth3.setEnabled(false); + } else { + mViewDataBinding.tvAuth3.setText("去授权"); + } + if (XXPermissions.isGranted(this, Permission.ACCESS_FINE_LOCATION)) { + mViewDataBinding.tvAuth4.setText("已授权"); + mViewDataBinding.tvAuth4.setEnabled(false); + } else { + mViewDataBinding.tvAuth4.setText("去授权"); + } + if (XXPermissions.isGranted(this, Permission.ACCESS_BACKGROUND_LOCATION)) { + mViewDataBinding.tvAuth5.setText("已授权"); + mViewDataBinding.tvAuth5.setEnabled(false); + } else { + mViewDataBinding.tvAuth5.setText("去授权"); + } + + } + + private void getPermission(String... permissions) { + XXPermissions.with(this) + // 申请单个权限 + .permission(permissions) + // 申请多个权限 +// .permission(Permission.Group.STORAGE) + // 设置权限请求拦截器(局部设置) + .interceptor(new PermissionInterceptor()) + // 设置不触发错误检测机制(局部设置) + //.unchecked() + .request(new OnPermissionCallback() { + @Override + public void onGranted(@NonNull List permissions, boolean allGranted) { + Log.e(TAG, "onGranted: permissions = " + permissions + " allGranted = " + allGranted); + if (!allGranted) { + Toast.makeText(PermissionActivity.this, "获取部分权限成功,但部分权限未正常授予", Toast.LENGTH_SHORT).show(); + return; + } + Log.e(TAG, "onGranted: 获取权限成功"); + } + + @Override + public void onDenied(@NonNull List permissions, boolean doNotAskAgain) { + Log.e(TAG, "onDenied: permissions = " + permissions + " doNotAskAgain = " + doNotAskAgain); + if (doNotAskAgain) { + Toast.makeText(PermissionActivity.this, "被永久拒绝授权,请手动授予权限", Toast.LENGTH_SHORT).show(); + // 如果是被永久拒绝就跳转到应用权限系统设置页面 + XXPermissions.startPermissionActivity(PermissionActivity.this, permissions); + } else { + Log.e(TAG, "onGranted: 获取权限失败"); + } + } + }); + } + + public class BtnClick { + public void openStorage(View view) { + getPermission(Permission.WRITE_EXTERNAL_STORAGE); + } + + public void openReadPhone(View view) { + getPermission(Permission.READ_PHONE_STATE); + } + + public void openWriteSettings(View view) { + getPermission(Permission.WRITE_SETTINGS); + } + + public void open_coarse_location(View view) { + getPermission(Permission.ACCESS_COARSE_LOCATION); + } + + public void open_fine_location(View view) { + getPermission(Permission.ACCESS_FINE_LOCATION); + } + + public void open_background_location(View view) { + getPermission(Permission.ACCESS_BACKGROUND_LOCATION); + } + + } +} diff --git a/app/src/main/java/com/uiui/zyos/activity/permission/PermissionViewModel.java b/app/src/main/java/com/uiui/zyos/activity/permission/PermissionViewModel.java new file mode 100644 index 0000000..d9c7ed4 --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/activity/permission/PermissionViewModel.java @@ -0,0 +1,18 @@ +package com.uiui.zyos.activity.permission; + +import com.trello.rxlifecycle4.android.ActivityEvent; +import com.uiui.zyos.base.mvvm.BaseViewModel; +import com.uiui.zyos.databinding.ActivityPermissionBinding; + +public class PermissionViewModel extends BaseViewModel { + + @Override + public ActivityPermissionBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } +} diff --git a/app/src/main/java/com/uiui/zyos/interceptor/PermissionDescriptionConvert.java b/app/src/main/java/com/uiui/zyos/interceptor/PermissionDescriptionConvert.java new file mode 100644 index 0000000..093dfd7 --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/interceptor/PermissionDescriptionConvert.java @@ -0,0 +1,54 @@ +package com.uiui.zyos.interceptor; + +import android.content.Context; +import android.util.Log; + +import androidx.annotation.NonNull; + + +import com.uiui.zyos.R; + +import java.util.List; + +/** + * author : Android 轮子哥 + * github : https://github.com/getActivity/XXPermissions + * time : 2023/01/02 + * desc : 权限描述转换器 + */ +public final class PermissionDescriptionConvert { + + /** + * 获取权限描述 + */ + public static String getPermissionDescription(Context context, List permissions) { + StringBuilder stringBuilder = new StringBuilder(); + List permissionNames = PermissionNameConvert.permissionsToNames(context, permissions); + for (String permissionName : permissionNames) { + stringBuilder.append(permissionName) + .append(context.getString(R.string.common_permission_colon)) + .append(permissionsToDescription(context, permissionName)) + .append("\n"); + } + return stringBuilder.toString().trim(); + } + + /** + * 将权限名称列表转换成对应权限描述 + */ + @NonNull + public static String permissionsToDescription(Context context, String permissionName) { + // 请根据权限名称转换成对应权限说明 + Log.e("TAG", "permissionsToDescription: " + permissionName); + switch (permissionName) { + case "存储权限": + return "存储图片或视频"; + case "电话权限": + return "拨打电话"; + case "定位权限": + return "获取设备定位"; + default: + return "用于" + permissionName; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/uiui/zyos/interceptor/PermissionInterceptor.java b/app/src/main/java/com/uiui/zyos/interceptor/PermissionInterceptor.java new file mode 100644 index 0000000..a694e03 --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/interceptor/PermissionInterceptor.java @@ -0,0 +1,306 @@ +package com.uiui.zyos.interceptor; + +import android.app.Activity; +import android.content.Context; +import android.content.res.Configuration; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.os.Build; +import android.os.Handler; +import android.os.Looper; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; + +import com.hjq.permissions.OnPermissionCallback; +import com.hjq.permissions.OnPermissionInterceptor; +import com.hjq.permissions.OnPermissionPageCallback; +import com.hjq.permissions.Permission; +import com.hjq.permissions.PermissionFragment; +import com.hjq.permissions.XXPermissions; +import com.hjq.toast.Toaster; +import com.uiui.zyos.R; + +import java.util.List; + +/** + * author : Android 轮子哥 + * github : https://github.com/getActivity/XXPermissions + * time : 2021/01/04 + * desc : 权限申请拦截器 + */ +public final class PermissionInterceptor implements OnPermissionInterceptor { + + public static final Handler HANDLER = new Handler(Looper.getMainLooper()); + + /** + * 权限申请标记 + */ + private boolean mRequestFlag; + + /** + * 权限申请说明 Popup + */ + private PopupWindow mPermissionPopup; + + /** + * 权限说明文案 + */ + @Nullable + private String mPermissionDescription; + + public PermissionInterceptor() { + this(null); + } + + public PermissionInterceptor(@Nullable String permissionDescription) { + mPermissionDescription = permissionDescription; + } + + @Override + public void launchPermissionRequest(@NonNull Activity activity, @NonNull List allPermissions, @Nullable OnPermissionCallback callback) { + mRequestFlag = true; + List deniedPermissions = XXPermissions.getDenied(activity, allPermissions); + + if (TextUtils.isEmpty(mPermissionDescription)) { + mPermissionDescription = generatePermissionDescription(activity, deniedPermissions); + } + + ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView(); + int activityOrientation = activity.getResources().getConfiguration().orientation; + + boolean showPopupWindow = activityOrientation == Configuration.ORIENTATION_PORTRAIT; + for (String permission : allPermissions) { + if (!XXPermissions.isSpecial(permission)) { + continue; + } + if (XXPermissions.isGranted(activity, permission)) { + continue; + } +// if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R && + if (Build.VERSION.SDK_INT < 30 && + TextUtils.equals(Permission.MANAGE_EXTERNAL_STORAGE, permission)) { + continue; + } + // 如果申请的权限带有特殊权限,并且还没有授予的话 + // 就不用 PopupWindow 对话框来显示,而是用 Dialog 来显示 + showPopupWindow = false; + break; + } + + if (showPopupWindow) { + PermissionFragment.launch(activity, allPermissions, this, callback); + // 延迟 300 毫秒是为了避免出现 PopupWindow 显示然后立马消失的情况 + // 因为框架没有办法在还没有申请权限的情况下,去判断权限是否永久拒绝了,必须要在发起权限申请之后 + // 所以只能通过延迟显示 PopupWindow 来做这件事,如果 300 毫秒内权限申请没有结束,证明本次申请的权限没有永久拒绝 + HANDLER.postDelayed(() -> { + if (!mRequestFlag) { + return; + } + if (activity.isFinishing() || + (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && activity.isDestroyed())) { + return; + } + showPopupWindow(activity, decorView, mPermissionDescription); + }, 300); + } else { + // 注意:这里的 Dialog 只是示例,没有用 DialogFragment 来处理 Dialog 生命周期 + new AlertDialog.Builder(activity) + .setTitle(R.string.common_permission_description_title) + .setMessage(mPermissionDescription) + .setCancelable(false) + .setPositiveButton(R.string.common_permission_granted, (dialog, which) -> { + dialog.dismiss(); + PermissionFragment.launch(activity, allPermissions, + PermissionInterceptor.this, callback); + }) + .setNegativeButton(R.string.common_permission_denied, (dialog, which) -> { + dialog.dismiss(); + if (callback == null) { + return; + } + callback.onDenied(deniedPermissions, false); + }) + .show(); + } + } + + @Override + public void grantedPermissionRequest(@NonNull Activity activity, @NonNull List allPermissions, + @NonNull List grantedPermissions, boolean allGranted, + @Nullable OnPermissionCallback callback) { + if (callback == null) { + return; + } + callback.onGranted(grantedPermissions, allGranted); + } + + @Override + public void deniedPermissionRequest(@NonNull Activity activity, @NonNull List allPermissions, + @NonNull List deniedPermissions, boolean doNotAskAgain, + @Nullable OnPermissionCallback callback) { + if (callback != null) { + callback.onDenied(deniedPermissions, doNotAskAgain); + } + + if (doNotAskAgain) { + if (deniedPermissions.size() == 1 && Permission.ACCESS_MEDIA_LOCATION.equals(deniedPermissions.get(0))) { + Toaster.show(R.string.common_permission_media_location_hint_fail); + return; + } + + showPermissionSettingDialog(activity, allPermissions, deniedPermissions, callback); + return; + } + + if (deniedPermissions.size() == 1) { + + String deniedPermission = deniedPermissions.get(0); + + String backgroundPermissionOptionLabel = getBackgroundPermissionOptionLabel(activity); + + if (Permission.ACCESS_BACKGROUND_LOCATION.equals(deniedPermission)) { + Toaster.show(activity.getString(R.string.common_permission_background_location_fail_hint, backgroundPermissionOptionLabel)); + return; + } + + if (Permission.BODY_SENSORS_BACKGROUND.equals(deniedPermission)) { + Toaster.show(activity.getString(R.string.common_permission_background_sensors_fail_hint, backgroundPermissionOptionLabel)); + return; + } + } + + final String message; + List permissionNames = PermissionNameConvert.permissionsToNames(activity, deniedPermissions); + if (!permissionNames.isEmpty()) { + message = activity.getString(R.string.common_permission_fail_assign_hint, + PermissionNameConvert.listToString(activity, permissionNames)); + } else { + message = activity.getString(R.string.common_permission_fail_hint); + } + Toaster.show(message); + } + + @Override + public void finishPermissionRequest(@NonNull Activity activity, @NonNull List allPermissions, + boolean skipRequest, @Nullable OnPermissionCallback callback) { + mRequestFlag = false; + dismissPopupWindow(); + } + + /** + * 生成权限说明文案 + */ + protected String generatePermissionDescription(Context context, @NonNull List permissions) { + return PermissionDescriptionConvert.getPermissionDescription(context, permissions); + } + + private void showPopupWindow(Activity activity, ViewGroup decorView, String message) { + if (mPermissionPopup == null) { + View contentView = LayoutInflater.from(activity) + .inflate(R.layout.permission_description_popup, decorView, false); + mPermissionPopup = new PopupWindow(activity); + mPermissionPopup.setContentView(contentView); + mPermissionPopup.setWidth(WindowManager.LayoutParams.MATCH_PARENT); + mPermissionPopup.setHeight(WindowManager.LayoutParams.WRAP_CONTENT); + mPermissionPopup.setAnimationStyle(android.R.style.Animation_Dialog); + mPermissionPopup.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + mPermissionPopup.setTouchable(true); + mPermissionPopup.setOutsideTouchable(true); + } + TextView messageView = mPermissionPopup.getContentView().findViewById(R.id.tv_permission_description_message); + messageView.setText(message); + // 注意:这里的 PopupWindow 只是示例,没有监听 Activity onDestroy 来处理 PopupWindow 生命周期 + mPermissionPopup.showAtLocation(decorView, Gravity.TOP, 0, 0); + } + + private void dismissPopupWindow() { + if (mPermissionPopup == null) { + return; + } + if (!mPermissionPopup.isShowing()) { + return; + } + mPermissionPopup.dismiss(); + } + + private void showPermissionSettingDialog(Activity activity, List allPermissions, + List deniedPermissions, OnPermissionCallback callback) { + if (activity == null || activity.isFinishing() || + (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && activity.isDestroyed())) { + return; + } + + String message = null; + + List permissionNames = PermissionNameConvert.permissionsToNames(activity, deniedPermissions); + if (!permissionNames.isEmpty()) { + if (deniedPermissions.size() == 1) { + String deniedPermission = deniedPermissions.get(0); + + if (Permission.ACCESS_BACKGROUND_LOCATION.equals(deniedPermission)) { + message = activity.getString(R.string.common_permission_manual_assign_fail_background_location_hint, getBackgroundPermissionOptionLabel(activity)); + } else if (Permission.BODY_SENSORS_BACKGROUND.equals(deniedPermission)) { + message = activity.getString(R.string.common_permission_manual_assign_fail_background_sensors_hint, getBackgroundPermissionOptionLabel(activity)); + } + } + if (TextUtils.isEmpty(message)) { + message = activity.getString(R.string.common_permission_manual_assign_fail_hint, + PermissionNameConvert.listToString(activity, permissionNames)); + } + } else { + message = activity.getString(R.string.common_permission_manual_fail_hint); + } + + // 这里的 Dialog 只是示例,没有用 DialogFragment 来处理 Dialog 生命周期 + new AlertDialog.Builder(activity) + .setTitle(R.string.common_permission_alert) + .setMessage(message) + .setPositiveButton(R.string.common_permission_goto_setting_page, (dialog, which) -> { + dialog.dismiss(); + XXPermissions.startPermissionActivity(activity, + deniedPermissions, new OnPermissionPageCallback() { + + @Override + public void onGranted() { + if (callback == null) { + return; + } + callback.onGranted(allPermissions, true); + } + + @Override + public void onDenied() { + showPermissionSettingDialog(activity, allPermissions, + XXPermissions.getDenied(activity, allPermissions), callback); + } + }); + }) + .show(); + } + + /** + * 获取后台权限的《始终允许》选项的文案 + */ + @NonNull + private String getBackgroundPermissionOptionLabel(Context context) { + String backgroundPermissionOptionLabel = ""; +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { +// if (Build.VERSION.SDK_INT >= 30) { +// backgroundPermissionOptionLabel = String.valueOf(context.getPackageManager().getBackgroundPermissionOptionLabel()); +// } + if (TextUtils.isEmpty(backgroundPermissionOptionLabel)) { + backgroundPermissionOptionLabel = context.getString(R.string.common_permission_background_default_option_label); + } + return backgroundPermissionOptionLabel; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/uiui/zyos/interceptor/PermissionNameConvert.java b/app/src/main/java/com/uiui/zyos/interceptor/PermissionNameConvert.java new file mode 100644 index 0000000..5030e21 --- /dev/null +++ b/app/src/main/java/com/uiui/zyos/interceptor/PermissionNameConvert.java @@ -0,0 +1,333 @@ +package com.uiui.zyos.interceptor; + +import android.content.Context; +import android.os.Build; + +import androidx.annotation.NonNull; + +import com.hjq.permissions.Permission; +import com.uiui.zyos.R; + +import java.util.ArrayList; +import java.util.List; + +/** + * author : Android 轮子哥 + * github : https://github.com/getActivity/XXPermissions + * time : 2022/06/11 + * desc : 权限名称转换器 + */ +public final class PermissionNameConvert { + + /** + * 获取权限名称 + */ + public static String getPermissionNames(Context context, List permissions) { + return listToString(context, permissionsToNames(context, permissions)); + } + + /** + * String 列表拼接成一个字符串 + */ + public static String listToString(Context context, List hints) { + if (hints == null || hints.isEmpty()) { + return context.getString(R.string.common_permission_unknown); + } + + StringBuilder builder = new StringBuilder(); + for (String text : hints) { + if (builder.length() == 0) { + builder.append(text); + } else { + builder.append("、") + .append(text); + } + } + return builder.toString(); + } + + /** + * 将权限列表转换成对应名称列表 + */ + @NonNull + public static List permissionsToNames(Context context, List permissions) { + List permissionNames = new ArrayList<>(); + if (context == null) { + return permissionNames; + } + if (permissions == null) { + return permissionNames; + } + for (String permission : permissions) { + switch (permission) { + case Permission.READ_EXTERNAL_STORAGE: + case Permission.WRITE_EXTERNAL_STORAGE: { + String hint = context.getString(R.string.common_permission_storage); + if (!permissionNames.contains(hint)) { + permissionNames.add(hint); + } + break; + } + case Permission.READ_MEDIA_IMAGES: + case Permission.READ_MEDIA_VIDEO: + case Permission.READ_MEDIA_VISUAL_USER_SELECTED: { + if (Build.VERSION.SDK_INT >= 33) { + String hint = context.getString(R.string.common_permission_image_and_video); + if (!permissionNames.contains(hint)) { + permissionNames.add(hint); + } + } + break; + } + case Permission.READ_MEDIA_AUDIO: { + if (Build.VERSION.SDK_INT >= 33) { + String hint = context.getString(R.string.common_permission_music_and_audio); + if (!permissionNames.contains(hint)) { + permissionNames.add(hint); + } + } + break; + } + case Permission.CAMERA: { + String hint = context.getString(R.string.common_permission_camera); + if (!permissionNames.contains(hint)) { + permissionNames.add(hint); + } + break; + } + case Permission.RECORD_AUDIO: { + String hint = context.getString(R.string.common_permission_microphone); + if (!permissionNames.contains(hint)) { + permissionNames.add(hint); + } + break; + } + case Permission.ACCESS_FINE_LOCATION: + case Permission.ACCESS_COARSE_LOCATION: + case Permission.ACCESS_BACKGROUND_LOCATION: { + String hint; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && + !permissions.contains(Permission.ACCESS_FINE_LOCATION) && + !permissions.contains(Permission.ACCESS_COARSE_LOCATION)) { + hint = context.getString(R.string.common_permission_location_background); + } else { + hint = context.getString(R.string.common_permission_location); + } + if (!permissionNames.contains(hint)) { + permissionNames.add(hint); + } + break; + } + case Permission.BODY_SENSORS: + case Permission.BODY_SENSORS_BACKGROUND: { + String hint; + if (Build.VERSION.SDK_INT >= 33 && + !permissions.contains(Permission.BODY_SENSORS)) { + hint = context.getString(R.string.common_permission_body_sensors_background); + } else { + hint = context.getString(R.string.common_permission_body_sensors); + } + if (!permissionNames.contains(hint)) { + permissionNames.add(hint); + } + break; + } + case Permission.BLUETOOTH_SCAN: + case Permission.BLUETOOTH_CONNECT: + case Permission.BLUETOOTH_ADVERTISE: { + if (Build.VERSION.SDK_INT >= 31) { + String hint = context.getString(R.string.common_permission_nearby_devices); + if (!permissionNames.contains(hint)) { + permissionNames.add(hint); + } + } + break; + } + case Permission.NEARBY_WIFI_DEVICES: { + if (Build.VERSION.SDK_INT >= 33) { + String hint = context.getString(R.string.common_permission_nearby_devices); + if (!permissionNames.contains(hint)) { + permissionNames.add(hint); + } + } + break; + } + case Permission.READ_PHONE_STATE: + case Permission.CALL_PHONE: + case Permission.ADD_VOICEMAIL: + case Permission.USE_SIP: + case Permission.READ_PHONE_NUMBERS: + case Permission.ANSWER_PHONE_CALLS: { + String hint = context.getString(R.string.common_permission_phone); + if (!permissionNames.contains(hint)) { + permissionNames.add(hint); + } + break; + } + case Permission.GET_ACCOUNTS: + case Permission.READ_CONTACTS: + case Permission.WRITE_CONTACTS: { + String hint = context.getString(R.string.common_permission_contacts); + if (!permissionNames.contains(hint)) { + permissionNames.add(hint); + } + break; + } + case Permission.READ_CALENDAR: + case Permission.WRITE_CALENDAR: { + String hint = context.getString(R.string.common_permission_calendar); + if (!permissionNames.contains(hint)) { + permissionNames.add(hint); + } + break; + } + case Permission.READ_CALL_LOG: + case Permission.WRITE_CALL_LOG: + case Permission.PROCESS_OUTGOING_CALLS: { + String hint = context.getString(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q ? + R.string.common_permission_call_logs : + R.string.common_permission_phone); + if (!permissionNames.contains(hint)) { + permissionNames.add(hint); + } + break; + } + case Permission.ACTIVITY_RECOGNITION: { + String hint = context.getString(Build.VERSION.SDK_INT >= 30 ? + R.string.common_permission_activity_recognition_api30 : + R.string.common_permission_activity_recognition_api29); + if (!permissionNames.contains(hint)) { + permissionNames.add(hint); + } + break; + } + case Permission.ACCESS_MEDIA_LOCATION: { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + String hint = context.getString(R.string.common_permission_access_media_location); + if (!permissionNames.contains(hint)) { + permissionNames.add(hint); + } + } + break; + } + case Permission.SEND_SMS: + case Permission.RECEIVE_SMS: + case Permission.READ_SMS: + case Permission.RECEIVE_WAP_PUSH: + case Permission.RECEIVE_MMS: { + String hint = context.getString(R.string.common_permission_sms); + if (!permissionNames.contains(hint)) { + permissionNames.add(hint); + } + break; + } + case Permission.MANAGE_EXTERNAL_STORAGE: { + if (Build.VERSION.SDK_INT >= 30) { + String hint = context.getString(R.string.common_permission_all_file_access); + if (!permissionNames.contains(hint)) { + permissionNames.add(hint); + } + } + break; + } + case Permission.REQUEST_INSTALL_PACKAGES: { + String hint = context.getString(R.string.common_permission_install_unknown_apps); + if (!permissionNames.contains(hint)) { + permissionNames.add(hint); + } + break; + } + case Permission.SYSTEM_ALERT_WINDOW: { + String hint = context.getString(R.string.common_permission_display_over_other_apps); + if (!permissionNames.contains(hint)) { + permissionNames.add(hint); + } + break; + } + case Permission.WRITE_SETTINGS: { + String hint = context.getString(R.string.common_permission_modify_system_settings); + if (!permissionNames.contains(hint)) { + permissionNames.add(hint); + } + break; + } + case Permission.NOTIFICATION_SERVICE: { + String hint = context.getString(R.string.common_permission_allow_notifications); + if (!permissionNames.contains(hint)) { + permissionNames.add(hint); + } + break; + } + case Permission.POST_NOTIFICATIONS: { + if (Build.VERSION.SDK_INT >= 33) { + String hint = context.getString(R.string.common_permission_post_notifications); + if (!permissionNames.contains(hint)) { + permissionNames.add(hint); + } + } + break; + } + case Permission.BIND_NOTIFICATION_LISTENER_SERVICE: { + String hint = context.getString(R.string.common_permission_allow_notifications_access); + if (!permissionNames.contains(hint)) { + permissionNames.add(hint); + } + break; + } + case Permission.PACKAGE_USAGE_STATS: { + String hint = context.getString(R.string.common_permission_apps_with_usage_access); + if (!permissionNames.contains(hint)) { + permissionNames.add(hint); + } + break; + } + case Permission.SCHEDULE_EXACT_ALARM: { + String hint = context.getString(R.string.common_permission_alarms_reminders); + if (!permissionNames.contains(hint)) { + permissionNames.add(hint); + } + break; + } + case Permission.ACCESS_NOTIFICATION_POLICY: { + String hint = context.getString(R.string.common_permission_do_not_disturb_access); + if (!permissionNames.contains(hint)) { + permissionNames.add(hint); + } + break; + } + case Permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS: { + String hint = context.getString(R.string.common_permission_ignore_battery_optimize); + if (!permissionNames.contains(hint)) { + permissionNames.add(hint); + } + break; + } + case Permission.BIND_VPN_SERVICE: { + String hint = context.getString(R.string.common_permission_vpn); + if (!permissionNames.contains(hint)) { + permissionNames.add(hint); + } + break; + } + case Permission.PICTURE_IN_PICTURE: { + String hint = context.getString(R.string.common_permission_picture_in_picture); + if (!permissionNames.contains(hint)) { + permissionNames.add(hint); + } + break; + } + case Permission.GET_INSTALLED_APPS: { + String hint = context.getString(R.string.common_permission_get_installed_apps); + if (!permissionNames.contains(hint)) { + permissionNames.add(hint); + } + break; + } + default: + break; + } + } + + return permissionNames; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/uiui/zyos/service/main/MainService.java b/app/src/main/java/com/uiui/zyos/service/main/MainService.java index 10a75aa..e2b394b 100644 --- a/app/src/main/java/com/uiui/zyos/service/main/MainService.java +++ b/app/src/main/java/com/uiui/zyos/service/main/MainService.java @@ -36,9 +36,9 @@ public class MainService extends BaseRxService implements MainSContact.MainSView @Override public void onConnected(NetworkUtils.NetworkType networkType) { Log.e(TAG, "onConnected: "); - if (Utils.isScreenOn(MainService.this)) { - mPresenter.getCloudLessonSettings(); - } +// if (Utils.isScreenOn(MainService.this)) { +// mPresenter.getCloudLessonSettings(); +// } } @Override diff --git a/app/src/main/res/drawable-hdpi/applet_qrcode.jpg b/app/src/main/res/drawable-hdpi/applet_qrcode.jpg deleted file mode 100644 index 3b28bac827759bbbeaee9d1dd5eea3441449ead6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46859 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νkuOgIbTh(l=oB<0&u-o($DeB1Rp4?b^HhsRP_gP4$)_XPGOi8TL36zfTRpdr zW{yiMf|Q3-f@u5X_8;!)J7rl$GQR!}B+-$_hZ6{y*K70{&ylk&M(0Iziq7;{6)C)W z)>Gs5;K^eSl{8>h54=rorlwK_{|NZ5KxaYQVE#<61P$9on=%+wp~J;YQ6*-r zT^XRxA`N)Ej~e7^@MUf$cstTYes#Y=chP?DLhug{gz6B>4sN;>?aSiHSa0Y+Kt9?1 z4cy;Nv)ZB)`NCs~=b2>w%cBO-0`yr=V5Z&d@;TdP<1eCMnS`)2Cf7@><5wyY;7mE?nCSijcvkpfZTY$0%}{tX|Ts0DoNje$a@v^{2KU z)rmGbQXc9U1hZNU*Jexo&*T1>%d3K)o3|QEpkBuj{iWk))(9qU!&oW)AY3>+*Ee{H zl`=Kym*L&NKFUU^iuD0bxw2|pd5+T6j;ucd@MzT^d?^*Nxrpq%m%-HfH9JLuh4s+k z6pN5>t^LJKgQ)Ab^5g?A^#+GZMi$(tYA*D#2`dC1P{8vb_j}e`B<|LUc?I+Qa6i8? z#W3|teLiz!C(D!Zc?Txwp||Hf&gLMO{`v78&e+$$->0Oo)R5QIa8qD{%vfZeSF^Olb=JM-6=T# zSmCkXe!6W@(0aM8%!vjMiLzumD`UHj40eoKn;08H zPiWmb&(lbOynGmr{ve%aJ+izQvNord@N486nX}zlX80^rbRg2lp*ZuYoqB|1d#wTC zL+Zb$w%-EpD)4p^rvKW%Ls!tCrCdDX8>MEGovV;#M zIF&D;O6O}GQV%y@xOgLVmH{0MP%^lB<^4>-aRkF4^z_p(oB8b*CU=YLTV2-eivpy1 zAK6rf_0>%O?=Et#{5XF8GY%}Wo4kfV6FaX@_;Y!_>}uu-q`A~1|jCR3O&&FrF2Crq88q zH!sGAy0!>GLg8q)Qsu@#=QB&w2+5D4NwsPfN7dHFH;lmxS_Hs6C#w*6F+fRc?m>0o z#d0pkIy7=M8uY3usu=UwZbO!zK9dBPj>C8VJvBY&@v?CwxN{7Tp4L!8B^Kt zhK~FP-;*;J=l4>D_y;hTpchAmfQ#&pN4y`TK8gJ=2({!6Sf zAbhZT#4mD<62hZlKAer#5>R2IODdeSh%TPb4qnqTD_VLnANDFdHxmM9v;n2Ewjp>mVbUMw}x$Ig>t}(Iv z+$Y&%LvhcUXKXq{gRTVY_x3nK>Uu!tUS$K(Y)Z}8qSeX-iPmSRUl>1rVq~N zogp@H@+g$!{UbDmgbKrg?cDpgx+=f=dkP))27O3GbRA#B8(ggFfB6}{g2HEd#h{3G zAvS!;lbfqsNfE;wBvW3h-=V2LxB-oHb~)M+{O`$pUDjFD&pqD0`zyw;ylD7UvA2g# zaek>gcHWgkEr$FowhO2;zor!taK&IYci*cmbBuZoSEyZl-$I^!Pg(*2$W}2^k|U<4 z!vauaP5zAFY;12Ll&mpQlg7$#{`}<?(yAO*u5Z@$p2dc(U40;B&U;KS!Tw@z2ThTVoe zrl@b{0z-Eg<20KZ+oA}D(q6Kw&fiWF#s#Atk@Q)-|4|>C~n>(NM)^W`wa}CH&(Hs_MbPeh{?tyKtaGgf(x~rxQ7=V zLn^B_c`|vWBBDj)k^hEGAVFvTg|4np+RnV!1(X_jbAO;)uKR#dE)Kc zM0+j!{zV3&N@38phBUa8M(;?|>G&>kF+Zutv~r;5nEkI0pO-&(JmZJJIT6!K+-hv! zG>O{20%`niPu2@ZiSc%~^c(aZM0mJG;^|ZstlFrjCxkkmvZpp=mXj49o?{|%X6UpS zlAhgKaWr%6&W>$A{udxP+4e%}KbCfExd-Ao?imjS7g)XN6g70}6)16@#eYu)xU$C2PFU25IomdT7<*vvd^EMud6yAn5( zM-hR%w^Vs&xUTey4*-be)IpUo6`Dy>ZQ*JZF~t;VdB>tpZ7K?f=m727exSwP@KsoJ zaF9l`yjV%^K^;+fQED-uyHZEwOa4xs(AMk;>Pu_mcYl;SxtX+5D4GD^6 zk8fqjqsbQs8}?@3iZ7q9{h8@0sFCWp<#fv~QFHCfL)Z>52ga$8W=V(Me;&iqu{0lH zXpCuBy^9wCHG?cR&l}2TdY?z0UDp$}FH1Gs+3s_2Nc~-NE6HvW*8V^_Duo^a@(CyW3U7 zdH$@_5BFwWhmMf?OwX1DjYy8F+3am)(*qZR2>P~z&jl~+diO^FBuyaw>h=-56m^DZ z-8Fy^u3|tYGb3Gil^})Ucf(|bgye9R{Gh3UAECm>_P1Vzmk+vP%Mh7kVZbOZxj#T1 zn_}4tY=cEKc6zN^+NjNO)WkcnLq|ULI#j@oxHyD4x+@3OVi(DTiBA3GAG)>k)0Zq@ zit*rX1vo=+jc&y5_^|x}tksh9@33FNoH`F53uwnn%(PGjO|NhiyZ#95Xt}^BezW;? zxQMyE6V9z}?`%M}H)A@%a5jU?#0F*aF8P-V~GH;;y4(Y1pHE_j;wL)Y=Msyw6p-1>G=-RVpsg zNZb8-_562Xr)k(s9Q+-g4#r6n`0?PF){9@cKdug<%#Y83Nfgh9$s(GR>nW;zn3G12 zTdqWujzVEpU)d>pLY8i?jV|dfdrTb;$tG;P{io%_TZ8~Ch6)`L?}!HFN?^a(&28C! z#aEq%2O3*HZV3jxpJ%xkg}C|+39p6JstG+>G$<0XYI#JNWc7;ulpHl^{i%-p6ueS( z{S~tXv~yD-pcsOV#tkDdf~Dvv=9l;_7qlncBWp2>^jJVvj6Wz%CZRo`K{J58Q3had+@ilr&2ex3~&j5-te*|6^ z&<-R#%8^udWLf0YMd+A&RJt&T(zQ(>%nJzsY|l zNAxeaM!*Ae{TdDb2+TP#o70@!IC+o4S!QR6xdG0c<*d-EIrF==n;~V<#cdj8CDCsM zo_rXNxZ4~29JH1p^ z#Nr?~>ng?kSYJTH;Tx@>GihNmibg(Vc)>@DGf8=K<$gPI+k>Krxxh)JgTdVcs$l*I zco4brkNB#P(>ZQ6@GdzZ=V|XrqZ}F3Aw_F!%AdCyPt|JhDl;j#(ciGIQa}(z(-TBc z1u2r~oy@iDwatVKP91YPo_AO?nRo79&4dqPYAow$d9H!Ke`J{t1Hp(U(AT%OKg+oo zx;!zXf1R8iD%(vW5GA#2^jCXSEk&PQ}WC^iD#Fy^HeLH{|H1L zIpUCVzrU1prKq}Puoj^*8?bbk{dhpO#hf#;+lOFEJ&@SRy@iS|SaSM&Qj(7Izj<%| zC_@&(EU_~zQxIo_xmKL7%sGR8D%)-;4$&?O7!zsST2}wz{vLpRx%?B2Prwgxq+BbO0}?4F*{Yoo1m@ z;ZmlEnd*cQpx+q47)Xe+x%dT(0h;{(gvGN+r%?^o=C^+n5#_XLQ*ZS#56%M=XCx*H_sL$6VSXm#!$!Q z0?{s^IP_ydL}LE&wQ5^}aQ|!8*7RdM$IWpMIQFMi0v@p^$7j5QFU8R%gfmlnZa7L< zGwtk>*N}-dlnk1OK|(xE)Hs;P>E8XCeCpgre9}do>&XKI{xDS>yO%#PT|=5)3gwK@ z`q8K^zEt13o}~T#;rsOudcIN<-PH(dI?rUMzz4ivehe5Pp|lF5eb zU$Haz#jemTH|z*pg0jClWs#>?at?I#=cx~`zsk28=N2LIjy5D9gXJ$pF1h>>aLV)i z;4EjuiW#2p^7-r?+#!uE#g5|l^LOz(akc&{i{Tu&S3OrK4Rfww8tr$vKJiNZSCY~` zns;MVhCKAFQ{Dwlt{*0$i<)W&*Pb5AQz6lgdvukIs@g4G?qY{R+T)V19ryjp@J}jA zh|9Nmyu{6xub!wVaNJ1>+x)U05u)@H9U-r**r~sMg&&9KnL`S=c-vOMiT zX{sI0{1nJANo_qfB&<{HRyD)#s+gEr^uOeCx$Nt+=kH$pNJxzc9=Kd`H9L6uO}TNX zUEulS!yt?);6K8IzY5KGbnouOxU`dO%1p@NE>5u=3308=BT~my&O68dM43y(U{q2%fWJOOxGei8nDtTYqa32j$%t#=Ka-0x-JT$p68LTn7a zx;x4*}=Po0UKa!?;im_S&jh_N3>r2xMjoBhx&^csVI=uY4>o9 z<6U7g32oXgzfU5Jfgz$JQ|#8TypF*bX+&SqB=zW9q)Xnf88tgjcq?_O0932GVi~Yq zJm3WygVoy3q0YPjRQHr+gOTX_teXwow03)6!$u^s%H9_l%ob0|J5f)n>3iR|coVGu z4|y<+a={AS0`0*d_#`!%dMjhByEA(MUC;>=z>1)&JE~7MJnK+agFI)_P#&3Kfy07` zbu&AQ#@0N?nv*1P?Jt&%zaH%oI0(WY7$acAdHV?wzsCa;1`TrjHlq45Huv=Pc8)@; zbiN#f^DXbaJ>1utk+>MH*lK+2dd-$|X_MidRB!WR1yNZsstOPF_8!KV; zE;bV;gM8#Tnsi(o2!+l?L^31N2c0-8z<+_+ogvm0`ZmESqz>UyXSGp3STOeakf-O% z!uqEd$5*NRJwL!KybJk*-wz;vZUorA!6QwjoPp>O+|(`w_+x{ms7?i+tT&b=mTwSY zKR0!=fCH%MZ@Hw8h){h-dV&6c*VF{qc2J;4NNY>jFWSFs%zfS?c#_1=E%g|mc7wY+ z%J$>}J;o*!8G#5BF*TAKIbn0K&r!PNYR8=V?N9G>uI-qGD`8M9y#)L&J}`p?4Zu17 z^#RM%^pw!uv^+WMn<$BeJOxf?N#)#w6E|H$w+o^I#ER9d{z<;ySvh;|kH9Iwr?J@3 zgHk~>X95;^U|+t`vt4qJ5YPemshX@w*NrqNqYVA*;*h*OH?b2~^gt=!7vAT|BdQ6M z&bdNlPbe#LE%SM6eGW6#L@h+8SP@q~4Qb2s4(9*Y+JxG2hJ-e*^-=z!c1=r9p(AKh zIuNOBoM%De6#DEOGewtOnpa-3`KGAs&u74fyAo8__2*ChR3o+JpG4 zgz$6ap10UGPsguiPv(Ekw^1LM9mD?fIk>~|U&;T9wfG?-T;dIu(uPLNwMWpLJr|}7^en-(1bl`0An3ALO4Xsu31~~7;IDjyc z<49G;*h8BAlt$iBF1v?Wm&c zp2rE9ADS~4YkZeV4?_=L7+EqsSI|S48_D$eOi|+eeo{KxChalb6q<0~1&JJ;I*L+@ zIV3(|tM#55RGmIdtp(l%U%As8sjZwZMQjsz3~aAyDAyb(JSU}ZoRRdbjiN#UVn(e_ zl?!8a@fI|eq)tKFB`x|!>K#dDJ)&d1aBbqSnOY&fh%_gQ?bu<0e>ejFYaJGgm$-)) zoEWuaHMSt$A~*65^?x5;Tj@Jb0D3u`1`NcdrxzXszqZmMM6Uz~6YkL>Ll3$rT$4xb&h44_Fr(rF0yjVE zOak>U*vz|OxDZKPg?Et~(N>)V6ATz$T!S4%pFZDbFrMbu?xT_8*f4CWSLKEj3HdE? zF1*CLG%(_1kYrU>l-a5Q;d8_)0h`1BgcrgpVL?zRK#{_BPm8sH_OL#XV^8#vg#3^O z-wR5-p%gou=+EIy$$4c}(!1z-}BXp)*g54n+h3&DX=zWWh$GrOr)v ziTT>cLmwF`{|hWyyWVrY#7AwRFlPo@f^WQ={E1+jOq$q!oiY4n$rcl#F$(KXcrhlA z+kob;iF2WmqEf28`wD#bK9?$H@LQ4pz6R6e3HGz{neA8DGwvX)-NpWTZ$)^4f1Jz> zDXKu6xX_O|1HCc_wwLl(EF0*|6*>6HR$}(@#2lWHMdm9t-m_~}9{$aSN<@x2cZa>a z8lIoYI;`!iUp1xVTyh1p$O>E8I$mpi`^>B68NBU}z@;h?`t`63VGO42+Y5B!PNtsJ z%t^0+=a-8sT&vsHRxwnAqVy6go3?@O8aFRz(@Q^k9G-qIWz|Tgiwmbzh~gn_ak^f* z829@RWFrx`QlYD$kMqiL!Sd9;VOU4Wg8O070)5cCZPw@bg}|ttozWl zY%>FcV6%{7tCQ9`ACl^!*=vNE3`h&V2vi@%cH>)VTURg=&#sQF{bV7QK>@ZXgz7Sv zrnaUVSP$JMQl-2sqTWt8jK5^WQ!hR`p0!x03RN!wcYxj30euUI4j_(O?45~PNi^U8 zb#0Dl?@CvAL3vd$elvhz@Z5JXSz~smPx?B2r zU(fMS(YnM`zQHAPp|NY5pI!uo#obx@NOH(Ma-~x*^MtLIYd{aAq^rZRPH6G(F@Fvk zXEi%}oO)Ls_H)=T%F3w+qVf%JprGj`IR4;L?Wl#ENebdO;)ychV4Ff_G2^h*jab)1|P@WmT}|8_!%Vskr;RXus9RFD@xx3$dWrq3sA(aT=Q5 zpmVa4JwBSLvqL@md*EBrkhCXPwwO?)e{ymL97k?$H~_P$b7j zGXb^u5~Ulm?#|4+_+z+wMK#@qpj~;hy8rlgR>GMP){Zw0oVV{ji zW6k4i0VY-s+Gz*qpuNl=?MwT(BDp)XnC9Fp^~WF^9v4~ym-GiV_wr<7eB9h z_o93clBJ|qZI}PvDc}k^qci)rpp9;%(L`7is_nhd01qElGaF}1& zoJVeDy+;B*3UxGaSw}BeGn?^USf=pZ2X4dhj>|&-o(D5XgR&P50PCO_XLs)~EKntt zacr2c416PGNWBa)J36o8$Z$d7+|<6l^`GCMa86&3c3cl4tXy0KZPngs{p(xby;jT5 zjwqzI_4bV?Qu=Oe=L?qCE?DkOO8Kk2ymW{2-#Y+;M_|VzxH9$=oa5L#+O=`eTpu@P zvT+|=?mR9j!sWNm=~mADSEe2bP1?mx4ex53hEU7Z)z54Pi&`3yVj5E{CBwdtFN2+5 zT-=g-2urJmjHCD>C$}8I{hOOwZk@siY^R%Rc=Ap_Y3x>&4xB7S1D!o?!NDhoqg&KU z<}>*!oRCMd_~hH+rNnXX09PVcb_pcM$NsU27JMOADF1Z4K0gFjv;t}3>8Ml{a5VGH z7(30@?6MPyHevnln0|;C!ywsEuwTNS0IqnF>1p3mulXBa7`=|frG0n>1jrw#qyiUPO!fy?hPE{ScqroXkKj1hpeW=w2!W*gs;puhD& zeSTtxvM#Z?zJ6#ic+H(Xf`PM|yA$i5Egt@!=tM#`Ba?Er&+*Li5qWZb`Y_R-neRX$ z?ZN)F9+8W+SnKdmr=TVYK>`lzJrYTup z;&wjKSA&ze@(KD;=-{ktzTwEb*$<;iR~D;u0%E>jbU)AE1BT@XTuPCq!nrgJggkM= z`goK`1}MHJsl>9H`jw9sHjb>p1tFtO%Auw}<%>7begol|ob{fLf9!Tu-b&CoWuaag z9m^Nn0fmdl;%5F~fI`(e1AFt|Ec}uXH*iI2dAmU{9toA5^{AjVt5Zd| z#e@yk$N4F9&ivf7?VM{0B?-4l!X!I{eoo9k^L-?0PSHp8W7y2^fw2z(Z@YVhrk70R z_;}(WJ-x>*Vr;x1^i&TzGU21ny=Q!@#3&9UB2GKQKR}!Dw#Dt5-?UD9Gw4eH?Q^1u z`(UhSvS7+=b=q_jo4?EW!U;!}b&+f9V%ClW+EoTRE_~3ISjj?Et*ncbYF83`&t+w@ z=D%Nj6LaJs@#%;1f~S@OUe(`D^Tj1OEoRZ29+~fE(&=r|!c_0B0KO&SuA5 z=u|Jx)Z5{y6NA_Lc)~0*2ew5^-P2X8epA~-hrp_vflCIC5_1tx4uzkhZ{PQr^Z>y4 zNdGWYBqCIy8x@Y!kC0pKn5g`xSK9PyC+)?(TTY`Rc+iCn<51Z@XgE3EA*go-F2=Ki z{MZDYHIzJBliqaOxGJ`4u39}zBx>9y!N@XH)X0!5sqbo-b(sb(X(Z8g{2^8bOvYLm zxjGdVk^yPJV|qK9S0s>BSzLgg6dWVOC8zQ%A|uPEAjb5CcQwPj!z|CV8=Ht_l9(-g z?}9=|R;5`-?^)o?8glU8h${h`f*?6T)RPN*Kuy5d7a}%)Cz6)T7i@-!-X6n>OGeiQ zQTc(oi`BuJt_iFumVDs1bjw4rqYtg)u-(*J72u#F%QM8q!E2}6RfKs5pa}EENEQ;* zXgExLH;K0B@Q5en<}Q=Vyy0F`)AI^1dWv)XZvQrlxY|G_#>k8x3YiL^4k@z1MAsR4vE<%-0#@nUZ~?*We;8fxmkS&xJmJvWPKaL6+O=xh>@y zo+4t{_I0(!K;H)LZbIs-+kXU3n_dB7{m^zj=Gc9mWs2Z}LdU5I9~uJ3jK;N_A0alU zf4a!ta<^B5H&F%&%foKpYrTWIFEux$75?@0R(*4d_~L_+)vr1rwK zvR;?MQ?EyKKhMoDk2YH6$!ig^W=hSi?L_nC9dI8(;|HW(y_Cw1+BU=3F!jWFx_!(1 zHdDsP;}-XPAA7O*iPK&^s)5Q<6s}x-c6{X(YY~J8sW{^VwV6a}%p6c33L&mcz{Z3? z9L0&)aDO^TClBD-KSPcCZYFkl4C9q@s}mKFHafc3IUzB+dWQ!vKLhd(ta~=+YzLud zpPs4KCTKkEq+Tekdfl9Gstrzt1s%vIa5@OwiAaJ~1wC*1ElCU#uOc4}w)c)Olx z|9I?j=XuP)6H6J_KKxL=rOf3W{~sSg&z}#pvnxFoer|d$+!=2zH13|;NGqo!j#(Tb zdL+k9cA*ZZpW+m@8y$^*{=zE=NW$1l;4OmVW}f2r;%2I0JAi?*9}AYjv*A=YLt)$< z=7-UzyC`z~YpoHN2Uq<24U|Nj`CCyw?WyrkcPs-O znCj79<}^=wb>k9bwx!0?`APzyS_`IJVl>Dvz@+xW$fnli3m#KNEJq0>5>%!H=oNka zt3YrR3P4-19FuV~892#xTw+swtDpajV=7!2;|*+p&!6Zt!2MNB4$Ge`CY-(5nqfO= z(1SWRtSi@++LC!WhZt;bQtUW~ZNw=+YHia}7)_S=4$L_YIgy8&!OI~cJV3Va2#cWF z%US@Ye~@JppuP za?^5+%6q*GiZ;hF&LGW4%*r#2sUrC^TPTfi&ra#qMr8ibzU0b<2QyDU4R$M7=5D-_ zDN9XyMXlTm@>4Oey5C^TD%xx~Y~YM+53V>f@^J8S<5wzE8VX}ZYqn>rXOq6&v5YA9 ua+{MI?)MIIz2fO<9g4eqq&fS{VH*wqey6G;H3E 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
&jHW|E zhiSGIG!LHxyTBTHvSe9T*4p&cX<3#+>047wjP;_mb>?4SPaGspW+;SxfHjtgOkxw4 d_$>q;87_$foK-z_sR#!B76{s&DTJE{Nx literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/icon_dialer_cancel_black.png b/app/src/main/res/drawable-hdpi/icon_dialer_cancel_black.png new file mode 100644 index 0000000000000000000000000000000000000000..d7f4a9e020231ff351f8903d5c7ed1a6ce78f301 GIT binary patch literal 713 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r51|<6gKdl8)jKx9jP7LeL$-HD>U~2YsaSW-5 zdwct??_mc4mIuD-7dT6prZNDbgSvz20k4Rzp89t-)w_i=|4eF6d3<*IN6Yd)|7E;F z7LHf7%ov*#1r{(kGH!_B6j9J%n5Nyx#KL-@NHw5g0Yk((7A^r1hSO6W7@L?9b_#hg zRV1hJr&Acjisq`iFa;D<35nsj8Z|%MV2G|?RdHWZ`?jw7`VXvEm(A7Nvw}TeYq`UkKa$3dG6xqsu3>Zepdp~m zsQlrS;A)2GkAHH0yOx~%a{ogti=x!=?`m*)4S|v=HJaQUaBO#UcFPiaIr6IoVF6{gKNEJQ!8{k3hI@QJM7rG zIDCcJt82$xx(qM;o|~uo)!kmFMp0znR1<-Mh<-s%o_}+ue=TET*{{!t67L!g0Sr3f kOspJS4Ntu=6U!(0FyHloJ>K)D0MjOer>mdKI;Vst0Dn~`Bme*a literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/icon_dialer_cancel_white.png b/app/src/main/res/drawable-hdpi/icon_dialer_cancel_white.png new file mode 100644 index 0000000000000000000000000000000000000000..92b9c0502b0df446db4be91351232f7b96b55c49 GIT binary patch literal 736 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r51|<6gKdl8)jKx9jP7LeL$-HD>V4CIW;uum9 z_xAQf-@^t1tPeh`ZQ#stQfE|K=)*KSK+SN|6^~GnNfz&G-aD+X|1nW+XH9M4t0j8N z#8m(2jLVYvBv&?)s@!WNC!kJ*VyW%4d_ShLk`=FQtq z{rwt?*dJW?{q)TCl3@6UsP)r>PT5X!;yCa`0pWFVQ*5vN}pix>NyTioB zD&hIdJuMzby%{+aE`7YjAm`xIIGy*ycK3eozO4lgVJc@A+N1a4wfy*JsSu zF7*HO?BD|BAVz*QeNiRe3!M3fmZ(l-y3tr}w)wqIzt40%orev!6_<-|_hrUc2stzM zKaidAtyQUwQK@34pfiK*hfPX+>|c(Y?ywLkV2Lw3lGvd9(MXYxvFE_)rWbq?ozodF zicV-e?pDH_^2ksymcjVJMuEfwQ(MhG?<~KO`=f8C@qhPcTd!?xH4{#fh)Wmxf5d5a z!5+RNA`RKxxfvDKf)D?>^)(h0SI_Us-J754^Q6D=dit)*Mc2P=|10sLWnI%9rU~2SqaSW-5 zdwct??_mQG)(5wFB^cEn%ru|TAezAB*1+4q*}!{)A#TDACN{^Wn2R4St8AP6c>e1j z5vxK>_htQhsp9vhL^)@|0k&0X8wCV-7#TS^xEh}NC@?xQZkWTVqM*Sr&A5?;h4ny@ z+JuG$3=!v8gakwwPR~4$d7xJC;`Pm^XEZp=y6%4cpl|!^d#+CwR@a-dc^>$$)%DF} z;*QUH6Tk1i&GAF~(V@$6vyLz`^&LOmem$I*={QT>{MXC)ZtuV2^T6YW)5k4eQgU4K zEE|hIdHRkmU9C~9LIun{4dVEjG0kfn3^PIbNu+x4>b)|CvWJl`4W7~ zYU$z`VNroL;tSS!&F$6DoTs-g!XvrRM*P8Yly-v_>ouPWc4E$*4-V$%HFYXOti zlGRfkOj@5aUHLqJ9(%2>`XWo4`x~(GDiv;!F`z7fs?c z5;R>tR}?c8D~C0jiyMe1nO1l+1S^NNZWl2SO)9P6NXR*&^)cW;M90-fM;TlMS0C$U z-668EYR`;@V!?dZCsq&aqIdh)-I0ixza{$3b7trFbDis_WbV1a`6e()an^BfR*UBa z^SqKoD>NAek7RuaV%Bq9!==yuK<3D+4@HcxzTfFM(VG0CR&?Ux3kz=s?Y}YIaNYfH z8cNHRW!?TerE;F!s&C2oyZg~$y@}OIpA?n!t^510Jo>hI{!Yf#%%9#GFxEQFd&`15 r;vJZpm=Y|7JsbiUbkdm|59l9SFfVYy?1=lol*!=f>gTe~DWM4fwInQ~ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/icon_dialer_confirm_white.png b/app/src/main/res/drawable-hdpi/icon_dialer_confirm_white.png new file mode 100644 index 0000000000000000000000000000000000000000..ed6f6d25977bbf6e0c2ea332a6d0d483fa33e434 GIT binary patch literal 748 zcmVPx%rb$FWRCr$P+s$#*KoAAs?hFXQM8KJw9RVpo1cU$?fFm$uKnD0i6 zv#za08jbYkS9-eaVW+pG&u?ZV%~*v8B%n|=i-mw-2na|(Pyj4v0tpBTfaOde0YL$< zoCzc#C;*l-fdm8vz;Y&#fS>?a&IHZ?n%Rwr+^Fhf%$R^zIsxuML~g@ZPa^VNRXbL9f2pB{b@VwQNs=g-RM7$F4PF4Ecj|uqym>27|m#vw=>-3~1 zFVx*l&B%ux16Sfbs_GqQ;q(dP(rOm(G%kWS;=`5aO5XXx4+WST?@$RWfp-|dQh0{| zEQz;!z|wfT2CRX%Tfka)y9BI>w>!Yvc)J2@fwvpLR(OkmVST{gm-)M}=;BJNhvJra zQ9v{EwSn`(%ITH1i1<4(|Lo#ujW-KuX1*%*enQFdd~v0D8hgNt0a_$t%@KRSn*Ty$dT6))vJ zusLGSc#DAEz|5K<_KueX*a~q3ykx-Ih@;@G0<48N65eXS(ukwsZ2~NXI3nI=z}$$V z;z5A95J$#?0a3)!@v;DJMce~kHoy&t_agEo;W^uzMEB<<{zkE8S+}>Xc3o{(baQVlR9(RVbw5s_CS@>fKDJ@0b3+&(gj+sk=Y z1sqN%;e-j8fYePF2G6z2awZV`vk;Jgpa59T1QHMw0Lz&`0)hfyITJ`gPyj4v0tpBT efaOde2>1`Pplx7`#0=a30000 + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bt_dialer_normnl.xml b/app/src/main/res/drawable/bt_dialer_normnl.xml new file mode 100644 index 0000000..f1d7727 --- /dev/null +++ b/app/src/main/res/drawable/bt_dialer_normnl.xml @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bt_dialer_pressed.xml b/app/src/main/res/drawable/bt_dialer_pressed.xml new file mode 100644 index 0000000..d0eaaa5 --- /dev/null +++ b/app/src/main/res/drawable/bt_dialer_pressed.xml @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bt_dialer_selector.xml b/app/src/main/res/drawable/bt_dialer_selector.xml new file mode 100644 index 0000000..6a3fdd6 --- /dev/null +++ b/app/src/main/res/drawable/bt_dialer_selector.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/icon_dialer_cancel.xml b/app/src/main/res/drawable/icon_dialer_cancel.xml new file mode 100644 index 0000000..4fd9063 --- /dev/null +++ b/app/src/main/res/drawable/icon_dialer_cancel.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/icon_dialer_confirm.xml b/app/src/main/res/drawable/icon_dialer_confirm.xml new file mode 100644 index 0000000..bbeb0a3 --- /dev/null +++ b/app/src/main/res/drawable/icon_dialer_confirm.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/permission_auth_bg.xml b/app/src/main/res/drawable/permission_auth_bg.xml new file mode 100644 index 0000000..d05e149 --- /dev/null +++ b/app/src/main/res/drawable/permission_auth_bg.xml @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/permission_auth_dis_bg.xml b/app/src/main/res/drawable/permission_auth_dis_bg.xml new file mode 100644 index 0000000..a86b347 --- /dev/null +++ b/app/src/main/res/drawable/permission_auth_dis_bg.xml @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/permission_auth_selector.xml b/app/src/main/res/drawable/permission_auth_selector.xml new file mode 100644 index 0000000..48bf356 --- /dev/null +++ b/app/src/main/res/drawable/permission_auth_selector.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/permission_card_background.xml b/app/src/main/res/drawable/permission_card_background.xml new file mode 100644 index 0000000..c42196d --- /dev/null +++ b/app/src/main/res/drawable/permission_card_background.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/permission_description_popup_bg.xml b/app/src/main/res/drawable/permission_description_popup_bg.xml new file mode 100644 index 0000000..b33fb6a --- /dev/null +++ b/app/src/main/res/drawable/permission_description_popup_bg.xml @@ -0,0 +1,13 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/activity_exit.xml b/app/src/main/res/layout-land/activity_exit.xml index 660539a..86de838 100644 --- a/app/src/main/res/layout-land/activity_exit.xml +++ b/app/src/main/res/layout-land/activity_exit.xml @@ -11,7 +11,42 @@ + android:background="@color/gray"> + + + + + + + + + + + app:layout_constraintVertical_bias="0.35"> @@ -70,11 +106,12 @@ android:layout_height="wrap_content" android:layout_marginStart="@dimen/dp_48" android:layout_marginEnd="@dimen/dp_48" + android:layout_marginTop="@dimen/dp_8" android:gravity="center" android:maxLines="2" android:minLines="2" android:text="退出系统" - android:textColor="@color/white" + android:textColor="@color/black" android:textSize="@dimen/sp_14" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" @@ -89,7 +126,9 @@ android:visibility="visible" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toStartOf="parent"> + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/imageView5" + app:layout_constraintVertical_bias="0.9"> - + android:layout_weight="1"> - + - + + + android:layout_weight="1"> + + + + + + + + + - + android:layout_weight="1"> - + + - + android:layout_weight="1"> + + + + + + + + + - + android:layout_weight="1"> - + - + + + android:layout_weight="1"> + + + + + + + + + - + android:layout_weight="1"> - + + - + android:layout_weight="1"> + + + + + + + + + + diff --git a/app/src/main/res/layout-land/activity_passwd.xml b/app/src/main/res/layout-land/activity_passwd.xml new file mode 100644 index 0000000..83c52bd --- /dev/null +++ b/app/src/main/res/layout-land/activity_passwd.xml @@ -0,0 +1,382 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout-land/fragment_chinese.xml b/app/src/main/res/layout-land/fragment_chinese.xml index efcf6e3..b66bc23 100644 --- a/app/src/main/res/layout-land/fragment_chinese.xml +++ b/app/src/main/res/layout-land/fragment_chinese.xml @@ -130,8 +130,7 @@ android:layout_marginBottom="@dimen/dp_8" android:orientation="vertical" app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintTop_toBottomOf="@+id/tv_more_app" - tools:layout_editor_absoluteX="6dp"> + app:layout_constraintTop_toBottomOf="@+id/tv_more_app"> + app:layout_constraintTop_toTopOf="parent"> + android:background="@color/gray"> + + + + + + + + + + app:layout_constraintVertical_bias="0.35"> + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/imageView5" + app:layout_constraintVertical_bias="0.9"> - + android:layout_weight="1"> - + - + + + android:layout_weight="1"> + + + + + + + + + - + android:layout_weight="1"> - + + - + android:layout_weight="1"> + + + + + + + + + - + android:layout_weight="1"> - + - + + + android:layout_weight="1"> + + + + + + + + + - + android:layout_weight="1"> - + + - + android:layout_weight="1"> + + + + + + + + + + diff --git a/app/src/main/res/layout-sw800dp/activity_passwd.xml b/app/src/main/res/layout-sw800dp/activity_passwd.xml new file mode 100644 index 0000000..83c52bd --- /dev/null +++ b/app/src/main/res/layout-sw800dp/activity_passwd.xml @@ -0,0 +1,382 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout-sw800dp/fragment_chinese.xml b/app/src/main/res/layout-sw800dp/fragment_chinese.xml index cb40018..74a4327 100644 --- a/app/src/main/res/layout-sw800dp/fragment_chinese.xml +++ b/app/src/main/res/layout-sw800dp/fragment_chinese.xml @@ -130,8 +130,7 @@ android:layout_marginBottom="@dimen/dp_8" android:orientation="vertical" app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintTop_toBottomOf="@+id/tv_more_app" - tools:layout_editor_absoluteX="6dp"> + app:layout_constraintTop_toBottomOf="@+id/tv_more_app"> + app:layout_constraintTop_toTopOf="parent"> + android:background="@color/gray"> + + + + + + + + + + app:layout_constraintVertical_bias="0.35"> + app:layout_constraintVertical_bias="0.8"> - + android:layout_weight="1"> - + - + + + android:layout_weight="1"> + + + + + + + + + - + android:layout_weight="1"> - + + - + android:layout_weight="1"> + + + + + + + + + - + android:layout_weight="1"> - + - + + + android:layout_weight="1"> + + + + + + + + + - + android:layout_weight="1"> - + + - + android:layout_weight="1"> + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 085c222..e2808ee 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -195,7 +195,7 @@ android:id="@+id/tv_appname2" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="我的设备" + android:text="设备守护" android:textColor="@color/white" android:textSize="@dimen/sp_7" app:layout_constraintEnd_toEndOf="@+id/iv_icon2" diff --git a/app/src/main/res/layout/activity_manual.xml b/app/src/main/res/layout/activity_manual.xml index a03503e..387abcb 100644 --- a/app/src/main/res/layout/activity_manual.xml +++ b/app/src/main/res/layout/activity_manual.xml @@ -34,8 +34,7 @@ android:layout_marginTop="@dimen/dp_8" android:layout_marginEnd="@dimen/dp_16" android:background="@drawable/search_view_bg" - app:layout_constraintTop_toBottomOf="@+id/textView9" - tools:layout_editor_absoluteX="18dp"> + app:layout_constraintTop_toBottomOf="@+id/textView9"> + android:background="@color/gray"> + app:layout_constraintVertical_bias="0.35"> + app:layout_constraintVertical_bias="0.8"> - + android:layout_weight="1"> - + - + + + android:layout_weight="1"> + + + + + + + + + - + android:layout_weight="1"> - + + - + android:layout_weight="1"> + + + + + + + + + - + android:layout_weight="1"> - + - + + + android:layout_weight="1"> + + + + + + + + + - + android:layout_weight="1"> - + + - + android:layout_weight="1"> + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_permission.xml b/app/src/main/res/layout/activity_permission.xml new file mode 100644 index 0000000..fce5a46 --- /dev/null +++ b/app/src/main/res/layout/activity_permission.xml @@ -0,0 +1,399 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_chinese.xml b/app/src/main/res/layout/fragment_chinese.xml index efcf6e3..b66bc23 100644 --- a/app/src/main/res/layout/fragment_chinese.xml +++ b/app/src/main/res/layout/fragment_chinese.xml @@ -130,8 +130,7 @@ android:layout_marginBottom="@dimen/dp_8" android:orientation="vertical" app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintTop_toBottomOf="@+id/tv_more_app" - tools:layout_editor_absoluteX="6dp"> + app:layout_constraintTop_toBottomOf="@+id/tv_more_app"> + app:layout_constraintTop_toTopOf="parent"> + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings_demo.xml b/app/src/main/res/values/strings_demo.xml new file mode 100644 index 0000000..1b0c5cc --- /dev/null +++ b/app/src/main/res/values/strings_demo.xml @@ -0,0 +1,41 @@ + + + + 获取%s成功 + 检测到你刚刚从权限设置界面返回回来 + + 当前版本不是 Android 12 及以上,旧版本的需要定位权限才能进行扫描蓝牙 + 当前版本不是 Android 13 及以上,旧版本的需要定位权限才能进行扫描 WIFI + 当前版本不是 Android 10 及以上,旧版本的需要读取存储权限才能获取媒体位置权限 + 当前版本不是 Android 13 及以上,会自动变更为旧版的请求方式 + 当前版本不是 Android 11 及以上,会自动变更为旧版的请求方式 + 当前版本不是 Android 13 及以上,会自动变更为旧版的请求方式 + + 监听到新的通知消息,标题为:%s,内容为:%s + + 申请单个危险权限 + 申请多个危险权限 + 申请定位权限 + 申请传感器权限 + 申请身体活动权限 + 申请蓝牙权限 + 申请 WIFI 权限 + 申请读取图片位置权限 + 申请媒体文件读取权限 + 申请所有文件管理权限 + 申请安装包权限 + 申请悬浮窗权限 + 申请系统设置权限 + 申请通知权限 + 申请新版通知权限 + 申请通知栏监听权限 + 申请使用统计权限 + 申请闹钟提醒权限 + 申请勿扰权限 + 申请忽略电池优化权限 + 申请画中画权限 + 申请 VPN 权限 + 申请读取应用列表 + 跳转到应用详情页 + + \ No newline at end of file diff --git a/app/src/main/res/values/strings_permission.xml b/app/src/main/res/values/strings_permission.xml new file mode 100644 index 0000000..8ce4a50 --- /dev/null +++ b/app/src/main/res/values/strings_permission.xml @@ -0,0 +1,59 @@ + + + + 权限说明 + 授予 + 取消 + + 授权提醒 + 授权失败,请正确授予权限 + 授权失败,请正确授予%s + 获取权限失败,请手动授予权限 + 获取权限失败,请手动授予%s + 获取后台定位权限失败,请在定位权限中选择%s + 获取后台传感器权限失败,请在传感器权限中选择%s + 获取后台定位权限失败,\n请选择%s选项 + 获取后台传感器权限失败,\n请选择%s选项 + 始终允许 + 获取媒体位置权限失败\n请清除应用数据后重试 + 前往授权 + + 权限 + + + + 日历权限 + 相机权限 + 通讯录权限 + 定位权限 + 后台定位权限 + 附近设备权限 + 麦克风权限 + 电话权限 + 通话记录权限 + 身体传感器权限 + 后台身体传感器权限 + 健身运动权限 + 身体活动权限 + 读取媒体文件位置权限 + 短信权限 + 存储权限 + 发送通知权限 + 照片和视频权限 + 音乐和音频权限 + 读取应用列表权限 + + 所有文件访问权限 + 安装应用权限 + 悬浮窗权限 + 修改系统设置权限 + 通知权限 + 通知栏监听权限 + 查看使用情况权限 + 查看闹钟提醒权限 + 勿扰权限 + 忽略电池优化权限 + 画中画权限 + \tVPN\t权限 + + \ No newline at end of file diff --git a/verification-view/src/main/java/com/tuo/customview/PwdTextView.java b/verification-view/src/main/java/com/tuo/customview/PwdTextView.java index c364b8e..c10f1cc 100644 --- a/verification-view/src/main/java/com/tuo/customview/PwdTextView.java +++ b/verification-view/src/main/java/com/tuo/customview/PwdTextView.java @@ -2,7 +2,6 @@ package com.tuo.customview; import android.content.Context; import android.graphics.Canvas; -import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; @@ -33,7 +32,6 @@ public class PwdTextView extends AppCompatTextView { super(context, attrs, defStyleAttr); } - @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); @@ -41,7 +39,7 @@ public class PwdTextView extends AppCompatTextView { if (hasPwd) { // 画一个黑色的圆 Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); - paint.setColor(Color.WHITE); + paint.setColor(getResources().getColor(R.color.circle_f)); paint.setStyle(Paint.Style.FILL); canvas.drawCircle(getWidth() / 2, getHeight() / 2, radius, paint); }else { diff --git a/verification-view/src/main/res/values/colors.xml b/verification-view/src/main/res/values/colors.xml index 13365a7..3290900 100644 --- a/verification-view/src/main/res/values/colors.xml +++ b/verification-view/src/main/res/values/colors.xml @@ -1,6 +1,7 @@ - #2a2c36 + #C6C5C5 + #0480ff \ No newline at end of file