Make sure policy transparency is applied in all cases

There are some cases where policy transparency is not
correctly showing up (e.g. on the main setting screen
for the primary provider). This makes sure policy
transparency is fully applied to the end user.

Test: manual on device
Bug: 333597574
Change-Id: I8d6a4c60e40bd2e639127777efdb04f1035c24bc
This commit is contained in:
Becca Hughes
2024-04-10 13:38:54 -07:00
parent 1f00d38d2d
commit 2fc40e8be7
2 changed files with 45 additions and 18 deletions

View File

@@ -41,8 +41,8 @@ import android.text.Html;
import android.text.TextUtils;
import android.util.Log;
import androidx.annotation.Nullable;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.preference.Preference;
@@ -125,12 +125,12 @@ public class DefaultCombinedPicker extends DefaultAppPickerFragment {
protected CharSequence getPositiveButtonText() {
final Bundle bundle = getArguments();
if (TextUtils.isEmpty(bundle.getString(EXTRA_KEY))) {
return getContext().getString(
R.string.credman_confirmation_turn_off_positive_button);
return getContext()
.getString(R.string.credman_confirmation_turn_off_positive_button);
}
return getContext().getString(
R.string.credman_confirmation_change_provider_positive_button);
return getContext()
.getString(R.string.credman_confirmation_change_provider_positive_button);
}
}
@@ -259,21 +259,21 @@ public class DefaultCombinedPicker extends DefaultAppPickerFragment {
return mCredentialManager;
}
private List<CombinedProviderInfo> getAllProviders() {
private List<CombinedProviderInfo> getAllProviders(int userId) {
final Context context = getContext();
final List<AutofillServiceInfo> autofillProviders =
AutofillServiceInfo.getAvailableServices(context, getUser());
AutofillServiceInfo.getAvailableServices(context, userId);
final CredentialManager service = getCredentialProviderService();
final List<CredentialProviderInfo> credManProviders = new ArrayList<>();
if (service != null) {
credManProviders.addAll(
service.getCredentialProviderServices(
getUser(),
userId,
CredentialManager.PROVIDER_FILTER_USER_PROVIDERS_INCLUDING_HIDDEN));
}
final String selectedAutofillProvider = getSelectedAutofillProvider(context, getUser());
final String selectedAutofillProvider = getSelectedAutofillProvider(context, userId);
return CombinedProviderInfo.buildMergedList(
autofillProviders, credManProviders, selectedAutofillProvider);
}
@@ -285,7 +285,8 @@ public class DefaultCombinedPicker extends DefaultAppPickerFragment {
protected List<DefaultAppInfo> getCandidates() {
final Context context = getContext();
final List<CombinedProviderInfo> allProviders = getAllProviders();
final int userId = getUser();
final List<CombinedProviderInfo> allProviders = getAllProviders(userId);
final List<DefaultAppInfo> candidates = new ArrayList<>();
for (CombinedProviderInfo cpi : allProviders) {
@@ -295,10 +296,10 @@ public class DefaultCombinedPicker extends DefaultAppPickerFragment {
if (brandingService != null) {
candidates.add(
new CredentialManagerDefaultAppInfo(
context, mPm, getUser(), brandingService, cpi));
context, mPm, userId, brandingService, cpi));
} else if (appInfo != null) {
candidates.add(
new CredentialManagerDefaultAppInfo(context, mPm, getUser(), appInfo, cpi));
new CredentialManagerDefaultAppInfo(context, mPm, userId, appInfo, cpi));
}
}
@@ -361,9 +362,23 @@ public class DefaultCombinedPicker extends DefaultAppPickerFragment {
@Override
protected String getDefaultKey() {
final CombinedProviderInfo topProvider =
CombinedProviderInfo.getTopProvider(getAllProviders());
return topProvider == null ? "" : topProvider.getApplicationInfo().packageName;
final int userId = getUser();
final @Nullable CombinedProviderInfo topProvider =
CombinedProviderInfo.getTopProvider(getAllProviders(userId));
if (topProvider != null) {
// Apply device admin restrictions to top provider.
if (topProvider.getDeviceAdminRestrictions(getContext(), userId) != null) {
return "";
}
ApplicationInfo appInfo = topProvider.getApplicationInfo();
if (appInfo != null) {
return appInfo.packageName;
}
}
return "";
}
@Override
@@ -392,7 +407,7 @@ public class DefaultCombinedPicker extends DefaultAppPickerFragment {
@Override
protected boolean setDefaultKey(String key) {
// Get the list of providers and see if any match the key (package name).
final List<CombinedProviderInfo> allProviders = getAllProviders();
final List<CombinedProviderInfo> allProviders = getAllProviders(getUser());
CombinedProviderInfo matchedProvider = null;
for (CombinedProviderInfo cpi : allProviders) {
if (cpi.getApplicationInfo().packageName.equals(key)) {

View File

@@ -92,12 +92,14 @@ public class DefaultCombinedPreferenceController extends DefaultAppPreferenceCon
@Override
public void updateState(@NonNull Preference preference) {
final CombinedProviderInfo topProvider = getTopProvider();
final int userId = getUser();
if (topProvider != null && mContext != null) {
updatePreferenceForProvider(
preference,
topProvider.getAppName(mContext),
topProvider.getSettingsSubtitle(),
topProvider.getAppIcon(mContext, getUser()),
topProvider.getAppIcon(mContext, userId),
topProvider.getPackageName(),
topProvider.getSettingsActivity());
} else {
@@ -149,7 +151,17 @@ public class DefaultCombinedPreferenceController extends DefaultAppPreferenceCon
}
private @Nullable CombinedProviderInfo getTopProvider() {
return CombinedProviderInfo.getTopProvider(getAllProviders(getUser()));
final int userId = getUser();
final @Nullable CombinedProviderInfo topProvider =
CombinedProviderInfo.getTopProvider(getAllProviders(userId));
// Apply device admin restrictions to top provider.
if (topProvider != null
&& topProvider.getDeviceAdminRestrictions(mContext, userId) != null) {
return null;
}
return topProvider;
}
@Override