summaryrefslogtreecommitdiff
path: root/packages/SettingsLib/Utils/src/com/android/settingslib/utils/applications/AppUtils.java
blob: cf45c0b468354cbd6b204fd758603eec7e35bd52 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/*
 * 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.Build;
import android.os.UserManager;
import android.util.Log;

import androidx.annotation.RequiresApi;

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.
     */
    @RequiresApi(Build.VERSION_CODES.M)
    public static String getAppContentDescription(Context context, String packageName,
            int userId) {
        final CharSequence appLabel = getApplicationLabel(context.getPackageManager(), packageName);
        if (appLabel == null) {
            return "";
        }
        return context.getSystemService(UserManager.class).isManagedProfile(userId)
                ? context.getString(R.string.accessibility_work_profile_app_description, appLabel)
                : appLabel.toString();
    }
}