diff --git a/res/values/strings.xml b/res/values/strings.xml
index d9ac090..8445690 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -4,6 +4,8 @@
Main menu
Close menu
DB last updated: %1$s
+ Update
+ This will update the schedule database to the latest version. Make sure you are connected to the internet.
Never
Tracks
Starred
diff --git a/src/be/digitalia/fosdem/activities/MainActivity.java b/src/be/digitalia/fosdem/activities/MainActivity.java
index ff157d0..e7a70d0 100644
--- a/src/be/digitalia/fosdem/activities/MainActivity.java
+++ b/src/be/digitalia/fosdem/activities/MainActivity.java
@@ -4,15 +4,20 @@ import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
+import android.app.AlertDialog;
+import android.app.Dialog;
import android.content.BroadcastReceiver;
import android.content.Context;
+import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
+import android.content.SharedPreferences;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.ActionBarDrawerToggle;
+import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
@@ -80,6 +85,10 @@ public class MainActivity extends ActionBarActivity implements ListView.OnItemCl
private static final int DOWNLOAD_SCHEDULE_LOADER_ID = 1;
private static final int DOWNLOAD_SCHEDULE_RESULT_WHAT = 1;
+
+ private static final long DATABASE_VALIDITY_DURATION = 24L * 60L * 60L * 1000L; // 24h
+ private static final long DOWNLOAD_REMINDER_SNOOZE_DURATION = 24L * 60L * 60L * 1000L; // 24h
+ private static final String PREF_LAST_DOWNLOAD_REMINDER_TIME = "last_download_reminder_time";
private static final String STATE_CURRENT_SECTION = "current_section";
private static final DateFormat LAST_UPDATE_DATE_FORMAT = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM, Locale.getDefault());
@@ -111,6 +120,22 @@ public class MainActivity extends ActionBarActivity implements ListView.OnItemCl
}
};
+ public static class DownloadScheduleReminderDialogFragment extends DialogFragment {
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ return new AlertDialog.Builder(getActivity()).setTitle(R.string.download_reminder_title).setMessage(R.string.download_reminder_message)
+ .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ ((MainActivity) getActivity()).startDownloadSchedule();
+ }
+
+ }).setNegativeButton(android.R.string.cancel, null).create();
+ }
+ }
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -127,6 +152,7 @@ public class MainActivity extends ActionBarActivity implements ListView.OnItemCl
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
drawerLayout.setDrawerShadow(getResources().getDrawable(R.drawable.drawer_shadow), Gravity.LEFT);
drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.drawable.ic_drawer, R.string.main_menu, R.string.close_menu) {
+
@Override
public void onDrawerOpened(View drawerView) {
updateActionBar();
@@ -172,7 +198,7 @@ public class MainActivity extends ActionBarActivity implements ListView.OnItemCl
menuListView.setSelection(currentSection.ordinal());
updateActionBar();
- // Loaders
+ // Loader
if (getSupportLoaderManager().getLoader(DOWNLOAD_SCHEDULE_LOADER_ID) != null) {
// Reconnect to running loader
startDownloadSchedule();
@@ -184,9 +210,9 @@ public class MainActivity extends ActionBarActivity implements ListView.OnItemCl
}
private void updateLastUpdateTime() {
- Date lastUpdateTime = DatabaseManager.getInstance().getLastUpdateTime();
+ long lastUpdateTime = DatabaseManager.getInstance().getLastUpdateTime();
lastUpdateTextView.setText(getString(R.string.last_update,
- (lastUpdateTime == null) ? getString(R.string.never) : LAST_UPDATE_DATE_FORMAT.format(lastUpdateTime)));
+ (lastUpdateTime == -1L) ? getString(R.string.never) : LAST_UPDATE_DATE_FORMAT.format(new Date(lastUpdateTime))));
}
@Override
@@ -214,6 +240,27 @@ public class MainActivity extends ActionBarActivity implements ListView.OnItemCl
outState.putInt(STATE_CURRENT_SECTION, currentSection.ordinal());
}
+ @Override
+ protected void onStart() {
+ super.onStart();
+
+ // Download reminder
+ long now = System.currentTimeMillis();
+ long time = DatabaseManager.getInstance().getLastUpdateTime();
+ if ((time == -1L) || (time < (now - DATABASE_VALIDITY_DURATION))) {
+ SharedPreferences prefs = getPreferences(Context.MODE_PRIVATE);
+ time = prefs.getLong(PREF_LAST_DOWNLOAD_REMINDER_TIME, -1L);
+ if ((time == -1L) || (time < (now - DOWNLOAD_REMINDER_SNOOZE_DURATION))) {
+ prefs.edit().putLong(PREF_LAST_DOWNLOAD_REMINDER_TIME, now).commit();
+
+ FragmentManager fm = getSupportFragmentManager();
+ if (fm.findFragmentByTag("download_reminder") == null) {
+ new DownloadScheduleReminderDialogFragment().show(fm, "download_reminder");
+ }
+ }
+ }
+ }
+
@Override
protected void onDestroy() {
super.onDestroy();
@@ -261,7 +308,7 @@ public class MainActivity extends ActionBarActivity implements ListView.OnItemCl
return false;
}
- private void startDownloadSchedule() {
+ public void startDownloadSchedule() {
// Start by displaying indeterminate progress, determinate will come later
setSupportProgressBarIndeterminate(true);
setSupportProgressBarVisibility(true);
diff --git a/src/be/digitalia/fosdem/db/DatabaseManager.java b/src/be/digitalia/fosdem/db/DatabaseManager.java
index dfd1418..b5830c2 100644
--- a/src/be/digitalia/fosdem/db/DatabaseManager.java
+++ b/src/be/digitalia/fosdem/db/DatabaseManager.java
@@ -97,9 +97,12 @@ public class DatabaseManager {
return context.getSharedPreferences(DB_PREFS_FILE, Context.MODE_PRIVATE);
}
- public Date getLastUpdateTime() {
- long time = getSharedPreferences().getLong(LAST_UPDATE_TIME_PREF, -1L);
- return (time == -1L) ? null : new Date(time);
+ /**
+ *
+ * @return The last update time in milliseconds since EPOCH, or -1 if not available.
+ */
+ public long getLastUpdateTime() {
+ return getSharedPreferences().getLong(LAST_UPDATE_TIME_PREF, -1L);
}
/**
diff --git a/src/be/digitalia/fosdem/fragments/TracksFragment.java b/src/be/digitalia/fosdem/fragments/TracksFragment.java
index 5314f6e..c79e1b3 100644
--- a/src/be/digitalia/fosdem/fragments/TracksFragment.java
+++ b/src/be/digitalia/fosdem/fragments/TracksFragment.java
@@ -35,8 +35,7 @@ public class TracksFragment extends Fragment implements LoaderCallbacks