Change brightness mirror background
And match size to slider. Also, simplify slider hierarchy by removing an unnecessary FrameLayout. Test: manual Test: atest com.android.systemui.settings.brightness Fixes: 185505618 Change-Id: Iaf33514e627974a91712b5af99e171a7c64a3295
This commit is contained in:
@@ -16,5 +16,5 @@
|
||||
-->
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="?attr/underSurfaceColor" />
|
||||
<corners android:radius="8dp" />
|
||||
<corners android:radius="@dimen/rounded_slider_background_rounded_corner" />
|
||||
</shape>
|
||||
|
||||
@@ -17,10 +17,14 @@
|
||||
<FrameLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:theme="@style/Theme.SystemUI.QuickSettings"
|
||||
android:id="@+id/brightness_mirror"
|
||||
android:layout_width="@dimen/qs_panel_width"
|
||||
android:layout_height="@dimen/brightness_mirror_height"
|
||||
android:layout_gravity="@integer/notification_panel_layout_gravity"
|
||||
android:id="@+id/brightness_mirror_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/brightness_mirror_background"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_margin="8dp"
|
||||
android:padding="@dimen/rounded_slider_background_padding"
|
||||
android:gravity="center"
|
||||
android:visibility="invisible">
|
||||
|
||||
</FrameLayout>
|
||||
@@ -13,16 +13,12 @@
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_gravity="center">
|
||||
|
||||
<com.android.systemui.settings.brightness.BrightnessSliderView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/brightness_slider"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/brightness_mirror_height"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_gravity="center"
|
||||
android:contentDescription="@string/accessibility_brightness"
|
||||
android:importantForAccessibility="no" >
|
||||
|
||||
@@ -40,4 +36,3 @@
|
||||
android:splitTrack="false"
|
||||
/>
|
||||
</com.android.systemui.settings.brightness.BrightnessSliderView>
|
||||
</FrameLayout>
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
android:layout_height="match_parent"
|
||||
android:visibility="invisible" />
|
||||
|
||||
<include layout="@layout/brightness_mirror" />
|
||||
<include layout="@layout/brightness_mirror_container" />
|
||||
|
||||
<com.android.systemui.statusbar.ScrimView
|
||||
android:id="@+id/scrim_in_front"
|
||||
|
||||
@@ -1430,6 +1430,9 @@
|
||||
<dimen name="rounded_slider_track_width">4dp</dimen>
|
||||
<!-- rounded_slider_track_width / 2 -->
|
||||
<dimen name="rounded_slider_track_corner_radius">2dp</dimen>
|
||||
<dimen name="rounded_slider_background_padding">8dp</dimen>
|
||||
<!-- rounded_slider_corner_radius + rounded_slider_background_padding -->
|
||||
<dimen name="rounded_slider_background_rounded_corner">32dp</dimen>
|
||||
|
||||
<!-- inset for ic_lock_open within a DisabledUdfpsView -->
|
||||
<dimen name="udfps_unlock_icon_inset">16dp</dimen>
|
||||
|
||||
@@ -388,7 +388,7 @@
|
||||
</style>
|
||||
|
||||
<style name="Theme.SystemUI.QuickSettings.BrightnessDialog" parent="@android:style/Theme.DeviceDefault.Dialog">
|
||||
<item name="android:dialogCornerRadius">8dp</item>
|
||||
<item name="android:windowBackground">@android:color/transparent</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.SystemUI.QuickSettings.Dialog" parent="@android:style/Theme.DeviceDefault.Dialog">
|
||||
|
||||
@@ -16,12 +16,17 @@
|
||||
|
||||
package com.android.systemui.settings.brightness;
|
||||
|
||||
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
|
||||
import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
import android.view.Gravity;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
||||
@@ -62,10 +67,15 @@ public class BrightnessDialog extends Activity {
|
||||
window.setLayout(
|
||||
WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
|
||||
|
||||
BrightnessSlider controller = mToggleSliderFactory.create(this, null);
|
||||
setContentView(R.layout.brightness_mirror_container);
|
||||
FrameLayout frame = findViewById(R.id.brightness_mirror_container);
|
||||
// The brightness mirror container is INVISIBLE by default.
|
||||
frame.setVisibility(View.VISIBLE);
|
||||
|
||||
BrightnessSlider controller = mToggleSliderFactory.create(this, frame);
|
||||
controller.init();
|
||||
setContentView(controller.getRootView());
|
||||
controller.getRootView().setBackgroundResource(R.drawable.brightness_mirror_background);
|
||||
frame.addView(controller.getRootView(), MATCH_PARENT, WRAP_CONTENT);
|
||||
|
||||
mBrightnessController = new BrightnessController(this, controller, mBroadcastDispatcher);
|
||||
}
|
||||
|
||||
|
||||
@@ -44,11 +44,10 @@ import javax.inject.Inject;
|
||||
*
|
||||
* @see BrightnessMirrorController
|
||||
*/
|
||||
public class BrightnessSlider extends ViewController<View> implements ToggleSlider {
|
||||
public class BrightnessSlider extends ViewController<BrightnessSliderView> implements ToggleSlider {
|
||||
|
||||
private Listener mListener;
|
||||
private ToggleSlider mMirror;
|
||||
private final BrightnessSliderView mBrightnessSliderView;
|
||||
private BrightnessMirrorController mMirrorController;
|
||||
private boolean mTracking;
|
||||
private final FalsingManager mFalsingManager;
|
||||
@@ -71,11 +70,9 @@ public class BrightnessSlider extends ViewController<View> implements ToggleSlid
|
||||
};
|
||||
|
||||
BrightnessSlider(
|
||||
View rootView,
|
||||
BrightnessSliderView brightnessSliderView,
|
||||
FalsingManager falsingManager) {
|
||||
super(rootView);
|
||||
mBrightnessSliderView = brightnessSliderView;
|
||||
super(brightnessSliderView);
|
||||
mFalsingManager = falsingManager;
|
||||
}
|
||||
|
||||
@@ -86,21 +83,18 @@ public class BrightnessSlider extends ViewController<View> implements ToggleSlid
|
||||
return mView;
|
||||
}
|
||||
|
||||
private void enableSlider(boolean enable) {
|
||||
mBrightnessSliderView.enableSlider(enable);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onViewAttached() {
|
||||
mBrightnessSliderView.setOnSeekBarChangeListener(mSeekListener);
|
||||
mBrightnessSliderView.setOnInterceptListener(mOnInterceptListener);
|
||||
mView.setOnSeekBarChangeListener(mSeekListener);
|
||||
mView.setOnInterceptListener(mOnInterceptListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onViewDetached() {
|
||||
mBrightnessSliderView.setOnSeekBarChangeListener(null);
|
||||
mBrightnessSliderView.setOnDispatchTouchEventListener(null);
|
||||
mBrightnessSliderView.setOnInterceptListener(null);
|
||||
mView.setOnSeekBarChangeListener(null);
|
||||
mView.setOnDispatchTouchEventListener(null);
|
||||
mView.setOnInterceptListener(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -109,7 +103,7 @@ public class BrightnessSlider extends ViewController<View> implements ToggleSlid
|
||||
return copyEventToMirror(ev);
|
||||
} else {
|
||||
// We are the mirror, so we have to dispatch the event
|
||||
return mBrightnessSliderView.dispatchTouchEvent(ev);
|
||||
return mView.dispatchTouchEvent(ev);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -122,19 +116,19 @@ public class BrightnessSlider extends ViewController<View> implements ToggleSlid
|
||||
|
||||
@Override
|
||||
public void setEnforcedAdmin(RestrictedLockUtils.EnforcedAdmin admin) {
|
||||
mBrightnessSliderView.setEnforcedAdmin(admin);
|
||||
mView.setEnforcedAdmin(admin);
|
||||
}
|
||||
|
||||
private void setMirror(ToggleSlider toggleSlider) {
|
||||
mMirror = toggleSlider;
|
||||
if (mMirror != null) {
|
||||
mMirror.setMax(mBrightnessSliderView.getMax());
|
||||
mMirror.setValue(mBrightnessSliderView.getValue());
|
||||
mBrightnessSliderView.setOnDispatchTouchEventListener(this::mirrorTouchEvent);
|
||||
mMirror.setMax(mView.getMax());
|
||||
mMirror.setValue(mView.getValue());
|
||||
mView.setOnDispatchTouchEventListener(this::mirrorTouchEvent);
|
||||
} else {
|
||||
// If there's no mirror, we may be the ones dispatching, events but we should not mirror
|
||||
// them
|
||||
mBrightnessSliderView.setOnDispatchTouchEventListener(null);
|
||||
mView.setOnDispatchTouchEventListener(null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -151,7 +145,7 @@ public class BrightnessSlider extends ViewController<View> implements ToggleSlid
|
||||
} else {
|
||||
// If there's no mirror, we may be the ones dispatching, events but we should not mirror
|
||||
// them
|
||||
mBrightnessSliderView.setOnDispatchTouchEventListener(null);
|
||||
mView.setOnDispatchTouchEventListener(null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -162,7 +156,7 @@ public class BrightnessSlider extends ViewController<View> implements ToggleSlid
|
||||
|
||||
@Override
|
||||
public void setMax(int max) {
|
||||
mBrightnessSliderView.setMax(max);
|
||||
mView.setMax(max);
|
||||
if (mMirror != null) {
|
||||
mMirror.setMax(max);
|
||||
}
|
||||
@@ -170,12 +164,12 @@ public class BrightnessSlider extends ViewController<View> implements ToggleSlid
|
||||
|
||||
@Override
|
||||
public int getMax() {
|
||||
return mBrightnessSliderView.getMax();
|
||||
return mView.getMax();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setValue(int value) {
|
||||
mBrightnessSliderView.setValue(value);
|
||||
mView.setValue(value);
|
||||
if (mMirror != null) {
|
||||
mMirror.setValue(value);
|
||||
}
|
||||
@@ -183,7 +177,7 @@ public class BrightnessSlider extends ViewController<View> implements ToggleSlid
|
||||
|
||||
@Override
|
||||
public int getValue() {
|
||||
return mBrightnessSliderView.getValue();
|
||||
return mView.getValue();
|
||||
}
|
||||
|
||||
private final SeekBar.OnSeekBarChangeListener mSeekListener =
|
||||
@@ -205,7 +199,7 @@ public class BrightnessSlider extends ViewController<View> implements ToggleSlid
|
||||
|
||||
if (mMirrorController != null) {
|
||||
mMirrorController.showMirror();
|
||||
mMirrorController.setLocation((View) mBrightnessSliderView.getParent());
|
||||
mMirrorController.setLocationAndSize(mView);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -244,15 +238,9 @@ public class BrightnessSlider extends ViewController<View> implements ToggleSlid
|
||||
*/
|
||||
public BrightnessSlider create(Context context, @Nullable ViewGroup viewRoot) {
|
||||
int layout = getLayout();
|
||||
ViewGroup root = (ViewGroup) LayoutInflater.from(context)
|
||||
BrightnessSliderView root = (BrightnessSliderView) LayoutInflater.from(context)
|
||||
.inflate(layout, viewRoot, false);
|
||||
return fromTree(root);
|
||||
}
|
||||
|
||||
private BrightnessSlider fromTree(ViewGroup root) {
|
||||
BrightnessSliderView v = root.requireViewById(R.id.brightness_slider);
|
||||
|
||||
return new BrightnessSlider(root, v, mFalsingManager);
|
||||
return new BrightnessSlider(root, mFalsingManager);
|
||||
}
|
||||
|
||||
/** Get the layout to inflate based on what slider to use */
|
||||
|
||||
@@ -161,7 +161,7 @@ public class NotificationShadeWindowViewController {
|
||||
mNotificationStackScrollLayoutController = notificationStackScrollLayoutController;
|
||||
|
||||
// This view is not part of the newly inflated expanded status bar.
|
||||
mBrightnessMirror = mView.findViewById(R.id.brightness_mirror);
|
||||
mBrightnessMirror = mView.findViewById(R.id.brightness_mirror_container);
|
||||
}
|
||||
|
||||
/** Inflates the {@link R.layout#status_bar_expanded} layout and sets it up. */
|
||||
@@ -392,7 +392,7 @@ public class NotificationShadeWindowViewController {
|
||||
mView.setOnHierarchyChangeListener(new ViewGroup.OnHierarchyChangeListener() {
|
||||
@Override
|
||||
public void onChildViewAdded(View parent, View child) {
|
||||
if (child.getId() == R.id.brightness_mirror) {
|
||||
if (child.getId() == R.id.brightness_mirror_container) {
|
||||
mBrightnessMirror = child;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,6 @@ package com.android.systemui.statusbar.policy;
|
||||
import android.annotation.NonNull;
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.util.ArraySet;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
@@ -51,6 +50,8 @@ public class BrightnessMirrorController
|
||||
private BrightnessSlider mToggleSliderController;
|
||||
private final int[] mInt2Cache = new int[2];
|
||||
private FrameLayout mBrightnessMirror;
|
||||
private int mBrightnessMirrorBackgroundPadding;
|
||||
private int mLastBrightnessSliderWidth = -1;
|
||||
|
||||
public BrightnessMirrorController(NotificationShadeWindowView statusBarWindow,
|
||||
NotificationPanelViewController notificationPanelViewController,
|
||||
@@ -59,7 +60,7 @@ public class BrightnessMirrorController
|
||||
@NonNull Consumer<Boolean> visibilityCallback) {
|
||||
mStatusBarWindow = statusBarWindow;
|
||||
mToggleSliderFactory = factory;
|
||||
mBrightnessMirror = statusBarWindow.findViewById(R.id.brightness_mirror);
|
||||
mBrightnessMirror = statusBarWindow.findViewById(R.id.brightness_mirror_container);
|
||||
mToggleSliderController = setMirrorLayout();
|
||||
mNotificationPanel = notificationPanelViewController;
|
||||
mDepthController = notificationShadeDepthController;
|
||||
@@ -82,20 +83,32 @@ public class BrightnessMirrorController
|
||||
mDepthController.setBrightnessMirrorVisible(false);
|
||||
}
|
||||
|
||||
public void setLocation(View original) {
|
||||
/**
|
||||
* Set the location and size of the mirror container to match that of the slider in QS
|
||||
* @param original the original view in QS
|
||||
*/
|
||||
public void setLocationAndSize(View original) {
|
||||
original.getLocationInWindow(mInt2Cache);
|
||||
|
||||
// Original is slightly larger than the mirror, so make sure to use the center for the
|
||||
// positioning.
|
||||
int originalX = mInt2Cache[0] + original.getWidth() / 2;
|
||||
int originalY = mInt2Cache[1] + original.getHeight() / 2;
|
||||
int originalX = mInt2Cache[0] - mBrightnessMirrorBackgroundPadding;
|
||||
int originalY = mInt2Cache[1] - mBrightnessMirrorBackgroundPadding;
|
||||
mBrightnessMirror.setTranslationX(0);
|
||||
mBrightnessMirror.setTranslationY(0);
|
||||
mBrightnessMirror.getLocationInWindow(mInt2Cache);
|
||||
int mirrorX = mInt2Cache[0] + mBrightnessMirror.getWidth() / 2;
|
||||
int mirrorY = mInt2Cache[1] + mBrightnessMirror.getHeight() / 2;
|
||||
int mirrorX = mInt2Cache[0];
|
||||
int mirrorY = mInt2Cache[1];
|
||||
mBrightnessMirror.setTranslationX(originalX - mirrorX);
|
||||
mBrightnessMirror.setTranslationY(originalY - mirrorY);
|
||||
|
||||
// Set the brightness mirror container to be the width of the mirror + 2 times the padding
|
||||
int newWidth = original.getMeasuredWidth() + 2 * mBrightnessMirrorBackgroundPadding;
|
||||
if (newWidth != mLastBrightnessSliderWidth) {
|
||||
ViewGroup.LayoutParams lp = mBrightnessMirror.getLayoutParams();
|
||||
lp.width = newWidth;
|
||||
mBrightnessMirror.setLayoutParams(lp);
|
||||
}
|
||||
}
|
||||
|
||||
public ToggleSlider getToggleSlider() {
|
||||
@@ -103,13 +116,15 @@ public class BrightnessMirrorController
|
||||
}
|
||||
|
||||
public void updateResources() {
|
||||
FrameLayout.LayoutParams lp =
|
||||
(FrameLayout.LayoutParams) mBrightnessMirror.getLayoutParams();
|
||||
Resources r = mBrightnessMirror.getResources();
|
||||
lp.width = r.getDimensionPixelSize(R.dimen.qs_panel_width);
|
||||
lp.height = r.getDimensionPixelSize(R.dimen.brightness_mirror_height);
|
||||
lp.gravity = r.getInteger(R.integer.notification_panel_layout_gravity);
|
||||
mBrightnessMirror.setLayoutParams(lp);
|
||||
mBrightnessMirrorBackgroundPadding = r
|
||||
.getDimensionPixelSize(R.dimen.rounded_slider_background_padding);
|
||||
mBrightnessMirror.setPadding(
|
||||
mBrightnessMirrorBackgroundPadding,
|
||||
mBrightnessMirrorBackgroundPadding,
|
||||
mBrightnessMirrorBackgroundPadding,
|
||||
mBrightnessMirrorBackgroundPadding
|
||||
);
|
||||
}
|
||||
|
||||
public void onOverlayChanged() {
|
||||
@@ -124,19 +139,9 @@ public class BrightnessMirrorController
|
||||
Context context = mBrightnessMirror.getContext();
|
||||
BrightnessSlider controller = mToggleSliderFactory.create(context, mBrightnessMirror);
|
||||
controller.init();
|
||||
Drawable mirrorBackground = context.getDrawable(R.drawable.brightness_mirror_background);
|
||||
|
||||
View rootView = controller.getRootView();
|
||||
rootView.setBackground(mirrorBackground);
|
||||
|
||||
ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) rootView.getLayoutParams();
|
||||
lp.height = ViewGroup.LayoutParams.MATCH_PARENT;
|
||||
lp.width = ViewGroup.LayoutParams.MATCH_PARENT;
|
||||
int margin = context.getResources()
|
||||
.getDimensionPixelSize(R.dimen.notification_side_paddings);
|
||||
lp.leftMargin = margin;
|
||||
lp.rightMargin = margin;
|
||||
mBrightnessMirror.addView(rootView, lp);
|
||||
mBrightnessMirror.addView(controller.getRootView(), ViewGroup.LayoutParams.MATCH_PARENT,
|
||||
ViewGroup.LayoutParams.WRAP_CONTENT);
|
||||
|
||||
return controller;
|
||||
}
|
||||
@@ -145,7 +150,7 @@ public class BrightnessMirrorController
|
||||
int index = mStatusBarWindow.indexOfChild(mBrightnessMirror);
|
||||
mStatusBarWindow.removeView(mBrightnessMirror);
|
||||
mBrightnessMirror = (FrameLayout) LayoutInflater.from(mBrightnessMirror.getContext())
|
||||
.inflate(R.layout.brightness_mirror, mStatusBarWindow, false);
|
||||
.inflate(R.layout.brightness_mirror_container, mStatusBarWindow, false);
|
||||
mToggleSliderController = setMirrorLayout();
|
||||
mStatusBarWindow.addView(mBrightnessMirror, index);
|
||||
|
||||
|
||||
@@ -18,8 +18,6 @@ package com.android.systemui.settings.brightness
|
||||
|
||||
import android.testing.AndroidTestingRunner
|
||||
import android.view.MotionEvent
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.SeekBar
|
||||
import androidx.test.filters.SmallTest
|
||||
import com.android.settingslib.RestrictedLockUtils
|
||||
@@ -39,7 +37,6 @@ import org.mockito.ArgumentMatchers.anyBoolean
|
||||
import org.mockito.Captor
|
||||
import org.mockito.Mock
|
||||
import org.mockito.Mockito.isNull
|
||||
import org.mockito.Mockito.mock
|
||||
import org.mockito.Mockito.never
|
||||
import org.mockito.Mockito.notNull
|
||||
import org.mockito.Mockito.verify
|
||||
@@ -50,8 +47,6 @@ import org.mockito.Mockito.`when` as whenever
|
||||
@RunWith(AndroidTestingRunner::class)
|
||||
class BrightnessSliderTest : SysuiTestCase() {
|
||||
|
||||
@Mock
|
||||
private lateinit var rootView: View
|
||||
@Mock
|
||||
private lateinit var brightnessSliderView: BrightnessSliderView
|
||||
@Mock
|
||||
@@ -80,7 +75,7 @@ class BrightnessSliderTest : SysuiTestCase() {
|
||||
whenever(mirrorController.toggleSlider).thenReturn(mirror)
|
||||
whenever(motionEvent.copy()).thenReturn(motionEvent)
|
||||
|
||||
mController = BrightnessSlider(rootView, brightnessSliderView, mFalsingManager)
|
||||
mController = BrightnessSlider(brightnessSliderView, mFalsingManager)
|
||||
mController.init()
|
||||
mController.setOnChangedListener(listener)
|
||||
}
|
||||
@@ -203,9 +198,7 @@ class BrightnessSliderTest : SysuiTestCase() {
|
||||
|
||||
@Test
|
||||
fun testSeekBarTrackingStarted() {
|
||||
val parent = mock(ViewGroup::class.java)
|
||||
whenever(brightnessSliderView.value).thenReturn(42)
|
||||
whenever(brightnessSliderView.parent).thenReturn(parent)
|
||||
|
||||
mController.onViewAttached()
|
||||
mController.setMirrorControllerAndMirror(mirrorController)
|
||||
@@ -215,7 +208,7 @@ class BrightnessSliderTest : SysuiTestCase() {
|
||||
|
||||
verify(listener).onChanged(eq(true), eq(42), eq(false))
|
||||
verify(mirrorController).showMirror()
|
||||
verify(mirrorController).setLocation(parent)
|
||||
verify(mirrorController).setLocationAndSize(brightnessSliderView)
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user