diff options
Diffstat (limited to 'app')
6 files changed, 55 insertions, 224 deletions
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c17e2120a..5a685ae5d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -141,11 +141,6 @@ <activity android:name=".activity.StorageErrorActivity"> </activity> <activity - android:name=".activity.OpmlImportFromPathActivity" - android:configChanges="keyboardHidden|orientation|screenSize" - android:label="@string/opml_import_label"> - </activity> - <activity android:name=".activity.OpmlImportFromIntentActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:label="@string/opml_import_label"> diff --git a/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java deleted file mode 100644 index 158e3b7a4..000000000 --- a/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java +++ /dev/null @@ -1,111 +0,0 @@ -package de.danoeh.antennapod.activity; - -import android.content.ActivityNotFoundException; -import android.content.Intent; -import android.net.Uri; -import android.os.Bundle; -import android.util.Log; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import de.danoeh.antennapod.R; -import de.danoeh.antennapod.core.preferences.UserPreferences; -import de.danoeh.antennapod.core.util.IntentUtils; -import de.danoeh.antennapod.core.util.StorageUtils; - -/** - * Lets the user start the OPML-import process from a path - */ -public class OpmlImportFromPathActivity extends OpmlImportBaseActivity { - - private static final String TAG = "OpmlImportFromPathAct"; - - private static final int CHOOSE_OPML_FILE = 1; - - private Intent intentGetContentAction; - - @Override - protected void onCreate(Bundle savedInstanceState) { - setTheme(UserPreferences.getTheme()); - super.onCreate(savedInstanceState); - - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - setContentView(R.layout.opml_import); - - final TextView txtvHeaderExplanation = findViewById(R.id.txtvHeadingExplanation); - final TextView txtvExplanation = findViewById(R.id.txtvExplanation); - final TextView txtvHeaderExplanationOpenWith = findViewById(R.id.txtvHeadingExplanationOpenWith); - - Button butChooseFilesystem = findViewById(R.id.butChooseFileFromFilesystem); - butChooseFilesystem.setOnClickListener(v -> chooseFileFromExternal()); - - int nextOption = 1; - String optionLabel = getString(R.string.opml_import_option); - intentGetContentAction = new Intent(Intent.ACTION_GET_CONTENT); - intentGetContentAction.addCategory(Intent.CATEGORY_OPENABLE); - intentGetContentAction.setType("*/*"); - - if (IntentUtils.isCallable(getApplicationContext(), intentGetContentAction)) { - txtvHeaderExplanation.setText(String.format(optionLabel, nextOption)); - nextOption++; - } else { - txtvHeaderExplanation.setVisibility(View.GONE); - txtvExplanation.setVisibility(View.GONE); - findViewById(R.id.divider).setVisibility(View.GONE); - butChooseFilesystem.setVisibility(View.GONE); - } - - txtvHeaderExplanationOpenWith.setText(String.format(optionLabel, nextOption)); - } - - @Override - protected void onResume() { - super.onResume(); - StorageUtils.checkStorageAvailability(this); - } - - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - super.onCreateOptionsMenu(menu); - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case android.R.id.home: - finish(); - return true; - default: - return false; - } - } - - private void chooseFileFromExternal() { - try { - startActivityForResult(intentGetContentAction, CHOOSE_OPML_FILE); - } catch (ActivityNotFoundException e) { - Log.e(TAG, "No activity found. Should never happen..."); - } - } - - /** - * Gets the path of the file chosen with chooseFileToImport() - */ - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - if (resultCode == RESULT_OK && requestCode == CHOOSE_OPML_FILE) { - Uri uri = data.getData(); - if(uri != null && uri.toString().startsWith("/")) { - uri = Uri.parse("file://" + uri.toString()); - } - importUri(uri); - } - } - -} diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java index 2cfe7c1e8..bc58e0310 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java @@ -1,7 +1,11 @@ package de.danoeh.antennapod.fragment; +import android.app.Activity; +import android.content.ActivityNotFoundException; import android.content.Intent; +import android.net.Uri; import android.os.Bundle; +import android.util.Log; import androidx.fragment.app.Fragment; import android.view.ContextMenu; import android.view.LayoutInflater; @@ -11,11 +15,18 @@ import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; +import com.google.android.material.snackbar.Snackbar; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.activity.OnlineFeedViewActivity; -import de.danoeh.antennapod.activity.OpmlImportFromPathActivity; +import de.danoeh.antennapod.activity.OpmlImportFromIntentActivity; +import de.danoeh.antennapod.core.export.html.HtmlWriter; +import de.danoeh.antennapod.core.export.opml.OpmlWriter; +import de.danoeh.antennapod.core.storage.DatabaseExporter; import de.danoeh.antennapod.fragment.gpodnet.GpodnetMainFragment; +import io.reactivex.Completable; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.schedulers.Schedulers; /** * Provides actions for adding new podcast subscriptions @@ -28,6 +39,7 @@ public class AddFeedFragment extends Fragment { * Preset value for url text field. */ private static final String ARG_FEED_URL = "feedurl"; + private static final int REQUEST_CODE_CHOOSE_OPML_IMPORT_PATH = 1; private EditText combinedFeedSearchBox; private MainActivity activity; @@ -44,8 +56,16 @@ public class AddFeedFragment extends Fragment { setupSeachBox(root); View butOpmlImport = root.findViewById(R.id.btn_opml_import); - butOpmlImport.setOnClickListener(v -> startActivity(new Intent(getActivity(), - OpmlImportFromPathActivity.class))); + butOpmlImport.setOnClickListener(v -> { + try { + Intent intentGetContentAction = new Intent(Intent.ACTION_GET_CONTENT); + intentGetContentAction.addCategory(Intent.CATEGORY_OPENABLE); + intentGetContentAction.setType("*/*"); + startActivityForResult(intentGetContentAction, REQUEST_CODE_CHOOSE_OPML_IMPORT_PATH); + } catch (ActivityNotFoundException e) { + Log.e(TAG, "No activity found. Should never happen..."); + } + }); root.findViewById(R.id.search_icon).setOnClickListener(view -> performSearch()); return root; } @@ -130,4 +150,18 @@ public class AddFeedFragment extends Fragment { // persist. mfietz thinks this causes the ActionBar to be invalidated setHasOptionsMenu(true); } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (resultCode != Activity.RESULT_OK || data == null) { + return; + } + Uri uri = data.getData(); + + if (requestCode == REQUEST_CODE_CHOOSE_OPML_IMPORT_PATH) { + Intent intent = new Intent(getContext(), OpmlImportFromIntentActivity.class); + intent.setData(uri); + startActivity(intent); + } + } } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/ImportExportPreferencesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/ImportExportPreferencesFragment.java index f3d0acbe8..a6763947a 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/ImportExportPreferencesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/ImportExportPreferencesFragment.java @@ -18,7 +18,7 @@ import androidx.core.content.FileProvider; import androidx.preference.PreferenceFragmentCompat; import com.google.android.material.snackbar.Snackbar; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.activity.OpmlImportFromPathActivity; +import de.danoeh.antennapod.activity.OpmlImportFromIntentActivity; import de.danoeh.antennapod.activity.PreferenceActivity; import de.danoeh.antennapod.activity.SplashActivity; import de.danoeh.antennapod.asynctask.DocumentFileExportWorker; @@ -44,14 +44,15 @@ public class ImportExportPreferencesFragment extends PreferenceFragmentCompat { private static final String PREF_HTML_EXPORT = "prefHtmlExport"; private static final String PREF_DATABASE_IMPORT = "prefDatabaseImport"; private static final String PREF_DATABASE_EXPORT = "prefDatabaseExport"; - private static final int REQUEST_CODE_CHOOSE_OPML_EXPORT_PATH = 1; private static final String DEFAULT_OPML_OUTPUT_NAME = "antennapod-feeds.opml"; private static final String CONTENT_TYPE_OPML = "text/x-opml"; - private static final int REQUEST_CODE_CHOOSE_HTML_EXPORT_PATH = 2; private static final String DEFAULT_HTML_OUTPUT_NAME = "antennapod-feeds.html"; private static final String CONTENT_TYPE_HTML = "text/html"; - private static final int REQUEST_CODE_RESTORE_DATABASE = 3; - private static final int REQUEST_CODE_BACKUP_DATABASE = 4; + private static final int REQUEST_CODE_CHOOSE_OPML_EXPORT_PATH = 1; + private static final int REQUEST_CODE_CHOOSE_OPML_IMPORT_PATH = 2; + private static final int REQUEST_CODE_CHOOSE_HTML_EXPORT_PATH = 3; + private static final int REQUEST_CODE_RESTORE_DATABASE = 4; + private static final int REQUEST_CODE_BACKUP_DATABASE = 5; private static final String DATABASE_EXPORT_FILENAME = "AntennaPodBackup.db"; private Disposable disposable; private ProgressDialog progressDialog; @@ -96,7 +97,14 @@ public class ImportExportPreferencesFragment extends PreferenceFragmentCompat { }); findPreference(PREF_OPML_IMPORT).setOnPreferenceClickListener( preference -> { - activity.startActivity(new Intent(activity, OpmlImportFromPathActivity.class)); + try { + Intent intentGetContentAction = new Intent(Intent.ACTION_GET_CONTENT); + intentGetContentAction.addCategory(Intent.CATEGORY_OPENABLE); + intentGetContentAction.setType("*/*"); + startActivityForResult(intentGetContentAction, REQUEST_CODE_CHOOSE_OPML_IMPORT_PATH); + } catch (ActivityNotFoundException e) { + Log.e(TAG, "No activity found. Should never happen..."); + } return true; }); findPreference(PREF_DATABASE_IMPORT).setOnPreferenceClickListener( @@ -245,6 +253,10 @@ public class ImportExportPreferencesFragment extends PreferenceFragmentCompat { Snackbar.make(getView(), R.string.export_success_title, Snackbar.LENGTH_LONG).show(); progressDialog.dismiss(); }, this::showExportErrorDialog); + } else if (requestCode == REQUEST_CODE_CHOOSE_OPML_IMPORT_PATH) { + Intent intent = new Intent(getContext(), OpmlImportFromIntentActivity.class); + intent.setData(uri); + startActivity(intent); } } diff --git a/app/src/main/res/layout/import_export_activity.xml b/app/src/main/res/layout/import_export_activity.xml deleted file mode 100644 index 97ff34e41..000000000 --- a/app/src/main/res/layout/import_export_activity.xml +++ /dev/null @@ -1,34 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:orientation="vertical" - android:id="@+id/import_export_layout" - android:padding="8dp" - android:clipToPadding="false"> - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="vertical"> - - <TextView - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:text="@string/import_export_warning" - android:gravity="center_horizontal"/> - - <Button - android:text="@string/label_export" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:id="@+id/button_export" - android:layout_marginTop="24dp"/> - - <Button - android:text="@string/label_import" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:id="@+id/button_import"/> - </LinearLayout> -</ScrollView> diff --git a/app/src/main/res/layout/opml_import.xml b/app/src/main/res/layout/opml_import.xml deleted file mode 100644 index 9b2036228..000000000 --- a/app/src/main/res/layout/opml_import.xml +++ /dev/null @@ -1,65 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" - android:layout_height="match_parent"> - <LinearLayout - xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="vertical" - android:paddingTop="8dp" - android:paddingLeft="16dp" - android:paddingRight="16dp" - android:paddingBottom="8dp" - tools:background="@android:color/darker_gray"> - - <TextView - android:id="@+id/txtvHeadingExplanation" - android:layout_width="match_parent" - android:layout_height="wrap_content" - style="@style/AntennaPod.TextView.Heading" - android:text="@string/txtvfeedurl_label"/> - - <TextView - android:id="@+id/txtvExplanation" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:text="@string/opml_import_explanation_1" - android:textSize="@dimen/text_size_medium" - android:layout_marginTop="4dp" - tools:background="@android:color/holo_green_dark" /> - - <Button - android:id="@+id/butChooseFileFromFilesystem" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_gravity="center_horizontal" - android:layout_marginTop="8dp" - android:text="@string/choose_file_from_filesystem" /> - - <View - android:id="@+id/divider" - android:layout_width="fill_parent" - android:layout_height="1dp" - android:layout_margin="16dp" - android:background="?android:attr/listDivider"/> - - <TextView - android:id="@+id/txtvHeadingExplanationOpenWith" - android:layout_width="match_parent" - android:layout_height="wrap_content" - style="@style/AntennaPod.TextView.Heading" - android:text="@string/txtvfeedurl_label"/> - - <TextView - android:id="@+id/txtvExplanationOpenWith" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:text="@string/opml_import_explanation_3" - android:textSize="@dimen/text_size_medium" - android:layout_marginTop="4dp" - tools:background="@android:color/holo_green_dark" /> - - </LinearLayout> -</ScrollView> |