[android] Cancel button on autoupdate screen.

This commit is contained in:
Arsentiy Milchakov 2018-03-20 16:38:44 +03:00 committed by Aleksandr Zatsepin
parent 755238610f
commit 4055db61f0
2 changed files with 65 additions and 36 deletions

View file

@ -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"/>
<TextView
android:id="@+id/common_status"
android:layout_width="match_parent"
@ -117,7 +117,7 @@
android:maxLines="1"
android:ellipsize="end"
android:textAppearance="@style/MwmTextAppearance.Body1.Secondary"
android:text="@string/downloader_process"/>
tools:text="@string/downloader_process"/>
</LinearLayout>
</FrameLayout>
</LinearLayout>

View file

@ -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<String>) 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<String> mLeftoverMaps;
@Nullable
private final String[] mOutdatedMaps;
private int mListenerSlot = 0;
DetachableStorageCallback(@Nullable UpdaterDialogFragment fragment,
@Nullable Set<String> 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<Boolean>()
{
@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);
}
}
}