Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 564fcb90 authored by tmfang's avatar tmfang
Browse files

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
parent 102d43b5
Loading
Loading
Loading
Loading
+13 −10
Original line number Diff line number Diff line
@@ -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;
    }
}
+2 −3
Original line number Diff line number Diff line
@@ -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);