summaryrefslogtreecommitdiff
path: root/org.fox.ttrss
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2017-06-02 14:25:05 +0300
committerAndrew Dolgov <[email protected]>2017-06-02 14:25:05 +0300
commit047bb1cc37d189b24b3269d13397f83bc2797d2d (patch)
tree0593153e2096f9daa7dd89ca2495647a8f029971 /org.fox.ttrss
parentbbab856e3fd0066705263764bb846b4a6d7b7b91 (diff)
unified gallery pager for videos and image files
Diffstat (limited to 'org.fox.ttrss')
-rwxr-xr-xorg.fox.ttrss/src/main/AndroidManifest.xml5
-rw-r--r--org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleImageFragment.java52
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/ArticleImagesPagerActivity.java155
-rw-r--r--org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleVideoFragment.java327
-rw-r--r--org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryBaseFragment.java64
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java51
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/VideoPlayerActivity.java368
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/YoutubePlayerActivity.java4
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/types/Article.java4
-rw-r--r--org.fox.ttrss/src/main/res/layout/activity_video_player.xml46
-rw-r--r--org.fox.ttrss/src/main/res/layout/activity_youtube_player.xml3
-rwxr-xr-xorg.fox.ttrss/src/main/res/layout/article_images_pager.xml1
-rw-r--r--org.fox.ttrss/src/main/res/layout/fragment_article_image.xml16
-rw-r--r--org.fox.ttrss/src/main/res/menu/activity_youtube_player.xml (renamed from org.fox.ttrss/src/main/res/menu/activity_video_player.xml)39
14 files changed, 555 insertions, 580 deletions
diff --git a/org.fox.ttrss/src/main/AndroidManifest.xml b/org.fox.ttrss/src/main/AndroidManifest.xml
index 41eaa6a7..4aa7a64f 100755
--- a/org.fox.ttrss/src/main/AndroidManifest.xml
+++ b/org.fox.ttrss/src/main/AndroidManifest.xml
@@ -259,11 +259,6 @@
android:launchMode="singleInstance"
android:theme="@style/DarkDialogTheme" />
<activity
- android:name=".VideoPlayerActivity"
- android:configChanges="keyboardHidden|orientation|screenSize"
- android:label="@string/title_activity_video_player" >
- </activity>
- <activity
android:name=".YoutubePlayerActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="@string/title_activity_video_player" >
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleImageFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleImageFragment.java
index f0055cd2..d55ee127 100644
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleImageFragment.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleImageFragment.java
@@ -24,18 +24,10 @@ import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.GlideDrawableImageViewTarget;
import com.bumptech.glide.request.target.Target;
-public class ArticleImageFragment extends Fragment {
+public class ArticleImageFragment extends GalleryBaseFragment {
private final String TAG = this.getClass().getSimpleName();
String m_url;
- private ArticleImagesPagerActivity m_activity;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- setRetainInstance(true);
- }
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
@@ -128,48 +120,6 @@ public class ArticleImageFragment extends Fragment {
return true;
}*/
- public boolean onImageMenuItemSelected(MenuItem item, String url) {
- switch (item.getItemId()) {
- case R.id.article_img_open:
- if (url != null) {
- try {
- m_activity.openUri(Uri.parse(url));
- } catch (Exception e) {
- e.printStackTrace();
- m_activity.toast(R.string.error_other_error);
- }
- }
- return true;
- case R.id.article_img_copy:
- if (url != null) {
- m_activity.copyToClipboard(url);
- }
- return true;
- case R.id.article_img_share:
- if (url != null) {
- m_activity.shareText(url);
- }
- return true;
- case R.id.article_img_view_caption:
- if (url != null) {
- m_activity.displayImageCaption(url, m_activity.m_content);
- }
- return true;
- default:
- Log.d(TAG, "onImageMenuItemSelected, unhandled id=" + item.getItemId());
- return false;
- }
- }
-
- @Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
-
- //m_prefs = PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext());
- m_activity = (ArticleImagesPagerActivity) activity;
-
- }
-
@Override
public void onSaveInstanceState (Bundle out) {
super.onSaveInstanceState(out);
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleImagesPagerActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleImagesPagerActivity.java
index daed56a8..ff2bbed9 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleImagesPagerActivity.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleImagesPagerActivity.java
@@ -24,6 +24,7 @@ import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
+import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
@@ -33,46 +34,80 @@ import me.relex.circleindicator.CircleIndicator;
public class ArticleImagesPagerActivity extends CommonActivity {
private final String TAG = this.getClass().getSimpleName();
- private ArrayList<String> m_urls;
- private ArrayList<String> m_checkedUrls;
+ private ArrayList<GalleryEntry> m_items;
+ //private ArrayList<GalleryEntry> m_checkedItems;
private String m_title;
private ArticleImagesPagerAdapter m_adapter;
public String m_content;
private ProgressBar m_progress;
private ViewPager m_pager;
+ private enum GalleryEntryType { TYPE_IMAGE, TYPE_VIDEO };
+
+ private class GalleryEntry implements Serializable {
+ String url;
+ GalleryEntryType type;
+ String coverUrl;
+ }
+
private class ArticleImagesPagerAdapter extends FragmentStatePagerAdapter {
- private List<String> m_urls;
+ private List<GalleryEntry> m_items;
- public ArticleImagesPagerAdapter(FragmentManager fm, List<String> urls) {
+ public ArticleImagesPagerAdapter(FragmentManager fm, List<GalleryEntry> items) {
super(fm);
- m_urls = urls;
+ m_items = items;
}
@Override
public int getCount() {
- return m_urls.size();
+ return m_items.size();
}
@Override
public Fragment getItem(int position) {
- ArticleImageFragment frag = new ArticleImageFragment();
- Log.d(TAG, "getItem: " + position + " " + m_urls.get(position));
+ //Log.d(TAG, "getItem: " + position + " " + m_urls.get(position));
+
+ GalleryEntry item = m_items.get(position);
- frag.initialize(m_urls.get(position));
+ switch (item.type) {
+ case TYPE_IMAGE:
+ if (true) {
+ ArticleImageFragment frag = new ArticleImageFragment();
+ frag.initialize(item.url);
+
+ return frag;
+ }
+ break;
+ case TYPE_VIDEO:
+ if (true) {
+ ArticleVideoFragment frag = new ArticleVideoFragment();
+ frag.initialize(item.url, item.coverUrl);
+
+ return frag;
+ }
+ break;
+ }
- return frag;
+ return null;
}
}
- private class ImageCheckTask extends AsyncTask<List<String>, String, Integer> {
+ /*private class ImageCheckTask extends AsyncTask<List<GalleryEntry>, Integer, List<GalleryEntry>> {
+ private GalleryEntry m_lastCheckedItem;
+
@Override
- protected Integer doInBackground(List<String>... urls) {
+ protected List<GalleryEntry> doInBackground(List<GalleryEntry>... items) {
+
+ List<GalleryEntry> tmp = new ArrayList<>(items[0]);
+
int position = 0;
- for (String url : urls[0]) {
+ for (GalleryEntry item : tmp) {
+
if (!isCancelled()) {
+ String url = item.url;
+
position++;
try {
@@ -83,9 +118,11 @@ public class ArticleImagesPagerActivity extends CommonActivity {
.get();
if (bmp != null && bmp.getWidth() > 128 && bmp.getHeight() > 128) {
- publishProgress(url, String.valueOf(position));
+ m_lastCheckedItem = item;
+ publishProgress(position);
} else {
- publishProgress(null, String.valueOf(position));
+ m_lastCheckedItem = null;
+ publishProgress(position);
}
} catch (InterruptedException e) {
@@ -101,24 +138,21 @@ public class ArticleImagesPagerActivity extends CommonActivity {
}
@Override
- protected void onProgressUpdate(String... checkedUrl) {
+ protected void onProgressUpdate(Integer... progress) {
if (!isFinishing() && m_adapter != null) {
- if (checkedUrl[0] != null) {
- m_checkedUrls.add(checkedUrl[0]);
- m_adapter.notifyDataSetChanged();
- }
+ Log.d(TAG, "progr=" + progress[0]);
- Log.d(TAG, "progr=" + checkedUrl[1]);
+ m_adapter.notifyDataSetChanged();
- m_progress.setProgress(Integer.valueOf(checkedUrl[1]));
+ m_progress.setProgress(Integer.valueOf(progress[1]));
} else {
cancel(true);
}
}
@Override
- protected void onPostExecute(Integer result) {
+ protected void onPostExecute(List<GalleryEntry> result) {
m_progress.setVisibility(View.GONE);
CircleIndicator indicator = (CircleIndicator) findViewById(R.id.article_images_indicator);
@@ -129,7 +163,7 @@ public class ArticleImagesPagerActivity extends CommonActivity {
}
}
- }
+ } */
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -160,54 +194,79 @@ public class ArticleImagesPagerActivity extends CommonActivity {
String imgSrcFirst = getIntent().getStringExtra("firstSrc");
- m_urls = new ArrayList<String>();
+ m_items = new ArrayList<GalleryEntry>();
Document doc = Jsoup.parse(m_content);
- Elements imgs = doc.select("img");
+ Elements elems = doc.select("img,video");
boolean firstFound = false;
- for (Element img : imgs) {
- String imgSrc = img.attr("src");
+ for (Element elem : elems) {
- if (imgSrc.startsWith("//")) {
- imgSrc = "https:" + imgSrc;
- }
+ GalleryEntry item = new GalleryEntry();
+
+ if ("video".equals(elem.tagName().toLowerCase())) {
+ String cover = elem.attr("poster");
+
+ Element source = elem.select("source").first();
+ String src = source.attr("src");
+
+ if (src.startsWith("//")) {
+ src = "https:" + src;
+ }
+
+ if (imgSrcFirst.equals(src))
+ firstFound = true;
+
+ item.url = src;
+ item.coverUrl = cover;
+ item.type = GalleryEntryType.TYPE_VIDEO;
+
+ } else {
+ String src = elem.attr("src");
- if (imgSrcFirst.equals(imgSrc))
- firstFound = true;
+ if (src.startsWith("//")) {
+ src = "https:" + src;
+ }
+
+ if (imgSrcFirst.equals(src))
+ firstFound = true;
+
+ item.url = src;
+ item.type = GalleryEntryType.TYPE_IMAGE;
+ }
- if (firstFound) {
- m_urls.add(imgSrc);
+ if (firstFound && item.url != null) {
+ m_items.add(item);
}
}
} else {
- m_urls = savedInstanceState.getStringArrayList("urls");
+ m_items = (ArrayList<GalleryEntry>) savedInstanceState.getSerializable("items");
m_title = savedInstanceState.getString("title");
m_content = savedInstanceState.getString("content");
}
- if (m_urls.size() > 1) {
+ /*if (m_items.size() > 1) {
m_progress.setProgress(0);
- m_progress.setMax(m_urls.size());
- m_checkedUrls = new ArrayList<String>();
+ m_progress.setMax(m_items.size());
+ m_checkedItems = new ArrayList<>();
- ArrayList<String> tmp = new ArrayList<String>(m_urls);
+ ArrayList<GalleryEntry> tmp = new ArrayList<>(m_items);
- m_checkedUrls.add(tmp.get(0));
+ m_checkedItems.add(tmp.get(0));
tmp.remove(0);
ImageCheckTask ict = new ImageCheckTask();
ict.execute(tmp);
} else {
- m_checkedUrls = new ArrayList<String>(m_urls);
+ m_checkedItems = new ArrayList<>(m_items);
m_progress.setVisibility(View.GONE);
- }
+ } */
setTitle(m_title);
- m_adapter = new ArticleImagesPagerAdapter(getSupportFragmentManager(), m_urls);
+ m_adapter = new ArticleImagesPagerAdapter(getSupportFragmentManager(), m_items);
m_pager = (ViewPager) findViewById(R.id.article_images_pager);
m_pager.setAdapter(m_adapter);
@@ -215,12 +274,6 @@ public class ArticleImagesPagerActivity extends CommonActivity {
}
- @SuppressLint("NewApi")
- @Override
- public void onResume() {
- super.onResume();
- }
-
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenu.ContextMenuInfo menuInfo) {
@@ -234,7 +287,7 @@ public class ArticleImagesPagerActivity extends CommonActivity {
public void onSaveInstanceState(Bundle out) {
super.onSaveInstanceState(out);
- out.putStringArrayList("urls", m_urls);
+ out.putSerializable("items", m_items);
out.putString("title", m_title);
out.putString("content", m_content);
}
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleVideoFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleVideoFragment.java
new file mode 100644
index 00000000..90c62e9d
--- /dev/null
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleVideoFragment.java
@@ -0,0 +1,327 @@
+package org.fox.ttrss;
+
+import android.app.Activity;
+import android.content.res.Configuration;
+import android.graphics.Rect;
+import android.graphics.SurfaceTexture;
+import android.media.MediaPlayer;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.support.v4.app.ActivityCompat;
+import android.support.v4.app.Fragment;
+import android.support.v4.view.ViewCompat;
+import android.util.Log;
+import android.view.Display;
+import android.view.LayoutInflater;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.Surface;
+import android.view.SurfaceHolder;
+import android.view.SurfaceView;
+import android.view.TextureView;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.MediaController;
+import android.widget.PopupMenu;
+import android.widget.ProgressBar;
+
+import com.bogdwellers.pinchtozoom.ImageMatrixTouchHandler;
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.engine.DiskCacheStrategy;
+import com.bumptech.glide.load.resource.drawable.GlideDrawable;
+import com.bumptech.glide.request.RequestListener;
+import com.bumptech.glide.request.target.GlideDrawableImageViewTarget;
+import com.bumptech.glide.request.target.Target;
+
+import java.io.IOException;
+
+public class ArticleVideoFragment extends GalleryBaseFragment {
+ private final String TAG = this.getClass().getSimpleName();
+
+ String m_url;
+ String m_coverUrl;
+ MediaPlayer m_mediaPlayer;
+ private boolean m_userVisibleHint = false;
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ final View view = inflater.inflate(R.layout.fragment_article_image, container, false);
+
+ if (savedInstanceState != null) {
+ m_url = savedInstanceState.getString("url");
+ m_coverUrl = savedInstanceState.getString("coverUrl");
+ }
+
+ Log.d(TAG, "called for URL: " + m_url + " Cover: " + m_coverUrl);
+
+ ImageView imgView = (ImageView) view.findViewById(R.id.flavor_image);
+
+ ViewCompat.setTransitionName(imgView, "gallery:" + m_url);
+
+ //registerForContextMenu(imgView);
+
+ view.findViewById(R.id.flavor_image_overflow).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ PopupMenu popup = new PopupMenu(getContext(), v);
+ MenuInflater inflater = popup.getMenuInflater();
+ inflater.inflate(R.menu.context_article_content_img, popup.getMenu());
+
+ popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
+ @Override
+ public boolean onMenuItemClick(MenuItem item) {
+ return onImageMenuItemSelected(item, m_url);
+ }
+ });
+
+ popup.show();
+
+ }
+ });
+
+ final GlideDrawableImageViewTarget glideImage = new GlideDrawableImageViewTarget(imgView);
+
+ Glide.with(this)
+ .load(m_coverUrl)
+ .dontAnimate()
+ .diskCacheStrategy(DiskCacheStrategy.ALL)
+ .skipMemoryCache(false)
+ .listener(new RequestListener<String, GlideDrawable>() {
+ @Override
+ public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
+ ActivityCompat.startPostponedEnterTransition(m_activity);
+
+ initializeVideoPlayer(view);
+ return false;
+ }
+
+ @Override
+ public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
+ ActivityCompat.startPostponedEnterTransition(m_activity);
+
+ initializeVideoPlayer(view);
+ return false;
+ }
+ })
+ .into(glideImage);
+
+ return view;
+ }
+
+ @Override
+ public void setUserVisibleHint(boolean isVisibleToUser) {
+ super.setUserVisibleHint(isVisibleToUser);
+ m_userVisibleHint = isVisibleToUser;
+
+ Log.d(TAG, "setUserVisibleHint: " + isVisibleToUser);
+
+ if (getView() == null) return;
+
+ try {
+
+ if (isVisibleToUser) {
+ if (m_mediaPlayer != null && !m_mediaPlayer.isPlaying()) {
+ m_mediaPlayer.start();
+ }
+
+ } else {
+ if (m_mediaPlayer != null && m_mediaPlayer.isPlaying()) {
+ m_mediaPlayer.pause();
+ }
+ }
+ } catch (IllegalStateException e) {
+ e.printStackTrace();
+ }
+
+ }
+
+ private void initializeVideoPlayer(final View view) {
+
+ Log.d(TAG, "initializeVideoPlayer: " + m_activity + " " + view);
+
+ final MediaController m_mediaController = new MediaController(m_activity);
+ final TextureView textureView = (TextureView) view.findViewById(R.id.flavor_video);
+
+ textureView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (!m_mediaController.isShowing())
+ m_mediaController.show(5000);
+ else
+ m_mediaController.hide();
+ }
+ });
+
+ m_mediaController.setAnchorView(textureView);
+
+ textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
+ @Override
+ public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
+ Surface s = new Surface(surface);
+
+ m_mediaPlayer = new MediaPlayer();
+
+ m_mediaController.setMediaPlayer(new MediaController.MediaPlayerControl() {
+ @Override
+ public void start() {
+ m_mediaPlayer.start();
+ }
+
+ @Override
+ public void pause() {
+ m_mediaPlayer.pause();
+ }
+
+ @Override
+ public int getDuration() {
+ return m_mediaPlayer.getDuration();
+ }
+
+ @Override
+ public int getCurrentPosition() {
+ return m_mediaPlayer.getCurrentPosition();
+ }
+
+ @Override
+ public void seekTo(int pos) {
+ m_mediaPlayer.seekTo(pos);
+ }
+
+ @Override
+ public boolean isPlaying() {
+ return m_mediaPlayer.isPlaying();
+ }
+
+ @Override
+ public int getBufferPercentage() {
+ return 0;
+ }
+
+ @Override
+ public boolean canPause() {
+ return true;
+ }
+
+ @Override
+ public boolean canSeekBackward() {
+ return true;
+ }
+
+ @Override
+ public boolean canSeekForward() {
+ return true;
+ }
+
+ @Override
+ public int getAudioSessionId() {
+ return 0;
+ }
+ });
+
+ m_mediaPlayer.setSurface(s);
+
+ try {
+ m_mediaPlayer.setDataSource(m_url);
+ } catch (IOException e) {
+ view.findViewById(R.id.flavor_image_error).setVisibility(View.VISIBLE);
+ e.printStackTrace();
+ }
+
+ m_mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
+ @Override
+ public void onPrepared(MediaPlayer mp) {
+ getView().findViewById(R.id.flavor_image).setVisibility(View.GONE);
+ getView().findViewById(R.id.flavor_image_progress).setVisibility(View.GONE);
+
+ resizeSurface(textureView);
+ mp.setLooping(true);
+
+ if (m_userVisibleHint) {
+ mp.start();
+ }
+ }
+ });
+
+ m_mediaPlayer.prepareAsync();
+ }
+
+ @Override
+ public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
+
+ }
+
+ @Override
+ public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
+ m_mediaPlayer.release();
+ return false;
+ }
+
+ @Override
+ public void onSurfaceTextureUpdated(SurfaceTexture surface) {
+
+ }
+ });
+
+ }
+
+ public void initialize(String url, String coverUrl) {
+ m_url = url;
+ m_coverUrl = coverUrl;
+ }
+
+ /*@Override
+ public boolean onContextItemSelected(MenuItem item) {
+ int position = m_pager.getCurrentItem();
+ String url = m_checkedUrls.get(position);
+
+ if (!onImageMenuItemSelected(item, url))
+ return super.onContextItemSelected(item);
+ else
+ return true;
+ }*/
+
+ @Override
+ public void onSaveInstanceState (Bundle out) {
+ super.onSaveInstanceState(out);
+
+ out.setClassLoader(getClass().getClassLoader());
+ out.putString("url", m_url);
+ out.putString("coverUrl", m_coverUrl);
+ }
+
+ protected void resizeSurface(View surfaceView) {
+ // get the dimensions of the video (only valid when surfaceView is set)
+ float videoWidth = m_mediaPlayer.getVideoWidth();
+ float videoHeight = m_mediaPlayer.getVideoHeight();
+
+ Rect rectangle = new Rect();
+ m_activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rectangle);
+
+ int actionBarHeight = m_activity.isPortrait() ? m_activity.getSupportActionBar().getHeight() : 0;
+
+ Display display = m_activity.getWindowManager().getDefaultDisplay();
+ float containerWidth = display.getWidth();
+ float containerHeight = display.getHeight() - rectangle.top - actionBarHeight;
+
+ // set dimensions to surfaceView's layout params (maintaining aspect ratio)
+ android.view.ViewGroup.LayoutParams lp = surfaceView.getLayoutParams();
+ lp.width = (int) containerWidth;
+ lp.height = (int) ((videoHeight / videoWidth) * containerWidth);
+ if(lp.height > containerHeight) {
+ lp.width = (int) ((videoWidth / videoHeight) * containerHeight);
+ lp.height = (int) containerHeight;
+ }
+ surfaceView.setLayoutParams(lp);
+ }
+
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+
+ resizeSurface(getView().findViewById(R.id.flavor_video));
+ }
+
+}
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryBaseFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryBaseFragment.java
new file mode 100644
index 00000000..4b5e40d5
--- /dev/null
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/GalleryBaseFragment.java
@@ -0,0 +1,64 @@
+package org.fox.ttrss;
+
+import android.app.Activity;
+import android.net.Uri;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.util.Log;
+import android.view.MenuItem;
+
+public class GalleryBaseFragment extends Fragment {
+ private final String TAG = this.getClass().getSimpleName();
+ protected ArticleImagesPagerActivity m_activity;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setRetainInstance(true);
+ }
+
+ public boolean onImageMenuItemSelected(MenuItem item, String url) {
+ switch (item.getItemId()) {
+ case R.id.article_img_open:
+ if (url != null) {
+ try {
+ m_activity.openUri(Uri.parse(url));
+ } catch (Exception e) {
+ e.printStackTrace();
+ m_activity.toast(R.string.error_other_error);
+ }
+ }
+ return true;
+ case R.id.article_img_copy:
+ if (url != null) {
+ m_activity.copyToClipboard(url);
+ }
+ return true;
+ case R.id.article_img_share:
+ if (url != null) {
+ m_activity.shareText(url);
+ }
+ return true;
+ case R.id.article_img_view_caption:
+ if (url != null) {
+ m_activity.displayImageCaption(url, m_activity.m_content);
+ }
+ return true;
+ default:
+ Log.d(TAG, "onImageMenuItemSelected, unhandled id=" + item.getItemId());
+ return false;
+ }
+ }
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+
+ //m_prefs = PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext());
+ m_activity = (ArticleImagesPagerActivity) activity;
+
+ }
+
+
+}
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java
index 72c154be..03999e92 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java
@@ -1206,11 +1206,17 @@ public class HeadlinesFragment extends Fragment {
holder.flavorImageView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
-
releaseSurface();
+ openGalleryForType(article, holder, holder.flavorImageView);
+ return true;
+ }
+ });
- openGalleryForType(article, holder, null);
-
+ holder.flavorVideoView.setOnLongClickListener(new View.OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View v) {
+ releaseSurface();
+ openGalleryForType(article, holder, holder.flavorImageView);
return true;
}
});
@@ -1218,9 +1224,7 @@ public class HeadlinesFragment extends Fragment {
holder.flavorImageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
-
releaseSurface();
-
m_mediaPlayer = new MediaPlayer();
try {
@@ -1240,10 +1244,14 @@ public class HeadlinesFragment extends Fragment {
holder.flavorVideoView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
- if (m_mediaPlayer.isPlaying())
- m_mediaPlayer.pause();
- else
- m_mediaPlayer.start();
+ try {
+ if (m_mediaPlayer.isPlaying())
+ m_mediaPlayer.pause();
+ else
+ m_mediaPlayer.start();
+ } catch (IllegalStateException e) {
+ releaseSurface();
+ }
}
});
@@ -1310,7 +1318,7 @@ public class HeadlinesFragment extends Fragment {
holder.flavorImageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
- openGalleryForType(article, holder, null);
+ openGalleryForType(article, holder, holder.flavorImageView);
}
});
}
@@ -1474,6 +1482,8 @@ public class HeadlinesFragment extends Fragment {
}
private void openGalleryForType(Article article, ArticleViewHolder holder, View transitionView) {
+ //Log.d(TAG, "openGalleryForType: " + article + " " + holder + " " + transitionView);
+
if ("iframe".equals(article.flavorImage.tagName().toLowerCase())) {
if (m_youtubeInstalled) {
@@ -1489,35 +1499,18 @@ public class HeadlinesFragment extends Fragment {
m_activity.openUri(Uri.parse(article.flavorStreamUri));
}
- } else if ("video".equals(article.flavorImage.tagName().toLowerCase())) {
-
- Intent intent = new Intent(m_activity, VideoPlayerActivity.class);
- intent.putExtra("streamUri", article.flavorStreamUri);
- intent.putExtra("title", article.title);
- intent.putExtra("coverSrc", article.flavorImageUri);
-
- //startActivity(intent);
- //m_activity.overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
-
- ActivityOptionsCompat options =
- ActivityOptionsCompat.makeSceneTransitionAnimation(m_activity,
- transitionView != null ? transitionView : holder.flavorImageView,
- "gallery:" + article.flavorImageUri);
-
- ActivityCompat.startActivity(m_activity, intent, options.toBundle());
-
} else {
Intent intent = new Intent(m_activity, ArticleImagesPagerActivity.class);
- intent.putExtra("firstSrc", article.flavorImageUri);
+ intent.putExtra("firstSrc", article.flavorStreamUri != null ? article.flavorStreamUri : article.flavorImageUri);
intent.putExtra("title", article.title);
intent.putExtra("content", article.content);
ActivityOptionsCompat options =
ActivityOptionsCompat.makeSceneTransitionAnimation(m_activity,
transitionView != null ? transitionView : holder.flavorImageView,
- "gallery:" + article.flavorImageUri);
+ "gallery:" + (article.flavorStreamUri != null ? article.flavorStreamUri : article.flavorImageUri));
ActivityCompat.startActivity(m_activity, intent, options.toBundle());
}
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/VideoPlayerActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/VideoPlayerActivity.java
deleted file mode 100755
index e952485d..00000000
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/VideoPlayerActivity.java
+++ /dev/null
@@ -1,368 +0,0 @@
-package org.fox.ttrss;
-
-import android.content.res.Configuration;
-import android.graphics.Bitmap;
-import android.graphics.Rect;
-import android.media.MediaPlayer;
-import android.net.Uri;
-import android.os.Bundle;
-import android.support.v4.app.ActivityCompat;
-import android.support.v4.view.ViewCompat;
-import android.support.v7.widget.Toolbar;
-import android.util.Log;
-import android.view.ContextMenu;
-import android.view.Display;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.SurfaceHolder;
-import android.view.SurfaceView;
-import android.view.View;
-import android.widget.FrameLayout;
-import android.widget.ImageView;
-import android.widget.MediaController;
-import android.widget.PopupMenu;
-
-import com.bumptech.glide.Glide;
-import com.bumptech.glide.load.engine.DiskCacheStrategy;
-import com.bumptech.glide.load.resource.drawable.GlideDrawable;
-import com.bumptech.glide.request.RequestListener;
-import com.bumptech.glide.request.target.Target;
-
-import java.io.IOException;
-
-
-public class VideoPlayerActivity extends CommonActivity {
-
- private final String TAG = this.getClass().getSimpleName();
- private String m_streamUri;
- private MediaPlayer mediaPlayer;
- private SurfaceView surfaceView;
- private String m_coverUri;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
-
- setTheme(R.style.DarkTheme);
-
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_video_player);
-
- Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
- setSupportActionBar(toolbar);
-
- getSupportActionBar().setDisplayHomeAsUpEnabled(true);
- getSupportActionBar().hide();
-
- surfaceView = (SurfaceView) findViewById(R.id.video_player);
- registerForContextMenu(surfaceView);
-
- setTitle(getIntent().getStringExtra("title"));
-
- if (savedInstanceState == null) {
- m_streamUri = getIntent().getStringExtra("streamUri");
- m_coverUri = getIntent().getStringExtra("coverSrc");
- } else {
- m_streamUri = savedInstanceState.getString("streamUri");
- m_coverUri = savedInstanceState.getString("coverSrc");
- }
-
- ImageView coverView = (ImageView)findViewById(R.id.video_player_cover);
-
- if (m_coverUri != null) {
- ActivityCompat.postponeEnterTransition(VideoPlayerActivity.this);
-
- ViewCompat.setTransitionName(coverView, "gallery:" + m_coverUri);
-
- Glide.with(this)
- .load(m_coverUri)
- .diskCacheStrategy(DiskCacheStrategy.ALL)
- .skipMemoryCache(false)
- .listener(new RequestListener<String, GlideDrawable>() {
- @Override
- public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
- ActivityCompat.startPostponedEnterTransition(VideoPlayerActivity.this);
- return false;
- }
-
- @Override
- public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
- ActivityCompat.startPostponedEnterTransition(VideoPlayerActivity.this);
- return false;
- }
- })
- .into(coverView);
-
-
- /*ImageLoader imageLoader = ImageLoader.getInstance();
- imageLoader.displayImage(m_coverUri, coverView, new ImageLoadingListener() {
- @Override
- public void onLoadingStarted(String s, View view) {
- ActivityCompat.startPostponedEnterTransition(VideoPlayerActivity.this);
- }
-
- @Override
- public void onLoadingFailed(String s, View view, FailReason failReason) {
- ActivityCompat.startPostponedEnterTransition(VideoPlayerActivity.this);
- }
-
- @Override
- public void onLoadingComplete(String s, View view, Bitmap bitmap) {
- ActivityCompat.startPostponedEnterTransition(VideoPlayerActivity.this);
- }
-
- @Override
- public void onLoadingCancelled(String s, View view) {
- ActivityCompat.startPostponedEnterTransition(VideoPlayerActivity.this);
- }
- });*/
-
-
- } else {
- coverView.setVisibility(View.GONE);
- }
-
- findViewById(R.id.video_player_overflow).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- PopupMenu popup = new PopupMenu(VideoPlayerActivity.this, v);
- MenuInflater inflater = popup.getMenuInflater();
- inflater.inflate(R.menu.activity_video_player, popup.getMenu());
-
- popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
- @Override
- public boolean onMenuItemClick(MenuItem item) {
- return onVideoMenuItemSelected(item);
- }
- });
-
- popup.show();
-
- }
- });
-
- final MediaController mediaController = new MediaController(this);
-
- surfaceView.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (!mediaController.isShowing())
- mediaController.show(5000);
- else
- mediaController.hide();
- }
- });
-
- mediaPlayer = new MediaPlayer();
-
- mediaController.setMediaPlayer(new MediaController.MediaPlayerControl() {
- @Override
- public void start() {
- mediaPlayer.start();
- }
-
- @Override
- public void pause() {
- mediaPlayer.pause();
- }
-
- @Override
- public int getDuration() {
- return mediaPlayer.getDuration();
- }
-
- @Override
- public int getCurrentPosition() {
- return mediaPlayer.getCurrentPosition();
- }
-
- @Override
- public void seekTo(int pos) {
- mediaPlayer.seekTo(pos);
- }
-
- @Override
- public boolean isPlaying() {
- return mediaPlayer.isPlaying();
- }
-
- @Override
- public int getBufferPercentage() {
- return 0;
- }
-
- @Override
- public boolean canPause() {
- return true;
- }
-
- @Override
- public boolean canSeekBackward() {
- return true;
- }
-
- @Override
- public boolean canSeekForward() {
- return true;
- }
-
- @Override
- public int getAudioSessionId() {
- return 0;
- }
- });
-
-
- SurfaceHolder sh = surfaceView.getHolder();
-
- try {
- mediaPlayer.setDataSource(this, Uri.parse(m_streamUri));
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- Log.d(TAG, surfaceView.getWidth() + " " + surfaceView.getHeight());
-
- final FrameLayout.LayoutParams svLayoutParams = new FrameLayout.LayoutParams(surfaceView.getWidth(), surfaceView.getHeight());
-
- sh.addCallback(new SurfaceHolder.Callback() {
- @Override
- public void surfaceCreated(SurfaceHolder holder) {
- mediaPlayer.setDisplay(holder);
- try {
- mediaPlayer.prepareAsync();
- } catch (IllegalStateException e) {
- e.printStackTrace();
- }
- mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
- @Override
- public void onPrepared(MediaPlayer mp) {
-
- View loadingBar = findViewById(R.id.video_loading);
- if (loadingBar != null)
- loadingBar.setVisibility(View.GONE);
-
- View coverView = findViewById(R.id.video_player_cover);
- if (coverView != null)
- coverView.setVisibility(View.GONE);
-
- resizeSurface();
- mp.setLooping(true);
- mp.start();
- }
- }
-
- );
- }
-
- @Override
- public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
- //
- }
-
- @Override
- public void surfaceDestroyed(SurfaceHolder holder) {
- mediaPlayer.release();
- }
- });
-
-
- mediaController.setAnchorView(surfaceView);
-
- }
-
- public void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
-
- resizeSurface();
- }
-
- @Override
- public void onSaveInstanceState(Bundle out) {
- super.onSaveInstanceState(out);
-
- out.putString("streamUri", m_streamUri);
- out.putString("coverSrc", m_coverUri);
- }
-
-
- @Override
- public void onCreateContextMenu(ContextMenu menu, View v,
- ContextMenu.ContextMenuInfo menuInfo) {
-
- getMenuInflater().inflate(R.menu.activity_video_player, menu);
-
- super.onCreateContextMenu(menu, v, menuInfo);
- }
-
-
- @Override
- public boolean onContextItemSelected(MenuItem item) {
- if (!onVideoMenuItemSelected(item))
- return super.onContextItemSelected(item);
- else
- return true;
- }
-
- public boolean onVideoMenuItemSelected(android.view.MenuItem item) {
- switch (item.getItemId()) {
- case R.id.article_vid_open:
- if (m_streamUri != null) {
- try {
- openUri(Uri.parse(m_streamUri));
- } catch (Exception e) {
- e.printStackTrace();
- toast(R.string.error_other_error);
- }
- }
- return true;
- case R.id.article_vid_copy:
- if (m_streamUri != null) {
- copyToClipboard(m_streamUri);
- }
- return true;
- case R.id.article_vid_share:
- if (m_streamUri != null) {
- shareText(m_streamUri);
- }
- return true;
- default:
- Log.d(TAG, "onVideoMenuItemSelected, unhandled id=" + item.getItemId());
- return false;
- }
- }
-
- protected void resizeSurface() {
- // get the dimensions of the video (only valid when surfaceView is set)
- float videoWidth = mediaPlayer.getVideoWidth();
- float videoHeight = mediaPlayer.getVideoHeight();
-
- Rect rectangle = new Rect();
- getWindow().getDecorView().getWindowVisibleDisplayFrame(rectangle);
-
- int actionBarHeight = isPortrait() ? getSupportActionBar().getHeight() : 0;
-
- Display display = getWindowManager().getDefaultDisplay();
- float containerWidth = display.getWidth();
- float containerHeight = display.getHeight() - rectangle.top - actionBarHeight;
-
- // set dimensions to surfaceView's layout params (maintaining aspect ratio)
- android.view.ViewGroup.LayoutParams lp = surfaceView.getLayoutParams();
- lp.width = (int) containerWidth;
- lp.height = (int) ((videoHeight / videoWidth) * containerWidth);
- if(lp.height > containerHeight) {
- lp.width = (int) ((videoWidth / videoHeight) * containerHeight);
- lp.height = (int) containerHeight;
- }
- surfaceView.setLayoutParams(lp);
- }
-
- /*@Override
- public void onPause() {
- super.onPause();
-
- if (isFinishing()) {
-
- }
-
- }*/
-}
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/YoutubePlayerActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/YoutubePlayerActivity.java
index 68791322..d8a287d1 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/YoutubePlayerActivity.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/YoutubePlayerActivity.java
@@ -73,7 +73,7 @@ public class YoutubePlayerActivity extends CommonActivity implements YouTubePlay
@Override
public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.activity_video_player, menu);
+ getMenuInflater().inflate(R.menu.activity_youtube_player, menu);
return true;
}
@@ -82,7 +82,7 @@ public class YoutubePlayerActivity extends CommonActivity implements YouTubePlay
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenu.ContextMenuInfo menuInfo) {
- getMenuInflater().inflate(R.menu.activity_video_player, menu);
+ getMenuInflater().inflate(R.menu.activity_youtube_player, menu);
super.onCreateContextMenu(menu, v, menuInfo);
}
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/types/Article.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/types/Article.java
index c687d3d3..f9919f15 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/types/Article.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/types/Article.java
@@ -72,10 +72,10 @@ public class Article implements Parcelable {
if ("iframe".equals(e.tagName().toLowerCase())) {
flavorImage = e;
break;
- } else if ("video".equals(e.tagName().toLowerCase())) {
+ } /*else if ("video".equals(e.tagName().toLowerCase())) {
flavorImage = e;
break;
- }
+ }*/
}
if (flavorImage == null) {
diff --git a/org.fox.ttrss/src/main/res/layout/activity_video_player.xml b/org.fox.ttrss/src/main/res/layout/activity_video_player.xml
deleted file mode 100644
index 1fbeb587..00000000
--- a/org.fox.ttrss/src/main/res/layout/activity_video_player.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:fitsSystemWindows="true"
- android:background="@android:color/black"
- tools:context="org.fox.ttrss.VideoPlayerActivity">
-
- <FrameLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_below="@+id/toolbar">
-
- <SurfaceView
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_gravity="center"
- android:id="@+id/video_player" />
-
- <ImageView
- android:id="@+id/video_player_cover"
- android:layout_width="match_parent"
- android:layout_height="match_parent"/>
-
- <ProgressBar
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/video_loading"
- android:layout_gravity="center"
- android:indeterminate="true" />
-
- <ImageView
- android:id="@+id/video_player_overflow"
- android:clickable="true"
- android:layout_width="wrap_content"
- android:layout_height="26dp"
- android:layout_weight="0"
- android:background="@drawable/ripple"
- android:src="@drawable/ic_dots_vertical"
- android:layout_gravity="top|right"
- android:layout_marginRight="8dp"
- android:layout_marginTop="@dimen/activity_vertical_margin" />
- </FrameLayout>
-
- <include layout="@layout/toolbar" android:id="@+id/toolbar" />
-
-</RelativeLayout>
diff --git a/org.fox.ttrss/src/main/res/layout/activity_youtube_player.xml b/org.fox.ttrss/src/main/res/layout/activity_youtube_player.xml
index 3d2c9c9a..0b423edc 100644
--- a/org.fox.ttrss/src/main/res/layout/activity_youtube_player.xml
+++ b/org.fox.ttrss/src/main/res/layout/activity_youtube_player.xml
@@ -2,8 +2,7 @@
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
- android:background="@android:color/black"
- tools:context="org.fox.ttrss.VideoPlayerActivity">
+ android:background="@android:color/black">
<FrameLayout
android:layout_width="match_parent"
diff --git a/org.fox.ttrss/src/main/res/layout/article_images_pager.xml b/org.fox.ttrss/src/main/res/layout/article_images_pager.xml
index 469068eb..de99eedb 100755
--- a/org.fox.ttrss/src/main/res/layout/article_images_pager.xml
+++ b/org.fox.ttrss/src/main/res/layout/article_images_pager.xml
@@ -19,6 +19,7 @@
android:id="@+id/article_images_progress"
android:progress="0"
android:indeterminate="false"
+ android:visibility="gone"
android:layout_above="@+id/article_images_indicator"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
diff --git a/org.fox.ttrss/src/main/res/layout/fragment_article_image.xml b/org.fox.ttrss/src/main/res/layout/fragment_article_image.xml
index 29a53bd0..e5fe47f4 100644
--- a/org.fox.ttrss/src/main/res/layout/fragment_article_image.xml
+++ b/org.fox.ttrss/src/main/res/layout/fragment_article_image.xml
@@ -12,11 +12,13 @@
android:text="@string/error_loading_image"
android:id="@+id/flavor_image_error" />
- <ProgressBar
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ <TextureView
+ android:id="@+id/flavor_video"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:adjustViewBounds="true"
android:layout_gravity="center"
- android:id="@+id/flavor_image_progress" />
+ android:scaleType="fitCenter" />
<ImageView
android:id="@+id/flavor_image"
@@ -26,6 +28,12 @@
android:layout_gravity="center"
android:scaleType="fitCenter" />
+ <ProgressBar
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:id="@+id/flavor_image_progress" />
+
<ImageView
android:id="@+id/flavor_image_overflow"
android:clickable="true"
diff --git a/org.fox.ttrss/src/main/res/menu/activity_video_player.xml b/org.fox.ttrss/src/main/res/menu/activity_youtube_player.xml
index b323d3b7..acce1d3a 100644
--- a/org.fox.ttrss/src/main/res/menu/activity_video_player.xml
+++ b/org.fox.ttrss/src/main/res/menu/activity_youtube_player.xml
@@ -1,20 +1,19 @@
-<menu xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- xmlns:tools="http://schemas.android.com/tools"
- tools:context="org.fox.ttrss.VideoPlayerActivity">
-
- <item
- android:id="@+id/article_vid_open"
- app:showAsAction=""
- android:title="@string/open_with"/>
- <item
- android:id="@+id/article_vid_copy"
- app:showAsAction=""
- android:icon="@drawable/ic_content_copy"
- android:title="@string/article_link_copy"/>
- <item
- android:id="@+id/article_vid_share"
- android:icon="@drawable/ic_share"
- app:showAsAction="ifRoom"
- android:title="@string/video_player_share"/>
-</menu>
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools">
+
+ <item
+ android:id="@+id/article_vid_open"
+ app:showAsAction=""
+ android:title="@string/open_with"/>
+ <item
+ android:id="@+id/article_vid_copy"
+ app:showAsAction=""
+ android:icon="@drawable/ic_content_copy"
+ android:title="@string/article_link_copy"/>
+ <item
+ android:id="@+id/article_vid_share"
+ android:icon="@drawable/ic_share"
+ app:showAsAction="ifRoom"
+ android:title="@string/video_player_share"/>
+</menu>