diff options
7 files changed, 122 insertions, 19 deletions
diff --git a/packages/SettingsLib/Android.bp b/packages/SettingsLib/Android.bp index ac4e1ea11dae..5afe2f3d2efc 100644 --- a/packages/SettingsLib/Android.bp +++ b/packages/SettingsLib/Android.bp @@ -50,6 +50,7 @@ java_defaults { "SettingsLibAdaptiveIcon", "SettingsLibRadioButtonPreference", "SettingsLibDisplayDensityUtils", + "SettingsLibUtils", ], } diff --git a/packages/SettingsLib/Utils/Android.bp b/packages/SettingsLib/Utils/Android.bp new file mode 100644 index 000000000000..c5f0ee6c939c --- /dev/null +++ b/packages/SettingsLib/Utils/Android.bp @@ -0,0 +1,15 @@ +android_library { + name: "SettingsLibUtils", + + srcs: ["src/**/*.java"], + resource_dirs: ["res"], + + sdk_version: "system_current", + min_sdk_version: "21", + + apex_available: [ + + "//apex_available:platform", + "com.android.permission", + ], +} diff --git a/packages/SettingsLib/Utils/AndroidManifest.xml b/packages/SettingsLib/Utils/AndroidManifest.xml new file mode 100644 index 000000000000..fd89676ab6d7 --- /dev/null +++ b/packages/SettingsLib/Utils/AndroidManifest.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2020 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. + --> + +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="com.android.settingslib.utils"> + + <uses-sdk android:minSdkVersion="21" /> + +</manifest> diff --git a/packages/SettingsLib/Utils/res/values/strings.xml b/packages/SettingsLib/Utils/res/values/strings.xml new file mode 100644 index 000000000000..035e7f230d60 --- /dev/null +++ b/packages/SettingsLib/Utils/res/values/strings.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2020 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. +--> + +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- A content description for work profile app [CHAR LIMIT=35] --> + <string name="accessibility_work_profile_app_description">Work <xliff:g id="app_name" example="Camera">%s</xliff:g></string> +</resources>
\ No newline at end of file diff --git a/packages/SettingsLib/Utils/src/com/android/settingslib/utils/applications/AppUtils.java b/packages/SettingsLib/Utils/src/com/android/settingslib/utils/applications/AppUtils.java new file mode 100644 index 000000000000..6125b8509fcf --- /dev/null +++ b/packages/SettingsLib/Utils/src/com/android/settingslib/utils/applications/AppUtils.java @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2020 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.settingslib.utils.applications; + +import android.content.Context; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.os.UserManager; +import android.util.Log; + +import com.android.settingslib.utils.R; + +public class AppUtils { + + private static final String TAG = AppUtils.class.getSimpleName(); + + /** Returns the label for a given package. */ + public static CharSequence getApplicationLabel( + PackageManager packageManager, String packageName) { + try { + final ApplicationInfo appInfo = + packageManager.getApplicationInfo( + packageName, + PackageManager.MATCH_DISABLED_COMPONENTS + | PackageManager.MATCH_ANY_USER); + return appInfo.loadLabel(packageManager); + } catch (PackageManager.NameNotFoundException e) { + Log.w(TAG, "Unable to find info for package: " + packageName); + } + return null; + } + + /** + * Returns a content description of an app name which distinguishes a personal app from a + * work app for accessibility purpose. + * If the app is in a work profile, then add a "work" prefix to the app name. + */ + public static String getAppContentDescription(Context context, String packageName, + int userId) { + final CharSequence appLabel = getApplicationLabel(context.getPackageManager(), packageName); + return context.getSystemService(UserManager.class).isManagedProfile(userId) + ? context.getString(R.string.accessibility_work_profile_app_description, appLabel) + : appLabel.toString(); + } +} diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml index 9c7bdbd5b927..8e8368f9bc62 100644 --- a/packages/SettingsLib/res/values/strings.xml +++ b/packages/SettingsLib/res/values/strings.xml @@ -1374,9 +1374,6 @@ <!-- Developer setting dialog prompting the user to reboot after changing the app freezer setting [CHAR LIMIT=NONE]--> <string name="cached_apps_freezer_reboot_dialog_text">Your device must be rebooted for this change to apply. Reboot now or cancel.</string> - <!-- A content description for work profile app [CHAR LIMIT=35] --> - <string name="accessibility_work_profile_app_description">Work <xliff:g id="app_name" example="Camera">%s</xliff:g></string> - <!-- Name of the 3.5mm and usb audio device. [CHAR LIMIT=50] --> <string name="media_transfer_wired_usb_device_name">Wired headphone</string> </resources> diff --git a/packages/SettingsLib/src/com/android/settingslib/applications/AppUtils.java b/packages/SettingsLib/src/com/android/settingslib/applications/AppUtils.java index b1f2a397bde6..a6202956efa5 100644 --- a/packages/SettingsLib/src/com/android/settingslib/applications/AppUtils.java +++ b/packages/SettingsLib/src/com/android/settingslib/applications/AppUtils.java @@ -26,7 +26,6 @@ import android.hardware.usb.IUsbManager; import android.os.RemoteException; import android.os.SystemProperties; import android.os.UserHandle; -import android.os.UserManager; import android.util.Log; import com.android.settingslib.R; @@ -112,17 +111,8 @@ public class AppUtils { /** Returns the label for a given package. */ public static CharSequence getApplicationLabel( PackageManager packageManager, String packageName) { - try { - final ApplicationInfo appInfo = - packageManager.getApplicationInfo( - packageName, - PackageManager.MATCH_DISABLED_COMPONENTS - | PackageManager.MATCH_ANY_USER); - return appInfo.loadLabel(packageManager); - } catch (PackageManager.NameNotFoundException e) { - Log.w(TAG, "Unable to find info for package: " + packageName); - } - return null; + return com.android.settingslib.utils.applications.AppUtils + .getApplicationLabel(packageManager, packageName); } /** @@ -160,9 +150,7 @@ public class AppUtils { */ public static String getAppContentDescription(Context context, String packageName, int userId) { - final CharSequence appLabel = getApplicationLabel(context.getPackageManager(), packageName); - return UserManager.get(context).isManagedProfile(userId) - ? context.getString(R.string.accessibility_work_profile_app_description, appLabel) - : appLabel.toString(); + return com.android.settingslib.utils.applications.AppUtils.getAppContentDescription(context, + packageName, userId); } } |