diff --git a/res/drawable/one_handed_guideline.xml b/res/drawable/one_handed_guideline.xml
new file mode 100644
index 00000000000..2c1a15834e5
--- /dev/null
+++ b/res/drawable/one_handed_guideline.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/one_handed_header.xml b/res/layout/one_handed_header.xml
new file mode 100644
index 00000000000..2104e409a93
--- /dev/null
+++ b/res/layout/one_handed_header.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
diff --git a/res/layout/settings_collapsing_base_layout.xml b/res/layout/settings_collapsing_base_layout.xml
index ba9e625e752..7ebf4334513 100644
--- a/res/layout/settings_collapsing_base_layout.xml
+++ b/res/layout/settings_collapsing_base_layout.xml
@@ -39,7 +39,7 @@
app:statusBarScrim="?android:attr/colorPrimary"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
app:expandedTitleMarginStart="18dp"
- app:expandedTitleMarginEnd="18dp"
+ app:expandedTitleMarginEnd="16dp"
app:toolbarId="@id/action_bar">
Can’t open this app
Blocked by your credit provider
-
- If you have questions, contact your IT admin
More details
@@ -12725,10 +12723,8 @@
View airplane mode networks
Viewing airplane mode networks
-
- Turn on networks
-
- Turn off networks
+
+ Turn on Wi\u2011Fi
Reset your internet?
diff --git a/res/xml/one_handed_settings.xml b/res/xml/one_handed_settings.xml
index 3508d8af6b0..9382657a9d5 100644
--- a/res/xml/one_handed_settings.xml
+++ b/res/xml/one_handed_settings.xml
@@ -21,6 +21,14 @@
android:persistent="false"
android:title="@string/one_handed_title">
+
+
mServices;
public PasswordsPreferenceController(Context context, String preferenceKey) {
+ this(context, preferenceKey,
+ AutofillServiceInfo.getAvailableServices(context, UserHandle.myUserId()));
+ }
+
+ @VisibleForTesting
+ public PasswordsPreferenceController(
+ Context context, String preferenceKey, List availableServices) {
super(context, preferenceKey);
mPm = context.getPackageManager();
mIconFactory = IconDrawableFactory.newInstance(mContext);
- mServices = AutofillServiceInfo.getAvailableServices(mContext, UserHandle.myUserId());
- for (int i = mServices.size() - 1; i >= 0; i--) {
- final String passwordsActivity = mServices.get(i).getPasswordsActivity();
+ for (int i = availableServices.size() - 1; i >= 0; i--) {
+ final String passwordsActivity = availableServices.get(i).getPasswordsActivity();
if (TextUtils.isEmpty(passwordsActivity)) {
- mServices.remove(i);
+ availableServices.remove(i);
}
}
+ mServices = availableServices;
}
@Override
diff --git a/src/com/android/settings/enterprise/ActionDisabledByAdminDialogHelper.java b/src/com/android/settings/enterprise/ActionDisabledByAdminDialogHelper.java
index 685da03499c..cf23c94c74b 100644
--- a/src/com/android/settings/enterprise/ActionDisabledByAdminDialogHelper.java
+++ b/src/com/android/settings/enterprise/ActionDisabledByAdminDialogHelper.java
@@ -233,8 +233,6 @@ public class ActionDisabledByAdminDialogHelper {
final TextView textView = root.findViewById(R.id.admin_support_msg);
if (supportMessage != null) {
textView.setText(supportMessage);
- } else if (!isFinancedDevice()) {
- textView.setText(R.string.default_admin_support_msg);
}
}
diff --git a/src/com/android/settings/network/AirplaneSafeNetworksSlice.java b/src/com/android/settings/network/AirplaneSafeNetworksSlice.java
deleted file mode 100644
index 763e0c7d9a2..00000000000
--- a/src/com/android/settings/network/AirplaneSafeNetworksSlice.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * 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.network;
-
-import android.app.PendingIntent;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-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;
-
-import androidx.annotation.IntDef;
-import androidx.core.graphics.drawable.IconCompat;
-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;
-import com.android.settings.Utils;
-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 java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * {@link CustomSliceable} for airplane-safe networks, used by generic clients.
- */
-public class AirplaneSafeNetworksSlice implements CustomSliceable,
- AirplaneModeEnabler.OnAirplaneModeChangedListener {
-
- private static final String TAG = "AirplaneSafeNetworksSlice";
-
- public static final String ACTION_INTENT_EXTRA = "action";
-
- /**
- * Annotation for different action of the slice.
- *
- * {@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.TURN_ON_NETWORKS,
- Action.TURN_OFF_NETWORKS,
- })
- public @interface Action {
- 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);
- }
-
- private static void logd(String s) {
- Log.d(TAG, s);
- }
-
- @Override
- public Slice getSlice() {
- 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 listBuilder.build();
- }
-
- @Override
- public Uri getUri() {
- return CustomSliceRegistry.AIRPLANE_SAFE_NETWORKS_SLICE_URI;
- }
-
- @Override
- public void onNotifyChange(Intent intent) {
- final int action = intent.getIntExtra(ACTION_INTENT_EXTRA, 0);
- if (action == Action.TURN_ON_NETWORKS) {
- if (!mWifiManager.isWifiEnabled()) {
- logd("Action: turn on Wi-Fi networks");
- mWifiManager.setWifiEnabled(true);
- }
- } 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();
- }
- }
-
- @Override
- public Intent getIntent() {
- return new Intent(getUri().toString())
- .setData(getUri())
- .setClass(mContext, SliceBroadcastReceiver.class)
- .putExtra(ACTION_INTENT_EXTRA, getAction());
- }
-
- @Action
- private int getAction() {
- return mWifiManager.isWifiEnabled()
- ? Action.TURN_OFF_NETWORKS
- : Action.TURN_ON_NETWORKS;
- }
-
- private String getTitle() {
- return mContext.getText(
- (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() {
- final PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext,
- 0 /* requestCode */, getIntent(),
- PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
- final IconCompat icon = Utils.createIconWithDrawable(new ColorDrawable(Color.TRANSPARENT));
- return SliceAction.create(pendingIntent, icon, ListBuilder.ACTION_WITH_LABEL, getTitle());
- }
-
- @Override
- public Class getBackgroundWorkerClass() {
- return AirplaneSafeNetworksWorker.class;
- }
-
- public static class AirplaneSafeNetworksWorker extends SliceBackgroundWorker {
-
- private final IntentFilter mIntentFilter;
- private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(intent.getAction())) {
- notifySliceChange();
- }
- }
- };
-
- public AirplaneSafeNetworksWorker(Context context, Uri uri) {
- super(context, uri);
- mIntentFilter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);
- }
-
- @Override
- protected void onSlicePinned() {
- getContext().registerReceiver(mBroadcastReceiver, mIntentFilter);
- }
-
- @Override
- protected void onSliceUnpinned() {
- getContext().unregisterReceiver(mBroadcastReceiver);
- }
-
- @Override
- public void close() {
- // Do nothing.
- }
-
- public void updateSlice() {
- notifySliceChange();
- }
- }
-}
diff --git a/src/com/android/settings/network/TurnOnWifiSlice.java b/src/com/android/settings/network/TurnOnWifiSlice.java
new file mode 100644
index 00000000000..05a873fef0c
--- /dev/null
+++ b/src/com/android/settings/network/TurnOnWifiSlice.java
@@ -0,0 +1,147 @@
+/*
+ * Copyright (C) 2021 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.network;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+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;
+
+import androidx.core.graphics.drawable.IconCompat;
+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.R;
+import com.android.settings.Utils;
+import com.android.settings.slices.CustomSliceRegistry;
+import com.android.settings.slices.CustomSliceable;
+import com.android.settings.slices.SliceBackgroundWorker;
+import com.android.settings.slices.SliceBroadcastReceiver;
+
+/**
+ * {@link CustomSliceable} for turning on Wi-Fi, used by generic clients.
+ */
+public class TurnOnWifiSlice implements CustomSliceable {
+
+ private static final String TAG = "TurnOnWifiSlice";
+
+ private final Context mContext;
+ private final WifiManager mWifiManager;
+
+ public TurnOnWifiSlice(Context context) {
+ mContext = context;
+ mWifiManager = mContext.getSystemService(WifiManager.class);
+ }
+
+ private static void logd(String s) {
+ Log.d(TAG, s);
+ }
+
+ @Override
+ public Slice getSlice() {
+ if (mWifiManager.isWifiEnabled()) {
+ return null;
+ }
+ final String title = mContext.getText(R.string.turn_on_wifi).toString();
+ final SliceAction primaryAction = SliceAction.create(getBroadcastIntent(mContext),
+ getEndIcon(), ListBuilder.ICON_IMAGE, title);
+ final ListBuilder listBuilder = new ListBuilder(mContext, getUri(), ListBuilder.INFINITY)
+ .addRow(new RowBuilder()
+ .setTitle(title)
+ .addEndItem(getEndIcon(), SliceHints.ICON_IMAGE)
+ .setPrimaryAction(primaryAction));
+ return listBuilder.build();
+ }
+
+ @Override
+ public Uri getUri() {
+ return CustomSliceRegistry.TURN_ON_WIFI_SLICE_URI;
+ }
+
+ @Override
+ public void onNotifyChange(Intent intent) {
+ logd("Action: turn on Wi-Fi networks");
+ mWifiManager.setWifiEnabled(true);
+ }
+
+ @Override
+ public Intent getIntent() {
+ return new Intent(getUri().toString())
+ .setData(getUri())
+ .setClass(mContext, SliceBroadcastReceiver.class);
+ }
+
+ private IconCompat getEndIcon() {
+ final Drawable drawable = mContext.getDrawable(R.drawable.ic_settings_wireless);
+ if (drawable == null) {
+ return Utils.createIconWithDrawable(new ColorDrawable(Color.TRANSPARENT));
+ }
+ drawable.setTintList(Utils.getColorAttr(mContext, android.R.attr.colorAccent));
+ return Utils.createIconWithDrawable(drawable);
+ }
+
+ @Override
+ public Class getBackgroundWorkerClass() {
+ return TurnOnWifiWorker.class;
+ }
+
+ /**
+ * The Slice background worker {@link SliceBackgroundWorker} is used to listen the Wi-Fi
+ * status change, and then notifies the Slice {@link Uri} to update.
+ */
+ public static class TurnOnWifiWorker extends SliceBackgroundWorker {
+
+ private final IntentFilter mIntentFilter;
+ private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(intent.getAction())) {
+ notifySliceChange();
+ }
+ }
+ };
+
+ public TurnOnWifiWorker(Context context, Uri uri) {
+ super(context, uri);
+ mIntentFilter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);
+ }
+
+ @Override
+ protected void onSlicePinned() {
+ getContext().registerReceiver(mBroadcastReceiver, mIntentFilter);
+ }
+
+ @Override
+ protected void onSliceUnpinned() {
+ getContext().unregisterReceiver(mBroadcastReceiver);
+ }
+
+ @Override
+ public void close() {
+ // Do nothing.
+ }
+ }
+}
diff --git a/src/com/android/settings/panel/InternetConnectivityPanel.java b/src/com/android/settings/panel/InternetConnectivityPanel.java
index bdaa8492230..46843b04166 100644
--- a/src/com/android/settings/panel/InternetConnectivityPanel.java
+++ b/src/com/android/settings/panel/InternetConnectivityPanel.java
@@ -113,7 +113,7 @@ public class InternetConnectivityPanel implements PanelContent, LifecycleObserve
final List uris = new ArrayList<>();
if (mIsProviderModelEnabled) {
uris.add(CustomSliceRegistry.PROVIDER_MODEL_SLICE_URI);
- uris.add(CustomSliceRegistry.AIRPLANE_SAFE_NETWORKS_SLICE_URI);
+ uris.add(CustomSliceRegistry.TURN_ON_WIFI_SLICE_URI);
} else {
uris.add(CustomSliceRegistry.WIFI_SLICE_URI);
uris.add(CustomSliceRegistry.MOBILE_DATA_SLICE_URI);
diff --git a/src/com/android/settings/slices/CustomSliceRegistry.java b/src/com/android/settings/slices/CustomSliceRegistry.java
index e40b164e966..713d61a1ddd 100644
--- a/src/com/android/settings/slices/CustomSliceRegistry.java
+++ b/src/com/android/settings/slices/CustomSliceRegistry.java
@@ -39,8 +39,8 @@ import com.android.settings.homepage.contextualcards.slices.LowStorageSlice;
import com.android.settings.location.LocationSlice;
import com.android.settings.media.MediaOutputIndicatorSlice;
import com.android.settings.media.RemoteMediaSlice;
-import com.android.settings.network.AirplaneSafeNetworksSlice;
import com.android.settings.network.ProviderModelSlice;
+import com.android.settings.network.TurnOnWifiSlice;
import com.android.settings.network.telephony.MobileDataSlice;
import com.android.settings.notification.zen.ZenModeButtonPreferenceController;
import com.android.settings.wifi.calling.WifiCallingSliceHelper;
@@ -307,13 +307,13 @@ public class CustomSliceRegistry {
.build();
/**
- * Backing Uri for the Always On Slice.
+ * Backing Uri for the Turn on Wi-Fi Slice.
*/
- public static final Uri AIRPLANE_SAFE_NETWORKS_SLICE_URI = new Uri.Builder()
+ public static final Uri TURN_ON_WIFI_SLICE_URI = new Uri.Builder()
.scheme(ContentResolver.SCHEME_CONTENT)
.authority(SettingsSliceProvider.SLICE_AUTHORITY)
.appendPath(SettingsSlicesContract.PATH_SETTING_ACTION)
- .appendPath("airplane_safe_networks")
+ .appendPath("turn_on_wifi")
.build();
@VisibleForTesting
@@ -337,7 +337,7 @@ public class CustomSliceRegistry {
sUriToSlice.put(DARK_THEME_SLICE_URI, DarkThemeSlice.class);
sUriToSlice.put(REMOTE_MEDIA_SLICE_URI, RemoteMediaSlice.class);
sUriToSlice.put(ALWAYS_ON_SLICE_URI, AlwaysOnDisplaySlice.class);
- sUriToSlice.put(AIRPLANE_SAFE_NETWORKS_SLICE_URI, AirplaneSafeNetworksSlice.class);
+ sUriToSlice.put(TURN_ON_WIFI_SLICE_URI, TurnOnWifiSlice.class);
}
public static Class extends CustomSliceable> getSliceClassByUri(Uri uri) {
diff --git a/tests/robotests/src/com/android/settings/enterprise/ActionDisabledByAdminDialogHelperTest.java b/tests/robotests/src/com/android/settings/enterprise/ActionDisabledByAdminDialogHelperTest.java
index 1ff1d79b815..b245017b680 100644
--- a/tests/robotests/src/com/android/settings/enterprise/ActionDisabledByAdminDialogHelperTest.java
+++ b/tests/robotests/src/com/android/settings/enterprise/ActionDisabledByAdminDialogHelperTest.java
@@ -194,6 +194,27 @@ public class ActionDisabledByAdminDialogHelperTest {
assertEquals("some message", Shadows.shadowOf(textView).innerText());
}
+ @Test
+ public void testSetAdminSupportDetails_shortSupportMessageIsNull() {
+ final ShadowDevicePolicyManager dpmShadow = ShadowDevicePolicyManager.getShadow();
+ final UserManager userManager = RuntimeEnvironment.application.getSystemService(
+ UserManager.class);
+ final ShadowUserManager userManagerShadow = Shadow.extract(userManager);
+ final ViewGroup view = new FrameLayout(mActivity);
+ final ComponentName component = new ComponentName("some.package.name",
+ "some.package.name.SomeClass");
+ final EnforcedAdmin admin = new EnforcedAdmin(component, UserHandle.of(123));
+ final TextView textView = createAdminSupportTextView(view, mActivity);
+ dpmShadow.setShortSupportMessageForUser(component, 123, null);
+ dpmShadow.setIsAdminActiveAsUser(true);
+ createShadowWorkProfile(userManagerShadow);
+
+ mHelper.setAdminSupportDetails(mActivity, view, admin);
+
+ assertNotNull(admin.component);
+ assertEquals("", Shadows.shadowOf(textView).innerText());
+ }
+
@Test
public void testSetAdminSupportDetailsNotAdmin() {
final ShadowDevicePolicyManager dpmShadow = ShadowDevicePolicyManager.getShadow();
@@ -212,27 +233,6 @@ public class ActionDisabledByAdminDialogHelperTest {
mHelper.setAdminSupportDetails(mActivity, textView, admin);
assertNull(admin.component);
- assertEquals(mActivity.getString(R.string.default_admin_support_msg),
- Shadows.shadowOf(textView).innerText());
- }
-
- @Test
- public void testSetAdminSupportDetailsForFinancedDevice_shortSupportMessageIsNull() {
- final ShadowDevicePolicyManager dpmShadow = ShadowDevicePolicyManager.getShadow();
- final UserManager userManager = RuntimeEnvironment.application.getSystemService(
- UserManager.class);
- final ShadowUserManager userManagerShadow = Shadow.extract(userManager);
- final ViewGroup view = new FrameLayout(mActivity);
- final ComponentName component = new ComponentName("some.package.name",
- "some.package.name.SomeClass");
- final EnforcedAdmin admin = new EnforcedAdmin(component, UserHandle.of(123));
- final TextView textView = createAdminSupportTextView(view, mActivity);
- setupFinancedDevice(dpmShadow);
- createShadowWorkProfile(userManagerShadow);
-
- mHelper.setAdminSupportDetails(mActivity, view, admin);
-
- assertNotNull(admin.component);
assertEquals("", Shadows.shadowOf(textView).innerText());
}
diff --git a/tests/unit/src/com/android/settings/applications/autofill/PasswordsPreferenceControllerTest.java b/tests/unit/src/com/android/settings/applications/autofill/PasswordsPreferenceControllerTest.java
new file mode 100644
index 00000000000..216658fcb12
--- /dev/null
+++ b/tests/unit/src/com/android/settings/applications/autofill/PasswordsPreferenceControllerTest.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2021 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.applications.autofill;
+
+import static com.android.settings.core.BasePreferenceController.AVAILABLE;
+import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.os.Looper;
+import android.service.autofill.AutofillServiceInfo;
+
+import androidx.preference.Preference;
+import androidx.preference.PreferenceCategory;
+import androidx.preference.PreferenceManager;
+import androidx.preference.PreferenceScreen;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.google.android.collect.Lists;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.Collections;
+import java.util.List;
+
+@RunWith(AndroidJUnit4.class)
+public class PasswordsPreferenceControllerTest {
+
+ private Context mContext;
+ private PreferenceScreen mScreen;
+ private PreferenceCategory mPasswordsPreferenceCategory;
+
+ @Before
+ public void setUp() {
+ mContext = ApplicationProvider.getApplicationContext();
+ if (Looper.myLooper() == null) {
+ Looper.prepare(); // needed to create the preference screen
+ }
+ mScreen = new PreferenceManager(mContext).createPreferenceScreen(mContext);
+ mPasswordsPreferenceCategory = new PreferenceCategory(mContext);
+ mPasswordsPreferenceCategory.setKey("passwords");
+ mScreen.addPreference(mPasswordsPreferenceCategory);
+ }
+
+ @Test
+ public void getAvailabilityStatus_noServices_returnsUnavailable() {
+ PasswordsPreferenceController controller =
+ createControllerWithServices(Collections.emptyList());
+ assertThat(controller.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE);
+ }
+
+ @Test
+ public void getAvailabilityStatus_noPasswords_returnsUnavailable() {
+ AutofillServiceInfo service = new AutofillServiceInfo.TestDataBuilder().build();
+ PasswordsPreferenceController controller =
+ createControllerWithServices(Lists.newArrayList(service));
+ assertThat(controller.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE);
+ }
+
+ @Test
+ public void getAvailabilityStatus_withPasswords_returnsAvailable() {
+ PasswordsPreferenceController controller =
+ createControllerWithServices(Lists.newArrayList(createServiceWithPasswords()));
+ assertThat(controller.getAvailabilityStatus()).isEqualTo(AVAILABLE);
+ }
+
+ @Test
+ public void displayPreference_noServices_noPreferencesAdded() {
+ PasswordsPreferenceController controller =
+ createControllerWithServices(Collections.emptyList());
+ controller.displayPreference(mScreen);
+ assertThat(mPasswordsPreferenceCategory.getPreferenceCount()).isEqualTo(0);
+ }
+
+ @Test
+ public void displayPreference_noPasswords_noPreferencesAdded() {
+ AutofillServiceInfo service = new AutofillServiceInfo.TestDataBuilder().build();
+ PasswordsPreferenceController controller =
+ createControllerWithServices(Lists.newArrayList(service));
+ controller.displayPreference(mScreen);
+ assertThat(mPasswordsPreferenceCategory.getPreferenceCount()).isEqualTo(0);
+ }
+
+ @Test
+ public void displayPreference_withPasswords_addsPreference() {
+ AutofillServiceInfo service = createServiceWithPasswords();
+ PasswordsPreferenceController controller =
+ createControllerWithServices(Lists.newArrayList(service));
+ controller.displayPreference(mScreen);
+
+ assertThat(mPasswordsPreferenceCategory.getPreferenceCount()).isEqualTo(1);
+ Preference pref = mPasswordsPreferenceCategory.getPreference(0);
+ assertThat(pref.getIcon()).isNotNull();
+ assertThat(pref.getIntent().getComponent())
+ .isEqualTo(
+ new ComponentName(
+ service.getServiceInfo().packageName,
+ service.getPasswordsActivity()));
+ }
+
+ private PasswordsPreferenceController createControllerWithServices(
+ List availableServices) {
+ return new PasswordsPreferenceController(
+ mContext, mPasswordsPreferenceCategory.getKey(), availableServices);
+ }
+
+ private AutofillServiceInfo createServiceWithPasswords() {
+ return new AutofillServiceInfo.TestDataBuilder()
+ .setPasswordsActivity("com.android.test.Passwords")
+ .build();
+ }
+}
diff --git a/tests/unit/src/com/android/settings/network/AirplaneSafeNetworksSliceTest.java b/tests/unit/src/com/android/settings/network/AirplaneSafeNetworksSliceTest.java
deleted file mode 100644
index a90b89dfdce..00000000000
--- a/tests/unit/src/com/android/settings/network/AirplaneSafeNetworksSliceTest.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * 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.network;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.content.Context;
-import android.content.Intent;
-import android.net.wifi.WifiManager;
-
-import androidx.slice.Slice;
-import androidx.slice.SliceItem;
-import androidx.slice.SliceMetadata;
-import androidx.slice.SliceProvider;
-import androidx.slice.widget.SliceLiveData;
-import androidx.test.core.app.ApplicationProvider;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-
-import com.android.settings.testutils.ResourcesUtils;
-
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnit;
-import org.mockito.junit.MockitoRule;
-
-@RunWith(AndroidJUnit4.class)
-public class AirplaneSafeNetworksSliceTest {
-
- @Rule
- public MockitoRule mMocks = MockitoJUnit.rule();
- @Mock
- private WifiManager mWifiManager;
-
- private Context mContext;
- private AirplaneSafeNetworksSlice mAirplaneSafeNetworksSlice;
-
- @Before
- public void setUp() {
- mContext = spy(ApplicationProvider.getApplicationContext());
- when(mContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(mWifiManager);
-
- // Set-up specs for SliceMetadata.
- SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS);
-
- mAirplaneSafeNetworksSlice = new AirplaneSafeNetworksSlice(mContext);
- mAirplaneSafeNetworksSlice.onAirplaneModeChanged(true);
- }
-
- @Test
- public void getSlice_airplaneModeOff_shouldBeNotNull() {
- mAirplaneSafeNetworksSlice.onAirplaneModeChanged(false);
-
- assertThat(mAirplaneSafeNetworksSlice.getSlice()).isNotNull();
- }
-
- @Test
- public void getSlice_wifiDisabled_shouldShowTurnOnNetworks() {
- when(mWifiManager.isWifiEnabled()).thenReturn(false);
-
- final Slice slice = mAirplaneSafeNetworksSlice.getSlice();
-
- assertThat(slice).isNotNull();
- final SliceItem sliceTitle =
- SliceMetadata.from(mContext, slice).getListContent().getHeader().getTitleItem();
- assertThat(sliceTitle.getText()).isEqualTo(
- ResourcesUtils.getResourcesString(mContext, "turn_on_networks"));
- }
-
- @Test
- public void getSlice_wifiEnabled_shouldShowTurnOffNetworks() {
- when(mWifiManager.isWifiEnabled()).thenReturn(true);
-
- final Slice slice = mAirplaneSafeNetworksSlice.getSlice();
-
- assertThat(slice).isNotNull();
- final SliceItem sliceTitle =
- SliceMetadata.from(mContext, slice).getListContent().getHeader().getTitleItem();
- assertThat(sliceTitle.getText()).isEqualTo(
- ResourcesUtils.getResourcesString(mContext, "turn_off_networks"));
- }
-
- @Test
- public void onNotifyChange_turnOnNetworks_shouldSetWifiEnabled() {
- when(mWifiManager.isWifiEnabled()).thenReturn(false);
- Intent intent = mAirplaneSafeNetworksSlice.getIntent();
-
- mAirplaneSafeNetworksSlice.onNotifyChange(intent);
-
- verify(mWifiManager).setWifiEnabled(true);
- }
-
- @Test
- public void onNotifyChange_turnOffNetworks_shouldSetWifiDisabled() {
- when(mWifiManager.isWifiEnabled()).thenReturn(true);
- Intent intent = mAirplaneSafeNetworksSlice.getIntent();
-
- mAirplaneSafeNetworksSlice.onNotifyChange(intent);
-
- verify(mWifiManager).setWifiEnabled(false);
- }
-}
diff --git a/tests/unit/src/com/android/settings/network/TurnOnWifiSliceTest.java b/tests/unit/src/com/android/settings/network/TurnOnWifiSliceTest.java
new file mode 100644
index 00000000000..befa655ce97
--- /dev/null
+++ b/tests/unit/src/com/android/settings/network/TurnOnWifiSliceTest.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2021 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.network;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.Intent;
+import android.net.wifi.WifiManager;
+
+import androidx.slice.SliceProvider;
+import androidx.slice.widget.SliceLiveData;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+@RunWith(AndroidJUnit4.class)
+public class TurnOnWifiSliceTest {
+
+ @Rule
+ public MockitoRule mMocks = MockitoJUnit.rule();
+ @Mock
+ private WifiManager mWifiManager;
+
+ private Context mContext;
+ private TurnOnWifiSlice mSlice;
+
+ @Before
+ public void setUp() {
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ when(mContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(mWifiManager);
+
+ // Set-up specs for SliceMetadata.
+ SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS);
+ mSlice = new TurnOnWifiSlice(mContext);
+ }
+
+ @Test
+ public void getSlice_wifiEnabled_shouldBeNull() {
+ when(mWifiManager.isWifiEnabled()).thenReturn(true);
+
+ assertThat(mSlice.getSlice()).isNull();
+ }
+
+ @Test
+ public void getSlice_wifiDisabled_shouldBeNotNull() {
+ when(mWifiManager.isWifiEnabled()).thenReturn(false);
+
+ assertThat(mSlice.getSlice()).isNotNull();
+ }
+
+ @Test
+ public void onNotifyChange_shouldSetWifiEnabled() {
+ Intent intent = mSlice.getIntent();
+
+ mSlice.onNotifyChange(intent);
+
+ verify(mWifiManager).setWifiEnabled(true);
+ }
+}
diff --git a/tests/unit/src/com/android/settings/panel/InternetConnectivityPanelTest.java b/tests/unit/src/com/android/settings/panel/InternetConnectivityPanelTest.java
index 4b4ec32681c..5d95d9a5fa1 100644
--- a/tests/unit/src/com/android/settings/panel/InternetConnectivityPanelTest.java
+++ b/tests/unit/src/com/android/settings/panel/InternetConnectivityPanelTest.java
@@ -157,7 +157,7 @@ public class InternetConnectivityPanelTest {
assertThat(uris).containsExactly(
CustomSliceRegistry.PROVIDER_MODEL_SLICE_URI,
- CustomSliceRegistry.AIRPLANE_SAFE_NETWORKS_SLICE_URI);
+ CustomSliceRegistry.TURN_ON_WIFI_SLICE_URI);
}
@Test