Home | History | Annotate | Download | only in location
      1 /*
      2  * Copyright (C) 2013 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.settings.location;
     18 
     19 import android.preference.PreferenceScreen;
     20 import android.provider.Settings;
     21 
     22 import com.android.settings.R;
     23 
     24 /**
     25  * A page with 3 radio buttons to choose the location mode.
     26  *
     27  * There are 3 location modes when location access is enabled:
     28  *
     29  * High accuracy: use both GPS and network location.
     30  *
     31  * Battery saving: use network location only to reduce the power consumption.
     32  *
     33  * Sensors only: use GPS location only.
     34  */
     35 public class LocationMode extends LocationSettingsBase
     36         implements RadioButtonPreference.OnClickListener {
     37     private static final String KEY_HIGH_ACCURACY = "high_accuracy";
     38     private RadioButtonPreference mHighAccuracy;
     39     private static final String KEY_BATTERY_SAVING = "battery_saving";
     40     private RadioButtonPreference mBatterySaving;
     41     private static final String KEY_SENSORS_ONLY = "sensors_only";
     42     private RadioButtonPreference mSensorsOnly;
     43 
     44     @Override
     45     public void onResume() {
     46         super.onResume();
     47         createPreferenceHierarchy();
     48     }
     49 
     50     @Override
     51     public void onPause() {
     52         super.onPause();
     53     }
     54 
     55     private PreferenceScreen createPreferenceHierarchy() {
     56         PreferenceScreen root = getPreferenceScreen();
     57         if (root != null) {
     58             root.removeAll();
     59         }
     60         addPreferencesFromResource(R.xml.location_mode);
     61         root = getPreferenceScreen();
     62 
     63         mHighAccuracy = (RadioButtonPreference) root.findPreference(KEY_HIGH_ACCURACY);
     64         mBatterySaving = (RadioButtonPreference) root.findPreference(KEY_BATTERY_SAVING);
     65         mSensorsOnly = (RadioButtonPreference) root.findPreference(KEY_SENSORS_ONLY);
     66         mHighAccuracy.setOnClickListener(this);
     67         mBatterySaving.setOnClickListener(this);
     68         mSensorsOnly.setOnClickListener(this);
     69 
     70         refreshLocationMode();
     71         return root;
     72     }
     73 
     74     private void updateRadioButtons(RadioButtonPreference activated) {
     75         if (activated == null) {
     76             mHighAccuracy.setChecked(false);
     77             mBatterySaving.setChecked(false);
     78             mSensorsOnly.setChecked(false);
     79         } else if (activated == mHighAccuracy) {
     80             mHighAccuracy.setChecked(true);
     81             mBatterySaving.setChecked(false);
     82             mSensorsOnly.setChecked(false);
     83         } else if (activated == mBatterySaving) {
     84             mHighAccuracy.setChecked(false);
     85             mBatterySaving.setChecked(true);
     86             mSensorsOnly.setChecked(false);
     87         } else if (activated == mSensorsOnly) {
     88             mHighAccuracy.setChecked(false);
     89             mBatterySaving.setChecked(false);
     90             mSensorsOnly.setChecked(true);
     91         }
     92     }
     93 
     94     @Override
     95     public void onRadioButtonClicked(RadioButtonPreference emiter) {
     96         int mode = Settings.Secure.LOCATION_MODE_OFF;
     97         if (emiter == mHighAccuracy) {
     98             mode = Settings.Secure.LOCATION_MODE_HIGH_ACCURACY;
     99         } else if (emiter == mBatterySaving) {
    100             mode = Settings.Secure.LOCATION_MODE_BATTERY_SAVING;
    101         } else if (emiter == mSensorsOnly) {
    102             mode = Settings.Secure.LOCATION_MODE_SENSORS_ONLY;
    103         }
    104         setLocationMode(mode);
    105     }
    106 
    107     @Override
    108     public void onModeChanged(int mode, boolean restricted) {
    109         switch (mode) {
    110             case Settings.Secure.LOCATION_MODE_OFF:
    111                 updateRadioButtons(null);
    112                 break;
    113             case Settings.Secure.LOCATION_MODE_SENSORS_ONLY:
    114                 updateRadioButtons(mSensorsOnly);
    115                 break;
    116             case Settings.Secure.LOCATION_MODE_BATTERY_SAVING:
    117                 updateRadioButtons(mBatterySaving);
    118                 break;
    119             case Settings.Secure.LOCATION_MODE_HIGH_ACCURACY:
    120                 updateRadioButtons(mHighAccuracy);
    121                 break;
    122             default:
    123                 break;
    124         }
    125 
    126         boolean enabled = (mode != Settings.Secure.LOCATION_MODE_OFF) && !restricted;
    127         mHighAccuracy.setEnabled(enabled);
    128         mBatterySaving.setEnabled(enabled);
    129         mSensorsOnly.setEnabled(enabled);
    130     }
    131 
    132     @Override
    133     public int getHelpResource() {
    134         return R.string.help_url_location_access;
    135     }
    136 }
    137