summaryrefslogtreecommitdiff
path: root/java/com/android/voicemail
diff options
context:
space:
mode:
authorEric Erfanian <erfanian@google.com>2017-05-04 08:23:17 -0700
committerEric Erfanian <erfanian@google.com>2017-05-04 14:04:39 -0700
commit10b34a5ebf12e97ecba0caf3c8e30b476b038a96 (patch)
tree3a325b0effac02fbd228b8ddf2f96589e5df72cd /java/com/android/voicemail
parent8369df095a73a77b3715f8ae7ba06089cebca4ce (diff)
Update Dialer to V10 RC16
This release was created following the instructions at: go/dialer-aosp-release Subsequent dialer releases will follow as O bugs are fixed, until we reach our final RC. Version: 10 Candidate: RC16 Branch: dialer-android_release_branch/153304843.1 dialer-android/dialer-android_20170416.00/dialer-android_20170416.00_RC16 This release contains the following bug fixes since RC00: Bug: 37324705 35304403 36067503 35304446 33203808 37280992 37346084 35766990 37481880 37424493 36470282 37347691 37519015 37168472 35805360 37545472 27704934 36515614 35766990 37577470 34739750 35801628 36788693 35264204 36708536 37628370 36904650 37314436 37642171 37530847 37637799 37666625 37548549 37648036 37636412 37323529 37630507 35919141 37198343 37548572 36178218 37640315 37663896 37720467 37275944 37710497 31634477 37744796 37348506 37744796 37568534 37672424 34872683 34873026 37681461 34873295 37748373 37526812 37618638 37663896 37536088 37727455 37165687 36651204 36900708 37323529 36902926 37256480 37328353 37432034 37436952 34093562 37720889 37321935 37780300 37781115 37755902 36588206 34258266 37290464 37698062 37618638 37473004 37432034 37918676 37870494 37722091 Test: make, on device Change-Id: I99e1a484ccd578c1f8a13e7a6a4b4952f0791297
Diffstat (limited to 'java/com/android/voicemail')
-rw-r--r--java/com/android/voicemail/impl/ActivationTask.java43
-rw-r--r--java/com/android/voicemail/impl/AndroidManifest.xml29
-rw-r--r--java/com/android/voicemail/impl/OmtpService.java153
-rw-r--r--java/com/android/voicemail/impl/OmtpVvmCarrierConfigHelper.java10
-rw-r--r--java/com/android/voicemail/impl/PreOMigrationHandler.java102
-rw-r--r--java/com/android/voicemail/impl/StatusCheckTask.java2
-rw-r--r--java/com/android/voicemail/impl/TelephonyMangerCompat.java82
-rw-r--r--java/com/android/voicemail/impl/VoicemailClientImpl.java8
-rw-r--r--java/com/android/voicemail/impl/VvmPackageInstallHandler.java167
-rw-r--r--java/com/android/voicemail/impl/imap/ImapHelper.java63
-rw-r--r--java/com/android/voicemail/impl/protocol/Vvm3Subscriber.java56
-rw-r--r--java/com/android/voicemail/impl/res/values-af/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-am/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-ar/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-az/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-b+sr+Latn/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-be/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-bg/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-bn/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-bs/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-ca/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-cs/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-da/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-de/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-el/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-en-rAU/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-en-rGB/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-en-rIN/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-es-rUS/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-es/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-et/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-eu/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-fa/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-fi/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-fr-rCA/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-fr/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-gl/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-gu/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-hi/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-hr/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-hu/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-hy/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-in/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-is/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-it/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-iw/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-ja/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-ka/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-kk/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-km/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-kn/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-ko/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-ky/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-lo/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-lt/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-lv/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-mk/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-ml/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-mn/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-mr/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-ms/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-my/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-nb/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-ne/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-nl/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-no/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-pa/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-pl/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-pt-rBR/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-pt-rPT/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-pt/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-ro/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-ru/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-si/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-sk/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-sl/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-sq/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-sr/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-sv/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-sw/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-ta/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-te/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-th/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-tl/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-tr/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-uk/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-ur/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-uz/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-vi/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-zh-rCN/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-zh-rHK/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-zh-rTW/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values-zu/strings.xml5
-rw-r--r--java/com/android/voicemail/impl/res/values/strings.xml15
-rw-r--r--java/com/android/voicemail/impl/res/xml/voicemail_settings.xml13
-rw-r--r--java/com/android/voicemail/impl/scheduling/BaseTask.java2
-rw-r--r--java/com/android/voicemail/impl/scheduling/MinimalIntervalPolicy.java2
-rw-r--r--java/com/android/voicemail/impl/scheduling/RetryPolicy.java2
-rw-r--r--java/com/android/voicemail/impl/scheduling/Task.java8
-rw-r--r--java/com/android/voicemail/impl/scheduling/TaskExecutor.java455
-rw-r--r--java/com/android/voicemail/impl/scheduling/TaskReceiver.java80
-rw-r--r--java/com/android/voicemail/impl/scheduling/TaskSchedulerJobService.java60
-rw-r--r--java/com/android/voicemail/impl/scheduling/Tasks.java5
-rw-r--r--java/com/android/voicemail/impl/settings/VoicemailSettingsFragment.java50
-rw-r--r--java/com/android/voicemail/impl/sms/OmtpMessageReceiver.java4
-rw-r--r--java/com/android/voicemail/impl/sms/OmtpMessageSender.java6
-rw-r--r--java/com/android/voicemail/impl/sms/StatusSmsFetcher.java6
-rw-r--r--java/com/android/voicemail/impl/sync/OmtpVvmSyncService.java39
-rw-r--r--java/com/android/voicemail/impl/sync/SyncOneTask.java2
-rw-r--r--java/com/android/voicemail/impl/sync/SyncTask.java2
-rw-r--r--java/com/android/voicemail/impl/sync/UploadTask.java2
-rw-r--r--java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java24
-rw-r--r--java/com/android/voicemail/permissions.xml2
113 files changed, 1413 insertions, 491 deletions
diff --git a/java/com/android/voicemail/impl/ActivationTask.java b/java/com/android/voicemail/impl/ActivationTask.java
index b0ad3bafc..91e369531 100644
--- a/java/com/android/voicemail/impl/ActivationTask.java
+++ b/java/com/android/voicemail/impl/ActivationTask.java
@@ -31,6 +31,7 @@ import android.telephony.ServiceState;
import android.telephony.TelephonyManager;
import com.android.dialer.logging.DialerImpression;
import com.android.dialer.proguard.UsedByReflection;
+import com.android.voicemail.VoicemailClient;
import com.android.voicemail.impl.protocol.VisualVoicemailProtocol;
import com.android.voicemail.impl.scheduling.BaseTask;
import com.android.voicemail.impl.scheduling.RetryPolicy;
@@ -105,7 +106,7 @@ public class ActivationTask extends BaseTask {
if (messageData != null) {
intent.putExtra(EXTRA_MESSAGE_DATA_BUNDLE, messageData);
}
- context.startService(intent);
+ context.sendBroadcast(intent);
}
@Override
@@ -136,6 +137,8 @@ public class ActivationTask extends BaseTask {
return;
}
+ PreOMigrationHandler.migrate(getContext(), phoneAccountHandle);
+
if (!VisualVoicemailSettingsUtil.isEnabled(getContext(), phoneAccountHandle)) {
VvmLog.i(TAG, "VVM is disabled");
return;
@@ -163,6 +166,7 @@ public class ActivationTask extends BaseTask {
if (VvmAccountManager.isAccountActivated(getContext(), phoneAccountHandle)) {
VvmLog.i(TAG, "Account is already activated");
+ onSuccess(getContext(), phoneAccountHandle);
return;
}
helper.handleEvent(
@@ -222,7 +226,7 @@ public class ActivationTask extends BaseTask {
+ message.getReturnCode());
if (message.getProvisioningStatus().equals(OmtpConstants.SUBSCRIBER_READY)) {
VvmLog.d(TAG, "subscriber ready, no activation required");
- updateSource(getContext(), phoneAccountHandle, status, message);
+ updateSource(getContext(), phoneAccountHandle, message);
} else {
if (helper.supportsProvisioning()) {
VvmLog.i(TAG, "Subscriber not ready, start provisioning");
@@ -232,7 +236,7 @@ public class ActivationTask extends BaseTask {
VvmLog.i(TAG, "Subscriber new but provisioning is not supported");
// Ignore the non-ready state and attempt to use the provided info as is.
// This is probably caused by not completing the new user tutorial.
- updateSource(getContext(), phoneAccountHandle, status, message);
+ updateSource(getContext(), phoneAccountHandle, message);
} else {
VvmLog.i(TAG, "Subscriber not ready but provisioning is not supported");
helper.handleEvent(status, OmtpEvents.CONFIG_SERVICE_NOT_AVAILABLE);
@@ -242,25 +246,38 @@ public class ActivationTask extends BaseTask {
getContext(), DialerImpression.Type.VVM_ACTIVATION_COMPLETED);
}
- public static void updateSource(
- Context context,
- PhoneAccountHandle phone,
- VoicemailStatus.Editor status,
- StatusMessage message) {
+ private static void updateSource(
+ Context context, PhoneAccountHandle phone, StatusMessage message) {
if (OmtpConstants.SUCCESS.equals(message.getReturnCode())) {
- OmtpVvmCarrierConfigHelper helper = new OmtpVvmCarrierConfigHelper(context, phone);
- helper.handleEvent(status, OmtpEvents.CONFIG_REQUEST_STATUS_SUCCESS);
-
// Save the IMAP credentials in preferences so they are persistent and can be retrieved.
VvmAccountManager.addAccount(context, phone, message);
-
- SyncTask.start(context, phone, OmtpVvmSyncService.SYNC_FULL_SYNC);
+ onSuccess(context, phone);
} else {
VvmLog.e(TAG, "Visual voicemail not available for subscriber.");
}
}
+ private static void onSuccess(Context context, PhoneAccountHandle phoneAccountHandle) {
+ OmtpVvmCarrierConfigHelper helper = new OmtpVvmCarrierConfigHelper(context, phoneAccountHandle);
+ helper.handleEvent(
+ VoicemailStatus.edit(context, phoneAccountHandle),
+ OmtpEvents.CONFIG_REQUEST_STATUS_SUCCESS);
+ clearLegacyVoicemailNotification(context, phoneAccountHandle);
+ SyncTask.start(context, phoneAccountHandle, OmtpVvmSyncService.SYNC_FULL_SYNC);
+ }
+
+ /** Sends a broadcast to the dialer UI to clear legacy voicemail notifications if any. */
+ private static void clearLegacyVoicemailNotification(
+ Context context, PhoneAccountHandle phoneAccountHandle) {
+ Intent intent = new Intent(VoicemailClient.ACTION_SHOW_LEGACY_VOICEMAIL);
+ intent.setPackage(context.getPackageName());
+ intent.putExtra(TelephonyManager.EXTRA_PHONE_ACCOUNT_HANDLE, phoneAccountHandle);
+ // Setting voicemail message count to zero will clear the notification.
+ intent.putExtra(TelephonyManager.EXTRA_NOTIFICATION_COUNT, 0);
+ context.sendBroadcast(intent);
+ }
+
private static boolean hasSignal(Context context, PhoneAccountHandle phoneAccountHandle) {
TelephonyManager telephonyManager =
context
diff --git a/java/com/android/voicemail/impl/AndroidManifest.xml b/java/com/android/voicemail/impl/AndroidManifest.xml
index 47a4b2dd3..8c0d67f6b 100644
--- a/java/com/android/voicemail/impl/AndroidManifest.xml
+++ b/java/com/android/voicemail/impl/AndroidManifest.xml
@@ -31,7 +31,8 @@
<receiver
android:name="com.android.voicemail.impl.sms.OmtpMessageReceiver"
- android:exported="false">
+ android:exported="false"
+ android:directBootAware="true">
<intent-filter>
<action android:name="com.android.vociemailomtp.sms.sms_received"/>
</intent-filter>
@@ -40,7 +41,7 @@
<receiver android:name="com.android.voicemail.impl.VoicemailClientReceiver"
android:exported="false">
<intent-filter>
- <action android:name="com.android.voicemailomtp.VoicemailClient.ACTION_UPLOAD"/>
+ <action android:name="com.android.voicemail.VoicemailClient.ACTION_UPLOAD"/>
</intent-filter>
</receiver>
@@ -76,8 +77,8 @@
</intent-filter>
</receiver>
- <service
- android:name="com.android.voicemail.impl.scheduling.TaskSchedulerService"
+ <receiver
+ android:name="com.android.voicemail.impl.scheduling.TaskReceiver"
android:exported="false"/>
<service
@@ -90,12 +91,15 @@
android:permission="android.permission.BIND_JOB_SERVICE"
android:exported="false"/>
- <receiver android:name="com.android.voicemail.impl.OmtpReceiver"
- android:exported="true">
+ <service
+ android:name="com.android.voicemail.impl.OmtpService"
+ android:permission="android.permission.BIND_VISUAL_VOICEMAIL_SERVICE"
+ android:exported="true"
+ android:directBootAware="true">
<intent-filter>
- <action android:name="com.android.phone.vvm.ACTION_VISUAL_VOICEMAIL_SERVICE_EVENT" />
+ <action android:name="android.telephony.VisualVoicemailService"/>
</intent-filter>
- </receiver>
+ </service>
<activity
android:name="com.android.voicemail.impl.settings.VoicemailChangePinActivity"
@@ -109,14 +113,5 @@
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
-
- <receiver android:name="com.android.voicemail.impl.VvmPackageInstallReceiver">
- <intent-filter>
- <!-- New O broadcast, can be received in background. Only applies to installation and not
- updates -->
- <action android:name="android.intent.action.PACKAGE_FIRST_ADDED" />
- <data android:scheme="package"/>
- </intent-filter>
- </receiver>
</application>
</manifest>
diff --git a/java/com/android/voicemail/impl/OmtpService.java b/java/com/android/voicemail/impl/OmtpService.java
new file mode 100644
index 000000000..ad24e1243
--- /dev/null
+++ b/java/com/android/voicemail/impl/OmtpService.java
@@ -0,0 +1,153 @@
+/*
+ * Copyright (C) 2017 The Android Open Source 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.voicemail.impl;
+
+import android.annotation.TargetApi;
+import android.content.Intent;
+import android.os.Build.VERSION_CODES;
+import android.os.UserManager;
+import android.telecom.PhoneAccountHandle;
+import android.telephony.VisualVoicemailService;
+import android.telephony.VisualVoicemailSms;
+import com.android.dialer.logging.DialerImpression;
+import com.android.dialer.logging.Logger;
+import com.android.voicemail.VoicemailComponent;
+import com.android.voicemail.impl.settings.VisualVoicemailSettingsUtil;
+import com.android.voicemail.impl.sync.VvmAccountManager;
+
+/** Implements {@link VisualVoicemailService} to receive visual voicemail events */
+@TargetApi(VERSION_CODES.O)
+public class OmtpService extends VisualVoicemailService {
+
+ private static final String TAG = "VvmOmtpService";
+
+ public static final String ACTION_SMS_RECEIVED = "com.android.vociemailomtp.sms.sms_received";
+
+ public static final String EXTRA_VOICEMAIL_SMS = "extra_voicemail_sms";
+
+ @Override
+ public void onCellServiceConnected(
+ VisualVoicemailTask task, final PhoneAccountHandle phoneAccountHandle) {
+ VvmLog.i(TAG, "onCellServiceConnected");
+ if (!isModuleEnabled()) {
+ VvmLog.e(TAG, "onCellServiceConnected received when module is disabled");
+ task.finish();
+ return;
+ }
+
+ if (!isUserUnlocked()) {
+ VvmLog.i(TAG, "onCellServiceConnected: user locked");
+ task.finish();
+ return;
+ }
+
+ if (!isServiceEnabled(phoneAccountHandle)) {
+ task.finish();
+ return;
+ }
+
+ Logger.get(this).logImpression(DialerImpression.Type.VVM_UNBUNDLED_EVENT_RECEIVED);
+ ActivationTask.start(OmtpService.this, phoneAccountHandle, null);
+ task.finish();
+ }
+
+ @Override
+ public void onSmsReceived(VisualVoicemailTask task, final VisualVoicemailSms sms) {
+ VvmLog.i(TAG, "onSmsReceived");
+ if (!isModuleEnabled()) {
+ VvmLog.e(TAG, "onSmsReceived received when module is disabled");
+ task.finish();
+ return;
+ }
+
+ VvmPackageInstallHandler.scanNewPackages(this);
+
+ if (!isServiceEnabled(sms.getPhoneAccountHandle())) {
+ task.finish();
+ return;
+ }
+
+ // isUserUnlocked() is not checked. OmtpMessageReceiver will handle the locked case.
+
+ Logger.get(this).logImpression(DialerImpression.Type.VVM_UNBUNDLED_EVENT_RECEIVED);
+ Intent intent = new Intent(ACTION_SMS_RECEIVED);
+ intent.setPackage(getPackageName());
+ intent.putExtra(EXTRA_VOICEMAIL_SMS, sms);
+ sendBroadcast(intent);
+ task.finish();
+ }
+
+ @Override
+ public void onSimRemoved(
+ final VisualVoicemailTask task, final PhoneAccountHandle phoneAccountHandle) {
+ VvmLog.i(TAG, "onSimRemoved");
+ if (!isModuleEnabled()) {
+ VvmLog.e(TAG, "onSimRemoved called when module is disabled");
+ task.finish();
+ return;
+ }
+
+ if (!isUserUnlocked()) {
+ VvmLog.i(TAG, "onSimRemoved: user locked");
+ task.finish();
+ return;
+ }
+
+ Logger.get(this).logImpression(DialerImpression.Type.VVM_UNBUNDLED_EVENT_RECEIVED);
+ VvmAccountManager.removeAccount(this, phoneAccountHandle);
+ task.finish();
+ }
+
+ @Override
+ public void onStopped(VisualVoicemailTask task) {
+ VvmLog.i(TAG, "onStopped");
+ if (!isModuleEnabled()) {
+ VvmLog.e(TAG, "onStopped called when module is disabled");
+ task.finish();
+ return;
+ }
+ if (!isUserUnlocked()) {
+ VvmLog.i(TAG, "onStopped: user locked");
+ task.finish();
+ return;
+ }
+ Logger.get(this).logImpression(DialerImpression.Type.VVM_UNBUNDLED_EVENT_RECEIVED);
+ }
+
+ private boolean isModuleEnabled() {
+ return VoicemailComponent.get(this).getVoicemailClient().isVoicemailModuleEnabled();
+ }
+
+ private boolean isServiceEnabled(PhoneAccountHandle phoneAccountHandle) {
+ OmtpVvmCarrierConfigHelper config = new OmtpVvmCarrierConfigHelper(this, phoneAccountHandle);
+ if (!config.isValid()) {
+ VvmLog.i(TAG, "VVM not supported on " + phoneAccountHandle);
+ return false;
+ }
+ if (!VisualVoicemailSettingsUtil.isEnabled(this, phoneAccountHandle)
+ && !config.isLegacyModeEnabled()) {
+ VvmLog.i(TAG, "VVM is disabled");
+ return false;
+ }
+ return true;
+ }
+
+ private boolean isUserUnlocked() {
+ UserManager userManager = getSystemService(UserManager.class);
+ return userManager.isUserUnlocked();
+ }
+}
diff --git a/java/com/android/voicemail/impl/OmtpVvmCarrierConfigHelper.java b/java/com/android/voicemail/impl/OmtpVvmCarrierConfigHelper.java
index 2f1df09dd..04b3e73da 100644
--- a/java/com/android/voicemail/impl/OmtpVvmCarrierConfigHelper.java
+++ b/java/com/android/voicemail/impl/OmtpVvmCarrierConfigHelper.java
@@ -26,7 +26,6 @@ import android.support.annotation.VisibleForTesting;
import android.telecom.PhoneAccountHandle;
import android.telephony.CarrierConfigManager;
import android.telephony.TelephonyManager;
-import android.telephony.VisualVoicemailService;
import android.telephony.VisualVoicemailSmsFilterSettings;
import android.text.TextUtils;
import android.util.ArraySet;
@@ -234,9 +233,7 @@ public class OmtpVvmCarrierConfigHelper {
return (String) getValue(KEY_VVM_DESTINATION_NUMBER_STRING);
}
- /**
- * @return Port to start a SSL IMAP connection directly.
- */
+ /** @return Port to start a SSL IMAP connection directly. */
public int getSslPort() {
Assert.checkArgument(isValid());
return (int) getValue(KEY_VVM_SSL_PORT_NUMBER_INT, 0);
@@ -328,7 +325,7 @@ public class OmtpVvmCarrierConfigHelper {
public void activateSmsFilter() {
Assert.checkArgument(isValid());
- VisualVoicemailService.setSmsFilterSettings(
+ TelephonyMangerCompat.setVisualVoicemailSmsFilterSettings(
mContext,
getPhoneAccountHandle(),
new VisualVoicemailSmsFilterSettings.Builder().setClientPrefix(getClientPrefix()).build());
@@ -339,7 +336,8 @@ public class OmtpVvmCarrierConfigHelper {
VvmLog.i(TAG, "startDeactivation");
if (!isLegacyModeEnabled()) {
// SMS should still be filtered in legacy mode
- VisualVoicemailService.setSmsFilterSettings(mContext, getPhoneAccountHandle(), null);
+ TelephonyMangerCompat.setVisualVoicemailSmsFilterSettings(
+ mContext, getPhoneAccountHandle(), null);
VvmLog.i(TAG, "filter disabled");
}
if (mProtocol != null) {
diff --git a/java/com/android/voicemail/impl/PreOMigrationHandler.java b/java/com/android/voicemail/impl/PreOMigrationHandler.java
new file mode 100644
index 000000000..6dc2dee90
--- /dev/null
+++ b/java/com/android/voicemail/impl/PreOMigrationHandler.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2017 The Android Open Source 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.voicemail.impl;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.support.annotation.WorkerThread;
+import android.telecom.PhoneAccountHandle;
+import android.telephony.TelephonyManager;
+import android.text.TextUtils;
+import com.android.voicemail.impl.settings.VisualVoicemailSettingsUtil;
+import com.android.voicemail.impl.settings.VoicemailChangePinActivity;
+import java.lang.reflect.Method;
+
+/** Handles migration of data from the visual voicemail client in telephony before O. */
+public final class PreOMigrationHandler {
+
+ // Hidden system APIs to access pre O VVM data
+ // Bundle getVisualVoicemailSettings()
+ private static final String METHOD_GET_VISUAL_VOICEMAIL_SETTINGS = "getVisualVoicemailSettings";
+
+ /**
+ * Key in bundle returned by {@link #METHOD_GET_VISUAL_VOICEMAIL_SETTINGS}, indicating whether
+ * visual voicemail was enabled or disabled by the user. If the user never explicitly changed this
+ * setting, this key will not exist.
+ */
+ private static final String EXTRA_VISUAL_VOICEMAIL_ENABLED_BY_USER_BOOL =
+ "android.telephony.extra.VISUAL_VOICEMAIL_ENABLED_BY_USER_BOOL";
+
+ /**
+ * Key in bundle returned by {@link #METHOD_GET_VISUAL_VOICEMAIL_SETTINGS}, indicating the
+ * voicemail access PIN scrambled during the auto provisioning process. The user is expected to
+ * reset their PIN if this value is not {@code null}.
+ */
+ private static final String EXTRA_VOICEMAIL_SCRAMBLED_PIN_STRING =
+ "android.telephony.extra.VOICEMAIL_SCRAMBLED_PIN_STRING";
+
+ private static final String PRE_O_MIGRATION_FINISHED = "pre_o_migration_finished";
+
+ @WorkerThread
+ public static void migrate(Context context, PhoneAccountHandle phoneAccountHandle) {
+ Assert.isNotMainThread();
+ VisualVoicemailPreferences preferences =
+ new VisualVoicemailPreferences(context, phoneAccountHandle);
+ if (preferences.getBoolean(PRE_O_MIGRATION_FINISHED, false)) {
+ VvmLog.i("PreOMigrationHandler", phoneAccountHandle + " already migrated");
+ return;
+ }
+ VvmLog.i("PreOMigrationHandler", "migrating " + phoneAccountHandle);
+ migrateSettings(context, phoneAccountHandle);
+
+ preferences.edit().putBoolean(PRE_O_MIGRATION_FINISHED, true).apply();
+ }
+
+ private static void migrateSettings(Context context, PhoneAccountHandle phoneAccountHandle) {
+ VvmLog.i("PreOMigrationHandler.migrateSettings", "migrating settings");
+ TelephonyManager telephonyManager =
+ context
+ .getSystemService(TelephonyManager.class)
+ .createForPhoneAccountHandle(phoneAccountHandle);
+ if (telephonyManager == null) {
+ VvmLog.e("PreOMigrationHandler.migrateSettings", "invalid PhoneAccountHandle");
+ return;
+ }
+ Bundle legacySettings;
+ try {
+ Method method = TelephonyManager.class.getMethod(METHOD_GET_VISUAL_VOICEMAIL_SETTINGS);
+ legacySettings = (Bundle) method.invoke(telephonyManager);
+ } catch (ReflectiveOperationException | ClassCastException e) {
+ VvmLog.i("PreOMigrationHandler.migrateSettings", "unable to retrieve settings from system");
+ return;
+ }
+
+ if (legacySettings.containsKey(EXTRA_VISUAL_VOICEMAIL_ENABLED_BY_USER_BOOL)) {
+ boolean enabled = legacySettings.getBoolean(EXTRA_VISUAL_VOICEMAIL_ENABLED_BY_USER_BOOL);
+ VvmLog.i("PreOMigrationHandler.migrateSettings", "setting VVM enabled to " + enabled);
+ VisualVoicemailSettingsUtil.setEnabled(context, phoneAccountHandle, enabled);
+ }
+
+ if (legacySettings.containsKey(EXTRA_VOICEMAIL_SCRAMBLED_PIN_STRING)) {
+ String scrambledPin = legacySettings.getString(EXTRA_VOICEMAIL_SCRAMBLED_PIN_STRING);
+ if (!TextUtils.isEmpty(scrambledPin)) {
+ VvmLog.i("PreOMigrationHandler.migrateSettings", "migrating scrambled PIN");
+ VoicemailChangePinActivity.setDefaultOldPIN(context, phoneAccountHandle, scrambledPin);
+ }
+ }
+ }
+}
diff --git a/java/com/android/voicemail/impl/StatusCheckTask.java b/java/com/android/voicemail/impl/StatusCheckTask.java
index 7699e9848..e59eb3b37 100644
--- a/java/com/android/voicemail/impl/StatusCheckTask.java
+++ b/java/com/android/voicemail/impl/StatusCheckTask.java
@@ -51,7 +51,7 @@ public class StatusCheckTask extends BaseTask {
public static void start(Context context, PhoneAccountHandle phoneAccountHandle) {
Intent intent = BaseTask.createIntent(context, StatusCheckTask.class, phoneAccountHandle);
- context.startService(intent);
+ context.sendBroadcast(intent);
}
@Override
diff --git a/java/com/android/voicemail/impl/TelephonyMangerCompat.java b/java/com/android/voicemail/impl/TelephonyMangerCompat.java
index 353cd69e3..404b4d6ca 100644
--- a/java/com/android/voicemail/impl/TelephonyMangerCompat.java
+++ b/java/com/android/voicemail/impl/TelephonyMangerCompat.java
@@ -16,24 +16,36 @@
package com.android.voicemail.impl;
+import android.app.PendingIntent;
+import android.content.Context;
import android.telecom.PhoneAccountHandle;
import android.telephony.TelephonyManager;
+import android.telephony.VisualVoicemailService;
+import android.telephony.VisualVoicemailSmsFilterSettings;
+import com.android.dialer.common.LogUtil;
import java.lang.reflect.Method;
/** Handles {@link TelephonyManager} API changes in experimental SDK */
public class TelephonyMangerCompat {
-
- private static final String GET_VISUAL_VOICEMAIL_PACKGE_NAME = "getVisualVoicemailPackageName";
-
- /**
- * Changed from getVisualVoicemailPackageName(PhoneAccountHandle) to
- * getVisualVoicemailPackageName()
- */
- public static String getVisualVoicemailPackageName(TelephonyManager telephonyManager) {
+ /** Moved from VisualVoicemailService to TelephonyManager */
+ public static String sendVisualVoicemailSms(
+ Context context,
+ PhoneAccountHandle phoneAccountHandle,
+ String number,
+ int port,
+ String text,
+ PendingIntent sentIntent) {
try {
- Method method = TelephonyManager.class.getMethod(GET_VISUAL_VOICEMAIL_PACKGE_NAME);
+ Method method =
+ TelephonyManager.class.getMethod(
+ "sendVisualVoicemailSms", String.class, int.class, String.class, PendingIntent.class);
try {
- return (String) method.invoke(telephonyManager);
+ LogUtil.i("TelephonyMangerCompat.sendVisualVoicemailSms", "using TelephonyManager");
+ TelephonyManager telephonyManager =
+ context
+ .getSystemService(TelephonyManager.class)
+ .createForPhoneAccountHandle(phoneAccountHandle);
+ return (String) method.invoke(telephonyManager, number, port, text, sentIntent);
} catch (ReflectiveOperationException e) {
throw new RuntimeException(e);
}
@@ -42,15 +54,61 @@ public class TelephonyMangerCompat {
}
try {
+ LogUtil.i("TelephonyMangerCompat.sendVisualVoicemailSms", "using VisualVoicemailService");
+ Method method =
+ VisualVoicemailService.class.getMethod(
+ "sendVisualVoicemailSms",
+ Context.class,
+ PhoneAccountHandle.class,
+ String.class,
+ short.class,
+ String.class,
+ PendingIntent.class);
+ return (String)
+ method.invoke(null, context, phoneAccountHandle, number, (short) port, text, sentIntent);
+
+ } catch (ReflectiveOperationException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /** Moved from VisualVoicemailService to TelephonyManager */
+ public static String setVisualVoicemailSmsFilterSettings(
+ Context context,
+ PhoneAccountHandle phoneAccountHandle,
+ VisualVoicemailSmsFilterSettings settings) {
+ try {
Method method =
TelephonyManager.class.getMethod(
- GET_VISUAL_VOICEMAIL_PACKGE_NAME, PhoneAccountHandle.class);
+ "setVisualVoicemailSmsFilterSettings", VisualVoicemailSmsFilterSettings.class);
try {
- return (String) method.invoke(telephonyManager, (Object) null);
+ LogUtil.i(
+ "TelephonyMangerCompat.setVisualVoicemailSmsFilterSettings", "using TelephonyManager");
+ TelephonyManager telephonyManager =
+ context
+ .getSystemService(TelephonyManager.class)
+ .createForPhoneAccountHandle(phoneAccountHandle);
+ return (String) method.invoke(telephonyManager, settings);
} catch (ReflectiveOperationException e) {
throw new RuntimeException(e);
}
} catch (NoSuchMethodException e) {
+ // Do nothing, try the next version.
+ }
+
+ try {
+ LogUtil.i(
+ "TelephonyMangerCompat.setVisualVoicemailSmsFilterSettings",
+ "using VisualVoicemailService");
+ Method method =
+ VisualVoicemailService.class.getMethod(
+ "setSmsFilterSettings",
+ Context.class,
+ PhoneAccountHandle.class,
+ VisualVoicemailSmsFilterSettings.class);
+ return (String) method.invoke(null, context, phoneAccountHandle, settings);
+
+ } catch (ReflectiveOperationException e) {
throw new RuntimeException(e);
}
}
diff --git a/java/com/android/voicemail/impl/VoicemailClientImpl.java b/java/com/android/voicemail/impl/VoicemailClientImpl.java
index 7747b2486..83c0523bf 100644
--- a/java/com/android/voicemail/impl/VoicemailClientImpl.java
+++ b/java/com/android/voicemail/impl/VoicemailClientImpl.java
@@ -130,8 +130,8 @@ public class VoicemailClientImpl implements VoicemailClient {
@Override
public void appendOmtpVoicemailSelectionClause(
Context context, StringBuilder where, List<String> selectionArgs) {
- TelephonyManager telephonyManager = context.getSystemService(TelephonyManager.class);
- String omtpSource = TelephonyMangerCompat.getVisualVoicemailPackageName(telephonyManager);
+ String omtpSource =
+ context.getSystemService(TelephonyManager.class).getVisualVoicemailPackageName();
if (where.length() != 0) {
where.append(" AND ");
}
@@ -162,8 +162,8 @@ public class VoicemailClientImpl implements VoicemailClient {
@Override
public void appendOmtpVoicemailStatusSelectionClause(
Context context, StringBuilder where, List<String> selectionArgs) {
- TelephonyManager telephonyManager = context.getSystemService(TelephonyManager.class);
- String omtpSource = TelephonyMangerCompat.getVisualVoicemailPackageName(telephonyManager);
+ String omtpSource =
+ context.getSystemService(TelephonyManager.class).getVisualVoicemailPackageName();
if (where.length() != 0) {
where.append(" AND ");
}
diff --git a/java/com/android/voicemail/impl/VvmPackageInstallHandler.java b/java/com/android/voicemail/impl/VvmPackageInstallHandler.java
new file mode 100644
index 000000000..8d1fb2289
--- /dev/null
+++ b/java/com/android/voicemail/impl/VvmPackageInstallHandler.java
@@ -0,0 +1,167 @@
+/*
+ * Copyright (C) 2017 The Android Open Source 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.voicemail.impl;
+
+import android.annotation.SuppressLint;
+import android.annotation.TargetApi;
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.content.pm.ChangedPackages;
+import android.os.Build.VERSION_CODES;
+import android.preference.PreferenceManager;
+import android.provider.Settings.Global;
+import android.telecom.PhoneAccountHandle;
+import android.telecom.TelecomManager;
+import android.util.ArraySet;
+import com.android.dialer.common.PackageUtils;
+import com.android.voicemail.impl.settings.VisualVoicemailSettingsUtil;
+import java.util.Set;
+
+/**
+ * When a new package is installed, check if it matches any of the vvm carrier apps of the currently
+ * enabled dialer VVM sources. The dialer VVM client will be disabled upon carrier VVM app
+ * installation, unless it was explicitly enabled by the user.
+ *
+ * <p>The ACTION_PACKAGE_ADDED broadcast can no longer be received. (see
+ * https://developer.android.com/preview/features/background.html#broadcasts) New apps are scanned
+ * when a VVM SMS is received instead, as it can be a result of the carrier VVM app trying to run
+ * activation.
+ */
+@SuppressLint("AndroidApiChecker") // forEach
+@TargetApi(VERSION_CODES.O)
+public final class VvmPackageInstallHandler {
+
+ private static final String LAST_BOOT_COUNT =
+ "com.android.voicemail.impl.VvmPackageInstallHandler.LAST_BOOT_COUNT";
+
+ private static final String CHANGED_PACKAGES_SEQUENCE_NUMBER =
+ "com.android.voicemail.impl.VvmPackageInstallHandler.CHANGED_PACKAGES_SEQUENCE_NUMBER";
+
+ private static final String INSTALLED_CARRIER_PACKAGES =
+ "com.android.voicemail.impl.VvmPackageInstallHandler.INSTALLED_CARRIER_PACKAGES";
+
+ /**
+ * Perform a scan of all changed apps since the last invocation to see if the carrier VVM app is
+ * installed.
+ */
+ public static void scanNewPackages(Context context) {
+ SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
+ int sequenceNumber = sharedPreferences.getInt(CHANGED_PACKAGES_SEQUENCE_NUMBER, 0);
+ int lastBootCount = sharedPreferences.getInt(LAST_BOOT_COUNT, 0);
+ int bootCount = Global.getInt(context.getContentResolver(), Global.BOOT_COUNT, 0);
+ if (lastBootCount != bootCount) {
+ VvmLog.i(
+ "VvmPackageInstallHandler.scanNewPackages", "reboot detected, resetting sequence number");
+ sequenceNumber = 0;
+ sharedPreferences.edit().putInt(LAST_BOOT_COUNT, bootCount).apply();
+ }
+
+ ChangedPackages changedPackages =
+ context.getPackageManager().getChangedPackages(sequenceNumber);
+ if (changedPackages == null) {
+ VvmLog.i("VvmPackageInstallHandler.scanNewPackages", "no package has changed");
+ return;
+ }
+ sharedPreferences
+ .edit()
+ .putInt(CHANGED_PACKAGES_SEQUENCE_NUMBER, changedPackages.getSequenceNumber())
+ .apply();
+
+ Set<String> installedPackages =
+ sharedPreferences.getStringSet(INSTALLED_CARRIER_PACKAGES, new ArraySet<>());
+
+ Set<String> monitoredPackage = getMonitoredPackages(context);
+ installedPackages.removeIf((packageName) -> !monitoredPackage.contains(packageName));
+
+ for (String packageName : changedPackages.getPackageNames()) {
+ if (!monitoredPackage.contains(packageName)) {
+ continue;
+ }
+ if (PackageUtils.isPackageEnabled(packageName, context)) {
+ if (!installedPackages.contains(packageName)) {
+ VvmLog.i("VvmPackageInstallHandler.scanNewPackages", "new package found: " + packageName);
+ installedPackages.add(packageName);
+ handlePackageInstalled(context, packageName);
+ }
+ } else {
+ installedPackages.remove(packageName);
+ }
+ }
+ sharedPreferences.edit().putStringSet(INSTALLED_CARRIER_PACKAGES, installedPackages).apply();
+ }
+
+ private static Set<String> getMonitoredPackages(Context context) {
+ Set<String> result = new ArraySet<>();
+ context
+ .getSystemService(TelecomManager.class)
+ .getCallCapablePhoneAccounts()
+ .forEach(
+ (phoneAccountHandle -> {
+ OmtpVvmCarrierConfigHelper carrierConfigHelper =
+ new OmtpVvmCarrierConfigHelper(context, phoneAccountHandle);
+ if (!carrierConfigHelper.isValid()) {
+ return;
+ }
+ if (carrierConfigHelper.getCarrierVvmPackageNames() == null) {
+ return;
+ }
+ result.addAll(carrierConfigHelper.getCarrierVvmPackageNames());
+ }));
+
+ return result;
+ };
+
+ /**
+ * Iterates through all phone account and disable VVM on a account if {@code packageName} is
+ * listed as a carrier VVM package.
+ */
+ private static void handlePackageInstalled(Context context, String packageName) {
+ // This get called every time an app is installed and will be noisy. Don't log until the app
+ // is identified as a carrier VVM app.
+ for (PhoneAccountHandle phoneAccount :
+ context.getSystemService(TelecomManager.class).getCallCapablePhoneAccounts()) {
+ OmtpVvmCarrierConfigHelper carrierConfigHelper =
+ new OmtpVvmCarrierConfigHelper(context, phoneAccount);
+ if (!carrierConfigHelper.isValid()) {
+ continue;
+ }
+ if (carrierConfigHelper.getCarrierVvmPackageNames() == null) {
+ continue;
+ }
+ if (!carrierConfigHelper.getCarrierVvmPackageNames().contains(packageName)) {
+ continue;
+ }
+
+ VvmLog.i("VvmPackageInstallHandler.handlePackageInstalled", "Carrier app installed");
+ if (VisualVoicemailSettingsUtil.isEnabledUserSet(context, phoneAccount)) {
+ // Skip the check if this voicemail source's setting is overridden by the user.
+ VvmLog.i(
+ "VvmPackageInstallHandler.handlePackageInstalled",
+ "VVM enabled by user, not disabling");
+ continue;
+ }
+
+ // Force deactivate the client. The user can re-enable it in the settings.
+ // There is no need to update the settings for deactivation. At this point, if the
+ // default value is used it should be false because a carrier package is present.
+ VvmLog.i(
+ "VvmPackageInstallHandler.handlePackageInstalled",
+ "Carrier VVM package installed, disabling system VVM client");
+ VisualVoicemailSettingsUtil.setEnabled(context, phoneAccount, false);
+ }
+ }
+}
diff --git a/java/com/android/voicemail/impl/imap/ImapHelper.java b/java/com/android/voicemail/impl/imap/ImapHelper.java
index 6aa415811..f1bc8b221 100644
--- a/java/com/android/voicemail/impl/imap/ImapHelper.java
+++ b/java/com/android/voicemail/impl/imap/ImapHelper.java
@@ -19,7 +19,7 @@ import android.content.Context;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkInfo;
-import android.provider.VoicemailContract;
+import android.support.annotation.Nullable;
import android.telecom.PhoneAccountHandle;
import android.util.Base64;
import com.android.voicemail.impl.OmtpConstants;
@@ -44,6 +44,7 @@ import com.android.voicemail.impl.mail.TempDirectory;
import com.android.voicemail.impl.mail.internet.MimeMessage;
import com.android.voicemail.impl.mail.store.ImapConnection;
import com.android.voicemail.impl.mail.store.ImapFolder;
+import com.android.voicemail.impl.mail.store.ImapFolder.Quota;
import com.android.voicemail.impl.mail.store.ImapStore;
import com.android.voicemail.impl.mail.store.imap.ImapConstants;
import com.android.voicemail.impl.mail.store.imap.ImapResponse;
@@ -73,11 +74,6 @@ public class ImapHelper implements Closeable {
private final Editor mStatus;
VisualVoicemailPreferences mPrefs;
- private static final String PREF_KEY_QUOTA_OCCUPIED = "quota_occupied_";
- private static final String PREF_KEY_QUOTA_TOTAL = "quota_total_";
-
- private int mQuotaOccupied;
- private int mQuotaTotal;
private final OmtpVvmCarrierConfigHelper mConfig;
@@ -90,10 +86,7 @@ public class ImapHelper implements Closeable {
}
public ImapHelper(
- Context context,
- PhoneAccountHandle phoneAccount,
- Network network,
- Editor status)
+ Context context, PhoneAccountHandle phoneAccount, Network network, Editor status)
throws InitializingException {
this(
context,
@@ -139,10 +132,6 @@ public class ImapHelper implements Closeable {
LogUtils.w(TAG, "Could not parse port number");
throw new InitializingException("cannot initialize ImapHelper:" + e.toString());
}
-
- mQuotaOccupied =
- mPrefs.getInt(PREF_KEY_QUOTA_OCCUPIED, VoicemailContract.Status.QUOTA_UNAVAILABLE);
- mQuotaTotal = mPrefs.getInt(PREF_KEY_QUOTA_TOTAL, VoicemailContract.Status.QUOTA_UNAVAILABLE);
}
@Override
@@ -475,12 +464,22 @@ public class ImapHelper implements Closeable {
}
}
- public int getOccuupiedQuota() {
- return mQuotaOccupied;
- }
-
- public int getTotalQuota() {
- return mQuotaTotal;
+ @Nullable
+ public Quota getQuota() {
+ try {
+ mFolder = openImapFolder(ImapFolder.MODE_READ_ONLY);
+ if (mFolder == null) {
+ // This means we were unable to successfully open the folder.
+ LogUtils.e(TAG, "Unable to open folder");
+ return null;
+ }
+ return mFolder.getQuota();
+ } catch (MessagingException e) {
+ LogUtils.e(TAG, e, "Messaging Exception");
+ return null;
+ } finally {
+ closeImapFolder();
+ }
}
private void updateQuota(ImapFolder folder) throws MessagingException {
@@ -489,21 +488,19 @@ public class ImapHelper implements Closeable {
private void setQuota(ImapFolder.Quota quota) {
if (quota == null) {
+ LogUtils.i(TAG, "quota was null");
return;
}
- if (quota.occupied == mQuotaOccupied && quota.total == mQuotaTotal) {
- VvmLog.v(TAG, "Quota hasn't changed");
- return;
- }
- mQuotaOccupied = quota.occupied;
- mQuotaTotal = quota.total;
- VoicemailStatus.edit(mContext, mPhoneAccount).setQuota(mQuotaOccupied, mQuotaTotal).apply();
- mPrefs
- .edit()
- .putInt(PREF_KEY_QUOTA_OCCUPIED, mQuotaOccupied)
- .putInt(PREF_KEY_QUOTA_TOTAL, mQuotaTotal)
- .apply();
- VvmLog.v(TAG, "Quota changed to " + mQuotaOccupied + "/" + mQuotaTotal);
+
+ LogUtils.i(
+ TAG,
+ "Updating Voicemail status table with"
+ + " quota occupied: "
+ + quota.occupied
+ + " new quota total:"
+ + quota.total);
+ VoicemailStatus.edit(mContext, mPhoneAccount).setQuota(quota.occupied, quota.total).apply();
+ LogUtils.i(TAG, "Updated quota occupied and total");
}
/**
diff --git a/java/com/android/voicemail/impl/protocol/Vvm3Subscriber.java b/java/com/android/voicemail/impl/protocol/Vvm3Subscriber.java
index c8a74c8d5..1cdbbfbca 100644
--- a/java/com/android/voicemail/impl/protocol/Vvm3Subscriber.java
+++ b/java/com/android/voicemail/impl/protocol/Vvm3Subscriber.java
@@ -17,10 +17,13 @@
package com.android.voicemail.impl.protocol;
import android.annotation.TargetApi;
+import android.content.Context;
import android.net.Network;
import android.os.Build;
import android.os.Build.VERSION_CODES;
import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.VisibleForTesting;
import android.support.annotation.WorkerThread;
import android.telecom.PhoneAccountHandle;
import android.telephony.TelephonyManager;
@@ -28,6 +31,7 @@ import android.text.Html;
import android.text.Spanned;
import android.text.style.URLSpan;
import android.util.ArrayMap;
+import com.android.dialer.common.ConfigProviderBindings;
import com.android.voicemail.impl.ActivationTask;
import com.android.voicemail.impl.Assert;
import com.android.voicemail.impl.OmtpEvents;
@@ -49,6 +53,8 @@ import java.net.CookieHandler;
import java.net.CookieManager;
import java.net.HttpURLConnection;
import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Random;
@@ -57,6 +63,8 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import org.json.JSONArray;
+import org.json.JSONException;
/**
* Class to subscribe to basic VVM3 visual voicemail, for example, Verizon. Subscription is required
@@ -111,7 +119,15 @@ public class Vvm3Subscriber {
private static final String SPG_LANGUAGE_PARAM = "SPG_LANGUAGE_PARAM";
private static final String SPG_LANGUAGE_EN = "ENGLISH";
- private static final String BASIC_SUBSCRIBE_LINK_TEXT = "Subscribe to Basic Visual Voice Mail";
+ @VisibleForTesting
+ static final String VVM3_SUBSCRIBE_LINK_PATTERNS_JSON_ARRAY =
+ "vvm3_subscribe_link_pattern_json_array";
+
+ private static final String VVM3_SUBSCRIBE_LINK_DEFAULT_PATTERNS =
+ "["
+ + "\"(?i)Subscribe to Basic Visual Voice Mail\","
+ + "\"(?i)Subscribe to Basic Visual Voicemail\""
+ + "]";
private static final int REQUEST_TIMEOUT_SECONDS = 30;
@@ -125,7 +141,8 @@ public class Vvm3Subscriber {
private RequestQueue mRequestQueue;
- private static class ProvisioningException extends Exception {
+ @VisibleForTesting
+ static class ProvisioningException extends Exception {
public ProvisioningException(String message) {
super(message);
@@ -188,7 +205,8 @@ public class Vvm3Subscriber {
try {
String gatewayUrl = getSelfProvisioningGateway();
String selfProvisionResponse = getSelfProvisionResponse(gatewayUrl);
- String subscribeLink = findSubscribeLink(selfProvisionResponse);
+ String subscribeLink =
+ findSubscribeLink(getSubscribeLinkPatterns(mHelper.getContext()), selfProvisionResponse);
clickSubscribeLink(subscribeLink);
} catch (ProvisioningException e) {
VvmLog.e(TAG, e.toString());
@@ -291,14 +309,40 @@ public class Vvm3Subscriber {
}
}
- private String findSubscribeLink(String response) throws ProvisioningException {
+ @VisibleForTesting
+ static List<Pattern> getSubscribeLinkPatterns(Context context) {
+ String patternsJsonString =
+ ConfigProviderBindings.get(context)
+ .getString(
+ VVM3_SUBSCRIBE_LINK_PATTERNS_JSON_ARRAY, VVM3_SUBSCRIBE_LINK_DEFAULT_PATTERNS);
+ List<Pattern> patterns = new ArrayList<>();
+ try {
+ JSONArray patternsArray = new JSONArray(patternsJsonString);
+ for (int i = 0; i < patternsArray.length(); i++) {
+ patterns.add(Pattern.compile(patternsArray.getString(i)));
+ }
+ } catch (JSONException e) {
+ throw new IllegalArgumentException("Unable to parse patterns" + e);
+ }
+ return patterns;
+ }
+
+ @VisibleForTesting
+ static String findSubscribeLink(@NonNull List<Pattern> patterns, String response)
+ throws ProvisioningException {
+ if (patterns.isEmpty()) {
+ throw new IllegalArgumentException("empty patterns");
+ }
Spanned doc = Html.fromHtml(response, Html.FROM_HTML_MODE_LEGACY);
URLSpan[] spans = doc.getSpans(0, doc.length(), URLSpan.class);
StringBuilder fulltext = new StringBuilder();
+
for (URLSpan span : spans) {
String text = doc.subSequence(doc.getSpanStart(span), doc.getSpanEnd(span)).toString();
- if (BASIC_SUBSCRIBE_LINK_TEXT.equals(text)) {
- return span.getURL();
+ for (Pattern pattern : patterns) {
+ if (pattern.matcher(text).matches()) {
+ return span.getURL();
+ }
}
fulltext.append(text);
}
diff --git a/java/com/android/voicemail/impl/res/values-af/strings.xml b/java/com/android/voicemail/impl/res/values-af/strings.xml
index 71263217f..a84553480 100644
--- a/java/com/android/voicemail/impl/res/values-af/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-af/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Stemboodskap (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Stemboodskap"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Vibreer"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Vibreer"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Klank"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Gevorderde instellings"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Visuele stemboodskap"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Ekstra rugsteun en berging"</string>
diff --git a/java/com/android/voicemail/impl/res/values-am/strings.xml b/java/com/android/voicemail/impl/res/values-am/strings.xml
index d350bbd94..2f0719a0b 100644
--- a/java/com/android/voicemail/impl/res/values-am/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-am/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"የድምፅ መልዕክት (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"የድምፅ መልዕክት"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"ንዘር"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"ንዘር"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"ድምፅ"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"የላቁ ቅንብሮች"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"ምስላዊ የድምፅ መልዕክት"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"ተጨማሪ ምትኬ እና ማከማቻ"</string>
diff --git a/java/com/android/voicemail/impl/res/values-ar/strings.xml b/java/com/android/voicemail/impl/res/values-ar/strings.xml
index 679dcce9c..f46ebe1be 100644
--- a/java/com/android/voicemail/impl/res/values-ar/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ar/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"البريد الصوتي (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"البريد الصوتي"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"اهتزاز"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"اهتزاز"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"صوت"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"الإعدادات المتقدمة"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"بريد صوتي مرئي"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"نسخة احتياطية وسعة تخزين إضافية"</string>
diff --git a/java/com/android/voicemail/impl/res/values-az/strings.xml b/java/com/android/voicemail/impl/res/values-az/strings.xml
index 87b4c0692..ebb85dce8 100644
--- a/java/com/android/voicemail/impl/res/values-az/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-az/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Səsli e-poçt (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Səsli e-poçt"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Vibrasiya"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Vibrasiya"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Səs"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Qabaqcıl Ayarlar"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Görünən Səsli e-poçt"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Əlavə yedəkləmə və yaddaş"</string>
diff --git a/java/com/android/voicemail/impl/res/values-b+sr+Latn/strings.xml b/java/com/android/voicemail/impl/res/values-b+sr+Latn/strings.xml
index 193913081..41294300b 100644
--- a/java/com/android/voicemail/impl/res/values-b+sr+Latn/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-b+sr+Latn/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Govorna pošta (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Govorna pošta"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Vibracija"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Vibracija"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Zvuk"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Napredna podešavanja"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Vizuelna govorna pošta"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Dodatne rezervne kopije i prostor"</string>
diff --git a/java/com/android/voicemail/impl/res/values-be/strings.xml b/java/com/android/voicemail/impl/res/values-be/strings.xml
index 874b4791a..ffb7caba0 100644
--- a/java/com/android/voicemail/impl/res/values-be/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-be/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Галасавая пошта (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Галасавая пошта"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Вібрацыя"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Вібрацыя"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Гук"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Пашыраныя налады"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Візуальная галасавая пошта"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Дадатковае рэзервовае капір. і сховішча"</string>
diff --git a/java/com/android/voicemail/impl/res/values-bg/strings.xml b/java/com/android/voicemail/impl/res/values-bg/strings.xml
index f987015e9..d3a66a41c 100644
--- a/java/com/android/voicemail/impl/res/values-bg/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-bg/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Гласова поща (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Гласова поща"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Вибриране"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Вибриране"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Звук"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Разширени настройки"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Визуална гласова поща"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Допълнителни резервни копия и хранилище"</string>
diff --git a/java/com/android/voicemail/impl/res/values-bn/strings.xml b/java/com/android/voicemail/impl/res/values-bn/strings.xml
index 699576d41..636f332cb 100644
--- a/java/com/android/voicemail/impl/res/values-bn/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-bn/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"ভয়েসমেল (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"ভয়েসমেল"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"কম্পন"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"কম্পন"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"শব্দ"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"উন্নত সেটিংস"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"ভিজ্যুয়াল ভয়েসমেল"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"অতিরিক্ত ব্যাক আপ এবং সঞ্চয়স্থান"</string>
diff --git a/java/com/android/voicemail/impl/res/values-bs/strings.xml b/java/com/android/voicemail/impl/res/values-bs/strings.xml
index 2c8cc7682..09b9ab6d1 100644
--- a/java/com/android/voicemail/impl/res/values-bs/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-bs/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Govorna pošta (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Govorna pošta"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Vibracija"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Vibracija"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Zvuk"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Napredne postavke"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Vizuelna govorna pošta"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Dodatna sigurnosna kopija i pohrana"</string>
diff --git a/java/com/android/voicemail/impl/res/values-ca/strings.xml b/java/com/android/voicemail/impl/res/values-ca/strings.xml
index b6525d02b..e6c3bc730 100644
--- a/java/com/android/voicemail/impl/res/values-ca/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ca/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Bústia de veu (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Bústia de veu"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Vibra"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Vibra"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"So"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Configuració avançada"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Bústia de veu visual"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Còpia de seguretat addicional i emmagatz."</string>
diff --git a/java/com/android/voicemail/impl/res/values-cs/strings.xml b/java/com/android/voicemail/impl/res/values-cs/strings.xml
index 987f9de01..621c4a8b1 100644
--- a/java/com/android/voicemail/impl/res/values-cs/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-cs/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Hlasová schránka (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Hlasová schránka"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Vibrace"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Vibrace"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Zvuk"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Pokročilá nastavení"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Vizuální hlasová schránka"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Další zálohování a úložiště"</string>
diff --git a/java/com/android/voicemail/impl/res/values-da/strings.xml b/java/com/android/voicemail/impl/res/values-da/strings.xml
index 70ecb3699..e9f0404d2 100644
--- a/java/com/android/voicemail/impl/res/values-da/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-da/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Telefonsvarer (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Telefonsvarer"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Vibrer"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Vibrer"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Lyd"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Avancerede indstillinger"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Visuel telefonsvarer"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Ekstra sikkerhedskopiering og lagerplads"</string>
diff --git a/java/com/android/voicemail/impl/res/values-de/strings.xml b/java/com/android/voicemail/impl/res/values-de/strings.xml
index 2746629e9..c4cc75b37 100644
--- a/java/com/android/voicemail/impl/res/values-de/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-de/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Mailbox (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Mailbox"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Vibrieren"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Vibrieren"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Ton"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Erweiterte Einstellungen"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Visuelle Mailbox"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Zusätzliche Sicherung und mehr Speicher"</string>
diff --git a/java/com/android/voicemail/impl/res/values-el/strings.xml b/java/com/android/voicemail/impl/res/values-el/strings.xml
index e9f9835c6..5456c4875 100644
--- a/java/com/android/voicemail/impl/res/values-el/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-el/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Αυτόματος τηλεφωνητής (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Αυτόματος τηλεφωνητής"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Δόνηση"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Δόνηση"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Ήχος"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Σύνθετες ρυθμίσεις"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Οπτικός αυτόματος τηλεφωνητής"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Επιπλέον αντίγραφα ασφ. και αποθήκευση"</string>
diff --git a/java/com/android/voicemail/impl/res/values-en-rAU/strings.xml b/java/com/android/voicemail/impl/res/values-en-rAU/strings.xml
index ec08faf22..dba1f1624 100644
--- a/java/com/android/voicemail/impl/res/values-en-rAU/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-en-rAU/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Voicemail (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Voicemail"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Vibrate"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Vibrate"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Sound"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Advanced settings"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Visual voicemail"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Extra backup and storage"</string>
diff --git a/java/com/android/voicemail/impl/res/values-en-rGB/strings.xml b/java/com/android/voicemail/impl/res/values-en-rGB/strings.xml
index ec08faf22..dba1f1624 100644
--- a/java/com/android/voicemail/impl/res/values-en-rGB/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-en-rGB/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Voicemail (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Voicemail"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Vibrate"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Vibrate"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Sound"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Advanced settings"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Visual voicemail"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Extra backup and storage"</string>
diff --git a/java/com/android/voicemail/impl/res/values-en-rIN/strings.xml b/java/com/android/voicemail/impl/res/values-en-rIN/strings.xml
index ec08faf22..dba1f1624 100644
--- a/java/com/android/voicemail/impl/res/values-en-rIN/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-en-rIN/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Voicemail (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Voicemail"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Vibrate"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Vibrate"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Sound"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Advanced settings"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Visual voicemail"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Extra backup and storage"</string>
diff --git a/java/com/android/voicemail/impl/res/values-es-rUS/strings.xml b/java/com/android/voicemail/impl/res/values-es-rUS/strings.xml
index fcd9cc7c3..86cb7e934 100644
--- a/java/com/android/voicemail/impl/res/values-es-rUS/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-es-rUS/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Buzón de voz (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Buzón de voz"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Vibrar"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Vibrar"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Sonido"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Configuración avanzada"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Buzón de voz visual"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Copia de seguridad y almacenamiento adicional"</string>
diff --git a/java/com/android/voicemail/impl/res/values-es/strings.xml b/java/com/android/voicemail/impl/res/values-es/strings.xml
index f20ebc5cf..29863d177 100644
--- a/java/com/android/voicemail/impl/res/values-es/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-es/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Buzón de voz (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Buzón de voz"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Vibración"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Vibrar"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Sonido"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Configuración avanzada"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Buzón de voz visual"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Copias de seguridad y almacenamiento extra"</string>
diff --git a/java/com/android/voicemail/impl/res/values-et/strings.xml b/java/com/android/voicemail/impl/res/values-et/strings.xml
index dc7f685ba..6fcf23392 100644
--- a/java/com/android/voicemail/impl/res/values-et/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-et/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Kõnepost (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Kõnepost"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Vibreerimine"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Vibreerimine"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Heli"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Täpsemad seaded"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Visuaalne kõnepost"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Lisavarundus ja -salvestusruum"</string>
diff --git a/java/com/android/voicemail/impl/res/values-eu/strings.xml b/java/com/android/voicemail/impl/res/values-eu/strings.xml
index 8a3bd640a..293dd1c45 100644
--- a/java/com/android/voicemail/impl/res/values-eu/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-eu/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Erantzungailua (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Erantzungailua"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Dardara"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Dardara"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Soinua"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Ezarpen aurreratuak"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Erantzungailu bisuala"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Babeskopiak eta edukia gordetzeko tokia"</string>
diff --git a/java/com/android/voicemail/impl/res/values-fa/strings.xml b/java/com/android/voicemail/impl/res/values-fa/strings.xml
index 0b5d51333..cc04d98f2 100644
--- a/java/com/android/voicemail/impl/res/values-fa/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-fa/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"پست صوتی (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"پست صوتی"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"لرزش"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"لرزش"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"صدا"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"تنظیمات پیشرفته"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"پست صوتی تصویری"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"پشتیبان‌گیری و فضای ذخیره‌سازی اضافی"</string>
diff --git a/java/com/android/voicemail/impl/res/values-fi/strings.xml b/java/com/android/voicemail/impl/res/values-fi/strings.xml
index c20d3e481..0e1cda523 100644
--- a/java/com/android/voicemail/impl/res/values-fi/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-fi/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Vastaaja (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Vastaaja"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Värinä"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Värinä"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Ääni"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Lisäasetukset"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Visuaalinen vastaaja"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Lisävarmuuskopiointi ja ‑tallennustila"</string>
diff --git a/java/com/android/voicemail/impl/res/values-fr-rCA/strings.xml b/java/com/android/voicemail/impl/res/values-fr-rCA/strings.xml
index 6bbd1341f..f570fa415 100644
--- a/java/com/android/voicemail/impl/res/values-fr-rCA/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-fr-rCA/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Messagerie vocale (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Messagerie vocale"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Vibreur"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Vibreur"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Son"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Paramètres avancés"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Messagerie vocale visuelle"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Espace suppl. de sauvegarde et stockage"</string>
diff --git a/java/com/android/voicemail/impl/res/values-fr/strings.xml b/java/com/android/voicemail/impl/res/values-fr/strings.xml
index dc21c76d3..323decf84 100644
--- a/java/com/android/voicemail/impl/res/values-fr/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-fr/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Messagerie vocale (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Messagerie vocale"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Vibreur"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Vibreur"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Sonnerie"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Paramètres avancés"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Messagerie vocale visuelle"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Espace suppl. de sauvegarde et stockage"</string>
diff --git a/java/com/android/voicemail/impl/res/values-gl/strings.xml b/java/com/android/voicemail/impl/res/values-gl/strings.xml
index 81f6e679a..b6ff512d2 100644
--- a/java/com/android/voicemail/impl/res/values-gl/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-gl/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Correo de voz (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Correo de voz"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Vibración"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Vibración"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Son"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Configuración avanzada"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Correo de voz visual"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Copia de seguranza e almacenamento extra"</string>
diff --git a/java/com/android/voicemail/impl/res/values-gu/strings.xml b/java/com/android/voicemail/impl/res/values-gu/strings.xml
index 3e8948d19..684bd40fc 100644
--- a/java/com/android/voicemail/impl/res/values-gu/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-gu/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"વૉઇસમેઇલ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"વૉઇસમેઇલ"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"વાઇબ્રેટ"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"વાઇબ્રેટ"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"ધ્વનિ"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"વિગતવાર સેટિંગ્સ"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"વિઝ્યુઅલ વૉઇસમેઇલ"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"અતિરિક્ત બેકઅપ અને સ્ટોરેજ"</string>
diff --git a/java/com/android/voicemail/impl/res/values-hi/strings.xml b/java/com/android/voicemail/impl/res/values-hi/strings.xml
index 8daa3e3d7..3cb394f46 100644
--- a/java/com/android/voicemail/impl/res/values-hi/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-hi/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"वॉइसमेल (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"वॉइसमेल"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"कंपन"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"कंपन"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"ध्वनि"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"उन्नत सेटिंग"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"विज़ुअल वॉइसमेल"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"अतिरिक्त बैकअप और जगह"</string>
diff --git a/java/com/android/voicemail/impl/res/values-hr/strings.xml b/java/com/android/voicemail/impl/res/values-hr/strings.xml
index 960909571..6eb0bbc40 100644
--- a/java/com/android/voicemail/impl/res/values-hr/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-hr/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Govorna pošta (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Govorna pošta"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Vibriranje"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Vibriranje"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Zvuk"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Napredne postavke"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Vizualna govorna pošta"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Dodatno sigurnosno kopiranje i pohrana"</string>
diff --git a/java/com/android/voicemail/impl/res/values-hu/strings.xml b/java/com/android/voicemail/impl/res/values-hu/strings.xml
index ce18af799..b76412275 100644
--- a/java/com/android/voicemail/impl/res/values-hu/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-hu/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Hangposta (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Hangposta"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Rezgés"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Rezgés"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Hang"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Speciális beállítások"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Vizuális hangpostaüzenet"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Extra tárhely és biztonsági mentés"</string>
diff --git a/java/com/android/voicemail/impl/res/values-hy/strings.xml b/java/com/android/voicemail/impl/res/values-hy/strings.xml
index eaa987aa4..23544bad8 100644
--- a/java/com/android/voicemail/impl/res/values-hy/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-hy/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Ձայնային փոստ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Ձայնային փոստ"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Թրթռոց"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Թրթռոց"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Ձայն"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Ընդլայնված կարգավորումներ"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Տեսողական ձայնային փոստ"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Լրացուցիչ տարածք և պահուստավորում"</string>
diff --git a/java/com/android/voicemail/impl/res/values-in/strings.xml b/java/com/android/voicemail/impl/res/values-in/strings.xml
index 6f7e6377e..76ad47944 100644
--- a/java/com/android/voicemail/impl/res/values-in/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-in/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Pesan Suara (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Pesan Suara"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Getar"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Getar"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Suara"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Setelan Lanjutan"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Pesan Suara Visual"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Penyimpanan dan backup ekstra"</string>
diff --git a/java/com/android/voicemail/impl/res/values-is/strings.xml b/java/com/android/voicemail/impl/res/values-is/strings.xml
index 5e00487af..26ee45a75 100644
--- a/java/com/android/voicemail/impl/res/values-is/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-is/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Talhólf (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Talhólf"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Titringur"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Titringur"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Hljóð"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Ítarlegar stillingar"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Myndrænt talhólf"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Viðbótaröryggisafritun og samstilling"</string>
diff --git a/java/com/android/voicemail/impl/res/values-it/strings.xml b/java/com/android/voicemail/impl/res/values-it/strings.xml
index 2c37ba281..3f28d4563 100644
--- a/java/com/android/voicemail/impl/res/values-it/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-it/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Segreteria (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Segreteria"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Vibrazione"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Vibrazione"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Suono"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Impostazioni avanzate"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Leggi la segreteria"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Archiviazione supplementare e backup"</string>
diff --git a/java/com/android/voicemail/impl/res/values-iw/strings.xml b/java/com/android/voicemail/impl/res/values-iw/strings.xml
index cdf58dd64..f808e9853 100644
--- a/java/com/android/voicemail/impl/res/values-iw/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-iw/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"דואר קולי (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"דואר קולי"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"רטט"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"רטט"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"צליל"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"הגדרות מתקדמות"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"דואר קולי ויזואלי"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"גיבוי ופינוי מקום"</string>
diff --git a/java/com/android/voicemail/impl/res/values-ja/strings.xml b/java/com/android/voicemail/impl/res/values-ja/strings.xml
index e35359f01..75dcd5e08 100644
--- a/java/com/android/voicemail/impl/res/values-ja/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ja/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"ボイスメール(<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"ボイスメール"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"バイブレーション"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"バイブレーション"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"通知音"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"詳細設定"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"ビジュアル ボイスメール"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"追加のバックアップと保存容量"</string>
diff --git a/java/com/android/voicemail/impl/res/values-ka/strings.xml b/java/com/android/voicemail/impl/res/values-ka/strings.xml
index 7eb792fd0..8c46747ff 100644
--- a/java/com/android/voicemail/impl/res/values-ka/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ka/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"ხმოვანი ფოსტა (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"ხმოვანი ფოსტა"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"ვიბრაცია"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"ვიბრაცია"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"ხმა"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"გაფართოებული პარამეტრები"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"ვიზუალური ხმოვანი ფოსტა"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"დამატებითი სარეზ. ასლები და მეხსიერება"</string>
diff --git a/java/com/android/voicemail/impl/res/values-kk/strings.xml b/java/com/android/voicemail/impl/res/values-kk/strings.xml
index a03171d01..1badcfd92 100644
--- a/java/com/android/voicemail/impl/res/values-kk/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-kk/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Дауыстық хабар (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Дауыстық хабар"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Діріл"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Діріл"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Дыбыс"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Қосымша параметрлер"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Визуалды дауыстық пошта"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Қосымша сақтық көшірме жасау және сақтау"</string>
diff --git a/java/com/android/voicemail/impl/res/values-km/strings.xml b/java/com/android/voicemail/impl/res/values-km/strings.xml
index 3d55d00bb..35fdb490a 100644
--- a/java/com/android/voicemail/impl/res/values-km/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-km/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"សារ​ជា​សំឡេង (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"សារ​ជា​សំឡេង"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"ញ័រ"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"ញ័រ"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"សំឡេង"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"ការ​កំណត់​កម្រិត​ខ្ពស់"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"សារជាសំឡេងអាចមើលឃើញ"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"ទំហំ​ផ្ទុក និង​ការ​បម្រុងទុក​បន្ថែម"</string>
diff --git a/java/com/android/voicemail/impl/res/values-kn/strings.xml b/java/com/android/voicemail/impl/res/values-kn/strings.xml
index 379e656ce..5ab3a2e75 100644
--- a/java/com/android/voicemail/impl/res/values-kn/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-kn/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"ಧ್ವನಿಮೇಲ್ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"ಧ್ವನಿಮೇಲ್"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"ವೈಬ್ರೇಟ್‌"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"ವೈಬ್ರೇಟ್‌"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"ಶಬ್ದ"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"ಸುಧಾರಿತ ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"ದೃಶ್ಯ ಧ್ವನಿಮೇಲ್"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"ಹೆಚ್ಚುವರಿ ಬ್ಯಾಕಪ್ ಮತ್ತು ಸಂಗ್ರಹಣೆ"</string>
diff --git a/java/com/android/voicemail/impl/res/values-ko/strings.xml b/java/com/android/voicemail/impl/res/values-ko/strings.xml
index 513a67546..98195e04f 100644
--- a/java/com/android/voicemail/impl/res/values-ko/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ko/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"음성사서함(<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"음성사서함"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"진동"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"진동"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"소리"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"고급 설정"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"시각적 음성사서함"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"추가 백업 및 저장용량"</string>
diff --git a/java/com/android/voicemail/impl/res/values-ky/strings.xml b/java/com/android/voicemail/impl/res/values-ky/strings.xml
index 12b7f18c5..5ba4ddeba 100644
--- a/java/com/android/voicemail/impl/res/values-ky/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ky/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Үн почтасы (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Үн почтасы"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Дирилдөө"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Дирилдөө"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Үн"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Өркүндөтүлгөн жөндөөлөр"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Визуалдык үн почтасы"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Кошумча камдык көчүрмөнү сактоо жана сактагыч"</string>
diff --git a/java/com/android/voicemail/impl/res/values-lo/strings.xml b/java/com/android/voicemail/impl/res/values-lo/strings.xml
index f4f45e592..ef9cecc8d 100644
--- a/java/com/android/voicemail/impl/res/values-lo/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-lo/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"ຂໍ້​ຄວາມ​ສຽງ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"ຂໍ້ຄວາມສຽງ"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"ສັ່ນເຕືອນ"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"ສັ່ນເຕືອນ"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"ສຽງ"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"ການຕັ້ງຄ່າຂັ້ນສູງ"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"ຂໍ້​ຄວາມ​ສຽງສະເໝືອນ"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"ການສຳຮອງ ແລະ ບ່ອນຈັດເກັບຂໍ້ມູນພິເສດ"</string>
diff --git a/java/com/android/voicemail/impl/res/values-lt/strings.xml b/java/com/android/voicemail/impl/res/values-lt/strings.xml
index 59a15f452..31dba2e5f 100644
--- a/java/com/android/voicemail/impl/res/values-lt/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-lt/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Balso paštas (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Balso paštas"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Vibruoti"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Vibravimas"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Garsas"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Išplėstiniai nustatymai"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Vaizdinis balso paštas"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Papild. saug. vt. ir ats. kop. kūr. f."</string>
diff --git a/java/com/android/voicemail/impl/res/values-lv/strings.xml b/java/com/android/voicemail/impl/res/values-lv/strings.xml
index 0b8b2f92a..d8230d9ec 100644
--- a/java/com/android/voicemail/impl/res/values-lv/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-lv/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Balss pasts (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Balss pasts"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Vibrācija"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Vibrācija"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Signāls"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Papildu iestatījumi"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Vizuālais balss pasts"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Papildu dublēšana un krātuve"</string>
diff --git a/java/com/android/voicemail/impl/res/values-mk/strings.xml b/java/com/android/voicemail/impl/res/values-mk/strings.xml
index 90c2f6cb2..375b79a7f 100644
--- a/java/com/android/voicemail/impl/res/values-mk/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-mk/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Говорна пошта (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Говорна пошта"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Вибрации"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Вибрации"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Звук"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Напредни поставки"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Визуелна говорна пошта"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Дополнителен бекап и склад"</string>
diff --git a/java/com/android/voicemail/impl/res/values-ml/strings.xml b/java/com/android/voicemail/impl/res/values-ml/strings.xml
index d7fd31f1e..d21d8bed9 100644
--- a/java/com/android/voicemail/impl/res/values-ml/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ml/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"വോയ്‌സ്‌മെയിൽ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"വോയ്‌സ്‌മെയിൽ"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"വൈബ്രേറ്റുചെയ്യുക"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"വൈബ്രേറ്റുചെയ്യുക"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"ശബ്‌ദം"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"വിപുലമായ ക്രമീകരണം"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"വിഷ്വൽ വോയ്‌സ്‌മെയിൽ"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"അധിക ബായ്‌ക്കപ്പും സ്‌റ്റോറേജും"</string>
diff --git a/java/com/android/voicemail/impl/res/values-mn/strings.xml b/java/com/android/voicemail/impl/res/values-mn/strings.xml
index 5f726342f..56cffa9e0 100644
--- a/java/com/android/voicemail/impl/res/values-mn/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-mn/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Дуут шуудан (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Дуут шуудан"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Чичиргээ"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Чичиргээ"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Дуу"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Нарийвчилсан тохиргоо"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Уншиж болохуйц дуут шуудан"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Нэмэлт нөөцлөлт болон хадгалах сан"</string>
diff --git a/java/com/android/voicemail/impl/res/values-mr/strings.xml b/java/com/android/voicemail/impl/res/values-mr/strings.xml
index e8c546ce6..407909876 100644
--- a/java/com/android/voicemail/impl/res/values-mr/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-mr/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"व्हॉइसमेल (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"व्हॉइसमेल"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"कंपन करा"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"कंपन करा"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"ध्वनी"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"प्रगत सेटिंग्ज"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"दृश्‍यमान व्हॉइसमेल"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"अतिरिक्त बॅक अप आणि संचय"</string>
diff --git a/java/com/android/voicemail/impl/res/values-ms/strings.xml b/java/com/android/voicemail/impl/res/values-ms/strings.xml
index 4468d49d7..91fa3051e 100644
--- a/java/com/android/voicemail/impl/res/values-ms/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ms/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Mel suara (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Mel suara"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Bergetar"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Bergetar"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Bunyi"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Tetapan Terperinci"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Mel Suara Visual"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Sandaran dan storan tambahan"</string>
diff --git a/java/com/android/voicemail/impl/res/values-my/strings.xml b/java/com/android/voicemail/impl/res/values-my/strings.xml
index 41e88351d..8144c1f49 100644
--- a/java/com/android/voicemail/impl/res/values-my/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-my/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"အသံမေးလ် (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"အသံမေးလ်"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"တုန်ခါမှု"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"တုန်ခါမှု"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"အသံ"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"အဆင့်မြင့် ဆက်တင်များ"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"စာသားမှတ်တမ်းပါ အသံမေးလ်"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"အပိုဆောင်း မိတ္တူနှင့် သိုလှောင်မှု"</string>
diff --git a/java/com/android/voicemail/impl/res/values-nb/strings.xml b/java/com/android/voicemail/impl/res/values-nb/strings.xml
index afbdd3bb8..b13be25c4 100644
--- a/java/com/android/voicemail/impl/res/values-nb/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-nb/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Talepostkasse (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Talepost"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Vibrering"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Vibrering"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Lyd"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Avanserte innstillinger"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Visuell talepostkasse"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Ekstra sikkerhetskopi og lagring"</string>
diff --git a/java/com/android/voicemail/impl/res/values-ne/strings.xml b/java/com/android/voicemail/impl/res/values-ne/strings.xml
index a186535b5..360164eb5 100644
--- a/java/com/android/voicemail/impl/res/values-ne/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ne/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"भ्वाइस मेल (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"भ्वाइस मेल"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"कम्पन"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"कम्पन"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"आवाज"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"उन्नत सेटिङहरू"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"भिजुअल भ्वाइस मेल"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"अतिरिक्त ब्याकअप र भण्डारण"</string>
diff --git a/java/com/android/voicemail/impl/res/values-nl/strings.xml b/java/com/android/voicemail/impl/res/values-nl/strings.xml
index ed66ab303..88fc0f63f 100644
--- a/java/com/android/voicemail/impl/res/values-nl/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-nl/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Voicemail (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Voicemail"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Trillen"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Trillen"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Geluid"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Geavanceerde instellingen"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Visuele voicemail"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Extra back-up en opslag"</string>
diff --git a/java/com/android/voicemail/impl/res/values-no/strings.xml b/java/com/android/voicemail/impl/res/values-no/strings.xml
index afbdd3bb8..b13be25c4 100644
--- a/java/com/android/voicemail/impl/res/values-no/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-no/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Talepostkasse (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Talepost"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Vibrering"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Vibrering"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Lyd"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Avanserte innstillinger"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Visuell talepostkasse"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Ekstra sikkerhetskopi og lagring"</string>
diff --git a/java/com/android/voicemail/impl/res/values-pa/strings.xml b/java/com/android/voicemail/impl/res/values-pa/strings.xml
index ec68867c6..b7711b903 100644
--- a/java/com/android/voicemail/impl/res/values-pa/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-pa/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"ਵੌਇਸਮੇਲ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"ਵੌਇਸਮੇਲ"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"ਵਾਈਬ੍ਰੇਟ ਕਰੋ"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"ਵਾਈਬ੍ਰੇਟ ਕਰੋ"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"ਧੁਨੀ"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"ਉੱਨਤ ਸੈਟਿੰਗਾਂ"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"ਦ੍ਰਿਸ਼ਟਾਂਤਕ ਵੌਇਸਮੇਲ"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"ਵਾਧੂ ਬੈਕਅੱਪ ਅਤੇ ਸਟੋਰੇਜ"</string>
diff --git a/java/com/android/voicemail/impl/res/values-pl/strings.xml b/java/com/android/voicemail/impl/res/values-pl/strings.xml
index 25b891475..d240f7dbc 100644
--- a/java/com/android/voicemail/impl/res/values-pl/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-pl/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Poczta głosowa (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Poczta głosowa"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Wibracje"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Wibracje"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Dźwięk"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Ustawienia zaawansowane"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Wizualna poczta głosowa"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Dodatkowe miejsce i kopia zapasowa"</string>
diff --git a/java/com/android/voicemail/impl/res/values-pt-rBR/strings.xml b/java/com/android/voicemail/impl/res/values-pt-rBR/strings.xml
index c93402e36..501924a35 100644
--- a/java/com/android/voicemail/impl/res/values-pt-rBR/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-pt-rBR/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Correio de voz (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Correio de voz"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Vibração"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Vibração"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Som"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Configurações avançadas"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Correio de voz visual"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Armazenamento extra e backup"</string>
diff --git a/java/com/android/voicemail/impl/res/values-pt-rPT/strings.xml b/java/com/android/voicemail/impl/res/values-pt-rPT/strings.xml
index 00ed0331b..d443329bb 100644
--- a/java/com/android/voicemail/impl/res/values-pt-rPT/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-pt-rPT/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Correio de voz (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Correio de voz"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Vibrar"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Vibrar"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Som"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Definições avançadas"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Mensagem de correio de voz visual"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Cópia de segurança e armazenamento extra"</string>
diff --git a/java/com/android/voicemail/impl/res/values-pt/strings.xml b/java/com/android/voicemail/impl/res/values-pt/strings.xml
index c93402e36..501924a35 100644
--- a/java/com/android/voicemail/impl/res/values-pt/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-pt/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Correio de voz (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Correio de voz"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Vibração"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Vibração"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Som"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Configurações avançadas"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Correio de voz visual"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Armazenamento extra e backup"</string>
diff --git a/java/com/android/voicemail/impl/res/values-ro/strings.xml b/java/com/android/voicemail/impl/res/values-ro/strings.xml
index 9099065c1..44bfd0d81 100644
--- a/java/com/android/voicemail/impl/res/values-ro/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ro/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Mesagerie vocală (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Mesagerie vocală"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Vibrații"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Vibrații"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Sunet"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Setări avansate"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Mesagerie vocală vizuală"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Backup și spațiu de stocare suplimentare"</string>
diff --git a/java/com/android/voicemail/impl/res/values-ru/strings.xml b/java/com/android/voicemail/impl/res/values-ru/strings.xml
index 322b41bfb..b0512f842 100644
--- a/java/com/android/voicemail/impl/res/values-ru/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ru/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Голосовая почта (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Голосовая почта"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Вибросигнал"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Вибросигнал"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Звук"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Расширенные настройки"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Визуальная голосовая почта"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Дополнительное место для хранения и резервного копирования"</string>
diff --git a/java/com/android/voicemail/impl/res/values-si/strings.xml b/java/com/android/voicemail/impl/res/values-si/strings.xml
index 8ad6f87e6..ff16e6173 100644
--- a/java/com/android/voicemail/impl/res/values-si/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-si/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"හඬ තැපෑල (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"හඬ තැපෑල"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"කම්පනය"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"කම්පනය කරන්න"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"හඬ"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"උසස් සැකසීම්"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"දෘශ්‍ය හඬ තැපෑල"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"අතිරේක උපස්ථය සහ ගබඩාව"</string>
diff --git a/java/com/android/voicemail/impl/res/values-sk/strings.xml b/java/com/android/voicemail/impl/res/values-sk/strings.xml
index 80252d454..a824ca83f 100644
--- a/java/com/android/voicemail/impl/res/values-sk/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-sk/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Hlasová schránka <xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Hlasová schránka"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Vibrovať"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Vibrovať"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Zvuk"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Rozšírené nastavenia"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Vizuálna hlasová schránka"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Ďalšie zálohovanie a úložisko"</string>
diff --git a/java/com/android/voicemail/impl/res/values-sl/strings.xml b/java/com/android/voicemail/impl/res/values-sl/strings.xml
index b634d156a..6ad9569e7 100644
--- a/java/com/android/voicemail/impl/res/values-sl/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-sl/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Sporočilo v odzivniku (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Sporočilo v odzivniku"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Vibriranje"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Vibriranje"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Zvok"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Dodatne nastavitve"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Vizualno sporočilo v odzivniku"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Dodatno varnostno kopiranje in shramba"</string>
diff --git a/java/com/android/voicemail/impl/res/values-sq/strings.xml b/java/com/android/voicemail/impl/res/values-sq/strings.xml
index 59db0fd74..b9dfad9a4 100644
--- a/java/com/android/voicemail/impl/res/values-sq/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-sq/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Posta zanore (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Posta zanore"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Dridhje"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Dridhje"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Tingulli"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Cilësimet e përparuara"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Posta zanore vizuale"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Rezervimi dhe hapësira ruajtëse shtesë"</string>
diff --git a/java/com/android/voicemail/impl/res/values-sr/strings.xml b/java/com/android/voicemail/impl/res/values-sr/strings.xml
index d4998ed2e..3608263e2 100644
--- a/java/com/android/voicemail/impl/res/values-sr/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-sr/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Говорна пошта (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Говорна пошта"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Вибрација"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Вибрација"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Звук"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Напредна подешавања"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Визуелна говорна пошта"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Додатне резервне копије и простор"</string>
diff --git a/java/com/android/voicemail/impl/res/values-sv/strings.xml b/java/com/android/voicemail/impl/res/values-sv/strings.xml
index c69a2df5f..6818b3977 100644
--- a/java/com/android/voicemail/impl/res/values-sv/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-sv/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Röstbrevlåda (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Röstbrevlåda"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Vibrera"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Vibrera"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Ljud"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Avancerade inställningar"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Visuell röstbrevlåda"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Extra säkerhetskopiering och lagring"</string>
diff --git a/java/com/android/voicemail/impl/res/values-sw/strings.xml b/java/com/android/voicemail/impl/res/values-sw/strings.xml
index d1cccc78c..b08db9a41 100644
--- a/java/com/android/voicemail/impl/res/values-sw/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-sw/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Ujumbe wa sauti (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Ujumbe wa sauti"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Mtetemo"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Tetema"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Mlio"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Mipangilio ya Kina"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Ujumbe wa Sauti Unaoonekana"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Nafasi ya ziada na hifadhi rudufu"</string>
diff --git a/java/com/android/voicemail/impl/res/values-ta/strings.xml b/java/com/android/voicemail/impl/res/values-ta/strings.xml
index 0c3c454e1..f240cdd14 100644
--- a/java/com/android/voicemail/impl/res/values-ta/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ta/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"குரலஞ்சல் (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"குரலஞ்சல்"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"அதிர்வுறுதல்"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"அதிர்வுறு"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"ஒலி"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"மேம்பட்ட அமைப்புகள்"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"விஷூவல் குரலஞ்சல்"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"கூடுதல் காப்புப் பிரதியும் சேமிப்பகமும்"</string>
diff --git a/java/com/android/voicemail/impl/res/values-te/strings.xml b/java/com/android/voicemail/impl/res/values-te/strings.xml
index 7a865f43f..038ed98f1 100644
--- a/java/com/android/voicemail/impl/res/values-te/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-te/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"వాయిస్ మెయిల్ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"వాయిస్ మెయిల్"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"వైబ్రేషన్"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"వైబ్రేషన్"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"ధ్వని"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"అధునాతన సెట్టింగ్‌లు"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"దృశ్యమాన వాయిస్ మెయిల్"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"అదనపు బ్యాకప్ మరియు నిల్వ"</string>
diff --git a/java/com/android/voicemail/impl/res/values-th/strings.xml b/java/com/android/voicemail/impl/res/values-th/strings.xml
index 68b32fb45..d4f527020 100644
--- a/java/com/android/voicemail/impl/res/values-th/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-th/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"ข้อความเสียง (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"ข้อความเสียง"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"สั่น"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"สั่น"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"เสียง"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"การตั้งค่าขั้นสูง"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"ภาพแสดงข้อความเสียง"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"การสำรองข้อมูลและพื้นที่เก็บข้อมูลเพิ่มเติม"</string>
diff --git a/java/com/android/voicemail/impl/res/values-tl/strings.xml b/java/com/android/voicemail/impl/res/values-tl/strings.xml
index c14919c03..184f27edb 100644
--- a/java/com/android/voicemail/impl/res/values-tl/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-tl/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Voicemail (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Voicemail"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"I-vibrate"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"I-vibrate"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Tunog"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Mga Advanced na Setting"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Visual na Voicemail"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Karagdagang backup at storage"</string>
diff --git a/java/com/android/voicemail/impl/res/values-tr/strings.xml b/java/com/android/voicemail/impl/res/values-tr/strings.xml
index e8f9336f3..2b36fba34 100644
--- a/java/com/android/voicemail/impl/res/values-tr/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-tr/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Sesli mesaj (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Sesli mesaj"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Titreşim"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Titreşim"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Ses"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Gelişmiş Ayarlar"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Görsel Sesli Mesaj"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Ekstra yedekleme ve depolama alanı"</string>
diff --git a/java/com/android/voicemail/impl/res/values-uk/strings.xml b/java/com/android/voicemail/impl/res/values-uk/strings.xml
index 760177ca4..5e4ab77c0 100644
--- a/java/com/android/voicemail/impl/res/values-uk/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-uk/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Голосова пошта (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Голосова пошта"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Вібросигнал"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Вібросигнал"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Звук"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Розширені налаштування"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Візуальна голосова пошта"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Додаткова пам’ять і резервне копіювання"</string>
diff --git a/java/com/android/voicemail/impl/res/values-ur/strings.xml b/java/com/android/voicemail/impl/res/values-ur/strings.xml
index 2105fae08..ae6e98def 100644
--- a/java/com/android/voicemail/impl/res/values-ur/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ur/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"صوتی میل (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"صوتی میل"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"ارتعاش"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"ارتعاش"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"آواز"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"اعلی ترتیبات"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"بصری صوتی میل"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"اضافی بیک اپ اور اسٹوریج"</string>
diff --git a/java/com/android/voicemail/impl/res/values-uz/strings.xml b/java/com/android/voicemail/impl/res/values-uz/strings.xml
index fad79164d..f458aee7b 100644
--- a/java/com/android/voicemail/impl/res/values-uz/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-uz/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Ovozli pochta (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Ovozli pochta"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Tebranish"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Tebranish"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Ovoz"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Kengaytirilgan sozlamalar"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Vizual ovozli pochta"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Zaxira. va saqlash u-n qo‘shimcha xotira"</string>
diff --git a/java/com/android/voicemail/impl/res/values-vi/strings.xml b/java/com/android/voicemail/impl/res/values-vi/strings.xml
index 1d029ea12..c0bfa8183 100644
--- a/java/com/android/voicemail/impl/res/values-vi/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-vi/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Thư thoại <xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Thư thoại"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Rung"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Rung"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Âm báo"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Cài đặt nâng cao"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Thư thoại kèm theo hình ảnh"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Bộ nhớ và bản sao lưu bổ sung"</string>
diff --git a/java/com/android/voicemail/impl/res/values-zh-rCN/strings.xml b/java/com/android/voicemail/impl/res/values-zh-rCN/strings.xml
index d70f1fa51..66b058b1f 100644
--- a/java/com/android/voicemail/impl/res/values-zh-rCN/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-zh-rCN/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"语音邮件(<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"语音邮件"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"振动"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"振动"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"提示音"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"高级设置"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"可视语音信箱"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"额外存储空间和备份功能"</string>
diff --git a/java/com/android/voicemail/impl/res/values-zh-rHK/strings.xml b/java/com/android/voicemail/impl/res/values-zh-rHK/strings.xml
index 4adc3fd97..d76068790 100644
--- a/java/com/android/voicemail/impl/res/values-zh-rHK/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-zh-rHK/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"留言 (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"留言"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"震動"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"震動"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"音效"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"進階設定"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"視像留言"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"額外備份功能和儲存空間"</string>
diff --git a/java/com/android/voicemail/impl/res/values-zh-rTW/strings.xml b/java/com/android/voicemail/impl/res/values-zh-rTW/strings.xml
index 6ff084f60..2b4de45d9 100644
--- a/java/com/android/voicemail/impl/res/values-zh-rTW/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-zh-rTW/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"語音信箱 (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"語音信箱"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"震動"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"震動"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"音效"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"進階設定"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"視覺化語音信箱"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"額外的備份功能和儲存空間"</string>
diff --git a/java/com/android/voicemail/impl/res/values-zu/strings.xml b/java/com/android/voicemail/impl/res/values-zu/strings.xml
index 5adf300e5..1debac61b 100644
--- a/java/com/android/voicemail/impl/res/values-zu/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-zu/strings.xml
@@ -18,9 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="voicemail_settings_with_label" msgid="563926539137546586">"Ivoyisimeyili (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="voicemail_settings_title" msgid="6685263321755930738">"Ivoyisimeyili"</string>
- <string name="voicemail_notification_vibrate_when_title" msgid="1017489970564669402">"Dlidlizela"</string>
- <string name="voicemail_notification_vibarte_when_dialog_title" msgid="913495075516305202">"Dlidlizela"</string>
- <string name="voicemail_notification_ringtone_title" msgid="7516921280035140960">"Umsindo"</string>
+ <!-- no translation found for voicemail_notifications_preference_title (3490553930230492405) -->
+ <skip />
<string name="voicemail_advanced_settings_title" msgid="6390900339808156711">"Izilungiselelo ezithuthukisiwe"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="3158454817165714998">"Ivoyisimeyili ebonakalayo"</string>
<string name="voicemail_visual_voicemail_auto_archive_switch_title" msgid="7120443850486401455">"Isipele esingeziwe nesitoreji"</string>
diff --git a/java/com/android/voicemail/impl/res/values/strings.xml b/java/com/android/voicemail/impl/res/values/strings.xml
index bb754d18b..375a1e9ba 100644
--- a/java/com/android/voicemail/impl/res/values/strings.xml
+++ b/java/com/android/voicemail/impl/res/values/strings.xml
@@ -23,19 +23,12 @@
<string name="voicemail_settings_title">Voicemail</string>
<!-- DO NOT TRANSLATE. Internal key for a voicemail notification preference. -->
- <string name="voicemail_notification_ringtone_key" translatable="false">voicemail_notification_ringtone_key</string>
- <!-- DO NOT TRANSLATE. Internal key for a voicemail notification preference. -->
- <string name="voicemail_notification_vibrate_key" translatable="false">voicemail_notification_vibrate_key</string>
-
- <!-- Title for the vibration settings for voicemail notifications [CHAR LIMIT=40] -->
- <string name="voicemail_notification_vibrate_when_title">Vibrate</string>
- <!-- Dialog title for the vibration settings for voice mail notifications [CHAR LIMIT=40]-->
- <string name="voicemail_notification_vibarte_when_dialog_title">Vibrate</string>
+ <string name="voicemail_notifications_key" translatable="false">voicemail_notification_key</string>
- <!-- Voicemail ringtone title. The user clicks on this preference to select
- which sound to play when a voicemail notification is received.
+ <!-- Voicemail notifications title. The user clicks on this preference to select
+ which sound to play and whether to vibrate when a voicemail notification is received.
[CHAR LIMIT=30] -->
- <string name="voicemail_notification_ringtone_title">Sound</string>
+ <string name="voicemail_notifications_preference_title">Notifications</string>
<string name="voicemail_advanced_settings_key" translatable="false">voicemail_advanced_settings_key</string>
<!-- Title for advanced settings in the voicemail settings -->
diff --git a/java/com/android/voicemail/impl/res/xml/voicemail_settings.xml b/java/com/android/voicemail/impl/res/xml/voicemail_settings.xml
index 53fd57f7e..50510905c 100644
--- a/java/com/android/voicemail/impl/res/xml/voicemail_settings.xml
+++ b/java/com/android/voicemail/impl/res/xml/voicemail_settings.xml
@@ -17,16 +17,9 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/voicemail_settings_title">
- <com.android.voicemail.impl.settings.VoicemailRingtonePreference
- android:key="@string/voicemail_notification_ringtone_key"
- android:title="@string/voicemail_notification_ringtone_title"
- android:persistent="false"
- android:ringtoneType="notification" />
-
- <CheckBoxPreference
- android:key="@string/voicemail_notification_vibrate_key"
- android:title="@string/voicemail_notification_vibrate_when_title"
- android:persistent="true" />
+ <Preference
+ android:key="@string/voicemail_notifications_key"
+ android:title="@string/voicemail_notifications_preference_title"/>
<SwitchPreference
android:key="@string/voicemail_visual_voicemail_key"
diff --git a/java/com/android/voicemail/impl/scheduling/BaseTask.java b/java/com/android/voicemail/impl/scheduling/BaseTask.java
index 0144e346f..bbdca8c88 100644
--- a/java/com/android/voicemail/impl/scheduling/BaseTask.java
+++ b/java/com/android/voicemail/impl/scheduling/BaseTask.java
@@ -133,7 +133,7 @@ public abstract class BaseTask implements Task {
}
/**
- * Creates an intent that can be used to start the {@link TaskSchedulerService}. Derived class
+ * Creates an intent that can be used to be broadcast to the {@link TaskReceiver}. Derived class
* should build their intent upon this.
*/
public static Intent createIntent(
diff --git a/java/com/android/voicemail/impl/scheduling/MinimalIntervalPolicy.java b/java/com/android/voicemail/impl/scheduling/MinimalIntervalPolicy.java
index 76fba4fb0..342b56e8a 100644
--- a/java/com/android/voicemail/impl/scheduling/MinimalIntervalPolicy.java
+++ b/java/com/android/voicemail/impl/scheduling/MinimalIntervalPolicy.java
@@ -51,7 +51,7 @@ public class MinimalIntervalPolicy implements Policy {
BaseTask.createIntent(mTask.getContext(), BlockerTask.class, mId.phoneAccountHandle);
intent.putExtra(BlockerTask.EXTRA_TASK_ID, mId.id);
intent.putExtra(BlockerTask.EXTRA_BLOCK_FOR_MILLIS, mBlockForMillis);
- mTask.getContext().startService(intent);
+ mTask.getContext().sendBroadcast(intent);
}
}
diff --git a/java/com/android/voicemail/impl/scheduling/RetryPolicy.java b/java/com/android/voicemail/impl/scheduling/RetryPolicy.java
index b8703ea15..c408bdc4a 100644
--- a/java/com/android/voicemail/impl/scheduling/RetryPolicy.java
+++ b/java/com/android/voicemail/impl/scheduling/RetryPolicy.java
@@ -99,7 +99,7 @@ public class RetryPolicy implements Policy {
Intent intent = mTask.createRestartIntent();
intent.putExtra(EXTRA_RETRY_COUNT, mRetryCount + 1);
- mTask.getContext().startService(intent);
+ mTask.getContext().sendBroadcast(intent);
}
@Override
diff --git a/java/com/android/voicemail/impl/scheduling/Task.java b/java/com/android/voicemail/impl/scheduling/Task.java
index 447a9db7b..484a6262e 100644
--- a/java/com/android/voicemail/impl/scheduling/Task.java
+++ b/java/com/android/voicemail/impl/scheduling/Task.java
@@ -24,8 +24,8 @@ import android.telecom.PhoneAccountHandle;
import java.util.Objects;
/**
- * A task for {@link TaskSchedulerService} to execute. Since the task is sent through a bundle to
- * the scheduler, The task must be constructable with the bundle. Specifically, It must have a
+ * A task for {@link TaskExecutor} to execute. Since the task is sent through a bundle to the
+ * scheduler, The task must be constructable with the bundle. Specifically, It must have a
* constructor with zero arguments, and have all relevant data packed inside the bundle. Use {@link
* Tasks#createIntent(Context, Class)} to create a intent that will construct the Task.
*
@@ -112,8 +112,8 @@ public interface Task {
/**
* @return number of milliSeconds the scheduler should wait before running this task. A value less
- * than {@link TaskSchedulerService#READY_TOLERANCE_MILLISECONDS} will be considered ready. If
- * no tasks are ready, the scheduler will sleep for this amount of time before doing another
+ * than {@link TaskExecutor#READY_TOLERANCE_MILLISECONDS} will be considered ready. If no
+ * tasks are ready, the scheduler will sleep for this amount of time before doing another
* check (it will still wake if a new task is added). The first task in the queue that is
* ready will be executed.
*/
diff --git a/java/com/android/voicemail/impl/scheduling/TaskExecutor.java b/java/com/android/voicemail/impl/scheduling/TaskExecutor.java
new file mode 100644
index 000000000..84dc1db4a
--- /dev/null
+++ b/java/com/android/voicemail/impl/scheduling/TaskExecutor.java
@@ -0,0 +1,455 @@
+/*
+ * Copyright (C) 2017 The Android Open Source 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.voicemail.impl.scheduling;
+
+import android.annotation.TargetApi;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build.VERSION_CODES;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.Looper;
+import android.os.Message;
+import android.support.annotation.MainThread;
+import android.support.annotation.Nullable;
+import android.support.annotation.VisibleForTesting;
+import android.support.annotation.WorkerThread;
+import com.android.voicemail.impl.Assert;
+import com.android.voicemail.impl.NeededForTesting;
+import com.android.voicemail.impl.VvmLog;
+import com.android.voicemail.impl.scheduling.TaskQueue.NextTask;
+import java.util.List;
+
+/**
+ * A singleton to queue and run {@link Task} with the {@link android.app.job.JobScheduler}. A task
+ * is queued by sending a broadcast to {@link TaskReceiver}. The intent should contain enough
+ * information in {@link Intent#getExtras()} to construct the task (see {@link
+ * Tasks#createIntent(Context, Class)}).
+ *
+ * <p>The executor will only exist when {@link TaskSchedulerJobService} is running.
+ *
+ * <p>All tasks are ran in the background with a wakelock being held by the {@link
+ * android.app.job.JobScheduler}, which is between {@link #onStartJob(Job, List)} and {@link
+ * #finishJobAsync()}. The {@link TaskSchedulerJobService} also has a {@link TaskQueue}, but the
+ * data is stored in the {@link android.app.job.JobScheduler} instead of the process memory, so if
+ * the process is killed the queued tasks will be restored. If a new task is added, a new {@link
+ * TaskSchedulerJobService} will be scheduled to run the task. If the job is already scheduled, the
+ * new task will be pushed into the queue of the scheduled job. If the job is already running, the
+ * job will be queued in process memory.
+ *
+ * <p>Only one task will be ran at a time, and same task cannot exist in the queue at the same time.
+ * Refer to {@link TaskQueue} for queuing and execution order.
+ *
+ * <p>If there are still tasks in the queue but none are executable immediately, the service will
+ * enter a "sleep", pushing all remaining task into a new job and end the current job.
+ *
+ * <p>The executor will be started when {@link TaskSchedulerJobService} is running, and stopped when
+ * there are no more tasks in the queue or when the executor is put to sleep.
+ *
+ * <p>{@link android.app.job.JobScheduler} is not used directly due to:
+ *
+ * <ul>
+ * <li>The {@link android.telecom.PhoneAccountHandle} used to differentiate task can not be easily
+ * mapped into an integer for job id
+ * <li>A job cannot be mutated to store information such as retry count.
+ * </ul>
+ */
+@TargetApi(VERSION_CODES.O)
+final class TaskExecutor {
+
+ /**
+ * An entity that holds execution resources for the {@link TaskExecutor} to run, usually a {@link
+ * android.app.job.JobService}.
+ */
+ interface Job {
+
+ /**
+ * Signals to Job to end and release its' resources. This is an asynchronous call and may not
+ * take effect immediately.
+ */
+ @MainThread
+ void finishAsync();
+
+ /** Whether the call to {@link #finishAsync()} has actually taken effect. */
+ @MainThread
+ boolean isFinished();
+ }
+
+ private static final String TAG = "VvmTaskExecutor";
+
+ private static final int READY_TOLERANCE_MILLISECONDS = 100;
+
+ /**
+ * Threshold to determine whether to do a short or long sleep when a task is scheduled in the
+ * future.
+ *
+ * <p>A short sleep will continue the job and use {@link Handler#postDelayed(Runnable, long)} to
+ * wait for the next task.
+ *
+ * <p>A long sleep will finish the job and schedule a new one. The exact execution time is
+ * subjected to {@link android.app.job.JobScheduler} battery optimization, and is not exact.
+ */
+ private static final int SHORT_SLEEP_THRESHOLD_MILLISECONDS = 10_000;
+ /**
+ * When there are no more tasks to be run the service should be stopped. But when all tasks has
+ * finished there might still be more tasks in the message queue waiting to be processed,
+ * especially the ones submitted in {@link Task#onCompleted()}. Wait for a while before stopping
+ * the service to make sure there are no pending messages.
+ */
+ private static final int STOP_DELAY_MILLISECONDS = 5_000;
+
+ /** Interval between polling of whether the job is finished. */
+ private static final int TERMINATE_POLLING_INTERVAL_MILLISECONDS = 1_000;
+
+ // The thread to run tasks on
+ private final WorkerThreadHandler workerThreadHandler;
+
+ private static TaskExecutor instance;
+
+ /**
+ * Used by tests to turn task handling into a single threaded process by calling {@link
+ * Handler#handleMessage(Message)} directly
+ */
+ private MessageSender messageSender = new MessageSender();
+
+ private final MainThreadHandler mainThreadHandler;
+
+ private final Context context;
+
+ /** Main thread only, access through {@link #getTasks()} */
+ private final TaskQueue tasks = new TaskQueue();
+
+ private boolean isWorkerThreadBusy = false;
+
+ private boolean isTerminating = false;
+
+ private Job job;
+
+ private final Runnable stopServiceWithDelay =
+ new Runnable() {
+ @MainThread
+ @Override
+ public void run() {
+ VvmLog.i(TAG, "Stopping service");
+ if (!isJobRunning() || isTerminating()) {
+ VvmLog.e(TAG, "Service already stopped");
+ return;
+ }
+ scheduleJobAndTerminate(0, true);
+ }
+ };
+
+ /**
+ * Reschedule the {@link TaskSchedulerJobService} and terminate the executor when the {@link Job}
+ * is truly finished. If the job is still not finished, this runnable will requeue itself on the
+ * main thread. The requeue is only expected to happen a few times.
+ */
+ private class JobFinishedPoller implements Runnable {
+
+ private final long delayMillis;
+ private final boolean isNewJob;
+ private int invocationCounter = 0;
+
+ JobFinishedPoller(long delayMillis, boolean isNewJob) {
+ this.delayMillis = delayMillis;
+ this.isNewJob = isNewJob;
+ }
+
+ @Override
+ public void run() {
+ // The job should be finished relatively quickly. Assert to make sure this assumption is true.
+ Assert.isTrue(invocationCounter < 10);
+ invocationCounter++;
+ if (job.isFinished()) {
+ VvmLog.i("JobFinishedPoller.run", "Job finished");
+ if (!getTasks().isEmpty()) {
+ TaskSchedulerJobService.scheduleJob(
+ context, serializePendingTasks(), delayMillis, isNewJob);
+ tasks.clear();
+ }
+ terminate();
+ return;
+ }
+ VvmLog.w("JobFinishedPoller.run", "Job still running");
+ mainThreadHandler.postDelayed(this, TERMINATE_POLLING_INTERVAL_MILLISECONDS);
+ }
+ };
+
+ /** Should attempt to run the next task when a task has finished or been added. */
+ private boolean taskAutoRunDisabledForTesting = false;
+
+ @VisibleForTesting
+ final class WorkerThreadHandler extends Handler {
+
+ public WorkerThreadHandler(Looper looper) {
+ super(looper);
+ }
+
+ @Override
+ @WorkerThread
+ public void handleMessage(Message msg) {
+ Assert.isNotMainThread();
+ Task task = (Task) msg.obj;
+ try {
+ VvmLog.i(TAG, "executing task " + task);
+ task.onExecuteInBackgroundThread();
+ } catch (Throwable throwable) {
+ VvmLog.e(TAG, "Exception while executing task " + task + ":", throwable);
+ }
+
+ Message schedulerMessage = mainThreadHandler.obtainMessage();
+ schedulerMessage.obj = task;
+ messageSender.send(schedulerMessage);
+ }
+ }
+
+ @VisibleForTesting
+ final class MainThreadHandler extends Handler {
+
+ public MainThreadHandler(Looper looper) {
+ super(looper);
+ }
+
+ @Override
+ @MainThread
+ public void handleMessage(Message msg) {
+ Assert.isMainThread();
+ Task task = (Task) msg.obj;
+ getTasks().remove(task);
+ task.onCompleted();
+ isWorkerThreadBusy = false;
+ maybeRunNextTask();
+ }
+ }
+
+ /** Starts a new TaskExecutor. May only be called by {@link TaskSchedulerJobService}. */
+ @MainThread
+ static void createRunningInstance(Context context) {
+ Assert.isMainThread();
+ Assert.isTrue(instance == null);
+ instance = new TaskExecutor(context);
+ }
+
+ /** @return the currently running instance, or {@code null} if the executor is not running. */
+ @MainThread
+ @Nullable
+ static TaskExecutor getRunningInstance() {
+ return instance;
+ }
+
+ private TaskExecutor(Context context) {
+ this.context = context;
+ HandlerThread thread = new HandlerThread("VvmTaskExecutor");
+ thread.start();
+
+ workerThreadHandler = new WorkerThreadHandler(thread.getLooper());
+ mainThreadHandler = new MainThreadHandler(Looper.getMainLooper());
+ }
+
+ @VisibleForTesting
+ void terminate() {
+ VvmLog.i(TAG, "terminated");
+ Assert.isMainThread();
+ job = null;
+ workerThreadHandler.getLooper().quit();
+ instance = null;
+ TaskReceiver.resendDeferredBroadcasts(context);
+ }
+
+ @MainThread
+ void addTask(Task task) {
+ Assert.isMainThread();
+ getTasks().add(task);
+ VvmLog.i(TAG, task + " added");
+ mainThreadHandler.removeCallbacks(stopServiceWithDelay);
+ maybeRunNextTask();
+ }
+
+ @MainThread
+ @VisibleForTesting
+ TaskQueue getTasks() {
+ Assert.isMainThread();
+ return tasks;
+ }
+
+ @MainThread
+ private void maybeRunNextTask() {
+ Assert.isMainThread();
+ if (isWorkerThreadBusy) {
+ return;
+ }
+ if (taskAutoRunDisabledForTesting) {
+ // If taskAutoRunDisabledForTesting is true, runNextTask() must be explicitly called
+ // to run the next task.
+ return;
+ }
+
+ runNextTask();
+ }
+
+ @VisibleForTesting
+ @MainThread
+ void runNextTask() {
+ Assert.isMainThread();
+ if (getTasks().isEmpty()) {
+ prepareStop();
+ return;
+ }
+ NextTask nextTask = getTasks().getNextTask(READY_TOLERANCE_MILLISECONDS);
+
+ if (nextTask.task != null) {
+ nextTask.task.onBeforeExecute();
+ Message message = workerThreadHandler.obtainMessage();
+ message.obj = nextTask.task;
+ isWorkerThreadBusy = true;
+ messageSender.send(message);
+ return;
+ }
+ VvmLog.i(TAG, "minimal wait time:" + nextTask.minimalWaitTimeMillis);
+ if (!taskAutoRunDisabledForTesting && nextTask.minimalWaitTimeMillis != null) {
+ // No tasks are currently ready. Sleep until the next one should be.
+ // If a new task is added during the sleep the service will wake immediately.
+ sleep(nextTask.minimalWaitTimeMillis);
+ }
+ }
+
+ @MainThread
+ private void sleep(long timeMillis) {
+ VvmLog.i(TAG, "sleep for " + timeMillis + " millis");
+ if (timeMillis < SHORT_SLEEP_THRESHOLD_MILLISECONDS) {
+ mainThreadHandler.postDelayed(
+ new Runnable() {
+ @Override
+ public void run() {
+ maybeRunNextTask();
+ }
+ },
+ timeMillis);
+ return;
+ }
+ scheduleJobAndTerminate(timeMillis, false);
+ }
+
+ private List<Bundle> serializePendingTasks() {
+ return getTasks().toBundles();
+ }
+
+ private void prepareStop() {
+ VvmLog.i(
+ TAG,
+ "no more tasks, stopping service if no task are added in "
+ + STOP_DELAY_MILLISECONDS
+ + " millis");
+ mainThreadHandler.postDelayed(stopServiceWithDelay, STOP_DELAY_MILLISECONDS);
+ }
+
+ @NeededForTesting
+ static class MessageSender {
+
+ public void send(Message message) {
+ message.sendToTarget();
+ }
+ }
+
+ @NeededForTesting
+ void setTaskAutoRunDisabledForTest(boolean value) {
+ taskAutoRunDisabledForTesting = value;
+ }
+
+ @NeededForTesting
+ void setMessageSenderForTest(MessageSender sender) {
+ messageSender = sender;
+ }
+
+ /**
+ * The {@link TaskSchedulerJobService} has started and all queued task should be executed in the
+ * worker thread.
+ */
+ @MainThread
+ public void onStartJob(Job job, List<Bundle> pendingTasks) {
+ VvmLog.i(TAG, "onStartJob");
+ this.job = job;
+ tasks.fromBundles(context, pendingTasks);
+ maybeRunNextTask();
+ }
+
+ /**
+ * The {@link TaskSchedulerJobService} is being terminated by the system (timeout or network
+ * lost). A new job will be queued to resume all pending tasks. The current unfinished job may be
+ * ran again.
+ */
+ @MainThread
+ public void onStopJob() {
+ VvmLog.e(TAG, "onStopJob");
+ if (isJobRunning() && !isTerminating()) {
+ scheduleJobAndTerminate(0, true);
+ }
+ }
+
+ /**
+ * Send all pending tasks and schedule a new {@link TaskSchedulerJobService}. The current executor
+ * will start the termination process, but restarted when the scheduled job runs in the future.
+ *
+ * @param delayMillis the delay before stating the job, see {@link
+ * android.app.job.JobInfo.Builder#setMinimumLatency(long)}. This must be 0 if {@code
+ * isNewJob} is true.
+ * @param isNewJob a new job will be requested to run immediately, bypassing all requirements.
+ */
+ @MainThread
+ @VisibleForTesting
+ void scheduleJobAndTerminate(long delayMillis, boolean isNewJob) {
+ Assert.isMainThread();
+ finishJobAsync();
+ mainThreadHandler.post(new JobFinishedPoller(delayMillis, isNewJob));
+ }
+
+ /**
+ * Whether the TaskExecutor is still terminating. {@link TaskReceiver} should defer all new task
+ * until {@link #getRunningInstance()} returns {@code null} so a new job can be started. {@link
+ * #scheduleJobAndTerminate(long, boolean)} does not run immediately because the job can only be
+ * scheduled after the main thread has returned. The TaskExecutor will be in a intermediate state
+ * between scheduleJobAndTerminate() and terminate(). In this state, {@link #getRunningInstance()}
+ * returns non-null because it has not been fully stopped yet, but the TaskExecutor cannot do
+ * anything. A new job should not be scheduled either because the current job might still be
+ * running.
+ */
+ @MainThread
+ public boolean isTerminating() {
+ return isTerminating;
+ }
+
+ /**
+ * Signals {@link TaskSchedulerJobService} the current session of tasks has finished, and the wake
+ * lock can be released. Note: this only takes effect after the main thread has been returned. If
+ * a new job need to be scheduled, it should be posted on the main thread handler instead of
+ * calling directly.
+ */
+ @MainThread
+ private void finishJobAsync() {
+ Assert.isTrue(!isTerminating());
+ Assert.isMainThread();
+ VvmLog.i(TAG, "finishing Job");
+ job.finishAsync();
+ isTerminating = true;
+ mainThreadHandler.removeCallbacks(stopServiceWithDelay);
+ }
+
+ private boolean isJobRunning() {
+ return job != null;
+ }
+}
diff --git a/java/com/android/voicemail/impl/scheduling/TaskReceiver.java b/java/com/android/voicemail/impl/scheduling/TaskReceiver.java
new file mode 100644
index 000000000..00d36d00f
--- /dev/null
+++ b/java/com/android/voicemail/impl/scheduling/TaskReceiver.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2017 The Android Open Source 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.voicemail.impl.scheduling;
+
+import android.annotation.TargetApi;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build.VERSION_CODES;
+import android.os.Bundle;
+import com.android.voicemail.impl.VvmLog;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * BroadcastReceiver to queue and run {@link Task} with the {@link android.app.job.JobScheduler}. A
+ * task is queued using a explicit broadcast to this receiver. The intent should contain enough
+ * information in {@link Intent#getExtras()} to construct the task (see {@link
+ * Tasks#createIntent(Context, Class)}). The task will be queued directly in {@link TaskExecutor} if
+ * it is already running, or in {@link TaskSchedulerJobService} if not.
+ */
+@TargetApi(VERSION_CODES.O)
+public class TaskReceiver extends BroadcastReceiver {
+
+ private static final String TAG = "VvmTaskReceiver";
+
+ private static final List<Intent> deferredBroadcasts = new ArrayList<>();
+
+ /**
+ * When {@link TaskExecutor#isTerminating()} is {@code true}, newly added tasks will be deferred
+ * to allow the TaskExecutor to terminate properly. After termination is completed this should be
+ * called to add the tasks again.
+ */
+ public static void resendDeferredBroadcasts(Context context) {
+ for (Intent intent : deferredBroadcasts) {
+ context.sendBroadcast(intent);
+ }
+ }
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (intent == null) {
+ VvmLog.w(TAG, "null intent received");
+ return;
+ }
+ VvmLog.i(TAG, "task received");
+ TaskExecutor taskExecutor = TaskExecutor.getRunningInstance();
+ if (taskExecutor != null) {
+ VvmLog.i(TAG, "TaskExecutor already running");
+ if (taskExecutor.isTerminating()) {
+ // The current taskExecutor and cannot do anything and a new job cannot be scheduled. Defer
+ // the task until a new job can be scheduled.
+ VvmLog.w(TAG, "TaskExecutor is terminating, bouncing task");
+ deferredBroadcasts.add(intent);
+ return;
+ }
+ Task task = Tasks.createTask(context, intent.getExtras());
+ taskExecutor.addTask(task);
+ } else {
+ VvmLog.i(TAG, "scheduling new job");
+ List<Bundle> taskList = new ArrayList<>();
+ taskList.add(intent.getExtras());
+ TaskSchedulerJobService.scheduleJob(context, taskList, 0, true);
+ }
+ }
+}
diff --git a/java/com/android/voicemail/impl/scheduling/TaskSchedulerJobService.java b/java/com/android/voicemail/impl/scheduling/TaskSchedulerJobService.java
index eab410eb0..9bfce0052 100644
--- a/java/com/android/voicemail/impl/scheduling/TaskSchedulerJobService.java
+++ b/java/com/android/voicemail/impl/scheduling/TaskSchedulerJobService.java
@@ -23,11 +23,8 @@ import android.app.job.JobScheduler;
import android.app.job.JobService;
import android.content.ComponentName;
import android.content.Context;
-import android.content.Intent;
-import android.content.ServiceConnection;
import android.os.Build.VERSION_CODES;
import android.os.Bundle;
-import android.os.IBinder;
import android.os.Parcelable;
import android.support.annotation.MainThread;
import com.android.dialer.constants.ScheduledJobIds;
@@ -36,59 +33,42 @@ import com.android.voicemail.impl.VvmLog;
import java.util.ArrayList;
import java.util.List;
-/**
- * A {@link JobService} that will trigger the background execution of {@link TaskSchedulerService}.
- */
+/** A {@link JobService} that will trigger the background execution of {@link TaskExecutor}. */
@TargetApi(VERSION_CODES.O)
-public class TaskSchedulerJobService extends JobService implements TaskSchedulerService.Job {
+public class TaskSchedulerJobService extends JobService implements TaskExecutor.Job {
private static final String TAG = "TaskSchedulerJobService";
private static final String EXTRA_TASK_EXTRAS_ARRAY = "extra_task_extras_array";
private JobParameters jobParameters;
- private TaskSchedulerService scheduler;
-
- private final ServiceConnection mConnection =
- new ServiceConnection() {
-
- @Override
- public void onServiceConnected(ComponentName className, IBinder binder) {
- VvmLog.i(TAG, "TaskSchedulerService connected");
- scheduler = ((TaskSchedulerService.LocalBinder) binder).getService();
- scheduler.onStartJob(
- TaskSchedulerJobService.this,
- getBundleList(
- jobParameters.getTransientExtras().getParcelableArray(EXTRA_TASK_EXTRAS_ARRAY)));
- }
-
- @Override
- public void onServiceDisconnected(ComponentName unused) {
- // local service, process should always be killed together.
- Assert.fail();
- }
- };
@Override
@MainThread
public boolean onStartJob(JobParameters params) {
jobParameters = params;
- bindService(
- new Intent(this, TaskSchedulerService.class), mConnection, Context.BIND_AUTO_CREATE);
+ TaskExecutor.createRunningInstance(this);
+ TaskExecutor.getRunningInstance()
+ .onStartJob(
+ this,
+ getBundleList(
+ jobParameters.getTransientExtras().getParcelableArray(EXTRA_TASK_EXTRAS_ARRAY)));
return true /* job still running in background */;
}
@Override
@MainThread
public boolean onStopJob(JobParameters params) {
- scheduler.onStopJob();
+ TaskExecutor.getRunningInstance().onStopJob();
jobParameters = null;
- return false /* don't reschedule. TaskScheduler service will post a new job */;
+ return false /* don't reschedule. TaskExecutor service will post a new job */;
}
/**
* Schedule a job to run the {@code pendingTasks}. If a job is already scheduled it will be
- * appended to the back of the queue and the job will be rescheduled.
+ * appended to the back of the queue and the job will be rescheduled. A job may only be scheduled
+ * when the {@link TaskExecutor} is not running ({@link TaskExecutor#getRunningInstance()}
+ * returning {@code null})
*
* @param delayMillis delay before running the job. Must be 0 if{@code isNewJob} is true.
* @param isNewJob a new job will be forced to run immediately.
@@ -141,11 +121,19 @@ public class TaskSchedulerJobService extends JobService implements TaskScheduler
* the wakelock
*/
@Override
- public void finish() {
- VvmLog.i(TAG, "finishing job and unbinding TaskSchedulerService");
+ public void finishAsync() {
+ VvmLog.i(TAG, "finishing job");
jobFinished(jobParameters, false);
jobParameters = null;
- unbindService(mConnection);
+ }
+
+ @MainThread
+ @Override
+ public boolean isFinished() {
+ Assert.isMainThread();
+ return getSystemService(JobScheduler.class)
+ .getPendingJob(ScheduledJobIds.VVM_TASK_SCHEDULER_JOB)
+ == null;
}
private static List<Bundle> getBundleList(Parcelable[] parcelables) {
diff --git a/java/com/android/voicemail/impl/scheduling/Tasks.java b/java/com/android/voicemail/impl/scheduling/Tasks.java
index 34debaf29..76da3d7f6 100644
--- a/java/com/android/voicemail/impl/scheduling/Tasks.java
+++ b/java/com/android/voicemail/impl/scheduling/Tasks.java
@@ -19,6 +19,7 @@ package com.android.voicemail.impl.scheduling;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
+import android.support.annotation.NonNull;
import com.android.voicemail.impl.VvmLog;
/** Common operations on {@link Task} */
@@ -32,6 +33,7 @@ final class Tasks {
* Create a task from a bundle. The bundle is created either with {@link #toBundle(Task)} or
* {@link #createIntent(Context, Class)} from the target {@link Task}
*/
+ @NonNull
public static Task createTask(Context context, Bundle extras) {
// The extra contains custom parcelables which cannot be unmarshalled by the framework class
// loader.
@@ -66,7 +68,8 @@ final class Tasks {
* necessary information.
*/
public static Intent createIntent(Context context, Class<? extends Task> task) {
- Intent intent = new Intent(context, TaskSchedulerService.class);
+ Intent intent = new Intent(context, TaskReceiver.class);
+ intent.setPackage(context.getPackageName());
intent.putExtra(EXTRA_CLASS_NAME, task.getName());
return intent;
}
diff --git a/java/com/android/voicemail/impl/settings/VoicemailSettingsFragment.java b/java/com/android/voicemail/impl/settings/VoicemailSettingsFragment.java
index 423fd11b4..ac5f3cac9 100644
--- a/java/com/android/voicemail/impl/settings/VoicemailSettingsFragment.java
+++ b/java/com/android/voicemail/impl/settings/VoicemailSettingsFragment.java
@@ -17,7 +17,6 @@ import android.annotation.TargetApi;
import android.content.Intent;
import android.os.Build.VERSION_CODES;
import android.os.Bundle;
-import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceFragment;
@@ -29,6 +28,8 @@ import android.telephony.TelephonyManager;
import com.android.dialer.common.Assert;
import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
+import com.android.dialer.notification.NotificationChannelManager;
+import com.android.dialer.notification.NotificationChannelManager.Channel;
import com.android.voicemail.VoicemailClient;
import com.android.voicemail.VoicemailComponent;
import com.android.voicemail.impl.OmtpVvmCarrierConfigHelper;
@@ -43,7 +44,6 @@ import com.android.voicemail.impl.sync.VvmAccountManager;
@TargetApi(VERSION_CODES.O)
public class VoicemailSettingsFragment extends PreferenceFragment
implements Preference.OnPreferenceChangeListener,
- VoicemailRingtonePreference.VoicemailRingtoneNameChangeListener,
VvmAccountManager.Listener {
private static final String TAG = "VmSettingsActivity";
@@ -51,17 +51,12 @@ public class VoicemailSettingsFragment extends PreferenceFragment
@Nullable private PhoneAccountHandle phoneAccountHandle;
private OmtpVvmCarrierConfigHelper omtpVvmCarrierConfigHelper;
- private VoicemailRingtonePreference voicemailRingtonePreference;
- private CheckBoxPreference voicemailVibration;
+ private Preference voicemailNotificationPreference;
private SwitchPreference voicemailVisualVoicemail;
private SwitchPreference autoArchiveSwitchPreference;
private Preference voicemailChangePinPreference;
private PreferenceScreen advancedSettings;
- // The ringtone name is retrieved with an async call. Cache the old name so there will be no jank
- // during transition.
- private CharSequence oldRingtoneName = "";
-
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
@@ -86,12 +81,12 @@ public class VoicemailSettingsFragment extends PreferenceFragment
PreferenceScreen prefSet = getPreferenceScreen();
- voicemailRingtonePreference =
- (VoicemailRingtonePreference)
- findPreference(getString(R.string.voicemail_notification_ringtone_key));
- voicemailRingtonePreference.setVoicemailRingtoneNameChangeListener(this);
- voicemailRingtonePreference.init(phoneAccountHandle, oldRingtoneName);
- voicemailRingtonePreference.setOnPreferenceClickListener(
+ voicemailNotificationPreference =
+ findPreference(getString(R.string.voicemail_notifications_key));
+ voicemailNotificationPreference.setIntent(
+ NotificationChannelManager.getInstance()
+ .getSettingsIntentForChannel(getContext(), Channel.VOICEMAIL, phoneAccountHandle));
+ voicemailNotificationPreference.setOnPreferenceClickListener(
new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
@@ -102,24 +97,6 @@ public class VoicemailSettingsFragment extends PreferenceFragment
}
});
- voicemailVibration =
- (CheckBoxPreference) findPreference(getString(R.string.voicemail_notification_vibrate_key));
- voicemailVibration.setOnPreferenceChangeListener(this);
- voicemailVibration.setChecked(
- getContext()
- .getSystemService(TelephonyManager.class)
- .isVoicemailVibrationEnabled(phoneAccountHandle));
- voicemailVibration.setOnPreferenceClickListener(
- new OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- Logger.get(getContext())
- .logImpression(DialerImpression.Type.VVM_CHANGE_VIBRATION_CLICKED);
- // Let the preference handle the click.
- return false;
- }
- });
-
voicemailVisualVoicemail =
(SwitchPreference) findPreference(getString(R.string.voicemail_visual_voicemail_key));
@@ -219,10 +196,6 @@ public class VoicemailSettingsFragment extends PreferenceFragment
logArchiveToggle((boolean) objValue);
VisualVoicemailSettingsUtil.setArchiveEnabled(
getContext(), phoneAccountHandle, (boolean) objValue);
- } else if (preference.getKey().equals(voicemailVibration.getKey())) {
- getContext()
- .getSystemService(TelephonyManager.class)
- .setVoicemailVibrationEnabled(phoneAccountHandle, (boolean) objValue);
}
// Always let the preference setting proceed.
@@ -255,11 +228,6 @@ public class VoicemailSettingsFragment extends PreferenceFragment
}
@Override
- public void onVoicemailRingtoneNameChanged(CharSequence name) {
- oldRingtoneName = name;
- }
-
- @Override
public void onActivationStateChanged(PhoneAccountHandle phoneAccountHandle, boolean isActivated) {
if (this.phoneAccountHandle.equals(phoneAccountHandle)) {
updateChangePin();
diff --git a/java/com/android/voicemail/impl/sms/OmtpMessageReceiver.java b/java/com/android/voicemail/impl/sms/OmtpMessageReceiver.java
index 43e2b85bd..ef0bf10e9 100644
--- a/java/com/android/voicemail/impl/sms/OmtpMessageReceiver.java
+++ b/java/com/android/voicemail/impl/sms/OmtpMessageReceiver.java
@@ -28,7 +28,7 @@ import android.telecom.PhoneAccountHandle;
import android.telephony.VisualVoicemailSms;
import com.android.voicemail.impl.ActivationTask;
import com.android.voicemail.impl.OmtpConstants;
-import com.android.voicemail.impl.OmtpReceiver;
+import com.android.voicemail.impl.OmtpService;
import com.android.voicemail.impl.OmtpVvmCarrierConfigHelper;
import com.android.voicemail.impl.Voicemail;
import com.android.voicemail.impl.Voicemail.Builder;
@@ -52,7 +52,7 @@ public class OmtpMessageReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
mContext = context;
- VisualVoicemailSms sms = intent.getExtras().getParcelable(OmtpReceiver.EXTRA_VOICEMAIL_SMS);
+ VisualVoicemailSms sms = intent.getExtras().getParcelable(OmtpService.EXTRA_VOICEMAIL_SMS);
PhoneAccountHandle phone = sms.getPhoneAccountHandle();
if (phone == null) {
diff --git a/java/com/android/voicemail/impl/sms/OmtpMessageSender.java b/java/com/android/voicemail/impl/sms/OmtpMessageSender.java
index 6c9333fb3..e9d145cde 100644
--- a/java/com/android/voicemail/impl/sms/OmtpMessageSender.java
+++ b/java/com/android/voicemail/impl/sms/OmtpMessageSender.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2015 Google Inc. All Rights Reserved.
+ * Copyright (C) 2015 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -20,8 +20,8 @@ import android.content.Context;
import android.support.annotation.Nullable;
import android.telecom.PhoneAccountHandle;
import android.telephony.SmsManager;
-import android.telephony.VisualVoicemailService;
import com.android.voicemail.impl.OmtpConstants;
+import com.android.voicemail.impl.TelephonyMangerCompat;
/**
* Send client originated OMTP messages to the OMTP server.
@@ -75,7 +75,7 @@ public abstract class OmtpMessageSender {
public void requestVvmStatus(@Nullable PendingIntent sentIntent) {}
protected void sendSms(String text, PendingIntent sentIntent) {
- VisualVoicemailService.sendVisualVoicemailSms(
+ TelephonyMangerCompat.sendVisualVoicemailSms(
mContext, mPhoneAccountHandle, mDestinationNumber, mApplicationPort, text, sentIntent);
}
diff --git a/java/com/android/voicemail/impl/sms/StatusSmsFetcher.java b/java/com/android/voicemail/impl/sms/StatusSmsFetcher.java
index dd9204d3e..d178628c6 100644
--- a/java/com/android/voicemail/impl/sms/StatusSmsFetcher.java
+++ b/java/com/android/voicemail/impl/sms/StatusSmsFetcher.java
@@ -33,7 +33,7 @@ import android.telephony.SmsManager;
import android.telephony.VisualVoicemailSms;
import com.android.voicemail.impl.Assert;
import com.android.voicemail.impl.OmtpConstants;
-import com.android.voicemail.impl.OmtpReceiver;
+import com.android.voicemail.impl.OmtpService;
import com.android.voicemail.impl.OmtpVvmCarrierConfigHelper;
import com.android.voicemail.impl.VvmLog;
import com.android.voicemail.impl.protocol.VisualVoicemailProtocol;
@@ -67,7 +67,7 @@ public class StatusSmsFetcher extends BroadcastReceiver implements Closeable {
mContext = context;
mPhoneAccountHandle = phoneAccountHandle;
IntentFilter filter = new IntentFilter(ACTION_REQUEST_SENT_INTENT);
- filter.addAction(OmtpReceiver.ACTION_SMS_RECEIVED);
+ filter.addAction(OmtpService.ACTION_SMS_RECEIVED);
context.registerReceiver(this, filter);
}
@@ -110,7 +110,7 @@ public class StatusSmsFetcher extends BroadcastReceiver implements Closeable {
return;
}
- VisualVoicemailSms sms = intent.getExtras().getParcelable(OmtpReceiver.EXTRA_VOICEMAIL_SMS);
+ VisualVoicemailSms sms = intent.getExtras().getParcelable(OmtpService.EXTRA_VOICEMAIL_SMS);
if (!mPhoneAccountHandle.equals(sms.getPhoneAccountHandle())) {
return;
diff --git a/java/com/android/voicemail/impl/sync/OmtpVvmSyncService.java b/java/com/android/voicemail/impl/sync/OmtpVvmSyncService.java
index af934dd3c..3443737cd 100644
--- a/java/com/android/voicemail/impl/sync/OmtpVvmSyncService.java
+++ b/java/com/android/voicemail/impl/sync/OmtpVvmSyncService.java
@@ -36,6 +36,7 @@ import com.android.voicemail.impl.VvmLog;
import com.android.voicemail.impl.fetch.VoicemailFetchedCallback;
import com.android.voicemail.impl.imap.ImapHelper;
import com.android.voicemail.impl.imap.ImapHelper.InitializingException;
+import com.android.voicemail.impl.mail.store.ImapFolder.Quota;
import com.android.voicemail.impl.scheduling.BaseTask;
import com.android.voicemail.impl.settings.VisualVoicemailSettingsUtil;
import com.android.voicemail.impl.sync.VvmNetworkRequest.NetworkWrapper;
@@ -152,21 +153,28 @@ public class OmtpVvmSyncService {
*/
private void autoDeleteAndArchiveVM(
ImapHelper imapHelper, PhoneAccountHandle phoneAccountHandle) {
-
- if (isArchiveAllowedAndEnabled(mContext, phoneAccountHandle)) {
- if ((float) imapHelper.getOccuupiedQuota() / (float) imapHelper.getTotalQuota()
- > AUTO_DELETE_ARCHIVE_VM_THRESHOLD) {
- deleteAndArchiveVM(imapHelper);
- imapHelper.updateQuota();
- LoggerUtils.logImpressionOnMainThread(
- mContext, DialerImpression.Type.VVM_ARCHIVE_AUTO_DELETED_VM_FROM_SERVER);
- } else {
- VvmLog.i(TAG, "no need to archive and auto delete VM, quota below threshold");
- }
- } else {
+ if (!isArchiveAllowedAndEnabled(mContext, phoneAccountHandle)) {
VvmLog.i(TAG, "autoDeleteAndArchiveVM is turned off");
LoggerUtils.logImpressionOnMainThread(
mContext, DialerImpression.Type.VVM_ARCHIVE_AUTO_DELETE_TURNED_OFF);
+ return;
+ }
+ Quota quotaOnServer = imapHelper.getQuota();
+ if (quotaOnServer == null) {
+ LoggerUtils.logImpressionOnMainThread(
+ mContext, DialerImpression.Type.VVM_ARCHIVE_AUTO_DELETE_FAILED_DUE_TO_FAILED_QUOTA_CHECK);
+ VvmLog.e(TAG, "autoDeleteAndArchiveVM failed - Can't retrieve Imap quota.");
+ return;
+ }
+
+ if ((float) quotaOnServer.occupied / (float) quotaOnServer.total
+ > AUTO_DELETE_ARCHIVE_VM_THRESHOLD) {
+ deleteAndArchiveVM(imapHelper, quotaOnServer);
+ imapHelper.updateQuota();
+ LoggerUtils.logImpressionOnMainThread(
+ mContext, DialerImpression.Type.VVM_ARCHIVE_AUTO_DELETED_VM_FROM_SERVER);
+ } else {
+ VvmLog.i(TAG, "no need to archive and auto delete VM, quota below threshold");
}
}
@@ -190,14 +198,15 @@ public class OmtpVvmSyncService {
return true;
}
- private void deleteAndArchiveVM(ImapHelper imapHelper) {
+ private void deleteAndArchiveVM(ImapHelper imapHelper, Quota quotaOnServer) {
// Archive column should only be used for 0 and above
Assert.isTrue(BuildCompat.isAtLeastO());
+
// The number of voicemails that exceed our threshold and should be deleted from the server
int numVoicemails =
- imapHelper.getOccuupiedQuota()
- - (int) (AUTO_DELETE_ARCHIVE_VM_THRESHOLD * imapHelper.getTotalQuota());
+ quotaOnServer.occupied - (int) (AUTO_DELETE_ARCHIVE_VM_THRESHOLD * quotaOnServer.total);
List<Voicemail> oldestVoicemails = mQueryHelper.oldestVoicemailsOnServer(numVoicemails);
+ VvmLog.w(TAG, "number of voicemails to delete " + numVoicemails);
if (!oldestVoicemails.isEmpty()) {
mQueryHelper.markArchivedInDatabase(oldestVoicemails);
imapHelper.markMessagesAsDeleted(oldestVoicemails);
diff --git a/java/com/android/voicemail/impl/sync/SyncOneTask.java b/java/com/android/voicemail/impl/sync/SyncOneTask.java
index 19419ec8a..cd2782abb 100644
--- a/java/com/android/voicemail/impl/sync/SyncOneTask.java
+++ b/java/com/android/voicemail/impl/sync/SyncOneTask.java
@@ -51,7 +51,7 @@ public class SyncOneTask extends BaseTask {
intent.putExtra(EXTRA_PHONE_ACCOUNT_HANDLE, phone);
intent.putExtra(EXTRA_SYNC_TYPE, OmtpVvmSyncService.SYNC_DOWNLOAD_ONE_TRANSCRIPTION);
intent.putExtra(EXTRA_VOICEMAIL, voicemail);
- context.startService(intent);
+ context.sendBroadcast(intent);
}
public SyncOneTask() {
diff --git a/java/com/android/voicemail/impl/sync/SyncTask.java b/java/com/android/voicemail/impl/sync/SyncTask.java
index 27f803401..0b3e090bf 100644
--- a/java/com/android/voicemail/impl/sync/SyncTask.java
+++ b/java/com/android/voicemail/impl/sync/SyncTask.java
@@ -48,7 +48,7 @@ public class SyncTask extends BaseTask {
Intent intent = BaseTask.createIntent(context, SyncTask.class, phone);
intent.putExtra(EXTRA_PHONE_ACCOUNT_HANDLE, phone);
intent.putExtra(EXTRA_SYNC_TYPE, syncType);
- context.startService(intent);
+ context.sendBroadcast(intent);
}
public SyncTask() {
diff --git a/java/com/android/voicemail/impl/sync/UploadTask.java b/java/com/android/voicemail/impl/sync/UploadTask.java
index 403074572..f2b2036b5 100644
--- a/java/com/android/voicemail/impl/sync/UploadTask.java
+++ b/java/com/android/voicemail/impl/sync/UploadTask.java
@@ -44,7 +44,7 @@ public class UploadTask extends BaseTask {
public static void start(Context context, PhoneAccountHandle phoneAccountHandle) {
Intent intent = BaseTask.createIntent(context, UploadTask.class, phoneAccountHandle);
- context.startService(intent);
+ context.sendBroadcast(intent);
}
@Override
diff --git a/java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java b/java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java
index bfc2e5f20..9b295dbb7 100644
--- a/java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java
+++ b/java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java
@@ -27,7 +27,6 @@ import android.provider.VoicemailContract;
import android.provider.VoicemailContract.Voicemails;
import android.support.annotation.NonNull;
import android.telecom.PhoneAccountHandle;
-import android.text.TextUtils;
import com.android.dialer.common.Assert;
import com.android.voicemail.impl.Voicemail;
import java.util.ArrayList;
@@ -54,12 +53,6 @@ public class VoicemailsQueryHelper {
Voicemails.DIRTY + "=1 AND " + Voicemails.DELETED + "!=1 AND " + Voicemails.IS_READ + "=1";
static final String DELETED_SELECTION = Voicemails.DELETED + "=1";
static final String ARCHIVED_SELECTION = Voicemails.ARCHIVED + "=0";
- private static final String PHONE_ACCOUNT_HANDLE_SELECTION =
- "("
- + Voicemails.PHONE_ACCOUNT_COMPONENT_NAME
- + "=? AND "
- + Voicemails.PHONE_ACCOUNT_ID
- + "=?)";
private Context mContext;
private ContentResolver mContentResolver;
@@ -101,23 +94,14 @@ public class VoicemailsQueryHelper {
/**
* Utility method to make queries to the voicemail database.
*
+ * <p>TODO(b/36588206) add PhoneAccountHandle filtering back
+ *
* @param selection A filter declaring which rows to return. {@code null} returns all rows.
* @return A list of voicemails according to the selection statement.
*/
private List<Voicemail> getLocalVoicemails(
- @NonNull PhoneAccountHandle phoneAccountHandle, String selection) {
-
- String[] selectionArgs =
- new String[] {
- phoneAccountHandle.getComponentName().flattenToString(), phoneAccountHandle.getId()
- };
- if (TextUtils.isEmpty(selection)) {
- selection = PHONE_ACCOUNT_HANDLE_SELECTION;
- } else {
- selection = PHONE_ACCOUNT_HANDLE_SELECTION + " AND (" + selection + ")";
- }
-
- Cursor cursor = mContentResolver.query(mSourceUri, PROJECTION, selection, selectionArgs, null);
+ @NonNull PhoneAccountHandle unusedPhoneAccountHandle, String selection) {
+ Cursor cursor = mContentResolver.query(mSourceUri, PROJECTION, selection, null, null);
if (cursor == null) {
return null;
}
diff --git a/java/com/android/voicemail/permissions.xml b/java/com/android/voicemail/permissions.xml
index adb4b6f54..bedf06898 100644
--- a/java/com/android/voicemail/permissions.xml
+++ b/java/com/android/voicemail/permissions.xml
@@ -3,7 +3,7 @@
<uses-sdk
android:minSdkVersion="23"
- android:targetSdkVersion="25"/>
+ android:targetSdkVersion="26"/>
<!-- Applications using this module should merge these permissions using android_manifest_merge -->