Loading packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java +16 −19 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ package com.android.systemui.statusbar; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.app.admin.DevicePolicyManager; import android.content.Context; import android.content.res.ColorStateList; import android.content.res.Resources; Loading Loading @@ -118,11 +117,11 @@ public class KeyguardIndicationController implements StateListener, private int mChargingSpeed; private int mChargingWattage; private int mBatteryLevel; private long mChargingTimeRemaining; private String mMessageToShowOnScreenOn; private KeyguardUpdateMonitorCallback mUpdateMonitorCallback; private final DevicePolicyManager mDevicePolicyManager; private boolean mDozing; private final ViewClippingUtil.ClippingParameters mClippingParams = new ViewClippingUtil.ClippingParameters() { Loading @@ -144,7 +143,9 @@ public class KeyguardIndicationController implements StateListener, Dependency.get(KeyguardStateController.class), Dependency.get(StatusBarStateController.class), Dependency.get(KeyguardUpdateMonitor.class), Dependency.get(DockManager.class)); Dependency.get(DockManager.class), IBatteryStats.Stub.asInterface( ServiceManager.getService(BatteryStats.SERVICE_NAME))); } /** Loading @@ -157,7 +158,8 @@ public class KeyguardIndicationController implements StateListener, KeyguardStateController keyguardStateController, StatusBarStateController statusBarStateController, KeyguardUpdateMonitor keyguardUpdateMonitor, DockManager dockManager) { DockManager dockManager, IBatteryStats iBatteryStats) { mContext = context; mLockIcon = lockIcon; mShadeController = shadeController; Loading @@ -180,11 +182,8 @@ public class KeyguardIndicationController implements StateListener, mFastThreshold = res.getInteger(R.integer.config_chargingFastThreshold); mUserManager = context.getSystemService(UserManager.class); mBatteryInfo = IBatteryStats.Stub.asInterface( ServiceManager.getService(BatteryStats.SERVICE_NAME)); mBatteryInfo = iBatteryStats; mDevicePolicyManager = (DevicePolicyManager) context.getSystemService( Context.DEVICE_POLICY_SERVICE); setIndicationArea(indicationArea); mKeyguardUpdateMonitor.registerCallback(getKeyguardCallback()); Loading Loading @@ -480,16 +479,7 @@ public class KeyguardIndicationController implements StateListener, return mContext.getResources().getString(R.string.keyguard_charged); } // Try fetching charging time from battery stats. long chargingTimeRemaining = 0; try { chargingTimeRemaining = mBatteryInfo.computeChargeTimeRemaining(); } catch (RemoteException e) { Log.e(TAG, "Error calling IBatteryStats: ", e); } final boolean hasChargingTime = chargingTimeRemaining > 0; final boolean hasChargingTime = mChargingTimeRemaining > 0; int chargingId; if (mPowerPluggedInWired) { switch (mChargingSpeed) { Loading Loading @@ -522,7 +512,7 @@ public class KeyguardIndicationController implements StateListener, // locales will also have it in the future. For now, we still have to support the old // format until all languages get the new translations. String chargingTimeFormatted = Formatter.formatShortElapsedTimeRoundingUpToMinutes( mContext, chargingTimeRemaining); mContext, mChargingTimeRemaining); try { return mContext.getResources().getString(chargingId, chargingTimeFormatted, percentage); Loading Loading @@ -639,6 +629,13 @@ public class KeyguardIndicationController implements StateListener, mChargingWattage = status.maxChargingWattage; mChargingSpeed = status.getChargingSpeed(mSlowThreshold, mFastThreshold); mBatteryLevel = status.level; try { mChargingTimeRemaining = mPowerPluggedIn ? mBatteryInfo.computeChargeTimeRemaining() : -1; } catch (RemoteException e) { Log.e(TAG, "Error calling IBatteryStats: ", e); mChargingTimeRemaining = -1; } updateIndication(!wasPluggedIn && mPowerPluggedInWired); if (mDozing) { if (!wasPluggedIn && mPowerPluggedIn) { Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java +46 −1 Original line number Diff line number Diff line Loading @@ -23,7 +23,9 @@ import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; Loading @@ -37,7 +39,9 @@ import android.graphics.Color; import android.hardware.biometrics.BiometricSourceType; import android.hardware.face.FaceManager; import android.hardware.fingerprint.FingerprintManager; import android.os.BatteryManager; import android.os.Looper; import android.os.RemoteException; import android.os.UserManager; import android.view.View; import android.view.ViewGroup; Loading @@ -46,8 +50,10 @@ import androidx.test.InstrumentationRegistry; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; import com.android.internal.app.IBatteryStats; import com.android.internal.widget.LockPatternUtils; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitor.BatteryStatus; import com.android.settingslib.Utils; import com.android.systemui.R; import com.android.systemui.SysuiTestCase; Loading Loading @@ -96,6 +102,8 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { @Mock private UserManager mUserManager; @Mock private IBatteryStats mIBatteryStats; @Mock private DockManager mDockManager; @Captor private ArgumentCaptor<DockManager.AlignmentStateListener> mAlignmentListener; Loading Loading @@ -131,8 +139,9 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { mController = new KeyguardIndicationController(mContext, mIndicationArea, mLockIcon, mLockPatternUtils, mWakeLock, mShadeController, mAccessibilityController, mKeyguardStateController, mStatusBarStateController, mKeyguardUpdateMonitor, mDockManager); mDockManager, mIBatteryStats); mController.setStatusBarKeyguardViewManager(mStatusBarKeyguardViewManager); clearInvocations(mIBatteryStats); } @Test Loading Loading @@ -340,6 +349,42 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { assertThat(mTextView.getText()).isEqualTo(restingIndication); } @Test public void onRefreshBatteryInfo_computesChargingTime() throws RemoteException { createController(); BatteryStatus status = new BatteryStatus(BatteryManager.BATTERY_STATUS_CHARGING, 80 /* level */, BatteryManager.BATTERY_PLUGGED_WIRELESS, 100 /* health */, 0 /* maxChargingWattage */); mController.getKeyguardCallback().onRefreshBatteryInfo(status); verify(mIBatteryStats).computeChargeTimeRemaining(); } @Test public void onRefreshBatteryInfo_computesChargingTime_onlyWhenCharging() throws RemoteException { createController(); BatteryStatus status = new BatteryStatus(BatteryManager.BATTERY_STATUS_CHARGING, 80 /* level */, 0 /* plugged */, 100 /* health */, 0 /* maxChargingWattage */); mController.getKeyguardCallback().onRefreshBatteryInfo(status); verify(mIBatteryStats, never()).computeChargeTimeRemaining(); } /** * Regression test. * We should not make calls to the system_process when updating the doze state. */ @Test public void setDozing_noIBatteryCalls() throws RemoteException { createController(); mController.setVisible(true); mController.setDozing(true); mController.setDozing(false); verify(mIBatteryStats, never()).computeChargeTimeRemaining(); } @Test public void updateMonitor_listener() { createController(); Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java +16 −19 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ package com.android.systemui.statusbar; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.app.admin.DevicePolicyManager; import android.content.Context; import android.content.res.ColorStateList; import android.content.res.Resources; Loading Loading @@ -118,11 +117,11 @@ public class KeyguardIndicationController implements StateListener, private int mChargingSpeed; private int mChargingWattage; private int mBatteryLevel; private long mChargingTimeRemaining; private String mMessageToShowOnScreenOn; private KeyguardUpdateMonitorCallback mUpdateMonitorCallback; private final DevicePolicyManager mDevicePolicyManager; private boolean mDozing; private final ViewClippingUtil.ClippingParameters mClippingParams = new ViewClippingUtil.ClippingParameters() { Loading @@ -144,7 +143,9 @@ public class KeyguardIndicationController implements StateListener, Dependency.get(KeyguardStateController.class), Dependency.get(StatusBarStateController.class), Dependency.get(KeyguardUpdateMonitor.class), Dependency.get(DockManager.class)); Dependency.get(DockManager.class), IBatteryStats.Stub.asInterface( ServiceManager.getService(BatteryStats.SERVICE_NAME))); } /** Loading @@ -157,7 +158,8 @@ public class KeyguardIndicationController implements StateListener, KeyguardStateController keyguardStateController, StatusBarStateController statusBarStateController, KeyguardUpdateMonitor keyguardUpdateMonitor, DockManager dockManager) { DockManager dockManager, IBatteryStats iBatteryStats) { mContext = context; mLockIcon = lockIcon; mShadeController = shadeController; Loading @@ -180,11 +182,8 @@ public class KeyguardIndicationController implements StateListener, mFastThreshold = res.getInteger(R.integer.config_chargingFastThreshold); mUserManager = context.getSystemService(UserManager.class); mBatteryInfo = IBatteryStats.Stub.asInterface( ServiceManager.getService(BatteryStats.SERVICE_NAME)); mBatteryInfo = iBatteryStats; mDevicePolicyManager = (DevicePolicyManager) context.getSystemService( Context.DEVICE_POLICY_SERVICE); setIndicationArea(indicationArea); mKeyguardUpdateMonitor.registerCallback(getKeyguardCallback()); Loading Loading @@ -480,16 +479,7 @@ public class KeyguardIndicationController implements StateListener, return mContext.getResources().getString(R.string.keyguard_charged); } // Try fetching charging time from battery stats. long chargingTimeRemaining = 0; try { chargingTimeRemaining = mBatteryInfo.computeChargeTimeRemaining(); } catch (RemoteException e) { Log.e(TAG, "Error calling IBatteryStats: ", e); } final boolean hasChargingTime = chargingTimeRemaining > 0; final boolean hasChargingTime = mChargingTimeRemaining > 0; int chargingId; if (mPowerPluggedInWired) { switch (mChargingSpeed) { Loading Loading @@ -522,7 +512,7 @@ public class KeyguardIndicationController implements StateListener, // locales will also have it in the future. For now, we still have to support the old // format until all languages get the new translations. String chargingTimeFormatted = Formatter.formatShortElapsedTimeRoundingUpToMinutes( mContext, chargingTimeRemaining); mContext, mChargingTimeRemaining); try { return mContext.getResources().getString(chargingId, chargingTimeFormatted, percentage); Loading Loading @@ -639,6 +629,13 @@ public class KeyguardIndicationController implements StateListener, mChargingWattage = status.maxChargingWattage; mChargingSpeed = status.getChargingSpeed(mSlowThreshold, mFastThreshold); mBatteryLevel = status.level; try { mChargingTimeRemaining = mPowerPluggedIn ? mBatteryInfo.computeChargeTimeRemaining() : -1; } catch (RemoteException e) { Log.e(TAG, "Error calling IBatteryStats: ", e); mChargingTimeRemaining = -1; } updateIndication(!wasPluggedIn && mPowerPluggedInWired); if (mDozing) { if (!wasPluggedIn && mPowerPluggedIn) { Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java +46 −1 Original line number Diff line number Diff line Loading @@ -23,7 +23,9 @@ import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; Loading @@ -37,7 +39,9 @@ import android.graphics.Color; import android.hardware.biometrics.BiometricSourceType; import android.hardware.face.FaceManager; import android.hardware.fingerprint.FingerprintManager; import android.os.BatteryManager; import android.os.Looper; import android.os.RemoteException; import android.os.UserManager; import android.view.View; import android.view.ViewGroup; Loading @@ -46,8 +50,10 @@ import androidx.test.InstrumentationRegistry; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; import com.android.internal.app.IBatteryStats; import com.android.internal.widget.LockPatternUtils; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitor.BatteryStatus; import com.android.settingslib.Utils; import com.android.systemui.R; import com.android.systemui.SysuiTestCase; Loading Loading @@ -96,6 +102,8 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { @Mock private UserManager mUserManager; @Mock private IBatteryStats mIBatteryStats; @Mock private DockManager mDockManager; @Captor private ArgumentCaptor<DockManager.AlignmentStateListener> mAlignmentListener; Loading Loading @@ -131,8 +139,9 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { mController = new KeyguardIndicationController(mContext, mIndicationArea, mLockIcon, mLockPatternUtils, mWakeLock, mShadeController, mAccessibilityController, mKeyguardStateController, mStatusBarStateController, mKeyguardUpdateMonitor, mDockManager); mDockManager, mIBatteryStats); mController.setStatusBarKeyguardViewManager(mStatusBarKeyguardViewManager); clearInvocations(mIBatteryStats); } @Test Loading Loading @@ -340,6 +349,42 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { assertThat(mTextView.getText()).isEqualTo(restingIndication); } @Test public void onRefreshBatteryInfo_computesChargingTime() throws RemoteException { createController(); BatteryStatus status = new BatteryStatus(BatteryManager.BATTERY_STATUS_CHARGING, 80 /* level */, BatteryManager.BATTERY_PLUGGED_WIRELESS, 100 /* health */, 0 /* maxChargingWattage */); mController.getKeyguardCallback().onRefreshBatteryInfo(status); verify(mIBatteryStats).computeChargeTimeRemaining(); } @Test public void onRefreshBatteryInfo_computesChargingTime_onlyWhenCharging() throws RemoteException { createController(); BatteryStatus status = new BatteryStatus(BatteryManager.BATTERY_STATUS_CHARGING, 80 /* level */, 0 /* plugged */, 100 /* health */, 0 /* maxChargingWattage */); mController.getKeyguardCallback().onRefreshBatteryInfo(status); verify(mIBatteryStats, never()).computeChargeTimeRemaining(); } /** * Regression test. * We should not make calls to the system_process when updating the doze state. */ @Test public void setDozing_noIBatteryCalls() throws RemoteException { createController(); mController.setVisible(true); mController.setDozing(true); mController.setDozing(false); verify(mIBatteryStats, never()).computeChargeTimeRemaining(); } @Test public void updateMonitor_listener() { createController(); Loading