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 c261015..f566f14 100644
--- a/app/src/main/java/com/philliphsu/clock2/aospdatetimepicker/Utils.java
+++ b/app/src/main/java/com/philliphsu/clock2/aospdatetimepicker/Utils.java
@@ -21,12 +21,21 @@ import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
import android.annotation.SuppressLint;
import android.content.Context;
+import android.content.res.ColorStateList;
import android.content.res.TypedArray;
+import android.graphics.drawable.Drawable;
import android.os.Build;
import android.support.annotation.AttrRes;
+import android.support.annotation.ColorInt;
+import android.support.annotation.DrawableRes;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.content.ContextCompat;
+import android.support.v4.graphics.drawable.DrawableCompat;
import android.text.format.Time;
import android.util.TypedValue;
import android.view.View;
+import android.widget.ImageView;
import com.philliphsu.clock2.R;
@@ -191,6 +200,51 @@ public class Utils {
return value.data;
}
+ /**
+ * Mutates the given drawable, applies the specified tint list, and sets this tinted
+ * drawable on the target ImageView.
+ *
+ * @param target the ImageView that should have the tinted drawable set on
+ * @param drawable the drawable to tint
+ * @param tintList Color state list to use for tinting this drawable, or null to clear the tint
+ */
+ public static void setTintList(ImageView target, Drawable drawable, ColorStateList tintList) {
+ // TODO: What is the VectorDrawable counterpart for this process?
+ // Use a mutable instance of the drawable, so we only affect this instance.
+ // This is especially useful when you need to modify properties of drawables loaded from
+ // resources. By default, all drawables instances loaded from the same resource share a
+ // common state; if you modify the state of one instance, all the other instances will
+ // receive the same modification.
+ // Wrap drawable so that it may be used for tinting across the different
+ // API levels, via the tinting methods in this class.
+ drawable = DrawableCompat.wrap(drawable.mutate());
+ DrawableCompat.setTintList(drawable, tintList);
+ target.setImageDrawable(drawable);
+ }
+
+ /**
+ * Returns a tinted drawable from the given drawable resource, if {@code tintList != null}.
+ * Otherwise, no tint will be applied.
+ */
+ public static Drawable getTintedDrawable(@NonNull Context context,
+ @DrawableRes int drawableRes,
+ @Nullable ColorStateList tintList) {
+ Drawable d = DrawableCompat.wrap(ContextCompat.getDrawable(context, drawableRes).mutate());
+ DrawableCompat.setTintList(d, tintList);
+ return d;
+ }
+
+ /**
+ * Returns a tinted drawable from the given drawable resource and color resource.
+ */
+ public static Drawable getTintedDrawable(@NonNull Context context,
+ @DrawableRes int drawableRes,
+ @ColorInt int colorInt) {
+ Drawable d = DrawableCompat.wrap(ContextCompat.getDrawable(context, drawableRes).mutate());
+ DrawableCompat.setTint(d, colorInt);
+ return d;
+ }
+
/**
* 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/MinutesGrid.java b/app/src/main/java/com/philliphsu/clock2/editalarm/MinutesGrid.java
index 17dc954..57de40a 100644
--- a/app/src/main/java/com/philliphsu/clock2/editalarm/MinutesGrid.java
+++ b/app/src/main/java/com/philliphsu/clock2/editalarm/MinutesGrid.java
@@ -1,10 +1,12 @@
package com.philliphsu.clock2.editalarm;
import android.content.Context;
+import android.support.v4.content.ContextCompat;
import android.view.View;
import android.widget.ImageButton;
import com.philliphsu.clock2.R;
+import com.philliphsu.clock2.aospdatetimepicker.Utils;
/**
* Created by Phillip Hsu on 8/17/2016.
@@ -52,8 +54,21 @@ public class MinutesGrid extends NumbersGrid {
@Override
void setTheme(Context context, boolean themeDark) {
super.setTheme(context, themeDark);
- mMinusButton.setImageResource(themeDark? R.drawable.ic_minus_circle_dark_24dp : R.drawable.ic_minus_circle_24dp);
- mPlusButton.setImageResource(themeDark? R.drawable.ic_add_circle_dark_24dp : R.drawable.ic_add_circle_24dp);
+ if (themeDark) {
+ // Resources default to dark-themed color (#FFFFFF)
+ // If vector fill color is transparent, programmatically tinting will not work.
+ // Since dark-themed active icon color is fully opaque, use that color as the
+ // base color and tint at runtime as needed.
+ mMinusButton.setImageResource(R.drawable.ic_minus_circle_24dp);
+ mPlusButton.setImageResource(R.drawable.ic_add_circle_24dp);
+ } else {
+ // Tint drawables
+ final int colorActiveLight = ContextCompat.getColor(context, R.color.icon_color_active_light);
+ mMinusButton.setImageDrawable(Utils.getTintedDrawable(
+ context, R.drawable.ic_minus_circle_24dp, colorActiveLight));
+ mPlusButton.setImageDrawable(Utils.getTintedDrawable(
+ context, R.drawable.ic_add_circle_24dp, colorActiveLight));
+ }
}
/**
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 19b744b..12cfc97 100644
--- a/app/src/main/java/com/philliphsu/clock2/editalarm/NumberGridTimePickerDialog.java
+++ b/app/src/main/java/com/philliphsu/clock2/editalarm/NumberGridTimePickerDialog.java
@@ -45,8 +45,6 @@ import java.util.Locale;
import butterknife.Bind;
import butterknife.OnClick;
-import static com.philliphsu.clock2.util.ConversionUtils.dpToPx;
-
//import com.android.datetimepicker.HapticFeedbackController;
//import com.android.datetimepicker.R;
//import com.android.datetimepicker.Utils;
@@ -132,8 +130,6 @@ public class NumberGridTimePickerDialog extends BaseTimePickerDialog implements
private int mHalfDayToggleUnselectedColor;
// ====================================== MY STUFF =============================================
- // The padding in dp for the half day icon compound drawable
- public static final int HALF_DAY_ICON_PADDING = 8;
// Describes both AM/PM in the 12-hour clock and the half-days of the 24-hour clock.
// TODO: Use the *values* of AM and PM instead.
@@ -245,7 +241,7 @@ public class NumberGridTimePickerDialog extends BaseTimePickerDialog implements
mInitialMinute = minute;
mIs24HourMode = is24HourMode;
mInKbMode = false;
- mThemeDark = false;
+ mThemeDark = true;
}
/**
@@ -321,17 +317,20 @@ public class NumberGridTimePickerDialog extends BaseTimePickerDialog implements
TextView tv1 = (TextView) mLeftHalfDayToggle.getChildAt(0);
TextView tv2 = (TextView) mRightHalfDayToggle.getChildAt(0);
if (mIs24HourMode) {
+ final int iconPadding = getResources().getDimensionPixelSize(R.dimen.half_day_icon_padding);
tv1.setText("00 - 11");
// Intrinsic bounds meaning the drawable's own bounds? So 24dp box.
+ // We need different drawable resources for each case, not a single one that we
+ // just tint differently, because the orientation of each one is different.
tv1.setCompoundDrawablesWithIntrinsicBounds(
mThemeDark? R.drawable.ic_half_day_1_dark_24dp : R.drawable.ic_half_day_1_24dp,
0, 0, 0);
- tv1.setCompoundDrawablePadding((int) dpToPx(getActivity(), HALF_DAY_ICON_PADDING));
+ tv1.setCompoundDrawablePadding(iconPadding);
tv2.setText("12 - 23");
tv2.setCompoundDrawablesWithIntrinsicBounds(
mThemeDark? R.drawable.ic_half_day_2_dark_24dp : R.drawable.ic_half_day_2_24dp,
0, 0, 0);
- tv2.setCompoundDrawablePadding((int) dpToPx(getActivity(), HALF_DAY_ICON_PADDING));
+ tv2.setCompoundDrawablePadding(iconPadding);
} else {
tv1.setText(mAmText);
tv2.setText(mPmText);
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 2d40252..7915405 100644
--- a/app/src/main/java/com/philliphsu/clock2/editalarm/NumpadTimePicker.java
+++ b/app/src/main/java/com/philliphsu/clock2/editalarm/NumpadTimePicker.java
@@ -3,13 +3,11 @@ package com.philliphsu.clock2.editalarm;
import android.animation.ObjectAnimator;
import android.content.Context;
import android.content.res.ColorStateList;
-import android.graphics.drawable.Drawable;
import android.os.Build;
import android.support.annotation.IntDef;
import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.content.ContextCompat;
-import android.support.v4.graphics.drawable.DrawableCompat;
import android.text.format.DateFormat;
import android.util.AttributeSet;
import android.view.animation.DecelerateInterpolator;
@@ -114,29 +112,13 @@ public class NumpadTimePicker extends GridLayoutNumpad {
b.setTextColor(mColors);
}
- // Get a mutable instance of the drawable, so we only affect this instance.
- // This is especially useful when you need to modify properties of drawables loaded from
- // resources. By default, all drawables instances loaded from the same resource share a
- // common state; if you modify the state of one instance, all the other instances will
- // receive the same modification.
- // TODO: What is the VectorDrawable counterpart for this process?
- Drawable backspaceDrawable = mBackspace.getDrawable().mutate();
- // Wrap drawable so that it may be used for tinting across the different
- // API levels, via the tinting methods in this class.
- backspaceDrawable = DrawableCompat.wrap(backspaceDrawable);
- // Prepare the tints
ColorStateList colorBackspace = ContextCompat.getColorStateList(context,
themeDark? R.color.icon_color_dark : R.color.icon_color);
- DrawableCompat.setTintList(backspaceDrawable, colorBackspace);
- mBackspace.setImageDrawable(backspaceDrawable);
+ Utils.setTintList(mBackspace, mBackspace.getDrawable(), colorBackspace);
- // TODO: What is the VectorDrawable counterpart for this process?
- Drawable iconDrawable = mFab.getDrawable().mutate();
- iconDrawable = DrawableCompat.wrap(iconDrawable);
ColorStateList colorIcon = ContextCompat.getColorStateList(context,
themeDark? R.color.icon_color_dark : R.color.fab_icon_color);
- DrawableCompat.setTintList(iconDrawable, colorIcon);
- mFab.setImageDrawable(iconDrawable);
+ Utils.setTintList(mFab, mFab.getDrawable(), colorIcon);
// this.getContext() ==> default teal accent color
// application context ==> white
diff --git a/app/src/main/res/drawable/ic_add_circle_24dp.xml b/app/src/main/res/drawable/ic_add_circle_24dp.xml
index 520b71c..7588c59 100644
--- a/app/src/main/res/drawable/ic_add_circle_24dp.xml
+++ b/app/src/main/res/drawable/ic_add_circle_24dp.xml
@@ -4,6 +4,6 @@
android:viewportWidth="24.0"
android:viewportHeight="24.0">
diff --git a/app/src/main/res/drawable/ic_add_circle_dark_24dp.xml b/app/src/main/res/drawable/ic_add_circle_dark_24dp.xml
deleted file mode 100644
index 7588c59..0000000
--- a/app/src/main/res/drawable/ic_add_circle_dark_24dp.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_half_day_1_24dp.xml b/app/src/main/res/drawable/ic_half_day_1_24dp.xml
index 2f9cd1e..cd45c7a 100644
--- a/app/src/main/res/drawable/ic_half_day_1_24dp.xml
+++ b/app/src/main/res/drawable/ic_half_day_1_24dp.xml
@@ -4,6 +4,6 @@
android:viewportWidth="24.0"
android:viewportHeight="24.0">
diff --git a/app/src/main/res/drawable/ic_minus_circle_24dp.xml b/app/src/main/res/drawable/ic_minus_circle_24dp.xml
index 30a5f06..073883f 100644
--- a/app/src/main/res/drawable/ic_minus_circle_24dp.xml
+++ b/app/src/main/res/drawable/ic_minus_circle_24dp.xml
@@ -4,6 +4,6 @@
android:viewportWidth="24.0"
android:viewportHeight="24.0">
diff --git a/app/src/main/res/drawable/ic_minus_circle_dark_24dp.xml b/app/src/main/res/drawable/ic_minus_circle_dark_24dp.xml
deleted file mode 100644
index 073883f..0000000
--- a/app/src/main/res/drawable/ic_minus_circle_dark_24dp.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
diff --git a/app/src/main/res/values/aosp_datetimepicker_dimens.xml b/app/src/main/res/values/aosp_datetimepicker_dimens.xml
index 068290d..7a868f3 100644
--- a/app/src/main/res/values/aosp_datetimepicker_dimens.xml
+++ b/app/src/main/res/values/aosp_datetimepicker_dimens.xml
@@ -64,4 +64,5 @@
6dp
+ 8dp
\ No newline at end of file