blob: a7ea50e5e6ddf2bbf7c09b5a5bf18fa5760770e7 [file] [log] [blame]
/*
* Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.systemui.qs.tiles.dialog;
import static android.net.wifi.WifiManager.EXTRA_WIFI_STATE;
import static android.net.wifi.WifiManager.WIFI_STATE_CHANGED_ACTION;
import static android.net.wifi.WifiManager.WIFI_STATE_DISABLED;
import static android.net.wifi.WifiManager.WIFI_STATE_DISABLING;
import static android.net.wifi.WifiManager.WIFI_STATE_ENABLED;
import static android.net.wifi.WifiManager.WIFI_STATE_ENABLING;
import static android.net.wifi.WifiManager.WIFI_STATE_UNKNOWN;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.wifi.WifiManager;
import android.util.Log;
import androidx.annotation.AnyThread;
import androidx.annotation.Nullable;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.util.concurrency.DelayableExecutor;
import javax.inject.Inject;
/**
* Worker for the Wi-Fi enabled state cache.
*/
@SysUISingleton
public class WifiStateWorker extends BroadcastReceiver {
private static final String TAG = "WifiStateWorker";
private DelayableExecutor mBackgroundExecutor;
private WifiManager mWifiManager;
private int mWifiState = WIFI_STATE_DISABLED;
@Inject
public WifiStateWorker(
BroadcastDispatcher broadcastDispatcher,
@Background DelayableExecutor backgroundExecutor,
@Nullable WifiManager wifiManager) {
mWifiManager = wifiManager;
mBackgroundExecutor = backgroundExecutor;
broadcastDispatcher.registerReceiver(this, new IntentFilter(WIFI_STATE_CHANGED_ACTION));
mBackgroundExecutor.execute(() -> {
if (mWifiManager == null) return;
mWifiState = mWifiManager.getWifiState();
Log.i(TAG, "WifiManager.getWifiState():" + mWifiState);
});
}
/**
* Enable or disable Wi-Fi.
*
* @param enabled {@code true} to enable, {@code false} to disable.
*/
@AnyThread
public void setWifiEnabled(boolean enabled) {
mBackgroundExecutor.execute(() -> {
if (mWifiManager == null) return;
mWifiState = (enabled) ? WIFI_STATE_ENABLING : WIFI_STATE_DISABLING;
if (!mWifiManager.setWifiEnabled(enabled)) {
Log.e(TAG, "Failed to WifiManager.setWifiEnabled(" + enabled + ");");
}
});
}
/**
* Gets the Wi-Fi enabled state.
*
* @return One of {@link WifiManager#WIFI_STATE_DISABLED},
* {@link WifiManager#WIFI_STATE_DISABLING}, {@link WifiManager#WIFI_STATE_ENABLED},
* {@link WifiManager#WIFI_STATE_ENABLING}
*/
@AnyThread
public int getWifiState() {
return mWifiState;
}
/**
* Return whether Wi-Fi is enabled or disabled.
*
* @return {@code true} if Wi-Fi is enabled or enabling
* @see WifiManager#getWifiState()
*/
@AnyThread
public boolean isWifiEnabled() {
return (mWifiState == WIFI_STATE_ENABLED || mWifiState == WIFI_STATE_ENABLING);
}
@Override
public void onReceive(Context context, Intent intent) {
if (intent == null) return;
if (WIFI_STATE_CHANGED_ACTION.equals(intent.getAction())) {
final int wifiState = intent.getIntExtra(EXTRA_WIFI_STATE, WIFI_STATE_DISABLED);
if (wifiState == WIFI_STATE_UNKNOWN) return;
mWifiState = wifiState;
}
}
}