From 6a5c02a5bb6124fd0ae94d79055e23b3f2a2664d Mon Sep 17 00:00:00 2001 From: Weng Su Date: Thu, 4 Feb 2021 15:27:32 +0800 Subject: [PATCH] [Provider Model] Airplane mode slice design change - Change title text: WiFi enabled: Turn off networks WiFi disabled: Turn on networks - Add end icon with colorAccent - The title text color changed is not included this CL. - Screenshot https://screenshot.googleplex.com/44yYKphdem87UnU Bug: 178719303 Test: manual test atest -c AirplaneSafeNetworksSliceTest Change-Id: I27ec111c3c9d4e228010b1495a9d0c7956ba5d74 --- res/values/strings.xml | 6 +- .../network/AirplaneSafeNetworksSlice.java | 71 +++++++++++-------- .../AirplaneSafeNetworksSliceTest.java | 28 +++----- 3 files changed, 57 insertions(+), 48 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 09aea0e1f0b..162175b92f0 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -12580,8 +12580,10 @@ View airplane mode networks Viewing airplane mode networks - - Turn off airplane mode + + Turn on networks + + Turn off networks Reset your internet? diff --git a/src/com/android/settings/network/AirplaneSafeNetworksSlice.java b/src/com/android/settings/network/AirplaneSafeNetworksSlice.java index fbef28273e3..763e0c7d9a2 100644 --- a/src/com/android/settings/network/AirplaneSafeNetworksSlice.java +++ b/src/com/android/settings/network/AirplaneSafeNetworksSlice.java @@ -23,6 +23,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; import android.net.Uri; import android.net.wifi.WifiManager; import android.util.Log; @@ -33,6 +34,7 @@ import androidx.slice.Slice; import androidx.slice.builders.ListBuilder; import androidx.slice.builders.ListBuilder.RowBuilder; import androidx.slice.builders.SliceAction; +import androidx.slice.core.SliceHints; import com.android.settings.AirplaneModeEnabler; import com.android.settings.R; @@ -41,7 +43,6 @@ import com.android.settings.slices.CustomSliceRegistry; import com.android.settings.slices.CustomSliceable; import com.android.settings.slices.SliceBackgroundWorker; import com.android.settings.slices.SliceBroadcastReceiver; -import com.android.settingslib.WirelessUtils; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -49,7 +50,6 @@ import java.lang.annotation.RetentionPolicy; /** * {@link CustomSliceable} for airplane-safe networks, used by generic clients. */ -// TODO(b/173413889): Need to update the slice to Button style. public class AirplaneSafeNetworksSlice implements CustomSliceable, AirplaneModeEnabler.OnAirplaneModeChangedListener { @@ -60,26 +60,29 @@ public class AirplaneSafeNetworksSlice implements CustomSliceable, /** * Annotation for different action of the slice. * - * {@code VIEW_AIRPLANE_SAFE_NETWORKS} for action of turning on Wi-Fi. - * {@code TURN_OFF_AIRPLANE_MODE} for action of turning off Airplane Mode. + * {@code TURN_ON_NETWORKS} for action of turning on Wi-Fi networks. + * {@code TURN_OFF_NETWORKS} for action of turning off Wi-Fi networks. */ @Retention(RetentionPolicy.SOURCE) @IntDef(value = { - Action.VIEW_AIRPLANE_SAFE_NETWORKS, - Action.TURN_OFF_AIRPLANE_MODE, + Action.TURN_ON_NETWORKS, + Action.TURN_OFF_NETWORKS, }) public @interface Action { - int VIEW_AIRPLANE_SAFE_NETWORKS = 1; - int TURN_OFF_AIRPLANE_MODE = 2; + int TURN_ON_NETWORKS = 1; + int TURN_OFF_NETWORKS = 2; } private final Context mContext; private final AirplaneModeEnabler mAirplaneModeEnabler; private final WifiManager mWifiManager; + private boolean mIsAirplaneModeOn; + public AirplaneSafeNetworksSlice(Context context) { mContext = context; mAirplaneModeEnabler = new AirplaneModeEnabler(context, this); + mIsAirplaneModeOn = mAirplaneModeEnabler.isAirplaneModeOn(); mWifiManager = mContext.getSystemService(WifiManager.class); } @@ -89,15 +92,14 @@ public class AirplaneSafeNetworksSlice implements CustomSliceable, @Override public Slice getSlice() { - if (!WirelessUtils.isAirplaneModeOn(mContext)) { - return null; + final ListBuilder listBuilder = new ListBuilder(mContext, getUri(), ListBuilder.INFINITY); + if (mIsAirplaneModeOn) { + listBuilder.addRow(new RowBuilder() + .setTitle(getTitle()) + .addEndItem(getEndIcon(), SliceHints.ICON_IMAGE) + .setPrimaryAction(getSliceAction())); } - - return new ListBuilder(mContext, getUri(), ListBuilder.INFINITY) - .addRow(new RowBuilder() - .setTitle(getTitle()) - .setPrimaryAction(getSliceAction())) - .build(); + return listBuilder.build(); } @Override @@ -108,21 +110,22 @@ public class AirplaneSafeNetworksSlice implements CustomSliceable, @Override public void onNotifyChange(Intent intent) { final int action = intent.getIntExtra(ACTION_INTENT_EXTRA, 0); - if (action == Action.VIEW_AIRPLANE_SAFE_NETWORKS) { + if (action == Action.TURN_ON_NETWORKS) { if (!mWifiManager.isWifiEnabled()) { - logd("Action: turn on WiFi"); + logd("Action: turn on Wi-Fi networks"); mWifiManager.setWifiEnabled(true); } - } else if (action == Action.TURN_OFF_AIRPLANE_MODE) { - if (WirelessUtils.isAirplaneModeOn(mContext)) { - logd("Action: turn off Airplane mode"); - mAirplaneModeEnabler.setAirplaneMode(false); + } else if (action == Action.TURN_OFF_NETWORKS) { + if (mWifiManager.isWifiEnabled()) { + logd("Action: turn off Wi-Fi networks"); + mWifiManager.setWifiEnabled(false); } } } @Override public void onAirplaneModeChanged(boolean isAirplaneModeOn) { + mIsAirplaneModeOn = isAirplaneModeOn; final AirplaneSafeNetworksWorker worker = SliceBackgroundWorker.getInstance(getUri()); if (worker != null) { worker.updateSlice(); @@ -140,15 +143,26 @@ public class AirplaneSafeNetworksSlice implements CustomSliceable, @Action private int getAction() { return mWifiManager.isWifiEnabled() - ? Action.TURN_OFF_AIRPLANE_MODE - : Action.VIEW_AIRPLANE_SAFE_NETWORKS; + ? Action.TURN_OFF_NETWORKS + : Action.TURN_ON_NETWORKS; } private String getTitle() { return mContext.getText( - (getAction() == Action.VIEW_AIRPLANE_SAFE_NETWORKS) - ? R.string.view_airplane_safe_networks - : R.string.turn_off_airplane_mode).toString(); + (getAction() == Action.TURN_ON_NETWORKS) + ? R.string.turn_on_networks + : R.string.turn_off_networks).toString(); + } + + private IconCompat getEndIcon() { + final Drawable drawable = mContext.getDrawable( + (getAction() == Action.TURN_ON_NETWORKS) ? R.drawable.ic_airplane_safe_networks_24dp + : R.drawable.ic_airplanemode_active); + if (drawable == null) { + return Utils.createIconWithDrawable(new ColorDrawable(Color.TRANSPARENT)); + } + drawable.setTintList(Utils.getColorAttr(mContext, android.R.attr.colorAccent)); + return Utils.createIconWithDrawable(drawable); } private SliceAction getSliceAction() { @@ -156,8 +170,7 @@ public class AirplaneSafeNetworksSlice implements CustomSliceable, 0 /* requestCode */, getIntent(), PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); final IconCompat icon = Utils.createIconWithDrawable(new ColorDrawable(Color.TRANSPARENT)); - return SliceAction.createDeeplink(pendingIntent, icon, ListBuilder.ACTION_WITH_LABEL, - getTitle()); + return SliceAction.create(pendingIntent, icon, ListBuilder.ACTION_WITH_LABEL, getTitle()); } @Override diff --git a/tests/unit/src/com/android/settings/network/AirplaneSafeNetworksSliceTest.java b/tests/unit/src/com/android/settings/network/AirplaneSafeNetworksSliceTest.java index a344ab6a489..a90b89dfdce 100644 --- a/tests/unit/src/com/android/settings/network/AirplaneSafeNetworksSliceTest.java +++ b/tests/unit/src/com/android/settings/network/AirplaneSafeNetworksSliceTest.java @@ -34,7 +34,6 @@ import androidx.slice.widget.SliceLiveData; import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; -import com.android.settings.testutils.AirplaneModeRule; import com.android.settings.testutils.ResourcesUtils; import org.junit.Before; @@ -50,8 +49,6 @@ public class AirplaneSafeNetworksSliceTest { @Rule public MockitoRule mMocks = MockitoJUnit.rule(); - @Rule - public AirplaneModeRule mAirplaneModeRule = new AirplaneModeRule(); @Mock private WifiManager mWifiManager; @@ -67,18 +64,18 @@ public class AirplaneSafeNetworksSliceTest { SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS); mAirplaneSafeNetworksSlice = new AirplaneSafeNetworksSlice(mContext); + mAirplaneSafeNetworksSlice.onAirplaneModeChanged(true); } @Test - public void getSlice_airplaneModeOff_shouldBeNull() { - mAirplaneModeRule.setAirplaneMode(false); + public void getSlice_airplaneModeOff_shouldBeNotNull() { + mAirplaneSafeNetworksSlice.onAirplaneModeChanged(false); - assertThat(mAirplaneSafeNetworksSlice.getSlice()).isNull(); + assertThat(mAirplaneSafeNetworksSlice.getSlice()).isNotNull(); } @Test - public void getSlice_wifiDisabled_shouldShowViewAirplaneSafeNetworks() { - mAirplaneModeRule.setAirplaneMode(true); + public void getSlice_wifiDisabled_shouldShowTurnOnNetworks() { when(mWifiManager.isWifiEnabled()).thenReturn(false); final Slice slice = mAirplaneSafeNetworksSlice.getSlice(); @@ -87,12 +84,11 @@ public class AirplaneSafeNetworksSliceTest { final SliceItem sliceTitle = SliceMetadata.from(mContext, slice).getListContent().getHeader().getTitleItem(); assertThat(sliceTitle.getText()).isEqualTo( - ResourcesUtils.getResourcesString(mContext, "view_airplane_safe_networks")); + ResourcesUtils.getResourcesString(mContext, "turn_on_networks")); } @Test - public void getSlice_wifiEnabled_shouldShowTurnOffAirplaneMode() { - mAirplaneModeRule.setAirplaneMode(true); + public void getSlice_wifiEnabled_shouldShowTurnOffNetworks() { when(mWifiManager.isWifiEnabled()).thenReturn(true); final Slice slice = mAirplaneSafeNetworksSlice.getSlice(); @@ -101,12 +97,11 @@ public class AirplaneSafeNetworksSliceTest { final SliceItem sliceTitle = SliceMetadata.from(mContext, slice).getListContent().getHeader().getTitleItem(); assertThat(sliceTitle.getText()).isEqualTo( - ResourcesUtils.getResourcesString(mContext, "turn_off_airplane_mode")); + ResourcesUtils.getResourcesString(mContext, "turn_off_networks")); } @Test - public void onNotifyChange_viewAirplaneSafeNetworks_shouldSetWifiEnabled() { - mAirplaneModeRule.setAirplaneMode(true); + public void onNotifyChange_turnOnNetworks_shouldSetWifiEnabled() { when(mWifiManager.isWifiEnabled()).thenReturn(false); Intent intent = mAirplaneSafeNetworksSlice.getIntent(); @@ -116,13 +111,12 @@ public class AirplaneSafeNetworksSliceTest { } @Test - public void onNotifyChange_turnOffAirplaneMode_shouldSetAirplaneModeOff() { - mAirplaneModeRule.setAirplaneMode(true); + public void onNotifyChange_turnOffNetworks_shouldSetWifiDisabled() { when(mWifiManager.isWifiEnabled()).thenReturn(true); Intent intent = mAirplaneSafeNetworksSlice.getIntent(); mAirplaneSafeNetworksSlice.onNotifyChange(intent); - assertThat(mAirplaneModeRule.isAirplaneModeOn()).isFalse(); + verify(mWifiManager).setWifiEnabled(false); } }