com.chromium.fontinstaller.util.ViewUtils.java Source code

Java tutorial

Introduction

Here is the source code for com.chromium.fontinstaller.util.ViewUtils.java

Source

/*
 * Copyright 2015 Priyesh Patel
 *
 * 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.chromium.fontinstaller.util;

import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Rect;
import android.os.Build;
import android.support.design.widget.Snackbar;
import android.support.v4.app.Fragment;
import android.support.v4.content.ContextCompat;
import android.view.View;
import android.view.ViewAnimationUtils;
import android.view.ViewGroupOverlay;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.AnimationUtils;
import android.widget.Toast;

import com.chromium.fontinstaller.R;

import timber.log.Timber;

public class ViewUtils {

    public static int dpToPixels(int dp, Context context) {
        final float SCALE = context.getResources().getDisplayMetrics().density;
        return (int) (dp * SCALE + 0.5f);
    }

    public static boolean isLollipop() {
        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
    }

    public static int getStatusBarHeight(Context context) {
        final Resources resources = context.getResources();
        final int resourceId = resources.getIdentifier("status_bar_height", "dimen", "android");
        return resourceId > 0 ? resources.getDimensionPixelSize(resourceId) : 0;
    }

    public static void reveal(Activity activity, View view, View sourceView, int colorRes) {
        if (activity == null || view == null || sourceView == null)
            return;
        if (isLollipop()) {
            final ViewGroupOverlay groupOverlay = (ViewGroupOverlay) activity.getWindow().getDecorView()
                    .getOverlay();

            final Rect displayRect = new Rect();
            view.getGlobalVisibleRect(displayRect);

            // Make reveal cover the display and status bar.
            final View revealView = new View(activity);
            revealView.setTop(displayRect.top);
            revealView.setBottom(displayRect.bottom);
            revealView.setLeft(displayRect.left);
            revealView.setRight(displayRect.right);
            revealView.setBackgroundColor(ContextCompat.getColor(activity, colorRes));
            groupOverlay.add(revealView);

            final int[] clearLocation = new int[2];
            sourceView.getLocationInWindow(clearLocation);
            clearLocation[0] += sourceView.getWidth() / 2;
            clearLocation[1] += sourceView.getHeight() / 2;

            final int revealCenterX = clearLocation[0] - revealView.getLeft();
            final int revealCenterY = clearLocation[1] - revealView.getTop();

            final double x1_2 = Math.pow(revealView.getLeft() - revealCenterX, 2);
            final double x2_2 = Math.pow(revealView.getRight() - revealCenterX, 2);
            final double y_2 = Math.pow(revealView.getTop() - revealCenterY, 2);
            final float revealRadius = (float) Math.max(Math.sqrt(x1_2 + y_2), Math.sqrt(x2_2 + y_2));

            try {
                final Animator revealAnimator = ViewAnimationUtils.createCircularReveal(revealView, revealCenterX,
                        revealCenterY, 0.0f, revealRadius);
                revealAnimator
                        .setDuration(activity.getResources().getInteger(android.R.integer.config_mediumAnimTime));

                final Animator alphaAnimator = ObjectAnimator.ofFloat(revealView, View.ALPHA, 0.0f);
                alphaAnimator
                        .setDuration(activity.getResources().getInteger(android.R.integer.config_shortAnimTime));
                alphaAnimator.addListener(new AnimatorListenerAdapter() {
                    @Override
                    public void onAnimationEnd(Animator animation) {
                        super.onAnimationEnd(animation);
                        view.startAnimation(AnimationUtils.loadAnimation(activity, R.anim.abc_fade_in));
                        view.setVisibility(View.VISIBLE);
                    }
                });

                final AnimatorSet animatorSet = new AnimatorSet();
                animatorSet.play(revealAnimator).before(alphaAnimator);
                animatorSet.setInterpolator(new AccelerateDecelerateInterpolator());
                animatorSet.addListener(new AnimatorListenerAdapter() {
                    @Override
                    public void onAnimationEnd(Animator animator) {
                        groupOverlay.remove(revealView);
                    }
                });

                animatorSet.start();
            } catch (IllegalStateException e) {
                Timber.i("View is detached - not animating");
            }
        } else {
            view.setVisibility(View.VISIBLE);
        }
    }

    public static void animGrowFromCenter(View view, Context context) {
        if (context == null || view == null)
            return;
        view.startAnimation(AnimationUtils.loadAnimation(context, R.anim.grow_from_center));
    }

    public static void animShrinkToCenter(View view, Context context) {
        if (context == null || view == null)
            return;
        view.startAnimation(AnimationUtils.loadAnimation(context, R.anim.shrink_to_center));
    }

    public static void animSlideInBottom(View view, Context context) {
        if (context == null || view == null)
            return;
        view.startAnimation(AnimationUtils.loadAnimation(context, R.anim.abc_slide_in_bottom));
    }

    public static void animSlideUp(View view, Context context) {
        if (context == null || view == null)
            return;
        view.startAnimation(AnimationUtils.loadAnimation(context, R.anim.abc_slide_out_top));
    }

    public static void snackbar(int messageResId, View parent) {
        if (parent == null)
            return;
        Snackbar.make(parent, messageResId, Snackbar.LENGTH_SHORT).show();
    }

    public static void snackbar(String message, View parent) {
        if (parent == null)
            return;
        Snackbar.make(parent, message, Snackbar.LENGTH_SHORT).show();
    }

    public static void toast(int messageResId, Context context) {
        Toast.makeText(context, messageResId, Toast.LENGTH_SHORT).show();
    }

    public static void toast(String message, Context context) {
        Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
    }

    public static void toast(int messageResId, Fragment fragment) {
        toast(messageResId, fragment.getActivity());
    }

    public static void toast(String message, Fragment fragment) {
        toast(message, fragment.getActivity());
    }

}