1 /* 2 * Copyright (C) 2019 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #define LOG_TAG "dataloader-jni" 18 19 #include "core_jni_helpers.h" 20 #include "dataloader_ndk.h" 21 22 namespace android { 23 namespace { 24 25 static jboolean nativeCreateDataLoader(JNIEnv* env, 26 jobject thiz, 27 jint storageId, 28 jobject control, 29 jobject params, 30 jobject callback) { 31 return DataLoaderService_OnCreate(env, thiz, 32 storageId, control, params, callback); 33 } 34 35 static jboolean nativeStartDataLoader(JNIEnv* env, 36 jobject thiz, 37 jint storageId) { 38 return DataLoaderService_OnStart(env, storageId); 39 } 40 41 static jboolean nativeStopDataLoader(JNIEnv* env, 42 jobject thiz, 43 jint storageId) { 44 return DataLoaderService_OnStop(env, storageId); 45 } 46 47 static jboolean nativeDestroyDataLoader(JNIEnv* env, 48 jobject thiz, 49 jint storageId) { 50 return DataLoaderService_OnDestroy(env, storageId); 51 } 52 53 static jboolean nativePrepareImage(JNIEnv* env, jobject thiz, jint storageId, 54 jobjectArray addedFiles, jobjectArray removedFiles) { 55 return DataLoaderService_OnPrepareImage(env, storageId, addedFiles, removedFiles); 56 } 57 58 static void nativeWriteData(JNIEnv* env, 59 jobject clazz, 60 jlong self, 61 jstring name, 62 jlong offsetBytes, 63 jlong lengthBytes, 64 jobject incomingFd) { 65 auto connector = (DataLoaderFilesystemConnectorPtr)self; 66 return DataLoader_FilesystemConnector_writeData(connector, name, offsetBytes, lengthBytes, incomingFd); 67 } 68 69 static const JNINativeMethod dlc_method_table[] = { 70 {"nativeCreateDataLoader", 71 "(ILandroid/content/pm/FileSystemControlParcel;" 72 "Landroid/content/pm/DataLoaderParamsParcel;" 73 "Landroid/content/pm/IDataLoaderStatusListener;)Z", 74 (void*)nativeCreateDataLoader}, 75 {"nativeStartDataLoader", "(I)Z", (void*)nativeStartDataLoader}, 76 {"nativeStopDataLoader", "(I)Z", (void*)nativeStopDataLoader}, 77 {"nativeDestroyDataLoader", "(I)Z", (void*)nativeDestroyDataLoader}, 78 {"nativePrepareImage", 79 "(I[Landroid/content/pm/InstallationFileParcel;[Ljava/lang/String;)Z", 80 (void*)nativePrepareImage}, 81 {"nativeWriteData", "(JLjava/lang/String;JJLandroid/os/ParcelFileDescriptor;)V", 82 (void*)nativeWriteData}, 83 }; 84 85 } // namespace 86 87 int register_android_service_DataLoaderService(JNIEnv* env) { 88 return jniRegisterNativeMethods(env, 89 "android/service/dataloader/DataLoaderService", 90 dlc_method_table, NELEM(dlc_method_table)); 91 } 92 93 } // namespace android 94