Remove condition manager v1 code.
Change-Id: I866c1f7c493c6080ccf766ecfc8e6b00dafeecd9 Fixes: 112485407 Test: robotests
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
@@ -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)));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user