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

Commit 8f507167 authored by Lucas Silva's avatar Lucas Silva Committed by Android (Google) Code Review
Browse files

Merge "Handle configuration changes in home controls complication." into main

parents 6681a9e1 10235706
Loading
Loading
Loading
Loading
+44 −3
Original line number Diff line number Diff line
@@ -25,11 +25,15 @@ import static com.android.systemui.controls.dagger.ControlsComponent.Visibility.
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;

import androidx.annotation.Nullable;

import com.android.internal.logging.UiEventLogger;
import com.android.settingslib.Utils;
import com.android.systemui.CoreStartable;
import com.android.systemui.animation.ActivityLaunchAnimator;
import com.android.systemui.complication.dagger.DreamHomeControlsComplicationComponent;
@@ -43,6 +47,7 @@ import com.android.systemui.dagger.qualifiers.SystemUser;
import com.android.systemui.dreams.DreamOverlayStateController;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.shared.condition.Monitor;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.util.ViewController;
import com.android.systemui.util.condition.ConditionalCoreStartable;

@@ -195,34 +200,70 @@ public class DreamHomeControlsComplication implements Complication {

        private final ActivityStarter mActivityStarter;
        private final Context mContext;
        private final ConfigurationController mConfigurationController;
        private final ControlsComponent mControlsComponent;

        private final UiEventLogger mUiEventLogger;

        private final ConfigurationController.ConfigurationListener mConfigurationListener =
                new ConfigurationController.ConfigurationListener() {
                    @Override
                    public void onUiModeChanged() {
                        reloadResources();
                    }
                };

        @Inject
        DreamHomeControlsChipViewController(
                @Named(DREAM_HOME_CONTROLS_CHIP_VIEW) ImageView view,
                ActivityStarter activityStarter,
                Context context,
                ConfigurationController configurationController,
                ControlsComponent controlsComponent,
                UiEventLogger uiEventLogger) {
            super(view);

            mActivityStarter = activityStarter;
            mContext = context;
            mConfigurationController = configurationController;
            mControlsComponent = controlsComponent;
            mUiEventLogger = uiEventLogger;
        }

        @Override
        protected void onViewAttached() {
            mView.setImageResource(mControlsComponent.getTileImageId());
            mView.setContentDescription(mContext.getString(mControlsComponent.getTileTitleId()));
            reloadResources();
            mView.setOnClickListener(this::onClickHomeControls);
            mConfigurationController.addCallback(mConfigurationListener);
        }

        @Override
        protected void onViewDetached() {}
        protected void onViewDetached() {
            mConfigurationController.removeCallback(mConfigurationListener);
        }

        private void reloadResources() {
            final String title = getControlsTitle();
            if (title != null) {
                mView.setContentDescription(title);
            }
            mView.setImageResource(mControlsComponent.getTileImageId());
            mView.setImageTintList(Utils.getColorAttr(mContext, android.R.attr.textColorPrimary));
            final Drawable background = mView.getBackground();
            if (background != null) {
                background.setTintList(
                        Utils.getColorAttr(mContext, com.android.internal.R.attr.colorSurface));
            }
        }

        @Nullable
        private String getControlsTitle() {
            try {
                return mContext.getString(mControlsComponent.getTileTitleId());
            } catch (Resources.NotFoundException e) {
                return null;
            }
        }

        private void onClickHomeControls(View v) {
            if (DEBUG) Log.d(TAG, "home controls complication tapped");
+2 −8
Original line number Diff line number Diff line
@@ -24,9 +24,8 @@ import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.widget.ImageView;

import com.android.settingslib.Utils;
import com.android.systemui.res.R;
import com.android.systemui.complication.DreamHomeControlsComplication;
import com.android.systemui.res.R;
import com.android.systemui.shared.shadow.DoubleShadowIconDrawable;
import com.android.systemui.shared.shadow.DoubleShadowTextHelper;

@@ -98,7 +97,7 @@ public interface DreamHomeControlsComplicationComponent {
        @DreamHomeControlsComplicationScope
        @Named(DREAM_HOME_CONTROLS_BACKGROUND_DRAWABLE)
        static Drawable providesHomeControlsBackground(Context context, Resources resources) {
            final Drawable background = new DoubleShadowIconDrawable(createShadowInfo(
            return new DoubleShadowIconDrawable(createShadowInfo(
                            resources,
                            R.dimen.dream_overlay_bottom_affordance_key_text_shadow_radius,
                            R.dimen.dream_overlay_bottom_affordance_key_text_shadow_dx,
@@ -117,11 +116,6 @@ public interface DreamHomeControlsComplicationComponent {
                            R.dimen.dream_overlay_bottom_affordance_width),
                    resources.getDimensionPixelSize(R.dimen.dream_overlay_bottom_affordance_inset)
            );

            background.setTintList(
                    Utils.getColorAttr(context, com.android.internal.R.attr.colorSurface));

            return background;
        }

        private static DoubleShadowTextHelper.ShadowInfo createShadowInfo(Resources resources,
+26 −6
Original line number Diff line number Diff line
@@ -21,14 +21,13 @@ import static com.android.systemui.controls.dagger.ControlsComponent.Visibility.

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.content.ComponentName;
import android.content.Context;
import android.content.res.Resources;
import android.testing.AndroidTestingRunner;
import android.view.View;
@@ -48,6 +47,7 @@ import com.android.systemui.controls.management.ControlsListingController;
import com.android.systemui.dreams.DreamOverlayStateController;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.shared.condition.Monitor;
import com.android.systemui.statusbar.policy.ConfigurationController;

import org.junit.Before;
import org.junit.Test;
@@ -70,9 +70,6 @@ public class DreamHomeControlsComplicationTest extends SysuiTestCase {
    @Mock
    private DreamOverlayStateController mDreamOverlayStateController;

    @Mock
    private Context mContext;

    @Mock
    private Resources mResources;

@@ -100,6 +97,9 @@ public class DreamHomeControlsComplicationTest extends SysuiTestCase {
    @Mock
    private UiEventLogger mUiEventLogger;

    @Mock
    private ConfigurationController mConfigurationController;

    @Captor
    private ArgumentCaptor<DreamOverlayStateController.Callback> mStateCallbackCaptor;

@@ -109,7 +109,8 @@ public class DreamHomeControlsComplicationTest extends SysuiTestCase {
    public void setup() {
        MockitoAnnotations.initMocks(this);

        when(mContext.getString(anyInt())).thenReturn("");
        mContext.ensureTestableResources();

        when(mControlsComponent.getControlsController()).thenReturn(
                Optional.of(mControlsController));
        when(mControlsComponent.getControlsListingController()).thenReturn(
@@ -225,6 +226,7 @@ public class DreamHomeControlsComplicationTest extends SysuiTestCase {
                        mHomeControlsView,
                        mActivityStarter,
                        mContext,
                        mConfigurationController,
                        mControlsComponent,
                        mUiEventLogger);
        viewController.onViewAttached();
@@ -237,6 +239,24 @@ public class DreamHomeControlsComplicationTest extends SysuiTestCase {
        verify(mUiEventLogger).log(DreamOverlayUiEvent.DREAM_HOME_CONTROLS_TAPPED);
    }

    @Test
    public void testUnregistersConfigurationCallback() {
        final DreamHomeControlsComplication.DreamHomeControlsChipViewController viewController =
                new DreamHomeControlsComplication.DreamHomeControlsChipViewController(
                        mHomeControlsView,
                        mActivityStarter,
                        mContext,
                        mConfigurationController,
                        mControlsComponent,
                        mUiEventLogger);
        viewController.onViewAttached();
        verify(mConfigurationController).addCallback(any());
        verify(mConfigurationController, never()).removeCallback(any());

        viewController.onViewDetached();
        verify(mConfigurationController).removeCallback(any());
    }

    private void setHaveFavorites(boolean value) {
        final List<StructureInfo> favorites = mock(List.class);
        when(favorites.isEmpty()).thenReturn(!value);