- Allow user to select ringtone
- Display readable alarm time in pre-alarm notification
This commit is contained in:
parent
fb886aabe9
commit
f9204e52f3
@ -12,6 +12,8 @@ import android.view.WindowManager;
|
|||||||
//import com.triggertrap.seekarc.SeekArc;
|
//import com.triggertrap.seekarc.SeekArc;
|
||||||
import net.frakbot.glowpadbackport.GlowPadView;
|
import net.frakbot.glowpadbackport.GlowPadView;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
public class AlarmAlertActivity extends Activity {
|
public class AlarmAlertActivity extends Activity {
|
||||||
private static Intent notifyIntent;
|
private static Intent notifyIntent;
|
||||||
public static Boolean alertFinished, userCancelled;
|
public static Boolean alertFinished, userCancelled;
|
||||||
@ -45,7 +47,6 @@ public class AlarmAlertActivity extends Activity {
|
|||||||
notifyIntent = new Intent(getApplicationContext(), AlarmNotify.class);
|
notifyIntent = new Intent(getApplicationContext(), AlarmNotify.class);
|
||||||
// Disable any current notifications (if we're snoozing)
|
// Disable any current notifications (if we're snoozing)
|
||||||
stopService(notifyIntent);
|
stopService(notifyIntent);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,12 +1,15 @@
|
|||||||
package za.org.treehouse.hypoalarm;
|
package za.org.treehouse.hypoalarm;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
import android.content.res.AssetFileDescriptor;
|
import android.content.res.AssetFileDescriptor;
|
||||||
import android.media.AudioManager;
|
import android.media.AudioManager;
|
||||||
import android.media.MediaPlayer;
|
import android.media.MediaPlayer;
|
||||||
|
import android.media.Ringtone;
|
||||||
import android.media.RingtoneManager;
|
import android.media.RingtoneManager;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Vibrator;
|
import android.os.Vibrator;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
import android.telephony.PhoneStateListener;
|
import android.telephony.PhoneStateListener;
|
||||||
import android.telephony.TelephonyManager;
|
import android.telephony.TelephonyManager;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@ -24,11 +27,7 @@ public class AlarmKlaxon {
|
|||||||
private static Vibrator vibrator;
|
private static Vibrator vibrator;
|
||||||
|
|
||||||
public static void start(final Context context) {
|
public static void start(final Context context) {
|
||||||
/**
|
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
*
|
|
||||||
* TODO allow user to select alarm tone
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
|
vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
|
||||||
vibrator.cancel();
|
vibrator.cancel();
|
||||||
@ -54,10 +53,6 @@ public class AlarmKlaxon {
|
|||||||
};
|
};
|
||||||
telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
|
telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
|
||||||
|
|
||||||
// TODO select alarm tone?
|
|
||||||
// Use the default alarm tone...
|
|
||||||
Uri alarmNoise = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
|
|
||||||
|
|
||||||
stopAudio(context);
|
stopAudio(context);
|
||||||
mediaPlayer = new MediaPlayer();
|
mediaPlayer = new MediaPlayer();
|
||||||
mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
|
mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
|
||||||
@ -69,11 +64,15 @@ public class AlarmKlaxon {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Get preferred ringtone, or fall back to the default alarm tone
|
||||||
|
String ringtoneStr = sharedPref.getString(context.getString(R.string.RingtonePref), RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM).toString());
|
||||||
|
Uri ringtoneUri = Uri.parse(ringtoneStr);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
mediaPlayer.setDataSource(context, alarmNoise);
|
mediaPlayer.setDataSource(context, ringtoneUri);
|
||||||
startAudio(context);
|
startAudio(context);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
// The alarmNoise may be on the sd card which could be busy right
|
// The ringtoneUri may be on the sd card which could be busy right
|
||||||
// now. Use the fallback ringtone.
|
// now. Use the fallback ringtone.
|
||||||
try {
|
try {
|
||||||
// Reset the media player to clear the error state.
|
// Reset the media player to clear the error state.
|
||||||
|
@ -18,10 +18,10 @@ import java.io.IOException;
|
|||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
|
|
||||||
public class AlarmReceiver extends BroadcastReceiver {
|
public class AlarmReceiver extends BroadcastReceiver {
|
||||||
private static final int SNOOZE_TIME = 1000*60; //1000*60*5; // Snooze for 5 minutes if need be
|
private static final int SNOOZE_TIME = 1000*60*5; // Snooze for 5 minutes if need be
|
||||||
private static final int ALERT_LIFE = 1000*10; //TODO 1000*60*2; // 2 minutes
|
private static final int ALERT_LIFE = 1000*60*2; // 2 minutes
|
||||||
private static SharedPreferences sharedPref;
|
private static SharedPreferences sharedPref;
|
||||||
private static AlarmManager alarmManager, graceManager;
|
private static AlarmManager alarmManager;
|
||||||
private static PendingIntent alarmPendingIntent, gracePendingIntent;
|
private static PendingIntent alarmPendingIntent, gracePendingIntent;
|
||||||
private static Intent alertActivityIntent, notifyIntent;
|
private static Intent alertActivityIntent, notifyIntent;
|
||||||
private static TelephonyManager telephonyManager;
|
private static TelephonyManager telephonyManager;
|
||||||
@ -36,6 +36,7 @@ public class AlarmReceiver extends BroadcastReceiver {
|
|||||||
@Override
|
@Override
|
||||||
public void onReceive(final Context context, final Intent intent) {
|
public void onReceive(final Context context, final Intent intent) {
|
||||||
sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
|
sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
|
alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
|
||||||
final Boolean alarmActive = sharedPref.getBoolean(context.getString(R.string.AlarmActivePref), true);
|
final Boolean alarmActive = sharedPref.getBoolean(context.getString(R.string.AlarmActivePref), true);
|
||||||
final int gracePeriod = sharedPref.getInt(context.getString(R.string.GracePeriodPref), 60);
|
final int gracePeriod = sharedPref.getInt(context.getString(R.string.GracePeriodPref), 60);
|
||||||
final String alarmTimeStr = sharedPref.getString(context.getString(R.string.AlarmTimePref), null);
|
final String alarmTimeStr = sharedPref.getString(context.getString(R.string.AlarmTimePref), null);
|
||||||
@ -55,14 +56,13 @@ public class AlarmReceiver extends BroadcastReceiver {
|
|||||||
Calendar graceCal = Calendar.getInstance();
|
Calendar graceCal = Calendar.getInstance();
|
||||||
graceCal.set(Calendar.SECOND, 0);
|
graceCal.set(Calendar.SECOND, 0);
|
||||||
graceCal.add(Calendar.MINUTE, gracePeriod);
|
graceCal.add(Calendar.MINUTE, gracePeriod);
|
||||||
graceManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
|
|
||||||
Intent graceIntent = new Intent(context, GraceReceiver.class);
|
Intent graceIntent = new Intent(context, GraceReceiver.class);
|
||||||
gracePendingIntent = PendingIntent.getBroadcast(context, MainActivity.GRACE_REQUEST, graceIntent, 0);
|
gracePendingIntent = PendingIntent.getBroadcast(context, MainActivity.GRACE_REQUEST, graceIntent, 0);
|
||||||
graceManager.cancel(gracePendingIntent);
|
alarmManager.cancel(gracePendingIntent);
|
||||||
if (Build.VERSION.SDK_INT >= 19) {
|
if (Build.VERSION.SDK_INT >= 19) {
|
||||||
graceManager.setExact(AlarmManager.RTC_WAKEUP, graceCal.getTimeInMillis(), gracePendingIntent);
|
alarmManager.setExact(AlarmManager.RTC_WAKEUP, graceCal.getTimeInMillis(), gracePendingIntent);
|
||||||
} else {
|
} else {
|
||||||
graceManager.set(AlarmManager.RTC_WAKEUP, graceCal.getTimeInMillis(), gracePendingIntent);
|
alarmManager.set(AlarmManager.RTC_WAKEUP, graceCal.getTimeInMillis(), gracePendingIntent);
|
||||||
}
|
}
|
||||||
Log.d("AlarmReceiver", "Setting grace alarm for " + MainActivity.debugDate(graceCal));
|
Log.d("AlarmReceiver", "Setting grace alarm for " + MainActivity.debugDate(graceCal));
|
||||||
|
|
||||||
@ -83,7 +83,6 @@ public class AlarmReceiver extends BroadcastReceiver {
|
|||||||
Calendar cal = MainActivity.TimeStringToCalendar(alarmTimeStr);
|
Calendar cal = MainActivity.TimeStringToCalendar(alarmTimeStr);
|
||||||
// Advance the calendar to tomorrow
|
// Advance the calendar to tomorrow
|
||||||
cal.add(Calendar.DAY_OF_MONTH, 1);
|
cal.add(Calendar.DAY_OF_MONTH, 1);
|
||||||
alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
|
|
||||||
alarmPendingIntent = PendingIntent.getBroadcast(context, MainActivity.ALARM_REQUEST, intent, 0);
|
alarmPendingIntent = PendingIntent.getBroadcast(context, MainActivity.ALARM_REQUEST, intent, 0);
|
||||||
alarmManager.cancel(alarmPendingIntent);
|
alarmManager.cancel(alarmPendingIntent);
|
||||||
if (Build.VERSION.SDK_INT >= 19) {
|
if (Build.VERSION.SDK_INT >= 19) {
|
||||||
@ -141,10 +140,9 @@ public class AlarmReceiver extends BroadcastReceiver {
|
|||||||
stopAlert(context);
|
stopAlert(context);
|
||||||
|
|
||||||
// Cancel the graceAlarm
|
// Cancel the graceAlarm
|
||||||
AlarmManager graceManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
|
|
||||||
Intent graceIntent = new Intent(context, GraceReceiver.class);
|
Intent graceIntent = new Intent(context, GraceReceiver.class);
|
||||||
PendingIntent gracePendingIntent = PendingIntent.getBroadcast(context, MainActivity.GRACE_REQUEST, graceIntent, 0);
|
PendingIntent gracePendingIntent = PendingIntent.getBroadcast(context, MainActivity.GRACE_REQUEST, graceIntent, 0);
|
||||||
graceManager.cancel(gracePendingIntent);
|
alarmManager.cancel(gracePendingIntent);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void snoozeAlarm(final Context context) {
|
public static void snoozeAlarm(final Context context) {
|
||||||
|
@ -42,6 +42,7 @@ public class GraceReceiver extends BroadcastReceiver {
|
|||||||
public void onConnected(Bundle bundle) {
|
public void onConnected(Bundle bundle) {
|
||||||
Location location = locationClient.getLastLocation();
|
Location location = locationClient.getLastLocation();
|
||||||
if (location != null) {
|
if (location != null) {
|
||||||
|
// uri must begin with a space
|
||||||
String uri = " http://maps.google.com?q=" + location.getLatitude() + "," + location.getLongitude();
|
String uri = " http://maps.google.com?q=" + location.getLatitude() + "," + location.getLongitude();
|
||||||
message += uri;
|
message += uri;
|
||||||
sendText(context);
|
sendText(context);
|
||||||
|
@ -12,6 +12,8 @@ import android.content.Intent;
|
|||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
|
import android.media.Ringtone;
|
||||||
|
import android.media.RingtoneManager;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@ -57,18 +59,20 @@ import java.util.regex.Pattern;
|
|||||||
// Alerts via Whatsapp and other protocols?
|
// Alerts via Whatsapp and other protocols?
|
||||||
|
|
||||||
public class MainActivity extends ActionBarActivity {
|
public class MainActivity extends ActionBarActivity {
|
||||||
public static int ALARM_REQUEST = 1;
|
public static int ALARM_REQUEST = 1;
|
||||||
public static int GRACE_REQUEST = 2;
|
public static int GRACE_REQUEST = 2;
|
||||||
public static int PRENOTIFY_REQUEST = 3;
|
public static int PRENOTIFY_REQUEST = 3;
|
||||||
public static int CANCEL_GRACE_REQUEST = 4;
|
public static int CANCEL_GRACE_REQUEST = 4;
|
||||||
public static int CANCEL_ALARM_REQUEST = 5;
|
public static int CANCEL_ALARM_REQUEST = 5;
|
||||||
|
public static int PHONE_NUMBER_REQUEST = 6;
|
||||||
|
public static int RINGTONE_REQUEST = 7;
|
||||||
private static Switch alarmActiveSwitch;
|
private static Switch alarmActiveSwitch;
|
||||||
private static Button alarmTimeButton;
|
private static Button alarmTimeButton;
|
||||||
private static Spinner gracePeriodSpinner;
|
private static Spinner gracePeriodSpinner;
|
||||||
private static EditText phoneNumberButton;
|
private static EditText phoneNumberButton;
|
||||||
private static EditText messageButton;
|
private static EditText messageButton;
|
||||||
|
|
||||||
public static Boolean HYPOALARM_DEBUG=true;
|
public static Boolean HYPOALARM_DEBUG = true;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
@ -90,7 +94,7 @@ public class MainActivity extends ActionBarActivity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
Bundle savedInstanceState) {
|
Bundle savedInstanceState) {
|
||||||
|
|
||||||
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
|
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
|
||||||
return rootView;
|
return rootView;
|
||||||
@ -108,8 +112,8 @@ public class MainActivity extends ActionBarActivity {
|
|||||||
alarmActiveSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
alarmActiveSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
|
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
|
||||||
AlarmManager alarmManager, graceManager;
|
AlarmManager alarmManager;
|
||||||
PendingIntent alarmPendingIntent, gracePendingIntent;
|
PendingIntent alarmPendingIntent, gracePendingIntent, preNotifyPendingIntent;
|
||||||
SharedPreferences.Editor editor = sharedPref.edit();
|
SharedPreferences.Editor editor = sharedPref.edit();
|
||||||
|
|
||||||
editor.putBoolean(getString(R.string.AlarmActivePref), b);
|
editor.putBoolean(getString(R.string.AlarmActivePref), b);
|
||||||
@ -121,13 +125,18 @@ public class MainActivity extends ActionBarActivity {
|
|||||||
Intent alarmIntent = new Intent(getActivity(), AlarmReceiver.class);
|
Intent alarmIntent = new Intent(getActivity(), AlarmReceiver.class);
|
||||||
alarmPendingIntent = PendingIntent.getBroadcast(getActivity(), ALARM_REQUEST, alarmIntent, 0);
|
alarmPendingIntent = PendingIntent.getBroadcast(getActivity(), ALARM_REQUEST, alarmIntent, 0);
|
||||||
alarmManager.cancel(alarmPendingIntent);
|
alarmManager.cancel(alarmPendingIntent);
|
||||||
|
// Cancel any pre-alarm notification
|
||||||
|
Intent preNotifyIntent = new Intent(getActivity(), AlarmReceiver.class);
|
||||||
|
preNotifyPendingIntent = PendingIntent.getBroadcast(getActivity(), PRENOTIFY_REQUEST, alarmIntent, 0);
|
||||||
|
alarmManager.cancel(preNotifyPendingIntent);
|
||||||
// Cancel any grace period
|
// Cancel any grace period
|
||||||
graceManager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
|
|
||||||
Intent graceIntent = new Intent(getActivity(), GraceReceiver.class);
|
Intent graceIntent = new Intent(getActivity(), GraceReceiver.class);
|
||||||
gracePendingIntent = PendingIntent.getBroadcast(getActivity(), GRACE_REQUEST, graceIntent, 0);
|
gracePendingIntent = PendingIntent.getBroadcast(getActivity(), GRACE_REQUEST, graceIntent, 0);
|
||||||
graceManager.cancel(gracePendingIntent);
|
alarmManager.cancel(gracePendingIntent);
|
||||||
// Stop any notifications
|
// Stop any notifications
|
||||||
getActivity().stopService(new Intent(getActivity(), AlarmNotify.class));
|
getActivity().stopService(new Intent(getActivity(), AlarmNotify.class));
|
||||||
|
getActivity().stopService(new Intent(getActivity(), PreAlarmNotify.class));
|
||||||
|
|
||||||
Log.d("MainActivity", "Alarms cancelled");
|
Log.d("MainActivity", "Alarms cancelled");
|
||||||
Toast.makeText(getActivity().getApplicationContext(), getString(R.string.alarmCancelled), Toast.LENGTH_SHORT).show();
|
Toast.makeText(getActivity().getApplicationContext(), getString(R.string.alarmCancelled), Toast.LENGTH_SHORT).show();
|
||||||
} else {
|
} else {
|
||||||
@ -194,6 +203,27 @@ public class MainActivity extends ActionBarActivity {
|
|||||||
int spinnerPosition = gracePeriodSpinnerAdapter.getPosition(MinutesToGracePeriodStr(gracePeriod));
|
int spinnerPosition = gracePeriodSpinnerAdapter.getPosition(MinutesToGracePeriodStr(gracePeriod));
|
||||||
gracePeriodSpinner.setSelection(spinnerPosition);
|
gracePeriodSpinner.setSelection(spinnerPosition);
|
||||||
|
|
||||||
|
// Allow user to select ringtone
|
||||||
|
final Button ringtoneButton = (Button) getActivity().findViewById(R.id.ringtone);
|
||||||
|
String ringtoneStr = sharedPref.getString(getString(R.string.RingtonePref), RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM).toString());
|
||||||
|
Uri ringtoneUri = Uri.parse(ringtoneStr);
|
||||||
|
Ringtone currentRingtone = RingtoneManager.getRingtone(getActivity().getApplicationContext(), ringtoneUri);
|
||||||
|
ringtoneButton.setText(currentRingtone.getTitle(getActivity().getApplicationContext()));
|
||||||
|
ringtoneButton.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View view) {
|
||||||
|
Intent ringtoneIntent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
|
||||||
|
ringtoneIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select ringtone:");
|
||||||
|
ringtoneIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
|
||||||
|
//ringtoneIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
|
||||||
|
ringtoneIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALARM);
|
||||||
|
//ringtoneIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, currentRingtone);
|
||||||
|
|
||||||
|
startActivityForResult(ringtoneIntent, RINGTONE_REQUEST);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
// Set phone number
|
// Set phone number
|
||||||
String phoneNumberStr = sharedPref.getString(getString(R.string.PhoneNumberPref), null);
|
String phoneNumberStr = sharedPref.getString(getString(R.string.PhoneNumberPref), null);
|
||||||
phoneNumberButton = (EditText) getActivity().findViewById(R.id.phone_number);
|
phoneNumberButton = (EditText) getActivity().findViewById(R.id.phone_number);
|
||||||
@ -261,6 +291,29 @@ public class MainActivity extends ActionBarActivity {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
|
Log.d("MainActivity", "Request code: " + requestCode);
|
||||||
|
|
||||||
|
// If we're answering a ringtone dialogue, update the correct button
|
||||||
|
if (requestCode == RINGTONE_REQUEST && resultCode == RESULT_OK) {
|
||||||
|
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext());
|
||||||
|
SharedPreferences.Editor editor = sharedPref.edit();
|
||||||
|
Button ringtoneButton = (Button) getActivity().findViewById(R.id.ringtone);
|
||||||
|
|
||||||
|
Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
|
||||||
|
if (uri == null) {
|
||||||
|
editor.putString(getString(R.string.RingtonePref), null);
|
||||||
|
} else {
|
||||||
|
editor.putString(getString(R.string.RingtonePref), uri.toString());
|
||||||
|
}
|
||||||
|
editor.commit();
|
||||||
|
Ringtone currentRingtone = RingtoneManager.getRingtone(getActivity().getApplicationContext(), uri);
|
||||||
|
ringtoneButton.setText(currentRingtone.getTitle(getActivity().getApplicationContext()));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Alarm time picker
|
// Alarm time picker
|
||||||
@ -348,7 +401,6 @@ public class MainActivity extends ActionBarActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static class PhonePickerFragment extends DialogFragment {
|
public static class PhonePickerFragment extends DialogFragment {
|
||||||
SharedPreferences sharedPref;
|
|
||||||
EditText phoneButton;
|
EditText phoneButton;
|
||||||
EditText phoneInput;
|
EditText phoneInput;
|
||||||
Button contactsButton;
|
Button contactsButton;
|
||||||
@ -389,7 +441,7 @@ public class MainActivity extends ActionBarActivity {
|
|||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
|
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
|
||||||
intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
|
intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
|
||||||
startActivityForResult(intent, 1);
|
startActivityForResult(intent, PHONE_NUMBER_REQUEST);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return alert.create();
|
return alert.create();
|
||||||
@ -397,15 +449,16 @@ public class MainActivity extends ActionBarActivity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
if (data != null) {
|
if (requestCode == PHONE_NUMBER_REQUEST && resultCode == RESULT_OK && data != null) {
|
||||||
Uri uri = data.getData();
|
Uri uri = data.getData();
|
||||||
if (uri != null) {
|
if (uri != null) {
|
||||||
Cursor c = null;
|
Cursor c = null;
|
||||||
try {
|
try {
|
||||||
c = getActivity().getContentResolver().query(uri, new String[]{
|
c = getActivity().getContentResolver().query(uri, new String[]{
|
||||||
ContactsContract.CommonDataKinds.Phone.NUMBER,
|
ContactsContract.CommonDataKinds.Phone.NUMBER,
|
||||||
ContactsContract.CommonDataKinds.Phone.TYPE },
|
ContactsContract.CommonDataKinds.Phone.TYPE},
|
||||||
null, null, null);
|
null, null, null
|
||||||
|
);
|
||||||
|
|
||||||
if (c != null && c.moveToFirst()) {
|
if (c != null && c.moveToFirst()) {
|
||||||
String number = c.getString(0);
|
String number = c.getString(0);
|
||||||
@ -419,12 +472,12 @@ public class MainActivity extends ActionBarActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String verifyTimeString(String timeStr) {
|
public static String verifyTimeString(String timeStr) {
|
||||||
return CalendarToTimeString(TimeStringToCalendar(timeStr));
|
return CalendarToTimeString(TimeStringToCalendar(timeStr));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String HourMinuteToTimeString(int hour, int minute) {
|
public static String HourMinuteToTimeString(int hour, int minute) {
|
||||||
return CalendarToTimeString(TimeStringToCalendar(hour + ":" + minute));
|
return CalendarToTimeString(TimeStringToCalendar(hour + ":" + minute));
|
||||||
}
|
}
|
||||||
@ -432,7 +485,7 @@ public class MainActivity extends ActionBarActivity {
|
|||||||
public static Calendar TimeStringToCalendar(String dateString) {
|
public static Calendar TimeStringToCalendar(String dateString) {
|
||||||
Date date;
|
Date date;
|
||||||
Calendar cal;
|
Calendar cal;
|
||||||
final String FORMAT="HH:mm"; // z = time zone
|
final String FORMAT = "HH:mm"; // z = time zone
|
||||||
SimpleDateFormat sdf = new SimpleDateFormat(FORMAT, Locale.getDefault());
|
SimpleDateFormat sdf = new SimpleDateFormat(FORMAT, Locale.getDefault());
|
||||||
sdf.format(new Date());
|
sdf.format(new Date());
|
||||||
try {
|
try {
|
||||||
@ -455,15 +508,28 @@ public class MainActivity extends ActionBarActivity {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String CalendarToTimeString(Calendar cal) {
|
public static String CalendarToTimeString(Calendar cal) {
|
||||||
final String FORMAT="HH:mm";
|
final String FORMAT = "HH:mm";
|
||||||
SimpleDateFormat sdf = new SimpleDateFormat(FORMAT, Locale.getDefault());
|
SimpleDateFormat sdf = new SimpleDateFormat(FORMAT, Locale.getDefault());
|
||||||
return sdf.format(cal.getTime());
|
return sdf.format(cal.getTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String formattedTime(Context context, Calendar cal) {
|
||||||
|
String pattern;
|
||||||
|
if (Build.VERSION.SDK_INT >= 18) {
|
||||||
|
String skeleton = DateFormat.is24HourFormat(context) ? "EHm" : "Ehma";
|
||||||
|
pattern = DateFormat.getBestDateTimePattern(Locale.getDefault(), skeleton);
|
||||||
|
} else {
|
||||||
|
pattern = "EHm";
|
||||||
|
}
|
||||||
|
return (String) DateFormat.format(pattern, cal);
|
||||||
|
}
|
||||||
public static String debugDate(Calendar cal) {
|
public static String debugDate(Calendar cal) {
|
||||||
SimpleDateFormat print = new SimpleDateFormat("dd-MM-yyyy HH:mm:ssZ");
|
SimpleDateFormat print = new SimpleDateFormat("dd-MM-yyyy HH:mm:ssZ");
|
||||||
return print.format(cal.getTime());
|
return print.format(cal.getTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int GracePeriodToMinutes(String gracePeriod) {
|
public static int GracePeriodToMinutes(String gracePeriod) {
|
||||||
Pattern p = Pattern.compile("(?:(\\d+)\\s+hours?)?\\s*(?:(\\d+)\\s+minutes?)?");
|
Pattern p = Pattern.compile("(?:(\\d+)\\s+hours?)?\\s*(?:(\\d+)\\s+minutes?)?");
|
||||||
|
|
||||||
@ -483,6 +549,7 @@ public class MainActivity extends ActionBarActivity {
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String MinutesToGracePeriodStr(int minutes) {
|
public static String MinutesToGracePeriodStr(int minutes) {
|
||||||
int hours = minutes / 60;
|
int hours = minutes / 60;
|
||||||
int remMinutes = minutes % 60;
|
int remMinutes = minutes % 60;
|
||||||
@ -505,4 +572,9 @@ public class MainActivity extends ActionBarActivity {
|
|||||||
}
|
}
|
||||||
return remMinutes + minStr;
|
return remMinutes + minStr;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
@Override
|
||||||
|
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
|
}
|
||||||
|
}
|
@ -12,8 +12,12 @@ import android.graphics.BitmapFactory;
|
|||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
|
import android.text.format.DateFormat;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import java.util.Calendar;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
public class PreAlarmNotify extends Service {
|
public class PreAlarmNotify extends Service {
|
||||||
public static final int preNotifyID = 2;
|
public static final int preNotifyID = 2;
|
||||||
|
|
||||||
@ -36,14 +40,17 @@ public class PreAlarmNotify extends Service {
|
|||||||
|
|
||||||
Log.d("PreAlarmNotify", "Pre-notification started.");
|
Log.d("PreAlarmNotify", "Pre-notification started.");
|
||||||
|
|
||||||
|
// Get alarm time, and convert it into something readable.
|
||||||
String alarmTimeStr = sharedPref.getString(getString(R.string.AlarmTimePref), null);
|
String alarmTimeStr = sharedPref.getString(getString(R.string.AlarmTimePref), null);
|
||||||
|
Calendar alarmCal = MainActivity.TimeStringToCalendar(alarmTimeStr);
|
||||||
|
alarmTimeStr = MainActivity.formattedTime(getApplicationContext(), alarmCal);
|
||||||
|
|
||||||
Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher_grey);
|
Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher_grey);
|
||||||
final NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
final NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
||||||
if (Build.VERSION.SDK_INT >= 11) {
|
if (Build.VERSION.SDK_INT >= 11) {
|
||||||
final Notification.Builder notification = new Notification.Builder(this)
|
final Notification.Builder notification = new Notification.Builder(this)
|
||||||
.setContentTitle(getString(R.string.app_name))
|
.setContentTitle(getString(R.string.preNotificationTitle))
|
||||||
.setContentText(getString(R.string.preNotificationText))
|
.setContentText(alarmTimeStr)
|
||||||
.setSmallIcon(R.drawable.alarm_notification)
|
.setSmallIcon(R.drawable.alarm_notification)
|
||||||
.setLargeIcon(bm)
|
.setLargeIcon(bm)
|
||||||
.setOnlyAlertOnce(true)
|
.setOnlyAlertOnce(true)
|
||||||
|
@ -108,6 +108,28 @@
|
|||||||
android:layout_column="1" />
|
android:layout_column="1" />
|
||||||
</TableRow>
|
</TableRow>
|
||||||
|
|
||||||
|
<TableRow
|
||||||
|
android:layout_marginTop="10dp"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="fill_parent">
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/ringtone_text"
|
||||||
|
android:id="@+id/ringtone_text"
|
||||||
|
android:layout_column="0" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/ringtone"
|
||||||
|
android:focusable="false"
|
||||||
|
android:focusableInTouchMode="false"
|
||||||
|
android:clickable="true"
|
||||||
|
android:gravity="left"
|
||||||
|
android:layout_column="1" />
|
||||||
|
</TableRow>
|
||||||
|
|
||||||
<TableRow
|
<TableRow
|
||||||
android:layout_marginTop="10dp"
|
android:layout_marginTop="10dp"
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
|
Binary file not shown.
9
HypoAlarm/src/main/res/values/arrays.xml
Normal file
9
HypoAlarm/src/main/res/values/arrays.xml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<array name="glowpad_target">
|
||||||
|
<item>@null</item>
|
||||||
|
<item>@null</item>
|
||||||
|
<item>@null</item>
|
||||||
|
<item>@drawable/ic_alarm</item>
|
||||||
|
</array>
|
||||||
|
</resources>
|
@ -31,6 +31,8 @@
|
|||||||
|
|
||||||
<string name="phone_number_text">Phone number</string>
|
<string name="phone_number_text">Phone number</string>
|
||||||
|
|
||||||
|
<string name="ringtone_text">Alarm Tone</string>
|
||||||
|
|
||||||
<string name="message_text">Message</string>
|
<string name="message_text">Message</string>
|
||||||
|
|
||||||
<string name="AlarmActivePref">AlarmActive</string>
|
<string name="AlarmActivePref">AlarmActive</string>
|
||||||
@ -39,6 +41,8 @@
|
|||||||
|
|
||||||
<string name="GracePeriodPref">GracePeriod</string>
|
<string name="GracePeriodPref">GracePeriod</string>
|
||||||
|
|
||||||
|
<string name="RingtonePref">Ringtone</string>
|
||||||
|
|
||||||
<string name="PhoneNumberPref">PhoneNumber</string>
|
<string name="PhoneNumberPref">PhoneNumber</string>
|
||||||
|
|
||||||
<string name="MessagePref">Message</string>
|
<string name="MessagePref">Message</string>
|
||||||
@ -53,24 +57,16 @@
|
|||||||
|
|
||||||
<string name="alarmCancelToast">HypoAlarm text message cancelled</string>
|
<string name="alarmCancelToast">HypoAlarm text message cancelled</string>
|
||||||
|
|
||||||
<!-- defaultMessage must end in a space, for potential location data -->
|
<string name="defaultMessage">Hi, I haven\'t responded to my alarm today. Please contact me to make sure I\'m awake.</string>
|
||||||
<string name="defaultMessage">Hi, I haven\'t responded to my alarm today. Please contact me to make sure I\'m awake. </string>
|
|
||||||
|
|
||||||
<string name="notificationText">A text message will be sent in %1$s</string>
|
<string name="notificationText">A text message will be sent in %1$s</string>
|
||||||
|
|
||||||
<string name="notificationCancellation">Cancel</string>
|
<string name="notificationCancellation">Cancel</string>
|
||||||
|
|
||||||
<string name="preNotificationText">Upcoming alarm</string>
|
<string name="preNotificationTitle">Upcoming HypoAlarm</string>
|
||||||
|
|
||||||
<string name="preNotificationCancellation">Dismiss Now</string>
|
<string name="preNotificationCancellation">Dismiss Now</string>
|
||||||
|
|
||||||
<string name="alarmCancelled">All HypoAlarms cancelled</string>
|
<string name="alarmCancelled">All HypoAlarms cancelled</string>
|
||||||
|
|
||||||
<array name="glowpad_target">
|
|
||||||
<item>@null</item>
|
|
||||||
<item>@null</item>
|
|
||||||
<item>@null</item>
|
|
||||||
<item>@drawable/ic_alarm</item>
|
|
||||||
</array>
|
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
Reference in New Issue
Block a user