Java tutorial
/** * This file is part of FileSpace for Android, an app for managing your server (files, talks...). * <p> * Copyright (c) 2014-2015 FileSpace for Android contributors (http://mercandalli.com) * <p> * LICENSE: * <p> * FileSpace for Android is free software: you can redistribute it and/or modify it under the terms of the GNU General * Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any * later version. * <p> * FileSpace for Android is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * @author Jonathan Mercandalli * @license http://www.gnu.org/licenses/gpl.html * @copyright 2014-2015 FileSpace for Android contributors (http://mercandalli.com) */ package com.mercandalli.android.apps.files.file.image; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.drawable.RippleDrawable; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.ActivityOptionsCompat; import android.support.v4.util.Pair; import android.support.v7.app.ActionBar; import android.support.v7.widget.Toolbar; import android.util.Log; import android.view.KeyEvent; import android.view.MenuItem; import android.view.View; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; import com.mercandalli.android.apps.files.R; import com.mercandalli.android.apps.files.common.listener.IBitmapListener; import com.mercandalli.android.apps.files.common.listener.ILongListener; import com.mercandalli.android.apps.files.common.net.TaskGetDownloadImage; import com.mercandalli.android.apps.files.common.util.ColorUtils; import com.mercandalli.android.apps.files.common.util.ImageUtils; import com.mercandalli.android.apps.files.file.FileModel; import com.mercandalli.android.apps.files.main.ApplicationActivity; import com.mercandalli.android.library.base.precondition.Preconditions; import java.io.File; import java.util.Date; /** * An {@link Activity} for displaying the image * {@link com.mercandalli.android.apps.files.file.FileModel}: online or offline. */ public class FileImageActivity extends ApplicationActivity { private String mUrl, mTitle; private int mId; private boolean online; private long sizeFile; private Date date_creation; private ImageButton mCircle; private TextView mTitleTextView, mProgressTextView; private Bitmap mBitmap; private ProgressBar mProgressBar; public static void startOnlineImage(final Activity activity, final FileModel fileModel) { startOnlineImage(activity, fileModel, null, null); } public static void startOnlineImage(final @NonNull Activity activity, final @NonNull FileModel fileModel, final @Nullable View iconAnimationView, final @Nullable View titleAnimationView) { Preconditions.checkNotNull(activity); Preconditions.checkNotNull(fileModel); final Intent intent = new Intent(activity, FileImageActivity.class); intent.putExtra("ID", fileModel.getId()); intent.putExtra("TITLE", "" + fileModel.getFullName()); intent.putExtra("URL_FILE", "" + fileModel.getOnlineUrl()); intent.putExtra("CLOUD", true); intent.putExtra("SIZE_FILE", fileModel.getSize()); intent.putExtra("DATE_FILE", fileModel.getDateCreation()); if (iconAnimationView == null || titleAnimationView == null || Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { activity.startActivity(intent); activity.overridePendingTransition(R.anim.left_in, R.anim.left_out); } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { activity.startActivity(intent, ActivityOptionsCompat.makeSceneTransitionAnimation(activity, Pair.create(iconAnimationView, "transitionIcon"), Pair.create(titleAnimationView, "transitionTitle")).toBundle()); } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_file_picture); final Toolbar toolbar = (Toolbar) findViewById(R.id.my_toolbar); if (toolbar != null) { setSupportActionBar(toolbar); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setDisplayHomeAsUpEnabled(true); } } // Translucent notification bar getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); // Get views mProgressBar = (ProgressBar) this.findViewById(R.id.progressBar); mCircle = (ImageButton) this.findViewById(R.id.circle); mTitleTextView = (TextView) this.findViewById(R.id.title); mProgressTextView = (TextView) this.findViewById(R.id.progress_tv); mProgressBar.setProgress(0); Bundle extras = getIntent().getExtras(); if (extras == null) { Log.e("" + getClass().getName(), "extras == null"); finish(); overridePendingTransition(R.anim.right_in, R.anim.right_out); return; } else { mId = extras.getInt("ID"); mTitle = extras.getString("TITLE"); mUrl = extras.getString("URL_FILE"); online = extras.getBoolean("CLOUD"); sizeFile = extras.getLong("SIZE_FILE"); date_creation = (Date) extras.getSerializable("DATE_FILE"); if (mTitle != null) { mTitleTextView.setText(mTitle); } if (ImageUtils.isImage(this, this.mId)) { mBitmap = ImageUtils.loadImage(this, this.mId); ((ImageView) this.findViewById(R.id.tab_icon)).setImageBitmap(mBitmap); int bgColor = ColorUtils.getMutedColor(mBitmap); if (bgColor != 0) { mTitleTextView.setBackgroundColor(bgColor); mTitleTextView.setTextColor(ColorUtils.colorText(bgColor)); RippleDrawable cir = ImageUtils.getPressedColorRippleDrawable(bgColor, ColorUtils.getDarkMutedColor(mBitmap)); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { mCircle.setBackground(cir); } } mProgressBar.setVisibility(View.GONE); mProgressTextView.setVisibility(View.GONE); } else if (this.mId != 0) { mProgressBar.setVisibility(View.VISIBLE); mProgressTextView.setVisibility(View.VISIBLE); (new TaskGetDownloadImage(this, mUrl, mId, sizeFile, -1, new IBitmapListener() { @Override public void execute(Bitmap bitmap) { ((ImageView) findViewById(R.id.tab_icon)).setImageBitmap(bitmap); int bgColor = ColorUtils.getMutedColor(bitmap); if (bgColor != 0) { mTitleTextView.setBackgroundColor(bgColor); mTitleTextView.setTextColor(ColorUtils.colorText(bgColor)); RippleDrawable cir = ImageUtils.getPressedColorRippleDrawable(bgColor, ColorUtils.getDarkMutedColor(bitmap)); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { mCircle.setBackground(cir); } } mProgressBar.setVisibility(View.GONE); mProgressTextView.setVisibility(View.GONE); } }, new ILongListener() { @Override public void execute(long text) { mProgressBar.setProgress((int) text); mProgressTextView.setText(text + "%"); } })).execute(); } } mCircle.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent picIntent = new Intent(); picIntent.setAction(Intent.ACTION_VIEW); picIntent.setDataAndType(Uri.parse("file://" + (new File(FileImageActivity.this.getFilesDir() + "/file_" + mId)).getAbsolutePath()), "image/*"); FileImageActivity.this.startActivity(picIntent); } }); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: supportFinishAfterTransition(); return true; } return super.onOptionsItemSelected(item); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { supportFinishAfterTransition(); } return super.onKeyDown(keyCode, event); } }