From a69f7a2846595013fa6efc3c93814661a431e1ff Mon Sep 17 00:00:00 2001 From: tateisu Date: Wed, 24 Jul 2019 03:48:21 +0900 Subject: [PATCH] add "Switch button color" in App setting / Color --- .idea/misc.xml | 2 +- .../juggler/subwaytooter/WordTrieTreeTest.kt | 2 +- .../subwaytooter/ActAppSettingChild.kt | 105 +++++++++++++++++- .../main/java/jp/juggler/subwaytooter/Pref.kt | 5 +- .../juggler/subwaytooter/util/HTMLDecoder.kt | 1 - .../{subwaytooter => }/util/CharacterGroup.kt | 7 +- app/src/main/java/jp/juggler/util/UiUtils.kt | 5 +- .../main/java/jp/juggler/util/WordTrieTree.kt | 3 - ...kground_dark.xml => window_background.xml} | 2 +- .../res/drawable/window_background_light.xml | 6 - .../main/res/layout/act_app_setting_color.xml | 24 ++++ app/src/main/res/values-ja/strings.xml | 1 + app/src/main/res/values/attrs.xml | 3 + app/src/main/res/values/strings.xml | 1 + app/src/main/res/values/styles.xml | 7 +- 15 files changed, 149 insertions(+), 25 deletions(-) rename app/src/main/java/jp/juggler/{subwaytooter => }/util/CharacterGroup.kt (95%) rename app/src/main/res/drawable/{window_background_dark.xml => window_background.xml} (66%) delete mode 100644 app/src/main/res/drawable/window_background_light.xml diff --git a/.idea/misc.xml b/.idea/misc.xml index f6899e2e..c727cda3 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -40,7 +40,7 @@ - + diff --git a/app/src/androidTest/java/jp/juggler/subwaytooter/WordTrieTreeTest.kt b/app/src/androidTest/java/jp/juggler/subwaytooter/WordTrieTreeTest.kt index 4d4fd723..390d5e70 100644 --- a/app/src/androidTest/java/jp/juggler/subwaytooter/WordTrieTreeTest.kt +++ b/app/src/androidTest/java/jp/juggler/subwaytooter/WordTrieTreeTest.kt @@ -5,7 +5,7 @@ import androidx.test.runner.AndroidJUnit4 import org.junit.Test import org.junit.runner.RunWith -import jp.juggler.subwaytooter.util.CharacterGroup +import jp.juggler.util.CharacterGroup import jp.juggler.util.WordTrieTree import org.junit.Assert.assertEquals diff --git a/app/src/main/java/jp/juggler/subwaytooter/ActAppSettingChild.kt b/app/src/main/java/jp/juggler/subwaytooter/ActAppSettingChild.kt index 143460dd..c9287e13 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/ActAppSettingChild.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/ActAppSettingChild.kt @@ -5,6 +5,7 @@ import android.content.Intent import android.content.SharedPreferences import android.content.res.ColorStateList import android.graphics.Color +import android.graphics.PorterDuff import android.graphics.Typeface import android.net.Uri import android.os.Build @@ -31,6 +32,7 @@ import org.jetbrains.anko.backgroundDrawable import org.jetbrains.anko.textColor import java.io.File import java.io.FileOutputStream +import java.io.InputStream import java.text.NumberFormat import java.util.* import java.util.concurrent.TimeUnit @@ -88,6 +90,8 @@ class ActAppSettingChild : AppCompatActivity() internal const val COLOR_DIALOG_ID_EVENT_BG_VOTE = 24 internal const val COLOR_DIALOG_ID_EVENT_BG_FOLLOWREQUEST = 25 + internal const val COLOR_DIALOG_ID_SWITCH_BUTTON = 26 + internal const val REQUEST_CODE_TIMELINE_FONT = 1 internal const val REQUEST_CODE_TIMELINE_FONT_BOLD = 2 @@ -106,6 +110,8 @@ class ActAppSettingChild : AppCompatActivity() private val booleanViewList = ArrayList() + private lateinit var svContent : View + private var spBackButtonAction : Spinner? = null private var spUITheme : Spinner? = null private var spResizeImage : Spinner? = null @@ -138,6 +144,7 @@ class ActAppSettingChild : AppCompatActivity() private var event_bg_color_quote : Int = 0 private var event_bg_color_vote : Int = 0 private var event_bg_color_follow_request : Int = 0 + private var switch_button_color = 0 private var color_column_header_bg : Int = 0 private var color_column_header_fg : Int = 0 @@ -275,7 +282,11 @@ class ActAppSettingChild : AppCompatActivity() private fun initUI() { - Styler.fixHorizontalPadding(findViewById(R.id.svContent)) + svContent = findViewById(R.id.svContent) + + setSwitchColor(svContent) + + Styler.fixHorizontalPadding(svContent) // initialize Switch and CheckBox for(info in Pref.map.values) { @@ -432,6 +443,8 @@ class ActAppSettingChild : AppCompatActivity() , R.id.btnCustomShare2Reset , R.id.btnCustomShare3Edit , R.id.btnCustomShare3Reset + , R.id.btnSwitchButtonColorEdit + , R.id.btnSwitchButtonColorReset ).forEach { findViewById(it)?.setOnClickListener(this) } @@ -617,6 +630,7 @@ class ActAppSettingChild : AppCompatActivity() event_bg_color_quote = Pref.ipEventBgColorQuote(pref) event_bg_color_vote = Pref.ipEventBgColorVote(pref) event_bg_color_follow_request = Pref.ipEventBgColorFollowRequest(pref) + switch_button_color = Pref.ipSwitchOnColor(pref) color_column_header_bg = Pref.ipCcdHeaderBg(pref) color_column_header_fg = Pref.ipCcdHeaderFg(pref) @@ -792,6 +806,7 @@ class ActAppSettingChild : AppCompatActivity() put(Pref.ipEventBgColorQuote, event_bg_color_quote) put(Pref.ipEventBgColorVote, event_bg_color_vote) put(Pref.ipEventBgColorFollowRequest, event_bg_color_follow_request) + put(Pref.ipSwitchOnColor, switch_button_color) } @@ -1181,6 +1196,19 @@ class ActAppSettingChild : AppCompatActivity() saveUIToData() } + R.id.btnSwitchButtonColorEdit -> openColorPicker( + COLOR_DIALOG_ID_SWITCH_BUTTON, + switch_button_color, + true + ) + + R.id.btnSwitchButtonColorReset -> { + switch_button_color = Pref.ipSwitchOnColor.defVal + saveUIToData() + setSwitchColor(svContent) + + } + R.id.btnTranslateAppComponentEdit -> openCustomShareChooser(CustomShareTarget.Translate) R.id.btnCustomShare1Edit -> openCustomShareChooser(CustomShareTarget.CustomShare1) R.id.btnCustomShare2Edit -> openCustomShareChooser(CustomShareTarget.CustomShare2) @@ -1369,6 +1397,11 @@ class ActAppSettingChild : AppCompatActivity() saveUIToData() } + COLOR_DIALOG_ID_SWITCH_BUTTON -> { + switch_button_color = colorOpaque + saveUIToData() + setSwitchColor(svContent) + } } } @@ -1522,7 +1555,7 @@ class ActAppSettingChild : AppCompatActivity() val tmp_file = File(dir, "$file_name.tmp") - val source = contentResolver.openInputStream(uri) // nullable + val source : InputStream? = contentResolver.openInputStream(uri) if(source == null) { showToast(this, false, "openInputStream returns null. uri=%s", uri) return null @@ -1819,4 +1852,72 @@ class ActAppSettingChild : AppCompatActivity() tv.setCompoundDrawablesRelativeWithIntrinsicBounds(icon, null, null, null) } + private fun setSwitchColor(root : View?) { + + fun mixColor(col1 : Int, col2 : Int) : Int = Color.rgb( + (Color.red(col1) + Color.red(col2)) ushr 1, + (Color.green(col1) + Color.green(col2)) ushr 1, + (Color.blue(col1) + Color.blue(col2)) ushr 1 + ) + + val colorBg = getAttributeColor(this, R.attr.colorWindowBackground) + + val colorOn = Pref.ipSwitchOnColor(pref) + + val colorOff = /* Pref.ipSwitchOffColor(pref).notZero() ?: */ + getAttributeColor(this, android.R.attr.colorPrimary) + + val colorDisabled = mixColor(colorBg, colorOff) + + + val colorTrackDisabled = mixColor( colorBg,colorDisabled) + val colorTrackOn = mixColor( colorBg,colorOn) + val colorTrackOff = mixColor( colorBg,colorOff) + + // set Switch Color + // https://stackoverflow.com/a/25635526/9134243 + val thumbStates = ColorStateList( + arrayOf( + intArrayOf(- android.R.attr.state_enabled), + intArrayOf(android.R.attr.state_checked), + intArrayOf() + ), + intArrayOf( + colorDisabled, + colorOn, + colorOff + ) + ) + + val trackStates = ColorStateList( + arrayOf( + intArrayOf(- android.R.attr.state_enabled), + intArrayOf(android.R.attr.state_checked), + intArrayOf() + ), + intArrayOf( + colorTrackDisabled, + colorTrackOn, + colorTrackOff + ) + ) + + root?.scan { + if(it !is Switch) { + } else if(Build.VERSION.SDK_INT < 23) { + // android 5 + it.thumbDrawable?.setTintList(thumbStates) + it.trackDrawable?.setTintList(thumbStates) // not trackState + } else { + // android 6 + it.thumbTintList = thumbStates + if(Build.VERSION.SDK_INT >= 24) { + // android 7 + it.trackTintList = trackStates + it.trackTintMode = PorterDuff.Mode.SRC_OVER + } + } + } + } + } diff --git a/app/src/main/java/jp/juggler/subwaytooter/Pref.kt b/app/src/main/java/jp/juggler/subwaytooter/Pref.kt index 138b4179..78a4e922 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/Pref.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/Pref.kt @@ -2,6 +2,7 @@ package jp.juggler.subwaytooter import android.content.Context import android.content.SharedPreferences +import android.graphics.Color import android.preference.PreferenceManager import jp.juggler.util.optInt @@ -52,7 +53,7 @@ class BooleanPref( } } -class IntPref(key : String, private val defVal : Int) : BasePref(key) { +class IntPref(key : String, val defVal : Int) : BasePref(key) { override operator fun invoke(pref : SharedPreferences) : Int { return pref.getInt(key, defVal) @@ -449,6 +450,8 @@ object Pref { val ipLinkColor = IntPref("LinkColor", 0) + val ipSwitchOnColor = IntPref("SwitchOnColor", Color.BLACK or 0x0080ff) + val ipTootColorUnlisted = IntPref("ipTootColorUnlisted", 0) val ipTootColorFollower = IntPref("ipTootColorFollower", 0) val ipTootColorDirectUser = IntPref("ipTootColorDirectUser", 0) diff --git a/app/src/main/java/jp/juggler/subwaytooter/util/HTMLDecoder.kt b/app/src/main/java/jp/juggler/subwaytooter/util/HTMLDecoder.kt index a5a2cbb3..99364930 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/util/HTMLDecoder.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/util/HTMLDecoder.kt @@ -1,6 +1,5 @@ package jp.juggler.subwaytooter.util -import android.content.Context import android.text.Spannable import android.text.SpannableString import android.text.SpannableStringBuilder diff --git a/app/src/main/java/jp/juggler/subwaytooter/util/CharacterGroup.kt b/app/src/main/java/jp/juggler/util/CharacterGroup.kt similarity index 95% rename from app/src/main/java/jp/juggler/subwaytooter/util/CharacterGroup.kt rename to app/src/main/java/jp/juggler/util/CharacterGroup.kt index 167ef015..eae2f302 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/util/CharacterGroup.kt +++ b/app/src/main/java/jp/juggler/util/CharacterGroup.kt @@ -1,4 +1,4 @@ -package jp.juggler.subwaytooter.util +package jp.juggler.util import android.util.SparseBooleanArray import android.util.SparseIntArray @@ -248,7 +248,10 @@ class CharacterGroup { addGroup(arrayOf("」", "」", "」")) // チルダ - addGroup(arrayOf("~", i2s(tmp, 0x301C), i2s(tmp, 0xFF5E))) + addGroup(arrayOf("~", + i2s(tmp, 0x301C), + i2s(tmp, 0xFF5E) + )) // 半角カナの濁音,半濁音は2文字になる addGroup(arrayOf("ガ", "が", "ガ")) diff --git a/app/src/main/java/jp/juggler/util/UiUtils.kt b/app/src/main/java/jp/juggler/util/UiUtils.kt index b8650001..058c2742 100644 --- a/app/src/main/java/jp/juggler/util/UiUtils.kt +++ b/app/src/main/java/jp/juggler/util/UiUtils.kt @@ -1,6 +1,5 @@ package jp.juggler.util -import android.app.Dialog import android.content.ClipData import android.content.ClipboardManager import android.content.Context @@ -14,14 +13,12 @@ import android.graphics.drawable.* import android.graphics.drawable.shapes.RectShape import android.os.Build import android.os.SystemClock -import androidx.core.content.ContextCompat import android.text.Editable import android.text.TextWatcher import android.util.SparseArray -import android.view.View import android.widget.ImageView +import androidx.core.content.ContextCompat import jp.juggler.subwaytooter.R -import org.jetbrains.anko.backgroundDrawable import java.util.* object UiUtils{ diff --git a/app/src/main/java/jp/juggler/util/WordTrieTree.kt b/app/src/main/java/jp/juggler/util/WordTrieTree.kt index 5183f122..e9022213 100644 --- a/app/src/main/java/jp/juggler/util/WordTrieTree.kt +++ b/app/src/main/java/jp/juggler/util/WordTrieTree.kt @@ -1,8 +1,5 @@ package jp.juggler.util -import androidx.collection.SparseArrayCompat -import jp.juggler.subwaytooter.util.CharacterGroup - import java.util.ArrayList class WordTrieTree { diff --git a/app/src/main/res/drawable/window_background_dark.xml b/app/src/main/res/drawable/window_background.xml similarity index 66% rename from app/src/main/res/drawable/window_background_dark.xml rename to app/src/main/res/drawable/window_background.xml index 9eb8d8d1..5cb5abfd 100644 --- a/app/src/main/res/drawable/window_background_dark.xml +++ b/app/src/main/res/drawable/window_background.xml @@ -2,5 +2,5 @@ - + \ No newline at end of file diff --git a/app/src/main/res/drawable/window_background_light.xml b/app/src/main/res/drawable/window_background_light.xml deleted file mode 100644 index f4232398..00000000 --- a/app/src/main/res/drawable/window_background_light.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/act_app_setting_color.xml b/app/src/main/res/layout/act_app_setting_color.xml index c5cc0850..5070ee89 100644 --- a/app/src/main/res/layout/act_app_setting_color.xml +++ b/app/src/main/res/layout/act_app_setting_color.xml @@ -900,5 +900,29 @@ + + + +