Add ability to check exported profile files
This commit is contained in:
parent
ca742998dc
commit
6262c8ca71
3 changed files with 79 additions and 21 deletions
|
@ -101,6 +101,7 @@ public class SettingsHelper {
|
|||
private boolean importSuspended;
|
||||
private boolean collectOnly;
|
||||
private ImportAsyncTask importTask;
|
||||
private Map<File, ExportAsyncTask> exportAsyncTasks = new HashMap<>();
|
||||
|
||||
public interface SettingsImportListener {
|
||||
void onSettingsImportFinished(boolean succeed, boolean empty, @NonNull List<SettingsItem> items);
|
||||
|
@ -1930,6 +1931,17 @@ public class SettingsHelper {
|
|||
return this.importTask.getFile();
|
||||
}
|
||||
|
||||
public boolean isFileExporting(File file) {
|
||||
return exportAsyncTasks.containsKey(file);
|
||||
}
|
||||
|
||||
public void updateExportListener(File file, SettingsExportListener listener) {
|
||||
ExportAsyncTask exportAsyncTask = exportAsyncTasks.get(file);
|
||||
if (exportAsyncTask != null) {
|
||||
exportAsyncTask.listener = listener;
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("StaticFieldLeak")
|
||||
private class ImportItemsAsyncTask extends AsyncTask<Void, Void, Boolean> {
|
||||
|
||||
|
@ -2008,6 +2020,7 @@ public class SettingsHelper {
|
|||
|
||||
@Override
|
||||
protected void onPostExecute(Boolean success) {
|
||||
exportAsyncTasks.remove(file);
|
||||
if (listener != null) {
|
||||
listener.onSettingsExportFinished(file, success);
|
||||
}
|
||||
|
@ -2022,11 +2035,11 @@ public class SettingsHelper {
|
|||
new ImportAsyncTask(settingsFile, items, latestChanges, version, listener).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
}
|
||||
|
||||
public void exportSettings(@NonNull File fileDir, @NonNull String fileName,
|
||||
@Nullable SettingsExportListener listener,
|
||||
@NonNull List<SettingsItem> items) {
|
||||
new ExportAsyncTask(new File(fileDir, fileName + OSMAND_SETTINGS_FILE_EXT), listener, items)
|
||||
.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
public void exportSettings(@NonNull File fileDir, @NonNull String fileName, @Nullable SettingsExportListener listener, @NonNull List<SettingsItem> items) {
|
||||
File file = new File(fileDir, fileName + OSMAND_SETTINGS_FILE_EXT);
|
||||
ExportAsyncTask exportAsyncTask = new ExportAsyncTask(file, listener, items);
|
||||
exportAsyncTasks.put(file, exportAsyncTask);
|
||||
exportAsyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
}
|
||||
|
||||
public void exportSettings(@NonNull File fileDir, @NonNull String fileName, @Nullable SettingsExportListener listener,
|
||||
|
|
|
@ -168,7 +168,7 @@ public class ConfigureProfileFragment extends BaseSettingsFragment implements Co
|
|||
public void resetAppModePrefs(ApplicationMode appMode) {
|
||||
if (appMode != null) {
|
||||
if (appMode.isCustomProfile()) {
|
||||
File file = getBackupFileForCustomMode(appMode);
|
||||
File file = getBackupFileForCustomMode(app, appMode.getStringKey());
|
||||
if (file.exists()) {
|
||||
restoreCustomModeFromFile(file);
|
||||
}
|
||||
|
@ -204,16 +204,6 @@ public class ConfigureProfileFragment extends BaseSettingsFragment implements Co
|
|||
});
|
||||
}
|
||||
|
||||
private File getBackupFileForCustomMode(ApplicationMode appMode) {
|
||||
String fileName = appMode.getStringKey() + IndexConstants.OSMAND_SETTINGS_FILE_EXT;
|
||||
File backupDir = app.getAppPath(IndexConstants.BACKUP_INDEX_DIR);
|
||||
if (!backupDir.exists()) {
|
||||
backupDir.mkdirs();
|
||||
}
|
||||
|
||||
return new File(backupDir, fileName);
|
||||
}
|
||||
|
||||
private void updateCopiedOrResetPrefs() {
|
||||
MapActivity mapActivity = getMapActivity();
|
||||
if (mapActivity != null) {
|
||||
|
@ -346,8 +336,8 @@ public class ConfigureProfileFragment extends BaseSettingsFragment implements Co
|
|||
|
||||
private void setupResetToDefaultPref() {
|
||||
Preference resetToDefault = findPreference(RESET_TO_DEFAULT);
|
||||
if (getSelectedAppMode().isCustomProfile()
|
||||
&& !getBackupFileForCustomMode(getSelectedAppMode()).exists()) {
|
||||
ApplicationMode mode = getSelectedAppMode();
|
||||
if (mode.isCustomProfile() && !getBackupFileForCustomMode(app, mode.getStringKey()).exists()) {
|
||||
resetToDefault.setVisible(false);
|
||||
} else {
|
||||
resetToDefault.setIcon(app.getUIUtilities().getIcon(R.drawable.ic_action_reset_to_default_dark,
|
||||
|
@ -470,4 +460,14 @@ public class ConfigureProfileFragment extends BaseSettingsFragment implements Co
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static File getBackupFileForCustomMode(OsmandApplication app, String appModeKey) {
|
||||
String fileName = appModeKey + IndexConstants.OSMAND_SETTINGS_FILE_EXT;
|
||||
File backupDir = app.getAppPath(IndexConstants.BACKUP_INDEX_DIR);
|
||||
if (!backupDir.exists()) {
|
||||
backupDir.mkdirs();
|
||||
}
|
||||
|
||||
return new File(backupDir, fileName);
|
||||
}
|
||||
}
|
|
@ -53,7 +53,6 @@ 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;
|
||||
|
||||
|
@ -69,6 +68,7 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment {
|
|||
private static final Log LOG = PlatformUtil.getLog(ProfileAppearanceFragment.class);
|
||||
|
||||
public static final String TAG = ProfileAppearanceFragment.class.getName();
|
||||
|
||||
private static final String MASTER_PROFILE = "master_profile";
|
||||
private static final String PROFILE_NAME = "profile_name";
|
||||
private static final String SELECT_COLOR = "select_color";
|
||||
|
@ -89,7 +89,13 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment {
|
|||
public static final String PROFILE_NAVIGATION_ICON_KEY = "profile_navigation_icon_key";
|
||||
public static final String BASE_PROFILE_FOR_NEW = "base_profile_for_new";
|
||||
public static final String IS_BASE_PROFILE_IMPORTED = "is_base_profile_imported";
|
||||
public static final String IS_NEW_PROFILE_KEY = "is_new_profile_key";
|
||||
|
||||
private SelectProfileBottomSheetDialogFragment.SelectProfileListener parentProfileListener;
|
||||
private SettingsHelper.SettingsExportListener exportListener;
|
||||
|
||||
private ProgressDialog progress;
|
||||
|
||||
private EditText baseProfileName;
|
||||
private ApplicationProfileObject profile;
|
||||
private ApplicationProfileObject changedProfile;
|
||||
|
@ -108,6 +114,7 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment {
|
|||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
profile = new ApplicationProfileObject();
|
||||
exportListener = getSettingsExportListener();
|
||||
ApplicationMode baseModeForNewProfile = null;
|
||||
if (getArguments() != null) {
|
||||
Bundle arguments = getArguments();
|
||||
|
@ -139,8 +146,8 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment {
|
|||
changedProfile.routeService = profile.routeService;
|
||||
changedProfile.locationIcon = profile.locationIcon;
|
||||
changedProfile.navigationIcon = profile.navigationIcon;
|
||||
isNewProfile = ApplicationMode.valueOfStringKey(changedProfile.stringKey, null) == null;
|
||||
}
|
||||
isNewProfile = ApplicationMode.valueOfStringKey(changedProfile.stringKey, null) == null;
|
||||
}
|
||||
|
||||
public void setupAppProfileObjectFromAppMode(ApplicationMode baseModeForNewProfile) {
|
||||
|
@ -275,6 +282,7 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment {
|
|||
if (changedProfile.parent != null) {
|
||||
outState.putString(PROFILE_PARENT_KEY, changedProfile.parent.getStringKey());
|
||||
}
|
||||
outState.putBoolean(IS_NEW_PROFILE_KEY, isNewProfile);
|
||||
outState.putBoolean(IS_BASE_PROFILE_IMPORTED, isBaseProfileImported);
|
||||
outState.putSerializable(PROFILE_LOCATION_ICON_KEY, changedProfile.locationIcon);
|
||||
outState.putSerializable(PROFILE_NAVIGATION_ICON_KEY, changedProfile.navigationIcon);
|
||||
|
@ -290,6 +298,7 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment {
|
|||
isBaseProfileImported = savedInstanceState.getBoolean(IS_BASE_PROFILE_IMPORTED);
|
||||
changedProfile.locationIcon = (LocationIcon) savedInstanceState.getSerializable(PROFILE_LOCATION_ICON_KEY);
|
||||
changedProfile.navigationIcon = (NavigationIcon) savedInstanceState.getSerializable(PROFILE_NAVIGATION_ICON_KEY);
|
||||
isNewProfile = savedInstanceState.getBoolean(IS_NEW_PROFILE_KEY);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -635,6 +644,27 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment {
|
|||
return parentProfileListener;
|
||||
}
|
||||
|
||||
public SettingsHelper.SettingsExportListener getSettingsExportListener() {
|
||||
if (exportListener == null) {
|
||||
exportListener = new SettingsHelper.SettingsExportListener() {
|
||||
|
||||
@Override
|
||||
public void onSettingsExportFinished(@NonNull File file, boolean succeed) {
|
||||
FragmentActivity activity = getActivity();
|
||||
if (progress != null && activity != null && AndroidUtils.isActivityNotDestroyed(activity)) {
|
||||
progress.dismiss();
|
||||
}
|
||||
if (succeed) {
|
||||
customProfileSaved();
|
||||
} else {
|
||||
app.showToastMessage(R.string.profile_backup_failed);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
return exportListener;
|
||||
}
|
||||
|
||||
void updateParentProfile(String profileKey, boolean isBaseProfileImported) {
|
||||
deleteImportedProfile();
|
||||
setupBaseProfileView(profileKey);
|
||||
|
@ -675,7 +705,10 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment {
|
|||
mode.setLocationIcon(changedProfile.locationIcon);
|
||||
mode.setNavigationIcon(changedProfile.navigationIcon);
|
||||
|
||||
profileSaved();
|
||||
FragmentActivity activity = getActivity();
|
||||
if (activity != null) {
|
||||
activity.onBackPressed();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -761,6 +794,18 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment {
|
|||
}
|
||||
}
|
||||
|
||||
private void customProfileSaved() {
|
||||
FragmentActivity activity = getActivity();
|
||||
if (activity != null) {
|
||||
FragmentManager fragmentManager = activity.getSupportFragmentManager();
|
||||
if (!fragmentManager.isStateSaved()) {
|
||||
fragmentManager.popBackStack();
|
||||
BaseSettingsFragment.showInstance(activity, SettingsScreenType.CONFIGURE_PROFILE,
|
||||
ApplicationMode.valueOfStringKey(changedProfile.stringKey, null));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String getUniqueStringKey(ApplicationMode mode) {
|
||||
return mode.getStringKey() + "_" + System.currentTimeMillis();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue