Loading packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java +20 −10 Original line number Original line Diff line number Diff line Loading @@ -29,6 +29,7 @@ import android.annotation.ColorInt; import android.annotation.StyleRes; import android.annotation.StyleRes; import android.app.PendingIntent; import android.app.PendingIntent; import android.content.Context; import android.content.Context; import android.content.res.Resources; import android.graphics.Color; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable; import android.graphics.text.LineBreaker; import android.graphics.text.LineBreaker; Loading @@ -40,6 +41,7 @@ import android.text.TextUtils.TruncateAt; import android.util.AttributeSet; import android.util.AttributeSet; import android.util.Log; import android.util.Log; import android.util.TypedValue; import android.util.TypedValue; import android.view.Display; import android.view.View; import android.view.View; import android.view.animation.Animation; import android.view.animation.Animation; import android.widget.LinearLayout; import android.widget.LinearLayout; Loading @@ -62,6 +64,7 @@ import com.android.settingslib.Utils; import com.android.systemui.Dependency; import com.android.systemui.Dependency; import com.android.systemui.Interpolators; import com.android.systemui.Interpolators; import com.android.systemui.R; import com.android.systemui.R; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.keyguard.KeyguardSliceProvider; import com.android.systemui.keyguard.KeyguardSliceProvider; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController; Loading Loading @@ -90,6 +93,7 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe private final ActivityStarter mActivityStarter; private final ActivityStarter mActivityStarter; private final ConfigurationController mConfigurationController; private final ConfigurationController mConfigurationController; private final LayoutTransition mLayoutTransition; private final LayoutTransition mLayoutTransition; private final TunerService mTunerService; private Uri mKeyguardSliceUri; private Uri mKeyguardSliceUri; @VisibleForTesting @VisibleForTesting TextView mTitle; TextView mTitle; Loading @@ -114,16 +118,14 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe @Inject @Inject public KeyguardSliceView(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs, public KeyguardSliceView(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs, ActivityStarter activityStarter, ConfigurationController configurationController) { ActivityStarter activityStarter, ConfigurationController configurationController, TunerService tunerService, @Main Resources resources) { super(context, attrs); super(context, attrs); TunerService tunerService = Dependency.get(TunerService.class); mTunerService = tunerService; tunerService.addTunable(this, Settings.Secure.KEYGUARD_SLICE_URI); mClickActions = new HashMap<>(); mClickActions = new HashMap<>(); mRowPadding = context.getResources().getDimensionPixelSize(R.dimen.subtitle_clock_padding); mRowPadding = resources.getDimensionPixelSize(R.dimen.subtitle_clock_padding); mRowWithHeaderPadding = context.getResources() mRowWithHeaderPadding = resources.getDimensionPixelSize(R.dimen.header_subtitle_padding); .getDimensionPixelSize(R.dimen.header_subtitle_padding); mActivityStarter = activityStarter; mActivityStarter = activityStarter; mConfigurationController = configurationController; mConfigurationController = configurationController; Loading @@ -143,7 +145,8 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe // Eventually the existing copy will be reparented instead, and we won't need this. // Eventually the existing copy will be reparented instead, and we won't need this. public KeyguardSliceView(Context context, AttributeSet attributeSet) { public KeyguardSliceView(Context context, AttributeSet attributeSet) { this(context, attributeSet, Dependency.get(ActivityStarter.class), this(context, attributeSet, Dependency.get(ActivityStarter.class), Dependency.get(ConfigurationController.class)); Dependency.get(ConfigurationController.class), Dependency.get(TunerService.class), context.getResources()); } } @Override @Override Loading @@ -166,9 +169,15 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe protected void onAttachedToWindow() { protected void onAttachedToWindow() { super.onAttachedToWindow(); super.onAttachedToWindow(); mDisplayId = getDisplay().getDisplayId(); Display display = getDisplay(); if (display != null) { mDisplayId = display.getDisplayId(); } mTunerService.addTunable(this, Settings.Secure.KEYGUARD_SLICE_URI); // Make sure we always have the most current slice // Make sure we always have the most current slice if (mDisplayId == DEFAULT_DISPLAY) { mLiveData.observeForever(this); mLiveData.observeForever(this); } mConfigurationController.addCallback(this); mConfigurationController.addCallback(this); } } Loading @@ -180,6 +189,7 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe if (mDisplayId == DEFAULT_DISPLAY) { if (mDisplayId == DEFAULT_DISPLAY) { mLiveData.removeObserver(this); mLiveData.removeObserver(this); } } mTunerService.removeTunable(this); mConfigurationController.removeCallback(this); mConfigurationController.removeCallback(this); } } Loading packages/SystemUI/tests/src/com/android/keyguard/KeyguardSliceViewTest.java +56 −6 Original line number Original line Diff line number Diff line Loading @@ -15,27 +15,38 @@ */ */ package com.android.keyguard; package com.android.keyguard; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.verify; import android.content.Context; import android.content.res.Resources; import android.graphics.Color; import android.graphics.Color; import android.net.Uri; import android.net.Uri; import android.test.suitebuilder.annotation.SmallTest; import android.test.suitebuilder.annotation.SmallTest; import android.testing.AndroidTestingRunner; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper.RunWithLooper; import android.testing.TestableLooper.RunWithLooper; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.LayoutInflater; import android.view.View; import androidx.slice.SliceProvider; import androidx.slice.SliceProvider; import androidx.slice.SliceSpecs; import androidx.slice.SliceSpecs; import androidx.slice.builders.ListBuilder; import androidx.slice.builders.ListBuilder; import com.android.systemui.R; import com.android.systemui.R; import com.android.systemui.SystemUIFactory; import com.android.systemui.SysuiTestCase; import com.android.systemui.SysuiTestCase; import com.android.systemui.keyguard.KeyguardSliceProvider; import com.android.systemui.keyguard.KeyguardSliceProvider; import com.android.systemui.util.InjectionInflationController; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.tuner.TunerService; import org.junit.Assert; import org.junit.Assert; import org.junit.Before; import org.junit.Before; import org.junit.Test; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import java.util.Collections; import java.util.Collections; import java.util.HashSet; import java.util.HashSet; Loading @@ -48,15 +59,40 @@ public class KeyguardSliceViewTest extends SysuiTestCase { private KeyguardSliceView mKeyguardSliceView; private KeyguardSliceView mKeyguardSliceView; private Uri mSliceUri; private Uri mSliceUri; @Mock private TunerService mTunerService; @Mock private ConfigurationController mConfigurationController; @Mock private ActivityStarter mActivityStarter; @Mock private Resources mResources; @Before @Before public void setUp() throws Exception { public void setUp() throws Exception { MockitoAnnotations.initMocks(this); allowTestableLooperAsMainThread(); allowTestableLooperAsMainThread(); InjectionInflationController inflationController = new InjectionInflationController( LayoutInflater layoutInflater = LayoutInflater.from(getContext()); SystemUIFactory.getInstance().getRootComponent()); layoutInflater.setPrivateFactory(new LayoutInflater.Factory2() { LayoutInflater layoutInflater = inflationController .injectable(LayoutInflater.from(getContext())); @Override public View onCreateView(View parent, String name, Context context, AttributeSet attrs) { return onCreateView(name, context, attrs); } @Override public View onCreateView(String name, Context context, AttributeSet attrs) { if ("com.android.keyguard.KeyguardSliceView".equals(name)) { return new KeyguardSliceView(getContext(), attrs, mActivityStarter, mConfigurationController, mTunerService, mResources); } return null; } }); mKeyguardSliceView = (KeyguardSliceView) layoutInflater mKeyguardSliceView = (KeyguardSliceView) layoutInflater .inflate(R.layout.keyguard_status_area, null); .inflate(R.layout.keyguard_status_area, null); mKeyguardSliceView.setupUri(KeyguardSliceProvider.KEYGUARD_SLICE_URI); mSliceUri = Uri.parse(KeyguardSliceProvider.KEYGUARD_SLICE_URI); mSliceUri = Uri.parse(KeyguardSliceProvider.KEYGUARD_SLICE_URI); SliceProvider.setSpecs(new HashSet<>(Collections.singletonList(SliceSpecs.LIST))); SliceProvider.setSpecs(new HashSet<>(Collections.singletonList(SliceSpecs.LIST))); } } Loading Loading @@ -111,4 +147,18 @@ public class KeyguardSliceViewTest extends SysuiTestCase { Assert.assertEquals("Should be using AOD text color", Color.WHITE, Assert.assertEquals("Should be using AOD text color", Color.WHITE, mKeyguardSliceView.getTextColor()); mKeyguardSliceView.getTextColor()); } } @Test public void onAttachedToWindow_registersListeners() { mKeyguardSliceView.onAttachedToWindow(); verify(mTunerService).addTunable(eq(mKeyguardSliceView), anyString()); verify(mConfigurationController).addCallback(eq(mKeyguardSliceView)); } @Test public void onDetachedFromWindow_unregistersListeners() { mKeyguardSliceView.onDetachedFromWindow(); verify(mTunerService).removeTunable(eq(mKeyguardSliceView)); verify(mConfigurationController).removeCallback(eq(mKeyguardSliceView)); } } } Loading
packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java +20 −10 Original line number Original line Diff line number Diff line Loading @@ -29,6 +29,7 @@ import android.annotation.ColorInt; import android.annotation.StyleRes; import android.annotation.StyleRes; import android.app.PendingIntent; import android.app.PendingIntent; import android.content.Context; import android.content.Context; import android.content.res.Resources; import android.graphics.Color; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable; import android.graphics.text.LineBreaker; import android.graphics.text.LineBreaker; Loading @@ -40,6 +41,7 @@ import android.text.TextUtils.TruncateAt; import android.util.AttributeSet; import android.util.AttributeSet; import android.util.Log; import android.util.Log; import android.util.TypedValue; import android.util.TypedValue; import android.view.Display; import android.view.View; import android.view.View; import android.view.animation.Animation; import android.view.animation.Animation; import android.widget.LinearLayout; import android.widget.LinearLayout; Loading @@ -62,6 +64,7 @@ import com.android.settingslib.Utils; import com.android.systemui.Dependency; import com.android.systemui.Dependency; import com.android.systemui.Interpolators; import com.android.systemui.Interpolators; import com.android.systemui.R; import com.android.systemui.R; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.keyguard.KeyguardSliceProvider; import com.android.systemui.keyguard.KeyguardSliceProvider; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController; Loading Loading @@ -90,6 +93,7 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe private final ActivityStarter mActivityStarter; private final ActivityStarter mActivityStarter; private final ConfigurationController mConfigurationController; private final ConfigurationController mConfigurationController; private final LayoutTransition mLayoutTransition; private final LayoutTransition mLayoutTransition; private final TunerService mTunerService; private Uri mKeyguardSliceUri; private Uri mKeyguardSliceUri; @VisibleForTesting @VisibleForTesting TextView mTitle; TextView mTitle; Loading @@ -114,16 +118,14 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe @Inject @Inject public KeyguardSliceView(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs, public KeyguardSliceView(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs, ActivityStarter activityStarter, ConfigurationController configurationController) { ActivityStarter activityStarter, ConfigurationController configurationController, TunerService tunerService, @Main Resources resources) { super(context, attrs); super(context, attrs); TunerService tunerService = Dependency.get(TunerService.class); mTunerService = tunerService; tunerService.addTunable(this, Settings.Secure.KEYGUARD_SLICE_URI); mClickActions = new HashMap<>(); mClickActions = new HashMap<>(); mRowPadding = context.getResources().getDimensionPixelSize(R.dimen.subtitle_clock_padding); mRowPadding = resources.getDimensionPixelSize(R.dimen.subtitle_clock_padding); mRowWithHeaderPadding = context.getResources() mRowWithHeaderPadding = resources.getDimensionPixelSize(R.dimen.header_subtitle_padding); .getDimensionPixelSize(R.dimen.header_subtitle_padding); mActivityStarter = activityStarter; mActivityStarter = activityStarter; mConfigurationController = configurationController; mConfigurationController = configurationController; Loading @@ -143,7 +145,8 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe // Eventually the existing copy will be reparented instead, and we won't need this. // Eventually the existing copy will be reparented instead, and we won't need this. public KeyguardSliceView(Context context, AttributeSet attributeSet) { public KeyguardSliceView(Context context, AttributeSet attributeSet) { this(context, attributeSet, Dependency.get(ActivityStarter.class), this(context, attributeSet, Dependency.get(ActivityStarter.class), Dependency.get(ConfigurationController.class)); Dependency.get(ConfigurationController.class), Dependency.get(TunerService.class), context.getResources()); } } @Override @Override Loading @@ -166,9 +169,15 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe protected void onAttachedToWindow() { protected void onAttachedToWindow() { super.onAttachedToWindow(); super.onAttachedToWindow(); mDisplayId = getDisplay().getDisplayId(); Display display = getDisplay(); if (display != null) { mDisplayId = display.getDisplayId(); } mTunerService.addTunable(this, Settings.Secure.KEYGUARD_SLICE_URI); // Make sure we always have the most current slice // Make sure we always have the most current slice if (mDisplayId == DEFAULT_DISPLAY) { mLiveData.observeForever(this); mLiveData.observeForever(this); } mConfigurationController.addCallback(this); mConfigurationController.addCallback(this); } } Loading @@ -180,6 +189,7 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe if (mDisplayId == DEFAULT_DISPLAY) { if (mDisplayId == DEFAULT_DISPLAY) { mLiveData.removeObserver(this); mLiveData.removeObserver(this); } } mTunerService.removeTunable(this); mConfigurationController.removeCallback(this); mConfigurationController.removeCallback(this); } } Loading
packages/SystemUI/tests/src/com/android/keyguard/KeyguardSliceViewTest.java +56 −6 Original line number Original line Diff line number Diff line Loading @@ -15,27 +15,38 @@ */ */ package com.android.keyguard; package com.android.keyguard; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.verify; import android.content.Context; import android.content.res.Resources; import android.graphics.Color; import android.graphics.Color; import android.net.Uri; import android.net.Uri; import android.test.suitebuilder.annotation.SmallTest; import android.test.suitebuilder.annotation.SmallTest; import android.testing.AndroidTestingRunner; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper.RunWithLooper; import android.testing.TestableLooper.RunWithLooper; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.LayoutInflater; import android.view.View; import androidx.slice.SliceProvider; import androidx.slice.SliceProvider; import androidx.slice.SliceSpecs; import androidx.slice.SliceSpecs; import androidx.slice.builders.ListBuilder; import androidx.slice.builders.ListBuilder; import com.android.systemui.R; import com.android.systemui.R; import com.android.systemui.SystemUIFactory; import com.android.systemui.SysuiTestCase; import com.android.systemui.SysuiTestCase; import com.android.systemui.keyguard.KeyguardSliceProvider; import com.android.systemui.keyguard.KeyguardSliceProvider; import com.android.systemui.util.InjectionInflationController; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.tuner.TunerService; import org.junit.Assert; import org.junit.Assert; import org.junit.Before; import org.junit.Before; import org.junit.Test; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import java.util.Collections; import java.util.Collections; import java.util.HashSet; import java.util.HashSet; Loading @@ -48,15 +59,40 @@ public class KeyguardSliceViewTest extends SysuiTestCase { private KeyguardSliceView mKeyguardSliceView; private KeyguardSliceView mKeyguardSliceView; private Uri mSliceUri; private Uri mSliceUri; @Mock private TunerService mTunerService; @Mock private ConfigurationController mConfigurationController; @Mock private ActivityStarter mActivityStarter; @Mock private Resources mResources; @Before @Before public void setUp() throws Exception { public void setUp() throws Exception { MockitoAnnotations.initMocks(this); allowTestableLooperAsMainThread(); allowTestableLooperAsMainThread(); InjectionInflationController inflationController = new InjectionInflationController( LayoutInflater layoutInflater = LayoutInflater.from(getContext()); SystemUIFactory.getInstance().getRootComponent()); layoutInflater.setPrivateFactory(new LayoutInflater.Factory2() { LayoutInflater layoutInflater = inflationController .injectable(LayoutInflater.from(getContext())); @Override public View onCreateView(View parent, String name, Context context, AttributeSet attrs) { return onCreateView(name, context, attrs); } @Override public View onCreateView(String name, Context context, AttributeSet attrs) { if ("com.android.keyguard.KeyguardSliceView".equals(name)) { return new KeyguardSliceView(getContext(), attrs, mActivityStarter, mConfigurationController, mTunerService, mResources); } return null; } }); mKeyguardSliceView = (KeyguardSliceView) layoutInflater mKeyguardSliceView = (KeyguardSliceView) layoutInflater .inflate(R.layout.keyguard_status_area, null); .inflate(R.layout.keyguard_status_area, null); mKeyguardSliceView.setupUri(KeyguardSliceProvider.KEYGUARD_SLICE_URI); mSliceUri = Uri.parse(KeyguardSliceProvider.KEYGUARD_SLICE_URI); mSliceUri = Uri.parse(KeyguardSliceProvider.KEYGUARD_SLICE_URI); SliceProvider.setSpecs(new HashSet<>(Collections.singletonList(SliceSpecs.LIST))); SliceProvider.setSpecs(new HashSet<>(Collections.singletonList(SliceSpecs.LIST))); } } Loading Loading @@ -111,4 +147,18 @@ public class KeyguardSliceViewTest extends SysuiTestCase { Assert.assertEquals("Should be using AOD text color", Color.WHITE, Assert.assertEquals("Should be using AOD text color", Color.WHITE, mKeyguardSliceView.getTextColor()); mKeyguardSliceView.getTextColor()); } } @Test public void onAttachedToWindow_registersListeners() { mKeyguardSliceView.onAttachedToWindow(); verify(mTunerService).addTunable(eq(mKeyguardSliceView), anyString()); verify(mConfigurationController).addCallback(eq(mKeyguardSliceView)); } @Test public void onDetachedFromWindow_unregistersListeners() { mKeyguardSliceView.onDetachedFromWindow(); verify(mTunerService).removeTunable(eq(mKeyguardSliceView)); verify(mConfigurationController).removeCallback(eq(mKeyguardSliceView)); } } }