From 50eb81f1141deee2eccb0cd9e6efc16ab432bc51 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Wed, 2 Aug 2017 10:47:37 -0700 Subject: [PATCH] Style action bar during onResume instead of onCreate Change-Id: Ib57bf128b644737b5a34238ec85ca6d740543c5f Fix: 64284689 Bug: 64297479 Test: robotests --- .../AccountDetailDashboardFragment.java | 2 +- .../AccountHeaderPreferenceController.java | 26 ++++++++++++------- ...AccountHeaderPreferenceControllerTest.java | 16 +++++++----- 3 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/com/android/settings/accounts/AccountDetailDashboardFragment.java b/src/com/android/settings/accounts/AccountDetailDashboardFragment.java index b1455bf7eb3..53664f52138 100644 --- a/src/com/android/settings/accounts/AccountDetailDashboardFragment.java +++ b/src/com/android/settings/accounts/AccountDetailDashboardFragment.java @@ -116,7 +116,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 eda75b242b9..e2902a2c4d5 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; @@ -31,12 +34,11 @@ import com.android.settings.widget.EntityHeaderController; import com.android.settingslib.accounts.AuthenticatorHelper; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.lifecycle.Lifecycle; - -import static com.android.settings.accounts.AccountDetailDashboardFragment.KEY_ACCOUNT; -import static com.android.settings.accounts.AccountDetailDashboardFragment.KEY_USER_HANDLE; +import com.android.settingslib.core.lifecycle.LifecycleObserver; +import com.android.settingslib.core.lifecycle.events.OnResume; public class AccountHeaderPreferenceController extends AbstractPreferenceController - implements PreferenceControllerMixin { + implements PreferenceControllerMixin, LifecycleObserver, OnResume { private static final String KEY_ACCOUNT_HEADER = "account_header"; @@ -44,14 +46,14 @@ public class AccountHeaderPreferenceController extends AbstractPreferenceControl 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 { @@ -63,6 +65,9 @@ public class AccountHeaderPreferenceController extends AbstractPreferenceControl } else { mUserHandle = null; } + if (lifecycle != null) { + lifecycle.addObserver(this); + } } @Override @@ -78,14 +83,15 @@ public class AccountHeaderPreferenceController extends AbstractPreferenceControl @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();