[Android] [PATCH] DPAD navigation in main video screen

Steve Lhomme robux4 at gmail.com
Fri Apr 22 08:54:55 CEST 2016


On Fri, Apr 22, 2016 at 1:32 AM, Chegou Junior KEITA <chegoujk at gmail.com> wrote:
> From: KEITA chegou junior <keita at informatique.univ-paris-diderot.fr>
>
> ---
>  compile-libvlc.sh                                  |  4 +-
>  .../videolan/vlc/gui/video/VideoGridFragment.java  |  1 +
>  .../videolan/vlc/gui/video/VideoListAdapter.java   | 47 ++++++++++++++++++++++
>  3 files changed, 50 insertions(+), 2 deletions(-)
>
> diff --git a/compile-libvlc.sh b/compile-libvlc.sh
> index c32e086..417b516 100755
> --- a/compile-libvlc.sh
> +++ b/compile-libvlc.sh
> @@ -70,7 +70,7 @@ VLC_BOOTSTRAP_ARGS="\
>      --disable-dca \
>      --disable-goom \
>      --disable-chromaprint \
> -    --enable-lua \
> +    --disable-lua \

I think that's unintended.

>      --disable-schroedinger \
>      --disable-sdl \
>      --disable-SDL_image \
> @@ -119,7 +119,7 @@ VLC_CONFIGURE_ARGS="\
>      --disable-update-check \
>      --disable-vlm \
>      --disable-dbus \
> -    --enable-lua \
> +    --disable-lua \

Same here

>      --disable-vcd \
>      --disable-v4l2 \
>      --disable-gnomevfs \
> diff --git a/vlc-android/src/org/videolan/vlc/gui/video/VideoGridFragment.java b/vlc-android/src/org/videolan/vlc/gui/video/VideoGridFragment.java
> index 9cf6b83..5b66f0c 100644
> --- a/vlc-android/src/org/videolan/vlc/gui/video/VideoGridFragment.java
> +++ b/vlc-android/src/org/videolan/vlc/gui/video/VideoGridFragment.java
> @@ -37,6 +37,7 @@ import android.support.v7.widget.RecyclerView;
>  import android.util.DisplayMetrics;
>  import android.util.Log;
>  import android.view.ContextMenu;
> +import android.view.KeyEvent;
>  import android.view.LayoutInflater;
>  import android.view.Menu;
>  import android.view.MenuInflater;
> diff --git a/vlc-android/src/org/videolan/vlc/gui/video/VideoListAdapter.java b/vlc-android/src/org/videolan/vlc/gui/video/VideoListAdapter.java
> index 4fe2880..bf534a7 100644
> --- a/vlc-android/src/org/videolan/vlc/gui/video/VideoListAdapter.java
> +++ b/vlc-android/src/org/videolan/vlc/gui/video/VideoListAdapter.java
> @@ -24,11 +24,13 @@ import android.content.Context;
>  import android.databinding.DataBindingUtil;
>  import android.databinding.ViewDataBinding;
>  import android.graphics.Bitmap;
> +import android.graphics.Color;
>  import android.graphics.drawable.BitmapDrawable;
>  import android.support.annotation.MainThread;
>  import android.support.annotation.Nullable;
>  import android.support.v4.util.ArrayMap;
>  import android.support.v7.widget.RecyclerView;
> +import android.view.KeyEvent;
>  import android.view.LayoutInflater;
>  import android.view.View;
>  import android.view.ViewGroup;
> @@ -63,6 +65,8 @@ public class VideoListAdapter extends RecyclerView.Adapter<VideoListAdapter.View
>      public final static int TYPE_LIST = 0;
>      public final static int TYPE_GRID = 1;
>
> +    private int mCurrentItem = 0;
> +
>      public final static int SORT_BY_DATE = 2;
>      private int mSortDirection = 1;
>      private int mSortBy = SORT_BY_TITLE;
> @@ -90,6 +94,11 @@ public class VideoListAdapter extends RecyclerView.Adapter<VideoListAdapter.View
>          MediaWrapper media = mVideos.get(position);
>          boolean asyncLoad = true;
>
> +        if (mCurrentItem == position)
> +            holder.itemView.setBackgroundColor(Color.GRAY);
> +        else
> +            holder.itemView.setBackgroundColor(Color.TRANSPARENT);
> +
>          holder.binding.setVariable(BR.scaleType, ImageView.ScaleType.CENTER);
>          final Bitmap bitmap = BitmapUtil.getPictureFromCache(media);
>          if (bitmap != null) {
> @@ -111,6 +120,43 @@ public class VideoListAdapter extends RecyclerView.Adapter<VideoListAdapter.View
>              AsyncImageLoader.LoadImage(new VideoCoverFetcher(holder.binding, media), null);
>      }
>
> +    @Override
> +    public void onAttachedToRecyclerView(final RecyclerView recyclerView) {
> +        super.onAttachedToRecyclerView(recyclerView);
> +
> +        recyclerView.setOnKeyListener(new View.OnKeyListener() {
> +            @Override
> +            public boolean onKey(View v, int keyCode, KeyEvent event) {
> +                RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
> +
> +                if (event.getAction() == KeyEvent.ACTION_DOWN) {
> +                    if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN || keyCode == KeyEvent.KEYCODE_DPAD_RIGHT)
> +                        return onItemSelection(layoutManager, 1);
> +                    else if (keyCode == KeyEvent.KEYCODE_DPAD_UP || keyCode == KeyEvent.KEYCODE_DPAD_LEFT)
> +                        return onItemSelection(layoutManager, -1);
> +                    else if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
> +                        MediaWrapper media = mVideos.get(mCurrentItem);
> +                        VideoPlayerActivity.start(v.getContext(), media.getUri(), media.getTitle());
> +                        return true;
> +                    }
> +                }
> +                return false;
> +            }
> +        });
> +    }
> +
> +    private boolean onItemSelection(RecyclerView.LayoutManager layoutManager, int direction) {
> +        int nextItem = mCurrentItem + direction;
> +
> +        if (nextItem >= 0 && nextItem < getItemCount()) {
> +            notifyItemChanged(mCurrentItem);
> +            mCurrentItem = nextItem;
> +            notifyItemChanged(mCurrentItem);
> +            return true;
> +        }
> +        return false;
> +    }
> +
>      @MainThread
>      public void setTimes(ArrayMap<String, Long> times) {
>          boolean notify = false;
> @@ -353,6 +399,7 @@ public class VideoListAdapter extends RecyclerView.Adapter<VideoListAdapter.View
>          }
>
>          public void onClick(View v){
> +            mCurrentItem = getAdapterPosition();
>              MediaWrapper media = mVideos.get(getAdapterPosition());
>              if (media instanceof MediaGroup) {
>                  MainActivity activity = (MainActivity) mFragment.getActivity();
> --
> 1.9.1
>
> _______________________________________________
> Android mailing list
> Android at videolan.org
> https://mailman.videolan.org/listinfo/android


More information about the Android mailing list