| /* |
| * Copyright (C) 2021 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.phone; |
| |
| import android.animation.Animator; |
| import android.animation.AnimatorListenerAdapter; |
| import android.animation.AnimatorSet; |
| import android.animation.ObjectAnimator; |
| import android.content.Context; |
| import android.util.AttributeSet; |
| import android.view.View; |
| import android.widget.TextView; |
| |
| import androidx.annotation.NonNull; |
| import androidx.annotation.Nullable; |
| |
| import com.android.systemui.R; |
| import com.android.wm.shell.animation.Interpolators; |
| |
| /** |
| * View to show a toast-like popup on the notification shade and quick settings. |
| */ |
| public class TapAgainView extends TextView { |
| private TextView mTextView; |
| |
| public TapAgainView( |
| @NonNull Context context, @Nullable AttributeSet attrs) { |
| super(context, attrs); |
| } |
| |
| @Override |
| protected void onFinishInflate() { |
| super.onFinishInflate(); |
| updateColor(); |
| } |
| |
| void updateColor() { |
| int textColor = getResources().getColor(R.color.notif_pill_text, mContext.getTheme()); |
| setTextColor(textColor); |
| setBackground(getResources().getDrawable(R.drawable.rounded_bg_full, mContext.getTheme())); |
| } |
| |
| /** Make the view visible. */ |
| public void animateIn() { |
| int yTranslation = mContext.getResources().getDimensionPixelSize( |
| R.dimen.keyguard_indication_y_translation); |
| |
| AnimatorSet animatorSet = new AnimatorSet(); |
| ObjectAnimator fadeIn = ObjectAnimator.ofFloat(this, View.ALPHA, 1f); |
| fadeIn.setStartDelay(150); // From KeyguardIndicationTextView#getFadeInDelay |
| fadeIn.setDuration(317); // From KeyguardIndicationTextView#getFadeInDuration |
| fadeIn.setInterpolator(Interpolators.LINEAR_OUT_SLOW_IN); |
| |
| Animator yTranslate = |
| ObjectAnimator.ofFloat(this, View.TRANSLATION_Y, yTranslation, 0); |
| yTranslate.setDuration(600); // From KeyguardIndicationTextView#getYInDuration |
| yTranslate.addListener(new AnimatorListenerAdapter() { |
| @Override |
| public void onAnimationCancel(Animator animation) { |
| setTranslationY(0); |
| } |
| }); |
| animatorSet.playTogether(yTranslate, fadeIn); |
| animatorSet.start(); |
| setVisibility(View.VISIBLE); |
| } |
| |
| /** Make the view gone. */ |
| public void animateOut() { |
| long fadeOutDuration = 167L; // From KeyguardIndicationTextView#getFadeOutDuration |
| int yTranslation = mContext.getResources().getDimensionPixelSize( |
| com.android.systemui.R.dimen.keyguard_indication_y_translation); |
| |
| AnimatorSet animatorSet = new AnimatorSet(); |
| ObjectAnimator fadeOut = ObjectAnimator.ofFloat(this, View.ALPHA, 0f); |
| fadeOut.setDuration(fadeOutDuration); |
| fadeOut.setInterpolator(Interpolators.FAST_OUT_LINEAR_IN); |
| |
| Animator yTranslate = |
| ObjectAnimator.ofFloat(this, View.TRANSLATION_Y, 0, -yTranslation); |
| yTranslate.setDuration(fadeOutDuration); |
| animatorSet.addListener(new AnimatorListenerAdapter() { |
| @Override |
| public void onAnimationEnd(Animator animation) { |
| setVisibility(GONE); |
| } |
| |
| @Override |
| public void onAnimationCancel(Animator animation) { |
| setVisibility(GONE); |
| } |
| }); |
| animatorSet.playTogether(yTranslate, fadeOut); |
| animatorSet.start(); |
| } |
| } |