1 /*
2 * Copyright (c) 2023-2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "i18n_hilog.h"
17 #include "i18n_service_ability_load_manager.h"
18 #include "iremote_object.h"
19 #include "system_ability_definition.h"
20 #include "i18n_service_ability_client.h"
21
22 namespace OHOS {
23 namespace Global {
24 namespace I18n {
GetProxy(I18nErrorCode & err)25 sptr<II18nServiceAbility> I18nServiceAbilityClient::GetProxy(I18nErrorCode &err)
26 {
27 sptr<IRemoteObject> proxy = I18nServiceAbilityLoadManager::GetInstance()->GetI18nServiceAbility(I18N_SA_ID);
28 if (proxy == nullptr) {
29 HILOG_ERROR_I18N("I18nServiceAbilityClient::GetProxy load sa failed, try again.");
30 proxy = I18nServiceAbilityLoadManager::GetInstance()->GetI18nServiceAbility(I18N_SA_ID);
31 }
32 if (proxy == nullptr) {
33 HILOG_ERROR_I18N("I18nServiceAbilityClient::GetProxy load sa failed.");
34 err = I18nErrorCode::LOAD_SA_FAILED;
35 return nullptr;
36 }
37 return iface_cast<II18nServiceAbility>(proxy);
38 }
39
SetSystemLanguage(const std::string & language)40 I18nErrorCode I18nServiceAbilityClient::SetSystemLanguage(const std::string &language)
41 {
42 I18nErrorCode err = I18nErrorCode::SUCCESS;
43 sptr<II18nServiceAbility> i18nServiceAbilityObj = GetProxy(err);
44 if (i18nServiceAbilityObj == nullptr) {
45 HILOG_ERROR_I18N("I18nServiceAbilityClient::SetSystemLanguage: Get proxy failed.");
46 return err;
47 }
48 int32_t code = 0;
49 ErrCode errCode = i18nServiceAbilityObj->SetSystemLanguage(language, code);
50 if (errCode != ERR_OK) {
51 HILOG_ERROR_I18N("I18nServiceAbilityClient::SetSystemLanguage: Set language failed, errCode is %{public}d.",
52 static_cast<int32_t>(errCode));
53 return I18nErrorCode::FAILED;
54 }
55 return static_cast<I18nErrorCode>(code);
56 }
57
SetSystemRegion(const std::string & region)58 I18nErrorCode I18nServiceAbilityClient::SetSystemRegion(const std::string ®ion)
59 {
60 I18nErrorCode err = I18nErrorCode::SUCCESS;
61 sptr<II18nServiceAbility> i18nServiceAbilityObj = GetProxy(err);
62 if (i18nServiceAbilityObj == nullptr) {
63 HILOG_ERROR_I18N("I18nServiceAbilityClient::SetSystemRegion: Get proxy failed.");
64 return err;
65 }
66 int32_t code = 0;
67 ErrCode errCode = i18nServiceAbilityObj->SetSystemRegion(region, code);
68 if (errCode != ERR_OK) {
69 HILOG_ERROR_I18N("I18nServiceAbilityClient::SetSystemRegion: Set region failed, errCode is %{public}d.",
70 static_cast<int32_t>(errCode));
71 return I18nErrorCode::FAILED;
72 }
73 return static_cast<I18nErrorCode>(code);
74 }
75
SetSystemLocale(const std::string & locale)76 I18nErrorCode I18nServiceAbilityClient::SetSystemLocale(const std::string &locale)
77 {
78 I18nErrorCode err = I18nErrorCode::SUCCESS;
79 sptr<II18nServiceAbility> i18nServiceAbilityObj = GetProxy(err);
80 if (i18nServiceAbilityObj == nullptr) {
81 HILOG_ERROR_I18N("I18nServiceAbilityClient::SetSystemLocale: Get proxy failed.");
82 return err;
83 }
84 int32_t code = 0;
85 ErrCode errCode = i18nServiceAbilityObj->SetSystemLocale(locale, code);
86 if (errCode != ERR_OK) {
87 HILOG_ERROR_I18N("I18nServiceAbilityClient::SetSystemLocale: Set locale failed, errCode is %{public}d.",
88 static_cast<int32_t>(errCode));
89 return I18nErrorCode::FAILED;
90 }
91 return static_cast<I18nErrorCode>(code);
92 }
93
Set24HourClock(const std::string & flag)94 I18nErrorCode I18nServiceAbilityClient::Set24HourClock(const std::string &flag)
95 {
96 I18nErrorCode err = I18nErrorCode::SUCCESS;
97 sptr<II18nServiceAbility> i18nServiceAbilityObj = GetProxy(err);
98 if (i18nServiceAbilityObj == nullptr) {
99 HILOG_ERROR_I18N("I18nServiceAbilityClient::Set24HourClock: Get proxy failed.");
100 return err;
101 }
102 int32_t code = 0;
103 ErrCode errCode = i18nServiceAbilityObj->Set24HourClock(flag, code);
104 if (errCode != ERR_OK) {
105 HILOG_ERROR_I18N("I18nServiceAbilityClient::Set24HourClock: Set 24HourClock failed, errCode is %{public}d.",
106 static_cast<int32_t>(errCode));
107 return I18nErrorCode::FAILED;
108 }
109 return static_cast<I18nErrorCode>(code);
110 }
111
SetUsingLocalDigit(bool flag)112 I18nErrorCode I18nServiceAbilityClient::SetUsingLocalDigit(bool flag)
113 {
114 I18nErrorCode err = I18nErrorCode::SUCCESS;
115 sptr<II18nServiceAbility> i18nServiceAbilityObj = GetProxy(err);
116 if (i18nServiceAbilityObj == nullptr) {
117 HILOG_ERROR_I18N("I18nServiceAbilityClient::SetUsingLocalDigit: Get proxy failed.");
118 return err;
119 }
120 int32_t code = 0;
121 ErrCode errCode = i18nServiceAbilityObj->SetUsingLocalDigit(flag, code);
122 if (errCode != ERR_OK) {
123 HILOG_ERROR_I18N("I18nServiceAbilityClient::SetUsingLocalDigit: Set local digit failed, "
124 "errCode is %{public}d.", static_cast<int32_t>(errCode));
125 return I18nErrorCode::FAILED;
126 }
127 return static_cast<I18nErrorCode>(code);
128 }
129
AddPreferredLanguage(const std::string & language,int32_t index)130 I18nErrorCode I18nServiceAbilityClient::AddPreferredLanguage(const std::string &language, int32_t index)
131 {
132 I18nErrorCode err = I18nErrorCode::SUCCESS;
133 sptr<II18nServiceAbility> i18nServiceAbilityObj = GetProxy(err);
134 if (i18nServiceAbilityObj == nullptr) {
135 HILOG_ERROR_I18N("I18nServiceAbilityClient::AddPreferredLanguage: Get proxy failed.");
136 return err;
137 }
138 int32_t code = 0;
139 ErrCode errCode = i18nServiceAbilityObj->AddPreferredLanguage(language, index, code);
140 if (errCode != ERR_OK) {
141 HILOG_ERROR_I18N("I18nServiceAbilityClient::AddPreferredLanguage: Add preferred language failed, "
142 "errCode is %{public}d.", static_cast<int32_t>(errCode));
143 return I18nErrorCode::FAILED;
144 }
145 return static_cast<I18nErrorCode>(code);
146 }
147
RemovePreferredLanguage(int32_t index)148 I18nErrorCode I18nServiceAbilityClient::RemovePreferredLanguage(int32_t index)
149 {
150 I18nErrorCode err = I18nErrorCode::SUCCESS;
151 sptr<II18nServiceAbility> i18nServiceAbilityObj = GetProxy(err);
152 if (i18nServiceAbilityObj == nullptr) {
153 HILOG_ERROR_I18N("I18nServiceAbilityClient::RemovePreferredLanguage: Get proxy failed.");
154 return err;
155 }
156 int32_t code = 0;
157 ErrCode errCode = i18nServiceAbilityObj->RemovePreferredLanguage(index, code);
158 if (errCode != ERR_OK) {
159 HILOG_ERROR_I18N("I18nServiceAbilityClient::RemovePreferredLanguage: Remove preferred language failed, "
160 "errCode is %{public}d.", static_cast<int32_t>(errCode));
161 return I18nErrorCode::FAILED;
162 }
163 return static_cast<I18nErrorCode>(code);
164 }
165
SetTemperatureType(TemperatureType type)166 I18nErrorCode I18nServiceAbilityClient::SetTemperatureType(TemperatureType type)
167 {
168 I18nErrorCode err = I18nErrorCode::SUCCESS;
169 sptr<II18nServiceAbility> i18nServiceAbilityObj = GetProxy(err);
170 if (i18nServiceAbilityObj == nullptr) {
171 HILOG_ERROR_I18N("I18nServiceAbilityClient::SetTemperatureType: Get proxy failed.");
172 return err;
173 }
174 int32_t code = 0;
175 ErrCode errCode = i18nServiceAbilityObj->SetTemperatureType(static_cast<int32_t>(type), code);
176 if (errCode != ERR_OK) {
177 HILOG_ERROR_I18N("I18nServiceAbilityClient::SetTemperatureType: Set temperature type failed, "
178 "errCode is %{public}d.", static_cast<int32_t>(errCode));
179 return I18nErrorCode::FAILED;
180 }
181 return static_cast<I18nErrorCode>(code);
182 }
183
SetFirstDayOfWeek(WeekDay type)184 I18nErrorCode I18nServiceAbilityClient::SetFirstDayOfWeek(WeekDay type)
185 {
186 I18nErrorCode err = I18nErrorCode::SUCCESS;
187 sptr<II18nServiceAbility> i18nServiceAbilityObj = GetProxy(err);
188 if (i18nServiceAbilityObj == nullptr) {
189 HILOG_ERROR_I18N("I18nServiceAbilityClient::SetFirstDayOfWeek: Get proxy failed.");
190 return err;
191 }
192 int32_t code = 0;
193 ErrCode errCode = i18nServiceAbilityObj->SetFirstDayOfWeek(static_cast<int32_t>(type), code);
194 if (errCode != ERR_OK) {
195 HILOG_ERROR_I18N("I18nServiceAbilityClient::SetFirstDayOfWeek: Set first day of week failed, "
196 "errCode is %{public}d.", static_cast<int32_t>(errCode));
197 return I18nErrorCode::FAILED;
198 }
199 return static_cast<I18nErrorCode>(code);
200 }
201 } // namespace I18n
202 } // namespace Global
203 } // namespace OHOS