diff --git a/app/src/main/java/com/philliphsu/clock2/editalarm/GridLayoutNumpad.java b/app/src/main/java/com/philliphsu/clock2/editalarm/GridLayoutNumpad.java index 3e242d3..63fddf5 100644 --- a/app/src/main/java/com/philliphsu/clock2/editalarm/GridLayoutNumpad.java +++ b/app/src/main/java/com/philliphsu/clock2/editalarm/GridLayoutNumpad.java @@ -141,7 +141,7 @@ public abstract class GridLayoutNumpad extends GridLayout implements View.OnClic } } - public final boolean clear() { + public boolean clear() { Arrays.fill(mInput, UNMODIFIED); mCount = 0; onDigitsCleared(); diff --git a/app/src/main/java/com/philliphsu/clock2/editalarm/NumpadTimePicker.java b/app/src/main/java/com/philliphsu/clock2/editalarm/NumpadTimePicker.java index b4c1dc1..24192d2 100644 --- a/app/src/main/java/com/philliphsu/clock2/editalarm/NumpadTimePicker.java +++ b/app/src/main/java/com/philliphsu/clock2/editalarm/NumpadTimePicker.java @@ -2,9 +2,11 @@ package com.philliphsu.clock2.editalarm; import android.content.Context; import android.support.annotation.IntDef; +import android.support.design.widget.FloatingActionButton; import android.text.format.DateFormat; import android.util.AttributeSet; import android.widget.Button; +import android.widget.ImageButton; import com.philliphsu.clock2.R; @@ -15,6 +17,7 @@ import java.util.Calendar; import butterknife.Bind; import butterknife.OnClick; +import butterknife.OnLongClick; /** * Created by Phillip Hsu on 7/12/2016. @@ -48,6 +51,8 @@ public class NumpadTimePicker extends GridLayoutNumpad implements TimePicker { @Bind({ R.id.leftAlt, R.id.rightAlt }) Button[] mAltButtons; + @Bind(R.id.fab) FloatingActionButton mFab; + @Bind(R.id.backspace) ImageButton mBackspace; public NumpadTimePicker(Context context) { super(context); @@ -93,6 +98,7 @@ public class NumpadTimePicker extends GridLayoutNumpad implements TimePicker { } @Override + @OnClick(R.id.backspace) public void delete() { int len = mFormattedInput.length(); if (!is24HourFormat() && mAmPmState != UNSPECIFIED) { @@ -108,6 +114,12 @@ public class NumpadTimePicker extends GridLayoutNumpad implements TimePicker { } } + @Override + @OnLongClick(R.id.backspace) + public boolean clear() { + return super.clear(); + } + /** Returns the hour of day (0-23) regardless of clock system */ @Override public int hourOfDay() { @@ -213,6 +225,10 @@ public class NumpadTimePicker extends GridLayoutNumpad implements TimePicker { return mFormattedInput.toString(); } + public void setFabClickListener(OnClickListener fabClickListener) { + mFab.setOnClickListener(fabClickListener); + } + private void init() { if (is24HourFormat()) { mAltButtons[0].setText(R.string.left_alt_24hr); @@ -332,8 +348,17 @@ public class NumpadTimePicker extends GridLayoutNumpad implements TimePicker { private void updateNumpadStates() { updateAltButtonStates(); - //updateBackspaceState(); // Backspace is not part of the numpad + updateBackspaceState(); updateNumberKeysStates(); + updateFabState(); + } + + private void updateFabState() { + mFab.setEnabled(checkTimeValid()); + } + + private void updateBackspaceState() { + mBackspace.setEnabled(count() > 0); } private void updateAltButtonStates() { diff --git a/app/src/main/java/com/philliphsu/clock2/editalarm/NumpadTimePickerDialog.java b/app/src/main/java/com/philliphsu/clock2/editalarm/NumpadTimePickerDialog.java index ba8150f..1878d00 100644 --- a/app/src/main/java/com/philliphsu/clock2/editalarm/NumpadTimePickerDialog.java +++ b/app/src/main/java/com/philliphsu/clock2/editalarm/NumpadTimePickerDialog.java @@ -6,24 +6,20 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.Window; -import android.widget.Button; import android.widget.EditText; -import android.widget.ImageButton; import com.philliphsu.clock2.R; import butterknife.Bind; import butterknife.ButterKnife; import butterknife.OnClick; -import butterknife.OnLongClick; import butterknife.OnTouch; /** * Created by Phillip Hsu on 7/12/2016. * */ -public class NumpadTimePickerDialog extends DialogFragment - implements NumpadTimePicker.OnInputChangeListener { +public class NumpadTimePickerDialog extends DialogFragment implements NumpadTimePicker.OnInputChangeListener { private static final String KEY_HOUR_OF_DAY = "hour_of_day"; private static final String KEY_MINUTE = "minute"; @@ -45,10 +41,7 @@ public class NumpadTimePickerDialog extends DialogFragment */ private int[] mInputtedDigits; - @Bind(R.id.backspace) ImageButton mBackspace; - @Bind(R.id.input) EditText mInputField; - @Bind(R.id.cancel) Button mCancelButton; - @Bind(R.id.ok) Button mOkButton; + @Bind(R.id.input_time) EditText mInputField; @Bind(R.id.number_grid) NumpadTimePicker mNumpad; public NumpadTimePickerDialog() { @@ -101,12 +94,24 @@ public class NumpadTimePickerDialog extends DialogFragment View view = inflater.inflate(R.layout.dialog_time_picker_numpad, container, false); ButterKnife.bind(this, view); + // Can't do a method bind because the FAB is not part of this dialog's layout + // Also can't do the bind in the Numpad's class, because it doesn't have access to + // the OnTimeSetListener callback contained here or the dialog's dismiss() + mNumpad.setFabClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!mNumpad.checkTimeValid()) + return; + mCallback.onTimeSet(mNumpad, mNumpad.hourOfDay(), mNumpad.minute()); + dismiss(); + } + }); mNumpad.setOnInputChangeListener(this); mNumpad.insertDigits(mInputtedDigits); // TOneverDO: before mNumpad.setOnInputChangeListener(this); // Show the cursor immediately - mInputField.requestFocus(); // TODO: If changed to TextView, then don't need this. + mInputField.requestFocus(); // TODO: Disabled color - updateInputText(""); // Primarily to disable 'OK' + //updateInputText(""); // Primarily to disable 'OK' return view; } @@ -135,41 +140,20 @@ public class NumpadTimePickerDialog extends DialogFragment updateInputText(""); } - // TODO: If you change the input field to a TextView, then you don't need this. - @OnTouch(R.id.input) + @OnTouch(R.id.input_time) boolean captureTouchOnEditText() { // Capture touch events on the EditText field, because we want it to do nothing. return true; } - @OnClick(R.id.cancel) + @OnClick(R.id.cancel_icon) void myCancel() { dismiss(); } - @OnClick(R.id.ok) - void ok() { - if (!mNumpad.checkTimeValid()) - return; - mCallback.onTimeSet(mNumpad, mNumpad.hourOfDay(), mNumpad.minute()); - dismiss(); - } - - @OnClick(R.id.backspace) - void backspace() { - mNumpad.delete(); - } - - @OnLongClick(R.id.backspace) - boolean longBackspace() { - mNumpad.clear(); - return true; - } - private void updateInputText(String inputText) { mInputField.setText(inputText); // Move the cursor - //mInputField.setSelection(mInputField.length()); // TODO: If changed to TextView, don't need this - mOkButton.setEnabled(mNumpad.checkTimeValid()); + mInputField.setSelection(mInputField.length()); } } diff --git a/app/src/main/res/layout/content_numpad_time_picker.xml b/app/src/main/res/layout/content_numpad_time_picker.xml index ec1f535..85c7847 100644 --- a/app/src/main/res/layout/content_numpad_time_picker.xml +++ b/app/src/main/res/layout/content_numpad_time_picker.xml @@ -17,4 +17,31 @@ grid:layout_rowWeight="1" grid:layout_columnWeight="1" grid:layout_column="2"/> + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_time_picker_numpad.xml b/app/src/main/res/layout/dialog_time_picker_numpad.xml index 106589b..5f28480 100644 --- a/app/src/main/res/layout/dialog_time_picker_numpad.xml +++ b/app/src/main/res/layout/dialog_time_picker_numpad.xml @@ -1,70 +1,43 @@ - + - - - - - - + android:layout_height="@dimen/header_height" + android:background="@color/colorPrimary"> + + + + + + + + android:layout_height="@dimen/numpad_height"/> - - -