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:
@@ -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,18 +95,14 @@ 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;
|
||||||
|
@@ -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) {}
|
||||||
|
@@ -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,
|
||||||
|
@@ -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,
|
||||||
|
Reference in New Issue
Block a user