diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 4729785db31..2462725e40a 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -52,7 +52,7 @@
@@ -71,9 +71,9 @@
-
@@ -82,16 +82,20 @@
-
+
+
+
-
@@ -101,7 +105,11 @@
-
+
+
+
-
+
@@ -190,22 +197,31 @@
-
+
+
+
-
+
-
+
+
+
-
+ android:clearTaskOnLaunch="true">
@@ -213,19 +229,26 @@
-
+
+
+
-
+
-
+
+
+
-
+
-
+
+
+
-
+ android:clearTaskOnLaunch="true">
@@ -260,12 +286,16 @@
-
+
+
+
-
+
@@ -273,7 +303,11 @@
-
+
+
+
@@ -283,7 +317,8 @@
-
@@ -294,13 +329,16 @@
+
+
-
+ android:clearTaskOnLaunch="true">
@@ -309,11 +347,15 @@
-
+
+
+
-
@@ -324,13 +366,16 @@
-
+
+
+
-
+ android:clearTaskOnLaunch="true">
@@ -338,19 +383,26 @@
-
+
+
+
-
+
-
+
+
+
-
+
-
+
+
+
-
+
@@ -395,14 +450,18 @@
-
+
+
+
+ android:targetActivity="Settings$ManageApplicationsActivity">
-
+
@@ -465,12 +524,16 @@
-
+
+
+
-
+
@@ -478,14 +541,17 @@
-
+
+
+
-
+ android:clearTaskOnLaunch="true">
@@ -495,7 +561,11 @@
-
+
+
+
@@ -505,19 +575,22 @@
-
+ android:clearTaskOnLaunch="true">
-
+
+
+
-
+
-
-
-
+
+
+
-
@@ -573,7 +649,11 @@
-
+
+
+
@@ -616,6 +696,7 @@
android:label="@string/lockpattern_change_lock_pattern_label">
+
@@ -625,8 +706,8 @@
-
@@ -635,7 +716,11 @@
-
+
+
+
@@ -681,17 +766,20 @@
-
+ android:clearTaskOnLaunch="true">
-
+
+
+
@@ -883,16 +971,20 @@
-
+
-
+
+
+
diff --git a/res/xml/application_settings.xml b/res/xml/application_settings.xml
index 76fa0bcd50a..2e446a28211 100644
--- a/res/xml/application_settings.xml
+++ b/res/xml/application_settings.xml
@@ -53,7 +53,7 @@
android:fragment="com.android.settings.applications.ManageApplications"
android:title="@string/runningservices_settings_title"
android:summary="@string/runningservices_settings_summary">
-
+
+ android:value="com.android.settings.Settings$StorageUseActivity" />
-
+ android:summary="@string/development_settings_summary"
+ android:fragment="com.android.settings.DevelopmentSettings">
diff --git a/res/xml/settings_headers.xml b/res/xml/settings_headers.xml
index 26e387328ce..5c99c5f04f6 100644
--- a/res/xml/settings_headers.xml
+++ b/res/xml/settings_headers.xml
@@ -36,10 +36,10 @@
+ android:icon="@drawable/ic_settings_wireless" />
@@ -56,18 +56,18 @@
+ android:title="@string/sound_settings_title" />
+ android:title="@string/display_settings_title" />
@@ -75,8 +75,7 @@
android:fragment="com.android.settings.SecuritySettings"
android:icon="@drawable/ic_settings_security"
android:title="@string/security_settings_title"
- android:id="@+id/security_settings">
-
+ android:id="@+id/security_settings" />
@@ -84,8 +83,7 @@
android:fragment="com.android.settings.ApplicationSettings"
android:icon="@drawable/ic_settings_applications"
android:title="@string/applications_settings"
- android:id="@+id/applications_settings">
-
+ android:id="@+id/application_settings" />
@@ -104,40 +101,39 @@
android:fragment="com.android.settings.PrivacySettings"
android:icon="@drawable/ic_settings_privacy"
android:title="@string/privacy_settings"
- android:id="@+id/privacy_settings">
-
+ android:id="@+id/privacy_settings" />
+ android:title="@string/storage_settings" />
+ android:title="@string/language_settings" />
+ android:title="@string/voice_input_output_settings" />
+ android:title="@string/accessibility_settings" />
@@ -145,30 +141,30 @@
android:id="@+id/dock_settings"
android:fragment="com.android.settings.DockSettings"
android:icon="@drawable/ic_settings_dock"
- android:title="@string/dock_settings">
-
+ android:title="@string/dock_settings" />
+ android:title="@string/date_and_time_settings_title" />
+ android:title="@string/owner_info_settings_title" />
+ android:title="@string/about_settings" />
+
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 3a6e6d844fd..bec82415dee 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -17,9 +17,13 @@
package com.android.settings;
import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.preference.PreferenceActivity;
+import java.util.HashMap;
import java.util.List;
/**
@@ -27,8 +31,36 @@ import java.util.List;
*/
public class Settings extends PreferenceActivity {
+ private static final String META_DATA_KEY_HEADER_ID =
+ "com.android.settings.TOP_LEVEL_HEADER_ID";
+ private static final String META_DATA_KEY_FRAGMENT_CLASS =
+ "com.android.settings.FRAGMENT_CLASS";
+
+ private String mFragmentClass;
+ private int mTopLevelHeaderId;
+
// TODO: Update Call Settings based on airplane mode state.
+ protected HashMap mHeaderIndexMap = new HashMap();
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ getMetaData();
+ super.onCreate(savedInstanceState);
+
+ // TODO: Do this only if 2-pane mode
+ highlightHeader();
+ }
+
+ private void highlightHeader() {
+ if (mTopLevelHeaderId != 0) {
+ Integer index = mHeaderIndexMap.get(mTopLevelHeaderId);
+ if (index != null) {
+ getListView().setItemChecked(index, true);
+ }
+ }
+ }
+
@Override
public Intent getIntent() {
String startingFragment = getStartingFragmentClass(super.getIntent());
@@ -52,7 +84,9 @@ public class Settings extends PreferenceActivity {
* 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) {
+ protected String getStartingFragmentClass(Intent intent) {
+ if (mFragmentClass != null) return mFragmentClass;
+
String intentClass = intent.getComponent().getClassName();
if (intentClass.equals(getClass().getName())) return null;
@@ -96,7 +130,8 @@ public class Settings extends PreferenceActivity {
int i = 0;
while (i < target.size()) {
Header header = target.get(i);
- long id = header.id;
+ // Ids are integers, so downcasting
+ int id = (int) header.id;
if (id == R.id.dock_settings) {
if (!needsDockSettings())
target.remove(header);
@@ -106,12 +141,55 @@ public class Settings extends PreferenceActivity {
if (!Utils.isVoiceCapable(this))
target.remove(header);
}
- if (target.get(i) == header)
+ // Increment if the current one wasn't removed by the Utils code.
+ if (target.get(i) == header) {
+ mHeaderIndexMap.put(id, i);
i++;
+ }
}
}
private boolean needsDockSettings() {
return getResources().getBoolean(R.bool.has_dock_settings);
}
+
+ private void getMetaData() {
+ try {
+ ActivityInfo ai = getPackageManager().getActivityInfo(getComponentName(),
+ PackageManager.GET_META_DATA);
+ if (ai == null || ai.metaData == null) return;
+ mTopLevelHeaderId = ai.metaData.getInt(META_DATA_KEY_HEADER_ID);
+ mFragmentClass = ai.metaData.getString(META_DATA_KEY_FRAGMENT_CLASS);
+ } catch (NameNotFoundException nnfe) {
+ }
+ }
+
+ /*
+ * Settings subclasses for launching independently.
+ */
+
+ public static class BluetoothSettingsActivity extends Settings { }
+ public static class WirelessSettingsActivity extends Settings { }
+ public static class TetherSettingsActivity extends Settings { }
+ public static class VpnSettingsActivity extends Settings { }
+ public static class DateTimeSettingsActivity extends Settings { }
+ public static class StorageSettingsActivity extends Settings { }
+ public static class WifiSettingsActivity extends Settings { }
+ public static class InputMethodAndLanguageSettingsActivity extends Settings { }
+ public static class InputMethodAndSubtypeEnablerActivity extends Settings { }
+ public static class LocalePickerActivity extends Settings { }
+ public static class UserDictionarySettingsActivity extends Settings { }
+ public static class SoundSettingsActivity extends Settings { }
+ public static class DisplaySettingsActivity extends Settings { }
+ public static class DeviceInfoSettingsActivity extends Settings { }
+ public static class ApplicationSettingsActivity extends Settings { }
+ public static class ManageApplicationsActivity extends Settings { }
+ public static class StorageUseActivity extends Settings { }
+ public static class DevelopmentSettingsActivity extends Settings { }
+ public static class AccessibilitySettingsActivity extends Settings { }
+ public static class SecuritySettingsActivity extends Settings { }
+ public static class PrivacySettingsActivity extends Settings { }
+ public static class DockSettingsActivity extends Settings { }
+ public static class RunningServicesActivity extends Settings { }
+ public static class VoiceInputOutputSettingsActivity extends Settings { }
}
diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java
index 20cf2f9a677..94283ee2845 100644
--- a/src/com/android/settings/applications/ManageApplications.java
+++ b/src/com/android/settings/applications/ManageApplications.java
@@ -16,9 +16,12 @@
package com.android.settings.applications;
-import com.android.internal.content.PackageHelper;
import com.android.settings.R;
+
+import com.android.internal.content.PackageHelper;
import com.android.settings.applications.ApplicationsState.AppEntry;
+import com.android.settings.Settings.RunningServicesActivity;
+import com.android.settings.Settings.StorageUseActivity;
import android.app.Fragment;
import android.content.Context;
@@ -519,9 +522,9 @@ public class ManageApplications extends Fragment implements
if (className == null) {
className = intent.getComponent().getClassName();
}
- if (className.equals("com.android.settings.RunningServices")) {
+ if (className.equals(RunningServicesActivity.class.getName())) {
defaultTabTag = TAB_RUNNING;
- } else if (className.equals("com.android.settings.applications.StorageUse")
+ } else if (className.equals(StorageUseActivity.class.getName())
|| action.equals(Intent.ACTION_MANAGE_PACKAGE_STORAGE)) {
mSortOrder = SORT_ORDER_SIZE;
mFilterApps = FILTER_APPS_ALL;