[Android] [PATCH] Avoid double entries for external devices

Geoffrey Métais geoffrey.metais at gmail.com
Tue Apr 14 13:55:20 CEST 2015


Get rid of the first occurence, because the second will be the mounptoint exposed in userland.
Fixes sdcard/usbdrive browsing in nVidia Shield tablet and LG G3.
---
 vlc-android/src/org/videolan/vlc/util/AndroidDevices.java |  9 ++++++---
 vlc-android/src/org/videolan/vlc/util/Strings.java        | 10 +++++++++-
 2 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/vlc-android/src/org/videolan/vlc/util/AndroidDevices.java b/vlc-android/src/org/videolan/vlc/util/AndroidDevices.java
index 003c2e0..bcdfa79 100644
--- a/vlc-android/src/org/videolan/vlc/util/AndroidDevices.java
+++ b/vlc-android/src/org/videolan/vlc/util/AndroidDevices.java
@@ -37,7 +37,6 @@ import android.annotation.TargetApi;
 import android.content.Context;
 import android.net.ConnectivityManager;
 import android.net.NetworkInfo;
-import android.os.Build;
 import android.os.Build.VERSION;
 import android.os.Build.VERSION_CODES;
 import android.os.Environment;
@@ -123,12 +122,16 @@ public class AndroidDevices {
                 String type = tokens.nextToken();
 
                 // skip if already in list or if type/mountpoint is blacklisted
-                if (list.contains(mountpoint) || typeBL.contains(type) || Strings.StartsWith(mountBL, mountpoint))
+                if (list.contains(mountpoint) || typeBL.contains(type) || Strings.startsWith(mountBL, mountpoint))
                     continue;
 
                 // check that device is in whitelist, and either type or mountpoint is in a whitelist
-                if (Strings.StartsWith(deviceWL, device) && (typeWL.contains(type) || Strings.StartsWith(mountWL, mountpoint)))
+                if (Strings.startsWith(deviceWL, device) && (typeWL.contains(type) || Strings.startsWith(mountWL, mountpoint))) {
+                    int position = Strings.containsName(list, Strings.getName(mountpoint));
+                    if (position > -1)
+                        list.remove(position);
                     list.add(mountpoint);
+                }
             }
         }
         catch (FileNotFoundException e) {}
diff --git a/vlc-android/src/org/videolan/vlc/util/Strings.java b/vlc-android/src/org/videolan/vlc/util/Strings.java
index f8460fd..ccee272 100644
--- a/vlc-android/src/org/videolan/vlc/util/Strings.java
+++ b/vlc-android/src/org/videolan/vlc/util/Strings.java
@@ -24,6 +24,7 @@ import org.videolan.vlc.MediaWrapper;
 
 import java.text.DecimalFormat;
 import java.text.NumberFormat;
+import java.util.List;
 import java.util.Locale;
 
 public class Strings {
@@ -35,13 +36,20 @@ public class Strings {
         return s;
     }
 
-    static boolean StartsWith(String[] array, String text) {
+    static boolean startsWith(String[] array, String text) {
         for (String item : array)
             if (text.startsWith(item))
                 return true;
         return false;
     }
 
+    static int containsName(List<String> array, String text) {
+        for (int i = array.size()-1 ; i >= 0 ; --i)
+            if (array.get(i).endsWith(text))
+                return i;
+        return -1;
+    }
+
     /**
      * Convert time to a string
      * @param millis e.g.time/length from file
-- 
2.1.0



More information about the Android mailing list