Loading packages/SystemUI/src/com/android/keyguard/AnimatableClockController.java +66 −3 Original line number Diff line number Diff line Loading @@ -22,7 +22,9 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.res.Resources; import android.graphics.Color; import android.graphics.Rect; import android.icu.text.NumberFormat; import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; Loading @@ -30,16 +32,24 @@ import androidx.annotation.VisibleForTesting; import com.android.settingslib.Utils; import com.android.systemui.R; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.Flags; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.shared.clocks.AnimatableClockView; import com.android.systemui.shared.navigationbar.RegionSamplingHelper; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.util.ViewController; import java.io.PrintWriter; import java.util.Locale; import java.util.Objects; import java.util.Optional; import java.util.TimeZone; import java.util.concurrent.Executor; import javax.inject.Inject; /** * Controller for an AnimatableClockView on the keyguard. Instantiated by Loading @@ -54,7 +64,10 @@ public class AnimatableClockController extends ViewController<AnimatableClockVie private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; private final BatteryController mBatteryController; private final int mDozingColor = Color.WHITE; private Optional<RegionSamplingHelper> mRegionSamplingHelper = Optional.empty(); private Rect mSamplingBounds = new Rect(); private int mLockScreenColor; private final boolean mRegionSamplingEnabled; private boolean mIsDozing; private boolean mIsCharging; Loading @@ -67,13 +80,17 @@ public class AnimatableClockController extends ViewController<AnimatableClockVie private final float mBurmeseLineSpacing; private final float mDefaultLineSpacing; @Inject public AnimatableClockController( AnimatableClockView view, StatusBarStateController statusBarStateController, BroadcastDispatcher broadcastDispatcher, BatteryController batteryController, KeyguardUpdateMonitor keyguardUpdateMonitor, @Main Resources resources @Main Resources resources, @Main Executor mainExecutor, @Background Executor bgExecutor, FeatureFlags featureFlags ) { super(view); mStatusBarStateController = statusBarStateController; Loading @@ -86,6 +103,40 @@ public class AnimatableClockController extends ViewController<AnimatableClockVie R.dimen.keyguard_clock_line_spacing_scale_burmese); mDefaultLineSpacing = resources.getFloat( R.dimen.keyguard_clock_line_spacing_scale); mRegionSamplingEnabled = featureFlags.isEnabled(Flags.REGION_SAMPLING); if (!mRegionSamplingEnabled) { return; } mRegionSamplingHelper = Optional.of(new RegionSamplingHelper(mView, new RegionSamplingHelper.SamplingCallback() { @Override public void onRegionDarknessChanged(boolean isRegionDark) { if (isRegionDark) { mLockScreenColor = Color.WHITE; } else { mLockScreenColor = Color.BLACK; } initColors(); } @Override public Rect getSampledRegion(View sampledView) { mSamplingBounds = new Rect(sampledView.getLeft(), sampledView.getTop(), sampledView.getRight(), sampledView.getBottom()); return mSamplingBounds; } @Override public boolean isSamplingEnabled() { return mRegionSamplingEnabled; } }, mainExecutor, bgExecutor) ); mRegionSamplingHelper.ifPresent((regionSamplingHelper) -> { regionSamplingHelper.setWindowVisible(true); }); } private void reset() { Loading Loading @@ -169,6 +220,10 @@ public class AnimatableClockController extends ViewController<AnimatableClockVie mStatusBarStateController.addCallback(mStatusBarStateListener); mRegionSamplingHelper.ifPresent((regionSamplingHelper) -> { regionSamplingHelper.start(mSamplingBounds); }); refreshTime(); initColors(); mView.animateDoze(mIsDozing, false); Loading @@ -180,6 +235,9 @@ public class AnimatableClockController extends ViewController<AnimatableClockVie mKeyguardUpdateMonitor.removeCallback(mKeyguardUpdateMonitorCallback); mBatteryController.removeCallback(mBatteryCallback); mStatusBarStateController.removeCallback(mStatusBarStateListener); mRegionSamplingHelper.ifPresent((regionSamplingHelper) -> { regionSamplingHelper.stop(); }); } /** Animate the clock appearance */ Loading Loading @@ -223,8 +281,10 @@ public class AnimatableClockController extends ViewController<AnimatableClockVie } private void initColors() { if (!mRegionSamplingEnabled) { mLockScreenColor = Utils.getColorAttrDefaultColor(getContext(), com.android.systemui.R.attr.wallpaperTextColorAccent); } mView.setColors(mDozingColor, mLockScreenColor); mView.animateDoze(mIsDozing, false); } Loading @@ -235,5 +295,8 @@ public class AnimatableClockController extends ViewController<AnimatableClockVie public void dump(@NonNull PrintWriter pw) { pw.println(this); mView.dump(pw); mRegionSamplingHelper.ifPresent((regionSamplingHelper) -> { regionSamplingHelper.dump(pw); }); } } packages/SystemUI/src/com/android/systemui/flags/Flags.java +5 −0 Original line number Diff line number Diff line Loading @@ -161,6 +161,11 @@ public class Flags { public static final ResourceBooleanFlag MONET = new ResourceBooleanFlag(800, R.bool.flag_monet); /***************************************/ // 801 - region sampling public static final BooleanFlag REGION_SAMPLING = new BooleanFlag(801, false); /***************************************/ // 900 - media public static final BooleanFlag MEDIA_TAP_TO_TRANSFER = new BooleanFlag(900, true); Loading packages/SystemUI/tests/src/com/android/systemui/keyguard/AnimatableClockControllerTest.java +13 −1 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ import com.android.keyguard.KeyguardUpdateMonitor; import com.android.settingslib.Utils; import com.android.systemui.SysuiTestCase; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.shared.clocks.AnimatableClockView; import com.android.systemui.statusbar.policy.BatteryController; Loading @@ -53,6 +54,8 @@ import org.mockito.MockitoAnnotations; import org.mockito.MockitoSession; import org.mockito.quality.Strictness; import java.util.concurrent.Executor; @SmallTest @RunWith(AndroidTestingRunner.class) @TestableLooper.RunWithLooper Loading @@ -69,6 +72,12 @@ public class AnimatableClockControllerTest extends SysuiTestCase { private KeyguardUpdateMonitor mKeyguardUpdateMonitor; @Mock private Resources mResources; @Mock private Executor mMainExecutor; @Mock private Executor mBgExecutor; @Mock private FeatureFlags mFeatureFlags; private MockitoSession mStaticMockSession; private AnimatableClockController mAnimatableClockController; Loading Loading @@ -96,7 +105,10 @@ public class AnimatableClockControllerTest extends SysuiTestCase { mBroadcastDispatcher, mBatteryController, mKeyguardUpdateMonitor, mResources mResources, mMainExecutor, mBgExecutor, mFeatureFlags ); mAnimatableClockController.init(); captureAttachListener(); Loading Loading
packages/SystemUI/src/com/android/keyguard/AnimatableClockController.java +66 −3 Original line number Diff line number Diff line Loading @@ -22,7 +22,9 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.res.Resources; import android.graphics.Color; import android.graphics.Rect; import android.icu.text.NumberFormat; import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; Loading @@ -30,16 +32,24 @@ import androidx.annotation.VisibleForTesting; import com.android.settingslib.Utils; import com.android.systemui.R; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.Flags; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.shared.clocks.AnimatableClockView; import com.android.systemui.shared.navigationbar.RegionSamplingHelper; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.util.ViewController; import java.io.PrintWriter; import java.util.Locale; import java.util.Objects; import java.util.Optional; import java.util.TimeZone; import java.util.concurrent.Executor; import javax.inject.Inject; /** * Controller for an AnimatableClockView on the keyguard. Instantiated by Loading @@ -54,7 +64,10 @@ public class AnimatableClockController extends ViewController<AnimatableClockVie private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; private final BatteryController mBatteryController; private final int mDozingColor = Color.WHITE; private Optional<RegionSamplingHelper> mRegionSamplingHelper = Optional.empty(); private Rect mSamplingBounds = new Rect(); private int mLockScreenColor; private final boolean mRegionSamplingEnabled; private boolean mIsDozing; private boolean mIsCharging; Loading @@ -67,13 +80,17 @@ public class AnimatableClockController extends ViewController<AnimatableClockVie private final float mBurmeseLineSpacing; private final float mDefaultLineSpacing; @Inject public AnimatableClockController( AnimatableClockView view, StatusBarStateController statusBarStateController, BroadcastDispatcher broadcastDispatcher, BatteryController batteryController, KeyguardUpdateMonitor keyguardUpdateMonitor, @Main Resources resources @Main Resources resources, @Main Executor mainExecutor, @Background Executor bgExecutor, FeatureFlags featureFlags ) { super(view); mStatusBarStateController = statusBarStateController; Loading @@ -86,6 +103,40 @@ public class AnimatableClockController extends ViewController<AnimatableClockVie R.dimen.keyguard_clock_line_spacing_scale_burmese); mDefaultLineSpacing = resources.getFloat( R.dimen.keyguard_clock_line_spacing_scale); mRegionSamplingEnabled = featureFlags.isEnabled(Flags.REGION_SAMPLING); if (!mRegionSamplingEnabled) { return; } mRegionSamplingHelper = Optional.of(new RegionSamplingHelper(mView, new RegionSamplingHelper.SamplingCallback() { @Override public void onRegionDarknessChanged(boolean isRegionDark) { if (isRegionDark) { mLockScreenColor = Color.WHITE; } else { mLockScreenColor = Color.BLACK; } initColors(); } @Override public Rect getSampledRegion(View sampledView) { mSamplingBounds = new Rect(sampledView.getLeft(), sampledView.getTop(), sampledView.getRight(), sampledView.getBottom()); return mSamplingBounds; } @Override public boolean isSamplingEnabled() { return mRegionSamplingEnabled; } }, mainExecutor, bgExecutor) ); mRegionSamplingHelper.ifPresent((regionSamplingHelper) -> { regionSamplingHelper.setWindowVisible(true); }); } private void reset() { Loading Loading @@ -169,6 +220,10 @@ public class AnimatableClockController extends ViewController<AnimatableClockVie mStatusBarStateController.addCallback(mStatusBarStateListener); mRegionSamplingHelper.ifPresent((regionSamplingHelper) -> { regionSamplingHelper.start(mSamplingBounds); }); refreshTime(); initColors(); mView.animateDoze(mIsDozing, false); Loading @@ -180,6 +235,9 @@ public class AnimatableClockController extends ViewController<AnimatableClockVie mKeyguardUpdateMonitor.removeCallback(mKeyguardUpdateMonitorCallback); mBatteryController.removeCallback(mBatteryCallback); mStatusBarStateController.removeCallback(mStatusBarStateListener); mRegionSamplingHelper.ifPresent((regionSamplingHelper) -> { regionSamplingHelper.stop(); }); } /** Animate the clock appearance */ Loading Loading @@ -223,8 +281,10 @@ public class AnimatableClockController extends ViewController<AnimatableClockVie } private void initColors() { if (!mRegionSamplingEnabled) { mLockScreenColor = Utils.getColorAttrDefaultColor(getContext(), com.android.systemui.R.attr.wallpaperTextColorAccent); } mView.setColors(mDozingColor, mLockScreenColor); mView.animateDoze(mIsDozing, false); } Loading @@ -235,5 +295,8 @@ public class AnimatableClockController extends ViewController<AnimatableClockVie public void dump(@NonNull PrintWriter pw) { pw.println(this); mView.dump(pw); mRegionSamplingHelper.ifPresent((regionSamplingHelper) -> { regionSamplingHelper.dump(pw); }); } }
packages/SystemUI/src/com/android/systemui/flags/Flags.java +5 −0 Original line number Diff line number Diff line Loading @@ -161,6 +161,11 @@ public class Flags { public static final ResourceBooleanFlag MONET = new ResourceBooleanFlag(800, R.bool.flag_monet); /***************************************/ // 801 - region sampling public static final BooleanFlag REGION_SAMPLING = new BooleanFlag(801, false); /***************************************/ // 900 - media public static final BooleanFlag MEDIA_TAP_TO_TRANSFER = new BooleanFlag(900, true); Loading
packages/SystemUI/tests/src/com/android/systemui/keyguard/AnimatableClockControllerTest.java +13 −1 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ import com.android.keyguard.KeyguardUpdateMonitor; import com.android.settingslib.Utils; import com.android.systemui.SysuiTestCase; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.shared.clocks.AnimatableClockView; import com.android.systemui.statusbar.policy.BatteryController; Loading @@ -53,6 +54,8 @@ import org.mockito.MockitoAnnotations; import org.mockito.MockitoSession; import org.mockito.quality.Strictness; import java.util.concurrent.Executor; @SmallTest @RunWith(AndroidTestingRunner.class) @TestableLooper.RunWithLooper Loading @@ -69,6 +72,12 @@ public class AnimatableClockControllerTest extends SysuiTestCase { private KeyguardUpdateMonitor mKeyguardUpdateMonitor; @Mock private Resources mResources; @Mock private Executor mMainExecutor; @Mock private Executor mBgExecutor; @Mock private FeatureFlags mFeatureFlags; private MockitoSession mStaticMockSession; private AnimatableClockController mAnimatableClockController; Loading Loading @@ -96,7 +105,10 @@ public class AnimatableClockControllerTest extends SysuiTestCase { mBroadcastDispatcher, mBatteryController, mKeyguardUpdateMonitor, mResources mResources, mMainExecutor, mBgExecutor, mFeatureFlags ); mAnimatableClockController.init(); captureAttachListener(); Loading