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

Commit 4c8fd9e0 authored by Adrian Roos's avatar Adrian Roos
Browse files

Ensure trust agents are only provided by platform packages - DO NOT MERGE

Ensures that Settings only shows TrustAgentServices from
platform packages.

Bug: 15287044
Change-Id: I6c7f62e61f9dd63cbcf4d2f8eb75986b0a314a46
parent 5b210dd5
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import com.android.internal.widget.LockPatternUtils;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import android.Manifest;
import android.app.ListFragment;
import android.content.ComponentName;
import android.content.Context;
@@ -36,6 +37,7 @@ import android.service.trust.TrustAgentService;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.AttributeSet;
import android.util.Log;
import android.util.Slog;
import android.util.Xml;
import android.view.LayoutInflater;
@@ -55,6 +57,8 @@ public class TrustAgentSettings extends ListFragment implements View.OnClickList
    private static final String SERVICE_INTERFACE = TrustAgentService.SERVICE_INTERFACE;
    private static final String TRUST_AGENT_META_DATA = TrustAgentService.TRUST_AGENT_META_DATA;

    private static final String PERMISSION_PROVIDE_AGENT = Manifest.permission.PROVIDE_TRUST_AGENT;


    private final ArraySet<ComponentName> mActiveAgents = new ArraySet<ComponentName>();
    private final ArrayMap<ComponentName, AgentInfo> mAvailableAgents
@@ -121,6 +125,15 @@ public class TrustAgentSettings extends ListFragment implements View.OnClickList

        for (ResolveInfo resolveInfo : resolveInfos) {
            if (resolveInfo.serviceInfo == null) continue;

            String packageName = resolveInfo.serviceInfo.packageName;
            if (pm.checkPermission(PERMISSION_PROVIDE_AGENT, packageName)
                    != PackageManager.PERMISSION_GRANTED) {
                Log.w(TAG, "Skipping agent because package " + packageName
                        + " does not have permission " + PERMISSION_PROVIDE_AGENT + ".");
                continue;
            }

            ComponentName name = getComponentName(resolveInfo);
            if (!mAvailableAgents.containsKey(name)) {
                AgentInfo agentInfo = new AgentInfo();