Remove ref to Controller from KeyguardSliceView

This removes the reference that the view has to its controller,
moving click handling up to the controller.

Fixes: 162525274
Test: atest SystemUITEsts
Change-Id: Ia99ff4e643fa84fa138720cc5c01c51597f1169d
This commit is contained in:
Dave Mankoff
2020-08-03 11:51:50 -04:00
parent cd42c08702
commit 93dd88388b
8 changed files with 135 additions and 94 deletions

View File

@@ -131,6 +131,7 @@ public class KeyguardDisplayManager {
Presentation presentation = mPresentations.get(displayId);
if (presentation == null) {
final Presentation newPresentation = new KeyguardPresentation(mContext, display,
mKeyguardStatusViewComponentFactory,
mInjectableInflater.injectable(LayoutInflater.from(mContext)));
newPresentation.setOnDismissListener(dialog -> {
if (newPresentation.equals(mPresentations.get(displayId))) {
@@ -145,9 +146,6 @@ public class KeyguardDisplayManager {
presentation = null;
}
if (presentation != null) {
mKeyguardStatusViewComponentFactory
.build(presentation.findViewById(R.id.clock))
.getKeyguardClockSwitchController().init();
mPresentations.append(displayId, presentation);
return true;
}
@@ -251,7 +249,9 @@ public class KeyguardDisplayManager {
static final class KeyguardPresentation extends Presentation {
private static final int VIDEO_SAFE_REGION = 80; // Percentage of display width & height
private static final int MOVE_CLOCK_TIMEOUT = 10000; // 10s
private final KeyguardStatusViewComponent.Factory mKeyguardStatusViewComponentFactory;
private final LayoutInflater mInjectableLayoutInflater;
private KeyguardClockSwitchController mKeyguardClockSwitchController;
private View mClock;
private int mUsableWidth;
private int mUsableHeight;
@@ -269,8 +269,10 @@ public class KeyguardDisplayManager {
};
KeyguardPresentation(Context context, Display display,
KeyguardStatusViewComponent.Factory keyguardStatusViewComponentFactory,
LayoutInflater injectionLayoutInflater) {
super(context, display, R.style.Theme_SystemUI_KeyguardPresentation);
mKeyguardStatusViewComponentFactory = keyguardStatusViewComponentFactory;
mInjectableLayoutInflater = injectionLayoutInflater;
getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
setCancelable(false);
@@ -312,6 +314,12 @@ public class KeyguardDisplayManager {
// Avoid screen burn in
mClock.post(mMoveTextRunnable);
mKeyguardClockSwitchController = mKeyguardStatusViewComponentFactory
.build(findViewById(R.id.clock))
.getKeyguardClockSwitchController();
mKeyguardClockSwitchController.init();
}
}
}

View File

@@ -16,9 +16,6 @@
package com.android.keyguard;
import static android.app.slice.Slice.HINT_LIST_ITEM;
import static android.view.Display.INVALID_DISPLAY;
import android.animation.LayoutTransition;
import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
@@ -41,11 +38,8 @@ import android.view.animation.Animation;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.lifecycle.LiveData;
import androidx.slice.Slice;
import androidx.slice.SliceItem;
import androidx.slice.core.SliceQuery;
import androidx.slice.widget.ListContent;
import androidx.slice.widget.RowContent;
import androidx.slice.widget.SliceContent;
@@ -55,27 +49,23 @@ import com.android.settingslib.Utils;
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.util.wakelock.KeepAwakeAnimationListener;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* View visible under the clock on the lock screen and AoD.
*/
public class KeyguardSliceView extends LinearLayout implements View.OnClickListener {
public class KeyguardSliceView extends LinearLayout {
private static final String TAG = "KeyguardSliceView";
public static final int DEFAULT_ANIM_DURATION = 550;
private final HashMap<View, PendingIntent> mClickActions;
private ActivityStarter mActivityStarter;
private final LayoutTransition mLayoutTransition;
@VisibleForTesting
TextView mTitle;
@@ -83,8 +73,6 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
private int mTextColor;
private float mDarkAmount = 0;
private LiveData<Slice> mLiveData;
private int mDisplayId = INVALID_DISPLAY;
private int mIconSize;
private int mIconSizeWithHeader;
/**
@@ -96,13 +84,12 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
private final int mRowPadding;
private float mRowTextSize;
private float mRowWithHeaderTextSize;
private KeyguardSliceViewController mController;
private View.OnClickListener mOnClickListener;
public KeyguardSliceView(Context context, AttributeSet attrs) {
super(context, attrs);
Resources resources = context.getResources();
mClickActions = new HashMap<>();
mRowPadding = resources.getDimensionPixelSize(R.dimen.subtitle_clock_padding);
mRowWithHeaderPadding = resources.getDimensionPixelSize(R.dimen.header_subtitle_padding);
@@ -130,7 +117,6 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
R.dimen.widget_label_font_size);
mRowWithHeaderTextSize = mContext.getResources().getDimensionPixelSize(
R.dimen.header_row_font_size);
mTitle.setOnClickListener(this);
mTitle.setBreakStrategy(LineBreaker.BREAK_STRATEGY_BALANCED);
}
@@ -147,44 +133,31 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
return mHasHeader;
}
void showSlice(Slice slice) {
Trace.beginSection("KeyguardSliceView#showSlice");
if (slice == null) {
mTitle.setVisibility(GONE);
mRow.setVisibility(GONE);
mHasHeader = false;
if (mContentChangeListener != null) {
mContentChangeListener.run();
}
Trace.endSection();
return;
void hideSlice() {
mTitle.setVisibility(GONE);
mRow.setVisibility(GONE);
mHasHeader = false;
if (mContentChangeListener != null) {
mContentChangeListener.run();
}
mClickActions.clear();
}
Map<View, PendingIntent> showSlice(RowContent header, List<SliceContent> subItems) {
Trace.beginSection("KeyguardSliceView#showSlice");
mHasHeader = header != null;
Map<View, PendingIntent> clickActions = new HashMap<>();
ListContent lc = new ListContent(getContext(), slice);
SliceContent headerContent = lc.getHeader();
mHasHeader = headerContent != null && !headerContent.getSliceItem().hasHint(HINT_LIST_ITEM);
List<SliceContent> subItems = new ArrayList<>();
for (int i = 0; i < lc.getRowItems().size(); i++) {
SliceContent subItem = lc.getRowItems().get(i);
String itemUri = subItem.getSliceItem().getSlice().getUri().toString();
// Filter out the action row
if (!KeyguardSliceProvider.KEYGUARD_ACTION_URI.equals(itemUri)) {
subItems.add(subItem);
}
}
if (!mHasHeader) {
mTitle.setVisibility(GONE);
} else {
mTitle.setVisibility(VISIBLE);
RowContent header = lc.getHeader();
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());
clickActions.put(mTitle, header.getPrimaryAction().getAction());
}
}
@@ -214,7 +187,7 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
if (rc.getPrimaryAction() != null) {
pendingIntent = rc.getPrimaryAction().getAction();
}
mClickActions.put(button, pendingIntent);
clickActions.put(button, pendingIntent);
final SliceItem titleItem = rc.getTitleItem();
button.setText(titleItem == null ? null : titleItem.getText());
@@ -235,14 +208,14 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
}
}
button.setCompoundDrawables(iconDrawable, null, null, null);
button.setOnClickListener(this);
button.setOnClickListener(mOnClickListener);
button.setClickable(pendingIntent != null);
}
// Removing old views
for (int i = 0; i < mRow.getChildCount(); i++) {
View child = mRow.getChildAt(i);
if (!mClickActions.containsKey(child)) {
if (!clickActions.containsKey(child)) {
mRow.removeView(child);
i--;
}
@@ -252,6 +225,8 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
mContentChangeListener.run();
}
Trace.endSection();
return clickActions;
}
public void setDarkAmount(float darkAmount) {
@@ -272,14 +247,6 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
}
}
@Override
public void onClick(View v) {
final PendingIntent action = mClickActions.get(v);
if (action != null && mActivityStarter != null) {
mActivityStarter.startPendingIntentDismissingKeyguard(action);
}
}
/**
* Runnable that gets invoked every time the title or the row visibility changes.
* @param contentChangeListener The listener.
@@ -308,13 +275,8 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
R.dimen.header_row_font_size);
}
public void refresh() {
mController.refresh();
}
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
pw.println("KeyguardSliceView:");
pw.println(" mClickActions: " + mClickActions);
pw.println(" mTitle: " + (mTitle == null ? "null" : mTitle.getVisibility() == VISIBLE));
pw.println(" mRow: " + (mRow == null ? "null" : mRow.getVisibility() == VISIBLE));
pw.println(" mTextColor: " + Integer.toHexString(mTextColor));
@@ -322,13 +284,10 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
pw.println(" mHasHeader: " + mHasHeader);
}
public void setActivityStarter(ActivityStarter activityStarter) {
mActivityStarter = activityStarter;
}
public void setController(KeyguardSliceViewController keyguardSliceViewController) {
// TODO: remove this method.
mController = keyguardSliceViewController;
@Override
public void setOnClickListener(View.OnClickListener onClickListener) {
mOnClickListener = onClickListener;
mTitle.setOnClickListener(onClickListener);
}
public static class Row extends LinearLayout {

View File

@@ -16,8 +16,10 @@
package com.android.keyguard;
import static android.app.slice.Slice.HINT_LIST_ITEM;
import static android.view.Display.DEFAULT_DISPLAY;
import android.app.PendingIntent;
import android.net.Uri;
import android.os.Trace;
import android.provider.Settings;
@@ -30,6 +32,9 @@ import androidx.lifecycle.LiveData;
import androidx.lifecycle.Observer;
import androidx.slice.Slice;
import androidx.slice.SliceViewManager;
import androidx.slice.widget.ListContent;
import androidx.slice.widget.RowContent;
import androidx.slice.widget.SliceContent;
import androidx.slice.widget.SliceLiveData;
import com.android.keyguard.dagger.KeyguardStatusViewScope;
@@ -42,15 +47,19 @@ import com.android.systemui.tuner.TunerService;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.inject.Inject;
/** Controller for a {@link KeyguardSliceView}. */
@KeyguardStatusViewScope
public class KeyguardSliceViewController implements Dumpable {
private static final String TAG = "KeyguardSliceViewController";
private static final String TAG = "KeyguardSliceViewCtrl";
private final KeyguardSliceView mView;
private final KeyguardStatusView mKeyguardStatusView;
private final ActivityStarter mActivityStarter;
private final ConfigurationController mConfigurationController;
private final TunerService mTunerService;
@@ -59,6 +68,7 @@ public class KeyguardSliceViewController implements Dumpable {
private LiveData<Slice> mLiveData;
private Uri mKeyguardSliceUri;
private Slice mSlice;
private Map<View, PendingIntent> mClickActions;
private final View.OnAttachStateChangeListener mOnAttachStateChangeListener =
new View.OnAttachStateChangeListener() {
@@ -106,15 +116,27 @@ public class KeyguardSliceViewController implements Dumpable {
@Override
public void onChanged(Slice slice) {
mSlice = slice;
mView.showSlice(slice);
showSlice(slice);
}
};
private View.OnClickListener mOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
final PendingIntent action = mClickActions.get(v);
if (action != null && mActivityStarter != null) {
mActivityStarter.startPendingIntentDismissingKeyguard(action);
}
}
};
@Inject
public KeyguardSliceViewController(KeyguardSliceView keyguardSliceView,
ActivityStarter activityStarter, ConfigurationController configurationController,
TunerService tunerService, DumpManager dumpManager) {
KeyguardStatusView keyguardStatusView, ActivityStarter activityStarter,
ConfigurationController configurationController, TunerService tunerService,
DumpManager dumpManager) {
mView = keyguardSliceView;
mKeyguardStatusView = keyguardStatusView;
mActivityStarter = activityStarter;
mConfigurationController = configurationController;
mTunerService = tunerService;
@@ -127,8 +149,9 @@ public class KeyguardSliceViewController implements Dumpable {
mOnAttachStateChangeListener.onViewAttachedToWindow(mView);
}
mView.addOnAttachStateChangeListener(mOnAttachStateChangeListener);
mView.setActivityStarter(mActivityStarter);
mView.setController(this); // TODO: remove this.
mView.setOnClickListener(mOnClickListener);
// TODO: remove the line below.
mKeyguardStatusView.setKeyguardSliceViewController(this);
}
/**
@@ -177,8 +200,35 @@ public class KeyguardSliceViewController implements Dumpable {
Trace.endSection();
}
void showSlice(Slice slice) {
Trace.beginSection("KeyguardSliceViewController#showSlice");
if (slice == null) {
mView.hideSlice();
Trace.endSection();
return;
}
ListContent lc = new ListContent(slice);
RowContent headerContent = lc.getHeader();
boolean hasHeader =
headerContent != null && !headerContent.getSliceItem().hasHint(HINT_LIST_ITEM);
List<SliceContent> subItems = lc.getRowItems().stream().filter(sliceContent -> {
String itemUri = sliceContent.getSliceItem().getSlice().getUri().toString();
// Filter out the action row
return !KeyguardSliceProvider.KEYGUARD_ACTION_URI.equals(itemUri);
}).collect(Collectors.toList());
mClickActions = mView.showSlice(hasHeader ? headerContent : null, subItems);
Trace.endSection();
}
@Override
public void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter pw, @NonNull String[] args) {
pw.println(" mSlice: " + mSlice);
pw.println(" mClickActions: " + mClickActions);
}
}

View File

@@ -32,7 +32,6 @@ import android.util.Slog;
import android.util.TypedValue;
import android.view.View;
import android.widget.GridLayout;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.core.graphics.ColorUtils;
@@ -56,7 +55,6 @@ public class KeyguardStatusView extends GridLayout implements
private final LockPatternUtils mLockPatternUtils;
private final IActivityManager mIActivityManager;
private LinearLayout mStatusViewContainer;
private TextView mLogoutView;
private KeyguardClockSwitch mClockView;
private TextView mOwnerInfo;
@@ -64,6 +62,7 @@ public class KeyguardStatusView extends GridLayout implements
private View mNotificationIcons;
private Runnable mPendingMarqueeStart;
private Handler mHandler;
private KeyguardSliceViewController mKeyguardSliceViewController;
private boolean mPulsing;
private float mDarkAmount = 0;
@@ -179,7 +178,6 @@ public class KeyguardStatusView extends GridLayout implements
@Override
protected void onFinishInflate() {
super.onFinishInflate();
mStatusViewContainer = findViewById(R.id.status_view_container);
mLogoutView = findViewById(R.id.logout);
mNotificationIcons = findViewById(R.id.clock_notification_icon_container);
if (mLogoutView != null) {
@@ -250,7 +248,7 @@ public class KeyguardStatusView extends GridLayout implements
public void dozeTimeTick() {
refreshTime();
mKeyguardSlice.refresh();
mKeyguardSliceViewController.refresh();
}
private void refreshTime() {
@@ -456,4 +454,9 @@ public class KeyguardStatusView extends GridLayout implements
Log.e(TAG, "Failed to logout user", re);
}
}
// TODO: remove this method when a controller is available.
void setKeyguardSliceViewController(KeyguardSliceViewController keyguardSliceViewController) {
mKeyguardSliceViewController = keyguardSliceViewController;
}
}

View File

@@ -16,6 +16,7 @@
package com.android.keyguard;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
import android.content.Context;
@@ -28,6 +29,7 @@ import android.view.View;
import androidx.test.filters.SmallTest;
import com.android.keyguard.KeyguardDisplayManager.KeyguardPresentation;
import com.android.keyguard.dagger.KeyguardStatusViewComponent;
import com.android.systemui.R;
import com.android.systemui.SystemUIFactory;
import com.android.systemui.SysuiTestCase;
@@ -51,6 +53,12 @@ public class KeyguardPresentationTest extends SysuiTestCase {
KeyguardSliceView mMockKeyguardSliceView;
@Mock
KeyguardStatusView mMockKeyguardStatusView;
@Mock
private KeyguardStatusViewComponent.Factory mKeyguardStatusViewComponentFactory;
@Mock
private KeyguardStatusViewComponent mKeyguardStatusViewComponent;
@Mock
private KeyguardClockSwitchController mKeyguardClockSwitchController;
LayoutInflater mLayoutInflater;
@@ -62,6 +70,11 @@ public class KeyguardPresentationTest extends SysuiTestCase {
when(mMockKeyguardSliceView.getContext()).thenReturn(mContext);
when(mMockKeyguardStatusView.getContext()).thenReturn(mContext);
when(mMockKeyguardStatusView.findViewById(R.id.clock)).thenReturn(mMockKeyguardStatusView);
when(mKeyguardStatusViewComponentFactory.build(any(KeyguardStatusView.class)))
.thenReturn(mKeyguardStatusViewComponent);
when(mKeyguardStatusViewComponent.getKeyguardClockSwitchController())
.thenReturn(mKeyguardClockSwitchController);
allowTestableLooperAsMainThread();
InjectionInflationController inflationController = new InjectionInflationController(
@@ -99,7 +112,8 @@ public class KeyguardPresentationTest extends SysuiTestCase {
@Test
public void testInflation_doesntCrash() {
KeyguardPresentation keyguardPresentation = new KeyguardPresentation(mContext,
mContext.getDisplayNoVerify(), mLayoutInflater);
mContext.getDisplayNoVerify(), mKeyguardStatusViewComponentFactory,
mLayoutInflater);
keyguardPresentation.onCreate(null /*savedInstanceState */);
}
}

View File

@@ -44,7 +44,9 @@ import org.mockito.MockitoAnnotations;
@RunWithLooper(setAsMainLooper = true)
public class KeyguardSliceViewControllerTest extends SysuiTestCase {
@Mock
private KeyguardSliceView mView;
private KeyguardSliceView mView;;
@Mock
private KeyguardStatusView mKeyguardStatusView;
@Mock
private TunerService mTunerService;
@Mock
@@ -61,15 +63,15 @@ public class KeyguardSliceViewControllerTest extends SysuiTestCase {
when(mView.isAttachedToWindow()).thenReturn(true);
when(mView.getContext()).thenReturn(mContext);
mController = new KeyguardSliceViewController(
mView, mActivityStarter, mConfigurationController, mTunerService, mDumpManager);
mView, mKeyguardStatusView, mActivityStarter, mConfigurationController,
mTunerService, mDumpManager);
mController.setupUri(KeyguardSliceProvider.KEYGUARD_SLICE_URI);
}
@Test
public void refresh_replacesSliceContentAndNotifiesListener() {
mController.refresh();
verify(mView).showSlice(null);
verify(mView).hideSlice();
}
@Test

View File

@@ -22,9 +22,11 @@ import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
import android.view.LayoutInflater;
import androidx.slice.Slice;
import androidx.slice.SliceProvider;
import androidx.slice.SliceSpecs;
import androidx.slice.builders.ListBuilder;
import androidx.slice.widget.RowContent;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
@@ -34,7 +36,6 @@ import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.util.Collections;
@@ -47,8 +48,6 @@ import java.util.concurrent.atomic.AtomicBoolean;
public class KeyguardSliceViewTest extends SysuiTestCase {
private KeyguardSliceView mKeyguardSliceView;
private Uri mSliceUri;
@Mock
private KeyguardSliceViewController mKeyguardSliceViewController;
@Before
public void setUp() throws Exception {
@@ -56,7 +55,6 @@ public class KeyguardSliceViewTest extends SysuiTestCase {
LayoutInflater layoutInflater = LayoutInflater.from(getContext());
mKeyguardSliceView = (KeyguardSliceView) layoutInflater
.inflate(R.layout.keyguard_status_area, null);
mKeyguardSliceView.setController(mKeyguardSliceViewController);
mSliceUri = Uri.parse(KeyguardSliceProvider.KEYGUARD_SLICE_URI);
SliceProvider.setSpecs(new HashSet<>(Collections.singletonList(SliceSpecs.LIST)));
}
@@ -64,9 +62,13 @@ public class KeyguardSliceViewTest extends SysuiTestCase {
@Test
public void showSlice_notifiesListener() {
ListBuilder builder = new ListBuilder(getContext(), mSliceUri, ListBuilder.INFINITY);
builder.setHeader(new ListBuilder.HeaderBuilder().setTitle("header title!"));
Slice slice = builder.build();
RowContent rowContent = new RowContent(slice.getItemArray()[0], 0);
AtomicBoolean notified = new AtomicBoolean();
mKeyguardSliceView.setContentChangeListener(()-> notified.set(true));
mKeyguardSliceView.showSlice(builder.build());
mKeyguardSliceView.showSlice(rowContent, Collections.EMPTY_LIST);
Assert.assertTrue("Listener should be notified about slice changes.",
notified.get());
}
@@ -75,7 +77,7 @@ public class KeyguardSliceViewTest extends SysuiTestCase {
public void showSlice_emptySliceNotifiesListener() {
AtomicBoolean notified = new AtomicBoolean();
mKeyguardSliceView.setContentChangeListener(()-> notified.set(true));
mKeyguardSliceView.showSlice(null);
mKeyguardSliceView.showSlice(null, Collections.EMPTY_LIST);
Assert.assertTrue("Listener should be notified about slice changes.",
notified.get());
}
@@ -83,11 +85,13 @@ public class KeyguardSliceViewTest extends SysuiTestCase {
@Test
public void hasHeader_readsSliceData() {
ListBuilder builder = new ListBuilder(getContext(), mSliceUri, ListBuilder.INFINITY);
mKeyguardSliceView.showSlice(builder.build());
mKeyguardSliceView.showSlice(null, Collections.EMPTY_LIST);
Assert.assertFalse("View should not have a header", mKeyguardSliceView.hasHeader());
builder.setHeader(new ListBuilder.HeaderBuilder().setTitle("header title!"));
mKeyguardSliceView.showSlice(builder.build());
Slice slice = builder.build();
RowContent rowContent = new RowContent(slice.getItemArray()[0], 0);
mKeyguardSliceView.showSlice(rowContent, Collections.EMPTY_LIST);
Assert.assertTrue("View should have a header", mKeyguardSliceView.hasHeader());
}

View File

@@ -40,7 +40,8 @@ import org.mockito.Mock;
public class KeyguardStatusViewTest extends SysuiTestCase {
@Mock
KeyguardSliceView mKeyguardSlice;
KeyguardSliceViewController mKeyguardSliceViewController;
@Mock
KeyguardClockSwitch mClockView;
@InjectMocks
@@ -64,7 +65,7 @@ public class KeyguardStatusViewTest extends SysuiTestCase {
@Test
public void dozeTimeTick_updatesSlice() {
mKeyguardStatusView.dozeTimeTick();
verify(mKeyguardSlice).refresh();
verify(mKeyguardSliceViewController).refresh();
}
@Test