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="close_menu">Close menu</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="menu_tracks">Tracks</string>
<string name="menu_bookmarks">Starred</string>

View file

@ -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);

View file

@ -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);
}
/**

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 String PREFERENCES_FILE = "tracks";
private static final String CURRENT_PAGE_KEY = "current_page";
private static final String CURRENT_PAGE_KEY = "tracks_current_page";
private DaysAdapter daysAdapter;
private ViewHolder holder;
@ -49,7 +48,7 @@ public class TracksFragment extends Fragment implements LoaderCallbacks<List<Day
if (savedInstanceState == null) {
// 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();
// Save the current page to preferences if it has changed
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) {
prefs.edit().putInt(CURRENT_PAGE_KEY, page).commit();
}