Home | History | Annotate | Download | only in display
      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