Merge "Update all preferences when the account preference updates UI" into tm-qpr-dev

This commit is contained in:
TreeHugger Robot
2022-07-20 02:22:44 +00:00
committed by Android (Google) Code Review
8 changed files with 47 additions and 14 deletions

View File

@@ -26,7 +26,6 @@ import android.os.UserHandle;
import android.os.UserManager; import android.os.UserManager;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.applications.autofill.PasswordsPreferenceController; import com.android.settings.applications.autofill.PasswordsPreferenceController;
import com.android.settings.applications.defaultapps.DefaultAutofillPreferenceController; import com.android.settings.applications.defaultapps.DefaultAutofillPreferenceController;
import com.android.settings.applications.defaultapps.DefaultWorkAutofillPreferenceController; import com.android.settings.applications.defaultapps.DefaultWorkAutofillPreferenceController;
@@ -96,7 +95,7 @@ public class AccountDashboardFragment extends DashboardFragment {
} }
private static void buildAccountPreferenceControllers( private static void buildAccountPreferenceControllers(
Context context, SettingsPreferenceFragment parent, String[] authorities, Context context, DashboardFragment parent, String[] authorities,
List<AbstractPreferenceController> controllers) { List<AbstractPreferenceController> controllers) {
final AccountPreferenceController accountPrefController = final AccountPreferenceController accountPrefController =
new AccountPreferenceController(context, parent, authorities, new AccountPreferenceController(context, parent, authorities,

View File

@@ -24,7 +24,6 @@ import android.app.settings.SettingsEnums;
import android.content.Context; import android.content.Context;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.applications.autofill.PasswordsPreferenceController; import com.android.settings.applications.autofill.PasswordsPreferenceController;
import com.android.settings.dashboard.DashboardFragment; import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.dashboard.profileselector.ProfileSelectFragment; import com.android.settings.dashboard.profileselector.ProfileSelectFragment;
@@ -78,7 +77,7 @@ public class AccountPersonalDashboardFragment extends DashboardFragment {
} }
private static void buildAccountPreferenceControllers( private static void buildAccountPreferenceControllers(
Context context, SettingsPreferenceFragment parent, String[] authorities, Context context, DashboardFragment parent, String[] authorities,
List<AbstractPreferenceController> controllers) { List<AbstractPreferenceController> controllers) {
final AccountPreferenceController accountPrefController = final AccountPreferenceController accountPrefController =
new AccountPreferenceController(context, parent, authorities, new AccountPreferenceController(context, parent, authorities,

View File

@@ -58,10 +58,10 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.AccessiblePreferenceCategory; import com.android.settings.AccessiblePreferenceCategory;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.core.SubSettingLauncher; import com.android.settings.core.SubSettingLauncher;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.dashboard.profileselector.ProfileSelectFragment; import com.android.settings.dashboard.profileselector.ProfileSelectFragment;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.RestrictedPreference; import com.android.settingslib.RestrictedPreference;
@@ -101,7 +101,7 @@ public class AccountPreferenceController extends AbstractPreferenceController
private Preference mProfileNotAvailablePreference; private Preference mProfileNotAvailablePreference;
private String[] mAuthorities; private String[] mAuthorities;
private int mAuthoritiesCount = 0; private int mAuthoritiesCount = 0;
private SettingsPreferenceFragment mFragment; private DashboardFragment mFragment;
private int mAccountProfileOrder = ORDER_ACCOUNT_PROFILES; private int mAccountProfileOrder = ORDER_ACCOUNT_PROFILES;
private AccountRestrictionHelper mHelper; private AccountRestrictionHelper mHelper;
private MetricsFeatureProvider mMetricsFeatureProvider; private MetricsFeatureProvider mMetricsFeatureProvider;
@@ -145,13 +145,13 @@ public class AccountPreferenceController extends AbstractPreferenceController
public ArrayMap<String, AccountTypePreference> accountPreferences = new ArrayMap<>(); public ArrayMap<String, AccountTypePreference> accountPreferences = new ArrayMap<>();
} }
public AccountPreferenceController(Context context, SettingsPreferenceFragment parent, public AccountPreferenceController(Context context, DashboardFragment parent,
String[] authorities, @ProfileSelectFragment.ProfileType int type) { String[] authorities, @ProfileSelectFragment.ProfileType int type) {
this(context, parent, authorities, new AccountRestrictionHelper(context), type); this(context, parent, authorities, new AccountRestrictionHelper(context), type);
} }
@VisibleForTesting @VisibleForTesting
AccountPreferenceController(Context context, SettingsPreferenceFragment parent, AccountPreferenceController(Context context, DashboardFragment parent,
String[] authorities, AccountRestrictionHelper helper, String[] authorities, AccountRestrictionHelper helper,
@ProfileSelectFragment.ProfileType int type) { @ProfileSelectFragment.ProfileType int type) {
super(context); super(context);
@@ -314,6 +314,9 @@ public class AccountPreferenceController extends AbstractPreferenceController
for (int i = 0; i < profilesCount; i++) { for (int i = 0; i < profilesCount; i++) {
updateAccountTypes(mProfiles.valueAt(i)); updateAccountTypes(mProfiles.valueAt(i));
} }
// Refresh for the auto-sync preferences
mFragment.forceUpdatePreferences();
} }
private void updateProfileUi(final UserInfo userInfo) { private void updateProfileUi(final UserInfo userInfo) {
@@ -409,7 +412,6 @@ public class AccountPreferenceController extends AbstractPreferenceController
return preference; return preference;
} }
private Preference newManagedProfileSettings() { private Preference newManagedProfileSettings() {
Preference preference = new Preference(mFragment.getPreferenceManager().getContext()); Preference preference = new Preference(mFragment.getPreferenceManager().getContext());
preference.setKey(PREF_KEY_WORK_PROFILE_SETTING); preference.setKey(PREF_KEY_WORK_PROFILE_SETTING);

View File

@@ -24,7 +24,6 @@ import android.app.settings.SettingsEnums;
import android.content.Context; import android.content.Context;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.applications.autofill.PasswordsPreferenceController; import com.android.settings.applications.autofill.PasswordsPreferenceController;
import com.android.settings.dashboard.DashboardFragment; import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.dashboard.profileselector.ProfileSelectFragment; import com.android.settings.dashboard.profileselector.ProfileSelectFragment;
@@ -78,7 +77,7 @@ public class AccountWorkProfileDashboardFragment extends DashboardFragment {
} }
private static void buildAccountPreferenceControllers( private static void buildAccountPreferenceControllers(
Context context, SettingsPreferenceFragment parent, String[] authorities, Context context, DashboardFragment parent, String[] authorities,
List<AbstractPreferenceController> controllers) { List<AbstractPreferenceController> controllers) {
final AccountPreferenceController accountPrefController = final AccountPreferenceController accountPrefController =
new AccountPreferenceController(context, parent, authorities, new AccountPreferenceController(context, parent, authorities,

View File

@@ -415,6 +415,30 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
updatePreferenceVisibility(mPreferenceControllers); updatePreferenceVisibility(mPreferenceControllers);
} }
/**
* Force update all the preferences in this fragment.
*/
public void forceUpdatePreferences() {
final PreferenceScreen screen = getPreferenceScreen();
if (screen == null || mPreferenceControllers == null) {
return;
}
for (List<AbstractPreferenceController> controllerList : mPreferenceControllers.values()) {
for (AbstractPreferenceController controller : controllerList) {
final String key = controller.getPreferenceKey();
final Preference preference = findPreference(key);
if (preference == null) {
continue;
}
final boolean available = controller.isAvailable();
if (available) {
controller.updateState(preference);
}
preference.setVisible(available);
}
}
}
@VisibleForTesting @VisibleForTesting
void updatePreferenceVisibility( void updatePreferenceVisibility(
Map<Class, List<AbstractPreferenceController>> preferenceControllers) { Map<Class, List<AbstractPreferenceController>> preferenceControllers) {

View File

@@ -22,7 +22,8 @@ import androidx.preference.PreferenceFragmentCompat;
import com.android.settings.Utils; import com.android.settings.Utils;
public class AutoSyncWorkDataPreferenceController extends AutoSyncPersonalDataPreferenceController { /** An account sync data preference controller for work */
public class AutoSyncWorkDataPreferenceController extends AutoSyncDataPreferenceController {
private static final String KEY_AUTO_SYNC_WORK_ACCOUNT = "auto_sync_work_account_data"; private static final String KEY_AUTO_SYNC_WORK_ACCOUNT = "auto_sync_work_account_data";
@@ -38,6 +39,7 @@ public class AutoSyncWorkDataPreferenceController extends AutoSyncPersonalDataPr
@Override @Override
public boolean isAvailable() { public boolean isAvailable() {
mUserHandle = Utils.getManagedProfileWithDisabled(mUserManager);
return mUserHandle != null && !mUserManager.isManagedProfile() && !mUserManager.isLinkedUser() return mUserHandle != null && !mUserManager.isManagedProfile() && !mUserManager.isLinkedUser()
&& mUserManager.getProfiles(UserHandle.myUserId()).size() > 1; && mUserManager.getProfiles(UserHandle.myUserId()).size() > 1;
} }

View File

@@ -45,7 +45,7 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.AccessiblePreferenceCategory; import com.android.settings.AccessiblePreferenceCategory;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment; import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.dashboard.profileselector.ProfileSelectFragment; import com.android.settings.dashboard.profileselector.ProfileSelectFragment;
import com.android.settings.testutils.shadow.ShadowAccountManager; import com.android.settings.testutils.shadow.ShadowAccountManager;
import com.android.settings.testutils.shadow.ShadowContentResolver; import com.android.settings.testutils.shadow.ShadowContentResolver;
@@ -77,7 +77,7 @@ public class AccountPreferenceControllerTest {
@Mock(answer = RETURNS_DEEP_STUBS) @Mock(answer = RETURNS_DEEP_STUBS)
private UserManager mUserManager; private UserManager mUserManager;
@Mock(answer = RETURNS_DEEP_STUBS) @Mock(answer = RETURNS_DEEP_STUBS)
private SettingsPreferenceFragment mFragment; private DashboardFragment mFragment;
@Mock(answer = RETURNS_DEEP_STUBS) @Mock(answer = RETURNS_DEEP_STUBS)
private AccountManager mAccountManager; private AccountManager mAccountManager;
@Mock(answer = RETURNS_DEEP_STUBS) @Mock(answer = RETURNS_DEEP_STUBS)

View File

@@ -297,6 +297,14 @@ public class DashboardFragmentTest {
mTestFragment.updatePreferenceVisibility(prefControllers); mTestFragment.updatePreferenceVisibility(prefControllers);
} }
@Test
public void forceUpdatePreferences_prefKeyNull_shouldNotCrash() {
mTestFragment.addPreferenceController(new TestPreferenceController(mContext));
// Should not crash
mTestFragment.forceUpdatePreferences();
}
@Test @Test
public void checkUiBlocker_noUiBlocker_controllerIsNull() { public void checkUiBlocker_noUiBlocker_controllerIsNull() {
mTestFragment.mBlockerController = null; mTestFragment.mBlockerController = null;