intents: add the very beginnings of an intents class
authorCory Fields <theuni-nospam-@xbmc.org>
Fri, 22 Feb 2013 04:43:08 +0000 (23:43 -0500)
committerCory Fields <theuni-nospam-@xbmc.org>
Fri, 1 Mar 2013 08:14:25 +0000 (03:14 -0500)
Implemented as a singleton, this will eventually have functions for setting up
receivers, callbacks, etc. Also, our broadcasting can move into here, to clean
up some of the mess in XBMCApp.

xbmc/android/activity/Intents.cpp [new file with mode: 0644]
xbmc/android/activity/Intents.h [new file with mode: 0644]
xbmc/android/activity/Makefile.in
xbmc/android/activity/XBMCApp.h

diff --git a/xbmc/android/activity/Intents.cpp b/xbmc/android/activity/Intents.cpp
new file mode 100644 (file)
index 0000000..d4623ed
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+#include "Intents.h"
+#include "utils/log.h"
+#include "XBMCApp.h"
+
+CAndroidIntents::CAndroidIntents()
+{
+}
+
+void CAndroidIntents::ReceiveIntent(JNIEnv *env, const jobject &intent)
+{
+  std::string action = GetIntentAction(intent);
+  CLog::Log(LOGDEBUG,"CAndroidIntents::ReceiveIntent: %s", action.c_str());
+}
+
+std::string CAndroidIntents::GetIntentAction(const jobject &intent)
+{
+  std::string action;
+  JNIEnv *env;
+
+ if (!intent)
+    return "";
+
+  CXBMCApp::AttachCurrentThread(&env, NULL);
+  jclass cIntent = env->GetObjectClass(intent);
+
+  //action = intent.getAction()
+  jmethodID mgetAction = env->GetMethodID(cIntent, "getAction", "()Ljava/lang/String;");
+  env->DeleteLocalRef(cIntent);
+  jstring sAction = (jstring)env->CallObjectMethod(intent, mgetAction);
+  const char *nativeString = env->GetStringUTFChars(sAction, 0);
+  action = std::string(nativeString);
+
+  env->ReleaseStringUTFChars(sAction, nativeString);
+  CXBMCApp::DetachCurrentThread();
+  return action;
+}
diff --git a/xbmc/android/activity/Intents.h b/xbmc/android/activity/Intents.h
new file mode 100644 (file)
index 0000000..381c6eb
--- /dev/null
@@ -0,0 +1,35 @@
+#pragma once
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+#include <string>
+#include <jni.h>
+
+class CAndroidIntents
+{
+public:
+  void ReceiveIntent(JNIEnv *env, const jobject &intent);
+  static CAndroidIntents& getInstance() {static CAndroidIntents temp; return temp;};
+
+private:
+  CAndroidIntents();
+  CAndroidIntents(CAndroidIntents const&);
+  void operator=(CAndroidIntents const&);
+  std::string GetIntentAction(const jobject &intent);
+};
index 1314505..3a4d217 100644 (file)
@@ -17,6 +17,7 @@ SRCS      += GraphicBuffer.cpp
 SRCS      += EventLoop.cpp
 SRCS      += XBMCApp.cpp
 SRCS      += JNI.cpp
+SRCS      += Intents.cpp
 
 OBJS      += $(APP_GLUE) $(CPU_OBJ)
 
index 5a56152..f51709d 100644 (file)
@@ -104,6 +104,7 @@ protected:
   friend class CAESinkAUDIOTRACK;
   friend class CAndroidFeatures;
   friend class CFileAndroidApp;
+  friend class CAndroidIntents;
 
   static int AttachCurrentThread(JNIEnv** p_env, void* thr_args = NULL);
   static int DetachCurrentThread();