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
This commit is contained in:
parent
68b245701e
commit
b3fbb0ec75
|
@ -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());
|
||||
|
@ -645,9 +648,35 @@ public class MainActivity extends CastEnabledActivity implements NavDrawerActivi
|
|||
public void onBackPressed() {
|
||||
if(isDrawerOpen()) {
|
||||
drawerLayout.closeDrawer(navDrawer);
|
||||
} else {
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private DBReader.NavDrawerData navDrawerData;
|
||||
|
|
|
@ -57,4 +57,14 @@
|
|||
android:summary="@string/pref_lockscreen_background_sum"
|
||||
android:title="@string/pref_lockscreen_background_title"/>
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/behavior">
|
||||
<ListPreference
|
||||
android:entryValues="@array/back_button_behavior_values"
|
||||
android:entries="@array/back_button_behavior_options"
|
||||
android:key="prefBackButtonBehavior"
|
||||
android:title="@string/pref_back_button_behavior_title"
|
||||
android:summary="@string/pref_back_button_behavior_sum"
|
||||
android:defaultValue="default"
|
||||
app:useStockLayout="true"/>
|
||||
</PreferenceCategory>
|
||||
</PreferenceScreen>
|
||||
|
|
|
@ -52,6 +52,7 @@ public class UserPreferences {
|
|||
public static final String PREF_COMPACT_NOTIFICATION_BUTTONS = "prefCompactNotificationButtons";
|
||||
public static final String PREF_LOCKSCREEN_BACKGROUND = "prefLockscreenBackground";
|
||||
private static final String PREF_SHOW_DOWNLOAD_REPORT = "prefShowDownloadReport";
|
||||
private static final String PREF_BACK_BUTTON_BEHAVIOR = "prefBackButtonBehavior";
|
||||
|
||||
// Queue
|
||||
private static final String PREF_QUEUE_ADD_TO_FRONT = "prefQueueAddToFront";
|
||||
|
@ -809,4 +810,18 @@ public class UserPreferences {
|
|||
public enum VideoBackgroundBehavior {
|
||||
STOP, PICTURE_IN_PICTURE, CONTINUE_PLAYING
|
||||
}
|
||||
|
||||
public enum BackButtonBehavior {
|
||||
DEFAULT, OPEN_DRAWER, DOUBLE_TAP, SHOW_PROMPT
|
||||
}
|
||||
|
||||
public static BackButtonBehavior getBackButtonBehavior() {
|
||||
switch (prefs.getString(PREF_BACK_BUTTON_BEHAVIOR, "default")) {
|
||||
case "default": return BackButtonBehavior.DEFAULT;
|
||||
case "drawer": return BackButtonBehavior.OPEN_DRAWER;
|
||||
case "doubletap": return BackButtonBehavior.DOUBLE_TAP;
|
||||
case "prompt": return BackButtonBehavior.SHOW_PROMPT;
|
||||
default: return BackButtonBehavior.DEFAULT;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -277,4 +277,18 @@
|
|||
<item>@string/select_all_above</item>
|
||||
<item>@string/select_all_below</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="back_button_behavior_options">
|
||||
<item>@string/back_button_default</item>
|
||||
<item>@string/back_button_open_drawer</item>
|
||||
<item>@string/back_button_double_tap</item>
|
||||
<item>@string/back_button_show_prompt</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="back_button_behavior_values">
|
||||
<item>default</item>
|
||||
<item>drawer</item>
|
||||
<item>doubletap</item>
|
||||
<item>prompt</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
|
|
|
@ -470,6 +470,15 @@
|
|||
<string name="pref_videoBehavior_sum">Behavior when leaving video playback</string>
|
||||
<string name="stop_playback">Stop playback</string>
|
||||
<string name="continue_playback">Continue audio playback</string>
|
||||
<string name="behavior">Behavior</string>
|
||||
<string name="pref_back_button_behavior_title">Back button behavior</string>
|
||||
<string name="pref_back_button_behavior_sum">Change behavior of the back button.</string>
|
||||
<string name="back_button_default">Default</string>
|
||||
<string name="back_button_open_drawer">Open navigation drawer</string>
|
||||
<string name="back_button_double_tap">Double tap to exit</string>
|
||||
<string name="back_button_show_prompt">Confirm to exit</string>
|
||||
<string name="close_prompt">Are you sure you want to close AntennaPod?</string>
|
||||
<string name="double_tap_toast">Tap back button again to exit</string>
|
||||
|
||||
<!-- Auto-Flattr dialog -->
|
||||
<string name="auto_flattr_enable">Enable automatic flattring</string>
|
||||
|
|
Loading…
Reference in New Issue