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.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);
}
}

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.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() }
}
}

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.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()
}

View File

@@ -1,3 +1,3 @@
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.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)

View File

@@ -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)
}

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.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)

View File

@@ -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()
}
}

View File

@@ -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()
}
}

View File

@@ -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)

View File

@@ -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) {

View File

@@ -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()

View File

@@ -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()
}
}

View File

@@ -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)

View File

@@ -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 -> {

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.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)

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.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()
}

View File

@@ -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)

View File

@@ -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()
}
}

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_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 {

View File

@@ -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"))

View File

@@ -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()
}
}

View File

@@ -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()
R.id.action_done -> run {
IgnoreBatteryOptimizationsPermission(this).let {
if (!it.has() && it.request()) {
return@run true
}
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
if (!canScheduleExactAlarms(this) && requestExactAlarmPermission(this)) {
return@run true
}
}
createOrUpdateTask()
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()
}
}
else -> {
createOrUpdateTask()
}
}.let { true }
else -> super.onOptionsItemSelected(item)
}

View File

@@ -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<View?>(android.R.id.content) ?: return
ViewCompat.setOnApplyWindowInsetsListener(contentView) { v, insets ->
val sysInsets = insets.getInsets(WindowInsetsCompat.Type.systemBars())

View File

@@ -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" />
</org.autojs.autojs.theme.preference.ThemeColorPreferenceCategory>