12b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki/* 22b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki * Copyright (C) 2017 The Android Open Source Project 32b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki * 42b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki * Licensed under the Apache License, Version 2.0 (the "License"); 52b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki * you may not use this file except in compliance with the License. 62b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki * You may obtain a copy of the License at 72b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki * 82b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki * http://www.apache.org/licenses/LICENSE-2.0 92b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki * 102b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki * Unless required by applicable law or agreed to in writing, software 112b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki * distributed under the License is distributed on an "AS IS" BASIS, 122b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki * See the License for the specific language governing permissions and 142b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki * limitations under the License. 152b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki */ 162b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onukipackage com.android.server.power.batterysaver; 172b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki 182b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onukiimport android.content.Context; 1957f0f5513b593c206d8410922a667c8c5f79b2b8Makoto Onukiimport android.os.PowerManager; 202b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onukiimport android.provider.Settings; 212b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onukiimport android.provider.Settings.Global; 222b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onukiimport android.util.Slog; 232b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki 242b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onukiimport com.android.server.power.batterysaver.BatterySaverController.Plugin; 252b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki 262b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onukipublic class BatterySaverLocationPlugin implements Plugin { 272b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki private static final String TAG = "BatterySaverLocationPlugin"; 282b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki 292b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki private static final boolean DEBUG = BatterySaverController.DEBUG; 302b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki 312b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki private final Context mContext; 322b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki 332b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki public BatterySaverLocationPlugin(Context context) { 342b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki mContext = context; 352b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki } 362b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki 372b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki @Override 382b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki public void onBatterySaverChanged(BatterySaverController caller) { 392b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki if (DEBUG) { 402b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki Slog.d(TAG, "onBatterySaverChanged"); 412b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki } 422b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki updateLocationState(caller); 432b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki } 442b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki 452b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki @Override 462b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki public void onSystemReady(BatterySaverController caller) { 472b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki if (DEBUG) { 482b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki Slog.d(TAG, "onSystemReady"); 492b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki } 502b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki updateLocationState(caller); 512b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki } 522b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki 532b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki private void updateLocationState(BatterySaverController caller) { 542b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki final boolean kill = 552b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki (caller.getBatterySaverPolicy().getGpsMode() 5657f0f5513b593c206d8410922a667c8c5f79b2b8Makoto Onuki == PowerManager.LOCATION_MODE_ALL_DISABLED_WHEN_SCREEN_OFF) && 572b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki caller.isEnabled() && !caller.isInteractive(); 582b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki 592b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki if (DEBUG) { 602b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki Slog.d(TAG, "Battery saver " + (kill ? "stopping" : "restoring") + " location."); 612b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki } 622b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki Settings.Global.putInt(mContext.getContentResolver(), 632b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki Global.LOCATION_GLOBAL_KILL_SWITCH, kill ? 1 : 0); 642b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki } 652b186fa2142087cb3bb5d5996febe66b2aaf7aa3Makoto Onuki} 66