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;