From b3fbb0ec7574cf1090bfb410589753ba8ef51bbb Mon Sep 17 00:00:00 2001 From: Petar Kukolj Date: Wed, 14 Nov 2018 16:18:58 +0100 Subject: Add configurable behavior of the back button This PR allows users to change how the back button functions. Closes #2196 Possible choices are following: - **Default** - back button functions how it currently functions (closes the app if there is nowhere to go back to) - **Open navigation drawer** - back button always opens the navigation drawer instead of closing the app - **Double tap to exit** - like default, but requires two taps to close the app - **Confirm to exit** - like default, but prompts user if they really want to exit --- .../danoeh/antennapod/activity/MainActivity.java | 31 +++++++++++++++++++++- .../main/res/xml/preferences_user_interface.xml | 10 +++++++ 2 files changed, 40 insertions(+), 1 deletion(-) (limited to 'app/src/main') diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java index f506921d2..fffd751c9 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -27,6 +27,7 @@ import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; +import android.widget.Toast; import com.bumptech.glide.Glide; @@ -123,6 +124,8 @@ public class MainActivity extends CastEnabledActivity implements NavDrawerActivi private Subscription subscription; + private long lastBackButtonPressTime = 0; + @Override public void onCreate(Bundle savedInstanceState) { setTheme(UserPreferences.getNoTitleTheme()); @@ -646,7 +649,33 @@ public class MainActivity extends CastEnabledActivity implements NavDrawerActivi if(isDrawerOpen()) { drawerLayout.closeDrawer(navDrawer); } else { - super.onBackPressed(); + switch (UserPreferences.getBackButtonBehavior()) { + case OPEN_DRAWER: + drawerLayout.openDrawer(navDrawer); + break; + case SHOW_PROMPT: + new AlertDialog.Builder(this) + .setMessage(R.string.close_prompt) + .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + MainActivity.super.onBackPressed(); + } + }) + .setNegativeButton(R.string.no, null) + .setCancelable(false) + .show(); + break; + case DOUBLE_TAP: + if(lastBackButtonPressTime < System.currentTimeMillis() - 2000) { + Toast.makeText(this, R.string.double_tap_toast, Toast.LENGTH_SHORT).show(); + lastBackButtonPressTime = System.currentTimeMillis(); + } else { + super.onBackPressed(); + } + break; + default: super.onBackPressed(); + } } } diff --git a/app/src/main/res/xml/preferences_user_interface.xml b/app/src/main/res/xml/preferences_user_interface.xml index da694b844..1d970a5f7 100644 --- a/app/src/main/res/xml/preferences_user_interface.xml +++ b/app/src/main/res/xml/preferences_user_interface.xml @@ -57,4 +57,14 @@ android:summary="@string/pref_lockscreen_background_sum" android:title="@string/pref_lockscreen_background_title"/> + + + -- cgit v1.2.3 From 6262f98e39badde997d3e5793411a398cc062e09 Mon Sep 17 00:00:00 2001 From: Petar Kukolj Date: Thu, 15 Nov 2018 20:54:40 +0100 Subject: Add go to page option --- .../danoeh/antennapod/activity/MainActivity.java | 28 +++++++++++++++++----- .../preferences/PreferenceController.java | 27 +++++++++++++++++++++ 2 files changed, 49 insertions(+), 6 deletions(-) (limited to 'app/src/main') diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java index fffd751c9..4c25c5c28 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -656,12 +656,7 @@ public class MainActivity extends CastEnabledActivity implements NavDrawerActivi case SHOW_PROMPT: new AlertDialog.Builder(this) .setMessage(R.string.close_prompt) - .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - MainActivity.super.onBackPressed(); - } - }) + .setPositiveButton(R.string.yes, (dialogInterface, i) -> MainActivity.super.onBackPressed()) .setNegativeButton(R.string.no, null) .setCancelable(false) .show(); @@ -674,6 +669,27 @@ public class MainActivity extends CastEnabledActivity implements NavDrawerActivi super.onBackPressed(); } break; + case GO_TO_QUEUE: + if(getLastNavFragment().equals(QueueFragment.TAG)) { + super.onBackPressed(); + } else { + loadFragment(QueueFragment.TAG, null); + } + break; + case GO_TO_EPISODES: + if(getLastNavFragment().equals(EpisodesFragment.TAG)) { + super.onBackPressed(); + } else { + loadFragment(EpisodesFragment.TAG, null); + } + break; + case GO_TO_SUBSCRIPTIONS: + if(getLastNavFragment().equals(SubscriptionFragment.TAG)) { + super.onBackPressed(); + } else { + loadFragment(SubscriptionFragment.TAG, null); + } + break; default: super.onBackPressed(); } } 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 1d93afad9..56af71dc4 100644 --- a/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java +++ b/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java @@ -227,6 +227,33 @@ public class PreferenceController implements SharedPreferences.OnSharedPreferenc return true; }); + ui.findPreference(UserPreferences.PREF_BACK_BUTTON_BEHAVIOR) + .setOnPreferenceChangeListener((preference, newValue) -> { + if(newValue.equals("page")) { + final Context context = ui.getActivity(); + final String[] navTitles = context.getResources().getStringArray(R.array.back_button_go_to_pages); + final int choice[] = { UserPreferences.getBackButtonGoToPage() }; + + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setTitle(R.string.back_button_go_to_page_title); + builder.setSingleChoiceItems(navTitles, choice[0], (dialogInterface, i) -> { + if(i >= 0) { + choice[0] = i; + } + }); + builder.setPositiveButton(R.string.confirm_label, (dialogInterface, i) -> { + if (choice[0] != UserPreferences.getBackButtonGoToPage()) { + UserPreferences.setBackButtonGoToPage(choice[0]); + } + }); + builder.setNegativeButton(R.string.cancel_label, null); + builder.create().show(); + return true; + } else { + return true; + } + }); + if (Build.VERSION.SDK_INT >= 26) { ui.findPreference(UserPreferences.PREF_EXPANDED_NOTIFICATION).setVisible(false); } -- cgit v1.2.3 From 0d1b9c4c55436ae77bbd3067f4eb839a71c20934 Mon Sep 17 00:00:00 2001 From: Petar Kukolj Date: Sat, 17 Nov 2018 20:13:35 +0100 Subject: Use fragment tags instead of position indexes for saving chosen fragment --- .../de/danoeh/antennapod/activity/MainActivity.java | 20 +++----------------- .../antennapod/preferences/PreferenceController.java | 10 ++++++---- 2 files changed, 9 insertions(+), 21 deletions(-) (limited to 'app/src/main') diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java index 4c25c5c28..d2a0c3aab 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -669,25 +669,11 @@ public class MainActivity extends CastEnabledActivity implements NavDrawerActivi super.onBackPressed(); } break; - case GO_TO_QUEUE: - if(getLastNavFragment().equals(QueueFragment.TAG)) { + case GO_TO_PAGE: + if(getLastNavFragment().equals(UserPreferences.getBackButtonGoToPage())) { super.onBackPressed(); } else { - loadFragment(QueueFragment.TAG, null); - } - break; - case GO_TO_EPISODES: - if(getLastNavFragment().equals(EpisodesFragment.TAG)) { - super.onBackPressed(); - } else { - loadFragment(EpisodesFragment.TAG, null); - } - break; - case GO_TO_SUBSCRIPTIONS: - if(getLastNavFragment().equals(SubscriptionFragment.TAG)) { - super.onBackPressed(); - } else { - loadFragment(SubscriptionFragment.TAG, null); + loadFragment(UserPreferences.getBackButtonGoToPage(), null); } break; default: super.onBackPressed(); 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 56af71dc4..ec1767062 100644 --- a/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java +++ b/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java @@ -232,17 +232,19 @@ public class PreferenceController implements SharedPreferences.OnSharedPreferenc if(newValue.equals("page")) { final Context context = ui.getActivity(); final String[] navTitles = context.getResources().getStringArray(R.array.back_button_go_to_pages); - final int choice[] = { UserPreferences.getBackButtonGoToPage() }; + final String[] navTags = new String[3]; + System.arraycopy(MainActivity.NAV_DRAWER_TAGS, 0, navTags, 0, 3); + final String choice[] = { UserPreferences.getBackButtonGoToPage() }; AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle(R.string.back_button_go_to_page_title); - builder.setSingleChoiceItems(navTitles, choice[0], (dialogInterface, i) -> { + builder.setSingleChoiceItems(navTitles, ArrayUtils.indexOf(navTags, UserPreferences.getBackButtonGoToPage()), (dialogInterface, i) -> { if(i >= 0) { - choice[0] = i; + choice[0] = navTags[i]; } }); builder.setPositiveButton(R.string.confirm_label, (dialogInterface, i) -> { - if (choice[0] != UserPreferences.getBackButtonGoToPage()) { + if (!choice[0].equals(UserPreferences.getBackButtonGoToPage())) { UserPreferences.setBackButtonGoToPage(choice[0]); } }); -- cgit v1.2.3 From 98e75fc313df0a6d1fc79485f6d58bfbf2c9bc96 Mon Sep 17 00:00:00 2001 From: Petar Kukolj Date: Tue, 20 Nov 2018 23:40:31 +0100 Subject: Fix not going back on child fragments --- app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java | 2 ++ 1 file changed, 2 insertions(+) (limited to 'app/src/main') diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java index d2a0c3aab..122b6040e 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -648,6 +648,8 @@ public class MainActivity extends CastEnabledActivity implements NavDrawerActivi public void onBackPressed() { if(isDrawerOpen()) { drawerLayout.closeDrawer(navDrawer); + } else if(getSupportFragmentManager().getBackStackEntryCount() != 0) { + super.onBackPressed(); } else { switch (UserPreferences.getBackButtonBehavior()) { case OPEN_DRAWER: -- cgit v1.2.3 From 2393d4512c25cdd9095a3546c2bc9aa139bca798 Mon Sep 17 00:00:00 2001 From: Petar Kukolj Date: Thu, 22 Nov 2018 17:05:04 +0100 Subject: Fix coding style problems --- app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java | 8 ++++---- .../de/danoeh/antennapod/preferences/PreferenceController.java | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) (limited to 'app/src/main') diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java index 122b6040e..5595aeac4 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -646,9 +646,9 @@ public class MainActivity extends CastEnabledActivity implements NavDrawerActivi @Override public void onBackPressed() { - if(isDrawerOpen()) { + if (isDrawerOpen()) { drawerLayout.closeDrawer(navDrawer); - } else if(getSupportFragmentManager().getBackStackEntryCount() != 0) { + } else if (getSupportFragmentManager().getBackStackEntryCount() != 0) { super.onBackPressed(); } else { switch (UserPreferences.getBackButtonBehavior()) { @@ -664,7 +664,7 @@ public class MainActivity extends CastEnabledActivity implements NavDrawerActivi .show(); break; case DOUBLE_TAP: - if(lastBackButtonPressTime < System.currentTimeMillis() - 2000) { + if (lastBackButtonPressTime < System.currentTimeMillis() - 2000) { Toast.makeText(this, R.string.double_tap_toast, Toast.LENGTH_SHORT).show(); lastBackButtonPressTime = System.currentTimeMillis(); } else { @@ -672,7 +672,7 @@ public class MainActivity extends CastEnabledActivity implements NavDrawerActivi } break; case GO_TO_PAGE: - if(getLastNavFragment().equals(UserPreferences.getBackButtonGoToPage())) { + if (getLastNavFragment().equals(UserPreferences.getBackButtonGoToPage())) { super.onBackPressed(); } else { loadFragment(UserPreferences.getBackButtonGoToPage(), null); 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 ec1767062..587b533a2 100644 --- a/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java +++ b/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java @@ -229,7 +229,7 @@ public class PreferenceController implements SharedPreferences.OnSharedPreferenc ui.findPreference(UserPreferences.PREF_BACK_BUTTON_BEHAVIOR) .setOnPreferenceChangeListener((preference, newValue) -> { - if(newValue.equals("page")) { + if (newValue.equals("page")) { final Context context = ui.getActivity(); final String[] navTitles = context.getResources().getStringArray(R.array.back_button_go_to_pages); final String[] navTags = new String[3]; @@ -239,7 +239,7 @@ public class PreferenceController implements SharedPreferences.OnSharedPreferenc AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle(R.string.back_button_go_to_page_title); builder.setSingleChoiceItems(navTitles, ArrayUtils.indexOf(navTags, UserPreferences.getBackButtonGoToPage()), (dialogInterface, i) -> { - if(i >= 0) { + if (i >= 0) { choice[0] = navTags[i]; } }); -- cgit v1.2.3