404 lines
15 KiB
Java
404 lines
15 KiB
Java
/*
|
|
* 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.settingslib.drawer;
|
|
|
|
import static com.android.settingslib.drawer.SwitchesProvider.EXTRA_SWITCH_CHECKED_STATE;
|
|
import static com.android.settingslib.drawer.SwitchesProvider.EXTRA_SWITCH_DATA;
|
|
import static com.android.settingslib.drawer.SwitchesProvider.EXTRA_SWITCH_SET_CHECKED_ERROR;
|
|
import static com.android.settingslib.drawer.SwitchesProvider.EXTRA_SWITCH_SET_CHECKED_ERROR_MESSAGE;
|
|
import static com.android.settingslib.drawer.SwitchesProvider.METHOD_GET_DYNAMIC_SUMMARY;
|
|
import static com.android.settingslib.drawer.SwitchesProvider.METHOD_GET_DYNAMIC_TITLE;
|
|
import static com.android.settingslib.drawer.SwitchesProvider.METHOD_GET_PROVIDER_ICON;
|
|
import static com.android.settingslib.drawer.SwitchesProvider.METHOD_GET_SWITCH_DATA;
|
|
import static com.android.settingslib.drawer.SwitchesProvider.METHOD_IS_CHECKED;
|
|
import static com.android.settingslib.drawer.SwitchesProvider.METHOD_ON_CHECKED_CHANGED;
|
|
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT;
|
|
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY;
|
|
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITLE;
|
|
|
|
import static com.google.common.truth.Truth.assertThat;
|
|
|
|
import android.content.Context;
|
|
import android.content.pm.ProviderInfo;
|
|
import android.os.Bundle;
|
|
|
|
import com.android.settingslib.drawer.PrimarySwitchControllerTest.TestPrimarySwitchController;
|
|
import com.android.settingslib.drawer.SwitchController.MetaData;
|
|
|
|
import org.junit.Before;
|
|
import org.junit.Rule;
|
|
import org.junit.Test;
|
|
import org.junit.rules.ExpectedException;
|
|
import org.junit.runner.RunWith;
|
|
import org.robolectric.RobolectricTestRunner;
|
|
import org.robolectric.RuntimeEnvironment;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
@RunWith(RobolectricTestRunner.class)
|
|
public class SwitchesProviderTest {
|
|
|
|
@Rule
|
|
public final ExpectedException thrown = ExpectedException.none();
|
|
|
|
private Context mContext;
|
|
private ProviderInfo mProviderInfo;
|
|
|
|
private TestSwitchesProvider mSwitchesProvider;
|
|
|
|
@Before
|
|
public void setUp() {
|
|
mContext = RuntimeEnvironment.application;
|
|
mSwitchesProvider = new TestSwitchesProvider();
|
|
mProviderInfo = new ProviderInfo();
|
|
mProviderInfo.authority = "auth";
|
|
}
|
|
|
|
@Test
|
|
public void attachInfo_noController_shouldThrowIllegalArgumentException() {
|
|
thrown.expect(IllegalArgumentException.class);
|
|
|
|
mSwitchesProvider.attachInfo(mContext, mProviderInfo);
|
|
}
|
|
|
|
@Test
|
|
public void attachInfo_NoSwitchKeyInController_shouldThrowNullPointerException() {
|
|
thrown.expect(NullPointerException.class);
|
|
final TestSwitchController controller = new TestSwitchController();
|
|
mSwitchesProvider.addSwitchController(controller);
|
|
|
|
mSwitchesProvider.attachInfo(mContext, mProviderInfo);
|
|
}
|
|
|
|
@Test
|
|
public void attachInfo_NoMetaDataInController_shouldThrowNullPointerException() {
|
|
thrown.expect(NullPointerException.class);
|
|
final TestSwitchController controller = new TestSwitchController();
|
|
controller.setKey("123");
|
|
mSwitchesProvider.addSwitchController(controller);
|
|
|
|
mSwitchesProvider.attachInfo(mContext, mProviderInfo);
|
|
}
|
|
|
|
@Test
|
|
public void attachInfo_duplicateSwitchKey_shouldThrowIllegalArgumentException() {
|
|
thrown.expect(IllegalArgumentException.class);
|
|
final TestSwitchController controller1 = new TestSwitchController();
|
|
final TestSwitchController controller2 = new TestSwitchController();
|
|
controller1.setKey("123");
|
|
controller2.setKey("123");
|
|
controller1.setMetaData(new MetaData("category"));
|
|
controller2.setMetaData(new MetaData("category"));
|
|
mSwitchesProvider.addSwitchController(controller1);
|
|
mSwitchesProvider.addSwitchController(controller2);
|
|
|
|
mSwitchesProvider.attachInfo(mContext, mProviderInfo);
|
|
}
|
|
|
|
@Test
|
|
public void attachInfo_hasDifferentControllers_shouldNotThrowException() {
|
|
final TestSwitchController controller1 = new TestSwitchController();
|
|
final TestSwitchController controller2 = new TestSwitchController();
|
|
controller1.setKey("123");
|
|
controller2.setKey("456");
|
|
controller1.setMetaData(new MetaData("category"));
|
|
controller2.setMetaData(new MetaData("category"));
|
|
mSwitchesProvider.addSwitchController(controller1);
|
|
mSwitchesProvider.addSwitchController(controller2);
|
|
|
|
mSwitchesProvider.attachInfo(mContext, mProviderInfo);
|
|
}
|
|
|
|
@Test
|
|
public void getSwitchData_shouldNotReturnPrimarySwitchData() {
|
|
final SwitchController controller = new TestPrimarySwitchController("123");
|
|
mSwitchesProvider.addSwitchController(controller);
|
|
mSwitchesProvider.attachInfo(mContext, mProviderInfo);
|
|
|
|
final Bundle switchData = mSwitchesProvider.call(METHOD_GET_SWITCH_DATA, "uri" ,
|
|
null /* extras*/);
|
|
|
|
final ArrayList<Bundle> dataList = switchData.getParcelableArrayList(EXTRA_SWITCH_DATA);
|
|
assertThat(dataList).isEmpty();
|
|
}
|
|
|
|
@Test
|
|
public void getSwitchData_shouldReturnDataList() {
|
|
final TestSwitchController controller = new TestSwitchController();
|
|
controller.setKey("123");
|
|
controller.setMetaData(new MetaData("category"));
|
|
mSwitchesProvider.addSwitchController(controller);
|
|
mSwitchesProvider.attachInfo(mContext, mProviderInfo);
|
|
|
|
final Bundle switchData = mSwitchesProvider.call(METHOD_GET_SWITCH_DATA, "uri" ,
|
|
null /* extras*/);
|
|
|
|
final ArrayList<Bundle> dataList = switchData.getParcelableArrayList(EXTRA_SWITCH_DATA);
|
|
assertThat(dataList).hasSize(1);
|
|
assertThat(dataList.get(0).getString(META_DATA_PREFERENCE_KEYHINT)).isEqualTo("123");
|
|
}
|
|
|
|
@Test
|
|
public void getSwitchDataByKey_shouldReturnData() {
|
|
final Bundle extras = new Bundle();
|
|
extras.putString(META_DATA_PREFERENCE_KEYHINT, "123");
|
|
final TestSwitchController controller = new TestSwitchController();
|
|
controller.setKey("123");
|
|
controller.setMetaData(new MetaData("category"));
|
|
mSwitchesProvider.addSwitchController(controller);
|
|
mSwitchesProvider.attachInfo(mContext, mProviderInfo);
|
|
|
|
final Bundle switchData = mSwitchesProvider.call(METHOD_GET_SWITCH_DATA, "uri" , extras);
|
|
|
|
assertThat(switchData.getString(META_DATA_PREFERENCE_KEYHINT)).isEqualTo("123");
|
|
}
|
|
|
|
@Test
|
|
public void isChecked_shouldReturnCheckedState() {
|
|
final Bundle extras = new Bundle();
|
|
extras.putString(META_DATA_PREFERENCE_KEYHINT, "123");
|
|
final TestSwitchController controller = new TestSwitchController();
|
|
controller.setKey("123");
|
|
controller.setMetaData(new MetaData("category"));
|
|
mSwitchesProvider.addSwitchController(controller);
|
|
mSwitchesProvider.attachInfo(mContext, mProviderInfo);
|
|
|
|
controller.setChecked(true);
|
|
Bundle result = mSwitchesProvider.call(METHOD_IS_CHECKED, "uri" , extras);
|
|
|
|
assertThat(result.getBoolean(EXTRA_SWITCH_CHECKED_STATE)).isTrue();
|
|
|
|
controller.setChecked(false);
|
|
result = mSwitchesProvider.call(METHOD_IS_CHECKED, "uri" , extras);
|
|
|
|
assertThat(result.getBoolean(EXTRA_SWITCH_CHECKED_STATE)).isFalse();
|
|
}
|
|
|
|
@Test
|
|
public void getProviderIcon_noImplementInterface_shouldReturnNull() {
|
|
final Bundle extras = new Bundle();
|
|
extras.putString(META_DATA_PREFERENCE_KEYHINT, "123");
|
|
final TestSwitchController controller = new TestSwitchController();
|
|
controller.setKey("123");
|
|
controller.setMetaData(new MetaData("category"));
|
|
mSwitchesProvider.addSwitchController(controller);
|
|
mSwitchesProvider.attachInfo(mContext, mProviderInfo);
|
|
|
|
final Bundle iconBundle = mSwitchesProvider.call(METHOD_GET_PROVIDER_ICON, "uri" , extras);
|
|
|
|
assertThat(iconBundle).isNull();
|
|
}
|
|
|
|
@Test
|
|
public void getProviderIcon_implementInterface_shouldReturnIcon() {
|
|
final Bundle extras = new Bundle();
|
|
extras.putString(META_DATA_PREFERENCE_KEYHINT, "123");
|
|
final TestSwitchController controller = new TestDynamicSwitchController();
|
|
controller.setKey("123");
|
|
controller.setMetaData(new MetaData("category"));
|
|
mSwitchesProvider.addSwitchController(controller);
|
|
mSwitchesProvider.attachInfo(mContext, mProviderInfo);
|
|
|
|
final Bundle iconBundle = mSwitchesProvider.call(METHOD_GET_PROVIDER_ICON, "uri" , extras);
|
|
|
|
assertThat(iconBundle).isEqualTo(TestDynamicSwitchController.ICON_BUNDLE);
|
|
}
|
|
|
|
@Test
|
|
public void getDynamicTitle_noImplementInterface_shouldReturnNull() {
|
|
final Bundle extras = new Bundle();
|
|
extras.putString(META_DATA_PREFERENCE_KEYHINT, "123");
|
|
final TestSwitchController controller = new TestSwitchController();
|
|
controller.setKey("123");
|
|
controller.setMetaData(new MetaData("category"));
|
|
mSwitchesProvider.addSwitchController(controller);
|
|
mSwitchesProvider.attachInfo(mContext, mProviderInfo);
|
|
|
|
final Bundle result = mSwitchesProvider.call(METHOD_GET_DYNAMIC_TITLE, "uri" , extras);
|
|
|
|
assertThat(result).isNull();
|
|
}
|
|
|
|
@Test
|
|
public void getDynamicTitle_implementInterface_shouldReturnTitle() {
|
|
final Bundle extras = new Bundle();
|
|
extras.putString(META_DATA_PREFERENCE_KEYHINT, "123");
|
|
final TestSwitchController controller = new TestDynamicSwitchController();
|
|
controller.setKey("123");
|
|
controller.setMetaData(new MetaData("category"));
|
|
mSwitchesProvider.addSwitchController(controller);
|
|
mSwitchesProvider.attachInfo(mContext, mProviderInfo);
|
|
|
|
final Bundle result = mSwitchesProvider.call(METHOD_GET_DYNAMIC_TITLE, "uri" , extras);
|
|
|
|
assertThat(result.getString(META_DATA_PREFERENCE_TITLE))
|
|
.isEqualTo(TestDynamicSwitchController.TITLE);
|
|
}
|
|
|
|
@Test
|
|
public void getDynamicSummary_noImplementInterface_shouldReturnNull() {
|
|
final Bundle extras = new Bundle();
|
|
extras.putString(META_DATA_PREFERENCE_KEYHINT, "123");
|
|
final TestSwitchController controller = new TestSwitchController();
|
|
controller.setKey("123");
|
|
controller.setMetaData(new MetaData("category"));
|
|
mSwitchesProvider.addSwitchController(controller);
|
|
mSwitchesProvider.attachInfo(mContext, mProviderInfo);
|
|
|
|
final Bundle result = mSwitchesProvider.call(METHOD_GET_DYNAMIC_SUMMARY, "uri" , extras);
|
|
|
|
assertThat(result).isNull();
|
|
}
|
|
|
|
@Test
|
|
public void getDynamicSummary_implementInterface_shouldReturnSummary() {
|
|
final Bundle extras = new Bundle();
|
|
extras.putString(META_DATA_PREFERENCE_KEYHINT, "123");
|
|
final TestSwitchController controller = new TestDynamicSwitchController();
|
|
controller.setKey("123");
|
|
controller.setMetaData(new MetaData("category"));
|
|
mSwitchesProvider.addSwitchController(controller);
|
|
mSwitchesProvider.attachInfo(mContext, mProviderInfo);
|
|
|
|
final Bundle result = mSwitchesProvider.call(METHOD_GET_DYNAMIC_SUMMARY, "uri" , extras);
|
|
|
|
assertThat(result.getString(META_DATA_PREFERENCE_SUMMARY))
|
|
.isEqualTo(TestDynamicSwitchController.SUMMARY);
|
|
}
|
|
|
|
@Test
|
|
public void onCheckedChangedSuccess_shouldReturnNoError() {
|
|
final Bundle extras = new Bundle();
|
|
extras.putString(META_DATA_PREFERENCE_KEYHINT, "123");
|
|
final TestSwitchController controller = new TestSwitchController();
|
|
controller.setKey("123");
|
|
controller.setMetaData(new MetaData("category"));
|
|
mSwitchesProvider.addSwitchController(controller);
|
|
mSwitchesProvider.attachInfo(mContext, mProviderInfo);
|
|
|
|
final Bundle result = mSwitchesProvider.call(METHOD_ON_CHECKED_CHANGED, "uri" , extras);
|
|
|
|
assertThat(result.getBoolean(EXTRA_SWITCH_SET_CHECKED_ERROR)).isFalse();
|
|
}
|
|
|
|
@Test
|
|
public void onCheckedChangedFailed_shouldReturnErrorMessage() {
|
|
final Bundle extras = new Bundle();
|
|
extras.putString(META_DATA_PREFERENCE_KEYHINT, "123");
|
|
final TestSwitchController controller = new TestSwitchController();
|
|
controller.setKey("123");
|
|
controller.setMetaData(new MetaData("category"));
|
|
controller.setErrorMessage("error");
|
|
mSwitchesProvider.addSwitchController(controller);
|
|
mSwitchesProvider.attachInfo(mContext, mProviderInfo);
|
|
|
|
final Bundle result = mSwitchesProvider.call(METHOD_ON_CHECKED_CHANGED, "uri" , extras);
|
|
|
|
assertThat(result.getBoolean(EXTRA_SWITCH_SET_CHECKED_ERROR)).isTrue();
|
|
assertThat(result.getString(EXTRA_SWITCH_SET_CHECKED_ERROR_MESSAGE)).isEqualTo("error");
|
|
}
|
|
|
|
private class TestSwitchesProvider extends SwitchesProvider {
|
|
|
|
private List<SwitchController> mControllers;
|
|
|
|
@Override
|
|
protected List<SwitchController> createSwitchControllers() {
|
|
return mControllers;
|
|
}
|
|
|
|
void addSwitchController(SwitchController controller) {
|
|
if (mControllers == null) {
|
|
mControllers = new ArrayList<>();
|
|
}
|
|
mControllers.add(controller);
|
|
}
|
|
}
|
|
|
|
private static class TestSwitchController extends SwitchController {
|
|
|
|
private String mKey;
|
|
private MetaData mMetaData;
|
|
private boolean mChecked;
|
|
private String mErrorMsg;
|
|
|
|
@Override
|
|
public String getSwitchKey() {
|
|
return mKey;
|
|
}
|
|
|
|
@Override
|
|
protected MetaData getMetaData() {
|
|
return mMetaData;
|
|
}
|
|
|
|
@Override
|
|
protected boolean isChecked() {
|
|
return mChecked;
|
|
}
|
|
|
|
@Override
|
|
protected boolean onCheckedChanged(boolean checked) {
|
|
return mErrorMsg == null ? true : false;
|
|
}
|
|
|
|
@Override
|
|
protected String getErrorMessage(boolean attemptedChecked) {
|
|
return mErrorMsg;
|
|
}
|
|
|
|
void setKey(String key) {
|
|
mKey = key;
|
|
}
|
|
|
|
void setMetaData(MetaData metaData) {
|
|
mMetaData = metaData;
|
|
}
|
|
|
|
void setChecked(boolean checked) {
|
|
mChecked = checked;
|
|
}
|
|
|
|
void setErrorMessage(String errorMsg) {
|
|
mErrorMsg = errorMsg;
|
|
}
|
|
}
|
|
|
|
private static class TestDynamicSwitchController extends TestSwitchController
|
|
implements ProviderIcon, DynamicTitle, DynamicSummary {
|
|
|
|
static final String TITLE = "title";
|
|
static final String SUMMARY = "summary";
|
|
static final Bundle ICON_BUNDLE = new Bundle();
|
|
|
|
@Override
|
|
public Bundle getProviderIcon() {
|
|
return ICON_BUNDLE;
|
|
}
|
|
|
|
@Override
|
|
public String getDynamicTitle() {
|
|
return TITLE;
|
|
}
|
|
|
|
@Override
|
|
public String getDynamicSummary() {
|
|
return SUMMARY;
|
|
}
|
|
}
|
|
}
|