Fix backup sync and progress
This commit is contained in:
parent
e6be5dcab5
commit
974ad80734
4 changed files with 73 additions and 17 deletions
|
@ -38,6 +38,7 @@ import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
import java.util.concurrent.Executor;
|
||||||
import java.util.zip.GZIPInputStream;
|
import java.util.zip.GZIPInputStream;
|
||||||
import java.util.zip.GZIPOutputStream;
|
import java.util.zip.GZIPOutputStream;
|
||||||
|
|
||||||
|
@ -92,6 +93,13 @@ public class AndroidNetworkUtils {
|
||||||
public static void sendRequestsAsync(@Nullable final OsmandApplication ctx,
|
public static void sendRequestsAsync(@Nullable final OsmandApplication ctx,
|
||||||
@NonNull final List<Request> requests,
|
@NonNull final List<Request> requests,
|
||||||
@Nullable final OnSendRequestsListener listener) {
|
@Nullable final OnSendRequestsListener listener) {
|
||||||
|
sendRequestsAsync(ctx, requests, listener, AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void sendRequestsAsync(@Nullable final OsmandApplication ctx,
|
||||||
|
@NonNull final List<Request> requests,
|
||||||
|
@Nullable final OnSendRequestsListener listener,
|
||||||
|
final Executor executor) {
|
||||||
|
|
||||||
new AsyncTask<Void, RequestResponse, List<RequestResponse>>() {
|
new AsyncTask<Void, RequestResponse, List<RequestResponse>>() {
|
||||||
|
|
||||||
|
@ -127,7 +135,7 @@ public class AndroidNetworkUtils {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void) null);
|
}.executeOnExecutor(executor, (Void) null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void sendRequestAsync(final OsmandApplication ctx,
|
public static void sendRequestAsync(final OsmandApplication ctx,
|
||||||
|
@ -137,7 +145,18 @@ public class AndroidNetworkUtils {
|
||||||
final boolean toastAllowed,
|
final boolean toastAllowed,
|
||||||
final boolean post,
|
final boolean post,
|
||||||
final OnRequestResultListener listener) {
|
final OnRequestResultListener listener) {
|
||||||
|
sendRequestAsync(ctx, url, parameters, userOperation, toastAllowed, post, listener,
|
||||||
|
AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void sendRequestAsync(final OsmandApplication ctx,
|
||||||
|
final String url,
|
||||||
|
final Map<String, String> parameters,
|
||||||
|
final String userOperation,
|
||||||
|
final boolean toastAllowed,
|
||||||
|
final boolean post,
|
||||||
|
final OnRequestResultListener listener,
|
||||||
|
final Executor executor) {
|
||||||
new AsyncTask<Void, Void, String>() {
|
new AsyncTask<Void, Void, String>() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -156,7 +175,7 @@ public class AndroidNetworkUtils {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void) null);
|
}.executeOnExecutor(executor, (Void) null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void downloadFileAsync(final String url,
|
public static void downloadFileAsync(final String url,
|
||||||
|
@ -183,6 +202,14 @@ public class AndroidNetworkUtils {
|
||||||
final @NonNull List<File> files,
|
final @NonNull List<File> files,
|
||||||
final @NonNull Map<String, String> parameters,
|
final @NonNull Map<String, String> parameters,
|
||||||
final @Nullable OnFilesDownloadCallback callback) {
|
final @Nullable OnFilesDownloadCallback callback) {
|
||||||
|
downloadFilesAsync(url, files, parameters, callback, AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void downloadFilesAsync(final @NonNull String url,
|
||||||
|
final @NonNull List<File> files,
|
||||||
|
final @NonNull Map<String, String> parameters,
|
||||||
|
final @Nullable OnFilesDownloadCallback callback,
|
||||||
|
final Executor executor) {
|
||||||
|
|
||||||
new AsyncTask<Void, Object, Map<File, String>>() {
|
new AsyncTask<Void, Object, Map<File, String>>() {
|
||||||
|
|
||||||
|
@ -247,7 +274,7 @@ public class AndroidNetworkUtils {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void) null);
|
}.executeOnExecutor(executor, (Void) null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String sendRequest(@Nullable OsmandApplication ctx, @NonNull String url,
|
public static String sendRequest(@Nullable OsmandApplication ctx, @NonNull String url,
|
||||||
|
@ -503,6 +530,16 @@ public class AndroidNetworkUtils {
|
||||||
final @NonNull Map<String, String> parameters,
|
final @NonNull Map<String, String> parameters,
|
||||||
final @Nullable Map<String, String> headers,
|
final @Nullable Map<String, String> headers,
|
||||||
final OnFilesUploadCallback callback) {
|
final OnFilesUploadCallback callback) {
|
||||||
|
uploadFilesAsync(url, files, gzip, parameters, headers, callback, AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void uploadFilesAsync(final @NonNull String url,
|
||||||
|
final @NonNull List<File> files,
|
||||||
|
final boolean gzip,
|
||||||
|
final @NonNull Map<String, String> parameters,
|
||||||
|
final @Nullable Map<String, String> headers,
|
||||||
|
final OnFilesUploadCallback callback,
|
||||||
|
final Executor executor) {
|
||||||
|
|
||||||
new AsyncTask<Void, Object, Map<File, String>>() {
|
new AsyncTask<Void, Object, Map<File, String>>() {
|
||||||
|
|
||||||
|
@ -557,7 +594,7 @@ public class AndroidNetworkUtils {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void) null);
|
}.executeOnExecutor(executor, (Void) null);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void showToast(OsmandApplication ctx, String message) {
|
private static void showToast(OsmandApplication ctx, String message) {
|
||||||
|
|
|
@ -37,6 +37,9 @@ import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.LinkedBlockingQueue;
|
||||||
|
import java.util.concurrent.ThreadPoolExecutor;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
public class BackupHelper {
|
public class BackupHelper {
|
||||||
|
|
||||||
|
@ -45,6 +48,9 @@ public class BackupHelper {
|
||||||
private final FavouritesDbHelper favouritesHelper;
|
private final FavouritesDbHelper favouritesHelper;
|
||||||
private final GpxDbHelper gpxHelper;
|
private final GpxDbHelper gpxHelper;
|
||||||
|
|
||||||
|
private static final ThreadPoolExecutor EXECUTOR = new ThreadPoolExecutor(1, 1, 0L,
|
||||||
|
TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
|
||||||
|
|
||||||
private static final String SERVER_URL = "https://osmand.net";
|
private static final String SERVER_URL = "https://osmand.net";
|
||||||
|
|
||||||
private static final String USER_REGISTER_URL = SERVER_URL + "/userdata/user-register";
|
private static final String USER_REGISTER_URL = SERVER_URL + "/userdata/user-register";
|
||||||
|
@ -196,7 +202,7 @@ public class BackupHelper {
|
||||||
listener.onRegisterUser(status, message);
|
listener.onRegisterUser(status, message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
}, EXECUTOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerDevice(String token, @Nullable final OnRegisterDeviceListener listener) {
|
public void registerDevice(String token, @Nullable final OnRegisterDeviceListener listener) {
|
||||||
|
@ -238,7 +244,7 @@ public class BackupHelper {
|
||||||
listener.onRegisterDevice(status, message);
|
listener.onRegisterDevice(status, message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
}, EXECUTOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void uploadFiles(@NonNull List<GpxFileInfo> gpxFiles, @Nullable final OnUploadFilesListener listener) throws UserNotRegisteredException {
|
public void uploadFiles(@NonNull List<GpxFileInfo> gpxFiles, @Nullable final OnUploadFilesListener listener) throws UserNotRegisteredException {
|
||||||
|
@ -294,7 +300,7 @@ public class BackupHelper {
|
||||||
listener.onFilesUploadDone(errors);
|
listener.onFilesUploadDone(errors);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
}, EXECUTOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void deleteFiles(@NonNull List<UserFile> userFiles, @Nullable final OnDeleteFilesListener listener) throws UserNotRegisteredException {
|
public void deleteFiles(@NonNull List<UserFile> userFiles, @Nullable final OnDeleteFilesListener listener) throws UserNotRegisteredException {
|
||||||
|
@ -349,7 +355,7 @@ public class BackupHelper {
|
||||||
listener.onFilesDeleteDone(errors);
|
listener.onFilesDeleteDone(errors);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
}, EXECUTOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void downloadFileList(@Nullable final OnDownloadFileListListener listener) throws UserNotRegisteredException {
|
public void downloadFileList(@Nullable final OnDownloadFileListListener listener) throws UserNotRegisteredException {
|
||||||
|
@ -391,7 +397,7 @@ public class BackupHelper {
|
||||||
listener.onDownloadFileList(status, message, userFiles);
|
listener.onDownloadFileList(status, message, userFiles);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
}, EXECUTOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void downloadFiles(@NonNull final Map<File, UserFile> filesMap, @Nullable final OnDownloadFileListener listener) throws UserNotRegisteredException {
|
public void downloadFiles(@NonNull final Map<File, UserFile> filesMap, @Nullable final OnDownloadFileListener listener) throws UserNotRegisteredException {
|
||||||
|
@ -432,7 +438,7 @@ public class BackupHelper {
|
||||||
listener.onFilesDownloadDone(errors);
|
listener.onFilesDownloadDone(errors);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
}, EXECUTOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("StaticFieldLeak")
|
@SuppressLint("StaticFieldLeak")
|
||||||
|
@ -514,7 +520,7 @@ public class BackupHelper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
task.executeOnExecutor(EXECUTOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("StaticFieldLeak")
|
@SuppressLint("StaticFieldLeak")
|
||||||
|
@ -575,6 +581,6 @@ public class BackupHelper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
task.executeOnExecutor(EXECUTOR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,6 @@ import net.osmand.AndroidUtils;
|
||||||
import net.osmand.GPXUtilities;
|
import net.osmand.GPXUtilities;
|
||||||
import net.osmand.GPXUtilities.GPXFile;
|
import net.osmand.GPXUtilities.GPXFile;
|
||||||
import net.osmand.plus.GPXDatabase.GpxDataItem;
|
import net.osmand.plus.GPXDatabase.GpxDataItem;
|
||||||
import net.osmand.plus.GpxDbHelper;
|
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.ProgressImplementation;
|
import net.osmand.plus.ProgressImplementation;
|
||||||
import net.osmand.plus.backup.BackupHelper.BackupInfo;
|
import net.osmand.plus.backup.BackupHelper.BackupInfo;
|
||||||
|
@ -113,7 +112,7 @@ public class BackupTask {
|
||||||
tasks.push(backupTasks[i]);
|
tasks.push(backupTasks[i]);
|
||||||
}
|
}
|
||||||
this.runningTasks = tasks;
|
this.runningTasks = tasks;
|
||||||
onTasksInit();
|
onBackupTasksInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initRestoreTasks() {
|
private void initRestoreTasks() {
|
||||||
|
@ -123,7 +122,7 @@ public class BackupTask {
|
||||||
tasks.push(restoreTasks[i]);
|
tasks.push(restoreTasks[i]);
|
||||||
}
|
}
|
||||||
this.runningTasks = tasks;
|
this.runningTasks = tasks;
|
||||||
onTasksInit();
|
onRestoreTasksInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initData() {
|
private void initData() {
|
||||||
|
@ -275,14 +274,22 @@ public class BackupTask {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onTasksInit() {
|
private void onBackupTasksInit() {
|
||||||
Context ctx = contextRef.get();
|
Context ctx = contextRef.get();
|
||||||
if (ctx instanceof Activity && AndroidUtils.isActivityNotDestroyed((Activity) ctx) && progress != null) {
|
if (ctx instanceof Activity && AndroidUtils.isActivityNotDestroyed((Activity) ctx)) {
|
||||||
progress = ProgressImplementation.createProgressDialog(ctx,
|
progress = ProgressImplementation.createProgressDialog(ctx,
|
||||||
"Backup data", "Initializing...", ProgressDialog.STYLE_HORIZONTAL);
|
"Backup data", "Initializing...", ProgressDialog.STYLE_HORIZONTAL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void onRestoreTasksInit() {
|
||||||
|
Context ctx = contextRef.get();
|
||||||
|
if (ctx instanceof Activity && AndroidUtils.isActivityNotDestroyed((Activity) ctx)) {
|
||||||
|
progress = ProgressImplementation.createProgressDialog(ctx,
|
||||||
|
"Restore data", "Initializing...", ProgressDialog.STYLE_HORIZONTAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void onTaskProgressUpdate(Object... objects) {
|
private void onTaskProgressUpdate(Object... objects) {
|
||||||
Context ctx = contextRef.get();
|
Context ctx = contextRef.get();
|
||||||
if (ctx instanceof Activity && AndroidUtils.isActivityNotDestroyed((Activity) ctx) && progress != null) {
|
if (ctx instanceof Activity && AndroidUtils.isActivityNotDestroyed((Activity) ctx) && progress != null) {
|
||||||
|
|
|
@ -186,6 +186,7 @@ public class TestBackupActivity extends OsmandActionBarActivity {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
if (backupInfo != null) {
|
if (backupInfo != null) {
|
||||||
|
buttonBackup.setEnabled(false);
|
||||||
BackupTask task = new BackupTask(backupInfo, TestBackupActivity.this, new OnBackupListener() {
|
BackupTask task = new BackupTask(backupInfo, TestBackupActivity.this, new OnBackupListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onBackupDone(@Nullable Map<File, String> uploadErrors, @Nullable Map<File, String> downloadErrors,
|
public void onBackupDone(@Nullable Map<File, String> uploadErrors, @Nullable Map<File, String> downloadErrors,
|
||||||
|
@ -203,6 +204,7 @@ public class TestBackupActivity extends OsmandActionBarActivity {
|
||||||
a.infoView.setText(description);
|
a.infoView.setText(description);
|
||||||
a.infoView.requestFocus();
|
a.infoView.requestFocus();
|
||||||
a.prepareBackup();
|
a.prepareBackup();
|
||||||
|
a.buttonBackup.setEnabled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -214,6 +216,7 @@ public class TestBackupActivity extends OsmandActionBarActivity {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
if (backupInfo != null) {
|
if (backupInfo != null) {
|
||||||
|
buttonRestore.setEnabled(false);
|
||||||
BackupTask task = new BackupTask(backupInfo, TestBackupActivity.this, new OnBackupListener() {
|
BackupTask task = new BackupTask(backupInfo, TestBackupActivity.this, new OnBackupListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onBackupDone(@Nullable Map<File, String> uploadErrors, @Nullable Map<File, String> downloadErrors,
|
public void onBackupDone(@Nullable Map<File, String> uploadErrors, @Nullable Map<File, String> downloadErrors,
|
||||||
|
@ -231,6 +234,7 @@ public class TestBackupActivity extends OsmandActionBarActivity {
|
||||||
a.infoView.setText(description);
|
a.infoView.setText(description);
|
||||||
a.infoView.requestFocus();
|
a.infoView.requestFocus();
|
||||||
a.prepareBackup();
|
a.prepareBackup();
|
||||||
|
a.buttonRestore.setEnabled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -309,6 +313,7 @@ public class TestBackupActivity extends OsmandActionBarActivity {
|
||||||
|
|
||||||
private void prepareBackup() {
|
private void prepareBackup() {
|
||||||
final WeakReference<TestBackupActivity> activityRef = new WeakReference<>(this);
|
final WeakReference<TestBackupActivity> activityRef = new WeakReference<>(this);
|
||||||
|
buttonRefresh.setEnabled(false);
|
||||||
PrepareBackupTask prepareBackupTask = new PrepareBackupTask(this, new OnPrepareBackupListener() {
|
PrepareBackupTask prepareBackupTask = new PrepareBackupTask(this, new OnPrepareBackupListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onBackupPrepared(@Nullable BackupInfo backupInfo, @Nullable String error) {
|
public void onBackupPrepared(@Nullable BackupInfo backupInfo, @Nullable String error) {
|
||||||
|
@ -329,6 +334,7 @@ public class TestBackupActivity extends OsmandActionBarActivity {
|
||||||
}
|
}
|
||||||
a.infoView.setText(description);
|
a.infoView.setText(description);
|
||||||
a.infoView.requestFocus();
|
a.infoView.requestFocus();
|
||||||
|
a.buttonRefresh.setEnabled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue