sysui: refactor for extensibility.
1. Refactor the interfaces of the slider out side the ToggleSlider class.
2. BrightnessController now takes in only an IToggleSlider interface instead of
the view.
Bug: 28172423
Change-Id: Iff463a30e149f17795ccaffca66040d64f44a643
(cherry picked from commit 89c0cb853175c66769d287b8d6cf82c7166e0e6e)
diff --git a/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml b/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml
index 5fde4f6..79a5e2f 100644
--- a/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml
+++ b/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml
@@ -30,7 +30,7 @@
android:contentDescription="@null"
android:visibility="gone" />
- <com.android.systemui.settings.ToggleSlider
+ <com.android.systemui.settings.ToggleSliderView
android:id="@+id/brightness_slider"
android:layout_width="0dp"
android:layout_height="wrap_content"
diff --git a/packages/SystemUI/res/values/attrs.xml b/packages/SystemUI/res/values/attrs.xml
index 1543360..41017e8 100644
--- a/packages/SystemUI/res/values/attrs.xml
+++ b/packages/SystemUI/res/values/attrs.xml
@@ -22,7 +22,7 @@
<attr name="keyRepeat" format="boolean" />
<attr name="android:contentDescription" />
</declare-styleable>
- <declare-styleable name="ToggleSlider">
+ <declare-styleable name="ToggleSliderView">
<attr name="text" format="string" />
</declare-styleable>
<declare-styleable name="NotificationLinearLayout">
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
index 05090c3..221da4e 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
@@ -35,7 +35,7 @@
import com.android.systemui.qs.customize.QSCustomizer;
import com.android.systemui.qs.external.CustomTile;
import com.android.systemui.settings.BrightnessController;
-import com.android.systemui.settings.ToggleSlider;
+import com.android.systemui.settings.ToggleSliderView;
import com.android.systemui.statusbar.phone.QSTileHost;
import com.android.systemui.statusbar.policy.BrightnessMirrorController;
import com.android.systemui.tuner.TunerService;
@@ -94,7 +94,7 @@
mBrightnessController = new BrightnessController(getContext(),
(ImageView) findViewById(R.id.brightness_icon),
- (ToggleSlider) findViewById(R.id.brightness_slider));
+ (ToggleSliderView) findViewById(R.id.brightness_slider));
}
@@ -158,8 +158,9 @@
public void setBrightnessMirror(BrightnessMirrorController c) {
super.onFinishInflate();
- ToggleSlider brightnessSlider = (ToggleSlider) findViewById(R.id.brightness_slider);
- ToggleSlider mirror = (ToggleSlider) c.getMirror().findViewById(R.id.brightness_slider);
+ ToggleSliderView brightnessSlider = (ToggleSliderView) findViewById(R.id.brightness_slider);
+ ToggleSliderView mirror = (ToggleSliderView) c.getMirror().findViewById(
+ R.id.brightness_slider);
brightnessSlider.setMirror(mirror);
brightnessSlider.setMirrorController(c);
}
diff --git a/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java b/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
index d5131be..a89fdbd 100644
--- a/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
+++ b/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
@@ -198,8 +198,8 @@
}
@Override
- public void onChanged(ToggleSlider view, boolean tracking, boolean automatic, int value,
- boolean stopTracking) {
+ public void onChanged(ToggleSlider toggleSlider, boolean tracking, boolean automatic,
+ int value, boolean stopTracking) {
updateIcon(mAutomatic);
if (mExternalChange) return;
diff --git a/packages/SystemUI/src/com/android/systemui/settings/BrightnessDialog.java b/packages/SystemUI/src/com/android/systemui/settings/BrightnessDialog.java
index 4952234..803fe48 100644
--- a/packages/SystemUI/src/com/android/systemui/settings/BrightnessDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/settings/BrightnessDialog.java
@@ -46,7 +46,7 @@
setContentView(R.layout.quick_settings_brightness_dialog);
final ImageView icon = (ImageView) findViewById(R.id.brightness_icon);
- final ToggleSlider slider = (ToggleSlider) findViewById(R.id.brightness_slider);
+ final ToggleSliderView slider = (ToggleSliderView) findViewById(R.id.brightness_slider);
mBrightnessController = new BrightnessController(this, icon, slider);
}
diff --git a/packages/SystemUI/src/com/android/systemui/settings/ToggleSlider.java b/packages/SystemUI/src/com/android/systemui/settings/ToggleSlider.java
index b263707..62abf3d 100644
--- a/packages/SystemUI/src/com/android/systemui/settings/ToggleSlider.java
+++ b/packages/SystemUI/src/com/android/systemui/settings/ToggleSlider.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2013 The Android Open Source Project
+ * Copyright (C) 2016 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.
@@ -11,187 +11,21 @@
* 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.
+ * limitations under the License
*/
package com.android.systemui.settings;
-import android.content.Context;
-import android.content.res.Resources;
-import android.content.res.TypedArray;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-import android.view.View;
-import android.widget.CompoundButton;
-import android.widget.CompoundButton.OnCheckedChangeListener;
-import android.widget.RelativeLayout;
-import android.widget.SeekBar;
-import android.widget.SeekBar.OnSeekBarChangeListener;
-import android.widget.TextView;
-
-import com.android.systemui.R;
-import com.android.systemui.statusbar.policy.BrightnessMirrorController;
-
-public class ToggleSlider extends RelativeLayout {
- public interface Listener {
- public void onInit(ToggleSlider v);
- public void onChanged(ToggleSlider v, boolean tracking, boolean checked, int value,
- boolean stopTracking);
+public interface ToggleSlider {
+ interface Listener {
+ void onInit(ToggleSlider control);
+ void onChanged(ToggleSlider slider, boolean tracking, boolean automatic, int value,
+ boolean stopTracking);
}
- private Listener mListener;
- private boolean mTracking;
-
- private CompoundButton mToggle;
- private ToggleSeekBar mSlider;
- private TextView mLabel;
-
- private ToggleSlider mMirror;
- private BrightnessMirrorController mMirrorController;
-
- public ToggleSlider(Context context) {
- this(context, null);
- }
-
- public ToggleSlider(Context context, AttributeSet attrs) {
- this(context, attrs, 0);
- }
-
- public ToggleSlider(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
-
- View.inflate(context, R.layout.status_bar_toggle_slider, this);
-
- final Resources res = context.getResources();
- final TypedArray a = context.obtainStyledAttributes(
- attrs, R.styleable.ToggleSlider, defStyle, 0);
-
- mToggle = (CompoundButton) findViewById(R.id.toggle);
- mToggle.setOnCheckedChangeListener(mCheckListener);
-
- mSlider = (ToggleSeekBar) findViewById(R.id.slider);
- mSlider.setOnSeekBarChangeListener(mSeekListener);
-
- mLabel = (TextView) findViewById(R.id.label);
- mLabel.setText(a.getString(R.styleable.ToggleSlider_text));
-
- mSlider.setAccessibilityLabel(getContentDescription().toString());
-
- a.recycle();
- }
-
- public void setMirror(ToggleSlider toggleSlider) {
- mMirror = toggleSlider;
- if (mMirror != null) {
- mMirror.setChecked(mToggle.isChecked());
- mMirror.setMax(mSlider.getMax());
- mMirror.setValue(mSlider.getProgress());
- }
- }
-
- public void setMirrorController(BrightnessMirrorController c) {
- mMirrorController = c;
- }
-
- @Override
- protected void onAttachedToWindow() {
- super.onAttachedToWindow();
- if (mListener != null) {
- mListener.onInit(this);
- }
- }
-
- public void setOnChangedListener(Listener l) {
- mListener = l;
- }
-
- public void setChecked(boolean checked) {
- mToggle.setChecked(checked);
- }
-
- public boolean isChecked() {
- return mToggle.isChecked();
- }
-
- public void setMax(int max) {
- mSlider.setMax(max);
- if (mMirror != null) {
- mMirror.setMax(max);
- }
- }
-
- public void setValue(int value) {
- mSlider.setProgress(value);
- if (mMirror != null) {
- mMirror.setValue(value);
- }
- }
-
- @Override
- public boolean dispatchTouchEvent(MotionEvent ev) {
- if (mMirror != null) {
- MotionEvent copy = ev.copy();
- mMirror.dispatchTouchEvent(copy);
- copy.recycle();
- }
- return super.dispatchTouchEvent(ev);
- }
-
- private final OnCheckedChangeListener mCheckListener = new OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(CompoundButton toggle, boolean checked) {
- mSlider.setEnabled(!checked);
-
- if (mListener != null) {
- mListener.onChanged(
- ToggleSlider.this, mTracking, checked, mSlider.getProgress(), false);
- }
-
- if (mMirror != null) {
- mMirror.mToggle.setChecked(checked);
- }
- }
- };
-
- private final OnSeekBarChangeListener mSeekListener = new OnSeekBarChangeListener() {
- @Override
- public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
- if (mListener != null) {
- mListener.onChanged(
- ToggleSlider.this, mTracking, mToggle.isChecked(), progress, false);
- }
- }
-
- @Override
- public void onStartTrackingTouch(SeekBar seekBar) {
- mTracking = true;
-
- if (mListener != null) {
- mListener.onChanged(ToggleSlider.this, mTracking, mToggle.isChecked(),
- mSlider.getProgress(), false);
- }
-
- mToggle.setChecked(false);
-
- if (mMirrorController != null) {
- mMirrorController.showMirror();
- mMirrorController.setLocation((View) getParent());
- }
- }
-
- @Override
- public void onStopTrackingTouch(SeekBar seekBar) {
- mTracking = false;
-
- if (mListener != null) {
- mListener.onChanged(ToggleSlider.this, mTracking, mToggle.isChecked(),
- mSlider.getProgress(), true);
- }
-
- if (mMirrorController != null) {
- mMirrorController.hideMirror();
- }
- }
- };
+ void setOnChangedListener(Listener l);
+ default void setChecked(boolean checked) {}
+ default boolean isChecked() { return false; }
+ void setMax(int max);
+ void setValue(int value);
}
-
diff --git a/packages/SystemUI/src/com/android/systemui/settings/ToggleSliderView.java b/packages/SystemUI/src/com/android/systemui/settings/ToggleSliderView.java
new file mode 100644
index 0000000..afe89ec
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/settings/ToggleSliderView.java
@@ -0,0 +1,195 @@
+/*
+ * Copyright (C) 2013 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.settings;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.View;
+import android.widget.CompoundButton;
+import android.widget.CompoundButton.OnCheckedChangeListener;
+import android.widget.RelativeLayout;
+import android.widget.SeekBar;
+import android.widget.SeekBar.OnSeekBarChangeListener;
+import android.widget.TextView;
+
+import com.android.systemui.R;
+import com.android.systemui.statusbar.policy.BrightnessMirrorController;
+
+public class ToggleSliderView extends RelativeLayout implements ToggleSlider {
+ private Listener mListener;
+ private boolean mTracking;
+
+ private CompoundButton mToggle;
+ private ToggleSeekBar mSlider;
+ private TextView mLabel;
+
+ private ToggleSliderView mMirror;
+ private BrightnessMirrorController mMirrorController;
+
+ public ToggleSliderView(Context context) {
+ this(context, null);
+ }
+
+ public ToggleSliderView(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public ToggleSliderView(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+
+ View.inflate(context, R.layout.status_bar_toggle_slider, this);
+
+ final Resources res = context.getResources();
+ final TypedArray a = context.obtainStyledAttributes(
+ attrs, R.styleable.ToggleSliderView, defStyle, 0);
+
+ mToggle = (CompoundButton) findViewById(R.id.toggle);
+ mToggle.setOnCheckedChangeListener(mCheckListener);
+
+ mSlider = (ToggleSeekBar) findViewById(R.id.slider);
+ mSlider.setOnSeekBarChangeListener(mSeekListener);
+
+ mLabel = (TextView) findViewById(R.id.label);
+ mLabel.setText(a.getString(R.styleable.ToggleSliderView_text));
+
+ mSlider.setAccessibilityLabel(getContentDescription().toString());
+
+ a.recycle();
+ }
+
+ public void setMirror(ToggleSliderView toggleSlider) {
+ mMirror = toggleSlider;
+ if (mMirror != null) {
+ mMirror.setChecked(mToggle.isChecked());
+ mMirror.setMax(mSlider.getMax());
+ mMirror.setValue(mSlider.getProgress());
+ }
+ }
+
+ public void setMirrorController(BrightnessMirrorController c) {
+ mMirrorController = c;
+ }
+
+ @Override
+ protected void onAttachedToWindow() {
+ super.onAttachedToWindow();
+ if (mListener != null) {
+ mListener.onInit(this);
+ }
+ }
+
+ public void setOnChangedListener(Listener l) {
+ mListener = l;
+ }
+
+ @Override
+ public void setChecked(boolean checked) {
+ mToggle.setChecked(checked);
+ }
+
+ @Override
+ public boolean isChecked() {
+ return mToggle.isChecked();
+ }
+
+ @Override
+ public void setMax(int max) {
+ mSlider.setMax(max);
+ if (mMirror != null) {
+ mMirror.setMax(max);
+ }
+ }
+
+ @Override
+ public void setValue(int value) {
+ mSlider.setProgress(value);
+ if (mMirror != null) {
+ mMirror.setValue(value);
+ }
+ }
+
+ @Override
+ public boolean dispatchTouchEvent(MotionEvent ev) {
+ if (mMirror != null) {
+ MotionEvent copy = ev.copy();
+ mMirror.dispatchTouchEvent(copy);
+ copy.recycle();
+ }
+ return super.dispatchTouchEvent(ev);
+ }
+
+ private final OnCheckedChangeListener mCheckListener = new OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton toggle, boolean checked) {
+ mSlider.setEnabled(!checked);
+
+ if (mListener != null) {
+ mListener.onChanged(
+ ToggleSliderView.this, mTracking, checked, mSlider.getProgress(), false);
+ }
+
+ if (mMirror != null) {
+ mMirror.mToggle.setChecked(checked);
+ }
+ }
+ };
+
+ private final OnSeekBarChangeListener mSeekListener = new OnSeekBarChangeListener() {
+ @Override
+ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+ if (mListener != null) {
+ mListener.onChanged(
+ ToggleSliderView.this, mTracking, mToggle.isChecked(), progress, false);
+ }
+ }
+
+ @Override
+ public void onStartTrackingTouch(SeekBar seekBar) {
+ mTracking = true;
+
+ if (mListener != null) {
+ mListener.onChanged(ToggleSliderView.this, mTracking, mToggle.isChecked(),
+ mSlider.getProgress(), false);
+ }
+
+ mToggle.setChecked(false);
+
+ if (mMirrorController != null) {
+ mMirrorController.showMirror();
+ mMirrorController.setLocation((View) getParent());
+ }
+ }
+
+ @Override
+ public void onStopTrackingTouch(SeekBar seekBar) {
+ mTracking = false;
+
+ if (mListener != null) {
+ mListener.onChanged(ToggleSliderView.this, mTracking, mToggle.isChecked(),
+ mSlider.getProgress(), true);
+ }
+
+ if (mMirrorController != null) {
+ mMirrorController.hideMirror();
+ }
+ }
+ };
+}
+