diff --git a/src/com/android/settings/connecteddevice/stylus/StylusDeviceUpdater.java b/src/com/android/settings/connecteddevice/stylus/StylusDeviceUpdater.java index 46ef3fbbc80..da6e1789b0c 100644 --- a/src/com/android/settings/connecteddevice/stylus/StylusDeviceUpdater.java +++ b/src/com/android/settings/connecteddevice/stylus/StylusDeviceUpdater.java @@ -22,7 +22,6 @@ import android.hardware.input.InputManager; import android.os.Bundle; import android.os.Handler; import android.os.Looper; -import android.os.SystemClock; import android.util.Log; import android.view.InputDevice; @@ -57,11 +56,11 @@ public class StylusDeviceUpdater implements InputManager.InputDeviceListener, private final InputManager mInputManager; private final MetricsFeatureProvider mMetricsFeatureProvider; - private long mLastUsiSeenTime = 0; private Context mContext; @VisibleForTesting Integer mLastDetectedUsiId; + BatteryState mLastBatteryState; @VisibleForTesting Preference mUsiPreference; @@ -75,7 +74,6 @@ public class StylusDeviceUpdater implements InputManager.InputDeviceListener, mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider(); mContext = context; mInputManager = context.getSystemService(InputManager.class); - } /** @@ -132,13 +130,8 @@ public class StylusDeviceUpdater implements InputManager.InputDeviceListener, @Override public void onBatteryStateChanged(int deviceId, long eventTimeMillis, @NonNull BatteryState batteryState) { - if (batteryState.isPresent()) { - mLastUsiSeenTime = eventTimeMillis; - mLastDetectedUsiId = deviceId; - } else { - mLastUsiSeenTime = -1; - mLastDetectedUsiId = null; - } + mLastBatteryState = batteryState; + mLastDetectedUsiId = deviceId; forceUpdate(); } @@ -184,7 +177,7 @@ public class StylusDeviceUpdater implements InputManager.InputDeviceListener, } private boolean shouldShowUsiPreference() { - return isUsiConnectionValid() && !hasConnectedBluetoothStylusDevice(); + return isUsiBatteryValid() && !hasConnectedBluetoothStylusDevice(); } @VisibleForTesting @@ -206,11 +199,9 @@ public class StylusDeviceUpdater implements InputManager.InputDeviceListener, } @VisibleForTesting - boolean isUsiConnectionValid() { - // battery listener uses uptimeMillis as its eventTime - long currentTime = SystemClock.uptimeMillis(); - long usiValidityDuration = 60 * 60 * 1000; // 1 hour - return mLastUsiSeenTime > 0 && currentTime - usiValidityDuration <= mLastUsiSeenTime; + boolean isUsiBatteryValid() { + return mLastBatteryState != null + && mLastBatteryState.isPresent() && mLastBatteryState.getCapacity() > 0f; } private void launchDeviceDetails() { diff --git a/tests/robotests/src/com/android/settings/connecteddevice/stylus/StylusDeviceUpdaterTest.java b/tests/robotests/src/com/android/settings/connecteddevice/stylus/StylusDeviceUpdaterTest.java index 10f37275712..7fb17e2eb2c 100644 --- a/tests/robotests/src/com/android/settings/connecteddevice/stylus/StylusDeviceUpdaterTest.java +++ b/tests/robotests/src/com/android/settings/connecteddevice/stylus/StylusDeviceUpdaterTest.java @@ -127,7 +127,7 @@ public class StylusDeviceUpdaterTest { @Test public void click_usiPreference_launchUsiDetailsPage() { doReturn(mSettingsActivity).when(mDashboardFragment).getContext(); - doReturn(true).when(mStylusDeviceUpdater).isUsiConnectionValid(); + doReturn(true).when(mStylusDeviceUpdater).isUsiBatteryValid(); doReturn(false).when(mStylusDeviceUpdater).hasConnectedBluetoothStylusDevice(); mStylusDeviceUpdater.forceUpdate(); mStylusDeviceUpdater.mLastDetectedUsiId = 1; @@ -144,7 +144,7 @@ public class StylusDeviceUpdaterTest { @Test public void forceUpdate_addsUsiPreference_validUsiDevice() { - doReturn(true).when(mStylusDeviceUpdater).isUsiConnectionValid(); + doReturn(true).when(mStylusDeviceUpdater).isUsiBatteryValid(); doReturn(false).when(mStylusDeviceUpdater).hasConnectedBluetoothStylusDevice(); mStylusDeviceUpdater.forceUpdate(); @@ -154,7 +154,7 @@ public class StylusDeviceUpdaterTest { @Test public void forceUpdate_doesNotAddPreference_invalidUsiDevice() { - doReturn(false).when(mStylusDeviceUpdater).isUsiConnectionValid(); + doReturn(false).when(mStylusDeviceUpdater).isUsiBatteryValid(); doReturn(false).when(mStylusDeviceUpdater).hasConnectedBluetoothStylusDevice(); mStylusDeviceUpdater.forceUpdate(); @@ -164,12 +164,12 @@ public class StylusDeviceUpdaterTest { @Test public void forceUpdate_removesUsiPreference_existingPreference_invalidUsiDevice() { - doReturn(true).when(mStylusDeviceUpdater).isUsiConnectionValid(); + doReturn(true).when(mStylusDeviceUpdater).isUsiBatteryValid(); doReturn(false).when(mStylusDeviceUpdater).hasConnectedBluetoothStylusDevice(); mStylusDeviceUpdater.forceUpdate(); - doReturn(false).when(mStylusDeviceUpdater).isUsiConnectionValid(); + doReturn(false).when(mStylusDeviceUpdater).isUsiBatteryValid(); mStylusDeviceUpdater.forceUpdate(); assertThat(mStylusDeviceUpdater.mUsiPreference).isNull(); @@ -177,7 +177,7 @@ public class StylusDeviceUpdaterTest { @Test public void forceUpdate_doesNotAddUsiPreference_bluetoothStylusConnected() { - doReturn(true).when(mStylusDeviceUpdater).isUsiConnectionValid(); + doReturn(true).when(mStylusDeviceUpdater).isUsiBatteryValid(); doReturn(true).when(mStylusDeviceUpdater).hasConnectedBluetoothStylusDevice(); mStylusDeviceUpdater.forceUpdate(); @@ -187,7 +187,7 @@ public class StylusDeviceUpdaterTest { @Test public void forceUpdate_addsUsiPreference_bluetoothStylusDisconnected() { - doReturn(true).when(mStylusDeviceUpdater).isUsiConnectionValid(); + doReturn(true).when(mStylusDeviceUpdater).isUsiBatteryValid(); doReturn(true).when(mStylusDeviceUpdater).hasConnectedBluetoothStylusDevice(); mStylusDeviceUpdater.forceUpdate(); @@ -199,7 +199,7 @@ public class StylusDeviceUpdaterTest { @Test public void forceUpdate_removesUsiPreference_existingPreference_bluetoothStylusConnected() { - doReturn(true).when(mStylusDeviceUpdater).isUsiConnectionValid(); + doReturn(true).when(mStylusDeviceUpdater).isUsiBatteryValid(); doReturn(false).when(mStylusDeviceUpdater).hasConnectedBluetoothStylusDevice(); mStylusDeviceUpdater.forceUpdate(); doReturn(true).when(mStylusDeviceUpdater).hasConnectedBluetoothStylusDevice(); @@ -218,7 +218,7 @@ public class StylusDeviceUpdaterTest { mStylusDeviceUpdater.onBatteryStateChanged(1, SystemClock.uptimeMillis(), batteryState); - assertThat(mStylusDeviceUpdater.isUsiConnectionValid()).isTrue(); + assertThat(mStylusDeviceUpdater.isUsiBatteryValid()).isTrue(); } @Test @@ -230,19 +230,7 @@ public class StylusDeviceUpdaterTest { mStylusDeviceUpdater.onBatteryStateChanged(1, SystemClock.uptimeMillis(), batteryState); - assertThat(mStylusDeviceUpdater.isUsiConnectionValid()).isFalse(); - } - - @Test - public void onBatteryStateChanged_ddetectsInvalidUsi_staleBatteryEventTime() { - doReturn(false).when(mStylusDeviceUpdater).hasConnectedBluetoothStylusDevice(); - BatteryState batteryState = mock(BatteryState.class); - doReturn(true).when(batteryState).isPresent(); - doReturn(0.5f).when(batteryState).getCapacity(); - - mStylusDeviceUpdater.onBatteryStateChanged(1, 0, batteryState); - - assertThat(mStylusDeviceUpdater.isUsiConnectionValid()).isFalse(); + assertThat(mStylusDeviceUpdater.isUsiBatteryValid()).isFalse(); } @Test