Moving the error messages from slice to panel's subtitle

Bug: 180888831
Test: atest ProviderModelSliceTest
atest ProviderModelSliceHelperTest
atest NetworkProviderWorkerTest
atest InternetConnectivityPanelTest
make RunSettingsRoboTests -j

Change-Id: I4572c8ad15effab0c95feaeac6a99f5aaabf6f90
This commit is contained in:
SongFerngWang
2021-03-09 14:38:48 +08:00
parent a922c902f6
commit 0c86903ec6
6 changed files with 237 additions and 137 deletions

View File

@@ -147,31 +147,6 @@ public class ProviderModelSlice extends WifiSlice {
listBuilder.addRow(getWifiSliceItemRow(item)); listBuilder.addRow(getWifiSliceItemRow(item));
} }
} }
// Fifth section: If device has connection problem, this row show the message for user.
// 1) show non_carrier_network_unavailable:
// - while no wifi item
// 2) show all_network_unavailable:
// - while no wifi item + no carrier
// - while no wifi item + no data capability
if (worker == null || wifiList == null || wifiList.size() == 0) {
log("no wifi item");
int resId = R.string.non_carrier_network_unavailable;
if (!hasCarrier || !mHelper.isDataSimActive()) {
log("No carrier item or no carrier data.");
resId = R.string.all_network_unavailable;
}
if (!hasCarrier && !hasEthernet) {
// If there is no item in ProviderModelItem, slice needs a header.
listBuilder.setHeader(mHelper.createHeader(
NetworkProviderSettings.ACTION_NETWORK_PROVIDER_SETTINGS));
}
listBuilder.addGridRow(
mHelper.createMessageGridRow(resId,
NetworkProviderSettings.ACTION_NETWORK_PROVIDER_SETTINGS));
}
return listBuilder.build(); return listBuilder.build();
} }

View File

@@ -36,7 +36,6 @@ import android.util.Log;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import androidx.core.graphics.drawable.IconCompat; import androidx.core.graphics.drawable.IconCompat;
import androidx.slice.builders.GridRowBuilder;
import androidx.slice.builders.ListBuilder; import androidx.slice.builders.ListBuilder;
import androidx.slice.builders.SliceAction; import androidx.slice.builders.SliceAction;
@@ -79,12 +78,6 @@ public class ProviderModelSliceHelper {
Log.d(TAG, s); Log.d(TAG, s);
} }
protected ListBuilder.HeaderBuilder createHeader(String intentAction) {
return new ListBuilder.HeaderBuilder()
.setTitle(mContext.getText(R.string.summary_placeholder))
.setPrimaryAction(getPrimarySliceAction(intentAction));
}
protected ListBuilder createListBuilder(Uri uri) { protected ListBuilder createListBuilder(Uri uri) {
final ListBuilder builder = new ListBuilder(mContext, uri, ListBuilder.INFINITY) final ListBuilder builder = new ListBuilder(mContext, uri, ListBuilder.INFINITY)
.setAccentColor(-1) .setAccentColor(-1)
@@ -92,14 +85,6 @@ public class ProviderModelSliceHelper {
return builder; return builder;
} }
protected GridRowBuilder createMessageGridRow(int messageResId, String intentAction) {
final CharSequence title = mContext.getText(messageResId);
return new GridRowBuilder()
// Add cells to the grid row.
.addCell(new GridRowBuilder.CellBuilder().addTitleText(title))
.setPrimaryAction(getPrimarySliceAction(intentAction));
}
@Nullable @Nullable
protected WifiSliceItem getConnectedWifiItem(List<WifiSliceItem> wifiList) { protected WifiSliceItem getConnectedWifiItem(List<WifiSliceItem> wifiList) {
if (wifiList == null) { if (wifiList == null) {
@@ -111,7 +96,10 @@ public class ProviderModelSliceHelper {
return item.isPresent() ? item.get() : null; return item.isPresent() ? item.get() : null;
} }
protected boolean hasCarrier() { /**
* @return whether there is the carrier item in the slice.
*/
public boolean hasCarrier() {
if (isAirplaneModeEnabled() if (isAirplaneModeEnabled()
|| mSubscriptionManager == null || mTelephonyManager == null || mSubscriptionManager == null || mTelephonyManager == null
|| mSubscriptionManager.getDefaultDataSubscriptionId() || mSubscriptionManager.getDefaultDataSubscriptionId()
@@ -175,7 +163,12 @@ public class ProviderModelSliceHelper {
return mTelephonyManager.isDataEnabled(); return mTelephonyManager.isDataEnabled();
} }
protected boolean isDataSimActive() { /**
* To check the carrier data status.
*
* @return whether the carrier data is active.
*/
public boolean isDataSimActive() {
return isNoCarrierData() ? false : MobileNetworkUtils.activeNetworkIsCellular(mContext); return isNoCarrierData() ? false : MobileNetworkUtils.activeNetworkIsCellular(mContext);
} }
@@ -193,11 +186,6 @@ public class ProviderModelSliceHelper {
return mobileDataOnAndNoData || mobileDataOffAndOutOfService; return mobileDataOnAndNoData || mobileDataOffAndOutOfService;
} }
private boolean isAirplaneSafeNetworksModeEnabled() {
// TODO: isAirplaneSafeNetworksModeEnabled is not READY
return false;
}
@VisibleForTesting @VisibleForTesting
Drawable getMobileDrawable(Drawable drawable) throws Throwable { Drawable getMobileDrawable(Drawable drawable) throws Throwable {
// set color and drawable // set color and drawable

View File

@@ -22,10 +22,23 @@ import static androidx.lifecycle.Lifecycle.Event.ON_RESUME;
import static com.android.settings.network.NetworkProviderSettings.ACTION_NETWORK_PROVIDER_SETTINGS; import static com.android.settings.network.NetworkProviderSettings.ACTION_NETWORK_PROVIDER_SETTINGS;
import android.app.settings.SettingsEnums; import android.app.settings.SettingsEnums;
import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri; import android.net.Uri;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.os.Handler;
import android.os.HandlerExecutor;
import android.os.Looper;
import android.provider.Settings; import android.provider.Settings;
import android.telephony.ServiceState;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyCallback;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.Log;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import androidx.lifecycle.LifecycleObserver; import androidx.lifecycle.LifecycleObserver;
@@ -35,6 +48,9 @@ import com.android.settings.R;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.network.AirplaneModePreferenceController; import com.android.settings.network.AirplaneModePreferenceController;
import com.android.settings.network.InternetUpdater; import com.android.settings.network.InternetUpdater;
import com.android.settings.network.ProviderModelSliceHelper;
import com.android.settings.network.SubscriptionsChangeListener;
import com.android.settings.network.telephony.DataConnectivityListener;
import com.android.settings.slices.CustomSliceRegistry; import com.android.settings.slices.CustomSliceRegistry;
import java.util.ArrayList; import java.util.ArrayList;
@@ -44,23 +60,69 @@ import java.util.List;
* Represents the Internet Connectivity Panel. * Represents the Internet Connectivity Panel.
*/ */
public class InternetConnectivityPanel implements PanelContent, LifecycleObserver, public class InternetConnectivityPanel implements PanelContent, LifecycleObserver,
InternetUpdater.InternetChangeListener { InternetUpdater.InternetChangeListener, DataConnectivityListener.Client,
SubscriptionsChangeListener.SubscriptionsChangeListenerClient {
private static final String TAG = "InternetConnectivityPanel";
private static final int SUBTITLE_TEXT_NONE = -1;
private static final int SUBTITLE_TEXT_WIFI_IS_TURNED_ON = R.string.wifi_is_turned_on_subtitle;
private static final int SUBTITLE_TEXT_NON_CARRIER_NETWORK_UNAVAILABLE =
R.string.non_carrier_network_unavailable;
private static final int SUBTITLE_TEXT_ALL_CARRIER_NETWORK_UNAVAILABLE =
R.string.all_network_unavailable;
private final Context mContext; private final Context mContext;
private final WifiManager mWifiManager;
private final IntentFilter mWifiStateFilter;
private final NetworkProviderTelephonyCallback mTelephonyCallback;
private final BroadcastReceiver mWifiStateReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent == null) {
return;
}
if (TextUtils.equals(intent.getAction(), WifiManager.NETWORK_STATE_CHANGED_ACTION)
|| TextUtils.equals(intent.getAction(),
WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
updatePanelTitle();
}
}
};
@VisibleForTesting @VisibleForTesting
boolean mIsProviderModelEnabled; boolean mIsProviderModelEnabled;
private PanelContentCallback mCallback;
@VisibleForTesting @VisibleForTesting
InternetUpdater mInternetUpdater; InternetUpdater mInternetUpdater;
@VisibleForTesting
ProviderModelSliceHelper mProviderModelSliceHelper;
public static InternetConnectivityPanel create(Context context) { private int mSubtitle = SUBTITLE_TEXT_NONE;
return new InternetConnectivityPanel(context); private PanelContentCallback mCallback;
} private TelephonyManager mTelephonyManager;
private SubscriptionsChangeListener mSubscriptionsListener;
private DataConnectivityListener mConnectivityListener;
private int mDefaultDataSubid = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
private InternetConnectivityPanel(Context context) { private InternetConnectivityPanel(Context context) {
mContext = context.getApplicationContext(); mContext = context.getApplicationContext();
mIsProviderModelEnabled = Utils.isProviderModelEnabled(mContext); mIsProviderModelEnabled = Utils.isProviderModelEnabled(mContext);
mInternetUpdater = new InternetUpdater(context, null /* Lifecycle */, this); mInternetUpdater = new InternetUpdater(context, null /* Lifecycle */, this);
mSubscriptionsListener = new SubscriptionsChangeListener(context, this);
mConnectivityListener = new DataConnectivityListener(context, this);
mTelephonyCallback = new NetworkProviderTelephonyCallback();
mDefaultDataSubid = getDefaultDataSubscriptionId();
mTelephonyManager = mContext.getSystemService(TelephonyManager.class);
mWifiManager = mContext.getSystemService(WifiManager.class);
mWifiStateFilter = new IntentFilter(WifiManager.NETWORK_STATE_CHANGED_ACTION);
mWifiStateFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
mProviderModelSliceHelper = new ProviderModelSliceHelper(mContext, null);
}
/** create the panel */
public static InternetConnectivityPanel create(Context context) {
return new InternetConnectivityPanel(context);
} }
/** @OnLifecycleEvent(ON_RESUME) */ /** @OnLifecycleEvent(ON_RESUME) */
@@ -70,6 +132,12 @@ public class InternetConnectivityPanel implements PanelContent, LifecycleObserve
return; return;
} }
mInternetUpdater.onResume(); mInternetUpdater.onResume();
mSubscriptionsListener.start();
mConnectivityListener.start();
mTelephonyManager.registerTelephonyCallback(
new HandlerExecutor(new Handler(Looper.getMainLooper())), mTelephonyCallback);
mContext.registerReceiver(mWifiStateReceiver, mWifiStateFilter);
updatePanelTitle();
} }
/** @OnLifecycleEvent(ON_PAUSE) */ /** @OnLifecycleEvent(ON_PAUSE) */
@@ -79,6 +147,10 @@ public class InternetConnectivityPanel implements PanelContent, LifecycleObserve
return; return;
} }
mInternetUpdater.onPause(); mInternetUpdater.onPause();
mSubscriptionsListener.stop();
mConnectivityListener.stop();
mTelephonyManager.unregisterTelephonyCallback(mTelephonyCallback);
mContext.unregisterReceiver(mWifiStateReceiver);
} }
/** /**
@@ -98,9 +170,8 @@ public class InternetConnectivityPanel implements PanelContent, LifecycleObserve
*/ */
@Override @Override
public CharSequence getSubTitle() { public CharSequence getSubTitle() {
if (mIsProviderModelEnabled && mInternetUpdater.isAirplaneModeOn() if (mIsProviderModelEnabled && mSubtitle != SUBTITLE_TEXT_NONE) {
&& mInternetUpdater.isWifiEnabled()) { return mContext.getText(mSubtitle);
return mContext.getText(R.string.wifi_is_turned_on_subtitle);
} }
return null; return null;
} }
@@ -170,15 +241,36 @@ public class InternetConnectivityPanel implements PanelContent, LifecycleObserve
updatePanelTitle(); updatePanelTitle();
} }
private void updatePanelTitle() { @Override
public void onSubscriptionsChanged() {
final int defaultDataSubId = getDefaultDataSubscriptionId();
log("onSubscriptionsChanged: defaultDataSubId:" + defaultDataSubId);
if (mDefaultDataSubid == defaultDataSubId) {
return;
}
if (SubscriptionManager.isUsableSubscriptionId(defaultDataSubId)) {
mTelephonyManager.unregisterTelephonyCallback(mTelephonyCallback);
mTelephonyManager.registerTelephonyCallback(
new HandlerExecutor(new Handler(Looper.getMainLooper())), mTelephonyCallback);
}
updatePanelTitle();
}
@Override
public void onDataConnectivityChange() {
log("onDataConnectivityChange");
updatePanelTitle();
}
@VisibleForTesting
void updatePanelTitle() {
if (mCallback == null) { if (mCallback == null) {
return; return;
} }
updateSubtitleText();
if (mInternetUpdater.isAirplaneModeOn() && mInternetUpdater.isWifiEnabled()) { log("Subtitle:" + mSubtitle);
// When the airplane mode is on and Wi-Fi is enabled. if (mSubtitle != SUBTITLE_TEXT_NONE) {
// Title: Airplane mode
// Sub-Title: Wi-Fi is turned on
mCallback.onHeaderChanged(); mCallback.onHeaderChanged();
} else { } else {
// Other situations. // Other situations.
@@ -187,4 +279,63 @@ public class InternetConnectivityPanel implements PanelContent, LifecycleObserve
} }
mCallback.onCustomizedButtonStateChanged(); mCallback.onCustomizedButtonStateChanged();
} }
@VisibleForTesting
int getDefaultDataSubscriptionId() {
return SubscriptionManager.getDefaultDataSubscriptionId();
}
private void updateSubtitleText() {
mSubtitle = SUBTITLE_TEXT_NONE;
if (!mInternetUpdater.isWifiEnabled()) {
return;
}
if (mInternetUpdater.isAirplaneModeOn()) {
// When the airplane mode is on and Wi-Fi is enabled.
// Title: Airplane mode
// Sub-Title: Wi-Fi is turned on
log("Airplane mode is on + Wi-Fi on.");
mSubtitle = SUBTITLE_TEXT_WIFI_IS_TURNED_ON;
return;
}
final List<ScanResult> wifiList = mWifiManager.getScanResults();
if (wifiList != null && wifiList.size() == 0) {
// Sub-Title:
// show non_carrier_network_unavailable
// - while Wi-Fi on + no Wi-Fi item
// show all_network_unavailable:
// - while Wi-Fi on + no Wi-Fi item + no carrier
// - while Wi-Fi on + no Wi-Fi item + no data capability
log("No Wi-Fi item.");
mSubtitle = SUBTITLE_TEXT_NON_CARRIER_NETWORK_UNAVAILABLE;
if (!mProviderModelSliceHelper.hasCarrier()
|| !mProviderModelSliceHelper.isDataSimActive()) {
log("No carrier item or no carrier data.");
mSubtitle = SUBTITLE_TEXT_ALL_CARRIER_NETWORK_UNAVAILABLE;
}
}
}
private class NetworkProviderTelephonyCallback extends TelephonyCallback implements
TelephonyCallback.DataConnectionStateListener,
TelephonyCallback.ServiceStateListener {
@Override
public void onServiceStateChanged(ServiceState state) {
log("onServiceStateChanged voiceState=" + state.getState()
+ " dataState=" + state.getDataRegistrationState());
updatePanelTitle();
}
@Override
public void onDataConnectionStateChanged(int state, int networkType) {
log("onDataConnectionStateChanged: networkType=" + networkType + " state=" + state);
updatePanelTitle();
}
}
private static void log(String s) {
Log.d(TAG, s);
}
} }

View File

@@ -34,7 +34,6 @@ import android.net.Network;
import android.net.NetworkCapabilities; import android.net.NetworkCapabilities;
import android.net.Uri; import android.net.Uri;
import android.os.PersistableBundle; import android.os.PersistableBundle;
import android.provider.Settings;
import android.telephony.CarrierConfigManager; import android.telephony.CarrierConfigManager;
import android.telephony.ServiceState; import android.telephony.ServiceState;
import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionInfo;
@@ -43,8 +42,6 @@ import android.telephony.TelephonyManager;
import android.text.Html; import android.text.Html;
import androidx.slice.Slice; import androidx.slice.Slice;
import androidx.slice.builders.GridRowBuilder;
import androidx.slice.builders.GridRowBuilder.CellBuilder;
import androidx.slice.builders.ListBuilder; import androidx.slice.builders.ListBuilder;
import androidx.test.core.app.ApplicationProvider; import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -114,20 +111,6 @@ public class ProviderModelSliceHelperTest {
mProviderModelSliceHelper = new MockProviderModelSliceHelper(mContext, testCustomSliceable); mProviderModelSliceHelper = new MockProviderModelSliceHelper(mContext, testCustomSliceable);
} }
@Test
public void createMessageGridRow_inputTheResourceId_verifyTitle() {
int messageResId = ResourcesUtils.getResourcesId(mContext, "string",
"non_carrier_network_unavailable");
CharSequence title = ResourcesUtils.getResourcesString(mContext,
"non_carrier_network_unavailable");
GridRowBuilder testGridRow = mProviderModelSliceHelper.createMessageGridRow(messageResId,
Settings.ACTION_AIRPLANE_MODE_SETTINGS);
List<CellBuilder> cellItem = testGridRow.getCells();
assertThat(cellItem.get(0).getTitle()).isEqualTo(title);
}
@Test @Test
public void getConnectedWifiItem_inputListInvolveOneConnectedWifiItem_verifyReturnItem() { public void getConnectedWifiItem_inputListInvolveOneConnectedWifiItem_verifyReturnItem() {
when(mWifiSliceItem1.getConnectedState()).thenReturn(WifiEntry.CONNECTED_STATE_CONNECTED); when(mWifiSliceItem1.getConnectedState()).thenReturn(WifiEntry.CONNECTED_STATE_CONNECTED);

View File

@@ -22,7 +22,6 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.never; import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times; import static org.mockito.Mockito.times;
@@ -42,7 +41,6 @@ import android.telephony.TelephonyManager;
import androidx.slice.Slice; import androidx.slice.Slice;
import androidx.slice.SliceProvider; import androidx.slice.SliceProvider;
import androidx.slice.builders.GridRowBuilder;
import androidx.slice.builders.ListBuilder; import androidx.slice.builders.ListBuilder;
import androidx.slice.builders.SliceAction; import androidx.slice.builders.SliceAction;
import androidx.slice.widget.SliceLiveData; import androidx.slice.widget.SliceLiveData;
@@ -97,12 +95,6 @@ public class ProviderModelSliceTest {
private WifiSliceItem mMockWifiSliceItem3; private WifiSliceItem mMockWifiSliceItem3;
@Mock @Mock
ListBuilder.RowBuilder mMockCarrierRowBuild; ListBuilder.RowBuilder mMockCarrierRowBuild;
@Mock
ListBuilder.HeaderBuilder mMockHeader;
@Mock
GridRowBuilder mMockGridRowBuilderNonCarrierNetworkUnavailable;
@Mock
GridRowBuilder mMockGridRowBuilderAllNetworkUnavailable;
private FakeFeatureFactory mFeatureFactory; private FakeFeatureFactory mFeatureFactory;
@Mock @Mock
@@ -147,35 +139,7 @@ public class ProviderModelSliceTest {
@Test @Test
@UiThreadTest @UiThreadTest
public void getSlice_noWorkerAndNoCarrier_getOneHeaderOneGridRowWithAllNetworkUnavailable() { public void getSlice_noWifiAndHasCarrierNoData_oneCarrier() {
mWifiList.clear();
mMockProviderModelSlice = new MockProviderModelSlice(mContext, null);
mockHelperCondition(false, false, false, null);
final Slice slice = mMockProviderModelSlice.getSlice();
assertThat(slice).isNotNull();
verify(mListBuilder, times(1)).setHeader(mMockHeader);
verify(mListBuilder, times(1)).addGridRow(mMockGridRowBuilderAllNetworkUnavailable);
}
@Test
@UiThreadTest
public void getSlice_noWifiAndNoCarrier_getOneHeaderOneGridRowWithAllNetworkUnavailable() {
mWifiList.clear();
mMockNetworkProviderWorker.updateSelfResults(null);
mockHelperCondition(false, false, false, null);
final Slice slice = mMockProviderModelSlice.getSlice();
assertThat(slice).isNotNull();
verify(mListBuilder, times(1)).setHeader(mMockHeader);
verify(mListBuilder, times(1)).addGridRow(mMockGridRowBuilderAllNetworkUnavailable);
}
@Test
@UiThreadTest
public void getSlice_noWifiAndHasCarrierNoData_oneCarrierOneGridRowWithAllNetworkUnavailable() {
mWifiList.clear(); mWifiList.clear();
mMockNetworkProviderWorker.updateSelfResults(null); mMockNetworkProviderWorker.updateSelfResults(null);
mockHelperCondition(false, true, false, null); mockHelperCondition(false, true, false, null);
@@ -184,12 +148,11 @@ public class ProviderModelSliceTest {
assertThat(slice).isNotNull(); assertThat(slice).isNotNull();
verify(mListBuilder, times(1)).addRow(mMockCarrierRowBuild); verify(mListBuilder, times(1)).addRow(mMockCarrierRowBuild);
verify(mListBuilder, times(1)).addGridRow(mMockGridRowBuilderAllNetworkUnavailable);
} }
@Test @Test
@UiThreadTest @UiThreadTest
public void getSlice_noWifiAndNoCarrier_oneCarrierOneGridRowWithNonCarrierNetworkUnavailable() { public void getSlice_noWifiAndNoCarrier_oneCarrier() {
mWifiList.clear(); mWifiList.clear();
mMockProviderModelSlice = new MockProviderModelSlice(mContext, null); mMockProviderModelSlice = new MockProviderModelSlice(mContext, null);
mockHelperCondition(false, true, true, null); mockHelperCondition(false, true, true, null);
@@ -198,7 +161,6 @@ public class ProviderModelSliceTest {
assertThat(slice).isNotNull(); assertThat(slice).isNotNull();
verify(mListBuilder, times(1)).addRow(mMockCarrierRowBuild); verify(mListBuilder, times(1)).addRow(mMockCarrierRowBuild);
verify(mListBuilder, times(1)).addGridRow(mMockGridRowBuilderNonCarrierNetworkUnavailable);
} }
@Test @Test
@@ -331,19 +293,6 @@ public class ProviderModelSliceTest {
private void mockBuilder() { private void mockBuilder() {
SliceAction mockSliceAction = getPrimarySliceAction(); SliceAction mockSliceAction = getPrimarySliceAction();
when(mMockHeader.getTitle()).thenReturn("mockHeader");
when(mMockHeader.getPrimaryAction()).thenReturn(mockSliceAction);
when(mProviderModelSliceHelper.createHeader(anyString())).thenReturn(mMockHeader);
int resId = ResourcesUtils.getResourcesId(mContext, "string",
"non_carrier_network_unavailable");
when(mProviderModelSliceHelper.createMessageGridRow(eq(resId), anyString())).thenReturn(
mMockGridRowBuilderNonCarrierNetworkUnavailable);
resId = ResourcesUtils.getResourcesId(mContext, "string",
"all_network_unavailable");
when(mProviderModelSliceHelper.createMessageGridRow(eq(resId), anyString())).thenReturn(
mMockGridRowBuilderAllNetworkUnavailable);
when(mMockCarrierRowBuild.getTitle()).thenReturn("mockRow"); when(mMockCarrierRowBuild.getTitle()).thenReturn("mockRow");
when(mMockCarrierRowBuild.getPrimaryAction()).thenReturn(mockSliceAction); when(mMockCarrierRowBuild.getPrimaryAction()).thenReturn(mockSliceAction);
when(mProviderModelSliceHelper.createCarrierRow(anyString())).thenReturn( when(mProviderModelSliceHelper.createCarrierRow(anyString())).thenReturn(

View File

@@ -22,15 +22,19 @@ import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.Context; import android.content.Context;
import android.net.Uri; import android.net.Uri;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import androidx.test.core.app.ApplicationProvider; import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.android.settings.network.AirplaneModePreferenceController; import com.android.settings.network.AirplaneModePreferenceController;
import com.android.settings.network.InternetUpdater; import com.android.settings.network.InternetUpdater;
import com.android.settings.network.ProviderModelSliceHelper;
import com.android.settings.slices.CustomSliceRegistry; import com.android.settings.slices.CustomSliceRegistry;
import com.android.settings.testutils.ResourcesUtils; import com.android.settings.testutils.ResourcesUtils;
@@ -42,6 +46,7 @@ import org.mockito.Mock;
import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule; import org.mockito.junit.MockitoRule;
import java.util.ArrayList;
import java.util.List; import java.util.List;
@RunWith(AndroidJUnit4.class) @RunWith(AndroidJUnit4.class)
@@ -55,6 +60,12 @@ public class InternetConnectivityPanelTest {
ApplicationProvider.getApplicationContext(), "wifi_is_turned_on_subtitle"); ApplicationProvider.getApplicationContext(), "wifi_is_turned_on_subtitle");
public static final String BUTTON_SETTINGS = ResourcesUtils.getResourcesString( public static final String BUTTON_SETTINGS = ResourcesUtils.getResourcesString(
ApplicationProvider.getApplicationContext(), "settings_button"); ApplicationProvider.getApplicationContext(), "settings_button");
public static final String SUBTITLE_NON_CARRIER_NETWORK_UNAVAILABLE =
ResourcesUtils.getResourcesString(ApplicationProvider.getApplicationContext(),
"non_carrier_network_unavailable");
public static final String SUBTITLE_ALL_NETWORK_UNAVAILABLE =
ResourcesUtils.getResourcesString(ApplicationProvider.getApplicationContext(),
"all_network_unavailable");
@Rule @Rule
public final MockitoRule mMocks = MockitoJUnit.rule(); public final MockitoRule mMocks = MockitoJUnit.rule();
@@ -62,6 +73,10 @@ public class InternetConnectivityPanelTest {
PanelContentCallback mPanelContentCallback; PanelContentCallback mPanelContentCallback;
@Mock @Mock
InternetUpdater mInternetUpdater; InternetUpdater mInternetUpdater;
@Mock
private WifiManager mWifiManager;
@Mock
private ProviderModelSliceHelper mProviderModelSliceHelper;
private Context mContext; private Context mContext;
private InternetConnectivityPanel mPanel; private InternetConnectivityPanel mPanel;
@@ -69,11 +84,14 @@ public class InternetConnectivityPanelTest {
@Before @Before
public void setUp() { public void setUp() {
mContext = spy(ApplicationProvider.getApplicationContext()); mContext = spy(ApplicationProvider.getApplicationContext());
when(mContext.getApplicationContext()).thenReturn(mContext);
when(mContext.getSystemService(WifiManager.class)).thenReturn(mWifiManager);
mPanel = InternetConnectivityPanel.create(mContext); mPanel = InternetConnectivityPanel.create(mContext);
mPanel.registerCallback(mPanelContentCallback); mPanel.registerCallback(mPanelContentCallback);
mPanel.mIsProviderModelEnabled = true; mPanel.mIsProviderModelEnabled = true;
mPanel.mInternetUpdater = mInternetUpdater; mPanel.mInternetUpdater = mInternetUpdater;
mPanel.mProviderModelSliceHelper = mProviderModelSliceHelper;
} }
@Test @Test
@@ -90,13 +108,6 @@ public class InternetConnectivityPanelTest {
assertThat(mPanel.getTitle()).isEqualTo(TITLE_APM); assertThat(mPanel.getTitle()).isEqualTo(TITLE_APM);
} }
@Test
public void getSubTitle_apmOff_shouldBeNull() {
doReturn(false).when(mInternetUpdater).isAirplaneModeOn();
assertThat(mPanel.getSubTitle()).isNull();
}
@Test @Test
public void getSubTitle_apmOnWifiOff_shouldBeNull() { public void getSubTitle_apmOnWifiOff_shouldBeNull() {
doReturn(true).when(mInternetUpdater).isAirplaneModeOn(); doReturn(true).when(mInternetUpdater).isAirplaneModeOn();
@@ -110,9 +121,43 @@ public class InternetConnectivityPanelTest {
doReturn(true).when(mInternetUpdater).isAirplaneModeOn(); doReturn(true).when(mInternetUpdater).isAirplaneModeOn();
doReturn(true).when(mInternetUpdater).isWifiEnabled(); doReturn(true).when(mInternetUpdater).isWifiEnabled();
mPanel.updatePanelTitle();
assertThat(mPanel.getSubTitle()).isEqualTo(SUBTITLE_WIFI_IS_TURNED_ON); assertThat(mPanel.getSubTitle()).isEqualTo(SUBTITLE_WIFI_IS_TURNED_ON);
} }
@Test
public void getSubTitle_apmOffWifiOnNoWifiListHasCarrierData_NonCarrierNetworkUnavailable() {
List wifiList = new ArrayList<ScanResult>();
mockCondition(false, true, true, true, wifiList);
mPanel.updatePanelTitle();
assertThat(mPanel.getSubTitle()).isEqualTo(SUBTITLE_NON_CARRIER_NETWORK_UNAVAILABLE);
}
@Test
public void getSubTitle_apmOffWifiOnNoWifiListNoCarrierData_AllNetworkUnavailable() {
List wifiList = new ArrayList<ScanResult>();
mockCondition(false, true, false, true, wifiList);
mPanel.updatePanelTitle();
assertThat(mPanel.getSubTitle()).isEqualTo(SUBTITLE_ALL_NETWORK_UNAVAILABLE);
}
@Test
public void getSubTitle_apmOffWifiOnTwoWifiItemsNoCarrierData_shouldBeNull() {
List wifiList = new ArrayList<ScanResult>();
wifiList.add(new ScanResult());
wifiList.add(new ScanResult());
mockCondition(false, true, false, true, wifiList);
mPanel.updatePanelTitle();
assertThat(mPanel.getSubTitle()).isNull();
}
@Test @Test
public void getCustomizedButtonTitle_apmOff_shouldBeSettings() { public void getCustomizedButtonTitle_apmOff_shouldBeSettings() {
doReturn(false).when(mInternetUpdater).isAirplaneModeOn(); doReturn(false).when(mInternetUpdater).isAirplaneModeOn();
@@ -244,4 +289,13 @@ public class InternetConnectivityPanelTest {
verify(mPanelContentCallback).onCustomizedButtonStateChanged(); verify(mPanelContentCallback).onCustomizedButtonStateChanged();
} }
private void mockCondition(boolean airplaneMode, boolean hasCarrier,
boolean isDataSimActive, boolean isWifiEnabled, List<ScanResult> wifiItems) {
doReturn(airplaneMode).when(mInternetUpdater).isAirplaneModeOn();
when(mProviderModelSliceHelper.hasCarrier()).thenReturn(hasCarrier);
when(mProviderModelSliceHelper.isDataSimActive()).thenReturn(isDataSimActive);
doReturn(isWifiEnabled).when(mInternetUpdater).isWifiEnabled();
doReturn(wifiItems).when(mWifiManager).getScanResults();
}
} }