getAuthority using resolveContentProvider

Gets the provider info directly by providing the authority, rather than
getting all providers, and then finding the matching authority. This
should be much more efficient.

Test: local test, confirm entry point still appears
Bug: 316799867
Change-Id: I9b98cff3b8f19a6cab8dd64b433a2b3129546ada
This commit is contained in:
Derek Jedral
2024-03-27 18:23:21 +00:00
parent e2099b7f94
commit 9cdb54315e
4 changed files with 14 additions and 37 deletions

View File

@@ -22,7 +22,6 @@ import android.content.Intent;
import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
import android.content.pm.ComponentInfo; import android.content.pm.ComponentInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.pm.ProviderInfo; import android.content.pm.ProviderInfo;
import android.provider.DeviceConfig; import android.provider.DeviceConfig;
@@ -38,8 +37,6 @@ import com.android.settings.Utils;
import com.android.settings.core.BasePreferenceController; import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.BasePreferenceController.AvailabilityStatus; import com.android.settings.core.BasePreferenceController.AvailabilityStatus;
import java.util.List;
/** Utilities for active unlock details shared between Security Settings and Safety Center. */ /** Utilities for active unlock details shared between Security Settings and Safety Center. */
public class ActiveUnlockStatusUtils { public class ActiveUnlockStatusUtils {
@@ -98,19 +95,15 @@ public class ActiveUnlockStatusUtils {
Log.i(TAG, "authority not set"); Log.i(TAG, "authority not set");
return null; return null;
} }
final List<PackageInfo> packageInfos = final ProviderInfo provider = mContext.getPackageManager().resolveContentProvider(
mContext.getPackageManager().getInstalledPackages( authority, PackageManager.ComponentInfoFlags.of(PackageManager.MATCH_SYSTEM_ONLY));
PackageManager.PackageInfoFlags.of(PackageManager.GET_PROVIDERS)); if (provider == null) {
for (PackageInfo packageInfo : packageInfos) { Log.i(TAG, "could not find provider");
final ProviderInfo[] providers = packageInfo.providers; return null;
if (providers != null) { }
for (ProviderInfo provider : providers) {
if (authority.equals(provider.authority) && isSystemApp(provider)) { if (authority.equals(provider.authority) && isSystemApp(provider)) {
return authority; return authority;
} }
}
}
}
Log.e(TAG, "authority not valid"); Log.e(TAG, "authority not valid");
return null; return null;
} }

View File

@@ -19,6 +19,7 @@ package com.android.settings.biometrics.activeunlock;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.any; import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import static org.robolectric.shadows.ShadowLooper.idleMainLooper; import static org.robolectric.shadows.ShadowLooper.idleMainLooper;
@@ -44,8 +45,6 @@ import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
import java.util.ArrayList;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowDeviceConfig.class}) @Config(shadows = {ShadowDeviceConfig.class})
public class ActiveUnlockContentListenerTest { public class ActiveUnlockContentListenerTest {
@@ -141,8 +140,7 @@ public class ActiveUnlockContentListenerTest {
@Test @Test
public void noProvider_subscribeDoesntRegisterObserver() { public void noProvider_subscribeDoesntRegisterObserver() {
when(mPackageManager.getInstalledPackages(any())) when(mPackageManager.resolveContentProvider(anyString(), any())).thenReturn(null);
.thenReturn(new ArrayList<>());
OnContentChangedListener listener = new OnContentChangedListener() { OnContentChangedListener listener = new OnContentChangedListener() {
@Override @Override
public void onContentChanged(String newValue) {} public void onContentChanged(String newValue) {}

View File

@@ -18,12 +18,12 @@ package com.android.settings.testutils;
import static org.mockito.Mockito.any; import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.content.Context; import android.content.Context;
import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.pm.ProviderInfo; import android.content.pm.ProviderInfo;
import android.content.pm.ResolveInfo; import android.content.pm.ResolveInfo;
@@ -32,8 +32,6 @@ import android.provider.Settings;
import com.android.settings.biometrics.activeunlock.ActiveUnlockStatusUtils; import com.android.settings.biometrics.activeunlock.ActiveUnlockStatusUtils;
import java.util.ArrayList;
/** Utilities class to enable or disable the Active Unlock flag in tests. */ /** Utilities class to enable or disable the Active Unlock flag in tests. */
public final class ActiveUnlockTestUtils { public final class ActiveUnlockTestUtils {
@@ -61,15 +59,10 @@ public final class ActiveUnlockTestUtils {
resolveInfo.activityInfo.applicationInfo = applicationInfo; resolveInfo.activityInfo.applicationInfo = applicationInfo;
when(packageManager.resolveActivity(any(), anyInt())).thenReturn(resolveInfo); when(packageManager.resolveActivity(any(), anyInt())).thenReturn(resolveInfo);
PackageInfo packageInfo = new PackageInfo();
packageInfo.applicationInfo = applicationInfo;
ProviderInfo providerInfo = new ProviderInfo(); ProviderInfo providerInfo = new ProviderInfo();
providerInfo.authority = PROVIDER; providerInfo.authority = PROVIDER;
providerInfo.applicationInfo = applicationInfo; providerInfo.applicationInfo = applicationInfo;
packageInfo.providers = new ProviderInfo[] { providerInfo }; when(packageManager.resolveContentProvider(anyString(), any())).thenReturn(providerInfo);
ArrayList<PackageInfo> packageInfos = new ArrayList<>();
packageInfos.add(packageInfo);
when(packageManager.getInstalledPackages(any())).thenReturn(packageInfos);
DeviceConfig.setProperty( DeviceConfig.setProperty(
DeviceConfig.NAMESPACE_REMOTE_AUTH, DeviceConfig.NAMESPACE_REMOTE_AUTH,

View File

@@ -18,12 +18,12 @@ package com.android.settings.testutils;
import static org.mockito.Mockito.any; import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.content.Context; import android.content.Context;
import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.pm.ProviderInfo; import android.content.pm.ProviderInfo;
import android.content.pm.ResolveInfo; import android.content.pm.ResolveInfo;
@@ -32,8 +32,6 @@ import android.provider.Settings;
import com.android.settings.biometrics.activeunlock.ActiveUnlockStatusUtils; import com.android.settings.biometrics.activeunlock.ActiveUnlockStatusUtils;
import java.util.ArrayList;
/** Utilities class to enable or disable the Active Unlock flag in tests. */ /** Utilities class to enable or disable the Active Unlock flag in tests. */
public final class ActiveUnlockTestUtils { public final class ActiveUnlockTestUtils {
@@ -61,15 +59,10 @@ public final class ActiveUnlockTestUtils {
resolveInfo.activityInfo.applicationInfo = applicationInfo; resolveInfo.activityInfo.applicationInfo = applicationInfo;
when(packageManager.resolveActivity(any(), anyInt())).thenReturn(resolveInfo); when(packageManager.resolveActivity(any(), anyInt())).thenReturn(resolveInfo);
PackageInfo packageInfo = new PackageInfo();
packageInfo.applicationInfo = applicationInfo;
ProviderInfo providerInfo = new ProviderInfo(); ProviderInfo providerInfo = new ProviderInfo();
providerInfo.authority = PROVIDER; providerInfo.authority = PROVIDER;
providerInfo.applicationInfo = applicationInfo; providerInfo.applicationInfo = applicationInfo;
packageInfo.providers = new ProviderInfo[] { providerInfo }; when(packageManager.resolveContentProvider(anyString(), any())).thenReturn(providerInfo);
ArrayList<PackageInfo> packageInfos = new ArrayList<>();
packageInfos.add(packageInfo);
when(packageManager.getInstalledPackages(any())).thenReturn(packageInfos);
DeviceConfig.setProperty( DeviceConfig.setProperty(
DeviceConfig.NAMESPACE_REMOTE_AUTH, DeviceConfig.NAMESPACE_REMOTE_AUTH,