summaryrefslogtreecommitdiffstats
path: root/java/com/android/voicemail
diff options
context:
space:
mode:
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 -->