New numpad time picker layout
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user