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 "screen_off_time_plugin.h"
17
18 #include "edm_data_ability_utils.h"
19 #include "edm_ipc_interface_code.h"
20 #include "int_serializer.h"
21 #include "plugin_manager.h"
22
23 namespace OHOS {
24 namespace EDM {
25 static constexpr int32_t SCREEN_OFF_TIME_MIN_VALUE = 15000;
26 static constexpr int32_t SCREEN_OFF_TIME_NEVER_VALUE = -1;
27
28 const std::string KEY_SCREEN_OFF_TIME = "settings.display.screen_off_timeout";
29
30 const bool REGISTER_RESULT = PluginManager::GetInstance()->AddPlugin(ScreenOffTimePlugin::GetPlugin());
31
InitPlugin(std::shared_ptr<IPluginTemplate<ScreenOffTimePlugin,int32_t>> ptr)32 void ScreenOffTimePlugin::InitPlugin(std::shared_ptr<IPluginTemplate<ScreenOffTimePlugin, int32_t>> ptr)
33 {
34 EDMLOGI("ScreenOffTimePlugin InitPlugin...");
35 ptr->InitAttribute(EdmInterfaceCode::SCREEN_OFF_TIME, "screen_off_time", false);
36 std::map<std::string, std::map<IPlugin::PermissionType, std::string>> tagPermissionsForSet;
37 std::map<IPlugin::PermissionType, std::string> typePermissionsForTag11ForSet;
38 std::map<IPlugin::PermissionType, std::string> typePermissionsForTag12ForSet;
39 typePermissionsForTag11ForSet.emplace(IPlugin::PermissionType::SUPER_DEVICE_ADMIN,
40 "ohos.permission.ENTERPRISE_SET_SCREENOFF_TIME");
41 typePermissionsForTag12ForSet.emplace(IPlugin::PermissionType::SUPER_DEVICE_ADMIN,
42 "ohos.permission.ENTERPRISE_MANAGE_SETTINGS");
43 tagPermissionsForSet.emplace(EdmConstants::PERMISSION_TAG_VERSION_11, typePermissionsForTag11ForSet);
44 tagPermissionsForSet.emplace(EdmConstants::PERMISSION_TAG_VERSION_12, typePermissionsForTag12ForSet);
45 IPlugin::PolicyPermissionConfig setConfig = IPlugin::PolicyPermissionConfig(tagPermissionsForSet,
46 IPlugin::ApiType::PUBLIC);
47 ptr->InitPermission(FuncOperateType::SET, setConfig);
48
49 std::map<std::string, std::map<IPlugin::PermissionType, std::string>> tagPermissionsForGet;
50 std::map<IPlugin::PermissionType, std::string> typePermissionsForTag11ForGet;
51 std::map<IPlugin::PermissionType, std::string> typePermissionsForTag12ForGet;
52 typePermissionsForTag11ForGet.emplace(IPlugin::PermissionType::SUPER_DEVICE_ADMIN,
53 "ohos.permission.ENTERPRISE_GET_SETTINGS");
54 typePermissionsForTag12ForGet.emplace(IPlugin::PermissionType::SUPER_DEVICE_ADMIN,
55 "ohos.permission.ENTERPRISE_MANAGE_SETTINGS");
56 tagPermissionsForGet.emplace(EdmConstants::PERMISSION_TAG_VERSION_11, typePermissionsForTag11ForGet);
57 tagPermissionsForGet.emplace(EdmConstants::PERMISSION_TAG_VERSION_12, typePermissionsForTag12ForGet);
58 IPlugin::PolicyPermissionConfig getConfig = IPlugin::PolicyPermissionConfig(tagPermissionsForGet,
59 IPlugin::ApiType::PUBLIC);
60 ptr->InitPermission(FuncOperateType::GET, getConfig);
61 ptr->SetSerializer(IntSerializer::GetInstance());
62 ptr->SetOnHandlePolicyListener(&ScreenOffTimePlugin::OnSetPolicy, FuncOperateType::SET);
63 }
64
OnSetPolicy(int32_t & data)65 ErrCode ScreenOffTimePlugin::OnSetPolicy(int32_t &data)
66 {
67 EDMLOGD("ScreenOffTimePlugin start set screen off time value = %{public}d.", data);
68 if (data >= SCREEN_OFF_TIME_MIN_VALUE || data == SCREEN_OFF_TIME_NEVER_VALUE) {
69 ErrCode code =
70 EdmDataAbilityUtils::UpdateSettingsData(KEY_SCREEN_OFF_TIME, std::to_string(data));
71 if (FAILED(code)) {
72 EDMLOGE("ScreenOffTimePlugin::set screen off time failed : %{public}d.", code);
73 return EdmReturnErrCode::SYSTEM_ABNORMALLY;
74 }
75 return ERR_OK;
76 }
77 return EdmReturnErrCode::PARAM_ERROR;
78 }
79
OnGetPolicy(std::string & value,MessageParcel & data,MessageParcel & reply,int32_t userId)80 ErrCode ScreenOffTimePlugin::OnGetPolicy(std::string &value, MessageParcel &data, MessageParcel &reply, int32_t userId)
81 {
82 EDMLOGI("ScreenOffTimePlugin OnGetPolicy");
83 int32_t result = 0;
84 ErrCode code = EdmDataAbilityUtils::GetIntFromSettingsDataShare(KEY_SCREEN_OFF_TIME, result);
85 if (code != ERR_OK) {
86 EDMLOGE("ScreenOffTimePlugin::get screen off time from database failed : %{public}d.", code);
87 reply.WriteInt32(EdmReturnErrCode::SYSTEM_ABNORMALLY);
88 return EdmReturnErrCode::SYSTEM_ABNORMALLY;
89 }
90 reply.WriteInt32(ERR_OK);
91 reply.WriteInt32(result);
92 return ERR_OK;
93 }
94 } // namespace EDM
95 } // namespace OHOS
96