com.tanmay.blip.activities.ImageActivity.java Source code

Java tutorial

Introduction

Here is the source code for com.tanmay.blip.activities.ImageActivity.java

Source

/*
 * Copyright 2015, Tanmay Parikh
 *
 * 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.tanmay.blip.activities;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.ActivityOptionsCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewTreeObserver;
import android.view.WindowManager;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.DecelerateInterpolator;
import android.widget.ImageView;
import android.widget.TextView;

import com.squareup.picasso.Picasso;
import com.tanmay.blip.R;
import com.tanmay.blip.database.DatabaseManager;
import com.tanmay.blip.models.Comic;
import com.tanmay.blip.utils.BlipUtils;

import uk.co.senab.photoview.PhotoViewAttacher;

public class ImageActivity extends AppCompatActivity
        implements PhotoViewAttacher.OnPhotoTapListener, View.OnClickListener {

    public static final String EXTRA_NUM = "num";
    public static final String EXTRA_IMAGE = "comic";
    ImageView photo;
    private DatabaseManager databaseManager;
    private PhotoViewAttacher photoViewAttacher;
    private View topBar, close;
    private TextView title, number;

    public static void launch(AppCompatActivity compatActivity, View transistionView, int num) {
        ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(compatActivity,
                transistionView, EXTRA_IMAGE);
        Intent intent = new Intent(compatActivity, ImageActivity.class);
        intent.putExtra(EXTRA_NUM, num);
        ActivityCompat.startActivity(compatActivity, intent, options.toBundle());
    }

    @SuppressLint("InlinedApi")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_image);
        if (BlipUtils.isLollopopUp()) {
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
        }
        databaseManager = new DatabaseManager(this);
        int num = getIntent().getExtras().getInt(EXTRA_NUM);
        final Comic comic = databaseManager.getComic(num);

        topBar = findViewById(R.id.topBar);
        close = findViewById(R.id.close);
        title = (TextView) findViewById(R.id.title);
        number = (TextView) findViewById(R.id.number);

        number.setText(String.valueOf(num));
        close.setOnClickListener(this);
        title.setText(comic.getTitle());
        photo = (ImageView) findViewById(R.id.img);
        topBar.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                topBar.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                if (BlipUtils.isLollopopUp()) {
                    BlipUtils.setMargins(topBar, 0, getStatusBarHeight(), 0, 0);
                    if (getResources().getBoolean(R.bool.landscape)) {
                        photo.setPadding(0, getStatusBarHeight() + topBar.getHeight(), 0, 0);
                    } else {
                        photo.setPadding(0, getStatusBarHeight() + topBar.getHeight(), 0, getNavigationBarHeight());
                    }
                } else {
                    photo.setPadding(0, topBar.getHeight(), 0, 0);
                }
                Picasso.with(ImageActivity.this).load(comic.getImg()).into(photo);
                photoViewAttacher = new PhotoViewAttacher(photo);
                photoViewAttacher.setOnPhotoTapListener(ImageActivity.this);
                photoViewAttacher.setScaleType(ImageView.ScaleType.FIT_CENTER);
                topBar.setTranslationY(-(topBar.getHeight() + getStatusBarHeight()));
                topBar.animate().translationY(0).setDuration(500).setInterpolator(new DecelerateInterpolator())
                        .start();
            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        photoViewAttacher.cleanup();
    }

    private int getNavigationBarHeight() {
        int id = getResources().getIdentifier("navigation_bar_height", "dimen", "android");
        if (id > 0) {
            return getResources().getDimensionPixelSize(id);
        }
        return 0;
    }

    public int getStatusBarHeight() {
        int result = 0;
        int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
        if (resourceId > 0) {
            result = getResources().getDimensionPixelSize(resourceId);
        }
        return result;
    }

    @Override
    public void onBackPressed() {
        topBar.animate().translationY(-(topBar.getHeight() + getStatusBarHeight())).setDuration(500)
                .setInterpolator(new AccelerateInterpolator()).start();
        super.onBackPressed();
    }

    @Override
    public void onPhotoTap(View view, float v, float v1) {
        onBackPressed();
    }

    @Override
    public void onClick(View v) {
        onBackPressed();
    }
}