diff options
author | Alexandra Gherghina <alexgherghina@google.com> | 2014-07-21 22:42:21 +0100 |
---|---|---|
committer | Alexandra Gherghina <alexgherghina@google.com> | 2014-07-24 13:45:52 +0100 |
commit | 2513851ace8d353f99146316b81a430add6d837f (patch) | |
tree | 5dd5a3918425c1be47f4b07a6c5b670686cd8f5f | |
parent | 377b8df3ed89f2e61b6755aee8136754a2edf9c5 (diff) | |
download | packages_apps_Settings-2513851ace8d353f99146316b81a430add6d837f.zip packages_apps_Settings-2513851ace8d353f99146316b81a430add6d837f.tar.gz packages_apps_Settings-2513851ace8d353f99146316b81a430add6d837f.tar.bz2 |
Adds cross-profile intents for Settings screens.
This is needed for settings that are handled in the primary profile app.
Bug: 16369104
Change-Id: If3ec3866778282219267481b8f419774f7f2c9de
-rw-r--r-- | AndroidManifest.xml | 86 | ||||
-rw-r--r-- | src/com/android/settings/LauncherIconToggler.java | 46 | ||||
-rw-r--r-- | src/com/android/settings/ManagedProfileSetup.java | 80 |
3 files changed, 165 insertions, 47 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 7462c77..17f1e54 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -91,9 +91,11 @@ <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> - <receiver android:name="LauncherIconToggler"> + <receiver android:name="ManagedProfileSetup"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> <action android:name="android.intent.action.PRE_BOOT_COMPLETED"/> @@ -131,6 +133,9 @@ android:value="com.android.settings.WirelessSettings" /> <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID" android:resource="@id/wireless_settings" /> + <!-- Note that this doesn't really show any Wireless settings. --> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> @@ -290,6 +295,8 @@ <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.VOICE_LAUNCH" /> </intent-filter> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <activity android:name="Settings$BluetoothSettingsActivity" @@ -402,6 +409,8 @@ android:value="com.android.settings.DateTimeSettings" /> <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID" android:resource="@id/date_time_settings" /> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <activity android:name="DateTimeSettingsSetupWizard" @@ -427,6 +436,8 @@ android:value="com.android.settings.LocalePicker" /> <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID" android:resource="@id/language_settings" /> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <activity android:name="Settings$InputMethodAndLanguageSettingsActivity" @@ -443,6 +454,8 @@ android:value="com.android.settings.inputmethod.InputMethodAndLanguageSettings" /> <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID" android:resource="@id/language_settings" /> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <activity android:name="Settings$KeyboardLayoutPickerActivity" @@ -494,13 +507,18 @@ <category android:name="android.intent.category.VOICE_LAUNCH" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> + <!-- TODO: This should also be forwarded, but we can't use cross-profile intent filters --> <receiver android:name=".inputmethod.InputMethodDialogReceiver" android:enabled="true"> <intent-filter> <action android:name="android.settings.SHOW_INPUT_METHOD_PICKER" /> </intent-filter> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </receiver> <activity android:name="Settings$UserDictionarySettingsActivity" @@ -517,6 +535,8 @@ android:value="com.android.settings.inputmethod.UserDictionaryList" /> <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID" android:resource="@id/language_settings" /> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <activity android:name=".inputmethod.UserDictionaryAddWordActivity" @@ -531,6 +551,8 @@ <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.VOICE_LAUNCH" /> </intent-filter> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <!-- Keep compatibility with old shortcuts. --> @@ -558,6 +580,8 @@ android:value="com.android.settings.notification.ZenModeSettings" /> <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID" android:resource="@id/notification_settings" /> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <activity android:name="Settings$HomeSettingsActivity" @@ -573,6 +597,8 @@ android:value="com.android.settings.HomeSettings" /> <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID" android:resource="@id/home_settings" /> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <activity android:name="Settings$DisplaySettingsActivity" @@ -590,6 +616,8 @@ android:value="com.android.settings.DisplaySettings" /> <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID" android:resource="@id/display_settings" /> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <!-- Keep compatibility with old shortcuts. --> @@ -618,6 +646,8 @@ android:value="com.android.settings.DeviceInfoSettings" /> <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID" android:resource="@id/about_settings" /> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <activity android:name="SettingsLicenseActivity" @@ -628,6 +658,8 @@ <action android:name="android.settings.LICENSE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <activity android:name="SettingsSafetyLegalActivity" @@ -637,6 +669,8 @@ <action android:name="android.settings.SAFETY" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <activity android:name="Settings$ManageApplicationsActivity" @@ -803,6 +837,8 @@ android:value="com.android.settings.location.LocationSettings" /> <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID" android:resource="@id/location_settings" /> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <activity android:name="Settings$SecuritySettingsActivity" @@ -821,6 +857,8 @@ android:value="com.android.settings.SecuritySettings" /> <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID" android:resource="@id/security_settings" /> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <activity android:name="MonitoringCertInfoActivity" @@ -878,6 +916,8 @@ android:value="com.android.settings.PrivacySettings" /> <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID" android:resource="@id/privacy_settings" /> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <activity android:name="SetFullBackupPassword" @@ -959,6 +999,8 @@ android:value="com.android.settings.accessibility.AccessibilitySettings" /> <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID" android:resource="@id/accessibility_settings" /> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <activity android:name="Settings$AccessibilityDaltonizerSettingsActivity" @@ -974,6 +1016,8 @@ android:value="com.android.settings.accessibility.ToggleDaltonizerPreferenceFragment" /> <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID" android:resource="@id/accessibility_settings" /> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <activity android:name="Settings$CaptioningSettingsActivity" @@ -989,6 +1033,8 @@ android:value="com.android.settings.accessibility.CaptionPropertiesFragment" /> <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID" android:resource="@id/accessibility_settings" /> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <activity android:name="Settings$TextToSpeechSettingsActivity" @@ -1004,6 +1050,8 @@ android:value="com.android.settings.tts.TextToSpeechSettings" /> <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID" android:resource="@id/language_settings" /> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <!-- Second and third-level settings --> @@ -1030,6 +1078,8 @@ <action android:name="android.app.action.SET_NEW_PASSWORD" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <activity android:name="ChooseLockGeneric$InternalActivity" android:exported="false" @@ -1069,6 +1119,8 @@ android:value="com.android.settings.deviceinfo.Memory" /> <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID" android:resource="@id/storage_settings" /> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <activity android:name=".deviceinfo.MiscFilesHandler" @@ -1096,6 +1148,7 @@ </intent-filter> </activity> + <!-- TODO: Test this once Settings stops crashing for this intent --> <activity android:name=".quicklaunch.QuickLaunchSettings" android:label="@string/quick_launch_title"> <intent-filter> @@ -1105,6 +1158,8 @@ <category android:name="android.intent.category.VOICE_LAUNCH" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <activity android:name=".quicklaunch.BookmarkPicker" android:label="@string/quick_launch_title"> @@ -1128,6 +1183,8 @@ android:value="com.android.settings.DevelopmentSettings" /> <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID" android:resource="@id/development_settings" /> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <activity android:name="Settings$PrintSettingsActivity" @@ -1189,6 +1246,8 @@ android:value="com.android.settings.deviceinfo.UsbSettings" /> <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID" android:resource="@id/storage_settings" /> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <!-- Keep compatibility with old shortcuts. --> @@ -1314,6 +1373,8 @@ </intent-filter> <meta-data android:name="com.android.settings.FRAGMENT_CLASS" android:value="com.android.settings.nfc.AndroidBeam" /> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <activity android:name="Settings$WifiDisplaySettingsActivity" @@ -1483,6 +1544,8 @@ android:value="com.android.settings.fuelgauge.BatterySaverSettings" /> <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID" android:resource="@id/battery_settings" /> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <activity android:name="Settings$AccountSettingsActivity" @@ -1496,6 +1559,8 @@ </intent-filter> <meta-data android:name="com.android.settings.FRAGMENT_CLASS" android:value="com.android.settings.accounts.AccountSettings" /> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <activity android:name="Settings$AccountSyncSettingsActivity" @@ -1511,6 +1576,8 @@ android:value="com.android.settings.accounts.AccountSyncSettings" /> <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID" android:resource="@id/account_settings" /> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <activity android:name="com.android.settings.accounts.AddAccountSettings" @@ -1524,6 +1591,8 @@ <action android:name="android.settings.ADD_ACCOUNT_SETTINGS" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <activity android:name="com.android.settings.accounts.ChooseAccountActivity" @@ -1599,6 +1668,8 @@ android:value="com.android.settings.DreamSettings" /> <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID" android:resource="@id/display_settings" /> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <activity android:name="Settings$UserSettingsActivity" @@ -1613,6 +1684,8 @@ android:value="com.android.settings.users.UserSettings" /> <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID" android:resource="@id/user_settings" /> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <activity android:name="Settings$PaymentSettingsActivity" @@ -1627,7 +1700,10 @@ android:value="com.android.settings.nfc.PaymentSettings" /> <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID" android:resource="@id/nfc_payment_settings" /> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> + <activity android:name=".nfc.PaymentDefaultDialog" android:label="@string/nfc_payment_set_default_label" android:excludeFromRecents="true" @@ -1636,6 +1712,8 @@ <action android:name="android.nfc.cardemulation.action.ACTION_CHANGE_DEFAULT" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <activity android:name=".SmsDefaultDialog" @@ -1700,6 +1778,8 @@ android:value="com.android.settings.notification.NotificationSettings" /> <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID" android:resource="@id/notification_settings" /> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <!-- Keep compatibility with old shortcuts. --> @@ -1718,6 +1798,8 @@ android:value="com.android.settings.notification.NotificationSettings" /> <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID" android:resource="@id/notification_settings" /> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity-alias> <!-- Keep compatibility with old shortcuts. --> @@ -1770,6 +1852,8 @@ <action android:name="android.settings.SHOW_REGULATORY_INFO" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> + <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" + android:value="true" /> </activity> <receiver android:name=".widget.SettingsAppWidgetProvider" diff --git a/src/com/android/settings/LauncherIconToggler.java b/src/com/android/settings/LauncherIconToggler.java deleted file mode 100644 index 5016918..0000000 --- a/src/com/android/settings/LauncherIconToggler.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settings; - -import android.content.BroadcastReceiver; -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.os.UserManager; - -/** - * Listens to {@link Intent.ACTION_BOOT_COMPLETED} and {@link Intent.ACTION_PRE_BOOT_COMPLETED} and - * disables the launcher icon of the Settings app for a managed profile. - */ -public class LauncherIconToggler extends BroadcastReceiver { - - @Override - public void onReceive(Context context, Intent intent) { - if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED) - || intent.getAction().equals(Intent.ACTION_PRE_BOOT_COMPLETED)) { - final UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE); - if (Utils.isManagedProfile(um)) { - ComponentName launcherActivity = new ComponentName(context, Settings.class); - final PackageManager pm = context.getPackageManager(); - pm.setComponentEnabledSetting(launcherActivity, - PackageManager.COMPONENT_ENABLED_STATE_DISABLED, - PackageManager.DONT_KILL_APP); - } - } - } -} diff --git a/src/com/android/settings/ManagedProfileSetup.java b/src/com/android/settings/ManagedProfileSetup.java new file mode 100644 index 0000000..bb73bd7 --- /dev/null +++ b/src/com/android/settings/ManagedProfileSetup.java @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings; + +import android.content.BroadcastReceiver; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.os.UserHandle; +import android.os.UserManager; + +import java.util.List; + +import static android.content.pm.PackageManager.GET_ACTIVITIES; +import static android.content.pm.PackageManager.GET_META_DATA; +import static android.content.pm.PackageManager.GET_RESOLVED_FILTER; + +/** + * Listens to {@link Intent.ACTION_BOOT_COMPLETED} and {@link Intent.ACTION_PRE_BOOT_COMPLETED} + * performs setup steps for a managed profile (disables the launcher icon of the Settings app and + * adds cross-profile intent filters for the appropriate Settings activities). + */ +public class ManagedProfileSetup extends BroadcastReceiver { + private static final String PRIMARY_PROFILE_SETTING = + "com.android.settings.PRIMARY_PROFILE_CONTROLLED"; + + @Override + public void onReceive(Context context, Intent broadcast) { + final UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE); + if (!Utils.isManagedProfile(um)) { + return; + } + + // Set up intent forwarding for implicit intents + Intent intent = new Intent(); + intent.addCategory(Intent.CATEGORY_DEFAULT); + intent.setPackage(context.getPackageName()); + + final PackageManager pm = context.getPackageManager(); + // Resolves activities for the managed profile (which we're running as) + List<ResolveInfo> resolvedIntents = pm.queryIntentActivities(intent, + GET_ACTIVITIES | GET_META_DATA | GET_RESOLVED_FILTER); + final int count = resolvedIntents.size(); + for (int i = 0; i < count; i++) { + ResolveInfo info = resolvedIntents.get(i); + if (info.filter != null && info.activityInfo != null + && info.activityInfo.metaData != null) { + boolean shouldForward = info.activityInfo.metaData.getBoolean( + PRIMARY_PROFILE_SETTING); + if (shouldForward) { + pm.addCrossProfileIntentFilter(info.filter, UserHandle.myUserId(), + UserHandle.USER_OWNER, PackageManager.SKIP_CURRENT_PROFILE); + } + } + } + + // Disable launcher icon + // Note: This needs to happen after forwarding intents, otherwise the main Settings + // intent gets lost + ComponentName settingsComponentName = new ComponentName(context, Settings.class); + pm.setComponentEnabledSetting(settingsComponentName, + PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); + } +} |