diff --git a/vlc-android/res/layout/directory_view.xml b/vlc-android/res/layout/directory_view.xml index aac07240e3952cf7eeacb9ecb94c71ff8d1100f7..681921e7c51495ce77b02bf6392b202b06276581 100644 --- a/vlc-android/res/layout/directory_view.xml +++ b/vlc-android/res/layout/directory_view.xml @@ -6,6 +6,8 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/listview_bottom_padding" - android:clipToPadding="false" > + android:clipToPadding="false" + android:divider="?attr/background_menu_divider" + android:dividerHeight="0.1dp" > diff --git a/vlc-android/res/layout/directory_view_item.xml b/vlc-android/res/layout/directory_view_item.xml index 9283613b33c801aa056d58e63d19d6366e14dd0e..faf1d3d52c3a408201429c85d88c05ec259cc1bf 100644 --- a/vlc-android/res/layout/directory_view_item.xml +++ b/vlc-android/res/layout/directory_view_item.xml @@ -3,7 +3,9 @@ android:id="@+id/layout_item" android:layout_width="fill_parent" android:layout_height="wrap_content" - android:orientation="horizontal" > + android:orientation="horizontal" + android:paddingTop="5dp" + android:paddingBottom="5dp" > @@ -43,4 +46,12 @@ android:textSize="14sp" /> + + \ No newline at end of file diff --git a/vlc-android/src/org/videolan/vlc/gui/DirectoryAdapter.java b/vlc-android/src/org/videolan/vlc/gui/DirectoryAdapter.java index 15096601e2c11d4bd3a45fb021820e21875f7bcf..5060dd83ac602013c17ed8d14237ca4638a0cd6d 100644 --- a/vlc-android/src/org/videolan/vlc/gui/DirectoryAdapter.java +++ b/vlc-android/src/org/videolan/vlc/gui/DirectoryAdapter.java @@ -44,6 +44,7 @@ import android.preference.PreferenceManager; import android.util.Log; import android.view.LayoutInflater; import android.view.View; +import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; @@ -52,6 +53,8 @@ import android.widget.TextView; public class DirectoryAdapter extends BaseAdapter { public final static String TAG = "VLC/DirectoryAdapter"; + private ContextPopupMenuListener mContextPopupMenuListener; + public static boolean acceptedPath(String f) { return Pattern.compile(Media.EXTENSIONS_REGEX, Pattern.CASE_INSENSITIVE).matcher(f).matches(); } @@ -171,6 +174,7 @@ public class DirectoryAdapter extends BaseAdapter { TextView title; TextView text; ImageView icon; + ImageView more; } private void populateNode(DirectoryAdapter.Node n, String path) { @@ -298,7 +302,7 @@ public class DirectoryAdapter extends BaseAdapter { } @Override - public View getView(int position, View convertView, ViewGroup parent) { + public View getView(final int position, View convertView, ViewGroup parent) { DirectoryAdapter.Node selectedNode = mCurrentNode.children.get(position); DirectoryViewHolder holder; View v = convertView; @@ -315,6 +319,7 @@ public class DirectoryAdapter extends BaseAdapter { Util.setAlignModeByPref(mAlignMode, holder.title); holder.text = (TextView) v.findViewById(R.id.text); holder.icon = (ImageView) v.findViewById(R.id.dvi_icon); + holder.more = (ImageView) v.findViewById(R.id.item_more); v.setTag(holder); } else holder = (DirectoryViewHolder) v.getTag(); @@ -346,12 +351,28 @@ public class DirectoryAdapter extends BaseAdapter { R.plurals.mediafiles_quantity, mediaFileCount, mediaFileCount); } - holder.text.setText(holderText); + if (holderText.isEmpty()) + holder.text.setVisibility(View.GONE); + else { + holder.text.setVisibility(View.VISIBLE); + holder.text.setText(holderText); + } if(selectedNode.isFile()) holder.icon.setImageResource(R.drawable.icon); else holder.icon.setImageResource(R.drawable.ic_menu_folder); + if (isChildFile(position)) { + holder.more.setVisibility(View.VISIBLE); + holder.more.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (mContextPopupMenuListener != null) + mContextPopupMenuListener.onPopupMenu(v, position); + } + }); + } else + holder.more.setVisibility(View.GONE); return v; } @@ -481,4 +502,12 @@ public class DirectoryAdapter extends BaseAdapter { } return file.getName(); } + + public interface ContextPopupMenuListener { + void onPopupMenu(View anchor, final int position); + } + + void setContextPopupMenuListener(ContextPopupMenuListener l) { + mContextPopupMenuListener = l; + } } diff --git a/vlc-android/src/org/videolan/vlc/gui/DirectoryViewFragment.java b/vlc-android/src/org/videolan/vlc/gui/DirectoryViewFragment.java index 2e366b2a2f31f637bd7d0a0bb67dc32d3098807b..5bf603707c0c89018a7e6fcf92d0ea4e9d0decb0 100644 --- a/vlc-android/src/org/videolan/vlc/gui/DirectoryViewFragment.java +++ b/vlc-android/src/org/videolan/vlc/gui/DirectoryViewFragment.java @@ -24,6 +24,7 @@ import java.io.IOException; import java.util.List; import org.videolan.libvlc.LibVLC; +import org.videolan.libvlc.LibVlcUtil; import org.videolan.vlc.R; import org.videolan.vlc.audio.AudioServiceController; import org.videolan.vlc.gui.video.VideoPlayerActivity; @@ -32,14 +33,18 @@ import org.videolan.vlc.interfaces.ISortable; import org.videolan.vlc.util.Util; import org.videolan.vlc.util.VLCRunnable; +import android.annotation.TargetApi; import android.app.AlertDialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.os.Build; import android.os.Bundle; import android.support.v4.app.ListFragment; import android.support.v7.app.ActionBarActivity; +import android.support.v7.widget.PopupMenu; +import android.support.v7.widget.PopupMenu.OnMenuItemClickListener; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.LayoutInflater; @@ -93,6 +98,7 @@ public class DirectoryViewFragment extends ListFragment implements IRefreshable, ((ActionBarActivity) getActivity()).getSupportActionBar().setTitle(R.string.directories); View v = inflater.inflate(R.layout.directory_view, container, false); + mDirectoryAdapter.setContextPopupMenuListener(mContextPopupMenuListener); setListAdapter(mDirectoryAdapter); final ListView listView = (ListView)v.findViewById(android.R.id.list); listView.setNextFocusUpId(R.id.ml_menu_search); @@ -238,4 +244,29 @@ public class DirectoryViewFragment extends ListFragment implements IRefreshable, } } }; + + DirectoryAdapter.ContextPopupMenuListener mContextPopupMenuListener + = new DirectoryAdapter.ContextPopupMenuListener() { + + @Override + @TargetApi(Build.VERSION_CODES.HONEYCOMB) + public void onPopupMenu(View anchor, final int position) { + if (!LibVlcUtil.isHoneycombOrLater()) { + // Call the "classic" context menu + anchor.performLongClick(); + return; + } + PopupMenu popupMenu = new PopupMenu(getActivity(), anchor); + popupMenu.getMenuInflater().inflate(R.menu.directory_view, popupMenu.getMenu()); + + popupMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + return onContextItemSelected(item); + } + }); + popupMenu.show(); + } + + }; }