diff options
Diffstat (limited to 'src/android')
-rw-r--r-- | src/android/Context.cxx | 43 | ||||
-rw-r--r-- | src/android/Context.hxx | 35 | ||||
-rw-r--r-- | src/android/Environment.cxx | 85 | ||||
-rw-r--r-- | src/android/Environment.hxx | 43 |
4 files changed, 206 insertions, 0 deletions
diff --git a/src/android/Context.cxx b/src/android/Context.cxx new file mode 100644 index 000000000..f75e1503e --- /dev/null +++ b/src/android/Context.cxx @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2003-2014 The Music Player Daemon Project + * http://www.musicpd.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 of the License, 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 this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "config.h" +#include "Context.hxx" +#include "java/Class.hxx" +#include "java/File.hxx" +#include "fs/AllocatedPath.hxx" + +AllocatedPath +Context::GetCacheDir(JNIEnv *env) const +{ + assert(env != nullptr); + + Java::Class cls(env, env->GetObjectClass(Get())); + jmethodID method = env->GetMethodID(cls, "getCacheDir", + "()Ljava/io/File;"); + assert(method); + + jobject file = env->CallObjectMethod(Get(), method); + if (file == nullptr) { + env->ExceptionClear(); + return AllocatedPath::Null(); + } + + return Java::File::ToAbsolutePath(env, file); +} diff --git a/src/android/Context.hxx b/src/android/Context.hxx new file mode 100644 index 000000000..b8a47777d --- /dev/null +++ b/src/android/Context.hxx @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2003-2014 The Music Player Daemon Project + * http://www.musicpd.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 of the License, 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 this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef MPD_ANDROID_CONTEXT_HXX +#define MPD_ANDROID_CONTEXT_HXX + +#include "java/Object.hxx" + +class AllocatedPath; + +class Context : public Java::Object { +public: + Context(JNIEnv *env, jobject obj):Java::Object(env, obj) {} + + gcc_pure + AllocatedPath GetCacheDir(JNIEnv *env) const; +}; + +#endif diff --git a/src/android/Environment.cxx b/src/android/Environment.cxx new file mode 100644 index 000000000..9813b0b79 --- /dev/null +++ b/src/android/Environment.cxx @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2003-2014 The Music Player Daemon Project + * http://www.musicpd.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 of the License, 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 this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "config.h" +#include "Environment.hxx" +#include "java/Class.hxx" +#include "java/String.hxx" +#include "java/File.hxx" +#include "util/StringUtil.hxx" +#include "fs/AllocatedPath.hxx" + +namespace Environment { + static Java::TrivialClass cls; + static jmethodID getExternalStorageDirectory_method; + static jmethodID getExternalStoragePublicDirectory_method; +}; + +void +Environment::Initialise(JNIEnv *env) +{ + cls.Find(env, "android/os/Environment"); + + getExternalStorageDirectory_method = + env->GetStaticMethodID(cls, "getExternalStorageDirectory", + "()Ljava/io/File;"); + + getExternalStoragePublicDirectory_method = + env->GetStaticMethodID(cls, "getExternalStoragePublicDirectory", + "(Ljava/lang/String;)Ljava/io/File;"); +} + +void +Environment::Deinitialise(JNIEnv *env) +{ + cls.Clear(env); +} + +AllocatedPath +Environment::getExternalStorageDirectory() +{ + JNIEnv *env = Java::GetEnv(); + + jobject file = + env->CallStaticObjectMethod(cls, + getExternalStorageDirectory_method); + if (file == nullptr) + return AllocatedPath::Null(); + + return Java::File::ToAbsolutePath(env, file); +} + +AllocatedPath +Environment::getExternalStoragePublicDirectory(const char *type) +{ + if (getExternalStoragePublicDirectory_method == nullptr) + /* needs API level 8 */ + return AllocatedPath::Null(); + + JNIEnv *env = Java::GetEnv(); + + Java::String type2(env, type); + jobject file = env->CallStaticObjectMethod(Environment::cls, + Environment::getExternalStoragePublicDirectory_method, + type2.Get()); + if (file == nullptr) + return AllocatedPath::Null(); + + return Java::File::ToAbsolutePath(env, file); +} diff --git a/src/android/Environment.hxx b/src/android/Environment.hxx new file mode 100644 index 000000000..5a54ea361 --- /dev/null +++ b/src/android/Environment.hxx @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2003-2014 The Music Player Daemon Project + * http://www.musicpd.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 of the License, 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 this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef MPD_ANDROID_ENVIRONMENT_HXX +#define MPD_ANDROID_ENVIRONMENT_HXX + +#include "Compiler.h" + +#include <jni.h> + +class AllocatedPath; + +namespace Environment { + void Initialise(JNIEnv *env); + void Deinitialise(JNIEnv *env); + + /** + * Determine the mount point of the external SD card. + */ + gcc_pure + AllocatedPath getExternalStorageDirectory(); + + gcc_pure + AllocatedPath getExternalStoragePublicDirectory(const char *type); +}; + +#endif |