WakeupController.java revision a55e8d795bba5aa66f692cffa8fa28e3b4174546
1a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach/*
2a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * Copyright 2017 The Android Open Source Project
3a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach *
4a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * Licensed under the Apache License, Version 2.0 (the "License");
5a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * you may not use this file except in compliance with the License.
6a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * You may obtain a copy of the License at
7a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach *
8a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach *      http://www.apache.org/licenses/LICENSE-2.0
9a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach *
10a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * Unless required by applicable law or agreed to in writing, software
11a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * distributed under the License is distributed on an "AS IS" BASIS,
12a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * See the License for the specific language governing permissions and
14a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * limitations under the License.
15a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach */
16a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach
17a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachpackage com.android.server.wifi;
18a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach
19a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachimport android.content.Context;
20a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachimport android.database.ContentObserver;
21a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachimport android.os.Handler;
22a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachimport android.os.Looper;
23a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachimport android.provider.Settings;
24a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach
25a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachimport com.android.internal.annotations.VisibleForTesting;
26a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach
27a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach/**
28a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * WakeupController is responsible managing Auto Wifi.
29a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach *
30a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * <p>It determines if and when to re-enable wifi after it has been turned off by the user.
31a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach */
32a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachpublic class WakeupController {
33a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach
34a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach    // TODO(b/69624403) propagate this to Settings
35a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach    private static final boolean USE_PLATFORM_WIFI_WAKE = false;
36a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach
37a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach    private final Context mContext;
38a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach    private final Handler mHandler;
39a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach    private final FrameworkFacade mFrameworkFacade;
40a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach    private final ContentObserver mContentObserver;
41a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach
42a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach    /** Whether this feature is enabled in Settings. */
43a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach    private boolean mWifiWakeupEnabled;
44a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach
45a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach    public WakeupController(
46a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach            Context context,
47a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach            Looper looper,
48a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach            FrameworkFacade frameworkFacade) {
49a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach        mContext = context;
50a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach        mHandler = new Handler(looper);
51a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach        mFrameworkFacade = frameworkFacade;
52a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach        mContentObserver = new ContentObserver(mHandler) {
53a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach            @Override
54a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach            public void onChange(boolean selfChange) {
55a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach                mWifiWakeupEnabled = mFrameworkFacade.getIntegerSetting(
56a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach                                mContext, Settings.Global.WIFI_WAKEUP_ENABLED, 0) == 1;
57a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach            }
58a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach        };
59a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach        mFrameworkFacade.registerContentObserver(mContext, Settings.Global.getUriFor(
60a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach                Settings.Global.WIFI_WAKEUP_ENABLED), true, mContentObserver);
61a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach        mContentObserver.onChange(false /* selfChange */);
62a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach    }
63a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach
64a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach    /**
65a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach     * Whether the feature is enabled in settings.
66a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach     *
67a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach     * <p>Note: This method is only used to determine whether or not to actually enable wifi. All
68a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach     * other aspects of the WakeupController lifecycle operate normally irrespective of this.
69a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach     */
70a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach    @VisibleForTesting
71a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach    boolean isEnabled() {
72a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach        return mWifiWakeupEnabled;
73a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach    }
74a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach}
75