Use separate icon group for signal/battery in QS header

This reverts the terrible hack that reattaches the system icons when
expanding QS. This primarily fixes that the alpha of the icons was
wrong when closing the shade, but also fixes flickering when expanding
the shade.

Bug: 17338013
Change-Id: Ifcbe03eca43ed7639059734e23d740c1b8a7a9de
This commit is contained in:
Jorim Jaggi
2014-09-02 15:55:57 +02:00
parent 56d3cb3013
commit 06d551ac62
5 changed files with 13 additions and 134 deletions

View File

@@ -64,7 +64,10 @@
<FrameLayout android:id="@+id/system_icons_container"
android:layout_width="wrap_content"
android:layout_height="@dimen/status_bar_height"
android:layout_gravity="center_vertical" />
android:layout_gravity="center_vertical"
>
<include layout="@layout/system_icons" />
</FrameLayout>
<TextView android:id="@+id/battery_level"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

View File

@@ -1,60 +0,0 @@
/*
* Copyright (C) 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License
*/
package com.android.systemui.statusbar;
import android.content.Context;
import android.graphics.Canvas;
import android.view.View;
/**
* A view that mirrors the visual contents of another one. Should be used for animation purposes
* only, as this view doesn't have any input handling.
*/
public class MirrorView extends View {
private View mView;
private int mFixedWidth;
private int mFixedHeight;
public MirrorView(Context context) {
super(context);
}
public void setMirroredView(View v, int width, int height) {
mView = v;
mFixedWidth = width;
mFixedHeight = height;
requestLayout();
invalidate();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if (mView != null) {
setMeasuredDimension(mFixedWidth, mFixedHeight);
} else {
setMeasuredDimension(0, 0);
}
}
@Override
protected void onDraw(Canvas canvas) {
if (mView != null) {
mView.draw(canvas);
}
}
}

View File

@@ -28,21 +28,19 @@ import android.util.MathUtils;
import android.view.MotionEvent;
import android.view.VelocityTracker;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.accessibility.AccessibilityEvent;
import android.view.animation.AnimationUtils;
import android.view.animation.Interpolator;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.android.systemui.R;
import com.android.systemui.qs.QSPanel;
import com.android.systemui.statusbar.ExpandableView;
import com.android.systemui.statusbar.FlingAnimationUtils;
import com.android.systemui.statusbar.GestureRecorder;
import com.android.systemui.statusbar.KeyguardAffordanceView;
import com.android.systemui.statusbar.MirrorView;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.policy.KeyguardUserSwitcher;
import com.android.systemui.statusbar.stack.NotificationStackScrollLayout;
@@ -71,7 +69,6 @@ public class NotificationPanelView extends PanelView implements
private ObservableScrollView mScrollView;
private TextView mClockView;
private View mReserveNotificationSpace;
private MirrorView mSystemIconsCopy;
private View mQsNavbarScrim;
private View mNotificationContainerParent;
private NotificationStackScrollLayout mNotificationStackScroller;
@@ -165,7 +162,6 @@ public class NotificationPanelView extends PanelView implements
public NotificationPanelView(Context context, AttributeSet attrs) {
super(context, attrs);
mSystemIconsCopy = new MirrorView(context);
}
public void setStatusBar(PhoneStatusBar bar) {
@@ -1167,43 +1163,6 @@ public class NotificationPanelView extends PanelView implements
}
}
@Override
public void setVisibility(int visibility) {
int oldVisibility = getVisibility();
super.setVisibility(visibility);
if (visibility != oldVisibility) {
reparentStatusIcons(visibility == VISIBLE);
}
}
/**
* When the notification panel gets expanded, we need to move the status icons in the header
* card.
*/
private void reparentStatusIcons(boolean toHeader) {
if (mStatusBar == null) {
return;
}
LinearLayout systemIcons = mStatusBar.getSystemIcons();
ViewGroup parent = ((ViewGroup) systemIcons.getParent());
if (toHeader) {
int index = parent.indexOfChild(systemIcons);
parent.removeView(systemIcons);
mSystemIconsCopy.setMirroredView(
systemIcons, systemIcons.getWidth(), systemIcons.getHeight());
parent.addView(mSystemIconsCopy, index);
mHeader.attachSystemIcons(systemIcons);
} else {
ViewGroup newParent = mStatusBar.getSystemIconArea();
int index = newParent.indexOfChild(mSystemIconsCopy);
parent.removeView(systemIcons);
mHeader.onSystemIconsDetached();
mSystemIconsCopy.setMirroredView(null, 0, 0);
newParent.removeView(mSystemIconsCopy);
newParent.addView(systemIcons, index);
}
}
@Override
protected boolean isScrolledToBottom() {
if (mStatusBar.getBarState() == StatusBarState.KEYGUARD) {

View File

@@ -779,10 +779,14 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
(SignalClusterView) mStatusBarView.findViewById(R.id.signal_cluster);
final SignalClusterView signalClusterKeyguard =
(SignalClusterView) mKeyguardStatusBar.findViewById(R.id.signal_cluster);
final SignalClusterView signalClusterQs =
(SignalClusterView) mHeader.findViewById(R.id.signal_cluster);
mNetworkController.addSignalCluster(signalCluster);
mNetworkController.addSignalCluster(signalClusterKeyguard);
mNetworkController.addSignalCluster(signalClusterQs);
signalCluster.setNetworkController(mNetworkController);
signalClusterKeyguard.setNetworkController(mNetworkController);
signalClusterQs.setNetworkController(mNetworkController);
final boolean isAPhone = mNetworkController.hasVoiceCallingFeature();
if (isAPhone) {
mNetworkController.addEmergencyLabelView(mHeader);

View File

@@ -39,6 +39,7 @@ import android.widget.Switch;
import android.widget.TextView;
import com.android.keyguard.KeyguardStatusView;
import com.android.systemui.BatteryMeterView;
import com.android.systemui.FontSizeUtils;
import com.android.systemui.R;
import com.android.systemui.qs.QSPanel;
@@ -67,7 +68,6 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
private TextView mDateCollapsed;
private TextView mDateExpanded;
private LinearLayout mSystemIcons;
private View mStatusIcons;
private View mSignalCluster;
private View mSettingsButton;
private View mQsDetailHeader;
@@ -149,6 +149,8 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
mBatteryLevel = (TextView) findViewById(R.id.battery_level);
mAlarmStatus = (TextView) findViewById(R.id.alarm_status);
mAlarmStatus.setOnClickListener(this);
mSignalCluster = findViewById(R.id.signal_cluster);
mSystemIcons = (LinearLayout) findViewById(R.id.system_icons);
loadDimens();
updateVisibilities();
updateClockScale();
@@ -259,6 +261,7 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
public void setBatteryController(BatteryController batteryController) {
mBatteryController = batteryController;
((BatteryMeterView) findViewById(R.id.battery)).setBatteryController(batteryController);
}
public void setNextAlarmController(NextAlarmController nextAlarmController) {
@@ -476,36 +479,6 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
invalidateOutline();
}
public void attachSystemIcons(LinearLayout systemIcons) {
mSystemIconsContainer.addView(systemIcons);
mStatusIcons = systemIcons.findViewById(R.id.statusIcons);
mSignalCluster = systemIcons.findViewById(R.id.signal_cluster);
mSystemIcons = systemIcons;
updateVisibilities();
if (mStatusIcons != null) {
mStatusIcons.setVisibility(View.GONE);
}
}
public void onSystemIconsDetached() {
if (mSignalClusterDetached) {
reattachSignalCluster();
mSignalClusterDetached = false;
}
if (mStatusIcons != null) {
mStatusIcons.setVisibility(View.VISIBLE);
}
if (mSignalCluster != null) {
mSignalCluster.setVisibility(View.VISIBLE);
mSignalCluster.setAlpha(1f);
mSignalCluster.setTranslationX(0f);
mSignalCluster.setTranslationY(0f);
}
mStatusIcons = null;
mSignalCluster = null;
mSystemIcons = null;
}
public void setUserInfoController(UserInfoController userInfoController) {
userInfoController.addListener(new UserInfoController.OnUserInfoChangedListener() {
@Override