From a26ecba492d693393b4e6eb2f74db0efec678185 Mon Sep 17 00:00:00 2001 From: SuperMonster003 Date: Fri, 28 Nov 2025 14:28:54 +0800 Subject: [PATCH] 6.7.0 - Alpha12 - Fine tuning --- .../widget/ThemeColorRecyclerView.java | 63 +++++++++++++------ .../FloatingActionButtonAttributes.kt | 4 +- .../external/tasker/TaskPrefEditActivity.kt | 6 +- .../network/entity/SimpleVersionInfo.kt | 2 +- .../autojs/network/entity/VersionInfo.kt | 12 ++-- .../org/autojs/autojs/runtime/api/OcrRapid.kt | 7 +-- .../autojs/theme/app/ColorItemsActivity.kt | 3 +- .../theme/app/ColorLibrariesActivity.kt | 3 +- .../autojs/theme/app/ColorSelectActivity.kt | 4 +- .../timing/ExactAlarmPermissionHelper.kt | 7 ++- .../java/org/autojs/autojs/ui/BaseActivity.kt | 3 +- .../ui/keystore/ManageKeyStoreActivity.kt | 7 ++- .../org/autojs/autojs/ui/log/LogActivity.kt | 4 +- .../org/autojs/autojs/ui/main/MainActivity.kt | 3 +- .../scripts/BaseDisplayContentActivity.kt | 6 +- .../ui/main/scripts/ExplorerFragment.kt | 4 +- .../ui/main/task/TaskManagerFragment.kt | 4 +- .../ui/project/ProjectConfigActivity.kt | 8 +-- .../ui/settings/DeveloperOptionsFragment.kt | 4 +- .../DisplayVersionHistoriesActivity.kt | 4 +- .../ui/settings/LauncherIconPreference.kt | 2 +- .../autojs/ui/settings/PreferencesFragment.kt | 4 +- .../ui/timing/TimedTaskSettingActivity.kt | 47 +++++--------- .../java/org/autojs/autojs/util/ViewUtils.kt | 9 ++- app/src/main/res/xml/fragment_preferences.xml | 2 +- 25 files changed, 120 insertions(+), 102 deletions(-) diff --git a/app/src/main/java/androidx/recyclerview/widget/ThemeColorRecyclerView.java b/app/src/main/java/androidx/recyclerview/widget/ThemeColorRecyclerView.java index d6f6a178..7b4e745a 100644 --- a/app/src/main/java/androidx/recyclerview/widget/ThemeColorRecyclerView.java +++ b/app/src/main/java/androidx/recyclerview/widget/ThemeColorRecyclerView.java @@ -3,10 +3,8 @@ package androidx.recyclerview.widget; import android.content.Context; import android.util.AttributeSet; import android.widget.EdgeEffect; - import androidx.annotation.Nullable; import androidx.core.widget.EdgeEffectCompat; - import org.autojs.autojs.theme.ThemeColor; import org.autojs.autojs.theme.ThemeColorManager; import org.autojs.autojs.theme.ThemeColorMutable; @@ -15,12 +13,19 @@ import java.lang.reflect.Field; /** * Created by Stardust on Aug 14, 2016. + * Modified by SuperMonster003 as of Dec 1, 2021. */ public class ThemeColorRecyclerView extends RecyclerView implements ThemeColorMutable { - private Field mLeftGlowField, mTopGlowField, mRightGlowField, mBottomGlowField; - private Field mEdgeEffectField; private int mColorPrimary; + + private Field mLeftGlowField; + private Field mTopGlowField; + private Field mRightGlowField; + private Field mBottomGlowField; + + private Field mEdgeEffectField; + private boolean hasAppliedThemeColorLeft; private boolean hasAppliedThemeColorTop; private boolean hasAppliedThemeColorRight; @@ -44,8 +49,9 @@ public class ThemeColorRecyclerView extends RecyclerView implements ThemeColorMu private boolean applyThemeColor(Field edgeEffectCompatField) { try { EdgeEffectCompat edgeEffectCompat = (EdgeEffectCompat) edgeEffectCompatField.get(this); - if (edgeEffectCompat != null) + if (edgeEffectCompat != null) { return setEdgeEffectColor(edgeEffectCompat, mColorPrimary); + } } catch (Exception ignored) { /* Ignored. */ } @@ -67,12 +73,29 @@ public class ThemeColorRecyclerView extends RecyclerView implements ThemeColorMu } catch (Exception e) { e.printStackTrace(); } + + // android:fadeScrollbars="true" + // setScrollbarFadingEnabled(true); + + // android:scrollbarDefaultDelayBeforeFade="600" + // setScrollBarDefaultDelayBeforeFade(600); + + // android:scrollbarFadeDuration="500" + // setScrollBarFadeDuration(500); + + // android:scrollbars="vertical" + // setVerticalScrollBarEnabled(true); + + // To ensure scrollbar fading works properly. + // setFadingEdgeLength(0); + ThemeColorManager.add(this); } private boolean setEdgeEffectColor(EdgeEffectCompat compat, int color) { - if (compat == null) + if (compat == null) { return false; + } try { EdgeEffect edgeEffect = (EdgeEffect) mEdgeEffectField.get(compat); if (edgeEffect != null) { @@ -86,40 +109,40 @@ public class ThemeColorRecyclerView extends RecyclerView implements ThemeColorMu @Override public void setThemeColor(ThemeColor color) { - if (color.colorPrimary == mColorPrimary) + if (color.colorPrimary == mColorPrimary) { return; + } mColorPrimary = color.colorPrimary; invalidateGlows(); } void invalidateGlows() { super.invalidateGlows(); - hasAppliedThemeColorBottom = hasAppliedThemeColorLeft = hasAppliedThemeColorRight = hasAppliedThemeColorTop = false; + hasAppliedThemeColorLeft = false; + hasAppliedThemeColorTop = false; + hasAppliedThemeColorRight = false; + hasAppliedThemeColorBottom = false; } void ensureLeftGlow() { super.ensureLeftGlow(); - if (!hasAppliedThemeColorLeft) - hasAppliedThemeColorLeft = applyThemeColor(mLeftGlowField); - } - - void ensureRightGlow() { - super.ensureLeftGlow(); - if (!hasAppliedThemeColorRight) - hasAppliedThemeColorRight = applyThemeColor(mRightGlowField); + hasAppliedThemeColorLeft = hasAppliedThemeColorLeft || applyThemeColor(mLeftGlowField); } void ensureTopGlow() { super.ensureTopGlow(); - if (!hasAppliedThemeColorTop) - hasAppliedThemeColorTop = applyThemeColor(mTopGlowField); + hasAppliedThemeColorTop = hasAppliedThemeColorTop || applyThemeColor(mTopGlowField); } + void ensureRightGlow() { + super.ensureLeftGlow(); + hasAppliedThemeColorRight = hasAppliedThemeColorRight || applyThemeColor(mRightGlowField); + } + void ensureBottomGlow() { super.ensureBottomGlow(); - if (!hasAppliedThemeColorBottom) - hasAppliedThemeColorBottom = applyThemeColor(mBottomGlowField); + hasAppliedThemeColorBottom = hasAppliedThemeColorBottom || applyThemeColor(mBottomGlowField); } } diff --git a/app/src/main/java/org/autojs/autojs/core/ui/attribute/FloatingActionButtonAttributes.kt b/app/src/main/java/org/autojs/autojs/core/ui/attribute/FloatingActionButtonAttributes.kt index d59f04af..e9e93cff 100644 --- a/app/src/main/java/org/autojs/autojs/core/ui/attribute/FloatingActionButtonAttributes.kt +++ b/app/src/main/java/org/autojs/autojs/core/ui/attribute/FloatingActionButtonAttributes.kt @@ -6,7 +6,7 @@ import org.autojs.autojs.core.ui.inflater.ResourceParser import org.autojs.autojs.core.ui.inflater.util.Dimensions import org.autojs.autojs.runtime.ScriptRuntime import org.autojs.autojs.util.ColorUtils -import org.autojs.autojs.util.ViewUtils +import org.autojs.autojs.util.ViewUtils.excludeFloatingActionButtonFromBottomNavigationBar /** * Modified by SuperMonster003 as of Jan 21, 2023. @@ -27,7 +27,7 @@ open class FloatingActionButtonAttributes(scriptRuntime: ScriptRuntime, resource registerAttrs(arrayOf("backgroundTint", "bgTint")) { view.backgroundTintList = ColorUtils.toColorStateList(view, it) } registerAttr("ensureMinTouchTargetSize") { view.setEnsureMinTouchTargetSize(it.toBoolean()) } registerAttr("maxImageSize") { view.setMaxImageSize(it.toInt()) } - registerAttr("excludeFromNavigationBar") { ViewUtils.excludeFloatingActionButtonFromBottomNavigationBar(view) } + registerAttr("excludeFromNavigationBar") { view.excludeFloatingActionButtonFromBottomNavigationBar() } } } \ No newline at end of file diff --git a/app/src/main/java/org/autojs/autojs/external/tasker/TaskPrefEditActivity.kt b/app/src/main/java/org/autojs/autojs/external/tasker/TaskPrefEditActivity.kt index 32514d23..124f0ab8 100644 --- a/app/src/main/java/org/autojs/autojs/external/tasker/TaskPrefEditActivity.kt +++ b/app/src/main/java/org/autojs/autojs/external/tasker/TaskPrefEditActivity.kt @@ -16,6 +16,8 @@ import org.autojs.autojs.model.explorer.Explorers import org.autojs.autojs.ui.edit.EditorView import org.autojs.autojs.ui.explorer.ExplorerView import org.autojs.autojs.util.ViewUtils +import org.autojs.autojs.util.ViewUtils.excludeContentViewFromHorizontalNavigationBar +import org.autojs.autojs.util.ViewUtils.excludePaddingClippableViewFromBottomNavigationBar import org.autojs.autojs6.R import org.autojs.autojs6.databinding.ActivityTaskerEditBinding import org.json.JSONException @@ -40,8 +42,8 @@ class TaskPrefEditActivity : AbstractAppCompatPluginActivity() { binding.editScript.setOnClickListener { editPreExecuteScript() } ViewUtils.setToolbarAsBack(this, R.string.text_please_choose_a_script) - ViewUtils.excludeContentViewFromHorizontalNavigationBar(this) - ViewUtils.excludePaddingClippableViewFromBottomNavigationBar(binding.scriptList) + this.excludeContentViewFromHorizontalNavigationBar() + binding.scriptList.excludePaddingClippableViewFromBottomNavigationBar() initScriptListRecyclerView() } diff --git a/app/src/main/java/org/autojs/autojs/network/entity/SimpleVersionInfo.kt b/app/src/main/java/org/autojs/autojs/network/entity/SimpleVersionInfo.kt index a10f5b25..7bdcb3ed 100644 --- a/app/src/main/java/org/autojs/autojs/network/entity/SimpleVersionInfo.kt +++ b/app/src/main/java/org/autojs/autojs/network/entity/SimpleVersionInfo.kt @@ -1,3 +1,3 @@ package org.autojs.autojs.network.entity -class SimpleVersionInfo(val versionName: String?, val versionCode: Int) \ No newline at end of file +class SimpleVersionInfo(val versionName: String?, val versionCode: Long) \ No newline at end of file diff --git a/app/src/main/java/org/autojs/autojs/network/entity/VersionInfo.kt b/app/src/main/java/org/autojs/autojs/network/entity/VersionInfo.kt index 06417c13..071658ae 100644 --- a/app/src/main/java/org/autojs/autojs/network/entity/VersionInfo.kt +++ b/app/src/main/java/org/autojs/autojs/network/entity/VersionInfo.kt @@ -5,7 +5,7 @@ import org.autojs.autojs.util.StringUtils.str import org.autojs.autojs.util.UpdateUtils.isVersionIgnored import org.autojs.autojs6.BuildConfig import org.autojs.autojs6.R -import kotlin.math.roundToInt +import kotlin.math.roundToLong /** * Created by Stardust on Sep 20, 2017. @@ -16,7 +16,7 @@ class VersionInfo : ExtendedVersionInfo { var versionName: String = "" private set - var versionCode = 0 + var versionCode = 0L private set val isNewer: Boolean @@ -43,7 +43,7 @@ class VersionInfo : ExtendedVersionInfo { Log.d(TAG, "versionName: $versionName") } if (versionCode <= 0 && line.contains(regexVersionCode)) { - versionCode = regexVersionCode.find(line)?.groupValues?.get(1)?.toDouble()?.roundToInt() ?: -1 + versionCode = regexVersionCode.find(line)?.groupValues?.get(1)?.toDouble()?.roundToLong() ?: -1L Log.d(TAG, "versionCode: $versionCode") } if (versionName.isNotBlank() && versionCode > 0) { @@ -52,7 +52,7 @@ class VersionInfo : ExtendedVersionInfo { } } - constructor(versionName: String, versionCode: Int) { + constructor(versionName: String, versionCode: Long) { this.versionName = versionName this.versionCode = versionCode } @@ -94,13 +94,13 @@ class VersionInfo : ExtendedVersionInfo { val indexForVersionName = 0 val indexForVersionCode = 1 var versionName: String? = null - var versionCode = -1 + var versionCode = -1L val split = summary.toString().split(" ".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray() for (i in split.indices) { if (i == indexForVersionName) { versionName = split[i] } else if (i == indexForVersionCode) { - versionCode = split[i].replace("[()]".toRegex(), "").toInt() + versionCode = split[i].replace("[()]".toRegex(), "").toLong() } } return SimpleVersionInfo(versionName, versionCode) diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/OcrRapid.kt b/app/src/main/java/org/autojs/autojs/runtime/api/OcrRapid.kt index 619c2854..ea9cbf08 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/OcrRapid.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/OcrRapid.kt @@ -1,11 +1,10 @@ package org.autojs.autojs.runtime.api -import android.graphics.Bitmap import android.graphics.Rect +import androidx.core.graphics.createBitmap import com.benjaminwan.ocrlibrary.TextBlock import org.autojs.autojs.AutoJs import org.autojs.autojs.core.image.ImageWrapper -import java.util.ArrayList import com.benjaminwan.ocrlibrary.OcrResult as RapidOcrResult class OcrRapid { @@ -47,7 +46,7 @@ class OcrRapid { return detectRaw(image).textBlocks.map { it.text } } - private fun OcrRapid.detectRaw(image: ImageWrapper?): RapidOcrResult { + private fun detectRaw(image: ImageWrapper?): RapidOcrResult { image ?: return mEmptyOcrResult val bitmap = image.bitmap if (bitmap.isRecycled) { @@ -67,6 +66,6 @@ class OcrRapid { ) } - private fun newEmptyOutputBitmap() = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888) + private fun newEmptyOutputBitmap() = createBitmap(1, 1) } diff --git a/app/src/main/java/org/autojs/autojs/theme/app/ColorItemsActivity.kt b/app/src/main/java/org/autojs/autojs/theme/app/ColorItemsActivity.kt index e9d7087b..fd91ad7a 100644 --- a/app/src/main/java/org/autojs/autojs/theme/app/ColorItemsActivity.kt +++ b/app/src/main/java/org/autojs/autojs/theme/app/ColorItemsActivity.kt @@ -34,6 +34,7 @@ import org.autojs.autojs.theme.app.ColorLibrariesActivity.Companion.PresetColorL import org.autojs.autojs.theme.app.ColorLibrariesActivity.Companion.presetColorLibraries import org.autojs.autojs.util.ColorUtils import org.autojs.autojs.util.ViewUtils +import org.autojs.autojs.util.ViewUtils.excludePaddingClippableViewFromBottomNavigationBar import org.autojs.autojs.util.ViewUtils.onceGlobalLayout import org.autojs.autojs.util.ViewUtils.setMenuIconsColorByColorLuminance import org.autojs.autojs6.R @@ -91,7 +92,7 @@ class ColorItemsActivity : ColorSelectBaseActivity() { it.adapter = ColorItemAdapter(library.colors).also { mAdapter = it } it.addItemDecoration(DividerItemDecoration(this, VERTICAL)) - ViewUtils.excludePaddingClippableViewFromBottomNavigationBar(it) + it.excludePaddingClippableViewFromBottomNavigationBar() setUpSelectedPosition(mAdapter) diff --git a/app/src/main/java/org/autojs/autojs/theme/app/ColorLibrariesActivity.kt b/app/src/main/java/org/autojs/autojs/theme/app/ColorLibrariesActivity.kt index 2f254e78..5b0cf441 100644 --- a/app/src/main/java/org/autojs/autojs/theme/app/ColorLibrariesActivity.kt +++ b/app/src/main/java/org/autojs/autojs/theme/app/ColorLibrariesActivity.kt @@ -17,6 +17,7 @@ import org.autojs.autojs.extension.ViewExtensions.setOnTitleViewClickListener import org.autojs.autojs.theme.ThemeChangeNotifier import org.autojs.autojs.theme.ThemeColorManager import org.autojs.autojs.util.ViewUtils +import org.autojs.autojs.util.ViewUtils.excludePaddingClippableViewFromBottomNavigationBar import org.autojs.autojs.util.ViewUtils.setMenuIconsColorByColorLuminance import org.autojs.autojs6.R import org.autojs.autojs6.databinding.MtActivityColorLibrariesBinding @@ -65,7 +66,7 @@ class ColorLibrariesActivity : ColorSelectBaseActivity() { it.layoutManager = LinearLayoutManager(this) it.adapter = libraryAdapter it.addItemDecoration(DividerItemDecoration(this, VERTICAL)) - ViewUtils.excludePaddingClippableViewFromBottomNavigationBar(it) + it.excludePaddingClippableViewFromBottomNavigationBar() } } diff --git a/app/src/main/java/org/autojs/autojs/theme/app/ColorSelectActivity.kt b/app/src/main/java/org/autojs/autojs/theme/app/ColorSelectActivity.kt index 036d49f8..0ace37ea 100644 --- a/app/src/main/java/org/autojs/autojs/theme/app/ColorSelectActivity.kt +++ b/app/src/main/java/org/autojs/autojs/theme/app/ColorSelectActivity.kt @@ -4,7 +4,7 @@ import android.os.Bundle import android.view.Menu import android.view.MenuItem import android.view.View -import org.autojs.autojs.util.ViewUtils +import org.autojs.autojs.util.ViewUtils.excludePaddingClippableViewFromBottomNavigationBar import org.autojs.autojs6.R import org.autojs.autojs6.databinding.MtActivityColorSelectBinding @@ -45,7 +45,7 @@ class ColorSelectActivity : ColorSelectBaseActivity() { mColorSettingRecyclerView = colorSettingRecyclerView.apply { setUpSelectedPosition(currentColor) setOnItemClickListener(mOnItemClickListener) - ViewUtils.excludePaddingClippableViewFromBottomNavigationBar(this) + excludePaddingClippableViewFromBottomNavigationBar() } } diff --git a/app/src/main/java/org/autojs/autojs/timing/ExactAlarmPermissionHelper.kt b/app/src/main/java/org/autojs/autojs/timing/ExactAlarmPermissionHelper.kt index f5fb60ed..7e2e108a 100644 --- a/app/src/main/java/org/autojs/autojs/timing/ExactAlarmPermissionHelper.kt +++ b/app/src/main/java/org/autojs/autojs/timing/ExactAlarmPermissionHelper.kt @@ -5,6 +5,7 @@ import android.content.Context import android.content.Intent import android.os.Build import android.provider.Settings +import androidx.annotation.RequiresApi import androidx.core.net.toUri import org.autojs.autojs.extension.MaterialDialogExtensions.widgetThemeColor import org.autojs.autojs.ui.common.NotAskAgainDialog @@ -14,14 +15,13 @@ import org.autojs.autojs6.R object ExactAlarmPermissionHelper { - fun isExactAlarmRuntimeGateRequired() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S - + @RequiresApi(Build.VERSION_CODES.S) fun canScheduleExactAlarms(context: Context): Boolean { - if (!isExactAlarmRuntimeGateRequired()) return true val am = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager return am.canScheduleExactAlarms() } + @RequiresApi(Build.VERSION_CODES.S) fun requestExactAlarmPermission(context: Context): Boolean { val intent = Intent() .setAction(Settings.ACTION_REQUEST_SCHEDULE_EXACT_ALARM) @@ -32,6 +32,7 @@ object ExactAlarmPermissionHelper { // Check canScheduleExactAlarms permission and prompt user if needed. // zh-CN: 在此检查 canScheduleExactAlarms 并按需提示用户打开权限. fun checkExactAlarmPermission(context: Context) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) return if (canScheduleExactAlarms(context)) return NotAskAgainDialog.Builder(context, key(R.string.key_timed_task_backend_alarm)) .title(R.string.text_prompt) diff --git a/app/src/main/java/org/autojs/autojs/ui/BaseActivity.kt b/app/src/main/java/org/autojs/autojs/ui/BaseActivity.kt index 87cbaa5e..e5c99f13 100644 --- a/app/src/main/java/org/autojs/autojs/ui/BaseActivity.kt +++ b/app/src/main/java/org/autojs/autojs/ui/BaseActivity.kt @@ -17,6 +17,7 @@ import org.autojs.autojs.theme.ThemeChangeNotifier import org.autojs.autojs.theme.ThemeColorManager import org.autojs.autojs.util.LocaleUtils import org.autojs.autojs.util.ViewUtils +import org.autojs.autojs.util.ViewUtils.excludeContentViewFromHorizontalNavigationBar import org.autojs.autojs6.R /** @@ -38,7 +39,7 @@ abstract class BaseActivity : AppCompatActivity() { ViewUtils.appendSystemUiVisibility(this, SYSTEM_UI_FLAG_LAYOUT_STABLE or SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION) if (handleContentViewFromHorizontalNavigationBarAutomatically) { - ViewUtils.excludeContentViewFromHorizontalNavigationBar(this) + this.excludeContentViewFromHorizontalNavigationBar() } if (handleNavigationBarContrastEnforcedAutomatically) { diff --git a/app/src/main/java/org/autojs/autojs/ui/keystore/ManageKeyStoreActivity.kt b/app/src/main/java/org/autojs/autojs/ui/keystore/ManageKeyStoreActivity.kt index ec48d74d..4a2f5df9 100644 --- a/app/src/main/java/org/autojs/autojs/ui/keystore/ManageKeyStoreActivity.kt +++ b/app/src/main/java/org/autojs/autojs/ui/keystore/ManageKeyStoreActivity.kt @@ -21,7 +21,8 @@ import org.autojs.autojs.core.pref.Pref import org.autojs.autojs.ui.BaseActivity import org.autojs.autojs.ui.keystore.NewKeyStoreDialog.NewKeyStoreConfigs import org.autojs.autojs.ui.viewmodel.KeyStoreViewModel -import org.autojs.autojs.util.ViewUtils +import org.autojs.autojs.util.ViewUtils.excludeFloatingActionButtonFromBottomNavigationBar +import org.autojs.autojs.util.ViewUtils.excludePaddingClippableViewFromBottomNavigationBar import org.autojs.autojs.util.ViewUtils.setMenuIconsColorByThemeColorLuminance import org.autojs.autojs6.R import org.autojs.autojs6.databinding.ActivityManageKeyStoreBinding @@ -88,7 +89,7 @@ class ManageKeyStoreActivity : BaseActivity() { setOnClickListener { NewKeyStoreDialog(newKeyStoreDialogCallback).show(supportFragmentManager, null) } - ViewUtils.excludeFloatingActionButtonFromBottomNavigationBar(this) + excludeFloatingActionButtonFromBottomNavigationBar() } keyStoreAdapter = KeyStoreAdaptor(keyStoreAdapterCallback) @@ -96,7 +97,7 @@ class ManageKeyStoreActivity : BaseActivity() { adapter = keyStoreAdapter layoutManager = LinearLayoutManager(this@ManageKeyStoreActivity) itemAnimator = DefaultItemAnimator() - ViewUtils.excludePaddingClippableViewFromBottomNavigationBar(this) + excludePaddingClippableViewFromBottomNavigationBar() } binding.swipeRefreshLayout.setOnRefreshListener { loadKeyStores() diff --git a/app/src/main/java/org/autojs/autojs/ui/log/LogActivity.kt b/app/src/main/java/org/autojs/autojs/ui/log/LogActivity.kt index 8f9c42a1..106a6423 100644 --- a/app/src/main/java/org/autojs/autojs/ui/log/LogActivity.kt +++ b/app/src/main/java/org/autojs/autojs/ui/log/LogActivity.kt @@ -10,7 +10,7 @@ import org.autojs.autojs.AutoJs.Companion.instance import org.autojs.autojs.core.console.GlobalConsole import org.autojs.autojs.runtime.api.Mime import org.autojs.autojs.ui.BaseActivity -import org.autojs.autojs.util.ViewUtils +import org.autojs.autojs.util.ViewUtils.excludeFloatingActionButtonFromBottomNavigationBar import org.autojs.autojs.util.ViewUtils.showToast import org.autojs.autojs6.R import org.autojs.autojs6.databinding.ActivityLogBinding @@ -35,7 +35,7 @@ class LogActivity : BaseActivity() { activityLogBinding.fab.apply { setOnClickListener { mConsoleImpl.clear() } - ViewUtils.excludeFloatingActionButtonFromBottomNavigationBar(this) + excludeFloatingActionButtonFromBottomNavigationBar() } } diff --git a/app/src/main/java/org/autojs/autojs/ui/main/MainActivity.kt b/app/src/main/java/org/autojs/autojs/ui/main/MainActivity.kt index d9bbf177..8b8c8340 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/MainActivity.kt +++ b/app/src/main/java/org/autojs/autojs/ui/main/MainActivity.kt @@ -57,6 +57,7 @@ import org.autojs.autojs.util.IntentUtils import org.autojs.autojs.util.StringUtils.key import org.autojs.autojs.util.UpdateUtils import org.autojs.autojs.util.ViewUtils +import org.autojs.autojs.util.ViewUtils.excludeFloatingActionButtonFromBottomNavigationBar import org.autojs.autojs.util.ViewUtils.onceGlobalLayout import org.autojs.autojs.util.ViewUtils.setMenuIconsColorByThemeColorLuminance import org.autojs.autojs.util.ViewUtils.setNavigationIconColorByThemeColorLuminance @@ -120,7 +121,7 @@ class MainActivity : BaseActivity(), DelegateHost, HostActivity { val drawerLayout = it.drawerLayout setContentView(it.root) mViewPager = it.viewpager - mFab = it.fab.apply { ViewUtils.excludeFloatingActionButtonFromBottomNavigationBar(this) } + mFab = it.fab.apply { excludeFloatingActionButtonFromBottomNavigationBar() } mTab = it.tab mToolbar = it.toolbar addViewBackground(it.appBar) diff --git a/app/src/main/java/org/autojs/autojs/ui/main/scripts/BaseDisplayContentActivity.kt b/app/src/main/java/org/autojs/autojs/ui/main/scripts/BaseDisplayContentActivity.kt index fe2ffce3..852dbb3f 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/scripts/BaseDisplayContentActivity.kt +++ b/app/src/main/java/org/autojs/autojs/ui/main/scripts/BaseDisplayContentActivity.kt @@ -23,6 +23,8 @@ import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import org.autojs.autojs.ui.BaseActivity import org.autojs.autojs.util.ViewUtils +import org.autojs.autojs.util.ViewUtils.excludeFloatingActionButtonFromBottomNavigationBar +import org.autojs.autojs.util.ViewUtils.excludePaddingClippableViewFromBottomNavigationBar import org.autojs.autojs6.R import org.autojs.autojs6.databinding.ActivityDisplayScrollableContentBinding @@ -58,7 +60,7 @@ abstract class BaseDisplayContentActivity : BaseActivity() { internalFabView = binding.fab.apply { if (internalMenuResource > 0) { setOnClickListener { view -> showPopupMenu(view, internalTextView) } - ViewUtils.excludeFloatingActionButtonFromBottomNavigationBar(this) + excludeFloatingActionButtonFromBottomNavigationBar() visibility = View.VISIBLE } } @@ -66,7 +68,7 @@ abstract class BaseDisplayContentActivity : BaseActivity() { val scaleGestureDetector = ViewUtils.TextSizeScaleDetector(this, internalTextView) val innerScrollView = binding.innerScrollView.also { - ViewUtils.excludePaddingClippableViewFromBottomNavigationBar(it) + it.excludePaddingClippableViewFromBottomNavigationBar() it.setOnTouchListener { view, event -> when (event.pointerCount) { 2 -> { diff --git a/app/src/main/java/org/autojs/autojs/ui/main/scripts/ExplorerFragment.kt b/app/src/main/java/org/autojs/autojs/ui/main/scripts/ExplorerFragment.kt index 97f8c7a3..357379d9 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/scripts/ExplorerFragment.kt +++ b/app/src/main/java/org/autojs/autojs/ui/main/scripts/ExplorerFragment.kt @@ -32,7 +32,7 @@ import org.autojs.autojs.ui.widget.ScrollAwareFABBehavior import org.autojs.autojs.util.IntentUtils import org.autojs.autojs.util.IntentUtils.SnackExceptionHolder import org.autojs.autojs.util.IntentUtils.ToastExceptionHolder -import org.autojs.autojs.util.ViewUtils +import org.autojs.autojs.util.ViewUtils.excludePaddingClippableViewFromBottomNavigationBar import org.autojs.autojs6.R import org.autojs.autojs6.databinding.FragmentExplorerBinding import org.greenrobot.eventbus.EventBus @@ -73,7 +73,7 @@ class ExplorerFragment : ViewPagerFragment(0), OnFloatingActionButtonClickListen } } }) - explorerView.explorerItemListView?.let { ViewUtils.excludePaddingClippableViewFromBottomNavigationBar(it) } + explorerView.explorerItemListView?.excludePaddingClippableViewFromBottomNavigationBar() } (activity as? MainActivity)?.apply { val tabLayout: TabLayout = findViewById(R.id.tab) diff --git a/app/src/main/java/org/autojs/autojs/ui/main/task/TaskManagerFragment.kt b/app/src/main/java/org/autojs/autojs/ui/main/task/TaskManagerFragment.kt index 152648cf..56755d6c 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/task/TaskManagerFragment.kt +++ b/app/src/main/java/org/autojs/autojs/ui/main/task/TaskManagerFragment.kt @@ -12,7 +12,7 @@ import org.autojs.autojs.ui.fragment.BindingDelegates.viewBinding import org.autojs.autojs.ui.main.ViewPagerFragment import org.autojs.autojs.ui.main.ViewStatesManageable import org.autojs.autojs.ui.widget.SimpleAdapterDataObserver -import org.autojs.autojs.util.ViewUtils +import org.autojs.autojs.util.ViewUtils.excludePaddingClippableViewFromBottomNavigationBar import org.autojs.autojs6.databinding.FragmentTaskManagerBinding /** @@ -50,7 +50,7 @@ open class TaskManagerFragment : ViewPagerFragment(45), ViewStatesManageable { recyclerView.postDelayed({ refreshLayout.isRefreshing = false }, 800) } } - ViewUtils.excludePaddingClippableViewFromBottomNavigationBar(recyclerView) + recyclerView.excludePaddingClippableViewFromBottomNavigationBar() } restoreViewStates() } diff --git a/app/src/main/java/org/autojs/autojs/ui/project/ProjectConfigActivity.kt b/app/src/main/java/org/autojs/autojs/ui/project/ProjectConfigActivity.kt index f84caf9a..5236d40d 100644 --- a/app/src/main/java/org/autojs/autojs/ui/project/ProjectConfigActivity.kt +++ b/app/src/main/java/org/autojs/autojs/ui/project/ProjectConfigActivity.kt @@ -30,6 +30,8 @@ import org.autojs.autojs.ui.BaseActivity import org.autojs.autojs.ui.shortcut.AppsIconSelectActivity import org.autojs.autojs.ui.widget.SimpleTextWatcher import org.autojs.autojs.util.ViewUtils +import org.autojs.autojs.util.ViewUtils.excludeFloatingActionButtonFromBottomNavigationBar +import org.autojs.autojs.util.ViewUtils.excludePaddingClippableViewFromBottomNavigationBar import org.autojs.autojs6.R import org.autojs.autojs6.databinding.ActivityProjectConfigBinding import java.io.File @@ -92,12 +94,10 @@ class ProjectConfigActivity : BaseActivity() { binding.fab.apply { setOnClickListener { commit() } - ViewUtils.excludeFloatingActionButtonFromBottomNavigationBar(this) + excludeFloatingActionButtonFromBottomNavigationBar() } - binding.scrollView.apply { - ViewUtils.excludePaddingClippableViewFromBottomNavigationBar(this) - } + binding.scrollView.excludePaddingClippableViewFromBottomNavigationBar() mNewProject = intent.getBooleanExtra(EXTRA_NEW_PROJECT, false) diff --git a/app/src/main/java/org/autojs/autojs/ui/settings/DeveloperOptionsFragment.kt b/app/src/main/java/org/autojs/autojs/ui/settings/DeveloperOptionsFragment.kt index 2da36f5e..71cc488e 100644 --- a/app/src/main/java/org/autojs/autojs/ui/settings/DeveloperOptionsFragment.kt +++ b/app/src/main/java/org/autojs/autojs/ui/settings/DeveloperOptionsFragment.kt @@ -3,7 +3,7 @@ package org.autojs.autojs.ui.settings import android.os.Bundle import android.view.View import androidx.preference.PreferenceFragmentCompat -import org.autojs.autojs.util.ViewUtils +import org.autojs.autojs.util.ViewUtils.excludePaddingClippableViewFromBottomNavigationBar import org.autojs.autojs6.R class DeveloperOptionsFragment : PreferenceFragmentCompat() { @@ -14,7 +14,7 @@ class DeveloperOptionsFragment : PreferenceFragmentCompat() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - ViewUtils.excludePaddingClippableViewFromBottomNavigationBar(listView) + listView.excludePaddingClippableViewFromBottomNavigationBar() } } \ No newline at end of file diff --git a/app/src/main/java/org/autojs/autojs/ui/settings/DisplayVersionHistoriesActivity.kt b/app/src/main/java/org/autojs/autojs/ui/settings/DisplayVersionHistoriesActivity.kt index 2b1f1ebe..5bbb1350 100644 --- a/app/src/main/java/org/autojs/autojs/ui/settings/DisplayVersionHistoriesActivity.kt +++ b/app/src/main/java/org/autojs/autojs/ui/settings/DisplayVersionHistoriesActivity.kt @@ -35,7 +35,7 @@ import org.autojs.autojs.ui.settings.VersionHistoryRepository.Companion.Category import org.autojs.autojs.ui.settings.VersionHistoryRepository.Companion.DEFAULT_FILTER import org.autojs.autojs.ui.settings.VersionHistoryRepository.Companion.DEFAULT_VERSION_NAME import org.autojs.autojs.util.ProcessLogger -import org.autojs.autojs.util.ViewUtils +import org.autojs.autojs.util.ViewUtils.excludePaddingClippableViewFromBottomNavigationBar import org.autojs.autojs.util.ViewUtils.setMenuIconsColorByThemeColorLuminance import org.autojs.autojs.util.ViewUtils.setNavigationIconColorByThemeColorLuminance import org.autojs.autojs6.R @@ -73,7 +73,7 @@ class DisplayVersionHistoriesActivity : BaseActivity() { addDuration = 200 supportsChangeAnimations = false } - ViewUtils.excludePaddingClippableViewFromBottomNavigationBar(it) + it.excludePaddingClippableViewFromBottomNavigationBar() } lifecycleScope.launch { diff --git a/app/src/main/java/org/autojs/autojs/ui/settings/LauncherIconPreference.kt b/app/src/main/java/org/autojs/autojs/ui/settings/LauncherIconPreference.kt index e1f4fe32..fc785924 100644 --- a/app/src/main/java/org/autojs/autojs/ui/settings/LauncherIconPreference.kt +++ b/app/src/main/java/org/autojs/autojs/ui/settings/LauncherIconPreference.kt @@ -123,7 +123,7 @@ class LauncherIconPreference : MaterialListPreference, SharedPreferences.OnShare ViewUtils.showSnack(dialog.view, R.string.text_already_copied_to_clip, false) } } - neutralText(R.string.dialog_button_copy) + neutralText(R.string.text_copy_all) neutralColorRes(R.color.dialog_button_hint) onNeutral { dialog, _ -> ClipboardUtils.setClip(context, shortcuts.joinToString("\n")) diff --git a/app/src/main/java/org/autojs/autojs/ui/settings/PreferencesFragment.kt b/app/src/main/java/org/autojs/autojs/ui/settings/PreferencesFragment.kt index 5d38cba5..4f8fcfef 100644 --- a/app/src/main/java/org/autojs/autojs/ui/settings/PreferencesFragment.kt +++ b/app/src/main/java/org/autojs/autojs/ui/settings/PreferencesFragment.kt @@ -3,7 +3,7 @@ package org.autojs.autojs.ui.settings import android.os.Bundle import android.view.View import androidx.preference.PreferenceFragmentCompat -import org.autojs.autojs.util.ViewUtils +import org.autojs.autojs.util.ViewUtils.excludePaddingClippableViewFromBottomNavigationBar import org.autojs.autojs6.R class PreferencesFragment : PreferenceFragmentCompat() { @@ -16,7 +16,7 @@ class PreferencesFragment : PreferenceFragmentCompat() { super.onViewCreated(view, savedInstanceState) listView.isHorizontalScrollBarEnabled = false listView.isVerticalScrollBarEnabled = false - ViewUtils.excludePaddingClippableViewFromBottomNavigationBar(listView) + listView.excludePaddingClippableViewFromBottomNavigationBar() } } \ No newline at end of file diff --git a/app/src/main/java/org/autojs/autojs/ui/timing/TimedTaskSettingActivity.kt b/app/src/main/java/org/autojs/autojs/ui/timing/TimedTaskSettingActivity.kt index ac5309bd..463780e1 100644 --- a/app/src/main/java/org/autojs/autojs/ui/timing/TimedTaskSettingActivity.kt +++ b/app/src/main/java/org/autojs/autojs/ui/timing/TimedTaskSettingActivity.kt @@ -1,11 +1,9 @@ package org.autojs.autojs.ui.timing -import android.annotation.SuppressLint -import android.content.ActivityNotFoundException import android.content.Intent import android.net.ConnectivityManager +import android.os.Build import android.os.Bundle -import android.provider.Settings import android.text.TextUtils import android.util.Log import android.view.Menu @@ -22,7 +20,6 @@ import android.widget.TextView import android.widget.TimePicker import androidx.appcompat.widget.Toolbar import androidx.core.graphics.Insets -import androidx.core.net.toUri import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import androidx.core.view.forEach @@ -35,7 +32,8 @@ import org.autojs.autojs.external.receiver.DynamicBroadcastReceivers import org.autojs.autojs.model.script.ScriptFile import org.autojs.autojs.permission.IgnoreBatteryOptimizationsPermission import org.autojs.autojs.theme.ThemeColorHelper -import org.autojs.autojs.timing.ExactAlarmPermissionHelper +import org.autojs.autojs.timing.ExactAlarmPermissionHelper.canScheduleExactAlarms +import org.autojs.autojs.timing.ExactAlarmPermissionHelper.requestExactAlarmPermission import org.autojs.autojs.timing.IntentTask import org.autojs.autojs.timing.TaskReceiver import org.autojs.autojs.timing.TimedTask @@ -47,6 +45,7 @@ import org.autojs.autojs.timing.TimedTaskManager.updateTask import org.autojs.autojs.tool.MapBuilder import org.autojs.autojs.ui.BaseActivity import org.autojs.autojs.util.ViewUtils +import org.autojs.autojs.util.ViewUtils.excludePaddingClippableViewFromBottomNavigationBar import org.autojs.autojs.util.ViewUtils.setMenuIconsColorByThemeColorLuminance import org.autojs.autojs.util.ViewUtils.showToast import org.autojs.autojs6.R @@ -140,7 +139,7 @@ class TimedTaskSettingActivity : BaseActivity() { setUpTaskSettings() - ViewUtils.excludePaddingClippableViewFromBottomNavigationBar(binding.scrollView) + binding.scrollView.excludePaddingClippableViewFromBottomNavigationBar() ViewCompat.setOnApplyWindowInsetsListener(findViewById(android.R.id.content)) { v, insets -> val sysBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) @@ -353,36 +352,20 @@ class TimedTaskSettingActivity : BaseActivity() { } override fun onOptionsItemSelected(item: MenuItem): Boolean = when (item.itemId) { - R.id.action_done -> when { - !IgnoreBatteryOptimizationsPermission(this).has() -> { - try { - @SuppressLint("BatteryLife") - val intent = Intent() - .setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS) - .setData("package:$packageName".toUri()) - @Suppress("DEPRECATION") - startActivityForResult(intent, REQUEST_CODE_IGNORE_BATTERY) - } catch (e: ActivityNotFoundException) { - e.printStackTrace() - createOrUpdateTask() + R.id.action_done -> run { + IgnoreBatteryOptimizationsPermission(this).let { + if (!it.has() && it.request()) { + return@run true } } - !ExactAlarmPermissionHelper.canScheduleExactAlarms(this) -> { - try { - val intent = Intent() - .setAction(Settings.ACTION_REQUEST_SCHEDULE_EXACT_ALARM) - .setData("package:$packageName".toUri()) - @Suppress("DEPRECATION") - startActivityForResult(intent, REQUEST_CODE_SCHEDULE_EXACT_ALARM) - } catch (e: ActivityNotFoundException) { - e.printStackTrace() - createOrUpdateTask() + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + if (!canScheduleExactAlarms(this) && requestExactAlarmPermission(this)) { + return@run true } } - else -> { - createOrUpdateTask() - } - }.let { true } + createOrUpdateTask() + return@run true + } else -> super.onOptionsItemSelected(item) } diff --git a/app/src/main/java/org/autojs/autojs/util/ViewUtils.kt b/app/src/main/java/org/autojs/autojs/util/ViewUtils.kt index 60dcf7f0..7391c648 100644 --- a/app/src/main/java/org/autojs/autojs/util/ViewUtils.kt +++ b/app/src/main/java/org/autojs/autojs/util/ViewUtils.kt @@ -374,7 +374,8 @@ object ViewUtils { @JvmStatic @JvmOverloads - fun excludeFloatingActionButtonFromBottomNavigationBar(fab: FloatingActionButton, extraMarginBottomDp: Float = 16F) { + fun FloatingActionButton.excludeFloatingActionButtonFromBottomNavigationBar(extraMarginBottomDp: Float = 16F) { + val fab = this ViewCompat.setOnApplyWindowInsetsListener(fab) { view, insets -> val bottomInset = insets.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom view.layoutParams.runCatching { @@ -387,7 +388,8 @@ object ViewUtils { @JvmStatic @JvmOverloads - fun excludePaddingClippableViewFromBottomNavigationBar(view: View, extraPaddingBottomDp: Float = 0F, clipToPadding: Boolean = false) { + fun View.excludePaddingClippableViewFromBottomNavigationBar(extraPaddingBottomDp: Float = 0F, clipToPadding: Boolean = false) { + val view = this ViewCompat.setOnApplyWindowInsetsListener(view) { _, insets -> val bottomInset = insets.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom view.setPadding(0, 0, 0, DisplayUtils.dpToPx(extraPaddingBottomDp).roundToInt() + bottomInset) @@ -397,7 +399,8 @@ object ViewUtils { } @JvmStatic - fun excludeContentViewFromHorizontalNavigationBar(activity: Activity) { + fun Activity.excludeContentViewFromHorizontalNavigationBar() { + val activity = this val contentView = activity.findViewById(android.R.id.content) ?: return ViewCompat.setOnApplyWindowInsetsListener(contentView) { v, insets -> val sysInsets = insets.getInsets(WindowInsetsCompat.Type.systemBars()) diff --git a/app/src/main/res/xml/fragment_preferences.xml b/app/src/main/res/xml/fragment_preferences.xml index 73c11e6d..dbfcf293 100644 --- a/app/src/main/res/xml/fragment_preferences.xml +++ b/app/src/main/res/xml/fragment_preferences.xml @@ -129,7 +129,7 @@ app:itemValues="@array/values_timed_task_backend" app:itemDefaultKey="@string/default_key_timed_task_backend" app:longClickPrompt="@string/description_timed_task_backend" - app:longClickPromptMore="@string/description_timed_task_backend_more"/> + app:longClickPromptMore="@string/description_timed_task_backend_more" />