diff --git a/app/src/main/java/ru/vfilippov/electronreminder/MainActivity.java b/app/src/main/java/ru/vfilippov/electronreminder/MainActivity.java index ae83ff6..8c45dfd 100644 --- a/app/src/main/java/ru/vfilippov/electronreminder/MainActivity.java +++ b/app/src/main/java/ru/vfilippov/electronreminder/MainActivity.java @@ -24,6 +24,7 @@ import android.widget.ArrayAdapter; import android.widget.AutoCompleteTextView; import android.widget.ListAdapter; import android.widget.ListView; +import android.widget.TextView; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlSerializer; @@ -165,6 +166,7 @@ public class MainActivity extends AppCompatActivity { if (curFrom == null || curTo == null) return; + saveCurPrefs(); if (!loadTripsFile()) { Intent intent = new Intent(this, ElectronReminderService.class); @@ -204,10 +206,18 @@ public class MainActivity extends AppCompatActivity e.printStackTrace(); } } - if (reminders.size() > 0) - alarmer.setAlarm(this); - else - alarmer.cancelAlarm(this); + RecheckAlarmReceiver.setAlarm(this, reminders.size() > 0); + } + + private void saveCurPrefs() + { + SharedPreferences sp = getSharedPreferences("prefs", MODE_PRIVATE); + SharedPreferences.Editor e = sp.edit(); + e.putString("curTo", curTo); + e.putString("curFrom", curFrom); + e.putString("curToName", curToName); + e.putString("curFromName", curFromName); + e.commit(); } protected void onResume() @@ -233,6 +243,13 @@ public class MainActivity extends AppCompatActivity SharedPreferences sp = getSharedPreferences("prefs", MODE_PRIVATE); curCity = sp.getString("cityId", "24461"); // Default is Moscow + curTo = sp.getString("curTo", null); + curFrom = sp.getString("curFrom", null); + curToName = sp.getString("curToName", null); + curFromName = sp.getString("curFromName", null); + ((TextView)findViewById(R.id.fromView)).setText(curFromName == null ? "" : curFromName); + ((TextView)findViewById(R.id.toView)).setText(curToName == null ? "" : curToName); + reminders = new HashMap(); trips = new ArrayList(); @@ -324,6 +341,7 @@ public class MainActivity extends AppCompatActivity loadRemindersFile(); loadStations(); + loadTrips(); } @Override diff --git a/app/src/main/java/ru/vfilippov/electronreminder/RecheckAlarmReceiver.java b/app/src/main/java/ru/vfilippov/electronreminder/RecheckAlarmReceiver.java index 8d9bc77..9abd332 100644 --- a/app/src/main/java/ru/vfilippov/electronreminder/RecheckAlarmReceiver.java +++ b/app/src/main/java/ru/vfilippov/electronreminder/RecheckAlarmReceiver.java @@ -16,9 +16,6 @@ import java.util.Calendar; */ public class RecheckAlarmReceiver extends WakefulBroadcastReceiver { - private AlarmManager alarmMgr; - private PendingIntent alarmIntent; - @Override public void onReceive(Context context, Intent intent) { @@ -33,51 +30,38 @@ public class RecheckAlarmReceiver extends WakefulBroadcastReceiver } /** - * Sets a repeating alarm that runs once a day at approximately 8:30 a.m. When the + * Sets (or cancels) a repeating alarm that runs once a day at approximately 8:30 a.m. When the * alarm fires, the app broadcasts an Intent to this WakefulBroadcastReceiver. + * * @param context */ - public void setAlarm(Context context) + public static void setAlarm(Context context, boolean active) { - alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); + AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(context, RecheckAlarmReceiver.class); intent.setAction("refresh_all"); - alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0); + PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0); - Calendar calendar = Calendar.getInstance(); - calendar.setTimeInMillis(System.currentTimeMillis()); - // FIXME Remove hardcoded time - calendar.set(Calendar.HOUR_OF_DAY, 8); - calendar.set(Calendar.MINUTE, 30); + if (active) + { + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(System.currentTimeMillis()); + // FIXME Remove hardcoded time + calendar.set(Calendar.HOUR_OF_DAY, 8); + calendar.set(Calendar.MINUTE, 30); - // Set the alarm to fire at approximately 8:30 a.m., according to the device's - // clock, and to repeat once a day. - alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, alarmIntent); + // Set the alarm to fire at approximately 8:30 a.m., according to the device's + // clock, and to repeat once a day. + alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, alarmIntent); + } + else + alarmMgr.cancel(alarmIntent); // Enable {@code RecheckBootReceiver} to automatically restart the alarm when the device is rebooted. ComponentName receiver = new ComponentName(context, RecheckBootReceiver.class); PackageManager pm = context.getPackageManager(); pm.setComponentEnabledSetting(receiver, - PackageManager.COMPONENT_ENABLED_STATE_ENABLED, - PackageManager.DONT_KILL_APP); - } - - /** - * Cancels the alarm. - * @param context - */ - public void cancelAlarm(Context context) - { - // If the alarm has been set, cancel it. - if (alarmMgr != null) - alarmMgr.cancel(alarmIntent); - - // Disable {@code RecheckBootReceiver} so that it doesn't automatically restart the - // alarm when the device is rebooted. - ComponentName receiver = new ComponentName(context, RecheckBootReceiver.class); - PackageManager pm = context.getPackageManager(); - pm.setComponentEnabledSetting(receiver, - PackageManager.COMPONENT_ENABLED_STATE_DISABLED, + active ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); } } diff --git a/app/src/main/java/ru/vfilippov/electronreminder/RecheckBootReceiver.java b/app/src/main/java/ru/vfilippov/electronreminder/RecheckBootReceiver.java index 4d53fca..31226b5 100644 --- a/app/src/main/java/ru/vfilippov/electronreminder/RecheckBootReceiver.java +++ b/app/src/main/java/ru/vfilippov/electronreminder/RecheckBootReceiver.java @@ -4,6 +4,9 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import simple.SimpleXml; +import simple.SimpleXmlNode; + /** * This BroadcastReceiver automatically (re)starts the alarm when the device is * rebooted. This receiver is set to be disabled (android:enabled="false") in the @@ -13,12 +16,14 @@ import android.content.Intent; */ public class RecheckBootReceiver extends BroadcastReceiver { - RecheckAlarmReceiver alarm = new RecheckAlarmReceiver(); - @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) - alarm.setAlarm(context); + { + SimpleXmlNode n = SimpleXml.readXmlFile(context.getFilesDir(), "reminders.xml"); + if (n != null && n.childrenByName.get("reminder") != null) + RecheckAlarmReceiver.setAlarm(context, true); + } } } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index fa6a914..269ef69 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -16,9 +16,10 @@ + android:layout_alignParentLeft="true" + android:layout_alignParentStart="true">