import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Color;
import android.graphics.Rect;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewTreeObserver;
import android.view.inputmethod.InputMethodManager;
import android.widget.CheckBox;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.NumberPicker;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;
import com.cocosw.bottomsheet.BottomSheet;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class NewAlarm extends ActionBarActivity implements View.OnClickListener{
private RelativeLayout repeat, snooze_;
private CheckBox repeatCheck;
private TextView time, date;
private static TextView alert1, alert2, snooze, interval;
private static Boolean snoozeForAll = false;
private EditText title, description, url, location;
private DateFormat timeFormat = new SimpleDateFormat("hh:mm aa");
private DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
private Calendar time_cal, date_cal;
private int days=0, hours=0, min=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.new_alarm);
ActionBar ab = getSupportActionBar();
ColorDrawable colorDrawable = new ColorDrawable(Color.parseColor("#ff156514"));
ab.setBackgroundDrawable(colorDrawable);
repeat = (RelativeLayout)findViewById(R.id.alarm_repeat);
snooze_ = (RelativeLayout)findViewById(R.id.snooze);
repeatCheck = (CheckBox)findViewById(R.id.alarm_repeat_check);
time = (TextView)findViewById(R.id.time_value);
date = (TextView)findViewById(R.id.date_value);
alert1 = (TextView)findViewById(R.id.alert1);
alert2 = (TextView)findViewById(R.id.alert2);
snooze = (TextView)findViewById(R.id.snooze_value);
interval = (TextView)findViewById(R.id.interval_value);
title = (EditText)findViewById(R.id.title_value);
url = (EditText)findViewById(R.id.url_value);
location = (EditText)findViewById(R.id.loaction_value);
description = (EditText)findViewById(R.id.decription_value);
time_cal = Calendar.getInstance();
date_cal = Calendar.getInstance();
// Default snooze time
String snoozeTime = AlarmsTable.getDefaultSnooze(Home.getDop());
if(snoozeTime.equals("")){
snooze.setText(getResources().getString(R.string.default_snooze));
}
else {
snooze.setText(snoozeTime);
}
// On Click Listener
time.setOnClickListener(this);
date.setOnClickListener(this);
interval.setOnClickListener(this);
alert1.setOnClickListener(this);
alert2.setOnClickListener(this);
snooze_.setOnClickListener(this);
repeat.setOnClickListener(this);
// To Check if Soft Keyboard is Opened/Closed
final View activityRootView = findViewById(R.id.scrollView);
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect r = new Rect();
//r will be populated with the coordinates of your view that area still visible.
activityRootView.getWindowVisibleDisplayFrame(r);
int heightDiff = activityRootView.getRootView().getHeight() - (r.bottom - r.top);
// Opened
if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard...
// Disabling Click Events on Screen
//set_Clickable(false);
}
// Closed
else{
// Enabling Click Events on Screen
//set_Clickable(true);
}
}
});
// Getting and Setting system time and date
time.setText(timeFormat.format(new Date()));
date.setText(dateFormat.format(new Date()));
}
// Setting Clickable States if Keyboard is Opened/Closed
public void set_Clickable(Boolean clickable){
time.setClickable(clickable);
date.setClickable(clickable);
interval.setClickable(clickable);
repeat.setClickable(clickable);
alert1.setClickable(clickable);
alert2.setClickable(clickable);
snooze_.setClickable(clickable);
title.setClickable(clickable);
description.setClickable(clickable);
url.setClickable(clickable);
location.setClickable(clickable);
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.time_value:
// Launch Time Picker dialog
TimePickerDialog tpd = new TimePickerDialog(this,
new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay,
int minute) {
// Display Selected time in textView
time_cal.set(Calendar.HOUR_OF_DAY, hourOfDay);
time_cal.set(Calendar.MINUTE, minute);
time.setText(timeFormat.format(time_cal.getTime()));
}
}, time_cal.get(Calendar.HOUR_OF_DAY), time_cal.get(Calendar.MINUTE), false);
tpd.show();
break;
case R.id.date_value:
// Launch Date Picker Dialog
DatePickerDialog dpd = new DatePickerDialog(this,
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
// Display Selected date in textView
date_cal.set(Calendar.YEAR, year);
date_cal.set(Calendar.MONTH, monthOfYear);
date_cal.set(Calendar.DAY_OF_MONTH, dayOfMonth);
date.setText(dateFormat.format(date_cal.getTime()));
}
}, date_cal.get(Calendar.YEAR), date_cal.get(Calendar.MONTH), date_cal.get(Calendar.DAY_OF_MONTH));
dpd.show();
break;
case R.id.interval_value:
// Showing Dialog for Minutes, Hours, Days
showIntervalPicker();
break;
case R.id.alarm_repeat:
repeatCheck.toggle();
break;
case R.id.alert1:
AlertDialog_ alert1 = new AlertDialog_();
Bundle args1 = new Bundle();
args1.putInt("flag", 1);
alert1.setArguments(args1);
alert1.show(getSupportFragmentManager(), "alert1");
break;
case R.id.alert2:
AlertDialog_ alert2 = new AlertDialog_();
Bundle args2 = new Bundle();
args2.putInt("flag", 2);
alert2.setArguments(args2);
alert2.show(getSupportFragmentManager(), "alert2");
break;
case R.id.snooze:
AutoSilence autoSilenceDialog = new AutoSilence();
autoSilenceDialog.show(getSupportFragmentManager(), "autoSilenceDialog");
break;
}
}
// To Hide Keyboard on Outside Touch
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
View v = getCurrentFocus();
if (v != null) {
Rect outRect = new Rect();
v.getGlobalVisibleRect(outRect);
if (!outRect.contains((int)event.getRawX(), (int)event.getRawY())) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}
}
return super.dispatchTouchEvent(event);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.new_alarm, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
// when user clicks on Add button
case R.id.add:
if (interval.getText().toString().equals(getResources().getString(R.string.minHourDay))) {
Toast.makeText(this, "Please Enter Interval Time!", Toast.LENGTH_LONG).show();
} else if (title.getText().toString().equals("")) {
Toast.makeText(this, "Please Enter Title!", Toast.LENGTH_LONG).show();
} else {
// Adding New Alarm into Database
String time_ = time.getText().toString();
String date_ = date.getText().toString();
int interval_ = getIntervalMinutes();
int repeatCheck_ = (repeatCheck.isChecked() ? 1 : 0);
String title_ = title.getText().toString();
String alert1_ = alert1.getText().toString();
String alert2_ = alert2.getText().toString();
String snooze_ = snooze.getText().toString();
String location_ = location.getText().toString();
String url_ = url.getText().toString();
String description_ = description.getText().toString();
// Getting Alarm Ring Time
long ringTime = Home.getRingTime(time_, date_, interval_);
// When Ring Time is greater than system time
if (ringTime > System.currentTimeMillis()) {
// Inserting alarm in database
long id = AlarmsTable.insertAlarm(time_, date_, interval_, repeatCheck_, title_, alert1_, alert2_,
snooze_, location_, url_, description_, Home.getDop());
if (snoozeForAll) {
AlarmsTable.setSnoozeTimeForAll(snooze_, Home.getDop());
}
// Creating alarm in System
Home.setNewAlarm(this, time_, date_, interval_, repeatCheck_, id, alert1_, alert2_);
// Showing Toast Notification
String ring_time = Home.ringTime(time_, date_, interval_);
Toast.makeText(this, "Alarm set on " + ring_time, Toast.LENGTH_LONG).show();
finish();
}
// When date is parsed but Ring Time is less than system time
else if (ringTime < System.currentTimeMillis() && ringTime != 0) {
Toast.makeText(this, "Not created as alarm time is in the past", Toast.LENGTH_LONG).show();
}
// When date is not parsed
else {
Toast.makeText(this, "Alarm not created!", Toast.LENGTH_LONG).show();
}
}
break;
}
return super.onOptionsItemSelected(item);
}
private int getIntervalMinutes() {
int daysInMinutes = days * 24 * 60;
int hoursInMinutes = hours * 60;
return daysInMinutes + hoursInMinutes + min;
}
@Override
protected void onSaveInstanceState(Bundle savedInstanceState){
// Save the state before orientation change
savedInstanceState.putString("time", time.getText().toString());
savedInstanceState.putString("date", date.getText().toString());
savedInstanceState.putString("interval", interval.getText().toString());
savedInstanceState.putString("alert1", alert1.getText().toString());
savedInstanceState.putString("alert2", alert2.getText().toString());
savedInstanceState.putString("snooze", snooze.getText().toString());
super.onSaveInstanceState(savedInstanceState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState){
super.onRestoreInstanceState(savedInstanceState);
// Restore the state after orientation change
time.setText(savedInstanceState.getString("time"));
date.setText(savedInstanceState.getString("date"));
interval.setText(savedInstanceState.getString("interval"));
alert1.setText(savedInstanceState.getString("alert1"));
alert2.setText(savedInstanceState.getString("alert2"));
snooze.setText(savedInstanceState.getString("snooze"));
}
// Dialog for Alert Times
public static class AlertDialog_ extends DialogFragment {
// Array of list values shown in dialog
private String[] alerts;
private String selected;
private int index = -1;
private int flag;
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final String alerts[] = Home.getStringArray(getResources().getStringArray(R.array.alerts));
flag = getArguments().getInt("flag");
// determine selected index
for(int i=0; i<alerts.length; i++){
if(flag == 1) {
if (alerts[i].equals(alert1.getText().toString())) {
index = i;
}
}
else{
if (alerts[i].equals(alert2.getText().toString())) {
index = i;
}
}
}
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Alert me before")
.setSingleChoiceItems(alerts, index, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
selected = alerts[which];
if(flag == 1){
alert1.setText(selected);
}
else{
alert2.setText(selected);
}
dialog.cancel();
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
return builder.create();
}
}
// Select Auto-Silence-Duration Alert Dialog
public static class AutoSilence extends DialogFragment {
// Array of list values shown in dialog
private String[] durations;
private String selected;
private int index;
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
durations = getResources().getStringArray(R.array.snooze);
// determine selected index
for(int i=0; i<durations.length; i++){
if(durations[i].equals(snooze.getText().toString())){
index = i;
}
}
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Select Snooze Time")
.setSingleChoiceItems(durations, index, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
final DialogInterface snoozeDialog = dialog;
selected = durations[which];
new BottomSheet.Builder(getActivity(), R.style.BottomSheet_StyleDialog)
.sheet(R.menu.bottomsheet)
.listener(new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case R.id.for_this:
snoozeForAll = false;
snooze.setText(selected);
snoozeDialog.cancel();
break;
case R.id.for_all:
snoozeForAll = true;
snooze.setText(selected);
snoozeDialog.cancel();
break;
case R.id.cancel:
snoozeDialog.cancel();
break;
}
}
}).show();
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
return builder.create();
}
}
// Days/hours/min Picker Dialog
public void showIntervalPicker(){
LayoutInflater inflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.number_picker, null);
final NumberPicker daysPicker = (NumberPicker) view.findViewById(R.id.picker1);
final NumberPicker hoursPicker = (NumberPicker) view.findViewById(R.id.picker2);
final NumberPicker minPicker = (NumberPicker) view.findViewById(R.id.picker3);
final Context ctx = this;
daysPicker.setMaxValue(31);
daysPicker.setMinValue(0);
daysPicker.setValue(days);
daysPicker.setWrapSelectorWheel(true);
hoursPicker.setMaxValue(23);
hoursPicker.setMinValue(0);
hoursPicker.setValue(hours);
hoursPicker.setWrapSelectorWheel(true);
minPicker.setMaxValue(59);
minPicker.setMinValue(0);
minPicker.setValue(min);
minPicker.setWrapSelectorWheel(true);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(view);
builder.setTitle("Remind After");
builder.setPositiveButton("Set Value", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
days = daysPicker.getValue();
hours = hoursPicker.getValue();
min = minPicker.getValue();
interval.setText(Home.getIntervalLabel(ctx, days, hours, min));
}
});
builder.setNegativeButton("Go Back", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create();
builder.show();
}
}
No comments:
Post a Comment