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

Commit 9ef119c7 authored by Selim Cinek's avatar Selim Cinek
Browse files

Fixed a few issues around notifications and density changes

Because density and font size changes would actually be
delivered by Dependency, the SystemUI could actually get
the onDensityChanged after the onDensityOrFontScaleChanged.
Let's make sure all configuration changes now go through the
same listener.
This also ensures that the caching of the icon offsets is done
correctly, since the statusbar layout may actually be laid out
later then the shelf.

Test: change density from small to large, observe normal layout
Change-Id: I313b5334ccbb57f7929fe03dbd5119396123b137
Fixes: 35678628
parent 1b554393
Loading
Loading
Loading
Loading
+0 −7
Original line number Original line Diff line number Diff line
@@ -42,13 +42,6 @@ public class SystemBars extends SystemUI {
        createStatusBarFromConfig();
        createStatusBarFromConfig();
    }
    }


    @Override
    protected void onConfigurationChanged(Configuration newConfig) {
        if (mStatusBar != null) {
            mStatusBar.onConfigurationChanged(newConfig);
        }
    }

    @Override
    @Override
    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
        if (mStatusBar != null) {
        if (mStatusBar != null) {
+13 −1
Original line number Original line Diff line number Diff line
@@ -41,7 +41,8 @@ import com.android.systemui.statusbar.stack.ViewState;
 * A notification shelf view that is placed inside the notification scroller. It manages the
 * A notification shelf view that is placed inside the notification scroller. It manages the
 * overflow icons that don't fit into the regular list anymore.
 * overflow icons that don't fit into the regular list anymore.
 */
 */
public class NotificationShelf extends ActivatableNotificationView {
public class NotificationShelf extends ActivatableNotificationView implements
        View.OnLayoutChangeListener {


    public static final boolean SHOW_AMBIENT_ICONS = true;
    public static final boolean SHOW_AMBIENT_ICONS = true;
    private static final boolean USE_ANIMATIONS_WHEN_OPENING =
    private static final boolean USE_ANIMATIONS_WHEN_OPENING =
@@ -494,6 +495,10 @@ public class NotificationShelf extends ActivatableNotificationView {
    @Override
    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        super.onLayout(changed, left, top, right, bottom);
        super.onLayout(changed, left, top, right, bottom);
        updateRelativeOffset();
    }

    private void updateRelativeOffset() {
        mCollapsedIcons.getLocationOnScreen(mTmp);
        mCollapsedIcons.getLocationOnScreen(mTmp);
        mRelativeOffset = mTmp[0];
        mRelativeOffset = mTmp[0];
        getLocationOnScreen(mTmp);
        getLocationOnScreen(mTmp);
@@ -560,6 +565,7 @@ public class NotificationShelf extends ActivatableNotificationView {


    public void setCollapsedIcons(NotificationIconContainer collapsedIcons) {
    public void setCollapsedIcons(NotificationIconContainer collapsedIcons) {
        mCollapsedIcons = collapsedIcons;
        mCollapsedIcons = collapsedIcons;
        mCollapsedIcons.addOnLayoutChangeListener(this);
    }
    }


    public void setStatusBarState(int statusBarState) {
    public void setStatusBarState(int statusBarState) {
@@ -595,6 +601,12 @@ public class NotificationShelf extends ActivatableNotificationView {
        }
        }
    }
    }


    @Override
    public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft,
            int oldTop, int oldRight, int oldBottom) {
        updateRelativeOffset();
    }

    private class ShelfState extends ExpandableViewState {
    private class ShelfState extends ExpandableViewState {
        private float openedAmount;
        private float openedAmount;
        private boolean hasItemsInStableShelf;
        private boolean hasItemsInStableShelf;
+8 −4
Original line number Original line Diff line number Diff line
@@ -612,9 +612,11 @@ public class StatusBarIconView extends AnimatedImageView {
    }
    }


    public void setIconAppearAmount(float iconAppearAmount) {
    public void setIconAppearAmount(float iconAppearAmount) {
        if (mIconAppearAmount != iconAppearAmount) {
            mIconAppearAmount = iconAppearAmount;
            mIconAppearAmount = iconAppearAmount;
            invalidate();
            invalidate();
        }
        }
    }


    public float getIconAppearAmount() {
    public float getIconAppearAmount() {
        return mIconAppearAmount;
        return mIconAppearAmount;
@@ -625,9 +627,11 @@ public class StatusBarIconView extends AnimatedImageView {
    }
    }


    public void setDotAppearAmount(float dotAppearAmount) {
    public void setDotAppearAmount(float dotAppearAmount) {
        if (mDotAppearAmount != dotAppearAmount) {
            mDotAppearAmount = dotAppearAmount;
            mDotAppearAmount = dotAppearAmount;
            invalidate();
            invalidate();
        }
        }
    }


    @Override
    @Override
    public void setVisibility(int visibility) {
    public void setVisibility(int visibility) {
+3 −1
Original line number Original line Diff line number Diff line
@@ -79,7 +79,9 @@ public class NotificationIconAreaController implements DarkReceiver {
        for (int i = 0; i < mNotificationIcons.getChildCount(); i++) {
        for (int i = 0; i < mNotificationIcons.getChildCount(); i++) {
            View child = mNotificationIcons.getChildAt(i);
            View child = mNotificationIcons.getChildAt(i);
            child.setLayoutParams(params);
            child.setLayoutParams(params);
            child = mShelfIcons.getChildAt(i);
        }
        for (int i = 0; i < mShelfIcons.getChildCount(); i++) {
            View child = mShelfIcons.getChildAt(i);
            child.setLayoutParams(params);
            child.setLayoutParams(params);
        }
        }
    }
    }
+9 −5
Original line number Original line Diff line number Diff line
@@ -172,7 +172,6 @@ import com.android.systemui.statusbar.ScrimView;
import com.android.systemui.statusbar.SignalClusterView;
import com.android.systemui.statusbar.SignalClusterView;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.notification.InflationException;
import com.android.systemui.statusbar.notification.InflationException;
import com.android.systemui.statusbar.notification.NotificationInflater;
import com.android.systemui.statusbar.notification.VisualStabilityManager;
import com.android.systemui.statusbar.notification.VisualStabilityManager;
import com.android.systemui.statusbar.phone.StatusBarIconController.IconManager;
import com.android.systemui.statusbar.phone.StatusBarIconController.IconManager;
import com.android.systemui.statusbar.phone.UnlockMethodCache.OnUnlockMethodChangedListener;
import com.android.systemui.statusbar.phone.UnlockMethodCache.OnUnlockMethodChangedListener;
@@ -717,7 +716,7 @@ public class StatusBar extends SystemUI implements DemoMode,
    private LogMaker mStatusBarStateLog;
    private LogMaker mStatusBarStateLog;
    private LockscreenGestureLogger mLockscreenGestureLogger = new LockscreenGestureLogger();
    private LockscreenGestureLogger mLockscreenGestureLogger = new LockscreenGestureLogger();
    private NotificationIconAreaController mNotificationIconAreaController;
    private NotificationIconAreaController mNotificationIconAreaController;
    private ConfigurationListener mDensityChangeListener;
    private ConfigurationListener mConfigurationListener;
    private InflationExceptionHandler mInflationExceptionHandler = this::handleInflationException;
    private InflationExceptionHandler mInflationExceptionHandler = this::handleInflationException;


    private void recycleAllVisibilityObjects(ArraySet<NotificationVisibility> array) {
    private void recycleAllVisibilityObjects(ArraySet<NotificationVisibility> array) {
@@ -945,13 +944,18 @@ public class StatusBar extends SystemUI implements DemoMode,


        Dependency.get(ActivityStarterDelegate.class).setActivityStarterImpl(this);
        Dependency.get(ActivityStarterDelegate.class).setActivityStarterImpl(this);


        mDensityChangeListener = new ConfigurationListener() {
        mConfigurationListener = new ConfigurationListener() {
            @Override
            public void onConfigChanged(Configuration newConfig) {
                StatusBar.this.onConfigurationChanged(newConfig);
            }

            @Override
            @Override
            public void onDensityOrFontScaleChanged() {
            public void onDensityOrFontScaleChanged() {
                StatusBar.this.onDensityOrFontScaleChanged();
                StatusBar.this.onDensityOrFontScaleChanged();
            }
            }
        };
        };
        Dependency.get(ConfigurationController.class).addCallback(mDensityChangeListener);
        Dependency.get(ConfigurationController.class).addCallback(mConfigurationListener);
    }
    }


    protected void createIconController() {
    protected void createIconController() {
@@ -3910,7 +3914,7 @@ public class StatusBar extends SystemUI implements DemoMode,
        }
        }
        Dependency.get(ActivityStarterDelegate.class).setActivityStarterImpl(null);
        Dependency.get(ActivityStarterDelegate.class).setActivityStarterImpl(null);
        mDeviceProvisionedController.removeCallback(mUserSetupObserver);
        mDeviceProvisionedController.removeCallback(mUserSetupObserver);
        Dependency.get(ConfigurationController.class).removeCallback(mDensityChangeListener);
        Dependency.get(ConfigurationController.class).removeCallback(mConfigurationListener);
    }
    }


    private boolean mDemoModeAllowed;
    private boolean mDemoModeAllowed;