diff --git a/android/res/layout/fragment_updater.xml b/android/res/layout/fragment_updater.xml index c839a5f42b..5646e045a3 100644 --- a/android/res/layout/fragment_updater.xml +++ b/android/res/layout/fragment_updater.xml @@ -107,7 +107,7 @@ android:layout_gravity="center_horizontal" android:gravity="center" android:textAppearance="@style/MwmTextAppearance.Body1.Secondary" - android:text="@string/downloader_percent"/> + tools:text="@string/downloader_percent"/> + tools:text="@string/downloader_process"/> diff --git a/android/src/com/mapswithme/maps/downloader/UpdaterDialogFragment.java b/android/src/com/mapswithme/maps/downloader/UpdaterDialogFragment.java index 7aebdfebc0..9df882556d 100644 --- a/android/src/com/mapswithme/maps/downloader/UpdaterDialogFragment.java +++ b/android/src/com/mapswithme/maps/downloader/UpdaterDialogFragment.java @@ -30,7 +30,6 @@ import com.mapswithme.util.statistics.Statistics; import java.util.Arrays; import java.util.HashSet; import java.util.List; -import java.util.Locale; import java.util.Set; import static com.mapswithme.util.statistics.Statistics.EventName.DOWNLOADER_DIALOG_CANCEL; @@ -50,7 +49,7 @@ public class UpdaterDialogFragment extends BaseMwmDialogFragment private static final String ARG_UPDATE_IMMEDIATELY = "arg_update_immediately"; private static final String ARG_TOTAL_SIZE = "arg_total_size"; - private static final String ARG_TOTAL_SIZE_MB = "arg_total_size_mb"; + private static final String ARG_TOTAL_SIZE_BYTES = "arg_total_size_bytes"; private static final String ARG_OUTDATED_MAPS = "arg_outdated_maps"; private TextView mTitle; @@ -63,10 +62,9 @@ public class UpdaterDialogFragment extends BaseMwmDialogFragment private View mFrameBtn; private TextView mHideBtn; - private int mListenerSlot = 0; @Nullable private String mTotalSize; - private long mTotalSizeMb; + private long mTotalSizeBytes; private boolean mAutoUpdate; @Nullable private String[] mOutdatedMaps; @@ -105,10 +103,29 @@ public class UpdaterDialogFragment extends BaseMwmDialogFragment @NonNull private final View.OnClickListener mCancelClickListener = (View v) -> { - Statistics.INSTANCE.trackDownloaderDialogEvent(DOWNLOADER_DIALOG_CANCEL, mTotalSizeMb); + Statistics.INSTANCE.trackDownloaderDialogEvent(DOWNLOADER_DIALOG_CANCEL, + mTotalSizeBytes / Constants.MB); MapManager.nativeCancel(CountryItem.getRootId()); - finish(); + final UpdateInfo info = MapManager.nativeGetUpdateInfo(CountryItem.getRootId()); + if (info == null) + { + finish(); + return; + } + + mAutoUpdate = false; + mTotalSize = StringUtils.getFileSizeString(info.totalSize); + mTotalSizeBytes = info.totalSize; + mOutdatedMaps = Framework.nativeGetOutdatedCountries(); + + if (mStorageCallback != null) + mStorageCallback.detach(); + + mStorageCallback = new DetachableStorageCallback(this, mLeftoverMaps, mOutdatedMaps); + mStorageCallback.attach(this); + + initViews(); }; @NonNull @@ -121,15 +138,16 @@ public class UpdaterDialogFragment extends BaseMwmDialogFragment @Override public void run() { + mAutoUpdate = true; mTitle.setText(getString(R.string.whats_new_auto_update_updating_maps)); - mCommonStatus.setText(""); - setProgress(0, 0, mTotalSizeMb); + setProgress(0, 0, mTotalSizeBytes); + setCommonStatus(mProcessedMapId, mCommonStatusResId); MapManager.nativeUpdate(CountryItem.getRootId()); UiUtils.show(mProgressBar, mInfo, mFrameBtn, mHideBtn); UiUtils.hide(mUpdateBtn, mLaterBtn); Statistics.INSTANCE.trackDownloaderDialogEvent(DOWNLOADER_DIALOG_MANUAL_DOWNLOAD, - mTotalSizeMb); + mTotalSizeBytes / Constants.MB); } }); @@ -140,13 +158,12 @@ public class UpdaterDialogFragment extends BaseMwmDialogFragment if (fm.isDestroyed()) return false; - final UpdateInfo info = MapManager.nativeGetUpdateInfo(null); + final UpdateInfo info = MapManager.nativeGetUpdateInfo(CountryItem.getRootId()); if (info == null) return false; @Framework.DoAfterUpdate final int result; - final long size = info.totalSize / Constants.MB; Fragment f = fm.findFragmentByTag(UpdaterDialogFragment.class.getName()); if (f != null) { @@ -159,13 +176,14 @@ public class UpdaterDialogFragment extends BaseMwmDialogFragment if (result == Framework.DO_AFTER_UPDATE_MIGRATE || result == Framework.DO_AFTER_UPDATE_NOTHING) return false; - Statistics.INSTANCE.trackDownloaderDialogEvent(DOWNLOADER_DIALOG_SHOW, size); + Statistics.INSTANCE.trackDownloaderDialogEvent(DOWNLOADER_DIALOG_SHOW, + info.totalSize / Constants.MB); } final Bundle args = new Bundle(); args.putBoolean(ARG_UPDATE_IMMEDIATELY, result == Framework.DO_AFTER_UPDATE_AUTO_UPDATE); args.putString(ARG_TOTAL_SIZE, StringUtils.getFileSizeString(info.totalSize)); - args.putLong(ARG_TOTAL_SIZE_MB, size); + args.putLong(ARG_TOTAL_SIZE_BYTES, info.totalSize); args.putStringArray(ARG_OUTDATED_MAPS, Framework.nativeGetOutdatedCountries()); final UpdaterDialogFragment fragment = new UpdaterDialogFragment(); @@ -194,8 +212,15 @@ public class UpdaterDialogFragment extends BaseMwmDialogFragment mLeftoverMaps = (HashSet) savedInstanceState.getSerializable(EXTRA_LEFTOVER_MAPS); mProcessedMapId = savedInstanceState.getString(EXTRA_PROCESSED_MAP_ID); mCommonStatusResId = savedInstanceState.getInt(EXTRA_COMMON_STATUS_RES_ID); + mAutoUpdate = savedInstanceState.getBoolean(ARG_UPDATE_IMMEDIATELY); + mTotalSize = savedInstanceState.getString(ARG_TOTAL_SIZE); + mTotalSizeBytes = savedInstanceState.getLong(ARG_TOTAL_SIZE_BYTES, 0L); + mOutdatedMaps = savedInstanceState.getStringArray(ARG_OUTDATED_MAPS); + } + else + { + readArguments(); } - readArguments(); mStorageCallback = new DetachableStorageCallback(this, mLeftoverMaps, mOutdatedMaps); } @@ -206,6 +231,10 @@ public class UpdaterDialogFragment extends BaseMwmDialogFragment outState.putSerializable(EXTRA_LEFTOVER_MAPS, mLeftoverMaps); outState.putString(EXTRA_PROCESSED_MAP_ID, mProcessedMapId); outState.putInt(EXTRA_COMMON_STATUS_RES_ID, mCommonStatusResId); + outState.putBoolean(ARG_UPDATE_IMMEDIATELY, mAutoUpdate); + outState.putString(ARG_TOTAL_SIZE, mTotalSize); + outState.putLong(ARG_TOTAL_SIZE_BYTES, mTotalSizeBytes); + outState.putStringArray(ARG_OUTDATED_MAPS, mOutdatedMaps); } @NonNull @@ -247,7 +276,6 @@ public class UpdaterDialogFragment extends BaseMwmDialogFragment // The storage callback must be non-null at this point. //noinspection ConstantConditions mStorageCallback.attach(this); - mListenerSlot = MapManager.nativeSubscribe(mStorageCallback); if (mAutoUpdate && !MapManager.nativeIsDownloading()) { @@ -258,7 +286,7 @@ public class UpdaterDialogFragment extends BaseMwmDialogFragment { MapManager.nativeUpdate(CountryItem.getRootId()); Statistics.INSTANCE.trackDownloaderDialogEvent(DOWNLOADER_DIALOG_DOWNLOAD, - mTotalSizeMb); + mTotalSizeBytes / Constants.MB); } }); } @@ -276,11 +304,6 @@ public class UpdaterDialogFragment extends BaseMwmDialogFragment @Override public void onDestroy() { - if (mListenerSlot != 0) - { - MapManager.nativeUnsubscribe(mListenerSlot); - mListenerSlot = 0; - } super.onDestroy(); } @@ -307,7 +330,7 @@ public class UpdaterDialogFragment extends BaseMwmDialogFragment mAutoUpdate = true; mTotalSize = args.getString(ARG_TOTAL_SIZE); - mTotalSizeMb = args.getLong(ARG_TOTAL_SIZE_MB, 0L); + mTotalSizeBytes = args.getLong(ARG_TOTAL_SIZE_BYTES, 0L); mOutdatedMaps = args.getStringArray(ARG_OUTDATED_MAPS); if (mLeftoverMaps == null && mOutdatedMaps != null && mOutdatedMaps.length > 0) { @@ -332,10 +355,8 @@ public class UpdaterDialogFragment extends BaseMwmDialogFragment if (mAutoUpdate) { int progress = MapManager.nativeGetOverallProgress(mOutdatedMaps); - setProgress(progress, mTotalSizeMb * progress / 100, mTotalSizeMb); - - if (mProcessedMapId != null) - setCommonStatus(mProcessedMapId, mCommonStatusResId); + setProgress(progress, mTotalSizeBytes * progress / 100, mTotalSizeBytes); + setCommonStatus(mProcessedMapId, mCommonStatusResId); } } @@ -348,7 +369,8 @@ public class UpdaterDialogFragment extends BaseMwmDialogFragment String getRelativeStatusFormatted(int progress, long localSize, long remoteSize) { return getString(R.string.downloader_percent, progress + "%", - localSize + getString(R.string.mb), remoteSize + getString(R.string.mb)); + localSize / Constants.MB + getString(R.string.mb), + StringUtils.getFileSizeString(remoteSize)); } void setProgress(int progress, long localSize, long remoteSize) @@ -357,8 +379,11 @@ public class UpdaterDialogFragment extends BaseMwmDialogFragment mRelativeStatus.setText(getRelativeStatusFormatted(progress, localSize, remoteSize)); } - void setCommonStatus(@NonNull String mwmId, @StringRes int mwmStatusResId) + void setCommonStatus(@Nullable String mwmId, @StringRes int mwmStatusResId) { + if (mwmId == null || mwmStatusResId == 0) + return; + mProcessedMapId = mwmId; mCommonStatusResId = mwmStatusResId; @@ -373,6 +398,7 @@ public class UpdaterDialogFragment extends BaseMwmDialogFragment private final Set mLeftoverMaps; @Nullable private final String[] mOutdatedMaps; + private int mListenerSlot = 0; DetachableStorageCallback(@Nullable UpdaterDialogFragment fragment, @Nullable Set leftoverMaps, @@ -419,10 +445,8 @@ public class UpdaterDialogFragment extends BaseMwmDialogFragment } } - if (mwmId != null && mwmStatusResId != 0 && mFragment != null) - { + if (mFragment != null) mFragment.setCommonStatus(mwmId, mwmStatusResId); - } if (mFragment != null && mFragment.isAdded() && mFragment.isAllUpdated()) mFragment.finish(); @@ -447,7 +471,8 @@ public class UpdaterDialogFragment extends BaseMwmDialogFragment default: text = String.valueOf(item.errorCode); } - Statistics.INSTANCE.trackDownloaderDialogError(mFragment.mTotalSizeMb, text); + Statistics.INSTANCE.trackDownloaderDialogError(mFragment.mTotalSizeBytes / Constants.MB, + text); MapManager.showErrorDialog(mFragment.getActivity(), item, new Utils.Proc() { @Override @@ -483,18 +508,22 @@ public class UpdaterDialogFragment extends BaseMwmDialogFragment CountryItem root = new CountryItem(CountryItem.getRootId()); MapManager.nativeGetAttributes(root); - mFragment.setProgress(progress, root.downloadedBytes / Constants.MB, - root.bytesToDownload / Constants.MB); + mFragment.setProgress(progress, root.downloadedBytes, root.bytesToDownload); } void attach(@NonNull UpdaterDialogFragment fragment) { mFragment = fragment; + mListenerSlot = MapManager.nativeSubscribe(this); } void detach() { + if (mFragment == null) + throw new AssertionError("detach() should be called after attach() and only once"); + mFragment = null; + MapManager.nativeUnsubscribe(mListenerSlot); } } }