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

Commit 10874c79 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix clock handling of configuration change" into main

parents abf8df45 e1405558
Loading
Loading
Loading
Loading
+92 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2025 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.systemui.statusbar.policy

import android.content.res.Configuration
import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.Flags
import com.android.systemui.SysuiTestCase
import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith

@SmallTest
@RunWith(AndroidJUnit4::class)
class ClockTest : SysuiTestCase() {

    private lateinit var clock: Clock

    @Before
    fun setUp() {
        clock = Clock(context, null)
    }

    @Test
    @EnableFlags(Flags.FLAG_SHADE_WINDOW_GOES_AROUND)
    fun onConfigurationChanged_fontScaleChanges_paddingChanges() {
        val initialPadding = clock.paddingLeft

        val newConfig = Configuration(context.resources.configuration)
        newConfig.fontScale += 1.0f

        clock.onConfigurationChanged(newConfig)

        assertThat(clock.paddingLeft).isNotEqualTo(initialPadding)
    }

    @Test
    @EnableFlags(Flags.FLAG_SHADE_WINDOW_GOES_AROUND)
    fun onConfigurationChanged_densityChanges_paddingChanges() {
        val initialPadding = clock.paddingLeft

        val newConfig = Configuration(context.resources.configuration)
        newConfig.densityDpi += 1

        clock.onConfigurationChanged(newConfig)

        assertThat(clock.paddingLeft).isNotEqualTo(initialPadding)
    }

    @Test
    @EnableFlags(Flags.FLAG_SHADE_WINDOW_GOES_AROUND)
    fun onConfigurationChanged_nothingChanges_paddingDoesNotChange() {
        val initialPadding = clock.paddingLeft

        val newConfig = Configuration(context.resources.configuration)

        clock.onConfigurationChanged(newConfig)

        assertThat(clock.paddingLeft).isNotEqualTo(initialPadding)
    }

    @Test
    @DisableFlags(Flags.FLAG_SHADE_WINDOW_GOES_AROUND)
    fun onConfigurationChanged_densityChanges_flagOff_paddingDoesNotChange() {
        val initialPadding = clock.paddingLeft

        val newConfig = Configuration(context.resources.configuration)
        newConfig.densityDpi += 1

        clock.onConfigurationChanged(newConfig)

        assertThat(clock.paddingLeft).isEqualTo(initialPadding)
    }
}
+13 −8
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.graphics.Rect;
@@ -45,6 +46,7 @@ import android.view.View;
import android.widget.TextView;

import com.android.settingslib.Utils;
import com.android.settingslib.applications.InterestingConfigChanges;
import com.android.systemui.Dependency;
import com.android.systemui.FontSizeUtils;
import com.android.systemui.broadcast.BroadcastDispatcher;
@@ -98,7 +100,6 @@ public class Clock extends TextView implements
    private SimpleDateFormat mContentDescriptionFormat;
    private Locale mLocale;
    private DateTimePatternGenerator mDateTimePatternGenerator;
    private Configuration oldConfig = new Configuration();

    private static final int AM_PM_STYLE_NORMAL  = 0;
    private static final int AM_PM_STYLE_SMALL   = 1;
@@ -108,6 +109,8 @@ public class Clock extends TextView implements
    private boolean mShowSeconds;
    private Handler mSecondsHandler;

    // Tracks config changes that will make the clock change dimensions
    private final InterestingConfigChanges mInterestingConfigChanges;
    /**
     * Color to be set on this {@link TextView}, when wallpaperTextColor is <b>not</b> utilized.
     */
@@ -143,6 +146,12 @@ public class Clock extends TextView implements
        }
        mBroadcastDispatcher = Dependency.get(BroadcastDispatcher.class);
        mUserTracker = Dependency.get(UserTracker.class);
        if (ShadeWindowGoesAround.isEnabled()) {
            mInterestingConfigChanges = new InterestingConfigChanges(
                    ActivityInfo.CONFIG_FONT_SCALE | ActivityInfo.CONFIG_DENSITY);
        } else {
            mInterestingConfigChanges = null;
        }

        setIncludeFontPadding(false);
    }
@@ -395,18 +404,14 @@ public class Clock extends TextView implements
    protected void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        if (ShadeWindowGoesAround.isEnabled()) {
            if (densityOrFontScaleChanged(oldConfig, newConfig)) {
            final boolean shouldReloadDimensions =
                    mInterestingConfigChanges.applyNewConfig(newConfig);
            if (shouldReloadDimensions) {
                reloadDimens();
            }
            oldConfig = newConfig;
        }
    }

    private boolean densityOrFontScaleChanged(Configuration oldConfig, Configuration newConfig) {
        return (oldConfig.densityDpi != newConfig.densityDpi)
                || oldConfig.fontScale != newConfig.fontScale;
    }

    private void updateShowSeconds() {
        if (mShowSeconds) {
            // Wait until we have a display to start trying to show seconds.