1
0
Fork 0
mirror of https://github.com/MatomoCamp/matomocamp-companion-android.git synced 2024-09-19 16:13:46 +02:00

Added database update reminder dialog.

This commit is contained in:
Christophe Beyls 2013-12-27 18:47:34 +01:00
parent 795bee380e
commit f2e24e526f
4 changed files with 62 additions and 11 deletions

View file

@ -4,6 +4,8 @@
<string name="main_menu">Main menu</string> <string name="main_menu">Main menu</string>
<string name="close_menu">Close menu</string> <string name="close_menu">Close menu</string>
<string name="last_update">DB last updated: %1$s</string> <string name="last_update">DB last updated: %1$s</string>
<string name="download_reminder_title">Update</string>
<string name="download_reminder_message">This will update the schedule database to the latest version. Make sure you are connected to the internet.</string>
<string name="never">Never</string> <string name="never">Never</string>
<string name="menu_tracks">Tracks</string> <string name="menu_tracks">Tracks</string>
<string name="menu_bookmarks">Starred</string> <string name="menu_bookmarks">Starred</string>

View file

@ -4,15 +4,20 @@ import java.text.DateFormat;
import java.util.Date; import java.util.Date;
import java.util.Locale; import java.util.Locale;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.graphics.Color; import android.graphics.Color;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.Message; import android.os.Message;
import android.support.v4.app.ActionBarDrawerToggle; import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction; 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_LOADER_ID = 1;
private static final int DOWNLOAD_SCHEDULE_RESULT_WHAT = 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 String STATE_CURRENT_SECTION = "current_section";
private static final DateFormat LAST_UPDATE_DATE_FORMAT = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM, Locale.getDefault()); 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 @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -127,6 +152,7 @@ public class MainActivity extends ActionBarActivity implements ListView.OnItemCl
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
drawerLayout.setDrawerShadow(getResources().getDrawable(R.drawable.drawer_shadow), Gravity.LEFT); 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) { drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.drawable.ic_drawer, R.string.main_menu, R.string.close_menu) {
@Override @Override
public void onDrawerOpened(View drawerView) { public void onDrawerOpened(View drawerView) {
updateActionBar(); updateActionBar();
@ -172,7 +198,7 @@ public class MainActivity extends ActionBarActivity implements ListView.OnItemCl
menuListView.setSelection(currentSection.ordinal()); menuListView.setSelection(currentSection.ordinal());
updateActionBar(); updateActionBar();
// Loaders // Loader
if (getSupportLoaderManager().getLoader(DOWNLOAD_SCHEDULE_LOADER_ID) != null) { if (getSupportLoaderManager().getLoader(DOWNLOAD_SCHEDULE_LOADER_ID) != null) {
// Reconnect to running loader // Reconnect to running loader
startDownloadSchedule(); startDownloadSchedule();
@ -184,9 +210,9 @@ public class MainActivity extends ActionBarActivity implements ListView.OnItemCl
} }
private void updateLastUpdateTime() { private void updateLastUpdateTime() {
Date lastUpdateTime = DatabaseManager.getInstance().getLastUpdateTime(); long lastUpdateTime = DatabaseManager.getInstance().getLastUpdateTime();
lastUpdateTextView.setText(getString(R.string.last_update, 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 @Override
@ -214,6 +240,27 @@ public class MainActivity extends ActionBarActivity implements ListView.OnItemCl
outState.putInt(STATE_CURRENT_SECTION, currentSection.ordinal()); 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 @Override
protected void onDestroy() { protected void onDestroy() {
super.onDestroy(); super.onDestroy();
@ -261,7 +308,7 @@ public class MainActivity extends ActionBarActivity implements ListView.OnItemCl
return false; return false;
} }
private void startDownloadSchedule() { public void startDownloadSchedule() {
// Start by displaying indeterminate progress, determinate will come later // Start by displaying indeterminate progress, determinate will come later
setSupportProgressBarIndeterminate(true); setSupportProgressBarIndeterminate(true);
setSupportProgressBarVisibility(true); setSupportProgressBarVisibility(true);

View file

@ -97,9 +97,12 @@ public class DatabaseManager {
return context.getSharedPreferences(DB_PREFS_FILE, Context.MODE_PRIVATE); 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);
} }
/** /**

View file

@ -35,8 +35,7 @@ public class TracksFragment extends Fragment implements LoaderCallbacks<List<Day
} }
private static final int DAYS_LOADER_ID = 1; private static final int DAYS_LOADER_ID = 1;
private static final String PREFERENCES_FILE = "tracks"; private static final String CURRENT_PAGE_KEY = "tracks_current_page";
private static final String CURRENT_PAGE_KEY = "current_page";
private DaysAdapter daysAdapter; private DaysAdapter daysAdapter;
private ViewHolder holder; private ViewHolder holder;
@ -49,7 +48,7 @@ public class TracksFragment extends Fragment implements LoaderCallbacks<List<Day
if (savedInstanceState == null) { if (savedInstanceState == null) {
// Restore the current page from preferences // Restore the current page from preferences
savedCurrentPage = getActivity().getSharedPreferences(PREFERENCES_FILE, Context.MODE_PRIVATE).getInt(CURRENT_PAGE_KEY, -1); savedCurrentPage = getActivity().getPreferences(Context.MODE_PRIVATE).getInt(CURRENT_PAGE_KEY, -1);
} }
} }
@ -84,7 +83,7 @@ public class TracksFragment extends Fragment implements LoaderCallbacks<List<Day
super.onStop(); super.onStop();
// Save the current page to preferences if it has changed // Save the current page to preferences if it has changed
final int page = holder.pager.getCurrentItem(); final int page = holder.pager.getCurrentItem();
SharedPreferences prefs = getActivity().getSharedPreferences(PREFERENCES_FILE, Context.MODE_PRIVATE); SharedPreferences prefs = getActivity().getPreferences(Context.MODE_PRIVATE);
if (prefs.getInt(CURRENT_PAGE_KEY, -1) != page) { if (prefs.getInt(CURRENT_PAGE_KEY, -1) != page) {
prefs.edit().putInt(CURRENT_PAGE_KEY, page).commit(); prefs.edit().putInt(CURRENT_PAGE_KEY, page).commit();
} }