diff options
Diffstat (limited to 'src/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java')
-rw-r--r-- | src/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java | 228 |
1 files changed, 228 insertions, 0 deletions
diff --git a/src/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java b/src/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java new file mode 100644 index 000000000..a02f0e67f --- /dev/null +++ b/src/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java @@ -0,0 +1,228 @@ +package de.danoeh.antennapod.activity; + +import java.io.File; +import java.util.ArrayList; + +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.Button; +import android.widget.TextView; +import android.widget.Toast; + +import com.actionbarsherlock.app.SherlockActivity; +import com.actionbarsherlock.view.Menu; +import com.actionbarsherlock.view.MenuItem; + +import de.danoeh.antennapod.AppConfig; +import de.danoeh.antennapod.PodcastApp; +import de.danoeh.antennapod.R; +import de.danoeh.antennapod.asynctask.OpmlFeedQueuer; +import de.danoeh.antennapod.asynctask.OpmlImportWorker; +import de.danoeh.antennapod.opml.OpmlElement; +import de.danoeh.antennapod.util.StorageUtils; + +/** Lets the user start the OPML-import process. */ +public class OpmlImportFromPathActivity extends SherlockActivity { + private static final String TAG = "OpmlImportActivity"; + + public static final String IMPORT_DIR = "import/"; + + private TextView txtvPath; + private Button butStart; + private String importPath; + + private OpmlImportWorker importWorker; + + @Override + protected void onCreate(Bundle savedInstanceState) { + setTheme(PodcastApp.getThemeResourceId()); + super.onCreate(savedInstanceState); + + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + setContentView(R.layout.opml_import); + + txtvPath = (TextView) findViewById(R.id.txtvPath); + butStart = (Button) findViewById(R.id.butStartImport); + + butStart.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + checkFolderForFiles(); + } + + }); + } + + @Override + protected void onResume() { + super.onResume(); + StorageUtils.checkStorageAvailability(this); + setImportPath(); + } + + /** + * Sets the importPath variable and makes txtvPath display the import + * directory. + */ + private void setImportPath() { + File importDir = PodcastApp.getDataFolder(this, IMPORT_DIR); + boolean success = true; + if (!importDir.exists()) { + if (AppConfig.DEBUG) + Log.d(TAG, "Import directory doesn't exist. Creating..."); + success = importDir.mkdir(); + if (!success) { + Log.e(TAG, "Could not create directory"); + } + } + if (success) { + txtvPath.setText(importDir.toString()); + importPath = importDir.toString(); + } else { + txtvPath.setText(R.string.opml_directory_error); + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + finish(); + return true; + default: + return false; + } + } + + /** + * Looks at the contents of the import directory and decides what to do. If + * more than one file is in the directory, a dialog will be created to let + * the user choose which item to import + * */ + private void checkFolderForFiles() { + File dir = new File(importPath); + if (dir.isDirectory()) { + File[] fileList = dir.listFiles(); + if (fileList.length == 1) { + if (AppConfig.DEBUG) + Log.d(TAG, "Found one file, choosing that one."); + startImport(fileList[0]); + } else if (fileList.length > 1) { + Log.w(TAG, "Import directory contains more than one file."); + askForFile(dir); + } else { + Log.e(TAG, "Import directory is empty"); + Toast toast = Toast + .makeText(this, R.string.opml_import_error_dir_empty, + Toast.LENGTH_LONG); + toast.show(); + } + } + } + + /** Starts the import process. */ + private void startImport(File file) { + + if (file != null) { + importWorker = new OpmlImportWorker(this, file) { + + @Override + protected void onPostExecute(ArrayList<OpmlElement> result) { + super.onPostExecute(result); + if (result != null) { + if (AppConfig.DEBUG) + Log.d(TAG, "Parsing was successful"); + OpmlImportHolder.setReadElements(result); + startActivityForResult(new Intent( + OpmlImportFromPathActivity.this, + OpmlFeedChooserActivity.class), 0); + } else { + if (AppConfig.DEBUG) + Log.d(TAG, "Parser error occured"); + } + } + }; + importWorker.executeAsync(); + } + } + + /** + * Asks the user to choose from a list of files in a directory and returns + * his choice. + */ + private void askForFile(File dir) { + final File[] fileList = dir.listFiles(); + String[] fileNames = dir.list(); + + AlertDialog.Builder dialog = new AlertDialog.Builder(this); + dialog.setTitle(R.string.choose_file_to_import_label); + dialog.setNeutralButton(android.R.string.cancel, + new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + if (AppConfig.DEBUG) + Log.d(TAG, "Dialog was cancelled"); + dialog.dismiss(); + } + }); + dialog.setItems(fileNames, new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + if (AppConfig.DEBUG) + Log.d(TAG, "File at index " + which + " was chosen"); + dialog.dismiss(); + startImport(fileList[which]); + } + }); + dialog.create().show(); + } + + /** + * Handles the choices made by the user in the OpmlFeedChooserActivity and + * starts the OpmlFeedQueuer if necessary. + */ + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (AppConfig.DEBUG) + Log.d(TAG, "Received result"); + if (resultCode == RESULT_CANCELED) { + if (AppConfig.DEBUG) + Log.d(TAG, "Activity was cancelled"); + } else { + int[] selected = data + .getIntArrayExtra(OpmlFeedChooserActivity.EXTRA_SELECTED_ITEMS); + if (selected != null && selected.length > 0) { + OpmlFeedQueuer queuer = new OpmlFeedQueuer(this, selected) { + + @Override + protected void onPostExecute(Void result) { + super.onPostExecute(result); + Intent intent = new Intent(OpmlImportFromPathActivity.this, MainActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP + | Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(intent); + } + + }; + queuer.executeAsync(); + } else { + if (AppConfig.DEBUG) + Log.d(TAG, "No items were selected"); + } + } + } + + +} |