Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 482908f2 authored by Bartosz Fabianowski's avatar Bartosz Fabianowski
Browse files

Add admin-set default apps to Enterprise Privacy Settings page

This CL adds information about the number of default handlers for
common intents (e.g. browser, e-mail, calendar) set by the admin.

Bug: 32692748
Test: make RunSettingsRoboTests

Change-Id: I569d9ddabeee2b2aa9a892b28066abb8bf920fcf
parent b62f4f75
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -8070,6 +8070,11 @@
        <item quantity="one"><xliff:g id="count">%d</xliff:g> app allowed access to your camera by your admin</item>
        <item quantity="other"><xliff:g id="count">%d</xliff:g> apps allowed access to your camera by your admin</item>
    </plurals>
    <!-- Label indicating how many apps were set as default defaults for common actions (e.g. open browser, send e-mail) by the admin. [CHAR LIMIT=NONE] -->
    <plurals name="enterprise_privacy_number_enterprise_set_default_apps">
        <item quantity="one"><xliff:g id="count">%d</xliff:g> default app set by your admin</item>
        <item quantity="other"><xliff:g id="count">%d</xliff:g> default apps set by your admin</item>
    </plurals>
    <!-- Label explaining that an always-on VPN was set by the admin for the entire device. [CHAR LIMIT=NONE] -->
    <string name="enterprise_privacy_always_on_vpn_device">Always-on VPN turned on</string>
    <!-- Label explaining that an always-on VPN was set by the admin in the personal profile. [CHAR LIMIT=NONE] -->
+4 −0
Original line number Diff line number Diff line
@@ -75,6 +75,10 @@
                android:key="enterprise_privacy_number_camera_access_packages"
                settings:allowDividerBelow="true"
                settings:multiLine="true"/>
        <com.android.settings.DividerPreference
                android:key="number_enterprise_set_default_apps"
                settings:allowDividerBelow="true"
                settings:multiLine="true"/>
        <com.android.settings.DividerPreference
                android:key="always_on_vpn_primary_user"
                settings:allowDividerBelow="true"
+2 −3
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@ package com.android.settings.applications;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.IPackageManager;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.RemoteException;
@@ -33,11 +32,11 @@ public abstract class AppWithAdminGrantedPermissionsCounter extends AppCounter {

    private final String[] mPermissions;
    private final PackageManagerWrapper mPackageManager;
    private final IPackageManager mPackageManagerService;
    private final IPackageManagerWrapper mPackageManagerService;
    private final DevicePolicyManagerWrapper mDevicePolicyManager;

    public AppWithAdminGrantedPermissionsCounter(Context context, String[] permissions,
            PackageManagerWrapper packageManager, IPackageManager packageManagerService,
            PackageManagerWrapper packageManager, IPackageManagerWrapper packageManagerService,
            DevicePolicyManagerWrapper devicePolicyManager) {
        super(context, packageManager);
        mPermissions = permissions;
+41 −0
Original line number Diff line number Diff line
@@ -17,8 +17,11 @@
package com.android.settings.applications;

import android.app.Fragment;
import android.content.Intent;
import android.view.View;

import java.util.Set;

public interface ApplicationFeatureProvider {

    /**
@@ -54,10 +57,48 @@ public interface ApplicationFeatureProvider {
    void calculateNumberOfAppsWithAdminGrantedPermissions(String[] permissions,
            NumberOfAppsCallback callback);

    /**
     * Return the persistent preferred activities configured by the admin for the current user and
     * all its managed profiles. A persistent preferred activity is an activity that the admin
     * configured to always handle a given intent (e.g. open browser), even if the user has other
     * apps installed that would also be able to handle the intent.
     *
     * @param intent The intents for which to find persistent preferred activities
     *
     * @return the persistent preferred activites for the given intent
     */
    Set<PersistentPreferredActivityInfo> findPersistentPreferredActivities(Intent[] intents);

    /**
     * Callback that receives the number of packages installed on the device.
     */
    interface NumberOfAppsCallback {
        void onNumberOfAppsResult(int num);
    }

    public static class PersistentPreferredActivityInfo {
        public final String packageName;
        public final int userId;

        public PersistentPreferredActivityInfo(String packageName, int userId) {
            this.packageName = packageName;
            this.userId = userId;
        }

        @Override
        public boolean equals(Object other) {
            if (!(other instanceof PersistentPreferredActivityInfo)) {
                return false;
            }
            final PersistentPreferredActivityInfo otherActivityInfo
                    = (PersistentPreferredActivityInfo) other;
            return otherActivityInfo.packageName.equals(packageName)
                    && otherActivityInfo.userId == userId;
        }

        @Override
        public int hashCode() {
            return packageName.hashCode() ^ userId;
        }
    }
}
+46 −4
Original line number Diff line number Diff line
@@ -18,25 +18,34 @@ package com.android.settings.applications;

import android.app.Fragment;
import android.content.Context;
import android.content.pm.IPackageManager;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.ComponentInfo;
import android.content.pm.ProviderInfo;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.content.pm.UserInfo;
import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserManager;
import android.util.ArraySet;
import android.view.View;

import com.android.settings.enterprise.DevicePolicyManagerWrapper;

import java.util.List;
import java.util.Set;

public class ApplicationFeatureProviderImpl implements ApplicationFeatureProvider {

    private final Context mContext;
    private final PackageManagerWrapper mPm;
    private final IPackageManager mPms;
    private final IPackageManagerWrapper mPms;
    private final DevicePolicyManagerWrapper mDpm;
    private final UserManager mUm;

    public ApplicationFeatureProviderImpl(Context context, PackageManagerWrapper pm,
            IPackageManager pms, DevicePolicyManagerWrapper dpm) {
            IPackageManagerWrapper pms, DevicePolicyManagerWrapper dpm) {
        mContext = context.getApplicationContext();
        mPm = pm;
        mPms = pms;
@@ -61,6 +70,39 @@ public class ApplicationFeatureProviderImpl implements ApplicationFeatureProvide
                callback).execute();
    }

    @Override
    public Set<PersistentPreferredActivityInfo> findPersistentPreferredActivities(
            Intent[] intents) {
        final Set<PersistentPreferredActivityInfo> activities = new ArraySet<>();
        final List<UserHandle> users = mUm.getUserProfiles();
        for (final Intent intent : intents) {
            for (final UserHandle user : users) {
                final int userId = user.getIdentifier();
                try {
                    final ResolveInfo resolveInfo = mPms.findPersistentPreferredActivity(intent,
                            userId);
                    if (resolveInfo != null) {
                        ComponentInfo componentInfo = null;
                        if (resolveInfo.activityInfo != null) {
                            componentInfo = resolveInfo.activityInfo;
                        } else if (resolveInfo.serviceInfo != null) {
                            componentInfo = resolveInfo.serviceInfo;
                        } else if (resolveInfo.providerInfo != null) {
                            componentInfo = resolveInfo.providerInfo;
                        }
                        if (componentInfo != null) {
                            activities.add(new PersistentPreferredActivityInfo(
                                    componentInfo.packageName, userId));
                        }
                    }
                } catch (RemoteException exception) {
                }
            }

        }
        return activities;
    }

    private static class AllUserInstalledAppCounter extends InstalledAppCounter {
        private NumberOfAppsCallback mCallback;

@@ -86,7 +128,7 @@ public class ApplicationFeatureProviderImpl implements ApplicationFeatureProvide
        private NumberOfAppsCallback mCallback;

        AllUserAppWithAdminGrantedPermissionsCounter(Context context, String[] permissions,
                PackageManagerWrapper packageManager, IPackageManager packageManagerService,
                PackageManagerWrapper packageManager, IPackageManagerWrapper packageManagerService,
                DevicePolicyManagerWrapper devicePolicyManager, NumberOfAppsCallback callback) {
            super(context, permissions, packageManager, packageManagerService, devicePolicyManager);
            mCallback = callback;
Loading