From: Filip Pavlis Date: Wed, 1 Mar 2017 13:48:33 +0000 (+0000) Subject: Fix home/back buttons flow in PreferenceActivity. X-Git-Tag: android-x86-8.1-r1~3007^2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=6af15ebcfec64d0cc6879a0af9cfffd3e084ee73;p=android-x86%2Fframeworks-base.git Fix home/back buttons flow in PreferenceActivity. Bug: b/35977048 Test: Done manually. Automated test will be added later. After recent changes in PreferenceActivity finishing the activity on pressing back is not correct anymore. Instead onBackButton method should be called to deal with it (we have fragments transactions for instance). There can be multiple buttons: 1. The native default one - calls onBackPressed by default so no extra work needed. 2. PreferenceActivity has buttons that can de displayed when settting EXTRA_PREFS_SHOW_BUTTON_BAR to true. But it is a private API and I didn't find any usage of it, so there is no need to change that. Also it looks like something very specific used in WiFi wizards. 3. Apps often use a toolbar that has a home button which essentialy emulates back button. The issue is that this Activity never had support for this. So apps had to override onOptionsItemSelected and some of those are unfortunately calling finish() which worked previously when PreferenceActivity wasn't using fragments in single pane. This CL adds support so app will no longer need to override that method and some apps need to be instructed to use that override in O. Change-Id: I94f557edb2e03f89fbf02e800beb390b2ad0544f --- diff --git a/core/java/android/preference/PreferenceActivity.java b/core/java/android/preference/PreferenceActivity.java index 600d82fe6709..d59d9f7496f3 100644 --- a/core/java/android/preference/PreferenceActivity.java +++ b/core/java/android/preference/PreferenceActivity.java @@ -40,6 +40,7 @@ import android.util.AttributeSet; import android.util.TypedValue; import android.util.Xml; import android.view.LayoutInflater; +import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; @@ -75,12 +76,11 @@ import java.util.List; * however vary; currently there are two major approaches it may take: * * * *

Subclasses of PreferenceActivity should implement @@ -536,6 +536,16 @@ public abstract class PreferenceActivity extends ListActivity implements } @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == android.R.id.home) { + // Override home navigation button to call onBackPressed (b/35152749). + onBackPressed(); + return true; + } + return super.onOptionsItemSelected(item); + } + + @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState);