123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- /* Copyright 2017 Andrew Dawson
- *
- * This file is a part of Tusky.
- *
- * This program 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 3 of the
- * License, or (at your option) any later version.
- *
- * Tusky 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.
- *
- * You should have received a copy of the GNU General Public License along with Tusky; if not,
- * see <http://www.gnu.org/licenses>. */
- package com.keylesspalace.tusky;
- import android.os.Bundle;
- import android.support.annotation.Nullable;
- import android.support.v4.app.DialogFragment;
- import android.view.LayoutInflater;
- import android.view.MotionEvent;
- import android.view.View;
- import android.view.ViewGroup;
- import android.view.WindowManager;
- import com.squareup.picasso.Callback;
- import com.squareup.picasso.Picasso;
- import butterknife.BindView;
- import butterknife.ButterKnife;
- import uk.co.senab.photoview.PhotoView;
- import uk.co.senab.photoview.PhotoViewAttacher;
- public class ViewMediaFragment extends DialogFragment {
- private PhotoViewAttacher attacher;
- @BindView(R.id.view_media_image) PhotoView photoView;
- public static ViewMediaFragment newInstance(String url) {
- Bundle arguments = new Bundle();
- ViewMediaFragment fragment = new ViewMediaFragment();
- arguments.putString("url", url);
- fragment.setArguments(arguments);
- return fragment;
- }
- @Override
- public void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setStyle(DialogFragment.STYLE_NORMAL, R.style.Dialog_FullScreen);
- }
- @Override
- public void onResume() {
- ViewGroup.LayoutParams params = getDialog().getWindow().getAttributes();
- params.width = WindowManager.LayoutParams.MATCH_PARENT;
- params.height = WindowManager.LayoutParams.MATCH_PARENT;
- getDialog().getWindow().setAttributes((android.view.WindowManager.LayoutParams) params);
- super.onResume();
- }
- @Override
- public View onCreateView(LayoutInflater inflater, final ViewGroup container,
- Bundle savedInstanceState) {
- View rootView = inflater.inflate(R.layout.fragment_view_media, container, false);
- ButterKnife.bind(this, rootView);
- Bundle arguments = getArguments();
- String url = arguments.getString("url");
- attacher = new PhotoViewAttacher(photoView);
- // Clicking outside the photo closes the viewer.
- attacher.setOnPhotoTapListener(new PhotoViewAttacher.OnPhotoTapListener() {
- @Override
- public void onPhotoTap(View view, float x, float y) {
- }
- @Override
- public void onOutsidePhotoTap() {
- dismiss();
- }
- });
- /* A vertical swipe motion also closes the viewer. This is especially useful when the photo
- * mostly fills the screen so clicking outside is difficult. */
- attacher.setOnSingleFlingListener(new PhotoViewAttacher.OnSingleFlingListener() {
- @Override
- public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
- float velocityY) {
- if (Math.abs(velocityY) > Math.abs(velocityX)) {
- dismiss();
- return true;
- }
- return false;
- }
- });
- Picasso.with(getContext())
- .load(url)
- .into(photoView, new Callback() {
- @Override
- public void onSuccess() {
- attacher.update();
- }
- @Override
- public void onError() {
- }
- });
- return rootView;
- }
- @Override
- public void onDestroyView() {
- attacher.cleanup();
- super.onDestroyView();
- }
- }
|