• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 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 #define MLOG_TAG "RingtoneDefaultSetting"
16 
17 #include "ringtone_default_setting.h"
18 
19 #include "parameter.h"
20 #include "rdb_errno.h"
21 #include "ringtone_errno.h"
22 #include "ringtone_log.h"
23 #include "ringtone_type.h"
24 #include "ringtone_scanner_db.h"
25 #include "ringtone_setting_manager.h"
26 #include "rdb_helper.h"
27 #include "result_set.h"
28 #include "ringtone_utils.h"
29 
30 namespace OHOS {
31 namespace Media {
32 using namespace std;
33 static const int32_t SYSPARA_SIZE = 128;
GetObj(std::shared_ptr<NativeRdb::RdbStore> & rdb)34 std::unique_ptr<RingtoneDefaultSetting> RingtoneDefaultSetting::GetObj(std::shared_ptr<NativeRdb::RdbStore> &rdb)
35 {
36     return make_unique<RingtoneDefaultSetting>(rdb);
37 }
38 
RingtoneDefaultSetting(shared_ptr<NativeRdb::RdbStore> & rdb)39 RingtoneDefaultSetting::RingtoneDefaultSetting(shared_ptr<NativeRdb::RdbStore> &rdb)
40 {
41     settingMgr_ = make_unique<RingtoneSettingManager>(rdb);
42 }
43 
GetTonePathByDisplayName(const string & name)44 string RingtoneDefaultSetting::GetTonePathByDisplayName(const string &name)
45 {
46     string pathStr = {};
47     string querySql = "SELECT data FROM ToneFiles WHERE display_name = "s + "\"" + name + "\"";
48     settingMgr_->TravelQueryResultSet(querySql, [&](shared_ptr<RingtoneMetadata> &meta) -> bool {
49         pathStr = meta->GetData();
50         if (pathStr.empty()) {
51             pathStr = {};
52             return false;
53         }
54         if (pathStr.find(ROOT_TONE_PRELOAD_PATH_NOAH_PATH) == 0 ||
55             pathStr.find(ROOT_TONE_PRELOAD_PATH_CHINA_PATH) == 0 ||
56             pathStr.find(ROOT_TONE_PRELOAD_PATH_OVERSEA_PATH) == 0) {
57             return true;
58         }
59         pathStr = {};
60         return false;
61     });
62 
63     return pathStr;
64 }
65 
ShotToneDefaultSettings()66 void RingtoneDefaultSetting::ShotToneDefaultSettings()
67 {
68     char paramValue1[SYSPARA_SIZE] = {0};
69     char paramValue2[SYSPARA_SIZE] = {0};
70 
71     GetParameter(PARAM_RINGTONE_SETTING_SHOT, "", paramValue1, SYSPARA_SIZE);
72     GetParameter(PARAM_RINGTONE_SETTING_SHOT2, "", paramValue2, SYSPARA_SIZE);
73 
74     if (strcmp(paramValue1, "")) {
75         string tonePath = {};
76         string strVal = {paramValue1};
77         tonePath = GetTonePathByDisplayName(strVal);
78         if (!tonePath.empty()) {
79             settingMgr_->CommitSetting(TONE_ID_DEFAULT, tonePath, TONE_SETTING_TYPE_SHOT, SHOT_TONE_TYPE_SIM_CARD_1,
80                 SOURCE_TYPE_PRESET);
81         }
82     }
83 
84     if (strcmp(paramValue2, "")) {
85         string tonePath = {};
86         string strVal = {paramValue2};
87         tonePath = GetTonePathByDisplayName(strVal);
88         if (!tonePath.empty()) {
89             settingMgr_->CommitSetting(TONE_ID_DEFAULT, tonePath, TONE_SETTING_TYPE_SHOT, SHOT_TONE_TYPE_SIM_CARD_2,
90                 SOURCE_TYPE_PRESET);
91         }
92     }
93 }
94 
NotificationToneDefaultSettings()95 void RingtoneDefaultSetting::NotificationToneDefaultSettings()
96 {
97     char paramValue[SYSPARA_SIZE] = {0};
98     GetParameter(PARAM_RINGTONE_SETTING_NOTIFICATIONTONE, "", paramValue, SYSPARA_SIZE);
99 
100     if (strcmp(paramValue, "")) {
101         string tonePath = {};
102         string strVal = {paramValue};
103         tonePath = GetTonePathByDisplayName(strVal);
104         if (!tonePath.empty()) {
105             settingMgr_->CommitSetting(TONE_ID_DEFAULT, tonePath, TONE_SETTING_TYPE_NOTIFICATION,
106                 NOTIFICATION_TONE_TYPE, SOURCE_TYPE_PRESET);
107         }
108     }
109 }
110 
RingToneDefaultSettings()111 void RingtoneDefaultSetting::RingToneDefaultSettings()
112 {
113     char paramValue1[SYSPARA_SIZE] = {0};
114     char paramValue2[SYSPARA_SIZE] = {0};
115 
116     GetParameter(PARAM_RINGTONE_SETTING_RINGTONE, "", paramValue1, SYSPARA_SIZE);
117     GetParameter(PARAM_RINGTONE_SETTING_RINGTONE2, "", paramValue2, SYSPARA_SIZE);
118 
119     if (strcmp(paramValue1, "")) {
120         string tonePath = {};
121         string strVal = {paramValue1};
122         tonePath = GetTonePathByDisplayName(strVal);
123         if (!tonePath.empty()) {
124             settingMgr_->CommitSetting(TONE_ID_DEFAULT, tonePath, TONE_SETTING_TYPE_RINGTONE, RING_TONE_TYPE_SIM_CARD_1,
125                 SOURCE_TYPE_PRESET);
126         }
127     }
128 
129     if (strcmp(paramValue2, "")) {
130         string tonePath = {};
131         string strVal = {paramValue2};
132         tonePath = GetTonePathByDisplayName(strVal);
133         if (!tonePath.empty()) {
134             settingMgr_->CommitSetting(TONE_ID_DEFAULT, tonePath, TONE_SETTING_TYPE_RINGTONE, RING_TONE_TYPE_SIM_CARD_2,
135                 SOURCE_TYPE_PRESET);
136         }
137     }
138 }
139 
AlarmToneDefaultSettings()140 void RingtoneDefaultSetting::AlarmToneDefaultSettings()
141 {
142     char paramValue[SYSPARA_SIZE] = {0};
143     GetParameter(PARAM_RINGTONE_SETTING_ALARM, "", paramValue, SYSPARA_SIZE);
144 
145     if (strcmp(paramValue, "")) {
146         string tonePath = {};
147         string strVal = {paramValue};
148         tonePath = GetTonePathByDisplayName(strVal);
149         if (!tonePath.empty()) {
150             settingMgr_->CommitSetting(TONE_ID_DEFAULT, tonePath, TONE_SETTING_TYPE_ALARM, ALARM_TONE_TYPE,
151                 SOURCE_TYPE_PRESET);
152         }
153     }
154 }
155 
Update()156 void RingtoneDefaultSetting::Update()
157 {
158     ShotToneDefaultSettings();
159     NotificationToneDefaultSettings();
160     RingToneDefaultSettings();
161     AlarmToneDefaultSettings();
162 
163     if (settingMgr_ != nullptr) {
164         settingMgr_->FlushSettings();
165     } else {
166         RINGTONE_ERR_LOG("ringtone setting mgr is nullptr");
167     }
168 }
169 
UpdateDefaultSystemTone()170 void RingtoneDefaultSetting::UpdateDefaultSystemTone()
171 {
172     CHECK_AND_RETURN_LOG(settingMgr_ != nullptr, "ringtone setting mgr is nullptr");
173     RINGTONE_INFO_LOG("setting system tone begin");
174     auto infos = RingtoneUtils::GetDefaultSystemtoneInfo();
175     for (auto info : infos) {
176         const string querySql = "SELECT tone_id FROM ToneFiles WHERE display_name = "s + "\"" + info.second + "\"";
177         int32_t tone_id = 0;
178         settingMgr_->TravelQueryResultSet(querySql, [&](shared_ptr<RingtoneMetadata> &meta) -> bool {
179             tone_id = meta->GetToneId();
180             return true;
181         });
182 
183         NativeRdb::ValuesBucket values;
184         values.PutString(PRELOAD_CONFIG_COLUMN_DISPLAY_NAME, info.second);
185         values.PutInt(PRELOAD_CONFIG_COLUMN_TONE_ID, tone_id);
186         NativeRdb::AbsRdbPredicates absRdbPredicates(PRELOAD_CONFIG_TABLE);
187         absRdbPredicates.EqualTo(PRELOAD_CONFIG_COLUMN_RING_TONE_TYPE, std::to_string(info.first));
188         int32_t changedRows = 0;
189         int32_t result = settingMgr_->Update(changedRows, values, absRdbPredicates);
190         if (result != E_OK || changedRows <= 0) {
191             RINGTONE_ERR_LOG("Update operation failed. Result %{public}d. Updated %{public}d", result, changedRows);
192         }
193     }
194 }
195 
196 } // namespace Media
197 } // namespace OHOS
198