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 #pragma once
18 
19 #include <binder/BinderService.h>
20 #include <binder/IServiceManager.h>
21 #include <binder/PersistableBundle.h>
22 #include <jni.h>
23 
24 #include "IncrementalService.h"
25 #include "android/os/incremental/BnIncrementalService.h"
26 #include "incremental_service.h"
27 
28 namespace android::os::incremental {
29 
30 class BinderIncrementalService : public BnIncrementalService,
31                                  public BinderService<BinderIncrementalService> {
32 public:
33     BinderIncrementalService(const sp<IServiceManager>& sm, JNIEnv* env);
34 
35     static BinderIncrementalService* start(JNIEnv* env);
getServiceName()36     static const char16_t* getServiceName() { return u"incremental"; }
37     status_t dump(int fd, const Vector<String16>& args) final;
38 
39     void onSystemReady();
40     void onInvalidStorage(int mountId);
41 
42     binder::Status openStorage(const std::string& path, int32_t* _aidl_return) final;
43     binder::Status createStorage(const ::std::string& path,
44                                  const ::android::content::pm::DataLoaderParamsParcel& params,
45                                  int32_t createMode, int32_t* _aidl_return) final;
46     binder::Status createLinkedStorage(const std::string& path, int32_t otherStorageId,
47                                        int32_t createMode, int32_t* _aidl_return) final;
48     binder::Status startLoading(
49             int32_t storageId, const ::android::content::pm::DataLoaderParamsParcel& params,
50             const ::android::sp<::android::content::pm::IDataLoaderStatusListener>& statusListener,
51             const ::android::os::incremental::StorageHealthCheckParams& healthCheckParams,
52             const ::android::sp<IStorageHealthListener>& healthListener,
53             const ::std::vector<::android::os::incremental::PerUidReadTimeouts>& perUidReadTimeouts,
54             bool* _aidl_return) final;
55     binder::Status onInstallationComplete(int32_t storageId) final;
56 
57     binder::Status makeBindMount(int32_t storageId, const std::string& sourcePath,
58                                  const std::string& targetFullPath, int32_t bindType,
59                                  int32_t* _aidl_return) final;
60     binder::Status deleteBindMount(int32_t storageId, const std::string& targetFullPath,
61                                    int32_t* _aidl_return) final;
62     binder::Status makeDirectory(int32_t storageId, const std::string& path,
63                                  int32_t* _aidl_return) final;
64     binder::Status makeDirectories(int32_t storageId, const std::string& path,
65                                    int32_t* _aidl_return) final;
66     binder::Status makeFile(int32_t storageId, const std::string& path, int32_t mode,
67                             const IncrementalNewFileParams& params,
68                             const ::std::optional<::std::vector<uint8_t>>& content,
69                             int32_t* _aidl_return) final;
70     binder::Status makeFileFromRange(int32_t storageId, const std::string& targetPath,
71                                      const std::string& sourcePath, int64_t start, int64_t end,
72                                      int32_t* _aidl_return) final;
73     binder::Status makeLink(int32_t sourceStorageId, const std::string& sourcePath,
74                             int32_t destStorageId, const std::string& destPath,
75                             int32_t* _aidl_return) final;
76     binder::Status unlink(int32_t storageId, const std::string& path, int32_t* _aidl_return) final;
77     binder::Status isFileFullyLoaded(int32_t storageId, const std::string& path,
78                                      int32_t* _aidl_return) final;
79     binder::Status isFullyLoaded(int32_t storageId, int32_t* _aidl_return) final;
80     binder::Status getLoadingProgress(int32_t storageId, float* _aidl_return) final;
81     binder::Status getMetadataByPath(int32_t storageId, const std::string& path,
82                                      std::vector<uint8_t>* _aidl_return) final;
83     binder::Status getMetadataById(int32_t storageId, const std::vector<uint8_t>& id,
84                                    std::vector<uint8_t>* _aidl_return) final;
85     binder::Status deleteStorage(int32_t storageId) final;
86     binder::Status disallowReadLogs(int32_t storageId) final;
87     binder::Status configureNativeBinaries(int32_t storageId, const std::string& apkFullPath,
88                                            const std::string& libDirRelativePath,
89                                            const std::string& abi, bool extractNativeLibs,
90                                            bool* _aidl_return) final;
91     binder::Status waitForNativeBinariesExtraction(int storageId, bool* _aidl_return) final;
92     binder::Status registerLoadingProgressListener(
93             int32_t storageId,
94             const ::android::sp<::android::os::incremental::IStorageLoadingProgressListener>&
95                     progressListener,
96             bool* _aidl_return) final;
97     binder::Status unregisterLoadingProgressListener(int32_t storageId, bool* _aidl_return) final;
98     binder::Status getMetrics(int32_t storageId,
99                               android::os::PersistableBundle* _aidl_return) final;
100 
101 private:
102     android::incremental::IncrementalService mImpl;
103 };
104 
105 } // namespace android::os::incremental
106