From 66121d606ed07608e61aeb43e4847e9c2df8cbbd Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Sat, 28 Feb 2015 02:33:19 +0100 Subject: Implementation of AntennaPod/AntennaPod#623 Instead of having a fixed path, the user can now choose the path to import from via dialog. This made the rather bloated instruction text superfluous. Some minor changes to the DirectoryChooserActivity and the OMPL Import layout. --- .../activity/DirectoryChooserActivity.java | 29 ++++++++++++----- .../activity/OpmlImportFromPathActivity.java | 37 ++++++++++++++++++++-- .../preferences/PreferenceController.java | 7 ++-- 3 files changed, 59 insertions(+), 14 deletions(-) (limited to 'app/src/main/java') diff --git a/app/src/main/java/de/danoeh/antennapod/activity/DirectoryChooserActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/DirectoryChooserActivity.java index 559fa0574..303af3334 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/DirectoryChooserActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/DirectoryChooserActivity.java @@ -15,17 +15,24 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; -import android.widget.*; +import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; -import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.R; -import de.danoeh.antennapod.core.preferences.UserPreferences; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.ImageButton; +import android.widget.ListView; +import android.widget.TextView; +import android.widget.Toast; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.R; +import de.danoeh.antennapod.core.preferences.UserPreferences; + /** * Let's the user choose a directory on the storage device. The selected folder * will be sent back to the starting activity as an activity result. @@ -37,6 +44,7 @@ public class DirectoryChooserActivity extends ActionBarActivity { public static final String RESULT_SELECTED_DIR = "selected_dir"; public static final int RESULT_CODE_DIR_SELECTED = 1; + public static final String NON_EMPTY_DIRECTORY_WARNING = "warn_non_empty_directory"; private Button butConfirm; private Button butCancel; @@ -52,6 +60,8 @@ public class DirectoryChooserActivity extends ActionBarActivity { private FileObserver fileObserver; + private boolean warnNonEmptyDirectory = false; + @Override protected void onCreate(Bundle savedInstanceState) { setTheme(UserPreferences.getTheme()); @@ -65,15 +75,18 @@ public class DirectoryChooserActivity extends ActionBarActivity { txtvSelectedFolder = (TextView) findViewById(R.id.txtvSelectedFolder); listDirectories = (ListView) findViewById(R.id.directory_list); - butConfirm.setOnClickListener(new OnClickListener() { + if(getIntent().getExtras() != null) { + warnNonEmptyDirectory = getIntent().getExtras().getBoolean(NON_EMPTY_DIRECTORY_WARNING, false); + } + butConfirm.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (isValidFile(selectedDir)) { - if (selectedDir.list().length == 0) { - returnSelectedFolder(); + if(warnNonEmptyDirectory && selectedDir.list().length > 0) { + showNonEmptyDirectoryWarning(); } else { - showNonEmptyDirectoryWarning(); + returnSelectedFolder(); } } } diff --git a/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java index 162a8f2e5..07fa6d21d 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java @@ -2,6 +2,7 @@ package de.danoeh.antennapod.activity; import android.app.AlertDialog; import android.content.DialogInterface; +import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.Menu; @@ -11,20 +12,26 @@ import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.InputStreamReader; +import java.io.Reader; + import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.R; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.util.LangUtils; import de.danoeh.antennapod.core.util.StorageUtils; -import java.io.*; - /** * Lets the user start the OPML-import process from a path */ public class OpmlImportFromPathActivity extends OpmlImportBaseActivity { private static final String TAG = "OpmlImportFromPathActivity"; private TextView txtvPath; + private Button butChoose; private Button butStart; private String importPath; @@ -36,9 +43,20 @@ public class OpmlImportFromPathActivity extends OpmlImportBaseActivity { getSupportActionBar().setDisplayHomeAsUpEnabled(true); setContentView(R.layout.opml_import); + butChoose = (Button)findViewById(R.id.butChoosePath); txtvPath = (TextView) findViewById(R.id.txtvPath); butStart = (Button) findViewById(R.id.butStartImport); + butChoose.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + startActivityForResult( + new Intent(OpmlImportFromPathActivity.this, + DirectoryChooserActivity.class), + DirectoryChooserActivity.RESULT_CODE_DIR_SELECTED + ); + } + }); butStart.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { @@ -46,13 +64,13 @@ public class OpmlImportFromPathActivity extends OpmlImportBaseActivity { } }); + setImportPath(); } @Override protected void onResume() { super.onResume(); StorageUtils.checkStorageAvailability(this); - setImportPath(); } /** @@ -167,5 +185,18 @@ public class OpmlImportFromPathActivity extends OpmlImportBaseActivity { dialog.create().show(); } + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + Log.d(TAG, "activity result: " + requestCode + " " + resultCode); + if (requestCode == DirectoryChooserActivity.RESULT_CODE_DIR_SELECTED) { + if (resultCode == DirectoryChooserActivity.RESULT_CODE_DIR_SELECTED) { + String dir = data + .getStringExtra(DirectoryChooserActivity.RESULT_SELECTED_DIR); + Log.d(TAG, dir); + txtvPath.setText(dir); + importPath = dir.toString(); + } + } + } } diff --git a/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java b/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java index ffac05321..a8636874d 100644 --- a/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java +++ b/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java @@ -163,9 +163,10 @@ public class PreferenceController { @Override public boolean onPreferenceClick(Preference preference) { - activity.startActivityForResult( - new Intent(activity, - DirectoryChooserActivity.class), + Intent intent = new Intent(activity, + DirectoryChooserActivity.class); + intent.putExtra(DirectoryChooserActivity.NON_EMPTY_DIRECTORY_WARNING, true); + activity.startActivityForResult(intent, DirectoryChooserActivity.RESULT_CODE_DIR_SELECTED ); return true; -- cgit v1.2.3 From a4111359313f1ca8e52d0c73765cbf5b987d0b09 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Sun, 1 Mar 2015 12:55:38 +0100 Subject: Add ability to select OPML export folder Instead of exporting a OPML file to a predefined folder the user can choose the folder (but not the filename) the file will be exported --- .../activity/DirectoryChooserActivity.java | 3 +-- .../antennapod/asynctask/OpmlExportWorker.java | 4 ++-- .../preferences/PreferenceController.java | 28 ++++++++++++++++------ 3 files changed, 24 insertions(+), 11 deletions(-) (limited to 'app/src/main/java') diff --git a/app/src/main/java/de/danoeh/antennapod/activity/DirectoryChooserActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/DirectoryChooserActivity.java index 303af3334..fcd2680fa 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/DirectoryChooserActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/DirectoryChooserActivity.java @@ -5,7 +5,6 @@ import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; -import android.os.Environment; import android.os.FileObserver; import android.support.v4.app.NavUtils; import android.support.v7.app.ActionBarActivity; @@ -158,7 +157,7 @@ public class DirectoryChooserActivity extends ActionBarActivity { listDirectoriesAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, filenames); listDirectories.setAdapter(listDirectoriesAdapter); - changeDirectory(Environment.getExternalStorageDirectory()); + changeDirectory(UserPreferences.getDataFolder(this, null)); } /** diff --git a/app/src/main/java/de/danoeh/antennapod/asynctask/OpmlExportWorker.java b/app/src/main/java/de/danoeh/antennapod/asynctask/OpmlExportWorker.java index 6bba956a6..68e144b40 100644 --- a/app/src/main/java/de/danoeh/antennapod/asynctask/OpmlExportWorker.java +++ b/app/src/main/java/de/danoeh/antennapod/asynctask/OpmlExportWorker.java @@ -24,10 +24,10 @@ import de.danoeh.antennapod.core.util.LangUtils; */ public class OpmlExportWorker extends AsyncTask { private static final String TAG = "OpmlExportWorker"; - private static final String DEFAULT_OUTPUT_NAME = "antennapod-feeds.opml"; + public static final String DEFAULT_OUTPUT_NAME = "antennapod-feeds.opml"; public static final String EXPORT_DIR = "export/"; - private Context context; + private final Context context; private File output; private ProgressDialog progDialog; diff --git a/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java b/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java index a8636874d..b608a0919 100644 --- a/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java +++ b/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java @@ -61,6 +61,8 @@ public class PreferenceController { public static final String PREF_EXPANDED_NOTIFICATION = "prefExpandNotify"; private static final String PREF_PERSISTENT_NOTIFICATION = "prefPersistNotify"; + private static final int REQUEST_CHOOSE_DATA_DIR = 1; + private static final int REQUEST_CHOOSE_OMPL_EXPORT_DIR = 2; private final PreferenceUI ui; @@ -150,9 +152,12 @@ public class PreferenceController { @Override public boolean onPreferenceClick(Preference preference) { - new OpmlExportWorker(activity) - .executeAsync(); - + Intent intent = new Intent(activity, + DirectoryChooserActivity.class); + intent.putExtra(DirectoryChooserActivity.NON_EMPTY_DIRECTORY_WARNING, false); + activity.startActivityForResult(intent, + REQUEST_CHOOSE_OMPL_EXPORT_DIR + ); return true; } } @@ -167,7 +172,7 @@ public class PreferenceController { DirectoryChooserActivity.class); intent.putExtra(DirectoryChooserActivity.NON_EMPTY_DIRECTORY_WARNING, true); activity.startActivityForResult(intent, - DirectoryChooserActivity.RESULT_CODE_DIR_SELECTED + REQUEST_CHOOSE_DATA_DIR ); return true; } @@ -312,9 +317,18 @@ public class PreferenceController { if (resultCode == DirectoryChooserActivity.RESULT_CODE_DIR_SELECTED) { String dir = data .getStringExtra(DirectoryChooserActivity.RESULT_SELECTED_DIR); - if (BuildConfig.DEBUG) - Log.d(TAG, "Setting data folder"); - UserPreferences.setDataFolder(dir); + switch(requestCode) { + case REQUEST_CHOOSE_DATA_DIR: + if (BuildConfig.DEBUG) + Log.d(TAG, "Setting data folder"); + UserPreferences.setDataFolder(dir); + break; + case REQUEST_CHOOSE_OMPL_EXPORT_DIR: + File path = new File(dir, OpmlExportWorker.DEFAULT_OUTPUT_NAME); + new OpmlExportWorker(ui.getActivity(), path) + .executeAsync(); + break; + } } } -- cgit v1.2.3