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

Commit 9cdb5431 authored by Derek Jedral's avatar Derek Jedral
Browse files

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
parent e2099b7f
Loading
Loading
Loading
Loading
+8 −15
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.ComponentInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ProviderInfo;
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.AvailabilityStatus;

import java.util.List;

/** Utilities for active unlock details shared between Security Settings and Safety Center. */
public class ActiveUnlockStatusUtils {

@@ -98,19 +95,15 @@ public class ActiveUnlockStatusUtils {
            Log.i(TAG, "authority not set");
            return null;
        }
        final List<PackageInfo> packageInfos =
                mContext.getPackageManager().getInstalledPackages(
                        PackageManager.PackageInfoFlags.of(PackageManager.GET_PROVIDERS));
        for (PackageInfo packageInfo : packageInfos) {
            final ProviderInfo[] providers = packageInfo.providers;
            if (providers != null) {
                for (ProviderInfo provider : providers) {
        final ProviderInfo provider = mContext.getPackageManager().resolveContentProvider(
                authority, PackageManager.ComponentInfoFlags.of(PackageManager.MATCH_SYSTEM_ONLY));
        if (provider == null) {
            Log.i(TAG, "could not find provider");
            return null;
        }
        if (authority.equals(provider.authority) && isSystemApp(provider)) {
            return authority;
        }
                }
            }
        }
        Log.e(TAG, "authority not valid");
        return null;
    }
+2 −4
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.settings.biometrics.activeunlock;
import static com.google.common.truth.Truth.assertThat;

import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import static org.robolectric.shadows.ShadowLooper.idleMainLooper;
@@ -44,8 +45,6 @@ import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;

import java.util.ArrayList;

@RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowDeviceConfig.class})
public class ActiveUnlockContentListenerTest {
@@ -141,8 +140,7 @@ public class ActiveUnlockContentListenerTest {

    @Test
    public void noProvider_subscribeDoesntRegisterObserver() {
        when(mPackageManager.getInstalledPackages(any()))
                .thenReturn(new ArrayList<>());
        when(mPackageManager.resolveContentProvider(anyString(), any())).thenReturn(null);
        OnContentChangedListener listener = new OnContentChangedListener() {
            @Override
            public void onContentChanged(String newValue) {}
+2 −9
Original line number Diff line number Diff line
@@ -18,12 +18,12 @@ package com.android.settings.testutils;

import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.when;

import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ProviderInfo;
import android.content.pm.ResolveInfo;
@@ -32,8 +32,6 @@ import android.provider.Settings;

import com.android.settings.biometrics.activeunlock.ActiveUnlockStatusUtils;

import java.util.ArrayList;

/** Utilities class to enable or disable the Active Unlock flag in tests. */
public final class ActiveUnlockTestUtils {

@@ -61,15 +59,10 @@ public final class ActiveUnlockTestUtils {
        resolveInfo.activityInfo.applicationInfo = applicationInfo;
        when(packageManager.resolveActivity(any(), anyInt())).thenReturn(resolveInfo);

        PackageInfo packageInfo = new PackageInfo();
        packageInfo.applicationInfo = applicationInfo;
        ProviderInfo providerInfo = new ProviderInfo();
        providerInfo.authority = PROVIDER;
        providerInfo.applicationInfo = applicationInfo;
        packageInfo.providers = new ProviderInfo[] { providerInfo };
        ArrayList<PackageInfo> packageInfos = new ArrayList<>();
        packageInfos.add(packageInfo);
        when(packageManager.getInstalledPackages(any())).thenReturn(packageInfos);
        when(packageManager.resolveContentProvider(anyString(), any())).thenReturn(providerInfo);

        DeviceConfig.setProperty(
                DeviceConfig.NAMESPACE_REMOTE_AUTH,
+2 −9
Original line number Diff line number Diff line
@@ -18,12 +18,12 @@ package com.android.settings.testutils;

import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.when;

import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ProviderInfo;
import android.content.pm.ResolveInfo;
@@ -32,8 +32,6 @@ import android.provider.Settings;

import com.android.settings.biometrics.activeunlock.ActiveUnlockStatusUtils;

import java.util.ArrayList;

/** Utilities class to enable or disable the Active Unlock flag in tests. */
public final class ActiveUnlockTestUtils {

@@ -61,15 +59,10 @@ public final class ActiveUnlockTestUtils {
        resolveInfo.activityInfo.applicationInfo = applicationInfo;
        when(packageManager.resolveActivity(any(), anyInt())).thenReturn(resolveInfo);

        PackageInfo packageInfo = new PackageInfo();
        packageInfo.applicationInfo = applicationInfo;
        ProviderInfo providerInfo = new ProviderInfo();
        providerInfo.authority = PROVIDER;
        providerInfo.applicationInfo = applicationInfo;
        packageInfo.providers = new ProviderInfo[] { providerInfo };
        ArrayList<PackageInfo> packageInfos = new ArrayList<>();
        packageInfos.add(packageInfo);
        when(packageManager.getInstalledPackages(any())).thenReturn(packageInfos);
        when(packageManager.resolveContentProvider(anyString(), any())).thenReturn(providerInfo);

        DeviceConfig.setProperty(
                DeviceConfig.NAMESPACE_REMOTE_AUTH,