Remove condition manager v1 code.

Change-Id: I866c1f7c493c6080ccf766ecfc8e6b00dafeecd9
Fixes: 112485407
Test: robotests
This commit is contained in:
Fan Zhang
2018-08-21 12:15:42 -07:00
parent 0aec0caed3
commit a4b14bd9f1
60 changed files with 333 additions and 2829 deletions

View File

@@ -47,8 +47,9 @@ import androidx.recyclerview.widget.RecyclerView;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.homepage.conditional.Condition;
import com.android.settings.dashboard.suggestions.SuggestionAdapter;
import com.android.settings.homepage.conditional.ConditionManager;
import com.android.settings.homepage.conditional.ConditionalCard;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.SettingsShadowResources;
@@ -77,22 +78,22 @@ public class DashboardAdapterTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private SettingsActivity mContext;
@Mock
private View mView;
@Mock
private Condition mCondition;
private ConditionalCard mCondition;
@Mock
private Resources mResources;
@Mock
private WindowManager mWindowManager;
@Mock
private ConditionManager mConditionManager;
private ActivityInfo mActivityInfo;
private FakeFeatureFactory mFactory;
private DashboardAdapter mDashboardAdapter;
private List<Condition> mConditionList;
private List<ConditionalCard> mConditionList;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mFactory = FakeFeatureFactory.setupForTest();
FakeFeatureFactory.setupForTest();
mActivityInfo = new ActivityInfo();
mActivityInfo.packageName = "pkg";
mActivityInfo.name = "class";
@@ -105,18 +106,15 @@ public class DashboardAdapterTest {
mConditionList = new ArrayList<>();
mConditionList.add(mCondition);
when(mCondition.shouldShow()).thenReturn(true);
mDashboardAdapter = new DashboardAdapter(mContext, null /* savedInstanceState */,
mConditionList, null /* conditionManager */,
null /* suggestionControllerMixin */, null /* lifecycle */);
when(mView.getTag()).thenReturn(mCondition);
mConditionManager, null /* suggestionControllerMixin */, null /* lifecycle */);
}
@Test
public void onSuggestionClosed_notOnlySuggestion_updateSuggestionOnly() {
final DashboardAdapter adapter =
spy(new DashboardAdapter(mContext, null /* savedInstanceState */,
null /* conditions */, null /* conditionManager */,
mConditionManager,
null /* suggestionControllerMixin */,
null /* lifecycle */));
final List<Suggestion> suggestions = makeSuggestions("pkg1", "pkg2", "pkg3");
@@ -149,7 +147,7 @@ public class DashboardAdapterTest {
public void onSuggestionClosed_onlySuggestion_updateDashboardData() {
final DashboardAdapter adapter =
spy(new DashboardAdapter(mContext, null /* savedInstanceState */,
null /* conditions */, null /* conditionManager */,
mConditionManager,
null /* suggestionControllerMixin */, null /* lifecycle */));
final List<Suggestion> suggestions = makeSuggestions("pkg1");
adapter.setSuggestions(suggestions);
@@ -166,7 +164,7 @@ public class DashboardAdapterTest {
public void onSuggestionClosed_notInSuggestionList_shouldNotUpdateSuggestionList() {
final DashboardAdapter adapter =
spy(new DashboardAdapter(mContext, null /* savedInstanceState */,
null /* conditions */, null /* conditionManager */,
mConditionManager,
null /* suggestionControllerMixin */, null /* lifecycle */));
final List<Suggestion> suggestions = makeSuggestions("pkg1");
adapter.setSuggestions(suggestions);
@@ -181,8 +179,7 @@ public class DashboardAdapterTest {
@Test
public void onBindSuggestion_shouldSetSuggestionAdapterAndNoCrash() {
mDashboardAdapter = new DashboardAdapter(mContext, null /* savedInstanceState */,
null /* conditions */, null /* conditionManager */,
null /* suggestionControllerMixin */, null /* lifecycle */);
mConditionManager, null /* suggestionControllerMixin */, null /* lifecycle */);
final List<Suggestion> suggestions = makeSuggestions("pkg1");
mDashboardAdapter.setSuggestions(suggestions);
@@ -218,8 +215,7 @@ public class DashboardAdapterTest {
.thenReturn(context.getDrawable(R.drawable.ic_settings));
mDashboardAdapter = new DashboardAdapter(context, null /* savedInstanceState */,
null /* conditions */, null /* conditionManager */,
null /* suggestionControllerMixin */, null /* lifecycle */);
mConditionManager, null /* suggestionControllerMixin */, null /* lifecycle */);
ReflectionHelpers.setField(mDashboardAdapter, "mCache", iconCache);
mDashboardAdapter.onBindTile(holder, tile);
@@ -239,7 +235,7 @@ public class DashboardAdapterTest {
final IconCache iconCache = new IconCache(context);
mDashboardAdapter = new DashboardAdapter(context, null /* savedInstanceState */,
null /* conditions */, null /* conditionManager */,
mConditionManager,
null /* suggestionControllerMixin */, null /* lifecycle */);
ReflectionHelpers.setField(mDashboardAdapter, "mCache", iconCache);
@@ -264,8 +260,7 @@ public class DashboardAdapterTest {
when(iconCache.getIcon(tile.getIcon(context))).thenReturn(mock(RoundedHomepageIcon.class));
mDashboardAdapter = new DashboardAdapter(context, null /* savedInstanceState */,
null /* conditions */, null /* conditionManager */,
null /* suggestionControllerMixin */, null /* lifecycle */);
mConditionManager, null /* suggestionControllerMixin */, null /* lifecycle */);
ReflectionHelpers.setField(mDashboardAdapter, "mCache", iconCache);
mDashboardAdapter.onBindTile(holder, tile);

View File

@@ -33,8 +33,8 @@ import androidx.annotation.NonNull;
import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.ListUpdateCallback;
import com.android.settings.homepage.conditional.AirplaneModeCondition;
import com.android.settings.homepage.conditional.Condition;
import com.android.settings.homepage.conditional.AirplaneModeConditionCard;
import com.android.settings.homepage.conditional.ConditionalCard;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settingslib.drawer.CategoryKey;
import com.android.settingslib.drawer.DashboardCategory;
@@ -63,9 +63,9 @@ public class DashboardDataTest {
@Mock
private Tile mTestCategoryTile;
@Mock
private Condition mTestCondition;
private ConditionalCard mTestCondition;
@Mock
private Condition mSecondCondition; // condition used to test insert in DiffUtil
private ConditionalCard mSecondCondition; // condition used to test insert in DiffUtil
private Suggestion mTestSuggestion;
@Before
@@ -83,13 +83,11 @@ public class DashboardDataTest {
suggestions.add(mTestSuggestion);
// Build oneItemConditions
final List<Condition> oneItemConditions = new ArrayList<>();
when(mTestCondition.shouldShow()).thenReturn(true);
final List<ConditionalCard> oneItemConditions = new ArrayList<>();
oneItemConditions.add(mTestCondition);
// Build twoItemConditions
final List<Condition> twoItemsConditions = new ArrayList<>();
when(mSecondCondition.shouldShow()).thenReturn(true);
final List<ConditionalCard> twoItemsConditions = new ArrayList<>();
twoItemsConditions.add(mTestCondition);
twoItemsConditions.add(mSecondCondition);
@@ -170,7 +168,7 @@ public class DashboardDataTest {
@Test
public void testGetPositionByEntity_notExisted_returnNotFound() {
final Condition condition = mock(AirplaneModeCondition.class);
final ConditionalCard condition = mock(AirplaneModeConditionCard.class);
final int position = mDashboardDataWithOneConditions.getPositionByEntity(condition);
assertThat(position).isEqualTo(DashboardData.POSITION_NOT_FOUND);
}
@@ -227,8 +225,8 @@ public class DashboardDataTest {
testResultData.add(new ListUpdateResult.ResultData(
ListUpdateResult.ResultData.TYPE_OPERATION_CHANGE, 2, 1));
// Build DashboardData
final List<Condition> oneItemConditions = new ArrayList<>();
when(mTestCondition.shouldShow()).thenReturn(true);
final List<ConditionalCard> oneItemConditions = new ArrayList<>();
oneItemConditions.add(mTestCondition);
final List<Suggestion> suggestions = new ArrayList<>();
suggestions.add(mTestSuggestion);

View File

@@ -27,7 +27,6 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.app.Activity;
import android.content.Context;
import com.android.settings.homepage.conditional.ConditionManager;

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.settings.homepage.conditional.v2;
package com.android.settings.homepage.conditional;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
@@ -23,6 +23,8 @@ import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import com.android.settings.homepage.conditional.AbnormalRingerConditionController;
import com.android.settings.homepage.conditional.ConditionManager;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Before;

View File

@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.homepage.conditional.v2;
package com.android.settings.homepage.conditional;
import static com.google.common.truth.Truth.assertThat;
@@ -24,6 +24,7 @@ import android.content.Context;
import android.content.Intent;
import com.android.settings.Settings;
import com.android.settings.homepage.conditional.BackgroundDataConditionController;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Before;

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.settings.homepage.conditional.v2;
package com.android.settings.homepage.conditional;
import static com.google.common.truth.Truth.assertThat;
@@ -27,6 +27,8 @@ import android.content.IntentFilter;
import android.os.PowerManager;
import com.android.settings.fuelgauge.BatterySaverReceiver;
import com.android.settings.homepage.conditional.BatterySaverConditionController;
import com.android.settings.homepage.conditional.ConditionManager;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Before;

View File

@@ -1,103 +0,0 @@
/*
* Copyright (C) 2018 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.homepage.conditional;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.Context;
import android.content.IntentFilter;
import android.os.PowerManager;
import com.android.settings.R;
import com.android.settings.fuelgauge.BatterySaverReceiver;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.Shadows;
import org.robolectric.shadows.ShadowPowerManager;
@RunWith(SettingsRobolectricTestRunner.class)
public class BatterySaverConditionTest {
@Mock
private ConditionManager mConditionManager;
private ShadowPowerManager mPowerManager;
private Context mContext;
private BatterySaverCondition mCondition;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application);
mPowerManager = Shadows.shadowOf(mContext.getSystemService(PowerManager.class));
when(mConditionManager.getContext()).thenReturn(mContext);
mCondition = spy(new BatterySaverCondition(mConditionManager));
}
@Test
public void verifyText() {
assertThat(mCondition.getTitle()).isEqualTo(
mContext.getText(R.string.condition_battery_title));
assertThat(mCondition.getSummary()).isEqualTo(
mContext.getText(R.string.condition_battery_summary));
assertThat(mCondition.getActions()[0]).isEqualTo(
mContext.getText(R.string.condition_turn_off));
}
@Test
public void onResume_shouldRegisterReceiver() {
mCondition.onResume();
verify(mContext).registerReceiver(any(BatterySaverReceiver.class), any(IntentFilter.class));
}
@Test
public void onPause_shouldUnregisterReceiver() {
mCondition.onResume();
mCondition.onPause();
verify(mContext).unregisterReceiver(any(BatterySaverReceiver.class));
}
@Test
public void refreshState_PowerSaverOn_shouldActivate() {
mPowerManager.setIsPowerSaveMode(true);
mCondition.refreshState();
assertThat(mCondition.isActive()).isTrue();
}
@Test
public void refreshState_PowerSaverOff_shouldNotActivate() {
mPowerManager.setIsPowerSaveMode(false);
mCondition.refreshState();
assertThat(mCondition.isActive()).isFalse();
}
}

View File

@@ -17,6 +17,8 @@ package com.android.settings.homepage.conditional;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -25,8 +27,6 @@ import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import androidx.recyclerview.widget.RecyclerView;
import com.android.settings.R;
import com.android.settings.dashboard.DashboardAdapter;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
@@ -45,22 +45,23 @@ import java.util.List;
public class ConditionAdapterTest {
@Mock
private Condition mCondition1;
private ConditionalCard mCondition1;
@Mock
private Condition mCondition2;
private ConditionalCard mCondition2;
@Mock
private ConditionManager mConditionManager;
private Context mContext;
private ConditionAdapter mConditionAdapter;
private List<Condition> mOneCondition;
private List<Condition> mTwoConditions;
private List<ConditionalCard> mOneCondition;
private List<ConditionalCard> mTwoConditions;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application;
final CharSequence[] actions = new CharSequence[2];
when(mCondition1.getActions()).thenReturn(actions);
when(mCondition1.shouldShow()).thenReturn(true);
final CharSequence action = "action";
when(mCondition1.getActionText()).thenReturn(action);
mOneCondition = new ArrayList<>();
mOneCondition.add(mCondition1);
mTwoConditions = new ArrayList<>();
@@ -70,32 +71,32 @@ public class ConditionAdapterTest {
@Test
public void getItemCount_notExpanded_shouldReturn0() {
mConditionAdapter = new ConditionAdapter(mContext, mOneCondition, false);
mConditionAdapter = new ConditionAdapter(mContext, mConditionManager, mOneCondition, false);
assertThat(mConditionAdapter.getItemCount()).isEqualTo(0);
}
@Test
public void getItemCount_expanded_shouldReturnListSize() {
mConditionAdapter = new ConditionAdapter(mContext, mOneCondition, true);
mConditionAdapter = new ConditionAdapter(mContext, mConditionManager, mOneCondition, true);
assertThat(mConditionAdapter.getItemCount()).isEqualTo(1);
mConditionAdapter = new ConditionAdapter(mContext, mTwoConditions, true);
mConditionAdapter = new ConditionAdapter(mContext, mConditionManager, mTwoConditions, true);
assertThat(mConditionAdapter.getItemCount()).isEqualTo(2);
}
@Test
public void getItemViewType_shouldReturnConditionTile() {
mConditionAdapter = new ConditionAdapter(mContext, mTwoConditions, true);
mConditionAdapter = new ConditionAdapter(mContext, mConditionManager, mTwoConditions, true);
assertThat(mConditionAdapter.getItemViewType(0)).isEqualTo(R.layout.condition_tile);
}
@Test
public void onBindViewHolder_shouldSetListener() {
final View view = LayoutInflater.from(mContext)
.inflate(R.layout.condition_tile, new LinearLayout(mContext), true);
.inflate(R.layout.condition_tile, new LinearLayout(mContext), true);
final DashboardAdapter.DashboardItemHolder viewHolder =
new DashboardAdapter.DashboardItemHolder(view);
mConditionAdapter = new ConditionAdapter(mContext, mOneCondition, true);
new DashboardAdapter.DashboardItemHolder(view);
mConditionAdapter = new ConditionAdapter(mContext, mConditionManager, mOneCondition, true);
mConditionAdapter.onBindViewHolder(viewHolder, 0);
final View card = view.findViewById(R.id.content);
@@ -106,30 +107,15 @@ public class ConditionAdapterTest {
@Test
public void viewClick_shouldInvokeConditionPrimaryClick() {
final View view = LayoutInflater.from(mContext)
.inflate(R.layout.condition_tile, new LinearLayout(mContext), true);
.inflate(R.layout.condition_tile, new LinearLayout(mContext), true);
final DashboardAdapter.DashboardItemHolder viewHolder =
new DashboardAdapter.DashboardItemHolder(view);
mConditionAdapter = new ConditionAdapter(mContext, mOneCondition, true);
new DashboardAdapter.DashboardItemHolder(view);
mConditionAdapter = new ConditionAdapter(mContext, mConditionManager, mOneCondition, true);
mConditionAdapter.onBindViewHolder(viewHolder, 0);
final View card = view.findViewById(R.id.content);
assertThat(card).isNotNull();
card.performClick();
verify(mCondition1).onPrimaryClick();
}
@Test
public void onSwiped_nullCondition_shouldNotCrash() {
final RecyclerView recyclerView = new RecyclerView(mContext);
final View view = LayoutInflater.from(mContext).inflate(
R.layout.condition_tile, new LinearLayout(mContext), true);
final DashboardAdapter.DashboardItemHolder viewHolder =
new DashboardAdapter.DashboardItemHolder(view);
mConditionAdapter = new ConditionAdapter(mContext, mOneCondition, true);
mConditionAdapter.addDismissHandling(recyclerView);
// do not bind viewholder to simulate the null condition scenario
mConditionAdapter.mSwipeCallback.onSwiped(viewHolder, 0);
// no crash
verify(mConditionManager).onPrimaryClick(any(Context.class), anyLong());
}
}

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.settings.homepage.conditional.v2;
package com.android.settings.homepage.conditional;
import static com.google.common.truth.Truth.assertThat;
@@ -25,6 +25,9 @@ import static org.mockito.Mockito.when;
import android.content.Context;
import com.android.settings.homepage.conditional.ConditionListener;
import com.android.settings.homepage.conditional.ConditionManager;
import com.android.settings.homepage.conditional.ConditionalCard;
import com.android.settings.homepage.conditional.ConditionalCardController;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Before;

View File

@@ -1,161 +0,0 @@
/*
* Copyright (C) 2016 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.homepage.conditional;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.IntentFilter;
import android.graphics.drawable.Drawable;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
@RunWith(SettingsRobolectricTestRunner.class)
public class ConditionTest {
@Mock
private ConditionManager mConditionManager;
@Mock
private MetricsFeatureProvider mMetricsFeatureProvider;
private Context mContext;
private TestCondition mCondition;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application);
mCondition = new TestCondition(mConditionManager, mMetricsFeatureProvider);
when(mConditionManager.getContext()).thenReturn(mContext);
}
@Test
public void initialize_shouldNotBeSilenced() {
assertThat(mCondition.isSilenced()).isFalse();
}
@Test
public void silence_shouldNotifyDataChangeAndLog() {
mCondition.silence();
assertThat(mCondition.isSilenced()).isTrue();
verify(mConditionManager).notifyChanged(mCondition);
verify(mMetricsFeatureProvider).action(any(Context.class),
eq(MetricsProto.MetricsEvent.ACTION_SETTINGS_CONDITION_DISMISS),
eq(TestCondition.TEST_METRIC_CONSTANT));
}
@Test
public void onSilenceChanged_silenced_shouldRegisterReceiver() {
mCondition.onSilenceChanged(true);
verify(mContext).registerReceiver(
TestCondition.mReceiver, TestCondition.TESTS_INTENT_FILTER);
}
@Test
public void onSilenceChanged_notSilenced_registered_shouldUnregisterReceiver() {
mCondition.onSilenceChanged(true);
mCondition.onSilenceChanged(false);
verify(mContext).unregisterReceiver(TestCondition.mReceiver);
}
@Test
public void onSilenceChanged_notSilenced_notRegistered_shouldNotCrash() {
mCondition.onSilenceChanged(false);
verify(mContext, never()).unregisterReceiver(TestCondition.mReceiver);
// no crash
}
private static final class TestCondition extends Condition {
private static final int TEST_METRIC_CONSTANT = 1234;
private static final IntentFilter TESTS_INTENT_FILTER = new IntentFilter("TestIntent");
private static final BroadcastReceiver mReceiver = mock(BroadcastReceiver.class);
TestCondition(ConditionManager manager, MetricsFeatureProvider metricsFeatureProvider) {
super(manager, metricsFeatureProvider);
}
@Override
public void refreshState() {
}
@Override
public int getMetricsConstant() {
return TEST_METRIC_CONSTANT;
}
@Override
public Drawable getIcon() {
return null;
}
@Override
public CharSequence getTitle() {
return null;
}
@Override
public CharSequence getSummary() {
return null;
}
@Override
public CharSequence[] getActions() {
return new CharSequence[0];
}
@Override
public void onPrimaryClick() {
}
@Override
public void onActionClick(int index) {
}
@Override
public BroadcastReceiver getReceiver() {
return mReceiver;
}
@Override
public IntentFilter getIntentFilter() {
return TESTS_INTENT_FILTER;
}
}
}

View File

@@ -1,118 +0,0 @@
/*
* Copyright (C) 2017 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.homepage.conditional;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.PackageManager;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
@RunWith(SettingsRobolectricTestRunner.class)
public class DndConditionTest {
@Mock
private ConditionManager mConditionManager;
@Mock
private PackageManager mPackageManager;
@Mock
private Context mContext;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
FakeFeatureFactory.setupForTest();
when(mConditionManager.getContext()).thenReturn(mContext);
when(mContext.getPackageManager()).thenReturn(mPackageManager);
}
@Test
public void constructor_shouldNotDisableReceiver() {
new DndCondition(mConditionManager);
verify(mPackageManager, never()).setComponentEnabledSetting(any(ComponentName.class),
eq(PackageManager.COMPONENT_ENABLED_STATE_DISABLED), eq(PackageManager.DONT_KILL_APP));
}
@Test
public void constructor_shouldRegisterReceiver() {
new DndCondition(mConditionManager);
verify(mContext).registerReceiver(any(DndCondition.Receiver.class),
eq(DndCondition.DND_FILTER));
}
@Test
public void silence_shouldNotDisableReceiver() {
new DndCondition(mConditionManager).silence();
verify(mPackageManager, never()).setComponentEnabledSetting(any(ComponentName.class),
eq(PackageManager.COMPONENT_ENABLED_STATE_DISABLED), eq(PackageManager.DONT_KILL_APP));
}
@Test
public void onResume_shouldRegisterReceiver() {
DndCondition condition = new DndCondition(mConditionManager);
condition.onPause();
condition.onResume();
// one from constructor, one from onResume()
verify(mContext, times(2)).registerReceiver(any(DndCondition.Receiver.class),
eq(DndCondition.DND_FILTER));
}
@Test
public void onPause_shouldUnregisterReceiver() {
new DndCondition(mConditionManager).onPause();
verify(mContext).unregisterReceiver(any(DndCondition.Receiver.class));
}
@Test
public void onPause_noReceiverRegistered_shouldNotUnregisterReceiver() {
DndCondition condition = new DndCondition(mConditionManager);
condition.onPause();
reset(mContext);
condition.onPause();
verify(mContext, never()).unregisterReceiver(any(DndCondition.Receiver.class));
}
@Test
public void nullZenConfig_noCrash() {
DndCondition condition = new DndCondition(mConditionManager);
assertThat(condition.mConfig).isNull();
// should not crash, instead summary is null
assertThat(condition.getSummary()).isNull();
}
}

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.settings.homepage.conditional.v2;
package com.android.settings.homepage.conditional;
import static org.mockito.ArgumentMatchers.any;
@@ -24,6 +24,8 @@ import static org.mockito.Mockito.verify;
import android.content.Context;
import com.android.settings.homepage.conditional.ConditionManager;
import com.android.settings.homepage.conditional.DndConditionCardController;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Before;

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.settings.homepage.conditional.v2;
package com.android.settings.homepage.conditional;
import static com.google.common.truth.Truth.assertThat;
@@ -24,6 +24,9 @@ import static org.mockito.Mockito.when;
import android.content.Context;
import com.android.settings.homepage.conditional.ConditionManager;
import com.android.settings.homepage.conditional.DndConditionCard;
import com.android.settings.homepage.conditional.DndConditionCardController;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Before;

View File

@@ -1,96 +0,0 @@
/*
* Copyright (C) 2018 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.homepage.conditional;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.Context;
import android.media.AudioManager;
import android.provider.Settings;
import com.android.settings.R;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.ShadowAudioManager;
import com.android.settings.testutils.shadow.ShadowNotificationManager;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.shadow.api.Shadow;
@RunWith(SettingsRobolectricTestRunner.class)
@Config(shadows = {ShadowNotificationManager.class, ShadowAudioManager.class})
public class RingerMutedConditionTest {
private static final String TAG = "RingerMutedConditionTest";
@Mock
private ConditionManager mConditionManager;
private Context mContext;
private ShadowNotificationManager mNotificationManager;
private ShadowAudioManager mAudioManager;
private RingerMutedCondition mCondition;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application;
mAudioManager = Shadow.extract(mContext.getSystemService(Context.AUDIO_SERVICE));
mNotificationManager = Shadow.extract(
mContext.getSystemService(Context.NOTIFICATION_SERVICE));
when(mConditionManager.getContext()).thenReturn(mContext);
mCondition = spy(new RingerMutedCondition(mConditionManager));
}
@Test
public void verifyText() {
assertThat(mCondition.getTitle()).isEqualTo(
mContext.getText(R.string.condition_device_muted_title));
assertThat(mCondition.getSummary()).isEqualTo(
mContext.getText(R.string.condition_device_muted_summary));
assertThat(mCondition.getActions()[0]).isEqualTo(
mContext.getText(R.string.condition_device_muted_action_turn_on_sound));
}
@Test
public void refreshState_zenModeOn_shouldNotActivate() {
mAudioManager.setRingerModeInternal(AudioManager.RINGER_MODE_SILENT);
mNotificationManager.setZenMode(Settings.Global.ZEN_MODE_NO_INTERRUPTIONS, null, TAG);
mCondition.refreshState();
verify(mCondition).setActive(false);
}
@Test
public void refreshState_zenModeOff_shouldActivate() {
mAudioManager.setRingerModeInternal(AudioManager.RINGER_MODE_SILENT);
mNotificationManager.setZenMode(Settings.Global.ZEN_MODE_OFF, null, TAG);
mCondition.refreshState();
verify(mCondition).setActive(true);
}
}

View File

@@ -19,8 +19,6 @@ package com.android.settings.homepage.conditional;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.when;
import android.content.Context;
import com.android.settings.R;
@@ -29,33 +27,29 @@ import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
@RunWith(SettingsRobolectricTestRunner.class)
public class RingerVibrateConditionTest {
@Mock
private ConditionManager mConditionManager;
public class RingerVibrateConditionCardTest {
private Context mContext;
private RingerVibrateCondition mCondition;
private RingerVibrateConditionCard mCard;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application;
when(mConditionManager.getContext()).thenReturn(mContext);
mCondition = new RingerVibrateCondition(mConditionManager);
mCard = new RingerVibrateConditionCard(mContext);
}
@Test
public void verifyText() {
assertThat(mCondition.getTitle()).isEqualTo(
assertThat(mCard.getTitle()).isEqualTo(
mContext.getText(R.string.condition_device_vibrate_title));
assertThat(mCondition.getSummary()).isEqualTo(
assertThat(mCard.getSummary()).isEqualTo(
mContext.getText(R.string.condition_device_vibrate_summary));
assertThat(mCondition.getActions()[0]).isEqualTo(
assertThat(mCard.getActionText()).isEqualTo(
mContext.getText(R.string.condition_device_muted_action_turn_on_sound));
}
}

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.settings.homepage.conditional.v2;
package com.android.settings.homepage.conditional;
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.Mockito.spy;
@@ -24,6 +24,7 @@ import android.content.ComponentName;
import android.content.Context;
import com.android.settings.Settings;
import com.android.settings.homepage.conditional.WorkModeConditionController;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Before;

View File

@@ -1,65 +0,0 @@
/*
* Copyright (C) 2018 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.homepage.conditional;
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.ComponentName;
import android.content.Context;
import com.android.settings.Settings;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
@RunWith(SettingsRobolectricTestRunner.class)
public class WorkModeConditionTest {
@Mock
private ConditionManager mConditionManager;
private Context mContext;
private WorkModeCondition mCondition;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application);
FakeFeatureFactory.setupForTest();
when(mConditionManager.getContext()).thenReturn(mContext);
mCondition = new WorkModeCondition(mConditionManager);
}
@Test
public void onPrimaryClick_shouldLaunchAccountsSetting() {
final ComponentName componentName =
new ComponentName(mContext, Settings.AccountDashboardActivity.class);
mCondition.onPrimaryClick();
verify(mContext).startActivity(
argThat(intent-> intent.getComponent().equals(componentName)));
}
}