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. */