Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
98bff0870a
3 changed files with 101 additions and 61 deletions
|
@ -1,6 +1,8 @@
|
|||
package net.osmand.plus;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.AlarmManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.app.ProgressDialog;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
|
@ -18,10 +20,14 @@ import net.osmand.map.WorldRegion;
|
|||
import net.osmand.osm.AbstractPoiType;
|
||||
import net.osmand.osm.MapPoiTypes;
|
||||
import net.osmand.plus.activities.DayNightHelper;
|
||||
import net.osmand.plus.activities.LocalIndexHelper;
|
||||
import net.osmand.plus.activities.LocalIndexInfo;
|
||||
import net.osmand.plus.activities.SavingTrackHelper;
|
||||
import net.osmand.plus.download.DownloadActivity;
|
||||
import net.osmand.plus.download.ui.AbstractLoadLocalIndexTask;
|
||||
import net.osmand.plus.helpers.AvoidSpecificRoads;
|
||||
import net.osmand.plus.helpers.WaypointHelper;
|
||||
import net.osmand.plus.liveupdates.LiveUpdatesHelper;
|
||||
import net.osmand.plus.monitoring.LiveMonitoringHelper;
|
||||
import net.osmand.plus.poi.PoiFiltersHelper;
|
||||
import net.osmand.plus.render.MapRenderRepositories;
|
||||
|
@ -51,6 +57,14 @@ import java.util.Random;
|
|||
|
||||
import btools.routingapp.BRouterServiceConnection;
|
||||
|
||||
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.getPendingIntent;
|
||||
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.preferenceLastCheck;
|
||||
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.preferenceLiveUpdatesOn;
|
||||
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.preferenceTimeOfDayToUpdate;
|
||||
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.preferenceUpdateFrequency;
|
||||
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.runLiveUpdate;
|
||||
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.setAlarmForPendingIntent;
|
||||
|
||||
/**
|
||||
*/
|
||||
public class AppInitializer implements IProgress {
|
||||
|
@ -58,7 +72,7 @@ public class AppInitializer implements IProgress {
|
|||
private static final int VERSION_2_2 = 22;
|
||||
private static final int CURRENT_VERSION_FOR_UGPRADE = VERSION_2_2;
|
||||
|
||||
|
||||
|
||||
public static final boolean TIPS_AND_TRICKS = false;
|
||||
private static final String FIRST_TIME_APP_RUN = "FIRST_TIME_APP_RUN"; //$NON-NLS-1$
|
||||
private static final String VERSION_INSTALLED_NUMBER = "VERSION_INSTALLED_NUMBER"; //$NON-NLS-1$
|
||||
|
@ -74,7 +88,7 @@ public class AppInitializer implements IProgress {
|
|||
public static final String APP_EXIT_KEY = "APP_EXIT_KEY";
|
||||
private OsmandApplication app;
|
||||
private static final org.apache.commons.logging.Log LOG = PlatformUtil.getLog(AppInitializer.class);
|
||||
|
||||
|
||||
private boolean initSettings = false;
|
||||
private boolean firstTime;
|
||||
private boolean activityChangesShowed = false;
|
||||
|
@ -86,36 +100,36 @@ public class AppInitializer implements IProgress {
|
|||
private String taskName;
|
||||
private List<AppInitializeListener> listeners = new ArrayList<>();
|
||||
private SharedPreferences startPrefs;
|
||||
|
||||
|
||||
public enum InitEvents {
|
||||
FAVORITES_INITIALIZED, NATIVE_INITIALIZED,
|
||||
NATIVE_OPEN_GLINITIALIZED,
|
||||
TASK_CHANGED, MAPS_INITIALIZED, POI_TYPES_INITIALIZED, ASSETS_COPIED, INIT_RENDERERS,
|
||||
RESTORE_BACKUPS, INDEX_REGION_BOUNDARIES, SAVE_GPX_TRACKS, LOAD_GPX_TRACKS
|
||||
}
|
||||
|
||||
|
||||
public interface AppInitializeListener {
|
||||
|
||||
|
||||
void onProgress(AppInitializer init, InitEvents event);
|
||||
|
||||
|
||||
void onFinish(AppInitializer init);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public AppInitializer(OsmandApplication app) {
|
||||
this.app = app;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public List<String> getWarnings() {
|
||||
return warnings;
|
||||
}
|
||||
|
||||
|
||||
public boolean isAppInitializing() {
|
||||
return appInitializing;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private void initUiVars(Activity activity) {
|
||||
if(initSettings) {
|
||||
return;
|
||||
|
@ -146,27 +160,27 @@ public class AppInitializer implements IProgress {
|
|||
}
|
||||
initSettings = true;
|
||||
}
|
||||
|
||||
|
||||
public int getNumberOfStarts() {
|
||||
if(startPrefs == null) {
|
||||
return 0;
|
||||
}
|
||||
return startPrefs.getInt(NUMBER_OF_STARTS, 1);
|
||||
}
|
||||
|
||||
|
||||
public long getFirstInstalled() {
|
||||
if(startPrefs == null) {
|
||||
return 0;
|
||||
}
|
||||
return startPrefs.getLong(FIRST_INSTALLED, 0);
|
||||
}
|
||||
|
||||
|
||||
public void resetFirstTimeRun() {
|
||||
if(startPrefs != null) {
|
||||
startPrefs.edit().remove(FIRST_TIME_APP_RUN).commit();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public boolean isFirstTime(Activity activity) {
|
||||
initUiVars(activity);
|
||||
return firstTime;
|
||||
|
@ -184,10 +198,10 @@ public class AppInitializer implements IProgress {
|
|||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
private void checkMapUpdates() {
|
||||
long diff = System.currentTimeMillis() - app.getSettings().LAST_CHECKED_UPDATES.get();
|
||||
if(diff >= 2 * 24 * 60 * 60l && new Random().nextInt(5) == 0 &&
|
||||
if(diff >= 2 * 24 * 60 * 60l && new Random().nextInt(5) == 0 &&
|
||||
app.getSettings().isInternetConnectionAvailable()) {
|
||||
app.getDownloadThread().runReloadIndexFiles();
|
||||
} else if(Version.isDeveloperVersion(app)) {
|
||||
|
@ -259,7 +273,7 @@ public class AppInitializer implements IProgress {
|
|||
new FileOutputStream(file));
|
||||
}
|
||||
app.regions.prepareFile(file.getAbsolutePath());
|
||||
|
||||
|
||||
}
|
||||
} catch (Exception e) {
|
||||
warnings.add(e.getMessage());
|
||||
|
@ -267,7 +281,7 @@ public class AppInitializer implements IProgress {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void initPoiTypes() {
|
||||
if(app.getAppPath("poi_types.xml").exists()) {
|
||||
app.poiTypes.init(app.getAppPath("poi_types.xml").getAbsolutePath());
|
||||
|
@ -275,8 +289,8 @@ public class AppInitializer implements IProgress {
|
|||
app.poiTypes.init();
|
||||
}
|
||||
app.poiTypes.setPoiTranslator(new MapPoiTypes.PoiTranslator() {
|
||||
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public String getTranslation(AbstractPoiType type) {
|
||||
if(type.getBaseLangType() != null) {
|
||||
|
@ -297,7 +311,6 @@ public class AppInitializer implements IProgress {
|
|||
}
|
||||
|
||||
|
||||
|
||||
public void onCreateApplication() {
|
||||
// always update application mode to default
|
||||
OsmandSettings osmandSettings = app.getSettings();
|
||||
|
@ -311,7 +324,7 @@ public class AppInitializer implements IProgress {
|
|||
e.printStackTrace();
|
||||
}
|
||||
app.applyTheme(app);
|
||||
app.poiTypes = startupInit(MapPoiTypes.getDefaultNoInit(), MapPoiTypes.class);
|
||||
app.poiTypes = startupInit(MapPoiTypes.getDefaultNoInit(), MapPoiTypes.class);
|
||||
app.routingHelper = startupInit(new RoutingHelper(app), RoutingHelper.class);
|
||||
app.resourceManager = startupInit(new ResourceManager(app), ResourceManager.class);
|
||||
app.daynightHelper = startupInit(new DayNightHelper(app), DayNightHelper.class);
|
||||
|
@ -333,7 +346,7 @@ public class AppInitializer implements IProgress {
|
|||
|
||||
private void updateRegionVars() {
|
||||
app.regions.setTranslator(new RegionTranslation() {
|
||||
|
||||
|
||||
@Override
|
||||
public String getTranslation(String id) {
|
||||
if(WorldRegion.AFRICA_REGION_ID.equals(id)){
|
||||
|
@ -360,7 +373,6 @@ public class AppInitializer implements IProgress {
|
|||
}
|
||||
|
||||
|
||||
|
||||
private <T> T startupInit(T object, Class<T> class1) {
|
||||
long t = System.currentTimeMillis();
|
||||
if(t - startTime > 7) {
|
||||
|
@ -371,7 +383,6 @@ public class AppInitializer implements IProgress {
|
|||
}
|
||||
|
||||
|
||||
|
||||
public net.osmand.router.RoutingConfiguration.Builder getLazyDefaultRoutingConfig() {
|
||||
long tm = System.currentTimeMillis();
|
||||
try {
|
||||
|
@ -392,7 +403,7 @@ public class AppInitializer implements IProgress {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -400,7 +411,7 @@ public class AppInitializer implements IProgress {
|
|||
final ProgressDialog dlg = showDialog ? ProgressDialog.show(uiContext, app.getString(R.string.loading_data),
|
||||
app.getString(R.string.voice_data_initializing)) : null;
|
||||
new Thread(new Runnable() {
|
||||
|
||||
|
||||
public CommandPlayer createCommandPlayer(String voiceProvider, OsmandApplication osmandApplication, Activity ctx)
|
||||
throws CommandPlayerException {
|
||||
if (voiceProvider != null) {
|
||||
|
@ -442,7 +453,7 @@ public class AppInitializer implements IProgress {
|
|||
}
|
||||
}).start();
|
||||
}
|
||||
|
||||
|
||||
private void startApplicationBackground() {
|
||||
try {
|
||||
startBgTime = System.currentTimeMillis();
|
||||
|
@ -452,7 +463,7 @@ public class AppInitializer implements IProgress {
|
|||
initPoiTypes();
|
||||
notifyEvent(InitEvents.POI_TYPES_INITIALIZED);
|
||||
app.resourceManager.reloadIndexesOnStart(this, warnings);
|
||||
|
||||
|
||||
app.getRendererRegistry().initRenderers(this);
|
||||
notifyEvent(InitEvents.INIT_RENDERERS);
|
||||
// native depends on renderers
|
||||
|
@ -460,7 +471,7 @@ public class AppInitializer implements IProgress {
|
|||
notifyEvent(InitEvents.NATIVE_INITIALIZED);
|
||||
|
||||
app.poiFilters.reloadAllPoiFilters();
|
||||
notifyEvent(InitEvents.POI_TYPES_INITIALIZED);
|
||||
notifyEvent(InitEvents.POI_TYPES_INITIALIZED);
|
||||
indexRegionsBoundaries(warnings);
|
||||
notifyEvent(InitEvents.INDEX_REGION_BOUNDARIES);
|
||||
app.selectedGpxHelper.loadGPXTracks(this);
|
||||
|
@ -470,6 +481,8 @@ public class AppInitializer implements IProgress {
|
|||
// restore backuped favorites to normal file
|
||||
restoreBackupForFavoritesFiles();
|
||||
notifyEvent(InitEvents.RESTORE_BACKUPS);
|
||||
checkLiveUpdatesAlerts();
|
||||
LocalIndexHelper helper = new LocalIndexHelper(app);
|
||||
} catch (RuntimeException e) {
|
||||
e.printStackTrace();
|
||||
warnings.add(e.getMessage());
|
||||
|
@ -482,9 +495,37 @@ public class AppInitializer implements IProgress {
|
|||
}
|
||||
}
|
||||
|
||||
private void checkLiveUpdatesAlerts() {
|
||||
OsmandSettings settings = app.getSettings();
|
||||
if (!settings.IS_LIVE_UPDATES_ON.get()) {
|
||||
return;
|
||||
}
|
||||
LocalIndexHelper helper = new LocalIndexHelper(app);
|
||||
List<LocalIndexInfo> fullMaps = helper.getLocalFullMaps(new AbstractLoadLocalIndexTask() {
|
||||
@Override
|
||||
public void loadFile(LocalIndexInfo... loaded) {
|
||||
}
|
||||
});
|
||||
AlarmManager alarmMgr = (AlarmManager) app.getSystemService(Context.ALARM_SERVICE);
|
||||
for (LocalIndexInfo fullMap : fullMaps) {
|
||||
if (!preferenceLiveUpdatesOn(fullMap, settings).get()) {
|
||||
continue;
|
||||
}
|
||||
int updateFrequencyOrd = preferenceUpdateFrequency(fullMap, settings).get();
|
||||
LiveUpdatesHelper.UpdateFrequency updateFrequency =
|
||||
LiveUpdatesHelper.UpdateFrequency.values()[updateFrequencyOrd];
|
||||
long lastCheck = preferenceLastCheck(fullMap, settings).get();
|
||||
|
||||
|
||||
|
||||
if (System.currentTimeMillis() - lastCheck > updateFrequency.getTime() * 2) {
|
||||
runLiveUpdate(app, fullMap, false);
|
||||
PendingIntent alarmIntent = getPendingIntent(app, fullMap);
|
||||
int timeOfDayOrd = preferenceTimeOfDayToUpdate(fullMap, settings).get();
|
||||
LiveUpdatesHelper.TimeOfDay timeOfDayToUpdate =
|
||||
LiveUpdatesHelper.TimeOfDay.values()[timeOfDayOrd];
|
||||
setAlarmForPendingIntent(alarmIntent, alarmMgr, updateFrequency, timeOfDayToUpdate);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void restoreBackupForFavoritesFiles() {
|
||||
final File appDir = app.getAppPath(null);
|
||||
|
@ -555,12 +596,12 @@ public class AppInitializer implements IProgress {
|
|||
File ls = app.getAppPath("fonts");
|
||||
lib.loadFontData(ls);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
app.getResourceManager().initMapBoundariesCacheNative();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private StringBuilder formatWarnings(List<String> warnings) {
|
||||
final StringBuilder b = new StringBuilder();
|
||||
|
@ -579,7 +620,7 @@ public class AppInitializer implements IProgress {
|
|||
|
||||
public void notifyFinish() {
|
||||
app.uiHandler.post(new Runnable() {
|
||||
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
for(AppInitializeListener l : listeners) {
|
||||
|
@ -595,11 +636,11 @@ public class AppInitializer implements IProgress {
|
|||
startBgTime = time;
|
||||
}
|
||||
app.uiHandler.post(new Runnable() {
|
||||
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
for(AppInitializeListener l : listeners) {
|
||||
l.onProgress(AppInitializer.this, event);
|
||||
l.onProgress(AppInitializer.this, event);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -634,7 +675,7 @@ public class AppInitializer implements IProgress {
|
|||
taskName = null;
|
||||
notifyEvent(InitEvents.TASK_CHANGED);
|
||||
}
|
||||
|
||||
|
||||
public String getCurrentInitTaskName() {
|
||||
return taskName;
|
||||
}
|
||||
|
@ -653,7 +694,7 @@ public class AppInitializer implements IProgress {
|
|||
|
||||
|
||||
private boolean applicationBgInitializing = false;
|
||||
|
||||
|
||||
|
||||
public synchronized void startApplication() {
|
||||
if (applicationBgInitializing) {
|
||||
|
@ -686,5 +727,4 @@ public class AppInitializer implements IProgress {
|
|||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -90,26 +90,20 @@ public class LiveUpdatesHelper {
|
|||
|
||||
public static void setAlarmForPendingIntent(PendingIntent alarmIntent, AlarmManager alarmMgr, UpdateFrequency updateFrequency, TimeOfDay timeOfDayToUpdate) {
|
||||
long timeOfFirstUpdate;
|
||||
long updateInterval;
|
||||
switch (updateFrequency) {
|
||||
case HOURLY:
|
||||
timeOfFirstUpdate = System.currentTimeMillis() + SHIFT;
|
||||
updateInterval = AlarmManager.INTERVAL_HOUR;
|
||||
break;
|
||||
case DAILY:
|
||||
timeOfFirstUpdate = getNextUpdateTime(timeOfDayToUpdate);
|
||||
updateInterval = AlarmManager.INTERVAL_DAY;
|
||||
break;
|
||||
case WEEKLY:
|
||||
timeOfFirstUpdate = getNextUpdateTime(timeOfDayToUpdate);
|
||||
updateInterval = AlarmManager.INTERVAL_DAY * 7;
|
||||
break;
|
||||
default:
|
||||
throw new IllegalStateException("Unexpected update frequency:"
|
||||
+ updateFrequency);
|
||||
}
|
||||
alarmMgr.setInexactRepeating(AlarmManager.RTC,
|
||||
timeOfFirstUpdate, updateInterval, alarmIntent);
|
||||
timeOfFirstUpdate, updateFrequency.getTime(), alarmIntent);
|
||||
}
|
||||
|
||||
private static long getNextUpdateTime(TimeOfDay timeOfDayToUpdate) {
|
||||
|
@ -145,17 +139,27 @@ public class LiveUpdatesHelper {
|
|||
}
|
||||
|
||||
public static enum UpdateFrequency {
|
||||
HOURLY(R.string.hourly),
|
||||
DAILY(R.string.daily),
|
||||
WEEKLY(R.string.weekly);
|
||||
HOURLY(R.string.hourly, AlarmManager.INTERVAL_HOUR),
|
||||
DAILY(R.string.daily, AlarmManager.INTERVAL_DAY),
|
||||
WEEKLY(R.string.weekly, AlarmManager.INTERVAL_DAY * 7);
|
||||
private final int localizedId;
|
||||
private final long time;
|
||||
|
||||
UpdateFrequency(int localizedId) {
|
||||
UpdateFrequency(int localizedId, long time) {
|
||||
this.localizedId = localizedId;
|
||||
this.time = time;
|
||||
}
|
||||
|
||||
public int getLocalizedId() {
|
||||
return localizedId;
|
||||
}
|
||||
public long getTime() {
|
||||
return time;
|
||||
}
|
||||
}
|
||||
|
||||
public static void runLiveUpdate(Context context, final LocalIndexInfo info, boolean forceUpdate) {
|
||||
final String fnExt = Algorithms.getFileNameWithoutExtension(new File(info.getFileName()));
|
||||
new PerformLiveUpdateAsyncTask(context, info, forceUpdate).execute(new String[]{fnExt});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -43,6 +43,7 @@ import static net.osmand.plus.liveupdates.LiveUpdatesHelper.preferenceForLocalIn
|
|||
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.preferenceLastCheck;
|
||||
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.preferenceTimeOfDayToUpdate;
|
||||
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.preferenceUpdateFrequency;
|
||||
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.runLiveUpdate;
|
||||
import static net.osmand.plus.liveupdates.LiveUpdatesHelper.setAlarmForPendingIntent;
|
||||
|
||||
public class LiveUpdatesSettingsDialogFragment extends DialogFragment {
|
||||
|
@ -158,7 +159,7 @@ public class LiveUpdatesSettingsDialogFragment extends DialogFragment {
|
|||
timeOfDayPreference.set(timeOfDayInt);
|
||||
|
||||
if (liveUpdatesSwitch.isChecked() && getSettings().IS_LIVE_UPDATES_ON.get()) {
|
||||
runLiveUpdate(localIndexInfo, false);
|
||||
runLiveUpdate(getActivity(), localIndexInfo, false);
|
||||
UpdateFrequency updateFrequency = UpdateFrequency.values()[updateFrequencyInt];
|
||||
TimeOfDay timeOfDayToUpdate = TimeOfDay.values()[timeOfDayInt];
|
||||
setAlarmForPendingIntent(alarmIntent, alarmMgr, updateFrequency, timeOfDayToUpdate);
|
||||
|
@ -172,18 +173,13 @@ public class LiveUpdatesSettingsDialogFragment extends DialogFragment {
|
|||
.setNeutralButton(R.string.update_now, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
runLiveUpdate(localIndexInfo, true);
|
||||
runLiveUpdate(getActivity(), localIndexInfo, true);
|
||||
sizeTextView.setText(getUpdatesSize(fileNameWithoutExtension, changesManager));
|
||||
}
|
||||
});
|
||||
return builder.create();
|
||||
}
|
||||
|
||||
void runLiveUpdate(final LocalIndexInfo info, boolean forceUpdate) {
|
||||
final String fnExt = Algorithms.getFileNameWithoutExtension(new File(info.getFileName()));
|
||||
new PerformLiveUpdateAsyncTask(getActivity(), info, forceUpdate).execute(new String[]{fnExt});
|
||||
}
|
||||
|
||||
private static String getUpdatesSize(String fileNameWithoutExtension,
|
||||
IncrementalChangesManager changesManager) {
|
||||
String size;
|
||||
|
|
Loading…
Reference in a new issue