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

Commit 256ae67b authored by John Spurlock's avatar John Spurlock
Browse files

Restore scrim views to former place in view hierarchy.

By enabling KeyguardHostView to extend into the full screen area
and updating custom measure/layout in the Challenge layouts
appropriately.

Bug:10939005
Change-Id: I06fb187c4100cf0f2e48b1206cc4450afa4567dd
parent 6a1e32ef
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -51,6 +51,11 @@
            androidprv:layout_maxHeight="480dp" />
        <include layout="@layout/keyguard_multi_user_selector"/>

        <View android:layout_width="match_parent"
              android:layout_height="match_parent"
              androidprv:layout_childType="scrim"
              android:background="#99000000" />

        <com.android.keyguard.KeyguardSecurityContainer
            android:id="@+id/keyguard_security_container"
            android:layout_width="wrap_content"
+5 −0
Original line number Diff line number Diff line
@@ -55,6 +55,11 @@
                android:layout_gravity="center"/>
        </FrameLayout>

        <View android:layout_width="match_parent"
              android:layout_height="match_parent"
              androidprv:layout_childType="scrim"
              android:background="#99000000" />

        <com.android.keyguard.KeyguardSecurityContainer
            android:id="@+id/keyguard_security_container"
            android:layout_width="wrap_content"
+5 −0
Original line number Diff line number Diff line
@@ -52,6 +52,11 @@

        <include layout="@layout/keyguard_multi_user_selector"/>

        <View android:layout_width="match_parent"
              android:layout_height="match_parent"
              androidprv:layout_childType="scrim"
              android:background="#99000000" />

        <com.android.keyguard.KeyguardSecurityContainer
            android:id="@+id/keyguard_security_container"
            android:layout_width="wrap_content"
+19 −5
Original line number Diff line number Diff line
@@ -127,6 +127,8 @@ public class KeyguardHostView extends KeyguardViewBase {

    protected boolean mShowSecurityWhenReturn;

    private final Rect mInsets = new Rect();

    /*package*/ interface UserSwitcherCallback {
        void hideSecurityView(int duration);
        void showSecurityView();
@@ -402,11 +404,6 @@ public class KeyguardHostView extends KeyguardViewBase {
        updateSecurityViews();
    }

    public void setScrimView(View scrim) {
        if (mSlidingChallengeLayout != null) mSlidingChallengeLayout.setScrimView(scrim);
        if (mMultiPaneChallengeLayout != null) mMultiPaneChallengeLayout.setScrimView(scrim);
    }

    private void setBackButtonEnabled(boolean enabled) {
        if (mContext instanceof Activity) return;  // always enabled in activity mode
        setSystemUiVisibility(enabled ?
@@ -1348,6 +1345,7 @@ public class KeyguardHostView extends KeyguardViewBase {
    static class SavedState extends BaseSavedState {
        int transportState;
        int appWidgetToShow = AppWidgetManager.INVALID_APPWIDGET_ID;
        Rect insets = new Rect();

        SavedState(Parcelable superState) {
            super(superState);
@@ -1357,6 +1355,7 @@ public class KeyguardHostView extends KeyguardViewBase {
            super(in);
            this.transportState = in.readInt();
            this.appWidgetToShow = in.readInt();
            this.insets = in.readParcelable(null);
        }

        @Override
@@ -1364,6 +1363,7 @@ public class KeyguardHostView extends KeyguardViewBase {
            super.writeToParcel(out, flags);
            out.writeInt(this.transportState);
            out.writeInt(this.appWidgetToShow);
            out.writeParcelable(insets, 0);
        }

        public static final Parcelable.Creator<SavedState> CREATOR
@@ -1388,6 +1388,7 @@ public class KeyguardHostView extends KeyguardViewBase {
                && mAppWidgetContainer.getWidgetPageIndex(mTransportControl) >= 0;
        ss.transportState =  showing ? TRANSPORT_VISIBLE : mTransportState;
        ss.appWidgetToShow = mAppWidgetToShow;
        ss.insets.set(mInsets);
        return ss;
    }

@@ -1401,10 +1402,23 @@ public class KeyguardHostView extends KeyguardViewBase {
        super.onRestoreInstanceState(ss.getSuperState());
        mTransportState = (ss.transportState);
        mAppWidgetToShow = ss.appWidgetToShow;
        setInsets(ss.insets);
        if (DEBUG) Log.d(TAG, "onRestoreInstanceState, transport=" + mTransportState);
        post(mSwitchPageRunnable);
    }

    @Override
    protected boolean fitSystemWindows(Rect insets) {
        setInsets(insets);
        return true;
    }

    private void setInsets(Rect insets) {
        mInsets.set(insets);
        if (mSlidingChallengeLayout != null) mSlidingChallengeLayout.setInsets(mInsets);
        if (mMultiPaneChallengeLayout != null) mMultiPaneChallengeLayout.setInsets(mInsets);
    }

    @Override
    public void onWindowFocusChanged(boolean hasWindowFocus) {
        super.onWindowFocusChanged(hasWindowFocus);
+4 −48
Original line number Diff line number Diff line
@@ -139,6 +139,7 @@ public class KeyguardViewManager {

    class ViewManagerHost extends FrameLayout {
        private static final int BACKGROUND_COLOR = 0x70000000;

        // This is a faster way to draw the background on devices without hardware acceleration
        private final Drawable mBackgroundDrawable = new Drawable() {
            @Override
@@ -159,54 +160,10 @@ public class KeyguardViewManager {
                return PixelFormat.TRANSLUCENT;
            }
        };
        private final View mScrimView;
        private boolean mExtendIntoPadding;
        public ViewManagerHost(Context context, boolean extendIntoPadding) {

        public ViewManagerHost(Context context) {
            super(context);
            mExtendIntoPadding = extendIntoPadding;
            setFitsSystemWindows(true);
            setClipToPadding(!mExtendIntoPadding);
            setBackground(mBackgroundDrawable);

            mScrimView = new View(context);
            mScrimView.setVisibility(View.GONE);
            mScrimView.setBackgroundColor(0x99000000);
            addView(mScrimView);
        }

        private boolean considerPadding(View child) {
            return !mExtendIntoPadding || child instanceof KeyguardHostView;
        }

        @Override
        protected void measureChildWithMargins(View child,
                int parentWidthMeasureSpec, int widthUsed,
                int parentHeightMeasureSpec, int heightUsed) {
            if (considerPadding(child)) {
                // don't extend into padding (default behavior)
                super.measureChildWithMargins(child,
                        parentWidthMeasureSpec, widthUsed,
                        parentHeightMeasureSpec, heightUsed);
            } else {
                // allowed to extend into padding (scrim / camera preview)
                child.measure(parentWidthMeasureSpec, parentHeightMeasureSpec);
            }
        }

        @Override
        protected void onLayout(boolean changed, int l, int t, int r, int b) {
            final int count = getChildCount();
            for (int i = 0; i < count; i++) {
                final View child = getChildAt(i);
                int cl = l, ct = t, cr = r, cb = b;
                if (considerPadding(child)) {
                    cl += mPaddingLeft;
                    ct += mPaddingTop;
                    cr -= mPaddingRight;
                    cb -= mPaddingBottom;
                }
                child.layout(cl, ct, cr, cb);
            }
        }

        @Override
@@ -252,7 +209,7 @@ public class KeyguardViewManager {
        if (mKeyguardHost == null) {
            if (DEBUG) Log.d(TAG, "keyguard host is null, creating it...");

            mKeyguardHost = new ViewManagerHost(mContext, shouldEnableTransparentBars());
            mKeyguardHost = new ViewManagerHost(mContext);

            int flags = WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
                    | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR
@@ -306,7 +263,6 @@ public class KeyguardViewManager {
        mKeyguardView.setViewMediatorCallback(mViewMediatorCallback);
        mKeyguardView.initializeSwitchingUserState(options != null &&
                options.getBoolean(IS_SWITCHING_USER));
        mKeyguardView.setScrimView(mKeyguardHost.mScrimView);

        // HACK
        // The keyguard view will have set up window flags in onFinishInflate before we set
Loading