package org.glucosio.android.activity; import android.content.DialogInterface; import android.os.Bundle; import android.support.design.widget.BottomSheetDialog; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.text.InputType; import android.view.MenuItem; import android.view.View; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TableLayout; import com.wdullaer.materialdatetimepicker.time.RadialPickerLayout; import com.wdullaer.materialdatetimepicker.time.TimePickerDialog; import org.glucosio.android.R; import org.glucosio.android.db.Reminder; import org.glucosio.android.presenter.RemindersPresenter; import org.glucosio.android.tools.AnimationTools; import java.util.Calendar; public class RemindersActivity extends AppCompatActivity implements TimePickerDialog.OnTimeSetListener { private FloatingActionButton addFab; private RemindersPresenter presenter; private ListView listView; private String label; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_reminders); presenter = new RemindersPresenter(this); Toolbar toolbar = (Toolbar) findViewById(R.id.activity_main_toolbar); if (toolbar != null) { setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setElevation(2); getSupportActionBar().setTitle(getResources().getString(R.string.activity_reminders_title)); } addFab = (FloatingActionButton) findViewById(R.id.activity_reminders_fab_add); addFab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(final View view) { AlertDialog.Builder builder = new AlertDialog.Builder(RemindersActivity.this); builder.setTitle(R.string.activity_reminder_add_label); // Set up the input final EditText input = new EditText(RemindersActivity.this); // Specify the type of input expected; this, for example, sets the input as a password, and will mask the text input.setInputType(InputType.TYPE_CLASS_TEXT); // Set EditText margin TableLayout.LayoutParams params = new TableLayout.LayoutParams(); params.setMargins(16, 16, 16, 16); input.setLayoutParams(params); builder.setView(input); // Set up the buttons builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { label = input.getText().toString(); if (label.isEmpty()){ showEmptyErrorMessage(view); } else { openTimePicker(); } } }); builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); builder.show(); } }); listView = (ListView) findViewById(R.id.activity_reminders_listview); listView.setEmptyView(findViewById(R.id.activity_reminders_listview_empty)); listView.setAdapter(presenter.getAdapter()); addFab.postDelayed(new Runnable() { @Override public void run() { AnimationTools.startCircularReveal(addFab); } }, 600); } private void openTimePicker(){ // Open Time Picker on FAB click boolean is24HourFormat = android.text.format.DateFormat.is24HourFormat(getApplicationContext()); Calendar cal = presenter.getCalendar(); TimePickerDialog tpd = TimePickerDialog.newInstance( RemindersActivity.this, cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), is24HourFormat); tpd.show(getFragmentManager(), "Timepickerdialog"); } public void updateReminder(Reminder reminder) { presenter.updateReminder(reminder); presenter.saveReminders(); } public void updateRemindersList() { listView.setAdapter(presenter.getAdapter()); listView.invalidate(); } private void showEmptyErrorMessage(View view){ Snackbar.make(view, R.string.activity_reminder_error_empty, Snackbar.LENGTH_SHORT).show(); } @Override public void onTimeSet(RadialPickerLayout view, int hourOfDay, int minute, int seconds) { Calendar cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, hourOfDay); cal.set(Calendar.MINUTE, minute); // Id is HOURS+MINUTES to avoid duplicates String concatenatedId = hourOfDay + "" + minute; // Metric is always glucose until I write support for other metrics so... // TODO: Add Reminders for other metrics // Also oneTime is always set to false until I implement one time alarms // TODO: Implement one time alarms presenter.addReminder(Long.parseLong(concatenatedId), cal.getTime(), label, "glucose", false, true); } public void showDuplicateError() { View parentLayout = findViewById(R.id.activity_reminders_root_view); Snackbar.make(parentLayout, R.string.activitiy_reminders_error_duplicate, Snackbar.LENGTH_SHORT).show(); } public void showBottomSheetDialog(final long id) { final BottomSheetDialog mBottomSheetDialog = new BottomSheetDialog(this); View sheetView = getLayoutInflater().inflate(R.layout.fragment_reminders_bottom_sheet, null); LinearLayout delete = (LinearLayout) sheetView.findViewById(R.id.fragment_history_bottom_sheet_delete); delete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { presenter.deleteReminder(id); updateRemindersList(); mBottomSheetDialog.dismiss(); } }); mBottomSheetDialog.setContentView(sheetView); mBottomSheetDialog.show(); } @Override public boolean onOptionsItemSelected(MenuItem menuItem) { if (menuItem.getItemId() == android.R.id.home) { presenter.saveReminders(); finish(); } return super.onOptionsItemSelected(menuItem); } }