Skip to content

Commit 1fbc124

Browse files
adrianroosAndroid (Google) Code Review
authored andcommitted
Merge "Hide panel while changing brightness" into lmp-dev
2 parents bd3409c + 5fd872e commit 1fbc124

File tree

8 files changed

+205
-2
lines changed

8 files changed

+205
-2
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<!--
3+
~ Copyright (C) 2014 The Android Open Source Project
4+
~
5+
~ Licensed under the Apache License, Version 2.0 (the "License");
6+
~ you may not use this file except in compliance with the License.
7+
~ You may obtain a copy of the License at
8+
~
9+
~ http://www.apache.org/licenses/LICENSE-2.0
10+
~
11+
~ Unless required by applicable law or agreed to in writing, software
12+
~ distributed under the License is distributed on an "AS IS" BASIS,
13+
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
~ See the License for the specific language governing permissions and
15+
~ limitations under the License
16+
-->
17+
<shape xmlns:android="http://schemas.android.com/apk/res/android">
18+
<solid android:color="@color/system_primary_color" />
19+
<corners
20+
android:topLeftRadius="@dimen/notification_material_rounded_rect_radius"
21+
android:topRightRadius="@dimen/notification_material_rounded_rect_radius"
22+
android:bottomLeftRadius="@dimen/notification_material_rounded_rect_radius"
23+
android:bottomRightRadius="@dimen/notification_material_rounded_rect_radius"/>
24+
</shape>

packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@
1515
-->
1616
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
1717
xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
18-
style="@style/BrightnessDialogContainer"
19-
android:clickable="true">
18+
style="@style/BrightnessDialogContainer">
2019

2120
<ImageView
2221
android:id="@+id/brightness_icon"

packages/SystemUI/res/layout/super_status_bar.xml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,22 @@
2626
android:fitsSystemWindows="true"
2727
android:descendantFocusability="afterDescendants">
2828

29+
<FrameLayout android:id="@+id/brightness_mirror"
30+
android:layout_width="@dimen/notification_panel_width"
31+
android:layout_height="wrap_content"
32+
android:layout_gravity="@integer/notification_panel_layout_gravity"
33+
android:paddingLeft="@dimen/notification_side_padding"
34+
android:paddingRight="@dimen/notification_side_padding"
35+
android:visibility="gone">
36+
<FrameLayout
37+
android:layout_width="match_parent"
38+
android:layout_height="match_parent"
39+
android:elevation="2dp"
40+
android:background="@drawable/brightness_mirror_background">
41+
<include layout="@layout/quick_settings_brightness_dialog" />
42+
</FrameLayout>
43+
</FrameLayout>
44+
2945
<com.android.systemui.statusbar.AlphaOptimizedFrameLayout
3046
android:id="@+id/backdrop"
3147
android:layout_width="match_parent"

packages/SystemUI/src/com/android/systemui/qs/QSPanel.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import com.android.systemui.settings.BrightnessController;
3636
import com.android.systemui.settings.ToggleSlider;
3737
import com.android.systemui.statusbar.phone.QSTileHost;
38+
import com.android.systemui.statusbar.policy.BrightnessMirrorController;
3839

3940
import java.util.ArrayList;
4041
import java.util.Collection;
@@ -105,6 +106,14 @@ public void onClick(View v) {
105106
});
106107
}
107108

109+
public void setBrightnessMirror(BrightnessMirrorController c) {
110+
super.onFinishInflate();
111+
ToggleSlider brightnessSlider = (ToggleSlider) findViewById(R.id.brightness_slider);
112+
ToggleSlider mirror = (ToggleSlider) c.getMirror().findViewById(R.id.brightness_slider);
113+
brightnessSlider.setMirror(mirror);
114+
brightnessSlider.setMirrorController(c);
115+
}
116+
108117
public void setCallback(Callback callback) {
109118
mCallback = callback;
110119
}

packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@ public void unregisterCallbacks() {
188188
mListening = false;
189189
}
190190

191+
@Override
191192
public void onChanged(ToggleSlider view, boolean tracking, boolean automatic, int value) {
192193
updateIcon(mAutomatic);
193194
if (!mAutomatic) {

packages/SystemUI/src/com/android/systemui/settings/ToggleSlider.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import android.widget.TextView;
3030

3131
import com.android.systemui.R;
32+
import com.android.systemui.statusbar.policy.BrightnessMirrorController;
3233

3334
public class ToggleSlider extends RelativeLayout {
3435
public interface Listener {
@@ -43,6 +44,9 @@ public interface Listener {
4344
private SeekBar mSlider;
4445
private TextView mLabel;
4546

47+
private ToggleSlider mMirror;
48+
private BrightnessMirrorController mMirrorController;
49+
4650
public ToggleSlider(Context context) {
4751
this(context, null);
4852
}
@@ -72,6 +76,18 @@ public ToggleSlider(Context context, AttributeSet attrs, int defStyle) {
7276
a.recycle();
7377
}
7478

79+
public void setMirror(ToggleSlider toggleSlider) {
80+
mMirror = toggleSlider;
81+
if (mMirror != null) {
82+
mMirror.mToggle.setChecked(mToggle.isChecked());
83+
mMirror.mSlider.setProgress(mSlider.getProgress());
84+
}
85+
}
86+
87+
public void setMirrorController(BrightnessMirrorController c) {
88+
mMirrorController = c;
89+
}
90+
7591
@Override
7692
protected void onAttachedToWindow() {
7793
super.onAttachedToWindow();
@@ -109,6 +125,10 @@ public void onCheckedChanged(CompoundButton toggle, boolean checked) {
109125
mListener.onChanged(
110126
ToggleSlider.this, mTracking, checked, mSlider.getProgress());
111127
}
128+
129+
if (mMirror != null) {
130+
mMirror.mToggle.setChecked(checked);
131+
}
112132
}
113133
};
114134

@@ -119,6 +139,10 @@ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
119139
mListener.onChanged(
120140
ToggleSlider.this, mTracking, mToggle.isChecked(), progress);
121141
}
142+
143+
if (mMirror != null) {
144+
mMirror.mSlider.setProgress(progress);
145+
}
122146
}
123147

124148
@Override
@@ -131,6 +155,15 @@ public void onStartTrackingTouch(SeekBar seekBar) {
131155
}
132156

133157
mToggle.setChecked(false);
158+
159+
if (mMirror != null) {
160+
mMirror.mSlider.setPressed(true);
161+
}
162+
163+
if (mMirrorController != null) {
164+
mMirrorController.showMirror();
165+
mMirrorController.setLocation((View) getParent());
166+
}
134167
}
135168

136169
@Override
@@ -141,6 +174,14 @@ public void onStopTrackingTouch(SeekBar seekBar) {
141174
mListener.onChanged(
142175
ToggleSlider.this, mTracking, mToggle.isChecked(), mSlider.getProgress());
143176
}
177+
178+
if (mMirror != null) {
179+
mMirror.mSlider.setPressed(false);
180+
}
181+
182+
if (mMirrorController != null) {
183+
mMirrorController.hideMirror();
184+
}
144185
}
145186
};
146187
}

packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@
133133
import com.android.systemui.statusbar.policy.BatteryController;
134134
import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback;
135135
import com.android.systemui.statusbar.policy.BluetoothControllerImpl;
136+
import com.android.systemui.statusbar.policy.BrightnessMirrorController;
136137
import com.android.systemui.statusbar.policy.CastControllerImpl;
137138
import com.android.systemui.statusbar.policy.FlashlightController;
138139
import com.android.systemui.statusbar.policy.HeadsUpNotificationView;
@@ -229,6 +230,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
229230
UserSwitcherController mUserSwitcherController;
230231
NextAlarmController mNextAlarmController;
231232
KeyguardMonitor mKeyguardMonitor;
233+
BrightnessMirrorController mBrightnessMirrorController;
232234

233235
int mNaturalBarHeight = -1;
234236
int mIconSize = -1;
@@ -819,6 +821,8 @@ public void onBatteryLevelChanged(int level, boolean pluggedIn, boolean charging
819821
mSecurityController);
820822
mQSPanel.setHost(qsh);
821823
mQSPanel.setTiles(qsh.getTiles());
824+
mBrightnessMirrorController = new BrightnessMirrorController(mStatusBarWindow);
825+
mQSPanel.setBrightnessMirror(mBrightnessMirrorController);
822826
mHeader.setQSPanel(mQSPanel);
823827
qsh.setCallback(new QSTileHost.Callback() {
824828
@Override
@@ -3048,6 +3052,9 @@ void updateResources() {
30483052
if (mHeadsUpNotificationView != null) {
30493053
mHeadsUpNotificationView.updateResources();
30503054
}
3055+
if (mBrightnessMirrorController != null) {
3056+
mBrightnessMirrorController.updateResources();
3057+
}
30513058
}
30523059

30533060
protected void loadDimens() {
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
/*
2+
* Copyright (C) 2014 The Android Open Source Project
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License
15+
*/
16+
17+
package com.android.systemui.statusbar.policy;
18+
19+
import com.android.systemui.R;
20+
import com.android.systemui.statusbar.phone.PhoneStatusBar;
21+
import com.android.systemui.statusbar.phone.StatusBarWindowView;
22+
23+
import android.view.View;
24+
import android.view.ViewGroup;
25+
import android.view.ViewPropertyAnimator;
26+
import android.widget.FrameLayout;
27+
28+
/**
29+
* Controls showing and hiding of the brightness mirror.
30+
*/
31+
public class BrightnessMirrorController {
32+
33+
public long TRANSITION_DURATION_OUT = 150;
34+
public long TRANSITION_DURATION_IN = 200;
35+
36+
private final View mScrimBehind;
37+
private final View mBrightnessMirror;
38+
private final View mPanelHolder;
39+
private final int[] mInt2Cache = new int[2];
40+
41+
public BrightnessMirrorController(StatusBarWindowView statusBarWindow) {
42+
mScrimBehind = statusBarWindow.findViewById(R.id.scrim_behind);
43+
mBrightnessMirror = statusBarWindow.findViewById(R.id.brightness_mirror);
44+
mPanelHolder = statusBarWindow.findViewById(R.id.panel_holder);
45+
}
46+
47+
public void showMirror() {
48+
mBrightnessMirror.setVisibility(View.VISIBLE);
49+
outAnimation(mScrimBehind.animate());
50+
outAnimation(mPanelHolder.animate())
51+
.withLayer();
52+
}
53+
54+
public void hideMirror() {
55+
inAnimation(mScrimBehind.animate());
56+
inAnimation(mPanelHolder.animate())
57+
.withLayer()
58+
.withEndAction(new Runnable() {
59+
@Override
60+
public void run() {
61+
mBrightnessMirror.setVisibility(View.GONE);
62+
}
63+
});
64+
}
65+
66+
private ViewPropertyAnimator outAnimation(ViewPropertyAnimator a) {
67+
return a.alpha(0.0f)
68+
.setDuration(TRANSITION_DURATION_OUT)
69+
.setInterpolator(PhoneStatusBar.ALPHA_OUT);
70+
}
71+
private ViewPropertyAnimator inAnimation(ViewPropertyAnimator a) {
72+
return a.alpha(1.0f)
73+
.setDuration(TRANSITION_DURATION_IN)
74+
.setInterpolator(PhoneStatusBar.ALPHA_IN);
75+
}
76+
77+
78+
public void setLocation(View original) {
79+
original.getLocationInWindow(mInt2Cache);
80+
int originalY = mInt2Cache[1];
81+
mBrightnessMirror.getLocationInWindow(mInt2Cache);
82+
int mirrorY = mInt2Cache[1];
83+
84+
mBrightnessMirror.setTranslationY(mBrightnessMirror.getTranslationY()
85+
+ originalY - mirrorY);
86+
}
87+
88+
public View getMirror() {
89+
return mBrightnessMirror;
90+
}
91+
92+
public void updateResources() {
93+
FrameLayout.LayoutParams lp =
94+
(FrameLayout.LayoutParams) mBrightnessMirror.getLayoutParams();
95+
lp.width = mBrightnessMirror.getResources().getDimensionPixelSize(
96+
R.dimen.notification_panel_width);
97+
lp.gravity = mBrightnessMirror.getResources().getInteger(
98+
R.integer.notification_panel_layout_gravity);
99+
mBrightnessMirror.setLayoutParams(lp);
100+
101+
int padding = mBrightnessMirror.getResources().getDimensionPixelSize(
102+
R.dimen.notification_side_padding);
103+
mBrightnessMirror.setPadding(padding, mBrightnessMirror.getPaddingTop(),
104+
padding, mBrightnessMirror.getPaddingBottom());
105+
}
106+
}

0 commit comments

Comments
 (0)