package in.snoozmark.android.ui; import android.app.AlarmManager; import android.app.Dialog; import android.app.PendingIntent; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.NumberPicker; import android.widget.TextView; import android.widget.Toast; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import in.snoozmark.android.AlarmReciever; import in.snoozmark.android.BaseActivity; import in.snoozmark.android.DateUtils; import in.snoozmark.android.MaterialSpinner; import in.snoozmark.android.R; import in.snoozmark.android.database.BookMark; import in.snoozmark.android.textclockbackport.TextClock; import io.realm.Realm; import com.wdullaer.materialdatetimepicker.date.DatePickerDialog; import com.wdullaer.materialdatetimepicker.time.RadialPickerLayout; import com.wdullaer.materialdatetimepicker.time.TimePickerDialog; import in.snoozmark.android.MaterialSpinner; public class SnoozeActivity extends BaseActivity implements TimePickerDialog.OnTimeSetListener, DatePickerDialog.OnDateSetListener { TextView webTitle; TextView webLink; NumberPicker minPicker; String sharedText, sharedTitle, localSharedText, localSharedTitle = ""; TextView datenum, dateam_pm, datetext; private static final String[] ITEMS = {"Morning 9:00AM", "Afternoon 1:00PM", "Evening 5:00PM", "Night 9:00PM", "After sometime..", "Pick a time.."}; private ArrayAdapter<String> adapter; MaterialSpinner spinner1; static Dialog d ; String months[] = {"JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_snooze); setTitle("SnoozMark"); webTitle = (TextView) findViewById(R.id.sharedLink); webLink = (TextView) findViewById(R.id.weblink); datenum = (TextView) findViewById(R.id.timenum); dateam_pm = (TextView) findViewById(R.id.AM_PM); datetext = (TextView) findViewById(R.id.date_text); adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, ITEMS); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner1 = (MaterialSpinner) findViewById(R.id.spinner1); spinner1.setAdapter(adapter); spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { if (position == 0) { setDisplayTime(9); } else if (position == 1) { setDisplayTime(13); } else if (position == 2) { setDisplayTime(17); } else if (position == 3) { setDisplayTime(21); Log.d("praveen panduru", "its in 9pm"); } else if (position == 4) { showNumPickerDialog(); } else if (position == 5) { datenum.performClick(); } } @Override public void onNothingSelected(AdapterView<?> parent) { } }); setTimeAndDate(0,0); datenum.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Calendar now = Calendar.getInstance(); TimePickerDialog tpd = TimePickerDialog.newInstance( SnoozeActivity.this, now.get(Calendar.HOUR_OF_DAY), now.get(Calendar.MINUTE), false ); tpd.setThemeDark(true); tpd.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialogInterface) { Log.d("TimePicker", "Dialog was cancelled"); } }); tpd.show(getFragmentManager(), "Timepickerdialog"); } }); datetext.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Calendar now = Calendar.getInstance(); DatePickerDialog dpd = DatePickerDialog.newInstance( SnoozeActivity.this, now.get(Calendar.YEAR), now.get(Calendar.MONTH), now.get(Calendar.DAY_OF_MONTH) ); dpd.setThemeDark(true); dpd.show(getFragmentManager(), "Datepickerdialog"); } }); Intent intent = getIntent(); String action = intent.getAction(); String type = intent.getType(); if (Intent.ACTION_SEND.equals(action) && type != null) { if ("text/plain".equals(type)) { handleSendText(intent); // Handle text being sent } } } void showNumPickerDialog(){ final Dialog d = new Dialog(SnoozeActivity.this); d.setTitle("Snooze for.."); d.setContentView(R.layout.numpickerdialog); TextView cancel = (TextView) d.findViewById(R.id.button2); TextView done = (TextView) d.findViewById(R.id.button1); final NumberPicker hourPicker = (NumberPicker) d.findViewById(R.id.numberPicker1); final NumberPicker minPicker = (NumberPicker) d.findViewById(R.id.numberPicker2); hourPicker.setMinValue(0); hourPicker.setMaxValue(12); hourPicker.setValue(0); minPicker.setMinValue(1); minPicker.setMaxValue(60); minPicker.setValue(30); cancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { d.dismiss(); } }); done.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { d.dismiss(); setTimeAndDate(hourPicker.getValue(), minPicker.getValue()); } }); d.show(); } void setDisplayTime(int hourint){ Calendar caltoday = Calendar.getInstance(); int hour = caltoday.get(Calendar.HOUR_OF_DAY); if(hour>=hourint){ datetext.setText("TOMORROW"); } else datetext.setText("TODAY"); String am_pm; int hourValue; if(hourint>=12) { am_pm = "PM"; if (hourint>12) hourValue = hourint - 12; else hourValue = hourint; } else { am_pm = "AM"; hourValue = hourint; } String curTime = String.format("%02d:%02d", hourValue, 00); datenum.setText(curTime); dateam_pm.setText(am_pm); } public void setTimeAndDate(int hours, int mins){ Long time = new GregorianCalendar().getTimeInMillis()+ hours*60*60*1000 + mins*60*1000; Calendar cal = Calendar.getInstance(); Calendar caltoday = Calendar.getInstance(); cal.setTimeInMillis(time); int hour = cal.get(Calendar.HOUR); int min = cal.get(Calendar.MINUTE); Log.d("praveen panduru", "time is " + hour + min); String AM_PM; if(cal.get(Calendar.HOUR_OF_DAY) < 12){ AM_PM = "AM"; } else{ AM_PM = "PM"; } String curTime = String.format("%02d:%02d", hour, min); datenum.setText(curTime); dateam_pm.setText(AM_PM); if(DateUtils.isSameDay(caltoday, cal)) datetext.setText("TODAY"); else datetext.setText("TOMORROW"); } void setTime(int hourOfDay, int min){ Calendar caltoday = Calendar.getInstance(); int hour = caltoday.get(Calendar.HOUR_OF_DAY); int minutes = caltoday.get(Calendar.MINUTE); String day, am_pm; int hourValue; if(hour < hourOfDay) day = "TODAY"; else if (hour == hourOfDay){ if (minutes < min) day = "TODAY"; else day = "TOMORROW"; } else day = "TOMORROW"; if(hourOfDay>=12) { am_pm = "PM"; if (hourOfDay>12) hourValue = hourOfDay - 12; else hourValue = hourOfDay; } else { am_pm = "AM"; hourValue = hourOfDay; } if(datetext.getText() == "TODAY" || datetext.getText() == "TOMORROW") datetext.setText(day); dateam_pm.setText(am_pm); String curTime = String.format("%02d:%02d", hourValue, min); datenum.setText(curTime); } void setDate(int year, int month, int day){ Calendar caltoday = Calendar.getInstance(); Calendar caldate = Calendar.getInstance(); int hours = Integer.parseInt(datenum.getText().toString().split(":")[0]); int minutes = Integer.parseInt(datenum.getText().toString().split(":")[1]); if (dateam_pm.getText() == "PM"){ if (hours != 12) hours = hours +12; } String dayString; caldate.set(year, month, day, hours, minutes); if (DateUtils.isSameDay(caldate, caltoday)) dayString = "TODAY"; else if (DateUtils.isWithinDaysFuture(caldate,1)) dayString = "TOMORROW"; else dayString = day + " " +months[month-1] + " " + year; datetext.setText(dayString); } void handleSendText(Intent intent) { sharedText = intent.getStringExtra(Intent.EXTRA_TEXT); sharedTitle = intent.getStringExtra(Intent.EXTRA_SUBJECT); if (sharedText != null) { // Update UI to reflect text being shared webTitle.setText(sharedTitle); webLink.setText(sharedText); localSharedText = sharedText; localSharedTitle = sharedTitle; } } public void setSnooze(View view){ // time at which alarm will be scheduled here alarm is scheduled at 1 day from current time, // we fetch the current time in milliseconds and added 1 day time // i.e. 24*60*60*1000= 86,400,000 milliseconds in a day Calendar cal = Calendar.getInstance(); Calendar caltoday = Calendar.getInstance(); String dateString = datetext.getText().toString(); String timeString = datenum.getText().toString(); String ampmString = dateam_pm.getText().toString(); int year, month, day, hour, min; if(dateString.equalsIgnoreCase("TODAY")){ year = cal.get(Calendar.YEAR); month = cal.get(Calendar.MONTH); day = cal.get(Calendar.DAY_OF_MONTH); } else if (dateString.equalsIgnoreCase("TOMORROW")){ cal.add(Calendar.DATE,1); year = cal.get(Calendar.YEAR); month = cal.get(Calendar.MONTH); day = cal.get(Calendar.DAY_OF_MONTH); } else { year = Integer.parseInt(dateString.split(" ")[2]); month = Arrays.asList(months).indexOf(dateString.split(" ")[1]) + 1; day = Integer.parseInt(dateString.split(" ")[0]); } if(ampmString == "AM"){ if(Integer.parseInt(timeString.split(":")[0]) == 12) hour = 0; else hour = Integer.parseInt(timeString.split(":")[0]); } else{ if(Integer.parseInt(timeString.split(":")[0]) == 12) hour = Integer.parseInt(timeString.split(":")[0]); else hour = Integer.parseInt(timeString.split(":")[0]) + 12; } min = Integer.parseInt(timeString.split(":")[1]); cal.set(year,month,day,hour,min); Long time = cal.getTimeInMillis(); // create an Intent and set the class which will execute when Alarm triggers, here we have // given AlarmReciever in the Intent, the onRecieve() method of this class will execute when // alarm triggers and //we will write the code to send SMS inside onRecieve() method pf Alarmreciever class Intent intentAlarm = new Intent(this, AlarmReciever.class); intentAlarm.putExtra("Link",sharedText); intentAlarm.putExtra("LinkTitle", sharedTitle); // create the object AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); int requestID = (int) System.currentTimeMillis(); //set the alarm for particular time alarmManager.set(AlarmManager.RTC_WAKEUP, time, PendingIntent.getBroadcast(this, requestID, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT)); Toast.makeText(this, "Snooze set for " + DateUtils.getDateDiff(caltoday.getTime(), cal.getTime()) + "from now", Toast.LENGTH_LONG).show(); Realm realm = Realm.getInstance(getBaseContext()); realm.beginTransaction(); BookMark newLink = realm.createObject(BookMark.class); newLink.setLinkId((int)realm.where(BookMark.class).maximumInt("linkId") + 1); newLink.setLinkUrl(localSharedText); newLink.setLinkTitle(localSharedTitle); Date d = new Date(time); SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); newLink.setLinkAlarmTime(format.format(d)); realm.commitTransaction(); Intent mainIntent = new Intent(this, MainActivity.class); mainIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(mainIntent); finish(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_snooze, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } @Override public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) { setDate(year, monthOfYear, dayOfMonth); } @Override public void onTimeSet(RadialPickerLayout view, int hourOfDay, int minute) { setTime(hourOfDay, minute); } }