diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 37c9a7f4357..53525627a0e 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -126,7 +126,6 @@
-
Autofill service
-
- Default autofill service
Passwords
-
- Password and identity services
@@ -9745,8 +9741,6 @@
\u2014
auto, fill, autofill, password
-
- credentials, passkey, password
@@ -9759,21 +9753,6 @@
]]>
-
- Turn off %1$s\?
-
-
- Saved info like addresses or payment methods won\'t be filled in when you sign in. To keep your saved info filled in, set a default autofill service.
-
-
- Password and identity services limit
-
-
- You can have up to 5 autofill and password services active at the same time. Turn off a service to add more.
-
-
- Turn off
-
Autofill
diff --git a/res/xml/accounts_dashboard_settings_credman.xml b/res/xml/accounts_dashboard_settings_credman.xml
deleted file mode 100644
index 605d315bcbc..00000000000
--- a/res/xml/accounts_dashboard_settings_credman.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/res/xml/accounts_personal_dashboard_settings_credman.xml b/res/xml/accounts_personal_dashboard_settings_credman.xml
deleted file mode 100644
index a5188dd6885..00000000000
--- a/res/xml/accounts_personal_dashboard_settings_credman.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/res/xml/accounts_work_dashboard_settings_credman.xml b/res/xml/accounts_work_dashboard_settings_credman.xml
deleted file mode 100644
index f4e8af2f27a..00000000000
--- a/res/xml/accounts_work_dashboard_settings_credman.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/com/android/settings/accounts/AccountDashboardFragment.java b/src/com/android/settings/accounts/AccountDashboardFragment.java
index 107df947935..3e83d6f0ebd 100644
--- a/src/com/android/settings/accounts/AccountDashboardFragment.java
+++ b/src/com/android/settings/accounts/AccountDashboardFragment.java
@@ -22,13 +22,11 @@ import android.accounts.AccountManager;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.pm.UserInfo;
-import android.credentials.CredentialManager;
import android.os.UserHandle;
import android.os.UserManager;
import com.android.settings.R;
import com.android.settings.applications.autofill.PasswordsPreferenceController;
-import com.android.settings.applications.credentials.CredentialManagerPreferenceController;
import com.android.settings.applications.defaultapps.DefaultAutofillPreferenceController;
import com.android.settings.applications.defaultapps.DefaultWorkAutofillPreferenceController;
import com.android.settings.dashboard.DashboardFragment;
@@ -49,6 +47,7 @@ public class AccountDashboardFragment extends DashboardFragment {
private static final String TAG = "AccountDashboardFrag";
+
@Override
public int getMetricsCategory() {
return SettingsEnums.ACCOUNT;
@@ -61,7 +60,7 @@ public class AccountDashboardFragment extends DashboardFragment {
@Override
protected int getPreferenceScreenResId() {
- return getPreferenceLayoutResId();
+ return R.xml.accounts_dashboard_settings;
}
@Override
@@ -72,12 +71,6 @@ public class AccountDashboardFragment extends DashboardFragment {
@Override
public void onAttach(Context context) {
super.onAttach(context);
- if (CredentialManager.isServiceEnabled()) {
- CredentialManagerPreferenceController cmpp =
- use(CredentialManagerPreferenceController.class);
- cmpp.setParentFragment(this);
- }
-
getSettingsLifecycle().addObserver(use(PasswordsPreferenceController.class));
}
@@ -102,13 +95,11 @@ public class AccountDashboardFragment extends DashboardFragment {
}
private static void buildAccountPreferenceControllers(
- Context context,
- DashboardFragment parent,
- String[] authorities,
+ Context context, DashboardFragment parent, String[] authorities,
List controllers) {
final AccountPreferenceController accountPrefController =
- new AccountPreferenceController(
- context, parent, authorities, ProfileSelectFragment.ProfileType.ALL);
+ new AccountPreferenceController(context, parent, authorities,
+ ProfileSelectFragment.ProfileType.ALL);
if (parent != null) {
parent.getSettingsLifecycle().addObserver(accountPrefController);
}
@@ -118,14 +109,8 @@ public class AccountDashboardFragment extends DashboardFragment {
controllers.add(new AutoSyncWorkDataPreferenceController(context, parent));
}
- public static int getPreferenceLayoutResId() {
- return CredentialManager.isServiceEnabled()
- ? R.xml.accounts_dashboard_settings_credman
- : R.xml.accounts_dashboard_settings;
- }
-
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
- new BaseSearchIndexProvider(getPreferenceLayoutResId()) {
+ new BaseSearchIndexProvider(R.xml.accounts_dashboard_settings) {
@Override
public List createPreferenceControllers(
@@ -139,11 +124,11 @@ public class AccountDashboardFragment extends DashboardFragment {
@SuppressWarnings("MissingSuperCall") // TODO: Fix me
@Override
- public List getDynamicRawDataToIndex(
- Context context, boolean enabled) {
+ public List getDynamicRawDataToIndex(Context context,
+ boolean enabled) {
final List indexRaws = new ArrayList<>();
- final UserManager userManager =
- (UserManager) context.getSystemService(Context.USER_SERVICE);
+ final UserManager userManager = (UserManager) context.getSystemService(
+ Context.USER_SERVICE);
final List profiles = userManager.getProfiles(UserHandle.myUserId());
for (final UserInfo userInfo : profiles) {
if (userInfo.isManagedProfile()) {
diff --git a/src/com/android/settings/accounts/AccountPersonalDashboardFragment.java b/src/com/android/settings/accounts/AccountPersonalDashboardFragment.java
index e0611023b63..4661c6416e7 100644
--- a/src/com/android/settings/accounts/AccountPersonalDashboardFragment.java
+++ b/src/com/android/settings/accounts/AccountPersonalDashboardFragment.java
@@ -22,11 +22,9 @@ import static com.android.settings.accounts.AccountDashboardFragment.buildAutofi
import android.app.settings.SettingsEnums;
import android.content.Context;
-import android.credentials.CredentialManager;
import com.android.settings.R;
import com.android.settings.applications.autofill.PasswordsPreferenceController;
-import com.android.settings.applications.credentials.CredentialManagerPreferenceController;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.dashboard.profileselector.ProfileSelectFragment;
import com.android.settings.users.AutoSyncDataPreferenceController;
@@ -36,7 +34,9 @@ import com.android.settingslib.core.AbstractPreferenceController;
import java.util.ArrayList;
import java.util.List;
-/** Account Setting page for personal profile. */
+/**
+ * Account Setting page for personal profile.
+ */
public class AccountPersonalDashboardFragment extends DashboardFragment {
private static final String TAG = "AccountPersonalFrag";
@@ -53,9 +53,6 @@ public class AccountPersonalDashboardFragment extends DashboardFragment {
@Override
protected int getPreferenceScreenResId() {
- if (CredentialManager.isServiceEnabled()) {
- return R.xml.accounts_personal_dashboard_settings_credman;
- }
return R.xml.accounts_personal_dashboard_settings;
}
@@ -67,13 +64,6 @@ public class AccountPersonalDashboardFragment extends DashboardFragment {
@Override
public void onAttach(Context context) {
super.onAttach(context);
-
- if (CredentialManager.isServiceEnabled()) {
- CredentialManagerPreferenceController cmpp =
- use(CredentialManagerPreferenceController.class);
- cmpp.setParentFragment(this);
- }
-
getSettingsLifecycle().addObserver(use(PasswordsPreferenceController.class));
}
@@ -87,13 +77,11 @@ public class AccountPersonalDashboardFragment extends DashboardFragment {
}
private static void buildAccountPreferenceControllers(
- Context context,
- DashboardFragment parent,
- String[] authorities,
+ Context context, DashboardFragment parent, String[] authorities,
List controllers) {
final AccountPreferenceController accountPrefController =
- new AccountPreferenceController(
- context, parent, authorities, ProfileSelectFragment.ProfileType.PERSONAL);
+ new AccountPreferenceController(context, parent, authorities,
+ ProfileSelectFragment.ProfileType.PERSONAL);
if (parent != null) {
parent.getSettingsLifecycle().addObserver(accountPrefController);
}
@@ -103,15 +91,15 @@ public class AccountPersonalDashboardFragment extends DashboardFragment {
}
// TODO: b/141601408. After featureFlag settings_work_profile is launched, unmark this
- // public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
- // new BaseSearchIndexProvider(R.xml.accounts_personal_dashboard_settings) {
- //
- // @Override
- // public List createPreferenceControllers(
- // Context context) {
- // ..Add autofill here too..
- // return buildPreferenceControllers(
- // context, null /* parent */, null /* authorities*/);
- // }
- // };
+// public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+// new BaseSearchIndexProvider(R.xml.accounts_personal_dashboard_settings) {
+//
+// @Override
+// public List createPreferenceControllers(
+// Context context) {
+// ..Add autofill here too..
+// return buildPreferenceControllers(
+// context, null /* parent */, null /* authorities*/);
+// }
+// };
}
diff --git a/src/com/android/settings/accounts/AccountWorkProfileDashboardFragment.java b/src/com/android/settings/accounts/AccountWorkProfileDashboardFragment.java
index 027d1f744ca..f64e0416163 100644
--- a/src/com/android/settings/accounts/AccountWorkProfileDashboardFragment.java
+++ b/src/com/android/settings/accounts/AccountWorkProfileDashboardFragment.java
@@ -22,11 +22,9 @@ import static com.android.settings.accounts.AccountDashboardFragment.buildAutofi
import android.app.settings.SettingsEnums;
import android.content.Context;
-import android.credentials.CredentialManager;
import com.android.settings.R;
import com.android.settings.applications.autofill.PasswordsPreferenceController;
-import com.android.settings.applications.credentials.CredentialManagerPreferenceController;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.dashboard.profileselector.ProfileSelectFragment;
import com.android.settings.users.AutoSyncDataPreferenceController;
@@ -36,7 +34,9 @@ import com.android.settingslib.core.AbstractPreferenceController;
import java.util.ArrayList;
import java.util.List;
-/** Account Setting page for work profile. */
+/**
+ * Account Setting page for work profile.
+ */
public class AccountWorkProfileDashboardFragment extends DashboardFragment {
private static final String TAG = "AccountWorkProfileFrag";
@@ -53,9 +53,6 @@ public class AccountWorkProfileDashboardFragment extends DashboardFragment {
@Override
protected int getPreferenceScreenResId() {
- if (CredentialManager.isServiceEnabled()) {
- return R.xml.accounts_work_dashboard_settings_credman;
- }
return R.xml.accounts_work_dashboard_settings;
}
@@ -67,13 +64,6 @@ public class AccountWorkProfileDashboardFragment extends DashboardFragment {
@Override
public void onAttach(Context context) {
super.onAttach(context);
-
- if (CredentialManager.isServiceEnabled()) {
- CredentialManagerPreferenceController cmpp =
- use(CredentialManagerPreferenceController.class);
- cmpp.setParentFragment(this);
- }
-
getSettingsLifecycle().addObserver(use(PasswordsPreferenceController.class));
}
@@ -87,13 +77,11 @@ public class AccountWorkProfileDashboardFragment extends DashboardFragment {
}
private static void buildAccountPreferenceControllers(
- Context context,
- DashboardFragment parent,
- String[] authorities,
+ Context context, DashboardFragment parent, String[] authorities,
List controllers) {
final AccountPreferenceController accountPrefController =
- new AccountPreferenceController(
- context, parent, authorities, ProfileSelectFragment.ProfileType.WORK);
+ new AccountPreferenceController(context, parent, authorities,
+ ProfileSelectFragment.ProfileType.WORK);
if (parent != null) {
parent.getSettingsLifecycle().addObserver(accountPrefController);
}
@@ -103,15 +91,15 @@ public class AccountWorkProfileDashboardFragment extends DashboardFragment {
}
// TODO: b/141601408. After featureFlag settings_work_profile is launched, unmark this
- // public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
- // new BaseSearchIndexProvider(R.xml.accounts_work_dashboard_settings) {
- //
- // @Override
- // public List createPreferenceControllers(
- // Context context) {
- // ..Add autofill here too..
- // return buildPreferenceControllers(
- // context, null /* parent */, null /* authorities*/);
- // }
- // };
+// public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+// new BaseSearchIndexProvider(R.xml.accounts_work_dashboard_settings) {
+//
+// @Override
+// public List createPreferenceControllers(
+// Context context) {
+// ..Add autofill here too..
+// return buildPreferenceControllers(
+// context, null /* parent */, null /* authorities*/);
+// }
+// };
}
diff --git a/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java b/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java
deleted file mode 100644
index 7abe9049d9d..00000000000
--- a/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java
+++ /dev/null
@@ -1,475 +0,0 @@
-/*
- * Copyright (C) 2022 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.credentials;
-
-import static androidx.lifecycle.Lifecycle.Event.ON_CREATE;
-
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.app.Dialog;
-import android.app.settings.SettingsEnums;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.pm.PackageManager;
-import android.content.pm.ServiceInfo;
-import android.credentials.CredentialManager;
-import android.credentials.ListEnabledProvidersException;
-import android.credentials.ListEnabledProvidersResponse;
-import android.credentials.SetEnabledProvidersException;
-import android.graphics.drawable.Drawable;
-import android.os.Bundle;
-import android.os.CancellationSignal;
-import android.os.OutcomeReceiver;
-import android.os.UserHandle;
-import android.service.credentials.CredentialProviderInfo;
-import android.util.IconDrawableFactory;
-import android.util.Log;
-
-import androidx.appcompat.app.AlertDialog;
-import androidx.core.content.ContextCompat;
-import androidx.fragment.app.DialogFragment;
-import androidx.lifecycle.LifecycleObserver;
-import androidx.lifecycle.LifecycleOwner;
-import androidx.lifecycle.OnLifecycleEvent;
-import androidx.preference.PreferenceGroup;
-import androidx.preference.PreferenceScreen;
-import androidx.preference.SwitchPreference;
-
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.settings.R;
-import com.android.settings.Utils;
-import com.android.settings.core.BasePreferenceController;
-import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
-import com.android.settings.dashboard.DashboardFragment;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.concurrent.Executor;
-
-/** Queries available credential manager providers and adds preferences for them. */
-public class CredentialManagerPreferenceController extends BasePreferenceController
- implements LifecycleObserver {
- private static final String TAG = "CredentialManagerPreferenceController";
- private static final int MAX_SELECTABLE_PROVIDERS = 5;
-
- private final PackageManager mPm;
- private final IconDrawableFactory mIconFactory;
- private final List mServices;
- private final Set mEnabledPackageNames;
- private final @Nullable CredentialManager mCredentialManager;
- private final CancellationSignal mCancellationSignal = new CancellationSignal();
- private final Executor mExecutor;
-
- private @Nullable DashboardFragment mParentFragment = null;
-
- public CredentialManagerPreferenceController(Context context, String preferenceKey) {
- super(context, preferenceKey);
- mPm = context.getPackageManager();
- mIconFactory = IconDrawableFactory.newInstance(mContext);
- mServices = new ArrayList<>();
- mEnabledPackageNames = new HashSet<>();
- mExecutor = ContextCompat.getMainExecutor(mContext);
- mCredentialManager =
- getCredentialManager(context, preferenceKey.equals("credentials_test"));
- }
-
- private @Nullable CredentialManager getCredentialManager(Context context, boolean isTest) {
- if (isTest) {
- return null;
- }
-
- Object service = context.getSystemService(Context.CREDENTIAL_SERVICE);
- if (service != null && CredentialManager.isServiceEnabled()) {
- return (CredentialManager) service;
- }
-
- return null;
- }
-
- @VisibleForTesting
- public boolean isConnected() {
- return mCredentialManager != null;
- }
-
- /**
- * Sets the parent fragment and attaches this controller to the settings lifecycle.
- *
- * @param fragment the fragment to use as the parent
- */
- public void setParentFragment(DashboardFragment fragment) {
- mParentFragment = fragment;
- fragment.getSettingsLifecycle().addObserver(this);
- }
-
- @OnLifecycleEvent(ON_CREATE)
- void onCreate(LifecycleOwner lifecycleOwner) {
- if (mCredentialManager == null) {
- return;
- }
-
- mCredentialManager.listEnabledProviders(
- mCancellationSignal,
- mExecutor,
- new OutcomeReceiver() {
- @Override
- public void onResult(ListEnabledProvidersResponse result) {
- Set enabledPackages = new HashSet<>();
- for (String flattenedComponentName : result.getProviderComponentNames()) {
- ComponentName cn =
- ComponentName.unflattenFromString(flattenedComponentName);
- if (cn != null) {
- enabledPackages.add(cn.getPackageName());
- }
- }
-
- List services = new ArrayList<>();
- for (CredentialProviderInfo cpi :
- CredentialProviderInfo.getAvailableServices(mContext, getUser())) {
- services.add(cpi.getServiceInfo());
- }
-
- init(lifecycleOwner, services, enabledPackages);
- }
-
- @Override
- public void onError(ListEnabledProvidersException e) {
- Log.e(TAG, "listEnabledProviders error: " + e.toString());
- }
- });
- }
-
- @VisibleForTesting
- void init(
- LifecycleOwner lifecycleOwner,
- List availableServices,
- Set enabledPackages) {
- mServices.clear();
- mServices.addAll(availableServices);
-
- mEnabledPackageNames.clear();
- mEnabledPackageNames.addAll(enabledPackages);
- }
-
- @Override
- public int getAvailabilityStatus() {
- return mServices.isEmpty() ? CONDITIONALLY_UNAVAILABLE : AVAILABLE;
- }
-
- @Override
- public void displayPreference(PreferenceScreen screen) {
- super.displayPreference(screen);
-
- PreferenceGroup group = screen.findPreference(getPreferenceKey());
- Context context = screen.getContext();
-
- for (ServiceInfo serviceInfo : mServices) {
- CharSequence title = "";
- if (serviceInfo.nonLocalizedLabel != null) {
- title = serviceInfo.loadLabel(mPm);
- }
-
- group.addPreference(
- addProviderPreference(
- context,
- title,
- mIconFactory.getBadgedIcon(
- serviceInfo, serviceInfo.applicationInfo, getUser()),
- serviceInfo.packageName));
- }
- }
-
- /**
- * Enables the package name as an enabled credential manager provider.
- *
- * @param packageName the package name to enable
- */
- @VisibleForTesting
- public boolean togglePackageNameEnabled(String packageName) {
- if (mEnabledPackageNames.size() >= MAX_SELECTABLE_PROVIDERS) {
- return false;
- } else {
- mEnabledPackageNames.add(packageName);
- commitEnabledPackages();
- return true;
- }
- }
-
- /**
- * Disables the package name as a credential manager provider.
- *
- * @param packageName the package name to disable
- */
- @VisibleForTesting
- public void togglePackageNameDisabled(String packageName) {
- mEnabledPackageNames.remove(packageName);
- commitEnabledPackages();
- }
-
- /** Returns the enabled credential manager provider package names. */
- @VisibleForTesting
- public Set getEnabledProviders() {
- return mEnabledPackageNames;
- }
-
- /**
- * Returns the enabled credential manager provider flattened component names that can be stored
- * in the setting.
- */
- @VisibleForTesting
- public List getEnabledSettings() {
- // Get all the component names that match the enabled package names.
- List enabledServices = new ArrayList<>();
- for (ServiceInfo service : mServices) {
- if (mEnabledPackageNames.contains(service.packageName)) {
- enabledServices.add(service.getComponentName().flattenToString());
- }
- }
-
- return enabledServices;
- }
-
- private SwitchPreference addProviderPreference(
- @NonNull Context prefContext,
- @NonNull CharSequence title,
- @Nullable Drawable icon,
- @NonNull String packageName) {
- final SwitchPreference pref = new SwitchPreference(prefContext);
- pref.setTitle(title);
- pref.setChecked(mEnabledPackageNames.contains(packageName));
-
- if (icon != null) {
- pref.setIcon(Utils.getSafeIcon(icon));
- }
-
- pref.setOnPreferenceClickListener(
- p -> {
- boolean isChecked = pref.isChecked();
-
- if (isChecked) {
- // Show the error if too many enabled.
- if (!togglePackageNameEnabled(packageName)) {
- final DialogFragment fragment = newErrorDialogFragment();
-
- if (fragment == null || mParentFragment == null) {
- return true;
- }
-
- fragment.show(
- mParentFragment.getActivity().getSupportFragmentManager(),
- ErrorDialogFragment.TAG);
-
- // The user set the check to true so we need to set it back.
- pref.setChecked(false);
- }
-
- return true;
- } else {
- // Show the confirm disable dialog.
- final DialogFragment fragment =
- newConfirmationDialogFragment(packageName, title, pref);
-
- if (fragment == null || mParentFragment == null) {
- return true;
- }
-
- fragment.show(
- mParentFragment.getActivity().getSupportFragmentManager(),
- ConfirmationDialogFragment.TAG);
- }
-
- return true;
- });
-
- return pref;
- }
-
- private void commitEnabledPackages() {
- // Commit using the CredMan API.
- if (mCredentialManager == null) {
- return;
- }
-
- List enabledServices = getEnabledSettings();
- mCredentialManager.setEnabledProviders(
- enabledServices,
- getUser(),
- mExecutor,
- new OutcomeReceiver() {
- @Override
- public void onResult(Void result) {
- Log.i(TAG, "setEnabledProviders success");
- }
-
- @Override
- public void onError(SetEnabledProvidersException e) {
- Log.e(TAG, "setEnabledProviders error: " + e.toString());
- }
- });
- }
-
- private @Nullable ConfirmationDialogFragment newConfirmationDialogFragment(
- @NonNull String packageName,
- @NonNull CharSequence appName,
- @NonNull SwitchPreference pref) {
- DialogHost host =
- new DialogHost() {
- @Override
- public DashboardFragment getParentFragment() {
- return mParentFragment;
- }
-
- @Override
- public void onDialogClick(int whichButton) {
- if (whichButton == DialogInterface.BUTTON_POSITIVE) {
- // Since the package is now enabled then we
- // should remove it from the enabled list.
- togglePackageNameDisabled(packageName);
- } else if (whichButton == DialogInterface.BUTTON_NEGATIVE) {
- // Set the checked back to true because we
- // backed out of turning this off.
- pref.setChecked(true);
- }
- }
- };
-
- if (host.getParentFragment() == null) {
- return null;
- }
-
- return new ConfirmationDialogFragment(host, packageName, appName);
- }
-
- private @Nullable ErrorDialogFragment newErrorDialogFragment() {
- DialogHost host =
- new DialogHost() {
- @Override
- public DashboardFragment getParentFragment() {
- return mParentFragment;
- }
-
- @Override
- public void onDialogClick(int whichButton) {}
- };
-
- if (host.getParentFragment() == null) {
- return null;
- }
-
- return new ErrorDialogFragment(host);
- }
-
- private int getUser() {
- UserHandle workUser = getWorkProfileUser();
- return workUser != null ? workUser.getIdentifier() : UserHandle.myUserId();
- }
-
- /** Called when the dialog button is clicked. */
- private interface DialogHost {
- void onDialogClick(int whichButton);
-
- DashboardFragment getParentFragment();
- }
-
- /** Dialog fragment parent class. */
- private abstract static class CredentialManagerDialogFragment extends InstrumentedDialogFragment
- implements DialogInterface.OnClickListener {
-
- public static final String TAG = "CredentialManagerDialogFragment";
- public static final String PACKAGE_NAME_KEY = "package_name";
- public static final String APP_NAME_KEY = "app_name";
-
- private DialogHost mDialogHost;
-
- CredentialManagerDialogFragment(DialogHost dialogHost) {
- super();
- setTargetFragment(dialogHost.getParentFragment(), 0);
- mDialogHost = dialogHost;
- }
-
- public DialogHost getDialogHost() {
- return mDialogHost;
- }
-
- @Override
- public int getMetricsCategory() {
- return SettingsEnums.ACCOUNT;
- }
- }
-
- /** Dialog showing error when too many providers are selected. */
- private static class ErrorDialogFragment extends CredentialManagerDialogFragment {
-
- ErrorDialogFragment(DialogHost dialogHost) {
- super(dialogHost);
- }
-
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- return new AlertDialog.Builder(getActivity())
- .setTitle(getContext().getString(R.string.credman_error_message_title))
- .setMessage(getContext().getString(R.string.credman_error_message))
- .setPositiveButton(android.R.string.ok, this)
- .create();
- }
-
- @Override
- public void onClick(DialogInterface dialog, int which) {}
- }
-
- /**
- * Confirmation dialog fragment shows a dialog to the user to confirm that they are disabling a
- * provider.
- */
- private static class ConfirmationDialogFragment extends CredentialManagerDialogFragment {
-
- ConfirmationDialogFragment(
- DialogHost dialogHost, @NonNull String packageName, @NonNull CharSequence appName) {
- super(dialogHost);
-
- final Bundle argument = new Bundle();
- argument.putString(PACKAGE_NAME_KEY, packageName);
- argument.putCharSequence(APP_NAME_KEY, appName);
- setArguments(argument);
- }
-
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- final Bundle bundle = getArguments();
- final String title =
- getContext()
- .getString(
- R.string.credman_confirmation_message_title,
- bundle.getCharSequence(
- CredentialManagerDialogFragment.APP_NAME_KEY));
-
- return new AlertDialog.Builder(getActivity())
- .setTitle(title)
- .setMessage(getContext().getString(R.string.credman_confirmation_message))
- .setPositiveButton(R.string.credman_confirmation_message_positive_button, this)
- .setNegativeButton(android.R.string.cancel, this)
- .create();
- }
-
- @Override
- public void onClick(DialogInterface dialog, int which) {
- getDialogHost().onDialogClick(which);
- }
- }
-}
diff --git a/tests/unit/src/com/android/settings/applications/credentials/CredentialManagerPreferenceControllerTest.java b/tests/unit/src/com/android/settings/applications/credentials/CredentialManagerPreferenceControllerTest.java
deleted file mode 100644
index 584832686ab..00000000000
--- a/tests/unit/src/com/android/settings/applications/credentials/CredentialManagerPreferenceControllerTest.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * Copyright (C) 2022 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.credentials;
-
-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 static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
-
-import android.content.Context;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.ServiceInfo;
-import android.os.Looper;
-
-import androidx.lifecycle.Lifecycle;
-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.HashSet;
-import java.util.List;
-import java.util.Set;
-
-@RunWith(AndroidJUnit4.class)
-public class CredentialManagerPreferenceControllerTest {
-
- private Context mContext;
- private PreferenceScreen mScreen;
- private PreferenceCategory mCredentialsPreferenceCategory;
-
- @Before
- public void setUp() {
- mContext = spy(ApplicationProvider.getApplicationContext());
- if (Looper.myLooper() == null) {
- Looper.prepare(); // needed to create the preference screen
- }
- mScreen = new PreferenceManager(mContext).createPreferenceScreen(mContext);
- mCredentialsPreferenceCategory = new PreferenceCategory(mContext);
- mCredentialsPreferenceCategory.setKey("credentials_test");
- mScreen.addPreference(mCredentialsPreferenceCategory);
- }
-
- @Test
- // Tests that getAvailabilityStatus() does not throw an exception if it's called before the
- // Controller is initialized (this can happen during indexing).
- public void getAvailabilityStatus_withoutInit_returnsUnavailable() {
- CredentialManagerPreferenceController controller =
- new CredentialManagerPreferenceController(
- mContext, mCredentialsPreferenceCategory.getKey());
- assertThat(controller.isConnected()).isFalse();
- assertThat(controller.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE);
- }
-
- @Test
- public void getAvailabilityStatus_noServices_returnsUnavailable() {
- CredentialManagerPreferenceController controller =
- createControllerWithServices(Collections.emptyList());
- assertThat(controller.isConnected()).isFalse();
- assertThat(controller.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE);
- }
-
- @Test
- public void getAvailabilityStatus_withServices_returnsAvailable() {
- CredentialManagerPreferenceController controller =
- createControllerWithServices(Lists.newArrayList(createServiceInfo()));
- assertThat(controller.isConnected()).isFalse();
- assertThat(controller.getAvailabilityStatus()).isEqualTo(AVAILABLE);
- }
-
- @Test
- public void displayPreference_noServices_noPreferencesAdded() {
- CredentialManagerPreferenceController controller =
- createControllerWithServices(Collections.emptyList());
- controller.displayPreference(mScreen);
- assertThat(mCredentialsPreferenceCategory.getPreferenceCount()).isEqualTo(0);
- }
-
- @Test
- public void displayPreference_withServices_preferencesAdded() {
- CredentialManagerPreferenceController controller =
- createControllerWithServices(Lists.newArrayList(createServiceInfo()));
- controller.displayPreference(mScreen);
- assertThat(controller.isConnected()).isFalse();
- assertThat(mCredentialsPreferenceCategory.getPreferenceCount()).isEqualTo(1);
- }
-
- @Test
- public void getAvailabilityStatus_handlesToggleAndSave() {
- CredentialManagerPreferenceController controller =
- createControllerWithServices(
- Lists.newArrayList(
- createServiceInfo("com.android.provider1", "ClassA"),
- createServiceInfo("com.android.provider1", "ClassB"),
- createServiceInfo("com.android.provider2", "ClassA"),
- createServiceInfo("com.android.provider3", "ClassA"),
- createServiceInfo("com.android.provider4", "ClassA"),
- createServiceInfo("com.android.provider5", "ClassA"),
- createServiceInfo("com.android.provider6", "ClassA")));
- assertThat(controller.getAvailabilityStatus()).isEqualTo(AVAILABLE);
- assertThat(controller.isConnected()).isFalse();
-
- // Ensure that we stay under 5 providers.
- assertThat(controller.togglePackageNameEnabled("com.android.provider1")).isTrue();
- assertThat(controller.togglePackageNameEnabled("com.android.provider2")).isTrue();
- assertThat(controller.togglePackageNameEnabled("com.android.provider3")).isTrue();
- assertThat(controller.togglePackageNameEnabled("com.android.provider4")).isTrue();
- assertThat(controller.togglePackageNameEnabled("com.android.provider5")).isTrue();
- assertThat(controller.togglePackageNameEnabled("com.android.provider6")).isFalse();
-
- // Check that they are all actually registered.
- Set enabledProviders = controller.getEnabledProviders();
- assertThat(enabledProviders.size()).isEqualTo(5);
- assertThat(enabledProviders.contains("com.android.provider1")).isTrue();
- assertThat(enabledProviders.contains("com.android.provider2")).isTrue();
- assertThat(enabledProviders.contains("com.android.provider3")).isTrue();
- assertThat(enabledProviders.contains("com.android.provider4")).isTrue();
- assertThat(enabledProviders.contains("com.android.provider5")).isTrue();
- assertThat(enabledProviders.contains("com.android.provider6")).isFalse();
-
- // Check that the settings string has the right component names.
- List enabledServices = controller.getEnabledSettings();
- assertThat(enabledServices.size()).isEqualTo(6);
- assertThat(enabledServices.contains("com.android.provider1/ClassA")).isTrue();
- assertThat(enabledServices.contains("com.android.provider1/ClassB")).isTrue();
- assertThat(enabledServices.contains("com.android.provider2/ClassA")).isTrue();
- assertThat(enabledServices.contains("com.android.provider3/ClassA")).isTrue();
- assertThat(enabledServices.contains("com.android.provider4/ClassA")).isTrue();
- assertThat(enabledServices.contains("com.android.provider5/ClassA")).isTrue();
- assertThat(enabledServices.contains("com.android.provider6/ClassA")).isFalse();
-
- // Toggle the provider disabled.
- controller.togglePackageNameDisabled("com.android.provider2");
-
- // Check that the provider was removed from the list of providers.
- Set currentlyEnabledProviders = controller.getEnabledProviders();
- assertThat(currentlyEnabledProviders.size()).isEqualTo(4);
- assertThat(currentlyEnabledProviders.contains("com.android.provider1")).isTrue();
- assertThat(currentlyEnabledProviders.contains("com.android.provider2")).isFalse();
- assertThat(currentlyEnabledProviders.contains("com.android.provider3")).isTrue();
- assertThat(currentlyEnabledProviders.contains("com.android.provider4")).isTrue();
- assertThat(currentlyEnabledProviders.contains("com.android.provider5")).isTrue();
- assertThat(currentlyEnabledProviders.contains("com.android.provider6")).isFalse();
-
- // Check that the provider was removed from the list of services stored in the setting.
- List currentlyEnabledServices = controller.getEnabledSettings();
- assertThat(currentlyEnabledServices.size()).isEqualTo(5);
- assertThat(currentlyEnabledServices.contains("com.android.provider1/ClassA")).isTrue();
- assertThat(currentlyEnabledServices.contains("com.android.provider1/ClassB")).isTrue();
- assertThat(currentlyEnabledServices.contains("com.android.provider3/ClassA")).isTrue();
- assertThat(currentlyEnabledServices.contains("com.android.provider4/ClassA")).isTrue();
- assertThat(currentlyEnabledServices.contains("com.android.provider5/ClassA")).isTrue();
- assertThat(currentlyEnabledServices.contains("com.android.provider6/ClassA")).isFalse();
- }
-
- private CredentialManagerPreferenceController createControllerWithServices(
- List availableServices) {
- CredentialManagerPreferenceController controller =
- new CredentialManagerPreferenceController(
- mContext, mCredentialsPreferenceCategory.getKey());
- controller.init(() -> mock(Lifecycle.class), availableServices, new HashSet<>());
- return controller;
- }
-
- private ServiceInfo createServiceInfo() {
- return createServiceInfo("com.android.provider", "CredManProvider");
- }
-
- private ServiceInfo createServiceInfo(String packageName, String className) {
- ServiceInfo si = new ServiceInfo();
- si.packageName = packageName;
- si.name = className;
- si.nonLocalizedLabel = "test";
-
- si.applicationInfo = new ApplicationInfo();
- si.applicationInfo.packageName = packageName;
- si.applicationInfo.nonLocalizedLabel = "test";
-
- return si;
- }
-}