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