diff options
author | Dave Mankoff <mankoff@google.com> | 2020-07-31 14:12:39 -0400 |
---|---|---|
committer | Dave Mankoff <mankoff@google.com> | 2020-08-24 12:57:19 -0400 |
commit | cd42c08702ef6cc25b974521ef9376e3b0d48bf8 (patch) | |
tree | 87b3786d11e136d9a2bff08d471772218f71fe42 /packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java | |
parent | 71f574431948d5d6634f3d7a072bd8221f7dc6b8 (diff) |
Add KeyguardSliceViewController.
This removes view injection from KeyguardSliceView.
It also creates a KeyguardStatusView Dagger Subcomponent should be
initilialized whenever a KeyguardStatusView is inflated. From that
subcomponent, KeyguardClockSwitchController and
KeyguardSliceViewController can both be created and initialized,
passing their related views into their constructor.
This fixes a bug introduced earlier where a
KeyguardClockSwitchController was not being created in one place
where it was needed.
Bug: 162525274
Test: atest SystemUITests
Change-Id: Ie571cb0ca2b793c363e3c8ab397828f0ee939763
Diffstat (limited to 'packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java')
-rw-r--r-- | packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java | 137 |
1 files changed, 20 insertions, 117 deletions
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java index f639c880c97a..95a048baa332 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java @@ -17,11 +17,8 @@ package com.android.keyguard; 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; @@ -35,28 +32,22 @@ import android.graphics.drawable.Drawable; import android.graphics.text.LineBreaker; import android.net.Uri; import android.os.Trace; -import android.provider.Settings; import android.text.TextUtils; import android.text.TextUtils.TruncateAt; import android.util.AttributeSet; -import android.util.Log; import android.util.TypedValue; -import android.view.Display; import android.view.View; import android.view.animation.Animation; import android.widget.LinearLayout; import android.widget.TextView; import androidx.lifecycle.LiveData; -import androidx.lifecycle.Observer; import androidx.slice.Slice; import androidx.slice.SliceItem; -import androidx.slice.SliceViewManager; import androidx.slice.core.SliceQuery; import androidx.slice.widget.ListContent; import androidx.slice.widget.RowContent; import androidx.slice.widget.SliceContent; -import androidx.slice.widget.SliceLiveData; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.graphics.ColorUtils; @@ -64,11 +55,9 @@ import com.android.settingslib.Utils; import com.android.systemui.Dependency; import com.android.systemui.Interpolators; import com.android.systemui.R; -import com.android.systemui.dagger.qualifiers.Main; 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; import java.io.FileDescriptor; @@ -77,24 +66,17 @@ 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. */ -public class KeyguardSliceView extends LinearLayout implements View.OnClickListener, - Observer<Slice>, TunerService.Tunable, ConfigurationController.ConfigurationListener { +public class KeyguardSliceView extends LinearLayout implements View.OnClickListener { private static final String TAG = "KeyguardSliceView"; public static final int DEFAULT_ANIM_DURATION = 550; private final HashMap<View, PendingIntent> mClickActions; - private final ActivityStarter mActivityStarter; - private final ConfigurationController mConfigurationController; + private ActivityStarter mActivityStarter; private final LayoutTransition mLayoutTransition; - private final TunerService mTunerService; - private Uri mKeyguardSliceUri; @VisibleForTesting TextView mTitle; private Row mRow; @@ -109,25 +91,20 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe * Runnable called whenever the view contents change. */ private Runnable mContentChangeListener; - private Slice mSlice; private boolean mHasHeader; private final int mRowWithHeaderPadding; private final int mRowPadding; private float mRowTextSize; private float mRowWithHeaderTextSize; + private KeyguardSliceViewController mController; - @Inject - public KeyguardSliceView(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs, - ActivityStarter activityStarter, ConfigurationController configurationController, - TunerService tunerService, @Main Resources resources) { + public KeyguardSliceView(Context context, AttributeSet attrs) { super(context, attrs); - mTunerService = tunerService; + Resources resources = context.getResources(); mClickActions = new HashMap<>(); mRowPadding = resources.getDimensionPixelSize(R.dimen.subtitle_clock_padding); mRowWithHeaderPadding = resources.getDimensionPixelSize(R.dimen.header_subtitle_padding); - mActivityStarter = activityStarter; - mConfigurationController = configurationController; mLayoutTransition = new LayoutTransition(); mLayoutTransition.setStagger(LayoutTransition.CHANGE_APPEARING, DEFAULT_ANIM_DURATION / 2); @@ -158,34 +135,6 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe } @Override - protected void onAttachedToWindow() { - super.onAttachedToWindow(); - - 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 - if (mDisplayId == DEFAULT_DISPLAY) { - mLiveData.observeForever(this); - } - mConfigurationController.addCallback(this); - } - - @Override - protected void onDetachedFromWindow() { - super.onDetachedFromWindow(); - - // TODO(b/117344873) Remove below work around after this issue be fixed. - if (mDisplayId == DEFAULT_DISPLAY) { - mLiveData.removeObserver(this); - } - mTunerService.removeTunable(this); - mConfigurationController.removeCallback(this); - } - - @Override public void onVisibilityAggregated(boolean isVisible) { super.onVisibilityAggregated(isVisible); setLayoutTransition(isVisible ? mLayoutTransition : null); @@ -198,9 +147,9 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe return mHasHeader; } - private void showSlice() { + void showSlice(Slice slice) { Trace.beginSection("KeyguardSliceView#showSlice"); - if (mSlice == null) { + if (slice == null) { mTitle.setVisibility(GONE); mRow.setVisibility(GONE); mHasHeader = false; @@ -212,7 +161,7 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe } mClickActions.clear(); - ListContent lc = new ListContent(getContext(), mSlice); + ListContent lc = new ListContent(getContext(), slice); SliceContent headerContent = lc.getHeader(); mHasHeader = headerContent != null && !headerContent.getSliceItem().hasHint(HINT_LIST_ITEM); List<SliceContent> subItems = new ArrayList<>(); @@ -326,7 +275,7 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe @Override public void onClick(View v) { final PendingIntent action = mClickActions.get(v); - if (action != null) { + if (action != null && mActivityStarter != null) { mActivityStarter.startPendingIntentDismissingKeyguard(action); } } @@ -339,43 +288,6 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe mContentChangeListener = contentChangeListener; } - /** - * LiveData observer lifecycle. - * @param slice the new slice content. - */ - @Override - public void onChanged(Slice slice) { - mSlice = slice; - showSlice(); - } - - @Override - public void onTuningChanged(String key, String newValue) { - setupUri(newValue); - } - - /** - * Sets the slice provider Uri. - */ - public void setupUri(String uriString) { - if (uriString == null) { - uriString = KeyguardSliceProvider.KEYGUARD_SLICE_URI; - } - - boolean wasObserving = false; - if (mLiveData != null && mLiveData.hasActiveObservers()) { - wasObserving = true; - mLiveData.removeObserver(this); - } - - mKeyguardSliceUri = Uri.parse(uriString); - mLiveData = SliceLiveData.fromUri(mContext, mKeyguardSliceUri); - - if (wasObserving) { - mLiveData.observeForever(this); - } - } - @VisibleForTesting int getTextColor() { return ColorUtils.blendARGB(mTextColor, Color.WHITE, mDarkAmount); @@ -387,8 +299,7 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe updateTextColors(); } - @Override - public void onDensityOrFontScaleChanged() { + void onDensityOrFontScaleChanged() { mIconSize = mContext.getResources().getDimensionPixelSize(R.dimen.widget_icon_size); mIconSizeWithHeader = (int) mContext.getResources().getDimension(R.dimen.header_icon_size); mRowTextSize = mContext.getResources().getDimensionPixelSize( @@ -398,23 +309,7 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe } public void refresh() { - Slice slice; - Trace.beginSection("KeyguardSliceView#refresh"); - // We can optimize performance and avoid binder calls when we know that we're bound - // to a Slice on the same process. - if (KeyguardSliceProvider.KEYGUARD_SLICE_URI.equals(mKeyguardSliceUri.toString())) { - KeyguardSliceProvider instance = KeyguardSliceProvider.getAttachedInstance(); - if (instance != null) { - slice = instance.onBindSlice(mKeyguardSliceUri); - } else { - Log.w(TAG, "Keyguard slice not bound yet?"); - slice = null; - } - } else { - slice = SliceViewManager.getInstance(getContext()).bindSlice(mKeyguardSliceUri); - } - onChanged(slice); - Trace.endSection(); + mController.refresh(); } public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { @@ -424,10 +319,18 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe pw.println(" mRow: " + (mRow == null ? "null" : mRow.getVisibility() == VISIBLE)); pw.println(" mTextColor: " + Integer.toHexString(mTextColor)); pw.println(" mDarkAmount: " + mDarkAmount); - pw.println(" mSlice: " + mSlice); pw.println(" mHasHeader: " + mHasHeader); } + public void setActivityStarter(ActivityStarter activityStarter) { + mActivityStarter = activityStarter; + } + + public void setController(KeyguardSliceViewController keyguardSliceViewController) { + // TODO: remove this method. + mController = keyguardSliceViewController; + } + public static class Row extends LinearLayout { /** |