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:
@@ -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)) {
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user