Fix ordering of notifications, user switcher and QS panel
Also closes the user switcher when opening QS on Keyguard because touch logic would interleave with QS. Change-Id: I391dc9bcba7f9e2e99c0854d34ed0ec6efbb2f44
This commit is contained in:
@@ -56,14 +56,6 @@
|
||||
android:clipToPadding="false"
|
||||
android:clipChildren="false">
|
||||
|
||||
<ViewStub
|
||||
android:id="@+id/keyguard_user_switcher"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_marginTop="@dimen/status_bar_header_height_keyguard"
|
||||
android:layout_gravity="end"
|
||||
android:layout="@layout/keyguard_user_switcher" />
|
||||
|
||||
<com.android.systemui.statusbar.phone.ObservableScrollView
|
||||
android:id="@+id/scroll_view"
|
||||
android:layout_width="match_parent"
|
||||
@@ -103,6 +95,14 @@
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginBottom="@dimen/close_handle_underlap"/>
|
||||
|
||||
<ViewStub
|
||||
android:id="@+id/keyguard_user_switcher"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_marginTop="@dimen/status_bar_header_height_keyguard"
|
||||
android:layout_gravity="end"
|
||||
android:layout="@layout/keyguard_user_switcher" />
|
||||
|
||||
</com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer>
|
||||
|
||||
<include layout="@layout/status_bar_expanded_header" />
|
||||
|
||||
@@ -17,23 +17,71 @@
|
||||
package com.android.systemui.statusbar.phone;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Rect;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.view.ViewStub;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
import com.android.systemui.R;
|
||||
|
||||
/**
|
||||
* The container with notification stack scroller and quick settings inside.
|
||||
*/
|
||||
public class NotificationsQuickSettingsContainer extends FrameLayout {
|
||||
public class NotificationsQuickSettingsContainer extends FrameLayout
|
||||
implements ViewStub.OnInflateListener {
|
||||
|
||||
private View mScrollView;
|
||||
private View mUserSwitcher;
|
||||
private View mStackScroller;
|
||||
private boolean mInflated;
|
||||
|
||||
public NotificationsQuickSettingsContainer(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onFinishInflate() {
|
||||
super.onFinishInflate();
|
||||
mScrollView = findViewById(R.id.scroll_view);
|
||||
mStackScroller = findViewById(R.id.notification_stack_scroller);
|
||||
ViewStub userSwitcher = (ViewStub) findViewById(R.id.keyguard_user_switcher);
|
||||
userSwitcher.setOnInflateListener(this);
|
||||
mUserSwitcher = userSwitcher;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean fitSystemWindows(Rect insets) {
|
||||
setPadding(0, 0, 0, insets.bottom);
|
||||
insets.bottom = 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean drawChild(Canvas canvas, View child, long drawingTime) {
|
||||
boolean userSwitcherVisible = mInflated && mUserSwitcher.getVisibility() == View.VISIBLE;
|
||||
|
||||
// Invert the order of the scroll view and user switcher such that the notifications receive
|
||||
// touches first but the panel gets drawn above.
|
||||
if (child == mScrollView) {
|
||||
return super.drawChild(canvas, mStackScroller, drawingTime);
|
||||
} else if (child == mStackScroller) {
|
||||
return super.drawChild(canvas, userSwitcherVisible ? mUserSwitcher : mScrollView,
|
||||
drawingTime);
|
||||
} else if (child == mUserSwitcher) {
|
||||
return super.drawChild(canvas, userSwitcherVisible ? mScrollView : mUserSwitcher,
|
||||
drawingTime);
|
||||
} else {
|
||||
return super.drawChild(canvas, child, drawingTime);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onInflate(ViewStub stub, View inflated) {
|
||||
if (stub == mUserSwitcher) {
|
||||
mUserSwitcher = inflated;
|
||||
mInflated = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,7 +98,7 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
|
||||
private ActivityStarter mActivityStarter;
|
||||
private BatteryController mBatteryController;
|
||||
private QSPanel mQSPanel;
|
||||
private boolean mHasKeyguardUserSwitcher;
|
||||
private KeyguardUserSwitcher mKeyguardUserSwitcher;
|
||||
|
||||
private final Rect mClipBounds = new Rect();
|
||||
private final StatusIconClipper mStatusIconClipper = new StatusIconClipper();
|
||||
@@ -300,6 +300,9 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
|
||||
? VISIBLE : GONE);
|
||||
mBatteryLevel.setVisibility(mKeyguardShowing && mCharging || mExpanded && !mOverscrolled
|
||||
? View.VISIBLE : View.GONE);
|
||||
if (mExpanded && !mOverscrolled && mKeyguardUserSwitcherShowing) {
|
||||
mKeyguardUserSwitcher.hide();
|
||||
}
|
||||
}
|
||||
|
||||
private void updateSystemIconsLayoutParams() {
|
||||
@@ -377,7 +380,7 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
|
||||
mDateTime.setClickable(mExpanded);
|
||||
|
||||
boolean keyguardSwitcherAvailable =
|
||||
mHasKeyguardUserSwitcher && mKeyguardShowing && !mExpanded;
|
||||
mKeyguardUserSwitcher != null && mKeyguardShowing && !mExpanded;
|
||||
mMultiUserSwitch.setClickable(mExpanded || keyguardSwitcherAvailable);
|
||||
mMultiUserSwitch.setKeyguardMode(keyguardSwitcherAvailable);
|
||||
mSystemIconsSuperContainer.setClickable(mExpanded);
|
||||
@@ -516,7 +519,7 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
|
||||
}
|
||||
|
||||
public void setKeyguarUserSwitcher(KeyguardUserSwitcher keyguardUserSwitcher) {
|
||||
mHasKeyguardUserSwitcher = true;
|
||||
mKeyguardUserSwitcher = keyguardUserSwitcher;
|
||||
mMultiUserSwitch.setKeyguardUserSwitcher(keyguardUserSwitcher);
|
||||
}
|
||||
|
||||
|
||||
@@ -88,7 +88,7 @@ public class KeyguardUserSwitcher {
|
||||
}
|
||||
}
|
||||
|
||||
private void hide() {
|
||||
public void hide() {
|
||||
if (mUserSwitcher != null) {
|
||||
// TODO: animate
|
||||
mUserSwitcher.setVisibility(View.GONE);
|
||||
|
||||
Reference in New Issue
Block a user