binder_service_brillo.h revision 4b0d6032cbb86ce488c03b31936cda31283f97e3
1//
2// Copyright (C) 2016 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#ifndef UPDATE_ENGINE_BINDER_SERVICE_BRILLO_H_
18#define UPDATE_ENGINE_BINDER_SERVICE_BRILLO_H_
19
20#include <utils/Errors.h>
21
22#include <memory>
23#include <string>
24#include <vector>
25
26#include <utils/RefBase.h>
27
28#include "update_engine/common_service.h"
29#include "update_engine/parcelable_update_engine_status.h"
30#include "update_engine/service_observer_interface.h"
31
32#include "android/brillo/BnUpdateEngine.h"
33#include "android/brillo/IUpdateEngineStatusCallback.h"
34
35namespace chromeos_update_engine {
36
37class BinderUpdateEngineBrilloService : public android::brillo::BnUpdateEngine,
38                                        public ServiceObserverInterface {
39 public:
40  explicit BinderUpdateEngineBrilloService(SystemState* system_state)
41      : common_(new UpdateEngineService(system_state)) {}
42  virtual ~BinderUpdateEngineBrilloService() = default;
43
44  const char* ServiceName() const {
45    return "android.brillo.UpdateEngineService";
46  }
47
48  // ServiceObserverInterface overrides.
49  void SendStatusUpdate(int64_t last_checked_time,
50                        double progress,
51                        update_engine::UpdateStatus status,
52                        const std::string& new_version,
53                        int64_t new_size) override;
54  void SendPayloadApplicationComplete(ErrorCode error_code) override {}
55
56  // android::brillo::BnUpdateEngine overrides.
57  android::binder::Status AttemptUpdate(const android::String16& app_version,
58                                        const android::String16& omaha_url,
59                                        int flags) override;
60  android::binder::Status AttemptRollback(bool powerwash) override;
61  android::binder::Status CanRollback(bool* out_can_rollback) override;
62  android::binder::Status ResetStatus() override;
63  android::binder::Status GetStatus(
64      android::brillo::ParcelableUpdateEngineStatus* status);
65  android::binder::Status RebootIfNeeded() override;
66  android::binder::Status SetChannel(const android::String16& target_channel,
67                                     bool powerwash) override;
68  android::binder::Status GetChannel(bool get_current_channel,
69                                     android::String16* out_channel) override;
70  android::binder::Status SetCohortHint(
71      const android::String16& cohort_hint) override;
72  android::binder::Status GetCohortHint(
73      android::String16* out_cohort_hint) override;
74  android::binder::Status SetP2PUpdatePermission(bool enabled) override;
75  android::binder::Status GetP2PUpdatePermission(
76      bool* out_p2p_permission) override;
77  android::binder::Status SetUpdateOverCellularPermission(
78      bool enabled) override;
79  android::binder::Status SetUpdateOverCellularTarget(
80      const android::String16& target_version,
81      int64_t target_size) override;
82  android::binder::Status GetUpdateOverCellularPermission(
83      bool* out_cellular_permission) override;
84  android::binder::Status GetDurationSinceUpdate(
85      int64_t* out_duration) override;
86  android::binder::Status GetPrevVersion(
87      android::String16* out_prev_version) override;
88  android::binder::Status GetRollbackPartition(
89      android::String16* out_rollback_partition) override;
90  android::binder::Status RegisterStatusCallback(
91      const android::sp<android::brillo::IUpdateEngineStatusCallback>& callback)
92      override;
93  android::binder::Status GetLastAttemptError(
94      int* out_last_attempt_error) override;
95  android::binder::Status GetEolStatus(int* out_eol_status) override;
96
97 private:
98  // Generic function for dispatching to the common service.
99  template <typename... Parameters, typename... Arguments>
100  android::binder::Status CallCommonHandler(
101      bool (UpdateEngineService::*Handler)(brillo::ErrorPtr*, Parameters...),
102      Arguments... arguments);
103
104  // To be used as a death notification handler only.
105  void UnregisterStatusCallback(
106      android::brillo::IUpdateEngineStatusCallback* callback);
107
108  std::unique_ptr<UpdateEngineService> common_;
109
110  std::vector<android::sp<android::brillo::IUpdateEngineStatusCallback>>
111      callbacks_;
112};
113
114}  // namespace chromeos_update_engine
115
116#endif  // UPDATE_ENGINE_BINDER_SERVICE_BRILLO_H_
117