1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file 5 * except in compliance with the License. You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software distributed under the 10 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 11 * KIND, either express or implied. See the License for the specific language governing 12 * permissions and limitations under the License. 13 */ 14 package com.android.settings.display; 15 16 import android.content.Context; 17 import android.support.v7.preference.Preference; 18 import android.text.TextUtils; 19 20 import com.android.internal.logging.nano.MetricsProto; 21 import com.android.internal.view.RotationPolicy; 22 import com.android.settings.core.PreferenceControllerMixin; 23 import com.android.settings.core.TogglePreferenceController; 24 import com.android.settings.overlay.FeatureFactory; 25 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; 26 import com.android.settingslib.core.lifecycle.LifecycleObserver; 27 import com.android.settingslib.core.lifecycle.events.OnPause; 28 import com.android.settingslib.core.lifecycle.events.OnResume; 29 30 public class AutoRotatePreferenceController extends TogglePreferenceController implements 31 PreferenceControllerMixin, Preference.OnPreferenceChangeListener, LifecycleObserver, 32 OnResume, OnPause { 33 34 private final MetricsFeatureProvider mMetricsFeatureProvider; 35 private Preference mPreference; 36 private RotationPolicy.RotationPolicyListener mRotationPolicyListener; 37 38 public AutoRotatePreferenceController(Context context, String key) { 39 super(context, key); 40 mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider(); 41 } 42 43 @Override 44 public void updateState(Preference preference) { 45 mPreference = preference; 46 super.updateState(preference); 47 } 48 49 @Override 50 public void onResume() { 51 if (mRotationPolicyListener == null) { 52 mRotationPolicyListener = new RotationPolicy.RotationPolicyListener() { 53 @Override 54 public void onChange() { 55 if (mPreference != null) { 56 updateState(mPreference); 57 } 58 } 59 }; 60 } 61 RotationPolicy.registerRotationPolicyListener(mContext, 62 mRotationPolicyListener); 63 } 64 65 @Override 66 public void onPause() { 67 if (mRotationPolicyListener != null) { 68 RotationPolicy.unregisterRotationPolicyListener(mContext, mRotationPolicyListener); 69 } 70 } 71 72 @Override 73 public int getAvailabilityStatus() { 74 return RotationPolicy.isRotationLockToggleVisible(mContext) 75 ? AVAILABLE : UNSUPPORTED_ON_DEVICE; 76 } 77 78 @Override 79 public boolean isSliceable() { 80 return TextUtils.equals(getPreferenceKey(), "auto_rotate"); 81 } 82 83 @Override 84 public boolean isChecked() { 85 return !RotationPolicy.isRotationLocked(mContext); 86 } 87 88 @Override 89 public boolean setChecked(boolean isChecked) { 90 final boolean isLocked = !isChecked; 91 mMetricsFeatureProvider.action(mContext, MetricsProto.MetricsEvent.ACTION_ROTATION_LOCK, 92 isLocked); 93 RotationPolicy.setRotationLock(mContext, isLocked); 94 return true; 95 } 96 } 97