Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 58d0089e authored by Grace Han's avatar Grace Han Committed by Android (Google) Code Review
Browse files

Merge "Adding Region Sampler to Animatable Clocks"

parents b806e156 3e9e7d5c
Loading
Loading
Loading
Loading
+66 −3
Original line number Diff line number Diff line
@@ -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;
@@ -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
@@ -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;
@@ -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;
@@ -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() {
@@ -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);
@@ -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 */
@@ -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);
    }
@@ -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);
        });
    }
}
+5 −0
Original line number Diff line number Diff line
@@ -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);
+13 −1
Original line number Diff line number Diff line
@@ -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;
@@ -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
@@ -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;
@@ -96,7 +105,10 @@ public class AnimatableClockControllerTest extends SysuiTestCase {
                mBroadcastDispatcher,
                mBatteryController,
                mKeyguardUpdateMonitor,
                mResources
                mResources,
                mMainExecutor,
                mBgExecutor,
                mFeatureFlags
        );
        mAnimatableClockController.init();
        captureAttachListener();