diff --git a/app/src/main/java/com/philliphsu/clock2/aospdatetimepicker/Utils.java b/app/src/main/java/com/philliphsu/clock2/aospdatetimepicker/Utils.java
index f566f14..c7f7912 100644
--- a/app/src/main/java/com/philliphsu/clock2/aospdatetimepicker/Utils.java
+++ b/app/src/main/java/com/philliphsu/clock2/aospdatetimepicker/Utils.java
@@ -20,10 +20,12 @@ import android.animation.Keyframe;
import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
import android.annotation.SuppressLint;
+import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
+import android.graphics.drawable.RippleDrawable;
import android.os.Build;
import android.support.annotation.AttrRes;
import android.support.annotation.ColorInt;
@@ -55,7 +57,6 @@ public class Utils {
// Alpha level for fully opaque.
public static final int FULL_ALPHA = 255;
-
static final String SHARED_PREFS_NAME = "com.android.calendar_preferences";
public static boolean isJellybeanOrLater() {
@@ -245,6 +246,20 @@ public class Utils {
return d;
}
+ /**
+ * Sets the color on the {@code view}'s RippleDrawable background,
+ * if its background was set to {@code android.R.attr.selectableItemBackground} or
+ * {@code android.R.attr.selectableItemBackgroundBorderless}.
+ * @param view the view that should have its highlight color changed
+ */
+ @TargetApi(Build.VERSION_CODES.LOLLIPOP)
+ public static void setColorControlHighlight(@NonNull View view, @ColorInt int color) {
+ Drawable selectableItemBackground = view.getBackground();
+ if (selectableItemBackground instanceof RippleDrawable) {
+ ((RippleDrawable) selectableItemBackground).setColor(ColorStateList.valueOf(color));
+ }
+ }
+
/**
* Gets dialog type (Light/Dark) from current theme
* @param context The context to use as reference for the boolean
diff --git a/app/src/main/java/com/philliphsu/clock2/editalarm/GridLayoutNumpad.java b/app/src/main/java/com/philliphsu/clock2/editalarm/GridLayoutNumpad.java
index a40bf72..63526c5 100644
--- a/app/src/main/java/com/philliphsu/clock2/editalarm/GridLayoutNumpad.java
+++ b/app/src/main/java/com/philliphsu/clock2/editalarm/GridLayoutNumpad.java
@@ -11,6 +11,7 @@ import android.view.View;
import android.widget.TextView;
import com.philliphsu.clock2.R;
+import com.philliphsu.clock2.aospdatetimepicker.Utils;
import java.util.Arrays;
@@ -39,7 +40,8 @@ public abstract class GridLayoutNumpad extends GridLayout {
private int mCount = 0;
private OnInputChangeListener mOnInputChangeListener;
- ColorStateList mColors;
+ private ColorStateList mTextColors;
+ int mAccentColor;
@Bind({ R.id.zero, R.id.one, R.id.two, R.id.three, R.id.four,
R.id.five, R.id.six, R.id.seven, R.id.eight, R.id.nine })
@@ -63,8 +65,7 @@ public abstract class GridLayoutNumpad extends GridLayout {
}
public GridLayoutNumpad(Context context) {
- super(context);
- init();
+ this(context, null);
}
public GridLayoutNumpad(Context context, AttributeSet attrs) {
@@ -83,13 +84,29 @@ public abstract class GridLayoutNumpad extends GridLayout {
// The buttons are actually of type Button, but we kept references
// to them as TextViews... which is fine since TextView is the superclass
// of Button.
- mColors = ContextCompat.getColorStateList(context,
- themeDark? R.color.numeric_keypad_button_text_dark : R.color.numeric_keypad_button_text);
+ mTextColors = ContextCompat.getColorStateList(context, themeDark?
+ R.color.numeric_keypad_button_text_dark : R.color.numeric_keypad_button_text);
+
+ // AFAIK, the only way to get the user's accent color is programmatically,
+ // because it is uniquely defined in their app's theme. It is not possible
+ // for us to reference that via XML (i.e. with ?colorAccent or similar),
+ // which happens at compile time.
+ // TOneverDO: Use any other Context to retrieve the accent color. We must use
+ // the Context param passed to us, because we know this context to be
+ // NumpadTimePickerDialog.getContext(), which is equivalent to
+ // NumpadTimePickerDialog.getActivity(). It is from that Activity where we
+ // get its theme's colorAccent.
+ mAccentColor = Utils.getThemeAccentColor(context);
for (TextView b : mButtons) {
- b.setTextColor(mColors);
+ setTextColor(b);
+ Utils.setColorControlHighlight(b, mAccentColor);
}
}
+ void setTextColor(TextView view) {
+ view.setTextColor(mTextColors);
+ }
+
/**
* @return the number of digits we can input
*/
diff --git a/app/src/main/java/com/philliphsu/clock2/editalarm/NumberGridTimePickerDialog.java b/app/src/main/java/com/philliphsu/clock2/editalarm/NumberGridTimePickerDialog.java
index 87e7d62..410c1ee 100644
--- a/app/src/main/java/com/philliphsu/clock2/editalarm/NumberGridTimePickerDialog.java
+++ b/app/src/main/java/com/philliphsu/clock2/editalarm/NumberGridTimePickerDialog.java
@@ -503,6 +503,9 @@ public class NumberGridTimePickerDialog extends BaseTimePickerDialog implements
mHalfDayToggleUnselectedColor = ContextCompat.getColor(getContext(),
mThemeDark? R.color.text_color_primary_dark : R.color.text_color_primary_light);
+ Utils.setColorControlHighlight(mLeftHalfDayToggle, accentColor);
+ Utils.setColorControlHighlight(mRightHalfDayToggle, accentColor);
+
// Update the half day at the end when the state colors have been initialized
updateHalfDay(mInitialHourOfDay < 12? AM : PM);
return view;
diff --git a/app/src/main/java/com/philliphsu/clock2/editalarm/NumbersGrid.java b/app/src/main/java/com/philliphsu/clock2/editalarm/NumbersGrid.java
index 9038237..5be57cf 100644
--- a/app/src/main/java/com/philliphsu/clock2/editalarm/NumbersGrid.java
+++ b/app/src/main/java/com/philliphsu/clock2/editalarm/NumbersGrid.java
@@ -22,7 +22,7 @@ public abstract class NumbersGrid extends GridLayout implements View.OnClickList
OnNumberSelectedListener mSelectionListener;
View mLastSelectedView;
- private final int mSelectedTextColor;
+ final int mSelectedTextColor;
// TODO: The half-day buttons in the dialog's layout also need to use this color.
// Consider moving this to either the Dialog class, or move the buttons and the FAB
// to the GridSelectorLayout class and then move these to GridSelectorLayout.
@@ -48,6 +48,10 @@ public abstract class NumbersGrid extends GridLayout implements View.OnClickList
mIsInitialized = false;
// mDefaultTextColor = Utils.getTextColorFromThemeAttr(context, android.R.attr.textColorPrimary);
mDefaultTextColor = ContextCompat.getColor(context, R.color.text_color_primary_light);
+ // The reason we can use the Context passed here and get the correct accent color
+ // is that this NumbersGrid is programmatically created by the GridSelectorLayout in
+ // its initialize(), and the Context passed in there is from
+ // NumberGridTimePickerDialog.getActivity().
mSelectedTextColor = Utils.getThemeAccentColor(context);
// Show the first button as default selected
setIndicator(getChildAt(indexOfDefaultValue()));
@@ -142,6 +146,7 @@ public abstract class NumbersGrid extends GridLayout implements View.OnClickList
R.color.text_color_primary_dark : R.color.text_color_primary_light);
for (int i = 0; i < getChildCount(); i++) {
View v = getChildAt(i);
+ Utils.setColorControlHighlight(v, mSelectedTextColor/*colorAccent*/);
// Filter out views that aren't number buttons
if (canRegisterClickListener(v)) {
((TextView) v).setTextColor(mDefaultTextColor);
diff --git a/app/src/main/java/com/philliphsu/clock2/editalarm/NumpadTimePicker.java b/app/src/main/java/com/philliphsu/clock2/editalarm/NumpadTimePicker.java
index 7915405..437ebcd 100644
--- a/app/src/main/java/com/philliphsu/clock2/editalarm/NumpadTimePicker.java
+++ b/app/src/main/java/com/philliphsu/clock2/editalarm/NumpadTimePicker.java
@@ -63,7 +63,6 @@ public class NumpadTimePicker extends GridLayoutNumpad {
@Bind(R.id.backspace) ImageButton mBackspace;
private boolean mThemeDark;
- private int mAccentColor;
private int mFabDisabledColorDark;
private int mFabDisabledColorLight;
@@ -105,12 +104,20 @@ public class NumpadTimePicker extends GridLayoutNumpad {
void setTheme(Context context, boolean themeDark) {
super.setTheme(context, themeDark);
mThemeDark = themeDark;
+ // this.getContext() ==> default teal accent color
+ // application context ==> white
+ // The Context that was passed in is NumpadTimePickerDialog.getContext() which
+ // is probably the host Activity. I have no idea what this.getContext() returns,
+ // but its probably some internal type that isn't tied to any of our application
+ // components.
// So, we kept the 0-9 buttons as TextViews, but here we kept
// the alt buttons as actual Buttons...
for (Button b : mAltButtons) {
- b.setTextColor(mColors);
+ setTextColor(b);
+ Utils.setColorControlHighlight(b, mAccentColor);
}
+ Utils.setColorControlHighlight(mBackspace, mAccentColor);
ColorStateList colorBackspace = ContextCompat.getColorStateList(context,
themeDark? R.color.icon_color_dark : R.color.icon_color);
@@ -120,13 +127,6 @@ public class NumpadTimePicker extends GridLayoutNumpad {
themeDark? R.color.icon_color_dark : R.color.fab_icon_color);
Utils.setTintList(mFab, mFab.getDrawable(), colorIcon);
- // this.getContext() ==> default teal accent color
- // application context ==> white
- // The Context that was passed in is NumpadTimePickerDialog.getContext() which
- // is probably the host Activity. I have no idea what this.getContext() returns,
- // but its probably some internal type that isn't tied to any of our application
- // components.
- mAccentColor = Utils.getThemeAccentColor(context);
// Make sure the dark theme disabled color shows up initially
updateFabState();
}
diff --git a/app/src/main/java/com/philliphsu/clock2/editalarm/NumpadTimePickerDialog.java b/app/src/main/java/com/philliphsu/clock2/editalarm/NumpadTimePickerDialog.java
index 916ae44..3ff9de5 100644
--- a/app/src/main/java/com/philliphsu/clock2/editalarm/NumpadTimePickerDialog.java
+++ b/app/src/main/java/com/philliphsu/clock2/editalarm/NumpadTimePickerDialog.java
@@ -59,7 +59,7 @@ public class NumpadTimePickerDialog extends BaseTimePickerDialog
NumpadTimePickerDialog ret = new NumpadTimePickerDialog();
// TODO: Do these in initialize()
ret.setOnTimeSetListener(callback);
- ret.mThemeDark = true;
+ ret.mThemeDark = false;
return ret;
}
diff --git a/app/src/main/java/com/philliphsu/clock2/editalarm/TwentyFourHoursGrid.java b/app/src/main/java/com/philliphsu/clock2/editalarm/TwentyFourHoursGrid.java
index 9bf40a2..db851b5 100644
--- a/app/src/main/java/com/philliphsu/clock2/editalarm/TwentyFourHoursGrid.java
+++ b/app/src/main/java/com/philliphsu/clock2/editalarm/TwentyFourHoursGrid.java
@@ -5,6 +5,7 @@ import android.support.v4.content.ContextCompat;
import android.view.View;
import com.philliphsu.clock2.R;
+import com.philliphsu.clock2.aospdatetimepicker.Utils;
/**
* Created by Phillip Hsu on 8/17/2016.
@@ -84,6 +85,7 @@ public class TwentyFourHoursGrid extends NumbersGrid implements View.OnLongClick
R.color.text_color_secondary_dark : R.color.text_color_secondary_light);
for (int i = 0; i < getChildCount(); i++) {
TwentyFourHourGridItem item = (TwentyFourHourGridItem) getChildAt(i);
+ Utils.setColorControlHighlight(item, mSelectedTextColor/*colorAccent*/);
item.getPrimaryTextView().setTextColor(mDefaultTextColor);
item.getSecondaryTextView().setTextColor(mSecondaryTextColor);
}
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 0e7ad0b..4f74898 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -37,7 +37,7 @@
- 1
- @dimen/numeric_keypad_cell_height
- - ?android:attr/selectableItemBackground
+ - ?android:attr/selectableItemBackgroundBorderless
- center
@@ -122,6 +122,9 @@