Disallow VoiceInteractionService as assist on LowMemDevice

Bug: 111443156
Test: robotests
Change-Id: Ic3413af2b5450c43c4749b7748b676a01209a5ac
This commit is contained in:
Fan Zhang
2018-07-13 12:55:50 -07:00
parent 3889acd53f
commit b918f226d7
2 changed files with 27 additions and 3 deletions

View File

@@ -16,6 +16,7 @@
package com.android.settings.applications.assist; package com.android.settings.applications.assist;
import android.app.ActivityManager;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
@@ -38,6 +39,8 @@ import com.android.settingslib.widget.CandidateInfo;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import androidx.annotation.VisibleForTesting;
public class DefaultAssistPicker extends DefaultAppPickerFragment { public class DefaultAssistPicker extends DefaultAppPickerFragment {
private static final String TAG = "DefaultAssistPicker"; private static final String TAG = "DefaultAssistPicker";
@@ -45,9 +48,12 @@ public class DefaultAssistPicker extends DefaultAppPickerFragment {
new Intent(VoiceInteractionService.SERVICE_INTERFACE); new Intent(VoiceInteractionService.SERVICE_INTERFACE);
private static final Intent ASSIST_ACTIVITY_PROBE = private static final Intent ASSIST_ACTIVITY_PROBE =
new Intent(Intent.ACTION_ASSIST); new Intent(Intent.ACTION_ASSIST);
private final List<Info> mAvailableAssistants = new ArrayList<>();
@VisibleForTesting
final List<Info> mAvailableAssistants = new ArrayList<>();
private AssistUtils mAssistUtils; private AssistUtils mAssistUtils;
private ActivityManager mActivityManager;
@Override @Override
public int getMetricsCategory() { public int getMetricsCategory() {
@@ -63,6 +69,7 @@ public class DefaultAssistPicker extends DefaultAppPickerFragment {
public void onAttach(Context context) { public void onAttach(Context context) {
super.onAttach(context); super.onAttach(context);
mAssistUtils = new AssistUtils(context); mAssistUtils = new AssistUtils(context);
mActivityManager = context.getSystemService(ActivityManager.class);
} }
@Override @Override
@@ -132,7 +139,11 @@ public class DefaultAssistPicker extends DefaultAppPickerFragment {
return mAssistUtils.getAssistComponentForUser(mUserId); return mAssistUtils.getAssistComponentForUser(mUserId);
} }
private void addAssistServices() { @VisibleForTesting
void addAssistServices() {
if (mActivityManager.isLowRamDevice()) {
return;
}
final List<ResolveInfo> services = mPm.queryIntentServices( final List<ResolveInfo> services = mPm.queryIntentServices(
ASSIST_SERVICE_PROBE, PackageManager.GET_META_DATA); ASSIST_SERVICE_PROBE, PackageManager.GET_META_DATA);
for (ResolveInfo resolveInfo : services) { for (ResolveInfo resolveInfo : services) {

View File

@@ -20,6 +20,7 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import android.app.ActivityManager;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.provider.Settings; import android.provider.Settings;
@@ -31,6 +32,8 @@ import org.junit.BeforeClass;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.shadow.api.Shadow;
import org.robolectric.shadows.ShadowActivityManager;
import org.robolectric.util.ReflectionHelpers; import org.robolectric.util.ReflectionHelpers;
import java.util.ArrayList; import java.util.ArrayList;
@@ -48,10 +51,12 @@ public class DefaultAssistPickerTest {
private Context mContext; private Context mContext;
private DefaultAssistPicker mPicker; private DefaultAssistPicker mPicker;
private ShadowActivityManager mShadowActivityManager;
@Before @Before
public void setUp() { public void setUp() {
mContext = RuntimeEnvironment.application; mContext = RuntimeEnvironment.application;
mShadowActivityManager = Shadow.extract(mContext.getSystemService(ActivityManager.class));
mPicker = spy(new DefaultAssistPicker()); mPicker = spy(new DefaultAssistPicker());
mPicker.onAttach(mContext); mPicker.onAttach(mContext);
doReturn(mContext).when(mPicker).getContext(); doReturn(mContext).when(mPicker).getContext();
@@ -71,7 +76,7 @@ public class DefaultAssistPickerTest {
} }
@Test @Test
public void setDefaultAppKey_noAvaialbleAssit_shouldClearDefaultAssist() { public void setDefaultAppKey_noAvailableAssist_shouldClearDefaultAssist() {
final List<DefaultAssistPicker.Info> assistants = new ArrayList<>(); final List<DefaultAssistPicker.Info> assistants = new ArrayList<>();
ReflectionHelpers.setField(mPicker, "mAvailableAssistants", assistants); ReflectionHelpers.setField(mPicker, "mAvailableAssistants", assistants);
mPicker.setDefaultKey(sTestAssist.flattenToString()); mPicker.setDefaultKey(sTestAssist.flattenToString());
@@ -94,4 +99,12 @@ public class DefaultAssistPickerTest {
.isEmpty(); .isEmpty();
assertThat(mPicker.getDefaultKey()).isNull(); assertThat(mPicker.getDefaultKey()).isNull();
} }
@Test
public void addAssistService_lowRamDevice_shouldDoNothing() {
mShadowActivityManager.setIsLowRamDevice(true);
mPicker.addAssistServices();
assertThat(mPicker.mAvailableAssistants).hasSize(0);
}
} }