Finish Activity when account is changed

Fixes: 146230862
Test: remove work profile account
Change-Id: I7c7c788587d9f17b629358be56befa76b0916e99
This commit is contained in:
Raff Tsai
2019-12-16 12:30:05 +08:00
parent 8e25a3a658
commit 5c075bad44

View File

@@ -90,7 +90,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 mParent; private SettingsPreferenceFragment 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;
@@ -146,7 +146,7 @@ public class AccountPreferenceController extends AbstractPreferenceController
super(context); super(context);
mUm = (UserManager) context.getSystemService(Context.USER_SERVICE); mUm = (UserManager) context.getSystemService(Context.USER_SERVICE);
mAuthorities = authorities; mAuthorities = authorities;
mParent = parent; mFragment = parent;
if (mAuthorities != null) { if (mAuthorities != null) {
mAuthoritiesCount = mAuthorities.length; mAuthoritiesCount = mAuthorities.length;
} }
@@ -238,7 +238,7 @@ public class AccountPreferenceController extends AbstractPreferenceController
} }
if (preference == profileData.removeWorkProfilePreference) { if (preference == profileData.removeWorkProfilePreference) {
final int userId = profileData.userInfo.id; final int userId = profileData.userInfo.id;
RemoveUserFragment.newInstance(userId).show(mParent.getFragmentManager(), RemoveUserFragment.newInstance(userId).show(mFragment.getFragmentManager(),
"removeUser"); "removeUser");
return true; return true;
} }
@@ -246,7 +246,7 @@ public class AccountPreferenceController extends AbstractPreferenceController
Bundle arguments = new Bundle(); Bundle arguments = new Bundle();
arguments.putParcelable(Intent.EXTRA_USER, profileData.userInfo.getUserHandle()); arguments.putParcelable(Intent.EXTRA_USER, profileData.userInfo.getUserHandle());
new SubSettingLauncher(mContext) new SubSettingLauncher(mContext)
.setSourceMetricsCategory(mParent.getMetricsCategory()) .setSourceMetricsCategory(mFragment.getMetricsCategory())
.setDestination(ManagedProfileSettings.class.getName()) .setDestination(ManagedProfileSettings.class.getName())
.setTitleRes(R.string.managed_profile_settings_title) .setTitleRes(R.string.managed_profile_settings_title)
.setArguments(arguments) .setArguments(arguments)
@@ -297,7 +297,7 @@ public class AccountPreferenceController extends AbstractPreferenceController
} }
private void updateProfileUi(final UserInfo userInfo) { private void updateProfileUi(final UserInfo userInfo) {
if (mParent.getPreferenceManager() == null) { if (mFragment.getPreferenceManager() == null) {
return; return;
} }
final ProfileData data = mProfiles.get(userInfo.id); final ProfileData data = mProfiles.get(userInfo.id);
@@ -316,7 +316,7 @@ public class AccountPreferenceController extends AbstractPreferenceController
profileData.userInfo = userInfo; profileData.userInfo = userInfo;
AccessiblePreferenceCategory preferenceGroup = AccessiblePreferenceCategory preferenceGroup =
mHelper.createAccessiblePreferenceCategory( mHelper.createAccessiblePreferenceCategory(
mParent.getPreferenceManager().getContext()); mFragment.getPreferenceManager().getContext());
preferenceGroup.setOrder(mAccountProfileOrder++); preferenceGroup.setOrder(mAccountProfileOrder++);
if (isSingleProfile()) { if (isSingleProfile()) {
preferenceGroup.setTitle(context.getString(R.string.account_for_section_header, preferenceGroup.setTitle(context.getString(R.string.account_for_section_header,
@@ -342,7 +342,7 @@ public class AccountPreferenceController extends AbstractPreferenceController
mContext.getString(R.string.accessibility_category_personal)); mContext.getString(R.string.accessibility_category_personal));
} }
} }
final PreferenceScreen screen = mParent.getPreferenceScreen(); final PreferenceScreen screen = mFragment.getPreferenceScreen();
if (screen != null) { if (screen != null) {
screen.addPreference(preferenceGroup); screen.addPreference(preferenceGroup);
} }
@@ -359,7 +359,7 @@ public class AccountPreferenceController extends AbstractPreferenceController
private RestrictedPreference newAddAccountPreference() { private RestrictedPreference newAddAccountPreference() {
RestrictedPreference preference = RestrictedPreference preference =
new RestrictedPreference(mParent.getPreferenceManager().getContext()); new RestrictedPreference(mFragment.getPreferenceManager().getContext());
preference.setTitle(R.string.add_account_label); preference.setTitle(R.string.add_account_label);
preference.setIcon(R.drawable.ic_add_24dp); preference.setIcon(R.drawable.ic_add_24dp);
preference.setOnPreferenceClickListener(this); preference.setOnPreferenceClickListener(this);
@@ -369,7 +369,7 @@ public class AccountPreferenceController extends AbstractPreferenceController
private RestrictedPreference newRemoveWorkProfilePreference() { private RestrictedPreference newRemoveWorkProfilePreference() {
RestrictedPreference preference = new RestrictedPreference( RestrictedPreference preference = new RestrictedPreference(
mParent.getPreferenceManager().getContext()); mFragment.getPreferenceManager().getContext());
preference.setKey(PREF_KEY_REMOVE_PROFILE); preference.setKey(PREF_KEY_REMOVE_PROFILE);
preference.setTitle(R.string.remove_managed_profile_label); preference.setTitle(R.string.remove_managed_profile_label);
preference.setIcon(R.drawable.ic_delete); preference.setIcon(R.drawable.ic_delete);
@@ -380,7 +380,7 @@ public class AccountPreferenceController extends AbstractPreferenceController
private Preference newManagedProfileSettings() { private Preference newManagedProfileSettings() {
Preference preference = new Preference(mParent.getPreferenceManager().getContext()); Preference preference = new Preference(mFragment.getPreferenceManager().getContext());
preference.setKey(PREF_KEY_WORK_PROFILE_SETTING); preference.setKey(PREF_KEY_WORK_PROFILE_SETTING);
preference.setTitle(R.string.managed_profile_settings_title); preference.setTitle(R.string.managed_profile_settings_title);
preference.setIcon(R.drawable.ic_settings_24dp); preference.setIcon(R.drawable.ic_settings_24dp);
@@ -400,7 +400,7 @@ public class AccountPreferenceController extends AbstractPreferenceController
} }
void cleanUpPreferences() { void cleanUpPreferences() {
PreferenceScreen screen = mParent.getPreferenceScreen(); PreferenceScreen screen = mFragment.getPreferenceScreen();
if (screen == null) { if (screen == null) {
return; return;
} }
@@ -435,7 +435,7 @@ public class AccountPreferenceController extends AbstractPreferenceController
} }
private void updateAccountTypes(ProfileData profileData) { private void updateAccountTypes(ProfileData profileData) {
if (mParent.getPreferenceManager() == null if (mFragment.getPreferenceManager() == null
|| profileData.preferenceGroup.getPreferenceManager() == null) { || profileData.preferenceGroup.getPreferenceManager() == null) {
// This could happen if activity is finishing // This could happen if activity is finishing
return; return;
@@ -469,7 +469,7 @@ public class AccountPreferenceController extends AbstractPreferenceController
// Put a label instead of the accounts list // Put a label instead of the accounts list
if (mProfileNotAvailablePreference == null) { if (mProfileNotAvailablePreference == null) {
mProfileNotAvailablePreference = mProfileNotAvailablePreference =
new Preference(mParent.getPreferenceManager().getContext()); new Preference(mFragment.getPreferenceManager().getContext());
} }
mProfileNotAvailablePreference.setEnabled(false); mProfileNotAvailablePreference.setEnabled(false);
mProfileNotAvailablePreference.setIcon(R.drawable.empty_icon); mProfileNotAvailablePreference.setIcon(R.drawable.empty_icon);
@@ -508,7 +508,7 @@ public class AccountPreferenceController extends AbstractPreferenceController
final Account[] accounts = AccountManager.get(mContext) final Account[] accounts = AccountManager.get(mContext)
.getAccountsByTypeAsUser(accountType, userHandle); .getAccountsByTypeAsUser(accountType, userHandle);
final Drawable icon = helper.getDrawableForType(mContext, accountType); final Drawable icon = helper.getDrawableForType(mContext, accountType);
final Context prefContext = mParent.getPreferenceManager().getContext(); final Context prefContext = mFragment.getPreferenceManager().getContext();
// Add a preference row for each individual account // Add a preference row for each individual account
for (Account account : accounts) { for (Account account : accounts) {
@@ -536,7 +536,7 @@ public class AccountPreferenceController extends AbstractPreferenceController
titleResId); titleResId);
fragmentArguments.putParcelable(EXTRA_USER, userHandle); fragmentArguments.putParcelable(EXTRA_USER, userHandle);
accountTypePreferences.add(new AccountTypePreference( accountTypePreferences.add(new AccountTypePreference(
prefContext, mMetricsFeatureProvider.getMetricsCategory(mParent), prefContext, mMetricsFeatureProvider.getMetricsCategory(mFragment),
account, titleResPackageName, titleResId, label, account, titleResPackageName, titleResId, label,
AccountDetailDashboardFragment.class.getName(), fragmentArguments, icon)); AccountDetailDashboardFragment.class.getName(), fragmentArguments, icon));
} }
@@ -587,11 +587,15 @@ public class AccountPreferenceController extends AbstractPreferenceController
Log.v(TAG, "Received broadcast: " + action); Log.v(TAG, "Received broadcast: " + action);
if (action.equals(Intent.ACTION_MANAGED_PROFILE_REMOVED) if (action.equals(Intent.ACTION_MANAGED_PROFILE_REMOVED)
|| action.equals(Intent.ACTION_MANAGED_PROFILE_ADDED)) { || action.equals(Intent.ACTION_MANAGED_PROFILE_ADDED)) {
if (mFragment instanceof AccountWorkProfileDashboardFragment) {
mFragment.getActivity().finish();
} else {
// Clean old state // Clean old state
stopListeningToAccountUpdates(); stopListeningToAccountUpdates();
// Build new state // Build new state
updateUi(); updateUi();
listenToAccountUpdates(); listenToAccountUpdates();
}
return; return;
} }
Log.w(TAG, "Cannot handle received broadcast: " + intent.getAction()); Log.w(TAG, "Cannot handle received broadcast: " + intent.getAction());