diff options
Diffstat (limited to 'src/com/android/tv/ui/BlockScreenView.java')
-rw-r--r-- | src/com/android/tv/ui/BlockScreenView.java | 137 |
1 files changed, 82 insertions, 55 deletions
diff --git a/src/com/android/tv/ui/BlockScreenView.java b/src/com/android/tv/ui/BlockScreenView.java index 52b9389d..09c167ca 100644 --- a/src/com/android/tv/ui/BlockScreenView.java +++ b/src/com/android/tv/ui/BlockScreenView.java @@ -21,32 +21,37 @@ import android.animation.Animator.AnimatorListener; import android.animation.AnimatorInflater; import android.animation.AnimatorListenerAdapter; import android.content.Context; +import android.graphics.drawable.Drawable; import android.text.TextUtils; import android.util.AttributeSet; import android.view.View; +import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.ImageView.ScaleType; -import android.widget.LinearLayout; import android.widget.TextView; import com.android.tv.R; import com.android.tv.ui.TunableTvView.BlockScreenType; -public class BlockScreenView extends LinearLayout { +public class BlockScreenView extends FrameLayout { private View mContainerView; private View mImageContainer; - private ImageView mNormalImageView; - private ImageView mShrunkenImageView; + private ImageView mNormalLockIconView; + private ImageView mShrunkenLockIconView; private View mSpace; - private TextView mTextView; + private TextView mBlockingInfoTextView; + private ImageView mBackgroundImageView; private final int mSpacingNormal; private final int mSpacingShrunken; - // Animators used for fade in/out of block screen icon. - private Animator mFadeIn; + // Animator used to fade out the whole block screen. private Animator mFadeOut; + // Animators used to fade in/out the block screen icon and info text. + private Animator mInfoFadeIn; + private Animator mInfoFadeOut; + public BlockScreenView(Context context) { this(context, null, 0); } @@ -68,21 +73,32 @@ public class BlockScreenView extends LinearLayout { super.onFinishInflate(); mContainerView = findViewById(R.id.block_screen_container); mImageContainer = findViewById(R.id.image_container); - mNormalImageView = (ImageView) findViewById(R.id.block_screen_icon); - mShrunkenImageView = (ImageView) findViewById(R.id.block_screen_shrunken_icon); + mNormalLockIconView = (ImageView) findViewById(R.id.block_screen_icon); + mShrunkenLockIconView = (ImageView) findViewById(R.id.block_screen_shrunken_icon); mSpace = findViewById(R.id.space); - mTextView = (TextView) findViewById(R.id.block_screen_text); - mFadeIn = AnimatorInflater.loadAnimator(getContext(), - R.animator.tvview_block_screen_fade_in); - mFadeIn.setTarget(mContainerView); + mBlockingInfoTextView = (TextView) findViewById(R.id.block_screen_text); + mBackgroundImageView = (ImageView) findViewById(R.id.background_image); mFadeOut = AnimatorInflater.loadAnimator(getContext(), R.animator.tvview_block_screen_fade_out); - mFadeOut.setTarget(mContainerView); + mFadeOut.setTarget(this); mFadeOut.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { + setVisibility(GONE); + setBackgroundImage(null); + setAlpha(1.0f); + } + }); + mInfoFadeIn = AnimatorInflater.loadAnimator(getContext(), + R.animator.tvview_block_screen_fade_in); + mInfoFadeIn.setTarget(mContainerView); + mInfoFadeOut = AnimatorInflater.loadAnimator(getContext(), + R.animator.tvview_block_screen_fade_out); + mInfoFadeOut.setTarget(mContainerView); + mInfoFadeOut.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { mContainerView.setVisibility(GONE); - mContainerView.setAlpha(1f); } }); } @@ -90,53 +106,54 @@ public class BlockScreenView extends LinearLayout { /** * Sets the normal image. */ - public void setImage(int resId) { - mNormalImageView.setImageResource(resId); + public void setIconImage(int resId) { + mNormalLockIconView.setImageResource(resId); updateSpaceVisibility(); } /** * Sets the scale type of the normal image. */ - public void setScaleType(ScaleType scaleType) { - mNormalImageView.setScaleType(scaleType); + public void setIconScaleType(ScaleType scaleType) { + mNormalLockIconView.setScaleType(scaleType); updateSpaceVisibility(); } /** - * Sets the shrunken image. + * Show or hide the image of this view. */ - public void setShrunkenImage(int resId) { - mShrunkenImageView.setImageResource(resId); + public void setIconVisibility(boolean visible) { + mImageContainer.setVisibility(visible ? VISIBLE : GONE); updateSpaceVisibility(); } /** - * Show or hide the image of this view. + * Sets the text message. */ - public void setImageVisibility(boolean visible) { - mImageContainer.setVisibility(visible ? VISIBLE : GONE); + public void setInfoText(int resId) { + mBlockingInfoTextView.setText(resId); updateSpaceVisibility(); } /** * Sets the text message. */ - public void setText(int resId) { - mTextView.setText(resId); + public void setInfoText(String text) { + mBlockingInfoTextView.setText(text); updateSpaceVisibility(); } /** - * Sets the text message. + * Sets the background image should be displayed in the block screen view. Passes {@code null} + * to remove the currently displayed background image. */ - public void setText(String text) { - mTextView.setText(text); - updateSpaceVisibility(); + public void setBackgroundImage(Drawable backgroundImage) { + mBackgroundImageView.setVisibility(backgroundImage == null ? GONE : VISIBLE); + mBackgroundImageView.setImageDrawable(backgroundImage); } private void updateSpaceVisibility() { - if (isImageViewVisible() && isTextViewVisible(mTextView)) { + if (isImageViewVisible() && isTextViewVisible(mBlockingInfoTextView)) { mSpace.setVisibility(VISIBLE); } else { mSpace.setVisibility(GONE); @@ -145,7 +162,8 @@ public class BlockScreenView extends LinearLayout { private boolean isImageViewVisible() { return mImageContainer.getVisibility() == VISIBLE - && (isImageViewVisible(mNormalImageView) || isImageViewVisible(mShrunkenImageView)); + && (isImageViewVisible(mNormalLockIconView) + || isImageViewVisible(mShrunkenLockIconView)); } private static boolean isImageViewVisible(ImageView imageView) { @@ -177,37 +195,39 @@ public class BlockScreenView extends LinearLayout { mContainerView.setVisibility(GONE); break; case TunableTvView.BLOCK_SCREEN_TYPE_SHRUNKEN_TV_VIEW: - mNormalImageView.setVisibility(GONE); - mShrunkenImageView.setVisibility(VISIBLE); + mNormalLockIconView.setVisibility(GONE); + mShrunkenLockIconView.setVisibility(VISIBLE); mContainerView.setVisibility(VISIBLE); + mContainerView.setAlpha(1.0f); break; case TunableTvView.BLOCK_SCREEN_TYPE_NORMAL: - mNormalImageView.setVisibility(VISIBLE); - mShrunkenImageView.setVisibility(GONE); + mNormalLockIconView.setVisibility(VISIBLE); + mShrunkenLockIconView.setVisibility(GONE); mContainerView.setVisibility(VISIBLE); + mContainerView.setAlpha(1.0f); break; } } else { switch (blockScreenType) { case TunableTvView.BLOCK_SCREEN_TYPE_NO_UI: if (mContainerView.getVisibility() == VISIBLE) { - mFadeOut.start(); + mInfoFadeOut.start(); } break; case TunableTvView.BLOCK_SCREEN_TYPE_SHRUNKEN_TV_VIEW: - mNormalImageView.setVisibility(GONE); - mShrunkenImageView.setVisibility(VISIBLE); - mContainerView.setVisibility(VISIBLE); + mNormalLockIconView.setVisibility(GONE); + mShrunkenLockIconView.setVisibility(VISIBLE); if (mContainerView.getVisibility() == GONE) { - mFadeIn.start(); + mContainerView.setVisibility(VISIBLE); + mInfoFadeIn.start(); } break; case TunableTvView.BLOCK_SCREEN_TYPE_NORMAL: - mNormalImageView.setVisibility(VISIBLE); - mShrunkenImageView.setVisibility(GONE); - mContainerView.setVisibility(VISIBLE); + mNormalLockIconView.setVisibility(VISIBLE); + mShrunkenLockIconView.setVisibility(GONE); if (mContainerView.getVisibility() == GONE) { - mFadeIn.start(); + mContainerView.setVisibility(VISIBLE); + mInfoFadeIn.start(); } break; } @@ -216,26 +236,33 @@ public class BlockScreenView extends LinearLayout { } /** - * Scales the contents view by the given {@code scale}. + * Adds a listener to the fade-in animation of info text and icons of the block screen. */ - public void scaleContainerView(float scale) { - mContainerView.setScaleX(scale); - mContainerView.setScaleY(scale); + public void addInfoFadeInAnimationListener(AnimatorListener listener) { + mInfoFadeIn.addListener(listener); } - public void addFadeOutAnimationListener(AnimatorListener listener) { - mFadeOut.addListener(listener); + /** + * Fades out the block screen. + */ + public void fadeOut() { + if (getVisibility() == VISIBLE && !mFadeOut.isStarted()) { + mFadeOut.start(); + } } /** * Ends the currently running animations. */ public void endAnimations() { - if (mFadeIn != null && mFadeIn.isRunning()) { - mFadeIn.end(); - } if (mFadeOut != null && mFadeOut.isRunning()) { mFadeOut.end(); } + if (mInfoFadeIn != null && mInfoFadeIn.isRunning()) { + mInfoFadeIn.end(); + } + if (mInfoFadeOut != null && mInfoFadeOut.isRunning()) { + mInfoFadeOut.end(); + } } } |