summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/location
diff options
context:
space:
mode:
authorJorge Ruesga <jorge@ruesga.com>2013-10-06 00:45:02 +0200
committerAdnan Begovic <adnan@cyngn.com>2015-10-29 17:36:31 -0700
commit14c91238695b94d3bdff6404e3b791fb00a4375f (patch)
tree3b636ed96d51d6506bd35f889d0b14a67a579933 /src/com/android/settings/location
parent5a0870b86f0ea1c6b327f9b7c42fd5c3e4b3b2d7 (diff)
downloadpackages_apps_Settings-14c91238695b94d3bdff6404e3b791fb00a4375f.zip
packages_apps_Settings-14c91238695b94d3bdff6404e3b791fb00a4375f.tar.gz
packages_apps_Settings-14c91238695b94d3bdff6404e3b791fb00a4375f.tar.bz2
Settings: Long Term Orbits (LTO)
Change-Id: I1fbdba644fc05d55fc096b47bfac3f9903383370 Signed-off-by: Jorge Ruesga <jorge@ruesga.com>
Diffstat (limited to 'src/com/android/settings/location')
-rw-r--r--src/com/android/settings/location/LocationSettings.java96
1 files changed, 95 insertions, 1 deletions
diff --git a/src/com/android/settings/location/LocationSettings.java b/src/com/android/settings/location/LocationSettings.java
index b78cd31..d3f0ac8 100644
--- a/src/com/android/settings/location/LocationSettings.java
+++ b/src/com/android/settings/location/LocationSettings.java
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2011 The Android Open Source Project
+ * Copyright (C) 2015 The CyanogenMod Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,10 +17,17 @@
package com.android.settings.location;
+import static android.hardware.CmHardwareManager.FEATURE_LONG_TERM_ORBITS;
+
+import android.app.AlarmManager;
+import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.content.SharedPreferences;
+import android.content.pm.PackageManager;
+import android.hardware.CmHardwareManager;
import android.location.SettingInjectorService;
import android.os.Bundle;
import android.os.UserHandle;
@@ -27,7 +35,10 @@ import android.os.UserManager;
import android.preference.Preference;
import android.preference.PreferenceCategory;
import android.preference.PreferenceGroup;
+import android.preference.PreferenceManager;
import android.preference.PreferenceScreen;
+import android.preference.SwitchPreference;
+import android.preference.Preference.OnPreferenceChangeListener;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
@@ -37,6 +48,7 @@ import com.android.internal.logging.MetricsLogger;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.Utils;
+import com.android.settings.cyanogenmod.LtoService;
import com.android.settings.widget.SwitchBar;
import java.util.Collections;
@@ -69,7 +81,7 @@ import java.util.List;
* implementation.
*/
public class LocationSettings extends LocationSettingsBase
- implements SwitchBar.OnSwitchChangeListener {
+ implements SwitchBar.OnSwitchChangeListener, OnPreferenceChangeListener {
private static final String TAG = "LocationSettings";
@@ -93,12 +105,16 @@ public class LocationSettings extends LocationSettingsBase
private static final int MENU_SCANNING = Menu.FIRST;
+ /** Key for preference LTO over Wi-Fi only */
+ public static final String KEY_LTO_DOWNLOAD_DATA_WIFI_ONLY = "lto_download_data_wifi_only";
+
private SwitchBar mSwitchBar;
private Switch mSwitch;
private boolean mValidListener = false;
private UserHandle mManagedProfile;
private Preference mManagedProfilePreference;
private Preference mLocationMode;
+ private SwitchPreference mLtoDownloadDataWifiOnly;
private PreferenceCategory mCategoryRecentLocationRequests;
/** Receives UPDATE_INTENT */
private BroadcastReceiver mReceiver;
@@ -191,6 +207,17 @@ public class LocationSettings extends LocationSettingsBase
}
});
+ mLtoDownloadDataWifiOnly =
+ (SwitchPreference) root.findPreference(KEY_LTO_DOWNLOAD_DATA_WIFI_ONLY);
+ if (mLtoDownloadDataWifiOnly != null) {
+ if (!isLtoSupported(activity) || !checkGpsDownloadWiFiOnly(activity)) {
+ root.removePreference(mLtoDownloadDataWifiOnly);
+ mLtoDownloadDataWifiOnly = null;
+ } else {
+ mLtoDownloadDataWifiOnly.setOnPreferenceChangeListener(this);
+ }
+ }
+
mCategoryRecentLocationRequests =
(PreferenceCategory) root.findPreference(KEY_RECENT_LOCATION_REQUESTS);
RecentLocationApps recentApps = new RecentLocationApps(activity);
@@ -334,6 +361,9 @@ public class LocationSettings extends LocationSettingsBase
// Disable the whole switch bar instead of the switch itself. If we disabled the switch
// only, it would be re-enabled again if the switch bar is not disabled.
mSwitchBar.setEnabled(!restricted);
+ if (mLtoDownloadDataWifiOnly != null) {
+ mLtoDownloadDataWifiOnly.setEnabled(enabled && !restricted);
+ }
mLocationMode.setEnabled(enabled && !restricted);
mCategoryRecentLocationRequests.setEnabled(enabled);
@@ -377,4 +407,68 @@ public class LocationSettings extends LocationSettingsBase
setLocationMode(android.provider.Settings.Secure.LOCATION_MODE_OFF);
}
}
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ if (mLtoDownloadDataWifiOnly != null && preference.equals(mLtoDownloadDataWifiOnly)) {
+ updateLtoServiceStatus(getActivity(), isLocationModeEnabled(getActivity()));
+ }
+ return true;
+ }
+
+ private static void updateLtoServiceStatus(Context context, boolean start) {
+ Intent intent = new Intent(context, LtoService.class);
+ if (start) {
+ context.startService(intent);
+ } else {
+ context.stopService(intent);
+ }
+ }
+
+ private static boolean checkGpsDownloadWiFiOnly(Context context) {
+ PackageManager pm = context.getPackageManager();
+ boolean supportsTelephony = pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY);
+ boolean supportsWifi = pm.hasSystemFeature(PackageManager.FEATURE_WIFI);
+ if (!supportsWifi || !supportsTelephony) {
+ SharedPreferences.Editor editor =
+ PreferenceManager.getDefaultSharedPreferences(context).edit();
+ editor.putBoolean(KEY_LTO_DOWNLOAD_DATA_WIFI_ONLY, supportsWifi);
+ editor.apply();
+ return false;
+ }
+ return true;
+ }
+
+ public static boolean isLocationModeEnabled(Context context) {
+ int mode = android.provider.Settings.Secure.getInt(context.getContentResolver(),
+ android.provider.Settings.Secure.LOCATION_MODE,
+ android.provider.Settings.Secure.LOCATION_MODE_OFF);
+ return (mode != android.provider.Settings.Secure.LOCATION_MODE_OFF);
+ }
+
+ /**
+ * Restore the properties associated with this preference on boot
+ * @param ctx A valid context
+ */
+ public static void restore(final Context context) {
+ if (isLtoSupported(context) && isLocationModeEnabled(context)) {
+ // Check and adjust the value for Gps download data on wifi only
+ checkGpsDownloadWiFiOnly(context);
+
+ // Starts the LtoService, but delayed 2 minutes after boot (this should give a
+ // proper time to start all device services)
+ AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
+ Intent intent = new Intent(context, LtoService.class);
+ PendingIntent pi = PendingIntent.getService(context, 0, intent,
+ PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_ONE_SHOT);
+ long nextLtoDownload = System.currentTimeMillis() + (1000 * 60 * 2L);
+ am.set(AlarmManager.RTC, nextLtoDownload, pi);
+ }
+ }
+
+ private static boolean isLtoSupported(Context context) {
+ final CmHardwareManager hwManager =
+ (CmHardwareManager) context.getSystemService(Context.CMHW_SERVICE);
+ return hwManager != null && hwManager.isSupported(FEATURE_LONG_TERM_ORBITS);
+ }
}