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