109 lines
4.1 KiB
Java
109 lines
4.1 KiB
Java
|
/*
|
||
|
* Copyright (C) 2020 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.server.wifi;
|
||
|
|
||
|
import android.content.Context;
|
||
|
import android.database.ContentObserver;
|
||
|
import android.net.Uri;
|
||
|
import android.os.Handler;
|
||
|
import android.provider.Settings;
|
||
|
import android.util.Log;
|
||
|
|
||
|
import com.android.internal.annotations.VisibleForTesting;
|
||
|
|
||
|
import java.io.FileDescriptor;
|
||
|
import java.io.PrintWriter;
|
||
|
|
||
|
/**
|
||
|
* Observer for adaptive connectivity enable settings changes.
|
||
|
* This is enabled by default. Will be toggled off via adb command or a settings
|
||
|
* toggle by the user to disable adaptive connectivity.
|
||
|
*/
|
||
|
public class AdaptiveConnectivityEnabledSettingObserver {
|
||
|
|
||
|
private static final String TAG = "WifiAdaptConnObserver";
|
||
|
/**
|
||
|
* Copy of the settings string. Can't directly use the constant because it is @hide.
|
||
|
* See {@link Settings.Secure#ADAPTIVE_CONNECTIVITY_ENABLED}.
|
||
|
* TODO(b/167709538): remove this hardcoded string and create new API in Wifi mainline.
|
||
|
*/
|
||
|
@VisibleForTesting
|
||
|
public static final String SETTINGS_SECURE_ADAPTIVE_CONNECTIVITY_ENABLED =
|
||
|
"adaptive_connectivity_enabled";
|
||
|
|
||
|
private final WifiMetrics mWifiMetrics;
|
||
|
private final FrameworkFacade mFrameworkFacade;
|
||
|
private final Context mContext;
|
||
|
|
||
|
private final ContentObserver mContentObserver;
|
||
|
|
||
|
private boolean mAdaptiveConnectivityEnabled = true;
|
||
|
|
||
|
public AdaptiveConnectivityEnabledSettingObserver(Handler handler,
|
||
|
WifiMetrics wifiMetrics, FrameworkFacade frameworkFacade,
|
||
|
Context context) {
|
||
|
mWifiMetrics = wifiMetrics;
|
||
|
mFrameworkFacade = frameworkFacade;
|
||
|
mContext = context;
|
||
|
mContentObserver = new ContentObserver(handler) {
|
||
|
@Override
|
||
|
public void onChange(boolean selfChange) {
|
||
|
handleChange();
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
|
||
|
private void handleChange() {
|
||
|
mAdaptiveConnectivityEnabled = readValueFromSettings();
|
||
|
Log.d(TAG, "Adaptive connectivity status changed: " + mAdaptiveConnectivityEnabled);
|
||
|
mWifiMetrics.setAdaptiveConnectivityState(mAdaptiveConnectivityEnabled);
|
||
|
mWifiMetrics.logUserActionEvent(
|
||
|
WifiMetrics.convertAdaptiveConnectivityStateToUserActionEventType(
|
||
|
mAdaptiveConnectivityEnabled));
|
||
|
}
|
||
|
|
||
|
/** Register settings change observer. */
|
||
|
public void initialize() {
|
||
|
Uri uri = Settings.Secure.getUriFor(SETTINGS_SECURE_ADAPTIVE_CONNECTIVITY_ENABLED);
|
||
|
if (uri == null) {
|
||
|
Log.e(TAG, "Adaptive connectivity user toggle does not exist in Settings");
|
||
|
return;
|
||
|
}
|
||
|
mFrameworkFacade.registerContentObserver(
|
||
|
mContext, uri, true, mContentObserver);
|
||
|
mAdaptiveConnectivityEnabled = readValueFromSettings();
|
||
|
Log.d(TAG, "Adaptive connectivity status initialized to: " + mAdaptiveConnectivityEnabled);
|
||
|
mWifiMetrics.setAdaptiveConnectivityState(mAdaptiveConnectivityEnabled);
|
||
|
}
|
||
|
|
||
|
private boolean readValueFromSettings() {
|
||
|
return mFrameworkFacade.getSecureIntegerSetting(
|
||
|
mContext, SETTINGS_SECURE_ADAPTIVE_CONNECTIVITY_ENABLED, 1) == 1;
|
||
|
}
|
||
|
|
||
|
/** True if adaptive connectivity is enabled, false otherwise. */
|
||
|
public boolean get() {
|
||
|
return mAdaptiveConnectivityEnabled;
|
||
|
}
|
||
|
|
||
|
/** Dump method for debugging */
|
||
|
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
|
||
|
pw.println("Dump of AdaptiveConnectivityEnabledSettingObserver");
|
||
|
pw.println("mAdaptiveConnectivityEnabled=" + mAdaptiveConnectivityEnabled);
|
||
|
}
|
||
|
}
|