Thursday, 11 June 2015

Update alarm class

package com.siliconicpro.admin.ialarm;

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;

public class UpdateAlarm extends ActionBarActivity implements View.OnClickListener{

    private RelativeLayout repeat, snooze_;
    private EditText title, location, url, description;
    private CheckBox repeatCheck;
    private static TextView alert1, alert2, snooze, interval;
    private static Boolean snoozeForAll = false;
    private TextView time, date;
    private String id;
    private Calendar time_cal, date_cal;
    private DateFormat timeFormat = new SimpleDateFormat("hh:mm aa");
    private DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
    private int days, hours, min;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.update_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);
        interval = (TextView)findViewById(R.id.interval_value);
        repeatCheck = (CheckBox)findViewById(R.id.alarm_repeat_check);
        time = (TextView)findViewById(R.id.time_value);
        date = (TextView)findViewById(R.id.date_value);
        title = (EditText)findViewById(R.id.title_value);
        alert1 = (TextView)findViewById(R.id.alert1);
        alert2 = (TextView)findViewById(R.id.alert2);
        snooze = (TextView)findViewById(R.id.snooze_value);
        location = (EditText)findViewById(R.id.location_value);
        url = (EditText)findViewById(R.id.url_value);
        description = (EditText)findViewById(R.id.description_value);
        time_cal = Calendar.getInstance();
        date_cal = Calendar.getInstance();

        // Showing data from Database
        showAllData();

        // 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);
                }
            }
        });

        time.setOnClickListener(this);
        date.setOnClickListener(this);
        interval.setOnClickListener(this);
        alert1.setOnClickListener(this);
        alert2.setOnClickListener(this);
        snooze_.setOnClickListener(this);
        repeat.setOnClickListener(this);
    }

    private void showAllData() {
        id = getIntent().getExtras().getString("id");
        time.setText(getIntent().getExtras().getString("time"));
        date.setText(getIntent().getExtras().getString("date"));
        int interval_ = Integer.parseInt(getIntent().getExtras().getString("interval"));
        // Getting values of days, hours, minutes
        getDaysHoursMin(interval_);
        interval.setText(Home.minutesToIntervalLabel(this, interval_));
        String s = getIntent().getExtras().getString("repeat"); // getting state of repeat Checkbox
        if(s.equals("Yes")){
            repeatCheck.setChecked(true);
        }
        else{
            repeatCheck.setChecked(false);
        }
        title.setText(getIntent().getExtras().getString("title"));
        alert1.setText(getIntent().getExtras().getString("alert1"));
        alert2.setText(getIntent().getExtras().getString("alert2"));
        snooze.setText(getIntent().getExtras().getString("snooze"));
        location.setText(getIntent().getExtras().getString("location"));
        url.setText(getIntent().getExtras().getString("url"));
        description.setText(getIntent().getExtras().getString("description"));

        // choosing Screen Title
        String screenTitle;
        if(title.getText().toString().equals("")){
            screenTitle = "No Title";
        }
        else{
            screenTitle = title.getText().toString();
        }
        // setting Screen Title
        getSupportActionBar().setTitle(screenTitle);
    }

    // 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);
        interval.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.update_alarm, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId()){
            case R.id.cancel:
                finish();
                break;
            case R.id.save:
                // Updating Alarm in Database
                String title_ = title.getText().toString();
                String time_ = time.getText().toString();
                String date_ = date.getText().toString();
                int interval_ = getIntervalMinutes();
                int repeat_ = (repeatCheck.isChecked()? 1 : 0);
                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()) {
                    // Updating alarm in database
                    AlarmsTable.updateAlarm(id, time_, date_, interval_, repeat_, title_, alert1_, alert2_,
                                            snooze_, location_, url_, description_, Home.getDop());
                    if(snoozeForAll){
                        AlarmsTable.setSnoozeTimeForAll(snooze_, Home.getDop());
                    }
                    // Turn on if alarm is off
                    if(AlarmsTable.getAlarmStatus(Integer.parseInt(id), Home.getDop()) == 0) {
                        AlarmsTable.updateAlarmStatus(Integer.parseInt(id), 1, Home.getDop());
                    }
                    // Updating alarm in System
                    Home.setNewAlarm(this, time_, date_, interval_, repeat_, Long.parseLong(id), alert1_, alert2_);
                    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 updated as alarm time is in the past", Toast.LENGTH_LONG).show();
                }
                // When date is not parsed
                else{
                    Toast.makeText(this, "Alarm not updated!", 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 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();
    }

    public void getDaysHoursMin(int minutes) {
        int days = 0, hours = 0;
        if (minutes >= 1440) {
            days = minutes / 1440;
            minutes = minutes % 1440;
            if (minutes >= 60) {
                hours = minutes / 60;
                minutes = minutes % 60;
            }
        } else if (minutes < 1440) {
            if (minutes >= 60) {
                hours = minutes / 60;
                minutes = minutes % 60;
            }
        }
        this.days = days;
        this.hours = hours;
        this.min = minutes;
    }
}

No comments:

Post a Comment