Search in sources :

Example 36 with ExpandableView

use of com.android.systemui.statusbar.ExpandableView in project android_frameworks_base by ResurrectionRemix.

the class StackStateAnimator method processAnimationEvents.

/**
     * Process the animationEvents for a new animation
     *
     * @param animationEvents the animation events for the animation to perform
     * @param finalState the final state to animate to
     */
private void processAnimationEvents(ArrayList<NotificationStackScrollLayout.AnimationEvent> animationEvents, StackScrollState finalState) {
    for (NotificationStackScrollLayout.AnimationEvent event : animationEvents) {
        final ExpandableView changingView = (ExpandableView) event.changingView;
        if (event.animationType == NotificationStackScrollLayout.AnimationEvent.ANIMATION_TYPE_ADD) {
            // This item is added, initialize it's properties.
            StackViewState viewState = finalState.getViewStateForView(changingView);
            if (viewState == null) {
                // The position for this child was never generated, let's continue.
                continue;
            }
            finalState.applyState(changingView, viewState);
            mNewAddChildren.add(changingView);
        } else if (event.animationType == NotificationStackScrollLayout.AnimationEvent.ANIMATION_TYPE_REMOVE) {
            if (changingView.getVisibility() == View.GONE) {
                removeFromOverlay(changingView);
                continue;
            }
            // Find the amount to translate up. This is needed in order to understand the
            // direction of the remove animation (either downwards or upwards)
            StackViewState viewState = finalState.getViewStateForView(event.viewAfterChangingView);
            int actualHeight = changingView.getActualHeight();
            // upwards by default
            float translationDirection = -1.0f;
            if (viewState != null) {
                // there was a view after this one, Approximate the distance the next child
                // travelled
                translationDirection = ((viewState.yTranslation - (changingView.getTranslationY() + actualHeight / 2.0f)) * 2 / actualHeight);
                translationDirection = Math.max(Math.min(translationDirection, 1.0f), -1.0f);
            }
            changingView.performRemoveAnimation(ANIMATION_DURATION_APPEAR_DISAPPEAR, translationDirection, new Runnable() {

                @Override
                public void run() {
                    // remove the temporary overlay
                    removeFromOverlay(changingView);
                }
            });
        } else if (event.animationType == NotificationStackScrollLayout.AnimationEvent.ANIMATION_TYPE_REMOVE_SWIPED_OUT) {
            // A race condition can trigger the view to be added to the overlay even though
            // it was fully swiped out. So let's remove it
            mHostLayout.getOverlay().remove(changingView);
            if (Math.abs(changingView.getTranslation()) == changingView.getWidth() && changingView.getTransientContainer() != null) {
                changingView.getTransientContainer().removeTransientView(changingView);
            }
        } else if (event.animationType == NotificationStackScrollLayout.AnimationEvent.ANIMATION_TYPE_GROUP_EXPANSION_CHANGED) {
            ExpandableNotificationRow row = (ExpandableNotificationRow) event.changingView;
            row.prepareExpansionChanged(finalState);
        } else if (event.animationType == NotificationStackScrollLayout.AnimationEvent.ANIMATION_TYPE_HEADS_UP_APPEAR) {
            // This item is added, initialize it's properties.
            StackViewState viewState = finalState.getViewStateForView(changingView);
            mTmpState.copyFrom(viewState);
            if (event.headsUpFromBottom) {
                mTmpState.yTranslation = mHeadsUpAppearHeightBottom;
            } else {
                mTmpState.yTranslation = -mTmpState.height;
            }
            mHeadsUpAppearChildren.add(changingView);
            finalState.applyState(changingView, mTmpState);
        } else if (event.animationType == NotificationStackScrollLayout.AnimationEvent.ANIMATION_TYPE_HEADS_UP_DISAPPEAR || event.animationType == NotificationStackScrollLayout.AnimationEvent.ANIMATION_TYPE_HEADS_UP_DISAPPEAR_CLICK) {
            mHeadsUpDisappearChildren.add(changingView);
            if (changingView.getParent() == null) {
                // This notification was actually removed, so we need to add it to the overlay
                mHostLayout.getOverlay().add(changingView);
                mTmpState.initFrom(changingView);
                mTmpState.yTranslation = -changingView.getActualHeight();
                // We temporarily enable Y animations, the real filter will be combined
                // afterwards anyway
                mAnimationFilter.animateY = true;
                startViewAnimations(changingView, mTmpState, event.animationType == NotificationStackScrollLayout.AnimationEvent.ANIMATION_TYPE_HEADS_UP_DISAPPEAR_CLICK ? ANIMATION_DELAY_HEADS_UP : 0, ANIMATION_DURATION_HEADS_UP_DISAPPEAR);
                mChildrenToClearFromOverlay.add(changingView);
            }
        }
        mNewEvents.add(event);
    }
}
Also used : ExpandableView(com.android.systemui.statusbar.ExpandableView) ExpandableNotificationRow(com.android.systemui.statusbar.ExpandableNotificationRow)

Example 37 with ExpandableView

use of com.android.systemui.statusbar.ExpandableView in project android_frameworks_base by ResurrectionRemix.

the class NotificationStackScrollLayout method updateViewShadows.

private void updateViewShadows() {
    // Lefts first sort by Z difference
    for (int i = 0; i < getChildCount(); i++) {
        ExpandableView child = (ExpandableView) getChildAt(i);
        if (child.getVisibility() != GONE) {
            mTmpSortedChildren.add(child);
        }
    }
    Collections.sort(mTmpSortedChildren, mViewPositionComparator);
    // Now lets update the shadow for the views
    ExpandableView previous = null;
    for (int i = 0; i < mTmpSortedChildren.size(); i++) {
        ExpandableView expandableView = mTmpSortedChildren.get(i);
        float translationZ = expandableView.getTranslationZ();
        float otherZ = previous == null ? translationZ : previous.getTranslationZ();
        float diff = otherZ - translationZ;
        if (diff <= 0.0f || diff >= FakeShadowView.SHADOW_SIBLING_TRESHOLD) {
            // There is no fake shadow to be drawn
            expandableView.setFakeShadowIntensity(0.0f, 0.0f, 0, 0);
        } else {
            float yLocation = previous.getTranslationY() + previous.getActualHeight() - expandableView.getTranslationY() - previous.getExtraBottomPadding();
            expandableView.setFakeShadowIntensity(diff / FakeShadowView.SHADOW_SIBLING_TRESHOLD, previous.getOutlineAlpha(), (int) yLocation, previous.getOutlineTranslation());
        }
        previous = expandableView;
    }
    mTmpSortedChildren.clear();
}
Also used : ExpandableView(com.android.systemui.statusbar.ExpandableView) Paint(android.graphics.Paint)

Example 38 with ExpandableView

use of com.android.systemui.statusbar.ExpandableView in project android_frameworks_base by ResurrectionRemix.

the class NotificationStackScrollLayout method getNotGoneChildCount.

/**
     * @return the number of children which have visibility unequal to GONE
     */
public int getNotGoneChildCount() {
    int childCount = getChildCount();
    int count = 0;
    for (int i = 0; i < childCount; i++) {
        ExpandableView child = (ExpandableView) getChildAt(i);
        if (child.getVisibility() != View.GONE && !child.willBeGone()) {
            count++;
        }
    }
    return count;
}
Also used : ExpandableView(com.android.systemui.statusbar.ExpandableView) Paint(android.graphics.Paint)

Example 39 with ExpandableView

use of com.android.systemui.statusbar.ExpandableView in project android_frameworks_base by DirtyUnicorns.

the class ExpandHelper method findView.

private ExpandableView findView(float x, float y) {
    ExpandableView v;
    if (mEventSource != null) {
        int[] location = new int[2];
        mEventSource.getLocationOnScreen(location);
        x += location[0];
        y += location[1];
        v = mCallback.getChildAtRawPosition(x, y);
    } else {
        v = mCallback.getChildAtPosition(x, y);
    }
    return v;
}
Also used : ExpandableView(com.android.systemui.statusbar.ExpandableView)

Example 40 with ExpandableView

use of com.android.systemui.statusbar.ExpandableView in project android_frameworks_base by DirtyUnicorns.

the class NotificationPanelView method computeMaxKeyguardNotifications.

/**
     * @param maximum the maximum to return at most
     * @return the maximum keyguard notifications that can fit on the screen
     */
public int computeMaxKeyguardNotifications(int maximum) {
    float minPadding = mClockPositionAlgorithm.getMinStackScrollerPadding(getHeight(), mKeyguardStatusView.getHeight());
    int notificationPadding = Math.max(1, getResources().getDimensionPixelSize(R.dimen.notification_divider_height));
    final int overflowheight = getResources().getDimensionPixelSize(R.dimen.notification_summary_height);
    float bottomStackSize = mNotificationStackScroller.getKeyguardBottomStackSize();
    float availableSpace = mNotificationStackScroller.getHeight() - minPadding - overflowheight - bottomStackSize;
    int count = 0;
    for (int i = 0; i < mNotificationStackScroller.getChildCount(); i++) {
        ExpandableView child = (ExpandableView) mNotificationStackScroller.getChildAt(i);
        if (!(child instanceof ExpandableNotificationRow)) {
            continue;
        }
        ExpandableNotificationRow row = (ExpandableNotificationRow) child;
        boolean suppressedSummary = mGroupManager.isSummaryOfSuppressedGroup(row.getStatusBarNotification());
        if (suppressedSummary) {
            continue;
        }
        if (!mStatusBar.shouldShowOnKeyguard(row.getStatusBarNotification())) {
            continue;
        }
        if (row.isRemoved()) {
            continue;
        }
        availableSpace -= child.getMinHeight() + notificationPadding;
        if (availableSpace >= 0 && count < maximum) {
            count++;
        } else {
            return count;
        }
    }
    return count;
}
Also used : ExpandableView(com.android.systemui.statusbar.ExpandableView) Paint(android.graphics.Paint) ExpandableNotificationRow(com.android.systemui.statusbar.ExpandableNotificationRow)

Aggregations

ExpandableView (com.android.systemui.statusbar.ExpandableView)172 Paint (android.graphics.Paint)92 ExpandableNotificationRow (com.android.systemui.statusbar.ExpandableNotificationRow)55 StackScrollerDecorView (com.android.systemui.statusbar.StackScrollerDecorView)15 DismissView (com.android.systemui.statusbar.DismissView)10 EmptyShadeView (com.android.systemui.statusbar.EmptyShadeView)10 View (android.view.View)5 ViewGroup (android.view.ViewGroup)5 ViewParent (android.view.ViewParent)5 ScrollView (android.widget.ScrollView)5 ActivatableNotificationView (com.android.systemui.statusbar.ActivatableNotificationView)5 FakeShadowView (com.android.systemui.statusbar.notification.FakeShadowView)5 ScrollContainer (com.android.systemui.statusbar.stack.ScrollContainer)5