1af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock/* 2af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * Copyright (C) 2010 The Android Open Source Project 3af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * 4af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * Licensed under the Apache License, Version 2.0 (the "License"); 5af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * you may not use this file except in compliance with the License. 6af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * You may obtain a copy of the License at 7af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * 8af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * http://www.apache.org/licenses/LICENSE-2.0 9af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * 10af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * Unless required by applicable law or agreed to in writing, software 11af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * distributed under the License is distributed on an "AS IS" BASIS, 12af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * See the License for the specific language governing permissions and 14af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock * limitations under the License. 15af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock */ 16af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 17af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockpackage com.android.systemui.statusbar.policy; 18af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 19af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.content.Context; 20af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport android.os.UserHandle; 21af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 22af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport com.android.internal.view.RotationPolicy; 23af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 24af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport java.util.concurrent.CopyOnWriteArrayList; 25af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 26af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock/** Platform implementation of the rotation lock controller. **/ 27af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockpublic final class RotationLockControllerImpl implements RotationLockController { 28af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private final Context mContext; 29af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private final CopyOnWriteArrayList<RotationLockControllerCallback> mCallbacks = 30af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock new CopyOnWriteArrayList<RotationLockControllerCallback>(); 31af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 32af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private final RotationPolicy.RotationPolicyListener mRotationPolicyListener = 33af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock new RotationPolicy.RotationPolicyListener() { 34af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock @Override 35af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public void onChange() { 36af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock notifyChanged(); 37af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 38af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock }; 39af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 40af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public RotationLockControllerImpl(Context context) { 41af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mContext = context; 42ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock setListening(true); 43af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 44af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 45af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public void addRotationLockControllerCallback(RotationLockControllerCallback callback) { 46af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mCallbacks.add(callback); 47ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock notifyChanged(callback); 48af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 49af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 50af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public void removeRotationLockControllerCallback(RotationLockControllerCallback callback) { 51af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock mCallbacks.remove(callback); 52af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 53af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 54af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public int getRotationLockOrientation() { 55af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock return RotationPolicy.getRotationLockOrientation(mContext); 56af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 57af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 58af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public boolean isRotationLocked() { 59af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock return RotationPolicy.isRotationLocked(mContext); 60af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 61af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 62af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public void setRotationLocked(boolean locked) { 63af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock RotationPolicy.setRotationLock(mContext, locked); 64af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 65af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 66af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock public boolean isRotationLockAffordanceVisible() { 67af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock return RotationPolicy.isRotationLockToggleVisible(mContext); 68af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 69af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 70af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock @Override 71ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock public void setListening(boolean listening) { 72ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock if (listening) { 73ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock RotationPolicy.registerRotationPolicyListener(mContext, mRotationPolicyListener, 74ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock UserHandle.USER_ALL); 75ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock } else { 76ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock RotationPolicy.unregisterRotationPolicyListener(mContext, mRotationPolicyListener); 77ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock } 78af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 79af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock 80af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock private void notifyChanged() { 81af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock for (RotationLockControllerCallback callback : mCallbacks) { 82ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock notifyChanged(callback); 83af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 84af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock } 85ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock 86ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock private void notifyChanged(RotationLockControllerCallback callback) { 87ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock callback.onRotationLockStateChanged(RotationPolicy.isRotationLocked(mContext), 88ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock RotationPolicy.isRotationLockToggleVisible(mContext)); 89ccb6b9a90f228cc4e31a9442ed28756ff474c080John Spurlock } 90af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock} 91