From 207673cdbb536b9bdd9ff7f9ce953c5485d11f5a Mon Sep 17 00:00:00 2001 From: Jeff Brown Date: Tue, 5 Jun 2012 17:47:11 -0700 Subject: Implement new rotation policy. Rotation lock does not override NOSENSOR mode anymore. Centralize the rotation policy settings into a new class shared by the System UI and Settings applications. Add a new setting to specify whether rotation-lock is being hidden because the "auto-rotate screen" option has been toggled in the Accessibility settings panel. Bug: 6523269 Change-Id: I15173280d25bc5d101e89a9c65913aefc53fc33a --- .../layout-sw600dp/status_bar_expanded_header.xml | 75 ---------------------- .../res/layout/status_bar_expanded_header.xml | 9 +++ .../res/layout/system_bar_settings_view.xml | 4 +- .../android/systemui/statusbar/RotationToggle.java | 30 ++++++--- .../statusbar/policy/AutoRotateController.java | 70 ++++++++------------ .../systemui/statusbar/tablet/SettingsView.java | 15 ++++- 6 files changed, 73 insertions(+), 130 deletions(-) delete mode 100644 packages/SystemUI/res/layout-sw600dp/status_bar_expanded_header.xml (limited to 'packages') diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_expanded_header.xml b/packages/SystemUI/res/layout-sw600dp/status_bar_expanded_header.xml deleted file mode 100644 index 9b834d2..0000000 --- a/packages/SystemUI/res/layout-sw600dp/status_bar_expanded_header.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/packages/SystemUI/res/layout/status_bar_expanded_header.xml b/packages/SystemUI/res/layout/status_bar_expanded_header.xml index 893d422..cb4e6a9 100644 --- a/packages/SystemUI/res/layout/status_bar_expanded_header.xml +++ b/packages/SystemUI/res/layout/status_bar_expanded_header.xml @@ -43,6 +43,15 @@ android:textAppearance="@style/TextAppearance.StatusBar.Expanded.Date" /> + + - + diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/RotationToggle.java b/packages/SystemUI/src/com/android/systemui/statusbar/RotationToggle.java index c5a7354..5dd45a4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/RotationToggle.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/RotationToggle.java @@ -6,25 +6,39 @@ import android.widget.CompoundButton; import com.android.systemui.statusbar.policy.AutoRotateController; -public class RotationToggle extends CompoundButton { - AutoRotateController mRotater; +public class RotationToggle extends CompoundButton + implements AutoRotateController.RotationLockCallbacks { + private AutoRotateController mRotater; public RotationToggle(Context context) { super(context); - mRotater = new AutoRotateController(context, this); - setClickable(true); } public RotationToggle(Context context, AttributeSet attrs) { super(context, attrs); - mRotater = new AutoRotateController(context, this); - setClickable(true); } public RotationToggle(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); - mRotater = new AutoRotateController(context, this); - setClickable(true); } + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + mRotater = new AutoRotateController(getContext(), this, this); + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + if (mRotater != null) { + mRotater.release(); + mRotater = null; + } + } + + @Override + public void setRotationLockControlVisibility(boolean show) { + setVisibility(show ? VISIBLE : GONE); + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/AutoRotateController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AutoRotateController.java index 3d63781..109395c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/AutoRotateController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AutoRotateController.java @@ -16,80 +16,60 @@ package com.android.systemui.statusbar.policy; -import android.content.ContentResolver; +import com.android.internal.view.RotationPolicy; + import android.content.Context; -import android.database.ContentObserver; -import android.os.AsyncTask; -import android.os.Handler; -import android.os.RemoteException; -import android.os.ServiceManager; -import android.provider.Settings; -import android.util.Log; -import android.view.IWindowManager; import android.widget.CompoundButton; -public class AutoRotateController implements CompoundButton.OnCheckedChangeListener { - private static final String TAG = "StatusBar.AutoRotateController"; - +public final class AutoRotateController implements CompoundButton.OnCheckedChangeListener { private final Context mContext; private final CompoundButton mCheckbox; + private final RotationLockCallbacks mCallbacks; private boolean mAutoRotation; - private ContentObserver mAccelerometerRotationObserver = new ContentObserver(new Handler()) { + private final RotationPolicy.RotationPolicyListener mRotationPolicyListener = + new RotationPolicy.RotationPolicyListener() { @Override - public void onChange(boolean selfChange) { - updateCheckbox(); + public void onChange() { + updateState(); } }; - public AutoRotateController(Context context, CompoundButton checkbox) { + public AutoRotateController(Context context, CompoundButton checkbox, + RotationLockCallbacks callbacks) { mContext = context; mCheckbox = checkbox; - updateCheckbox(); + mCallbacks = callbacks; + mCheckbox.setOnCheckedChangeListener(this); - mContext.getContentResolver().registerContentObserver( - Settings.System.getUriFor(Settings.System.ACCELEROMETER_ROTATION), true, - mAccelerometerRotationObserver); + RotationPolicy.registerRotationPolicyListener(context, mRotationPolicyListener); + updateState(); } public void onCheckedChanged(CompoundButton view, boolean checked) { if (checked != mAutoRotation) { - setAutoRotation(checked); + mAutoRotation = checked; + RotationPolicy.setRotationLock(mContext, !checked); } } public void release() { - mContext.getContentResolver().unregisterContentObserver(mAccelerometerRotationObserver); + RotationPolicy.unregisterRotationPolicyListener(mContext, + mRotationPolicyListener); } - private void updateCheckbox() { - mAutoRotation = getAutoRotation(); + private void updateState() { + mAutoRotation = !RotationPolicy.isRotationLocked(mContext); mCheckbox.setChecked(mAutoRotation); - } - private boolean getAutoRotation() { - ContentResolver cr = mContext.getContentResolver(); - return 0 != Settings.System.getInt(cr, Settings.System.ACCELEROMETER_ROTATION, 0); + boolean visible = RotationPolicy.isRotationLockToggleVisible(mContext); + mCallbacks.setRotationLockControlVisibility(visible); + mCheckbox.setEnabled(visible); } - private void setAutoRotation(final boolean autorotate) { - mAutoRotation = autorotate; - AsyncTask.execute(new Runnable() { - public void run() { - try { - IWindowManager wm = IWindowManager.Stub.asInterface( - ServiceManager.getService(Context.WINDOW_SERVICE)); - if (autorotate) { - wm.thawRotation(); - } else { - wm.freezeRotation(-1); - } - } catch (RemoteException exc) { - Log.w(TAG, "Unable to save auto-rotate setting"); - } - } - }); + public interface RotationLockCallbacks { + void setRotationLockControlVisibility(boolean show); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/SettingsView.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/SettingsView.java index 46ea940..537ff66 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/SettingsView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/SettingsView.java @@ -43,6 +43,8 @@ public class SettingsView extends LinearLayout implements View.OnClickListener { AutoRotateController mRotate; BrightnessController mBrightness; DoNotDisturbController mDoNotDisturb; + View mRotationLockContainer; + View mRotationLockSeparator; public SettingsView(Context context, AttributeSet attrs) { this(context, attrs, 0); @@ -61,8 +63,19 @@ public class SettingsView extends LinearLayout implements View.OnClickListener { mAirplane = new AirplaneModeController(context, (CompoundButton)findViewById(R.id.airplane_checkbox)); findViewById(R.id.network).setOnClickListener(this); + + mRotationLockContainer = findViewById(R.id.rotate); + mRotationLockSeparator = findViewById(R.id.rotate_separator); mRotate = new AutoRotateController(context, - (CompoundButton)findViewById(R.id.rotate_checkbox)); + (CompoundButton)findViewById(R.id.rotate_checkbox), + new AutoRotateController.RotationLockCallbacks() { + @Override + public void setRotationLockControlVisibility(boolean show) { + mRotationLockContainer.setVisibility(show ? View.VISIBLE : View.GONE); + mRotationLockSeparator.setVisibility(show ? View.VISIBLE : View.GONE); + } + }); + mBrightness = new BrightnessController(context, (ToggleSlider)findViewById(R.id.brightness)); mDoNotDisturb = new DoNotDisturbController(context, -- cgit v1.1