diff --git a/app/src/main/java/com/philliphsu/clock2/alarms/ui/ExpandedAlarmViewHolder.java b/app/src/main/java/com/philliphsu/clock2/alarms/ui/ExpandedAlarmViewHolder.java index dad96b4..d196136 100644 --- a/app/src/main/java/com/philliphsu/clock2/alarms/ui/ExpandedAlarmViewHolder.java +++ b/app/src/main/java/com/philliphsu/clock2/alarms/ui/ExpandedAlarmViewHolder.java @@ -1,26 +1,28 @@ package com.philliphsu.clock2.alarms.ui; +import android.content.Context; import android.content.res.ColorStateList; import android.graphics.drawable.Drawable; import android.media.RingtoneManager; import android.net.Uri; +import android.os.Vibrator; import android.support.annotation.IdRes; +import android.support.design.widget.CheckableImageButton; import android.support.v4.graphics.drawable.DrawableCompat; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.Button; -import android.widget.CheckBox; import android.widget.ToggleButton; -import com.philliphsu.clock2.list.OnListItemInteractionListener; import com.philliphsu.clock2.R; import com.philliphsu.clock2.alarms.Alarm; import com.philliphsu.clock2.alarms.misc.AlarmController; import com.philliphsu.clock2.alarms.misc.DaysOfWeek; import com.philliphsu.clock2.dialogs.RingtonePickerDialog; -import com.philliphsu.clock2.timepickers.Utils; import com.philliphsu.clock2.dialogs.RingtonePickerDialogController; +import com.philliphsu.clock2.list.OnListItemInteractionListener; +import com.philliphsu.clock2.timepickers.Utils; import com.philliphsu.clock2.util.FragmentTagUtils; import butterknife.Bind; @@ -35,11 +37,12 @@ public class ExpandedAlarmViewHolder extends BaseAlarmViewHolder { @Bind(R.id.ok) Button mOk; @Bind(R.id.delete) Button mDelete; @Bind(R.id.ringtone) Button mRingtone; - @Bind(R.id.vibrate) CheckBox mVibrate; + @Bind(R.id.vibrate) CheckableImageButton mVibrate; @Bind({R.id.day0, R.id.day1, R.id.day2, R.id.day3, R.id.day4, R.id.day5, R.id.day6}) ToggleButton[] mDays; private final ColorStateList mDayToggleColors; + private final ColorStateList mVibrateColors; private final RingtonePickerDialogController mRingtonePickerController; public ExpandedAlarmViewHolder(ViewGroup parent, final OnListItemInteractionListener listener, @@ -83,11 +86,16 @@ public class ExpandedAlarmViewHolder extends BaseAlarmViewHolder { }; // TODO: Phase out Utils.getColorFromThemeAttr because it doesn't work for text colors. // WHereas getTextColorFromThemeAttr works for both regular colors and text colors. - int[] colors = { + int[] dayToggleColors = { /*item 1*/Utils.getTextColorFromThemeAttr(getContext(), R.attr.colorAccent), /*item 2*/Utils.getTextColorFromThemeAttr(getContext(), android.R.attr.textColorHint) }; - mDayToggleColors = new ColorStateList(states, colors); + int[] vibrateColors = { + /*item 1*/Utils.getTextColorFromThemeAttr(getContext(), R.attr.colorAccent), + /*item 2*/Utils.getTextColorFromThemeAttr(getContext(), R.attr.themedIconTint) + }; + mDayToggleColors = new ColorStateList(states, dayToggleColors); + mVibrateColors = new ColorStateList(states, vibrateColors); mRingtonePickerController = new RingtonePickerDialogController(mFragmentManager, new RingtonePickerDialog.OnRingtoneSelectedListener() { @@ -149,9 +157,14 @@ public class ExpandedAlarmViewHolder extends BaseAlarmViewHolder { @OnClick(R.id.vibrate) void onVibrateToggled() { + final boolean checked = mVibrate.isChecked(); + if (checked) { + Vibrator vibrator = (Vibrator) getContext().getSystemService(Context.VIBRATOR_SERVICE); + vibrator.vibrate(300); + } final Alarm oldAlarm = getAlarm(); Alarm newAlarm = oldAlarm.toBuilder() - .vibrates(mVibrate.isChecked()) + .vibrates(checked) .build(); oldAlarm.copyMutableFieldsTo(newAlarm); persistUpdatedAlarm(newAlarm, false); @@ -198,6 +211,7 @@ public class ExpandedAlarmViewHolder extends BaseAlarmViewHolder { } private void bindVibrate(boolean vibrates) { + Utils.setTintList(mVibrate, mVibrate.getDrawable(), mVibrateColors); mVibrate.setChecked(vibrates); } diff --git a/app/src/main/java/com/philliphsu/clock2/alarms/ui/TempCheckableImageButton.java b/app/src/main/java/com/philliphsu/clock2/alarms/ui/TempCheckableImageButton.java new file mode 100644 index 0000000..bd13e15 --- /dev/null +++ b/app/src/main/java/com/philliphsu/clock2/alarms/ui/TempCheckableImageButton.java @@ -0,0 +1,39 @@ +package com.philliphsu.clock2.alarms.ui; + +import android.content.Context; +import android.support.design.widget.CheckableImageButton; +import android.util.AttributeSet; +import android.view.SoundEffectConstants; + +/** + * Created by Phillip Hsu on 9/26/2016. + * + * Temporary fix for design support library's CheckableImageButton that toggles itself when clicked. + */ +public class TempCheckableImageButton extends CheckableImageButton { + + public TempCheckableImageButton(Context context) { + super(context); + } + + public TempCheckableImageButton(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public TempCheckableImageButton(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + @Override // borrowed from CompoundButton#performClick() + public boolean performClick() { + toggle(); + final boolean handled = super.performClick(); + if (!handled) { + // View only makes a sound effect if the onClickListener was + // called, so we'll need to make one here instead. + playSoundEffect(SoundEffectConstants.CLICK); + } + return handled; + } + +} diff --git a/app/src/main/res/drawable/ic_vibrate_24dp.xml b/app/src/main/res/drawable/ic_vibrate_24dp.xml new file mode 100644 index 0000000..1730e1c --- /dev/null +++ b/app/src/main/res/drawable/ic_vibrate_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/item_expanded_alarm.xml b/app/src/main/res/layout/item_expanded_alarm.xml index c90e9d9..395e0b0 100644 --- a/app/src/main/res/layout/item_expanded_alarm.xml +++ b/app/src/main/res/layout/item_expanded_alarm.xml @@ -103,12 +103,9 @@ android:drawableStart="@drawable/ic_ringtone_24dp" android:drawablePadding="@dimen/text_compound_drawable_padding"/> - - + style="@style/AlarmVibrateToggle"/> diff --git a/app/src/main/res/values-v21/styles_alarm.xml b/app/src/main/res/values-v21/styles_alarm.xml new file mode 100644 index 0000000..e2630c5 --- /dev/null +++ b/app/src/main/res/values-v21/styles_alarm.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 3edeef4..583a703 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -63,6 +63,7 @@ 2dp 48dp + 48dp 8dp diff --git a/app/src/main/res/values/styles_alarm.xml b/app/src/main/res/values/styles_alarm.xml index e018bd0..4252c2e 100644 --- a/app/src/main/res/values/styles_alarm.xml +++ b/app/src/main/res/values/styles_alarm.xml @@ -1,10 +1,17 @@ - + + \ No newline at end of file