From 85844883269364668c7d8b458ab9b5422b772fc6 Mon Sep 17 00:00:00 2001 From: Phillip Hsu Date: Sat, 25 Feb 2017 01:03:23 -0800 Subject: [PATCH] Update gradle files and BottomSheetPickers library. Remove some conflicting classes and resources. --- app/build.gradle | 2 +- .../timepickers/AccessibleTextView.java | 46 - .../timepickers/BaseTimePickerDialog.java | 200 --- .../clock2/timepickers/GridLayoutNumpad.java | 297 ---- .../timepickers/GridSelectorLayout.java | 306 ----- .../clock2/timepickers/HoursGrid.java | 50 - .../clock2/timepickers/MinutesGrid.java | 98 -- .../NumberGridTimePickerDialog.java | 1192 ----------------- .../clock2/timepickers/NumbersGrid.java | 195 --- .../clock2/timepickers/NumpadTimePicker.java | 617 --------- .../timepickers/NumpadTimePickerDialog.java | 212 --- .../timepickers/TwentyFourHourGridItem.java | 98 -- .../timepickers/TwentyFourHoursGrid.java | 117 -- app/src/main/res/layout/time_header_label.xml | 119 -- .../bottomsheetpickers-debug.aar | Bin 132164 -> 0 bytes bottomsheetpickers-debug/build.gradle | 2 - .../bottomsheetpickers-release.aar | Bin 132096 -> 0 bytes bottomsheetpickers-release/build.gradle | 2 - build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 20 +- settings.gradle | 2 +- 21 files changed, 5 insertions(+), 3572 deletions(-) delete mode 100644 app/src/main/java/com/philliphsu/clock2/timepickers/AccessibleTextView.java delete mode 100644 app/src/main/java/com/philliphsu/clock2/timepickers/BaseTimePickerDialog.java delete mode 100644 app/src/main/java/com/philliphsu/clock2/timepickers/GridLayoutNumpad.java delete mode 100644 app/src/main/java/com/philliphsu/clock2/timepickers/GridSelectorLayout.java delete mode 100644 app/src/main/java/com/philliphsu/clock2/timepickers/HoursGrid.java delete mode 100644 app/src/main/java/com/philliphsu/clock2/timepickers/MinutesGrid.java delete mode 100644 app/src/main/java/com/philliphsu/clock2/timepickers/NumberGridTimePickerDialog.java delete mode 100644 app/src/main/java/com/philliphsu/clock2/timepickers/NumbersGrid.java delete mode 100644 app/src/main/java/com/philliphsu/clock2/timepickers/NumpadTimePicker.java delete mode 100644 app/src/main/java/com/philliphsu/clock2/timepickers/NumpadTimePickerDialog.java delete mode 100644 app/src/main/java/com/philliphsu/clock2/timepickers/TwentyFourHourGridItem.java delete mode 100644 app/src/main/java/com/philliphsu/clock2/timepickers/TwentyFourHoursGrid.java delete mode 100644 app/src/main/res/layout/time_header_label.xml delete mode 100644 bottomsheetpickers-debug/bottomsheetpickers-debug.aar delete mode 100644 bottomsheetpickers-debug/build.gradle delete mode 100644 bottomsheetpickers-release/bottomsheetpickers-release.aar delete mode 100644 bottomsheetpickers-release/build.gradle diff --git a/app/build.gradle b/app/build.gradle index 5646364..7845cc5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -90,5 +90,5 @@ dependencies { compile 'com.android.support:gridlayout-v7:24.2.0' compile 'com.android.support:cardview-v7:24.2.0' compile 'com.jakewharton:butterknife:7.0.1' - compile project(":bottomsheetpickers-release") + compile 'com.philliphsu:bottomsheetpickers:2.3.0' } diff --git a/app/src/main/java/com/philliphsu/clock2/timepickers/AccessibleTextView.java b/app/src/main/java/com/philliphsu/clock2/timepickers/AccessibleTextView.java deleted file mode 100644 index 924e1f8..0000000 --- a/app/src/main/java/com/philliphsu/clock2/timepickers/AccessibleTextView.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.philliphsu.clock2.timepickers; - -import android.content.Context; -import android.util.AttributeSet; -import android.view.accessibility.AccessibilityEvent; -import android.view.accessibility.AccessibilityNodeInfo; -import android.widget.Button; -import android.widget.TextView; - -/** - * Fake Button class, used so TextViews can announce themselves as Buttons, for accessibility. - */ -public class AccessibleTextView extends TextView { - - public AccessibleTextView(Context context, AttributeSet attrs) { - super(context, attrs); - } - - @Override - public void onInitializeAccessibilityEvent(AccessibilityEvent event) { - super.onInitializeAccessibilityEvent(event); - event.setClassName(Button.class.getName()); - } - - @Override - public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { - super.onInitializeAccessibilityNodeInfo(info); - info.setClassName(Button.class.getName()); - } -} diff --git a/app/src/main/java/com/philliphsu/clock2/timepickers/BaseTimePickerDialog.java b/app/src/main/java/com/philliphsu/clock2/timepickers/BaseTimePickerDialog.java deleted file mode 100644 index 1ccbb8a..0000000 --- a/app/src/main/java/com/philliphsu/clock2/timepickers/BaseTimePickerDialog.java +++ /dev/null @@ -1,200 +0,0 @@ -/* - * Copyright (C) 2016 Phillip Hsu - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.philliphsu.clock2.timepickers; - -import android.os.Bundle; -import android.support.annotation.LayoutRes; -import android.support.annotation.Nullable; -import android.support.design.widget.BottomSheetDialogFragment; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import butterknife.ButterKnife; - -/** - * Created by Phillip Hsu on 7/16/2016. - */ -public abstract class BaseTimePickerDialog extends BottomSheetDialogFragment { - private static final String TAG = "BaseTimePickerDialog"; - - private OnTimeSetListener mCallback; - - /** - * The callback interface used to indicate the user is done filling in - * the time (they clicked on the 'Set' button). - */ - public interface OnTimeSetListener { - /** - * @param viewGroup The view associated with this listener. - * @param hourOfDay The hour that was set. - * @param minute The minute that was set. - */ - // TODO: Consider removing VG param, since listeners probably won't need to use it.... - void onTimeSet(ViewGroup viewGroup, int hourOfDay, int minute); - } - - /** - * Empty constructor required for dialog fragment. - * Subclasses do not need to write their own. - */ - public BaseTimePickerDialog() {} - - @LayoutRes - protected abstract int contentLayout(); - - public final void setOnTimeSetListener(OnTimeSetListener callback) { - mCallback = callback; - } - - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - // Not needed for bottom sheet dialogs -// getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); - final View view = inflater.inflate(contentLayout(), container, false); - ButterKnife.bind(this, view); - - // TODO: We could move this to onCreateDialog() if we cared. - // - // onShow() is called immediately as this DialogFragment is showing, so the - // FAB's animation will barely be noticeable. -// getDialog().setOnShowListener(new DialogInterface.OnShowListener() { -// @Override -// public void onShow(DialogInterface dialog) { -// Log.i(TAG, "onShow()"); -// // Animate the FAB into view -// View v = view.findViewById(R.id.fab); -// if (v != null) { -// FloatingActionButton fab = (FloatingActionButton) v; -// fab.show(); -// } -// } -// }); - - return view; - } - - protected final void onTimeSet(ViewGroup vg, int hourOfDay, int minute) { - if (mCallback != null) { - mCallback.onTimeSet(vg, hourOfDay, minute); - } - dismiss(); - } - -// @Override -// public void onResume() { -// super.onResume(); -// final View view = getView(); -// final BottomSheetBehavior behavior = BottomSheetBehavior.from((View) view.getParent()); -// // Copy over the internal callback logic, and also implement our own -// // -// // This callback is set AFTER this Fragment has become visible, so is useless for what -// // you wanted to do (show the FAB during the settling phase). -// behavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() { -// @Override -// public void onStateChanged(@NonNull View bottomSheet, int newState) { -// Log.i(TAG, "onStateChanged(): " + newState); -// if (newState == BottomSheetBehavior.STATE_HIDDEN) { -// dismiss(); -// } -// // My logic below -// else if (newState == BottomSheetBehavior.STATE_SETTLING) { -// View fab = view.findViewById(R.id.fab); -// if (fab != null) { -// ((FloatingActionButton) fab).show(); -// } -// } -// } -// -// @Override -// public void onSlide(@NonNull View bottomSheet, float slideOffset) { -// -// } -// }); -// } - - @Override - public void onDestroyView() { - super.onDestroyView(); - ButterKnife.unbind(this); - } - - // Code for AlertDialog style only. -// @NonNull -// @Override -// public Dialog onCreateDialog(Bundle savedInstanceState) { -// // Use an AlertDialog to display footer buttons, rather than -// // re-invent them in our layout. -// AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); -// builder.setView(contentLayout()) -// // The action strings are already defined and localized by the system! -// .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { -// @Override -// public void onClick(DialogInterface dialog, int which) { -// -// } -// }) -// .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { -// @Override -// public void onClick(DialogInterface dialog, int which) { -// -// } -// }); -// return builder.create(); -// } - - // This was an unsatisfactory solution to forcing the bottom sheet to show at its - // fully expanded state. Our anchored FAB and GridLayout buttons would not be visible. -// @Override -// public Dialog onCreateDialog(Bundle savedInstanceState) { -// Dialog dialog = super.onCreateDialog(savedInstanceState); -// //dialog = new BottomSheetDialog(getActivity(), R.style.AppTheme_AppCompatDialog/*crashes our app!*/); -// // We're past onCreate() in the lifecycle, so the activity is alive. -// View view = LayoutInflater.from(getActivity()).inflate(contentLayout(), null); -// /** -// * Adds our view to a ViewGroup that has a BottomSheetBehavior attached. The ViewGroup -// * itself is a child of a CoordinatorLayout. -// * @see {@link BottomSheetDialog#wrapInBottomSheet(int, View, ViewGroup.LayoutParams)} -// */ -// dialog.setContentView(view); -// // Bind this fragment, not the internal dialog! (There is a bind(Dialog) API.) -// ButterKnife.bind(this, view); -// final BottomSheetBehavior behavior = BottomSheetBehavior.from((View) view.getParent()); - -// // When we collapse, collapse all the way. Do not be misled by the "docs" in -// // https://android-developers.blogspot.com.au/2016/02/android-support-library-232.html -// // when it says: -// // "STATE_COLLAPSED: ... the app:behavior_peekHeight attribute (defaults to 0)" -// // While it is true by default, BottomSheetDialogs override this default height. - - // This means the sheet is considered "open" even at a height of 0! This is why -// // when you swipe to hide the sheet, the screen remains darkened--indicative -// // of an open dialog. -// behavior.setPeekHeight(0); - -// dialog.setOnShowListener(new DialogInterface.OnShowListener() { -// @Override -// public void onShow(DialogInterface dialog) { -// // Every time we show, show at our full height. -// behavior.setState(BottomSheetBehavior.STATE_EXPANDED); -// } -// }); -// -// return dialog; -// } -} diff --git a/app/src/main/java/com/philliphsu/clock2/timepickers/GridLayoutNumpad.java b/app/src/main/java/com/philliphsu/clock2/timepickers/GridLayoutNumpad.java deleted file mode 100644 index 3883d70..0000000 --- a/app/src/main/java/com/philliphsu/clock2/timepickers/GridLayoutNumpad.java +++ /dev/null @@ -1,297 +0,0 @@ -/* - * Copyright (C) 2016 Phillip Hsu - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.philliphsu.clock2.timepickers; - -import android.content.Context; -import android.content.res.ColorStateList; -import android.support.annotation.CallSuper; -import android.support.annotation.LayoutRes; -import android.support.v4.content.ContextCompat; -import android.support.v7.widget.GridLayout; -import android.util.AttributeSet; -import android.view.View; -import android.widget.TextView; - -import com.philliphsu.clock2.R; - -import java.util.Arrays; - -import butterknife.Bind; -import butterknife.ButterKnife; -import butterknife.OnClick; - -/** - * Created by Phillip Hsu on 7/12/2016. - * - * Successor to the Numpad class that was based on TableLayout. - * - * TODO: Is NumpadTimePicker the only subclass? If so, why do we need this - * superclass? If we move the contents of this class to NumpadTimePicker, - * the implementation of setTheme() would make more sense. - */ -public abstract class GridLayoutNumpad extends GridLayout { - // TODO: change to private? - protected static final int UNMODIFIED = -1; - private static final int COLUMNS = 3; - - private int[] mInput; - private int mCount = 0; - private OnInputChangeListener mOnInputChangeListener; - - 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 }) - TextView[] mButtons; - - /** - * Informs clients how to output the digits inputted into this numpad. - */ - public interface OnInputChangeListener { - /** - * @param newStr the new value of the input formatted as a - * String after a digit insertion - */ - void onDigitInserted(String newStr); - /** - * @param newStr the new value of the input formatted as a - * String after a digit deletion - */ - void onDigitDeleted(String newStr); - void onDigitsCleared(); - } - - public GridLayoutNumpad(Context context) { - this(context, null); - } - - public GridLayoutNumpad(Context context, AttributeSet attrs) { - super(context, attrs); - init(); - } - - void setTheme(Context context, boolean themeDark) { - // Since the Dialog class already set the background color of its entire view tree, - // our background is already colored. Why did we set it in the Dialog class? Because - // we use margins around the numpad, and if we had instead set the background on - // this numpad here, the margins will not be colored. Why not use padding instead - // of margins? It turns out we tried that--replacing each margin attribute - // with the padding counterpart--but we lost the pre-21 FAB inherent bottom margin. - - // 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. - 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) { - setTextColor(b); - Utils.setColorControlHighlight(b, mAccentColor); - } - } - - void setTextColor(TextView view) { - view.setTextColor(mTextColors); - } - - /** - * @return the number of digits we can input - */ - public abstract int capacity(); - - @LayoutRes - protected abstract int contentLayout(); - - public final void setOnInputChangeListener(OnInputChangeListener onInputChangeListener) { - mOnInputChangeListener = onInputChangeListener; - } - - /** - * Provided only for subclasses so they can retrieve the registered listener - * and fire any custom OnInputChange events they may have defined. - */ - protected final OnInputChangeListener getOnInputChangeListener() { - return mOnInputChangeListener; - } - - @CallSuper - protected void enable(int lowerLimitInclusive, int upperLimitExclusive) { - if (lowerLimitInclusive < 0 || upperLimitExclusive > mButtons.length) - throw new IndexOutOfBoundsException("Upper limit out of range"); - - for (int i = 0; i < mButtons.length; i++) - mButtons[i].setEnabled(i >= lowerLimitInclusive && i < upperLimitExclusive); - } - - protected final int valueAt(int index) { - return mInput[index]; - } - - /** - * @return a defensive copy of the internal array of inputted digits - */ - protected final int[] getDigits() { - int[] digits = new int[mInput.length]; - System.arraycopy(mInput, 0, digits, 0, mInput.length); - return digits; - } - - /** - * @return the number of digits inputted - */ - public final int count() { - return mCount; - } - - /** - * @return the integer represented by the inputted digits - */ - protected final int getInput() { - return Integer.parseInt(getInputString()); - } - - private String getInputString() { - String currentInput = ""; - for (int i : mInput) - if (i != UNMODIFIED) - currentInput += i; - return currentInput; - } - - public void delete() { - /* - if (mCount - 1 >= 0) { - mInput[--mCount] = UNMODIFIED; - } - onDigitDeleted(getInputString()); - */ - delete(mCount); - } - - // TODO: Why do we need this? - @Deprecated - public void delete(int at) { - if (at - 1 >= 0) { - mInput[at - 1] = UNMODIFIED; - mCount--; - onDigitDeleted(getInputString()); - } - } - - public boolean clear() { - Arrays.fill(mInput, UNMODIFIED); - mCount = 0; - onDigitsCleared(); - return true; - } - - /** - * Forwards the provided String to the assigned - * {@link OnInputChangeListener OnInputChangeListener} - * after a digit insertion. By default, the String - * forwarded is just the String value of the inserted digit. - * @see #onClick(TextView) - * @param newDigit the formatted String that should be displayed - */ - @CallSuper - protected void onDigitInserted(String newDigit) { - if (mOnInputChangeListener != null) { - mOnInputChangeListener.onDigitInserted(newDigit); - } - } - - /** - * Forwards the provided String to the assigned - * {@link OnInputChangeListener OnInputChangeListener} - * after a digit deletion. By default, the String - * forwarded is {@link #getInputString()}. - * @param newStr the formatted String that should be displayed - */ - @CallSuper - protected void onDigitDeleted(String newStr) { - if (mOnInputChangeListener != null) { - mOnInputChangeListener.onDigitDeleted(newStr); - } - } - - /** - * Forwards a {@code onDigitsCleared()} event to the assigned - * {@link OnInputChangeListener OnInputChangeListener}. - */ - @CallSuper - protected void onDigitsCleared() { - if (mOnInputChangeListener != null) { - mOnInputChangeListener.onDigitsCleared(); - } - } - - /** - * Inserts as many of the digits in the given sequence - * into the input as possible. At the end, if any digits - * were inserted, this calls {@link #onDigitInserted(String)} - * with the String value of those digits. - */ - protected final void insertDigits(int... digits) { - if (digits == null) - return; - String newDigits = ""; - for (int d : digits) { - if (mCount == mInput.length) - break; - if (d == UNMODIFIED) - continue; - mInput[mCount++] = d; - newDigits += d; - } - if (!newDigits.isEmpty()) { - // By only calling this once after making - // the insertions, we skip all of the - // intermediate callbacks. - onDigitInserted(newDigits); - } - } - - @OnClick({ 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 }) - final void onClick(TextView view) { - if (mCount < mInput.length) { - String textNum = view.getText().toString(); - insertDigits(Integer.parseInt(textNum)); - } - } - - private void init() { - setAlignmentMode(ALIGN_BOUNDS); - setColumnCount(COLUMNS); - View.inflate(getContext(), contentLayout(), this); - ButterKnife.bind(this); - // If capacity() < 0, we let the system throw the exception. - mInput = new int[capacity()]; - Arrays.fill(mInput, UNMODIFIED); - } -} diff --git a/app/src/main/java/com/philliphsu/clock2/timepickers/GridSelectorLayout.java b/app/src/main/java/com/philliphsu/clock2/timepickers/GridSelectorLayout.java deleted file mode 100644 index 55d0773..0000000 --- a/app/src/main/java/com/philliphsu/clock2/timepickers/GridSelectorLayout.java +++ /dev/null @@ -1,306 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.philliphsu.clock2.timepickers; - -import android.content.Context; -import android.os.Handler; -import android.util.AttributeSet; -import android.util.Log; -import android.view.animation.AlphaAnimation; -import android.view.animation.Animation; -import android.widget.ViewAnimator; - -/** - * Created by Phillip Hsu on 8/17/2016. - * - * A derivative of the AOSP datetimepicker RadialPickerLayout class. - * The animations used here are taken from the DatePickerDialog class. - * - * A ViewAnimator is a subclass of FrameLayout. - */ -public class GridSelectorLayout extends ViewAnimator implements NumbersGrid.OnNumberSelectedListener { - private static final String TAG = "GridSelectorLayout"; - - // Delay before auto-advancing the page, in ms. - // TODO: If we animate the page change, then we don't need this delay. This was - // my own logic, not ported from AOSP timepicker. - public static final int ADVANCE_PAGE_DELAY = 150; - - private static final int ANIMATION_DURATION = 300; - - private static final int HOUR_INDEX = NumberGridTimePickerDialog.HOUR_INDEX; - private static final int MINUTE_INDEX = NumberGridTimePickerDialog.MINUTE_INDEX; - // TODO: Rename to HALF_DAY_INDEX? - private static final int AMPM_INDEX = NumberGridTimePickerDialog.AMPM_INDEX; - private static final int HALF_DAY_1 = NumberGridTimePickerDialog.HALF_DAY_1; - private static final int HALF_DAY_2 = NumberGridTimePickerDialog.HALF_DAY_2; - - private OnValueSelectedListener mListener; - private boolean mTimeInitialized; - private int mCurrentHoursOfDay; - private int mCurrentMinutes; - private boolean mIs24HourMode; - private int mCurrentItemShowing; - - private HoursGrid mHoursGrid = null; - private TwentyFourHoursGrid m24HoursGrid = null; - private MinutesGrid mMinutesGrid; - private final Handler mHandler = new Handler(); - - private final Animation mInAnimation; - private final Animation mOutAnimation; - - public interface OnValueSelectedListener { - void onValueSelected(int pickerIndex, int newValue, boolean autoAdvance); - } - - public GridSelectorLayout(Context context, AttributeSet attrs) { - super(context, attrs); - // Taken from AOSP DatePickerDialog class - // TODO: They look terrible on our views. Create new animations. - mInAnimation = new AlphaAnimation(0.0f, 1.0f); - mInAnimation.setDuration(ANIMATION_DURATION); - mOutAnimation = new AlphaAnimation(1.0f, 0.0f); - mOutAnimation.setDuration(ANIMATION_DURATION); - } - - // TODO: Why do we need a Context param? RadialPickerLayout does it too. - public void initialize(Context context, int initialHoursOfDay, int initialMinutes, boolean is24HourMode) { - if (mTimeInitialized) { - Log.e(TAG, "Time has already been initialized."); - return; - } - - // ***************************************************************************************** - // * TODO: Should we move this block to the Dialog class? This is pretty similar - // * to what AOSP's DatePickerDialog class does. I don't immediately see any - // * code that REALLY needs to be done in this class instead. - mIs24HourMode = is24HourMode; - if (is24HourMode) { - m24HoursGrid = new TwentyFourHoursGrid(context); - m24HoursGrid.initialize(this/*OnNumberSelectedListener*/); - if (initialHoursOfDay >= 12) { - // 24 hour grid is always initialized with 00-11 in the primary position - m24HoursGrid.swapTexts(); - } - addView(m24HoursGrid); - } else { - mHoursGrid = new HoursGrid(context); - mHoursGrid.initialize(this/*OnNumberSelectedListener*/); - addView(mHoursGrid); - } - mMinutesGrid = new MinutesGrid(context); - mMinutesGrid.initialize(this/*OnNumberSelectedListener*/); - addView(mMinutesGrid); - - setInAnimation(mInAnimation); - setOutAnimation(mOutAnimation); - - // ***************************************************************************************** - - // Initialize the currently-selected hour and minute. - setValueForItem(HOUR_INDEX, initialHoursOfDay); - setValueForItem(MINUTE_INDEX, initialMinutes); - - mTimeInitialized = true; - } - - void setTheme(Context context, boolean themeDark) { - // TODO: This logic needs to be in the Dialog class, since the am/pm view is contained there. -// mAmPmView.setTheme(context, themeDark); - - if (m24HoursGrid != null) { - m24HoursGrid.setTheme(context, themeDark); - } else if (mHoursGrid != null) { - mHoursGrid.setTheme(context, themeDark); - } - mMinutesGrid.setTheme(context, themeDark); - } - - public void setTime(int hours, int minutes) { - setValueForItem(HOUR_INDEX, hours); - setValueForItem(MINUTE_INDEX, minutes); - } - - public void setOnValueSelectedListener(OnValueSelectedListener listener) { - mListener = listener; - } - - /** - * Get the item (hours or minutes) that is currently showing. - */ - public int getCurrentItemShowing() { - if (mCurrentItemShowing != HOUR_INDEX && mCurrentItemShowing != MINUTE_INDEX) { - Log.e(TAG, "Current item showing was unfortunately set to "+mCurrentItemShowing); - return -1; - } - return mCurrentItemShowing; - } - - /** - * Set either minutes or hours as showing. - * @param animate True to animate the transition, false to show with no animation. - */ - public void setCurrentItemShowing(int index, boolean animate) { - if (index != HOUR_INDEX && index != MINUTE_INDEX) { - Log.e(TAG, "TimePicker does not support view at index "+index); - return; - } - - int lastIndex = getCurrentItemShowing(); - mCurrentItemShowing = index; - - if (index != lastIndex) { - setInAnimation(animate? mInAnimation : null); - setOutAnimation(animate? mOutAnimation : null); - setDisplayedChild(index); - } - } - - // TODO: The Dialog should be telling us that AM/PM was selected, via setAmOrPm(). -// @Override -// public void onAmPmSelected(int amOrPm) { -// setValueForItem(AMPM_INDEX, amOrPm); -// mListener.onValueSelected(AMPM_INDEX, amOrPm, false); -// } - - @Override - public void onNumberSelected(int number) { - // Flag set to true if this onNumberSelected() event was caused by - // long clicking in a TwentyFourHoursGrid. - boolean fakeHourItemShowing = false; - - if (getCurrentItemShowing() == HOUR_INDEX) { - if (!mIs24HourMode) { - // Change the value before passing it through the callback - int amOrPm = getIsCurrentlyAmOrPm(); - if (amOrPm == HALF_DAY_1 && number == 12) { - number = 0; - } else if (amOrPm == HALF_DAY_2 && number != 12) { - number += 12; - } - } else { - // Check if we would be changing half-days with the new value. - // This can happen if this selection occurred with a long click. - if (mCurrentHoursOfDay < 12 && number >= 12 || mCurrentHoursOfDay >= 12 && number < 12) { - int newHalfDay = getIsCurrentlyAmOrPm() == HALF_DAY_1 ? HALF_DAY_2 : HALF_DAY_1; - // Update the half-day toggles states - mListener.onValueSelected(AMPM_INDEX, newHalfDay, false); - // Advance the index prematurely to bypass the animation that would otherwise - // be forced on us if we let the listener autoAdvance us. - setCurrentItemShowing(MINUTE_INDEX, false/*animate?*/); - // We need to "trick" the listener to think we're still on HOUR_INDEX. - // When the listener gets the onValueSelected() callback, - // it needs to call our setCurrentItemShowing() with MINUTE_INDEX a second time, - // so it ends up doing nothing. (Recall that the new index must be different from the - // last index for setCurrentItemShowing() to actually change the current item - // showing.) This has the effect of "tricking" the listener to update its - // own states relevant to the HOUR_INDEX, without having it actually autoAdvance - // and forcing an animation on us. - fakeHourItemShowing = true; - } - } - } - - final int currentItemShowing = fakeHourItemShowing? HOUR_INDEX : getCurrentItemShowing(); - - setValueForItem(currentItemShowing, number); - mListener.onValueSelected(currentItemShowing, number, - true/*autoAdvance, not considered for MINUTE_INDEX*/); - } - - public int getHours() { - return mCurrentHoursOfDay; - } - - public int getMinutes() { - return mCurrentMinutes; - } - - /** - * If the hours are showing, return the current hour. If the minutes are showing, return the - * current minute. - */ - private int getCurrentlyShowingValue() { - int currentIndex = getCurrentItemShowing(); - if (currentIndex == HOUR_INDEX) { - return mCurrentHoursOfDay; - } else if (currentIndex == MINUTE_INDEX) { - return mCurrentMinutes; - } else { - return -1; - } - } - - public int getIsCurrentlyAmOrPm() { - if (mCurrentHoursOfDay < 12) { - return HALF_DAY_1; - } else if (mCurrentHoursOfDay < 24) { - return HALF_DAY_2; - } - return -1; - } - - /** - * Set the internal as either AM or PM. - */ - // TODO: Rename to setHalfDay - public void setAmOrPm(int amOrPm) { - final int initialHalfDay = getIsCurrentlyAmOrPm(); - setValueForItem(AMPM_INDEX, amOrPm); - if (amOrPm != initialHalfDay - && mIs24HourMode -// && getCurrentItemShowing() == HOUR_INDEX - && m24HoursGrid != null) { - m24HoursGrid.swapTexts(); - mListener.onValueSelected(HOUR_INDEX, mCurrentHoursOfDay, false); - } - } - - /** - * Set the internal value for the hour, minute, or AM/PM. - */ - private void setValueForItem(int index, int value) { -// Log.d(TAG, String.format("setValueForItem(%d, %d)", index, value)); - if (index == HOUR_INDEX) { - mCurrentHoursOfDay = value; - setHourGridSelection(value); - } else if (index == MINUTE_INDEX){ - mCurrentMinutes = value; - mMinutesGrid.setSelection(value); - } else if (index == AMPM_INDEX) { - if (value == HALF_DAY_1) { - mCurrentHoursOfDay = mCurrentHoursOfDay % 12; - } else if (value == HALF_DAY_2) { - mCurrentHoursOfDay = (mCurrentHoursOfDay % 12) + 12; - } - setHourGridSelection(mCurrentHoursOfDay); - } - } - - private void setHourGridSelection(int value) { - if (mIs24HourMode) { - m24HoursGrid.setSelection(value); - } else { - value = value % 12; - if (value == 0) { - value = 12; - } - mHoursGrid.setSelection(value); - } - } -} diff --git a/app/src/main/java/com/philliphsu/clock2/timepickers/HoursGrid.java b/app/src/main/java/com/philliphsu/clock2/timepickers/HoursGrid.java deleted file mode 100644 index 49fd939..0000000 --- a/app/src/main/java/com/philliphsu/clock2/timepickers/HoursGrid.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (C) 2016 Phillip Hsu - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.philliphsu.clock2.timepickers; - -import android.content.Context; - -import com.philliphsu.clock2.R; - -/** - * Created by Phillip Hsu on 8/17/2016. - */ -public class HoursGrid extends NumbersGrid { - - public HoursGrid(Context context) { - super(context); - } - - @Override - public void setSelection(int value) { - super.setSelection(value); - // We expect value to be within [1, 12]. The position in the grid where - // value is located is thus (value - 1). - setIndicator(getChildAt(value - 1)); - } - - @Override - protected int contentLayout() { - return R.layout.content_hours_grid; - } - - @Override - protected int indexOfDefaultValue() { - // This is the index of number 12. - return getChildCount() - 1; - } -} diff --git a/app/src/main/java/com/philliphsu/clock2/timepickers/MinutesGrid.java b/app/src/main/java/com/philliphsu/clock2/timepickers/MinutesGrid.java deleted file mode 100644 index 1bd3324..0000000 --- a/app/src/main/java/com/philliphsu/clock2/timepickers/MinutesGrid.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (C) 2016 Phillip Hsu - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.philliphsu.clock2.timepickers; - -import android.content.Context; -import android.support.v4.content.ContextCompat; -import android.view.View; -import android.widget.ImageButton; - -import com.philliphsu.clock2.R; - -/** - * Created by Phillip Hsu on 8/17/2016. - */ -public class MinutesGrid extends NumbersGrid { - private static final String TAG = "MinutesGrid"; - - private final ImageButton mMinusButton; - private final ImageButton mPlusButton; - - public MinutesGrid(Context context) { - super(context); - mMinusButton = (ImageButton) getChildAt(getChildCount() - 2); - mPlusButton = (ImageButton) getChildAt(getChildCount() - 1); - // We're not doing method binding because we don't have IDs set on these buttons. - mMinusButton.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - int value = getSelection() - 1; - if (value < 0) - value = 59; - setSelection(value); - mSelectionListener.onNumberSelected(value); - } - }); - mPlusButton.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - int value = getSelection() + 1; - if (value == 60) - value = 0; - setSelection(value); - mSelectionListener.onNumberSelected(value); - } - }); - } - - @Override - public void setSelection(int value) { - super.setSelection(value); - if (value % 5 == 0) { - // The new value is one of the predetermined minute values - int positionOfValue = value / 5; - setIndicator(getChildAt(positionOfValue)); - } else { - clearIndicator(); - } - } - - @Override - protected int contentLayout() { - return R.layout.content_minutes_grid; - } - - @Override - void setTheme(Context context, boolean themeDark) { - super.setTheme(context, themeDark); - 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/timepickers/NumberGridTimePickerDialog.java b/app/src/main/java/com/philliphsu/clock2/timepickers/NumberGridTimePickerDialog.java deleted file mode 100644 index d4d121e..0000000 --- a/app/src/main/java/com/philliphsu/clock2/timepickers/NumberGridTimePickerDialog.java +++ /dev/null @@ -1,1192 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License - */ - -package com.philliphsu.clock2.timepickers; - -import android.animation.ObjectAnimator; -import android.app.ActionBar.LayoutParams; -import android.content.res.ColorStateList; -import android.content.res.Configuration; -import android.content.res.Resources; -import android.os.Bundle; -import android.support.design.widget.FloatingActionButton; -import android.support.v4.content.ContextCompat; -import android.util.Log; -import android.view.KeyCharacterMap; -import android.view.KeyEvent; -import android.view.LayoutInflater; -import android.view.View; -import android.view.View.OnClickListener; -import android.view.ViewGroup; -import android.widget.FrameLayout; -import android.widget.RelativeLayout; -import android.widget.TextView; - -import com.philliphsu.clock2.R; -import com.philliphsu.clock2.timepickers.GridSelectorLayout.OnValueSelectedListener; - -import java.text.DateFormatSymbols; -import java.util.ArrayList; -import java.util.Locale; - -import butterknife.Bind; -import butterknife.OnClick; - -import static com.philliphsu.clock2.util.ConfigurationUtils.getOrientation; - -//import com.android.datetimepicker.HapticFeedbackController; -//import com.android.datetimepicker.R; -//import com.android.datetimepicker.Utils; -//import com.android.datetimepicker.time.RadialPickerLayout.OnValueSelectedListener; - -/** - * Dialog to set a time. - * - * A derivative of the AOSP datetimepicker TimePickerDialog class. - * - * TODO: Rename to GridSelectorTimePickerDialog - */ -public class NumberGridTimePickerDialog extends BaseTimePickerDialog implements OnValueSelectedListener { - private static final String TAG = "TimePickerDialog"; - - private static final String KEY_HOUR_OF_DAY = "hour_of_day"; - private static final String KEY_MINUTE = "minute"; - private static final String KEY_IS_24_HOUR_VIEW = "is_24_hour_view"; - private static final String KEY_CURRENT_ITEM_SHOWING = "current_item_showing"; - private static final String KEY_IN_KB_MODE = "in_kb_mode"; - private static final String KEY_TYPED_TIMES = "typed_times"; - private static final String KEY_DARK_THEME = "dark_theme"; - private static final String KEY_THEME_SET_AT_RUNTIME = "theme_set_at_runtime"; - - public static final int HOUR_INDEX = 0; - public static final int MINUTE_INDEX = 1; - // NOT a real index for the purpose of what's showing. - // TODO: Rename to HALF_DAY_INDEX? - public static final int AMPM_INDEX = 2; - // Also NOT a real index, just used for keyboard mode. - public static final int ENABLE_PICKER_INDEX = 3; - /** - * TODO: Use HALF_DAY_1 instead - */ - public static final int AM = 0; - /** - * TODO: Use HALF_DAY_2 instead - */ - public static final int PM = 1; - - // Delay before starting the pulse animation, in ms. - private static final int PULSE_ANIMATOR_DELAY = 300; -// private OnTimeSetListener mCallback; - -// private HapticFeedbackController mHapticFeedbackController; - -//TODO: Delete private TextView mDoneButton; - private TextView mHourView; - private TextView mHourSpaceView; - private TextView mMinuteView; - private TextView mMinuteSpaceView; - private TextView mAmPmTextView; - private View mAmPmHitspace; - private GridSelectorLayout mTimePicker; - - private int mSelectedColor; - private int mUnselectedColor; - private String mAmText; - private String mPmText; - - private boolean mAllowAutoAdvance; - private int mInitialHourOfDay; - private int mInitialMinute; - private boolean mIs24HourMode; - private boolean mThemeDark; - private boolean mThemeSetAtRuntime; - - // For hardware IME input. - private char mPlaceholderText; - private String mDoublePlaceholderText; - private String mDeletedKeyFormat; - private boolean mInKbMode; - private ArrayList mTypedTimes; - private Node mLegalTimesTree; - private int mAmKeyCode; - private int mPmKeyCode; - - // Accessibility strings. - private String mHourPickerDescription; - private String mSelectHours; - private String mMinutePickerDescription; - private String mSelectMinutes; - - private int mHalfDayToggleSelectedColor; - private int mHalfDayToggleUnselectedColor; - - // ====================================== MY STUFF ============================================= - - // 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. - public static final int HALF_DAY_1 = AM; - public static final int HALF_DAY_2 = PM; - - // TODO: Consider moving these to GridSelectorLayout? - // TODO: Consider using findViewById() instead. This could be useful if you plan on - // releasing a library with this timepicker, because then we have no dependence on - // other third party libraries. - @Bind(R.id.fab) FloatingActionButton mDoneButton; - // These are currently defined as Buttons in the dialog's layout, - // but we refer to them as TextViews to save an extra refactoring - // step in case we change them. - @Bind(R.id.half_day_toggle_1) FrameLayout mLeftHalfDayToggle; - @Bind(R.id.half_day_toggle_2) FrameLayout mRightHalfDayToggle; - - @Override - protected int contentLayout() { - return R.layout.dialog_time_picker_number_grid; - } - - @OnClick({ R.id.half_day_toggle_1, R.id.half_day_toggle_2 }) - void onHalfDayToggleClick(View v) { - final int halfDay = v == mLeftHalfDayToggle ? HALF_DAY_1 : HALF_DAY_2; - if (halfDay != mTimePicker.getIsCurrentlyAmOrPm()) { -// if (currentHalfDay == HALF_DAY_1) { -// currentHalfDay = HALF_DAY_2; -// } else if (currentHalfDay == HALF_DAY_2) { -// currentHalfDay = HALF_DAY_1; -// } - updateHalfDay(halfDay); - mTimePicker.setAmOrPm(halfDay); - } - } - -// private void toggleHalfDay() { -// int amOrPm = mTimePicker.getIsCurrentlyAmOrPm(); -// // TODO: Use HALF_DAY_1 and 2 instead -// if (amOrPm == AM) { -// amOrPm = PM; -// } else if (amOrPm == PM){ -// amOrPm = AM; -// } -// updateAmPmDisplay(amOrPm); -// mTimePicker.setAmOrPm(amOrPm); -// // TODO: Pretty sure we don't need this -//// mSelectedHalfDay = amOrPm; -// -// // TODO: Verify the corresponding TwentyFourHourGridItem retains its indicator -// // TODO: Don't use mSelectedHourOfDay anymore. Use mTimePicker.getHours()? -// if (amOrPm == HALF_DAY_1) { -// mSelectedHourOfDay %= 12; -// } else if (amOrPm == HALF_DAY_2) { -// mSelectedHourOfDay = (mSelectedHourOfDay % 12) + 12; -// } -// // Updates the header display -// onValueSelected(HOUR_INDEX, mSelectedHourOfDay, false); -// } - -// private final OnClickListener mOnNumberClickListener = new OnClickListener() { -// @Override -// public void onClick(View v) { -// String number; -// if (v instanceof TextView) { -// number = ((TextView) v).getText().toString(); -// } else if (v instanceof TwentyFourHourGridItem) { -// number = ((TwentyFourHourGridItem) v).getPrimaryText().toString(); -// } else { -// Log.e(TAG, "TimePicker does not support button type " + v.getClass().getName()); -// return; -// } -// int value = Integer.parseInt(number); -// if (mCurrentIndex == HOUR_INDEX && !mIs24HourMode) { -// if (value == 12 && mSelectedHalfDay == HALF_DAY_1) { -// value = 0; -// } else if (value != 12 && mSelectedHalfDay == HALF_DAY_2) { -// value += 12; -// } -// } -// onValueSelected(mCurrentIndex, value, true); -// } -// }; - - // ============================================================================================= - - public NumberGridTimePickerDialog() { - // Empty constructor required for dialog fragment. - } - -// public NumberGridTimePickerDialog(Context context, int theme, OnTimeSetListener callback, -// int hourOfDay, int minute, boolean is24HourMode) { -// // Empty constructor required for dialog fragment. -// } - - public static NumberGridTimePickerDialog newInstance(OnTimeSetListener callback, - int hourOfDay, int minute, boolean is24HourMode) { - NumberGridTimePickerDialog ret = new NumberGridTimePickerDialog(); - ret.initialize(callback, hourOfDay, minute, is24HourMode); - return ret; - } - - public void initialize(OnTimeSetListener callback, - int hourOfDay, int minute, boolean is24HourMode) { - setOnTimeSetListener(callback); - mInitialHourOfDay = hourOfDay; - mInitialMinute = minute; - mIs24HourMode = is24HourMode; - mInKbMode = false; - mThemeDark = false; - mThemeSetAtRuntime = false; - } - - /** - * Set a dark or light theme. NOTE: this will only take effect for the next onCreateView. - */ - public void setThemeDark(boolean dark) { - mThemeDark = dark; - mThemeSetAtRuntime = true; - } - - public boolean isThemeDark() { - return mThemeDark; - } - - // Defined as final in our base class. -// public void setOnTimeSetListener(OnTimeSetListener callback) { -// mCallback = callback; -// } - - public void setStartTime(int hourOfDay, int minute) { - mInitialHourOfDay = hourOfDay; - mInitialMinute = minute; - mInKbMode = false; - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - if (savedInstanceState != null && savedInstanceState.containsKey(KEY_HOUR_OF_DAY) - && savedInstanceState.containsKey(KEY_MINUTE) - && savedInstanceState.containsKey(KEY_IS_24_HOUR_VIEW)) { - mInitialHourOfDay = savedInstanceState.getInt(KEY_HOUR_OF_DAY); - mInitialMinute = savedInstanceState.getInt(KEY_MINUTE); - mIs24HourMode = savedInstanceState.getBoolean(KEY_IS_24_HOUR_VIEW); - mInKbMode = savedInstanceState.getBoolean(KEY_IN_KB_MODE); - mThemeDark = savedInstanceState.getBoolean(KEY_DARK_THEME); - mThemeSetAtRuntime = savedInstanceState.getBoolean(KEY_THEME_SET_AT_RUNTIME); - } - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { -// getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); - -// View view = inflater.inflate(R.layout.time_picker_dialog, null); -// KeyboardListener keyboardListener = new KeyboardListener(); -// view.findViewById(R.id.time_picker_dialog).setOnKeyListener(keyboardListener); - - View view = super.onCreateView(inflater, container, savedInstanceState); - - if (!mThemeSetAtRuntime) { - mThemeDark = Utils.isDarkTheme(getActivity(), mThemeDark); - } - - Resources res = getResources(); - mHourPickerDescription = res.getString(R.string.hour_picker_description); - mSelectHours = res.getString(R.string.select_hours); - mMinutePickerDescription = res.getString(R.string.minute_picker_description); - mSelectMinutes = res.getString(R.string.select_minutes); -// mSelectedColor = res.getColor(mThemeDark? R.color.red : R.color.blue); -// mUnselectedColor = -// res.getColor(mThemeDark? android.R.color.white : R.color.numbers_text_color); - mSelectedColor = res.getColor(android.R.color.white); - mUnselectedColor = res.getColor(R.color.unselected_color); - - mHourView = (TextView) view.findViewById(R.id.hours); -// mHourView.setOnKeyListener(keyboardListener); - mHourSpaceView = (TextView) view.findViewById(R.id.hour_space); - mMinuteSpaceView = (TextView) view.findViewById(R.id.minutes_space); - mMinuteView = (TextView) view.findViewById(R.id.minutes); -// mMinuteView.setOnKeyListener(keyboardListener); - mAmPmTextView = (TextView) view.findViewById(R.id.ampm_label); -// mAmPmTextView.setOnKeyListener(keyboardListener); - String[] amPmTexts = new DateFormatSymbols().getAmPmStrings(); - mAmText = amPmTexts[0]; - mPmText = amPmTexts[1]; - - 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"); - tv2.setText("12 - 23"); - // 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. - final int icon1 = mThemeDark? R.drawable.ic_half_day_1_dark_24dp : R.drawable.ic_half_day_1_24dp; - final int icon2 = mThemeDark? R.drawable.ic_half_day_2_dark_24dp : R.drawable.ic_half_day_2_24dp; - // Determine the direction the icons should be in - int left1 = 0, left2 = 0, top1 = 0, top2 = 0; - switch (getOrientation(getResources())) { - case Configuration.ORIENTATION_PORTRAIT: - left1 = icon1; - left2 = icon2; - top1 = top2 = 0; - break; - case Configuration.ORIENTATION_LANDSCAPE: - left1 = left2 = 0; - top1 = icon1; - top2 = icon2; - break; - } - // Intrinsic bounds means the drawable's own bounds? So 24dp box. - tv1.setCompoundDrawablesWithIntrinsicBounds(left1, top1, 0, 0); - tv2.setCompoundDrawablesWithIntrinsicBounds(left2, top2, 0, 0); - tv1.setCompoundDrawablePadding(iconPadding); - tv2.setCompoundDrawablePadding(iconPadding); - } else { - tv1.setText(mAmText); - tv2.setText(mPmText); - } - -// mHapticFeedbackController = new HapticFeedbackController(getActivity()); - mTimePicker = (GridSelectorLayout) view.findViewById(R.id.time_picker); - mTimePicker.setOnValueSelectedListener(this); -// mTimePicker.setOnKeyListener(keyboardListener); - mTimePicker.initialize(getActivity(), /*mHapticFeedbackController,*/ mInitialHourOfDay, - mInitialMinute, mIs24HourMode); - - int currentItemShowing = HOUR_INDEX; - if (savedInstanceState != null && - savedInstanceState.containsKey(KEY_CURRENT_ITEM_SHOWING)) { - currentItemShowing = savedInstanceState.getInt(KEY_CURRENT_ITEM_SHOWING); - } - setCurrentItemShowing(currentItemShowing, false, true, true); - mTimePicker.invalidate(); - - mHourView.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - setCurrentItemShowing(HOUR_INDEX, true, false, true); - tryVibrate(); - } - }); - mMinuteView.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - setCurrentItemShowing(MINUTE_INDEX, true, false, true); - tryVibrate(); - } - }); - -// mDoneButton = (TextView) view.findViewById(R.id.done_button); - // This is our FAB. - mDoneButton.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - if (mInKbMode && isTypedTimeFullyLegal()) { // TODO: Delete -// finishKbMode(false); - } else { - tryVibrate(); - } - onTimeSet(mTimePicker, mTimePicker.getHours(), mTimePicker.getMinutes()); - } - }); -// mDoneButton.setOnKeyListener(keyboardListener); - - // Enable or disable the AM/PM view. - mAmPmHitspace = view.findViewById(R.id.ampm_hitspace); - if (mIs24HourMode) { - mAmPmTextView.setVisibility(View.GONE); - - RelativeLayout.LayoutParams paramsSeparator = new RelativeLayout.LayoutParams( - LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); - paramsSeparator.addRule(RelativeLayout.CENTER_IN_PARENT); - TextView separatorView = (TextView) view.findViewById(R.id.separator); - separatorView.setLayoutParams(paramsSeparator); - } else { - mAmPmTextView.setVisibility(View.VISIBLE); - mAmPmHitspace.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - tryVibrate(); - int amOrPm = mTimePicker.getIsCurrentlyAmOrPm(); - if (amOrPm == AM) { - amOrPm = PM; - } else if (amOrPm == PM){ - amOrPm = AM; - } - updateHalfDay(amOrPm); - mTimePicker.setAmOrPm(amOrPm); - } - }); - } - - mAllowAutoAdvance = true; - setHour(mInitialHourOfDay, true); - setMinute(mInitialMinute); - - // Set up for keyboard mode. - mDoublePlaceholderText = res.getString(R.string.time_placeholder); - mDeletedKeyFormat = res.getString(R.string.deleted_key); - mPlaceholderText = mDoublePlaceholderText.charAt(0); - mAmKeyCode = mPmKeyCode = -1; - generateLegalTimesTree(); - if (mInKbMode) { - mTypedTimes = savedInstanceState.getIntegerArrayList(KEY_TYPED_TIMES); -// tryStartingKbMode(-1); - mHourView.invalidate(); - } else if (mTypedTimes == null) { - mTypedTimes = new ArrayList(); - } - - // Set the theme at the end so that the initialize()s above don't counteract the theme. - mTimePicker.setTheme(getActivity().getApplicationContext(), mThemeDark); - // Prepare some colors to use. - int white = res.getColor(android.R.color.white); - int circleBackground = res.getColor(R.color.circle_background); - int line = res.getColor(R.color.line_background); - int timeDisplay = res.getColor(R.color.numbers_text_color); - // TODO: Port the AOSP timepicker files that contain these resources. -// ColorStateList doneTextColor = res.getColorStateList(R.color.done_text_color); -// int doneBackground = R.drawable.done_background_color; - - int darkGray = res.getColor(R.color.dark_gray); - int lightGray = res.getColor(R.color.light_gray); - int darkLine = res.getColor(R.color.line_dark); - // TODO: Port the AOSP timepicker files that contain these resources. -// ColorStateList darkDoneTextColor = res.getColorStateList(R.color.done_text_color_dark); -// int darkDoneBackground = R.drawable.done_background_color_dark; - - // My colors - int accentColor = Utils.getThemeAccentColor(getContext()); - - // Set the colors for each view based on the theme. - view.setBackgroundColor(mThemeDark? darkGray : white); - view.findViewById(R.id.time_display_background).setBackgroundColor(mThemeDark? lightGray : accentColor); - view.findViewById(R.id.time_display).setBackgroundColor(mThemeDark? lightGray : accentColor); - ((TextView) view.findViewById(R.id.separator)).setTextColor(/*mThemeDark? white : timeDisplay*/mUnselectedColor); - ((TextView) view.findViewById(R.id.ampm_label)).setTextColor(/*mThemeDark? white : timeDisplay*/mUnselectedColor); -// view.findViewById(R.id.line).setBackgroundColor(mThemeDark? darkLine : line); - view.findViewById(R.id.divider).setBackgroundColor(mThemeDark? darkLine : line); -// mDoneButton.setTextColor(mThemeDark? darkDoneTextColor : doneTextColor); - // The AOSP timepicker originally uses these colors for the CircleView - // We already set the correct background color of the entire view tree. -// mTimePicker.setBackgroundColor(mThemeDark? /*lightGray : circleBackground*/ darkGray : white); -// mDoneButton.setBackgroundResource(mThemeDark? darkDoneBackground : doneBackground); - - // Set the color on the FAB - // http://stackoverflow.com/a/32031019/5055032 - // ***************************************************************************************** - // NOTE: IF YOU DECIDE TO MOVE THE FAB AND THE HALF DAY TOGGLES TO THE GRIDSELECTORLAYOUT - // CLASS, YOU SHOULD CHANGE THE CONTEXT PASSED TO GridSelectorLayout#setTheme() FROM THE - // APPLICATION CONTEXT TO THE LOCAL CONTEXT. OTHERWISE, IT WOULD NOT BE ABLE TO RETRIEVE - // THE CORRECT ACCENT COLOR. WE ALREADY FACED THIS ISSUE WITH THE NUMPADTIMEPICKERDIALOG. - // DO A CTRL+F FOR mTimePicker.setTheme FOR THE CODE IN DISCUSSION. - // ***************************************************************************************** - // Color in normal state - mDoneButton.setBackgroundTintList(ColorStateList.valueOf(accentColor)); - // Color in pressed state. A ripple expands outwards from the point of contact throughout - // the fab when it is long pressed. -// mDoneButton.setRippleColor(/*your color here*/); - - // Set the color on the half-day toggles - // We already set the correct background color of the entire view tree. -// view.findViewById(R.id.half_day_toggles).setBackgroundColor(mThemeDark? /*lightGray : circleBackground*/ darkGray : white); - mHalfDayToggleSelectedColor = accentColor; -// mHalfDayToggleUnselectedColor = Utils.getTextColorFromThemeAttr(getContext(), -// // The colors are in the correct order, which happens to be the reverse of the order -// // used in the NumbersGrids... -// mThemeDark? android.R.attr.textColorPrimaryInverse : android.R.attr.textColorPrimary); - 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; - } - - @Override - public void onResume() { - super.onResume(); -// mHapticFeedbackController.start(); - } - - @Override - public void onPause() { - super.onPause(); -// mHapticFeedbackController.stop(); - } - - public void tryVibrate() { -// mHapticFeedbackController.tryVibrate(); - } - - private void updateHalfDay(int halfDay) { - updateAmPmDisplay(halfDay); - updateHalfDayTogglesState(halfDay); - } - - private void updateAmPmDisplay(int amOrPm) { - if (amOrPm == AM) { - mAmPmTextView.setText(mAmText); - Utils.tryAccessibilityAnnounce(mTimePicker, mAmText); - mAmPmHitspace.setContentDescription(mAmText); - } else if (amOrPm == PM){ - mAmPmTextView.setText(mPmText); - Utils.tryAccessibilityAnnounce(mTimePicker, mPmText); - mAmPmHitspace.setContentDescription(mPmText); - } else { - mAmPmTextView.setText(mDoublePlaceholderText); - } - } - - /** - * Update the indicator of the toggle buttons to show the given half-day as selected. - * @param halfDay the half-day that should be shown as selected - */ - private void updateHalfDayTogglesState(int halfDay) { - TextView leftHalfDayToggle = (TextView) mLeftHalfDayToggle.getChildAt(0); - TextView rightHalfDayToggle = (TextView) mRightHalfDayToggle.getChildAt(0); - switch (halfDay) { - case HALF_DAY_1: - leftHalfDayToggle.setTextColor(mHalfDayToggleSelectedColor); - rightHalfDayToggle.setTextColor(mHalfDayToggleUnselectedColor); - break; - case HALF_DAY_2: - rightHalfDayToggle.setTextColor(mHalfDayToggleSelectedColor); - leftHalfDayToggle.setTextColor(mHalfDayToggleUnselectedColor); - break; - } - } - - @Override - public void onSaveInstanceState(Bundle outState) { - if (mTimePicker != null) { - outState.putInt(KEY_HOUR_OF_DAY, mTimePicker.getHours()); - outState.putInt(KEY_MINUTE, mTimePicker.getMinutes()); - outState.putBoolean(KEY_IS_24_HOUR_VIEW, mIs24HourMode); - outState.putInt(KEY_CURRENT_ITEM_SHOWING, mTimePicker.getCurrentItemShowing()); - outState.putBoolean(KEY_IN_KB_MODE, mInKbMode); - if (mInKbMode) { - outState.putIntegerArrayList(KEY_TYPED_TIMES, mTypedTimes); - } - outState.putBoolean(KEY_DARK_THEME, mThemeDark); - outState.putBoolean(KEY_THEME_SET_AT_RUNTIME, mThemeSetAtRuntime); - } - } - - /** - * Called by the picker for updating the header display. - */ - @Override - public void onValueSelected(int pickerIndex, int newValue, boolean autoAdvance) { - if (pickerIndex == HOUR_INDEX) { - setHour(newValue, false); - String announcement = String.format("%d", newValue); - if (mAllowAutoAdvance && autoAdvance) { - setCurrentItemShowing(MINUTE_INDEX, true, true, false); - announcement += ". " + mSelectMinutes; - } else { - mTimePicker.setContentDescription(mHourPickerDescription + ": " + newValue); - } - - Utils.tryAccessibilityAnnounce(mTimePicker, announcement); - } else if (pickerIndex == MINUTE_INDEX){ - setMinute(newValue); - mTimePicker.setContentDescription(mMinutePickerDescription + ": " + newValue); - } else if (pickerIndex == AMPM_INDEX) { - updateHalfDay(newValue); - } else if (pickerIndex == ENABLE_PICKER_INDEX) { - if (!isTypedTimeFullyLegal()) { - mTypedTimes.clear(); - } -// finishKbMode(true); - } - } - - private void setHour(int value, boolean announce) { - String format; - if (mIs24HourMode) { - format = "%02d"; - } else { - format = "%d"; - value = value % 12; - if (value == 0) { - value = 12; - } - } - - CharSequence text = String.format(format, value); - mHourView.setText(text); - mHourSpaceView.setText(text); - if (announce) { - Utils.tryAccessibilityAnnounce(mTimePicker, text); - } - } - - private void setMinute(int value) { - if (value == 60) { - value = 0; - } - CharSequence text = String.format(Locale.getDefault(), "%02d", value); - Utils.tryAccessibilityAnnounce(mTimePicker, text); - mMinuteView.setText(text); - mMinuteSpaceView.setText(text); - } - - // Show either Hours or Minutes. - private void setCurrentItemShowing(int index, boolean animateCircle, boolean delayLabelAnimate, - boolean announce) { - mTimePicker.setCurrentItemShowing(index, animateCircle); - - TextView labelToAnimate; - if (index == HOUR_INDEX) { - int hours = mTimePicker.getHours(); - if (!mIs24HourMode) { - hours = hours % 12; - } - mTimePicker.setContentDescription(mHourPickerDescription + ": " + hours); - if (announce) { - Utils.tryAccessibilityAnnounce(mTimePicker, mSelectHours); - } - labelToAnimate = mHourView; - } else { - int minutes = mTimePicker.getMinutes(); - mTimePicker.setContentDescription(mMinutePickerDescription + ": " + minutes); - if (announce) { - Utils.tryAccessibilityAnnounce(mTimePicker, mSelectMinutes); - } - labelToAnimate = mMinuteView; - } - - int hourColor = (index == HOUR_INDEX)? mSelectedColor : mUnselectedColor; - int minuteColor = (index == MINUTE_INDEX)? mSelectedColor : mUnselectedColor; - mHourView.setTextColor(hourColor); - mMinuteView.setTextColor(minuteColor); - - ObjectAnimator pulseAnimator = Utils.getPulseAnimator(labelToAnimate, 0.85f, 1.1f); - if (delayLabelAnimate) { - pulseAnimator.setStartDelay(PULSE_ANIMATOR_DELAY); - } - pulseAnimator.start(); - } - - //////////////////////////////////////////////////////////////////////////////////////////////// - // END RELEVANT CODE - //////////////////////////////////////////////////////////////////////////////////////////////// - -// /** -// * For keyboard mode, processes key events. -// * @param keyCode the pressed key. -// * @return true if the key was successfully processed, false otherwise. -// */ -// private boolean processKeyUp(int keyCode) { -// if (keyCode == KeyEvent.KEYCODE_ESCAPE || keyCode == KeyEvent.KEYCODE_BACK) { -// dismiss(); -// return true; -// } else if (keyCode == KeyEvent.KEYCODE_TAB) { -// if(mInKbMode) { -// if (isTypedTimeFullyLegal()) { -// finishKbMode(true); -// } -// return true; -// } -// } else if (keyCode == KeyEvent.KEYCODE_ENTER) { -// if (mInKbMode) { -// if (!isTypedTimeFullyLegal()) { -// return true; -// } -// finishKbMode(false); -// } -// if (mCallback != null) { -// mCallback.onTimeSet(mTimePicker, -// mTimePicker.getHours(), mTimePicker.getMinutes()); -// } -// dismiss(); -// return true; -// } else if (keyCode == KeyEvent.KEYCODE_DEL) { -// if (mInKbMode) { -// if (!mTypedTimes.isEmpty()) { -// int deleted = deleteLastTypedKey(); -// String deletedKeyStr; -// if (deleted == getAmOrPmKeyCode(AM)) { -// deletedKeyStr = mAmText; -// } else if (deleted == getAmOrPmKeyCode(PM)) { -// deletedKeyStr = mPmText; -// } else { -// deletedKeyStr = String.format("%d", getValFromKeyCode(deleted)); -// } -// Utils.tryAccessibilityAnnounce(mTimePicker, -// String.format(mDeletedKeyFormat, deletedKeyStr)); -// updateDisplay(true); -// } -// } -// } else if (keyCode == KeyEvent.KEYCODE_0 || keyCode == KeyEvent.KEYCODE_1 -// || keyCode == KeyEvent.KEYCODE_2 || keyCode == KeyEvent.KEYCODE_3 -// || keyCode == KeyEvent.KEYCODE_4 || keyCode == KeyEvent.KEYCODE_5 -// || keyCode == KeyEvent.KEYCODE_6 || keyCode == KeyEvent.KEYCODE_7 -// || keyCode == KeyEvent.KEYCODE_8 || keyCode == KeyEvent.KEYCODE_9 -// || (!mIs24HourMode && -// (keyCode == getAmOrPmKeyCode(AM) || keyCode == getAmOrPmKeyCode(PM)))) { -// if (!mInKbMode) { -// if (mTimePicker == null) { -// // Something's wrong, because time picker should definitely not be null. -// Log.e(TAG, "Unable to initiate keyboard mode, TimePicker was null."); -// return true; -// } -// mTypedTimes.clear(); -// tryStartingKbMode(keyCode); -// return true; -// } -// // We're already in keyboard mode. -// if (addKeyIfLegal(keyCode)) { -// updateDisplay(false); -// } -// return true; -// } -// return false; -// } - -// /** -// * Try to start keyboard mode with the specified key, as long as the timepicker is not in the -// * middle of a touch-event. -// * @param keyCode The key to use as the first press. Keyboard mode will not be started if the -// * key is not legal to start with. Or, pass in -1 to get into keyboard mode without a starting -// * key. -// */ -// private void tryStartingKbMode(int keyCode) { -// if (mTimePicker.trySettingInputEnabled(false) && -// (keyCode == -1 || addKeyIfLegal(keyCode))) { -// mInKbMode = true; -// mDoneButton.setEnabled(false); -// updateDisplay(false); -// } -// } -// -// private boolean addKeyIfLegal(int keyCode) { -// // If we're in 24hour mode, we'll need to check if the input is full. If in AM/PM mode, -// // we'll need to see if AM/PM have been typed. -// if ((mIs24HourMode && mTypedTimes.size() == 4) || -// (!mIs24HourMode && isTypedTimeFullyLegal())) { -// return false; -// } -// -// mTypedTimes.add(keyCode); -// if (!isTypedTimeLegalSoFar()) { -// deleteLastTypedKey(); -// return false; -// } -// -// int val = getValFromKeyCode(keyCode); -// Utils.tryAccessibilityAnnounce(mTimePicker, String.format("%d", val)); -// // Automatically fill in 0's if AM or PM was legally entered. -// if (isTypedTimeFullyLegal()) { -// if (!mIs24HourMode && mTypedTimes.size() <= 3) { -// mTypedTimes.add(mTypedTimes.size() - 1, KeyEvent.KEYCODE_0); -// mTypedTimes.add(mTypedTimes.size() - 1, KeyEvent.KEYCODE_0); -// } -// mDoneButton.setEnabled(true); -// } -// -// return true; -// } -// -// /** -// * Traverse the tree to see if the keys that have been typed so far are legal as is, -// * or may become legal as more keys are typed (excluding backspace). -// */ -// private boolean isTypedTimeLegalSoFar() { -// Node node = mLegalTimesTree; -// for (int keyCode : mTypedTimes) { -// node = node.canReach(keyCode); -// if (node == null) { -// return false; -// } -// } -// return true; -// } -// - /** - * Check if the time that has been typed so far is completely legal, as is. - */ - private boolean isTypedTimeFullyLegal() { - if (mIs24HourMode) { - // For 24-hour mode, the time is legal if the hours and minutes are each legal. Note: - // getEnteredTime() will ONLY call isTypedTimeFullyLegal() when NOT in 24hour mode. - int[] values = getEnteredTime(null); - return (values[0] >= 0 && values[1] >= 0 && values[1] < 60); - } else { - // For AM/PM mode, the time is legal if it contains an AM or PM, as those can only be - // legally added at specific times based on the tree's algorithm. - return (mTypedTimes.contains(getAmOrPmKeyCode(AM)) || - mTypedTimes.contains(getAmOrPmKeyCode(PM))); - } - } -// -// private int deleteLastTypedKey() { -// int deleted = mTypedTimes.remove(mTypedTimes.size() - 1); -// if (!isTypedTimeFullyLegal()) { -// mDoneButton.setEnabled(false); -// } -// return deleted; -// } -// -// /** -// * Get out of keyboard mode. If there is nothing in typedTimes, revert to TimePicker's time. -// * @param changeDisplays If true, update the displays with the relevant time. -// */ -// private void finishKbMode(boolean updateDisplays) { -// mInKbMode = false; -// if (!mTypedTimes.isEmpty()) { -// int values[] = getEnteredTime(null); -// mTimePicker.setTime(values[0], values[1]); -// if (!mIs24HourMode) { -// mTimePicker.setAmOrPm(values[2]); -// } -// mTypedTimes.clear(); -// } -// if (updateDisplays) { -// updateDisplay(false); -// mTimePicker.trySettingInputEnabled(true); -// } -// } -// -// /** -// * Update the hours, minutes, and AM/PM displays with the typed times. If the typedTimes is -// * empty, either show an empty display (filled with the placeholder text), or update from the -// * timepicker's values. -// * @param allowEmptyDisplay if true, then if the typedTimes is empty, use the placeholder text. -// * Otherwise, revert to the timepicker's values. -// */ -// private void updateDisplay(boolean allowEmptyDisplay) { -// if (!allowEmptyDisplay && mTypedTimes.isEmpty()) { -// int hour = mTimePicker.getHours(); -// int minute = mTimePicker.getMinutes(); -// setHour(hour, true); -// setMinute(minute); -// if (!mIs24HourMode) { -// updateAmPmDisplay(hour < 12? AM : PM); -// } -// setCurrentItemShowing(mTimePicker.getCurrentItemShowing(), true, true, true); -// mDoneButton.setEnabled(true); -// } else { -// Boolean[] enteredZeros = {false, false}; -// int[] values = getEnteredTime(enteredZeros); -// String hourFormat = enteredZeros[0]? "%02d" : "%2d"; -// String minuteFormat = (enteredZeros[1])? "%02d" : "%2d"; -// String hourStr = (values[0] == -1)? mDoublePlaceholderText : -// String.format(hourFormat, values[0]).replace(' ', mPlaceholderText); -// String minuteStr = (values[1] == -1)? mDoublePlaceholderText : -// String.format(minuteFormat, values[1]).replace(' ', mPlaceholderText); -// mHourView.setText(hourStr); -// mHourSpaceView.setText(hourStr); -// mHourView.setTextColor(mUnselectedColor); -// mMinuteView.setText(minuteStr); -// mMinuteSpaceView.setText(minuteStr); -// mMinuteView.setTextColor(mUnselectedColor); -// if (!mIs24HourMode) { -// updateAmPmDisplay(values[2]); -// } -// } -// } - - private static int getValFromKeyCode(int keyCode) { - switch (keyCode) { - case KeyEvent.KEYCODE_0: - return 0; - case KeyEvent.KEYCODE_1: - return 1; - case KeyEvent.KEYCODE_2: - return 2; - case KeyEvent.KEYCODE_3: - return 3; - case KeyEvent.KEYCODE_4: - return 4; - case KeyEvent.KEYCODE_5: - return 5; - case KeyEvent.KEYCODE_6: - return 6; - case KeyEvent.KEYCODE_7: - return 7; - case KeyEvent.KEYCODE_8: - return 8; - case KeyEvent.KEYCODE_9: - return 9; - default: - return -1; - } - } - - /** - * Get the currently-entered time, as integer values of the hours and minutes typed. - * @param enteredZeros A size-2 boolean array, which the caller should initialize, and which - * may then be used for the caller to know whether zeros had been explicitly entered as either - * hours of minutes. This is helpful for deciding whether to show the dashes, or actual 0's. - * @return A size-3 int array. The first value will be the hours, the second value will be the - * minutes, and the third will be either TimePickerDialog.AM or TimePickerDialog.PM. - */ - private int[] getEnteredTime(Boolean[] enteredZeros) { - int amOrPm = -1; - int startIndex = 1; - if (!mIs24HourMode && isTypedTimeFullyLegal()) { - int keyCode = mTypedTimes.get(mTypedTimes.size() - 1); - if (keyCode == getAmOrPmKeyCode(AM)) { - amOrPm = AM; - } else if (keyCode == getAmOrPmKeyCode(PM)){ - amOrPm = PM; - } - startIndex = 2; - } - int minute = -1; - int hour = -1; - for (int i = startIndex; i <= mTypedTimes.size(); i++) { - int val = getValFromKeyCode(mTypedTimes.get(mTypedTimes.size() - i)); - if (i == startIndex) { - minute = val; - } else if (i == startIndex+1) { - minute += 10*val; - if (enteredZeros != null && val == 0) { - enteredZeros[1] = true; - } - } else if (i == startIndex+2) { - hour = val; - } else if (i == startIndex+3) { - hour += 10*val; - if (enteredZeros != null && val == 0) { - enteredZeros[0] = true; - } - } - } - - int[] ret = {hour, minute, amOrPm}; - return ret; - } - - /** - * Get the keycode value for AM and PM in the current language. - */ - private int getAmOrPmKeyCode(int amOrPm) { - // Cache the codes. - if (mAmKeyCode == -1 || mPmKeyCode == -1) { - // Find the first character in the AM/PM text that is unique. - KeyCharacterMap kcm = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD); - char amChar; - char pmChar; - for (int i = 0; i < Math.max(mAmText.length(), mPmText.length()); i++) { - amChar = mAmText.toLowerCase(Locale.getDefault()).charAt(i); - pmChar = mPmText.toLowerCase(Locale.getDefault()).charAt(i); - if (amChar != pmChar) { - KeyEvent[] events = kcm.getEvents(new char[]{amChar, pmChar}); - // There should be 4 events: a down and up for both AM and PM. - if (events != null && events.length == 4) { - mAmKeyCode = events[0].getKeyCode(); - mPmKeyCode = events[2].getKeyCode(); - } else { - Log.e(TAG, "Unable to find keycodes for AM and PM."); - } - break; - } - } - } - if (amOrPm == AM) { - return mAmKeyCode; - } else if (amOrPm == PM) { - return mPmKeyCode; - } - - return -1; - } - - /** - * Create a tree for deciding what keys can legally be typed. - */ - private void generateLegalTimesTree() { - // Create a quick cache of numbers to their keycodes. - int k0 = KeyEvent.KEYCODE_0; - int k1 = KeyEvent.KEYCODE_1; - int k2 = KeyEvent.KEYCODE_2; - int k3 = KeyEvent.KEYCODE_3; - int k4 = KeyEvent.KEYCODE_4; - int k5 = KeyEvent.KEYCODE_5; - int k6 = KeyEvent.KEYCODE_6; - int k7 = KeyEvent.KEYCODE_7; - int k8 = KeyEvent.KEYCODE_8; - int k9 = KeyEvent.KEYCODE_9; - - // The root of the tree doesn't contain any numbers. - mLegalTimesTree = new Node(); - if (mIs24HourMode) { - // We'll be re-using these nodes, so we'll save them. - Node minuteFirstDigit = new Node(k0, k1, k2, k3, k4, k5); - Node minuteSecondDigit = new Node(k0, k1, k2, k3, k4, k5, k6, k7, k8, k9); - // The first digit must be followed by the second digit. - minuteFirstDigit.addChild(minuteSecondDigit); - - // The first digit may be 0-1. - Node firstDigit = new Node(k0, k1); - mLegalTimesTree.addChild(firstDigit); - - // When the first digit is 0-1, the second digit may be 0-5. - Node secondDigit = new Node(k0, k1, k2, k3, k4, k5); - firstDigit.addChild(secondDigit); - // We may now be followed by the first minute digit. E.g. 00:09, 15:58. - secondDigit.addChild(minuteFirstDigit); - - // When the first digit is 0-1, and the second digit is 0-5, the third digit may be 6-9. - Node thirdDigit = new Node(k6, k7, k8, k9); - // The time must now be finished. E.g. 0:55, 1:08. - secondDigit.addChild(thirdDigit); - - // When the first digit is 0-1, the second digit may be 6-9. - secondDigit = new Node(k6, k7, k8, k9); - firstDigit.addChild(secondDigit); - // We must now be followed by the first minute digit. E.g. 06:50, 18:20. - secondDigit.addChild(minuteFirstDigit); - - // The first digit may be 2. - firstDigit = new Node(k2); - mLegalTimesTree.addChild(firstDigit); - - // When the first digit is 2, the second digit may be 0-3. - secondDigit = new Node(k0, k1, k2, k3); - firstDigit.addChild(secondDigit); - // We must now be followed by the first minute digit. E.g. 20:50, 23:09. - secondDigit.addChild(minuteFirstDigit); - - // When the first digit is 2, the second digit may be 4-5. - secondDigit = new Node(k4, k5); - firstDigit.addChild(secondDigit); - // We must now be followd by the last minute digit. E.g. 2:40, 2:53. - secondDigit.addChild(minuteSecondDigit); - - // The first digit may be 3-9. - firstDigit = new Node(k3, k4, k5, k6, k7, k8, k9); - mLegalTimesTree.addChild(firstDigit); - // We must now be followed by the first minute digit. E.g. 3:57, 8:12. - firstDigit.addChild(minuteFirstDigit); - } else { - // We'll need to use the AM/PM node a lot. - // Set up AM and PM to respond to "a" and "p". - Node ampm = new Node(getAmOrPmKeyCode(AM), getAmOrPmKeyCode(PM)); - - // The first hour digit may be 1. - Node firstDigit = new Node(k1); - mLegalTimesTree.addChild(firstDigit); - // We'll allow quick input of on-the-hour times. E.g. 1pm. - firstDigit.addChild(ampm); - - // When the first digit is 1, the second digit may be 0-2. - Node secondDigit = new Node(k0, k1, k2); - firstDigit.addChild(secondDigit); - // Also for quick input of on-the-hour times. E.g. 10pm, 12am. - secondDigit.addChild(ampm); - - // When the first digit is 1, and the second digit is 0-2, the third digit may be 0-5. - Node thirdDigit = new Node(k0, k1, k2, k3, k4, k5); - secondDigit.addChild(thirdDigit); - // The time may be finished now. E.g. 1:02pm, 1:25am. - thirdDigit.addChild(ampm); - - // When the first digit is 1, the second digit is 0-2, and the third digit is 0-5, - // the fourth digit may be 0-9. - Node fourthDigit = new Node(k0, k1, k2, k3, k4, k5, k6, k7, k8, k9); - thirdDigit.addChild(fourthDigit); - // The time must be finished now. E.g. 10:49am, 12:40pm. - fourthDigit.addChild(ampm); - - // When the first digit is 1, and the second digit is 0-2, the third digit may be 6-9. - thirdDigit = new Node(k6, k7, k8, k9); - secondDigit.addChild(thirdDigit); - // The time must be finished now. E.g. 1:08am, 1:26pm. - thirdDigit.addChild(ampm); - - // When the first digit is 1, the second digit may be 3-5. - secondDigit = new Node(k3, k4, k5); - firstDigit.addChild(secondDigit); - - // When the first digit is 1, and the second digit is 3-5, the third digit may be 0-9. - thirdDigit = new Node(k0, k1, k2, k3, k4, k5, k6, k7, k8, k9); - secondDigit.addChild(thirdDigit); - // The time must be finished now. E.g. 1:39am, 1:50pm. - thirdDigit.addChild(ampm); - - // The hour digit may be 2-9. - firstDigit = new Node(k2, k3, k4, k5, k6, k7, k8, k9); - mLegalTimesTree.addChild(firstDigit); - // We'll allow quick input of on-the-hour-times. E.g. 2am, 5pm. - firstDigit.addChild(ampm); - - // When the first digit is 2-9, the second digit may be 0-5. - secondDigit = new Node(k0, k1, k2, k3, k4, k5); - firstDigit.addChild(secondDigit); - - // When the first digit is 2-9, and the second digit is 0-5, the third digit may be 0-9. - thirdDigit = new Node(k0, k1, k2, k3, k4, k5, k6, k7, k8, k9); - secondDigit.addChild(thirdDigit); - // The time must be finished now. E.g. 2:57am, 9:30pm. - thirdDigit.addChild(ampm); - } - } - - /** - * Simple node class to be used for traversal to check for legal times. - * mLegalKeys represents the keys that can be typed to get to the node. - * mChildren are the children that can be reached from this node. - */ - private class Node { - private int[] mLegalKeys; - private ArrayList mChildren; - - public Node(int... legalKeys) { - mLegalKeys = legalKeys; - mChildren = new ArrayList(); - } - - public void addChild(Node child) { - mChildren.add(child); - } - - public boolean containsKey(int key) { - for (int i = 0; i < mLegalKeys.length; i++) { - if (mLegalKeys[i] == key) { - return true; - } - } - return false; - } - - public Node canReach(int key) { - if (mChildren == null) { - return null; - } - for (Node child : mChildren) { - if (child.containsKey(key)) { - return child; - } - } - return null; - } - } - -// private class KeyboardListener implements OnKeyListener { -// @Override -// public boolean onKey(View v, int keyCode, KeyEvent event) { -// if (event.getAction() == KeyEvent.ACTION_UP) { -// return processKeyUp(keyCode); -// } -// return false; -// } -// } -} diff --git a/app/src/main/java/com/philliphsu/clock2/timepickers/NumbersGrid.java b/app/src/main/java/com/philliphsu/clock2/timepickers/NumbersGrid.java deleted file mode 100644 index b395202..0000000 --- a/app/src/main/java/com/philliphsu/clock2/timepickers/NumbersGrid.java +++ /dev/null @@ -1,195 +0,0 @@ -/* - * Copyright (C) 2016 Phillip Hsu - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.philliphsu.clock2.timepickers; - -import android.content.Context; -import android.support.annotation.LayoutRes; -import android.support.v4.content.ContextCompat; -import android.support.v7.widget.GridLayout; -import android.util.Log; -import android.view.View; -import android.widget.TextView; - -import com.philliphsu.clock2.R; - -/** - * Created by Phillip Hsu on 8/17/2016. - */ -public abstract class NumbersGrid extends GridLayout implements View.OnClickListener { - private static final String TAG = "NumbersGrid"; - private static final int COLUMN_COUNT = 3; - - // Package visible so our concrete subclasses (in the same package) can access this. - OnNumberSelectedListener mSelectionListener; - View mLastSelectedView; - - 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. - int mDefaultTextColor; - - private boolean mIsInitialized; - private int mSelection; // The number selected from this grid - - public interface OnNumberSelectedListener { - void onNumberSelected(int number); - } - - @LayoutRes - protected abstract int contentLayout(); - - public NumbersGrid(Context context) { - super(context); - setColumnCount(COLUMN_COUNT); - inflate(context, contentLayout(), this); - // We don't do method binding because we don't know the IDs of - // our subclasses' buttons, if any. - registerClickListeners(); - mIsInitialized = false; - 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); - final View defaultSelectedView = getChildAt(indexOfDefaultValue()); - mSelection = valueOf(defaultSelectedView); - setIndicator(defaultSelectedView); - } - - public void initialize(OnNumberSelectedListener listener) { - if (mIsInitialized) { - Log.e(TAG, "This NumbersGrid may only be initialized once."); - return; - } - mSelectionListener = listener; - mIsInitialized = true; - } - - public int getSelection() { - return mSelection; - } - - public void setSelection(int value) { - mSelection = value; - } - - /** - * The default implementation assumes the clicked view is of type TextView, - * casts the view accordingly, and parses the number from the text it contains. - * @param v the View that was clicked - */ - @Override - public void onClick(View v) { - setIndicator(v); - mSelection = valueOf(v); - mSelectionListener.onNumberSelected(mSelection); - } - - /** - * Returns whether the specified View from our hierarchy can have an - * OnClickListener registered on it. The default implementation - * checks if this view is of type TextView. Subclasses can override - * this to fit their own criteria of what types of Views in their - * hierarchy can have a click listener registered on. - * - * @param view a child view from our hierarchy - */ - protected boolean canRegisterClickListener(View view) { - return view instanceof TextView; - } - - /** - * Sets a selection indicator on the clicked number button. The indicator - * is the accent color applied to the button's text. - * - * @param view the clicked number button - */ - protected void setIndicator(View view) { - clearIndicator(); // Does nothing if there was no indicator last selected - TextView tv = (TextView) view; - tv.setTextColor(mSelectedTextColor); - mLastSelectedView = view; - } - - /** - * Clear the selection indicator on the last selected view. Clearing the indicator - * reverts the text color back to its default. - */ - protected void clearIndicator() { - if (mLastSelectedView != null) { - TextView tv = (TextView) mLastSelectedView; - tv.setTextColor(mDefaultTextColor); - mLastSelectedView = null; - } - } - - /** - * @return the index for the number button that should have the indicator set on by default. - * The base implementation returns 0, for the first child. - */ - protected int indexOfDefaultValue() { - return 0; - } - - /** - * @return the number held by the button parsed into an integer. The base implementation - * assumes the view is of type TextView. - */ - protected int valueOf(View button) { - return Integer.parseInt(((TextView) button).getText().toString()); - } - - /** - * The default implementation sets the appropriate text color on all of the number buttons - * as determined by {@link #canRegisterClickListener(View)}. - */ - void setTheme(Context context, boolean themeDark) { - mDefaultTextColor = ContextCompat.getColor(context, themeDark? - R.color.text_color_primary_dark : R.color.text_color_primary_light); - for (int i = 0; i < getChildCount(); i++) { - View v = getChildAt(i); - // TODO: We can move this to the ctor, because this isn't dependent on the theme. - // The only issue is we would have to write another for loop iterating through all - // the buttons... but that is just prematurely worrying about optimizations.. - Utils.setColorControlHighlight(v, mSelectedTextColor/*colorAccent*/); - // Filter out views that aren't number buttons - if (canRegisterClickListener(v)) { - final TextView tv = (TextView) v; - // Filter out the current selection - if (mSelection != valueOf(tv)) { - tv.setTextColor(mDefaultTextColor); - } - } - } - } - - /** - * Iterates through our hierarchy and sets the subclass's implementation of OnClickListener - * on each number button encountered. By default, the number buttons are assumed to be of - * type TextView. - */ - private void registerClickListeners() { - int i = 0; - View v; - while (i < getChildCount() && canRegisterClickListener(v = getChildAt(i))) { - v.setOnClickListener(this); - i++; - } - } -} diff --git a/app/src/main/java/com/philliphsu/clock2/timepickers/NumpadTimePicker.java b/app/src/main/java/com/philliphsu/clock2/timepickers/NumpadTimePicker.java deleted file mode 100644 index 04976a3..0000000 --- a/app/src/main/java/com/philliphsu/clock2/timepickers/NumpadTimePicker.java +++ /dev/null @@ -1,617 +0,0 @@ -/* - * Copyright (C) 2016 Phillip Hsu - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.philliphsu.clock2.timepickers; - -import android.animation.ObjectAnimator; -import android.content.Context; -import android.content.res.ColorStateList; -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.text.format.DateFormat; -import android.util.AttributeSet; -import android.view.animation.DecelerateInterpolator; -import android.widget.Button; -import android.widget.ImageButton; -import android.widget.TextView; - -import com.philliphsu.clock2.R; - -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.text.DateFormatSymbols; -import java.util.Calendar; - -import butterknife.Bind; -import butterknife.OnClick; -import butterknife.OnLongClick; - -/** - * Created by Phillip Hsu on 7/12/2016. - */ -public class NumpadTimePicker extends GridLayoutNumpad { - // Time can be represented with maximum of 4 digits - private static final int MAX_DIGITS = 4; - - // Formatted time string has a maximum of 8 characters - // in the 12-hour clock, e.g 12:59 AM. Although the 24-hour - // clock should be capped at 5 characters, the difference - // is not significant enough to deal with the separate cases. - private static final int MAX_CHARS = 8; - - // Constant for converting text digits to numeric digits in base-10. - private static final int BASE_10 = 10; - - // AmPmStates - static final int UNSPECIFIED = -1; - static final int AM = 0; - static final int PM = 1; - static final int HRS_24 = 2; - - @IntDef({ UNSPECIFIED, AM, PM, HRS_24 }) // Specifies the accepted constants - @Retention(RetentionPolicy.SOURCE) // Usages do not need to be recorded in .class files - private @interface AmPmState {} - - @AmPmState - private int mAmPmState = UNSPECIFIED; - private final StringBuilder mFormattedInput = new StringBuilder(MAX_CHARS); - - @Bind({ R.id.leftAlt, R.id.rightAlt }) - Button[] mAltButtons; - @Bind(R.id.fab) FloatingActionButton mFab; - @Bind(R.id.backspace) ImageButton mBackspace; - - private boolean mThemeDark; - private int mFabDisabledColorDark; - private int mFabDisabledColorLight; - - @Nullable - private final ObjectAnimator mElevationAnimator; - - /** - * Provides additional APIs to configure clients' display output. - */ - public interface OnInputChangeListener extends GridLayoutNumpad.OnInputChangeListener { - /** - * Called when this numpad's buttons are all disabled, indicating no further - * digits can be inserted. - */ - void onInputDisabled(); - } - - public NumpadTimePicker(Context context) { - this(context, null); - } - - public NumpadTimePicker(Context context, AttributeSet attrs) { - super(context, attrs); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - mElevationAnimator = ObjectAnimator.ofFloat(mFab, "elevation", - getResources().getDimension(R.dimen.fab_elevation)) - .setDuration(200); - mElevationAnimator.setInterpolator(new DecelerateInterpolator()); - } else { - // Only animate the elevation for 21+ because changing elevation on pre-21 - // shifts the FAB slightly up/down. For that reason, pre-21 has elevation - // permanently set to 0 (in XML). - mElevationAnimator = null; - } - init(); - } - - @Override - 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) { - 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); - Utils.setTintList(mBackspace, mBackspace.getDrawable(), colorBackspace); - - ColorStateList colorIcon = ContextCompat.getColorStateList(context, - themeDark? R.color.icon_color_dark : R.color.fab_icon_color); - Utils.setTintList(mFab, mFab.getDrawable(), colorIcon); - - // Make sure the dark theme disabled color shows up initially - updateFabState(); - } - - @Override - public int capacity() { - return MAX_DIGITS; - } - - @Override - protected int contentLayout() { - return R.layout.content_numpad_time_picker; - } - - @Override - protected void enable(int lowerLimitInclusive, int upperLimitExclusive) { - super.enable(lowerLimitInclusive, upperLimitExclusive); - if (lowerLimitInclusive == 0 && upperLimitExclusive == 0) { - // For 12-hour clock, alt buttons need to be disabled as well before firing onInputDisabled() - if (!is24HourFormat() && (mAltButtons[0].isEnabled() || mAltButtons[1].isEnabled())) { - return; - } - ((OnInputChangeListener) getOnInputChangeListener()).onInputDisabled(); - } - } - - @Override - protected void onDigitInserted(String newDigit) { - // Append the new digit(s) to the formatter - updateFormattedInputOnDigitInserted(newDigit); - super.onDigitInserted(mFormattedInput.toString()); - updateNumpadStates(); - } - - @Override - protected void onDigitDeleted(String newStr) { - updateFormattedInputOnDigitDeleted(); - super.onDigitDeleted(mFormattedInput.toString()); - updateNumpadStates(); - } - - @Override - protected void onDigitsCleared() { - mFormattedInput.delete(0, mFormattedInput.length()); - mAmPmState = UNSPECIFIED; - updateNumpadStates(); // TOneverDO: before resetting mAmPmState to UNSPECIFIED - super.onDigitsCleared(); - } - - @Override - @OnClick(R.id.backspace) - public void delete() { - int len = mFormattedInput.length(); - if (!is24HourFormat() && mAmPmState != UNSPECIFIED) { - mAmPmState = UNSPECIFIED; - // Delete starting from index of space to end - mFormattedInput.delete(mFormattedInput.indexOf(" "), len); - // No digit was actually deleted, but we have to notify the - // listener to update its output. - super/*TOneverDO: remove super*/.onDigitDeleted(mFormattedInput.toString()); - // We also have to manually update the numpad. - updateNumpadStates(); - } else { - super.delete(); - } - } - - @Override - @OnLongClick(R.id.backspace) - public boolean clear() { - return super.clear(); - } - - /** Returns the hour of day (0-23) regardless of clock system */ - public int getHour() { - if (!checkTimeValid()) - throw new IllegalStateException("Cannot call hourOfDay() until legal time inputted"); - int hours = count() < 4 ? valueAt(0) : valueAt(0) * 10 + valueAt(1); - if (hours == 12) { - switch (mAmPmState) { - case AM: - return 0; - case PM: - case HRS_24: - return 12; - default: - break; - } - } - - // AM/PM clock needs value offset - return hours + (mAmPmState == PM ? 12 : 0); - } - - public int getMinute() { - if (!checkTimeValid()) - throw new IllegalStateException("Cannot call minute() until legal time inputted"); - return count() < 4 ? valueAt(1) * 10 + valueAt(2) : valueAt(2) * 10 + valueAt(3); - } - - /** - * Checks if the input stored so far qualifies as a valid time. - * For this to return {@code true}, the hours, minutes AND AM/PM - * state must be set. - */ - public boolean checkTimeValid() { - // While the test looks bare, it is actually comprehensive. - // mAmPmState will remain UNSPECIFIED until a legal - // sequence of digits is inputted, no matter the clock system in use. - // TODO: So if that's the case, do we actually need 'count() < 3' here? Or better yet, - // can we simplify the code to just 'return mAmPmState != UNSPECIFIED'? - if (mAmPmState == UNSPECIFIED || mAmPmState == HRS_24 && count() < 3) { - return false; - } - // AM or PM can only be set if the time was already valid previously, so we don't need - // to check for them. - return true; - } - - public void setTime(int hours, int minutes) { - if (hours < 0 || hours > 23) - throw new IllegalArgumentException("Illegal hours: " + hours); - if (minutes < 0 || minutes > 59) - throw new IllegalArgumentException("Illegal minutes: " + minutes); - - // Internal representation of the time has been checked for legality. - // Now we need to format it depending on the user's clock system. - // If 12-hour clock, can't set mAmPmState yet or else this interferes - // with the button state update mechanism. Instead, cache the state - // the hour would resolve to in a local variable and set it after - // all digits are inputted. - int amPmState; - if (!is24HourFormat()) { - // Convert 24-hour times into 12-hour compatible times. - if (hours == 0) { - hours = 12; - amPmState = AM; - } else if (hours == 12) { - amPmState = PM; - } else if (hours > 12) { - hours -= 12; - amPmState = PM; - } else { - amPmState = AM; - } - } else { - amPmState = HRS_24; - } - - /* - // Convert the hour and minutes into text form, so that - // we can read each digit individually. - // Only if on 24-hour clock, zero-pad single digit hours. - // Zero cannot be the first digit of any time in the 12-hour clock. - String textDigits = is24HourFormat() - ? String.format("%02d", hours) - : String.valueOf(hours); - textDigits += String.format("%02d", minutes); - - int[] digits = new int[textDigits.length()]; - for (int i = 0; i < textDigits.length(); i++) { - digits[i] = Character.digit(textDigits.charAt(i), BASE_10); - } - insertDigits(digits); - */ - - if (is24HourFormat() || hours > 9) { - insertDigits(hours / 10, hours % 10, minutes / 10, minutes % 10); - } else { - insertDigits(hours, minutes / 10, minutes % 10); - } - - mAmPmState = amPmState; - if (mAmPmState != HRS_24) { - onAltButtonClick(mAmPmState == AM ? mAltButtons[0] : mAltButtons[1]); - } - } - - public String getTime() { - return mFormattedInput.toString(); - } - - @AmPmState - int getAmPmState() { - return mAmPmState; - } - - // Because the annotation and its associated enum constants are marked private, the only real - // use for this method is to restore state across rotation after saving the value from - // #getAmPmState(). We can't directly pass in one of those accepted constants. - void setAmPmState(@AmPmState int amPmState) { -// mAmPmState = amPmState; - switch (amPmState) { - case AM: - case PM: - // mAmPmState is set for us - onAltButtonClick(mAltButtons[amPmState]); - break; - case HRS_24: - // Restoring the digits, if they make a valid time, should have already - // restored the mAmPmState to this value for us. If they don't make a - // valid time, then we refrain from setting it. - break; - case UNSPECIFIED: - // We should already be set to this value initially, but it can't hurt? - mAmPmState = amPmState; - break; - } - } - - private void init() { - mFabDisabledColorDark = ContextCompat.getColor(getContext(), R.color.fab_disabled_dark); - mFabDisabledColorLight = ContextCompat.getColor(getContext(), R.color.fab_disabled_light); - // TODO: We should have the user pass in is24HourMode when they create an instance of the dialog. - if (DateFormat.is24HourFormat(getContext())) { - mAltButtons[0].setText(R.string.left_alt_24hr); - mAltButtons[1].setText(R.string.right_alt_24hr); - } else { - String[] amPmTexts = new DateFormatSymbols().getAmPmStrings(); - mAltButtons[0].setText(amPmTexts[Calendar.AM]); - mAltButtons[1].setText(amPmTexts[Calendar.PM]); - } - updateNumpadStates(); - } - - @OnClick({ R.id.leftAlt, R.id.rightAlt }) - void onAltButtonClick(TextView altBtn) { - // Manually insert special characters for 12-hour clock - if (!is24HourFormat()) { - if (count() <= 2) { - // The colon is inserted for you - insertDigits(0, 0); - } - // text is AM or PM, so include space before - String ampm = altBtn.getText().toString(); - mFormattedInput.append(' ').append(ampm); - String am = new DateFormatSymbols().getAmPmStrings()[0]; - mAmPmState = ampm.equals(am) ? AM : PM; - // Digits will be shown for you on insert, but not AM/PM - super/*TOneverDO: remove super*/.onDigitInserted(mFormattedInput.toString()); - } else { - CharSequence text = altBtn.getText(); - int[] digits = new int[text.length() - 1]; - // charAt(0) is the colon, so skip i = 0. - // We are only interested in storing the digits. - for (int i = 1; i < text.length(); i++) { - // The array and the text do not have the same lengths, - // so the iterator value does not correspond to the - // array index directly - digits[i - 1] = Character.digit(text.charAt(i), BASE_10); - } - // Colon is added for you - insertDigits(digits); - mAmPmState = HRS_24; - } - - updateNumpadStates(); - } - - private boolean is24HourFormat() { - return DateFormat.is24HourFormat(getContext()); - } - - private void updateFormattedInputOnDigitInserted(String newDigits) { - mFormattedInput.append(newDigits); - // Add colon if necessary, depending on how many digits entered so far - if (count() == 3) { - // Insert a colon - int digits = getInput(); - if (digits >= 60 && digits < 100 || digits >= 160 && digits < 200) { - // From 060-099 (really only to 095, but might as well go up to 100) - // From 160-199 (really only to 195, but might as well go up to 200), - // time does not exist if colon goes at pos. 1 - mFormattedInput.insert(2, ':'); - // These times only apply to the 24-hour clock, and if we're here, - // the time is not legal yet. So we can't set mAmPmState here for - // either clock. - // The 12-hour clock can only have mAmPmState set when AM/PM are clicked. - } else { - // A valid time exists if colon is at pos. 1 - mFormattedInput.insert(1, ':'); - // We can set mAmPmState here (and not in the above case) because - // the time here is legal in 24-hour clock - if (is24HourFormat()) { - mAmPmState = HRS_24; - } - } - } else if (count() == MAX_DIGITS) { - int colonAt = mFormattedInput.indexOf(":"); - // Since we now batch update the formatted input whenever - // digits are inserted, the colon may legitimately not be - // present in the formatted input when this is initialized. - if (colonAt != -1) { - // Colon needs to move, so remove the colon previously added - mFormattedInput.deleteCharAt(colonAt); - } - mFormattedInput.insert(2, ':'); - - // Time is legal in 24-hour clock - if (is24HourFormat()) { - mAmPmState = HRS_24; - } - } - } - - private void updateFormattedInputOnDigitDeleted() { - int len = mFormattedInput.length(); - mFormattedInput.delete(len - 1, len); - if (count() == 3) { - int value = getInput(); - // Move the colon from its 4-digit position to its 3-digit position, - // unless doing so gives an invalid time. - // e.g. 17:55 becomes 1:75, which is invalid. - // All 3-digit times in the 12-hour clock at this point should be - // valid. The limits <=155 and (>=200 && <=235) are really only - // imposed on the 24-hour clock, and were chosen because 4-digit times - // in the 24-hour clock can only go up to 15:5[0-9] or be within the range - // [20:00, 23:59] if they are to remain valid when they become three digits. - // The is24HourFormat() check is therefore unnecessary. - if (value <= 155 || value >= 200 && value <= 235) { - mFormattedInput.deleteCharAt(mFormattedInput.indexOf(":")); - mFormattedInput.insert(1, ":"); - } else { - // previously [16:00, 19:59] - mAmPmState = UNSPECIFIED; - } - } else if (count() == 2) { - // Remove the colon - mFormattedInput.deleteCharAt(mFormattedInput.indexOf(":")); - // No time can be valid with only 2 digits in either system. - // I don't think we actually need this, but it can't hurt? - mAmPmState = UNSPECIFIED; - } - } - - private void updateNumpadStates() { - // TOneverDO: after updateNumberKeysStates(), esp. if clock is 12-hour, - // because it calls enable(0, 0), which checks if the alt buttons have been - // disabled as well before firing the onInputDisabled(). - updateAltButtonStates(); - - updateBackspaceState(); - updateNumberKeysStates(); - updateFabState(); - } - - private void updateFabState() { - final boolean lastEnabled = mFab.isEnabled(); - mFab.setEnabled(checkTimeValid()); - // If the fab was last enabled and we rotate, this check will prevent us from - // restoring the color; it will instead show up opaque white with an eclipse. - // Why isn't the FAB initialized to enabled == false when it is recreated? - // The FAB class probably saves its own state. -// if (lastEnabled == mFab.isEnabled()) -// return; - - // Workaround for mFab.setBackgroundTintList() because I don't know how to reference the - // correct accent color in XML. Also because I don't want to programmatically create a - // ColorStateList. - int color; - if (mFab.isEnabled()) { - color = mAccentColor; - // If FAB was last enabled, then don't run the anim again. - if (mElevationAnimator != null && !lastEnabled) { - mElevationAnimator.start(); - } - } else { - color = mThemeDark? mFabDisabledColorDark : mFabDisabledColorLight; - if (lastEnabled && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - if (mElevationAnimator != null && mElevationAnimator.isRunning()) { - // Otherwise, eclipse will show. - mElevationAnimator.end(); - } - // No animation, otherwise we'll see eclipsing. - mFab.setElevation(0); - } - } - // TODO: How can we animate the background color? There is a ObjectAnimator.ofArgb() - // method, but that uses color ints as values. What we'd really need is something like - // ColorStateLists as values. There is an ObjectAnimator.ofObject(), but I don't know - // how that works. There is also a ValueAnimator.ofInt(), which doesn't need a - // target object. - mFab.setBackgroundTintList(ColorStateList.valueOf(color)); - } - - private void updateBackspaceState() { - mBackspace.setEnabled(count() > 0); - } - - private void updateAltButtonStates() { - if (count() == 0) { - // No input, no access! - mAltButtons[0].setEnabled(false); - mAltButtons[1].setEnabled(false); - } else if (count() == 1) { - // Any of 0-9 inputted, always have access in either clock. - mAltButtons[0].setEnabled(true); - mAltButtons[1].setEnabled(true); - } else if (count() == 2) { - // Any 2 digits that make a valid hour for either clock are eligible for access - int time = getInput(); - boolean validTwoDigitHour = is24HourFormat() ? time <= 23 : time >= 10 && time <= 12; - mAltButtons[0].setEnabled(validTwoDigitHour); - mAltButtons[1].setEnabled(validTwoDigitHour); - } else if (count() == 3) { - if (is24HourFormat()) { - // For the 24-hour clock, no access at all because - // two more digits (00 or 30) cannot be added to 3 digits. - mAltButtons[0].setEnabled(false); - mAltButtons[1].setEnabled(false); - } else { - // True for any 3 digits, if AM/PM not already entered - boolean enabled = mAmPmState == UNSPECIFIED; - mAltButtons[0].setEnabled(enabled); - mAltButtons[1].setEnabled(enabled); - } - } else if (count() == MAX_DIGITS) { - // If all 4 digits are filled in, the 24-hour clock has absolutely - // no need for the alt buttons. However, The 12-hour clock has - // complete need of them, if not already used. - boolean enabled = !is24HourFormat() && mAmPmState == UNSPECIFIED; - mAltButtons[0].setEnabled(enabled); - mAltButtons[1].setEnabled(enabled); - } - } - - private void updateNumberKeysStates() { - int cap = 10; // number of buttons - boolean is24hours = is24HourFormat(); - - if (count() == 0) { - enable(is24hours ? 0 : 1, cap); - return; - } else if (count() == MAX_DIGITS) { - enable(0, 0); - return; - } - - int time = getInput(); - if (is24hours) { - if (count() == 1) { - enable(0, time < 2 ? cap : 6); - } else if (count() == 2) { - enable(0, time % 10 >= 0 && time % 10 <= 5 ? cap : 6); - } else if (count() == 3) { - if (time >= 236) { - enable(0, 0); - } else { - enable(0, time % 10 >= 0 && time % 10 <= 5 ? cap : 0); - } - } - } else { - if (count() == 1) { - if (time == 0) { - throw new IllegalStateException("12-hr format, zeroth digit = 0?"); - } else { - enable(0, 6); - } - } else if (count() == 2 || count() == 3) { - if (time >= 126) { - enable(0, 0); - } else { - if (time >= 100 && time <= 125 && mAmPmState != UNSPECIFIED) { - // Could legally input fourth digit, if not for the am/pm state already set - enable(0, 0); - } else { - enable(0, time % 10 >= 0 && time % 10 <= 5 ? cap : 0); - } - } - } - } - } -} diff --git a/app/src/main/java/com/philliphsu/clock2/timepickers/NumpadTimePickerDialog.java b/app/src/main/java/com/philliphsu/clock2/timepickers/NumpadTimePickerDialog.java deleted file mode 100644 index 4c00446..0000000 --- a/app/src/main/java/com/philliphsu/clock2/timepickers/NumpadTimePickerDialog.java +++ /dev/null @@ -1,212 +0,0 @@ -/* - * Copyright (C) 2016 Phillip Hsu - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.philliphsu.clock2.timepickers; - -import android.os.Bundle; -import android.support.v4.content.ContextCompat; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import com.philliphsu.clock2.R; -import com.philliphsu.clock2.util.TimeTextUtils; - -import butterknife.Bind; -import butterknife.OnClick; - -/** - * Created by Phillip Hsu on 7/12/2016. - * - */ -// TODO: Use library's NumberPadTimePickerDialog instead. -@Deprecated -public class NumpadTimePickerDialog extends BaseTimePickerDialog - implements NumpadTimePicker.OnInputChangeListener { - private static final String TAG = "NumpadTimePickerDialog"; - - private static final String KEY_IS_24_HOUR_VIEW = "is_24_hour_view"; - private static final String KEY_DIGITS_INPUTTED = "digits_inputted"; - private static final String KEY_AMPM_STATE = "ampm_state"; - private static final String KEY_THEME_DARK = "theme_dark"; - private static final String KEY_THEME_SET_AT_RUNTIME = "theme_set_at_runtime"; - - private boolean mIs24HourMode; // TODO: Why do we need this? - /** - * The digits stored in the numpad from the last time onSaveInstanceState() was called. - * - * Why not have the NumpadTimePicker class save state itself? Because it's a lot more - * code to do so, as you have to create your own SavedState subclass. Also, we modeled - * this dialog class on the RadialTimePickerDialog, where the RadialPickerLayout also - * depends on the dialog to save its state. - */ - private int[] mInputtedDigits; - private int mAmPmState = NumpadTimePicker.UNSPECIFIED; // TOneverDO: zero initial value, b/c 0 == AM - private boolean mThemeDark; - private boolean mThemeSetAtRuntime; - - // Don't need to keep a reference to the dismiss ImageButton - @Bind(R.id.input_time) TextView mInputField; - @Bind(R.id.number_grid) NumpadTimePicker mNumpad; -// @Bind(R.id.focus_grabber) View mFocusGrabber; - - // TODO: We don't need to pass in an initial hour and minute for a new instance. - @Deprecated - public static NumpadTimePickerDialog newInstance(OnTimeSetListener callback, - int hourOfDay, int minute, boolean is24HourMode) { - NumpadTimePickerDialog ret = new NumpadTimePickerDialog(); - ret.initialize(callback, hourOfDay, minute, is24HourMode); - return ret; - } - - // TODO: is24HourMode param - public static NumpadTimePickerDialog newInstance(OnTimeSetListener callback) { - NumpadTimePickerDialog ret = new NumpadTimePickerDialog(); - // TODO: Do these in initialize() - ret.setOnTimeSetListener(callback); - ret.mThemeDark = false; - ret.mThemeSetAtRuntime = false; - return ret; - } - - @Deprecated - public void initialize(OnTimeSetListener callback, - int hourOfDay, int minute, boolean is24HourMode) { - setOnTimeSetListener(callback); - mIs24HourMode = is24HourMode; - } - - /** - * Set a dark or light theme. NOTE: this will only take effect for the next onCreateView. - */ - public void setThemeDark(boolean dark) { - mThemeDark = dark; - mThemeSetAtRuntime = true; - } - - public boolean isThemeDark() { - return mThemeDark; - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - if (savedInstanceState != null) { - mInputtedDigits = savedInstanceState.getIntArray(KEY_DIGITS_INPUTTED); - mIs24HourMode = savedInstanceState.getBoolean(KEY_IS_24_HOUR_VIEW); - mAmPmState = savedInstanceState.getInt(KEY_AMPM_STATE); - mThemeDark = savedInstanceState.getBoolean(KEY_THEME_DARK); - mThemeSetAtRuntime = savedInstanceState.getBoolean(KEY_THEME_SET_AT_RUNTIME); - } - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - View view = super.onCreateView(inflater, container, savedInstanceState); - if (!mThemeSetAtRuntime) { - mThemeDark = Utils.isDarkTheme(getActivity(), mThemeDark); - } - mNumpad.setOnInputChangeListener(this); - mNumpad.insertDigits(mInputtedDigits); // TOneverDO: before mNumpad.setOnInputChangeListener(this); - mNumpad.setAmPmState(mAmPmState); - // Show the cursor immediately -// mInputField.requestFocus(); - //updateInputText(""); // Primarily to disable 'OK' - - // Prepare colors - int accentColor = Utils.getThemeAccentColor(getContext()); - int lightGray = ContextCompat.getColor(getContext(), R.color.light_gray); - int darkGray = ContextCompat.getColor(getContext(), R.color.dark_gray); - int white = ContextCompat.getColor(getContext(), android.R.color.white); - - // Set background color of entire view - view.setBackgroundColor(mThemeDark? darkGray : white); - - TextView inputTime = (TextView) view.findViewById(R.id.input_time); - inputTime.setBackgroundColor(mThemeDark? lightGray : accentColor); - inputTime.setTextColor(ContextCompat.getColor(getContext(), android.R.color.white)); - - mNumpad.setTheme(getContext()/*DO NOT GIVE THE APPLICATION CONTEXT, OR ELSE THE NUMPAD - CAN'T GET THE CORRECT ACCENT COLOR*/, mThemeDark); - - return view; - } - - @Override - protected int contentLayout() { - return 0; - } - - @Override - public void onSaveInstanceState(Bundle outState) { - if (mNumpad != null) { - outState.putIntArray(KEY_DIGITS_INPUTTED, mNumpad.getDigits()); - outState.putBoolean(KEY_IS_24_HOUR_VIEW, mIs24HourMode); - outState.putInt(KEY_AMPM_STATE, mNumpad.getAmPmState()); - outState.putBoolean(KEY_THEME_DARK, mThemeDark); - outState.putBoolean(KEY_THEME_SET_AT_RUNTIME, mThemeSetAtRuntime); - } - } - - @Override - public void onDigitInserted(String newStr) { - updateInputText(newStr); - } - - @Override - public void onDigitDeleted(String newStr) { - updateInputText(newStr); - } - - @Override - public void onDigitsCleared() { - updateInputText(""); - } - - @Override - public void onInputDisabled() { - // Steals the focus from the EditText -// mFocusGrabber.requestFocus(); - } - -// @OnTouch(R.id.input_time) -// boolean captureTouchOnEditText() { -// // Capture touch events on the EditText field, because we want it to do nothing. -// return true; -// } - - // The FAB is not defined directly in this dialog's layout, but rather in the layout - // of the NumpadTimePicker. We can always reference a child of a ViewGroup that is - // part of our layout. - @OnClick(R.id.fab) - void confirmSelection() { - if (!mNumpad.checkTimeValid()) - return; - onTimeSet(mNumpad, mNumpad.getHour(), mNumpad.getMinute()); - } - - private void updateInputText(String inputText) { - TimeTextUtils.setText(inputText, mInputField); -// // Move the cursor -// mInputField.setSelection(mInputField.length()); -// if (mFocusGrabber.isFocused()) { -// // Return focus to the EditText -// mInputField.requestFocus(); -// } - } -} diff --git a/app/src/main/java/com/philliphsu/clock2/timepickers/TwentyFourHourGridItem.java b/app/src/main/java/com/philliphsu/clock2/timepickers/TwentyFourHourGridItem.java deleted file mode 100644 index 294f879..0000000 --- a/app/src/main/java/com/philliphsu/clock2/timepickers/TwentyFourHourGridItem.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (C) 2016 Phillip Hsu - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.philliphsu.clock2.timepickers; - -import android.content.Context; -import android.content.res.Configuration; -import android.content.res.TypedArray; -import android.util.AttributeSet; -import android.view.Gravity; -import android.widget.LinearLayout; -import android.widget.TextView; - -import com.philliphsu.clock2.R; -import com.philliphsu.clock2.util.ConfigurationUtils; - -import butterknife.Bind; -import butterknife.ButterKnife; - -/** - * Created by Phillip Hsu on 7/21/2016. - */ -public class TwentyFourHourGridItem extends LinearLayout { - - @Bind(R.id.primary) TextView mPrimaryText; - @Bind(R.id.secondary) TextView mSecondaryText; - - public TwentyFourHourGridItem(Context context) { - super(context); - init(); - } - - public TwentyFourHourGridItem(Context context, AttributeSet attrs) { - super(context, attrs); - init(); - TypedArray a = context.getTheme().obtainStyledAttributes(attrs, - R.styleable.TwentyFourHourGridItem, 0, 0); - try { - setPrimaryText(a.getString(R.styleable.TwentyFourHourGridItem_primaryText)); - setSecondaryText(a.getString(R.styleable.TwentyFourHourGridItem_secondaryText)); - } finally { - a.recycle(); - } - } - - public CharSequence getPrimaryText() { - return mPrimaryText.getText(); - } - - public void setPrimaryText(CharSequence text) { - mPrimaryText.setText(text); - } - - public CharSequence getSecondaryText() { - return mSecondaryText.getText(); - } - - public void setSecondaryText(CharSequence text) { - mSecondaryText.setText(text); - } - - public void swapTexts() { - CharSequence primary = mPrimaryText.getText(); - setPrimaryText(mSecondaryText.getText()); - setSecondaryText(primary); - } - - public TextView getPrimaryTextView() { - return (TextView) getChildAt(0); - } - - public TextView getSecondaryTextView() { - return (TextView) getChildAt(1); - } - - private void init() { - // TODO: Why isn't ALT-ENTER giving us an option to static import this method? - final int orientation = ConfigurationUtils.getOrientation(getResources()); - setOrientation(orientation == Configuration.ORIENTATION_PORTRAIT ? - VERTICAL : /*LANDSCAPE*/HORIZONTAL); - setGravity(Gravity.CENTER); - inflate(getContext(), R.layout.content_24h_grid_item, this); - ButterKnife.bind(this); - } -} diff --git a/app/src/main/java/com/philliphsu/clock2/timepickers/TwentyFourHoursGrid.java b/app/src/main/java/com/philliphsu/clock2/timepickers/TwentyFourHoursGrid.java deleted file mode 100644 index d634cd3..0000000 --- a/app/src/main/java/com/philliphsu/clock2/timepickers/TwentyFourHoursGrid.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (C) 2016 Phillip Hsu - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.philliphsu.clock2.timepickers; - -import android.content.Context; -import android.support.v4.content.ContextCompat; -import android.view.View; - -import com.philliphsu.clock2.R; - -/** - * Created by Phillip Hsu on 8/17/2016. - */ -public class TwentyFourHoursGrid extends NumbersGrid implements View.OnLongClickListener { - private static final String TAG = "TwentyFourHoursGrid"; - - private int mSecondaryTextColor; - - public TwentyFourHoursGrid(Context context) { - super(context); - for (int i = 0; i < getChildCount(); i++) { - getChildAt(i).setOnLongClickListener(this); - } - mSecondaryTextColor = ContextCompat.getColor(context, R.color.text_color_secondary_light); - } - - @Override - protected int contentLayout() { - return R.layout.content_24h_number_grid; - } - - @Override - protected boolean canRegisterClickListener(View view) { - return view instanceof TwentyFourHourGridItem; - } - - @Override - public void onClick(View v) { - final int newVal = valueOf(v); - setSelection(newVal); - mSelectionListener.onNumberSelected(newVal); - } - - @Override - public boolean onLongClick(View v) { - TwentyFourHourGridItem item = (TwentyFourHourGridItem) v; - // Unfortunately, we can't use #valueOf() for this because we want the secondary value. - int newVal = Integer.parseInt(item.getSecondaryText().toString()); - mSelectionListener.onNumberSelected(newVal); - // TOneverDO: Call before firing the onNumberSelected() callback, because we want the - // dialog to advance to the next index WITHOUT seeing the text swapping. - swapTexts(); - // TOneverDO: Call before swapping texts, because setIndicator() uses the primary TextView. - setSelection(newVal); - return true; // Consume the long click - } - - @Override - public void setSelection(int value) { - super.setSelection(value); - // The value is within [0, 23], but we have only 12 buttons. - setIndicator(getChildAt(value % 12)); - } - - @Override - protected void setIndicator(View view) { - TwentyFourHourGridItem item = (TwentyFourHourGridItem) view; - super.setIndicator(item.getPrimaryTextView()); - } - - @Override - void setTheme(Context context, boolean themeDark) { - mDefaultTextColor = ContextCompat.getColor(context, themeDark? - R.color.text_color_primary_dark : R.color.text_color_primary_light); - mSecondaryTextColor = ContextCompat.getColor(context, themeDark? - R.color.text_color_secondary_dark : R.color.text_color_secondary_light); - for (int i = 0; i < getChildCount(); i++) { - TwentyFourHourGridItem item = (TwentyFourHourGridItem) getChildAt(i); - // TODO: We could move this to the ctor, in the superclass. If so, then this class - // doesn't need to worry about setting the highlight. - Utils.setColorControlHighlight(item, mSelectedTextColor/*colorAccent*/); - // Filter out the current selection. - if (getSelection() != valueOf(item)) { - item.getPrimaryTextView().setTextColor(mDefaultTextColor); - // The indicator can only be set on the primary text, which is why we don't need - // the secondary text here. - } - item.getSecondaryTextView().setTextColor(mSecondaryTextColor); - } - } - - public void swapTexts() { - for (int i = 0; i < getChildCount(); i++) { - View v = getChildAt(i); - ((TwentyFourHourGridItem) v).swapTexts(); - } - } - - @Override - protected int valueOf(View button) { - return Integer.parseInt(((TwentyFourHourGridItem) button).getPrimaryText().toString()); - } -} \ No newline at end of file diff --git a/app/src/main/res/layout/time_header_label.xml b/app/src/main/res/layout/time_header_label.xml deleted file mode 100644 index 1e83a11..0000000 --- a/app/src/main/res/layout/time_header_label.xml +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/bottomsheetpickers-debug/bottomsheetpickers-debug.aar b/bottomsheetpickers-debug/bottomsheetpickers-debug.aar deleted file mode 100644 index 86b3da4975a7b10018a75e955df20477e8cd4ea1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132164 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