forked from organicmaps/organicmaps
[android] Implemented restoring progress dialog
This commit is contained in:
parent
41dcf7b2f3
commit
278fbc09c0
2 changed files with 147 additions and 30 deletions
|
@ -1,5 +1,6 @@
|
|||
package com.mapswithme.maps.bookmarks;
|
||||
|
||||
import android.app.ProgressDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.support.annotation.NonNull;
|
||||
|
@ -23,11 +24,13 @@ import com.mapswithme.util.statistics.Statistics;
|
|||
import java.util.Date;
|
||||
|
||||
import static com.mapswithme.maps.bookmarks.data.BookmarkManager.CLOUD_AUTH_ERROR;
|
||||
import static com.mapswithme.maps.bookmarks.data.BookmarkManager.CLOUD_BACKUP;
|
||||
import static com.mapswithme.maps.bookmarks.data.BookmarkManager.CLOUD_BACKUP_EXISTS;
|
||||
import static com.mapswithme.maps.bookmarks.data.BookmarkManager.CLOUD_DISK_ERROR;
|
||||
import static com.mapswithme.maps.bookmarks.data.BookmarkManager.CLOUD_NETWORK_ERROR;
|
||||
import static com.mapswithme.maps.bookmarks.data.BookmarkManager.CLOUD_NOT_ENOUGH_DISK_SPACE;
|
||||
import static com.mapswithme.maps.bookmarks.data.BookmarkManager.CLOUD_NO_BACKUP;
|
||||
import static com.mapswithme.maps.bookmarks.data.BookmarkManager.CLOUD_RESTORE;
|
||||
import static com.mapswithme.maps.bookmarks.data.BookmarkManager.CLOUD_SUCCESS;
|
||||
import static com.mapswithme.maps.bookmarks.data.BookmarkManager.CLOUD_USER_INTERRUPTED;
|
||||
|
||||
|
@ -57,12 +60,14 @@ public class BookmarkBackupController implements Authorizer.Callback,
|
|||
public void onClick(View v)
|
||||
{
|
||||
BookmarkManager.INSTANCE.setCloudEnabled(true);
|
||||
update();
|
||||
updateWidget();
|
||||
Statistics.INSTANCE.trackBmSyncProposalApproved(mAuthorizer.isAuthorized());
|
||||
}
|
||||
};
|
||||
@NonNull
|
||||
private final View.OnClickListener mRestoreClickListener = v -> requestRestoring();
|
||||
@Nullable
|
||||
private ProgressDialog mRestoringProgressDialog;
|
||||
|
||||
BookmarkBackupController(@NonNull FragmentActivity context, @NonNull BookmarkBackupView backupView,
|
||||
@NonNull Authorizer authorizer)
|
||||
|
@ -79,18 +84,44 @@ public class BookmarkBackupController implements Authorizer.Callback,
|
|||
DialogInterface.OnClickListener clickListener
|
||||
= (dialog, which) -> Utils.showSystemSettings(mContext);
|
||||
DialogUtils.showAlertDialog(mContext, R.string.common_check_internet_connection_dialog_title,
|
||||
mContext.getString(R.string.common_check_internet_connection_dialog),
|
||||
R.string.common_check_internet_connection_dialog,
|
||||
R.string.settings, clickListener, R.string.ok);
|
||||
return;
|
||||
}
|
||||
|
||||
NetworkPolicy.checkNetworkPolicy(mContext.getSupportFragmentManager(),
|
||||
policy -> {
|
||||
BookmarkManager.INSTANCE.requestRestoring();
|
||||
});
|
||||
NetworkPolicy.NetworkPolicyListener policyListener = policy -> {
|
||||
showRestoringProgressDialog();
|
||||
BookmarkManager.INSTANCE.requestRestoring();
|
||||
};
|
||||
|
||||
NetworkPolicy.checkNetworkPolicy(mContext.getSupportFragmentManager(), policyListener);
|
||||
}
|
||||
|
||||
public void update()
|
||||
private void showRestoringProgressDialog()
|
||||
{
|
||||
if (mRestoringProgressDialog != null && mRestoringProgressDialog.isShowing())
|
||||
throw new AssertionError("Previous progress must be dismissed before " +
|
||||
"showing another one!");
|
||||
DialogInterface.OnClickListener cancelListener = (dialog, which) -> {
|
||||
BookmarkManager.INSTANCE.cancelRestoring();
|
||||
};
|
||||
mRestoringProgressDialog = DialogUtils.createModalProgressDialog(mContext,
|
||||
R.string.bookmarks_restore_process,
|
||||
DialogInterface.BUTTON_NEGATIVE,
|
||||
R.string.cancel, cancelListener);
|
||||
mRestoringProgressDialog.show();
|
||||
}
|
||||
|
||||
private void hideRestoringProgressDialog()
|
||||
{
|
||||
if (mRestoringProgressDialog == null || !mRestoringProgressDialog.isShowing())
|
||||
return;
|
||||
|
||||
mRestoringProgressDialog.dismiss();
|
||||
mRestoringProgressDialog = null;
|
||||
}
|
||||
|
||||
private void updateWidget()
|
||||
{
|
||||
if (!mAuthorizer.isAuthorized())
|
||||
{
|
||||
|
@ -123,7 +154,7 @@ public class BookmarkBackupController implements Authorizer.Callback,
|
|||
if (backupTime > 0)
|
||||
{
|
||||
msg = mContext.getString(R.string.bookmarks_message_backuped_user,
|
||||
DateUtils.getShortDateFormatter().format(new Date(backupTime)));
|
||||
DateUtils.getShortDateFormatter().format(new Date(backupTime)));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -149,7 +180,7 @@ public class BookmarkBackupController implements Authorizer.Callback,
|
|||
{
|
||||
mAuthorizer.attach(this);
|
||||
BookmarkManager.INSTANCE.addCloudListener(this);
|
||||
update();
|
||||
updateWidget();
|
||||
}
|
||||
|
||||
public void onStop()
|
||||
|
@ -166,7 +197,7 @@ public class BookmarkBackupController implements Authorizer.Callback,
|
|||
@Override
|
||||
public void onAuthorizationStart()
|
||||
{
|
||||
update();
|
||||
updateWidget();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -182,7 +213,7 @@ public class BookmarkBackupController implements Authorizer.Callback,
|
|||
{
|
||||
Statistics.INSTANCE.trackBmSyncProposalError(Framework.TOKEN_MAPSME, "Unknown error");
|
||||
}
|
||||
update();
|
||||
updateWidget();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -200,9 +231,18 @@ public class BookmarkBackupController implements Authorizer.Callback,
|
|||
@Override
|
||||
public void onSynchronizationStarted(@BookmarkManager.SynchronizationType int type)
|
||||
{
|
||||
if (type == BookmarkManager.CLOUD_BACKUP)
|
||||
Statistics.INSTANCE.trackEvent(Statistics.EventName.BM_SYNC_STARTED);
|
||||
update();
|
||||
switch (type)
|
||||
{
|
||||
case CLOUD_BACKUP:
|
||||
Statistics.INSTANCE.trackEvent(Statistics.EventName.BM_SYNC_STARTED);
|
||||
break;
|
||||
case CLOUD_RESTORE:
|
||||
// Do nothing.
|
||||
break;
|
||||
default:
|
||||
throw new AssertionError("Unsupported synchronization type: " + type);
|
||||
}
|
||||
updateWidget();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -210,8 +250,11 @@ public class BookmarkBackupController implements Authorizer.Callback,
|
|||
@BookmarkManager.SynchronizationResult int result,
|
||||
@NonNull String errorString)
|
||||
{
|
||||
update();
|
||||
if (type == BookmarkManager.CLOUD_BACKUP)
|
||||
hideRestoringProgressDialog();
|
||||
|
||||
updateWidget();
|
||||
|
||||
if (type == CLOUD_BACKUP)
|
||||
{
|
||||
Statistics.INSTANCE.trackBmSynchronizationFinish(type, result, errorString);
|
||||
return;
|
||||
|
@ -223,7 +266,7 @@ public class BookmarkBackupController implements Authorizer.Callback,
|
|||
case CLOUD_AUTH_ERROR:
|
||||
case CLOUD_NETWORK_ERROR:
|
||||
DialogInterface.OnClickListener clickListener
|
||||
= (dialog, which) -> BookmarkManager.INSTANCE.requestRestoring();
|
||||
= (dialog, which) -> requestRestoring();
|
||||
DialogUtils.showAlertDialog(mContext, R.string.error_server_title,
|
||||
mContext.getString(R.string.error_server_message),
|
||||
R.string.try_again, clickListener, R.string.cancel);
|
||||
|
@ -246,27 +289,38 @@ public class BookmarkBackupController implements Authorizer.Callback,
|
|||
public void onRestoreRequested(@BookmarkManager.RestoringRequestResult int result,
|
||||
long backupTimestampInMs)
|
||||
{
|
||||
hideRestoringProgressDialog();
|
||||
|
||||
final DialogInterface.OnClickListener cancelListener
|
||||
= (dialog, which) -> BookmarkManager.INSTANCE.cancelRestoring();
|
||||
|
||||
switch (result)
|
||||
{
|
||||
case CLOUD_BACKUP_EXISTS:
|
||||
String backupDate = DateUtils.getShortDateFormatter().format(new Date(backupTimestampInMs));
|
||||
DialogInterface.OnClickListener clickListener
|
||||
= (dialog, which) -> BookmarkManager.INSTANCE.applyRestoring();
|
||||
DialogInterface.OnClickListener clickListener = (dialog, which) -> {
|
||||
showRestoringProgressDialog();
|
||||
BookmarkManager.INSTANCE.applyRestoring();
|
||||
};
|
||||
String msg = mContext.getString(R.string.bookmarks_restore_message, backupDate);
|
||||
DialogUtils.showAlertDialog(mContext, R.string.bookmarks_restore_title, msg,
|
||||
R.string.restore, clickListener, R.string.cancel);
|
||||
R.string.restore, clickListener, R.string.cancel, cancelListener);
|
||||
break;
|
||||
case CLOUD_NO_BACKUP:
|
||||
DialogUtils.showAlertDialog(mContext, R.string.bookmarks_restore_empty_title,
|
||||
R.string.bookmarks_restore_empty_message);
|
||||
mContext.getString(R.string.bookmarks_restore_empty_message),
|
||||
R.string.ok, cancelListener);
|
||||
break;
|
||||
case CLOUD_NOT_ENOUGH_DISK_SPACE:
|
||||
DialogInterface.OnClickListener tryAgainListener
|
||||
= (dialog, which) -> BookmarkManager.INSTANCE.requestRestoring();
|
||||
DialogUtils.showAlertDialog(mContext, R.string.routing_not_enough_space,
|
||||
mContext.getString(R.string.not_enough_free_space_on_sdcard),
|
||||
R.string.try_again, tryAgainListener, R.string.cancel);
|
||||
R.string.not_enough_free_space_on_sdcard,
|
||||
R.string.try_again, tryAgainListener, R.string.cancel,
|
||||
cancelListener);
|
||||
break;
|
||||
default:
|
||||
throw new AssertionError("Unsupported restoring request result: " + result);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import android.app.ProgressDialog;
|
|||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.annotation.StringRes;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
|
||||
|
@ -15,6 +16,7 @@ public class DialogUtils
|
|||
{
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private static AlertDialog.Builder buildAlertDialog(@NonNull Context context, @StringRes int titleId)
|
||||
{
|
||||
return new AlertDialog.Builder(context)
|
||||
|
@ -23,6 +25,7 @@ public class DialogUtils
|
|||
.setPositiveButton(R.string.ok, (dlg, which) -> dlg.dismiss());
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private static AlertDialog.Builder buildAlertDialog(@NonNull Context context, @StringRes int titleId,
|
||||
@StringRes int msgId)
|
||||
{
|
||||
|
@ -30,16 +33,28 @@ public class DialogUtils
|
|||
.setMessage(msgId);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private static AlertDialog.Builder buildAlertDialog(@NonNull Context context, @StringRes int titleId,
|
||||
@NonNull CharSequence msg,
|
||||
@StringRes int posBtn,
|
||||
@NonNull DialogInterface.OnClickListener posClickListener,
|
||||
@StringRes int negBtn)
|
||||
@NonNull CharSequence msg, @StringRes int posBtn,
|
||||
@NonNull DialogInterface.OnClickListener
|
||||
posClickListener,
|
||||
@StringRes int negBtn,
|
||||
@Nullable DialogInterface.OnClickListener
|
||||
negClickListener)
|
||||
{
|
||||
return buildAlertDialog(context, titleId, msg, posBtn, posClickListener)
|
||||
.setNegativeButton(negBtn, negClickListener);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private static AlertDialog.Builder buildAlertDialog(@NonNull Context context, @StringRes int titleId,
|
||||
@NonNull CharSequence msg, @StringRes int posBtn,
|
||||
@NonNull DialogInterface.OnClickListener
|
||||
posClickListener)
|
||||
{
|
||||
return buildAlertDialog(context, titleId)
|
||||
.setMessage(msg)
|
||||
.setPositiveButton(posBtn, posClickListener)
|
||||
.setNegativeButton(negBtn, null);
|
||||
.setPositiveButton(posBtn, posClickListener);
|
||||
}
|
||||
|
||||
public static void showAlertDialog(@NonNull Context context, @StringRes int titleId,
|
||||
|
@ -53,14 +68,51 @@ public class DialogUtils
|
|||
buildAlertDialog(context, titleId).show();
|
||||
}
|
||||
|
||||
public static void showAlertDialog(@NonNull Context context, @StringRes int titleId,
|
||||
@StringRes int msgId, @StringRes int posBtn,
|
||||
@NonNull DialogInterface.OnClickListener posClickListener,
|
||||
@StringRes int negBtn)
|
||||
{
|
||||
buildAlertDialog(context, titleId, context.getString(msgId), posBtn, posClickListener, negBtn,
|
||||
null).show();
|
||||
}
|
||||
|
||||
|
||||
public static void showAlertDialog(@NonNull Context context, @StringRes int titleId,
|
||||
@NonNull CharSequence msg, @StringRes int posBtn,
|
||||
@NonNull DialogInterface.OnClickListener posClickListener,
|
||||
@StringRes int negBtn)
|
||||
{
|
||||
buildAlertDialog(context, titleId, msg, posBtn, posClickListener, negBtn).show();
|
||||
buildAlertDialog(context, titleId, msg, posBtn, posClickListener, negBtn, null).show();
|
||||
}
|
||||
|
||||
public static void showAlertDialog(@NonNull Context context, @StringRes int titleId,
|
||||
@NonNull CharSequence msg, @StringRes int posBtn,
|
||||
@NonNull DialogInterface.OnClickListener posClickListener,
|
||||
@StringRes int negBtn,
|
||||
@Nullable DialogInterface.OnClickListener negClickListener)
|
||||
{
|
||||
buildAlertDialog(context, titleId, msg, posBtn, posClickListener, negBtn, negClickListener).show();
|
||||
}
|
||||
|
||||
public static void showAlertDialog(@NonNull Context context, @StringRes int titleId,
|
||||
@StringRes int msgId, @StringRes int posBtn,
|
||||
@NonNull DialogInterface.OnClickListener posClickListener,
|
||||
@StringRes int negBtn,
|
||||
@Nullable DialogInterface.OnClickListener negClickListener)
|
||||
{
|
||||
buildAlertDialog(context, titleId, context.getString(msgId), posBtn, posClickListener, negBtn,
|
||||
negClickListener).show();
|
||||
}
|
||||
|
||||
public static void showAlertDialog(@NonNull Context context, @StringRes int titleId,
|
||||
@NonNull CharSequence msg, @StringRes int posBtn,
|
||||
@NonNull DialogInterface.OnClickListener posClickListener)
|
||||
{
|
||||
buildAlertDialog(context, titleId, msg, posBtn, posClickListener).show();
|
||||
}
|
||||
|
||||
|
||||
@NonNull
|
||||
public static ProgressDialog createModalProgressDialog(@NonNull Context context, @StringRes int msg)
|
||||
{
|
||||
|
@ -71,4 +123,15 @@ public class DialogUtils
|
|||
progress.setCancelable(false);
|
||||
return progress;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public static ProgressDialog createModalProgressDialog(@NonNull Context context, @StringRes int msg,
|
||||
int whichButton, @StringRes int buttonText,
|
||||
@Nullable DialogInterface.OnClickListener
|
||||
clickListener)
|
||||
{
|
||||
ProgressDialog progress = createModalProgressDialog(context, msg);
|
||||
progress.setButton(whichButton, context.getString(buttonText), clickListener);
|
||||
return progress;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue