summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/helplines/LoadHelplinesTask.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/android/dialer/helplines/LoadHelplinesTask.java')
-rw-r--r--java/com/android/dialer/helplines/LoadHelplinesTask.java121
1 files changed, 121 insertions, 0 deletions
diff --git a/java/com/android/dialer/helplines/LoadHelplinesTask.java b/java/com/android/dialer/helplines/LoadHelplinesTask.java
new file mode 100644
index 000000000..7cc0a0152
--- /dev/null
+++ b/java/com/android/dialer/helplines/LoadHelplinesTask.java
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2019-2021 The LineageOS Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.dialer.helplines;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.os.AsyncTask;
+import android.support.annotation.NonNull;
+import android.telephony.SubscriptionInfo;
+import android.telephony.SubscriptionManager;
+import android.util.Log;
+
+import org.lineageos.lib.phone.SensitivePhoneNumberInfo;
+import org.lineageos.lib.phone.SensitivePhoneNumbers;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+public class LoadHelplinesTask extends AsyncTask<Void, Integer, List<HelplineItem>> {
+
+ @NonNull
+ private final Resources mResources;
+ @NonNull
+ private final SubscriptionManager mSubManager;
+ @NonNull
+ private final Callback mCallback;
+
+ LoadHelplinesTask(@NonNull Resources resources, @NonNull SubscriptionManager subManager,
+ @NonNull Callback callback) {
+ mResources = resources;
+ mSubManager = subManager;
+ mCallback = callback;
+ }
+
+ @Override
+ protected List<HelplineItem> doInBackground(Void... voids) {
+ List<HelplineItem> helplineList = new ArrayList<>();
+ /* when the network's and the user's country iso differ from each other,
+ * include the iso code in the name so one can be sure that the number is the correct one
+ * (think of accidential roaming close to the country border) */
+ boolean addCountryCode = false;
+
+ List<SubscriptionInfo> subList = getSubscriptionInfos();
+ if (subList != null) {
+ String localeCountryIso =
+ mResources.getConfiguration().locale.getCountry().toLowerCase();
+ List<String> alreadyProcessedMccs = new ArrayList<>();
+ for (SubscriptionInfo subInfo : subList) {
+ String subCountryIso = subInfo.getCountryIso();
+ if (!subCountryIso.equals(localeCountryIso)) {
+ addCountryCode = true;
+ }
+
+ String mcc = String.valueOf(subInfo.getMcc());
+ if (alreadyProcessedMccs.contains(mcc)) {
+ continue;
+ }
+ alreadyProcessedMccs.add(mcc);
+
+ SensitivePhoneNumbers spn = SensitivePhoneNumbers.getInstance();
+ ArrayList<SensitivePhoneNumberInfo> pns = spn.getSensitivePnInfosForMcc(mcc);
+ int numPns = pns.size();
+ for (int i = 0; i < numPns; i++) {
+ SensitivePhoneNumberInfo info = pns.get(i);
+ helplineList.add(new HelplineItem(mResources, info,
+ addCountryCode ? subCountryIso : ""));
+ publishProgress(Math.round(i * 100 / numPns / subList.size()));
+ }
+ }
+ }
+
+ Collections.sort(helplineList, (a, b) -> a.getName().compareTo(b.getName()));
+
+ return helplineList;
+ }
+
+ private List<SubscriptionInfo> getSubscriptionInfos() {
+ List<SubscriptionInfo> subList = mSubManager.getActiveSubscriptionInfoList();
+ if (subList == null) {
+ SubscriptionInfo info = mSubManager.getActiveSubscriptionInfo(
+ SubscriptionManager.getDefaultVoiceSubscriptionId());
+ if (info != null) {
+ subList = new ArrayList<>();
+ subList.add(info);
+ }
+ }
+ return subList;
+ }
+
+ @Override
+ protected void onProgressUpdate(Integer... values) {
+ if (values.length > 0) {
+ mCallback.onLoadListProgress(values[0]);
+ }
+ }
+
+ @Override
+ protected void onPostExecute(List<HelplineItem> list) {
+ mCallback.onLoadCompleted(list);
+ }
+
+ interface Callback {
+ void onLoadListProgress(int progress);
+
+ void onLoadCompleted(List<HelplineItem> result);
+ }
+}