diff --git a/src/com/android/settings/accounts/AccountDetailDashboardFragment.java b/src/com/android/settings/accounts/AccountDetailDashboardFragment.java index dd34a0f5cda..3d853fe41a0 100644 --- a/src/com/android/settings/accounts/AccountDetailDashboardFragment.java +++ b/src/com/android/settings/accounts/AccountDetailDashboardFragment.java @@ -114,7 +114,7 @@ public class AccountDetailDashboardFragment extends DashboardFragment { mRemoveAccountController = new RemoveAccountPreferenceController(context, this); controllers.add(mRemoveAccountController); controllers.add(new AccountHeaderPreferenceController( - context, getLifecycle(), getActivity(), this, getArguments())); + context, getLifecycle(), getActivity(), this /* host */, getArguments())); return controllers; } diff --git a/src/com/android/settings/accounts/AccountHeaderPreferenceController.java b/src/com/android/settings/accounts/AccountHeaderPreferenceController.java index d0ce58d9f5c..5cbd1b0e8d9 100644 --- a/src/com/android/settings/accounts/AccountHeaderPreferenceController.java +++ b/src/com/android/settings/accounts/AccountHeaderPreferenceController.java @@ -16,6 +16,9 @@ package com.android.settings.accounts; +import static com.android.settings.accounts.AccountDetailDashboardFragment.KEY_ACCOUNT; +import static com.android.settings.accounts.AccountDetailDashboardFragment.KEY_USER_HANDLE; + import android.accounts.Account; import android.app.Activity; import android.content.Context; @@ -30,11 +33,11 @@ import com.android.settings.core.PreferenceController; import com.android.settings.widget.EntityHeaderController; import com.android.settingslib.accounts.AuthenticatorHelper; import com.android.settingslib.core.lifecycle.Lifecycle; +import com.android.settingslib.core.lifecycle.LifecycleObserver; +import com.android.settingslib.core.lifecycle.events.OnResume; -import static com.android.settings.accounts.AccountDetailDashboardFragment.KEY_ACCOUNT; -import static com.android.settings.accounts.AccountDetailDashboardFragment.KEY_USER_HANDLE; - -public class AccountHeaderPreferenceController extends PreferenceController { +public class AccountHeaderPreferenceController extends PreferenceController + implements LifecycleObserver, OnResume { private static final String KEY_ACCOUNT_HEADER = "account_header"; @@ -42,14 +45,14 @@ public class AccountHeaderPreferenceController extends PreferenceController { private final PreferenceFragment mHost; private final Account mAccount; private final UserHandle mUserHandle; - private final Lifecycle mLifecycle; + + private LayoutPreference mHeaderPreference; public AccountHeaderPreferenceController(Context context, Lifecycle lifecycle, Activity activity, PreferenceFragment host, Bundle args) { super(context); mActivity = activity; mHost = host; - mLifecycle = lifecycle; if (args != null && args.containsKey(KEY_ACCOUNT)) { mAccount = args.getParcelable(KEY_ACCOUNT); } else { @@ -61,6 +64,9 @@ public class AccountHeaderPreferenceController extends PreferenceController { } else { mUserHandle = null; } + if (lifecycle != null) { + lifecycle.addObserver(this); + } } @Override @@ -76,14 +82,15 @@ public class AccountHeaderPreferenceController extends PreferenceController { @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); - final LayoutPreference headerPreference = - (LayoutPreference) screen.findPreference(KEY_ACCOUNT_HEADER); + mHeaderPreference = (LayoutPreference) screen.findPreference(KEY_ACCOUNT_HEADER); + } + @Override + public void onResume() { final AuthenticatorHelper helper = new AuthenticatorHelper(mContext, mUserHandle, null); EntityHeaderController - .newInstance(mActivity, mHost, headerPreference.findViewById(R.id.entity_header)) - .setRecyclerView(mHost.getListView(), mLifecycle) + .newInstance(mActivity, mHost, mHeaderPreference.findViewById(R.id.entity_header)) .setLabel(mAccount.name) .setIcon(helper.getDrawableForType(mContext, mAccount.type)) .done(mActivity, true /* rebindButtons */); diff --git a/tests/robotests/src/com/android/settings/accounts/AccountHeaderPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accounts/AccountHeaderPreferenceControllerTest.java index 008c0bcc2e7..4dce0c69a5f 100644 --- a/tests/robotests/src/com/android/settings/accounts/AccountHeaderPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/accounts/AccountHeaderPreferenceControllerTest.java @@ -16,6 +16,10 @@ package com.android.settings.accounts; +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.when; + import android.accounts.Account; import android.app.Activity; import android.content.Context; @@ -26,10 +30,10 @@ import android.support.v7.preference.PreferenceScreen; import android.widget.TextView; import com.android.settings.R; -import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; import com.android.settings.applications.LayoutPreference; import com.android.settings.testutils.FakeFeatureFactory; +import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settingslib.accounts.AuthenticatorHelper; import com.android.settingslib.core.lifecycle.Lifecycle; @@ -44,10 +48,6 @@ import org.robolectric.annotation.Config; import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; -import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Matchers.anyString; -import static org.mockito.Mockito.when; - @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) @@ -84,19 +84,21 @@ public class AccountHeaderPreferenceControllerTest { @Test @Config(shadows = ShadowAuthenticatorHelper.class) - public void displayPreference_shouldDisplayAccountInEntityHeader() { + public void onResume_shouldDisplayAccountInEntityHeader() { + final Lifecycle lifecycle = new Lifecycle(); final Account account = new Account("name1@abc.com", "com.abc"); Bundle args = new Bundle(); args.putParcelable(AccountDetailDashboardFragment.KEY_ACCOUNT, account); args.putParcelable(AccountDetailDashboardFragment.KEY_USER_HANDLE, UserHandle.CURRENT); mController = new AccountHeaderPreferenceController(RuntimeEnvironment.application, - new Lifecycle(), mActivity, mFragment, args); + lifecycle, mActivity, mFragment, args); assertThat(mController.isAvailable()).isTrue(); when(mScreen.findPreference(anyString())).thenReturn(mHeaderPreference); mController.displayPreference(mScreen); + lifecycle.onResume(); final CharSequence label = ((TextView) mHeaderPreference.findViewById(R.id.entity_header_title)).getText();