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

Commit b918f226 authored by Fan Zhang's avatar Fan Zhang
Browse files

Disallow VoiceInteractionService as assist on LowMemDevice

Bug: 111443156
Test: robotests
Change-Id: Ic3413af2b5450c43c4749b7748b676a01209a5ac
parent 3889acd5
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.settings.applications.assist;

import android.app.ActivityManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -38,6 +39,8 @@ import com.android.settingslib.widget.CandidateInfo;
import java.util.ArrayList;
import java.util.List;

import androidx.annotation.VisibleForTesting;

public class DefaultAssistPicker extends DefaultAppPickerFragment {

    private static final String TAG = "DefaultAssistPicker";
@@ -45,9 +48,12 @@ public class DefaultAssistPicker extends DefaultAppPickerFragment {
            new Intent(VoiceInteractionService.SERVICE_INTERFACE);
    private static final Intent ASSIST_ACTIVITY_PROBE =
            new Intent(Intent.ACTION_ASSIST);
    private final List<Info> mAvailableAssistants = new ArrayList<>();

    @VisibleForTesting
    final List<Info> mAvailableAssistants = new ArrayList<>();

    private AssistUtils mAssistUtils;
    private ActivityManager mActivityManager;

    @Override
    public int getMetricsCategory() {
@@ -63,6 +69,7 @@ public class DefaultAssistPicker extends DefaultAppPickerFragment {
    public void onAttach(Context context) {
        super.onAttach(context);
        mAssistUtils = new AssistUtils(context);
        mActivityManager = context.getSystemService(ActivityManager.class);
    }

    @Override
@@ -132,7 +139,11 @@ public class DefaultAssistPicker extends DefaultAppPickerFragment {
        return mAssistUtils.getAssistComponentForUser(mUserId);
    }

    private void addAssistServices() {
    @VisibleForTesting
    void addAssistServices() {
        if (mActivityManager.isLowRamDevice()) {
            return;
        }
        final List<ResolveInfo> services = mPm.queryIntentServices(
                ASSIST_SERVICE_PROBE, PackageManager.GET_META_DATA);
        for (ResolveInfo resolveInfo : services) {
+14 −1
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;

import android.app.ActivityManager;
import android.content.ComponentName;
import android.content.Context;
import android.provider.Settings;
@@ -31,6 +32,8 @@ import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.shadow.api.Shadow;
import org.robolectric.shadows.ShadowActivityManager;
import org.robolectric.util.ReflectionHelpers;

import java.util.ArrayList;
@@ -48,10 +51,12 @@ public class DefaultAssistPickerTest {

    private Context mContext;
    private DefaultAssistPicker mPicker;
    private ShadowActivityManager mShadowActivityManager;

    @Before
    public void setUp() {
        mContext = RuntimeEnvironment.application;
        mShadowActivityManager = Shadow.extract(mContext.getSystemService(ActivityManager.class));
        mPicker = spy(new DefaultAssistPicker());
        mPicker.onAttach(mContext);
        doReturn(mContext).when(mPicker).getContext();
@@ -71,7 +76,7 @@ public class DefaultAssistPickerTest {
    }

    @Test
    public void setDefaultAppKey_noAvaialbleAssit_shouldClearDefaultAssist() {
    public void setDefaultAppKey_noAvailableAssist_shouldClearDefaultAssist() {
        final List<DefaultAssistPicker.Info> assistants = new ArrayList<>();
        ReflectionHelpers.setField(mPicker, "mAvailableAssistants", assistants);
        mPicker.setDefaultKey(sTestAssist.flattenToString());
@@ -94,4 +99,12 @@ public class DefaultAssistPickerTest {
                .isEmpty();
        assertThat(mPicker.getDefaultKey()).isNull();
    }

    @Test
    public void addAssistService_lowRamDevice_shouldDoNothing() {
        mShadowActivityManager.setIsLowRamDevice(true);
        mPicker.addAssistServices();

        assertThat(mPicker.mAvailableAssistants).hasSize(0);
    }
}