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:
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
|
@@ -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(
|
||||||
|
@@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user