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

Commit 5433e997 authored by Danny Wang's avatar Danny Wang Committed by Android (Google) Code Review
Browse files

Merge "autoclick: Update indicator view theme when system theme is changed" into main

parents c1c3387d 6d598277
Loading
Loading
Loading
Loading
+19 −1
Original line number Diff line number Diff line
@@ -39,8 +39,10 @@ import android.accessibilityservice.AccessibilityTrace;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityThread;
import android.content.ComponentCallbacks;
import android.content.ContentResolver;
import android.content.Context;
import android.content.res.Configuration;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Handler;
@@ -85,7 +87,8 @@ import com.android.server.accessibility.Flags;
 *
 * Each instance is associated to a single user (and it does not handle user switch itself).
 */
public class AutoclickController extends BaseEventStreamTransformation {
public class AutoclickController extends BaseEventStreamTransformation implements
        ComponentCallbacks {

    // Default duration between mouse movement stops and the auto click happens.
    public static final int DEFAULT_AUTOCLICK_DELAY_TIME = Flags.enableAutoclickIndicator()
@@ -335,6 +338,7 @@ public class AutoclickController extends BaseEventStreamTransformation {
        };

        mAutoclickTypePanel.show();
        mContext.registerComponentCallbacks(this);
        mWindowManager.addView(mAutoclickIndicatorView, mAutoclickIndicatorView.getLayoutParams());
    }

@@ -370,6 +374,7 @@ public class AutoclickController extends BaseEventStreamTransformation {

    @Override
    public void onDestroy() {
        mContext.unregisterComponentCallbacks(this);
        if (mAutoclickSettingsObserver != null) {
            mAutoclickSettingsObserver.stop();
            mAutoclickSettingsObserver = null;
@@ -575,6 +580,19 @@ public class AutoclickController extends BaseEventStreamTransformation {
        return mActiveClickType;
    }

    @Override
    public void onConfigurationChanged(@NonNull Configuration newConfig) {
        if (mAutoclickIndicatorView != null) {
            // When system configuration is changed, update the indicator view configuration.
            mAutoclickIndicatorView.onConfigurationChanged(newConfig);
        }
    }

    @Override
    public void onLowMemory() {

    }

    /**
     * Observes and updates various autoclick setting values.
     */
+15 −1
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import static android.view.accessibility.AccessibilityManager.AUTOCLICK_CURSOR_A

import android.animation.ValueAnimator;
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PixelFormat;
@@ -47,6 +48,8 @@ public class AutoclickIndicatorView extends View {

    static final int MINIMAL_ANIMATION_DURATION = 50;

    private final int mColor = R.color.materialColorPrimary;

    // Radius of the indicator circle.
    private int mRadius = AUTOCLICK_CURSOR_AREA_SIZE_DEFAULT;

@@ -77,7 +80,7 @@ public class AutoclickIndicatorView extends View {
        super(context);

        mPaint = new Paint();
        mPaint.setColor(context.getColor(R.color.materialColorPrimary));
        mPaint.setColor(context.getColor(mColor));
        mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setStrokeWidth(10);

@@ -141,6 +144,17 @@ public class AutoclickIndicatorView extends View {
        setMeasuredDimension(screenWidth, screenHeight);
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        post(new Runnable() {
            @Override
            public void run() {
                // Only color needs to be updated when system theme is changed.
                mPaint.setColor(getContext().getColor(mColor));
            }
        });
    }

    public void setCoordination(float x, float y) {
        mMouseX = x;
        mMouseY = y;
+18 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.content.Context;
import android.content.res.Configuration;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;
@@ -1525,6 +1526,23 @@ public class AutoclickControllerTest {
        assertThat(mController.getActiveClickTypeForTest())
                .isEqualTo(AutoclickTypePanel.AUTOCLICK_TYPE_LEFT_CLICK);
    }

    @Test
    @EnableFlags(com.android.server.accessibility.Flags.FLAG_ENABLE_AUTOCLICK_INDICATOR)
    public void onConfigurationChanged_tellsPanelToUpdateTheme() throws Exception {
        injectFakeMouseActionHoverMoveEvent();

        // Create a spy on the real object to verify method calls.
        AutoclickIndicatorView spyIndicatorView = spy(mController.mAutoclickIndicatorView);
        mController.mAutoclickIndicatorView = spyIndicatorView;

        // Simulate a theme change.
        Configuration newConfig = new Configuration();
        mController.onConfigurationChanged(newConfig);

        // Verify updateConfiguration was called.
        verify(spyIndicatorView).onConfigurationChanged(newConfig);
    }
    /**
     * =========================================================================
     * Helper Functions