1 /*
2  * Copyright (c) 2023 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 "message_parcel.h"
18 #include "i18n_service_ability_proxy.h"
19 
20 namespace OHOS {
21 namespace Global {
22 namespace I18n {
23 static const std::u16string DESCRIPTOR = u"OHOS.global.II18nServiceAbility";
24 
I18nServiceAbilityProxy(const sptr<IRemoteObject> & impl)25 I18nServiceAbilityProxy::I18nServiceAbilityProxy(const sptr<IRemoteObject> &impl)
26     : IRemoteProxy<II18nServiceAbility>(impl)
27 {
28 }
29 
SetSystemLanguage(const std::string & language)30 I18nErrorCode I18nServiceAbilityProxy::SetSystemLanguage(const std::string &language)
31 {
32     MessageParcel data;
33     MessageParcel reply;
34     MessageOption option;
35     data.WriteInterfaceToken(DESCRIPTOR);
36     data.WriteString(language);
37     Remote()->SendRequest(static_cast<uint32_t>(ILocaleConfigAbilityCode::SET_SYSTEM_LANGUAGE), data,
38         reply, option);
39     return ProcessReply(reply.ReadInt32());
40 }
41 
SetSystemRegion(const std::string & region)42 I18nErrorCode I18nServiceAbilityProxy::SetSystemRegion(const std::string &region)
43 {
44     MessageParcel data;
45     MessageParcel reply;
46     MessageOption option;
47     data.WriteInterfaceToken(DESCRIPTOR);
48     data.WriteString(region);
49     Remote()->SendRequest(static_cast<uint32_t>(ILocaleConfigAbilityCode::SET_SYSTEM_REGION), data,
50         reply, option);
51     return ProcessReply(reply.ReadInt32());
52 }
53 
SetSystemLocale(const std::string & locale)54 I18nErrorCode I18nServiceAbilityProxy::SetSystemLocale(const std::string &locale)
55 {
56     MessageParcel data;
57     MessageParcel reply;
58     MessageOption option;
59     data.WriteInterfaceToken(DESCRIPTOR);
60     data.WriteString(locale);
61     Remote()->SendRequest(static_cast<uint32_t>(ILocaleConfigAbilityCode::SET_SYSTEM_LOCALE), data,
62         reply, option);
63     return ProcessReply(reply.ReadInt32());
64 }
65 
Set24HourClock(const std::string & flag)66 I18nErrorCode I18nServiceAbilityProxy::Set24HourClock(const std::string &flag)
67 {
68     MessageParcel data;
69     MessageParcel reply;
70     MessageOption option;
71     data.WriteInterfaceToken(DESCRIPTOR);
72     data.WriteString(flag);
73     Remote()->SendRequest(static_cast<uint32_t>(ILocaleConfigAbilityCode::SET_24_HOUR_CLOCK), data,
74         reply, option);
75     return ProcessReply(reply.ReadInt32());
76 }
77 
SetUsingLocalDigit(bool flag)78 I18nErrorCode I18nServiceAbilityProxy::SetUsingLocalDigit(bool flag)
79 {
80     MessageParcel data;
81     MessageParcel reply;
82     MessageOption option;
83     data.WriteInterfaceToken(DESCRIPTOR);
84     data.WriteBool(flag);
85     Remote()->SendRequest(static_cast<uint32_t>(ILocaleConfigAbilityCode::SET_USING_LOCAL_DIGIT), data,
86         reply, option);
87     return ProcessReply(reply.ReadInt32());
88 }
89 
AddPreferredLanguage(const std::string & language,int32_t index)90 I18nErrorCode I18nServiceAbilityProxy::AddPreferredLanguage(const std::string &language, int32_t index)
91 {
92     MessageParcel data;
93     MessageParcel reply;
94     MessageOption option;
95     data.WriteInterfaceToken(DESCRIPTOR);
96     data.WriteString(language);
97     data.WriteInt32(index);
98     Remote()->SendRequest(static_cast<uint32_t>(ILocaleConfigAbilityCode::ADD_PREFERRED_LANGUAGE), data,
99         reply, option);
100     return ProcessReply(reply.ReadInt32());
101 }
102 
RemovePreferredLanguage(int32_t index)103 I18nErrorCode I18nServiceAbilityProxy::RemovePreferredLanguage(int32_t index)
104 {
105     MessageParcel data;
106     MessageParcel reply;
107     MessageOption option;
108     data.WriteInterfaceToken(DESCRIPTOR);
109     data.WriteInt32(index);
110     Remote()->SendRequest(static_cast<uint32_t>(ILocaleConfigAbilityCode::REMOVE_PREFERRED_LANGUAGE),
111         data, reply, option);
112     return ProcessReply(reply.ReadInt32());
113 }
114 
ProcessReply(int32_t reply)115 I18nErrorCode I18nServiceAbilityProxy::ProcessReply(int32_t reply)
116 {
117     I18nErrorCode err = static_cast<I18nErrorCode>(reply);
118     if (err != I18nErrorCode::SUCCESS) {
119         HILOG_ERROR_I18N(
120             "I18nServiceAbilityProxy::ProcessReply failed with errorcode=%{public}d", reply);
121     }
122     return err;
123 }
124 } // namespace I18n
125 } // namespace Global
126 } // namespace OHOS