From 379d9b05cff677bc03a5a8a5bbccf4ffb918734d Mon Sep 17 00:00:00 2001 From: Amith Yamasani Date: Mon, 27 Sep 2010 12:03:59 -0700 Subject: [PATCH] Fix launching of specific settings. --- AndroidManifest.xml | 3 ++- src/com/android/settings/Settings.java | 27 ++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 22f7300cb93..7e0fa15a316 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -49,7 +49,8 @@ + android:theme="@android:style/Theme.Holo" + android:launchMode="singleTop"> diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java index 738acc3e22e..de1a63c0279 100644 --- a/src/com/android/settings/Settings.java +++ b/src/com/android/settings/Settings.java @@ -17,6 +17,7 @@ package com.android.settings; import android.app.Fragment; +import android.content.Intent; import android.os.Bundle; import android.preference.PreferenceActivity; @@ -30,6 +31,32 @@ public class Settings extends PreferenceActivity implements // TODO: Update Call Settings based on airplane mode state. + /** + * Checks if the component name in the intent is different from the Settings class and + * returns the class name to load as a fragment. + */ + private String getStartingFragmentClass(Intent intent) { + final String intentClass = intent.getComponent().getClassName(); + if (intentClass.equals(getClass().getName())) return null; + + return intentClass; + } + + /** + * Override initial header when an activity-alias is causing Settings to be launched + * for a specific fragment encoded in the android:name parameter. + */ + @Override + public Header onGetInitialHeader() { + String fragmentClass = getStartingFragmentClass(super.getIntent()); + if (fragmentClass != null) { + Header header = new Header(); + header.fragment = fragmentClass; + return header; + } + return super.onGetInitialHeader(); + } + /** * Populate the activity with the top-level headers. */