2017-03-18 23:05:20 +01:00
package com.example.yink.amadeus ;
2017-03-19 14:00:15 +01:00
import android.annotation.TargetApi ;
2017-03-18 23:05:20 +01:00
import android.app.AlarmManager ;
import android.app.PendingIntent ;
import android.content.Intent ;
import android.content.SharedPreferences ;
import android.os.Build ;
import android.os.Bundle ;
import android.preference.PreferenceManager ;
2017-03-23 00:18:45 +01:00
import android.support.v7.app.AppCompatActivity ;
2017-03-18 23:05:20 +01:00
import android.util.Log ;
import android.view.View ;
import android.widget.TimePicker ;
2017-03-19 01:16:41 +01:00
import android.widget.Toast ;
2017-03-18 23:05:20 +01:00
import android.widget.ToggleButton ;
import java.util.Calendar ;
2017-03-23 00:18:45 +01:00
public class AlarmActivity extends AppCompatActivity {
2017-03-18 23:05:20 +01:00
2017-03-23 09:46:46 +01:00
private final String TAG = " Amadeus.AlarmActivity " ;
2017-03-18 23:05:20 +01:00
2017-03-20 21:06:55 +01:00
private AlarmManager alarmManager ;
private PendingIntent pendingIntent ;
private TimePicker alarmTimePicker ;
private ToggleButton alarmToggle ;
private SharedPreferences settings ;
2017-03-18 23:05:20 +01:00
@Override
protected void onCreate ( Bundle savedInstanceState ) {
super . onCreate ( savedInstanceState ) ;
setContentView ( R . layout . activity_alarm ) ;
settings = PreferenceManager . getDefaultSharedPreferences ( getApplicationContext ( ) ) ;
alarmTimePicker = ( TimePicker ) findViewById ( R . id . alarmTimePicker ) ;
alarmToggle = ( ToggleButton ) findViewById ( R . id . alarmToggle ) ;
alarmManager = ( AlarmManager ) getSystemService ( ALARM_SERVICE ) ;
2017-03-23 09:46:46 +01:00
pendingIntent = PendingIntent . getBroadcast ( this , Alarm . ALARM_ID , new Intent ( this , AlarmReceiver . class ) , 0 ) ;
2017-03-18 23:05:20 +01:00
2017-03-22 10:05:14 +01:00
alarmTimePicker . setIs24HourView ( settings . getBoolean ( " 24-hour_format " , true ) ) ;
2017-03-22 09:36:05 +01:00
2017-03-18 23:05:20 +01:00
if ( settings . getBoolean ( " alarm_toggle " , false ) ) {
alarmToggle . setChecked ( true ) ;
} else {
alarmToggle . setChecked ( false ) ;
}
}
public void onToggleClicked ( View view ) {
2017-03-20 21:06:55 +01:00
SharedPreferences . Editor editor = settings . edit ( ) ;
2017-03-22 10:05:14 +01:00
2017-03-18 23:05:20 +01:00
if ( alarmToggle . isChecked ( ) ) {
editor . putBoolean ( " alarm_toggle " , true ) ;
Calendar calendar = Calendar . getInstance ( ) ;
2017-03-22 10:05:14 +01:00
2017-03-19 14:00:15 +01:00
if ( Build . VERSION . SDK_INT > = Build . VERSION_CODES . M ) {
Log . d ( TAG , " Current API functions have been executed " ) ;
2017-03-23 21:12:59 +01:00
setTime ( calendar , editor ) ;
2017-03-19 14:00:15 +01:00
} else {
Log . d ( TAG , " Legacy API functions have been executed " ) ;
2017-03-23 21:12:59 +01:00
setTimeLegacy ( calendar , editor ) ;
2017-03-19 14:00:15 +01:00
}
2017-03-22 10:05:14 +01:00
2017-03-19 01:16:41 +01:00
Log . d ( TAG , " Alarm On " ) ;
2017-03-18 23:05:20 +01:00
} else {
2017-03-23 00:18:45 +01:00
Alarm . cancel ( this ) ;
2017-03-22 10:05:14 +01:00
2017-03-19 01:16:41 +01:00
editor . putBoolean ( " alarm_toggle " , false ) ;
Log . d ( TAG , " Alarm Off " ) ;
2017-03-18 23:05:20 +01:00
}
editor . apply ( ) ;
}
2017-03-19 14:00:15 +01:00
@SuppressWarnings ( " deprecation " )
2017-03-23 21:12:59 +01:00
private void setTimeLegacy ( Calendar calendar , SharedPreferences . Editor editor ) {
2017-03-20 01:18:57 +01:00
calendar . set ( Calendar . HOUR_OF_DAY , alarmTimePicker . getCurrentHour ( ) ) ;
2017-03-22 09:36:05 +01:00
calendar . set ( Calendar . MINUTE , alarmTimePicker . getCurrentMinute ( ) ) ;
2017-03-22 10:05:14 +01:00
2017-03-23 00:18:45 +01:00
if ( calendar . before ( Calendar . getInstance ( ) ) ) {
2017-03-22 09:36:05 +01:00
calendar . add ( Calendar . DATE , 1 ) ;
}
2017-03-22 10:05:14 +01:00
2017-03-20 12:40:23 +01:00
alarmManager . set ( AlarmManager . RTC_WAKEUP , calendar . getTimeInMillis ( ) , pendingIntent ) ;
2017-03-23 21:12:59 +01:00
editor . putLong ( " alarm_time " , calendar . getTimeInMillis ( ) ) ;
2017-03-22 09:36:05 +01:00
Toast . makeText ( this , " Alarm has been set for " + alarmTimePicker . getCurrentHour ( ) + " hour(s) " + alarmTimePicker . getCurrentMinute ( ) + " minute(s) " , Toast . LENGTH_SHORT ) . show ( ) ;
2017-03-19 14:00:15 +01:00
}
@TargetApi ( Build . VERSION_CODES . M )
2017-03-23 21:12:59 +01:00
private void setTime ( Calendar calendar , SharedPreferences . Editor editor ) {
2017-03-20 01:18:57 +01:00
calendar . set ( Calendar . HOUR_OF_DAY , alarmTimePicker . getHour ( ) ) ;
calendar . set ( Calendar . MINUTE , alarmTimePicker . getMinute ( ) ) ;
2017-03-22 10:05:14 +01:00
2017-03-23 00:18:45 +01:00
if ( calendar . before ( Calendar . getInstance ( ) ) ) {
2017-03-22 09:36:05 +01:00
calendar . add ( Calendar . DATE , 1 ) ;
}
2017-03-22 10:05:14 +01:00
2017-03-20 12:40:23 +01:00
alarmManager . setAndAllowWhileIdle ( AlarmManager . RTC_WAKEUP , calendar . getTimeInMillis ( ) , pendingIntent ) ;
2017-03-23 21:12:59 +01:00
editor . putLong ( " alarm_time " , calendar . getTimeInMillis ( ) ) ;
2017-03-20 01:18:57 +01:00
Toast . makeText ( this , " Alarm has been set for " + alarmTimePicker . getHour ( ) + " hour(s) " + alarmTimePicker . getMinute ( ) + " minute(s) " , Toast . LENGTH_SHORT ) . show ( ) ;
2017-03-19 14:00:15 +01:00
}
2017-03-18 23:05:20 +01:00
}