Make pref unsearchable for more availibility status.

Bug: 72748524
Test: robotest
Change-Id: I12b13ac3503f851857787df98a2d2f599c71b9b7
This commit is contained in:
Fan Zhang
2018-05-10 14:11:49 -07:00
parent b02c4a18fc
commit 80376a5b46
4 changed files with 54 additions and 16 deletions

View File

@@ -187,6 +187,7 @@ public abstract class BasePreferenceController extends AbstractPreferenceControl
public final boolean isAvailable() { public final boolean isAvailable() {
final int availabilityStatus = getAvailabilityStatus(); final int availabilityStatus = getAvailabilityStatus();
return (availabilityStatus == AVAILABLE return (availabilityStatus == AVAILABLE
|| availabilityStatus == AVAILABLE_UNSEARCHABLE
|| availabilityStatus == DISABLED_DEPENDENT_SETTING); || availabilityStatus == DISABLED_DEPENDENT_SETTING);
} }
@@ -230,16 +231,15 @@ public abstract class BasePreferenceController extends AbstractPreferenceControl
* Called by SearchIndexProvider#getNonIndexableKeys * Called by SearchIndexProvider#getNonIndexableKeys
*/ */
public void updateNonIndexableKeys(List<String> keys) { public void updateNonIndexableKeys(List<String> keys) {
if (this instanceof AbstractPreferenceController) { final boolean shouldSuppressFromSearch = !isAvailable()
if (!isAvailable()) { || getAvailabilityStatus() == AVAILABLE_UNSEARCHABLE;
final String key = getPreferenceKey(); if (shouldSuppressFromSearch) {
if (TextUtils.isEmpty(key)) { final String key = getPreferenceKey();
Log.w(TAG, if (TextUtils.isEmpty(key)) {
"Skipping updateNonIndexableKeys due to empty key " + this.toString()); Log.w(TAG, "Skipping updateNonIndexableKeys due to empty key " + toString());
return; return;
}
keys.add(key);
} }
keys.add(key);
} }
} }

View File

@@ -21,7 +21,6 @@ import android.os.UserHandle;
import android.provider.Settings; import android.provider.Settings;
import com.android.internal.widget.LockPatternUtils; import com.android.internal.widget.LockPatternUtils;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.TogglePreferenceController; import com.android.settings.core.TogglePreferenceController;
public class LockdownButtonPreferenceController extends TogglePreferenceController { public class LockdownButtonPreferenceController extends TogglePreferenceController {
@@ -36,9 +35,9 @@ public class LockdownButtonPreferenceController extends TogglePreferenceControll
@Override @Override
public int getAvailabilityStatus() { public int getAvailabilityStatus() {
if (mLockPatternUtils.isSecure(UserHandle.myUserId())) { if (mLockPatternUtils.isSecure(UserHandle.myUserId())) {
return BasePreferenceController.AVAILABLE; return AVAILABLE;
} else { } else {
return BasePreferenceController.DISABLED_FOR_USER; return DISABLED_FOR_USER;
} }
} }

View File

@@ -27,9 +27,7 @@ import android.graphics.drawable.Icon;
import android.net.Uri; import android.net.Uri;
import android.net.wifi.WifiManager; import android.net.wifi.WifiManager;
import android.provider.Settings; import android.provider.Settings;
import androidx.annotation.VisibleForTesting;
import android.provider.SettingsSlicesContract; import android.provider.SettingsSlicesContract;
import androidx.core.graphics.drawable.IconCompat;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import android.util.Pair; import android.util.Pair;
@@ -45,6 +43,8 @@ import java.util.Map;
import java.util.WeakHashMap; import java.util.WeakHashMap;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import androidx.annotation.VisibleForTesting;
import androidx.core.graphics.drawable.IconCompat;
import androidx.slice.Slice; import androidx.slice.Slice;
import androidx.slice.SliceProvider; import androidx.slice.SliceProvider;
import androidx.slice.builders.ListBuilder; import androidx.slice.builders.ListBuilder;

View File

@@ -16,12 +16,12 @@
package com.android.settings.core; package com.android.settings.core;
import static com.android.settings.core.BasePreferenceController.AVAILABLE; import static com.android.settings.core.BasePreferenceController.AVAILABLE;
import static com.android.settings.core.BasePreferenceController.AVAILABLE_UNSEARCHABLE;
import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE; import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE;
import static com.android.settings.core.BasePreferenceController.DISABLED_DEPENDENT_SETTING; import static com.android.settings.core.BasePreferenceController.DISABLED_DEPENDENT_SETTING;
import static com.android.settings.core.BasePreferenceController.DISABLED_FOR_USER; import static com.android.settings.core.BasePreferenceController.DISABLED_FOR_USER;
import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE; import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
@@ -36,8 +36,10 @@ import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import java.util.ArrayList;
import java.util.List;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.preference.PreferenceGroup;
import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceScreen;
@RunWith(SettingsRobolectricTestRunner.class) @RunWith(SettingsRobolectricTestRunner.class)
@@ -72,6 +74,13 @@ public class BasePreferenceControllerTest {
assertThat(mPreferenceController.isAvailable()).isTrue(); assertThat(mPreferenceController.isAvailable()).isTrue();
} }
@Test
public void isAvailable_availableStatusUnSearchable_returnsTrue() {
mPreferenceController.setAvailability(AVAILABLE_UNSEARCHABLE);
assertThat(mPreferenceController.isAvailable()).isTrue();
}
@Test @Test
public void isAvailable_availableStatusUnsupportedOnDevice_returnsFalse() { public void isAvailable_availableStatusUnsupportedOnDevice_returnsFalse() {
mPreferenceController.setAvailability(UNSUPPORTED_ON_DEVICE); mPreferenceController.setAvailability(UNSUPPORTED_ON_DEVICE);
@@ -159,6 +168,36 @@ public class BasePreferenceControllerTest {
assertThat(preference.isEnabled()).isFalse(); assertThat(preference.isEnabled()).isFalse();
} }
@Test
public void updateNonIndexableKeys_controllerUnavailable_shouldAddKey() {
final List<String> keys = new ArrayList<>();
mPreferenceController.setAvailability(UNSUPPORTED_ON_DEVICE);
mPreferenceController.updateNonIndexableKeys(keys);
assertThat(keys).containsExactly(mPreferenceController.getPreferenceKey());
}
@Test
public void updateNonIndexableKeys_controllerUnsearchable_shouldAddKey() {
final List<String> keys = new ArrayList<>();
mPreferenceController.setAvailability(AVAILABLE_UNSEARCHABLE);
mPreferenceController.updateNonIndexableKeys(keys);
assertThat(keys).containsExactly(mPreferenceController.getPreferenceKey());
}
@Test
public void updateNonIndexableKeys_controllerAvailable_shouldNotAddKey() {
final List<String> keys = new ArrayList<>();
mPreferenceController.setAvailability(AVAILABLE);
mPreferenceController.updateNonIndexableKeys(keys);
assertThat(keys).isEmpty();
}
private class FakeBasePreferenceController extends BasePreferenceController { private class FakeBasePreferenceController extends BasePreferenceController {
public int mAvailable; public int mAvailable;