6.7.0 - Alpha12 - Fine tuning

This commit is contained in:
SuperMonster003
2025-11-28 14:28:54 +08:00
parent 42ee329092
commit a26ecba492
25 changed files with 120 additions and 102 deletions

View File

@@ -3,10 +3,8 @@ package androidx.recyclerview.widget;
import android.content.Context; import android.content.Context;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.widget.EdgeEffect; import android.widget.EdgeEffect;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.core.widget.EdgeEffectCompat; import androidx.core.widget.EdgeEffectCompat;
import org.autojs.autojs.theme.ThemeColor; import org.autojs.autojs.theme.ThemeColor;
import org.autojs.autojs.theme.ThemeColorManager; import org.autojs.autojs.theme.ThemeColorManager;
import org.autojs.autojs.theme.ThemeColorMutable; import org.autojs.autojs.theme.ThemeColorMutable;
@@ -15,12 +13,19 @@ import java.lang.reflect.Field;
/** /**
* Created by Stardust on Aug 14, 2016. * Created by Stardust on Aug 14, 2016.
* Modified by SuperMonster003 as of Dec 1, 2021.
*/ */
public class ThemeColorRecyclerView extends RecyclerView implements ThemeColorMutable { public class ThemeColorRecyclerView extends RecyclerView implements ThemeColorMutable {
private Field mLeftGlowField, mTopGlowField, mRightGlowField, mBottomGlowField;
private Field mEdgeEffectField;
private int mColorPrimary; private int mColorPrimary;
private Field mLeftGlowField;
private Field mTopGlowField;
private Field mRightGlowField;
private Field mBottomGlowField;
private Field mEdgeEffectField;
private boolean hasAppliedThemeColorLeft; private boolean hasAppliedThemeColorLeft;
private boolean hasAppliedThemeColorTop; private boolean hasAppliedThemeColorTop;
private boolean hasAppliedThemeColorRight; private boolean hasAppliedThemeColorRight;
@@ -44,8 +49,9 @@ public class ThemeColorRecyclerView extends RecyclerView implements ThemeColorMu
private boolean applyThemeColor(Field edgeEffectCompatField) { private boolean applyThemeColor(Field edgeEffectCompatField) {
try { try {
EdgeEffectCompat edgeEffectCompat = (EdgeEffectCompat) edgeEffectCompatField.get(this); EdgeEffectCompat edgeEffectCompat = (EdgeEffectCompat) edgeEffectCompatField.get(this);
if (edgeEffectCompat != null) if (edgeEffectCompat != null) {
return setEdgeEffectColor(edgeEffectCompat, mColorPrimary); return setEdgeEffectColor(edgeEffectCompat, mColorPrimary);
}
} catch (Exception ignored) { } catch (Exception ignored) {
/* Ignored. */ /* Ignored. */
} }
@@ -67,12 +73,29 @@ public class ThemeColorRecyclerView extends RecyclerView implements ThemeColorMu
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); 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); ThemeColorManager.add(this);
} }
private boolean setEdgeEffectColor(EdgeEffectCompat compat, int color) { private boolean setEdgeEffectColor(EdgeEffectCompat compat, int color) {
if (compat == null) if (compat == null) {
return false; return false;
}
try { try {
EdgeEffect edgeEffect = (EdgeEffect) mEdgeEffectField.get(compat); EdgeEffect edgeEffect = (EdgeEffect) mEdgeEffectField.get(compat);
if (edgeEffect != null) { if (edgeEffect != null) {
@@ -86,40 +109,40 @@ public class ThemeColorRecyclerView extends RecyclerView implements ThemeColorMu
@Override @Override
public void setThemeColor(ThemeColor color) { public void setThemeColor(ThemeColor color) {
if (color.colorPrimary == mColorPrimary) if (color.colorPrimary == mColorPrimary) {
return; return;
}
mColorPrimary = color.colorPrimary; mColorPrimary = color.colorPrimary;
invalidateGlows(); invalidateGlows();
} }
void invalidateGlows() { void invalidateGlows() {
super.invalidateGlows(); super.invalidateGlows();
hasAppliedThemeColorBottom = hasAppliedThemeColorLeft = hasAppliedThemeColorRight = hasAppliedThemeColorTop = false; hasAppliedThemeColorLeft = false;
hasAppliedThemeColorTop = false;
hasAppliedThemeColorRight = false;
hasAppliedThemeColorBottom = false;
} }
void ensureLeftGlow() { void ensureLeftGlow() {
super.ensureLeftGlow(); super.ensureLeftGlow();
if (!hasAppliedThemeColorLeft) hasAppliedThemeColorLeft = hasAppliedThemeColorLeft || applyThemeColor(mLeftGlowField);
hasAppliedThemeColorLeft = applyThemeColor(mLeftGlowField);
}
void ensureRightGlow() {
super.ensureLeftGlow();
if (!hasAppliedThemeColorRight)
hasAppliedThemeColorRight = applyThemeColor(mRightGlowField);
} }
void ensureTopGlow() { void ensureTopGlow() {
super.ensureTopGlow(); super.ensureTopGlow();
if (!hasAppliedThemeColorTop) hasAppliedThemeColorTop = hasAppliedThemeColorTop || applyThemeColor(mTopGlowField);
hasAppliedThemeColorTop = applyThemeColor(mTopGlowField);
} }
void ensureRightGlow() {
super.ensureLeftGlow();
hasAppliedThemeColorRight = hasAppliedThemeColorRight || applyThemeColor(mRightGlowField);
}
void ensureBottomGlow() { void ensureBottomGlow() {
super.ensureBottomGlow(); super.ensureBottomGlow();
if (!hasAppliedThemeColorBottom) hasAppliedThemeColorBottom = hasAppliedThemeColorBottom || applyThemeColor(mBottomGlowField);
hasAppliedThemeColorBottom = applyThemeColor(mBottomGlowField);
} }
} }

View File

@@ -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.core.ui.inflater.util.Dimensions
import org.autojs.autojs.runtime.ScriptRuntime import org.autojs.autojs.runtime.ScriptRuntime
import org.autojs.autojs.util.ColorUtils 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. * 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) } registerAttrs(arrayOf("backgroundTint", "bgTint")) { view.backgroundTintList = ColorUtils.toColorStateList(view, it) }
registerAttr("ensureMinTouchTargetSize") { view.setEnsureMinTouchTargetSize(it.toBoolean()) } registerAttr("ensureMinTouchTargetSize") { view.setEnsureMinTouchTargetSize(it.toBoolean()) }
registerAttr("maxImageSize") { view.setMaxImageSize(it.toInt()) } registerAttr("maxImageSize") { view.setMaxImageSize(it.toInt()) }
registerAttr("excludeFromNavigationBar") { ViewUtils.excludeFloatingActionButtonFromBottomNavigationBar(view) } registerAttr("excludeFromNavigationBar") { view.excludeFloatingActionButtonFromBottomNavigationBar() }
} }
} }

View File

@@ -16,6 +16,8 @@ import org.autojs.autojs.model.explorer.Explorers
import org.autojs.autojs.ui.edit.EditorView import org.autojs.autojs.ui.edit.EditorView
import org.autojs.autojs.ui.explorer.ExplorerView import org.autojs.autojs.ui.explorer.ExplorerView
import org.autojs.autojs.util.ViewUtils 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.R
import org.autojs.autojs6.databinding.ActivityTaskerEditBinding import org.autojs.autojs6.databinding.ActivityTaskerEditBinding
import org.json.JSONException import org.json.JSONException
@@ -40,8 +42,8 @@ class TaskPrefEditActivity : AbstractAppCompatPluginActivity() {
binding.editScript.setOnClickListener { editPreExecuteScript() } binding.editScript.setOnClickListener { editPreExecuteScript() }
ViewUtils.setToolbarAsBack(this, R.string.text_please_choose_a_script) ViewUtils.setToolbarAsBack(this, R.string.text_please_choose_a_script)
ViewUtils.excludeContentViewFromHorizontalNavigationBar(this) this.excludeContentViewFromHorizontalNavigationBar()
ViewUtils.excludePaddingClippableViewFromBottomNavigationBar(binding.scriptList) binding.scriptList.excludePaddingClippableViewFromBottomNavigationBar()
initScriptListRecyclerView() initScriptListRecyclerView()
} }

View File

@@ -1,3 +1,3 @@
package org.autojs.autojs.network.entity package org.autojs.autojs.network.entity
class SimpleVersionInfo(val versionName: String?, val versionCode: Int) class SimpleVersionInfo(val versionName: String?, val versionCode: Long)

View File

@@ -5,7 +5,7 @@ import org.autojs.autojs.util.StringUtils.str
import org.autojs.autojs.util.UpdateUtils.isVersionIgnored import org.autojs.autojs.util.UpdateUtils.isVersionIgnored
import org.autojs.autojs6.BuildConfig import org.autojs.autojs6.BuildConfig
import org.autojs.autojs6.R import org.autojs.autojs6.R
import kotlin.math.roundToInt import kotlin.math.roundToLong
/** /**
* Created by Stardust on Sep 20, 2017. * Created by Stardust on Sep 20, 2017.
@@ -16,7 +16,7 @@ class VersionInfo : ExtendedVersionInfo {
var versionName: String = "" var versionName: String = ""
private set private set
var versionCode = 0 var versionCode = 0L
private set private set
val isNewer: Boolean val isNewer: Boolean
@@ -43,7 +43,7 @@ class VersionInfo : ExtendedVersionInfo {
Log.d(TAG, "versionName: $versionName") Log.d(TAG, "versionName: $versionName")
} }
if (versionCode <= 0 && line.contains(regexVersionCode)) { 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") Log.d(TAG, "versionCode: $versionCode")
} }
if (versionName.isNotBlank() && versionCode > 0) { 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.versionName = versionName
this.versionCode = versionCode this.versionCode = versionCode
} }
@@ -94,13 +94,13 @@ class VersionInfo : ExtendedVersionInfo {
val indexForVersionName = 0 val indexForVersionName = 0
val indexForVersionCode = 1 val indexForVersionCode = 1
var versionName: String? = null var versionName: String? = null
var versionCode = -1 var versionCode = -1L
val split = summary.toString().split(" ".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray() val split = summary.toString().split(" ".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
for (i in split.indices) { for (i in split.indices) {
if (i == indexForVersionName) { if (i == indexForVersionName) {
versionName = split[i] versionName = split[i]
} else if (i == indexForVersionCode) { } else if (i == indexForVersionCode) {
versionCode = split[i].replace("[()]".toRegex(), "").toInt() versionCode = split[i].replace("[()]".toRegex(), "").toLong()
} }
} }
return SimpleVersionInfo(versionName, versionCode) return SimpleVersionInfo(versionName, versionCode)

View File

@@ -1,11 +1,10 @@
package org.autojs.autojs.runtime.api package org.autojs.autojs.runtime.api
import android.graphics.Bitmap
import android.graphics.Rect import android.graphics.Rect
import androidx.core.graphics.createBitmap
import com.benjaminwan.ocrlibrary.TextBlock import com.benjaminwan.ocrlibrary.TextBlock
import org.autojs.autojs.AutoJs import org.autojs.autojs.AutoJs
import org.autojs.autojs.core.image.ImageWrapper import org.autojs.autojs.core.image.ImageWrapper
import java.util.ArrayList
import com.benjaminwan.ocrlibrary.OcrResult as RapidOcrResult import com.benjaminwan.ocrlibrary.OcrResult as RapidOcrResult
class OcrRapid { class OcrRapid {
@@ -47,7 +46,7 @@ class OcrRapid {
return detectRaw(image).textBlocks.map { it.text } return detectRaw(image).textBlocks.map { it.text }
} }
private fun OcrRapid.detectRaw(image: ImageWrapper?): RapidOcrResult { private fun detectRaw(image: ImageWrapper?): RapidOcrResult {
image ?: return mEmptyOcrResult image ?: return mEmptyOcrResult
val bitmap = image.bitmap val bitmap = image.bitmap
if (bitmap.isRecycled) { 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)
} }

View File

@@ -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.theme.app.ColorLibrariesActivity.Companion.presetColorLibraries
import org.autojs.autojs.util.ColorUtils import org.autojs.autojs.util.ColorUtils
import org.autojs.autojs.util.ViewUtils 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.onceGlobalLayout
import org.autojs.autojs.util.ViewUtils.setMenuIconsColorByColorLuminance import org.autojs.autojs.util.ViewUtils.setMenuIconsColorByColorLuminance
import org.autojs.autojs6.R import org.autojs.autojs6.R
@@ -91,7 +92,7 @@ class ColorItemsActivity : ColorSelectBaseActivity() {
it.adapter = ColorItemAdapter(library.colors).also { mAdapter = it } it.adapter = ColorItemAdapter(library.colors).also { mAdapter = it }
it.addItemDecoration(DividerItemDecoration(this, VERTICAL)) it.addItemDecoration(DividerItemDecoration(this, VERTICAL))
ViewUtils.excludePaddingClippableViewFromBottomNavigationBar(it) it.excludePaddingClippableViewFromBottomNavigationBar()
setUpSelectedPosition(mAdapter) setUpSelectedPosition(mAdapter)

View File

@@ -17,6 +17,7 @@ import org.autojs.autojs.extension.ViewExtensions.setOnTitleViewClickListener
import org.autojs.autojs.theme.ThemeChangeNotifier import org.autojs.autojs.theme.ThemeChangeNotifier
import org.autojs.autojs.theme.ThemeColorManager import org.autojs.autojs.theme.ThemeColorManager
import org.autojs.autojs.util.ViewUtils import org.autojs.autojs.util.ViewUtils
import org.autojs.autojs.util.ViewUtils.excludePaddingClippableViewFromBottomNavigationBar
import org.autojs.autojs.util.ViewUtils.setMenuIconsColorByColorLuminance import org.autojs.autojs.util.ViewUtils.setMenuIconsColorByColorLuminance
import org.autojs.autojs6.R import org.autojs.autojs6.R
import org.autojs.autojs6.databinding.MtActivityColorLibrariesBinding import org.autojs.autojs6.databinding.MtActivityColorLibrariesBinding
@@ -65,7 +66,7 @@ class ColorLibrariesActivity : ColorSelectBaseActivity() {
it.layoutManager = LinearLayoutManager(this) it.layoutManager = LinearLayoutManager(this)
it.adapter = libraryAdapter it.adapter = libraryAdapter
it.addItemDecoration(DividerItemDecoration(this, VERTICAL)) it.addItemDecoration(DividerItemDecoration(this, VERTICAL))
ViewUtils.excludePaddingClippableViewFromBottomNavigationBar(it) it.excludePaddingClippableViewFromBottomNavigationBar()
} }
} }

View File

@@ -4,7 +4,7 @@ import android.os.Bundle
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.view.View 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.R
import org.autojs.autojs6.databinding.MtActivityColorSelectBinding import org.autojs.autojs6.databinding.MtActivityColorSelectBinding
@@ -45,7 +45,7 @@ class ColorSelectActivity : ColorSelectBaseActivity() {
mColorSettingRecyclerView = colorSettingRecyclerView.apply { mColorSettingRecyclerView = colorSettingRecyclerView.apply {
setUpSelectedPosition(currentColor) setUpSelectedPosition(currentColor)
setOnItemClickListener(mOnItemClickListener) setOnItemClickListener(mOnItemClickListener)
ViewUtils.excludePaddingClippableViewFromBottomNavigationBar(this) excludePaddingClippableViewFromBottomNavigationBar()
} }
} }

View File

@@ -5,6 +5,7 @@ import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Build import android.os.Build
import android.provider.Settings import android.provider.Settings
import androidx.annotation.RequiresApi
import androidx.core.net.toUri import androidx.core.net.toUri
import org.autojs.autojs.extension.MaterialDialogExtensions.widgetThemeColor import org.autojs.autojs.extension.MaterialDialogExtensions.widgetThemeColor
import org.autojs.autojs.ui.common.NotAskAgainDialog import org.autojs.autojs.ui.common.NotAskAgainDialog
@@ -14,14 +15,13 @@ import org.autojs.autojs6.R
object ExactAlarmPermissionHelper { object ExactAlarmPermissionHelper {
fun isExactAlarmRuntimeGateRequired() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S @RequiresApi(Build.VERSION_CODES.S)
fun canScheduleExactAlarms(context: Context): Boolean { fun canScheduleExactAlarms(context: Context): Boolean {
if (!isExactAlarmRuntimeGateRequired()) return true
val am = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager val am = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
return am.canScheduleExactAlarms() return am.canScheduleExactAlarms()
} }
@RequiresApi(Build.VERSION_CODES.S)
fun requestExactAlarmPermission(context: Context): Boolean { fun requestExactAlarmPermission(context: Context): Boolean {
val intent = Intent() val intent = Intent()
.setAction(Settings.ACTION_REQUEST_SCHEDULE_EXACT_ALARM) .setAction(Settings.ACTION_REQUEST_SCHEDULE_EXACT_ALARM)
@@ -32,6 +32,7 @@ object ExactAlarmPermissionHelper {
// Check canScheduleExactAlarms permission and prompt user if needed. // Check canScheduleExactAlarms permission and prompt user if needed.
// zh-CN: 在此检查 canScheduleExactAlarms 并按需提示用户打开权限. // zh-CN: 在此检查 canScheduleExactAlarms 并按需提示用户打开权限.
fun checkExactAlarmPermission(context: Context) { fun checkExactAlarmPermission(context: Context) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) return
if (canScheduleExactAlarms(context)) return if (canScheduleExactAlarms(context)) return
NotAskAgainDialog.Builder(context, key(R.string.key_timed_task_backend_alarm)) NotAskAgainDialog.Builder(context, key(R.string.key_timed_task_backend_alarm))
.title(R.string.text_prompt) .title(R.string.text_prompt)

View File

@@ -17,6 +17,7 @@ import org.autojs.autojs.theme.ThemeChangeNotifier
import org.autojs.autojs.theme.ThemeColorManager import org.autojs.autojs.theme.ThemeColorManager
import org.autojs.autojs.util.LocaleUtils import org.autojs.autojs.util.LocaleUtils
import org.autojs.autojs.util.ViewUtils import org.autojs.autojs.util.ViewUtils
import org.autojs.autojs.util.ViewUtils.excludeContentViewFromHorizontalNavigationBar
import org.autojs.autojs6.R 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) ViewUtils.appendSystemUiVisibility(this, SYSTEM_UI_FLAG_LAYOUT_STABLE or SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION)
if (handleContentViewFromHorizontalNavigationBarAutomatically) { if (handleContentViewFromHorizontalNavigationBarAutomatically) {
ViewUtils.excludeContentViewFromHorizontalNavigationBar(this) this.excludeContentViewFromHorizontalNavigationBar()
} }
if (handleNavigationBarContrastEnforcedAutomatically) { if (handleNavigationBarContrastEnforcedAutomatically) {

View File

@@ -21,7 +21,8 @@ import org.autojs.autojs.core.pref.Pref
import org.autojs.autojs.ui.BaseActivity import org.autojs.autojs.ui.BaseActivity
import org.autojs.autojs.ui.keystore.NewKeyStoreDialog.NewKeyStoreConfigs import org.autojs.autojs.ui.keystore.NewKeyStoreDialog.NewKeyStoreConfigs
import org.autojs.autojs.ui.viewmodel.KeyStoreViewModel 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.autojs.util.ViewUtils.setMenuIconsColorByThemeColorLuminance
import org.autojs.autojs6.R import org.autojs.autojs6.R
import org.autojs.autojs6.databinding.ActivityManageKeyStoreBinding import org.autojs.autojs6.databinding.ActivityManageKeyStoreBinding
@@ -88,7 +89,7 @@ class ManageKeyStoreActivity : BaseActivity() {
setOnClickListener { setOnClickListener {
NewKeyStoreDialog(newKeyStoreDialogCallback).show(supportFragmentManager, null) NewKeyStoreDialog(newKeyStoreDialogCallback).show(supportFragmentManager, null)
} }
ViewUtils.excludeFloatingActionButtonFromBottomNavigationBar(this) excludeFloatingActionButtonFromBottomNavigationBar()
} }
keyStoreAdapter = KeyStoreAdaptor(keyStoreAdapterCallback) keyStoreAdapter = KeyStoreAdaptor(keyStoreAdapterCallback)
@@ -96,7 +97,7 @@ class ManageKeyStoreActivity : BaseActivity() {
adapter = keyStoreAdapter adapter = keyStoreAdapter
layoutManager = LinearLayoutManager(this@ManageKeyStoreActivity) layoutManager = LinearLayoutManager(this@ManageKeyStoreActivity)
itemAnimator = DefaultItemAnimator() itemAnimator = DefaultItemAnimator()
ViewUtils.excludePaddingClippableViewFromBottomNavigationBar(this) excludePaddingClippableViewFromBottomNavigationBar()
} }
binding.swipeRefreshLayout.setOnRefreshListener { binding.swipeRefreshLayout.setOnRefreshListener {
loadKeyStores() loadKeyStores()

View File

@@ -10,7 +10,7 @@ import org.autojs.autojs.AutoJs.Companion.instance
import org.autojs.autojs.core.console.GlobalConsole import org.autojs.autojs.core.console.GlobalConsole
import org.autojs.autojs.runtime.api.Mime import org.autojs.autojs.runtime.api.Mime
import org.autojs.autojs.ui.BaseActivity 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.autojs.util.ViewUtils.showToast
import org.autojs.autojs6.R import org.autojs.autojs6.R
import org.autojs.autojs6.databinding.ActivityLogBinding import org.autojs.autojs6.databinding.ActivityLogBinding
@@ -35,7 +35,7 @@ class LogActivity : BaseActivity() {
activityLogBinding.fab.apply { activityLogBinding.fab.apply {
setOnClickListener { mConsoleImpl.clear() } setOnClickListener { mConsoleImpl.clear() }
ViewUtils.excludeFloatingActionButtonFromBottomNavigationBar(this) excludeFloatingActionButtonFromBottomNavigationBar()
} }
} }

View File

@@ -57,6 +57,7 @@ import org.autojs.autojs.util.IntentUtils
import org.autojs.autojs.util.StringUtils.key import org.autojs.autojs.util.StringUtils.key
import org.autojs.autojs.util.UpdateUtils import org.autojs.autojs.util.UpdateUtils
import org.autojs.autojs.util.ViewUtils 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.onceGlobalLayout
import org.autojs.autojs.util.ViewUtils.setMenuIconsColorByThemeColorLuminance import org.autojs.autojs.util.ViewUtils.setMenuIconsColorByThemeColorLuminance
import org.autojs.autojs.util.ViewUtils.setNavigationIconColorByThemeColorLuminance import org.autojs.autojs.util.ViewUtils.setNavigationIconColorByThemeColorLuminance
@@ -120,7 +121,7 @@ class MainActivity : BaseActivity(), DelegateHost, HostActivity {
val drawerLayout = it.drawerLayout val drawerLayout = it.drawerLayout
setContentView(it.root) setContentView(it.root)
mViewPager = it.viewpager mViewPager = it.viewpager
mFab = it.fab.apply { ViewUtils.excludeFloatingActionButtonFromBottomNavigationBar(this) } mFab = it.fab.apply { excludeFloatingActionButtonFromBottomNavigationBar() }
mTab = it.tab mTab = it.tab
mToolbar = it.toolbar mToolbar = it.toolbar
addViewBackground(it.appBar) addViewBackground(it.appBar)

View File

@@ -23,6 +23,8 @@ import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.sync.withLock
import org.autojs.autojs.ui.BaseActivity import org.autojs.autojs.ui.BaseActivity
import org.autojs.autojs.util.ViewUtils 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.R
import org.autojs.autojs6.databinding.ActivityDisplayScrollableContentBinding import org.autojs.autojs6.databinding.ActivityDisplayScrollableContentBinding
@@ -58,7 +60,7 @@ abstract class BaseDisplayContentActivity : BaseActivity() {
internalFabView = binding.fab.apply { internalFabView = binding.fab.apply {
if (internalMenuResource > 0) { if (internalMenuResource > 0) {
setOnClickListener { view -> showPopupMenu(view, internalTextView) } setOnClickListener { view -> showPopupMenu(view, internalTextView) }
ViewUtils.excludeFloatingActionButtonFromBottomNavigationBar(this) excludeFloatingActionButtonFromBottomNavigationBar()
visibility = View.VISIBLE visibility = View.VISIBLE
} }
} }
@@ -66,7 +68,7 @@ abstract class BaseDisplayContentActivity : BaseActivity() {
val scaleGestureDetector = ViewUtils.TextSizeScaleDetector(this, internalTextView) val scaleGestureDetector = ViewUtils.TextSizeScaleDetector(this, internalTextView)
val innerScrollView = binding.innerScrollView.also { val innerScrollView = binding.innerScrollView.also {
ViewUtils.excludePaddingClippableViewFromBottomNavigationBar(it) it.excludePaddingClippableViewFromBottomNavigationBar()
it.setOnTouchListener { view, event -> it.setOnTouchListener { view, event ->
when (event.pointerCount) { when (event.pointerCount) {
2 -> { 2 -> {

View File

@@ -32,7 +32,7 @@ import org.autojs.autojs.ui.widget.ScrollAwareFABBehavior
import org.autojs.autojs.util.IntentUtils import org.autojs.autojs.util.IntentUtils
import org.autojs.autojs.util.IntentUtils.SnackExceptionHolder import org.autojs.autojs.util.IntentUtils.SnackExceptionHolder
import org.autojs.autojs.util.IntentUtils.ToastExceptionHolder 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.R
import org.autojs.autojs6.databinding.FragmentExplorerBinding import org.autojs.autojs6.databinding.FragmentExplorerBinding
import org.greenrobot.eventbus.EventBus 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 { (activity as? MainActivity)?.apply {
val tabLayout: TabLayout = findViewById(R.id.tab) val tabLayout: TabLayout = findViewById(R.id.tab)

View File

@@ -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.ViewPagerFragment
import org.autojs.autojs.ui.main.ViewStatesManageable import org.autojs.autojs.ui.main.ViewStatesManageable
import org.autojs.autojs.ui.widget.SimpleAdapterDataObserver 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 import org.autojs.autojs6.databinding.FragmentTaskManagerBinding
/** /**
@@ -50,7 +50,7 @@ open class TaskManagerFragment : ViewPagerFragment(45), ViewStatesManageable {
recyclerView.postDelayed({ refreshLayout.isRefreshing = false }, 800) recyclerView.postDelayed({ refreshLayout.isRefreshing = false }, 800)
} }
} }
ViewUtils.excludePaddingClippableViewFromBottomNavigationBar(recyclerView) recyclerView.excludePaddingClippableViewFromBottomNavigationBar()
} }
restoreViewStates() restoreViewStates()
} }

View File

@@ -30,6 +30,8 @@ import org.autojs.autojs.ui.BaseActivity
import org.autojs.autojs.ui.shortcut.AppsIconSelectActivity import org.autojs.autojs.ui.shortcut.AppsIconSelectActivity
import org.autojs.autojs.ui.widget.SimpleTextWatcher import org.autojs.autojs.ui.widget.SimpleTextWatcher
import org.autojs.autojs.util.ViewUtils 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.R
import org.autojs.autojs6.databinding.ActivityProjectConfigBinding import org.autojs.autojs6.databinding.ActivityProjectConfigBinding
import java.io.File import java.io.File
@@ -92,12 +94,10 @@ class ProjectConfigActivity : BaseActivity() {
binding.fab.apply { binding.fab.apply {
setOnClickListener { commit() } setOnClickListener { commit() }
ViewUtils.excludeFloatingActionButtonFromBottomNavigationBar(this) excludeFloatingActionButtonFromBottomNavigationBar()
} }
binding.scrollView.apply { binding.scrollView.excludePaddingClippableViewFromBottomNavigationBar()
ViewUtils.excludePaddingClippableViewFromBottomNavigationBar(this)
}
mNewProject = intent.getBooleanExtra(EXTRA_NEW_PROJECT, false) mNewProject = intent.getBooleanExtra(EXTRA_NEW_PROJECT, false)

View File

@@ -3,7 +3,7 @@ package org.autojs.autojs.ui.settings
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import org.autojs.autojs.util.ViewUtils import org.autojs.autojs.util.ViewUtils.excludePaddingClippableViewFromBottomNavigationBar
import org.autojs.autojs6.R import org.autojs.autojs6.R
class DeveloperOptionsFragment : PreferenceFragmentCompat() { class DeveloperOptionsFragment : PreferenceFragmentCompat() {
@@ -14,7 +14,7 @@ class DeveloperOptionsFragment : PreferenceFragmentCompat() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
ViewUtils.excludePaddingClippableViewFromBottomNavigationBar(listView) listView.excludePaddingClippableViewFromBottomNavigationBar()
} }
} }

View File

@@ -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_FILTER
import org.autojs.autojs.ui.settings.VersionHistoryRepository.Companion.DEFAULT_VERSION_NAME import org.autojs.autojs.ui.settings.VersionHistoryRepository.Companion.DEFAULT_VERSION_NAME
import org.autojs.autojs.util.ProcessLogger 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.setMenuIconsColorByThemeColorLuminance
import org.autojs.autojs.util.ViewUtils.setNavigationIconColorByThemeColorLuminance import org.autojs.autojs.util.ViewUtils.setNavigationIconColorByThemeColorLuminance
import org.autojs.autojs6.R import org.autojs.autojs6.R
@@ -73,7 +73,7 @@ class DisplayVersionHistoriesActivity : BaseActivity() {
addDuration = 200 addDuration = 200
supportsChangeAnimations = false supportsChangeAnimations = false
} }
ViewUtils.excludePaddingClippableViewFromBottomNavigationBar(it) it.excludePaddingClippableViewFromBottomNavigationBar()
} }
lifecycleScope.launch { lifecycleScope.launch {

View File

@@ -123,7 +123,7 @@ class LauncherIconPreference : MaterialListPreference, SharedPreferences.OnShare
ViewUtils.showSnack(dialog.view, R.string.text_already_copied_to_clip, false) 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) neutralColorRes(R.color.dialog_button_hint)
onNeutral { dialog, _ -> onNeutral { dialog, _ ->
ClipboardUtils.setClip(context, shortcuts.joinToString("\n")) ClipboardUtils.setClip(context, shortcuts.joinToString("\n"))

View File

@@ -3,7 +3,7 @@ package org.autojs.autojs.ui.settings
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import org.autojs.autojs.util.ViewUtils import org.autojs.autojs.util.ViewUtils.excludePaddingClippableViewFromBottomNavigationBar
import org.autojs.autojs6.R import org.autojs.autojs6.R
class PreferencesFragment : PreferenceFragmentCompat() { class PreferencesFragment : PreferenceFragmentCompat() {
@@ -16,7 +16,7 @@ class PreferencesFragment : PreferenceFragmentCompat() {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
listView.isHorizontalScrollBarEnabled = false listView.isHorizontalScrollBarEnabled = false
listView.isVerticalScrollBarEnabled = false listView.isVerticalScrollBarEnabled = false
ViewUtils.excludePaddingClippableViewFromBottomNavigationBar(listView) listView.excludePaddingClippableViewFromBottomNavigationBar()
} }
} }

View File

@@ -1,11 +1,9 @@
package org.autojs.autojs.ui.timing package org.autojs.autojs.ui.timing
import android.annotation.SuppressLint
import android.content.ActivityNotFoundException
import android.content.Intent import android.content.Intent
import android.net.ConnectivityManager import android.net.ConnectivityManager
import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.provider.Settings
import android.text.TextUtils import android.text.TextUtils
import android.util.Log import android.util.Log
import android.view.Menu import android.view.Menu
@@ -22,7 +20,6 @@ import android.widget.TextView
import android.widget.TimePicker import android.widget.TimePicker
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import androidx.core.graphics.Insets import androidx.core.graphics.Insets
import androidx.core.net.toUri
import androidx.core.view.ViewCompat import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat
import androidx.core.view.forEach 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.model.script.ScriptFile
import org.autojs.autojs.permission.IgnoreBatteryOptimizationsPermission import org.autojs.autojs.permission.IgnoreBatteryOptimizationsPermission
import org.autojs.autojs.theme.ThemeColorHelper 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.IntentTask
import org.autojs.autojs.timing.TaskReceiver import org.autojs.autojs.timing.TaskReceiver
import org.autojs.autojs.timing.TimedTask 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.tool.MapBuilder
import org.autojs.autojs.ui.BaseActivity import org.autojs.autojs.ui.BaseActivity
import org.autojs.autojs.util.ViewUtils 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.setMenuIconsColorByThemeColorLuminance
import org.autojs.autojs.util.ViewUtils.showToast import org.autojs.autojs.util.ViewUtils.showToast
import org.autojs.autojs6.R import org.autojs.autojs6.R
@@ -140,7 +139,7 @@ class TimedTaskSettingActivity : BaseActivity() {
setUpTaskSettings() setUpTaskSettings()
ViewUtils.excludePaddingClippableViewFromBottomNavigationBar(binding.scrollView) binding.scrollView.excludePaddingClippableViewFromBottomNavigationBar()
ViewCompat.setOnApplyWindowInsetsListener(findViewById(android.R.id.content)) { v, insets -> ViewCompat.setOnApplyWindowInsetsListener(findViewById(android.R.id.content)) { v, insets ->
val sysBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) val sysBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
@@ -353,36 +352,20 @@ class TimedTaskSettingActivity : BaseActivity() {
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean = when (item.itemId) { override fun onOptionsItemSelected(item: MenuItem): Boolean = when (item.itemId) {
R.id.action_done -> when { R.id.action_done -> run {
!IgnoreBatteryOptimizationsPermission(this).has() -> { IgnoreBatteryOptimizationsPermission(this).let {
try { if (!it.has() && it.request()) {
@SuppressLint("BatteryLife") return@run true
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()
} }
} }
!ExactAlarmPermissionHelper.canScheduleExactAlarms(this) -> { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
try { if (!canScheduleExactAlarms(this) && requestExactAlarmPermission(this)) {
val intent = Intent() return@run true
.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()
} }
} }
else -> { createOrUpdateTask()
createOrUpdateTask() return@run true
} }
}.let { true }
else -> super.onOptionsItemSelected(item) else -> super.onOptionsItemSelected(item)
} }

View File

@@ -374,7 +374,8 @@ object ViewUtils {
@JvmStatic @JvmStatic
@JvmOverloads @JvmOverloads
fun excludeFloatingActionButtonFromBottomNavigationBar(fab: FloatingActionButton, extraMarginBottomDp: Float = 16F) { fun FloatingActionButton.excludeFloatingActionButtonFromBottomNavigationBar(extraMarginBottomDp: Float = 16F) {
val fab = this
ViewCompat.setOnApplyWindowInsetsListener(fab) { view, insets -> ViewCompat.setOnApplyWindowInsetsListener(fab) { view, insets ->
val bottomInset = insets.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom val bottomInset = insets.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom
view.layoutParams.runCatching { view.layoutParams.runCatching {
@@ -387,7 +388,8 @@ object ViewUtils {
@JvmStatic @JvmStatic
@JvmOverloads @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 -> ViewCompat.setOnApplyWindowInsetsListener(view) { _, insets ->
val bottomInset = insets.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom val bottomInset = insets.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom
view.setPadding(0, 0, 0, DisplayUtils.dpToPx(extraPaddingBottomDp).roundToInt() + bottomInset) view.setPadding(0, 0, 0, DisplayUtils.dpToPx(extraPaddingBottomDp).roundToInt() + bottomInset)
@@ -397,7 +399,8 @@ object ViewUtils {
} }
@JvmStatic @JvmStatic
fun excludeContentViewFromHorizontalNavigationBar(activity: Activity) { fun Activity.excludeContentViewFromHorizontalNavigationBar() {
val activity = this
val contentView = activity.findViewById<View?>(android.R.id.content) ?: return val contentView = activity.findViewById<View?>(android.R.id.content) ?: return
ViewCompat.setOnApplyWindowInsetsListener(contentView) { v, insets -> ViewCompat.setOnApplyWindowInsetsListener(contentView) { v, insets ->
val sysInsets = insets.getInsets(WindowInsetsCompat.Type.systemBars()) val sysInsets = insets.getInsets(WindowInsetsCompat.Type.systemBars())

View File

@@ -129,7 +129,7 @@
app:itemValues="@array/values_timed_task_backend" app:itemValues="@array/values_timed_task_backend"
app:itemDefaultKey="@string/default_key_timed_task_backend" app:itemDefaultKey="@string/default_key_timed_task_backend"
app:longClickPrompt="@string/description_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" />
</org.autojs.autojs.theme.preference.ThemeColorPreferenceCategory> </org.autojs.autojs.theme.preference.ThemeColorPreferenceCategory>