From 1cae3820f9c90f2635dd9a42ce6a0aa48725dcea Mon Sep 17 00:00:00 2001 From: SuperMonster003 Date: Thu, 27 Mar 2025 23:15:41 +0800 Subject: [PATCH] =?UTF-8?q?6.6.2=20-=20Alpha5=20-=20=E4=B8=BB=E9=A2=98?= =?UTF-8?q?=E8=89=B2=E8=AE=BE=E7=BD=AE=E9=A1=B5=E9=9D=A2=E6=96=B0=E5=B8=83?= =?UTF-8?q?=E5=B1=80=E6=94=AF=E6=8C=81=E5=9F=BA=E7=A1=80=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=8F=8A=E6=96=B0=E6=97=A7=E5=B8=83=E5=B1=80=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=85=BC=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 8 +- .../autojs/autojs/core/image/ColorItems.kt | 59 ++-- .../autojs/execution/ScriptExecuteActivity.kt | 5 +- .../org/autojs/autojs/inrt/LogActivity.kt | 2 + .../autojs/runtime/api/augment/ui/UI.kt | 9 +- .../org/autojs/autojs/theme/ThemeColor.kt | 8 +- .../autojs/autojs/theme/ThemeColorHelper.java | 6 +- .../autojs/autojs/theme/ThemeColorManager.kt | 37 +- .../theme/app/ColorLibrariesActivity.kt | 322 ++++++++++++++++++ .../autojs/theme/app/ColorLibraryActivity.kt | 257 ++++++++++++++ .../autojs/theme/app/ColorSelectActivity.kt | 36 +- .../theme/app/ColorSelectBaseActivity.kt | 127 +++++-- .../theme/app/ColorSelectLegacyActivity.kt | 75 ---- .../theme/app/ColorSettingRecyclerView.kt | 89 +++-- .../app/ColorSettingRecyclerViewLegacy.kt | 174 ---------- .../ThemeColorFloatingActionButton.java | 5 +- .../autojs/theme/widget/ThemeColorToolbar.kt | 26 +- .../java/org/autojs/autojs/ui/BaseActivity.kt | 9 +- .../org/autojs/autojs/ui/main/MainActivity.kt | 25 +- .../autojs/ui/main/drawer/DrawerFragment.kt | 8 + .../scripts/BaseDisplayContentActivity.kt | 11 +- .../autojs/autojs/ui/widget/FirstCharView.kt | 1 - .../autojs/ui/widget/SearchViewItem.java | 2 +- .../autojs/ui/widget/ToolbarMenuItem.kt | 4 +- .../java/org/autojs/autojs/util/ColorUtils.kt | 3 +- .../java/org/autojs/autojs/util/ViewUtils.kt | 34 +- .../res/drawable/ic_color_library_custom.png | Bin 0 -> 6806 bytes .../res/drawable/ic_color_library_default.png | Bin 0 -> 6507 bytes .../res/drawable/ic_color_library_preset.png | Bin 0 -> 5873 bytes .../main/res/layout/activity_main_inrt.xml | 12 +- .../res/layout/activity_settings_inrt.xml | 2 +- ...cy.xml => mt_activity_color_libraries.xml} | 8 +- .../res/layout/mt_activity_color_library.xml | 41 +++ .../mt_color_libraries_recycler_view_item.xml | 56 +++ .../mt_color_library_recycler_view_item.xml | 57 ++++ app/src/main/res/layout/preference_custom.xml | 11 +- .../main/res/menu/menu_color_libraries.xml | 36 ++ app/src/main/res/menu/menu_color_library.xml | 18 + app/src/main/res/menu/menu_color_select.xml | 26 +- .../res/menu/menu_color_select_legacy.xml | 12 - app/src/main/res/menu/menu_main.xml | 27 +- .../material_design_colors_string.xml | 44 +-- app/src/main/res/values-ar/strings.xml | 19 +- .../res/values-en/android_colors_string.xml | 12 +- .../main/res/values-en/css_colors_string.xml | 13 +- .../material_design_colors_string.xml | 44 +-- app/src/main/res/values-en/strings.xml | 19 +- .../main/res/values-en/web_colors_string.xml | 8 +- .../material_design_colors_string.xml | 44 +-- app/src/main/res/values-es/strings.xml | 19 +- .../material_design_colors_string.xml | 40 +-- app/src/main/res/values-fr/strings.xml | 19 +- .../material_design_colors_string.xml | 44 +-- app/src/main/res/values-ja/strings.xml | 19 +- .../material_design_colors_string.xml | 44 +-- app/src/main/res/values-ko/strings.xml | 19 +- app/src/main/res/values-night/colors.xml | 6 +- .../material_design_colors_string.xml | 44 +-- app/src/main/res/values-ru/strings.xml | 19 +- .../material_design_colors_string.xml | 44 +-- app/src/main/res/values-zh-rHK/strings.xml | 19 +- .../material_design_colors_string.xml | 44 +-- app/src/main/res/values-zh-rTW/strings.xml | 19 +- .../res/values-zh/android_colors_string.xml | 6 - .../main/res/values-zh/css_colors_string.xml | 9 - .../material_design_colors_string.xml | 44 +-- app/src/main/res/values-zh/strings.xml | 19 +- .../main/res/values-zh/web_colors_string.xml | 8 +- app/src/main/res/values/android_colors.xml | 6 - .../main/res/values/android_colors_string.xml | 12 +- app/src/main/res/values/colors.xml | 32 +- app/src/main/res/values/css_colors.xml | 9 - app/src/main/res/values/css_colors_string.xml | 13 +- .../res/values/material_design_colors.xml | 44 +-- .../values/material_design_colors_string.xml | 44 +-- app/src/main/res/values/strings.xml | 22 +- app/src/main/res/values/styles.xml | 11 +- app/src/main/res/values/web_colors_string.xml | 8 +- .../src/main/res/values-be/strings.xml | 23 -- .../src/main/res/values-de/strings.xml | 23 -- .../res/{values-cs => values-en}/strings.xml | 10 +- .../{values-fr-rFR => values-fr}/strings.xml | 0 .../src/main/res/values-it-rIT/strings.xml | 22 -- .../src/main/res/values-iw/strings.xml | 8 - .../res/{values-sk => values-ko}/strings.xml | 10 +- .../src/main/res/values-nl-rNL/strings.xml | 20 -- .../src/main/res/values-pt/strings.xml | 9 - .../{values-pl => values-zh-rHK}/strings.xml | 10 +- .../{values-tr => values-zh-rTW}/strings.xml | 15 +- version.properties | 6 +- 90 files changed, 1660 insertions(+), 1033 deletions(-) create mode 100644 app/src/main/java/org/autojs/autojs/theme/app/ColorLibrariesActivity.kt create mode 100644 app/src/main/java/org/autojs/autojs/theme/app/ColorLibraryActivity.kt delete mode 100644 app/src/main/java/org/autojs/autojs/theme/app/ColorSelectLegacyActivity.kt delete mode 100644 app/src/main/java/org/autojs/autojs/theme/app/ColorSettingRecyclerViewLegacy.kt create mode 100644 app/src/main/res/drawable/ic_color_library_custom.png create mode 100644 app/src/main/res/drawable/ic_color_library_default.png create mode 100644 app/src/main/res/drawable/ic_color_library_preset.png rename app/src/main/res/layout/{mt_activity_color_select_legacy.xml => mt_activity_color_libraries.xml} (88%) create mode 100644 app/src/main/res/layout/mt_activity_color_library.xml create mode 100644 app/src/main/res/layout/mt_color_libraries_recycler_view_item.xml create mode 100644 app/src/main/res/layout/mt_color_library_recycler_view_item.xml create mode 100644 app/src/main/res/menu/menu_color_libraries.xml create mode 100644 app/src/main/res/menu/menu_color_library.xml delete mode 100644 app/src/main/res/menu/menu_color_select_legacy.xml delete mode 100644 modules/color-picker/src/main/res/values-be/strings.xml delete mode 100644 modules/color-picker/src/main/res/values-de/strings.xml rename modules/color-picker/src/main/res/{values-cs => values-en}/strings.xml (74%) rename modules/color-picker/src/main/res/{values-fr-rFR => values-fr}/strings.xml (100%) delete mode 100644 modules/color-picker/src/main/res/values-it-rIT/strings.xml delete mode 100644 modules/color-picker/src/main/res/values-iw/strings.xml rename modules/color-picker/src/main/res/{values-sk => values-ko}/strings.xml (74%) delete mode 100644 modules/color-picker/src/main/res/values-nl-rNL/strings.xml delete mode 100644 modules/color-picker/src/main/res/values-pt/strings.xml rename modules/color-picker/src/main/res/{values-pl => values-zh-rHK}/strings.xml (74%) rename modules/color-picker/src/main/res/{values-tr => values-zh-rTW}/strings.xml (73%) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 79f85100..be026f14 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -574,11 +574,15 @@ + + - val isLightColor = ColorUtils.isLuminanceDark(backgroundColor) + val isLightColor = ViewUtils.isLuminanceDark(backgroundColor) ViewUtils.setStatusBarBackgroundColor(this, backgroundColor) ViewUtils.setStatusBarAppearanceLight(this, isLightColor) ViewUtils.setNavigationBarBackgroundColor(this, backgroundColor) 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 04101173..1f7c4a8c 100644 --- a/app/src/main/java/org/autojs/autojs/inrt/LogActivity.kt +++ b/app/src/main/java/org/autojs/autojs/inrt/LogActivity.kt @@ -14,6 +14,8 @@ import org.autojs.autojs6.databinding.ActivityMainInrtBinding class LogActivity : BaseActivity() { + override val handleStatusBarThemeColorAutomatically = false + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setupView() diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/augment/ui/UI.kt b/app/src/main/java/org/autojs/autojs/runtime/api/augment/ui/UI.kt index 20d8380e..f9162d8c 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/augment/ui/UI.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/augment/ui/UI.kt @@ -22,6 +22,10 @@ import org.autojs.autojs.extension.AnyExtensions.isJsNullish import org.autojs.autojs.extension.AnyExtensions.jsBrief import org.autojs.autojs.extension.AnyExtensions.jsSanitize import org.autojs.autojs.extension.AnyExtensions.jsUnwrapped +import org.autojs.autojs.extension.FlexibleArray.Companion.component1 +import org.autojs.autojs.extension.FlexibleArray.Companion.component2 +import org.autojs.autojs.extension.FlexibleArray.Companion.component3 +import org.autojs.autojs.extension.FlexibleArray.Companion.component4 import org.autojs.autojs.extension.ScriptableExtensions.defineProp import org.autojs.autojs.extension.ScriptableExtensions.prop import org.autojs.autojs.rhino.ProxyObject.Companion.PROXY_GETTER_KEY @@ -34,7 +38,6 @@ import org.autojs.autojs.runtime.api.augment.colors.Colors import org.autojs.autojs.runtime.api.augment.jsox.Numberx import org.autojs.autojs.runtime.exception.WrappedIllegalArgumentException import org.autojs.autojs.theme.ThemeColor -import org.autojs.autojs.util.ColorUtils import org.autojs.autojs.util.RhinoUtils import org.autojs.autojs.util.RhinoUtils.NOT_CONSTRUCTABLE import org.autojs.autojs.util.RhinoUtils.UNDEFINED @@ -540,7 +543,7 @@ class UI(private val scriptRuntime: ScriptRuntime) : AugmentableProxy(scriptRunt fun statusBarAppearanceLightBy(scriptRuntime: ScriptRuntime, args: Array): Undefined = ensureArgumentsOnlyOne(args) { refColor -> ensureActivity(scriptRuntime) { activity -> runRhinoRuntime(scriptRuntime, newBaseFunction("action", { - Colors.toIntRhino(refColor).also { ViewUtils.setStatusBarAppearanceLight(activity, ColorUtils.isLuminanceDark(it)) } + Colors.toIntRhino(refColor).also { ViewUtils.setStatusBarAppearanceLight(activity, ViewUtils.isLuminanceDark(it)) } }, NOT_CONSTRUCTABLE)) } UNDEFINED @@ -595,7 +598,7 @@ class UI(private val scriptRuntime: ScriptRuntime) : AugmentableProxy(scriptRunt if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { ScriptRuntime.requiresApi(Build.VERSION_CODES.O) } else { - ViewUtils.setNavigationBarAppearanceLight(activity, ColorUtils.isLuminanceDark(it)) + ViewUtils.setNavigationBarAppearanceLight(activity, ViewUtils.isLuminanceDark(it)) } } }, NOT_CONSTRUCTABLE)) diff --git a/app/src/main/java/org/autojs/autojs/theme/ThemeColor.kt b/app/src/main/java/org/autojs/autojs/theme/ThemeColor.kt index 92e91b96..4e3d3111 100644 --- a/app/src/main/java/org/autojs/autojs/theme/ThemeColor.kt +++ b/app/src/main/java/org/autojs/autojs/theme/ThemeColor.kt @@ -9,7 +9,7 @@ import org.autojs.autojs.core.pref.Pref.getInt import org.autojs.autojs.core.pref.Pref.putInt import org.autojs.autojs.extension.ArrayExtensions.toHashCode import org.autojs.autojs.theme.ThemeColorManager.defaultThemeColor -import org.autojs.autojs.util.ColorUtils +import org.autojs.autojs.util.ViewUtils import org.autojs.autojs6.R /** @@ -31,9 +31,11 @@ class ThemeColor(@JvmField var colorPrimary: Int, @JvmField var colorPrimaryDark @ScriptInterface fun getColorPrimaryDark() = colorPrimaryDark - fun isLuminanceLight() = ColorUtils.isLuminanceLight(colorPrimary) + @JvmOverloads + fun isLuminanceLight(backgroundColorMatters: Boolean = true) = ThemeColorManager.isLuminanceLight(backgroundColorMatters) - fun isLuminanceDark() = ColorUtils.isLuminanceDark(colorPrimary) + @JvmOverloads + fun isLuminanceDark(backgroundColorMatters: Boolean = true) = !isLuminanceLight(backgroundColorMatters) fun colorPrimary(colorPrimary: Int) = also { this.colorPrimary = colorPrimary } diff --git a/app/src/main/java/org/autojs/autojs/theme/ThemeColorHelper.java b/app/src/main/java/org/autojs/autojs/theme/ThemeColorHelper.java index c56c926b..def2a5a6 100644 --- a/app/src/main/java/org/autojs/autojs/theme/ThemeColorHelper.java +++ b/app/src/main/java/org/autojs/autojs/theme/ThemeColorHelper.java @@ -14,10 +14,8 @@ import android.view.Window; import android.view.WindowManager; import android.widget.AbsListView; import android.widget.Switch; - import androidx.appcompat.widget.SwitchCompat; import androidx.core.graphics.drawable.DrawableCompat; - import org.autojs.autojs.theme.internal.ScrollingViewEdgeGlowColorHelper; import org.autojs.autojs.util.ColorUtils; import org.autojs.autojs.util.ViewUtils; @@ -90,8 +88,8 @@ public class ThemeColorHelper { } private static void setThumbDrawableTintList(Drawable drawable, int color) { - int unselectedColor = ColorUtils.isLuminanceLight(color) - ? Color.parseColor("#616161") // R.color.md_grey_700 + int unselectedColor = ViewUtils.isLuminanceLight(color) + ? Color.parseColor("#616161") // R.color.md_gray_700 : Color.DKGRAY; int[] thumbColors = new int[]{ color, 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 ab96dd4f..bf52dfb1 100644 --- a/app/src/main/java/org/autojs/autojs/theme/ThemeColorManager.kt +++ b/app/src/main/java/org/autojs/autojs/theme/ThemeColorManager.kt @@ -29,12 +29,6 @@ object ThemeColorManager { ThemeColor.fromPreferences()?.let { currentThemeColor = it } ?: setThemeColor(defaultThemeColor) } - @JvmStatic - fun isThemeColorLuminanceLight() = currentThemeColor.isLuminanceLight() - - @JvmStatic - fun isThemeColorLuminanceDark() = currentThemeColor.isLuminanceDark() - @JvmStatic fun add(colorMutable: ThemeColorMutable) = ThemeColorMutableManager.add(colorMutable) @@ -67,10 +61,6 @@ object ThemeColorManager { ThemeColorWidgetReferenceManager.setColor(themeColor) } - /** - * 设置主题色并为记录的状态栏和标题栏改变颜色 - * @param color 主题色RGB值 - */ fun setThemeColor(color: Int) = setThemeColor(ThemeColor(color)) private fun saveThemeColorIfNeeded() { @@ -78,10 +68,31 @@ object ThemeColorManager { } @JvmStatic - fun getDayOrNightColorByLuminance(context: Context): Int = ViewUtils.getDayOrNightColorByLuminance(context, colorPrimary) + @JvmOverloads + fun isLuminanceLight(backgroundColorMatters: Boolean = true): Boolean { + return ViewUtils.isLuminanceLight(colorPrimary, backgroundColorMatters) + } @JvmStatic - fun getDayOrNightColorResByLuminance(): Int = ViewUtils.getDayOrNightColorResByLuminance(colorPrimary) + @JvmOverloads + fun isLuminanceDark(backgroundColorMatters: Boolean = true): Boolean { + return ViewUtils.isLuminanceDark(colorPrimary, backgroundColorMatters) + } + + @JvmStatic + fun getDayOrNightColorByLuminance(context: Context): Int { + return ViewUtils.getDayOrNightColorByLuminance(context, colorPrimary) + } + + @JvmStatic + fun getDayOrNightColorResByLuminance(): Int { + return ViewUtils.getDayOrNightColorResByLuminance(colorPrimary) + } + + @JvmStatic + fun setStatusBarBackgroundColor(activity: Activity) { + ViewUtils.setStatusBarBackgroundColor(activity, colorPrimary) + } private object BackgroundColorManager { @@ -105,7 +116,7 @@ object ThemeColorManager { fun add(activity: Activity) { activityRefs.add(WeakReference(activity)) - ViewUtils.setStatusBarBackgroundColor(activity, currentThemeColor.colorPrimary) + setStatusBarBackgroundColor(activity) } fun setColor(color: Int) { diff --git a/app/src/main/java/org/autojs/autojs/theme/app/ColorLibrariesActivity.kt b/app/src/main/java/org/autojs/autojs/theme/app/ColorLibrariesActivity.kt new file mode 100644 index 00000000..9cb5e567 --- /dev/null +++ b/app/src/main/java/org/autojs/autojs/theme/app/ColorLibrariesActivity.kt @@ -0,0 +1,322 @@ +package org.autojs.autojs.theme.app + +import android.annotation.SuppressLint +import android.content.Intent +import android.content.res.ColorStateList +import android.os.Bundle +import android.view.LayoutInflater +import android.view.Menu +import android.view.MenuItem +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import android.widget.Toast +import androidx.appcompat.widget.SearchView +import androidx.recyclerview.widget.DividerItemDecoration +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import androidx.recyclerview.widget.RecyclerView.VERTICAL +import com.jaredrummler.android.colorpicker.ColorPickerDialog +import org.autojs.autojs.core.image.ColorItems +import org.autojs.autojs.core.pref.Pref +import org.autojs.autojs.theme.ThemeChangeNotifier +import org.autojs.autojs.theme.ThemeColorManager +import org.autojs.autojs.util.ColorUtils +import org.autojs.autojs.util.ViewUtils +import org.autojs.autojs.util.ViewUtils.setMenuIconsColorByColorLuminance +import org.autojs.autojs6.R +import org.autojs.autojs6.databinding.MtActivityColorLibrariesBinding + +@SuppressLint("NotifyDataSetChanged") +class ColorLibrariesActivity : ColorSelectBaseActivity() { + + private lateinit var binding: MtActivityColorLibrariesBinding + + private lateinit var mAdapter: ColorLibraryAdapter + + private val customColor: Int + get() = Pref.getInt(KEY_CUSTOM_COLOR, getColor(R.color.custom_color_default)) + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + ThemeChangeNotifier.themeChanged.observe(this) { + setColor(ThemeColorManager.colorPrimary) + mAdapter.notifyDataSetChanged() + } + + MtActivityColorLibrariesBinding.inflate(layoutInflater).let { + binding = it + setContentView(it.root) + setUpToolbar(it.toolbar) + setUpAppBar(it.appBar, it.appBarContainer) + } + + binding.colorLibrariesRecyclerView.let { + it.layoutManager = LinearLayoutManager(this) + it.adapter = ColorLibraryAdapter(colorLibraries) { library -> + val intent = Intent(this, ColorLibraryActivity::class.java) + intent.putExtra("LIBRARY_ID", library.id) + startActivity(intent) + }.also { mAdapter = it } + it.addItemDecoration(DividerItemDecoration(this, VERTICAL)) + ViewUtils.excludePaddingClippableViewFromNavigationBar(it) + } + } + + override fun onCreateOptionsMenu(menu: Menu): Boolean { + menuInflater.inflate(R.menu.menu_color_libraries, menu) + + binding.toolbar.setMenuIconsColorByColorLuminance(this, currentColor) + + val searchItem = menu.findItem(R.id.action_search_color) + val searchView = searchItem.actionView as? SearchView + searchView?.queryHint = "搜索颜色库" + searchView?.setOnQueryTextListener(object : SearchView.OnQueryTextListener { + override fun onQueryTextSubmit(query: String?): Boolean { + filterLibraries(query) + return true + } + + override fun onQueryTextChange(newText: String?): Boolean { + filterLibraries(newText) + return true + } + }) + return true + } + + private fun filterLibraries(query: String?) { + val filteredLibraries = when { + query.isNullOrBlank() -> colorLibraries + else -> colorLibraries.filter { + val name = it.nameString ?: getString(it.nameRes) + name.contains(query, ignoreCase = true) + } + } + mAdapter.updateData(filteredLibraries) + } + + // 定位功能可以通过工具栏中的 "action_locate_current_theme_color" 按钮实现, + // 按钮点击后找到包含当前主题色的颜色库在列表中的位置, + // 然后调用 RecyclerView 的 scrollToPosition() 方法跳转到该项 + + override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) { + R.id.action_color_palette -> { + showColorPicker() + true + } + R.id.action_search_color -> { + ViewUtils.showToast(this, R.string.text_under_development_title) + true + } + R.id.action_new_color_library -> { + ViewUtils.showToast(this, R.string.text_under_development_title) + true + } + R.id.action_locate_current_theme_color -> { + locateCurrentThemeColor() + true + } + R.id.action_toggle_color_select_layout -> { + isLegacyLayout = true + startActivity(this) + true + } + else -> super.onOptionsItemSelected(item) + } + + private fun showColorPicker() { + ColorPickerDialog.newBuilder() + .setAllowCustom(true) + .setAllowPresets(true) + .setDialogType(ColorPickerDialog.TYPE_CUSTOM) + .setShowAlphaSlider(false) + .setDialogTitle(R.string.dialog_title_color_palette) + .setColor(customColor) + .create() + .setColorPickerDialogListener { dialogId: Int, color: Int -> + savePrefsForLibraries() + savePrefsForLegacy(color) + + binding.toolbar.post { binding.toolbar.subtitle = getCurrentColorSummary(this, true) } + + setColorWithAnimation(color) + + ThemeColorManager.setThemeColor(color) + ThemeChangeNotifier.notifyThemeChanged() + } + .show(supportFragmentManager, "ColorPickerTagForColorLibraries") + } + + private fun savePrefsForLibraries() { + Pref.putInt(KEY_SELECTED_COLOR_LIBRARY_ID, COLOR_LIBRARY_CUSTOM_COLOR_ID) + Pref.putInt(KEY_SELECTED_COLOR_LIBRARY_ITEM_ID, 0) + } + + private fun savePrefsForLegacy(color: Int) { + Pref.putInt(KEY_CUSTOM_COLOR, color or -0x1000000) + Pref.putInt(KEY_SELECTED_COLOR_INDEX, customColorPosition) + } + + + private fun locateCurrentThemeColor() { + // 假设当前主题颜色保存在 ThemeColorManager 中,可以通过它查找对应颜色库 + val currentColor = ThemeColorManager.colorPrimary + // 简单示例:遍历 colorLibraries,找到第一个包含该颜色的库 + val targetIndex = colorLibraries.indexOfFirst { library -> + library.colors.any { colorItem -> + getColor(colorItem.colorRes) == currentColor + } + } + if (targetIndex >= 0) { + val recyclerView: RecyclerView = findViewById(R.id.color_libraries_recycler_view) + recyclerView.smoothScrollToPosition(targetIndex) + } else { + Toast.makeText(this, "未找到当前颜色所在的颜色库", Toast.LENGTH_SHORT).show() + } + } + + override fun getSubtitle() = getCurrentColorSummary(this) + + inner class ColorLibraryAdapter( + private var libraries: List, + private val onItemClick: (ColorLibrary) -> Unit, + ) : RecyclerView.Adapter() { + + // 当上层需要搜索过滤时调用该方法更新数据 + fun updateData(newLibraries: List) { + libraries = newLibraries + notifyDataSetChanged() + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): LibraryViewHolder { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.mt_color_libraries_recycler_view_item, parent, false) + return LibraryViewHolder(view) + } + + override fun onBindViewHolder(holder: LibraryViewHolder, position: Int) { + val library = libraries[position] + holder.bind(library) + holder.itemView.setOnClickListener { onItemClick(library) } + } + + override fun getItemCount() = libraries.size + + } + + inner class LibraryViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + + private val colorItemView: ImageView = itemView.findViewById(R.id.library_item) + private val libraryName: TextView = itemView.findViewById(R.id.name) + private val description: TextView = itemView.findViewById(R.id.description) + + fun bind(library: ColorLibrary) { + libraryName.text = library.nameString ?: getString(library.nameRes) + + val size = library.colors.size + description.text = resources.getQuantityString(R.plurals.text_items_total_sum, size, size) + + val adjustedContrastColor = ColorUtils.adjustColorForContrast(getColor(R.color.window_background), ThemeColorManager.colorPrimary, 2.3) + when { + library.id == COLOR_LIBRARY_DEFAULT_COLORS_ID -> { + colorItemView.setImageResource(R.drawable.ic_color_library_default) + } + !library.isUserDefined -> { + colorItemView.setImageResource(R.drawable.ic_color_library_preset) + } + } + colorItemView.imageTintList = ColorStateList.valueOf(adjustedContrastColor) + } + + } + + companion object { + + const val COLOR_LIBRARY_CUSTOM_COLOR_ID = 0x10001 + + const val COLOR_LIBRARY_DEFAULT_COLORS_ID = 0x20001 + const val COLOR_LIBRARY_MATERIAL_COLORS_ID = 0x20002 + const val COLOR_LIBRARY_ANDROID_COLORS_ID = 0x20003 + const val COLOR_LIBRARY_CSS_COLORS_ID = 0x20004 + const val COLOR_LIBRARY_WEB_COLORS_ID = 0x20005 + + val colorLibraries by lazy { + listOf( + ColorLibrary( + id = COLOR_LIBRARY_DEFAULT_COLORS_ID, + nameRes = R.string.color_library_default_colors, + titleRes = R.string.color_library_title_default_colors, + identifierRes = R.string.color_library_identifier_default_colors, + colors = listOf( + R.color.md_teal_800 to R.string.md_teal_800, + R.color.md_blue_gray_800 to R.string.md_blue_gray_800, + R.color.window_background_light to R.string.window_background_light, + R.color.window_background_night to R.string.window_background_night, + ).mapIndexed { index, (colorRes, nameRes) -> + ColorItem(index, colorRes, nameRes) + }, + ), + ColorLibrary( + id = COLOR_LIBRARY_MATERIAL_COLORS_ID, + nameRes = R.string.color_library_material_design_colors, + titleRes = R.string.color_library_title_material_design_colors, + identifierRes = R.string.color_library_identifier_material_design_colors, + colors = ColorItems.MATERIAL_COLORS.mapIndexed { index, (colorRes, nameRes) -> + ColorItem(index, colorRes, nameRes) + }, + ), + ColorLibrary( + id = COLOR_LIBRARY_ANDROID_COLORS_ID, + nameRes = R.string.color_library_android_colors, + titleRes = R.string.color_library_title_android_colors, + identifierRes = R.string.color_library_identifier_android_colors, + colors = ColorItems.ANDROID_COLORS.mapIndexed { index, (colorRes, nameRes) -> + ColorItem(index, colorRes, nameRes) + }, + ), + ColorLibrary( + id = COLOR_LIBRARY_CSS_COLORS_ID, + nameRes = R.string.color_library_css_colors, + titleRes = R.string.color_library_title_css_colors, + identifierRes = R.string.color_library_identifier_css_colors, + colors = ColorItems.CSS_COLORS.mapIndexed { index, (colorRes, nameRes) -> + ColorItem(index, colorRes, nameRes) + }, + ), + ColorLibrary( + id = COLOR_LIBRARY_WEB_COLORS_ID, + nameRes = R.string.color_library_web_colors, + titleRes = R.string.color_library_title_web_colors, + identifierRes = R.string.color_library_identifier_web_colors, + colors = ColorItems.WEB_COLORS.mapIndexed { index, (colorRes, nameRes) -> + ColorItem(index, colorRes, nameRes) + }, + ), + ) + } + + data class ColorItem( + val id: Int, + val colorRes: Int = R.color.md_black_1000, + val nameRes: Int = R.string.text_unknown, + val colorInt: Int? = null, + val nameString: String? = null, + ) + + data class ColorLibrary( + val id: Int, + val nameRes: Int = R.string.text_color_library, + val titleRes: Int? = null, + val identifierRes: Int? = null, + val nameString: String? = null, + val titleString: String? = null, + val colors: List = emptyList(), + var isUserDefined: Boolean = false, + ) + + } + +} \ No newline at end of file diff --git a/app/src/main/java/org/autojs/autojs/theme/app/ColorLibraryActivity.kt b/app/src/main/java/org/autojs/autojs/theme/app/ColorLibraryActivity.kt new file mode 100644 index 00000000..4064c7df --- /dev/null +++ b/app/src/main/java/org/autojs/autojs/theme/app/ColorLibraryActivity.kt @@ -0,0 +1,257 @@ +package org.autojs.autojs.theme.app + +import android.annotation.SuppressLint +import android.content.res.ColorStateList +import android.os.Bundle +import android.view.LayoutInflater +import android.view.Menu +import android.view.MenuItem +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.annotation.ColorInt +import androidx.appcompat.widget.SearchView +import androidx.recyclerview.widget.DividerItemDecoration +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import androidx.recyclerview.widget.RecyclerView.VERTICAL +import org.autojs.autojs.core.image.ColorItems +import org.autojs.autojs.core.pref.Pref +import org.autojs.autojs.theme.ThemeChangeNotifier +import org.autojs.autojs.theme.ThemeColorHelper +import org.autojs.autojs.theme.ThemeColorManager +import org.autojs.autojs.theme.app.ColorLibrariesActivity.Companion.COLOR_LIBRARY_DEFAULT_COLORS_ID +import org.autojs.autojs.theme.app.ColorLibrariesActivity.Companion.COLOR_LIBRARY_MATERIAL_COLORS_ID +import org.autojs.autojs.theme.app.ColorLibrariesActivity.Companion.ColorItem +import org.autojs.autojs.theme.app.ColorLibrariesActivity.Companion.ColorLibrary +import org.autojs.autojs.theme.app.ColorLibrariesActivity.Companion.colorLibraries +import org.autojs.autojs.util.ViewUtils +import org.autojs.autojs.util.ViewUtils.setMenuIconsColorByColorLuminance +import org.autojs.autojs6.R +import org.autojs.autojs6.databinding.MtActivityColorLibraryBinding + +@SuppressLint("NotifyDataSetChanged") +class ColorLibraryActivity : ColorSelectBaseActivity() { + + private lateinit var binding: MtActivityColorLibraryBinding + + private lateinit var mAdapter: ColorItemAdapter + private lateinit var mLibrary: ColorLibrary + + private var mSelectedPosition = SELECT_NONE + private var mSelectedColor: Int? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + val libraryId = intent.getIntExtra("LIBRARY_ID", -1) + val library = colorLibraries.find { it.id == libraryId }?.also { lib -> + mLibrary = lib + } ?: throw RuntimeException("Unknown library id: $libraryId") + + MtActivityColorLibraryBinding.inflate(layoutInflater).let { + binding = it + setContentView(it.root) + setUpToolbar(it.toolbar) + setUpAppBar(it.appBar, it.appBarContainer) + it.toolbar.title = library.let { + it.titleString + ?: it.titleRes?.let { resId -> getString(resId) } + ?: it.nameString + ?: getString(it.nameRes) + } + if (library.id == Pref.getInt(KEY_SELECTED_COLOR_LIBRARY_ID, SELECT_NONE)) { + it.toolbar.subtitle = getCurrentColorSummary(this, true) + } + } + + binding.colorLibraryRecyclerView.let { it -> + it.layoutManager = LinearLayoutManager(this) + it.adapter = ColorItemAdapter(library.colors) { colorItem, itemView -> + savePrefsForLibraries(library, colorItem) + savePrefsForLegacy(library, colorItem) + + it.post { binding.toolbar.subtitle = getCurrentColorSummary(this, true) } + + val selectedColor = getColor(colorItem.colorRes).also { mSelectedColor = it } + setColorWithAnimation(selectedColor) + + val adapter = it.adapter as ColorItemAdapter + val currentPosition = it.getChildViewHolder(itemView).bindingAdapterPosition + if (mSelectedPosition != SELECT_NONE) { + adapter.notifyItemChanged(mSelectedPosition) + mSelectedPosition = currentPosition + adapter.notifyItemChanged(currentPosition) + } else { + mSelectedPosition = currentPosition + adapter.notifyDataSetChanged() + } + + ThemeColorManager.setThemeColor(selectedColor) + ThemeChangeNotifier.notifyThemeChanged() + }.also { mAdapter = it } + it.addItemDecoration(DividerItemDecoration(this, VERTICAL)) + ViewUtils.excludePaddingClippableViewFromNavigationBar(it) + setUpSelectedPosition() + } + } + + private fun setUpSelectedPosition() { + when (Pref.getInt(KEY_SELECTED_COLOR_LIBRARY_ID, SELECT_NONE)) { + SELECT_NONE -> when (val legacyIndex = Pref.getInt(KEY_SELECTED_COLOR_INDEX, SELECT_NONE)) { + customColorPosition -> Unit + SELECT_NONE, defaultColorPosition -> when (mLibrary.id) { + COLOR_LIBRARY_DEFAULT_COLORS_ID -> { + val index = mLibrary.colors.indexOfFirst { getColor(it.colorRes) == getColor(R.color.theme_color_default) } + if (index >= 0) mSelectedPosition = index + } + } + else -> when (val calculatedIndex = legacyIndex - maxOf(customColorPosition, defaultColorPosition) - 1) { + in ColorItems.MATERIAL_COLORS.indices -> { + val (colorRes, _) = ColorItems.MATERIAL_COLORS[calculatedIndex] + val index = mLibrary.colors.indexOfFirst { it.colorRes == colorRes } + if (index >= 0) mSelectedPosition = index + } + } + } + mLibrary.id -> { + val libraryItemId = Pref.getInt(KEY_SELECTED_COLOR_LIBRARY_ITEM_ID, SELECT_NONE) + mSelectedPosition = mLibrary.colors.indexOfFirst { it.id == libraryItemId }.takeIf { it != SELECT_NONE } ?: SELECT_NONE + } + } + } + + private fun savePrefsForLibraries(library: ColorLibrary?, colorItem: ColorItem) { + Pref.putInt(KEY_SELECTED_COLOR_LIBRARY_ID, library?.id ?: -1) + Pref.putInt(KEY_SELECTED_COLOR_LIBRARY_ITEM_ID, colorItem.id) + } + + private fun savePrefsForLegacy(library: ColorLibrary?, colorItem: ColorItem) { + when (library?.id) { + COLOR_LIBRARY_DEFAULT_COLORS_ID -> { + if (getColor(colorItem.colorRes) == getColor(R.color.theme_color_default)) { + Pref.putInt(KEY_SELECTED_COLOR_INDEX, defaultColorPosition) + } else { + Pref.putInt(KEY_SELECTED_COLOR_INDEX, SELECT_NONE) + } + } + COLOR_LIBRARY_MATERIAL_COLORS_ID -> { + val index = colorItem.id + if (index !in ColorItems.MATERIAL_COLORS.indices) { + Pref.putInt(KEY_SELECTED_COLOR_INDEX, SELECT_NONE) + } else { + val fixedIndex = maxOf( + defaultColorPosition, + customColorPosition, + ) + 1 + index + Pref.putInt(KEY_SELECTED_COLOR_INDEX, fixedIndex) + } + } + else -> { + Pref.putInt(KEY_SELECTED_COLOR_INDEX, SELECT_NONE) + } + } + } + + override fun onCreateOptionsMenu(menu: Menu): Boolean { + menuInflater.inflate(R.menu.menu_color_library, menu) + + binding.toolbar.setMenuIconsColorByColorLuminance(this, currentColor) + + val searchItem = menu.findItem(R.id.action_search_color) + val searchView = searchItem.actionView as? SearchView + searchView?.queryHint = "搜索颜色" + searchView?.setOnQueryTextListener(object : SearchView.OnQueryTextListener { + override fun onQueryTextSubmit(query: String?): Boolean { + filterColors(query) + return true + } + + override fun onQueryTextChange(newText: String?): Boolean { + filterColors(newText) + return true + } + }) + return true + } + + private fun filterColors(@Suppress("unused") query: String?) { + // if (library == null) return + // val filteredColors = if (query.isNullOrBlank()) { + // library!!.colors + // } else { + // library!!.colors.filter { colorItem -> + // // 假设可以通过资源 id 获取对应的字符串显示,再做匹配 + // val name = getString(colorItem.nameRes) + // name.contains(query, ignoreCase = true) + // } + // } + // adapter.updateData(filteredColors) + } + + override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) { + R.id.action_search_color -> { + ViewUtils.showToast(this, R.string.text_under_development_title) + true + } + R.id.action_locate_current_theme_color -> { + // locateCurrentColorLibrary() + true + } + else -> super.onOptionsItemSelected(item) + } + + inner class ColorItemAdapter( + private var items: List, + private val onItemClick: (ColorItem, View) -> Unit, + ) : RecyclerView.Adapter() { + + fun updateData(newItems: List) { + items = newItems + notifyDataSetChanged() + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ColorViewHolder { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.mt_color_library_recycler_view_item, parent, false) + return ColorViewHolder(view) + } + + override fun onBindViewHolder(holder: ColorViewHolder, position: Int) { + val item = items[position] + holder.bind(item, position) + holder.itemView.setOnClickListener { onItemClick(item, holder.itemView) } + } + + override fun getItemCount() = items.size + + } + + inner class ColorViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + + private val colorView: ImageView = itemView.findViewById(R.id.color) + private val nameView: TextView = itemView.findViewById(R.id.name) + private val descView: TextView = itemView.findViewById(R.id.description) + + fun bind(item: ColorItem, position: Int) { + val color = getColor(item.colorRes) + ThemeColorHelper.setBackgroundColor(colorView, color) + nameView.text = item.nameString ?: getString(item.nameRes) + descView.text = String.format("#%06X", 0xFFFFFF and color) + setChecked(color, mSelectedPosition == position) + } + + fun setChecked(@ColorInt color: Int, checked: Boolean) { + if (checked) { + colorView.setImageResource(R.drawable.mt_ic_check_white_36dp) + val tintRes = if (ViewUtils.isLuminanceLight(color)) R.color.day else R.color.night + colorView.imageTintList = ColorStateList.valueOf(getColor(tintRes)) + } else { + colorView.setImageDrawable(null) + } + } + + } + +} \ No newline at end of file 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 96f47b64..19f38887 100644 --- a/app/src/main/java/org/autojs/autojs/theme/app/ColorSelectActivity.kt +++ b/app/src/main/java/org/autojs/autojs/theme/app/ColorSelectActivity.kt @@ -4,10 +4,6 @@ import android.os.Bundle import android.view.Menu import android.view.MenuItem import android.view.View -import org.autojs.autojs.core.pref.Pref -import org.autojs.autojs.theme.ThemeChangeNotifier -import org.autojs.autojs.theme.ThemeColorManager -import org.autojs.autojs.util.StringUtils.key import org.autojs.autojs.util.ViewUtils import org.autojs.autojs6.R import org.autojs.autojs6.databinding.MtActivityColorSelectBinding @@ -21,9 +17,12 @@ class ColorSelectActivity : ColorSelectBaseActivity() { private lateinit var mColorSettingRecyclerView: ColorSettingRecyclerView + private var mSelectedPosition = SELECT_NONE + private val mOnItemClickListener = object : OnItemClickListener { override fun onItemClick(v: View?, position: Int) { mColorSettingRecyclerView.selectedThemeColor?.let { + mSelectedPosition = position setColorWithAnimation(it.colorPrimary) } } @@ -31,7 +30,7 @@ class ColorSelectActivity : ColorSelectBaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - MtActivityColorSelectBinding.inflate(layoutInflater).also { + MtActivityColorSelectBinding.inflate(layoutInflater).let { binding = it setContentView(it.root) setUpToolbar(it.toolbar) @@ -42,21 +41,12 @@ class ColorSelectActivity : ColorSelectBaseActivity() { private fun setUpColorSettingRecyclerView(colorSettingRecyclerView: ColorSettingRecyclerView) { mColorSettingRecyclerView = colorSettingRecyclerView.apply { - setSelectedColor(currentColor) + setUpSelectedPosition(currentColor) setOnItemClickListener(mOnItemClickListener) ViewUtils.excludePaddingClippableViewFromNavigationBar(this) } } - override fun finish() { - mColorSettingRecyclerView.selectedThemeColor?.let { - ThemeColorManager.setThemeColor(it.colorPrimary) - Pref.putString(key(R.string.key_theme_color), getCurrentColorSummary(this)) - ThemeChangeNotifier.notifyThemeChanged() - } - super.finish() - } - override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu_color_select, menu) return super.onCreateOptionsMenu(menu) @@ -64,26 +54,12 @@ class ColorSelectActivity : ColorSelectBaseActivity() { override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { - R.id.action_color_palette -> { - ViewUtils.showToast(this, R.string.text_under_development_title) - } - R.id.action_search_color -> { - ViewUtils.showToast(this, R.string.text_under_development_title) - } - R.id.action_new_color_library -> { - ViewUtils.showToast(this, R.string.text_under_development_title) - } - R.id.action_locate_current_color -> { - ViewUtils.showToast(this, R.string.text_under_development_title) - } R.id.action_toggle_color_select_layout -> { - isLegacyLayout = true + isLegacyLayout = false startActivity(this) } } return true } - override fun getSubtitle() = getCurrentColorSummary(this) - } \ No newline at end of file diff --git a/app/src/main/java/org/autojs/autojs/theme/app/ColorSelectBaseActivity.kt b/app/src/main/java/org/autojs/autojs/theme/app/ColorSelectBaseActivity.kt index 0897b505..fe97f2d6 100644 --- a/app/src/main/java/org/autojs/autojs/theme/app/ColorSelectBaseActivity.kt +++ b/app/src/main/java/org/autojs/autojs/theme/app/ColorSelectBaseActivity.kt @@ -11,8 +11,9 @@ import com.google.android.material.appbar.AppBarLayout import io.codetail.widget.RevealFrameLayout import org.autojs.autojs.core.image.ColorItems import org.autojs.autojs.core.pref.Pref -import org.autojs.autojs.theme.ThemeColor import org.autojs.autojs.theme.ThemeColorManager +import org.autojs.autojs.theme.app.ColorLibrariesActivity.Companion.COLOR_LIBRARY_CUSTOM_COLOR_ID +import org.autojs.autojs.theme.app.ColorLibrariesActivity.Companion.colorLibraries import org.autojs.autojs.ui.BaseActivity import org.autojs.autojs.util.ColorUtils import org.autojs.autojs.util.ViewUtils @@ -59,10 +60,6 @@ abstract class ColorSelectBaseActivity : BaseActivity() { supportActionBar?.setDisplayHomeAsUpEnabled(true) } - protected fun finishWithoutSaving() { - super.finish() - } - protected open fun getSubtitle(): String? = null override fun initThemeColors() { @@ -82,36 +79,34 @@ abstract class ColorSelectBaseActivity : BaseActivity() { } protected fun setColorWithAnimation(colorTo: Int) { - val view = mAppBarLayout - mAppBarContainer.setBackgroundColor(currentColor) - view.setBackgroundColor(colorTo) - currentColor = colorTo - - initThemeColors() - updateToolbarIconsColor() - mToolbar.subtitle = getSubtitle() - + setColor(colorTo) ViewAnimationUtils.createCircularReveal( - /* view = */ view, - /* centerX = */ view.left, - /* centerY = */ view.bottom, + /* view = */ mAppBarLayout, + /* centerX = */ mAppBarLayout.left, + /* centerY = */ mAppBarLayout.bottom, /* startRadius = */ 0f, - /* endRadius = */ hypot(view.width.toDouble(), view.height.toDouble()).toFloat(), + /* endRadius = */ hypot(mAppBarLayout.width.toDouble(), mAppBarLayout.height.toDouble()).toFloat(), ).apply { duration = 500L start() } } + protected fun setColor(colorTo: Int) { + mAppBarContainer.setBackgroundColor(currentColor) + mAppBarLayout.setBackgroundColor(colorTo) + currentColor = colorTo + + initThemeColors() + updateToolbarIconsColor() + mToolbar.subtitle = getSubtitle() + } + protected fun setUpAppBar(appBar: AppBarLayout, appBarContainer: RevealFrameLayout) { mAppBarLayout = appBar.apply { setBackgroundColor(currentColor) } mAppBarContainer = appBarContainer } - class ColorItem(var name: String, var themeColor: ThemeColor) { - constructor(name: String, color: Int) : this(name, ThemeColor(color)) - } - interface OnItemClickListener { fun onItemClick(v: View?, position: Int) } @@ -122,11 +117,13 @@ abstract class ColorSelectBaseActivity : BaseActivity() { val KEY_CUSTOM_COLOR = "${ColorSettingRecyclerView::class.java.name}.COLOR_SETTING_CUSTOM_COLOR" val KEY_SELECTED_COLOR_INDEX = "${ColorSettingRecyclerView::class.java.name}.SELECTED_COLOR_INDEX" + val KEY_SELECTED_COLOR_LIBRARY_ID = "${ColorSettingRecyclerView::class.java.name}.SELECTED_COLOR_LIBRARY_ID" + val KEY_SELECTED_COLOR_LIBRARY_ITEM_ID = "${ColorSettingRecyclerView::class.java.name}.SELECTED_COLOR_LIBRARY_ITEM_ID" val customColorPosition: Int get() = /* return mColors.size() - 1; */ 0 - private val defaultColorPosition: Int + val defaultColorPosition: Int get() = customColorPosition + 1 var isLegacyLayout: Boolean @@ -135,7 +132,7 @@ abstract class ColorSelectBaseActivity : BaseActivity() { val colorItems by lazy { mutableListOf>().apply { - add(customColorPosition, 0 to R.string.mt_custom) + add(customColorPosition, R.color.custom_color_default to R.string.mt_custom) add(defaultColorPosition, R.color.theme_color_default to R.string.theme_color_default) addAll(ColorItems.MATERIAL_COLORS) } @@ -144,8 +141,8 @@ abstract class ColorSelectBaseActivity : BaseActivity() { @JvmStatic fun startActivity(context: Context) { val cls = when (isLegacyLayout) { - true -> ColorSelectLegacyActivity::class.java - else -> ColorSelectActivity::class.java + true -> ColorSelectActivity::class.java + else -> ColorLibrariesActivity::class.java } val titleRes = when (isLegacyLayout) { true -> R.string.mt_color_picker_title @@ -156,22 +153,80 @@ abstract class ColorSelectBaseActivity : BaseActivity() { } if (context is ColorSelectBaseActivity) { intent.putExtra("currentColor", context.currentColor) - context.finishWithoutSaving() + context.finish() } context.startActivity(intent) } @JvmStatic - fun getCurrentColorSummary(context: Context): String { - val index = Pref.getInt(KEY_SELECTED_COLOR_INDEX, defaultColorPosition) - val colorItem = colorItems[index] - val (colorRes, nameRes) = colorItem - val name = context.getString(nameRes) - val colorInt = when (index) { - customColorPosition -> Pref.getInt(KEY_CUSTOM_COLOR, context.getColor(R.color.md_blue_grey_800)) - else -> context.getColor(colorRes) + fun getCurrentColorSummary(context: Context, isBrief: Boolean = false): String = when { + isLegacyLayout -> when (val index = Pref.getInt(KEY_SELECTED_COLOR_INDEX, defaultColorPosition)) { + SELECT_NONE -> { + val colorInt = ThemeColorManager.colorPrimary + ColorUtils.toString(colorInt).uppercase() + } + else -> { + val colorItem = colorItems[index] + val (colorRes, nameRes) = colorItem + val name = context.getString(nameRes) + val colorInt = when (index) { + customColorPosition -> Pref.getInt(KEY_CUSTOM_COLOR, context.getColor(R.color.custom_color_default)) + else -> context.getColor(colorRes) + } + "$name [${ColorUtils.toString(colorInt).uppercase()}]" + } + } + else -> { + var identifier: String? = null + var colorName: String? = null + val colorInt = ThemeColorManager.colorPrimary + val libraryId = Pref.getInt(KEY_SELECTED_COLOR_LIBRARY_ID, SELECT_NONE) + val libraryItemId = Pref.getInt(KEY_SELECTED_COLOR_LIBRARY_ITEM_ID, SELECT_NONE) + when (libraryId) { + COLOR_LIBRARY_CUSTOM_COLOR_ID -> { + identifier = context.getString(R.string.mt_custom) + } + SELECT_NONE -> { + val legacyIndex = Pref.getInt(KEY_SELECTED_COLOR_INDEX, SELECT_NONE) + when (legacyIndex) { + customColorPosition -> identifier = context.getString(R.string.color_library_identifier_custom) + SELECT_NONE, defaultColorPosition -> identifier = context.getString(R.string.color_library_identifier_default_colors) + else -> { + val calculatedIndex = legacyIndex - maxOf(customColorPosition, defaultColorPosition) - 1 + if (calculatedIndex in ColorItems.MATERIAL_COLORS.indices) { + val (_, nameRes) = ColorItems.MATERIAL_COLORS[calculatedIndex] + identifier = context.getString(R.string.color_library_identifier_material_design_colors) + colorName = context.getString(nameRes) + } + } + } + } + else -> colorLibraries.find { it.id == libraryId }?.let { lib -> + identifier = when { + lib.isUserDefined -> context.getString(R.string.color_library_identifier_custom) + else -> lib.identifierRes?.let { resId -> context.getString(resId) } + } + if (libraryItemId != -1) { + lib.colors.find { it.id == libraryItemId }?.let { item -> + colorName = item.nameString + ?: item.nameRes.takeUnless { + it == R.string.text_unknown + }?.let { context.getString(it) } + } + } + } + } + val colorString = ColorUtils.toString(colorInt).uppercase() + when { + identifier != null && colorName != null -> when { + isBrief -> "$colorName [$colorString]" + else -> "$identifier | $colorName [$colorString]" + } + identifier != null -> "$identifier | $colorString" + colorName != null -> "$colorName [$colorString]" + else -> colorString + } } - return "$name [${ColorUtils.toString(colorInt).uppercase()}]" } } diff --git a/app/src/main/java/org/autojs/autojs/theme/app/ColorSelectLegacyActivity.kt b/app/src/main/java/org/autojs/autojs/theme/app/ColorSelectLegacyActivity.kt deleted file mode 100644 index 69f0498e..00000000 --- a/app/src/main/java/org/autojs/autojs/theme/app/ColorSelectLegacyActivity.kt +++ /dev/null @@ -1,75 +0,0 @@ -package org.autojs.autojs.theme.app - -import android.os.Bundle -import android.view.Menu -import android.view.MenuItem -import android.view.View -import org.autojs.autojs.core.pref.Pref -import org.autojs.autojs.theme.ThemeChangeNotifier -import org.autojs.autojs.theme.ThemeColorManager -import org.autojs.autojs.util.StringUtils.key -import org.autojs.autojs.util.ViewUtils -import org.autojs.autojs6.R -import org.autojs.autojs6.databinding.MtActivityColorSelectLegacyBinding - -/** - * Created by SuperMonster003 on Mar 20, 2025. - */ -class ColorSelectLegacyActivity : ColorSelectBaseActivity() { - - private lateinit var binding: MtActivityColorSelectLegacyBinding - - private lateinit var mColorSettingRecyclerView: ColorSettingRecyclerViewLegacy - - private val mOnItemClickListener = object : OnItemClickListener { - override fun onItemClick(v: View?, position: Int) { - mColorSettingRecyclerView.selectedThemeColor?.let { - setColorWithAnimation(it.colorPrimary) - } - } - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - MtActivityColorSelectLegacyBinding.inflate(layoutInflater).also { - binding = it - setContentView(it.root) - setUpToolbar(it.toolbar) - setUpColorSettingRecyclerView(it.colorSettingRecyclerView) - setUpAppBar(it.appBar, it.appBarContainer) - } - } - - private fun setUpColorSettingRecyclerView(colorSettingRecyclerView: ColorSettingRecyclerViewLegacy) { - mColorSettingRecyclerView = colorSettingRecyclerView.apply { - setSelectedColor(currentColor) - setOnItemClickListener(mOnItemClickListener) - ViewUtils.excludePaddingClippableViewFromNavigationBar(this) - } - } - - override fun finish() { - mColorSettingRecyclerView.selectedThemeColor?.let { - ThemeColorManager.setThemeColor(it.colorPrimary) - Pref.putString(key(R.string.key_theme_color), getCurrentColorSummary(this)) - ThemeChangeNotifier.notifyThemeChanged() - } - super.finish() - } - - override fun onCreateOptionsMenu(menu: Menu): Boolean { - menuInflater.inflate(R.menu.menu_color_select_legacy, menu) - return super.onCreateOptionsMenu(menu) - } - - override fun onOptionsItemSelected(item: MenuItem): Boolean { - when (item.itemId) { - R.id.action_toggle_color_select_layout -> { - isLegacyLayout = false - startActivity(this) - } - } - return true - } - -} \ No newline at end of file diff --git a/app/src/main/java/org/autojs/autojs/theme/app/ColorSettingRecyclerView.kt b/app/src/main/java/org/autojs/autojs/theme/app/ColorSettingRecyclerView.kt index 65eac1fe..956f8208 100644 --- a/app/src/main/java/org/autojs/autojs/theme/app/ColorSettingRecyclerView.kt +++ b/app/src/main/java/org/autojs/autojs/theme/app/ColorSettingRecyclerView.kt @@ -9,16 +9,29 @@ import android.view.View import android.view.ViewGroup import android.widget.ImageView import android.widget.TextView +import androidx.fragment.app.FragmentActivity import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.ThemeColorRecyclerView import com.jaredrummler.android.colorpicker.ColorPickerDialog import org.autojs.autojs.core.pref.Pref +import org.autojs.autojs.theme.ThemeChangeNotifier import org.autojs.autojs.theme.ThemeColor import org.autojs.autojs.theme.ThemeColorHelper +import org.autojs.autojs.theme.ThemeColorManager +import org.autojs.autojs.theme.app.ColorLibrariesActivity.Companion.COLOR_LIBRARY_CUSTOM_COLOR_ID +import org.autojs.autojs.theme.app.ColorLibrariesActivity.Companion.COLOR_LIBRARY_DEFAULT_COLORS_ID +import org.autojs.autojs.theme.app.ColorLibrariesActivity.Companion.COLOR_LIBRARY_MATERIAL_COLORS_ID +import org.autojs.autojs.theme.app.ColorLibrariesActivity.Companion.colorLibraries +import org.autojs.autojs.theme.app.ColorSelectBaseActivity.Companion.KEY_SELECTED_COLOR_INDEX +import org.autojs.autojs.theme.app.ColorSelectBaseActivity.Companion.KEY_SELECTED_COLOR_LIBRARY_ID +import org.autojs.autojs.theme.app.ColorSelectBaseActivity.Companion.KEY_SELECTED_COLOR_LIBRARY_ITEM_ID +import org.autojs.autojs.theme.app.ColorSelectBaseActivity.Companion.SELECT_NONE +import org.autojs.autojs.theme.app.ColorSelectBaseActivity.Companion.colorItems import org.autojs.autojs.theme.app.ColorSelectBaseActivity.Companion.customColorPosition -import org.autojs.autojs.util.ColorUtils +import org.autojs.autojs.theme.app.ColorSelectBaseActivity.Companion.defaultColorPosition +import org.autojs.autojs.util.ViewUtils import org.autojs.autojs6.R class ColorSettingRecyclerView : ThemeColorRecyclerView { @@ -31,17 +44,17 @@ class ColorSettingRecyclerView : ThemeColorRecyclerView { private var mOnItemClickListener: ColorSelectBaseActivity.OnItemClickListener? = null - private var mSelectedPosition = ColorSelectBaseActivity.SELECT_NONE + private var mSelectedPosition = SELECT_NONE val selectedThemeColor: ThemeColor? get() = when { mSelectedPosition < 0 -> null mSelectedPosition == customColorPosition -> customColor - else -> context.getColor(ColorSelectBaseActivity.colorItems[mSelectedPosition].first) + else -> context.getColor(colorItems[mSelectedPosition].first) }?.let { ThemeColor(it) } private val customColor: Int - get() = Pref.getInt(ColorSelectBaseActivity.KEY_CUSTOM_COLOR, context.getColor(R.color.md_blue_grey_800)) + get() = Pref.getInt(ColorSelectBaseActivity.KEY_CUSTOM_COLOR, context.getColor(R.color.custom_color_default)) private val mActualOnItemClickListener = OnClickListener { v -> getChildViewHolder(v)?.let { holder -> @@ -63,7 +76,7 @@ class ColorSettingRecyclerView : ThemeColorRecyclerView { @SuppressLint("NotifyDataSetChanged") fun setSelectedPosition(currentPosition: Int) { - if (mSelectedPosition != ColorSelectBaseActivity.SELECT_NONE) { + if (mSelectedPosition != SELECT_NONE) { adapter!!.notifyItemChanged(mSelectedPosition) mSelectedPosition = currentPosition adapter!!.notifyItemChanged(currentPosition) @@ -71,21 +84,53 @@ class ColorSettingRecyclerView : ThemeColorRecyclerView { mSelectedPosition = currentPosition adapter!!.notifyDataSetChanged() } - Pref.putInt(ColorSelectBaseActivity.KEY_SELECTED_COLOR_INDEX, mSelectedPosition) + savePrefsForLegacy() + savePrefsForLibraries() + selectedThemeColor?.let { + ThemeColorManager.setThemeColor(it.colorPrimary) + ThemeChangeNotifier.notifyThemeChanged() + } } - fun setSelectedColor(colorPrimary: Int) { - for ((i, colorItem) in ColorSelectBaseActivity.colorItems.withIndex()) { - val color = when (i) { - customColorPosition -> customColor - else -> context.getColor(colorItem.first) + private fun savePrefsForLegacy() { + Pref.putInt(KEY_SELECTED_COLOR_INDEX, mSelectedPosition) + } + + private fun savePrefsForLibraries() { + when (mSelectedPosition) { + 0 -> { + Pref.putInt(KEY_SELECTED_COLOR_LIBRARY_ID, COLOR_LIBRARY_CUSTOM_COLOR_ID) + Pref.putInt(KEY_SELECTED_COLOR_LIBRARY_ITEM_ID, 0) } - if (color == colorPrimary) { - setSelectedPosition(i) - return + 1 -> { + Pref.putInt(KEY_SELECTED_COLOR_LIBRARY_ID, COLOR_LIBRARY_DEFAULT_COLORS_ID) + colorLibraries.find { it.id == COLOR_LIBRARY_DEFAULT_COLORS_ID }!!.colors.find { colorItem -> + context.getColor(colorItem.colorRes) == context.getColor(R.color.theme_color_default) + }?.let { Pref.putInt(KEY_SELECTED_COLOR_LIBRARY_ITEM_ID, it.id) } + } + else -> { + selectedThemeColor?.colorPrimary?.let { c -> + colorLibraries.find { it.id == COLOR_LIBRARY_MATERIAL_COLORS_ID }!!.colors.find { colorItem -> + context.getColor(colorItem.colorRes) == c + }?.let { + Pref.putInt(KEY_SELECTED_COLOR_LIBRARY_ID, COLOR_LIBRARY_MATERIAL_COLORS_ID) + Pref.putInt(KEY_SELECTED_COLOR_LIBRARY_ITEM_ID, it.id) + } + } } } - mSelectedPosition = ColorSelectBaseActivity.SELECT_NONE + } + + fun setUpSelectedPosition(currentColor: Int) { + val selectedIndex = Pref.getInt(KEY_SELECTED_COLOR_INDEX, SELECT_NONE) + colorItems.getOrNull(selectedIndex)?.let { + setSelectedPosition(selectedIndex) + } ?: when (currentColor) { + context.getColor(R.color.theme_color_default) -> { + setSelectedPosition(defaultColorPosition) + } + else -> mSelectedPosition = SELECT_NONE + } } private fun showColorPicker(v: View) { @@ -97,13 +142,13 @@ class ColorSettingRecyclerView : ThemeColorRecyclerView { .setDialogTitle(R.string.mt_color_picker_title) .setColor(customColor) .create() - .setColorPickerDialogListener { _: Int, color: Int -> - val customColor = color or -0x1000000 - Pref.putInt(ColorSelectBaseActivity.KEY_CUSTOM_COLOR, customColor) + .setColorPickerDialogListener { dialogId: Int, color: Int -> + val c = color or -0x1000000 + Pref.putInt(ColorSelectBaseActivity.KEY_CUSTOM_COLOR, c) setSelectedPosition(customColorPosition) mOnItemClickListener?.onItemClick(v, customColorPosition) } - .show((context as ColorSelectBaseActivity).supportFragmentManager, "ColorPickerTag") + .show((context as FragmentActivity).supportFragmentManager, "ColorPickerTagForColorSelect") } fun setOnItemClickListener(onItemClickListener: ColorSelectBaseActivity.OnItemClickListener?) { @@ -117,7 +162,7 @@ class ColorSettingRecyclerView : ThemeColorRecyclerView { } override fun onBindViewHolder(holder: ViewHolder, position: Int) { - val colorItem = ColorSelectBaseActivity.colorItems[position] + val colorItem = colorItems[position] val (colorRes, nameRes) = colorItem val color = when (position) { customColorPosition -> customColor @@ -131,7 +176,7 @@ class ColorSettingRecyclerView : ThemeColorRecyclerView { } } - override fun getItemCount() = ColorSelectBaseActivity.colorItems.size + override fun getItemCount() = colorItems.size } @@ -150,7 +195,7 @@ class ColorSettingRecyclerView : ThemeColorRecyclerView { if (checked) { colorView.setImageResource(R.drawable.mt_ic_check_white_36dp) val selectedThemeColorRes = selectedThemeColor?.colorPrimary?.let { - if (ColorUtils.isLuminanceLight(it)) R.color.day else R.color.night + if (ViewUtils.isLuminanceLight(it)) R.color.day else R.color.night } ?: R.color.night_day colorView.imageTintList = ColorStateList.valueOf(context.getColor(selectedThemeColorRes)) } else { diff --git a/app/src/main/java/org/autojs/autojs/theme/app/ColorSettingRecyclerViewLegacy.kt b/app/src/main/java/org/autojs/autojs/theme/app/ColorSettingRecyclerViewLegacy.kt deleted file mode 100644 index a3562b19..00000000 --- a/app/src/main/java/org/autojs/autojs/theme/app/ColorSettingRecyclerViewLegacy.kt +++ /dev/null @@ -1,174 +0,0 @@ -package org.autojs.autojs.theme.app - -import android.annotation.SuppressLint -import android.content.Context -import android.content.res.ColorStateList -import android.util.AttributeSet -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.ImageView -import android.widget.TextView -import androidx.annotation.ColorInt -import androidx.fragment.app.FragmentActivity -import androidx.recyclerview.widget.DividerItemDecoration -import androidx.recyclerview.widget.LinearLayoutManager -import androidx.recyclerview.widget.RecyclerView -import androidx.recyclerview.widget.ThemeColorRecyclerView -import com.jaredrummler.android.colorpicker.ColorPickerDialog -import com.jaredrummler.android.colorpicker.ColorPickerDialogListener -import org.autojs.autojs.core.pref.Pref -import org.autojs.autojs.theme.ThemeColor -import org.autojs.autojs.theme.ThemeColorHelper -import org.autojs.autojs.theme.app.ColorSelectBaseActivity.Companion.customColorPosition -import org.autojs.autojs.util.ColorUtils -import org.autojs.autojs6.R - -class ColorSettingRecyclerViewLegacy : ThemeColorRecyclerView { - - constructor(context: Context) : super(context) - - constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) - - constructor(context: Context, attrs: AttributeSet?, defStyle: Int) : super(context, attrs, defStyle) - - private var mOnItemClickListener: ColorSelectBaseActivity.OnItemClickListener? = null - - private var mSelectedPosition = ColorSelectBaseActivity.SELECT_NONE - - val selectedThemeColor: ThemeColor? - get() = when { - mSelectedPosition < 0 -> null - mSelectedPosition == customColorPosition -> customColor - else -> context.getColor(ColorSelectBaseActivity.colorItems[mSelectedPosition].first) - }?.let { ThemeColor(it) } - - private val customColor: Int - get() = Pref.getInt(ColorSelectBaseActivity.KEY_CUSTOM_COLOR, context.getColor(R.color.md_blue_grey_800)) - - private val mActualOnItemClickListener = OnClickListener { v -> - getChildViewHolder(v)?.let { holder -> - when (val pos = holder.bindingAdapterPosition) { - customColorPosition -> showColorPicker(v) - else -> { - setSelectedPosition(pos) - mOnItemClickListener?.onItemClick(v, pos) - } - } - } - } - - init { - adapter = Adapter() - layoutManager = LinearLayoutManager(context) - addItemDecoration(DividerItemDecoration(context, VERTICAL)) - } - - @SuppressLint("NotifyDataSetChanged") - fun setSelectedPosition(currentPosition: Int) { - if (mSelectedPosition != ColorSelectBaseActivity.SELECT_NONE) { - adapter!!.notifyItemChanged(mSelectedPosition) - mSelectedPosition = currentPosition - adapter!!.notifyItemChanged(currentPosition) - } else { - mSelectedPosition = currentPosition - adapter!!.notifyDataSetChanged() - } - Pref.putInt(ColorSelectBaseActivity.KEY_SELECTED_COLOR_INDEX, mSelectedPosition) - } - - fun setSelectedColor(colorPrimary: Int) { - for ((i, colorItem) in ColorSelectBaseActivity.colorItems.withIndex()) { - val color = when (i) { - customColorPosition -> customColor - else -> context.getColor(colorItem.first) - } - if (color == colorPrimary) { - setSelectedPosition(i) - return - } - } - mSelectedPosition = ColorSelectBaseActivity.SELECT_NONE - } - - private fun showColorPicker(v: View) { - ColorPickerDialog.newBuilder() - .setAllowCustom(true) - .setAllowPresets(false) - .setDialogType(ColorPickerDialog.TYPE_CUSTOM) - .setShowAlphaSlider(false) - .setDialogTitle(R.string.mt_color_picker_title) - .setColor(customColor) - .create() - .apply { - setColorPickerDialogListener(object : ColorPickerDialogListener { - override fun onColorSelected(dialogId: Int, @ColorInt color: Int) { - val c = color or -0x1000000 - Pref.putInt(ColorSelectBaseActivity.KEY_CUSTOM_COLOR, c) - setSelectedPosition(customColorPosition) - mOnItemClickListener?.onItemClick(v, customColorPosition) - } - - override fun onDialogDismissed(dialogId: Int) {} - }) - } - .show((context as FragmentActivity).supportFragmentManager, "Tag") - } - - fun setOnItemClickListener(onItemClickListener: ColorSelectBaseActivity.OnItemClickListener?) { - mOnItemClickListener = onItemClickListener - } - - private inner class Adapter : RecyclerView.Adapter() { - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { - return ViewHolder(LayoutInflater.from(context).inflate(R.layout.mt_color_setting_recycler_view_item, parent, false)) - } - - override fun onBindViewHolder(holder: ViewHolder, position: Int) { - val colorItem = ColorSelectBaseActivity.colorItems[position] - val (colorRes, nameRes) = colorItem - val color = when (position) { - customColorPosition -> customColor - else -> context.getColor(colorRes) - } - holder.apply { - setColor(color) - nameView.text = context.getString(nameRes) - nameView.setTextColor(context.getColor(R.color.color_selector_item_text)) - setChecked(mSelectedPosition == position) - } - } - - override fun getItemCount() = ColorSelectBaseActivity.colorItems.size - - } - - private inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - - var colorView: ImageView - var nameView: TextView - - init { - itemView.setOnClickListener(mActualOnItemClickListener) - colorView = itemView.findViewById(R.id.color) - nameView = itemView.findViewById(R.id.name) - } - - fun setChecked(checked: Boolean) { - if (checked) { - colorView.setImageResource(R.drawable.mt_ic_check_white_36dp) - val selectedThemeColorRes = selectedThemeColor?.colorPrimary?.let { - if (ColorUtils.isLuminanceLight(it)) R.color.day else R.color.night - } ?: R.color.night_day - colorView.imageTintList = ColorStateList.valueOf(context.getColor(selectedThemeColorRes)) - } else { - colorView.setImageDrawable(null) - } - } - - fun setColor(c: Int) = ThemeColorHelper.setBackgroundColor(colorView, c) - - } - -} \ No newline at end of file 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 c76f4a97..c5d76646 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 @@ -3,13 +3,12 @@ package org.autojs.autojs.theme.widget; import android.content.Context; import android.content.res.ColorStateList; import android.util.AttributeSet; - import com.google.android.material.floatingactionbutton.FloatingActionButton; - import org.autojs.autojs.theme.ThemeColor; import org.autojs.autojs.theme.ThemeColorManager; import org.autojs.autojs.theme.ThemeColorMutable; import org.autojs.autojs.util.ColorUtils; +import org.autojs.autojs.util.ViewUtils; import org.autojs.autojs6.R; /** @@ -41,7 +40,7 @@ public class ThemeColorFloatingActionButton extends FloatingActionButton impleme int colorAccent = color.colorAccent; int colorForContrast = ColorUtils.adjustColorForContrast(getContext().getColor(R.color.window_background), colorAccent, 1.15); setBackgroundTintList(ColorStateList.valueOf(colorForContrast)); - var tintColorRes = ColorUtils.isLuminanceLight(colorForContrast) + var tintColorRes = ViewUtils.isLuminanceLight(colorForContrast) ? R.color.fab_tint_dark : R.color.fab_tint_light; var tintColor = getResources().getColor(tintColorRes, null); diff --git a/app/src/main/java/org/autojs/autojs/theme/widget/ThemeColorToolbar.kt b/app/src/main/java/org/autojs/autojs/theme/widget/ThemeColorToolbar.kt index f3eae77d..c5a49e13 100644 --- a/app/src/main/java/org/autojs/autojs/theme/widget/ThemeColorToolbar.kt +++ b/app/src/main/java/org/autojs/autojs/theme/widget/ThemeColorToolbar.kt @@ -5,9 +5,8 @@ import android.util.AttributeSet import androidx.appcompat.widget.Toolbar import org.autojs.autojs.theme.ThemeColor import org.autojs.autojs.theme.ThemeColorManager.add -import org.autojs.autojs.theme.ThemeColorManager.getDayOrNightColorByLuminance -import org.autojs.autojs.theme.ThemeColorManager.isThemeColorLuminanceLight import org.autojs.autojs.theme.ThemeColorMutable +import org.autojs.autojs.util.ViewUtils import org.autojs.autojs.util.ViewUtils.applyColorFilterWith import org.autojs.autojs.util.ViewUtils.onceGlobalLayout import org.autojs.autojs6.R @@ -36,21 +35,22 @@ open class ThemeColorToolbar : Toolbar, ThemeColorMutable { setTitleTextAppearance(context, R.style.TextAppearanceMainTitle) } - override fun setThemeColor(color: ThemeColor) { - onceGlobalLayout { applyThemeColor(color) } + override fun setThemeColor(themeColor: ThemeColor) { + onceGlobalLayout { applyThemeColor(themeColor) } } - private fun applyThemeColor(color: ThemeColor) { - val aimColor = getDayOrNightColorByLuminance(context) + private fun applyThemeColor(themeColor: ThemeColor) { + val currentThemeColor = themeColor.colorPrimary + val tintColor = ViewUtils.getDayOrNightColorByLuminance(context, currentThemeColor) - setBackgroundColor(color.colorPrimary) - setTitleTextColor(aimColor) - setSubtitleTextColor(aimColor) + setBackgroundColor(currentThemeColor) + setTitleTextColor(tintColor) + setSubtitleTextColor(tintColor) - navigationIcon?.let { navigationIcon = it.applyColorFilterWith(aimColor) } - collapseIcon?.let { collapseIcon = it.applyColorFilterWith(aimColor) } - overflowIcon?.let { overflowIcon = it.applyColorFilterWith(aimColor) } + navigationIcon?.let { navigationIcon = it.applyColorFilterWith(tintColor) } + collapseIcon?.let { collapseIcon = it.applyColorFilterWith(tintColor) } + overflowIcon?.let { overflowIcon = it.applyColorFilterWith(tintColor) } - popupTheme = if (isThemeColorLuminanceLight()) R.style.PopupMenuThemeLight else R.style.PopupMenuThemeDark + popupTheme = if (ViewUtils.isLuminanceLight(currentThemeColor)) R.style.PopupMenuThemeLight else R.style.PopupMenuThemeDark } } 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 35a186ac..cfa0faf7 100644 --- a/app/src/main/java/org/autojs/autojs/ui/BaseActivity.kt +++ b/app/src/main/java/org/autojs/autojs/ui/BaseActivity.kt @@ -17,7 +17,6 @@ import org.autojs.autojs.theme.ThemeChangeNotifier import org.autojs.autojs.theme.ThemeColorManager import org.autojs.autojs.util.LocaleUtils import org.autojs.autojs.util.ViewUtils -import org.autojs.autojs6.BuildConfig import org.autojs.autojs6.R /** @@ -48,6 +47,10 @@ abstract class BaseActivity : AppCompatActivity() { ThemeChangeNotifier.themeChanged.observe(this) { initThemeColors() + if (handleStatusBarThemeColorAutomatically) { + ThemeColorManager.setStatusBarBackgroundColor(this) + setUpStatusBarAppearanceLightByThemeColor() + } } // @Dubious by SuperMonster003 on Oct 28, 2024. @@ -71,7 +74,7 @@ abstract class BaseActivity : AppCompatActivity() { override fun onStart() { super.onStart() initThemeColors() - if (handleStatusBarThemeColorAutomatically && !BuildConfig.isInrt) { + if (handleStatusBarThemeColorAutomatically) { ThemeColorManager.addActivityStatusBar(this) setUpStatusBarAppearanceLightByThemeColor() } @@ -95,7 +98,7 @@ abstract class BaseActivity : AppCompatActivity() { } protected fun setUpStatusBarAppearanceLightByThemeColor() { - ViewUtils.setStatusBarAppearanceLight(this, ThemeColorManager.isThemeColorLuminanceDark()) + ViewUtils.setStatusBarAppearanceLight(this, ThemeColorManager.isLuminanceDark()) } } \ No newline at end of file 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 aa994b97..04481835 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 @@ -5,9 +5,6 @@ import android.annotation.SuppressLint import android.content.Context import android.content.Intent import android.content.pm.PackageManager -import android.content.res.ColorStateList -import android.graphics.PorterDuff -import android.graphics.PorterDuffColorFilter import android.os.Bundle import android.os.Handler import android.os.Looper @@ -65,6 +62,9 @@ import org.autojs.autojs.ui.widget.SearchViewItem import org.autojs.autojs.util.StringUtils.key import org.autojs.autojs.util.UpdateUtils import org.autojs.autojs.util.ViewUtils +import org.autojs.autojs.util.ViewUtils.onceGlobalLayout +import org.autojs.autojs.util.ViewUtils.setMenuIconsColorByThemeColorLuminance +import org.autojs.autojs.util.ViewUtils.setNavigationIconColorByThemeColorLuminance import org.autojs.autojs.util.WorkingDirectoryUtils import org.autojs.autojs6.R import org.autojs.autojs6.databinding.ActivityMainBinding @@ -278,7 +278,8 @@ class MainActivity : BaseActivity(), DelegateHost, HostActivity { } private fun setUpToolbarColors() { - ViewUtils.setToolbarMenuIconsColorByThemeColorLuminance(this, mToolbar) + mToolbar.setMenuIconsColorByThemeColorLuminance(this) + mToolbar.setNavigationIconColorByThemeColorLuminance(this) mSearchViewItem?.initThemeColors() } @@ -287,7 +288,7 @@ class MainActivity : BaseActivity(), DelegateHost, HostActivity { val tabSelectedColor: Int val tabSelectedIndicatorColor: Int when { - ThemeColorManager.isThemeColorLuminanceLight() -> { + ThemeColorManager.isLuminanceLight() -> { tabNormalColor = getColor(R.color.tab_text_dark) tabSelectedColor = getColor(R.color.tab_selected_text_dark) tabSelectedIndicatorColor = getColor(R.color.tab_indicator_dark) @@ -399,11 +400,11 @@ class MainActivity : BaseActivity(), DelegateHost, HostActivity { private fun setUpSearchMenuItem(searchMenuItem: MenuItem) { mSearchViewItem = object : SearchViewItem(this, searchMenuItem) { override fun onMenuItemActionExpand(item: MenuItem): Boolean { - setUpToolbarCollapseIconColor() if (isCurrentPageDocs) { mDocsSearchItemExpanded = true mLogMenuItem.setIcon(R.drawable.ic_ali_up) } + mToolbar.onceGlobalLayout { setUpToolbarColors() } return super.onMenuItemActionExpand(item) } @@ -431,18 +432,6 @@ class MainActivity : BaseActivity(), DelegateHost, HostActivity { } } - private fun setUpToolbarCollapseIconColor() { - val collapseIcon = mToolbar.collapseIcon - if (collapseIcon != null) { - val isThemeColorLuminanceLight = ThemeColorManager.isThemeColorLuminanceLight() - val fullColor = getColor(if (isThemeColorLuminanceLight) R.color.day_full else R.color.night_full) - collapseIcon.setTintList(ColorStateList.valueOf(fullColor)) - collapseIcon.setTint(fullColor) - collapseIcon.colorFilter = PorterDuffColorFilter(fullColor, PorterDuff.Mode.SRC_IN) - mToolbar.collapseIcon = collapseIcon - } - } - private fun submitForwardQuery() { val event = QueryEvent.FIND_FORWARD EventBus.getDefault().post(event) diff --git a/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerFragment.kt b/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerFragment.kt index 8dde8bac..1fad5621 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerFragment.kt +++ b/app/src/main/java/org/autojs/autojs/ui/main/drawer/DrawerFragment.kt @@ -1,5 +1,6 @@ package org.autojs.autojs.ui.main.drawer +import android.annotation.SuppressLint import android.content.Context import android.content.Intent import android.os.Bundle @@ -29,6 +30,7 @@ import org.autojs.autojs.pluginclient.JsonSocketServer import org.autojs.autojs.service.AccessibilityService import org.autojs.autojs.service.ForegroundService import org.autojs.autojs.service.NotificationService +import org.autojs.autojs.theme.ThemeChangeNotifier import org.autojs.autojs.theme.app.ColorSelectBaseActivity import org.autojs.autojs.ui.floating.CircularMenu import org.autojs.autojs.ui.floating.FloatyWindowManger @@ -102,6 +104,12 @@ open class DrawerFragment : Fragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + @SuppressLint("NotifyDataSetChanged") + ThemeChangeNotifier.themeChanged.observe(this) { + mThemeColorItem.subtitle = ColorSelectBaseActivity.getCurrentColorSummary(mContext) + mDrawerMenu.adapter?.notifyDataSetChanged() + } + mContext = requireContext() mActivity = requireActivity() as MainActivity 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 ef658922..901ff581 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 @@ -24,7 +24,6 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import org.autojs.autojs.ui.BaseActivity -import org.autojs.autojs.util.ColorUtils import org.autojs.autojs.util.DisplayUtils import org.autojs.autojs.util.ViewUtils import org.autojs.autojs6.R @@ -41,7 +40,7 @@ abstract class BaseDisplayContentActivity : BaseActivity() { abstract var highlightGrammarName: String abstract var highlightThemeLanguage: String - open var themeColorDayNight = R.color.md_blue_grey_50 to R.color.md_blue_grey_900 + open var themeColorDayNight = R.color.md_blue_gray_50 to R.color.md_blue_gray_900 private lateinit var internalTextView: TextView private lateinit var internalFabView: FloatingActionButton @@ -145,14 +144,14 @@ abstract class BaseDisplayContentActivity : BaseActivity() { if (ViewUtils.isNightModeYes(this)) { internalFabView.backgroundTintList = ColorStateList.valueOf(themeColorNight) - internalFabView.imageTintList = ColorStateList.valueOf(if (ColorUtils.isLuminanceDark(themeColorNight)) getColor(R.color.night) else getColor(R.color.day)) + internalFabView.imageTintList = ColorStateList.valueOf(if (ViewUtils.isLuminanceDark(themeColorNight)) getColor(R.color.night) else getColor(R.color.day)) ViewUtils.setStatusBarBackgroundColor(this, themeColorNight) - ViewUtils.setStatusBarAppearanceLight(this, ColorUtils.isLuminanceDark(themeColorNight)) + ViewUtils.setStatusBarAppearanceLight(this, ViewUtils.isLuminanceDark(themeColorNight)) } else { internalFabView.backgroundTintList = ColorStateList.valueOf(themeColorDay) - internalFabView.imageTintList = ColorStateList.valueOf(if (ColorUtils.isLuminanceDark(themeColorDay)) getColor(R.color.night) else getColor(R.color.day)) + internalFabView.imageTintList = ColorStateList.valueOf(if (ViewUtils.isLuminanceDark(themeColorDay)) getColor(R.color.night) else getColor(R.color.day)) ViewUtils.setStatusBarBackgroundColor(this, themeColorDay) - ViewUtils.setStatusBarAppearanceLight(this, ColorUtils.isLuminanceDark(themeColorDay)) + ViewUtils.setStatusBarAppearanceLight(this, ViewUtils.isLuminanceDark(themeColorDay)) } } 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 d55daa28..096cfae4 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 @@ -11,7 +11,6 @@ import androidx.annotation.ColorInt import androidx.annotation.ColorRes import org.autojs.autojs.theme.ThemeColorManager import org.autojs.autojs.theme.ThemeColorManagerCompat -import org.autojs.autojs.util.ColorUtils import org.autojs.autojs.util.FileUtils import org.autojs.autojs6.R import kotlin.math.roundToInt diff --git a/app/src/main/java/org/autojs/autojs/ui/widget/SearchViewItem.java b/app/src/main/java/org/autojs/autojs/ui/widget/SearchViewItem.java index bc48d307..eaf4d56f 100644 --- a/app/src/main/java/org/autojs/autojs/ui/widget/SearchViewItem.java +++ b/app/src/main/java/org/autojs/autojs/ui/widget/SearchViewItem.java @@ -43,7 +43,7 @@ public class SearchViewItem implements MenuItemCompat.OnActionExpandListener, Se } public void initThemeColors() { - boolean isThemeColorLuminanceLight = ThemeColorManager.isThemeColorLuminanceLight(); + boolean isThemeColorLuminanceLight = ThemeColorManager.isLuminanceLight(); int fullColor = mActivity.getColor(isThemeColorLuminanceLight ? R.color.day_full : R.color.night_full); int hintColor = mActivity.getColor(isThemeColorLuminanceLight ? R.color.day : R.color.night); diff --git a/app/src/main/java/org/autojs/autojs/ui/widget/ToolbarMenuItem.kt b/app/src/main/java/org/autojs/autojs/ui/widget/ToolbarMenuItem.kt index b14b08a1..311cca88 100644 --- a/app/src/main/java/org/autojs/autojs/ui/widget/ToolbarMenuItem.kt +++ b/app/src/main/java/org/autojs/autojs/ui/widget/ToolbarMenuItem.kt @@ -30,13 +30,13 @@ class ToolbarMenuItem : LinearLayout { } private val colorEnabled: Int - get() = when (ThemeColorManager.isThemeColorLuminanceLight()) { + get() = when (ThemeColorManager.isLuminanceLight()) { true -> ContextCompat.getColor(context, R.color.toolbar_menu_item_enabled_dark) else -> ContextCompat.getColor(context, R.color.toolbar_menu_item_enabled_light) } private val colorDisabled: Int - get() = when (ThemeColorManager.isThemeColorLuminanceLight()) { + get() = when (ThemeColorManager.isLuminanceLight()) { true -> ContextCompat.getColor(context, R.color.toolbar_menu_item_disabled_dark) else -> ContextCompat.getColor(context, R.color.toolbar_menu_item_disabled_light) } diff --git a/app/src/main/java/org/autojs/autojs/util/ColorUtils.kt b/app/src/main/java/org/autojs/autojs/util/ColorUtils.kt index 86f9b844..adc61c80 100644 --- a/app/src/main/java/org/autojs/autojs/util/ColorUtils.kt +++ b/app/src/main/java/org/autojs/autojs/util/ColorUtils.kt @@ -14,7 +14,6 @@ import androidx.core.graphics.ColorUtils import org.autojs.autojs.app.GlobalAppContext import org.autojs.autojs.core.image.ColorTable import org.autojs.autojs.theme.ThemeColor -import org.autojs.autojs6.R import kotlin.math.pow import kotlin.math.roundToInt import kotlin.text.RegexOption.IGNORE_CASE @@ -281,7 +280,7 @@ object ColorUtils { * */ @JvmStatic - fun isLuminanceLight(@ColorInt color: Int) = luminance(color) > 0.179 + fun isLuminanceLight(@ColorInt color: Int) = luminance(color) >= 0.179 @JvmStatic fun isLuminanceDark(@ColorInt color: Int) = !isLuminanceLight(color) 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 c1a167db..6a64905a 100644 --- a/app/src/main/java/org/autojs/autojs/util/ViewUtils.kt +++ b/app/src/main/java/org/autojs/autojs/util/ViewUtils.kt @@ -44,6 +44,8 @@ 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 org.autojs.autojs6.R.color.day +import org.autojs.autojs6.R.color.night import kotlin.math.roundToInt /** @@ -170,6 +172,28 @@ object ViewUtils { activity.window.addFlags(flags) } + @JvmStatic + @JvmOverloads + fun isLuminanceLight(color: Int, backgroundColorMatters: Boolean = true) = when { + !backgroundColorMatters -> ColorUtils.isLuminanceLight(color) + !isNightModeEnabled -> ColorUtils.luminance(color) >= 0.224 + else -> ColorUtils.luminance(color) >= 0.141 + } + + @JvmStatic + @JvmOverloads + fun isLuminanceDark(color: Int, backgroundColorMatters: Boolean = true) = !isLuminanceLight(color, backgroundColorMatters) + + @JvmStatic + fun getDayOrNightColorByLuminance(context: Context, color: Int): Int { + return context.getColor(if (isLuminanceLight(color)) day else night) + } + + @JvmStatic + fun getDayOrNightColorResByLuminance(color: Int): Int { + return if (isLuminanceLight(color)) day else night + } + @JvmStatic fun isStatusBarAppearanceLight(activity: Activity): Boolean { return !isStatusBarAppearanceDark(activity) @@ -191,7 +215,7 @@ object ViewUtils { } fun setStatusBarAppearanceLightByColorLuminance(activity: Activity, aimColor: Int) { - val shouldBeLight = ColorUtils.isLuminanceDark(aimColor) + val shouldBeLight = isLuminanceDark(aimColor) setStatusBarAppearanceLight(activity, shouldBeLight) } @@ -472,14 +496,6 @@ object ViewUtils { toolbar.setTitlesTextColorByColorLuminance(context, aimColor) } - @JvmStatic - fun getDayOrNightColorByLuminance(context: Context, aimColor: Int): Int = context.getColor(getDayOrNightColorResByLuminance(aimColor)) - - @JvmStatic - fun getDayOrNightColorResByLuminance(aimColor: Int): Int { - return if (ColorUtils.isLuminanceLight(aimColor)) R.color.day else R.color.night - } - @JvmStatic fun showToast(context: Context, stringRes: Int) = showToast(context, stringRes, false) diff --git a/app/src/main/res/drawable/ic_color_library_custom.png b/app/src/main/res/drawable/ic_color_library_custom.png new file mode 100644 index 0000000000000000000000000000000000000000..0103cd56228e528e75a7f6ce335c916533c06855 GIT binary patch literal 6806 zcmeHMYgAL$wq5}=DhgU!QNe(vYArR`>fs%bqEZhBkP6`?B#4U2Q!xa>BT;J6^72uO z%FAP_NJ2;eNgxo2T19+7Q8xiX60FtW<`J;jAOVuI=;%FnjQi(|amP6K#~JrWMppKi zbM3j-n(Le2H*&7#+TXy}h%FgM2!SWr%UDS^j*?w*rb}n*d zufk=T9eXd$d27m{E*H&nMVERn@|SxqS-R<`zsNOoW%f)~(dfvC33&3lrP~;Q#})u= zS%(9_;)DN)fh)7>bm3Yz;frr7#R6R&szf5W%^~zEVpU>Oa)8nSu{WFJlc=0 zMdbcUeIp|QtGbcf-`5v*pe!bD^X+|L7DKH#xgq8pV${)SAbix$Rq>+&C5^g^>sNjR z)Ndw{i<~x!Li4Gm5jC6{O5!uTFg-hb2N>y!z+|cy7Ks!EiCpsWCM;vIP}hOByM3FpaDg;d z9Kd}hmffkuvAn0=pl6X1vv;<>3B^vY-GST%kv0g3?ZCa75k|{A9}TGaR$QNk z{x_pXZsq_7uCf=M)dRt(@;N#p4AEduub3Il*2d4`F1MF)V)F_6wFK7Vh%(3S8YVb& z{5pe*^($1Dqs^tYs7v2_<1H1xb1IHDY_@ikeoB#{F)P3pHa>*1_2|TT-1zO2amG^D zRg<;SK-~B*rQ>)2S2KO)w9f+RMLf?G3?F*vc3qH(sBPsGgkBF76OR>ey8ZXFTo_O zMJyEG|Jbx#>5t8#v0Rzx>SEUPzHbzKT_<{WS<9BL-4(ZpeSLi{wGWTFxw+*HaGG!T zzb|Z2oGV&qG=7DkI%@R=!;PlCA$;uHx*)mlR9snSQLw`rk_m`Y7jtZENIOgu?TeSP zA~rYnMAdN1UD6hU9$A2}f0^eqUUB&0n;^}PYq1$fqx5x*(ZSWiFTt(~Fyx&h!&B$7 zsN=f4gn9RFpAce7(0Wi3uNCgEO?Z7K4~GLeivhTN4gl8T{~!Fh3BO#xCBHfqH~RYS zond2vepizHN;#Rh8pu9}+usVe6I8c3tZC8jmp{5#N|gFuf1VB_}Y|@2PMCLG;ig_ z3f5GOH9ou!1gn(_l=U;5w5V~VlxZW_0IKVYiITxHAngw8FF0x$iTQScPs@VjD6A9Z zZ?4+{szvk$an#eZ{bM5FzwO!yK=mW>FIpMa7xWtM!O{^oP6V;e8B|vWkSU>(shbY* zzY|#Dk(Pt$IXw$mvvUhNDQ_tb48Jty=`q9kKagZQkN9{-duJ<Bj#d$)Z)ja&oj-05w`hTWd}tlS%(*?-b9SyXBDOXb z$h(46v>j|9y-@z#W#nb~=qi??`~nFF;#*@y{Wp1KG=*{U#Y(a#qWf+M7&%zU2*;kJ z=%3dl> z)Nlw+-8NeUg$ur};@4v^`4xCx4BeW;|71j@O`izqq zOmbEvHiUkErygwKtCFyyZlBbz;gKc$N?<8|oHhnh3hfgs#|#Jtc6IfIn)a{dxBrwyOX8~VIL#S;TIvy+4E0CWa`U*poL5LK`g6xjnQpkCa#nwW;)%^v&giNr z&DljWr3n(nlw@KXMKv7fR2nUro7KPIk78I^B&GR?L;-Ep^v-vy+$yJa;m3FS_LKqY zuBn>VzccpGa>*-_hc7xA{Nnj>T=S45o-$NY!#GHzaY3_Q>$ya(?)~Nx<6Fb`R%Ly} zhgl~6Sy6;%De75t6Cw(Rw1-1<&c`2mC6VYH5GGd{DA8;ooH#4%u~WJU7YpBE%-Yd9 z;4FA+Fm+#&`yo&Vi{cty8q_>TUGfHgRd%hejGVC~(Ge#&!^@nr1T&&b0j$2YUx9&E zMi7?7>2fKpy8N(&V;O9y)k&YGga2W;1rYX;*t$pF)@NN{+=sZUoHrU#S42$f9Kd9f zeFdm@+YU05xQaQt`@q@Dz3m(|S*38ve77BZzTci=SRmCWytbgGI&B5z!C5}aVfEoz z4P-%=W}50j=+7{LOj&dCM;oOhonHXrt?VjByvKv~ZZU`P6~^hTbNX|d;(nr=g>A{$ zb#$8NAxnDI6*$v^-bX?T2qtEK1%i&mz_}Bc9~&S2Suxp@LOP(eOwP3+wgc(g z$nZI;qdtG?BP5`ZV3cTvlWt%fRWc8fN<*^ZFhO^YwCMv7fAukUV}p2~Lv>D9O?D%4 zBQ|R6l7j+;kpg5?g>)59Fk?b|BfOyKRMKttOd!A@b-hr=${`LT#$=h z$1C>U`|ajs58?0>_SVpus+wvcWskK)PPqt&TbtY3WU@}xD~}At)QKYcO^uDJozWgJ zt!lQ>ysw!VQ_nQpOzrF8ikaA%A73|IYEbW9k|FOx76z2Qo3Sc7y4-BUEy4qg)b1Zm zHwC?^%A#C|#Q#UMge6fpGXRVI2h{i}>UBRtFo>v}W$d*c5DX7*oNVkmJDHuY@T`}` zjOb~6Y*KecLWogsQ>k3;F`UM9s!ERsV=C2&3YxaI8xmHS8mCrR75kL7)TXEUbetiT zxy81b=C236CQjsvTZt}=<&Jm#tY%*s$2MjU_6r;eaa4tk?-LYRD%TO?m^t?(B^|A@$0r zC`p!fxxfY*y}OBq_?Y7=C%Vb!msoj06UZ>TJ1EhLmTK{SXheZVzt^E6Xw;n9$VjA( z4tY`AOhCz-epE%)zm`I=1lM#LE?|z2T0+x}5(y)`qBZl&`PARw8c34p3Nn>f zYZGskU)md7e-iqS*r>P4^08BBAG{_dFu0ByPAeN}l0_fkbM&wl559pLEw<+*CD9g> zLmyd%lQbUN7|R=*On`jwHR2Rvplfaa_L9ddPhz?EK|?0zoUWx;&6nBbN6D z_Un@ zVRJmRGp0TI={^~1`z)5M;dr>DT2Ds*6KPp?v}3fHiy{YZ>uqrcEN^uuQ;um9t7|;d zXAVHs+>DrVi_J>&N@D-p<-Rq)(=**I`(0|ac<{HWF1OdRn2gNPmPo@)yvkFN)#drL ztNiUmp(aKm8B0MKmDx-_R#*}J=2gb*fLD)vc%pN1?)h9~scx!iZx#o6pts|7S{^%y zwIgmZ7ZY9&w}IX^UZxR9Cc{N*+yPXuEB+&z75^D6mw&N}zb7nWS>gH2OelG_u9@q1 zW5`pe^5sBg7G<~qwb7HIo*Y@*p>Z8vxC}R5duO;P`vapVhqZBuzcR<-E=^vZ-1%Y5~`+pf0BLgl1& zucL`nzL0N_qSqnMe*!hVJ|{M9cn~xH8?5P@IX-6PIO+z90&SrGWDnz|8Vx49AAz*h zA}m)nP@pnS{x4zW#>s6>pkaZe_a2cl)NT`74a-e&u;$2Y1YgASV0>ua@**|eY7%7r z#4rr5CUVN%(-yK;yWg0wGH_k5LscML2RM4F79e!>Z7J}1djYLt=N={rUGT!qxba8b z#z7T(vs6$X2z#G%fK7<+>iV1=;DgtNQWzD7+NLF_yy%xe^&P7mi))&H?e)@WBoV zS&sVPHe}^Klc5dr4?%F34M|EY4mNB}!h_Phb|GW5C0=XWTrGEeLrqOhUD>qxw_nM! z!^*IF`B^lK*Cn?A!$WBpKYaA4&74>=lj>(WS`ZrF+;R|xJ@CLY(4U^MliO8i1cgrn zvSN}=sSKdc1o%vDRP6)9FZTKOA-8o?2fHF31@ z4#Ze(BMSOSrNSby27_tAOT>-B|nbATuBq1|Te3oGgL` zEgMSF_)?~fHJ^v`Dmfv1?H+n=pfL~xDk%!K?%|pHqc~@GX4qU_H!PW7wDP^6zI!Tw z>KSj++Q=AqxDJG7I2^$?)!h%ErdZ%{gjQd!XZ6^ZX=b43d2>YByD5iVW-m9h?$K%3 zdsGLHUXTi_@-Kt%m4}wFIG%@TRl9*RG9_{yR&6`PFdf{W4sMIef@L3snmQbz6`ZnQ z<2OOB-H^vs)ezialjA$srM<+fX{uXkBJFODIK*ZZ>0y<%Nt)Ip zh{QnxD`0n9f`o_;&BtvG8v5UR-dybe9!L#S=gI9SB`G7TVxAH}gRAU!Z|)T2^(;Gj zFn4NJq;oewl1x?(d}gGCPNkJX0vuU zfjpNBg;ENP#ri7b=C?eY8Ruvp1CQr_LD*c)(<3=J$G&BVxyZGnt05;g%x!B0p6WS9 zkqC5m;l?EU!>-AI-ipqksBxj@{3;?pI~~q7BIgHBB^W#DeLn!PQ{Ci{6|=d>Onae` zboIVqs2>{1?I(^cG@>$7Ih5+LC{i;r^H)%vYZWeWRIwRjgJF)}#el@}j3CcQ(s4N7 z#f)I=1zNzyyL?`V3r$KoLR)*XogA{Xd;xVAKauv?RIX?z+%2f^oeAHNcslV>uHhQU zk%)D&dE)iktw!tdL*f=)Ic$taEQ4MVnbkT3t-Lz8t<{KHuc$)~ZZLRp*?|tLT$f4T zG}SWFu?nuG$aS~;Llf!b`vKG{V(r%PU(mYRSD=~)x8s(E8PxXdr^>O9fc$L>>cKM$ zPv3#D&`CSI(W)U1Y92o4YxoE$;aJ$=!|_H`LPfA*^taKmjm)_b^clH*#lGY3Qs3Uf z;X1n!UZ;flw1dL0@d%Rekb^S5`}9mv;hN;Kgh===%<#SRe_LBE&>2(!cKb*0-%C5Rlq_u>@{)W?KkYD5#i(&4S?2P=O0|!W-Sr`#MSVg zorf`kZh%IP)K_TFJxUa-B~t6WA~18%0@iL(aai6HU}PLWWSR530>r_2!NlcrFh^sf_M4F&CnziTTNm zz7X3$fG^6)ZXIwPdYQfaj4n{dpe(1T7*rS9#y#Q>4EmK2%Qfl<+JyRa+s>Ee%2h5`HRk-e%&ZtNM9enULKSXFsd1(Y`6VKOStB^v7*rGZjT zJ|we-6E;^72)K}nFtHMIqZ zV_Z<;-N}iDDjaf8eh^*Ephey=JZ)uM(nJOhIpU!e3fzj4U`R$ottZ0*4f$mJ*dSDs zCcfAog9n=@KR|Of0!oZL*%(L2nea&$FK?2l0gus#(10PEYArl$4`_6BGin#2-wbw; zIt*fupx%^knrV0*43pEulHy_#IQ7W{t+o{8+R8pYyarO8qhbk4;L`Ypq4+6L-j>AA zRN?&ule5JQ91;%Ef1l&;-*<}N^U4wxXQ0gYRT{wa#<=;&N}ELiUih)s5XZnb`f`SygTTsr?sgr4XC#mZjH%zuyMtES)_Zmq{c`+x?uURMz=2nb8P$)Ee$B)6 z6|D}z^H!Xbd-|1tF|>0`9URXV@3mhvy$FO49@Yi?`%RghqC+6nRXPbZT5lu(Q4Bq? zs;`&fB0mJ?)~eBgP2UVOP-*;b15ng!S>gO%8lU>PbW$G)un3Jmg#`faKrg{tM5jE= z08{+FCBQp3Q_SA7xIzmATNkT?;g2Kf4ad}x@|7KUI3;);QjvVgRanS9Qg5)n;!sM4QyU zJu_Ti_O!(wm>#dm^Iyr$Z+x=p@J2u**Y8^lB24MI;_McC7jrPt3kFkKCUGlj!p{{8 zLkmNRAg-i1wEW>x2@15c^UWJqEc@TS> z;86Cm1<2&spM=Fr-<at#1yohU+4ij}VpetceC?VHkg{Le57Ffe%Vajr34Me5=u!soH}9)6m^Z|8Vaob~RsacHVRBm;8B9zl zLx~FSp>6o<1nYh_SukyNS_SYwkcbKLnvh}N!a7C0i}cw&D?E5qZX$4irE*7UvkI?1H(Oi}AAiOS1Ah9&aMVtn zPEpObl}Hg66^}rYKO!W7U>|`8aqXN}D!h+15|N^J3Owlh;9*{xg#*B29{|Y3 zl+hlZYIiqwf!$6hrQnBOu0$G&M)cHp6$Y`&N-T7G60y09mI82d?Y~ar<{hdvur*_~ zQY*pYtmYt&H*(nw|9?lpRNTQ`l2kw03ekyG4xVHja&-#o$`PN0^BCeJ$lWdKHD4&q z6%WHvY zCB(K7$WhwK%E?(ZcIN6l2agz9Mx-LH^@Ph|iFNyatuy73UcfVxavp!J+AX-eOB=;* zhF1M;F|{6RoTTsJgmr?|wzCE}KeNl*=!J@zMc~e#@??E5^58n)siaJt-=5QK>>}-j z@{OL}3iL&5`jT<^$^`}Ud8k)p@fM;bzz4*Mc$1LLv{ zDH6A5s-;UgLeG$RjUB*~iRtMwbzV3_1Gce1lw*1Bl+Z=`1gZ>I?#6T!V9OnsDW>WZ z`gK%z`zI0tiq3-w4W!_LYAoONlk*>r_5UtzH-Iy}Nt1q_d}Iiya0Ce>RvKuJttTiY1nkn@x{iCTr( zr{4C4OnPF#sHT=P@aswb`fUv7{u%RQ8*b_P`CrZEf4#yXWr9Xsk3I8lKEI3o{3z$Y zNBw$wURV8cmR3Z;Yxm96U0nzYt4P#;A_#pd%#Rc>diLieS+LEg-oDcL#nS$_bk_J| zOk0{|U(gP#hnUt1CogZ_?yU%fNWas;SM^X87;s4+1yyleNEIj+-tMTz-6d zEZ8i-j$5@_;h*#p7`YXO_eGSv!I1q|s6#)N#z@rq(gFn=u;a(|vT>d-J5wYya?Nb1 zFZ&V^NgJHyo8tlJEc3dsyDAk5f016xy0@bFt38TI<^=rAKaI;8VCC*c9df4lW6ETH zvHWY#h2&ZYL!!-ioaV@PpToFJ88lG%$(+xe*%Q z?e3$3ly%zdtl27PB&E+@K*yv11KV&YhNerz#8(9d!DN<@C9ZywWvuMmS0pFBJ<+C^ z39G*EcM$t{n#^)AWwp}Df?@N*?&B5lq}Ew?k@eh~HBKLA>Qt~9XUQzzY;h8yW{a_C zkFqCuVEYEaJ?9H#9nnnP504i{M0!kFmJSY|6HQXipw+IH z&BR43{A4fxInO08;2j$yo~{ zs&JOnea;=mAAT$EelO2xy@UamdTihuSf1O(PLPxZ`yW~ego8eF4gWQXI^xy2Oof-6 zJM7>fh|Hye2jUs1b-24;Gk4g;1$cI2w6_||T+^!8*Rw10bGCQ*W`fdHCBr>n$GQNU zf#O*LFO+zHE>lxOWpmY zfc$6GFOa*7G#w)mE}idDyIT}(xOk+8XYS&!xdUaUi5EXID%~xFr7x2L{MYk-R}?|M zF4Do?WGL1Ho#Q+-tW@)(D39{XfCQ^2Tvt{WsAi(}FgY`lpriyXTptp?3Fk*g-KWD& z)OW!N1z7g1Ep392W6V~Q^}_U1A*Wzoz&#SRt+EWbc$rSR=!aX znPnYo8AVH^TDCe)b+W|P=6OxpAmE9ipr*z2&t7>oXEHK;W%E8uQih=p#(5~O=PpG( zXgoqBH!Z@F_H_SC@sjb0TWj==b=A-o_+gdsk=-bEzF(NUP3QNUMzG3V!RM!woZ97xqS6^uj9OPtStm!vA zFT|Xtr3X^p#=^$oUI&2ZE&-u3RB@yI5-#&Mhi21R;l%a|47sgNQD@OR)Me^^XYH{P zir0s;^dL=0hdynjN@Ar$+Q_jmSb8-nbS%6e3OFU!&Q&k#9K#`Vl48Oz zkK0|D%zdbi1a=O~^x?2kOuo&Oki-xrqj!Lg(Y4wP^WP9soV5z?h2msl^z2g(iHOJb zQMt?yhj6Sf-Rhu;;)?19dd@hiB1NMv(iaf@ZPgDT{gV_jagL%&_VM?C3wNmuW{$YI z?5rtoJJnQB64)so;I?p*-1_4|%ty>$nBvRxdlb{G>U)(Tm7J1zj8u=qE&HXfu!EHb z(65WVyy|Of^l^P-qb(7-wJhf-Z=nb1vTFCmGmREn**Y#O7{F46%G$x9~$@V|T`O#g7f6@6qot#aU1 zuz6^ILX3gsOeK~GZ#&Ku7s1DK17FV_Kw8KQvCu%~DcR@I@CE63;|2HrE;dA&oorpC z;F+O7q903H6e`*b3M(ChpEZkH13i=DTsp!)d+Tnv*hR`hebW6I6-!l-&of-eA82Vv*lFHy70>>7)+-B>RJs_DuZgZu+&*@KEk0(`1EOg_69*RF{~=#4S!D9 t^QhJ=#|JB`@$1R|a5??Um)zRs@M|xf@*b9!+ha!r@Lsn)#k>42{tfClVaWgh literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_color_library_preset.png b/app/src/main/res/drawable/ic_color_library_preset.png new file mode 100644 index 0000000000000000000000000000000000000000..220decda0b363a3a82a13bb7e6532ccf14ad68f2 GIT binary patch literal 5873 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 + app:color_verbose="#BDBDBD" + app:color_debug="#111214" + app:color_info="#43A047" + app:color_warn="#1976D2" + app:color_error="#C62828" + app:color_assert="#E254FF" /> diff --git a/app/src/main/res/layout/activity_settings_inrt.xml b/app/src/main/res/layout/activity_settings_inrt.xml index 396d7ecc..076d5a7d 100644 --- a/app/src/main/res/layout/activity_settings_inrt.xml +++ b/app/src/main/res/layout/activity_settings_inrt.xml @@ -20,7 +20,7 @@ app:titleTextColor="@color/day_full" app:subtitleTextColor="@color/day_full" android:theme="@style/ToolBarStyleInrt" - android:background="@color/md_blue_grey_50" + android:background="@color/md_blue_gray_50" app:contentInsetStartWithNavigation="0dp" app:contentInsetEndWithActions="2dp" app:titleTextAppearance="@style/TextAppearanceEditorTitle" diff --git a/app/src/main/res/layout/mt_activity_color_select_legacy.xml b/app/src/main/res/layout/mt_activity_color_libraries.xml similarity index 88% rename from app/src/main/res/layout/mt_activity_color_select_legacy.xml rename to app/src/main/res/layout/mt_activity_color_libraries.xml index d50ec451..5ea09791 100644 --- a/app/src/main/res/layout/mt_activity_color_select_legacy.xml +++ b/app/src/main/res/layout/mt_activity_color_libraries.xml @@ -32,10 +32,10 @@ - + android:layout_height="match_parent" + android:scrollbars="vertical" /> \ No newline at end of file diff --git a/app/src/main/res/layout/mt_activity_color_library.xml b/app/src/main/res/layout/mt_activity_color_library.xml new file mode 100644 index 00000000..ebb0b08d --- /dev/null +++ b/app/src/main/res/layout/mt_activity_color_library.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/mt_color_libraries_recycler_view_item.xml b/app/src/main/res/layout/mt_color_libraries_recycler_view_item.xml new file mode 100644 index 00000000..221321d3 --- /dev/null +++ b/app/src/main/res/layout/mt_color_libraries_recycler_view_item.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/mt_color_library_recycler_view_item.xml b/app/src/main/res/layout/mt_color_library_recycler_view_item.xml new file mode 100644 index 00000000..9784fbe7 --- /dev/null +++ b/app/src/main/res/layout/mt_color_library_recycler_view_item.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/preference_custom.xml b/app/src/main/res/layout/preference_custom.xml index db2002fd..8a3cc73b 100644 --- a/app/src/main/res/layout/preference_custom.xml +++ b/app/src/main/res/layout/preference_custom.xml @@ -3,9 +3,9 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" + android:minHeight="52dp" android:baselineAligned="false" android:gravity="center_vertical" - android:minHeight="52dp" android:orientation="horizontal" android:paddingEnd="?android:attr/scrollbarSize"> @@ -21,10 +21,9 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="start|center_vertical" - android:layout_marginBottom="12dp" - android:layout_marginEnd="6dp" + android:layout_marginVertical="12dp" android:layout_marginStart="16dp" - android:layout_marginTop="12dp" + android:layout_marginEnd="6dp" android:layout_weight="1" android:orientation="vertical"> @@ -36,7 +35,7 @@ android:fadingEdge="horizontal" android:fontFamily="sans-serif" android:maxLines="1" - android:textColor="?android:textColorPrimary" + android:textColor="@color/day_night_full" android:textSize="15sp" tools:text="@string/text_sample_string" /> @@ -47,7 +46,7 @@ android:layout_marginTop="2dp" android:fontFamily="sans-serif" android:maxLines="4" - android:textColor="?android:textColorSecondary" + android:textColor="@color/day_night_alpha_60" android:textSize="12sp" tools:text="@string/text_sample_string" /> diff --git a/app/src/main/res/menu/menu_color_libraries.xml b/app/src/main/res/menu/menu_color_libraries.xml new file mode 100644 index 00000000..48c5b304 --- /dev/null +++ b/app/src/main/res/menu/menu_color_libraries.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/menu_color_library.xml b/app/src/main/res/menu/menu_color_library.xml new file mode 100644 index 00000000..845f9504 --- /dev/null +++ b/app/src/main/res/menu/menu_color_library.xml @@ -0,0 +1,18 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/menu_color_select.xml b/app/src/main/res/menu/menu_color_select.xml index a57de813..ed8ba2ef 100644 --- a/app/src/main/res/menu/menu_color_select.xml +++ b/app/src/main/res/menu/menu_color_select.xml @@ -3,33 +3,9 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> - - - - - - - - diff --git a/app/src/main/res/menu/menu_color_select_legacy.xml b/app/src/main/res/menu/menu_color_select_legacy.xml deleted file mode 100644 index ed8ba2ef..00000000 --- a/app/src/main/res/menu/menu_color_select_legacy.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml index 373384ff..4dda7554 100644 --- a/app/src/main/res/menu/menu_main.xml +++ b/app/src/main/res/menu/menu_main.xml @@ -1,20 +1,21 @@ - + + android:id="@+id/action_log" + android:icon="@drawable/ic_ali_log" + android:title="@string/text_log" + app:showAsAction="ifRoom" /> + android:id="@+id/action_search" + android:icon="@drawable/ic_search_black_48dp" + android:title="@string/text_search" + android:imeOptions="actionSearch" + android:inputType="text" + app:actionViewClass="androidx.appcompat.widget.SearchView" + app:showAsAction="ifRoom|collapseActionView" /> \ No newline at end of file diff --git a/app/src/main/res/values-ar/material_design_colors_string.xml b/app/src/main/res/values-ar/material_design_colors_string.xml index 1ac0da45..8549a88c 100644 --- a/app/src/main/res/values-ar/material_design_colors_string.xml +++ b/app/src/main/res/values-ar/material_design_colors_string.xml @@ -272,30 +272,30 @@ براون (800) براون (900) - - غراي (50) - غراي (100) - غراي (200) - غراي (300) - غراي (400) - غراي (500) - غراي (600) - غراي (700) - غراي (800) - غراي (900) + + غراي (50) + غراي (100) + غراي (200) + غراي (300) + غراي (400) + غراي (500) + غراي (600) + غراي (700) + غراي (800) + غراي (900) أسود (1000) وايت (1000) - - ازرق رمادي (50) - ازرق رمادي (100) - ازرق رمادي (200) - ازرق رمادي (300) - ازرق رمادي (400) - ازرق رمادي (500) - ازرق رمادي (600) - ازرق رمادي (700) - ازرق رمادي (800) - ازرق رمادي (900) + + ازرق رمادي (50) + ازرق رمادي (100) + ازرق رمادي (200) + ازرق رمادي (300) + ازرق رمادي (400) + ازرق رمادي (500) + ازرق رمادي (600) + ازرق رمادي (700) + ازرق رمادي (800) + ازرق رمادي (900) \ No newline at end of file diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index e3bbf72d..7b974cf0 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -903,8 +903,25 @@ Switch to new layout Switch to legacy layout Search color - Locate current color + Locate current theme color New color library Color palette + WEB color library + CSS color library + Android color library + Material design color library + Default color library + Backgournd light + Background night + Color library + Default colors + Material colors + Android colors + CSS colors + WEB colors + Material + Default + Custom + Color palette diff --git a/app/src/main/res/values-en/android_colors_string.xml b/app/src/main/res/values-en/android_colors_string.xml index eab1f650..a13fca7e 100644 --- a/app/src/main/res/values-en/android_colors_string.xml +++ b/app/src/main/res/values-en/android_colors_string.xml @@ -3,18 +3,12 @@ Black Blue - Cyan - Aqua + Cyan / Aqua Dark gray - Dark grey Gray - Grey - Green - Lime + Green / Lime Light gray - Light grey - Magenta - Fuchsia + Magenta / Fuchsia Maroon Navy Olive diff --git a/app/src/main/res/values-en/css_colors_string.xml b/app/src/main/res/values-en/css_colors_string.xml index 3a5ad1c4..fe8141d1 100644 --- a/app/src/main/res/values-en/css_colors_string.xml +++ b/app/src/main/res/values-en/css_colors_string.xml @@ -20,13 +20,11 @@ Cornflower blue Corn silk Crimson - Cyan - Aqua + Cyan / Aqua Dark blue Dark cyan Dark goldenrod Dark gray - Dark grey Dark green Dark khaki Dark magenta @@ -38,13 +36,11 @@ Dark sea green Dark slate blue Dark slate gray - Dark slate grey Dark turquoise Dark violet Deep pink Deep sky blue Dim gray - Dim grey Dodger blue Fire brick Floral white @@ -54,7 +50,6 @@ Gold Goldenrod Gray - Grey Green Green yellow Honeydew @@ -72,21 +67,18 @@ Light cyan Light goldenrod yellow Light gray - Light grey Light green Light pink Light salmon Light sea green Light sky blue Light slate gray - Light slate grey Light steel blue Light yellow Lime Lime green Linen - Magenta - Fuchsia + Magenta / Fuchsia Maroon Medium aquamarine Medium blue @@ -134,7 +126,6 @@ Sky blue Slate blue Slate gray - Slate grey Snow Spring green Steel blue diff --git a/app/src/main/res/values-en/material_design_colors_string.xml b/app/src/main/res/values-en/material_design_colors_string.xml index 81f21f5d..45ed32df 100644 --- a/app/src/main/res/values-en/material_design_colors_string.xml +++ b/app/src/main/res/values-en/material_design_colors_string.xml @@ -272,30 +272,30 @@ Brown (800) Brown (900) - - Grey (50) - Grey (100) - Grey (200) - Grey (300) - Grey (400) - Grey (500) - Grey (600) - Grey (700) - Grey (800) - Grey (900) + + Gray (50) + Gray (100) + Gray (200) + Gray (300) + Gray (400) + Gray (500) + Gray (600) + Gray (700) + Gray (800) + Gray (900) Black (1000) White (1000) - - Blue grey (50) - Blue grey (100) - Blue grey (200) - Blue grey (300) - Blue grey (400) - Blue grey (500) - Blue grey (600) - Blue grey (700) - Blue grey (800) - Blue grey (900) + + Blue gray (50) + Blue gray (100) + Blue gray (200) + Blue gray (300) + Blue gray (400) + Blue gray (500) + Blue gray (600) + Blue gray (700) + Blue gray (800) + Blue gray (900) \ No newline at end of file diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 22cd61cf..4a72a5e9 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -899,8 +899,25 @@ Switch to new layout Switch to legacy layout Search color - Locate current color + Locate current theme color New color library Color palette + WEB color library + CSS color library + Android color library + Material design color library + Default color library + Backgournd light + Background night + Color library + Default colors + Material colors + Android colors + CSS colors + WEB colors + Material + Default + Custom + Color palette diff --git a/app/src/main/res/values-en/web_colors_string.xml b/app/src/main/res/values-en/web_colors_string.xml index bf0689ad..183cada3 100644 --- a/app/src/main/res/values-en/web_colors_string.xml +++ b/app/src/main/res/values-en/web_colors_string.xml @@ -85,7 +85,7 @@ Fuchsia Gainsboro Ghost white - Golden + Golden / Gold Goldenrod Grass green Gray @@ -107,7 +107,7 @@ Khaki Lapis lazuli Lavender - Lavender blue + Lavender blue / Periwinkle Lavender blush Lavender magenta Lavender mist @@ -129,7 +129,7 @@ Light violet Light yellow Lilac - Lime + Lime / Light lime Lime green Linen Magenta @@ -162,7 +162,7 @@ Moss green Mustard Navajo white - Navy + Navy / Navy blue Ocher Old lace Old rose diff --git a/app/src/main/res/values-es/material_design_colors_string.xml b/app/src/main/res/values-es/material_design_colors_string.xml index 85544d86..696fcdfb 100644 --- a/app/src/main/res/values-es/material_design_colors_string.xml +++ b/app/src/main/res/values-es/material_design_colors_string.xml @@ -272,30 +272,30 @@ Marrón (800) Marrón (900) - - Gris (50) - Gris (100) - Gris (200) - Gris (300) - Gris (400) - Grises (500) - Grises (600) - Grises (700) - Gris (800) - Gris (900) + + Gris (50) + Gris (100) + Gris (200) + Gris (300) + Gris (400) + Grises (500) + Grises (600) + Grises (700) + Gris (800) + Gris (900) Negro (1000) Blanco (1000) - - Gris azulado (50) - Gris azulado (100) - Gris azulado (200) - Gris azulado (300) - Gris azulado (400) - Gris azulado (500) - Gris azulado (600) - Gris azulado (700) - Gris azulado (800) - Gris azulado (900) + + Gris azulado (50) + Gris azulado (100) + Gris azulado (200) + Gris azulado (300) + Gris azulado (400) + Gris azulado (500) + Gris azulado (600) + Gris azulado (700) + Gris azulado (800) + Gris azulado (900) \ No newline at end of file diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 0c2055d5..84ee50e6 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -902,8 +902,25 @@ Switch to new layout Switch to legacy layout Search color - Locate current color + Locate current theme color New color library Color palette + WEB color library + CSS color library + Android color library + Material design color library + Default color library + Backgournd light + Background night + Color library + Default colors + Material colors + Android colors + CSS colors + WEB colors + Material + Default + Custom + Color palette diff --git a/app/src/main/res/values-fr/material_design_colors_string.xml b/app/src/main/res/values-fr/material_design_colors_string.xml index 103056b8..0077f221 100644 --- a/app/src/main/res/values-fr/material_design_colors_string.xml +++ b/app/src/main/res/values-fr/material_design_colors_string.xml @@ -273,29 +273,29 @@ Brun (900) - Gris (50) - Gris (100) - Gris (200) - Gris (300) - Gris (400) - Gris (500) - Gris (600) - Gris (700) - Gris (800) - Gris (900) + Gris (50) + Gris (100) + Gris (200) + Gris (300) + Gris (400) + Gris (500) + Gris (600) + Gris (700) + Gris (800) + Gris (900) Noir (1000) Blanc (1000) - Gris bleu (50) - Gris bleu (100) - Gris bleu (200) - Gris bleu (300) - Gris bleu (400) - Gris bleu (500) - Gris bleu (600) - Gris bleu (700) - Gris bleu (800) - Gris bleu (900) + Gris bleu (50) + Gris bleu (100) + Gris bleu (200) + Gris bleu (300) + Gris bleu (400) + Gris bleu (500) + Gris bleu (600) + Gris bleu (700) + Gris bleu (800) + Gris bleu (900) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 10da6968..78d8d1f2 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -902,8 +902,25 @@ Switch to new layout Switch to legacy layout Search color - Locate current color + Locate current theme color New color library Color palette + WEB color library + CSS color library + Android color library + Material design color library + Default color library + Backgournd light + Background night + Color library + Default colors + Material colors + Android colors + CSS colors + WEB colors + Material + Default + Custom + Color palette diff --git a/app/src/main/res/values-ja/material_design_colors_string.xml b/app/src/main/res/values-ja/material_design_colors_string.xml index cd90cc37..8fdb41c7 100644 --- a/app/src/main/res/values-ja/material_design_colors_string.xml +++ b/app/src/main/res/values-ja/material_design_colors_string.xml @@ -272,30 +272,30 @@ ブラウン (800) ブラウン (900) - - グレー (50) - グレー (100) - グレー (200) - グレー (300) - グレー (400) - グレー (500) - グレー (600) - グレー (700) - グレー (800) - グレー (900) + + グレー (50) + グレー (100) + グレー (200) + グレー (300) + グレー (400) + グレー (500) + グレー (600) + グレー (700) + グレー (800) + グレー (900) ブラック (1000) ホワイト (1000) - - ブルーグレー (50) - ブルーグレー (100) - ブルーグレー (200) - ブルーグレー (300) - ブルーグレー (400) - ブルーグレー (500) - ブルーグレー (600) - ブルーグレー (700) - ブルーグレー (800) - ブルーグレー (900) + + ブルーグレー (50) + ブルーグレー (100) + ブルーグレー (200) + ブルーグレー (300) + ブルーグレー (400) + ブルーグレー (500) + ブルーグレー (600) + ブルーグレー (700) + ブルーグレー (800) + ブルーグレー (900) \ No newline at end of file diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index e25fd111..113b92f2 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -902,8 +902,25 @@ Switch to new layout Switch to legacy layout Search color - Locate current color + Locate current theme color New color library Color palette + WEB color library + CSS color library + Android color library + Material design color library + Default color library + Backgournd light + Background night + Color library + Default colors + Material colors + Android colors + CSS colors + WEB colors + Material + Default + Custom + Color palette diff --git a/app/src/main/res/values-ko/material_design_colors_string.xml b/app/src/main/res/values-ko/material_design_colors_string.xml index 1ab74a81..e2be0afe 100644 --- a/app/src/main/res/values-ko/material_design_colors_string.xml +++ b/app/src/main/res/values-ko/material_design_colors_string.xml @@ -272,30 +272,30 @@ 브라운 (800) 브라운 (900) - - 회색 (50) - 회색 (100) - 회색 (200) - 회색 (300) - 회색 (400) - 회색 (500) - 회색 (600) - 회색 (700) - 회색 (800) - 회색 (900) + + 회색 (50) + 회색 (100) + 회색 (200) + 회색 (300) + 회색 (400) + 회색 (500) + 회색 (600) + 회색 (700) + 회색 (800) + 회색 (900) 블랙 (1000) 흰색 (1000) - - 블루 그레이 (50) - 블루 그레이 (100) - 블루 그레이 (200) - 블루 그레이 (300) - 블루 그레이 (400) - 블루 그레이 (500) - 블루 그레이 (600) - 블루 그레이 (700) - 블루 그레이 (800) - 블루 그레이 (900) + + 블루 그레이 (50) + 블루 그레이 (100) + 블루 그레이 (200) + 블루 그레이 (300) + 블루 그레이 (400) + 블루 그레이 (500) + 블루 그레이 (600) + 블루 그레이 (700) + 블루 그레이 (800) + 블루 그레이 (900) \ No newline at end of file diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 412c5e9d..330c23f4 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -903,8 +903,25 @@ Switch to new layout Switch to legacy layout Search color - Locate current color + Locate current theme color New color library Color palette + WEB color library + CSS color library + Android color library + Material design color library + Default color library + Backgournd light + Background night + Color library + Default colors + Material colors + Android colors + CSS colors + WEB colors + Material + Default + Custom + Color palette diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml index 41362d46..56bbc775 100644 --- a/app/src/main/res/values-night/colors.xml +++ b/app/src/main/res/values-night/colors.xml @@ -4,11 +4,12 @@ @color/dusk @color/dusk_full #B3BFBFBF + #9ABFBFBF #4DBFBFBF #33BFBFBF @color/dawn @color/dawn_full - @color/day_full + @color/md_gray_900 #3B3B3B @color/day_night @color/day_night_full @@ -26,7 +27,7 @@ #C7A4FF #0DA798 #BCAAA4 - #616161 + @color/md_gray_700 #009624 @color/dialog_button_finish #4FC3F7 @@ -68,6 +69,7 @@ #BF546E7A #DEFEFEFE + @color/md_gray_600 #CC424347 @color/window_background @color/window_background diff --git a/app/src/main/res/values-ru/material_design_colors_string.xml b/app/src/main/res/values-ru/material_design_colors_string.xml index d049d605..3511bec9 100644 --- a/app/src/main/res/values-ru/material_design_colors_string.xml +++ b/app/src/main/res/values-ru/material_design_colors_string.xml @@ -272,30 +272,30 @@ Коричневый (800) Коричневый (900) - - Серый (50) - Серый (100) - Серый (200) - Серый (300) - Серый (400) - Серый (500) - Серый (600) - Серый (700) - Серый (800) - Серый (900) + + Серый (50) + Серый (100) + Серый (200) + Серый (300) + Серый (400) + Серый (500) + Серый (600) + Серый (700) + Серый (800) + Серый (900) Черный (1000) Белый (1000) - - Синий серый (50) - Синий серый (100) - Синий серый (200) - Синий серый (300) - Синий серый (400) - Синий серый (500) - Синий серый (600) - Синий серый (700) - Синий серый (800) - Синий серый (900) + + Синий серый (50) + Синий серый (100) + Синий серый (200) + Синий серый (300) + Синий серый (400) + Синий серый (500) + Синий серый (600) + Синий серый (700) + Синий серый (800) + Синий серый (900) \ No newline at end of file diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 85cfdc7b..af1a3b6d 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -902,8 +902,25 @@ Switch to new layout Switch to legacy layout Search color - Locate current color + Locate current theme color New color library Color palette + WEB color library + CSS color library + Android color library + Material design color library + Default color library + Backgournd light + Background night + Color library + Default colors + Material colors + Android colors + CSS colors + WEB colors + Material + Default + Custom + Color palette diff --git a/app/src/main/res/values-zh-rHK/material_design_colors_string.xml b/app/src/main/res/values-zh-rHK/material_design_colors_string.xml index f4599084..cf9766ae 100644 --- a/app/src/main/res/values-zh-rHK/material_design_colors_string.xml +++ b/app/src/main/res/values-zh-rHK/material_design_colors_string.xml @@ -272,30 +272,30 @@ 棕 (800) 棕 (900) - - 灰 (50) - 灰 (100) - 灰 (200) - 灰 (300) - 灰 (400) - 灰 (500) - 灰 (600) - 灰 (700) - 灰 (800) - 灰 (900) + + 灰 (50) + 灰 (100) + 灰 (200) + 灰 (300) + 灰 (400) + 灰 (500) + 灰 (600) + 灰 (700) + 灰 (800) + 灰 (900) 黑 (1000) 白 (1000) - - 藍灰 (50) - 藍灰 (100) - 藍灰 (200) - 藍灰 (300) - 藍灰 (400) - 藍灰 (500) - 藍灰 (600) - 藍灰 (700) - 藍灰 (800) - 藍灰 (900) + + 藍灰 (50) + 藍灰 (100) + 藍灰 (200) + 藍灰 (300) + 藍灰 (400) + 藍灰 (500) + 藍灰 (600) + 藍灰 (700) + 藍灰 (800) + 藍灰 (900) \ No newline at end of file diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 623625e8..8c4c2459 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -901,8 +901,25 @@ Switch to new layout Switch to legacy layout Search color - Locate current color + Locate current theme color New color library Color palette + WEB color library + CSS color library + Android color library + Material design color library + Default color library + Backgournd light + Background night + Color library + Default colors + Material colors + Android colors + CSS colors + WEB colors + Material + Default + Custom + Color palette diff --git a/app/src/main/res/values-zh-rTW/material_design_colors_string.xml b/app/src/main/res/values-zh-rTW/material_design_colors_string.xml index f4599084..cf9766ae 100644 --- a/app/src/main/res/values-zh-rTW/material_design_colors_string.xml +++ b/app/src/main/res/values-zh-rTW/material_design_colors_string.xml @@ -272,30 +272,30 @@ 棕 (800) 棕 (900) - - 灰 (50) - 灰 (100) - 灰 (200) - 灰 (300) - 灰 (400) - 灰 (500) - 灰 (600) - 灰 (700) - 灰 (800) - 灰 (900) + + 灰 (50) + 灰 (100) + 灰 (200) + 灰 (300) + 灰 (400) + 灰 (500) + 灰 (600) + 灰 (700) + 灰 (800) + 灰 (900) 黑 (1000) 白 (1000) - - 藍灰 (50) - 藍灰 (100) - 藍灰 (200) - 藍灰 (300) - 藍灰 (400) - 藍灰 (500) - 藍灰 (600) - 藍灰 (700) - 藍灰 (800) - 藍灰 (900) + + 藍灰 (50) + 藍灰 (100) + 藍灰 (200) + 藍灰 (300) + 藍灰 (400) + 藍灰 (500) + 藍灰 (600) + 藍灰 (700) + 藍灰 (800) + 藍灰 (900) \ No newline at end of file diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 6520e3f9..601a9f71 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -901,8 +901,25 @@ Switch to new layout Switch to legacy layout Search color - Locate current color + Locate current theme color New color library Color palette + WEB color library + CSS color library + Android color library + Material design color library + Default color library + Backgournd light + Background night + Color library + Default colors + Material colors + Android colors + CSS colors + WEB colors + Material + Default + Custom + Color palette diff --git a/app/src/main/res/values-zh/android_colors_string.xml b/app/src/main/res/values-zh/android_colors_string.xml index deccc9c9..09afb214 100644 --- a/app/src/main/res/values-zh/android_colors_string.xml +++ b/app/src/main/res/values-zh/android_colors_string.xml @@ -4,17 +4,11 @@ - 暗灰 - 暗灰 - 绿 - 绿 亮灰 - 亮灰 品红 / 洋红 - 品红 / 洋红 海军蓝 / 藏青 橄榄 diff --git a/app/src/main/res/values-zh/css_colors_string.xml b/app/src/main/res/values-zh/css_colors_string.xml index 1bad55d2..5062a032 100644 --- a/app/src/main/res/values-zh/css_colors_string.xml +++ b/app/src/main/res/values-zh/css_colors_string.xml @@ -21,12 +21,10 @@ 玉米丝 绯红 - 暗蓝 暗青 暗金菊 暗灰 - 暗灰 暗绿 暗卡其 暗洋红 @@ -38,13 +36,11 @@ 暗海绿 暗岩蓝 暗岩灰 - 暗岩灰 暗绿松石 暗紫 深粉红 深天蓝 昏灰 - 昏灰 道奇蓝 砖红 花卉白 @@ -54,7 +50,6 @@ 金菊 - 绿 绿黄 蜜瓜绿 @@ -72,21 +67,18 @@ 亮青 亮金菊黄 亮灰 - 亮灰 亮绿 亮粉红 亮鲑红 亮海绿 浅天蓝 亮岩灰 - 亮岩灰 亮钢蓝 亮黄 鲜绿 / 莱姆 柠檬绿 亚麻 洋红 / 品红 - 洋红 / 品红 中碧蓝 中蓝 @@ -134,7 +126,6 @@ 天空蓝 岩蓝 岩灰 - 岩灰 春绿 钢青 diff --git a/app/src/main/res/values-zh/material_design_colors_string.xml b/app/src/main/res/values-zh/material_design_colors_string.xml index f7c18bb5..bb11beeb 100644 --- a/app/src/main/res/values-zh/material_design_colors_string.xml +++ b/app/src/main/res/values-zh/material_design_colors_string.xml @@ -272,30 +272,30 @@ 棕 (800) 棕 (900) - - 灰 (50) - 灰 (100) - 灰 (200) - 灰 (300) - 灰 (400) - 灰 (500) - 灰 (600) - 灰 (700) - 灰 (800) - 灰 (900) + + 灰 (50) + 灰 (100) + 灰 (200) + 灰 (300) + 灰 (400) + 灰 (500) + 灰 (600) + 灰 (700) + 灰 (800) + 灰 (900) 黑 (1000) 白 (1000) - - 蓝灰 (50) - 蓝灰 (100) - 蓝灰 (200) - 蓝灰 (300) - 蓝灰 (400) - 蓝灰 (500) - 蓝灰 (600) - 蓝灰 (700) - 蓝灰 (800) - 蓝灰 (900) + + 蓝灰 (50) + 蓝灰 (100) + 蓝灰 (200) + 蓝灰 (300) + 蓝灰 (400) + 蓝灰 (500) + 蓝灰 (600) + 蓝灰 (700) + 蓝灰 (800) + 蓝灰 (900) \ No newline at end of file diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 18dba29a..e33e322f 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -901,8 +901,25 @@ 切换至新布局 切换至传统布局 搜索颜色 - 定位当前颜色 + 定位当前主题色 新建颜色库 调色盘 + WEB 颜色库 + CSS 颜色库 + Android 颜色库 + 材料设计 (Material Design) 颜色库 + 默认颜色库 + 背景亮色 + 背景暗色 + 颜色库 + 默认颜色 + 材料设计颜色 + Android 颜色 + CSS 颜色 + WEB 颜色 + 材料设计 + 默认 + 自定义 + 调色盘 diff --git a/app/src/main/res/values-zh/web_colors_string.xml b/app/src/main/res/values-zh/web_colors_string.xml index 3a536c81..c56b07cd 100644 --- a/app/src/main/res/values-zh/web_colors_string.xml +++ b/app/src/main/res/values-zh/web_colors_string.xml @@ -85,7 +85,7 @@ 紫红 庚斯博罗灰 幽灵白 - / GOLD 金 + 金菊 草绿 @@ -107,7 +107,7 @@ 卡其 天青石蓝 薰衣草紫 - / PERIWINKLE 薰衣草蓝 / 长春花 + 薰衣草蓝 / 长春花 薰衣草紫红 亮紫 薰衣草雾 @@ -129,7 +129,7 @@ 亮紫 亮黄 紫丁香 - / LIGHT_LIME 柠檬绿 / 亮柠檬绿 + 柠檬绿 / 亮柠檬绿 柠檬绿 亚麻 洋红 / 品红 @@ -162,7 +162,7 @@ 苔藓绿 芥末黄 那瓦霍白 - / NAVY_BLUE 海军蓝 / 藏青 + 海军蓝 / 藏青 旧蕾丝 陈玫红 diff --git a/app/src/main/res/values/android_colors.xml b/app/src/main/res/values/android_colors.xml index 7dde875b..85018d39 100644 --- a/app/src/main/res/values/android_colors.xml +++ b/app/src/main/res/values/android_colors.xml @@ -4,17 +4,11 @@ #000000 #0000FF #00FFFF - #00FFFF #444444 - #444444 #888888 - #888888 #00FF00 - #00FF00 #CCCCCC - #CCCCCC #FF00FF - #FF00FF #800000 #000080 #808000 diff --git a/app/src/main/res/values/android_colors_string.xml b/app/src/main/res/values/android_colors_string.xml index eab1f650..a13fca7e 100644 --- a/app/src/main/res/values/android_colors_string.xml +++ b/app/src/main/res/values/android_colors_string.xml @@ -3,18 +3,12 @@ Black Blue - Cyan - Aqua + Cyan / Aqua Dark gray - Dark grey Gray - Grey - Green - Lime + Green / Lime Light gray - Light grey - Magenta - Fuchsia + Magenta / Fuchsia Maroon Navy Olive diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index bd73032b..0ae4ac32 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -2,7 +2,7 @@ #DE212121 - #212121 + @color/md_gray_900 #DEFBFBFB #FBFBFB #DE252525 @@ -12,13 +12,14 @@ @color/day @color/day_full #B3212121 + #9A212121 #4D212121 #33212121 @color/night @color/night_full - #FFFFFF - #FFFFFF - @color/day_full + @color/md_gray_50 + @color/md_gray_50 + @color/md_gray_900 #E5E5E5 @color/day_night @color/day_night_full @@ -33,13 +34,14 @@ #111214 @color/md_teal_800 + @color/md_blue_gray_800 - #DFC0C0C0 - #CC000000 - #FF43A047 - #FF1976D2 - #FFC62828 - #FFE254FF + #BDBDBD + #111214 + #43A047 + #1976D2 + #C62828 + #E254FF @@ -48,7 +50,7 @@ - #FFFFFF + #FAFAFA #E0E0E0 #DCEDC8 #B3E5FC @@ -100,8 +102,8 @@ #DCEDC8 #00C853 - #FFFFFF - #FFFFFF + #FAFAFA + #FAFAFA #F2F3F5 #F0F0F0 @@ -161,8 +163,8 @@ @color/day_full #F8F8F8 #ef5350 - #ffffff - #616161 + @color/md_white_1000 + @color/md_gray_700 #99262626 #cc181818 diff --git a/app/src/main/res/values/css_colors.xml b/app/src/main/res/values/css_colors.xml index 0db0396c..28983473 100644 --- a/app/src/main/res/values/css_colors.xml +++ b/app/src/main/res/values/css_colors.xml @@ -21,12 +21,10 @@ #FFF8DC #DC143C #00FFFF - #00FFFF #00008B #008B8B #B8860B #A9A9A9 - #A9A9A9 #006400 #BDB76B #8B008B @@ -38,13 +36,11 @@ #8FBC8F #483D8B #2F4F4F - #2F4F4F #00CED1 #9400D3 #FF1493 #00BFFF #696969 - #696969 #1E90FF #B22222 #FFFAF0 @@ -54,7 +50,6 @@ #FFD700 #DAA520 #808080 - #808080 #008000 #ADFF2F #F0FFF0 @@ -72,21 +67,18 @@ #E0FFFF #FAFAD2 #D3D3D3 - #D3D3D3 #90EE90 #FFB6C1 #FFA07A #20B2AA #87CEFA #778899 - #778899 #B0C4DE #FFFFE0 #00FF00 #32CD32 #FAF0E6 #FF00FF - #FF00FF #800000 #66CDAA #0000CD @@ -134,7 +126,6 @@ #87CEEB #6A5ACD #708090 - #708090 #FFFAFA #00FF7F #4682B4 diff --git a/app/src/main/res/values/css_colors_string.xml b/app/src/main/res/values/css_colors_string.xml index 3a5ad1c4..fe8141d1 100644 --- a/app/src/main/res/values/css_colors_string.xml +++ b/app/src/main/res/values/css_colors_string.xml @@ -20,13 +20,11 @@ Cornflower blue Corn silk Crimson - Cyan - Aqua + Cyan / Aqua Dark blue Dark cyan Dark goldenrod Dark gray - Dark grey Dark green Dark khaki Dark magenta @@ -38,13 +36,11 @@ Dark sea green Dark slate blue Dark slate gray - Dark slate grey Dark turquoise Dark violet Deep pink Deep sky blue Dim gray - Dim grey Dodger blue Fire brick Floral white @@ -54,7 +50,6 @@ Gold Goldenrod Gray - Grey Green Green yellow Honeydew @@ -72,21 +67,18 @@ Light cyan Light goldenrod yellow Light gray - Light grey Light green Light pink Light salmon Light sea green Light sky blue Light slate gray - Light slate grey Light steel blue Light yellow Lime Lime green Linen - Magenta - Fuchsia + Magenta / Fuchsia Maroon Medium aquamarine Medium blue @@ -134,7 +126,6 @@ Sky blue Slate blue Slate gray - Slate grey Snow Spring green Steel blue diff --git a/app/src/main/res/values/material_design_colors.xml b/app/src/main/res/values/material_design_colors.xml index d069932f..ca49aa83 100644 --- a/app/src/main/res/values/material_design_colors.xml +++ b/app/src/main/res/values/material_design_colors.xml @@ -272,30 +272,30 @@ #4E342E #3E2723 - - #FAFAFA - #F5F5F5 - #EEEEEE - #E0E0E0 - #BDBDBD - #9E9E9E - #757575 - #616161 - #424242 - #212121 + + #FAFAFA + #F5F5F5 + #EEEEEE + #E0E0E0 + #BDBDBD + #9E9E9E + #757575 + #616161 + #424242 + #212121 #000000 #FFFFFF - - #ECEFF1 - #CFD8DC - #B0BBC5 - #90A4AE - #78909C - #607D8B - #546E7A - #455A64 - #37474F - #263238 + + #ECEFF1 + #CFD8DC + #B0BBC5 + #90A4AE + #78909C + #607D8B + #546E7A + #455A64 + #37474F + #263238 \ No newline at end of file diff --git a/app/src/main/res/values/material_design_colors_string.xml b/app/src/main/res/values/material_design_colors_string.xml index 81f21f5d..45ed32df 100644 --- a/app/src/main/res/values/material_design_colors_string.xml +++ b/app/src/main/res/values/material_design_colors_string.xml @@ -272,30 +272,30 @@ Brown (800) Brown (900) - - Grey (50) - Grey (100) - Grey (200) - Grey (300) - Grey (400) - Grey (500) - Grey (600) - Grey (700) - Grey (800) - Grey (900) + + Gray (50) + Gray (100) + Gray (200) + Gray (300) + Gray (400) + Gray (500) + Gray (600) + Gray (700) + Gray (800) + Gray (900) Black (1000) White (1000) - - Blue grey (50) - Blue grey (100) - Blue grey (200) - Blue grey (300) - Blue grey (400) - Blue grey (500) - Blue grey (600) - Blue grey (700) - Blue grey (800) - Blue grey (900) + + Blue gray (50) + Blue gray (100) + Blue gray (200) + Blue gray (300) + Blue gray (400) + Blue gray (500) + Blue gray (600) + Blue gray (700) + Blue gray (800) + Blue gray (900) \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f6b9d27c..441b5dd7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1140,8 +1140,28 @@ Switch to new layout Switch to legacy layout Search color - Locate current color + Locate current theme color New color library Color palette + WEB color library + CSS color library + Android color library + Material design color library + Default color library + Backgournd light + Background night + Color library + Default colors + Material colors + Android colors + CSS colors + WEB colors + Default + Material + Android + CSS + WEB + Custom + Color palette diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index efce8c09..3fcf0227 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -39,10 +39,10 @@ @@ -110,6 +110,7 @@ diff --git a/app/src/main/res/values/web_colors_string.xml b/app/src/main/res/values/web_colors_string.xml index bf0689ad..183cada3 100644 --- a/app/src/main/res/values/web_colors_string.xml +++ b/app/src/main/res/values/web_colors_string.xml @@ -85,7 +85,7 @@ Fuchsia Gainsboro Ghost white - Golden + Golden / Gold Goldenrod Grass green Gray @@ -107,7 +107,7 @@ Khaki Lapis lazuli Lavender - Lavender blue + Lavender blue / Periwinkle Lavender blush Lavender magenta Lavender mist @@ -129,7 +129,7 @@ Light violet Light yellow Lilac - Lime + Lime / Light lime Lime green Linen Magenta @@ -162,7 +162,7 @@ Moss green Mustard Navajo white - Navy + Navy / Navy blue Ocher Old lace Old rose diff --git a/modules/color-picker/src/main/res/values-be/strings.xml b/modules/color-picker/src/main/res/values-be/strings.xml deleted file mode 100644 index dfc8dae3..00000000 --- a/modules/color-picker/src/main/res/values-be/strings.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - Вылучыце колер - Перадусталёўкі - Асаблівы - Выбраць - Празрыстасць - \ No newline at end of file diff --git a/modules/color-picker/src/main/res/values-de/strings.xml b/modules/color-picker/src/main/res/values-de/strings.xml deleted file mode 100644 index 187181a3..00000000 --- a/modules/color-picker/src/main/res/values-de/strings.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - Farbe auswählen - Voreinstellungen - Benutzerdefiniert - Auswählen - Transparenz - diff --git a/modules/color-picker/src/main/res/values-cs/strings.xml b/modules/color-picker/src/main/res/values-en/strings.xml similarity index 74% rename from modules/color-picker/src/main/res/values-cs/strings.xml rename to modules/color-picker/src/main/res/values-en/strings.xml index 9dd0bf1c..416b5d67 100644 --- a/modules/color-picker/src/main/res/values-cs/strings.xml +++ b/modules/color-picker/src/main/res/values-en/strings.xml @@ -15,9 +15,9 @@ --> - Vyberte barvu - Přednastavené - Vlastní - Vybrat - Průhlednost + Select a Color + Presets + Custom + Select + Transparency \ No newline at end of file diff --git a/modules/color-picker/src/main/res/values-fr-rFR/strings.xml b/modules/color-picker/src/main/res/values-fr/strings.xml similarity index 100% rename from modules/color-picker/src/main/res/values-fr-rFR/strings.xml rename to modules/color-picker/src/main/res/values-fr/strings.xml diff --git a/modules/color-picker/src/main/res/values-it-rIT/strings.xml b/modules/color-picker/src/main/res/values-it-rIT/strings.xml deleted file mode 100644 index 276fa31c..00000000 --- a/modules/color-picker/src/main/res/values-it-rIT/strings.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - Personalizzato - Seleziona un Colore - Predefiniti - Seleziona - Trasparenza - diff --git a/modules/color-picker/src/main/res/values-iw/strings.xml b/modules/color-picker/src/main/res/values-iw/strings.xml deleted file mode 100644 index 1eea7d44..00000000 --- a/modules/color-picker/src/main/res/values-iw/strings.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - בחירת צבע - קבוע מראש - מותאם אישית - בחירה - שקיפות - \ No newline at end of file diff --git a/modules/color-picker/src/main/res/values-sk/strings.xml b/modules/color-picker/src/main/res/values-ko/strings.xml similarity index 74% rename from modules/color-picker/src/main/res/values-sk/strings.xml rename to modules/color-picker/src/main/res/values-ko/strings.xml index 56a4273b..fbcf6e53 100644 --- a/modules/color-picker/src/main/res/values-sk/strings.xml +++ b/modules/color-picker/src/main/res/values-ko/strings.xml @@ -15,9 +15,9 @@ --> - Vyberte farbu - Prednastavené - Vlastné - Vybrať - Priehľadnosť + 색상 선택 + 프리셋 + 커스텀 + 선택 + 투명도 \ No newline at end of file diff --git a/modules/color-picker/src/main/res/values-nl-rNL/strings.xml b/modules/color-picker/src/main/res/values-nl-rNL/strings.xml deleted file mode 100644 index 362de70d..00000000 --- a/modules/color-picker/src/main/res/values-nl-rNL/strings.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - Selecteer een kleur - Vooraf ingesteld - Aangepast - Kiezen - Transparantie - diff --git a/modules/color-picker/src/main/res/values-pt/strings.xml b/modules/color-picker/src/main/res/values-pt/strings.xml deleted file mode 100644 index 70e53716..00000000 --- a/modules/color-picker/src/main/res/values-pt/strings.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - Selecionar uma cor - Predefinidos - Personalizar - Selecionar - Transparência - \ No newline at end of file diff --git a/modules/color-picker/src/main/res/values-pl/strings.xml b/modules/color-picker/src/main/res/values-zh-rHK/strings.xml similarity index 74% rename from modules/color-picker/src/main/res/values-pl/strings.xml rename to modules/color-picker/src/main/res/values-zh-rHK/strings.xml index 8ccbe8ef..eda2dbd5 100644 --- a/modules/color-picker/src/main/res/values-pl/strings.xml +++ b/modules/color-picker/src/main/res/values-zh-rHK/strings.xml @@ -15,9 +15,9 @@ --> - Wybierz kolor - Kolory domyślne - Dostosuj - Wybierz - Przezroczystość + 選擇顏色 + 預置顏色 + 自定義顏色 + 確認 + 透明度 \ No newline at end of file diff --git a/modules/color-picker/src/main/res/values-tr/strings.xml b/modules/color-picker/src/main/res/values-zh-rTW/strings.xml similarity index 73% rename from modules/color-picker/src/main/res/values-tr/strings.xml rename to modules/color-picker/src/main/res/values-zh-rTW/strings.xml index b4f559b2..eda2dbd5 100644 --- a/modules/color-picker/src/main/res/values-tr/strings.xml +++ b/modules/color-picker/src/main/res/values-zh-rTW/strings.xml @@ -1,9 +1,12 @@ - Renk Seçin - Ön Ayarlar - Özel - Seç - Şeffaflık - + 選擇顏色 + 預置顏色 + 自定義顏色 + 確認 + 透明度 + \ No newline at end of file diff --git a/version.properties b/version.properties index a1eb73dd..33a2fd4f 100644 --- a/version.properties +++ b/version.properties @@ -1,5 +1,5 @@ -#Tue Mar 25 22:54:07 CST 2025 -BUILD_TIME=1742914447380 +#Thu Mar 27 19:59:19 CST 2025 +BUILD_TIME=1743076759401 COMPILE_SDK_VERSION=35 JAVA_VERSION=23 JAVA_VERSION_MIN_RADICAL=0 @@ -17,6 +17,6 @@ RAPID_OCR_OPENCV_MOBILE_LABEL_VERSION=13 RAPID_OCR_OPENCV_MOBILE_VERSION=4.5.3 TARGET_SDK_VERSION=35 TARGET_SDK_VERSION_INRT=29 -VERSION_BUILD=3057 +VERSION_BUILD=3065 VERSION_NAME=6.6.2 Alpha5 VSCODE_EXT_REQUIRED_VERSION=1.0.8