Loading res/xml/security_settings_misc.xml +1 −1 Original line number Diff line number Diff line Loading @@ -69,7 +69,7 @@ <Preference android:key="manage_trust_agents" android:title="@string/manage_trust_agents" android:persistent="false" android:fragment="com.android.settings.TrustAgentSettings"/> android:fragment="com.android.settings.security.trustagent.TrustAgentSettings"/> <Preference android:key="screen_pinning_settings" Loading src/com/android/settings/SecuritySettings.java +6 −11 Original line number Diff line number Diff line Loading @@ -55,7 +55,6 @@ import android.util.Log; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.widget.LockPatternUtils; import com.android.settings.TrustAgentUtils.TrustAgentComponentInfo; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.settings.dashboard.DashboardFeatureProvider; import com.android.settings.dashboard.SummaryLoader; Loading @@ -73,7 +72,8 @@ import com.android.settings.search.Indexable; import com.android.settings.search.SearchIndexableRaw; import com.android.settings.security.OwnerInfoPreferenceController; import com.android.settings.security.SecurityFeatureProvider; import com.android.settings.trustagent.TrustAgentManager; import com.android.settings.security.trustagent.TrustAgentManager; import com.android.settings.security.trustagent.TrustAgentManager.TrustAgentComponentInfo; import com.android.settings.widget.GearPreference; import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedPreference; Loading Loading @@ -127,11 +127,6 @@ public class SecuritySettings extends SettingsPreferenceFragment private static final String KEY_SECURITY_STATUS = "security_status"; private static final String SECURITY_STATUS_KEY_PREFIX = "security_status_"; // Package verifier Settings @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) static final String KEY_PACKAGE_VERIFIER_STATUS = "security_status_package_verifier"; private static final int PACKAGE_VERIFIER_STATE_ENABLED = 1; // Device management settings private static final String KEY_ENTERPRISE_PRIVACY = "enterprise_privacy"; private static final String KEY_MANAGE_DEVICE_ADMIN = "manage_device_admin"; Loading Loading @@ -541,7 +536,7 @@ public class SecuritySettings extends SettingsPreferenceFragment TrustAgentManager trustAgentManager, LockPatternUtils utils, DevicePolicyManager dpm) { PackageManager pm = context.getPackageManager(); ArrayList<TrustAgentComponentInfo> result = new ArrayList<TrustAgentComponentInfo>(); ArrayList<TrustAgentComponentInfo> result = new ArrayList<>(); List<ResolveInfo> resolveInfos = pm.queryIntentServices(TRUST_AGENT_INTENT, PackageManager.GET_META_DATA); List<ComponentName> enabledTrustAgents = utils.getEnabledTrustAgents(MY_USER_ID); Loading @@ -557,13 +552,13 @@ public class SecuritySettings extends SettingsPreferenceFragment continue; } TrustAgentComponentInfo trustAgentComponentInfo = TrustAgentUtils.getSettingsComponent(pm, resolveInfo); trustAgentManager.getSettingsComponent(pm, resolveInfo); if (trustAgentComponentInfo.componentName == null || !enabledTrustAgents.contains( TrustAgentUtils.getComponentName(resolveInfo)) || trustAgentManager.getComponentName(resolveInfo)) || TextUtils.isEmpty(trustAgentComponentInfo.title)) continue; if (admin != null && dpm.getTrustAgentConfiguration( null, TrustAgentUtils.getComponentName(resolveInfo)) == null) { null, trustAgentManager.getComponentName(resolveInfo)) == null) { trustAgentComponentInfo.admin = admin; } result.add(trustAgentComponentInfo); Loading src/com/android/settings/security/SecurityFeatureProvider.java +1 −1 Original line number Diff line number Diff line Loading @@ -19,7 +19,7 @@ package com.android.settings.security; import android.content.Context; import android.support.v7.preference.PreferenceScreen; import com.android.settings.trustagent.TrustAgentManager; import com.android.settings.security.trustagent.TrustAgentManager; import com.android.settingslib.drawer.DashboardCategory; Loading src/com/android/settings/security/SecurityFeatureProviderImpl.java +2 −3 Original line number Diff line number Diff line Loading @@ -30,8 +30,7 @@ import android.util.ArrayMap; import android.util.Pair; import com.android.settings.R; import com.android.settings.trustagent.TrustAgentManager; import com.android.settings.trustagent.TrustAgentManagerImpl; import com.android.settings.security.trustagent.TrustAgentManager; import com.android.settingslib.drawer.DashboardCategory; import com.android.settingslib.drawer.Tile; import com.android.settingslib.drawer.TileUtils; Loading Loading @@ -192,7 +191,7 @@ public class SecurityFeatureProviderImpl implements SecurityFeatureProvider { @Override public TrustAgentManager getTrustAgentManager() { if (mTrustAgentManager == null) { mTrustAgentManager = new TrustAgentManagerImpl(); mTrustAgentManager = new TrustAgentManager(); } return mTrustAgentManager; } Loading src/com/android/settings/TrustAgentUtils.java→src/com/android/settings/security/trustagent/TrustAgentManager.java +48 −18 Original line number Diff line number Diff line /* * Copyright (C) 2014 The Android Open Source Project * Copyright (C) 2016 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. Loading @@ -11,10 +11,12 @@ * 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 * limitations under the License. */ package com.android.settings; package com.android.settings.security.trustagent; import static android.service.trust.TrustAgentService.TRUST_AGENT_META_DATA; import android.content.ComponentName; import android.content.pm.PackageManager; Loading @@ -22,40 +24,67 @@ import android.content.pm.ResolveInfo; import android.content.res.Resources; import android.content.res.TypedArray; import android.content.res.XmlResourceParser; import android.service.trust.TrustAgentService; import android.support.annotation.VisibleForTesting; import android.util.AttributeSet; import android.util.Log; import android.util.Slog; import android.util.Xml; import com.android.settingslib.RestrictedLockUtils; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import java.io.IOException; import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; // TODO(b/34461256): Refactor TrustAgentUtils into TrustAgentManager. public class TrustAgentUtils { static final String TAG = "TrustAgentUtils"; private static final String TRUST_AGENT_META_DATA = TrustAgentService.TRUST_AGENT_META_DATA; /** A manager for trust agent state. */ public class TrustAgentManager { public static class TrustAgentComponentInfo { ComponentName componentName; String title; String summary; EnforcedAdmin admin = null; public ComponentName componentName; public String title; public String summary; public RestrictedLockUtils.EnforcedAdmin admin = null; } private static final String TAG = "TrustAgentManager"; @VisibleForTesting static final String PERMISSION_PROVIDE_AGENT = android.Manifest.permission.PROVIDE_TRUST_AGENT; /** * Determines if the service associated with a resolved trust agent intent is allowed to provide * trust on this device. * * @param resolveInfo The entry corresponding to the matched trust agent intent. * @param pm The package manager to be used to check for permissions. * @return {@code true} if the associated service is allowed to provide a trust agent, and * {@code false} if otherwise. */ public boolean shouldProvideTrust(ResolveInfo resolveInfo, PackageManager pm) { final 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 + "."); return false; } return true; } public static ComponentName getComponentName(ResolveInfo resolveInfo) { public ComponentName getComponentName(ResolveInfo resolveInfo) { if (resolveInfo == null || resolveInfo.serviceInfo == null) return null; return new ComponentName(resolveInfo.serviceInfo.packageName, resolveInfo.serviceInfo.name); } public static TrustAgentComponentInfo getSettingsComponent( public TrustAgentComponentInfo getSettingsComponent( PackageManager pm, ResolveInfo resolveInfo) { if (resolveInfo == null || resolveInfo.serviceInfo == null || resolveInfo.serviceInfo.metaData == null) return null; || resolveInfo.serviceInfo.metaData == null) { return null; } String cn = null; TrustAgentComponentInfo trustAgentComponentInfo = new TrustAgentComponentInfo(); XmlResourceParser parser = null; Loading Loading @@ -101,7 +130,8 @@ public class TrustAgentUtils { if (cn != null && cn.indexOf('/') < 0) { cn = resolveInfo.serviceInfo.packageName + "/" + cn; } trustAgentComponentInfo.componentName = (cn == null) ? null : ComponentName.unflattenFromString(cn); trustAgentComponentInfo.componentName = (cn == null) ? null : ComponentName.unflattenFromString(cn); return trustAgentComponentInfo; } } Loading
res/xml/security_settings_misc.xml +1 −1 Original line number Diff line number Diff line Loading @@ -69,7 +69,7 @@ <Preference android:key="manage_trust_agents" android:title="@string/manage_trust_agents" android:persistent="false" android:fragment="com.android.settings.TrustAgentSettings"/> android:fragment="com.android.settings.security.trustagent.TrustAgentSettings"/> <Preference android:key="screen_pinning_settings" Loading
src/com/android/settings/SecuritySettings.java +6 −11 Original line number Diff line number Diff line Loading @@ -55,7 +55,6 @@ import android.util.Log; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.widget.LockPatternUtils; import com.android.settings.TrustAgentUtils.TrustAgentComponentInfo; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.settings.dashboard.DashboardFeatureProvider; import com.android.settings.dashboard.SummaryLoader; Loading @@ -73,7 +72,8 @@ import com.android.settings.search.Indexable; import com.android.settings.search.SearchIndexableRaw; import com.android.settings.security.OwnerInfoPreferenceController; import com.android.settings.security.SecurityFeatureProvider; import com.android.settings.trustagent.TrustAgentManager; import com.android.settings.security.trustagent.TrustAgentManager; import com.android.settings.security.trustagent.TrustAgentManager.TrustAgentComponentInfo; import com.android.settings.widget.GearPreference; import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedPreference; Loading Loading @@ -127,11 +127,6 @@ public class SecuritySettings extends SettingsPreferenceFragment private static final String KEY_SECURITY_STATUS = "security_status"; private static final String SECURITY_STATUS_KEY_PREFIX = "security_status_"; // Package verifier Settings @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) static final String KEY_PACKAGE_VERIFIER_STATUS = "security_status_package_verifier"; private static final int PACKAGE_VERIFIER_STATE_ENABLED = 1; // Device management settings private static final String KEY_ENTERPRISE_PRIVACY = "enterprise_privacy"; private static final String KEY_MANAGE_DEVICE_ADMIN = "manage_device_admin"; Loading Loading @@ -541,7 +536,7 @@ public class SecuritySettings extends SettingsPreferenceFragment TrustAgentManager trustAgentManager, LockPatternUtils utils, DevicePolicyManager dpm) { PackageManager pm = context.getPackageManager(); ArrayList<TrustAgentComponentInfo> result = new ArrayList<TrustAgentComponentInfo>(); ArrayList<TrustAgentComponentInfo> result = new ArrayList<>(); List<ResolveInfo> resolveInfos = pm.queryIntentServices(TRUST_AGENT_INTENT, PackageManager.GET_META_DATA); List<ComponentName> enabledTrustAgents = utils.getEnabledTrustAgents(MY_USER_ID); Loading @@ -557,13 +552,13 @@ public class SecuritySettings extends SettingsPreferenceFragment continue; } TrustAgentComponentInfo trustAgentComponentInfo = TrustAgentUtils.getSettingsComponent(pm, resolveInfo); trustAgentManager.getSettingsComponent(pm, resolveInfo); if (trustAgentComponentInfo.componentName == null || !enabledTrustAgents.contains( TrustAgentUtils.getComponentName(resolveInfo)) || trustAgentManager.getComponentName(resolveInfo)) || TextUtils.isEmpty(trustAgentComponentInfo.title)) continue; if (admin != null && dpm.getTrustAgentConfiguration( null, TrustAgentUtils.getComponentName(resolveInfo)) == null) { null, trustAgentManager.getComponentName(resolveInfo)) == null) { trustAgentComponentInfo.admin = admin; } result.add(trustAgentComponentInfo); Loading
src/com/android/settings/security/SecurityFeatureProvider.java +1 −1 Original line number Diff line number Diff line Loading @@ -19,7 +19,7 @@ package com.android.settings.security; import android.content.Context; import android.support.v7.preference.PreferenceScreen; import com.android.settings.trustagent.TrustAgentManager; import com.android.settings.security.trustagent.TrustAgentManager; import com.android.settingslib.drawer.DashboardCategory; Loading
src/com/android/settings/security/SecurityFeatureProviderImpl.java +2 −3 Original line number Diff line number Diff line Loading @@ -30,8 +30,7 @@ import android.util.ArrayMap; import android.util.Pair; import com.android.settings.R; import com.android.settings.trustagent.TrustAgentManager; import com.android.settings.trustagent.TrustAgentManagerImpl; import com.android.settings.security.trustagent.TrustAgentManager; import com.android.settingslib.drawer.DashboardCategory; import com.android.settingslib.drawer.Tile; import com.android.settingslib.drawer.TileUtils; Loading Loading @@ -192,7 +191,7 @@ public class SecurityFeatureProviderImpl implements SecurityFeatureProvider { @Override public TrustAgentManager getTrustAgentManager() { if (mTrustAgentManager == null) { mTrustAgentManager = new TrustAgentManagerImpl(); mTrustAgentManager = new TrustAgentManager(); } return mTrustAgentManager; } Loading
src/com/android/settings/TrustAgentUtils.java→src/com/android/settings/security/trustagent/TrustAgentManager.java +48 −18 Original line number Diff line number Diff line /* * Copyright (C) 2014 The Android Open Source Project * Copyright (C) 2016 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. Loading @@ -11,10 +11,12 @@ * 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 * limitations under the License. */ package com.android.settings; package com.android.settings.security.trustagent; import static android.service.trust.TrustAgentService.TRUST_AGENT_META_DATA; import android.content.ComponentName; import android.content.pm.PackageManager; Loading @@ -22,40 +24,67 @@ import android.content.pm.ResolveInfo; import android.content.res.Resources; import android.content.res.TypedArray; import android.content.res.XmlResourceParser; import android.service.trust.TrustAgentService; import android.support.annotation.VisibleForTesting; import android.util.AttributeSet; import android.util.Log; import android.util.Slog; import android.util.Xml; import com.android.settingslib.RestrictedLockUtils; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import java.io.IOException; import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; // TODO(b/34461256): Refactor TrustAgentUtils into TrustAgentManager. public class TrustAgentUtils { static final String TAG = "TrustAgentUtils"; private static final String TRUST_AGENT_META_DATA = TrustAgentService.TRUST_AGENT_META_DATA; /** A manager for trust agent state. */ public class TrustAgentManager { public static class TrustAgentComponentInfo { ComponentName componentName; String title; String summary; EnforcedAdmin admin = null; public ComponentName componentName; public String title; public String summary; public RestrictedLockUtils.EnforcedAdmin admin = null; } private static final String TAG = "TrustAgentManager"; @VisibleForTesting static final String PERMISSION_PROVIDE_AGENT = android.Manifest.permission.PROVIDE_TRUST_AGENT; /** * Determines if the service associated with a resolved trust agent intent is allowed to provide * trust on this device. * * @param resolveInfo The entry corresponding to the matched trust agent intent. * @param pm The package manager to be used to check for permissions. * @return {@code true} if the associated service is allowed to provide a trust agent, and * {@code false} if otherwise. */ public boolean shouldProvideTrust(ResolveInfo resolveInfo, PackageManager pm) { final 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 + "."); return false; } return true; } public static ComponentName getComponentName(ResolveInfo resolveInfo) { public ComponentName getComponentName(ResolveInfo resolveInfo) { if (resolveInfo == null || resolveInfo.serviceInfo == null) return null; return new ComponentName(resolveInfo.serviceInfo.packageName, resolveInfo.serviceInfo.name); } public static TrustAgentComponentInfo getSettingsComponent( public TrustAgentComponentInfo getSettingsComponent( PackageManager pm, ResolveInfo resolveInfo) { if (resolveInfo == null || resolveInfo.serviceInfo == null || resolveInfo.serviceInfo.metaData == null) return null; || resolveInfo.serviceInfo.metaData == null) { return null; } String cn = null; TrustAgentComponentInfo trustAgentComponentInfo = new TrustAgentComponentInfo(); XmlResourceParser parser = null; Loading Loading @@ -101,7 +130,8 @@ public class TrustAgentUtils { if (cn != null && cn.indexOf('/') < 0) { cn = resolveInfo.serviceInfo.packageName + "/" + cn; } trustAgentComponentInfo.componentName = (cn == null) ? null : ComponentName.unflattenFromString(cn); trustAgentComponentInfo.componentName = (cn == null) ? null : ComponentName.unflattenFromString(cn); return trustAgentComponentInfo; } }