WifiScoreReport: Turn off newly added hysteresis for shell commands
Not a pretty fix, but I don't want to muck around with resource values
on the device for shell cmd testing.
Bug: 168736621
Test: Manual verification using
"adb shell cmd wifi set-connected-score 49"
Change-Id: I9a5181cb8a73fe5dd87d93c438e4b46de20b750c
diff --git a/service/java/com/android/server/wifi/WifiScoreReport.java b/service/java/com/android/server/wifi/WifiScoreReport.java
index f30f0a6..be0adc2 100644
--- a/service/java/com/android/server/wifi/WifiScoreReport.java
+++ b/service/java/com/android/server/wifi/WifiScoreReport.java
@@ -206,7 +206,9 @@
}
if (mWifiConnectedNetworkScorerHolder != null
&& mContext.getResources().getBoolean(
- R.bool.config_wifiMinConfirmationDurationSendNetworkScoreEnabled)) {
+ R.bool.config_wifiMinConfirmationDurationSendNetworkScoreEnabled)
+ /// Turn off hysteresis/dampening for shell commands.
+ && !mWifiConnectedNetworkScorerHolder.isShellCommandScorer()) {
long millis = mClock.getWallClockMillis();
if (mLastScoreBreachLowTimeMillis != INVALID_WALL_CLOCK_MILLIS) {
if (mWifiInfo.getRssi()
@@ -313,6 +315,10 @@
revertToDefaultConnectedScorer();
}
}
+
+ public boolean isShellCommandScorer() {
+ return mScorer instanceof WifiShellCommand.WifiScorer;
+ }
}
private final ScoreUpdateObserverProxy mScoreUpdateObserver =
diff --git a/service/java/com/android/server/wifi/WifiShellCommand.java b/service/java/com/android/server/wifi/WifiShellCommand.java
index 3e76bd0..3d8a9ff 100644
--- a/service/java/com/android/server/wifi/WifiShellCommand.java
+++ b/service/java/com/android/server/wifi/WifiShellCommand.java
@@ -51,7 +51,6 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.server.wifi.util.ApConfigUtil;
import com.android.server.wifi.util.ArrayUtils;
-import com.android.server.wifi.util.GeneralUtil;
import com.android.server.wifi.util.ScanResultUtil;
import java.io.PrintWriter;
@@ -125,6 +124,45 @@
private final WifiCarrierInfoManager mWifiCarrierInfoManager;
private final WifiNetworkFactory mWifiNetworkFactory;
+ /**
+ * Used for shell command testing of scorer.
+ */
+ public static class WifiScorer extends IWifiConnectedNetworkScorer.Stub {
+ private final WifiServiceImpl mWifiService;
+ private final CountDownLatch mCountDownLatch;
+ private Integer mSessionId;
+ private IScoreUpdateObserver mScoreUpdateObserver;
+
+ public WifiScorer(WifiServiceImpl wifiService, CountDownLatch countDownLatch) {
+ mWifiService = wifiService;
+ mCountDownLatch = countDownLatch;
+ }
+
+ @Override
+ public void onStart(int sessionId) {
+ mSessionId = sessionId;
+ mCountDownLatch.countDown();
+ }
+ @Override
+ public void onStop(int sessionId) {
+ // clear the external scorer on disconnect.
+ mWifiService.clearWifiConnectedNetworkScorer();
+ }
+ @Override
+ public void onSetScoreUpdateObserver(IScoreUpdateObserver observerImpl) {
+ mScoreUpdateObserver = observerImpl;
+ mCountDownLatch.countDown();
+ }
+
+ public Integer getSessionId() {
+ return mSessionId;
+ }
+
+ public IScoreUpdateObserver getScoreUpdateObserver() {
+ return mScoreUpdateObserver;
+ }
+ }
+
WifiShellCommand(WifiInjector wifiInjector, WifiServiceImpl wifiService, Context context,
ClientModeManager clientModeManager, WifiGlobals wifiGlobals) {
mClientModeManager = clientModeManager;
@@ -597,44 +635,24 @@
case "set-connected-score": {
int score = Integer.parseInt(getNextArgRequired());
CountDownLatch countDownLatch = new CountDownLatch(2);
- GeneralUtil.Mutable<IScoreUpdateObserver> scoreUpdateObserverMutable =
- new GeneralUtil.Mutable<>();
- GeneralUtil.Mutable<Integer> sessionIdMutable = new GeneralUtil.Mutable<>();
- IWifiConnectedNetworkScorer.Stub connectedScorer =
- new IWifiConnectedNetworkScorer.Stub() {
- @Override
- public void onStart(int sessionId) {
- sessionIdMutable.value = sessionId;
- countDownLatch.countDown();
- }
- @Override
- public void onStop(int sessionId) {
- // clear the external scorer on disconnect.
- mWifiService.clearWifiConnectedNetworkScorer();
- }
- @Override
- public void onSetScoreUpdateObserver(IScoreUpdateObserver observerImpl) {
- scoreUpdateObserverMutable.value = observerImpl;
- countDownLatch.countDown();
- }
- };
mWifiService.clearWifiConnectedNetworkScorer(); // clear any previous scorer
+ WifiScorer connectedScorer = new WifiScorer(mWifiService, countDownLatch);
if (mWifiService.setWifiConnectedNetworkScorer(new Binder(), connectedScorer)) {
// wait for retrieving the session id & score observer.
countDownLatch.await(1000, TimeUnit.MILLISECONDS);
}
- if (scoreUpdateObserverMutable.value == null
- || sessionIdMutable.value == null) {
+ if (connectedScorer.getSessionId() == null
+ || connectedScorer.getScoreUpdateObserver() == null) {
pw.println("Did not receive session id and/or the score update observer. "
+ "Is the device connected to a wifi network?");
mWifiService.clearWifiConnectedNetworkScorer();
return -1;
}
pw.println("Updating score: " + score + " for session id: "
- + sessionIdMutable.value);
+ + connectedScorer.getSessionId());
try {
- scoreUpdateObserverMutable.value.notifyScoreUpdate(
- sessionIdMutable.value, score);
+ connectedScorer.getScoreUpdateObserver().notifyScoreUpdate(
+ connectedScorer.getSessionId(), score);
} catch (RemoteException e) {
pw.println("Failed to send the score update");
mWifiService.clearWifiConnectedNetworkScorer();