use of com.wdullaer.materialdatetimepicker.HapticFeedbackController in project MaterialDateTimePicker by wdullaer.
the class TimePickerDialog method onCreateView.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
int viewRes = mVersion == Version.VERSION_1 ? R.layout.mdtp_time_picker_dialog : R.layout.mdtp_time_picker_dialog_v2;
View view = inflater.inflate(viewRes, container, false);
KeyboardListener keyboardListener = new KeyboardListener();
view.findViewById(R.id.mdtp_time_picker_dialog).setOnKeyListener(keyboardListener);
// If an accent color has not been set manually, get it from the context
if (mAccentColor == -1) {
mAccentColor = Utils.getAccentColorFromThemeIfAvailable(getActivity());
}
// if theme mode has not been set by java code, check if it is specified in Style.xml
if (!mThemeDarkChanged) {
mThemeDark = Utils.isDarkTheme(getActivity(), mThemeDark);
}
Resources res = getResources();
Context context = getActivity();
mHourPickerDescription = res.getString(R.string.mdtp_hour_picker_description);
mSelectHours = res.getString(R.string.mdtp_select_hours);
mMinutePickerDescription = res.getString(R.string.mdtp_minute_picker_description);
mSelectMinutes = res.getString(R.string.mdtp_select_minutes);
mSecondPickerDescription = res.getString(R.string.mdtp_second_picker_description);
mSelectSeconds = res.getString(R.string.mdtp_select_seconds);
mSelectedColor = ContextCompat.getColor(context, R.color.mdtp_white);
mUnselectedColor = ContextCompat.getColor(context, R.color.mdtp_accent_color_focused);
mHourView = (TextView) view.findViewById(R.id.mdtp_hours);
mHourView.setOnKeyListener(keyboardListener);
mHourSpaceView = (TextView) view.findViewById(R.id.mdtp_hour_space);
mMinuteSpaceView = (TextView) view.findViewById(R.id.mdtp_minutes_space);
mMinuteView = (TextView) view.findViewById(R.id.mdtp_minutes);
mMinuteView.setOnKeyListener(keyboardListener);
mSecondSpaceView = (TextView) view.findViewById(R.id.mdtp_seconds_space);
mSecondView = (TextView) view.findViewById(R.id.mdtp_seconds);
mSecondView.setOnKeyListener(keyboardListener);
mAmTextView = (TextView) view.findViewById(R.id.mdtp_am_label);
mAmTextView.setOnKeyListener(keyboardListener);
mPmTextView = (TextView) view.findViewById(R.id.mdtp_pm_label);
mPmTextView.setOnKeyListener(keyboardListener);
mAmPmLayout = view.findViewById(R.id.mdtp_ampm_layout);
String[] amPmTexts = new DateFormatSymbols().getAmPmStrings();
mAmText = amPmTexts[0];
mPmText = amPmTexts[1];
mHapticFeedbackController = new HapticFeedbackController(getActivity());
if (mTimePicker != null) {
mInitialTime = new Timepoint(mTimePicker.getHours(), mTimePicker.getMinutes(), mTimePicker.getSeconds());
}
mInitialTime = roundToNearest(mInitialTime);
mTimePicker = (RadialPickerLayout) view.findViewById(R.id.mdtp_time_picker);
mTimePicker.setOnValueSelectedListener(this);
mTimePicker.setOnKeyListener(keyboardListener);
mTimePicker.initialize(getActivity(), this, mInitialTime, 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();
}
});
mSecondView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
setCurrentItemShowing(SECOND_INDEX, true, false, true);
tryVibrate();
}
});
mOkButton = (Button) view.findViewById(R.id.mdtp_ok);
mOkButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (mInKbMode && isTypedTimeFullyLegal()) {
finishKbMode(false);
} else {
tryVibrate();
}
notifyOnDateListener();
dismiss();
}
});
mOkButton.setOnKeyListener(keyboardListener);
mOkButton.setTypeface(TypefaceHelper.get(context, "Roboto-Medium"));
if (mOkString != null)
mOkButton.setText(mOkString);
else
mOkButton.setText(mOkResid);
mCancelButton = (Button) view.findViewById(R.id.mdtp_cancel);
mCancelButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
tryVibrate();
if (getDialog() != null)
getDialog().cancel();
}
});
mCancelButton.setTypeface(TypefaceHelper.get(context, "Roboto-Medium"));
if (mCancelString != null)
mCancelButton.setText(mCancelString);
else
mCancelButton.setText(mCancelResid);
mCancelButton.setVisibility(isCancelable() ? View.VISIBLE : View.GONE);
// Enable or disable the AM/PM view.
if (mIs24HourMode) {
mAmPmLayout.setVisibility(View.GONE);
} else {
OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View v) {
// Don't do anything if either AM or PM are disabled
if (isAmDisabled() || isPmDisabled())
return;
tryVibrate();
int amOrPm = mTimePicker.getIsCurrentlyAmOrPm();
if (amOrPm == AM) {
amOrPm = PM;
} else if (amOrPm == PM) {
amOrPm = AM;
}
mTimePicker.setAmOrPm(amOrPm);
}
};
mAmTextView.setVisibility(View.GONE);
mPmTextView.setVisibility(View.VISIBLE);
mAmPmLayout.setOnClickListener(listener);
if (mVersion == Version.VERSION_2) {
mAmTextView.setText(mAmText);
mPmTextView.setText(mPmText);
mAmTextView.setVisibility(View.VISIBLE);
}
updateAmPmDisplay(mInitialTime.isAM() ? AM : PM);
}
// Disable seconds picker
if (!mEnableSeconds) {
mSecondView.setVisibility(View.GONE);
view.findViewById(R.id.mdtp_separator_seconds).setVisibility(View.GONE);
}
// Disable minutes picker
if (!mEnableMinutes) {
mMinuteSpaceView.setVisibility(View.GONE);
view.findViewById(R.id.mdtp_separator).setVisibility(View.GONE);
}
// Center stuff depending on what's visible
boolean isLandscape = getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
// Landscape layout is radically different
if (isLandscape) {
if (!mEnableMinutes && !mEnableSeconds) {
// Just the hour
// Put the hour above the center
RelativeLayout.LayoutParams paramsHour = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
paramsHour.addRule(RelativeLayout.ABOVE, R.id.mdtp_center_view);
paramsHour.addRule(RelativeLayout.CENTER_HORIZONTAL);
mHourSpaceView.setLayoutParams(paramsHour);
if (mIs24HourMode) {
// Hour + Am/Pm indicator
// Put the am / pm indicator next to the hour
RelativeLayout.LayoutParams paramsAmPm = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
paramsAmPm.addRule(RelativeLayout.RIGHT_OF, R.id.mdtp_hour_space);
mAmPmLayout.setLayoutParams(paramsAmPm);
}
} else if (!mEnableSeconds && mIs24HourMode) {
// Hour + Minutes
// Put the separator above the center
RelativeLayout.LayoutParams paramsSeparator = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
paramsSeparator.addRule(RelativeLayout.CENTER_HORIZONTAL);
paramsSeparator.addRule(RelativeLayout.ABOVE, R.id.mdtp_center_view);
TextView separatorView = (TextView) view.findViewById(R.id.mdtp_separator);
separatorView.setLayoutParams(paramsSeparator);
} else if (!mEnableSeconds) {
// Hour + Minutes + Am/Pm indicator
// Put separator above the center
RelativeLayout.LayoutParams paramsSeparator = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
paramsSeparator.addRule(RelativeLayout.CENTER_HORIZONTAL);
paramsSeparator.addRule(RelativeLayout.ABOVE, R.id.mdtp_center_view);
TextView separatorView = (TextView) view.findViewById(R.id.mdtp_separator);
separatorView.setLayoutParams(paramsSeparator);
// Put the am/pm indicator below the separator
RelativeLayout.LayoutParams paramsAmPm = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
paramsAmPm.addRule(RelativeLayout.CENTER_IN_PARENT);
paramsAmPm.addRule(RelativeLayout.BELOW, R.id.mdtp_center_view);
mAmPmLayout.setLayoutParams(paramsAmPm);
} else if (mIs24HourMode) {
// Hour + Minutes + Seconds
// Put the separator above the center
RelativeLayout.LayoutParams paramsSeparator = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
paramsSeparator.addRule(RelativeLayout.CENTER_HORIZONTAL);
paramsSeparator.addRule(RelativeLayout.ABOVE, R.id.mdtp_seconds_space);
TextView separatorView = (TextView) view.findViewById(R.id.mdtp_separator);
separatorView.setLayoutParams(paramsSeparator);
// Center the seconds
RelativeLayout.LayoutParams paramsSeconds = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
paramsSeconds.addRule(RelativeLayout.CENTER_IN_PARENT);
mSecondSpaceView.setLayoutParams(paramsSeconds);
} else {
// Hour + Minutes + Seconds + Am/Pm Indicator
// Put the seconds on the center
RelativeLayout.LayoutParams paramsSeconds = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
paramsSeconds.addRule(RelativeLayout.CENTER_IN_PARENT);
mSecondSpaceView.setLayoutParams(paramsSeconds);
// Put the separator above the seconds
RelativeLayout.LayoutParams paramsSeparator = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
paramsSeparator.addRule(RelativeLayout.CENTER_HORIZONTAL);
paramsSeparator.addRule(RelativeLayout.ABOVE, R.id.mdtp_seconds_space);
TextView separatorView = (TextView) view.findViewById(R.id.mdtp_separator);
separatorView.setLayoutParams(paramsSeparator);
// Put the Am/Pm indicator below the seconds
RelativeLayout.LayoutParams paramsAmPm = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
paramsAmPm.addRule(RelativeLayout.CENTER_HORIZONTAL);
paramsAmPm.addRule(RelativeLayout.BELOW, R.id.mdtp_seconds_space);
mAmPmLayout.setLayoutParams(paramsAmPm);
}
} else if (mIs24HourMode && !mEnableSeconds && mEnableMinutes) {
// center first separator
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.mdtp_separator);
separatorView.setLayoutParams(paramsSeparator);
} else if (!mEnableMinutes && !mEnableSeconds) {
// center the hour
RelativeLayout.LayoutParams paramsHour = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
paramsHour.addRule(RelativeLayout.CENTER_IN_PARENT);
mHourSpaceView.setLayoutParams(paramsHour);
if (!mIs24HourMode) {
RelativeLayout.LayoutParams paramsAmPm = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
paramsAmPm.addRule(RelativeLayout.RIGHT_OF, R.id.mdtp_hour_space);
paramsAmPm.addRule(RelativeLayout.ALIGN_BASELINE, R.id.mdtp_hour_space);
mAmPmLayout.setLayoutParams(paramsAmPm);
}
} else if (mEnableSeconds) {
// link separator to minutes
final View separator = view.findViewById(R.id.mdtp_separator);
RelativeLayout.LayoutParams paramsSeparator = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
paramsSeparator.addRule(RelativeLayout.LEFT_OF, R.id.mdtp_minutes_space);
paramsSeparator.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE);
separator.setLayoutParams(paramsSeparator);
if (!mIs24HourMode) {
// center minutes
RelativeLayout.LayoutParams paramsMinutes = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
paramsMinutes.addRule(RelativeLayout.CENTER_IN_PARENT);
mMinuteSpaceView.setLayoutParams(paramsMinutes);
} else {
// move minutes to right of center
RelativeLayout.LayoutParams paramsMinutes = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
paramsMinutes.addRule(RelativeLayout.RIGHT_OF, R.id.mdtp_center_view);
mMinuteSpaceView.setLayoutParams(paramsMinutes);
}
}
mAllowAutoAdvance = true;
setHour(mInitialTime.getHour(), true);
setMinute(mInitialTime.getMinute());
setSecond(mInitialTime.getSecond());
// Set up for keyboard mode.
mDoublePlaceholderText = res.getString(R.string.mdtp_time_placeholder);
mDeletedKeyFormat = res.getString(R.string.mdtp_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 title (if any)
TextView timePickerHeader = (TextView) view.findViewById(R.id.mdtp_time_picker_header);
if (!mTitle.isEmpty()) {
timePickerHeader.setVisibility(TextView.VISIBLE);
timePickerHeader.setText(mTitle.toUpperCase(Locale.getDefault()));
}
// Set the theme at the end so that the initialize()s above don't counteract the theme.
timePickerHeader.setBackgroundColor(Utils.darkenColor(mAccentColor));
view.findViewById(R.id.mdtp_time_display_background).setBackgroundColor(mAccentColor);
view.findViewById(R.id.mdtp_time_display).setBackgroundColor(mAccentColor);
// Button text can have a different color
if (mOkColor != -1)
mOkButton.setTextColor(mOkColor);
else
mOkButton.setTextColor(mAccentColor);
if (mCancelColor != -1)
mCancelButton.setTextColor(mCancelColor);
else
mCancelButton.setTextColor(mAccentColor);
if (getDialog() == null) {
view.findViewById(R.id.mdtp_done_background).setVisibility(View.GONE);
}
int circleBackground = ContextCompat.getColor(context, R.color.mdtp_circle_background);
int backgroundColor = ContextCompat.getColor(context, R.color.mdtp_background_color);
int darkBackgroundColor = ContextCompat.getColor(context, R.color.mdtp_light_gray);
int lightGray = ContextCompat.getColor(context, R.color.mdtp_light_gray);
mTimePicker.setBackgroundColor(mThemeDark ? lightGray : circleBackground);
view.findViewById(R.id.mdtp_time_picker_dialog).setBackgroundColor(mThemeDark ? darkBackgroundColor : backgroundColor);
return view;
}
use of com.wdullaer.materialdatetimepicker.HapticFeedbackController in project MaterialDateTimePicker by wdullaer.
the class DatePickerDialog method onCreateView.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
int listPosition = -1;
int listPositionOffset = 0;
int currentView = mDefaultView;
if (savedInstanceState != null) {
mWeekStart = savedInstanceState.getInt(KEY_WEEK_START);
mMinYear = savedInstanceState.getInt(KEY_YEAR_START);
mMaxYear = savedInstanceState.getInt(KEY_YEAR_END);
currentView = savedInstanceState.getInt(KEY_CURRENT_VIEW);
listPosition = savedInstanceState.getInt(KEY_LIST_POSITION);
listPositionOffset = savedInstanceState.getInt(KEY_LIST_POSITION_OFFSET);
mMinDate = (Calendar) savedInstanceState.getSerializable(KEY_MIN_DATE);
mMaxDate = (Calendar) savedInstanceState.getSerializable(KEY_MAX_DATE);
highlightedDays = (HashSet<Calendar>) savedInstanceState.getSerializable(KEY_HIGHLIGHTED_DAYS);
selectableDays = (TreeSet<Calendar>) savedInstanceState.getSerializable(KEY_SELECTABLE_DAYS);
disabledDays = (HashSet<Calendar>) savedInstanceState.getSerializable(KEY_DISABLED_DAYS);
mThemeDark = savedInstanceState.getBoolean(KEY_THEME_DARK);
mThemeDarkChanged = savedInstanceState.getBoolean(KEY_THEME_DARK_CHANGED);
mAccentColor = savedInstanceState.getInt(KEY_ACCENT);
mVibrate = savedInstanceState.getBoolean(KEY_VIBRATE);
mDismissOnPause = savedInstanceState.getBoolean(KEY_DISMISS);
mAutoDismiss = savedInstanceState.getBoolean(KEY_AUTO_DISMISS);
mTitle = savedInstanceState.getString(KEY_TITLE);
mOkResid = savedInstanceState.getInt(KEY_OK_RESID);
mOkString = savedInstanceState.getString(KEY_OK_STRING);
mOkColor = savedInstanceState.getInt(KEY_OK_COLOR);
mCancelResid = savedInstanceState.getInt(KEY_CANCEL_RESID);
mCancelString = savedInstanceState.getString(KEY_CANCEL_STRING);
mCancelColor = savedInstanceState.getInt(KEY_CANCEL_COLOR);
mVersion = (Version) savedInstanceState.getSerializable(KEY_VERSION);
mTimezone = (TimeZone) savedInstanceState.getSerializable(KEY_TIMEZONE);
}
int viewRes = mVersion == Version.VERSION_1 ? R.layout.mdtp_date_picker_dialog : R.layout.mdtp_date_picker_dialog_v2;
View view = inflater.inflate(viewRes, container, false);
// All options have been set at this point: round the initial selection if necessary
setToNearestDate(mCalendar);
mDatePickerHeaderView = (TextView) view.findViewById(R.id.mdtp_date_picker_header);
mMonthAndDayView = (LinearLayout) view.findViewById(R.id.mdtp_date_picker_month_and_day);
mMonthAndDayView.setOnClickListener(this);
mSelectedMonthTextView = (TextView) view.findViewById(R.id.mdtp_date_picker_month);
mSelectedDayTextView = (TextView) view.findViewById(R.id.mdtp_date_picker_day);
mYearView = (TextView) view.findViewById(R.id.mdtp_date_picker_year);
mYearView.setOnClickListener(this);
final Activity activity = getActivity();
mDayPickerView = new SimpleDayPickerView(activity, this);
mYearPickerView = new YearPickerView(activity, this);
// if theme mode has not been set by java code, check if it is specified in Style.xml
if (!mThemeDarkChanged) {
mThemeDark = Utils.isDarkTheme(activity, mThemeDark);
}
Resources res = getResources();
mDayPickerDescription = res.getString(R.string.mdtp_day_picker_description);
mSelectDay = res.getString(R.string.mdtp_select_day);
mYearPickerDescription = res.getString(R.string.mdtp_year_picker_description);
mSelectYear = res.getString(R.string.mdtp_select_year);
int bgColorResource = mThemeDark ? R.color.mdtp_date_picker_view_animator_dark_theme : R.color.mdtp_date_picker_view_animator;
view.setBackgroundColor(ContextCompat.getColor(activity, bgColorResource));
mAnimator = (AccessibleDateAnimator) view.findViewById(R.id.mdtp_animator);
mAnimator.addView(mDayPickerView);
mAnimator.addView(mYearPickerView);
mAnimator.setDateMillis(mCalendar.getTimeInMillis());
// TODO: Replace with animation decided upon by the design team.
Animation animation = new AlphaAnimation(0.0f, 1.0f);
animation.setDuration(ANIMATION_DURATION);
mAnimator.setInAnimation(animation);
// TODO: Replace with animation decided upon by the design team.
Animation animation2 = new AlphaAnimation(1.0f, 0.0f);
animation2.setDuration(ANIMATION_DURATION);
mAnimator.setOutAnimation(animation2);
Button okButton = (Button) view.findViewById(R.id.mdtp_ok);
okButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
tryVibrate();
notifyOnDateListener();
dismiss();
}
});
okButton.setTypeface(TypefaceHelper.get(activity, "Roboto-Medium"));
if (mOkString != null)
okButton.setText(mOkString);
else
okButton.setText(mOkResid);
Button cancelButton = (Button) view.findViewById(R.id.mdtp_cancel);
cancelButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
tryVibrate();
if (getDialog() != null)
getDialog().cancel();
}
});
cancelButton.setTypeface(TypefaceHelper.get(activity, "Roboto-Medium"));
if (mCancelString != null)
cancelButton.setText(mCancelString);
else
cancelButton.setText(mCancelResid);
cancelButton.setVisibility(isCancelable() ? View.VISIBLE : View.GONE);
// If an accent color has not been set manually, get it from the context
if (mAccentColor == -1) {
mAccentColor = Utils.getAccentColorFromThemeIfAvailable(getActivity());
}
if (mDatePickerHeaderView != null)
mDatePickerHeaderView.setBackgroundColor(Utils.darkenColor(mAccentColor));
view.findViewById(R.id.mdtp_day_picker_selected_date_layout).setBackgroundColor(mAccentColor);
// Buttons can have a different color
if (mOkColor != -1)
okButton.setTextColor(mOkColor);
else
okButton.setTextColor(mAccentColor);
if (mCancelColor != -1)
cancelButton.setTextColor(mCancelColor);
else
cancelButton.setTextColor(mAccentColor);
if (getDialog() == null) {
view.findViewById(R.id.mdtp_done_background).setVisibility(View.GONE);
}
updateDisplay(false);
setCurrentView(currentView);
if (listPosition != -1) {
if (currentView == MONTH_AND_DAY_VIEW) {
mDayPickerView.postSetSelection(listPosition);
} else if (currentView == YEAR_VIEW) {
mYearPickerView.postSetSelectionFromTop(listPosition, listPositionOffset);
}
}
mHapticFeedbackController = new HapticFeedbackController(activity);
return view;
}
use of com.wdullaer.materialdatetimepicker.HapticFeedbackController in project android_packages_apps_OmniClock by omnirom.
the class DatePickerDialog method onCreateView.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// All options have been set at this point: round the initial selection if necessary
setToNearestDate(mCalendar);
View view = inflater.inflate(R.layout.mdtp_date_picker_dialog, container, false);
mDayOfWeekView = (TextView) view.findViewById(R.id.date_picker_header);
mMonthAndDayView = (LinearLayout) view.findViewById(R.id.date_picker_month_and_day);
mMonthAndDayView.setOnClickListener(this);
mSelectedMonthTextView = (TextView) view.findViewById(R.id.date_picker_month);
mSelectedDayTextView = (TextView) view.findViewById(R.id.date_picker_day);
mYearView = (TextView) view.findViewById(R.id.date_picker_year);
mYearView.setOnClickListener(this);
int listPosition = -1;
int listPositionOffset = 0;
int currentView = mDefaultView;
if (savedInstanceState != null) {
mWeekStart = savedInstanceState.getInt(KEY_WEEK_START);
mMinYear = savedInstanceState.getInt(KEY_YEAR_START);
mMaxYear = savedInstanceState.getInt(KEY_YEAR_END);
currentView = savedInstanceState.getInt(KEY_CURRENT_VIEW);
listPosition = savedInstanceState.getInt(KEY_LIST_POSITION);
listPositionOffset = savedInstanceState.getInt(KEY_LIST_POSITION_OFFSET);
mMinDate = (Calendar) savedInstanceState.getSerializable(KEY_MIN_DATE);
mMaxDate = (Calendar) savedInstanceState.getSerializable(KEY_MAX_DATE);
highlightedDays = (Calendar[]) savedInstanceState.getSerializable(KEY_HIGHLIGHTED_DAYS);
selectableDays = (Calendar[]) savedInstanceState.getSerializable(KEY_SELECTABLE_DAYS);
disabledDays = (Calendar[]) savedInstanceState.getSerializable(KEY_DISABLED_DAYS);
mThemeDark = savedInstanceState.getBoolean(KEY_THEME_DARK);
mThemeDarkChanged = savedInstanceState.getBoolean(KEY_THEME_DARK_CHANGED);
mAccentColor = savedInstanceState.getInt(KEY_ACCENT);
mVibrate = savedInstanceState.getBoolean(KEY_VIBRATE);
mDismissOnPause = savedInstanceState.getBoolean(KEY_DISMISS);
mAutoDismiss = savedInstanceState.getBoolean(KEY_AUTO_DISMISS);
mTitle = savedInstanceState.getString(KEY_TITLE);
mOkResid = savedInstanceState.getInt(KEY_OK_RESID);
mOkString = savedInstanceState.getString(KEY_OK_STRING);
mCancelResid = savedInstanceState.getInt(KEY_CANCEL_RESID);
mCancelString = savedInstanceState.getString(KEY_CANCEL_STRING);
}
final Activity activity = getActivity();
mDayPickerView = new SimpleDayPickerView(activity, this);
mYearPickerView = new YearPickerView(activity, this);
// if theme mode has not been set by java code, check if it is specified in Style.xml
if (!mThemeDarkChanged) {
mThemeDark = Utils.isDarkTheme(activity, mThemeDark);
}
Resources res = getResources();
mDayPickerDescription = res.getString(R.string.mdtp_day_picker_description);
mSelectDay = res.getString(R.string.mdtp_select_day);
mYearPickerDescription = res.getString(R.string.mdtp_year_picker_description);
mSelectYear = res.getString(R.string.mdtp_select_year);
int bgColorResource = mThemeDark ? R.color.mdtp_date_picker_view_animator_dark_theme : R.color.mdtp_date_picker_view_animator;
view.setBackgroundColor(ContextCompat.getColor(activity, bgColorResource));
mAnimator = (AccessibleDateAnimator) view.findViewById(R.id.animator);
mAnimator.addView(mDayPickerView);
mAnimator.addView(mYearPickerView);
mAnimator.setDateMillis(mCalendar.getTimeInMillis());
// TODO: Replace with animation decided upon by the design team.
Animation animation = new AlphaAnimation(0.0f, 1.0f);
animation.setDuration(ANIMATION_DURATION);
mAnimator.setInAnimation(animation);
// TODO: Replace with animation decided upon by the design team.
Animation animation2 = new AlphaAnimation(1.0f, 0.0f);
animation2.setDuration(ANIMATION_DURATION);
mAnimator.setOutAnimation(animation2);
Button okButton = (Button) view.findViewById(R.id.ok);
okButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
tryVibrate();
notifyOnDateListener();
dismiss();
}
});
okButton.setTypeface(TypefaceHelper.get(activity, "Roboto-Medium"));
if (mOkString != null)
okButton.setText(mOkString);
else
okButton.setText(mOkResid);
Button cancelButton = (Button) view.findViewById(R.id.cancel);
cancelButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
tryVibrate();
if (getDialog() != null)
getDialog().cancel();
}
});
cancelButton.setTypeface(TypefaceHelper.get(activity, "Roboto-Medium"));
if (mCancelString != null)
cancelButton.setText(mCancelString);
else
cancelButton.setText(mCancelResid);
cancelButton.setVisibility(isCancelable() ? View.VISIBLE : View.GONE);
// If an accent color has not been set manually, get it from the context
if (mAccentColor == -1) {
mAccentColor = Utils.getAccentColorFromThemeIfAvailable(getActivity());
}
if (mDayOfWeekView != null)
mDayOfWeekView.setBackgroundColor(Utils.darkenColor(mAccentColor));
view.findViewById(R.id.day_picker_selected_date_layout).setBackgroundColor(mAccentColor);
okButton.setTextColor(mAccentColor);
cancelButton.setTextColor(mAccentColor);
if (getDialog() == null) {
view.findViewById(R.id.done_background).setVisibility(View.GONE);
}
updateDisplay(false);
setCurrentView(currentView);
if (listPosition != -1) {
if (currentView == MONTH_AND_DAY_VIEW) {
mDayPickerView.postSetSelection(listPosition);
} else if (currentView == YEAR_VIEW) {
mYearPickerView.postSetSelectionFromTop(listPosition, listPositionOffset);
}
}
mHapticFeedbackController = new HapticFeedbackController(activity);
return view;
}
use of com.wdullaer.materialdatetimepicker.HapticFeedbackController in project android_packages_apps_OmniClock by omnirom.
the class TimePickerDialog method onCreateView.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.mdtp_time_picker_dialog, container, false);
KeyboardListener keyboardListener = new KeyboardListener();
view.findViewById(R.id.time_picker_dialog).setOnKeyListener(keyboardListener);
// If an accent color has not been set manually, get it from the context
if (mAccentColor == -1) {
mAccentColor = Utils.getAccentColorFromThemeIfAvailable(getActivity());
}
mPrimaryColor = Utils.getPrimaryColorFromThemeIfAvailable(getActivity());
// if theme mode has not been set by java code, check if it is specified in Style.xml
if (!mThemeDarkChanged) {
mThemeDark = Utils.isDarkTheme(getActivity(), mThemeDark);
}
Resources res = getResources();
Context context = getActivity();
mHourPickerDescription = res.getString(R.string.mdtp_hour_picker_description);
mSelectHours = res.getString(R.string.mdtp_select_hours);
mMinutePickerDescription = res.getString(R.string.mdtp_minute_picker_description);
mSelectMinutes = res.getString(R.string.mdtp_select_minutes);
mSecondPickerDescription = res.getString(R.string.mdtp_second_picker_description);
mSelectSeconds = res.getString(R.string.mdtp_select_seconds);
mSelectedColor = ContextCompat.getColor(context, R.color.mdtp_white);
mUnselectedColor = ContextCompat.getColor(context, R.color.mdtp_accent_color_focused);
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);
mSecondSpaceView = (TextView) view.findViewById(R.id.seconds_space);
mSecondView = (TextView) view.findViewById(R.id.seconds);
mSecondView.setOnKeyListener(keyboardListener);
mAmPmTextView = (TextView) view.findViewById(R.id.ampm_label);
mAmPmTextView.setOnKeyListener(keyboardListener);
String[] amPmTexts = new DateFormatSymbols().getAmPmStrings();
mAmText = amPmTexts[0];
mPmText = amPmTexts[1];
mHapticFeedbackController = new HapticFeedbackController(getActivity());
if (mTimePicker != null) {
mInitialTime = new Timepoint(mTimePicker.getHours(), mTimePicker.getMinutes(), mTimePicker.getSeconds());
}
mInitialTime = roundToNearest(mInitialTime);
mTimePicker = (RadialPickerLayout) view.findViewById(R.id.time_picker);
mTimePicker.setOnValueSelectedListener(this);
mTimePicker.setOnKeyListener(keyboardListener);
mTimePicker.initialize(getActivity(), this, mInitialTime, 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();
}
});
mSecondView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
setCurrentItemShowing(SECOND_INDEX, true, false, true);
tryVibrate();
}
});
mOkButton = (Button) view.findViewById(R.id.ok);
mOkButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (mInKbMode && isTypedTimeFullyLegal()) {
finishKbMode(false);
} else {
tryVibrate();
}
notifyOnDateListener();
dismiss();
}
});
mOkButton.setOnKeyListener(keyboardListener);
mOkButton.setTypeface(TypefaceHelper.get(context, "Roboto-Medium"));
if (mOkString != null)
mOkButton.setText(mOkString);
else
mOkButton.setText(mOkResid);
mCancelButton = (Button) view.findViewById(R.id.cancel);
mCancelButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
tryVibrate();
if (getDialog() != null)
getDialog().cancel();
}
});
mCancelButton.setTypeface(TypefaceHelper.get(context, "Roboto-Medium"));
if (mCancelString != null)
mCancelButton.setText(mCancelString);
else
mCancelButton.setText(mCancelResid);
mCancelButton.setVisibility(isCancelable() ? View.VISIBLE : View.GONE);
// Enable or disable the AM/PM view.
mAmPmHitspace = view.findViewById(R.id.ampm_hitspace);
if (mIs24HourMode) {
mAmPmTextView.setVisibility(View.GONE);
} else {
mAmPmTextView.setVisibility(View.VISIBLE);
updateAmPmDisplay(mInitialTime.isAM() ? AM : PM);
mAmPmHitspace.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Don't do anything if either AM or PM are disabled
if (isAmDisabled() || isPmDisabled())
return;
tryVibrate();
int amOrPm = mTimePicker.getIsCurrentlyAmOrPm();
if (amOrPm == AM) {
amOrPm = PM;
} else if (amOrPm == PM) {
amOrPm = AM;
}
mTimePicker.setAmOrPm(amOrPm);
}
});
}
// Disable seconds picker
if (!mEnableSeconds) {
mSecondView.setVisibility(View.GONE);
view.findViewById(R.id.separator_seconds).setVisibility(View.GONE);
}
// Disable minutes picker
if (!mEnableMinutes) {
mMinuteSpaceView.setVisibility(View.GONE);
view.findViewById(R.id.separator).setVisibility(View.GONE);
}
// Center stuff depending on what's visible
if (mIs24HourMode && !mEnableSeconds && mEnableMinutes) {
// center first separator
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 if (!mEnableMinutes && !mEnableSeconds) {
// center the hour
RelativeLayout.LayoutParams paramsHour = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
paramsHour.addRule(RelativeLayout.CENTER_IN_PARENT);
mHourSpaceView.setLayoutParams(paramsHour);
if (!mIs24HourMode) {
RelativeLayout.LayoutParams paramsAmPm = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
paramsAmPm.addRule(RelativeLayout.RIGHT_OF, R.id.hour_space);
paramsAmPm.addRule(RelativeLayout.ALIGN_BASELINE, R.id.hour_space);
mAmPmTextView.setLayoutParams(paramsAmPm);
}
} else if (mEnableSeconds) {
// link separator to minutes
final View separator = view.findViewById(R.id.separator);
RelativeLayout.LayoutParams paramsSeparator = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
paramsSeparator.addRule(RelativeLayout.LEFT_OF, R.id.minutes_space);
paramsSeparator.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE);
separator.setLayoutParams(paramsSeparator);
if (!mIs24HourMode) {
// center minutes
RelativeLayout.LayoutParams paramsMinutes = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
paramsMinutes.addRule(RelativeLayout.CENTER_IN_PARENT);
mMinuteSpaceView.setLayoutParams(paramsMinutes);
} else {
// move minutes to right of center
RelativeLayout.LayoutParams paramsMinutes = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
paramsMinutes.addRule(RelativeLayout.RIGHT_OF, R.id.center_view);
mMinuteSpaceView.setLayoutParams(paramsMinutes);
}
}
mAllowAutoAdvance = true;
setHour(mInitialTime.getHour(), true);
setMinute(mInitialTime.getMinute());
setSecond(mInitialTime.getSecond());
// Set up for keyboard mode.
mDoublePlaceholderText = res.getString(R.string.mdtp_time_placeholder);
mDeletedKeyFormat = res.getString(R.string.mdtp_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 title (if any)
TextView timePickerHeader = (TextView) view.findViewById(R.id.time_picker_header);
if (!mTitle.isEmpty()) {
timePickerHeader.setVisibility(TextView.VISIBLE);
timePickerHeader.setText(mTitle.toUpperCase(Locale.getDefault()));
}
Spinner timeOffsetPicker = (Spinner) view.findViewById(R.id.time_offset_selector);
List<String> offsetTimeEntries = new ArrayList<String>();
offsetTimeEntries.addAll(Arrays.asList(getResources().getStringArray(R.array.alarm_offset_entries)));
final List<String> offsetTimeValues = new ArrayList<String>();
offsetTimeValues.addAll(Arrays.asList(getResources().getStringArray(R.array.alarm_offset_values)));
ArrayAdapter<CharSequence> adapter = new ArrayAdapter(getActivity(), R.layout.spinner_item, offsetTimeEntries);
timeOffsetPicker.setAdapter(adapter);
timeOffsetPicker.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if (!mSpinnerInit) {
mSpinnerInit = true;
return;
}
int offsetMinutes = Integer.valueOf(offsetTimeValues.get(position));
int hour = mInitialTime.getHour();
int minute = mInitialTime.getMinute();
int absMinute = hour * 60 + minute;
absMinute += offsetMinutes;
hour = absMinute / 60;
minute = absMinute - hour * 60;
hour = hour % 24;
setHour(hour, false);
setMinute(minute);
mTimePicker.setTime(new Timepoint(hour, minute));
// switch back to hours if different
mTimePicker.setCurrentItemShowing(HOUR_INDEX, true);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
// Set the theme at the end so that the initialize()s above don't counteract the theme.
mOkButton.setTextColor(mAccentColor);
mCancelButton.setTextColor(mAccentColor);
timePickerHeader.setBackgroundColor(mAccentColor);
view.findViewById(R.id.time_display_background).setBackgroundColor(mAccentColor);
view.findViewById(R.id.time_display).setBackgroundColor(mPrimaryColor);
if (getDialog() == null) {
view.findViewById(R.id.done_background).setVisibility(View.GONE);
}
return view;
}
Aggregations