package com.example.bottomsheetpickers;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AppCompatActivity;
import android.text.format.DateFormat;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RadioGroup;
import android.widget.TextView;
import com.philliphsu.bottomsheetpickers.BottomSheetPickerDialog;
import com.philliphsu.bottomsheetpickers.date.DatePickerDialog;
import com.philliphsu.bottomsheetpickers.time.BottomSheetTimePickerDialog;
import com.philliphsu.bottomsheetpickers.time.grid.GridTimePickerDialog;
import com.philliphsu.bottomsheetpickers.time.numberpad.NumberPadTimePickerDialog;
import java.util.Calendar;
public class MainActivity extends AppCompatActivity implements
BottomSheetTimePickerDialog.OnTimeSetListener, DatePickerDialog.OnDateSetListener {
private static final String TAG = "MainActivity";
private static final boolean USE_BUILDERS = false;
private TextView mText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mText = (TextView) findViewById(R.id.text);
final RadioGroup group = (RadioGroup) findViewById(R.id.radioGroup);
findViewById(R.id.fab).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogFragment dialog = createDialog(group.getCheckedRadioButtonId());
dialog.show(getSupportFragmentManager(), TAG);
}
});
}
@Override
public void onTimeSet(ViewGroup viewGroup, int hourOfDay, int minute) {
Calendar cal = new java.util.GregorianCalendar();
cal.set(Calendar.HOUR_OF_DAY, hourOfDay);
cal.set(Calendar.MINUTE, minute);
mText.setText("Time set: " + DateFormat.getTimeFormat(this).format(cal.getTime()));
}
@Override
public void onDateSet(DatePickerDialog dialog, int year, int monthOfYear, int dayOfMonth) {
Calendar cal = new java.util.GregorianCalendar();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, monthOfYear);
cal.set(Calendar.DAY_OF_MONTH, dayOfMonth);
mText.setText("Date set: " + DateFormat.getDateFormat(this).format(cal.getTime()));
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_RIGHT:
findViewById(R.id.fab).requestFocus();
break;
case KeyEvent.KEYCODE_DPAD_LEFT:
findViewById(R.id.radioGroup).requestFocus();
break;
}
return super.onKeyDown(keyCode, event);
}
private DialogFragment createDialog(int checkedId) {
if (USE_BUILDERS) {
return createDialogWithBuilders(checkedId);
} else {
return createDialogWithSetters(checkedId);
}
}
private DialogFragment createDialogWithBuilders(int checkedId) {
BottomSheetPickerDialog.Builder builder = null;
boolean custom = false;
boolean customDark = false;
boolean themeDark = false;
switch (checkedId) {
case R.id.choice_number_pad:
case R.id.choice_number_pad_dark:
case R.id.choice_number_pad_custom:
case R.id.choice_number_pad_custom_dark: {
custom = checkedId == R.id.choice_number_pad_custom;
customDark = checkedId == R.id.choice_number_pad_custom_dark;
themeDark = checkedId == R.id.choice_number_pad_dark || customDark;
builder = new NumberPadTimePickerDialog.Builder(MainActivity.this);
if (custom || customDark) {
((NumberPadTimePickerDialog.Builder) builder).setHeaderTextColor(0xFFFF4081);
}
break;
}
case R.id.choice_grid_picker:
case R.id.choice_grid_picker_dark:
case R.id.choice_grid_picker_custom:
case R.id.choice_grid_picker_custom_dark: {
custom = checkedId == R.id.choice_grid_picker_custom;
customDark = checkedId == R.id.choice_grid_picker_custom_dark;
themeDark = checkedId == R.id.choice_grid_picker_dark || customDark;
Calendar now = Calendar.getInstance();
builder = new GridTimePickerDialog.Builder(
MainActivity.this,
now.get(Calendar.HOUR_OF_DAY),
now.get(Calendar.MINUTE),
DateFormat.is24HourFormat(MainActivity.this));
GridTimePickerDialog.Builder gridDialogBuilder =
(GridTimePickerDialog.Builder) builder;
if (custom || customDark) {
gridDialogBuilder.setHeaderTextColorSelected(0xFFFF4081)
.setHeaderTextColorUnselected(0x4AFF4081)
.setTimeSeparatorColor(0xFF000000)
.setHalfDayButtonColorSelected(0xFFFF4081)
.setHalfDayButtonColorUnselected(0x4AFF4081);
}
break;
}
case R.id.choice_date_picker:
case R.id.choice_date_picker_dark:
case R.id.choice_date_picker_custom:
case R.id.choice_date_picker_custom_dark: {
custom = checkedId == R.id.choice_date_picker_custom;
customDark = checkedId == R.id.choice_date_picker_custom_dark;
themeDark = checkedId == R.id.choice_date_picker_dark || customDark;
Calendar now = Calendar.getInstance();
Calendar max = Calendar.getInstance();
max.add(Calendar.YEAR, 10);
builder = new DatePickerDialog.Builder(
MainActivity.this,
now.get(Calendar.YEAR),
now.get(Calendar.MONTH),
now.get(Calendar.DAY_OF_MONTH));
DatePickerDialog.Builder dateDialogBuilder = (DatePickerDialog.Builder) builder;
dateDialogBuilder.setMaxDate(max)
.setMinDate(now)
.setYearRange(1970, 2032);
if (custom || customDark) {
dateDialogBuilder.setHeaderTextColorSelected(0xFFFF4081)
.setHeaderTextColorUnselected(0x4AFF4081)
.setDayOfWeekHeaderTextColorSelected(0xFFFF4081)
.setDayOfWeekHeaderTextColorUnselected(0x4AFF4081);
}
break;
}
}
builder.setThemeDark(themeDark);
if (custom || customDark) {
builder.setAccentColor(0xFFFF4081)
.setBackgroundColor(custom? 0xFF90CAF9 : 0xFF2196F3)
.setHeaderColor(custom? 0xFF90CAF9 : 0xFF2196F3)
.setHeaderTextDark(custom);
}
return builder.build();
}
private DialogFragment createDialogWithSetters(int checkedId) {
BottomSheetPickerDialog dialog = null;
boolean custom = false;
boolean customDark = false;
boolean themeDark = false;
switch (checkedId) {
case R.id.choice_number_pad:
case R.id.choice_number_pad_dark:
case R.id.choice_number_pad_custom:
case R.id.choice_number_pad_custom_dark: {
dialog = NumberPadTimePickerDialog.newInstance(MainActivity.this);
custom = checkedId == R.id.choice_number_pad_custom;
customDark = checkedId == R.id.choice_number_pad_custom_dark;
themeDark = checkedId == R.id.choice_number_pad_dark || customDark;
if (custom || customDark) {
((NumberPadTimePickerDialog) dialog).setHeaderTextColor(0xFFFF4081);
}
break;
}
case R.id.choice_grid_picker:
case R.id.choice_grid_picker_dark:
case R.id.choice_grid_picker_custom:
case R.id.choice_grid_picker_custom_dark: {
Calendar now = Calendar.getInstance();
dialog = GridTimePickerDialog.newInstance(
MainActivity.this,
now.get(Calendar.HOUR_OF_DAY),
now.get(Calendar.MINUTE),
DateFormat.is24HourFormat(MainActivity.this));
custom = checkedId == R.id.choice_grid_picker_custom;
customDark = checkedId == R.id.choice_grid_picker_custom_dark;
themeDark = checkedId == R.id.choice_grid_picker_dark || customDark;
GridTimePickerDialog gridDialog = (GridTimePickerDialog) dialog;
if (custom || customDark) {
gridDialog.setHeaderTextColorSelected(0xFFFF4081);
gridDialog.setHeaderTextColorUnselected(0x4AFF4081);
gridDialog.setTimeSeparatorColor(0xFF000000);
gridDialog.setHalfDayButtonColorSelected(0xFFFF4081);
gridDialog.setHalfDayButtonColorUnselected(0x4AFF4081);
}
break;
}
case R.id.choice_date_picker:
case R.id.choice_date_picker_dark:
case R.id.choice_date_picker_custom:
case R.id.choice_date_picker_custom_dark: {
Calendar now = Calendar.getInstance();
dialog = DatePickerDialog.newInstance(
MainActivity.this,
now.get(Calendar.YEAR),
now.get(Calendar.MONTH),
now.get(Calendar.DAY_OF_MONTH));
custom = checkedId == R.id.choice_date_picker_custom;
customDark = checkedId == R.id.choice_date_picker_custom_dark;
themeDark = checkedId == R.id.choice_date_picker_dark || customDark;
DatePickerDialog dateDialog = (DatePickerDialog) dialog;
dateDialog.setMinDate(now);
Calendar max = Calendar.getInstance();
max.add(Calendar.YEAR, 10);
dateDialog.setMaxDate(max);
dateDialog.setYearRange(1970, 2032);
if (custom || customDark) {
dateDialog.setHeaderTextColorSelected(0xFFFF4081);
dateDialog.setHeaderTextColorUnselected(0x4AFF4081);
dateDialog.setDayOfWeekHeaderTextColorSelected(0xFFFF4081);
dateDialog.setDayOfWeekHeaderTextColorUnselected(0x4AFF4081);
}
break;
}
}
dialog.setThemeDark(themeDark);
if (custom || customDark) {
dialog.setAccentColor(0xFFFF4081);
dialog.setBackgroundColor(custom? 0xFF90CAF9 : 0xFF2196F3);
dialog.setHeaderColor(custom? 0xFF90CAF9 : 0xFF2196F3);
dialog.setHeaderTextDark(custom);
}
return dialog;
}
}