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

Commit f303d953 authored by Evan Laird's avatar Evan Laird
Browse files

Request layout if visiblity (thus, size) changes

When wifi or mobile icons update state, they sometimes decide to show /
hide themselves or subviews. When this happens, they need to call
requestLayout() so that StatusIconContainer puts them in the right spot.

Also always center the wifi/mobile icons.

Bug: 110286625
Test: enter demo mode, show wifi and lte, hide lte, show lte -> there
should be no overlapping

Change-Id: Iad49783ac119d9994f4378f5b98f1a5b18f80c5d
parent 79e27cd2
Loading
Loading
Loading
Loading
+20 −10
Original line number Diff line number Diff line
@@ -126,20 +126,21 @@ public class StatusBarMobileView extends FrameLayout implements DarkReceiver,
    }

    public void applyMobileState(MobileIconState state) {
        boolean requestLayout = false;
        if (state == null) {
            requestLayout = getVisibility() != View.GONE;
            setVisibility(View.GONE);
            mState = null;
            return;
        }

        if (mState == null) {
        } else if (mState == null) {
            requestLayout = true;
            mState = state.copy();
            initViewState();
            return;
        } else if (!mState.equals(state)) {
            requestLayout = updateState(state.copy());
        }

        if (!mState.equals(state)) {
            updateState(state.copy());
        if (requestLayout) {
            requestLayout();
        }
    }

@@ -162,20 +163,24 @@ public class StatusBarMobileView extends FrameLayout implements DarkReceiver,
        mMobileRoaming.setVisibility(mState.roaming ? View.VISIBLE : View.GONE);
        mMobileRoamingSpace.setVisibility(mState.roaming ? View.VISIBLE : View.GONE);
        mIn.setVisibility(mState.activityIn ? View.VISIBLE : View.GONE);
        mOut.setVisibility(mState.activityIn ? View.VISIBLE : View.GONE);
        mOut.setVisibility(mState.activityOut ? View.VISIBLE : View.GONE);
        mInoutContainer.setVisibility((mState.activityIn || mState.activityOut)
                ? View.VISIBLE : View.GONE);
    }

    private void updateState(MobileIconState state) {
    private boolean updateState(MobileIconState state) {
        boolean needsLayout = false;

        setContentDescription(state.contentDescription);
        if (mState.visible != state.visible) {
            mMobileGroup.setVisibility(state.visible ? View.VISIBLE : View.GONE);
            needsLayout = true;
        }
        if (mState.strengthId != state.strengthId) {
            mMobileDrawable.setLevel(state.strengthId);
        }
        if (mState.typeId != state.typeId) {
            needsLayout |= state.typeId == 0 || mState.typeId == 0;
            if (state.typeId != 0) {
                mMobileType.setContentDescription(state.typeContentDescription);
                mMobileType.setImageResource(state.typeId);
@@ -188,11 +193,16 @@ public class StatusBarMobileView extends FrameLayout implements DarkReceiver,
        mMobileRoaming.setVisibility(state.roaming ? View.VISIBLE : View.GONE);
        mMobileRoamingSpace.setVisibility(state.roaming ? View.VISIBLE : View.GONE);
        mIn.setVisibility(state.activityIn ? View.VISIBLE : View.GONE);
        mOut.setVisibility(state.activityIn ? View.VISIBLE : View.GONE);
        mOut.setVisibility(state.activityOut ? View.VISIBLE : View.GONE);
        mInoutContainer.setVisibility((state.activityIn || state.activityOut)
                ? View.VISIBLE : View.GONE);

        needsLayout |= state.roaming != mState.roaming
                || state.activityIn != mState.activityIn
                || state.activityOut != mState.activityOut;

        mState = state;
        return needsLayout;
    }

    @Override
+16 −7
Original line number Diff line number Diff line
@@ -191,23 +191,26 @@ public class StatusBarWifiView extends FrameLayout implements DarkReceiver,
    }

    public void applyWifiState(WifiIconState state) {
        boolean requestLayout = false;

        if (state == null) {
            requestLayout = getVisibility() != View.GONE;
            setVisibility(View.GONE);
            mState = null;
            return;
        }

        if (mState == null) {
        } else if (mState == null) {
            requestLayout = true;
            mState = state.copy();
            initViewState();
        } else if (!mState.equals(state)) {
            requestLayout = updateState(state.copy());
        }

        if (!mState.equals(state)) {
            updateState(state.copy());
        if (requestLayout) {
            requestLayout();
        }
    }

    private void updateState(WifiIconState state) {
    private boolean updateState(WifiIconState state) {
        setContentDescription(state.contentDescription);
        if (mState.resId != state.resId && state.resId >= 0) {
            NeutralGoodDrawable drawable = NeutralGoodDrawable
@@ -222,11 +225,17 @@ public class StatusBarWifiView extends FrameLayout implements DarkReceiver,
                (state.activityIn || state.activityOut) ? View.VISIBLE : View.GONE);
        mAirplaneSpacer.setVisibility(state.airplaneSpacerVisible ? View.VISIBLE : View.GONE);
        mSignalSpacer.setVisibility(state.signalSpacerVisible ? View.VISIBLE : View.GONE);

        boolean needsLayout = state.activityIn != mState.activityIn
                ||state.activityOut != mState.activityOut;

        if (mState.visible != state.visible) {
            needsLayout |= true;
            setVisibility(state.visible ? View.VISIBLE : View.GONE);
        }

        mState = state;
        return needsLayout;
    }

    private void initViewState() {
+7 −3
Original line number Diff line number Diff line
@@ -203,7 +203,7 @@ public class DemoStatusIcons extends StatusIconContainer implements DemoMode, Da
        v.set(icon);
        v.setStaticDrawableColor(mColor);
        v.setDecorColor(mColor);
        addView(v, 0, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, mIconSize));
        addView(v, 0, createLayoutParams());
    }

    public void addDemoWifiView(WifiIconState state) {
@@ -223,7 +223,7 @@ public class DemoStatusIcons extends StatusIconContainer implements DemoMode, Da
        mWifiView = view;
        mWifiView.applyWifiState(state);
        mWifiView.setStaticDrawableColor(mColor);
        addView(view, viewIndex);
        addView(view, viewIndex, createLayoutParams());
    }

    public void updateWifiState(WifiIconState state) {
@@ -244,7 +244,7 @@ public class DemoStatusIcons extends StatusIconContainer implements DemoMode, Da

        // mobile always goes at the end
        mMobileViews.add(view);
        addView(view, getChildCount());
        addView(view, getChildCount(), createLayoutParams());
    }

    public void updateMobileState(MobileIconState state) {
@@ -290,6 +290,10 @@ public class DemoStatusIcons extends StatusIconContainer implements DemoMode, Da
        return null;
    }

    private LayoutParams createLayoutParams() {
        return new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, mIconSize);
    }

    @Override
    public void onDarkChanged(Rect area, float darkIntensity, int tint) {
        setColor(DarkIconDispatcher.getTint(area, mStatusIcons, tint));