diff --git a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java index 9af3666a6..3fd44c4d5 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java @@ -1,6 +1,5 @@ package org.schabi.newpipe.settings; -import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.content.Intent; @@ -26,7 +25,6 @@ import org.schabi.newpipe.error.ReCaptchaActivity; import org.schabi.newpipe.extractor.NewPipe; import org.schabi.newpipe.extractor.localization.ContentCountry; import org.schabi.newpipe.extractor.localization.Localization; -import org.schabi.newpipe.util.FilePathUtils; import org.schabi.newpipe.util.FilePickerActivityHelper; import org.schabi.newpipe.util.ZipHelper; @@ -43,8 +41,6 @@ public class ContentSettingsFragment extends BasePreferenceFragment { private ContentSettingsManager manager; - private String importExportDataPathKey; - private String thumbnailLoadToggleKey; private String youtubeRestrictedModeEnabledKey; @@ -60,7 +56,6 @@ public class ContentSettingsFragment extends BasePreferenceFragment { addPreferencesFromResource(R.xml.content_settings); - importExportDataPathKey = getString(R.string.import_export_data_path); final Preference importDataPreference = findPreference(getString(R.string.import_data)); importDataPreference.setOnPreferenceClickListener(p -> { final Intent i = new Intent(getActivity(), FilePickerActivityHelper.class) @@ -68,10 +63,6 @@ public class ContentSettingsFragment extends BasePreferenceFragment { .putExtra(FilePickerActivityHelper.EXTRA_ALLOW_CREATE_DIR, false) .putExtra(FilePickerActivityHelper.EXTRA_MODE, FilePickerActivityHelper.MODE_FILE); - final String path = defaultPreferences.getString(importExportDataPathKey, ""); - if (FilePathUtils.isValidDirectoryPath(path)) { - i.putExtra(FilePickerActivityHelper.EXTRA_START_PATH, path); - } startActivityForResult(i, REQUEST_IMPORT_PATH); return true; }); @@ -83,10 +74,6 @@ public class ContentSettingsFragment extends BasePreferenceFragment { .putExtra(FilePickerActivityHelper.EXTRA_ALLOW_CREATE_DIR, true) .putExtra(FilePickerActivityHelper.EXTRA_MODE, FilePickerActivityHelper.MODE_DIR); - final String path = defaultPreferences.getString(importExportDataPathKey, ""); - if (FilePathUtils.isValidDirectoryPath(path)) { - i.putExtra(FilePickerActivityHelper.EXTRA_START_PATH, path); - } startActivityForResult(i, REQUEST_EXPORT_PATH); return true; }); @@ -177,15 +164,15 @@ public class ContentSettingsFragment extends BasePreferenceFragment { if ((requestCode == REQUEST_IMPORT_PATH || requestCode == REQUEST_EXPORT_PATH) && resultCode == Activity.RESULT_OK && data.getData() != null) { - final File file = Utils.getFileForUri(data.getData()); - + final String path = Utils.getFileForUri(data.getData()).getAbsolutePath(); if (requestCode == REQUEST_EXPORT_PATH) { - exportDatabase(file); + final SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.US); + exportDatabase(path + "/NewPipeData-" + sdf.format(new Date()) + ".zip"); } else { final AlertDialog.Builder builder = new AlertDialog.Builder(requireActivity()); builder.setMessage(R.string.override_current_data) .setPositiveButton(getString(R.string.finish), - (d, id) -> importDatabase(file)) + (d, id) -> importDatabase(path)) .setNegativeButton(android.R.string.cancel, (d, id) -> d.cancel()); builder.create().show(); @@ -193,34 +180,26 @@ public class ContentSettingsFragment extends BasePreferenceFragment { } } - private void exportDatabase(@NonNull final File folder) { + private void exportDatabase(final String path) { try { - final SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.US); - final String path = folder.getAbsolutePath() + "/NewPipeData-" - + sdf.format(new Date()) + ".zip"; - //checkpoint before export NewPipeDatabase.checkpoint(); final SharedPreferences preferences = PreferenceManager - .getDefaultSharedPreferences(requireContext()); + .getDefaultSharedPreferences(requireContext()); manager.exportDatabase(preferences, path); - setImportExportDataPath(folder, false); - Toast.makeText(getContext(), R.string.export_complete_toast, Toast.LENGTH_SHORT).show(); } catch (final Exception e) { ErrorActivity.reportUiErrorInSnackbar(this, "Exporting database", e); } } - private void importDatabase(@NonNull final File file) { - final String filePath = file.getAbsolutePath(); - + private void importDatabase(final String filePath) { // check if file is supported if (!ZipHelper.isValidZipFile(filePath)) { Toast.makeText(getContext(), R.string.no_valid_zip_file, Toast.LENGTH_SHORT) - .show(); + .show(); return; } @@ -231,7 +210,7 @@ public class ContentSettingsFragment extends BasePreferenceFragment { if (!manager.extractDb(filePath)) { Toast.makeText(getContext(), R.string.could_not_import_all_files, Toast.LENGTH_LONG) - .show(); + .show(); } //If settings file exist, ask if it should be imported. @@ -241,58 +220,23 @@ public class ContentSettingsFragment extends BasePreferenceFragment { alert.setNegativeButton(android.R.string.no, (dialog, which) -> { dialog.dismiss(); - finishImport(file); + // restart app to properly load db + System.exit(0); }); alert.setPositiveButton(getString(R.string.finish), (dialog, which) -> { dialog.dismiss(); manager.loadSharedPreferences(PreferenceManager - .getDefaultSharedPreferences(requireContext())); - finishImport(file); + .getDefaultSharedPreferences(requireContext())); + // restart app to properly load db + System.exit(0); }); alert.show(); } else { - finishImport(file); + // restart app to properly load db + System.exit(0); } } catch (final Exception e) { ErrorActivity.reportUiErrorInSnackbar(this, "Importing database", e); } } - - /** - * Save import path and restart system. - * - * @param file The file of the created backup - */ - private void finishImport(@NonNull final File file) { - if (file.getParentFile() != null) { - //immediately because app is about to exit - setImportExportDataPath(file.getParentFile(), true); - } - - // restart app to properly load db - System.exit(0); - } - - @SuppressLint("ApplySharedPref") - private void setImportExportDataPath(@NonNull final File file, final boolean immediately) { - final String directoryPath; - if (file.isDirectory()) { - directoryPath = file.getAbsolutePath(); - } else { - final File parentFile = file.getParentFile(); - if (parentFile != null) { - directoryPath = parentFile.getAbsolutePath(); - } else { - directoryPath = ""; - } - } - final SharedPreferences.Editor editor = defaultPreferences - .edit() - .putString(importExportDataPathKey, directoryPath); - if (immediately) { - editor.commit(); - } else { - editor.apply(); - } - } } diff --git a/app/src/main/java/org/schabi/newpipe/util/FilePathUtils.java b/app/src/main/java/org/schabi/newpipe/util/FilePathUtils.java deleted file mode 100644 index 4162e563a..000000000 --- a/app/src/main/java/org/schabi/newpipe/util/FilePathUtils.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.schabi.newpipe.util; - -import java.io.File; - -public final class FilePathUtils { - private FilePathUtils() { } - - - /** - * Check that the path is a valid directory path and it exists. - * - * @param path full path of directory, - * @return is path valid or not - */ - public static boolean isValidDirectoryPath(final String path) { - if (path == null || path.isEmpty()) { - return false; - } - final File file = new File(path); - return file.exists() && file.isDirectory(); - } -} diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml index c23e81fbe..fd6cc7251 100644 --- a/app/src/main/res/values/settings_keys.xml +++ b/app/src/main/res/values/settings_keys.xml @@ -265,7 +265,6 @@ feed_use_dedicated_fetch_method - import_export_data_path import_data export_data diff --git a/app/src/test/java/org/schabi/newpipe/util/FilePathHelperTest.java b/app/src/test/java/org/schabi/newpipe/util/FilePathHelperTest.java deleted file mode 100644 index 3c9f12720..000000000 --- a/app/src/test/java/org/schabi/newpipe/util/FilePathHelperTest.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.schabi.newpipe.util; - -import org.junit.Before; -import org.junit.Test; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -public class FilePathHelperTest { - - private Path dir; - - @Before - public void setUp() throws IOException { - dir = Files.createTempDirectory("dir1"); - } - - @Test - public void testIsValidDirectoryPathWithEmptyString() { - assertFalse(FilePathUtils.isValidDirectoryPath("")); - } - - @Test - public void testIsValidDirectoryPathWithNullString() { - assertFalse(FilePathUtils.isValidDirectoryPath(null)); - } - - @Test - public void testIsValidDirectoryPathWithValidPath() { - assertTrue(FilePathUtils.isValidDirectoryPath(dir.toAbsolutePath().toString())); - } - - @Test - public void testIsValidDirectoryPathWithDeepValidDirectory() throws IOException { - final File subDir = Files.createDirectory(dir.resolve("subdir")).toFile(); - assertTrue(FilePathUtils.isValidDirectoryPath(subDir.getAbsolutePath())); - } - - @Test - public void testIsValidDirectoryPathWithNotExistDirectory() { - assertFalse(FilePathUtils.isValidDirectoryPath(dir.resolve("not-exists-subdir"). - toFile().getAbsolutePath())); - } - - @Test - public void testIsValidDirectoryPathWithFile() throws IOException { - final File tempFile = Files.createFile(dir.resolve("simple_file")).toFile(); - assertFalse(FilePathUtils.isValidDirectoryPath(tempFile.getAbsolutePath())); - } - -}