From 564fcb90ab6c27aaa125de95a442254318342e30 Mon Sep 17 00:00:00 2001 From: tmfang Date: Tue, 11 Jun 2019 13:56:56 +0800 Subject: [PATCH] Fix overlapping problem on notification screen If we didn't set view and lifecycle for EntityHeaderController, it only sets "z-order" as 0 for action bar. So, user sees overlapped problem while user is scrolling view. For now, we set view and lifecycle as parameter for EntityHeaderController, then EntityHeaderController can change "z-order" while scrolling view. Test: visual, robotest Fixes: 132819126 Change-Id: Ieb01b26e4d6ca4d82f72371620938665de8149a0 --- .../HeaderPreferenceController.java | 23 +++++++++++-------- .../HeaderPreferenceControllerTest.java | 5 ++-- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/com/android/settings/notification/HeaderPreferenceController.java b/src/com/android/settings/notification/HeaderPreferenceController.java index d94211384d7..be5f45eacca 100644 --- a/src/com/android/settings/notification/HeaderPreferenceController.java +++ b/src/com/android/settings/notification/HeaderPreferenceController.java @@ -25,13 +25,14 @@ import android.text.SpannableStringBuilder; import android.text.TextUtils; import android.view.View; +import androidx.annotation.VisibleForTesting; import androidx.lifecycle.LifecycleObserver; import androidx.lifecycle.OnLifecycleEvent; import androidx.preference.Preference; -import androidx.preference.PreferenceFragmentCompat; import com.android.settings.R; import com.android.settings.core.PreferenceControllerMixin; +import com.android.settings.dashboard.DashboardFragment; import com.android.settings.widget.EntityHeaderController; import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.widget.LayoutPreference; @@ -39,11 +40,11 @@ import com.android.settingslib.widget.LayoutPreference; public class HeaderPreferenceController extends NotificationPreferenceController implements PreferenceControllerMixin, LifecycleObserver { - private final PreferenceFragmentCompat mFragment; + private final DashboardFragment mFragment; private EntityHeaderController mHeaderController; private boolean mStarted = false; - public HeaderPreferenceController(Context context, PreferenceFragmentCompat fragment) { + public HeaderPreferenceController(Context context, DashboardFragment fragment) { super(context, null); mFragment = fragment; } @@ -83,18 +84,12 @@ public class HeaderPreferenceController extends NotificationPreferenceController .setButtonActions(EntityHeaderController.ActionType.ACTION_NOTIF_PREFERENCE, EntityHeaderController.ActionType.ACTION_NONE) .setHasAppInfoLink(true) + .setRecyclerView(mFragment.getListView(), mFragment.getSettingsLifecycle()) .done(activity, mContext); pref.findViewById(R.id.entity_header).setVisibility(View.VISIBLE); } } - CharSequence getLabel() { - return (mChannel != null && !isDefaultChannel()) ? mChannel.getName() - : mChannelGroup != null - ? mChannelGroup.getName() - : mAppRow.label; - } - @Override public CharSequence getSummary() { if (mChannel != null && !isDefaultChannel()) { @@ -124,4 +119,12 @@ public class HeaderPreferenceController extends NotificationPreferenceController mHeaderController.styleActionBar(mFragment.getActivity()); } } + + @VisibleForTesting + CharSequence getLabel() { + return (mChannel != null && !isDefaultChannel()) ? mChannel.getName() + : mChannelGroup != null + ? mChannelGroup.getName() + : mAppRow.label; + } } diff --git a/tests/robotests/src/com/android/settings/notification/HeaderPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/HeaderPreferenceControllerTest.java index de84f0755c3..7f6ecaefc67 100644 --- a/tests/robotests/src/com/android/settings/notification/HeaderPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/HeaderPreferenceControllerTest.java @@ -21,7 +21,6 @@ import static android.app.NotificationManager.IMPORTANCE_NONE; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; - import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; @@ -35,8 +34,8 @@ import android.os.UserManager; import android.view.View; import androidx.fragment.app.FragmentActivity; -import androidx.preference.PreferenceFragmentCompat; +import com.android.settings.dashboard.DashboardFragment; import com.android.settingslib.widget.LayoutPreference; import org.junit.Before; @@ -70,7 +69,7 @@ public class HeaderPreferenceControllerTest { shadowApplication.setSystemService(Context.NOTIFICATION_SERVICE, mNm); shadowApplication.setSystemService(Context.USER_SERVICE, mUm); mContext = RuntimeEnvironment.application; - PreferenceFragmentCompat fragment = mock(PreferenceFragmentCompat.class); + DashboardFragment fragment = mock(DashboardFragment.class); when(fragment.getContext()).thenReturn(mContext); FragmentActivity activity = mock(FragmentActivity.class); when(activity.getApplicationContext()).thenReturn(mContext);