17c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato/*
27c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato * Copyright (C) 2010 The Android Open Source Project
37c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato *
47c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato * Licensed under the Apache License, Version 2.0 (the "License");
57c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato * you may not use this file except in compliance with the License.
67c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato * You may obtain a copy of the License at
77c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato *
87c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato *      http://www.apache.org/licenses/LICENSE-2.0
97c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato *
107c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato * Unless required by applicable law or agreed to in writing, software
117c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato * distributed under the License is distributed on an "AS IS" BASIS,
127c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato * See the License for the specific language governing permissions and
147c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato * limitations under the License.
157c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato */
167c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato
177c270fab75c2f4529e45ea80b31d4017ab516482Joe Onoratopackage com.android.systemui.statusbar.tablet;
187c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato
197c270fab75c2f4529e45ea80b31d4017ab516482Joe Onoratoimport android.animation.Animator;
207c270fab75c2f4529e45ea80b31d4017ab516482Joe Onoratoimport android.animation.ObjectAnimator;
217c270fab75c2f4529e45ea80b31d4017ab516482Joe Onoratoimport android.animation.ValueAnimator;
227c270fab75c2f4529e45ea80b31d4017ab516482Joe Onoratoimport android.content.Context;
237c270fab75c2f4529e45ea80b31d4017ab516482Joe Onoratoimport android.content.res.Resources;
247c270fab75c2f4529e45ea80b31d4017ab516482Joe Onoratoimport android.content.res.TypedArray;
257c270fab75c2f4529e45ea80b31d4017ab516482Joe Onoratoimport android.graphics.Canvas;
267c270fab75c2f4529e45ea80b31d4017ab516482Joe Onoratoimport android.graphics.Rect;
277c270fab75c2f4529e45ea80b31d4017ab516482Joe Onoratoimport android.graphics.drawable.Drawable;
287c270fab75c2f4529e45ea80b31d4017ab516482Joe Onoratoimport android.util.AttributeSet;
297c270fab75c2f4529e45ea80b31d4017ab516482Joe Onoratoimport android.util.Slog;
307c270fab75c2f4529e45ea80b31d4017ab516482Joe Onoratoimport android.view.LayoutInflater;
317c270fab75c2f4529e45ea80b31d4017ab516482Joe Onoratoimport android.view.View;
327c270fab75c2f4529e45ea80b31d4017ab516482Joe Onoratoimport android.view.ViewGroup;
337c270fab75c2f4529e45ea80b31d4017ab516482Joe Onoratoimport android.view.animation.AccelerateInterpolator;
347c270fab75c2f4529e45ea80b31d4017ab516482Joe Onoratoimport android.widget.FrameLayout;
357c270fab75c2f4529e45ea80b31d4017ab516482Joe Onoratoimport android.widget.ImageView;
367c270fab75c2f4529e45ea80b31d4017ab516482Joe Onoratoimport android.widget.LinearLayout;
377c270fab75c2f4529e45ea80b31d4017ab516482Joe Onoratoimport android.widget.TextView;
387c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato
397c270fab75c2f4529e45ea80b31d4017ab516482Joe Onoratoimport com.android.systemui.R;
407c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato
417c270fab75c2f4529e45ea80b31d4017ab516482Joe Onoratopublic class NotificationLinearLayout extends LinearLayout {
427c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato    private static final String TAG = "NotificationLinearLayout";
437c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato
447c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato    Drawable mItemGlow;
457c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato    int mInsetLeft;
467c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato    Rect mTmp = new Rect();
477c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato
487c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato    public NotificationLinearLayout(Context context, AttributeSet attrs) {
497c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato        this(context, attrs, 0);
507c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato    }
517c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato
527c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato    public NotificationLinearLayout(Context context, AttributeSet attrs, int defStyle) {
537c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato        super(context, attrs, defStyle);
547c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato
557c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato        final Resources res = context.getResources();
567c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato
577c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato        mItemGlow = res.getDrawable(R.drawable.notify_item_glow_bottom);
587c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato
597c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.NotificationLinearLayout,
607c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato                defStyle, 0);
617c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato        mInsetLeft = a.getDimensionPixelSize(R.styleable.NotificationLinearLayout_insetLeft, 0);
627c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato        a.recycle();
637c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato    }
647c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato
657c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato    @Override
667c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato    public void onFinishInflate() {
677c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato        super.onFinishInflate();
687c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato        setWillNotDraw(false);
697c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato    }
707c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato
717c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato    @Override
727c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato    public void onDraw(Canvas canvas) {
737c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato        super.onDraw(canvas);
747c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato
757c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato        final Rect padding = mTmp;
767c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato        final Drawable glow = mItemGlow;
777c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato        glow.getPadding(padding);
787c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato        final int glowHeight = glow.getIntrinsicHeight();
797c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato        final int insetLeft = mInsetLeft;
807c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato
817c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato        final int N = getChildCount();
827c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato        for (int i=0; i<N; i++) {
837c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato            final View child = getChildAt(i);
847c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato
857c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato            final int childBottom = child.getBottom();
867c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato
877c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato            glow.setBounds(child.getLeft() - padding.left + insetLeft, childBottom,
887c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato                    child.getRight() - padding.right, childBottom + glowHeight);
897c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato            glow.draw(canvas);
907c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato        }
917c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato    }
927c270fab75c2f4529e45ea80b31d4017ab516482Joe Onorato}
93