[Android] Set video group as an editable preference

Alexandre Perraud git at videolan.org
Fri Jul 8 11:30:38 CEST 2016


vlc-android | branch: 2.0.x | Alexandre Perraud <4leyx4ndre at gmail.com> | Thu Jun 30 14:50:40 2016 +0200| [a103015a92aa669a23d987beeaad58a43241c09e] | committer: Alexandre Perraud

Set video group as an editable preference

(cherry picked from commit 957c50f78de143446dd0b004a67bfa23194e78f8)

> https://code.videolan.org/videolan/vlc-android/commit/a103015a92aa669a23d987beeaad58a43241c09e
---

 vlc-android/res/values/strings.xml                   | 20 ++++++++++++++++++++
 vlc-android/res/xml/preferences_ui.xml               |  8 ++++++++
 .../videolan/vlc/gui/preferences/PreferencesUi.java  |  3 +++
 .../videolan/vlc/gui/video/VideoGridFragment.java    |  3 ++-
 .../src/org/videolan/vlc/media/MediaGroup.java       | 13 +++++++++----
 5 files changed, 42 insertions(+), 5 deletions(-)

diff --git a/vlc-android/res/values/strings.xml b/vlc-android/res/values/strings.xml
index afbd1cc..e7c20fc 100644
--- a/vlc-android/res/values/strings.xml
+++ b/vlc-android/res/values/strings.xml
@@ -386,6 +386,12 @@
     <string name="tv_ui_summary">Change UI to TV adapted theme</string>
     <string name="lockscreen_cover_title">Media cover on Lockscreen</string>
     <string name="lockscreen_cover_summary">When available, set the current media cover art as lockscreen wallpaper</string>
+    <string name="video_min_group_length_title">Group videos</string>
+    <string name="video_min_group_length_summary">Videos are grouped if their first letters are the same.</string>
+    <string name="video_min_group_length_disable">Disable</string>
+    <string name="video_min_group_length_first">First letter only</string>
+    <string name="video_min_group_length_short">Short number of letters (6)</string>
+    <string name="video_min_group_length_long">Long number of letters (9)</string>
 
     <!--Accessibility-->
     <string name="more_actions">More Actions</string>
@@ -486,6 +492,20 @@
         <item>3</item>
     </string-array>
 
+    <string-array name="video_min_group_length_list" translatable="false">
+        <item>@string/video_min_group_length_disable</item>
+        <item>@string/video_min_group_length_first</item>
+        <item>@string/video_min_group_length_short</item>
+        <item>@string/video_min_group_length_long</item>
+    </string-array>
+
+    <string-array name="video_min_group_length_values" translatable="false">
+        <item>0</item>
+        <item>1</item>
+        <item>6</item>
+        <item>9</item>
+    </string-array>
+
     <string-array name="subtitles_encoding_list" tools:ignore="TypographyDashes">
         <item>Default (Windows-1252)</item>
         <item>Universal (UTF-8)</item>
diff --git a/vlc-android/res/xml/preferences_ui.xml b/vlc-android/res/xml/preferences_ui.xml
index b9b73c7..f65e000 100644
--- a/vlc-android/res/xml/preferences_ui.xml
+++ b/vlc-android/res/xml/preferences_ui.xml
@@ -9,6 +9,14 @@
         android:key="enable_black_theme"
         android:summary="@string/enable_black_theme_summary"
         android:title="@string/enable_black_theme" />
+    <ListPreference
+        android:defaultValue="6"
+        android:entries="@array/video_min_group_length_list"
+        android:entryValues="@array/video_min_group_length_values"
+        android:key="video_min_group_length"
+        android:persistent="true"
+        android:summary="@string/video_min_group_length_summary"
+        android:title="@string/video_min_group_length_title" />
     <PreferenceCategory android:title="@string/interface_gui" >
         <CheckBoxPreference
             android:key="tv_ui"
diff --git a/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesUi.java b/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesUi.java
index d42cc7c..abeea83 100644
--- a/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesUi.java
+++ b/vlc-android/src/org/videolan/vlc/gui/preferences/PreferencesUi.java
@@ -58,6 +58,9 @@ public class PreferencesUi extends BasePreferenceFragment {
         if (preference.getKey() == null)
             return false;
         switch (preference.getKey()){
+            case "video_min_group_length":
+                getActivity().setResult(PreferencesActivity.RESULT_RESTART);
+                return true;
             case "enable_headset_detection":
                 ((PreferencesActivity)getActivity()).detectHeadset(((TwoStatePreference) preference).isChecked());
                 return true;
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 43242fa..63946b5 100644
--- a/vlc-android/src/org/videolan/vlc/gui/video/VideoGridFragment.java
+++ b/vlc-android/src/org/videolan/vlc/gui/video/VideoGridFragment.java
@@ -398,7 +398,8 @@ public class VideoGridFragment extends MediaBrowserFragment implements ISortable
                     final ArrayList<MediaWrapper> jobsList = new ArrayList<>();
                     if (mGroup != null || itemList.size() <= 10) {
                         for (MediaWrapper item : itemList) {
-                            if (mGroup == null || item.getTitle().startsWith(mGroup))
+                            String title = item.getTitle().substring(item.getTitle().toLowerCase().startsWith("the") ? 4 : 0);
+                            if (mGroup == null || title.toLowerCase().startsWith(mGroup.toLowerCase()))
                                 displayList.add(item);
                                 jobsList.add(item);
                         }
diff --git a/vlc-android/src/org/videolan/vlc/media/MediaGroup.java b/vlc-android/src/org/videolan/vlc/media/MediaGroup.java
index c4d41df..7950bd6 100644
--- a/vlc-android/src/org/videolan/vlc/media/MediaGroup.java
+++ b/vlc-android/src/org/videolan/vlc/media/MediaGroup.java
@@ -20,6 +20,10 @@
 
 package org.videolan.vlc.media;
 
+import android.content.SharedPreferences;
+import android.preference.PreferenceManager;
+
+import org.videolan.vlc.VLCApplication;
 import org.videolan.vlc.gui.helpers.BitmapUtil;
 
 import java.util.ArrayList;
@@ -29,8 +33,6 @@ public class MediaGroup extends MediaWrapper {
 
     public final static String TAG = "VLC/MediaGroup";
 
-    public final static int MIN_GROUP_LENGTH = 6;
-
     private ArrayList<MediaWrapper> mMedias;
 
     public MediaGroup(MediaWrapper media) {
@@ -92,6 +94,8 @@ public class MediaGroup extends MediaWrapper {
     }
 
     private static void insertInto(ArrayList<MediaGroup> groups, MediaWrapper media) {
+        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(VLCApplication.getAppContext());
+        int minGroupLengthValue = Integer.valueOf(preferences.getString("video_min_group_length", "6"));
         for (MediaGroup mediaGroup : groups) {
             String group = mediaGroup.getTitle();
             String title = media.getTitle();
@@ -105,10 +109,11 @@ public class MediaGroup extends MediaWrapper {
             int commonLength = 0;
             String groupTitle = group.substring(groupOffset);
             int minLength = Math.min(groupTitle.length(), title.length());
-            while (commonLength < minLength && groupTitle.charAt(commonLength) == title.charAt(commonLength))
+            while (commonLength < minLength
+                    && groupTitle.toLowerCase().charAt(commonLength) == title.toLowerCase().charAt(commonLength))
                 ++commonLength;
 
-            if (commonLength >= MIN_GROUP_LENGTH) {
+            if (commonLength >= minGroupLengthValue && minGroupLengthValue != 0) {
                 if (commonLength == group.length()) {
                     // same prefix name, just add
                     mediaGroup.add(media);



More information about the Android mailing list