[Android] Setup ML in one place and only when launching UI

Geoffrey Métais git at videolan.org
Fri Dec 23 11:44:28 CET 2016


vlc-android | branch: master | Geoffrey Métais <geoffrey.metais at gmail.com> | Fri Dec 23 11:12:29 2016 +0100| [58eb1d717c0d41c73442f2537e273341ec3bfab8] | committer: Geoffrey Métais

Setup ML in one place and only when launching UI

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

 .../src/org/videolan/medialibrary/Medialibrary.java     | 17 ++++++++---------
 vlc-android/src/org/videolan/vlc/StartActivity.java     | 15 +++++++++++----
 vlc-android/src/org/videolan/vlc/VLCApplication.java    |  9 +++------
 vlc-android/src/org/videolan/vlc/gui/MainActivity.java  |  2 +-
 .../src/org/videolan/vlc/gui/tv/MainTvActivity.java     |  2 +-
 5 files changed, 24 insertions(+), 21 deletions(-)

diff --git a/medialibrary/src/org/videolan/medialibrary/Medialibrary.java b/medialibrary/src/org/videolan/medialibrary/Medialibrary.java
index 82a1f7a..4ca53ec 100644
--- a/medialibrary/src/org/videolan/medialibrary/Medialibrary.java
+++ b/medialibrary/src/org/videolan/medialibrary/Medialibrary.java
@@ -76,12 +76,6 @@ public class Medialibrary {
         System.loadLibrary("mla");
     }
 
-    private Medialibrary(Context context) {
-        context = context instanceof Application ? context : context.getApplicationContext();
-        if (canReadStorage(context))
-            init(context);
-    }
-
     public void init(Context context) {
         nativeInit(context.getCacheDir()+"/vlc_media.db", context.getExternalFilesDir(null).getAbsolutePath()+"/thumbs");
         mIsInitiated = true;
@@ -95,6 +89,7 @@ public class Medialibrary {
     public String[] getDevices() {
         return nativeDevices();
     }
+
     public void addDevice(String uuid, String path, boolean removable) {
         nativeAddDevice(uuid, path, removable);
         for (String folder : banList)
@@ -119,14 +114,14 @@ public class Medialibrary {
 
     @Override
     protected void finalize() throws Throwable {
-        super.finalize();
         if (mIsInitiated)
             nativeRelease();
+        super.finalize();
     }
 
-    public static synchronized Medialibrary getInstance(Context context) {
+    public static synchronized Medialibrary getInstance() {
         if (sInstance == null)
-            sInstance = new Medialibrary(context);
+            sInstance = new Medialibrary();
         return sInstance;
     }
 
@@ -230,6 +225,10 @@ public class Medialibrary {
         return !mIsInitiated || nativeIsWorking();
     }
 
+    public boolean isInitiated() {
+        return mIsInitiated;
+    }
+
     public boolean increasePlayCount(long mediaId) {
         return mIsInitiated && mediaId > 0 && nativeIncreasePlayCount(mediaId);
     }
diff --git a/vlc-android/src/org/videolan/vlc/StartActivity.java b/vlc-android/src/org/videolan/vlc/StartActivity.java
index f6ab079..bf4846d 100644
--- a/vlc-android/src/org/videolan/vlc/StartActivity.java
+++ b/vlc-android/src/org/videolan/vlc/StartActivity.java
@@ -42,6 +42,7 @@ import org.videolan.vlc.gui.tv.audioplayer.AudioPlayerActivity;
 import org.videolan.vlc.gui.video.VideoPlayerActivity;
 import org.videolan.vlc.media.MediaUtils;
 import org.videolan.vlc.util.AndroidDevices;
+import org.videolan.vlc.util.Permissions;
 import org.videolan.vlc.util.Util;
 
 import java.io.FileNotFoundException;
@@ -49,6 +50,8 @@ import java.io.FileOutputStream;
 import java.io.InputStream;
 import java.io.OutputStream;
 
+import static org.videolan.vlc.VLCApplication.getMLInstance;
+
 public class StartActivity extends Activity {
 
     public final static String TAG = "VLC/StartActivity";
@@ -63,10 +66,14 @@ public class StartActivity extends Activity {
                 startActivity(intent.setClass(this, VideoPlayerActivity.class));
             else
                 MediaUtils.openMediaNoUi(intent.getData());
-        } else if (intent != null && TextUtils.equals(intent.getAction(), AudioPlayerContainerActivity.ACTION_SHOW_PLAYER)) {
-            startActivity(new Intent(this, showTvUi() ? AudioPlayerActivity.class : MainActivity.class));
-        } else
-            startActivity(new Intent(this, showTvUi() ? MainTvActivity.class : MainActivity.class));
+        } else {
+            if (intent != null && TextUtils.equals(intent.getAction(), AudioPlayerContainerActivity.ACTION_SHOW_PLAYER))
+                startActivity(new Intent(this, showTvUi() ? AudioPlayerActivity.class : MainActivity.class));
+            else
+                startActivity(new Intent(this, showTvUi() ? MainTvActivity.class : MainActivity.class));
+            if (!getMLInstance().isInitiated() && Permissions.canReadStorage())
+                VLCApplication.setupMedialibrary(getMLInstance());
+        }
         finish();
     }
 
diff --git a/vlc-android/src/org/videolan/vlc/VLCApplication.java b/vlc-android/src/org/videolan/vlc/VLCApplication.java
index f7f2b30..d9fa2df 100644
--- a/vlc-android/src/org/videolan/vlc/VLCApplication.java
+++ b/vlc-android/src/org/videolan/vlc/VLCApplication.java
@@ -40,7 +40,6 @@ import org.videolan.vlc.gui.dialogs.VlcProgressDialog;
 import org.videolan.vlc.gui.helpers.AudioUtil;
 import org.videolan.vlc.gui.helpers.BitmapCache;
 import org.videolan.vlc.util.AndroidDevices;
-import org.videolan.vlc.util.Permissions;
 import org.videolan.vlc.util.Strings;
 import org.videolan.vlc.util.VLCInstance;
 
@@ -127,9 +126,6 @@ public class VLCApplication extends Application {
         // Disable remote control receiver on Fire TV.
         if (!AndroidDevices.hasTsp())
             AndroidDevices.setRemoteControlReceiverEnabled(false);
-
-        if (Permissions.canReadStorage())
-            discoverStorages(getMLInstance());
     }
 
     /**
@@ -231,10 +227,11 @@ public class VLCApplication extends Application {
     }
 
     public static synchronized Medialibrary getMLInstance() {
-        return Medialibrary.getInstance(instance);
+        return Medialibrary.getInstance();
     }
 
-    public void discoverStorages(final Medialibrary ml) {
+    public static void setupMedialibrary(final Medialibrary ml) {
+        ml.init(getAppContext());
         for (String storage : AndroidDevices.getMediaDirectories())
             ml.addDevice(storage, storage, TextUtils.equals(storage, AndroidDevices.EXTERNAL_PUBLIC_DIRECTORY));
         if (ml.getFoldersList().length == 0) {
diff --git a/vlc-android/src/org/videolan/vlc/gui/MainActivity.java b/vlc-android/src/org/videolan/vlc/gui/MainActivity.java
index 6d3f645..6523ed2 100644
--- a/vlc-android/src/org/videolan/vlc/gui/MainActivity.java
+++ b/vlc-android/src/org/videolan/vlc/gui/MainActivity.java
@@ -254,7 +254,7 @@ public class MainActivity extends AudioPlayerContainerActivity implements Device
                 if (grantResults.length > 0
                         && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                     mMediaLibrary.init(this);
-                    ((VLCApplication) VLCApplication.getAppContext()).discoverStorages(mMediaLibrary);
+                    ((VLCApplication) VLCApplication.getAppContext()).setupMedialibrary(mMediaLibrary);
                 } else
                     Permissions.showStoragePermissionDialog(this, false);
                 break;
diff --git a/vlc-android/src/org/videolan/vlc/gui/tv/MainTvActivity.java b/vlc-android/src/org/videolan/vlc/gui/tv/MainTvActivity.java
index 7e58afc..37a6aca 100644
--- a/vlc-android/src/org/videolan/vlc/gui/tv/MainTvActivity.java
+++ b/vlc-android/src/org/videolan/vlc/gui/tv/MainTvActivity.java
@@ -227,7 +227,7 @@ public class MainTvActivity extends BaseTvActivity implements OnItemViewSelected
                 if (grantResults.length > 0
                         && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                     mMediaLibrary.init(this);
-                    ((VLCApplication) VLCApplication.getAppContext()).discoverStorages(mMediaLibrary);
+                    ((VLCApplication) VLCApplication.getAppContext()).setupMedialibrary(mMediaLibrary);
                 } else {
                     Permissions.showStoragePermissionDialog(this, false);
                 }



More information about the Android mailing list