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