[PVR][Estuary] Timer settings dialog: Show client name in timer type selection dialog...
[xbmc.git] / xbmc / platform / android / activity / JNIXBMCFile.cpp
blob0619490932669c655291fb7c12d1bed796ce40dc
1 /*
2 * Copyright (C) 2018 Christian Browet
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
9 #include "JNIXBMCFile.h"
11 #include "CompileInfo.h"
12 #include "utils/FileUtils.h"
13 #include "utils/log.h"
15 #include <androidjni/jutils-details.hpp>
17 #define BUFFSIZE 8192
19 using namespace jni;
21 static std::string s_className = std::string(CCompileInfo::GetClass()) + "/XBMCFile";
23 CJNIXBMCFile::CJNIXBMCFile()
24 : CJNIBase()
28 void CJNIXBMCFile::RegisterNatives(JNIEnv *env)
30 jclass cClass = env->FindClass(s_className.c_str());
31 if(cClass)
33 JNINativeMethod methods[] =
35 {"_open", "(Ljava/lang/String;)Z", (void*)&CJNIXBMCFile::_open},
36 {"_close", "()V", (void*)&CJNIXBMCFile::_close},
37 {"_read", "()[B", (void*)&CJNIXBMCFile::_read},
38 {"_eof", "()Z", (void*)&CJNIXBMCFile::_eof},
41 env->RegisterNatives(cClass, methods, sizeof(methods)/sizeof(methods[0]));
45 jboolean CJNIXBMCFile::_open(JNIEnv *env, jobject thiz, jstring path)
47 std::string strPath = jcast<std::string>(jhstring::fromJNI(path));
49 if (find_instance(thiz))
50 return false;
52 if (!XFILE::CFile::Exists(strPath))
53 return false;
55 CJNIXBMCFile* file = new CJNIXBMCFile();
56 file->m_file.reset(new XFILE::CFile());
57 bool ret = file->m_file->Open(strPath);
58 if (!ret)
60 delete file;
61 return false;
64 jhobject jo = jhobject::fromJNI(thiz);
65 jo.setGlobal();
66 add_instance(jo, file);
67 file->m_eof = false;
68 return true;
71 void CJNIXBMCFile::_close(JNIEnv *env, jobject thiz)
73 CJNIXBMCFile *inst = find_instance(thiz);
74 if (inst)
76 inst->m_file->Close();
77 remove_instance(inst);
78 delete inst;
82 jbyteArray CJNIXBMCFile::_read(JNIEnv *env, jobject thiz)
84 ssize_t sz = 0;
85 char buffer[BUFFSIZE];
87 CJNIXBMCFile *inst = find_instance(thiz);
88 if (inst && inst->m_file)
90 sz = inst->m_file->Read((void*)buffer, BUFFSIZE);
91 if (sz <= 0)
93 inst->m_eof = true;
94 sz = 0;
98 jbyteArray jba = NULL;
99 char* pArray;
100 jba = env->NewByteArray(sz);
101 if ((pArray = (char*)env->GetPrimitiveArrayCritical(jba, NULL)))
103 memcpy(pArray, buffer, sz);
104 env->ReleasePrimitiveArrayCritical(jba, pArray, 0);
107 return jba;
110 jboolean CJNIXBMCFile::_eof(JNIEnv *env, jobject thiz)
112 CJNIXBMCFile *inst = find_instance(thiz);
113 if (inst)
114 return inst->m_eof;
116 return true;