[android] Implemented restoring progress dialog

This commit is contained in:
Alexander Zatsepin 2018-05-07 20:09:47 +03:00 committed by Aleksandr Zatsepin
parent 41dcf7b2f3
commit 278fbc09c0
2 changed files with 147 additions and 30 deletions

View file

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

View file

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