diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4f5c140a432..80b6afd77cb 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2029,6 +2029,8 @@
IP settings
Privacy
+
+ Subscription details
Randomized MAC
diff --git a/res/xml/wifi_network_details_fragment2.xml b/res/xml/wifi_network_details_fragment2.xml
index 3058678c036..156b744bdc5 100644
--- a/res/xml/wifi_network_details_fragment2.xml
+++ b/res/xml/wifi_network_details_fragment2.xml
@@ -138,4 +138,10 @@
android:selectable="false"
settings:enableCopying="true"/>
+
+
+
diff --git a/src/com/android/settings/wifi/details2/AddDevicePreferenceController2.java b/src/com/android/settings/wifi/details2/AddDevicePreferenceController2.java
index 3a50107c052..f1c24c3998b 100644
--- a/src/com/android/settings/wifi/details2/AddDevicePreferenceController2.java
+++ b/src/com/android/settings/wifi/details2/AddDevicePreferenceController2.java
@@ -51,11 +51,11 @@ public class AddDevicePreferenceController2 extends BasePreferenceController {
@Override
public int getAvailabilityStatus() {
- if (WifiDppUtils.isSupportConfiguratorQrCodeScanner(mContext, mWifiEntry)) {
- return AVAILABLE;
- } else {
+ if (!WifiDppUtils.isSupportConfiguratorQrCodeScanner(mContext, mWifiEntry)
+ || mWifiEntry.canManageSubscription()) {
return CONDITIONALLY_UNAVAILABLE;
}
+ return AVAILABLE;
}
@Override
diff --git a/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java b/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
index 803b828fcb2..c12f8d39119 100644
--- a/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
+++ b/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
@@ -145,6 +145,7 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
static final String KEY_IPV6_CATEGORY = "ipv6_category";
@VisibleForTesting
static final String KEY_IPV6_ADDRESSES_PREF = "ipv6_addresses";
+ static final String KEY_IP_DETAILS_CATEGORY = "ip_details_category";
private final WifiEntry mWifiEntry;
private final ConnectivityManager mConnectivityManager;
@@ -164,6 +165,7 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
private ActionButtonsPreference mButtonsPref;
private EntityHeaderController mEntityHeaderController;
private Preference mSignalStrengthPref;
+ private PreferenceCategory mIpDetailsCategory;
private Preference mTxLinkSpeedPref;
private Preference mRxLinkSpeedPref;
private Preference mFrequencyPref;
@@ -194,7 +196,9 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
mLinkProperties = lp;
refreshEntityHeader();
refreshButtons();
- refreshIpLayerInfo();
+ if (!mWifiEntry.canManageSubscription()) {
+ refreshIpLayerInfo();
+ }
}
}
@@ -234,7 +238,9 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
}
mNetworkCapabilities = nc;
refreshButtons();
- refreshIpLayerInfo();
+ if (!mWifiEntry.canManageSubscription()) {
+ refreshIpLayerInfo();
+ }
}
}
@@ -329,6 +335,7 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
updateCaptivePortalButton();
mSignalStrengthPref = screen.findPreference(KEY_SIGNAL_STRENGTH_PREF);
+ mIpDetailsCategory = screen.findPreference(KEY_IP_DETAILS_CATEGORY);
mTxLinkSpeedPref = screen.findPreference(KEY_TX_LINK_SPEED);
mRxLinkSpeedPref = screen.findPreference(KEY_RX_LINK_SPEED);
mFrequencyPref = screen.findPreference(KEY_FREQUENCY_PREF);
@@ -344,6 +351,13 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
mIpv6Category = screen.findPreference(KEY_IPV6_CATEGORY);
mIpv6AddressPref = screen.findPreference(KEY_IPV6_ADDRESSES_PREF);
+ if (mWifiEntry.canManageSubscription()) {
+ mIpDetailsCategory.setVisible(false);
+ mIpv6Category.setVisible(false);
+ mSignalStrengthPref.setVisible(false);
+ mFrequencyPref.setVisible(false);
+ mSecurityPref.setVisible(false);
+ }
mSecurityPref.setSummary(mWifiEntry.getSecurityString(false /* concise */));
}
@@ -491,10 +505,16 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
// refresh header
refreshEntityHeader();
-
+ refreshEntityHeaderIcon();
// refresh Buttons
refreshButtons();
+ // When support manage subscription, there won't have any detail information, so don't
+ // need to update those detail UIs.
+ if (mWifiEntry.canManageSubscription()) {
+ return;
+ }
+
// Update Connection Header icon and Signal Strength Preference
refreshRssiViews();
// Frequency Pref
@@ -511,7 +531,11 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
refreshMacAddress();
}
- private void refreshRssiViews() {
+ private void refreshEntityHeaderIcon() {
+ if (mEntityHeaderController == null) {
+ return;
+ }
+
int signalLevel = mWifiEntry.getLevel();
// Disappears signal view if not in range. e.g. for saved networks.
@@ -526,13 +550,23 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
}
mRssiSignalLevel = signalLevel;
Drawable wifiIcon = mIconInjector.getIcon(mRssiSignalLevel);
+ mEntityHeaderController
+ .setIcon(redrawIconForHeader(wifiIcon)).done(mFragment.getActivity(),
+ true /* rebind */);
+ }
- if (mEntityHeaderController != null) {
- mEntityHeaderController
- .setIcon(redrawIconForHeader(wifiIcon)).done(mFragment.getActivity(),
- true /* rebind */);
+ private void refreshRssiViews() {
+ int signalLevel = mWifiEntry.getLevel();
+
+ // Disappears signal view if not in range. e.g. for saved networks.
+ if (signalLevel == WifiEntry.WIFI_LEVEL_UNREACHABLE) {
+ mSignalStrengthPref.setVisible(false);
+ mRssiSignalLevel = -1;
+ return;
}
+ mRssiSignalLevel = signalLevel;
+ Drawable wifiIcon = mIconInjector.getIcon(mRssiSignalLevel);
Drawable wifiIconDark = wifiIcon.getConstantState().newDrawable().mutate();
wifiIconDark.setTintList(Utils.getColorAttr(mContext, android.R.attr.colorControlNormal));
mSignalStrengthPref.setIcon(wifiIconDark);
diff --git a/src/com/android/settings/wifi/details2/WifiMeteredPreferenceController2.java b/src/com/android/settings/wifi/details2/WifiMeteredPreferenceController2.java
index b4909e2ccb1..df205a3cc6f 100644
--- a/src/com/android/settings/wifi/details2/WifiMeteredPreferenceController2.java
+++ b/src/com/android/settings/wifi/details2/WifiMeteredPreferenceController2.java
@@ -55,7 +55,7 @@ public class WifiMeteredPreferenceController2 extends BasePreferenceController i
@Override
public int getAvailabilityStatus() {
- return AVAILABLE;
+ return mWifiEntry.canManageSubscription() ? CONDITIONALLY_UNAVAILABLE : AVAILABLE;
}
@Override
diff --git a/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java b/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java
index d07d6d6b3de..a11cadf8e1c 100644
--- a/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java
+++ b/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java
@@ -115,6 +115,10 @@ public class WifiNetworkDetailsFragment2 extends DashboardFragment implements
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ if (mNetworkDetailsTracker.getWifiEntry().canManageSubscription()) {
+ return;
+ }
+
MenuItem item = menu.add(0, Menu.FIRST, 0, R.string.wifi_modify);
item.setIcon(com.android.internal.R.drawable.ic_mode_edit);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
@@ -174,6 +178,12 @@ public class WifiNetworkDetailsFragment2 extends DashboardFragment implements
privacyController2.setWifiEntry(wifiEntry);
controllers.add(privacyController2);
+ final WifiSubscriptionDetailPreferenceController2
+ wifiSubscriptionDetailPreferenceController2 =
+ new WifiSubscriptionDetailPreferenceController2(context);
+ wifiSubscriptionDetailPreferenceController2.setWifiEntry(wifiEntry);
+ controllers.add(wifiSubscriptionDetailPreferenceController2);
+
// Sets callback listener for wifi dialog.
mWifiDialogListeners.add(mWifiDetailPreferenceController2);
mWifiDialogListeners.add(privacyController2);
diff --git a/src/com/android/settings/wifi/details2/WifiPrivacyPreferenceController2.java b/src/com/android/settings/wifi/details2/WifiPrivacyPreferenceController2.java
index b87b05df1dc..479848c68e0 100644
--- a/src/com/android/settings/wifi/details2/WifiPrivacyPreferenceController2.java
+++ b/src/com/android/settings/wifi/details2/WifiPrivacyPreferenceController2.java
@@ -55,8 +55,11 @@ public class WifiPrivacyPreferenceController2 extends BasePreferenceController i
@Override
public int getAvailabilityStatus() {
- return mWifiManager.isConnectedMacRandomizationSupported()
- ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
+ if (!mWifiManager.isConnectedMacRandomizationSupported()
+ || mWifiEntry.canManageSubscription()) {
+ return CONDITIONALLY_UNAVAILABLE;
+ }
+ return AVAILABLE;
}
@Override
diff --git a/src/com/android/settings/wifi/details2/WifiSubscriptionDetailPreferenceController2.java b/src/com/android/settings/wifi/details2/WifiSubscriptionDetailPreferenceController2.java
new file mode 100644
index 00000000000..7c9332784f7
--- /dev/null
+++ b/src/com/android/settings/wifi/details2/WifiSubscriptionDetailPreferenceController2.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2020 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.wifi.details2;
+
+import android.content.Context;
+
+import androidx.preference.Preference;
+
+import com.android.settings.core.BasePreferenceController;
+import com.android.wifitrackerlib.WifiEntry;
+
+/**
+ * {@link BasePreferenceController} that controls show the subscription detail preference item.
+ * or not
+ */
+public class WifiSubscriptionDetailPreferenceController2 extends BasePreferenceController {
+
+ private static final String KEY_WIFI_SUBSCRIPTION_DETAIL = "subscription_detail";
+ private WifiEntry mWifiEntry;
+
+ public WifiSubscriptionDetailPreferenceController2(Context context) {
+ super(context, KEY_WIFI_SUBSCRIPTION_DETAIL);
+ }
+
+ public void setWifiEntry(WifiEntry wifiEntry) {
+ mWifiEntry = wifiEntry;
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ if (mWifiEntry.canManageSubscription()) {
+ return AVAILABLE;
+ }
+
+ return CONDITIONALLY_UNAVAILABLE;
+ }
+
+ @Override
+ public boolean handlePreferenceTreeClick(Preference preference) {
+ if (KEY_WIFI_SUBSCRIPTION_DETAIL.equals(preference.getKey())) {
+ mWifiEntry.manageSubscription();
+ return true; /* click is handled */
+ }
+
+ return false; /* click is not handled */
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/wifi/details2/WifiSubscriptionDetailPreferenceController2Test.java b/tests/robotests/src/com/android/settings/wifi/details2/WifiSubscriptionDetailPreferenceController2Test.java
new file mode 100644
index 00000000000..18a5b861913
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/wifi/details2/WifiSubscriptionDetailPreferenceController2Test.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2020 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.wifi.details2;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+
+import com.android.wifitrackerlib.WifiEntry;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+
+@RunWith(RobolectricTestRunner.class)
+public class WifiSubscriptionDetailPreferenceController2Test {
+
+ @Mock
+ private WifiEntry mMockWifiEntry;
+
+ private WifiSubscriptionDetailPreferenceController2 mPreferenceController;
+ private Context mContext;
+
+ @Before
+ public void setUp() {
+ mContext = RuntimeEnvironment.application;
+
+ mMockWifiEntry = mock(WifiEntry.class);
+ WifiSubscriptionDetailPreferenceController2 preferenceController =
+ new WifiSubscriptionDetailPreferenceController2(mContext);
+ preferenceController.setWifiEntry(mMockWifiEntry);
+ mPreferenceController = spy(preferenceController);
+ }
+
+ @Test
+ public void testUpdateState_canSetPrivacy_shouldBeSelectable() {
+ when(mMockWifiEntry.canManageSubscription()).thenReturn(true);
+
+ assertThat(mPreferenceController.isAvailable()).isTrue();
+ }
+
+ @Test
+ public void testUpdateState_canNotSetPrivacy_shouldNotSelectable() {
+ when(mMockWifiEntry.canManageSubscription()).thenReturn(false);
+
+ assertThat(mPreferenceController.isAvailable()).isFalse();
+ }
+}