Fix launching of specific settings.
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 738acc3..de1a63c 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;
@@ -31,6 +32,32 @@
// 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.
*/
@Override