From 2353cf491ab7fec6a6aa7853fc746f2b5ecb66a7 Mon Sep 17 00:00:00 2001 From: BlackyHawky Date: Fri, 26 Jan 2024 18:13:05 +0100 Subject: [PATCH] Add dynamic colors when installing Openboard (#447) --- .../latin/setup/SetupWizardActivity.java | 81 +++++++++++++------ .../color/setup_step_action_background.xml | 4 +- ...n_color.xml => setup_step_action_text.xml} | 8 +- .../drawable/setup_step_action_background.xml | 4 +- app/src/main/res/layout/setup_steps_cards.xml | 2 +- .../main/res/layout/setup_welcome_title.xml | 2 +- app/src/main/res/values-night-v31/colors.xml | 15 ++++ app/src/main/res/values-night/colors.xml | 9 +++ app/src/main/res/values-v31/colors.xml | 13 ++- app/src/main/res/values/colors.xml | 10 ++- .../main/res/values/setup-styles-common.xml | 20 ++--- 11 files changed, 116 insertions(+), 52 deletions(-) rename app/src/main/res/color/{setup_step_action_color.xml => setup_step_action_text.xml} (58%) create mode 100644 app/src/main/res/values-night-v31/colors.xml diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/setup/SetupWizardActivity.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/setup/SetupWizardActivity.java index 47d40a678..dfdd5dce0 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/setup/SetupWizardActivity.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/setup/SetupWizardActivity.java @@ -6,31 +6,41 @@ package org.dslul.openboard.inputmethod.latin.setup; +import static android.util.TypedValue.COMPLEX_UNIT_DIP; + import android.app.Activity; import android.content.ContentResolver; +import android.content.Context; import android.content.Intent; import android.content.res.ColorStateList; import android.content.res.Resources; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.os.Message; import android.provider.Settings; -import org.dslul.openboard.inputmethod.latin.utils.Log; +import android.util.TypedValue; import android.view.View; +import android.view.WindowInsetsController; import android.view.inputmethod.InputMethodManager; import android.widget.ImageView; import android.widget.TextView; import android.widget.VideoView; import androidx.annotation.NonNull; +import androidx.appcompat.content.res.AppCompatResources; import androidx.core.content.ContextCompat; +import androidx.core.content.res.ResourcesCompat; +import androidx.core.graphics.ColorUtils; import androidx.core.graphics.drawable.DrawableCompat; import org.dslul.openboard.inputmethod.latin.R; import org.dslul.openboard.inputmethod.latin.settings.SettingsActivity; import org.dslul.openboard.inputmethod.latin.utils.LeakGuardHandlerWrapper; +import org.dslul.openboard.inputmethod.latin.utils.Log; +import org.dslul.openboard.inputmethod.latin.utils.ResourceUtils; import org.dslul.openboard.inputmethod.latin.utils.UncachedInputMethodManagerUtils; import java.util.ArrayList; @@ -52,7 +62,7 @@ public final class SetupWizardActivity extends Activity implements View.OnClickL private VideoView mWelcomeVideoView; private ImageView mWelcomeImageView; private View mActionStart; - private View mActionNext; + private TextView mActionNext; private TextView mStep1Bullet; private TextView mActionFinish; private SetupStepGroup mSetupStepGroup; @@ -109,12 +119,12 @@ public final class SetupWizardActivity extends Activity implements View.OnClickL @Override protected void onCreate(final Bundle savedInstanceState) { - setTheme(android.R.style.Theme_Translucent_NoTitleBar); super.onCreate(savedInstanceState); + final Context context = getApplicationContext(); + final boolean isNight = ResourceUtils.isNight(context.getResources()); mImm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); mHandler = new SettingsPoolingHandler(this, mImm); - setContentView(R.layout.setup_wizard); mSetupWizard = findViewById(R.id.setup_wizard); @@ -137,8 +147,7 @@ public final class SetupWizardActivity extends Activity implements View.OnClickL final TextView stepsTitle = findViewById(R.id.setup_title); stepsTitle.setText(getString(R.string.setup_steps_title, applicationName)); - final SetupStepIndicatorView indicatorView = - findViewById(R.id.setup_step_indicator); + final SetupStepIndicatorView indicatorView = findViewById(R.id.setup_step_indicator); mSetupStepGroup = new SetupStepGroup(indicatorView); mStep1Bullet = findViewById(R.id.setup_step1_bullet); @@ -198,15 +207,39 @@ public final class SetupWizardActivity extends Activity implements View.OnClickL mActionStart = findViewById(R.id.setup_start_label); mActionStart.setOnClickListener(this); + mActionNext = findViewById(R.id.setup_next); mActionNext.setOnClickListener(this); + mActionFinish = findViewById(R.id.setup_finish); final Drawable finishDrawable = ContextCompat.getDrawable(this, R.drawable.ic_setup_check); - assert finishDrawable != null; - DrawableCompat.setTintList(finishDrawable, new ColorStateList(new int[][]{{android.R.attr.state_focused}, {android.R.attr.state_pressed}, {}}, - new int[]{Color.WHITE, Color.WHITE, step1.mActivatedColor})); + if (finishDrawable == null) { + return; + } + DrawableCompat.setTintList(finishDrawable, step1.mTextColorStateList); mActionFinish.setCompoundDrawablesRelativeWithIntrinsicBounds(finishDrawable, null, null, null); mActionFinish.setOnClickListener(this); + + // Set the status bar color + getWindow().setStatusBarColor(getResources().getColor(R.color.setup_background)); + // Navigation bar color + if (!isNight && !(Build.VERSION.SDK_INT >= Build.VERSION_CODES.S)) { + getWindow().setNavigationBarColor(ColorUtils.setAlphaComponent(Color.GRAY, 180)); + } else { + getWindow().setNavigationBarColor(getResources().getColor(R.color.setup_background)); + } + // Set the icons of the status bar and the navigation bar light or dark + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + final WindowInsetsController controller = getWindow().getInsetsController(); + if (controller == null) return; + if (!isNight) { + controller.setSystemBarsAppearance(WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS, WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS); + controller.setSystemBarsAppearance(WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS, WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS); + } + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + final View view = getWindow().getDecorView(); + view.setSystemUiVisibility(!isNight ? View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR : 0); + } } @Override @@ -402,8 +435,7 @@ public final class SetupWizardActivity extends Activity implements View.OnClickL public final int mStepNo; private final View mStepView; private final TextView mBulletView; - private final int mActivatedColor; - private final int mDeactivatedColor; + private final ColorStateList mTextColorStateList; private final String mInstruction; private final String mFinishedInstruction; private final TextView mActionLabel; @@ -416,26 +448,26 @@ public final class SetupWizardActivity extends Activity implements View.OnClickL mStepView = stepView; mBulletView = bulletView; final Resources res = stepView.getResources(); - mActivatedColor = res.getColor(R.color.setup_text_action); - mDeactivatedColor = res.getColor(R.color.setup_text_dark); + mTextColorStateList = AppCompatResources.getColorStateList(mStepView.getContext(), R.color.setup_step_action_text); final TextView titleView = mStepView.findViewById(R.id.setup_step_title); titleView.setText(res.getString(title, applicationName)); - mInstruction = (instruction == 0) ? null - : res.getString(instruction, applicationName); - mFinishedInstruction = (finishedInstruction == 0) ? null - : res.getString(finishedInstruction, applicationName); + + mInstruction = (instruction == 0) ? null : res.getString(instruction, applicationName); + mFinishedInstruction = (finishedInstruction == 0) ? null : res.getString(finishedInstruction, applicationName); mActionLabel = mStepView.findViewById(R.id.setup_step_action_label); mActionLabel.setText(res.getString(actionLabel)); - final Drawable actionIconDrawable = res.getDrawable(actionIcon); - DrawableCompat.setTintList(actionIconDrawable, new ColorStateList(new int[][]{{android.R.attr.state_focused}, {android.R.attr.state_pressed}, {}}, - new int[]{Color.WHITE, Color.WHITE, this.mActivatedColor})); + final Drawable actionIconDrawable = ResourcesCompat.getDrawable(res, actionIcon, null); + if (actionIconDrawable == null) { + return; + } + DrawableCompat.setTintList(actionIconDrawable, mTextColorStateList); if (actionIcon == 0) { final int paddingEnd = mActionLabel.getPaddingEnd(); mActionLabel.setPaddingRelative(paddingEnd, 0, paddingEnd, 0); } else { - int size = (int) (24 * res.getDisplayMetrics().density); // width and height of drawables is 24dp + final int size = (int) TypedValue.applyDimension(COMPLEX_UNIT_DIP, 24f, res.getDisplayMetrics()); actionIconDrawable.setBounds(0,0, size, size); mActionLabel.setCompoundDrawablesRelative(actionIconDrawable, null, null, null); } @@ -443,9 +475,10 @@ public final class SetupWizardActivity extends Activity implements View.OnClickL public void setEnabled(final boolean enabled, final boolean isStepActionAlreadyDone) { mStepView.setVisibility(enabled ? View.VISIBLE : View.GONE); - mBulletView.setTextColor(enabled ? mActivatedColor : mDeactivatedColor); - final TextView instructionView = mStepView.findViewById( - R.id.setup_step_instruction); + mBulletView.setTextColor(enabled + ? mBulletView.getContext().getResources().getColor(R.color.setup_step_action_text_pressed) + : mBulletView.getContext().getResources().getColor(R.color.setup_text_action)); + final TextView instructionView = mStepView.findViewById(R.id.setup_step_instruction); instructionView.setText(isStepActionAlreadyDone ? mFinishedInstruction : mInstruction); mActionLabel.setVisibility(isStepActionAlreadyDone ? View.GONE : View.VISIBLE); } diff --git a/app/src/main/res/color/setup_step_action_background.xml b/app/src/main/res/color/setup_step_action_background.xml index 21f8112e9..73a7e7aea 100644 --- a/app/src/main/res/color/setup_step_action_background.xml +++ b/app/src/main/res/color/setup_step_action_background.xml @@ -7,10 +7,10 @@ + android:color="@color/setup_step_action_pressed" /> + android:color="@color/setup_step_action_pressed" /> diff --git a/app/src/main/res/color/setup_step_action_color.xml b/app/src/main/res/color/setup_step_action_text.xml similarity index 58% rename from app/src/main/res/color/setup_step_action_color.xml rename to app/src/main/res/color/setup_step_action_text.xml index 798320f03..34d8b6ef1 100644 --- a/app/src/main/res/color/setup_step_action_color.xml +++ b/app/src/main/res/color/setup_step_action_text.xml @@ -1,16 +1,14 @@ - + android:color="@color/setup_step_action_text_pressed" /> + android:color="@color/setup_step_action_text_pressed" /> diff --git a/app/src/main/res/drawable/setup_step_action_background.xml b/app/src/main/res/drawable/setup_step_action_background.xml index 21cf1a418..c74c6dd0c 100644 --- a/app/src/main/res/drawable/setup_step_action_background.xml +++ b/app/src/main/res/drawable/setup_step_action_background.xml @@ -7,10 +7,10 @@ + android:drawable="@color/setup_step_action_pressed" /> + android:drawable="@color/setup_step_action_pressed" /> diff --git a/app/src/main/res/layout/setup_steps_cards.xml b/app/src/main/res/layout/setup_steps_cards.xml index 67cbad791..9e58c58da 100644 --- a/app/src/main/res/layout/setup_steps_cards.xml +++ b/app/src/main/res/layout/setup_steps_cards.xml @@ -30,7 +30,7 @@ android:id="@+id/setup_step_indicator" style="@style/setupStepIndicatorStyle" /> + style="@style/setupWelcomeDescriptionStyle" /> diff --git a/app/src/main/res/values-night-v31/colors.xml b/app/src/main/res/values-night-v31/colors.xml new file mode 100644 index 000000000..828a62abc --- /dev/null +++ b/app/src/main/res/values-night-v31/colors.xml @@ -0,0 +1,15 @@ + + + + @android:color/system_accent1_500 + + + @android:color/system_neutral1_900 + @android:color/system_accent1_500 + @android:color/system_accent1_700 + @android:color/system_accent1_300 + #FFFFFFFF + @android:color/system_accent1_500 + diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml index 2fc93001c..15bfb5022 100644 --- a/app/src/main/res/values-night/colors.xml +++ b/app/src/main/res/values-night/colors.xml @@ -9,4 +9,13 @@ @color/highlight_color_lxx_dark @color/keyboard_background_dark + + + #FF303030 + #FF2D4260 + #FF314868 + #FF5C94F1 + #FFFFFFFF + #FF5E9CED + #FFCCCCCC diff --git a/app/src/main/res/values-v31/colors.xml b/app/src/main/res/values-v31/colors.xml index c664b6b6e..085ac437c 100644 --- a/app/src/main/res/values-v31/colors.xml +++ b/app/src/main/res/values-v31/colors.xml @@ -1,10 +1,7 @@ - @android:color/system_accent1_500 @@ -17,4 +14,12 @@ @android:color/system_neutral1_100 @android:color/system_neutral1_800 + + + @android:color/system_neutral1_10 + @android:color/system_accent1_50 + @android:color/system_accent1_100 + @android:color/system_accent1_700 + @android:color/system_accent1_700 + @android:color/system_accent1_500 diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 6ba4be5e4..32d00c279 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -53,10 +53,12 @@ @android:color/white - #FFEBEBEB - #FF707070 - @android:color/holo_blue_light - @android:color/background_light + #FFFAFAFA + #FFD1E3FA + #FFE8F1FC + #FF1767CF + #FF1767CF + #FF5E9CED #FFCCCCCC diff --git a/app/src/main/res/values/setup-styles-common.xml b/app/src/main/res/values/setup-styles-common.xml index d8fa244df..0ab0159a5 100644 --- a/app/src/main/res/values/setup-styles-common.xml +++ b/app/src/main/res/values/setup-styles-common.xml @@ -1,16 +1,17 @@ - - + +