From 5db341ed3a384f7ed88b211d2e2fac0cda7cc657 Mon Sep 17 00:00:00 2001 From: Ioana Alexandru Date: Thu, 28 Sep 2023 15:59:19 +0200 Subject: Move FooterView to its own directory. This matches the recommended architecture structure. It was weird that the footer was part of the notification row anyway. Included some small formatting changes because the presubmit hooks were complaining. Bug: 293167744 Test: builds Change-Id: Ib82e401bfb06892bcf4ba0b5b890077a26f3cbc6 --- .../res/layout/status_bar_notification_footer.xml | 4 +- .../notification/footer/ui/view/FooterView.java | 240 +++++++++++++++++++++ .../statusbar/notification/row/FooterView.java | 227 ------------------- .../notification/row/StackScrollerDecorView.java | 5 +- .../stack/NotificationStackScrollLayout.java | 4 +- .../notification/stack/StackScrollAlgorithm.java | 4 +- .../footer/ui/view/FooterViewTest.java | 122 +++++++++++ .../statusbar/notification/row/FooterViewTest.java | 122 ----------- .../stack/NotificationStackScrollLayoutTest.java | 4 +- .../notification/stack/StackScrollAlgorithmTest.kt | 6 +- 10 files changed, 376 insertions(+), 362 deletions(-) create mode 100644 packages/SystemUI/src/com/android/systemui/statusbar/notification/footer/ui/view/FooterView.java delete mode 100644 packages/SystemUI/src/com/android/systemui/statusbar/notification/row/FooterView.java create mode 100644 packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/footer/ui/view/FooterViewTest.java delete mode 100644 packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/FooterViewTest.java diff --git a/packages/SystemUI/res/layout/status_bar_notification_footer.xml b/packages/SystemUI/res/layout/status_bar_notification_footer.xml index b00908fd2bfa..c1bac3151049 100644 --- a/packages/SystemUI/res/layout/status_bar_notification_footer.xml +++ b/packages/SystemUI/res/layout/status_bar_notification_footer.xml @@ -15,7 +15,7 @@ --> - - + diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/footer/ui/view/FooterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/footer/ui/view/FooterView.java new file mode 100644 index 000000000000..e74b3fcdf050 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/footer/ui/view/FooterView.java @@ -0,0 +1,240 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar.notification.footer.ui.view; + +import static android.graphics.PorterDuff.Mode.SRC_ATOP; + +import android.annotation.ColorInt; +import android.content.Context; +import android.content.res.ColorStateList; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.graphics.ColorFilter; +import android.graphics.PorterDuffColorFilter; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.util.IndentingPrintWriter; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import com.android.settingslib.Utils; +import com.android.systemui.res.R; +import com.android.systemui.statusbar.notification.row.FooterViewButton; +import com.android.systemui.statusbar.notification.row.StackScrollerDecorView; +import com.android.systemui.statusbar.notification.stack.ExpandableViewState; +import com.android.systemui.statusbar.notification.stack.ViewState; +import com.android.systemui.util.DumpUtilsKt; + +import java.io.PrintWriter; + +public class FooterView extends StackScrollerDecorView { + private FooterViewButton mClearAllButton; + private FooterViewButton mManageButton; + private boolean mShowHistory; + // String cache, for performance reasons. + // Reading them from a Resources object can be quite slow sometimes. + private String mManageNotificationText; + private String mManageNotificationHistoryText; + + // Footer label + private TextView mSeenNotifsFooterTextView; + private String mSeenNotifsFilteredText; + private Drawable mSeenNotifsFilteredIcon; + + public FooterView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + protected View findContentView() { + return findViewById(R.id.content); + } + + protected View findSecondaryView() { + return findViewById(R.id.dismiss_text); + } + + @Override + public void dump(PrintWriter pwOriginal, String[] args) { + IndentingPrintWriter pw = DumpUtilsKt.asIndenting(pwOriginal); + super.dump(pw, args); + DumpUtilsKt.withIncreasedIndent(pw, () -> { + pw.println("visibility: " + DumpUtilsKt.visibilityString(getVisibility())); + pw.println("manageButton showHistory: " + mShowHistory); + pw.println("manageButton visibility: " + + DumpUtilsKt.visibilityString(mClearAllButton.getVisibility())); + pw.println("dismissButton visibility: " + + DumpUtilsKt.visibilityString(mClearAllButton.getVisibility())); + }); + } + + @Override + protected void onFinishInflate() { + super.onFinishInflate(); + mClearAllButton = (FooterViewButton) findSecondaryView(); + mManageButton = findViewById(R.id.manage_text); + mSeenNotifsFooterTextView = findViewById(R.id.unlock_prompt_footer); + updateResources(); + updateContent(); + updateColors(); + } + + /** Show a message instead of the footer buttons. */ + public void setFooterLabelVisible(boolean isVisible) { + if (isVisible) { + mManageButton.setVisibility(View.GONE); + mClearAllButton.setVisibility(View.GONE); + mSeenNotifsFooterTextView.setVisibility(View.VISIBLE); + } else { + mManageButton.setVisibility(View.VISIBLE); + mClearAllButton.setVisibility(View.VISIBLE); + mSeenNotifsFooterTextView.setVisibility(View.GONE); + } + } + + /** Set onClickListener for the manage/history button. */ + public void setManageButtonClickListener(OnClickListener listener) { + mManageButton.setOnClickListener(listener); + } + + /** Set onClickListener for the clear all (end) button. */ + public void setClearAllButtonClickListener(OnClickListener listener) { + mClearAllButton.setOnClickListener(listener); + } + + /** + * Whether the touch is outside the Clear all button. + * + * TODO(b/293167744): This is an artifact from the time when we could press underneath the + * shade to dismiss it. Check if it's safe to remove. + */ + public boolean isOnEmptySpace(float touchX, float touchY) { + return touchX < mContent.getX() + || touchX > mContent.getX() + mContent.getWidth() + || touchY < mContent.getY() + || touchY > mContent.getY() + mContent.getHeight(); + } + + /** Show "History" instead of "Manage" on the start button. */ + public void showHistory(boolean showHistory) { + if (mShowHistory == showHistory) { + return; + } + mShowHistory = showHistory; + updateContent(); + } + + private void updateContent() { + if (mShowHistory) { + mManageButton.setText(mManageNotificationHistoryText); + mManageButton.setContentDescription(mManageNotificationHistoryText); + } else { + mManageButton.setText(mManageNotificationText); + mManageButton.setContentDescription(mManageNotificationText); + } + mSeenNotifsFooterTextView.setText(mSeenNotifsFilteredText); + mSeenNotifsFooterTextView + .setCompoundDrawablesRelative(mSeenNotifsFilteredIcon, null, null, null); + } + + /** Whether the start button shows "History" (true) or "Manage" (false). */ + public boolean isHistoryShown() { + return mShowHistory; + } + + @Override + protected void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + updateColors(); + mClearAllButton.setText(R.string.clear_all_notifications_text); + mClearAllButton.setContentDescription( + mContext.getString(R.string.accessibility_clear_all)); + updateResources(); + updateContent(); + } + + /** + * Update the text and background colors for the current color palette and night mode setting. + */ + public void updateColors() { + Resources.Theme theme = mContext.getTheme(); + final @ColorInt int textColor = getResources().getColor(R.color.notif_pill_text, theme); + final Drawable clearAllBg = theme.getDrawable(R.drawable.notif_footer_btn_background); + final Drawable manageBg = theme.getDrawable(R.drawable.notif_footer_btn_background); + // TODO(b/282173943): Remove redundant tinting once Resources are thread-safe + final @ColorInt int buttonBgColor = + Utils.getColorAttrDefaultColor(mContext, com.android.internal.R.attr.colorSurface); + final ColorFilter bgColorFilter = new PorterDuffColorFilter(buttonBgColor, SRC_ATOP); + if (buttonBgColor != 0) { + clearAllBg.setColorFilter(bgColorFilter); + manageBg.setColorFilter(bgColorFilter); + } + mClearAllButton.setBackground(clearAllBg); + mClearAllButton.setTextColor(textColor); + mManageButton.setBackground(manageBg); + mManageButton.setTextColor(textColor); + final @ColorInt int labelTextColor = + Utils.getColorAttrDefaultColor(mContext, android.R.attr.textColorPrimary); + mSeenNotifsFooterTextView.setTextColor(labelTextColor); + mSeenNotifsFooterTextView.setCompoundDrawableTintList( + ColorStateList.valueOf(labelTextColor)); + } + + private void updateResources() { + mManageNotificationText = getContext().getString(R.string.manage_notifications_text); + mManageNotificationHistoryText = getContext() + .getString(R.string.manage_notifications_history_text); + int unlockIconSize = getResources() + .getDimensionPixelSize(R.dimen.notifications_unseen_footer_icon_size); + mSeenNotifsFilteredText = getContext().getString(R.string.unlock_to_see_notif_text); + mSeenNotifsFilteredIcon = getContext().getDrawable(R.drawable.ic_friction_lock_closed); + mSeenNotifsFilteredIcon.setBounds(0, 0, unlockIconSize, unlockIconSize); + } + + @Override + @NonNull + public ExpandableViewState createExpandableViewState() { + return new FooterViewState(); + } + + public class FooterViewState extends ExpandableViewState { + /** + * used to hide the content of the footer to animate. + * #hide is applied without animation, but #hideContent has animation. + */ + public boolean hideContent; + + @Override + public void copyFrom(ViewState viewState) { + super.copyFrom(viewState); + if (viewState instanceof FooterViewState) { + hideContent = ((FooterViewState) viewState).hideContent; + } + } + + @Override + public void applyToView(View view) { + super.applyToView(view); + if (view instanceof FooterView) { + FooterView footerView = (FooterView) view; + footerView.setContentVisible(!hideContent); + } + } + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/FooterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/FooterView.java deleted file mode 100644 index 26db5f2bc095..000000000000 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/FooterView.java +++ /dev/null @@ -1,227 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License - */ - -package com.android.systemui.statusbar.notification.row; - -import static android.graphics.PorterDuff.Mode.SRC_ATOP; - -import android.annotation.ColorInt; -import android.content.Context; -import android.content.res.ColorStateList; -import android.content.res.Configuration; -import android.content.res.Resources; -import android.graphics.ColorFilter; -import android.graphics.PorterDuffColorFilter; -import android.graphics.drawable.Drawable; -import android.util.AttributeSet; -import android.util.IndentingPrintWriter; -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.NonNull; - -import com.android.settingslib.Utils; -import com.android.systemui.res.R; -import com.android.systemui.statusbar.notification.stack.ExpandableViewState; -import com.android.systemui.statusbar.notification.stack.ViewState; -import com.android.systemui.util.DumpUtilsKt; - -import java.io.PrintWriter; - -public class FooterView extends StackScrollerDecorView { - private FooterViewButton mClearAllButton; - private FooterViewButton mManageButton; - private boolean mShowHistory; - // String cache, for performance reasons. - // Reading them from a Resources object can be quite slow sometimes. - private String mManageNotificationText; - private String mManageNotificationHistoryText; - - // Footer label - private TextView mSeenNotifsFooterTextView; - private String mSeenNotifsFilteredText; - private Drawable mSeenNotifsFilteredIcon; - - public FooterView(Context context, AttributeSet attrs) { - super(context, attrs); - } - - @Override - protected View findContentView() { - return findViewById(R.id.content); - } - - protected View findSecondaryView() { - return findViewById(R.id.dismiss_text); - } - - @Override - public void dump(PrintWriter pwOriginal, String[] args) { - IndentingPrintWriter pw = DumpUtilsKt.asIndenting(pwOriginal); - super.dump(pw, args); - DumpUtilsKt.withIncreasedIndent(pw, () -> { - pw.println("visibility: " + DumpUtilsKt.visibilityString(getVisibility())); - pw.println("manageButton showHistory: " + mShowHistory); - pw.println("manageButton visibility: " - + DumpUtilsKt.visibilityString(mClearAllButton.getVisibility())); - pw.println("dismissButton visibility: " - + DumpUtilsKt.visibilityString(mClearAllButton.getVisibility())); - }); - } - - @Override - protected void onFinishInflate() { - super.onFinishInflate(); - mClearAllButton = (FooterViewButton) findSecondaryView(); - mManageButton = findViewById(R.id.manage_text); - mSeenNotifsFooterTextView = findViewById(R.id.unlock_prompt_footer); - updateResources(); - updateContent(); - updateColors(); - } - - public void setFooterLabelVisible(boolean isVisible) { - if (isVisible) { - mManageButton.setVisibility(View.GONE); - mClearAllButton.setVisibility(View.GONE); - mSeenNotifsFooterTextView.setVisibility(View.VISIBLE); - } else { - mManageButton.setVisibility(View.VISIBLE); - mClearAllButton.setVisibility(View.VISIBLE); - mSeenNotifsFooterTextView.setVisibility(View.GONE); - } - } - - public void setManageButtonClickListener(OnClickListener listener) { - mManageButton.setOnClickListener(listener); - } - - public void setClearAllButtonClickListener(OnClickListener listener) { - mClearAllButton.setOnClickListener(listener); - } - - public boolean isOnEmptySpace(float touchX, float touchY) { - return touchX < mContent.getX() - || touchX > mContent.getX() + mContent.getWidth() - || touchY < mContent.getY() - || touchY > mContent.getY() + mContent.getHeight(); - } - - public void showHistory(boolean showHistory) { - if (mShowHistory == showHistory) { - return; - } - mShowHistory = showHistory; - updateContent(); - } - - private void updateContent() { - if (mShowHistory) { - mManageButton.setText(mManageNotificationHistoryText); - mManageButton.setContentDescription(mManageNotificationHistoryText); - } else { - mManageButton.setText(mManageNotificationText); - mManageButton.setContentDescription(mManageNotificationText); - } - mSeenNotifsFooterTextView.setText(mSeenNotifsFilteredText); - mSeenNotifsFooterTextView - .setCompoundDrawablesRelative(mSeenNotifsFilteredIcon, null, null, null); - } - - public boolean isHistoryShown() { - return mShowHistory; - } - - @Override - protected void onConfigurationChanged(Configuration newConfig) { - super.onConfigurationChanged(newConfig); - updateColors(); - mClearAllButton.setText(R.string.clear_all_notifications_text); - mClearAllButton.setContentDescription( - mContext.getString(R.string.accessibility_clear_all)); - updateResources(); - updateContent(); - } - - /** - * Update the text and background colors for the current color palette and night mode setting. - */ - public void updateColors() { - Resources.Theme theme = mContext.getTheme(); - final @ColorInt int textColor = getResources().getColor(R.color.notif_pill_text, theme); - final Drawable clearAllBg = theme.getDrawable(R.drawable.notif_footer_btn_background); - final Drawable manageBg = theme.getDrawable(R.drawable.notif_footer_btn_background); - // TODO(b/282173943): Remove redundant tinting once Resources are thread-safe - final @ColorInt int buttonBgColor = - Utils.getColorAttrDefaultColor(mContext, com.android.internal.R.attr.colorSurface); - final ColorFilter bgColorFilter = new PorterDuffColorFilter(buttonBgColor, SRC_ATOP); - if (buttonBgColor != 0) { - clearAllBg.setColorFilter(bgColorFilter); - manageBg.setColorFilter(bgColorFilter); - } - mClearAllButton.setBackground(clearAllBg); - mClearAllButton.setTextColor(textColor); - mManageButton.setBackground(manageBg); - mManageButton.setTextColor(textColor); - final @ColorInt int labelTextColor = - Utils.getColorAttrDefaultColor(mContext, android.R.attr.textColorPrimary); - mSeenNotifsFooterTextView.setTextColor(labelTextColor); - mSeenNotifsFooterTextView.setCompoundDrawableTintList( - ColorStateList.valueOf(labelTextColor)); - } - - private void updateResources() { - mManageNotificationText = getContext().getString(R.string.manage_notifications_text); - mManageNotificationHistoryText = getContext() - .getString(R.string.manage_notifications_history_text); - int unlockIconSize = getResources() - .getDimensionPixelSize(R.dimen.notifications_unseen_footer_icon_size); - mSeenNotifsFilteredText = getContext().getString(R.string.unlock_to_see_notif_text); - mSeenNotifsFilteredIcon = getContext().getDrawable(R.drawable.ic_friction_lock_closed); - mSeenNotifsFilteredIcon.setBounds(0, 0, unlockIconSize, unlockIconSize); - } - - @Override - @NonNull - public ExpandableViewState createExpandableViewState() { - return new FooterViewState(); - } - - public class FooterViewState extends ExpandableViewState { - /** - * used to hide the content of the footer to animate. - * #hide is applied without animation, but #hideContent has animation. - */ - public boolean hideContent; - - @Override - public void copyFrom(ViewState viewState) { - super.copyFrom(viewState); - if (viewState instanceof FooterViewState) { - hideContent = ((FooterViewState) viewState).hideContent; - } - } - - @Override - public void applyToView(View view) { - super.applyToView(view); - if (view instanceof FooterView) { - FooterView footerView = (FooterView) view; - footerView.setContentVisible(!hideContent); - } - } - } -} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/StackScrollerDecorView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/StackScrollerDecorView.java index 0c686be0406d..e200b901e815 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/StackScrollerDecorView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/StackScrollerDecorView.java @@ -167,7 +167,7 @@ public abstract class StackScrollerDecorView extends ExpandableView { } @VisibleForTesting - boolean isSecondaryVisible() { + public boolean isSecondaryVisible() { return mIsSecondaryVisible; } @@ -179,7 +179,8 @@ public abstract class StackScrollerDecorView extends ExpandableView { return mIsVisible; } - void setDuration(int duration) { + @VisibleForTesting + public void setDuration(int duration) { mDuration = duration; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java index 28f0a0c5fd78..14def6f9e617 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java @@ -86,12 +86,12 @@ import com.android.settingslib.Utils; import com.android.systemui.Dependency; import com.android.systemui.Dumpable; import com.android.systemui.ExpandHelper; -import com.android.systemui.res.R; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.Flags; import com.android.systemui.flags.ViewRefactorFlag; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.statusbar.NotificationSwipeActionHelper; +import com.android.systemui.res.R; import com.android.systemui.shade.ShadeController; import com.android.systemui.shade.TouchLogger; import com.android.systemui.statusbar.CommandQueue; @@ -106,12 +106,12 @@ import com.android.systemui.statusbar.notification.NotificationUtils; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.render.GroupExpansionManager; import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManager; +import com.android.systemui.statusbar.notification.footer.ui.view.FooterView; import com.android.systemui.statusbar.notification.init.NotificationsController; import com.android.systemui.statusbar.notification.logging.NotificationLogger; import com.android.systemui.statusbar.notification.row.ActivatableNotificationView; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; import com.android.systemui.statusbar.notification.row.ExpandableView; -import com.android.systemui.statusbar.notification.row.FooterView; import com.android.systemui.statusbar.notification.row.StackScrollerDecorView; import com.android.systemui.statusbar.phone.HeadsUpAppearanceController; import com.android.systemui.statusbar.phone.HeadsUpTouchHelper; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java index f2d5394e0aee..2d4559be1387 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java @@ -27,16 +27,16 @@ import android.view.ViewGroup; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.policy.SystemBarUtils; import com.android.keyguard.BouncerPanelExpansionCalculator; -import com.android.systemui.res.R; import com.android.systemui.animation.ShadeInterpolation; +import com.android.systemui.res.R; import com.android.systemui.shade.transition.LargeScreenShadeInterpolator; import com.android.systemui.statusbar.EmptyShadeView; import com.android.systemui.statusbar.NotificationShelf; import com.android.systemui.statusbar.notification.SourceType; +import com.android.systemui.statusbar.notification.footer.ui.view.FooterView; import com.android.systemui.statusbar.notification.row.ActivatableNotificationView; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; import com.android.systemui.statusbar.notification.row.ExpandableView; -import com.android.systemui.statusbar.notification.row.FooterView; import java.util.ArrayList; import java.util.List; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/footer/ui/view/FooterViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/footer/ui/view/FooterViewTest.java new file mode 100644 index 000000000000..f72142ffc6d7 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/footer/ui/view/FooterViewTest.java @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar.notification.footer.ui.view; + +import static com.google.common.truth.Truth.assertThat; + +import static junit.framework.Assert.assertFalse; +import static junit.framework.Assert.assertNotNull; +import static junit.framework.Assert.assertTrue; + +import static org.mockito.Mockito.mock; + +import android.testing.AndroidTestingRunner; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.TextView; + +import androidx.test.filters.SmallTest; + +import com.android.systemui.SysuiTestCase; +import com.android.systemui.res.R; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +@SmallTest +@RunWith(AndroidTestingRunner.class) +public class FooterViewTest extends SysuiTestCase { + + FooterView mView; + + @Before + public void setUp() { + mView = (FooterView) LayoutInflater.from(mContext).inflate( + R.layout.status_bar_notification_footer, null, false); + mView.setDuration(0); + } + + @Test + public void testViewsNotNull() { + assertNotNull(mView.findContentView()); + assertNotNull(mView.findSecondaryView()); + } + + @Test + public void setDismissOnClick() { + mView.setClearAllButtonClickListener(mock(View.OnClickListener.class)); + assertTrue(mView.findSecondaryView().hasOnClickListeners()); + } + + @Test + public void setManageOnClick() { + mView.setManageButtonClickListener(mock(View.OnClickListener.class)); + assertTrue(mView.findViewById(R.id.manage_text).hasOnClickListeners()); + } + + @Test + public void setHistoryShown() { + mView.showHistory(true); + assertTrue(mView.isHistoryShown()); + assertTrue(((TextView) mView.findViewById(R.id.manage_text)) + .getText().toString().contains("History")); + } + + @Test + public void setHistoryNotShown() { + mView.showHistory(false); + assertFalse(mView.isHistoryShown()); + assertTrue(((TextView) mView.findViewById(R.id.manage_text)) + .getText().toString().contains("Manage")); + } + + @Test + public void testPerformVisibilityAnimation() { + mView.setVisible(false /* visible */, false /* animate */); + assertFalse(mView.isVisible()); + + mView.setVisible(true /* visible */, true /* animate */); + } + + @Test + public void testPerformSecondaryVisibilityAnimation() { + mView.setSecondaryVisible(false /* visible */, false /* animate */); + assertFalse(mView.isSecondaryVisible()); + + mView.setSecondaryVisible(true /* visible */, true /* animate */); + } + + @Test + public void testSetFooterLabelVisible() { + mView.setFooterLabelVisible(true); + assertThat(mView.findViewById(R.id.manage_text).getVisibility()).isEqualTo(View.GONE); + assertThat(mView.findSecondaryView().getVisibility()).isEqualTo(View.GONE); + assertThat(mView.findViewById(R.id.unlock_prompt_footer).getVisibility()) + .isEqualTo(View.VISIBLE); + } + + @Test + public void testSetFooterLabelInvisible() { + mView.setFooterLabelVisible(false); + assertThat(mView.findViewById(R.id.manage_text).getVisibility()).isEqualTo(View.VISIBLE); + assertThat(mView.findSecondaryView().getVisibility()).isEqualTo(View.VISIBLE); + assertThat(mView.findViewById(R.id.unlock_prompt_footer).getVisibility()) + .isEqualTo(View.GONE); + } +} + diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/FooterViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/FooterViewTest.java deleted file mode 100644 index b120c4747cb9..000000000000 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/FooterViewTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License - */ - -package com.android.systemui.statusbar.notification.row; - -import static com.google.common.truth.Truth.assertThat; - -import static junit.framework.Assert.assertFalse; -import static junit.framework.Assert.assertNotNull; -import static junit.framework.Assert.assertTrue; - -import static org.mockito.Mockito.mock; - -import android.testing.AndroidTestingRunner; -import android.view.LayoutInflater; -import android.view.View; -import android.widget.TextView; - -import androidx.test.filters.SmallTest; - -import com.android.systemui.res.R; -import com.android.systemui.SysuiTestCase; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; - -@SmallTest -@RunWith(AndroidTestingRunner.class) -public class FooterViewTest extends SysuiTestCase { - - FooterView mView; - - @Before - public void setUp() { - mView = (FooterView) LayoutInflater.from(mContext).inflate( - R.layout.status_bar_notification_footer, null, false); - mView.setDuration(0); - } - - @Test - public void testViewsNotNull() { - assertNotNull(mView.findContentView()); - assertNotNull(mView.findSecondaryView()); - } - - @Test - public void setDismissOnClick() { - mView.setClearAllButtonClickListener(mock(View.OnClickListener.class)); - assertTrue(mView.findSecondaryView().hasOnClickListeners()); - } - - @Test - public void setManageOnClick() { - mView.setManageButtonClickListener(mock(View.OnClickListener.class)); - assertTrue(mView.findViewById(R.id.manage_text).hasOnClickListeners()); - } - - @Test - public void setHistoryShown() { - mView.showHistory(true); - assertTrue(mView.isHistoryShown()); - assertTrue(((TextView) mView.findViewById(R.id.manage_text)) - .getText().toString().contains("History")); - } - - @Test - public void setHistoryNotShown() { - mView.showHistory(false); - assertFalse(mView.isHistoryShown()); - assertTrue(((TextView) mView.findViewById(R.id.manage_text)) - .getText().toString().contains("Manage")); - } - - @Test - public void testPerformVisibilityAnimation() { - mView.setVisible(false /* visible */, false /* animate */); - assertFalse(mView.isVisible()); - - mView.setVisible(true /* visible */, true /* animate */); - } - - @Test - public void testPerformSecondaryVisibilityAnimation() { - mView.setSecondaryVisible(false /* visible */, false /* animate */); - assertFalse(mView.isSecondaryVisible()); - - mView.setSecondaryVisible(true /* visible */, true /* animate */); - } - - @Test - public void testSetFooterLabelVisible() { - mView.setFooterLabelVisible(true); - assertThat(mView.findViewById(R.id.manage_text).getVisibility()).isEqualTo(View.GONE); - assertThat(mView.findSecondaryView().getVisibility()).isEqualTo(View.GONE); - assertThat(mView.findViewById(R.id.unlock_prompt_footer).getVisibility()) - .isEqualTo(View.VISIBLE); - } - - @Test - public void testSetFooterLabelInvisible() { - mView.setFooterLabelVisible(false); - assertThat(mView.findViewById(R.id.manage_text).getVisibility()).isEqualTo(View.VISIBLE); - assertThat(mView.findSecondaryView().getVisibility()).isEqualTo(View.VISIBLE); - assertThat(mView.findViewById(R.id.unlock_prompt_footer).getVisibility()) - .isEqualTo(View.GONE); - } -} - diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java index 3a820e8087a8..6deb817a7f4e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java @@ -65,12 +65,12 @@ import androidx.test.filters.SmallTest; import com.android.keyguard.BouncerPanelExpansionCalculator; import com.android.systemui.ExpandHelper; -import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.dump.DumpManager; import com.android.systemui.flags.FakeFeatureFlags; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.Flags; +import com.android.systemui.res.R; import com.android.systemui.shade.ShadeController; import com.android.systemui.shade.transition.LargeScreenShadeInterpolator; import com.android.systemui.statusbar.EmptyShadeView; @@ -81,9 +81,9 @@ import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.render.GroupExpansionManager; import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManager; +import com.android.systemui.statusbar.notification.footer.ui.view.FooterView; import com.android.systemui.statusbar.notification.init.NotificationsController; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; -import com.android.systemui.statusbar.notification.row.FooterView; import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.phone.ScreenOffAnimationController; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithmTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithmTest.kt index a52466d2fa41..3e145a9ed616 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithmTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithmTest.kt @@ -5,18 +5,18 @@ import android.content.pm.PackageManager import android.widget.FrameLayout import androidx.test.filters.SmallTest import com.android.keyguard.BouncerPanelExpansionCalculator.aboutToShowBouncerProgress -import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.animation.ShadeInterpolation.getContentAlpha import com.android.systemui.dump.DumpManager +import com.android.systemui.res.R import com.android.systemui.shade.transition.LargeScreenShadeInterpolator import com.android.systemui.statusbar.EmptyShadeView import com.android.systemui.statusbar.NotificationShelf import com.android.systemui.statusbar.StatusBarState +import com.android.systemui.statusbar.notification.footer.ui.view.FooterView +import com.android.systemui.statusbar.notification.footer.ui.view.FooterView.FooterViewState import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow import com.android.systemui.statusbar.notification.row.ExpandableView -import com.android.systemui.statusbar.notification.row.FooterView -import com.android.systemui.statusbar.notification.row.FooterView.FooterViewState import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager import com.android.systemui.util.mockito.mock import com.google.common.truth.Expect -- cgit v1.2.3-59-g8ed1b