diff --git a/app/build.gradle b/app/build.gradle index 9bc9c833..040cff37 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -40,7 +40,7 @@ dependencies { compile 'com.android.support:appcompat-v7:22.1.1' compile 'com.android.support:support-annotations:22.1.1' compile 'com.getbase:floatingactionbutton:1.8.0' - compile 'com.afollestad:material-dialogs:0.6.3.3' + compile 'com.afollestad:material-dialogs:0.7.6.0' compile 'com.nispok:snackbar:2.10.6' apt 'org.androidannotations:androidannotations:3.2' } diff --git a/app/src/main/java/org/transdroid/core/gui/ConfirmRemoveDialog.java b/app/src/main/java/org/transdroid/core/gui/ConfirmRemoveDialog.java new file mode 100644 index 00000000..675a160e --- /dev/null +++ b/app/src/main/java/org/transdroid/core/gui/ConfirmRemoveDialog.java @@ -0,0 +1,56 @@ +package org.transdroid.core.gui; + +import android.app.AlertDialog; +import android.app.DialogFragment; +import android.content.DialogInterface; +import android.content.DialogInterface.OnClickListener; + +import org.transdroid.R; +import org.transdroid.daemon.Daemon; +import org.transdroid.daemon.Torrent; + +import java.util.List; + +public class ConfirmRemoveDialog { + + /** + * Opens a dialog that confirms the removal of a torrent, along with an option for deleting downloaded files + * @param activity The torrents activity from which the dialog is started (and which received the callback) + * @param torrents List of torrents to be removed + */ + public static void startConfirmRemove(final TorrentsActivity activity, final List torrents) { + final CharSequence checkboxItems[] = {activity.getString(R.string.navigation_confirmdataremoval)}; + final boolean[] isRemoveDataChecked = {false}; + + new DialogFragment() { + public android.app.Dialog onCreateDialog(android.os.Bundle savedInstanceState) { + return new AlertDialog.Builder(activity).setTitle(R.string.navigation_confirmremove) + .setMultiChoiceItems(checkboxItems, null, new DialogInterface.OnMultiChoiceClickListener() { + @Override + public void onClick(DialogInterface dialog, int which, boolean isChecked) { + isRemoveDataChecked[0] = isChecked; + } + }) + .setPositiveButton(android.R.string.ok, new OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + for (Torrent torrent : torrents) { + boolean shouldRemoveData = isRemoveDataChecked[0] && + Daemon.supportsRemoveWithData(torrent.getDaemon()); + activity.removeTorrent(torrent, shouldRemoveData); + } + dialog.dismiss(); + } + }) + .setNegativeButton(android.R.string.cancel, new OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }) + .create(); + }; + }.show(activity.getFragmentManager(), "confirmremoval"); + } + +} diff --git a/app/src/main/java/org/transdroid/core/gui/DetailsFragment.java b/app/src/main/java/org/transdroid/core/gui/DetailsFragment.java index b6189e98..b9dcdda8 100644 --- a/app/src/main/java/org/transdroid/core/gui/DetailsFragment.java +++ b/app/src/main/java/org/transdroid/core/gui/DetailsFragment.java @@ -68,6 +68,7 @@ import org.transdroid.daemon.TorrentFile; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -293,9 +294,6 @@ public boolean onMenuItemClick(MenuItem menuItem) { case R.id.action_start_forced: startTorrentForced(); return true; - case R.id.action_remove_withdata: - removeTorrentWithData(); - return true; case R.id.action_stop: stopTorrent(); return true; @@ -308,8 +306,8 @@ public boolean onMenuItemClick(MenuItem menuItem) { case R.id.action_start_default: startTorrentDefault(); return true; - case R.id.action_remove_default: - removeTorrentDefault(); + case R.id.action_remove: + removeTorrent(); return true; case R.id.action_start_direct: startTorrentDirect(); @@ -335,7 +333,6 @@ private void updateMenuOptions() { detailsMenu.getMenu().findItem(R.id.action_start_direct).setVisible(false); detailsMenu.getMenu().findItem(R.id.action_stop).setVisible(false); detailsMenu.getMenu().findItem(R.id.action_remove).setVisible(false); - detailsMenu.getMenu().findItem(R.id.action_remove_withdata).setVisible(false); detailsMenu.getMenu().findItem(R.id.action_setlabel).setVisible(false); detailsMenu.getMenu().findItem(R.id.action_forcerecheck).setVisible(false); detailsMenu.getMenu().findItem(R.id.action_updatetrackers).setVisible(false); @@ -351,8 +348,6 @@ private void updateMenuOptions() { detailsMenu.getMenu().findItem(R.id.action_start_direct).setVisible(startStop && !forcedStart && torrent.canStart()); detailsMenu.getMenu().findItem(R.id.action_stop).setVisible(startStop && torrent.canStop()); detailsMenu.getMenu().findItem(R.id.action_remove).setVisible(true); - boolean removeWithData = Daemon.supportsRemoveWithData(torrent.getDaemon()); - detailsMenu.getMenu().findItem(R.id.action_remove_withdata).setVisible(removeWithData); boolean setLabel = Daemon.supportsSetLabel(torrent.getDaemon()); detailsMenu.getMenu().findItem(R.id.action_setlabel).setVisible(setLabel); boolean forceRecheck = Daemon.supportsForceRecheck(torrent.getDaemon()); @@ -394,14 +389,9 @@ protected void stopTorrent() { getTasksExecutor().stopTorrent(torrent); } - @OptionsItem(R.id.action_remove_default) - protected void removeTorrentDefault() { - getTasksExecutor().removeTorrent(torrent, false); - } - - @OptionsItem(R.id.action_remove_withdata) - protected void removeTorrentWithData() { - getTasksExecutor().removeTorrent(torrent, true); + @OptionsItem(resName = "action_remove") + protected void removeTorrent() { + ConfirmRemoveDialog.startConfirmRemove((TorrentsActivity) getActivity(), Arrays.asList(torrent)); } @OptionsItem(R.id.action_setlabel) diff --git a/app/src/main/java/org/transdroid/core/gui/TorrentsFragment.java b/app/src/main/java/org/transdroid/core/gui/TorrentsFragment.java index ede7e13f..9c9d28a7 100644 --- a/app/src/main/java/org/transdroid/core/gui/TorrentsFragment.java +++ b/app/src/main/java/org/transdroid/core/gui/TorrentsFragment.java @@ -339,16 +339,8 @@ public boolean onActionItemClicked(ActionMode mode, MenuItem item) { } mode.finish(); return true; - } else if (itemId == R.id.action_remove_default) { - for (Torrent torrent : checked) { - getTasksExecutor().removeTorrent(torrent, false); - } - mode.finish(); - return true; - } else if (itemId == R.id.action_remove_withdata) { - for (Torrent torrent : checked) { - getTasksExecutor().removeTorrent(torrent, true); - } + } else if (itemId == R.id.action_remove) { + ConfirmRemoveDialog.startConfirmRemove((TorrentsActivity) getActivity(), checked); mode.finish(); return true; } else if (itemId == R.id.action_setlabel) { diff --git a/app/src/main/java/org/transdroid/core/gui/settings/PreferenceCompatActivity.java b/app/src/main/java/org/transdroid/core/gui/settings/PreferenceCompatActivity.java index a25ba166..f6b12ff9 100644 --- a/app/src/main/java/org/transdroid/core/gui/settings/PreferenceCompatActivity.java +++ b/app/src/main/java/org/transdroid/core/gui/settings/PreferenceCompatActivity.java @@ -3,6 +3,7 @@ import android.content.res.Configuration; import android.os.Bundle; import android.preference.PreferenceActivity; +import android.support.annotation.Nullable; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatCallback; import android.support.v7.app.AppCompatDelegate; @@ -62,4 +63,10 @@ public void onSupportActionModeStarted(ActionMode actionMode) { public void onSupportActionModeFinished(ActionMode actionMode) { } + + @Nullable + @Override + public ActionMode onWindowStartingSupportActionMode(ActionMode.Callback callback) { + return null; + } } diff --git a/app/src/main/res/menu/fragment_details.xml b/app/src/main/res/menu/fragment_details.xml index 25f0ad5f..ad7b1c8b 100644 --- a/app/src/main/res/menu/fragment_details.xml +++ b/app/src/main/res/menu/fragment_details.xml @@ -62,14 +62,6 @@ android:orderInCategory="204" android:title="@string/action_remove" app:showAsAction="always"> - - - - - - - - + android:showAsAction="always" + android:title="@string/action_remove"> Select finished Invert selection Add torrent to… + Confirm torrent removal? + Also remove downloaded files? http://… STATUS: %1$s