droid: add helper function for grabbing the target file from an intent
authorCory Fields <theuni-nospam-@xbmc.org>
Tue, 14 May 2013 04:22:04 +0000 (00:22 -0400)
committerCory Fields <theuni-nospam-@xbmc.org>
Fri, 7 Jun 2013 21:54:12 +0000 (17:54 -0400)
xbmc/android/activity/XBMCApp.cpp
xbmc/android/activity/XBMCApp.h

index a0b261b..c5a5130 100644 (file)
@@ -44,6 +44,8 @@
 #include "guilib/GUIWindowManager.h"
 #include "utils/log.h"
 #include "ApplicationMessenger.h"
+#include "utils/StringUtils.h"
+#include "AppParamParser.h"
 #include <android/bitmap.h>
 #include "android/jni/JNIThreading.h"
 #include "android/jni/BroadcastReceiver.h"
 #include "android/jni/BitmapDrawable.h"
 #include "android/jni/Bitmap.h"
 #include "android/jni/CharSequence.h"
+#include "android/jni/URI.h"
+#include "android/jni/Cursor.h"
+#include "android/jni/ContentResolver.h"
+#include "android/jni/MediaStore.h"
 
 #define GIGABYTES       1073741824
 
@@ -536,3 +542,32 @@ void CXBMCApp::SetupEnv()
   else
     setenv("HOME", getenv("XBMC_TEMP"), 0);
 }
+
+std::string CXBMCApp::GetFilenameFromIntent(const CJNIIntent &intent)
+{
+    std::string ret;
+    if (!intent)
+      return ret;
+    CJNIURI data = intent.getData();
+    if (!data)
+      return ret;
+    std::string scheme = data.getScheme();
+    StringUtils::ToLower(scheme);
+    if (scheme == "content")
+    {
+      std::vector<std::string> filePathColumn;
+      filePathColumn.push_back(CJNIMediaStoreMediaColumns::DATA);
+      CJNICursor cursor = getContentResolver().query(data, filePathColumn, std::string(), std::vector<std::string>(), std::string());
+      if(cursor.moveToFirst())
+      {
+        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
+        ret = cursor.getString(columnIndex);
+      }
+      cursor.close();
+    }
+    else if(scheme == "file")
+      ret = data.getPath();
+    else
+      ret = data.toString();
+  return ret;
+}
index 5c6bed7..d30baba 100644 (file)
@@ -108,6 +108,7 @@ protected:
 private:
   static bool HasLaunchIntent(const std::string &package);
   bool getWakeLock();
+  std::string GetFilenameFromIntent(const CJNIIntent &intent);
   void run();
   void stop();
   void SetupEnv();