From c1ca4b81c17ebfbca7627db07bed088c5cb0ae7c Mon Sep 17 00:00:00 2001 From: Julia Reynolds Date: Thu, 21 Jan 2021 11:13:57 -0500 Subject: [PATCH 1/3] Fix some issues with notif blocking in settings - Fix cast cast exception - Make sure unblocking a notification channel also actually unblocks it Test: make -j64 RunSettingsRoboTests ROBOTEST_FILTER="com.android.settings.notification" Fixes: 177968301 Fixes: 177907827 Change-Id: Ibad56e102e167bcf004fbd0f9873cc29834a30c1 --- res/xml/channel_notification_settings.xml | 5 ++--- .../settings/notification/app/BlockPreferenceController.java | 3 ++- .../notification/app/ChannelListPreferenceController.java | 4 +++- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/res/xml/channel_notification_settings.xml b/res/xml/channel_notification_settings.xml index ff1427b7d7b..44a21acbe4c 100644 --- a/res/xml/channel_notification_settings.xml +++ b/res/xml/channel_notification_settings.xml @@ -25,10 +25,9 @@ android:order="1" android:layout="@layout/settings_entity_header" /> - + android:order="2" /> { boolean value = (Boolean) o; - int importance = value ? channel.getOriginalImportance() : IMPORTANCE_NONE; + int importance = value + ? Math.max(channel.getOriginalImportance(), IMPORTANCE_LOW) + : IMPORTANCE_NONE; channel.setImportance(importance); channel.lockFields(NotificationChannel.USER_LOCKED_IMPORTANCE); PrimarySwitchPreference channelPref1 = (PrimarySwitchPreference) preference; From a31dcbb8e310027de5715aa237dd3304fe4b8439 Mon Sep 17 00:00:00 2001 From: Yanting Yang Date: Mon, 25 Jan 2021 22:45:10 +0800 Subject: [PATCH 2/3] Correct the screen title for AppNotificationSettings Add the screen title to resolve showing default title "Settings" on the AppNotificationSettings. Fixes: 177968781 Test: robotest & visual Change-Id: I58e5e4cb6c1445b03d70fbb4e431cdcc9d3a09f0 --- res/xml/app_notification_settings.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/res/xml/app_notification_settings.xml b/res/xml/app_notification_settings.xml index 2e70c4438ed..a801ae17980 100644 --- a/res/xml/app_notification_settings.xml +++ b/res/xml/app_notification_settings.xml @@ -16,7 +16,8 @@ + android:key="app_notifications" + android:title="@string/notifications_title"> Date: Mon, 25 Jan 2021 06:15:55 +0800 Subject: [PATCH 3/3] [Provider Model] Add connected ethernet network to internet panel - Show the connected ethernet network to first item of internet panel - Screenshot: https://screenshot.googleplex.com/teritCBuvxxSyr6 Bug: 176796623 Test: manual test - atest NetworkProviderWorkerTest \ ProviderModelSliceTest Change-Id: I423a7951f403bf86c288da52fc342520fd24f466 --- .../settings/network/ProviderModelSlice.java | 39 +++++++++++++--- .../telephony/NetworkProviderWorker.java | 34 +++++++++++++- .../network/ProviderModelSliceTest.java | 35 +++++++++++++++ .../telephony/NetworkProviderWorkerTest.java | 44 +++++++++++++++++++ 4 files changed, 146 insertions(+), 6 deletions(-) diff --git a/src/com/android/settings/network/ProviderModelSlice.java b/src/com/android/settings/network/ProviderModelSlice.java index 443c2391b4f..7e71fefc156 100644 --- a/src/com/android/settings/network/ProviderModelSlice.java +++ b/src/com/android/settings/network/ProviderModelSlice.java @@ -24,6 +24,7 @@ import static com.android.settings.slices.CustomSliceRegistry.PROVIDER_MODEL_SLI import android.app.settings.SettingsEnums; import android.content.Context; import android.content.Intent; +import android.graphics.drawable.Drawable; import android.net.Uri; import android.provider.Settings; import android.telephony.SubscriptionManager; @@ -35,6 +36,7 @@ import androidx.slice.builders.ListBuilder; import com.android.settings.R; import com.android.settings.SubSettings; +import com.android.settings.Utils; import com.android.settings.network.telephony.MobileNetworkUtils; import com.android.settings.network.telephony.NetworkProviderWorker; import com.android.settings.slices.CustomSliceable; @@ -105,12 +107,18 @@ public class ProviderModelSlice extends WifiSlice { final boolean hasCarrier = mHelper.hasCarrier(); log("hasCarrier: " + hasCarrier); - // First section: Add a Wi-Fi item which state is connected. - final WifiSliceItem connectedWifiItem = mHelper.getConnectedWifiItem(wifiList); - if (connectedWifiItem != null) { - log("get Wi-Fi item witch is connected"); - listBuilder.addRow(getWifiSliceItemRow(connectedWifiItem)); + // First section: Add a Ethernet or Wi-Fi item which state is connected. + if (isEthernetConnected()) { + log("get Ethernet item which is connected"); + listBuilder.addRow(createEthernetRow()); maxListSize--; + } else { + final WifiSliceItem connectedWifiItem = mHelper.getConnectedWifiItem(wifiList); + if (connectedWifiItem != null) { + log("get Wi-Fi item which is connected"); + listBuilder.addRow(getWifiSliceItemRow(connectedWifiItem)); + maxListSize--; + } } // Second section: Add a carrier item. @@ -228,4 +236,25 @@ public class ProviderModelSlice extends WifiSlice { NetworkProviderWorker getWorker() { return SliceBackgroundWorker.getInstance(getUri()); } + + private boolean isEthernetConnected() { + final NetworkProviderWorker worker = getWorker(); + if (worker == null) { + return false; + } + return worker.isEthernetConnected(); + } + + @VisibleForTesting + ListBuilder.RowBuilder createEthernetRow() { + final ListBuilder.RowBuilder rowBuilder = new ListBuilder.RowBuilder(); + final Drawable drawable = mContext.getDrawable(R.drawable.ic_settings_ethernet); + if (drawable != null) { + drawable.setTintList(Utils.getColorAttr(mContext, android.R.attr.colorAccent)); + rowBuilder.setTitleItem(Utils.createIconWithDrawable(drawable), ListBuilder.ICON_IMAGE); + } + return rowBuilder + .setTitle(mContext.getText(R.string.ethernet)) + .setSubtitle(mContext.getText(R.string.cannot_switch_networks_while_connected)); + } } diff --git a/src/com/android/settings/network/telephony/NetworkProviderWorker.java b/src/com/android/settings/network/telephony/NetworkProviderWorker.java index 18aeb4d751f..e2e0264375c 100644 --- a/src/com/android/settings/network/telephony/NetworkProviderWorker.java +++ b/src/com/android/settings/network/telephony/NetworkProviderWorker.java @@ -16,6 +16,7 @@ package com.android.settings.network.telephony; +import static com.android.settings.network.InternetUpdater.INTERNET_ETHERNET; import static com.android.settingslib.mobile.MobileMappings.getIconKey; import static com.android.settingslib.mobile.MobileMappings.mapIconSets; @@ -33,6 +34,7 @@ import android.util.Log; import androidx.annotation.VisibleForTesting; +import com.android.settings.network.InternetUpdater; import com.android.settings.network.MobileDataContentObserver; import com.android.settings.network.MobileDataEnabledListener; import com.android.settings.network.SubscriptionsChangeListener; @@ -50,7 +52,8 @@ import java.util.concurrent.Executor; public class NetworkProviderWorker extends WifiScanWorker implements SignalStrengthListener.Callback, MobileDataEnabledListener.Client, DataConnectivityListener.Client, - SubscriptionsChangeListener.SubscriptionsChangeListenerClient { + SubscriptionsChangeListener.SubscriptionsChangeListenerClient, + InternetUpdater.OnInternetTypeChangedListener { private static final String TAG = "NetworkProviderWorker"; private static final int PROVIDER_MODEL_DEFAULT_EXPANDED_ROW_COUNT = 4; private DataContentObserver mMobileDataObserver; @@ -67,6 +70,8 @@ public class NetworkProviderWorker extends WifiScanWorker implements private TelephonyDisplayInfo mTelephonyDisplayInfo = new TelephonyDisplayInfo(TelephonyManager.NETWORK_TYPE_UNKNOWN, TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE); + private InternetUpdater mInternetUpdater; + private @InternetUpdater.InternetType int mInternetType; public NetworkProviderWorker(Context context, Uri uri) { super(context, uri); @@ -85,6 +90,9 @@ public class NetworkProviderWorker extends WifiScanWorker implements mConnectivityListener = new DataConnectivityListener(context, this); mSignalStrengthListener = new SignalStrengthListener(context, this); mConfig = getConfig(mContext); + + mInternetUpdater = new InternetUpdater(mContext, getLifecycle(), this); + mInternetType = mInternetUpdater.getInternetType(); } @Override @@ -260,4 +268,28 @@ public class NetworkProviderWorker extends WifiScanWorker implements return updateNetworkTypeName(mContext, mConfig, mTelephonyDisplayInfo, mDefaultDataSubid); } + + /** + * Called when internet type is changed. + * + * @param internetType the internet type + */ + public void onInternetTypeChanged(@InternetUpdater.InternetType int internetType) { + if (mInternetType == internetType) { + return; + } + boolean changeWithEthernet = + mInternetType == INTERNET_ETHERNET || internetType == INTERNET_ETHERNET; + mInternetType = internetType; + if (changeWithEthernet) { + updateSlice(); + } + } + + /** + * Returns true, if the ethernet network is connected. + */ + public boolean isEthernetConnected() { + return mInternetType == INTERNET_ETHERNET; + } } diff --git a/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java b/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java index fcca1c2ffd2..9f70bcf9ba0 100644 --- a/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java +++ b/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java @@ -262,6 +262,30 @@ public class ProviderModelSliceTest { verify(mListBuilder, times(2)).addRow(any(ListBuilder.RowBuilder.class)); } + @Test + @UiThreadTest + public void getSlice_connectedEthernet_getOneEthernetAndOneCarrierAndTwoWiFi() { + mWifiList.clear(); + mockWifiItemCondition(mMockWifiSliceItem1, "wifi1", "wifi1", + WifiEntry.CONNECTED_STATE_DISCONNECTED, "wifi1_key", true); + mWifiList.add(mMockWifiSliceItem1); + mockWifiItemCondition(mMockWifiSliceItem2, "wifi2", "wifi2", + WifiEntry.CONNECTED_STATE_DISCONNECTED, "wifi2_key", true); + mWifiList.add(mMockWifiSliceItem2); + mMockNetworkProviderWorker.updateSelfResults(mWifiList); + when(mProviderModelSliceHelper.isAirplaneModeEnabled()).thenReturn(false); + when(mProviderModelSliceHelper.hasCarrier()).thenReturn(true); + when(mProviderModelSliceHelper.isDataSimActive()).thenReturn(true); + when(mMockNetworkProviderWorker.isEthernetConnected()).thenReturn(true); + + final Slice slice = mMockProviderModelSlice.getSlice(); + + assertThat(slice).isNotNull(); + assertThat(mMockProviderModelSlice.hasCreateEthernetRow()).isTrue(); + verify(mListBuilder, times(1)).addRow(mMockCarrierRowBuild); + verify(mListBuilder, times(4)).addRow(any(ListBuilder.RowBuilder.class)); + } + @Test public void providerModelSlice_hasCorrectUri() { assertThat(mMockProviderModelSlice.getUri()).isEqualTo(PROVIDER_MODEL_SLICE_URI); @@ -333,6 +357,7 @@ public class ProviderModelSliceTest { public class MockProviderModelSlice extends ProviderModelSlice { private MockNetworkProviderWorker mNetworkProviderWorker; + private boolean mHasCreateEthernetRow; MockProviderModelSlice(Context context, MockNetworkProviderWorker networkProviderWorker) { super(context); @@ -348,6 +373,16 @@ public class ProviderModelSliceTest { NetworkProviderWorker getWorker() { return mNetworkProviderWorker; } + + @Override + ListBuilder.RowBuilder createEthernetRow() { + mHasCreateEthernetRow = true; + return super.createEthernetRow(); + } + + public boolean hasCreateEthernetRow() { + return mHasCreateEthernetRow; + } } @Test diff --git a/tests/unit/src/com/android/settings/network/telephony/NetworkProviderWorkerTest.java b/tests/unit/src/com/android/settings/network/telephony/NetworkProviderWorkerTest.java index a48a62a38a5..1905e444ce0 100644 --- a/tests/unit/src/com/android/settings/network/telephony/NetworkProviderWorkerTest.java +++ b/tests/unit/src/com/android/settings/network/telephony/NetworkProviderWorkerTest.java @@ -16,6 +16,9 @@ package com.android.settings.network.telephony; +import static com.android.settings.network.InternetUpdater.INTERNET_CELLULAR; +import static com.android.settings.network.InternetUpdater.INTERNET_ETHERNET; +import static com.android.settings.network.InternetUpdater.INTERNET_WIFI; import static com.android.settings.slices.CustomSliceRegistry.PROVIDER_MODEL_SLICE_URI; import static com.google.common.truth.Truth.assertThat; @@ -225,6 +228,47 @@ public class NetworkProviderWorkerTest { assertThat(mMockNetworkProviderWorker.hasNotification()).isTrue(); } + @Test + public void onInternetTypeChanged_connectedFromWifiToEthernet_callUpdateSlice() { + mMockNetworkProviderWorker.receiveNotification(false); + mMockNetworkProviderWorker.onInternetTypeChanged(INTERNET_WIFI); + + mMockNetworkProviderWorker.onInternetTypeChanged(INTERNET_ETHERNET); + + assertThat(mMockNetworkProviderWorker.hasNotification()).isTrue(); + } + + @Test + public void onInternetTypeChanged_connectedFromEthernetToCarrier_callUpdateSlice() { + mMockNetworkProviderWorker.receiveNotification(false); + mMockNetworkProviderWorker.onInternetTypeChanged(INTERNET_ETHERNET); + + mMockNetworkProviderWorker.onInternetTypeChanged(INTERNET_CELLULAR); + + assertThat(mMockNetworkProviderWorker.hasNotification()).isTrue(); + } + + @Test + public void isEthernetConnected_connectedEthernet_shouldBeTrue() { + mMockNetworkProviderWorker.onInternetTypeChanged(INTERNET_ETHERNET); + + assertThat(mMockNetworkProviderWorker.isEthernetConnected()).isTrue(); + } + + @Test + public void isEthernetConnected_connectedWifi_shouldBeFalse() { + mMockNetworkProviderWorker.onInternetTypeChanged(INTERNET_WIFI); + + assertThat(mMockNetworkProviderWorker.isEthernetConnected()).isFalse(); + } + + @Test + public void isEthernetConnected_connectedCarrier_shouldBeFalse() { + mMockNetworkProviderWorker.onInternetTypeChanged(INTERNET_CELLULAR); + + assertThat(mMockNetworkProviderWorker.isEthernetConnected()).isFalse(); + } + public class MockNetworkProviderWorker extends NetworkProviderWorker { private boolean mHasNotification = false; private int mDefaultDataSubId = 1;