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.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
|
||||||
@@ -125,12 +125,12 @@ public class DefaultCombinedPicker extends DefaultAppPickerFragment {
|
|||||||
protected CharSequence getPositiveButtonText() {
|
protected CharSequence getPositiveButtonText() {
|
||||||
final Bundle bundle = getArguments();
|
final Bundle bundle = getArguments();
|
||||||
if (TextUtils.isEmpty(bundle.getString(EXTRA_KEY))) {
|
if (TextUtils.isEmpty(bundle.getString(EXTRA_KEY))) {
|
||||||
return getContext().getString(
|
return getContext()
|
||||||
R.string.credman_confirmation_turn_off_positive_button);
|
.getString(R.string.credman_confirmation_turn_off_positive_button);
|
||||||
}
|
}
|
||||||
|
|
||||||
return getContext().getString(
|
return getContext()
|
||||||
R.string.credman_confirmation_change_provider_positive_button);
|
.getString(R.string.credman_confirmation_change_provider_positive_button);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -259,21 +259,21 @@ public class DefaultCombinedPicker extends DefaultAppPickerFragment {
|
|||||||
return mCredentialManager;
|
return mCredentialManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<CombinedProviderInfo> getAllProviders() {
|
private List<CombinedProviderInfo> getAllProviders(int userId) {
|
||||||
final Context context = getContext();
|
final Context context = getContext();
|
||||||
final List<AutofillServiceInfo> autofillProviders =
|
final List<AutofillServiceInfo> autofillProviders =
|
||||||
AutofillServiceInfo.getAvailableServices(context, getUser());
|
AutofillServiceInfo.getAvailableServices(context, userId);
|
||||||
|
|
||||||
final CredentialManager service = getCredentialProviderService();
|
final CredentialManager service = getCredentialProviderService();
|
||||||
final List<CredentialProviderInfo> credManProviders = new ArrayList<>();
|
final List<CredentialProviderInfo> credManProviders = new ArrayList<>();
|
||||||
if (service != null) {
|
if (service != null) {
|
||||||
credManProviders.addAll(
|
credManProviders.addAll(
|
||||||
service.getCredentialProviderServices(
|
service.getCredentialProviderServices(
|
||||||
getUser(),
|
userId,
|
||||||
CredentialManager.PROVIDER_FILTER_USER_PROVIDERS_INCLUDING_HIDDEN));
|
CredentialManager.PROVIDER_FILTER_USER_PROVIDERS_INCLUDING_HIDDEN));
|
||||||
}
|
}
|
||||||
|
|
||||||
final String selectedAutofillProvider = getSelectedAutofillProvider(context, getUser());
|
final String selectedAutofillProvider = getSelectedAutofillProvider(context, userId);
|
||||||
return CombinedProviderInfo.buildMergedList(
|
return CombinedProviderInfo.buildMergedList(
|
||||||
autofillProviders, credManProviders, selectedAutofillProvider);
|
autofillProviders, credManProviders, selectedAutofillProvider);
|
||||||
}
|
}
|
||||||
@@ -285,7 +285,8 @@ public class DefaultCombinedPicker extends DefaultAppPickerFragment {
|
|||||||
|
|
||||||
protected List<DefaultAppInfo> getCandidates() {
|
protected List<DefaultAppInfo> getCandidates() {
|
||||||
final Context context = getContext();
|
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<>();
|
final List<DefaultAppInfo> candidates = new ArrayList<>();
|
||||||
|
|
||||||
for (CombinedProviderInfo cpi : allProviders) {
|
for (CombinedProviderInfo cpi : allProviders) {
|
||||||
@@ -295,10 +296,10 @@ public class DefaultCombinedPicker extends DefaultAppPickerFragment {
|
|||||||
if (brandingService != null) {
|
if (brandingService != null) {
|
||||||
candidates.add(
|
candidates.add(
|
||||||
new CredentialManagerDefaultAppInfo(
|
new CredentialManagerDefaultAppInfo(
|
||||||
context, mPm, getUser(), brandingService, cpi));
|
context, mPm, userId, brandingService, cpi));
|
||||||
} else if (appInfo != null) {
|
} else if (appInfo != null) {
|
||||||
candidates.add(
|
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
|
@Override
|
||||||
protected String getDefaultKey() {
|
protected String getDefaultKey() {
|
||||||
final CombinedProviderInfo topProvider =
|
final int userId = getUser();
|
||||||
CombinedProviderInfo.getTopProvider(getAllProviders());
|
final @Nullable CombinedProviderInfo topProvider =
|
||||||
return topProvider == null ? "" : topProvider.getApplicationInfo().packageName;
|
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
|
@Override
|
||||||
@@ -392,7 +407,7 @@ public class DefaultCombinedPicker extends DefaultAppPickerFragment {
|
|||||||
@Override
|
@Override
|
||||||
protected boolean setDefaultKey(String key) {
|
protected boolean setDefaultKey(String key) {
|
||||||
// Get the list of providers and see if any match the key (package name).
|
// 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;
|
CombinedProviderInfo matchedProvider = null;
|
||||||
for (CombinedProviderInfo cpi : allProviders) {
|
for (CombinedProviderInfo cpi : allProviders) {
|
||||||
if (cpi.getApplicationInfo().packageName.equals(key)) {
|
if (cpi.getApplicationInfo().packageName.equals(key)) {
|
||||||
|
@@ -92,12 +92,14 @@ public class DefaultCombinedPreferenceController extends DefaultAppPreferenceCon
|
|||||||
@Override
|
@Override
|
||||||
public void updateState(@NonNull Preference preference) {
|
public void updateState(@NonNull Preference preference) {
|
||||||
final CombinedProviderInfo topProvider = getTopProvider();
|
final CombinedProviderInfo topProvider = getTopProvider();
|
||||||
|
final int userId = getUser();
|
||||||
|
|
||||||
if (topProvider != null && mContext != null) {
|
if (topProvider != null && mContext != null) {
|
||||||
updatePreferenceForProvider(
|
updatePreferenceForProvider(
|
||||||
preference,
|
preference,
|
||||||
topProvider.getAppName(mContext),
|
topProvider.getAppName(mContext),
|
||||||
topProvider.getSettingsSubtitle(),
|
topProvider.getSettingsSubtitle(),
|
||||||
topProvider.getAppIcon(mContext, getUser()),
|
topProvider.getAppIcon(mContext, userId),
|
||||||
topProvider.getPackageName(),
|
topProvider.getPackageName(),
|
||||||
topProvider.getSettingsActivity());
|
topProvider.getSettingsActivity());
|
||||||
} else {
|
} else {
|
||||||
@@ -149,7 +151,17 @@ public class DefaultCombinedPreferenceController extends DefaultAppPreferenceCon
|
|||||||
}
|
}
|
||||||
|
|
||||||
private @Nullable CombinedProviderInfo getTopProvider() {
|
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
|
@Override
|
||||||
|
Reference in New Issue
Block a user