Backup created profile

This commit is contained in:
Vitaliy 2020-02-24 17:34:00 +02:00
parent e4a699ca32
commit c9086f78f4
4 changed files with 119 additions and 50 deletions

View file

@ -11,6 +11,8 @@
Thx - Hardy
-->
<string name="saving_new_profile">Saving new profile</string>
<string name="profile_backup_failed">Could not back up profile.</string>
<string name="profile_type_custom_string">Custom profile</string>
<string name="shared_string_angle_param">Angle: %s°</string>
<string name="shared_string_angle">Angle</string>

View file

@ -2,7 +2,6 @@ package net.osmand.plus;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.support.annotation.NonNull;
@ -1831,7 +1830,6 @@ public class SettingsHelper {
private SettingsExporter exporter;
private File file;
private SettingsExportListener listener;
private ProgressDialog progress;
ExportAsyncTask(@NonNull File settingsFile,
@Nullable SettingsExportListener listener,
@ -1844,14 +1842,6 @@ public class SettingsHelper {
}
}
@Override
protected void onPreExecute() {
super.onPreExecute();
if (activity != null) {
progress = ProgressDialog.show(activity, app.getString(R.string.export_profile), app.getString(R.string.shared_string_preparing));
}
}
@Override
protected Boolean doInBackground(Void... voids) {
try {
@ -1867,11 +1857,8 @@ public class SettingsHelper {
@Override
protected void onPostExecute(Boolean success) {
if (activity != null) {
progress.dismiss();
if (listener != null) {
listener.onSettingsExportFinished(file, success);
}
if (listener != null) {
listener.onSettingsExportFinished(file, success);
}
}
}

View file

@ -1,5 +1,6 @@
package net.osmand.plus.settings;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.res.ColorStateList;
@ -15,7 +16,6 @@ import android.support.v7.widget.SwitchCompat;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ExpandableListView;
import android.widget.LinearLayout.LayoutParams;
import android.widget.Toast;
import net.osmand.AndroidUtils;
@ -42,6 +42,7 @@ import net.osmand.plus.settings.bottomsheets.BasePreferenceBottomSheet;
import org.apache.commons.logging.Log;
import java.io.File;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashMap;
@ -287,15 +288,29 @@ public class ExportProfileBottomSheet extends BasePreferenceBottomSheet {
}
private void prepareFile() {
if (app != null) {
Context context = getContext();
if (app != null && context != null) {
File tempDir = app.getAppPath(IndexConstants.TEMP_DIR);
if (!tempDir.exists()) {
tempDir.mkdirs();
}
String fileName = profile.toHumanString();
ProgressDialog progress = new ProgressDialog(context);
progress.setTitle(app.getString(R.string.export_profile));
progress.setMessage(app.getString(R.string.shared_string_preparing));
progress.setCancelable(false);
progress.show();
final WeakReference<ProgressDialog> progressRef = new WeakReference<>(progress);
app.getSettingsHelper().exportSettings(tempDir, fileName, new SettingsHelper.SettingsExportListener() {
@Override
public void onSettingsExportFinished(@NonNull File file, boolean succeed) {
ProgressDialog progress = progressRef.get();
if (progress != null) {
progress.dismiss();
}
if (succeed) {
shareProfile(file, profile);
} else {

View file

@ -2,6 +2,7 @@ package net.osmand.plus.settings;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Matrix;
@ -10,6 +11,7 @@ import android.graphics.PorterDuffColorFilter;
import android.graphics.drawable.GradientDrawable;
import android.graphics.drawable.LayerDrawable;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
@ -31,9 +33,11 @@ import android.widget.ImageView;
import android.widget.TextView;
import net.osmand.AndroidUtils;
import net.osmand.IndexConstants;
import net.osmand.PlatformUtil;
import net.osmand.plus.ApplicationMode;
import net.osmand.plus.R;
import net.osmand.plus.SettingsHelper;
import net.osmand.plus.UiUtilities;
import net.osmand.plus.UiUtilities.DialogButtonType;
import net.osmand.plus.profiles.LocationIcon;
@ -48,6 +52,8 @@ import net.osmand.util.Algorithms;
import org.apache.commons.logging.Log;
import java.io.File;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Collections;
@ -241,17 +247,8 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment {
public void onClick(View v) {
if (getActivity() != null) {
hideKeyboard();
if (isChanged()) {
if (saveProfile()) {
profile = changedProfile;
if (isNewProfile) {
ProfileAppearanceFragment.this.dismiss();
BaseSettingsFragment.showInstance(getMapActivity(), SettingsScreenType.CONFIGURE_PROFILE,
ApplicationMode.valueOfStringKey(changedProfile.stringKey, null));
} else {
getActivity().onBackPressed();
}
}
if (isChanged() && checkProfileName()) {
saveProfile();
}
}
}
@ -652,31 +649,21 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment {
baseProfileName.setText(Algorithms.capitalizeFirstLetter(mode.toHumanString()));
}
private boolean saveProfile() {
if (changedProfile.name.trim().isEmpty()) {
if (getActivity() != null) {
createWarningDialog(getActivity(),
R.string.profile_alert_need_profile_name_title, R.string.profile_alert_need_profile_name_msg, R.string.shared_string_dismiss).show();
private boolean checkProfileName() {
if (Algorithms.isBlank(changedProfile.name)) {
Activity activity = getActivity();
if (activity != null) {
createWarningDialog(activity, R.string.profile_alert_need_profile_name_title,
R.string.profile_alert_need_profile_name_msg, R.string.shared_string_dismiss).show();
}
return false;
}
if (isNewProfile) {
changedProfile.stringKey = getUniqueStringKey(changedProfile.parent);
ApplicationMode.ApplicationModeBuilder builder = ApplicationMode
.createCustomMode(changedProfile.parent, changedProfile.stringKey, app)
.setIconResName(ProfileIcons.getResStringByResId(changedProfile.iconRes))
.setUserProfileName(changedProfile.name.trim())
.setRoutingProfile(changedProfile.routingProfile)
.setRouteService(changedProfile.routeService)
.setIconColor(changedProfile.color)
.setLocationIcon(changedProfile.locationIcon)
.setNavigationIcon(changedProfile.navigationIcon);
return true;
}
app.getSettings().copyPreferencesFromProfile(changedProfile.parent, builder.getApplicationMode());
ApplicationMode mode = ApplicationMode.saveProfile(builder, app);
if (!ApplicationMode.values(app).contains(mode)) {
ApplicationMode.changeProfileAvailability(mode, true, app);
}
private void saveProfile() {
if (isNewProfile) {
showNewProfileSavingDialog();
} else {
ApplicationMode mode = getSelectedAppMode();
mode.setParentAppMode(changedProfile.parent);
@ -687,8 +674,86 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment {
mode.setIconColor(changedProfile.color);
mode.setLocationIcon(changedProfile.locationIcon);
mode.setNavigationIcon(changedProfile.navigationIcon);
profileSaved();
}
}
private ApplicationMode saveNewProfile() {
changedProfile.stringKey = getUniqueStringKey(changedProfile.parent);
ApplicationMode.ApplicationModeBuilder builder = ApplicationMode
.createCustomMode(changedProfile.parent, changedProfile.stringKey, app)
.setIconResName(ProfileIcons.getResStringByResId(changedProfile.iconRes))
.setUserProfileName(changedProfile.name.trim())
.setRoutingProfile(changedProfile.routingProfile)
.setRouteService(changedProfile.routeService)
.setIconColor(changedProfile.color)
.setLocationIcon(changedProfile.locationIcon)
.setNavigationIcon(changedProfile.navigationIcon);
app.getSettings().copyPreferencesFromProfile(changedProfile.parent, builder.getApplicationMode());
ApplicationMode mode = ApplicationMode.saveProfile(builder, app);
if (!ApplicationMode.values(app).contains(mode)) {
ApplicationMode.changeProfileAvailability(mode, true, app);
}
return mode;
}
private void saveProfileBackup(ApplicationMode mode, SettingsHelper.SettingsExportListener listener) {
if (app != null) {
File tempDir = app.getAppPath(IndexConstants.BACKUP_INDEX_DIR);
if (!tempDir.exists()) {
tempDir.mkdirs();
}
app.getSettingsHelper().exportSettings(tempDir, mode.getStringKey(), listener, new SettingsHelper.ProfileSettingsItem(app, mode));
}
}
private void showNewProfileSavingDialog() {
ProgressDialog progress = new ProgressDialog(getContext());
progress.setMessage(getString(R.string.saving_new_profile));
progress.setCancelable(false);
final WeakReference<ProgressDialog> progressRef = new WeakReference<>(progress);
final SettingsHelper.SettingsExportListener listener = new SettingsHelper.SettingsExportListener() {
@Override
public void onSettingsExportFinished(@NonNull File file, boolean succeed) {
ProgressDialog progress = progressRef.get();
if (progress != null) {
progress.dismiss();
}
if (succeed) {
profileSaved();
} else {
app.showToastMessage(R.string.profile_backup_failed);
}
}
};
progress.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
ApplicationMode mode = saveNewProfile();
saveProfileBackup(mode, listener);
}
});
progress.show();
}
private void profileSaved() {
FragmentActivity activity = getActivity();
if (activity != null) {
profile = changedProfile;
if (isNewProfile) {
ProfileAppearanceFragment.this.dismiss();
BaseSettingsFragment.showInstance(activity, SettingsScreenType.CONFIGURE_PROFILE,
ApplicationMode.valueOfStringKey(changedProfile.stringKey, null));
} else {
activity.onBackPressed();
}
}
return true;
}
private String getUniqueStringKey(ApplicationMode mode) {