package com.alimuzaffar.sunalarm.util; import java.util.Calendar; import java.util.TimeZone; import android.app.Activity; import android.app.AlarmManager; import android.app.AlertDialog; import android.app.PendingIntent; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.location.Location; import android.location.LocationManager; import android.media.AudioManager; import android.media.RingtoneManager; import android.net.ConnectivityManager; import android.net.Uri; import android.preference.PreferenceManager; import android.provider.Settings; import android.util.Log; import android.widget.Toast; import com.alimuzaffar.sunalarm.activity.ShowStatusActivity; import com.alimuzaffar.sunalarm.receiver.AlarmReceiver; import com.alimuzaffar.sunalarm.util.AppSettings.Key; import com.luckycatlabs.sunrisesunset.SunriseSunsetCalculator; public class Utils { public static final int REQUEST_DAWN = 2012081801; public static final int REQUEST_DUSK = 2012081802; public static void buildAlertMessageNoGps(final Activity context, DialogInterface.OnClickListener cancel) { final AlertDialog.Builder builder = new AlertDialog.Builder(context); String message = "Your GPS seems to be disabled, do you want to enable it?"; AppSettings settings = AppSettings.getInstance(context.getApplicationContext()); if(settings.getDouble(Key.LAST_LATITUDE) != 0 && settings.getDouble(Key.LAST_LONGITUDE) != 0) { message += "\nYou appear to have a saved location.\nSelecting 'No' will use the saved location."; } else { message += "\nYou do not appear to have a saved location.\nIf you select 'No' the application will not work."; } builder.setMessage(message).setCancelable(false).setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(final DialogInterface dialog, final int id) { context.startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)); } }).setNegativeButton("No", (cancel != null)? cancel : new DialogInterface.OnClickListener() { public void onClick(final DialogInterface dialog, final int id) { dialog.cancel(); } }); final AlertDialog alert = builder.create(); alert.show(); } public static void setAlarm(Context context, Calendar calendar, String type) { Log.d("Utils", "Alarm Type "+type); Intent intent = new Intent(context, AlarmReceiver.class); intent.putExtra("alarm_type", type); PendingIntent sender = null; if(type.equalsIgnoreCase(Key.DAWN_ALARM.toString())) { Log.d("Utils", "DAWN INTENT"); sender = PendingIntent.getBroadcast(context, REQUEST_DAWN, intent, 0); } else if(type.equalsIgnoreCase(Key.DUSK_ALARM.toString())) { Log.d("Utils", "DUSK INTENT"); sender = PendingIntent.getBroadcast(context, REQUEST_DUSK, intent, 0); } Calendar alarmCal = Calendar.getInstance(calendar.getTimeZone()); alarmCal.setTimeInMillis(calendar.getTimeInMillis()); AppSettings appSettings = AppSettings.getInstance(context); if(type.equals(Key.DAWN_ALARM.toString())) { alarmCal.add(Calendar.MINUTE, appSettings.getInt(Key.DAWN_DELAY)); } else if (type.equals(Key.DUSK_ALARM.toString())){ alarmCal.add(Calendar.MINUTE, appSettings.getInt(Key.DUSK_DELAY)); } AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); if(AppSettings.DEBUG) { alarmCal.setTimeInMillis(System.currentTimeMillis()); if(type.equalsIgnoreCase(Key.DAWN_ALARM.toString())) alarmCal.add(Calendar.SECOND, 11); else if(type.equalsIgnoreCase(Key.DUSK_ALARM.toString())) alarmCal.add(Calendar.SECOND, 17); } if(sender != null) { Log.d("Utils", "SETTING ALARM "); alarmManager.set(AlarmManager.RTC_WAKEUP, alarmCal.getTimeInMillis(), sender); } Toast.makeText(context, type+" set for "+ShowStatusActivity.TIME_12HRS.format(alarmCal.getTime()), Toast.LENGTH_SHORT).show(); } public static void stopAlarm(Context context, String type) { Intent intent = new Intent(context, AlarmReceiver.class); intent.putExtra("alarm_type", type); PendingIntent sender = null;; if(type.equalsIgnoreCase(Key.DAWN_ALARM.toString())) sender = PendingIntent.getBroadcast(context, REQUEST_DAWN, intent, 0); else if(type.equalsIgnoreCase(Key.DUSK_ALARM.toString())) sender = PendingIntent.getBroadcast(context, REQUEST_DUSK, intent, 0); AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); if(sender != null) alarmManager.cancel(sender); } public static void setAlarm(Context context, String alarmType) { LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); // <2> Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); // <5> SunriseSunsetCalculator calculator = null; AppSettings appSettings = AppSettings.getInstance(context); if (!locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { calculator = new SunriseSunsetCalculator(new com.luckycatlabs.sunrisesunset.dto.Location(appSettings.getDouble(Key.LAST_LATITUDE), appSettings.getDouble(Key.LAST_LONGITUDE)), TimeZone.getDefault().getID()); } else if (location != null) { calculator = new SunriseSunsetCalculator(new com.luckycatlabs.sunrisesunset.dto.Location(location.getLatitude(), location.getLongitude()), TimeZone.getDefault().getID()); } if(calculator == null) { calculator = new SunriseSunsetCalculator(new com.luckycatlabs.sunrisesunset.dto.Location(appSettings.getDouble(Key.LAST_LATITUDE), appSettings.getDouble(Key.LAST_LONGITUDE)), TimeZone.getDefault().getID()); } Calendar cal = Calendar.getInstance(TimeZone.getDefault()); cal.add(Calendar.DATE, 1); Calendar nextAlarmCal; if(alarmType.equals(Key.DAWN_ALARM.toString())) { nextAlarmCal = Utils.getSunrise(context, calculator, cal); } else { nextAlarmCal = Utils.getSunset(context, calculator, cal); } Log.d("Utils", "Next Alarm "+nextAlarmCal.getTime().toString()); Utils.setAlarm(context, nextAlarmCal, alarmType); } public static boolean checkInternet(Context context) { ConnectivityManager connec = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); android.net.NetworkInfo wifi = connec.getNetworkInfo(ConnectivityManager.TYPE_WIFI); android.net.NetworkInfo mobile = connec.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); // Here if condition check for wifi and mobile network is available or not. // If anyone of them is available or connected then it will return true, otherwise false; if (wifi.isConnected()) { return true; } else if (mobile.isConnected()) { return true; } return false; } public static Calendar getSunrise(Context context, SunriseSunsetCalculator calculator, Calendar cal) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); switch(Integer.valueOf(prefs.getString("pref_dawnZenith", "108"))) { case 108: return calculator.getAstronomicalSunriseCalendarForDate(cal); case 102: return calculator.getNauticalSunriseCalendarForDate(cal); case 96: return calculator.getCivilSunriseCalendarForDate(cal); case -1: final AppSettings settings = AppSettings.getInstance(context.getApplicationContext()); int deg = prefs.getInt("pref_dawnZenith_other", 90); return SunriseSunsetCalculator.getSunrise(settings.getDouble(Key.LAST_LATITUDE), settings.getDouble(Key.LAST_LONGITUDE), cal.getTimeZone(), cal, deg); default: return calculator.getOfficialSunriseCalendarForDate(cal); } } public static Calendar getSunset(Context context, SunriseSunsetCalculator calculator, Calendar cal) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); switch(Integer.valueOf(prefs.getString("pref_duskZenith", "91"))) { case 108: return calculator.getAstronomicalSunsetCalendarForDate(cal); case 102: return calculator.getNauticalSunsetCalendarForDate(cal); case 96: return calculator.getCivilSunsetCalendarForDate(cal); case -1: final AppSettings settings = AppSettings.getInstance(context.getApplicationContext()); int deg = prefs.getInt("pref_duskZenith_other", 90); return SunriseSunsetCalculator.getSunset(settings.getDouble(Key.LAST_LATITUDE), settings.getDouble(Key.LAST_LONGITUDE), cal.getTimeZone(), cal, deg); default: return calculator.getOfficialSunsetCalendarForDate(cal); } } public static Uri getRingtone(Context context) { SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); if (settings.getBoolean("pref_random", false)) { Uri alert = null; RingtoneManager ringtoneManager = new RingtoneManager(context); ringtoneManager.setType(RingtoneManager.TYPE_ALARM); int count = ringtoneManager.getCursor().getCount(); do { int random = 0 + (int)(Math.random() * ((count - 0) + 1)); alert = ringtoneManager.getRingtoneUri(random); } while (alert == null); return alert; } else { String selectedRingtoneUri = settings.getString("pref_ringtone", null); Uri alert = null; if (selectedRingtoneUri != null) { alert = Uri.parse(selectedRingtoneUri); } else { alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); } if (alert == null) { // alert is null, using backup alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); if (alert == null) { // I can't see this ever being null (as always // have a default notification) but just // incase // alert backup is null, using 2nd backup alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE); } } return alert; } } public static int getAlarmVolumeFromPercentage(AudioManager audioManager, float percentage) { int volume = (int) Math.ceil((double) audioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM) * (percentage / 100.0d)); return volume; } }