• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
AutoRotatePreferenceController(Context context, String key)38     public AutoRotatePreferenceController(Context context, String key) {
39         super(context, key);
40         mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
41     }
42 
43     @Override
updateState(Preference preference)44     public void updateState(Preference preference) {
45         mPreference = preference;
46         super.updateState(preference);
47     }
48 
49     @Override
onResume()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
onPause()66     public void onPause() {
67         if (mRotationPolicyListener != null) {
68             RotationPolicy.unregisterRotationPolicyListener(mContext, mRotationPolicyListener);
69         }
70     }
71 
72     @Override
getAvailabilityStatus()73     public int getAvailabilityStatus() {
74         return RotationPolicy.isRotationLockToggleVisible(mContext)
75                 ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
76     }
77 
78     @Override
isSliceable()79     public boolean isSliceable() {
80         return TextUtils.equals(getPreferenceKey(), "auto_rotate");
81     }
82 
83     @Override
isChecked()84     public boolean isChecked() {
85         return !RotationPolicy.isRotationLocked(mContext);
86     }
87 
88     @Override
setChecked(boolean isChecked)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