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

Commit ad07944c authored by Lucas Dupin's avatar Lucas Dupin
Browse files

Make KeyguardSliceView title tappable

Bug: 129877485
Test: manual with caldendar event
Change-Id: I413f9c92541f7b7d8ee8a766a43f3086b88aa7f8
parent 65e18e43
Loading
Loading
Loading
Loading
+23 −18
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ import static android.app.slice.Slice.HINT_LIST_ITEM;
import static android.view.Display.DEFAULT_DISPLAY;
import static android.view.Display.INVALID_DISPLAY;

import static com.android.systemui.util.InjectionInflationController.VIEW_CONTEXT;

import android.animation.LayoutTransition;
import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
@@ -60,6 +62,7 @@ import com.android.systemui.Dependency;
import com.android.systemui.Interpolators;
import com.android.systemui.R;
import com.android.systemui.keyguard.KeyguardSliceProvider;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.tuner.TunerService;
import com.android.systemui.util.wakelock.KeepAwakeAnimationListener;
@@ -70,6 +73,9 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import javax.inject.Inject;
import javax.inject.Named;

/**
 * View visible under the clock on the lock screen and AoD.
 */
@@ -80,6 +86,8 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
    public static final int DEFAULT_ANIM_DURATION = 550;

    private final HashMap<View, PendingIntent> mClickActions;
    private final ActivityStarter mActivityStarter;
    private final ConfigurationController mConfigurationController;
    private Uri mKeyguardSliceUri;
    @VisibleForTesting
    TextView mTitle;
@@ -99,16 +107,10 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
    private final int mRowWithHeaderPadding;
    private final int mRowPadding;

    public KeyguardSliceView(Context context) {
        this(context, null, 0);
    }

    public KeyguardSliceView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public KeyguardSliceView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    @Inject
    public KeyguardSliceView(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs,
            ActivityStarter activityStarter, ConfigurationController configurationController) {
        super(context, attrs);

        TunerService tunerService = Dependency.get(TunerService.class);
        tunerService.addTunable(this, Settings.Secure.KEYGUARD_SLICE_URI);
@@ -117,6 +119,8 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
        mRowPadding = context.getResources().getDimensionPixelSize(R.dimen.subtitle_clock_padding);
        mRowWithHeaderPadding = context.getResources()
                .getDimensionPixelSize(R.dimen.header_subtitle_padding);
        mActivityStarter = activityStarter;
        mConfigurationController = configurationController;

        LayoutTransition transition = new LayoutTransition();
        transition.setStagger(LayoutTransition.CHANGE_APPEARING, DEFAULT_ANIM_DURATION / 2);
@@ -137,6 +141,7 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
        mRow = findViewById(R.id.row);
        mTextColor = Utils.getColorAttrDefaultColor(mContext, R.attr.wallpaperTextColor);
        mIconSize = (int) mContext.getResources().getDimension(R.dimen.widget_icon_size);
        mTitle.setOnClickListener(this);
    }

    @Override
@@ -146,7 +151,7 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
        mDisplayId = getDisplay().getDisplayId();
        // Make sure we always have the most current slice
        mLiveData.observeForever(this);
        Dependency.get(ConfigurationController.class).addCallback(this);
        mConfigurationController.addCallback(this);
    }

    @Override
@@ -157,7 +162,7 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
        if (mDisplayId == DEFAULT_DISPLAY) {
            mLiveData.removeObserver(this);
        }
        Dependency.get(ConfigurationController.class).removeCallback(this);
        mConfigurationController.removeCallback(this);
    }

    /**
@@ -179,6 +184,7 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
            Trace.endSection();
            return;
        }
        mClickActions.clear();

        ListContent lc = new ListContent(getContext(), mSlice);
        SliceContent headerContent = lc.getHeader();
@@ -201,9 +207,12 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
            SliceItem mainTitle = header.getTitleItem();
            CharSequence title = mainTitle != null ? mainTitle.getText() : null;
            mTitle.setText(title);
            if (header.getPrimaryAction() != null
                    && header.getPrimaryAction().getAction() != null) {
                mClickActions.put(mTitle, header.getPrimaryAction().getAction());
            }
        }

        mClickActions.clear();
        final int subItemsCount = subItems.size();
        final int blendedColor = getTextColor();
        final int startIndex = mHasHeader ? 1 : 0; // First item is header; skip it
@@ -289,11 +298,7 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
    public void onClick(View v) {
        final PendingIntent action = mClickActions.get(v);
        if (action != null) {
            try {
                action.send();
            } catch (PendingIntent.CanceledException e) {
                Log.i(TAG, "Pending intent cancelled, nothing to launch", e);
            }
            mActivityStarter.startPendingIntentDismissingKeyguard(action);
        }
    }

+6 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.view.LayoutInflater;
import android.view.View;

import com.android.keyguard.KeyguardClockSwitch;
import com.android.keyguard.KeyguardSliceView;
import com.android.systemui.SystemUIFactory;
import com.android.systemui.qs.QSCarrierGroup;
import com.android.systemui.qs.QSFooterImpl;
@@ -136,6 +137,11 @@ public class InjectionInflationController {
         * Creates the KeyguardClockSwitch.
         */
        KeyguardClockSwitch createKeyguardClockSwitch();

        /**
         * Creates the KeyguardSliceView.
         */
        KeyguardSliceView createKeyguardSliceView();
    }

    /**
+7 −1
Original line number Diff line number Diff line
@@ -27,8 +27,10 @@ import androidx.slice.SliceProvider;
import androidx.slice.SliceSpecs;
import androidx.slice.builders.ListBuilder;

import com.android.systemui.SystemUIFactory;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.keyguard.KeyguardSliceProvider;
import com.android.systemui.util.InjectionInflationController;

import org.junit.Assert;
import org.junit.Before;
@@ -49,7 +51,11 @@ public class KeyguardSliceViewTest extends SysuiTestCase {
    @Before
    public void setUp() throws Exception {
        com.android.systemui.util.Assert.sMainLooper = TestableLooper.get(this).getLooper();
        mKeyguardSliceView = (KeyguardSliceView) LayoutInflater.from(getContext())
        InjectionInflationController inflationController = new InjectionInflationController(
                SystemUIFactory.getInstance().getRootComponent());
        LayoutInflater layoutInflater = inflationController
                .injectable(LayoutInflater.from(getContext()));
        mKeyguardSliceView = (KeyguardSliceView) layoutInflater
                .inflate(R.layout.keyguard_status_area, null);
        mSliceUri = Uri.parse(KeyguardSliceProvider.KEYGUARD_SLICE_URI);
        SliceProvider.setSpecs(new HashSet<>(Collections.singletonList(SliceSpecs.LIST)));