From fc6c912dec606c09285f9bc0aabe6c449b39eeea Mon Sep 17 00:00:00 2001 From: SuperMonster003 Date: Mon, 10 Mar 2025 23:20:04 +0800 Subject: [PATCH] =?UTF-8?q?6.6.2=20-=20Alpha4=20-=20=E5=AF=BC=E8=88=AA?= =?UTF-8?q?=E6=A0=8F=E8=AE=BE=E7=BD=AE=E4=B8=BA=E9=80=8F=E6=98=8E=E6=88=96?= =?UTF-8?q?=E5=8D=8A=E9=80=8F=E6=98=8E=E4=BB=A5=E5=A2=9E=E5=BC=BA=E8=A7=86?= =?UTF-8?q?=E8=A7=89=E4=BD=93=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .changelog/lang_zh-Hans.json | 3 + .../autojs/autojs/apkbuilder/ApkBuilder.kt | 2 +- .../autojs/core/console/ConsoleView.java | 20 +- .../autojs/core/inputevent/RootAutomator.java | 4 +- .../permission/PermissionRequestActivity.java | 1 + .../FloatingActionButtonAttributes.kt | 2 + .../external/tasker/TaskPrefEditActivity.kt | 1 + .../widget/ScriptWidgetSettingsActivity.java | 11 + .../org/autojs/autojs/inrt/LogActivity.kt | 20 +- .../autojs/autojs/inrt/SettingsActivity.kt | 22 +- .../runtime/api/augment/global/Classes.kt | 3 + .../api/augment/global/GlobalClasses.kt | 2 - .../autojs/autojs/theme/ThemeColorManager.kt | 7 + .../autojs/theme/app/ColorSelectActivity.kt | 1 + .../ThemeColorFloatingActionButton.java | 1 + .../theme/widget/ThemeColorToolbar.java | 12 +- .../java/org/autojs/autojs/ui/BaseActivity.kt | 16 +- .../autojs/ui/doc/DocumentationFragment.kt | 2 + .../org/autojs/autojs/ui/edit/EditActivity.kt | 13 +- .../autojs/ui/error/ErrorReportActivity.kt | 193 +++-- .../autojs/autojs/ui/explorer/ExplorerView.kt | 4 +- .../filechooser/ExplorerItemViewHolder.java | 2 +- .../ui/keystore/ManageKeyStoreActivity.kt | 17 +- .../org/autojs/autojs/ui/log/LogActivity.kt | 24 +- .../autojs/ui/main/FloatingActionMenu.java | 2 +- .../org/autojs/autojs/ui/main/MainActivity.kt | 38 +- .../autojs/ui/main/ViewPagerFragment.java | 4 + .../scripts/BaseDisplayContentActivity.kt | 2 + .../ui/main/scripts/ExplorerFragment.kt | 88 ++- .../ui/main/task/TaskManagerFragment.kt | 2 + .../autojs/ui/project/BuildActivity.java | 4 + .../ui/project/ProjectConfigActivity.kt | 10 +- .../ui/settings/DeveloperOptionsActivity.kt | 46 +- .../ui/settings/DeveloperOptionsFragment.kt | 7 + .../autojs/ui/settings/PreferencesActivity.kt | 16 +- .../autojs/ui/settings/PreferencesFragment.kt | 2 + .../ui/shortcut/AppsIconSelectActivity.java | 13 +- .../ui/shortcut/ShortcutCreateActivity.java | 4 + .../autojs/autojs/ui/splash/SplashActivity.kt | 14 +- .../ui/timing/TimedTaskSettingActivity.kt | 3 + .../autojs/autojs/ui/widget/FirstCharView.kt | 7 +- .../ui/widget/ScrollAwareFABBehavior.java | 11 +- .../java/org/autojs/autojs/util/RhinoUtils.kt | 1 + .../java/org/autojs/autojs/util/ViewUtils.kt | 67 +- .../mozilla/javascript/VMBridge_custom.java | 1 - app/src/main/res/layout/activity_build.xml | 1 + app/src/main/res/layout/activity_log.xml | 39 +- app/src/main/res/layout/activity_main.xml | 1 + .../main/res/layout/activity_main_inrt.xml | 3 + .../res/layout/activity_manage_key_store.xml | 55 +- .../res/layout/activity_project_config.xml | 1 + .../activity_script_widget_settings.xml | 37 +- .../res/layout/activity_settings_inrt.xml | 4 +- app/src/main/res/layout/activity_splash.xml | 44 +- .../main/res/layout/activity_splash_inrt.xml | 56 +- .../layout/activity_timed_task_setting.xml | 689 +++++++++--------- app/src/main/res/layout/editor_view.xml | 121 +-- app/src/main/res/layout/ewebview.xml | 26 +- .../main/res/layout/fragment_task_manager.xml | 16 +- app/src/main/res/layout/item_key_store.xml | 17 +- app/src/main/res/values-night/styles.xml | 1 + app/src/main/res/values/attrs.xml | 5 +- app/src/main/res/values/colors.xml | 2 + app/src/main/res/values/styles.xml | 2 + version.properties | 8 +- 65 files changed, 1033 insertions(+), 820 deletions(-) diff --git a/.changelog/lang_zh-Hans.json b/.changelog/lang_zh-Hans.json index 33301884..4e89b853 100644 --- a/.changelog/lang_zh-Hans.json +++ b/.changelog/lang_zh-Hans.json @@ -19,6 +19,9 @@ "打包页面支持 Pinyin 库选项", "打包应用主活动页面优化状态栏背景及文字颜色", "控件的文字及图标根据主题色亮度值自动切换合适的颜色", + "应用内页面导航栏设置为透明或半透明以增强视觉体验", + "长按应用主页 \"文件\" 标签可切换浮动按钮可见状态", + "日志页面浮动按钮可见状态与列表滚动操作联动", "脚本项目配置文件 project.json 支持更多打包选项 _[`issue #305`](http://issues.autojs6.com/305)_ _[`issue #306`](http://issues.autojs6.com/306)_", "脚本项目配置文件 project.json 支持选项名称宽松匹配及别名兼容", "APK 文件类型信息对话框增加文件大小与签名方案信息", diff --git a/app/src/main/java/org/autojs/autojs/apkbuilder/ApkBuilder.kt b/app/src/main/java/org/autojs/autojs/apkbuilder/ApkBuilder.kt index 374692ec..c0dc0834 100644 --- a/app/src/main/java/org/autojs/autojs/apkbuilder/ApkBuilder.kt +++ b/app/src/main/java/org/autojs/autojs/apkbuilder/ApkBuilder.kt @@ -149,7 +149,7 @@ open class ApkBuilder(apkInputStream: InputStream?, private val outApkFile: File prepareManifestConfiguration(this) setArscPackageName(packageName) updateProjectConfig(this) - copyAssetsRecursively("", File(buildDir, "assets")) + copyAssetsRecursively("", File(buildPath, "assets")) copyLibrariesByConfig(this) setScriptFile(sourcePath) } diff --git a/app/src/main/java/org/autojs/autojs/core/console/ConsoleView.java b/app/src/main/java/org/autojs/autojs/core/console/ConsoleView.java index 0dd631c8..0b4092df 100644 --- a/app/src/main/java/org/autojs/autojs/core/console/ConsoleView.java +++ b/app/src/main/java/org/autojs/autojs/core/console/ConsoleView.java @@ -26,8 +26,8 @@ import org.autojs.autojs.tool.MapBuilder; import org.autojs.autojs.ui.enhancedfloaty.ResizableExpandableFloatyWindow; import org.autojs.autojs.ui.log.LogActivity; import org.autojs.autojs.util.DisplayUtils; +import org.autojs.autojs.util.ViewUtils; import org.autojs.autojs6.R; -import org.jetbrains.annotations.NotNull; import java.lang.ref.WeakReference; import java.util.ArrayList; @@ -61,17 +61,17 @@ public class ConsoleView extends FrameLayout implements ConsoleImpl.LogListener public ConsoleView(Context context) { super(context); - init(null); + init(null, 0); } public ConsoleView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); - init(attrs); + init(attrs, 0); } public ConsoleView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); - init(attrs); + init(attrs, defStyleAttr); } public Map getTextColors() { @@ -79,14 +79,16 @@ public class ConsoleView extends FrameLayout implements ConsoleImpl.LogListener } @SuppressLint("ClickableViewAccessibility") - private void init(@Nullable AttributeSet attrs) { + private void init(@Nullable AttributeSet attrs, int defStyleAttr) { inflate(getContext(), R.layout.console_view, this); Map logLevelColorResIdMap = getLogLevelMap(); Map logLevelColorIntMap = getLogLevelMap(); + boolean isExcludeFromNavigationBar = false; + if (attrs != null) { - TypedArray ta = getContext().obtainStyledAttributes(attrs, R.styleable.ConsoleView); + TypedArray ta = getContext().obtainStyledAttributes(attrs, R.styleable.ConsoleView, defStyleAttr, 0); logLevelColorIntMap.put(Log.VERBOSE, ta.getColor(R.styleable.ConsoleView_color_verbose, Color.TRANSPARENT)); logLevelColorIntMap.put(Log.DEBUG, ta.getColor(R.styleable.ConsoleView_color_debug, Color.TRANSPARENT)); @@ -95,6 +97,8 @@ public class ConsoleView extends FrameLayout implements ConsoleImpl.LogListener logLevelColorIntMap.put(Log.ERROR, ta.getColor(R.styleable.ConsoleView_color_error, Color.TRANSPARENT)); logLevelColorIntMap.put(Log.ASSERT, ta.getColor(R.styleable.ConsoleView_color_assert, Color.TRANSPARENT)); + isExcludeFromNavigationBar = ta.getBoolean(R.styleable.ConsoleView_excludeFromNavigationBar, false); + ta.recycle(); } @@ -128,6 +132,10 @@ public class ConsoleView extends FrameLayout implements ConsoleImpl.LogListener initEditText(); initSubmitButton(); + + if (isExcludeFromNavigationBar) { + ViewUtils.excludePaddingClippableViewFromNavigationBar(mLogListRecyclerView); + } } @NonNull diff --git a/app/src/main/java/org/autojs/autojs/core/inputevent/RootAutomator.java b/app/src/main/java/org/autojs/autojs/core/inputevent/RootAutomator.java index 6c4e2eed..4da1fbab 100644 --- a/app/src/main/java/org/autojs/autojs/core/inputevent/RootAutomator.java +++ b/app/src/main/java/org/autojs/autojs/core/inputevent/RootAutomator.java @@ -288,7 +288,9 @@ public class RootAutomator implements Shell.Callback { @Override public void onInitialized() { String path = RootAutomatorEngine.getExecutablePath(mContext); - String deviceNameOrPath = RootAutomatorEngine.getDeviceNameOrPath(mContext, InputDevices.getTouchDeviceName()); + // @Reference to ozobiozobi (https://github.com/ozobiozobi) by SuperMonster003 on Mar 10, 2025. + // ! https://github.com/aiselp/AutoX/commit/8fe5d674f080c0ab109ce13f7cabd98795c22a1f#diff-dc753defa5bc4d7d6fab4f2e59a219ce7b89d7bcff2c9585f87c96964081ad72R290-R291 + String deviceNameOrPath = "'" + RootAutomatorEngine.getDeviceNameOrPath(mContext, InputDevices.getTouchDeviceName()) + "'"; Log.d(LOG_TAG, "deviceNameOrPath: " + deviceNameOrPath); mShell.exec("chmod 777 " + path); String command = String.format(Locale.getDefault(), diff --git a/app/src/main/java/org/autojs/autojs/core/permission/PermissionRequestActivity.java b/app/src/main/java/org/autojs/autojs/core/permission/PermissionRequestActivity.java index 46c6d96e..f2858dd7 100644 --- a/app/src/main/java/org/autojs/autojs/core/permission/PermissionRequestActivity.java +++ b/app/src/main/java/org/autojs/autojs/core/permission/PermissionRequestActivity.java @@ -28,4 +28,5 @@ public class PermissionRequestActivity extends Activity { super.onRequestPermissionsResult(requestCode, permissions, grantResults); finish(); } + } 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 db3fc02d..3179a59e 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,6 +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 /** * Modified by SuperMonster003 as of Jan 21, 2023. @@ -26,6 +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.excludeFloatingActionButtonFromNavigationBar(view) } } } \ 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 d49c02ef..4956b740 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 @@ -40,6 +40,7 @@ class TaskPrefEditActivity : AbstractAppCompatPluginActivity() { binding.editScript.setOnClickListener { editPreExecuteScript() } ViewUtils.setToolbarAsBack(this, R.string.text_please_choose_a_script) + ViewUtils.excludePaddingClippableViewFromNavigationBar(binding.scriptList) initScriptListRecyclerView() } diff --git a/app/src/main/java/org/autojs/autojs/external/widget/ScriptWidgetSettingsActivity.java b/app/src/main/java/org/autojs/autojs/external/widget/ScriptWidgetSettingsActivity.java index 64f2c555..0c1d1739 100644 --- a/app/src/main/java/org/autojs/autojs/external/widget/ScriptWidgetSettingsActivity.java +++ b/app/src/main/java/org/autojs/autojs/external/widget/ScriptWidgetSettingsActivity.java @@ -6,12 +6,14 @@ import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; import org.autojs.autojs.model.explorer.Explorer; import org.autojs.autojs.model.explorer.ExplorerDirPage; import org.autojs.autojs.model.explorer.ExplorerFileProvider; import org.autojs.autojs.model.script.Scripts; import org.autojs.autojs.ui.BaseActivity; import org.autojs.autojs.ui.explorer.ExplorerView; +import org.autojs.autojs.util.ViewUtils; import org.autojs.autojs.util.WorkingDirectoryUtils; import org.autojs.autojs6.R; import org.autojs.autojs6.databinding.ActivityScriptWidgetSettingsBinding; @@ -38,6 +40,10 @@ public class ScriptWidgetSettingsActivity extends BaseActivity { initScriptListRecyclerView(); } + private void setUpToolbarColors() { + ViewUtils.setToolbarMenuIconsColorByThemeColorLuminance(this, binding.toolbar); + } + private void initScriptListRecyclerView() { mExplorer = new Explorer(new ExplorerFileProvider(Scripts.FILE_FILTER), 0); ExplorerView explorerView = binding.scriptList; @@ -47,6 +53,10 @@ public class ScriptWidgetSettingsActivity extends BaseActivity { mSelectedScriptFilePath = file.getPath(); finish(); }); + RecyclerView explorerItemListView = explorerView.getExplorerItemListView(); + if (explorerItemListView != null) { + ViewUtils.excludePaddingClippableViewFromNavigationBar(explorerItemListView); + } } @Override @@ -62,6 +72,7 @@ public class ScriptWidgetSettingsActivity extends BaseActivity { @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.script_widget_settings_menu, menu); + setUpToolbarColors(); return true; } diff --git a/app/src/main/java/org/autojs/autojs/inrt/LogActivity.kt b/app/src/main/java/org/autojs/autojs/inrt/LogActivity.kt index f19a89ea..04101173 100644 --- a/app/src/main/java/org/autojs/autojs/inrt/LogActivity.kt +++ b/app/src/main/java/org/autojs/autojs/inrt/LogActivity.kt @@ -5,13 +5,12 @@ import android.os.Bundle import android.view.Menu import android.view.MenuItem import android.view.View -import androidx.appcompat.widget.Toolbar import org.autojs.autojs.core.console.ConsoleImpl -import org.autojs.autojs.core.console.ConsoleView import org.autojs.autojs.inrt.autojs.AutoJs import org.autojs.autojs.inrt.launch.GlobalProjectLauncher import org.autojs.autojs.ui.BaseActivity import org.autojs.autojs6.R +import org.autojs.autojs6.databinding.ActivityMainInrtBinding class LogActivity : BaseActivity() { @@ -24,12 +23,16 @@ class LogActivity : BaseActivity() { } private fun setupView() { - setContentView(R.layout.activity_main_inrt) - val toolbar = findViewById(R.id.toolbar) - setSupportActionBar(toolbar) - val consoleView = findViewById(R.id.console) - consoleView.setConsole(AutoJs.instance.globalConsole as ConsoleImpl) - consoleView.findViewById(R.id.input_container).visibility = View.GONE + ActivityMainInrtBinding.inflate(layoutInflater).also { binding -> + setContentView(binding.root) + binding.toolbar.apply { + setSupportActionBar(this) + } + binding.console.apply { + setConsole(AutoJs.instance.globalConsole as ConsoleImpl) + findViewById(R.id.input_container).visibility = View.GONE + } + } } override fun onOptionsItemSelected(item: MenuItem): Boolean { @@ -47,4 +50,5 @@ class LogActivity : BaseActivity() { const val EXTRA_LAUNCH_SCRIPT = "launch_script" } + } diff --git a/app/src/main/java/org/autojs/autojs/inrt/SettingsActivity.kt b/app/src/main/java/org/autojs/autojs/inrt/SettingsActivity.kt index 85696505..49b5ff7d 100644 --- a/app/src/main/java/org/autojs/autojs/inrt/SettingsActivity.kt +++ b/app/src/main/java/org/autojs/autojs/inrt/SettingsActivity.kt @@ -2,8 +2,8 @@ package org.autojs.autojs.inrt import android.os.Bundle import androidx.appcompat.app.AppCompatActivity -import androidx.appcompat.widget.Toolbar import org.autojs.autojs6.R +import org.autojs.autojs6.databinding.ActivitySettingsInrtBinding /** * Created by Stardust on Dec 8, 2017. @@ -13,16 +13,16 @@ class SettingsActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setupViews() - } - - private fun setupViews() { - setContentView(R.layout.activity_settings_inrt) - supportFragmentManager.beginTransaction().replace(R.id.fragment_setting, PreferenceFragment()).commit() - val toolbar = findViewById(R.id.toolbar) - toolbar.setTitle(R.string.text_settings) - setSupportActionBar(toolbar) - toolbar.setNavigationOnClickListener { finish() } + val binding = ActivitySettingsInrtBinding.inflate(layoutInflater).also { setContentView(it.root) } + supportFragmentManager + .beginTransaction() + .replace(R.id.fragment_setting, PreferenceFragment()) + .commit() + binding.toolbar.apply { + setTitle(R.string.text_settings) + setSupportActionBar(this) + setNavigationOnClickListener { finish() } + } supportActionBar?.setDisplayHomeAsUpEnabled(true) } diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/augment/global/Classes.kt b/app/src/main/java/org/autojs/autojs/runtime/api/augment/global/Classes.kt index e5d4da48..2f4b1521 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/augment/global/Classes.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/augment/global/Classes.kt @@ -59,6 +59,9 @@ class Classes { @JvmField val Settings = android.provider.Settings::class + @JvmField + val TextToSpeech = android.speech.tts.TextToSpeech::class + @JvmField val InputType = android.text.InputType::class diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/augment/global/GlobalClasses.kt b/app/src/main/java/org/autojs/autojs/runtime/api/augment/global/GlobalClasses.kt index f3127a75..bd033e7d 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/augment/global/GlobalClasses.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/augment/global/GlobalClasses.kt @@ -1,8 +1,6 @@ package org.autojs.autojs.runtime.api.augment.global import org.autojs.autojs.annotation.AugmentableSimpleGetterProxyInterface -import org.autojs.autojs.annotation.RhinoStandardFunctionInterface -import org.autojs.autojs.runtime.ScriptRuntime import org.autojs.autojs.runtime.api.augment.SimpleGetterProxy import org.mozilla.javascript.NativeJavaClass import org.mozilla.javascript.Scriptable diff --git a/app/src/main/java/org/autojs/autojs/theme/ThemeColorManager.kt b/app/src/main/java/org/autojs/autojs/theme/ThemeColorManager.kt index abeee618..3199fe26 100644 --- a/app/src/main/java/org/autojs/autojs/theme/ThemeColorManager.kt +++ b/app/src/main/java/org/autojs/autojs/theme/ThemeColorManager.kt @@ -1,6 +1,7 @@ package org.autojs.autojs.theme import android.app.Activity +import android.content.Context import android.graphics.Paint import android.view.View import org.autojs.autojs.util.ColorUtils @@ -76,6 +77,12 @@ object ThemeColorManager { currentThemeColor.saveIn() } + @JvmStatic + fun getDayOrNightColorByLuminance(context: Context): Int = context.getColor(getDayOrNightColorResByLuminance()) + + @JvmStatic + fun getDayOrNightColorResByLuminance(): Int = if (isThemeColorLuminanceLight()) R.color.day else R.color.night + private object BackgroundColorManager { private val views: MutableList> = LinkedList() 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 15cb8f0a..86c20ec3 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 @@ -50,6 +50,7 @@ class ColorSelectActivity : BaseActivity() { handleIntent() binding = MtActivityColorSelectBinding.inflate(layoutInflater).also { setUpUI(it) + ViewUtils.excludePaddingClippableViewFromNavigationBar(it.colorSettingRecyclerView) } } diff --git a/app/src/main/java/org/autojs/autojs/theme/widget/ThemeColorFloatingActionButton.java b/app/src/main/java/org/autojs/autojs/theme/widget/ThemeColorFloatingActionButton.java index c1cee264..c2eb1d29 100644 --- a/app/src/main/java/org/autojs/autojs/theme/widget/ThemeColorFloatingActionButton.java +++ b/app/src/main/java/org/autojs/autojs/theme/widget/ThemeColorFloatingActionButton.java @@ -16,6 +16,7 @@ import org.autojs.autojs6.R; * Created by Stardust on Aug 16, 2016. */ public class ThemeColorFloatingActionButton extends FloatingActionButton implements ThemeColorMutable { + public ThemeColorFloatingActionButton(Context context) { super(context); init(); diff --git a/app/src/main/java/org/autojs/autojs/theme/widget/ThemeColorToolbar.java b/app/src/main/java/org/autojs/autojs/theme/widget/ThemeColorToolbar.java index cc76c2c6..91753509 100644 --- a/app/src/main/java/org/autojs/autojs/theme/widget/ThemeColorToolbar.java +++ b/app/src/main/java/org/autojs/autojs/theme/widget/ThemeColorToolbar.java @@ -1,7 +1,6 @@ package org.autojs.autojs.theme.widget; import android.content.Context; -import android.content.res.ColorStateList; import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; import android.graphics.drawable.Drawable; @@ -49,15 +48,8 @@ public class ThemeColorToolbar extends Toolbar implements ThemeColorMutable { int colorPrimary = color.colorPrimary; setBackgroundColor(colorPrimary); - int aimColor; - int popupTheme; - if (ThemeColorManager.isThemeColorLuminanceLight()) { - aimColor = getResources().getColor(R.color.day, null); - popupTheme = R.style.PopupMenuThemeLight; - } else { - aimColor = getResources().getColor(R.color.night, null); - popupTheme = R.style.PopupMenuThemeDark; - } + int aimColor = ThemeColorManager.getDayOrNightColorByLuminance(getContext()); + int popupTheme = ThemeColorManager.isThemeColorLuminanceLight() ? R.style.PopupMenuThemeLight : R.style.PopupMenuThemeDark; setTitleTextColor(aimColor); setSubtitleTextColor(aimColor); 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 defa19a3..97e4ab32 100644 --- a/app/src/main/java/org/autojs/autojs/ui/BaseActivity.kt +++ b/app/src/main/java/org/autojs/autojs/ui/BaseActivity.kt @@ -5,8 +5,8 @@ package org.autojs.autojs.ui import android.content.Context import android.os.Build import android.os.Bundle -import android.view.View import android.view.View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN +import android.view.View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION import android.view.View.SYSTEM_UI_FLAG_LAYOUT_STABLE import android.view.WindowManager import androidx.appcompat.app.AppCompatActivity @@ -18,6 +18,7 @@ import org.autojs.autojs.theme.ThemeColorManager import org.autojs.autojs.util.LocaleUtils import org.autojs.autojs.util.ViewUtils import org.autojs.autojs6.BuildConfig +import org.autojs.autojs6.R /** * Created by Stardust on Jan 23, 2017. @@ -26,14 +27,21 @@ import org.autojs.autojs6.BuildConfig abstract class BaseActivity : AppCompatActivity() { open val handleStatusBarThemeColorAutomatically = true + open val handleNavigationBarContrastEnforcedAutomatically = true override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - @Suppress("DEPRECATION") - ViewUtils.appendSystemUiVisibility(this, SYSTEM_UI_FLAG_LAYOUT_STABLE or SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN) + ViewUtils.addWindowFlags(this, WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) - window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) + @Suppress("DEPRECATION") + ViewUtils.appendSystemUiVisibility(this, SYSTEM_UI_FLAG_LAYOUT_STABLE or SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION) + + if (handleNavigationBarContrastEnforcedAutomatically) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { + window.navigationBarColor = getColor(R.color.black_alpha_44) + } + } setApplicationLocale(this) diff --git a/app/src/main/java/org/autojs/autojs/ui/doc/DocumentationFragment.kt b/app/src/main/java/org/autojs/autojs/ui/doc/DocumentationFragment.kt index 5062d83a..80dd141a 100644 --- a/app/src/main/java/org/autojs/autojs/ui/doc/DocumentationFragment.kt +++ b/app/src/main/java/org/autojs/autojs/ui/doc/DocumentationFragment.kt @@ -14,6 +14,7 @@ import org.autojs.autojs.ui.main.ViewPagerFragment import org.autojs.autojs.ui.main.ViewStatesManageable import org.autojs.autojs.ui.widget.NestedWebView import org.autojs.autojs.util.DocsUtils.getUrl +import org.autojs.autojs.util.ViewUtils import org.autojs.autojs.util.WebViewUtils.Companion.adaptDarkMode import org.autojs.autojs6.R import org.autojs.autojs6.databinding.FragmentOnlineDocsBinding @@ -51,6 +52,7 @@ open class DocumentationFragment : ViewPagerFragment(ROTATION_GONE), BackPressed super.onViewCreated(view, savedInstanceState) webView = binding!!.ewebView.webView.also { adaptDarkMode(requireContext(), it) + ViewUtils.excludePaddingClippableViewFromNavigationBar(it) } restoreViewStates() (activity as? MainActivity)?.apply { diff --git a/app/src/main/java/org/autojs/autojs/ui/edit/EditActivity.kt b/app/src/main/java/org/autojs/autojs/ui/edit/EditActivity.kt index e48be06b..c47d0e20 100644 --- a/app/src/main/java/org/autojs/autojs/ui/edit/EditActivity.kt +++ b/app/src/main/java/org/autojs/autojs/ui/edit/EditActivity.kt @@ -10,6 +10,7 @@ import android.util.Log import android.view.ActionMode import android.view.Menu import android.view.MenuItem +import androidx.appcompat.widget.Toolbar import com.afollestad.materialdialogs.MaterialDialog import io.reactivex.Observable import io.reactivex.android.schedulers.AndroidSchedulers @@ -21,10 +22,10 @@ import org.autojs.autojs.core.permission.PermissionRequestProxyActivity import org.autojs.autojs.core.permission.RequestPermissionCallbacks import org.autojs.autojs.pio.PFiles import org.autojs.autojs.storage.file.TmpScriptFiles -import org.autojs.autojs.theme.ThemeColorManager import org.autojs.autojs.ui.BaseActivity import org.autojs.autojs.ui.main.MainActivity import org.autojs.autojs.util.Observers +import org.autojs.autojs.util.ViewUtils import org.autojs.autojs6.R import org.autojs.autojs6.databinding.ActivityEditBinding import java.io.File @@ -36,6 +37,7 @@ import java.io.IOException */ open class EditActivity : BaseActivity(), DelegateHost, PermissionRequestProxyActivity { + private var mToolbar: Toolbar? = null private val mMediator = OnActivityResultDelegate.Mediator() private lateinit var mEditorView: EditorView @@ -48,20 +50,16 @@ open class EditActivity : BaseActivity(), DelegateHost, PermissionRequestProxyAc override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - val binding = ActivityEditBinding.inflate(layoutInflater) - setContentView(binding.root) - + val binding = ActivityEditBinding.inflate(layoutInflater).also { setContentView(it.root) } + mToolbar = findViewById(R.id.toolbar) mEditorView = binding.editorView.apply { handleIntent(intent) .observeOn(AndroidSchedulers.mainThread()) .subscribe(Observers.emptyConsumer()) { ex: Throwable -> onLoadFileError(ex.message) } } - mEditorMenu = EditorMenu(mEditorView) - mNewTask = intent.flags and Intent.FLAG_ACTIVITY_NEW_TASK != 0 setUpToolbar() - window.statusBarColor = ThemeColorManager.colorPrimary } override fun onWindowStartingActionMode(callback: ActionMode.Callback): ActionMode? { @@ -88,6 +86,7 @@ open class EditActivity : BaseActivity(), DelegateHost, PermissionRequestProxyAc override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu_editor, menu) + ViewUtils.setToolbarMenuIconsColorByThemeColorLuminance(this, mToolbar) return true } diff --git a/app/src/main/java/org/autojs/autojs/ui/error/ErrorReportActivity.kt b/app/src/main/java/org/autojs/autojs/ui/error/ErrorReportActivity.kt index 91fa62b4..c695d927 100644 --- a/app/src/main/java/org/autojs/autojs/ui/error/ErrorReportActivity.kt +++ b/app/src/main/java/org/autojs/autojs/ui/error/ErrorReportActivity.kt @@ -1,110 +1,109 @@ -package org.autojs.autojs.ui.error; +package org.autojs.autojs.ui.error -import android.annotation.SuppressLint; -import android.content.ClipData; -import android.content.ClipboardManager; -import android.os.Build; -import android.os.Bundle; -import android.util.Log; - -import androidx.appcompat.widget.Toolbar; - -import com.afollestad.materialdialogs.MaterialDialog; - -import org.autojs.autojs.ui.BaseActivity; -import org.autojs.autojs.util.ViewUtils; -import org.autojs.autojs6.BuildConfig; -import org.autojs.autojs6.R; - -import java.util.Locale; -import java.util.Objects; -import java.util.Timer; -import java.util.TimerTask; +import android.annotation.SuppressLint +import android.content.ClipData +import android.content.ClipboardManager +import android.content.Context +import android.content.Intent +import android.os.Build +import android.os.Bundle +import android.util.Log +import com.afollestad.materialdialogs.MaterialDialog +import org.autojs.autojs.app.GlobalAppContext +import org.autojs.autojs.ui.BaseActivity +import org.autojs.autojs.util.ViewUtils +import org.autojs.autojs6.BuildConfig +import org.autojs.autojs6.R +import org.autojs.autojs6.databinding.ActivityErrorReportBinding +import java.util.* /** * Created by Stardust on Feb 2, 2017. + * Transformed by SuperMonster003 on Mar 10, 2025. */ -public class ErrorReportActivity extends BaseActivity { +class ErrorReportActivity : BaseActivity() { - private static final String TAG = ErrorReportActivity.class.getSimpleName(); - - private String mTitle; - - protected void onCreate(Bundle savedInstanceState) { + override fun onCreate(savedInstanceState: Bundle?) { try { - super.onCreate(savedInstanceState); - mTitle = getString(R.string.text_app_crashed); - setUpUI(); - handleIntent(); - } catch (Throwable throwable) { - Log.e(TAG, "", throwable); - exitAfter(3000); + super.onCreate(savedInstanceState) + ActivityErrorReportBinding.inflate(layoutInflater).also { binding -> + setContentView(binding.root) + binding.toolbar.apply { + title = getString(R.string.text_error_report) + setSupportActionBar(this) + } + supportActionBar?.setHomeButtonEnabled(false) + } + } catch (t: Throwable) { + t.message?.let { msg -> + copyToClip(msg) + ViewUtils.showToast(this, msg) + } + Log.e(TAG, t.message ?: "", t) + exitAfter(3000) + } + } + + override fun onResume() { + super.onResume() + + val message = intent.getStringExtra("message") + val errorDetail = intent.getStringExtra("error") + + val errorMessage = buildString { + appendLine("Version: ${BuildConfig.VERSION_CODE}") + appendLine("Android: ${Build.VERSION.SDK_INT}") + message?.let { appendLine().appendLine(it) } + errorDetail?.let { appendLine().appendLine(it) } + } + + MaterialDialog.Builder(this) + .title(R.string.text_app_crashed) + .content(R.string.crash_feedback) + .positiveText(R.string.text_exit) + .negativeText(R.string.text_copy_debug_info) + .onPositive { _, _ -> exit() } + .onNegative { _, _ -> + copyToClip(errorMessage) + exitAfter(1500) + } + .cancelable(false) + .show() + } + + private fun exitAfter(delay: Int) { + Timer().schedule(object : TimerTask() { + override fun run() = exit() + }, delay.toLong()) + } + + private fun copyToClip(text: String) { + val clipboardManager = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager + clipboardManager.setPrimaryClip(ClipData.newPlainText("Debug", text)) + ViewUtils.showToast(this, R.string.text_already_copied_to_clip) + } + + @Deprecated("Deprecated in Java") + @SuppressLint("MissingSuperCall") + override fun onBackPressed() = exit() + + private fun exit() = finishAffinity() + + companion object { + + private val TAG: String = ErrorReportActivity::class.java.simpleName + + @JvmStatic + @JvmOverloads + fun test(context: Context = GlobalAppContext.get()) { + Intent(context, ErrorReportActivity::class.java) + .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + .putExtra("message", "Test message\nSecond line") + .putExtra("error", "Test error\nSecond line") + .let { context.startActivity(it) } } } - private void handleIntent() { - String message = getIntent().getStringExtra("message"); - final String errorDetail = getIntent().getStringExtra("error"); - showErrorMessageByDialog(message, errorDetail); - } - - private void showErrorMessageByDialog(String message, final String errorDetail) { - new MaterialDialog.Builder(this) - .title(mTitle) - .content(R.string.crash_feedback) - .positiveText(R.string.text_exit) - .negativeText(R.string.text_copy_debug_info) - .onPositive((dialog, which) -> exit()) - .onNegative((dialog, which) -> { - copyToClip(getDeviceMessage() + message + "\n" + errorDetail); - exitAfter(1500); - }) - .cancelable(false) - .show(); - } - - private String getDeviceMessage() { - return String.format(Locale.getDefault(), "Version: %s\nAndroid: %d\n", BuildConfig.VERSION_CODE, Build.VERSION.SDK_INT); - } - - private void exitAfter(int delay) { - new Timer().schedule(new TimerTask() { - @Override - public void run() { - exit(); - } - }, delay); - } - - private void copyToClip(String text) { - ((ClipboardManager) getSystemService(CLIPBOARD_SERVICE)) - .setPrimaryClip(ClipData.newPlainText("Debug", text)); - ViewUtils.showToast(ErrorReportActivity.this, R.string.text_already_copied_to_clip); - } - - private void setUpUI() { - setContentView(R.layout.activity_error_report); - setUpToolbar(); - } - - private void setUpToolbar() { - Toolbar toolbar; - toolbar = findViewById(R.id.toolbar); - toolbar.setTitle(getString(R.string.text_error_report)); - setSupportActionBar(toolbar); - Objects.requireNonNull(getSupportActionBar()).setHomeButtonEnabled(false); - } - - @SuppressLint("MissingSuperCall") - @Override - public void onBackPressed() { - exit(); - } - - private void exit() { - finishAffinity(); - } - } diff --git a/app/src/main/java/org/autojs/autojs/ui/explorer/ExplorerView.kt b/app/src/main/java/org/autojs/autojs/ui/explorer/ExplorerView.kt index 50d74ed8..e4d543d3 100644 --- a/app/src/main/java/org/autojs/autojs/ui/explorer/ExplorerView.kt +++ b/app/src/main/java/org/autojs/autojs/ui/explorer/ExplorerView.kt @@ -107,7 +107,7 @@ open class ExplorerView : ThemeColorSwipeRefreshLayout, SwipeRefreshLayout.OnRef val currentDirectory: ScriptFile get() = currentPage.toScriptFile() - protected var explorerItemListView: RecyclerView? = null + var explorerItemListView: RecyclerView? = null private set private lateinit var mProjectToolbar: ExplorerProjectToolbar @@ -717,7 +717,7 @@ open class ExplorerView : ThemeColorSwipeRefreshLayout, SwipeRefreshLayout.OnRef mFirstChar.setIcon(ExplorerViewHelper.getIcon(item)) when (item.type) { FileUtils.TYPE.JAVASCRIPT, FileUtils.TYPE.AUTO -> mFirstChar - .setIconTextByThemeColorLuminance() + .setIconTextColorByThemeColorLuminance() .setStrokeThemeColor() .setFillThemeColor() else -> mFirstChar diff --git a/app/src/main/java/org/autojs/autojs/ui/filechooser/ExplorerItemViewHolder.java b/app/src/main/java/org/autojs/autojs/ui/filechooser/ExplorerItemViewHolder.java index af0d3844..07f8d5ba 100644 --- a/app/src/main/java/org/autojs/autojs/ui/filechooser/ExplorerItemViewHolder.java +++ b/app/src/main/java/org/autojs/autojs/ui/filechooser/ExplorerItemViewHolder.java @@ -46,7 +46,7 @@ class ExplorerItemViewHolder extends BindableViewHolder { switch (explorerItem.getType()) { case JAVASCRIPT, AUTO -> firstCharIconBinding.firstChar - .setIconTextByThemeColorLuminance() + .setIconTextColorByThemeColorLuminance() .setStrokeThemeColor() .setFillColorDayNight(); default -> firstCharIconBinding.firstChar 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 66a6e9f9..31a5996e 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 @@ -19,11 +19,12 @@ import com.mcal.apksigner.utils.KeyStoreHelper import org.autojs.autojs.apkbuilder.keystore.AESUtils import org.autojs.autojs.apkbuilder.keystore.KeyStore import org.autojs.autojs.core.pref.Pref -import org.autojs.autojs6.R -import org.autojs.autojs6.databinding.ActivityManageKeyStoreBinding 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.autojs6.R +import org.autojs.autojs6.databinding.ActivityManageKeyStoreBinding import java.io.File import java.io.IOException @@ -82,8 +83,11 @@ class ManageKeyStoreActivity : BaseActivity() { keyStoreViewModel = ViewModelProvider(this, KeyStoreViewModel.Factory(this))[KeyStoreViewModel::class.java] - binding.fab.setOnClickListener { - NewKeyStoreDialog(newKeyStoreDialogCallback).show(supportFragmentManager, null) + binding.fab.apply { + setOnClickListener { + NewKeyStoreDialog(newKeyStoreDialogCallback).show(supportFragmentManager, null) + } + ViewUtils.excludeFloatingActionButtonFromNavigationBar(this) } keyStoreAdapter = KeyStoreAdaptor(keyStoreAdapterCallback) @@ -91,6 +95,7 @@ class ManageKeyStoreActivity : BaseActivity() { adapter = keyStoreAdapter layoutManager = LinearLayoutManager(this@ManageKeyStoreActivity) itemAnimator = DefaultItemAnimator() + ViewUtils.excludePaddingClippableViewFromNavigationBar(this) } binding.swipeRefreshLayout.setOnRefreshListener { loadKeyStores() @@ -113,6 +118,7 @@ class ManageKeyStoreActivity : BaseActivity() { override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu_manage_key_store, menu) + ViewUtils.setToolbarMenuIconsColorByThemeColorLuminance(this) return true } @@ -126,8 +132,6 @@ class ManageKeyStoreActivity : BaseActivity() { deleteAllKeyStores() }.show() } - - else -> {} } return super.onOptionsItemSelected(item) } @@ -264,4 +268,5 @@ class ManageKeyStoreActivity : BaseActivity() { private fun showToast(message: String) { Toast.makeText(this, message, Toast.LENGTH_SHORT).show() } + } 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 f28285b7..abc6b2ed 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 @@ -6,15 +6,14 @@ import android.content.Intent import android.os.Bundle import android.view.Menu import android.view.MenuItem -import android.view.View 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.showToast import org.autojs.autojs6.R import org.autojs.autojs6.databinding.ActivityLogBinding -import org.autojs.autojs6.databinding.ConsoleViewBinding class LogActivity : BaseActivity() { @@ -24,21 +23,20 @@ class LogActivity : BaseActivity() { super.onCreate(savedInstanceState) val activityLogBinding = ActivityLogBinding.inflate(layoutInflater) - setContentView(activityLogBinding.root) + setContentView(activityLogBinding.root) setToolbarAsBack(R.string.text_log) - val mConsoleView = activityLogBinding.console + activityLogBinding.console.apply { + setConsole(instance.globalConsole.also { mConsoleImpl = it }) + setLogActivity(this@LogActivity) + setPinchToZoomEnabled(true) + } - mConsoleImpl = instance.globalConsole - mConsoleView.setConsole(mConsoleImpl) - mConsoleView.setLogActivity(this) - mConsoleView.setPinchToZoomEnabled(true) - - val consoleViewBinding = ConsoleViewBinding.inflate(layoutInflater) - consoleViewBinding.inputContainer.visibility = View.GONE - - activityLogBinding.fab.setOnClickListener { mConsoleImpl.clear() } + activityLogBinding.fab.apply { + setOnClickListener { mConsoleImpl.clear() } + ViewUtils.excludeFloatingActionButtonFromNavigationBar(this) + } } override fun onCreateOptionsMenu(menu: Menu): Boolean { diff --git a/app/src/main/java/org/autojs/autojs/ui/main/FloatingActionMenu.java b/app/src/main/java/org/autojs/autojs/ui/main/FloatingActionMenu.java index e3781ef2..fe552001 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/FloatingActionMenu.java +++ b/app/src/main/java/org/autojs/autojs/ui/main/FloatingActionMenu.java @@ -161,10 +161,10 @@ public class FloatingActionMenu extends FrameLayout implements View.OnClickListe if (mOnFloatingActionButtonClickListener != null) { mOnFloatingActionButtonClickListener.onClick((FloatingActionButton) v, (int) v.getTag()); } - } public void setOnFloatingActionButtonClickListener(OnFloatingActionButtonClickListener onFloatingActionButtonClickListener) { mOnFloatingActionButtonClickListener = onFloatingActionButtonClickListener; } + } 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 0476fd22..ae061aaf 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 @@ -19,12 +19,10 @@ import android.view.MenuItem import android.view.View import androidx.activity.result.contract.ActivityResultContracts.RequestMultiplePermissions import androidx.appcompat.app.ActionBarDrawerToggle -import androidx.core.view.forEach import androidx.drawerlayout.widget.DrawerLayout import androidx.fragment.app.Fragment import androidx.viewpager.widget.ViewPager import androidx.viewpager.widget.ViewPager.SimpleOnPageChangeListener -import com.google.android.material.floatingactionbutton.FloatingActionButton import com.google.android.material.tabs.TabLayout import com.huaban.analysis.jieba.CharsDictionaryDatabase import com.huaban.analysis.jieba.PhrasesDictionaryDatabase @@ -49,6 +47,7 @@ import org.autojs.autojs.runtime.api.WrappedShizuku import org.autojs.autojs.service.ForegroundService import org.autojs.autojs.theme.ThemeColorManager import org.autojs.autojs.theme.ThemeColorManager.addViewBackground +import org.autojs.autojs.theme.widget.ThemeColorFloatingActionButton import org.autojs.autojs.theme.widget.ThemeColorToolbar import org.autojs.autojs.ui.BaseActivity import org.autojs.autojs.ui.doc.DocumentationFragment @@ -82,7 +81,7 @@ class MainActivity : BaseActivity(), DelegateHost, HostActivity { private var binding: ActivityMainBinding? = null private lateinit var mViewPager: ViewPager - private lateinit var mFab: FloatingActionButton + private lateinit var mFab: ThemeColorFloatingActionButton private lateinit var mTab: TabLayout private lateinit var mToolbar: ThemeColorToolbar private lateinit var mPagerAdapter: StoredFragmentPagerAdapter @@ -104,18 +103,23 @@ class MainActivity : BaseActivity(), DelegateHost, HostActivity { return pageTitle != null && getString(R.string.text_documentation).contentEquals(pageTitle) } + val filesItemIndex: Int + get() = findPageIndexByTitle(R.string.text_file) + val docsItemIndex: Int - get() { - var i = 0 - while (i < mPagerAdapter.count) { - val pageTitle = mPagerAdapter.getPageTitle(i) - if (pageTitle != null && getString(R.string.text_documentation).contentEquals(pageTitle)) { - return i - } - i += 1 + get() = findPageIndexByTitle(R.string.text_documentation) + + private fun findPageIndexByTitle(titleRes: Int): Int { + var i = 0 + while (i < mPagerAdapter.count) { + val pageTitle = mPagerAdapter.getPageTitle(i) + if (pageTitle != null && getString(titleRes).contentEquals(pageTitle)) { + return i } - return -1 + i += 1 } + return -1 + } val requestMultiplePermissionsLauncher = registerForActivityResult(RequestMultiplePermissions()) { it.forEach { (key: String, isGranted: Boolean) -> @@ -134,7 +138,7 @@ class MainActivity : BaseActivity(), DelegateHost, HostActivity { binding = it setContentView(it.root) mViewPager = it.viewpager - mFab = it.fab + mFab = it.fab.apply { ViewUtils.excludeFloatingActionButtonFromNavigationBar(this) } mTab = it.tab mToolbar = it.toolbar addViewBackground(it.appBar) @@ -270,13 +274,7 @@ class MainActivity : BaseActivity(), DelegateHost, HostActivity { } private fun setUpToolbarColors() { - val aimColor = when { - ThemeColorManager.isThemeColorLuminanceLight() -> getColor(R.color.day) - else -> getColor(R.color.night) - } - mToolbar.menu.forEach { menuItem -> - menuItem.icon?.colorFilter = PorterDuffColorFilter(aimColor, PorterDuff.Mode.SRC_IN) - } + ViewUtils.setToolbarMenuIconsColorByThemeColorLuminance(this, mToolbar) mSearchViewItem?.initThemeColors() } diff --git a/app/src/main/java/org/autojs/autojs/ui/main/ViewPagerFragment.java b/app/src/main/java/org/autojs/autojs/ui/main/ViewPagerFragment.java index a6e30699..0614c2f4 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/ViewPagerFragment.java +++ b/app/src/main/java/org/autojs/autojs/ui/main/ViewPagerFragment.java @@ -30,6 +30,10 @@ public abstract class ViewPagerFragment extends Fragment implements BackPressedH mFab = fab; } + public FloatingActionButton getFab() { + return mFab; + } + protected abstract void onFabClick(FloatingActionButton fab); @CallSuper 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 4121c5ea..a087641c 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 @@ -59,6 +59,7 @@ abstract class BaseDisplayContentActivity : BaseActivity() { internalTextView = binding.textView internalFabView = binding.fab.apply { setOnClickListener { view -> showPopupMenu(view, internalTextView) } + ViewUtils.excludeFloatingActionButtonFromNavigationBar(this) } val scaleGestureDetector = ScaleGestureDetector(this, ScaleListener(internalTextView)) @@ -107,6 +108,7 @@ abstract class BaseDisplayContentActivity : BaseActivity() { else -> super.onTouchEvent(event) } } + ViewUtils.excludePaddingClippableViewFromNavigationBar(it) } // 使用协程加载内容 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 890db56c..03dbb8d2 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 @@ -1,12 +1,19 @@ package org.autojs.autojs.ui.main.scripts +import android.animation.Animator +import android.animation.AnimatorListenerAdapter import android.app.Activity import android.content.Intent import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.coordinatorlayout.widget.CoordinatorLayout +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat +import androidx.core.view.marginBottom import com.google.android.material.floatingactionbutton.FloatingActionButton +import com.google.android.material.tabs.TabLayout import io.reactivex.android.schedulers.AndroidSchedulers import org.autojs.autojs.app.GlobalAppContext import org.autojs.autojs.model.explorer.ExplorerItem @@ -16,11 +23,14 @@ import org.autojs.autojs.ui.common.ScriptOperations import org.autojs.autojs.ui.explorer.ExplorerView import org.autojs.autojs.ui.main.FloatingActionMenu import org.autojs.autojs.ui.main.FloatingActionMenu.OnFloatingActionButtonClickListener +import org.autojs.autojs.ui.main.MainActivity import org.autojs.autojs.ui.main.QueryEvent import org.autojs.autojs.ui.main.ViewPagerFragment import org.autojs.autojs.ui.main.ViewStatesManageable import org.autojs.autojs.ui.project.ProjectConfigActivity +import org.autojs.autojs.ui.widget.ScrollAwareFABBehavior import org.autojs.autojs.util.IntentUtils +import org.autojs.autojs.util.ViewUtils import org.autojs.autojs6.R import org.autojs.autojs6.databinding.FragmentExplorerBinding import org.greenrobot.eventbus.EventBus @@ -33,10 +43,12 @@ import org.greenrobot.eventbus.Subscribe */ open class ExplorerFragment : ViewPagerFragment(0), OnFloatingActionButtonClickListener, ViewStatesManageable { + private var mBottomInset: Int = 0 private var binding: FragmentExplorerBinding? = null private var mExplorerView: ExplorerView? = null private var mFloatingActionMenu: FloatingActionMenu? = null + private var mIsCurrentPageFiles = false override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -49,8 +61,12 @@ open class ExplorerFragment : ViewPagerFragment(0), OnFloatingActionButtonClickL override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - mExplorerView = binding!!.itemList.apply { - setOnItemClickListener(object : ExplorerView.OnItemClickListener { + ViewCompat.setOnApplyWindowInsetsListener(view) { _, insets -> + mBottomInset = insets.getInsets(WindowInsetsCompat.Type.systemBars()).bottom + insets + } + mExplorerView = binding!!.itemList.also { explorerView -> + explorerView.setOnItemClickListener(object : ExplorerView.OnItemClickListener { override fun onItemClick(view: View?, item: ExplorerItem) { when { item.isTextEditable -> Scripts.edit(requireActivity(), item.toScriptFile()) @@ -60,29 +76,63 @@ open class ExplorerFragment : ViewPagerFragment(0), OnFloatingActionButtonClickL } } }) + explorerView.explorerItemListView?.let { ViewUtils.excludePaddingClippableViewFromNavigationBar(it) } + } + (activity as? MainActivity)?.apply { + val tabLayout: TabLayout = findViewById(R.id.tab) + val docsTab = tabLayout.getTabAt(filesItemIndex) + docsTab?.view?.let { setTabViewClickListeners(it) } } restoreViewStates() } + private fun setTabViewClickListeners(tabView: TabLayout.TabView) { + tabView.setOnLongClickListener { if (mIsCurrentPageFiles) true.also { toggleFabVisibility() } else false } + } + + private fun toggleFabVisibility() { + val behavior = (fab.layoutParams as? CoordinatorLayout.LayoutParams)?.behavior as? ScrollAwareFABBehavior + + when { + behavior == null || fab.translationY == 0f -> { + if (fab.isShown) fab.hide() else fab.show() + } + else -> fab.animate() + .translationY(0f) + .setDuration(ScrollAwareFABBehavior.DURATION) + .setListener(object : AnimatorListenerAdapter() { + override fun onAnimationEnd(animation: Animator) { + behavior.setHidden(false) + } + }) + .start() + } + } + private fun viewFile(item: ExplorerItem) = IntentUtils.viewFile(GlobalAppContext.get(), item.path) override fun onFabClick(fab: FloatingActionButton) { - mFloatingActionMenu ?: let { - mFloatingActionMenu = requireActivity().findViewById(R.id.floating_action_menu).also { menu -> - menu.state - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(object : SimpleObserver() { - override fun onNext(expanding: Boolean) { - fab.animate() - .rotation((if (expanding) 45 else 0).toFloat()) - .setDuration(300) - .start() - } - }) - menu.setOnFloatingActionButtonClickListener(this) + initFloatingActionMenuIfNeeded(fab).run { if (isExpanded) collapse() else expand() } + } + + private fun initFloatingActionMenuIfNeeded(fab: FloatingActionButton): FloatingActionMenu { + return mFloatingActionMenu ?: requireActivity().findViewById(R.id.floating_action_menu).also { menu -> + menu.state + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(object : SimpleObserver() { + override fun onNext(expanding: Boolean) { + fab.animate() + .rotation((if (expanding) 45 else 0).toFloat()) + .setDuration(300) + .start() + } + }) + menu.setOnFloatingActionButtonClickListener(this) + menu.layoutParams.runCatching { + javaClass.getField("bottomMargin").setInt(this, fab.marginBottom) } + mFloatingActionMenu = menu } - mFloatingActionMenu!!.let { if (it.isExpanded) it.collapse() else it.expand() } } override fun onBackPressed(activity: Activity): Boolean { @@ -101,9 +151,15 @@ open class ExplorerFragment : ViewPagerFragment(0), OnFloatingActionButtonClickL return false } + override fun onPageShow() { + super.onPageShow() + mIsCurrentPageFiles = true + } + override fun onPageHide() { super.onPageHide() mFloatingActionMenu?.let { if (it.isExpanded) it.collapse() } + mIsCurrentPageFiles = false } @Subscribe 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 380718e7..6e20f9a7 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 @@ -11,6 +11,7 @@ import org.autojs.autojs.AutoJs 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.autojs6.databinding.FragmentTaskManagerBinding /** @@ -48,6 +49,7 @@ open class TaskManagerFragment : ViewPagerFragment(45), ViewStatesManageable { recyclerView.postDelayed({ refreshLayout.isRefreshing = false }, 800) } } + ViewUtils.excludePaddingClippableViewFromNavigationBar(recyclerView) } restoreViewStates() } diff --git a/app/src/main/java/org/autojs/autojs/ui/project/BuildActivity.java b/app/src/main/java/org/autojs/autojs/ui/project/BuildActivity.java index f61a54b4..95ec4d53 100644 --- a/app/src/main/java/org/autojs/autojs/ui/project/BuildActivity.java +++ b/app/src/main/java/org/autojs/autojs/ui/project/BuildActivity.java @@ -282,6 +282,10 @@ public class BuildActivity extends BaseActivity implements ApkBuilder.ProgressCa mFlexboxPermissionsView = binding.flexboxPermissions; binding.fab.setOnClickListener(v -> buildApk()); + ViewUtils.excludeFloatingActionButtonFromNavigationBar(binding.fab); + + ViewUtils.excludePaddingClippableViewFromNavigationBar(binding.scrollView); + binding.selectSource.setOnClickListener(v -> selectSourceFilePath()); binding.selectOutput.setOnClickListener(v -> selectOutputDirPath()); binding.textAbis.setOnClickListener(v -> toggleAllFlexboxChildren(mFlexboxAbisView)); 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 e327fc68..ceca2934 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 @@ -28,6 +28,7 @@ import org.autojs.autojs.project.ProjectConfig 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.showToast import org.autojs.autojs6.R import org.autojs.autojs6.databinding.ActivityProjectConfigBinding @@ -85,7 +86,14 @@ class ProjectConfigActivity : BaseActivity() { setOnClickListener { selectIcon() } } - binding.fab.setOnClickListener { commit() } + binding.fab.apply { + setOnClickListener { commit() } + ViewUtils.excludeFloatingActionButtonFromNavigationBar(this) + } + + binding.scrollView.apply { + ViewUtils.excludePaddingClippableViewFromNavigationBar(this) + } mNewProject = intent.getBooleanExtra(EXTRA_NEW_PROJECT, false) diff --git a/app/src/main/java/org/autojs/autojs/ui/settings/DeveloperOptionsActivity.kt b/app/src/main/java/org/autojs/autojs/ui/settings/DeveloperOptionsActivity.kt index 0e5d5d49..feb5cb13 100644 --- a/app/src/main/java/org/autojs/autojs/ui/settings/DeveloperOptionsActivity.kt +++ b/app/src/main/java/org/autojs/autojs/ui/settings/DeveloperOptionsActivity.kt @@ -1,32 +1,38 @@ -package org.autojs.autojs.ui.settings; +package org.autojs.autojs.ui.settings -import android.os.Bundle; - -import androidx.annotation.Nullable; - -import org.autojs.autojs.ui.BaseActivity; -import org.autojs.autojs.util.ViewUtils; -import org.autojs.autojs6.R; -import org.autojs.autojs6.databinding.ActivityDeveloperOptionsBinding; +import android.os.Bundle +import org.autojs.autojs.theme.ThemeColorManager +import org.autojs.autojs.ui.BaseActivity +import org.autojs.autojs.util.ViewUtils.setToolbarAsBack +import org.autojs.autojs6.R +import org.autojs.autojs6.databinding.ActivityDeveloperOptionsBinding /** * Created by SuperMonster003 on Jun 2, 2022. */ -public class DeveloperOptionsActivity extends BaseActivity { +class DeveloperOptionsActivity : BaseActivity() { - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + private lateinit var binding: ActivityDeveloperOptionsBinding - ActivityDeveloperOptionsBinding binding = ActivityDeveloperOptionsBinding.inflate(getLayoutInflater()); - setContentView(binding.getRoot()); + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) - ViewUtils.setToolbarAsBack(this, R.string.text_developer_options); + binding = ActivityDeveloperOptionsBinding.inflate(layoutInflater).also { binding -> + setContentView(binding.root) + binding.toolbar.setNavigationOnClickListener { finish() } + } - getSupportFragmentManager().beginTransaction() - .replace(R.id.fragment_developer_options, new DeveloperOptionsFragment()) - .disallowAddToBackStack() - .commit(); + setToolbarAsBack(this, R.string.text_developer_options) + + supportFragmentManager.beginTransaction() + .replace(R.id.fragment_developer_options, DeveloperOptionsFragment()) + .disallowAddToBackStack() + .commit() + } + + override fun onStart() { + super.onStart() + binding.toolbar.navigationIcon?.setTint(ThemeColorManager.getDayOrNightColorByLuminance(this)) } } 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 2f81acee..0872f303 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 @@ -1,7 +1,9 @@ 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.autojs6.R class DeveloperOptionsFragment : PreferenceFragmentCompat() { @@ -10,4 +12,9 @@ class DeveloperOptionsFragment : PreferenceFragmentCompat() { setPreferencesFromResource(R.xml.fragment_developer_options, rootKey) } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + ViewUtils.excludePaddingClippableViewFromNavigationBar(listView) + } + } \ No newline at end of file diff --git a/app/src/main/java/org/autojs/autojs/ui/settings/PreferencesActivity.kt b/app/src/main/java/org/autojs/autojs/ui/settings/PreferencesActivity.kt index dea49831..de7dc92e 100644 --- a/app/src/main/java/org/autojs/autojs/ui/settings/PreferencesActivity.kt +++ b/app/src/main/java/org/autojs/autojs/ui/settings/PreferencesActivity.kt @@ -3,7 +3,6 @@ package org.autojs.autojs.ui.settings import android.content.Context import android.content.Intent import android.os.Bundle -import androidx.core.content.ContextCompat import org.autojs.autojs.app.GlobalAppContext import org.autojs.autojs.theme.ThemeColorManager import org.autojs.autojs.ui.BaseActivity @@ -16,7 +15,7 @@ import org.autojs.autojs6.databinding.ActivityPreferencesBinding */ open class PreferencesActivity : BaseActivity() { - private var binding: ActivityPreferencesBinding? = null + private lateinit var binding: ActivityPreferencesBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -38,18 +37,7 @@ open class PreferencesActivity : BaseActivity() { override fun onStart() { super.onStart() - binding!!.toolbar.navigationIcon?.let { - val aimColor = when { - ThemeColorManager.isThemeColorLuminanceLight() -> ContextCompat.getColor(this, R.color.day) - else -> ContextCompat.getColor(this, R.color.night) - } - it.setTint(aimColor) - } - } - - override fun onDestroy() { - super.onDestroy() - binding = null + binding.toolbar.navigationIcon?.setTint(ThemeColorManager.getDayOrNightColorByLuminance(this)) } companion object { 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 59f286a8..b0821a29 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,6 +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.autojs6.R class PreferencesFragment : PreferenceFragmentCompat() { @@ -15,6 +16,7 @@ class PreferencesFragment : PreferenceFragmentCompat() { super.onViewCreated(view, savedInstanceState) listView.isHorizontalScrollBarEnabled = false listView.isVerticalScrollBarEnabled = false + ViewUtils.excludePaddingClippableViewFromNavigationBar(listView) } } \ No newline at end of file diff --git a/app/src/main/java/org/autojs/autojs/ui/shortcut/AppsIconSelectActivity.java b/app/src/main/java/org/autojs/autojs/ui/shortcut/AppsIconSelectActivity.java index 7fd4da17..e61af18f 100644 --- a/app/src/main/java/org/autojs/autojs/ui/shortcut/AppsIconSelectActivity.java +++ b/app/src/main/java/org/autojs/autojs/ui/shortcut/AppsIconSelectActivity.java @@ -24,6 +24,7 @@ import androidx.recyclerview.widget.RecyclerView; import org.autojs.autojs.groundwork.WrapContentGridLayoutManger; import org.autojs.autojs.runtime.api.Mime; import org.autojs.autojs.ui.BaseActivity; +import org.autojs.autojs.util.ViewUtils; import org.autojs.autojs6.R; import org.autojs.autojs6.databinding.ActivityAppsIconSelectBinding; @@ -39,7 +40,7 @@ import io.reactivex.schedulers.Schedulers; */ public class AppsIconSelectActivity extends BaseActivity { - private RecyclerView mApps; + private RecyclerView mAppsRecyclerView; public static final String EXTRA_PACKAGE_NAME = "extra_package_name"; private PackageManager mPackageManager; @@ -58,12 +59,14 @@ public class AppsIconSelectActivity extends BaseActivity { setToolbarAsBack(R.string.text_select_icon); - mApps = binding.apps; - mApps.setAdapter(new AppsAdapter()); + mAppsRecyclerView = binding.apps; + mAppsRecyclerView.setAdapter(new AppsAdapter()); + + ViewUtils.excludePaddingClippableViewFromNavigationBar(mAppsRecyclerView); WrapContentGridLayoutManger manager = new WrapContentGridLayoutManger(this, 5); manager.setDebugInfo("IconSelectView"); - mApps.setLayoutManager(manager); + mAppsRecyclerView.setLayoutManager(manager); loadApps(); } @@ -80,7 +83,7 @@ public class AppsIconSelectActivity extends BaseActivity { .observeOn(AndroidSchedulers.mainThread()) .subscribe(icon -> { mAppList.add(icon); - mApps.getAdapter().notifyItemInserted(mAppList.size() - 1); + mAppsRecyclerView.getAdapter().notifyItemInserted(mAppList.size() - 1); }); } diff --git a/app/src/main/java/org/autojs/autojs/ui/shortcut/ShortcutCreateActivity.java b/app/src/main/java/org/autojs/autojs/ui/shortcut/ShortcutCreateActivity.java index 80e53089..d59a58b2 100644 --- a/app/src/main/java/org/autojs/autojs/ui/shortcut/ShortcutCreateActivity.java +++ b/app/src/main/java/org/autojs/autojs/ui/shortcut/ShortcutCreateActivity.java @@ -108,6 +108,8 @@ public class ShortcutCreateActivity extends AppCompatActivity { // ! can only accept String type data returned by getText(). // ! If CharSequence type data is directly passed in, the shortcut will fail to create properly. // ! + // ! Refer to: http://issues.autojs6.com/221 + // ! // ! zh-CN: // ! // ! 此处需要转换为 String 类型, 而不能保留 getText() 方法得到的 CharSequence 类型. @@ -115,6 +117,8 @@ public class ShortcutCreateActivity extends AppCompatActivity { // ! ShortcutInfoCompat.Builder#setShortLabel 及 setLongLabel 只能接受 getText() 返回的 String 类型数据, // ! 如果直接传入 CharSequence 类型数据, 快捷方式将无法正常创建. // ! + // ! 参阅: http://issues.autojs6.com/221 + // ! // # CharSequence name = mName.getText(); String name = mName.getText().toString(); diff --git a/app/src/main/java/org/autojs/autojs/ui/splash/SplashActivity.kt b/app/src/main/java/org/autojs/autojs/ui/splash/SplashActivity.kt index 0230e617..d09a1270 100644 --- a/app/src/main/java/org/autojs/autojs/ui/splash/SplashActivity.kt +++ b/app/src/main/java/org/autojs/autojs/ui/splash/SplashActivity.kt @@ -4,10 +4,11 @@ import android.annotation.SuppressLint import android.os.Bundle import android.os.Handler import android.os.Looper +import android.widget.LinearLayout import org.autojs.autojs.ui.BaseActivity import org.autojs.autojs.ui.floating.FloatyWindowManger import org.autojs.autojs.ui.main.MainActivity -import org.autojs.autojs6.R +import org.autojs.autojs6.databinding.ActivitySplashBinding /** * Created by Stardust on Jul 7, 2017. @@ -19,6 +20,8 @@ class SplashActivity : BaseActivity() { override val handleStatusBarThemeColorAutomatically = false + private var binding: ActivitySplashBinding? = null + private var mAlreadyEnterNextActivity = false private var mPaused = false @@ -26,7 +29,9 @@ class SplashActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_splash) + + val binding = ActivitySplashBinding.inflate(layoutInflater).also { binding = it } + setContentView(binding.root) @Suppress("DEPRECATION") mHandler = Looper.myLooper()?.let { Handler(it) } ?: Handler() @@ -48,6 +53,11 @@ class SplashActivity : BaseActivity() { } } + override fun onDestroy() { + super.onDestroy() + binding = null + } + private fun enterNextActivity() { if (!mAlreadyEnterNextActivity && !mPaused) { mAlreadyEnterNextActivity = true 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 5fe05275..5479b6b5 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 @@ -43,6 +43,7 @@ import org.autojs.autojs.timing.TimedTaskManager.removeTask 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.showToast import org.autojs.autojs6.R import org.autojs.autojs6.databinding.ActivityTimedTaskSettingBinding @@ -138,6 +139,8 @@ class TimedTaskSettingActivity : BaseActivity() { mWeeklyTaskTimePicker.setIs24HourView(true) findDayOfWeekCheckBoxes(mWeeklyTaskContainer) setUpTaskSettings(this) + + ViewUtils.excludePaddingClippableViewFromNavigationBar(binding.scrollView) } private fun findDayOfWeekCheckBoxes(parent: ViewGroup) { diff --git a/app/src/main/java/org/autojs/autojs/ui/widget/FirstCharView.kt b/app/src/main/java/org/autojs/autojs/ui/widget/FirstCharView.kt index 1986e584..350daa79 100644 --- a/app/src/main/java/org/autojs/autojs/ui/widget/FirstCharView.kt +++ b/app/src/main/java/org/autojs/autojs/ui/widget/FirstCharView.kt @@ -72,12 +72,7 @@ class FirstCharView : TextView { fun setIconTextColorRes(@ColorRes colorRes: Int) = also { setTextColor(convertColorResToInt(colorRes)) } - fun setIconTextByThemeColorLuminance() = also { - when { - ThemeColorManager.isThemeColorLuminanceLight() -> setIconTextColorRes(R.color.day) - else -> setIconTextColorRes(R.color.night) - } - } + fun setIconTextColorByThemeColorLuminance() = also { setIconTextColorRes(ThemeColorManager.getDayOrNightColorResByLuminance()) } fun setIconTextThemeColor() = setIconTextColor(ThemeColorManagerCompat.getColorPrimary()) diff --git a/app/src/main/java/org/autojs/autojs/ui/widget/ScrollAwareFABBehavior.java b/app/src/main/java/org/autojs/autojs/ui/widget/ScrollAwareFABBehavior.java index e58dc80d..bda4b831 100644 --- a/app/src/main/java/org/autojs/autojs/ui/widget/ScrollAwareFABBehavior.java +++ b/app/src/main/java/org/autojs/autojs/ui/widget/ScrollAwareFABBehavior.java @@ -18,10 +18,11 @@ import android.view.View; */ public class ScrollAwareFABBehavior extends FloatingActionButton.Behavior { - private static final long DURATION = 200; private static final TimeInterpolator INTERPOLATOR = new FastOutSlowInInterpolator(); private boolean mHidden = false; + public static final long DURATION = 200; + public ScrollAwareFABBehavior(Context context, AttributeSet attrs) { super(context, attrs); } @@ -59,7 +60,7 @@ public class ScrollAwareFABBehavior extends FloatingActionButton.Behavior { .setListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { - mHidden = false; + setHidden(false); } }) .start(); @@ -80,10 +81,14 @@ public class ScrollAwareFABBehavior extends FloatingActionButton.Behavior { .setListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { - mHidden = true; + setHidden(true); } }) .start(); } + public void setHidden(boolean b) { + mHidden = b; + } + } diff --git a/app/src/main/java/org/autojs/autojs/util/RhinoUtils.kt b/app/src/main/java/org/autojs/autojs/util/RhinoUtils.kt index 201877db..0dfe2064 100644 --- a/app/src/main/java/org/autojs/autojs/util/RhinoUtils.kt +++ b/app/src/main/java/org/autojs/autojs/util/RhinoUtils.kt @@ -30,6 +30,7 @@ import org.mozilla.javascript.NativeArray import org.mozilla.javascript.NativeDate import org.mozilla.javascript.NativeJSON import org.mozilla.javascript.NativeObject +import org.mozilla.javascript.RegExpLoader import org.mozilla.javascript.ScriptRuntime.emptyArgs import org.mozilla.javascript.ScriptRuntime.setBuiltinProtoAndParent import org.mozilla.javascript.ScriptRuntime.toObject 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 7e76b11b..d6fc7062 100644 --- a/app/src/main/java/org/autojs/autojs/util/ViewUtils.kt +++ b/app/src/main/java/org/autojs/autojs/util/ViewUtils.kt @@ -29,13 +29,18 @@ import androidx.annotation.IdRes import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatDelegate import androidx.appcompat.widget.Toolbar +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsControllerCompat +import androidx.core.view.forEach +import com.google.android.material.floatingactionbutton.FloatingActionButton import com.google.android.material.snackbar.Snackbar import org.autojs.autojs.app.GlobalAppContext import org.autojs.autojs.core.pref.Pref import org.autojs.autojs.theme.ThemeColorManager import org.autojs.autojs.util.StringUtils.key import org.autojs.autojs6.R +import kotlin.math.roundToInt /** * Created by Stardust on Jan 24, 2017. @@ -156,6 +161,11 @@ object ViewUtils { return activity.window.decorView.systemUiVisibility and flags == flags } + @JvmStatic + fun addWindowFlags(activity: Activity, flags: Int) { + activity.window.addFlags(flags) + } + @JvmStatic fun isStatusBarIconLight(activity: Activity): Boolean { return !isStatusBarIconDark(activity) @@ -180,7 +190,7 @@ object ViewUtils { val window = activity.window val decorView = window.decorView - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) { decorView.setOnApplyWindowInsetsListener { view, insets -> val statusBarInsets = insets.getInsets(WindowInsets.Type.statusBars()) val contentView: ViewGroup? = activity.findViewById(android.R.id.content) @@ -204,7 +214,7 @@ object ViewUtils { val window = activity.window val decorView = window.decorView - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) { decorView.setOnApplyWindowInsetsListener { view, insets -> val navBarInsets = insets.getInsets(WindowInsets.Type.navigationBars()) val contentView: ViewGroup? = activity.findViewById(android.R.id.content) @@ -224,6 +234,30 @@ object ViewUtils { } } + @JvmStatic + @JvmOverloads + fun excludeFloatingActionButtonFromNavigationBar(fab: FloatingActionButton, extraMarginBottomDp: Float = 16F) { + ViewCompat.setOnApplyWindowInsetsListener(fab) { view, insets -> + val bottomInset = insets.getInsets(WindowInsetsCompat.Type.systemBars()).bottom + view.layoutParams.runCatching { + javaClass.getField("bottomMargin") + .setInt(this, DisplayUtils.dpToPx(extraMarginBottomDp).roundToInt() + bottomInset) + } + insets + } + } + + @JvmStatic + @JvmOverloads + fun excludePaddingClippableViewFromNavigationBar(view: View, extraPaddingBottomDp: Float = 0F, clipToPadding: Boolean = false) { + ViewCompat.setOnApplyWindowInsetsListener(view) { _, insets -> + val bottomInset = insets.getInsets(WindowInsetsCompat.Type.systemBars()).bottom + view.setPadding(0, 0, 0, DisplayUtils.dpToPx(extraPaddingBottomDp).roundToInt() + bottomInset) + runCatching { view.javaClass.getMethod("setClipToPadding", Boolean::class.java).invoke(view, clipToPadding) } + insets + } + } + private fun appendWindowFlags(activity: Activity, flags: Int) { activity.window.addFlags(flags) } @@ -296,13 +330,8 @@ object ViewUtils { toolbar.setNavigationOnClickListener { activity.finish() } actionBar.setDisplayHomeAsUpEnabled(true) } - toolbar.navigationIcon?.let { navigationIcon -> - val navigationIconColor = when { - ThemeColorManager.isThemeColorLuminanceLight() -> R.color.day - else -> R.color.night - }.let { activity.resources.getColor(it, null) } - navigationIcon.colorFilter = PorterDuffColorFilter(navigationIconColor, PorterDuff.Mode.SRC_IN) - } + setToolbarMenuIconsColorByThemeColorLuminance(activity, toolbar) + setToolbarNavigationIconColorByThemeColorLuminance(activity, toolbar) } @JvmStatic @@ -310,6 +339,26 @@ object ViewUtils { setToolbarAsBack(activity, activity.getString(titleRes)) } + @JvmStatic + @JvmOverloads + fun setToolbarMenuIconsColorByThemeColorLuminance(activity: Activity, toolbar: Toolbar? = null) { + val toolbarView = toolbar ?: activity.findViewById(R.id.toolbar) ?: return + val aimColor = ThemeColorManager.getDayOrNightColorByLuminance(activity) + toolbarView.menu.forEach { menuItem -> + menuItem.icon?.colorFilter = PorterDuffColorFilter(aimColor, PorterDuff.Mode.SRC_IN) + } + } + + @JvmStatic + @JvmOverloads + fun setToolbarNavigationIconColorByThemeColorLuminance(activity: Activity, toolbar: Toolbar? = null) { + val toolbarView = toolbar ?: activity.findViewById(R.id.toolbar) ?: return + val aimColor = ThemeColorManager.getDayOrNightColorByLuminance(activity) + toolbarView.navigationIcon?.let { navigationIcon -> + navigationIcon.colorFilter = PorterDuffColorFilter(aimColor, PorterDuff.Mode.SRC_IN) + } + } + @JvmStatic fun showToast(context: Context, stringRes: Int) = showToast(context, stringRes, false) diff --git a/app/src/main/java/org/mozilla/javascript/VMBridge_custom.java b/app/src/main/java/org/mozilla/javascript/VMBridge_custom.java index ed700b85..d920d5ff 100644 --- a/app/src/main/java/org/mozilla/javascript/VMBridge_custom.java +++ b/app/src/main/java/org/mozilla/javascript/VMBridge_custom.java @@ -1,7 +1,6 @@ package org.mozilla.javascript; import android.util.Log; -import org.autojs.autojs.engine.RhinoJavaScriptEngine; import org.autojs.autojs.rhino.AutoJsContext; import org.mozilla.javascript.jdk18.VMBridge_jdk18; diff --git a/app/src/main/res/layout/activity_build.xml b/app/src/main/res/layout/activity_build.xml index b99587f3..7d1c27f4 100644 --- a/app/src/main/res/layout/activity_build.xml +++ b/app/src/main/res/layout/activity_build.xml @@ -27,6 +27,7 @@ android:paddingTop="6dp"> diff --git a/app/src/main/res/layout/activity_log.xml b/app/src/main/res/layout/activity_log.xml index 95e6ba29..4323f5ac 100644 --- a/app/src/main/res/layout/activity_log.xml +++ b/app/src/main/res/layout/activity_log.xml @@ -1,9 +1,8 @@ - + android:layout_height="match_parent"> - + android:paddingEnd="2dp" + app:excludeFromNavigationBar="true" + app:layout_behavior="@string/appbar_scrolling_view_behavior" /> - + - - - - + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 63e8a0b2..16ed63d4 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -44,6 +44,7 @@ android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="match_parent" + android:clipToPadding="false" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> - - - + android:layout_marginTop="6dp" + app:layout_behavior="@string/appbar_scrolling_view_behavior"> - + android:layout_height="wrap_content" /> - + - - + - - - - - + diff --git a/app/src/main/res/layout/activity_project_config.xml b/app/src/main/res/layout/activity_project_config.xml index dd6aa771..468787b6 100644 --- a/app/src/main/res/layout/activity_project_config.xml +++ b/app/src/main/res/layout/activity_project_config.xml @@ -26,6 +26,7 @@ android:paddingTop="6dp"> diff --git a/app/src/main/res/layout/activity_script_widget_settings.xml b/app/src/main/res/layout/activity_script_widget_settings.xml index cae28c01..204f955c 100644 --- a/app/src/main/res/layout/activity_script_widget_settings.xml +++ b/app/src/main/res/layout/activity_script_widget_settings.xml @@ -1,30 +1,31 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="@android:color/transparent" + android:fitsSystemWindows="true" + android:clipToPadding="false" + android:theme="@style/AppTheme.AppBarOverlay"> + android:id="@+id/toolbar" + android:theme="@style/ToolBarStyle" + android:layout_width="match_parent" + android:layout_height="?attr/actionBarSize" + app:popupTheme="@style/AppTheme.PopupOverlay" + app:title="@string/app_name" /> + android:id="@+id/script_list" + android:layout_width="match_parent" + android:layout_height="match_parent" /> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_settings_inrt.xml b/app/src/main/res/layout/activity_settings_inrt.xml index 6c1f8075..396d7ecc 100644 --- a/app/src/main/res/layout/activity_settings_inrt.xml +++ b/app/src/main/res/layout/activity_settings_inrt.xml @@ -17,8 +17,8 @@ android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" - app:titleTextColor="@color/md_black_1000" - app:subtitleTextColor="@color/md_black_1000" + app:titleTextColor="@color/day_full" + app:subtitleTextColor="@color/day_full" android:theme="@style/ToolBarStyleInrt" android:background="@color/md_blue_grey_50" app:contentInsetStartWithNavigation="0dp" diff --git a/app/src/main/res/layout/activity_splash.xml b/app/src/main/res/layout/activity_splash.xml index 82091162..3a0bf56f 100644 --- a/app/src/main/res/layout/activity_splash.xml +++ b/app/src/main/res/layout/activity_splash.xml @@ -1,25 +1,33 @@ + android:gravity="center|bottom"> - + - + - + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_splash_inrt.xml b/app/src/main/res/layout/activity_splash_inrt.xml index 72f9978d..09186018 100644 --- a/app/src/main/res/layout/activity_splash_inrt.xml +++ b/app/src/main/res/layout/activity_splash_inrt.xml @@ -2,31 +2,39 @@ + android:layout_height="match_parent" + android:fitsSystemWindows="true" + android:gravity="center|bottom"> - - - + android:layout_marginBottom="16dp" + android:gravity="center" + android:minHeight="128dp" + android:orientation="vertical"> + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_timed_task_setting.xml b/app/src/main/res/layout/activity_timed_task_setting.xml index 72b70289..21f2854a 100644 --- a/app/src/main/res/layout/activity_timed_task_setting.xml +++ b/app/src/main/res/layout/activity_timed_task_setting.xml @@ -1,251 +1,252 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:theme="@style/AppTheme.AppBarOverlay" + android:fitsSystemWindows="true"> + android:id="@+id/toolbar" + android:layout_width="match_parent" + android:layout_height="?attr/actionBarSize" + android:background="?attr/colorPrimary" + android:theme="@style/ToolBarStyle" + app:popupTheme="@style/AppTheme.PopupOverlay" /> + android:id="@+id/scrollView" + android:layout_width="match_parent" + android:layout_height="match_parent"> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginStart="6dp" + android:layout_marginTop="12dp" + android:layout_marginEnd="6dp" + app:cardCornerRadius="2dp" + app:cardElevation="1dp" + app:cardUseCompatPadding="true"> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical" + android:padding="16dp"> + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginBottom="16dp" + android:text="@string/text_timed_task_timing" + android:textAppearance="@style/TextAppearance.AppCompat.Body2" + android:textColor="?android:textColorSecondary" /> + android:id="@+id/timing_group" + android:layout_width="match_parent" + android:layout_height="wrap_content"> + android:id="@+id/daily_task_radio" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="16dp" + android:text="@string/text_daily_task" + tools:ignore="RtlSymmetry" /> + android:id="@+id/daily_task_relative_layout" + android:layout_width="match_parent" + android:layout_height="wrap_content" + app:ael_expanded="false" + app:ael_interpolator="fastOutSlowIn" + app:ael_orientation="vertical"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + android:layout_weight="1" + android:text="@string/text_day1" + tools:ignore="TooDeepLayout" /> + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="1" + android:text="@string/text_day2" /> + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="1" + android:text="@string/text_day3" /> - - + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="1" + android:text="@string/text_day4" /> + + + android:layout_weight="1" + android:text="@string/text_day5" /> + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="1" + android:text="@string/text_day6" /> - - + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="1" + android:text="@string/text_day7" /> @@ -254,192 +255,192 @@ + android:id="@+id/run_on_broadcast" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="16dp" + android:text="@string/text_broadcast_task" + tools:ignore="RtlSymmetry" /> + android:layout_width="match_parent" + android:layout_height="wrap_content" + app:ael_expanded="false" + app:ael_interpolator="fastOutSlowIn" + app:ael_orientation="vertical"> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginStart="24dp" + android:orientation="vertical"> + + + android:layout_marginTop="16dp" + android:paddingStart="8dp" + android:text="@string/text_run_on_startup" + tools:ignore="RtlSymmetry" /> + android:id="@+id/run_on_boot" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="8dp" + android:text="@string/text_run_on_boot" + tools:ignore="RtlSymmetry" /> + android:id="@+id/run_on_screen_on" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="8dp" + android:text="@string/text_run_on_screen_on" + tools:ignore="RtlSymmetry" /> + android:id="@+id/run_on_screen_off" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="8dp" + android:text="@string/text_run_on_screen_off" + tools:ignore="RtlSymmetry" /> + android:id="@+id/run_on_screen_unlock" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="8dp" + android:text="@string/text_run_on_screen_unlock" + tools:ignore="RtlSymmetry" /> + android:id="@+id/run_on_battery_change" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="8dp" + android:text="@string/text_run_on_battery_change" + tools:ignore="RtlSymmetry" /> + android:id="@+id/run_on_power_connect" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="8dp" + android:text="@string/text_run_on_power_connect" + tools:ignore="RtlSymmetry" /> + android:id="@+id/run_on_power_disconnect" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="8dp" + android:text="@string/text_run_on_power_disconnect" + tools:ignore="RtlSymmetry" /> + android:id="@+id/run_on_conn_change" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="8dp" + android:text="@string/text_run_on_conn_change" + tools:ignore="RtlSymmetry" /> + android:id="@+id/run_on_package_install" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="8dp" + android:text="@string/text_run_on_package_install" + tools:ignore="RtlSymmetry" /> + android:id="@+id/run_on_package_uninstall" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="8dp" + android:text="@string/text_run_on_package_uninstall" + tools:ignore="RtlSymmetry" /> + android:id="@+id/run_on_package_update" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="8dp" + android:text="@string/text_run_on_package_update" + tools:ignore="RtlSymmetry" /> + android:id="@+id/run_on_headset_plug" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="8dp" + android:text="@string/text_run_on_headset_plug" + tools:ignore="RtlSymmetry" /> + android:id="@+id/run_on_config_change" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="8dp" + android:text="@string/text_run_on_config_change" + tools:ignore="RtlSymmetry" /> + android:id="@+id/run_on_time_tick" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="8dp" + android:text="@string/text_run_on_time_tick" + tools:ignore="RtlSymmetry" /> - - + android:id="@+id/run_on_other_broadcast" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:paddingStart="8dp" + android:text="@string/text_run_on_user_defined_broadcast" + tools:ignore="RtlSymmetry" /> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginStart="36dp" + android:layout_marginTop="2dp" + android:hint="@string/text_broadcast_action"> + android:id="@+id/action" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:maxLines="2" + android:text="@string/text_broadcast_action_prefix" /> diff --git a/app/src/main/res/layout/editor_view.xml b/app/src/main/res/layout/editor_view.xml index 9f7a3384..afb1e449 100644 --- a/app/src/main/res/layout/editor_view.xml +++ b/app/src/main/res/layout/editor_view.xml @@ -1,66 +1,67 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:fitsSystemWindows="true" + android:orientation="vertical"> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:fitsSystemWindows="true" + android:theme="@style/AppTheme.AppBarOverlay"> + android:id="@+id/toolbar" + android:layout_width="match_parent" + android:layout_height="?attr/actionBarSize" + android:background="?attr/colorPrimary" + android:theme="@style/ToolBarStyle" + app:contentInsetEndWithActions="2dp" + app:contentInsetStartWithNavigation="0dp" + app:popupTheme="@style/PopupMenuTheme" + tools:title="@string/app_name" + app:titleTextAppearance="@style/TextAppearanceEditorTitle"> + android:id="@+id/toolbar_menu" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:layout_gravity="end" /> + android:id="@+id/drawer_layout" + android:layout_width="match_parent" + android:layout_height="match_parent"> + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + android:id="@+id/editor" + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1" /> + android:id="@+id/input_method_enhance_bar" + android:layout_width="match_parent" + android:layout_height="70dp" + android:background="#77f2f3f7"> + android:id="@+id/symbol_bar" + android:layout_width="match_parent" + android:layout_height="35dp" + android:layout_alignParentBottom="true" /> + android:id="@+id/code_completion_bar" + android:layout_width="match_parent" + android:layout_height="35dp" + android:layout_above="@+id/symbol_bar" + android:layout_alignParentEnd="true" + android:layout_alignParentTop="true" + android:layout_toEndOf="@+id/functions" /> + android:id="@+id/functions_keyboard" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:visibility="gone" /> + android:id="@+id/debug_bar" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:visibility="gone" /> + android:id="@+id/docs" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_gravity="start" /> diff --git a/app/src/main/res/layout/ewebview.xml b/app/src/main/res/layout/ewebview.xml index ad0b2e9c..a1e34d9d 100644 --- a/app/src/main/res/layout/ewebview.xml +++ b/app/src/main/res/layout/ewebview.xml @@ -1,25 +1,25 @@ + + - - + android:id="@+id/web_view" + android:layout_width="match_parent" + android:layout_height="match_parent" /> + android:id="@+id/progress_bar" + style="?android:attr/progressBarStyleHorizontal" + android:layout_width="match_parent" + android:layout_height="2dp" + android:visibility="gone" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_task_manager.xml b/app/src/main/res/layout/fragment_task_manager.xml index ec27b084..d86579e7 100644 --- a/app/src/main/res/layout/fragment_task_manager.xml +++ b/app/src/main/res/layout/fragment_task_manager.xml @@ -1,17 +1,17 @@ + + - - + android:id="@+id/task_list" + android:layout_width="match_parent" + android:layout_height="match_parent" /> diff --git a/app/src/main/res/layout/item_key_store.xml b/app/src/main/res/layout/item_key_store.xml index 788b3d74..e4796561 100644 --- a/app/src/main/res/layout/item_key_store.xml +++ b/app/src/main/res/layout/item_key_store.xml @@ -4,10 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginStart="6dp" - android:layout_marginTop="3dp" - android:layout_marginEnd="6dp" - android:layout_marginBottom="3dp" + android:layout_margin="2dp" android:clickable="true" android:focusable="true" android:foreground="?attr/selectableItemBackground" @@ -18,7 +15,8 @@ + android:paddingHorizontal="16dp" + android:paddingVertical="8dp"> - + tools:text="File name: foo" /> + tools:text="Alias: bar" /> + + + + diff --git a/app/src/main/res/values-night/styles.xml b/app/src/main/res/values-night/styles.xml index c005a4f4..d33e66e8 100644 --- a/app/src/main/res/values-night/styles.xml +++ b/app/src/main/res/values-night/styles.xml @@ -7,6 +7,7 @@ true false @color/window_background + @color/window_background @color/window_background diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index a596cf53..89f93dff 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -12,7 +12,6 @@ - @@ -27,10 +26,12 @@ + + @@ -88,5 +89,7 @@ + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index b2a2bdf8..4debe67b 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -22,6 +22,8 @@ @color/day_night_full @color/day_night_alpha_70 #9DA0A2 + #66000000 + #70000000 #03A9F4 @color/theme_color_default diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 8961b24c..4ddc1634 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -8,6 +8,7 @@ @color/text_color_primary @color/text_color_secondly @color/window_background + @android:color/transparent @color/colorAccent @color/colorPrimary @color/colorPrimaryDark @@ -108,6 +109,7 @@ false true @android:color/transparent + @android:color/transparent