Index the gesture options in System Navigation Settings page

Fixes: 167536360
Test: manual verify & robotest
Change-Id: Ie1a24a7206153dc1405f8a28369a6bade11ddd39
This commit is contained in:
Edgar Wang
2022-04-11 14:39:38 +08:00
parent 34eecaad79
commit 257ebe4a5e
2 changed files with 68 additions and 2 deletions

View File

@@ -28,6 +28,7 @@ import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.om.IOverlayManager; import android.content.om.IOverlayManager;
import android.content.om.OverlayInfo; import android.content.om.OverlayInfo;
import android.content.res.Resources;
import android.os.Bundle; import android.os.Bundle;
import android.os.RemoteException; import android.os.RemoteException;
import android.os.ServiceManager; import android.os.ServiceManager;
@@ -49,6 +50,7 @@ import com.android.settings.support.actionbar.HelpResourceProvider;
import com.android.settings.utils.CandidateInfoExtra; import com.android.settings.utils.CandidateInfoExtra;
import com.android.settings.widget.RadioButtonPickerFragment; import com.android.settings.widget.RadioButtonPickerFragment;
import com.android.settingslib.search.SearchIndexable; import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.search.SearchIndexableRaw;
import com.android.settingslib.widget.CandidateInfo; import com.android.settingslib.widget.CandidateInfo;
import com.android.settingslib.widget.IllustrationPreference; import com.android.settingslib.widget.IllustrationPreference;
import com.android.settingslib.widget.SelectorWithWidgetPreference; import com.android.settingslib.widget.SelectorWithWidgetPreference;
@@ -320,6 +322,39 @@ public class SystemNavigationGestureSettings extends RadioButtonPickerFragment i
protected boolean isPageSearchEnabled(Context context) { protected boolean isPageSearchEnabled(Context context) {
return SystemNavigationPreferenceController.isGestureAvailable(context); return SystemNavigationPreferenceController.isGestureAvailable(context);
} }
@Override
public List<SearchIndexableRaw> getRawDataToIndex(Context context,
boolean enabled) {
final Resources res = context.getResources();
final List<SearchIndexableRaw> result = new ArrayList<>();
if (SystemNavigationPreferenceController.isOverlayPackageAvailable(context,
NAV_BAR_MODE_GESTURAL_OVERLAY)) {
SearchIndexableRaw data = new SearchIndexableRaw(context);
data.title = res.getString(R.string.edge_to_edge_navigation_title);
data.key = KEY_SYSTEM_NAV_GESTURAL;
result.add(data);
}
if (SystemNavigationPreferenceController.isOverlayPackageAvailable(context,
NAV_BAR_MODE_2BUTTON_OVERLAY)) {
SearchIndexableRaw data = new SearchIndexableRaw(context);
data.title = res.getString(R.string.swipe_up_to_switch_apps_title);
data.key = KEY_SYSTEM_NAV_2BUTTONS;
result.add(data);
}
if (SystemNavigationPreferenceController.isOverlayPackageAvailable(context,
NAV_BAR_MODE_3BUTTON_OVERLAY)) {
SearchIndexableRaw data = new SearchIndexableRaw(context);
data.title = res.getString(R.string.legacy_navigation_title);
data.key = KEY_SYSTEM_NAV_3BUTTONS;
result.add(data);
}
return result;
}
}; };
// From HelpResourceProvider // From HelpResourceProvider

View File

@@ -34,6 +34,7 @@ import static junit.framework.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times; import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
@@ -41,10 +42,14 @@ import static org.mockito.Mockito.when;
import android.content.Context; import android.content.Context;
import android.content.om.IOverlayManager; import android.content.om.IOverlayManager;
import android.content.om.OverlayInfo; import android.content.om.OverlayInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.provider.SearchIndexableResource; import android.provider.SearchIndexableResource;
import com.android.internal.R; import com.android.internal.R;
import com.android.settings.testutils.shadow.SettingsShadowResources; import com.android.settings.testutils.shadow.SettingsShadowResources;
import com.android.settingslib.search.SearchIndexableRaw;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@@ -67,6 +72,8 @@ public class SystemNavigationGestureSettingsTest {
@Mock @Mock
private IOverlayManager mOverlayManager; private IOverlayManager mOverlayManager;
@Mock @Mock
private PackageManager mPackageManager;
@Mock
private OverlayInfo mOverlayInfoEnabled; private OverlayInfo mOverlayInfoEnabled;
@Mock @Mock
private OverlayInfo mOverlayInfoDisabled; private OverlayInfo mOverlayInfoDisabled;
@@ -75,16 +82,17 @@ public class SystemNavigationGestureSettingsTest {
public void setUp() throws Exception { public void setUp() throws Exception {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application; mContext = spy(RuntimeEnvironment.application);
mSettings = new SystemNavigationGestureSettings(); mSettings = new SystemNavigationGestureSettings();
when(mOverlayInfoDisabled.isEnabled()).thenReturn(false); when(mOverlayInfoDisabled.isEnabled()).thenReturn(false);
when(mOverlayInfoEnabled.isEnabled()).thenReturn(true); when(mOverlayInfoEnabled.isEnabled()).thenReturn(true);
when(mOverlayManager.getOverlayInfo(any(), anyInt())).thenReturn(mOverlayInfoDisabled); when(mOverlayManager.getOverlayInfo(any(), anyInt())).thenReturn(mOverlayInfoDisabled);
when(mContext.getPackageManager()).thenReturn(mPackageManager);
} }
@Test @Test
public void testSearchIndexProvider_shouldIndexResource() { public void searchIndexProvider_shouldIndexResource() {
final List<SearchIndexableResource> indexRes = final List<SearchIndexableResource> indexRes =
SystemNavigationGestureSettings.SEARCH_INDEX_DATA_PROVIDER.getXmlResourcesToIndex( SystemNavigationGestureSettings.SEARCH_INDEX_DATA_PROVIDER.getXmlResourcesToIndex(
RuntimeEnvironment.application, true /* enabled */); RuntimeEnvironment.application, true /* enabled */);
@@ -93,6 +101,29 @@ public class SystemNavigationGestureSettingsTest {
assertThat(indexRes.get(0).xmlResId).isEqualTo(mSettings.getPreferenceScreenResId()); assertThat(indexRes.get(0).xmlResId).isEqualTo(mSettings.getPreferenceScreenResId());
} }
@Test
public void searchIndexProvider_gesturePackageExist_shouldBeIndexed()
throws NameNotFoundException {
PackageInfo info = new PackageInfo();
when(mPackageManager.getPackageInfo(NAV_BAR_MODE_GESTURAL_OVERLAY, 0))
.thenReturn(info);
final List<SearchIndexableRaw> indexRaws =
SystemNavigationGestureSettings.SEARCH_INDEX_DATA_PROVIDER
.getRawDataToIndex(mContext, true /* enabled */);
assertThat(indexRaws).isNotEmpty();
}
@Test
public void searchIndexProvider_noNavigationPackageExist_shouldReturnEmpty() {
final List<SearchIndexableRaw> indexRaws =
SystemNavigationGestureSettings.SEARCH_INDEX_DATA_PROVIDER
.getRawDataToIndex(mContext, true /* enabled */);
assertThat(indexRaws).isEmpty();
}
@Test @Test
public void testGetCurrentSystemNavigationMode() { public void testGetCurrentSystemNavigationMode() {
SettingsShadowResources.overrideResource( SettingsShadowResources.overrideResource(