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();