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

Commit 9838514a authored by Santiago Etchebehere's avatar Santiago Etchebehere
Browse files

Refresh time in style cover status bar

Listen for TIME_TICK events and update the time in the cover
to match the device's.

Fixes: 133438775
Change-Id: I5608ad462aadc2d92507341d6954ebae53b3c08a
parent d6fea86c
Loading
Loading
Loading
Loading
+41 −0
Original line number Diff line number Diff line
package com.android.customization.picker;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;

import androidx.annotation.Nullable;

/**
 * BroadcastReceiver that can notify a listener when the system time (minutes) changes.
 * Use {@link #registerNewReceiver(Context, TimeListener)} to create a new instance that will be
 * automatically registered using the given Context.
 */
public class TimeTicker extends BroadcastReceiver {

    public interface TimeListener {
        void onCurrentTimeChanged();
    }

    public static TimeTicker registerNewReceiver(Context context, TimeListener listener) {
        TimeTicker receiver = new TimeTicker(listener);
        // Register broadcast receiver for time tick
        final IntentFilter filter = new IntentFilter(Intent.ACTION_TIME_TICK);
        context.registerReceiver(receiver, filter);
        return receiver;
    }

    @Nullable private TimeListener mListener;

    private TimeTicker(TimeListener listener) {
        mListener = listener;
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        if (mListener != null) {
            mListener.onCurrentTimeChanged();
        }
    }
}
+23 −1
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import androidx.annotation.Nullable;
import androidx.cardview.widget.CardView;

import com.android.customization.model.theme.ThemeBundle.PreviewInfo;
import com.android.customization.picker.TimeTicker;
import com.android.customization.picker.theme.ThemePreviewPage.ThemeCoverPage;
import com.android.wallpaper.R;
import com.android.wallpaper.asset.Asset;
@@ -76,7 +77,7 @@ public class CustomThemeNameFragment extends CustomThemeStepFragment {

    private Asset mWallpaperAsset;
    private ThemeCoverPage mCoverPage;

    private TimeTicker mTicker;
    private EditText mNameEditor;

    @Override
@@ -108,6 +109,27 @@ public class CustomThemeNameFragment extends CustomThemeStepFragment {
        return view;
    }

    @Override
    public void onResume() {
        super.onResume();
        mTicker = TimeTicker.registerNewReceiver(getContext(), this::updateTime);
        updateTime();
    }

    private void updateTime() {
        if (mCoverPage != null) {
            mCoverPage.updateTime();
        }
    }

    @Override
    public void onPause() {
        super.onPause();
        if (getContext() != null) {
            getContext().unregisterReceiver(mTicker);
        }
    }

    private void bindCover(CardView card) {
        Context context = getContext();
        PreviewInfo previewInfo = mCustomThemeManager.buildCustomThemePreviewInfo(context);
+28 −1
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ package com.android.customization.picker.theme;

import android.app.Activity;
import android.app.WallpaperColors;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.res.ColorStateList;
@@ -51,7 +52,9 @@ import com.android.customization.model.theme.ThemeManager;
import com.android.customization.model.theme.custom.CustomTheme;
import com.android.customization.module.ThemesUserEventLogger;
import com.android.customization.picker.BasePreviewAdapter;
import com.android.customization.picker.TimeTicker;
import com.android.customization.picker.theme.ThemePreviewPage.ThemeCoverPage;
import com.android.customization.picker.theme.ThemePreviewPage.TimeContainer;
import com.android.customization.widget.OptionSelectorController;
import com.android.customization.widget.PreviewPager;
import com.android.wallpaper.R;
@@ -94,6 +97,7 @@ public class ThemeFragment extends ToolbarFragment {
    private boolean mUseMyWallpaper;
    private WallpaperInfo mCurrentHomeWallpaper;
    private CurrentWallpaperInfoFactory mCurrentWallpaperFactory;
    private TimeTicker mTicker;

    @Override
    public void onAttach(Context context) {
@@ -120,7 +124,6 @@ public class ThemeFragment extends ToolbarFragment {
        });
        mUseMyWallpaperButton = view.findViewById(R.id.use_my_wallpaper);
        mUseMyWallpaperButton.setOnCheckedChangeListener(this::onUseMyWallpaperCheckChanged);

        setUpOptions(savedInstanceState);

        return view;
@@ -148,7 +151,23 @@ public class ThemeFragment extends ToolbarFragment {
    @Override
    public void onResume() {
        super.onResume();
        mTicker = TimeTicker.registerNewReceiver(getContext(), this::updateTime);
        reloadWallpaper();
        updateTime();
    }

    private void updateTime() {
        if (mAdapter != null) {
            mAdapter.updateTime();
        }
    }

    @Override
    public void onPause() {
        super.onPause();
        if (getContext() != null) {
            getContext().unregisterReceiver(mTicker);
        }
    }

    @Override
@@ -466,6 +485,14 @@ public class ThemeFragment extends ToolbarFragment {
            }
        }

        public void updateTime() {
            for (ThemePreviewPage page : mPages) {
                if (page instanceof TimeContainer) {
                    ((TimeContainer)page).updateTime();
                }
            }
        }

        private static class WallpaperPreviewLayoutListener implements OnLayoutChangeListener {
            private final ThemeBundle mTheme;
            private final PreviewInfo mPreviewInfo;
+14 −1
Original line number Diff line number Diff line
@@ -30,6 +30,11 @@ import java.util.List;
import java.util.TimeZone;

abstract class ThemePreviewPage extends PreviewPage {

    public interface TimeContainer {
        void updateTime();
    }

    @StringRes
    final int nameResId;
    @DrawableRes
@@ -71,7 +76,7 @@ abstract class ThemePreviewPage extends PreviewPage {

    protected abstract void bindBody(boolean forceRebind);

    static class ThemeCoverPage extends ThemePreviewPage {
    static class ThemeCoverPage extends ThemePreviewPage implements TimeContainer {

        /**
         * Maps which icon from ResourceConstants#ICONS_FOR_PREVIEW to use for each icon in the
@@ -219,6 +224,14 @@ abstract class ThemePreviewPage extends PreviewPage {
            }
        }

        @Override
        public void updateTime() {
            if (card != null) {
                ((TextView) card.findViewById(R.id.theme_preview_clock)).setText(
                        getFormattedTime());
            }
        }

        private boolean useRoundedQSB(int cornerRadius) {
            return cornerRadius >=
                    card.getResources().getDimensionPixelSize(R.dimen.roundCornerThreshold);