From aec83c70fc0b1a8964f181884242ad2fe5179680 Mon Sep 17 00:00:00 2001 From: Vavassor Date: Wed, 1 Feb 2017 02:13:14 -0500 Subject: [PATCH] Animated GIF's now animate when viewed in fullscreen. --- .../com/keylesspalace/tusky/SFragment.java | 20 ++++++- .../keylesspalace/tusky/ViewGifFragment.java | 58 +++++++++++++++++++ app/src/main/res/layout/fragment_view_gif.xml | 13 +++++ 3 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/keylesspalace/tusky/ViewGifFragment.java create mode 100644 app/src/main/res/layout/fragment_view_gif.xml diff --git a/app/src/main/java/com/keylesspalace/tusky/SFragment.java b/app/src/main/java/com/keylesspalace/tusky/SFragment.java index bd187e25..aea5b552 100644 --- a/app/src/main/java/com/keylesspalace/tusky/SFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/SFragment.java @@ -18,6 +18,7 @@ package com.keylesspalace.tusky; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.media.ImageReader; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; @@ -36,6 +37,7 @@ import com.android.volley.toolbox.JsonObjectRequest; import org.json.JSONObject; +import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -203,10 +205,26 @@ public class SFragment extends Fragment { popup.show(); } + private boolean fileExtensionMatches(String url, String extension) { + extension = "." + extension; + int parametersStart = url.indexOf('?'); + if (parametersStart == -1) { + return url.toLowerCase().endsWith(extension); + } else { + int start = parametersStart - extension.length(); + return start > 0 && url.substring(start, parametersStart).equals(extension); + } + } + protected void viewMedia(String url, Status.MediaAttachment.Type type) { switch (type) { case IMAGE: { - Fragment newFragment = ViewMediaFragment.newInstance(url); + Fragment newFragment; + if (fileExtensionMatches(url, "gif")) { + newFragment = ViewGifFragment.newInstance(url); + } else { + newFragment = ViewMediaFragment.newInstance(url); + } FragmentManager manager = getFragmentManager(); manager.beginTransaction() .add(R.id.overlay_fragment_container, newFragment) diff --git a/app/src/main/java/com/keylesspalace/tusky/ViewGifFragment.java b/app/src/main/java/com/keylesspalace/tusky/ViewGifFragment.java new file mode 100644 index 00000000..b75ca396 --- /dev/null +++ b/app/src/main/java/com/keylesspalace/tusky/ViewGifFragment.java @@ -0,0 +1,58 @@ +/* Copyright 2017 Andrew Dawson + * + * This file is part of Tusky. + * + * Tusky 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 + * . */ + +package com.keylesspalace.tusky; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.webkit.WebView; + +public class ViewGifFragment extends Fragment { + public static ViewGifFragment newInstance(String url) { + Bundle arguments = new Bundle(); + ViewGifFragment fragment = new ViewGifFragment(); + arguments.putString("url", url); + fragment.setArguments(arguments); + return fragment; + } + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View rootView = inflater.inflate(R.layout.fragment_view_gif, container, false); + + String url = getArguments().getString("url"); + WebView gifView = (WebView) rootView.findViewById(R.id.gif_view); + gifView.loadUrl(url); + + rootView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + dismiss(); + } + }); + + return rootView; + } + + private void dismiss() { + getFragmentManager().popBackStack(); + } +} diff --git a/app/src/main/res/layout/fragment_view_gif.xml b/app/src/main/res/layout/fragment_view_gif.xml new file mode 100644 index 00000000..3a783484 --- /dev/null +++ b/app/src/main/res/layout/fragment_view_gif.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file