From 2837d010adc8484e8035699c9f8262b163aba076 Mon Sep 17 00:00:00 2001 From: Lei Yu Date: Wed, 22 May 2019 13:55:24 -0700 Subject: [PATCH] Update logic to build slider slice Return null when slider getMax() <= getMin(), instead of force build it to make it crash Fixes: 132657278 Test: RunSettingsRoboTests Change-Id: I9f3c078ae07522aa8f1cebdee3f73df2d014d6bb --- .../settings/slices/SliceBuilderUtils.java | 4 +++ .../slices/SliceBuilderUtilsTest.java | 10 ++++++ .../FakeInvalidSliderController.java | 31 +++++++++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 tests/robotests/src/com/android/settings/testutils/FakeInvalidSliderController.java diff --git a/src/com/android/settings/slices/SliceBuilderUtils.java b/src/com/android/settings/slices/SliceBuilderUtils.java index cf45d57381d..0e510325f8b 100644 --- a/src/com/android/settings/slices/SliceBuilderUtils.java +++ b/src/com/android/settings/slices/SliceBuilderUtils.java @@ -300,6 +300,10 @@ public class SliceBuilderUtils { private static Slice buildSliderSlice(Context context, SliceData sliceData, BasePreferenceController controller) { final SliderPreferenceController sliderController = (SliderPreferenceController) controller; + if (sliderController.getMax() <= sliderController.getMin()) { + Log.e(TAG, "Invalid sliderController: " + sliderController.getPreferenceKey()); + return null; + } final PendingIntent actionIntent = getSliderAction(context, sliceData); final PendingIntent contentIntent = getContentPendingIntent(context, sliceData); final IconCompat icon = getSafeIcon(context, sliceData); diff --git a/tests/robotests/src/com/android/settings/slices/SliceBuilderUtilsTest.java b/tests/robotests/src/com/android/settings/slices/SliceBuilderUtilsTest.java index 2e47930b73c..1db7c8df729 100644 --- a/tests/robotests/src/com/android/settings/slices/SliceBuilderUtilsTest.java +++ b/tests/robotests/src/com/android/settings/slices/SliceBuilderUtilsTest.java @@ -43,6 +43,7 @@ import com.android.settings.R; import com.android.settings.core.BasePreferenceController; import com.android.settings.testutils.FakeCopyableController; import com.android.settings.testutils.FakeFeatureFactory; +import com.android.settings.testutils.FakeInvalidSliderController; import com.android.settings.testutils.FakeSliderController; import com.android.settings.testutils.FakeToggleController; import com.android.settings.testutils.FakeUnavailablePreferenceController; @@ -67,6 +68,7 @@ public class SliceBuilderUtilsTest { private final Uri URI = Uri.parse("content://com.android.settings.slices/test"); private final Class TOGGLE_CONTROLLER = FakeToggleController.class; private final Class SLIDER_CONTROLLER = FakeSliderController.class; + private final Class INVALID_SLIDER_CONTROLLER = FakeInvalidSliderController.class; private final Class COPYABLE_CONTROLLER = FakeCopyableController.class; private final Class CONTEXT_CONTROLLER = FakeContextOnlyPreferenceController.class; @@ -470,6 +472,14 @@ public class SliceBuilderUtilsTest { assertThat(actualIconResource).isEqualTo(expectedIconResource); } + @Test + public void buildSliderSlice_invalidSlider_returnNull() { + final SliceData data = getDummyData(INVALID_SLIDER_CONTROLLER, SliceData.SliceType.SLIDER, + 0x0 /* icon */); + + assertThat(SliceBuilderUtils.buildSlice(mContext, data)).isNull(); + } + @Test public void getSafeIcon_replacesEmptyIconWithSettingsIcon() { final int settingsIcon = R.drawable.ic_settings_accent; diff --git a/tests/robotests/src/com/android/settings/testutils/FakeInvalidSliderController.java b/tests/robotests/src/com/android/settings/testutils/FakeInvalidSliderController.java new file mode 100644 index 00000000000..cb49f65d632 --- /dev/null +++ b/tests/robotests/src/com/android/settings/testutils/FakeInvalidSliderController.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.settings.testutils; + +import android.content.Context; + +public class FakeInvalidSliderController extends FakeSliderController { + + public FakeInvalidSliderController(Context context, String key) { + super(context, key); + } + + @Override + public int getMax() { + // Return 0 to make it invalid + return 0; + } +}