Remove Dialer Backup and Restore Code

We want to clean up all the Dialer Backup and Restore. This includes the existing Dolly backup code for settings/preferences (causes a crash) and the Hangouts K/V Backup (does not work).
The idea is to just have a clean simple K/V backup and restore for dialer, which will be in a follow up CL.

Bug: 64363054
Test: Manual. Builds successfully.
PiperOrigin-RevId: 164225991
Change-Id: Ic71cfaeed37a5c9f0002d8d12db757f19c0ddf1e
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 79912dc..ca18feb 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -103,18 +103,12 @@
   <uses-permission android:name="com.oppo.launcher.permission.WRITE_SETTINGS"/>
 
   <application
-    android:backupAgent='com.android.dialer.backup.DialerBackupAgent'
-    android:fullBackupOnly="true"
-    android:restoreAnyVersion="true"
     android:hardwareAccelerated="true"
     android:icon="@mipmap/ic_launcher_phone"
     android:label="@string/applicationLabel"
     android:name="com.android.dialer.binary.aosp.AospDialerApplication"
     android:supportsRtl="true"
     android:usesCleartextTraffic="false">
-
-
-
   </application>
 
 </manifest>
diff --git a/java/com/android/dialer/backup/AndroidManifest.xml b/java/com/android/dialer/backup/AndroidManifest.xml
deleted file mode 100644
index 1cbbe53..0000000
--- a/java/com/android/dialer/backup/AndroidManifest.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<!--
- ~ Copyright (C) 2016 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
- -->
-<manifest
-  xmlns:android="http://schemas.android.com/apk/res/android"
-  package="com.android.dialer.backup">
-
-  <application
-    android:backupAgent="com.android.dialer.backup.DialerBackupAgent"
-    android:fullBackupOnly="true"
-    android:restoreAnyVersion="true"
-    />
-
-</manifest>
diff --git a/java/com/android/dialer/backup/DialerBackupAgent.java b/java/com/android/dialer/backup/DialerBackupAgent.java
deleted file mode 100644
index a0baf39..0000000
--- a/java/com/android/dialer/backup/DialerBackupAgent.java
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- * Copyright (C) 2016 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.dialer.backup;
-
-import android.annotation.TargetApi;
-import android.app.backup.BackupAgent;
-import android.app.backup.BackupDataInput;
-import android.app.backup.BackupDataOutput;
-import android.app.backup.FullBackupDataOutput;
-import android.content.ContentResolver;
-import android.content.ContentValues;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Build.VERSION_CODES;
-import android.os.ParcelFileDescriptor;
-import android.provider.CallLog;
-import android.provider.CallLog.Calls;
-import android.provider.VoicemailContract;
-import android.provider.VoicemailContract.Voicemails;
-import android.telecom.PhoneAccountHandle;
-import android.util.Pair;
-import com.android.dialer.common.Assert;
-import com.android.dialer.common.LogUtil;
-import com.android.dialer.logging.DialerImpression;
-import com.android.dialer.logging.Logger;
-import com.android.dialer.telecom.TelecomUtil;
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.List;
-import java.util.Locale;
-
-/**
- * The Dialer backup agent to backup voicemails, and files under files, shared prefs and databases
- */
-public class DialerBackupAgent extends BackupAgent {
-  // File names suffix for backup/restore.
-  private static final String VOICEMAIL_BACKUP_FILE_SUFFIX = "_voicemail_backup.proto";
-  // File name formats for backup. It looks like 000000_voicemail_backup.proto, 0000001...
-  private static final String VOICEMAIL_BACKUP_FILE_FORMAT = "%06d" + VOICEMAIL_BACKUP_FILE_SUFFIX;
-  // Order by Date entries from database. We start backup from the newest.
-  private static final String ORDER_BY_DATE = "date DESC";
-  // Voicemail Uri Column
-  public static final String VOICEMAIL_URI = "voicemail_uri";
-  // Voicemail packages to backup
-  public static final String VOICEMAIL_SOURCE_PACKAGE = "com.google.android.dialer";
-
-  private long voicemailsBackedupSoFar = 0;
-  private long sizeOfVoicemailsBackedupSoFar = 0;
-  private boolean maxVoicemailBackupReached = false;
-
-  /**
-   * onBackup is used for Key/Value backup. Since we are using Dolly/Android Auto backup, we do not
-   * need to implement this method and Dolly should not be calling this. Instead Dolly will be
-   * calling onFullBackup.
-   */
-  @Override
-  public void onBackup(
-      ParcelFileDescriptor parcelFileDescriptor,
-      BackupDataOutput backupDataOutput,
-      ParcelFileDescriptor parcelFileDescriptor1)
-      throws IOException {
-    Logger.get(this).logImpression(DialerImpression.Type.BACKUP_ON_BACKUP);
-    Assert.fail("Android Backup should not call DialerBackupAgent.onBackup");
-  }
-
-  /**
-   * onRestore is used for Key/Value restore. Since we are using Dolly/Android Auto backup/restore,
-   * we need to implement this method only for backwards compatibility. Dolly should be calling
-   * onFileRestore during its restore.
-   */
-  @Override
-  public void onRestore(
-      BackupDataInput backupDataInput, int i, ParcelFileDescriptor parcelFileDescriptor)
-      throws IOException {
-    Logger.get(this).logImpression(DialerImpression.Type.BACKUP_ON_RESTORE);
-  }
-
-  @TargetApi(VERSION_CODES.M)
-  @Override
-  public void onFullBackup(FullBackupDataOutput data) throws IOException {
-    Logger.get(this).logImpression(DialerImpression.Type.BACKUP_ON_FULL_BACKUP);
-    LogUtil.i("DialerBackupAgent.onFullBackup", "performing dialer backup");
-
-    List<PhoneAccountHandle> phoneAccountsToArchive =
-        DialerBackupUtils.getPhoneAccountsToArchive(this);
-
-    if (!maxVoicemailBackupReached && !phoneAccountsToArchive.isEmpty()) {
-      voicemailsBackedupSoFar = 0;
-      sizeOfVoicemailsBackedupSoFar = 0;
-
-      LogUtil.i("DialerBackupAgent.onFullBackup", "autoBackup is enabled");
-      ContentResolver contentResolver = getContentResolver();
-      int limit = 1000;
-
-      Uri uri =
-          TelecomUtil.getCallLogUri(this)
-              .buildUpon()
-              .appendQueryParameter(Calls.LIMIT_PARAM_KEY, Integer.toString(limit))
-              .build();
-
-      LogUtil.i("DialerBackupAgent.onFullBackup", "backing up from: " + uri);
-
-      try (Cursor cursor =
-          contentResolver.query(
-              uri,
-              null,
-              String.format(
-                  "(%s = ? AND deleted = 0 AND  %s = ? AND ?)",
-                  Calls.TYPE, Voicemails.SOURCE_PACKAGE),
-              new String[] {
-                Integer.toString(CallLog.Calls.VOICEMAIL_TYPE),
-                VOICEMAIL_SOURCE_PACKAGE,
-                DialerBackupUtils.getPhoneAccountClause(phoneAccountsToArchive)
-              },
-              ORDER_BY_DATE,
-              null)) {
-
-        if (cursor == null) {
-          LogUtil.i("DialerBackupAgent.onFullBackup", "cursor was null");
-          return;
-        }
-
-        LogUtil.i("DialerBackupAgent.onFullBackup", "cursor count: " + cursor.getCount());
-        if (cursor.moveToFirst()) {
-          int fileNum = 0;
-          do {
-            backupRow(
-                data, cursor, String.format(Locale.US, VOICEMAIL_BACKUP_FILE_FORMAT, fileNum++));
-          } while (cursor.moveToNext() && !maxVoicemailBackupReached);
-        } else {
-          LogUtil.i("DialerBackupAgent.onFullBackup", "cursor.moveToFirst failed");
-        }
-      }
-    }
-    LogUtil.i(
-        "DialerBackupAgent.onFullBackup",
-        "vm files backed up: %d, vm size backed up:%d, "
-            + "max vm backup reached:%b, phone accounts to archive: %d",
-        voicemailsBackedupSoFar,
-        sizeOfVoicemailsBackedupSoFar,
-        maxVoicemailBackupReached,
-        phoneAccountsToArchive.size());
-    super.onFullBackup(data);
-    Logger.get(this).logImpression(DialerImpression.Type.BACKUP_FULL_BACKED_UP);
-  }
-
-  private void backupRow(FullBackupDataOutput data, Cursor cursor, String fileName)
-      throws IOException {
-
-    VoicemailInfo cursorRowInProto =
-        DialerBackupUtils.convertVoicemailCursorRowToProto(cursor, getContentResolver());
-
-    File file = new File(getFilesDir(), fileName);
-    DialerBackupUtils.writeProtoToFile(file, cursorRowInProto);
-
-    if (sizeOfVoicemailsBackedupSoFar + file.length()
-        > DialerBackupUtils.maxVoicemailSizeToBackup) {
-      Logger.get(this).logImpression(DialerImpression.Type.BACKUP_MAX_VM_BACKUP_REACHED);
-      maxVoicemailBackupReached = true;
-      file.delete();
-      return;
-    }
-
-    backupFile(file, data);
-  }
-
-  // TODO: Write to FullBackupDataOutput directly (b/33849960)
-  private void backupFile(File file, FullBackupDataOutput data) throws IOException {
-    try {
-      super.fullBackupFile(file, data);
-      sizeOfVoicemailsBackedupSoFar = sizeOfVoicemailsBackedupSoFar + file.length();
-      voicemailsBackedupSoFar++;
-      Logger.get(this).logImpression(DialerImpression.Type.BACKUP_VOICEMAIL_BACKED_UP);
-      LogUtil.i("DialerBackupAgent.backupFile", "file backed up:" + file.getAbsolutePath());
-    } finally {
-      file.delete();
-    }
-  }
-
-  // Being tracked in b/33839952
-  @Override
-  public void onQuotaExceeded(long backupDataBytes, long quotaBytes) {
-    Logger.get(this).logImpression(DialerImpression.Type.BACKUP_ON_QUOTA_EXCEEDED);
-    LogUtil.i("DialerBackupAgent.onQuotaExceeded", "does nothing");
-  }
-
-  @TargetApi(VERSION_CODES.M)
-  @Override
-  public void onRestoreFile(
-      ParcelFileDescriptor data, long size, File destination, int type, long mode, long mtime)
-      throws IOException {
-    LogUtil.i("DialerBackupAgent.onRestoreFile", "size:" + size + " destination: " + destination);
-
-    String fileName = destination.getName();
-    LogUtil.i("DialerBackupAgent.onRestoreFile", "file name: " + fileName);
-
-    if (fileName.endsWith(VOICEMAIL_BACKUP_FILE_SUFFIX)) {
-      if (DialerBackupUtils.canRestoreVoicemails(getContentResolver(), this)) {
-        try {
-          super.onRestoreFile(data, size, destination, type, mode, mtime);
-          restoreVoicemail(destination);
-          destination.delete();
-        } catch (IOException e) {
-          Logger.get(this).logImpression(DialerImpression.Type.BACKUP_ON_RESTORE_IO_EXCEPTION);
-          LogUtil.e(
-              "DialerBackupAgent.onRestoreFile", "could not restore voicemail - IOException: ", e);
-        }
-      } else {
-        LogUtil.i("DialerBackupAgent.onRestoreFile", "build does not support restoring voicemails");
-      }
-
-    } else {
-      super.onRestoreFile(data, size, destination, type, mode, mtime);
-      LogUtil.i("DialerBackupAgent.onRestoreFile", "restored: " + fileName);
-      Logger.get(this).logImpression(DialerImpression.Type.BACKUP_RESTORED_FILE);
-    }
-  }
-
-  @Override
-  public void onRestoreFinished() {
-    Logger.get(this).logImpression(DialerImpression.Type.BACKUP_ON_RESTORE_FINISHED);
-    LogUtil.i("DialerBackupAgent.onRestoreFinished", "do nothing");
-  }
-
-  @TargetApi(VERSION_CODES.M)
-  private void restoreVoicemail(File file) throws IOException {
-    Pair<ContentValues, byte[]> pair =
-        DialerBackupUtils.convertVoicemailProtoFileToContentValueAndAudioBytes(
-            file, getApplicationContext());
-
-    if (pair == null) {
-      LogUtil.i("DialerBackupAgent.restoreVoicemail", "not restoring VM due to duplicate");
-      Logger.get(this)
-          .logImpression(DialerImpression.Type.BACKUP_ON_RESTORE_VM_DUPLICATE_NOT_RESTORING);
-      return;
-    }
-
-    // TODO: Uniquely identify backup agent as the creator of this voicemail b/34084298
-    try (OutputStream restoreStream =
-        getContentResolver()
-            .openOutputStream(
-                getContentResolver()
-                    .insert(VoicemailContract.Voicemails.CONTENT_URI, pair.first))) {
-      DialerBackupUtils.copyAudioBytesToContentUri(pair.second, restoreStream);
-      Logger.get(this).logImpression(DialerImpression.Type.BACKUP_RESTORED_VOICEMAIL);
-    }
-  }
-}
diff --git a/java/com/android/dialer/backup/DialerBackupUtils.java b/java/com/android/dialer/backup/DialerBackupUtils.java
deleted file mode 100644
index fe714f6..0000000
--- a/java/com/android/dialer/backup/DialerBackupUtils.java
+++ /dev/null
@@ -1,363 +0,0 @@
-/*
- * Copyright (C) 2016 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.dialer.backup;
-
-import android.annotation.TargetApi;
-import android.content.ContentResolver;
-import android.content.ContentValues;
-import android.content.Context;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Build.VERSION_CODES;
-import android.provider.VoicemailContract;
-import android.provider.VoicemailContract.Voicemails;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.telecom.PhoneAccountHandle;
-import android.telecom.TelecomManager;
-import android.util.Pair;
-import com.android.dialer.common.Assert;
-import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderBindings;
-import com.android.voicemail.VoicemailComponent;
-import com.google.common.io.ByteStreams;
-import com.google.common.io.Files;
-import com.google.protobuf.ByteString;
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-/** Helper functions for DialerBackupAgent */
-public class DialerBackupUtils {
-  // Backup voicemails up to 20MB
-  static long maxVoicemailSizeToBackup = 20000000L;
-  static final String RESTORED_COLUMN = "restored";
-
-  private DialerBackupUtils() {}
-
-  public static void copyAudioBytesToContentUri(
-      @NonNull byte[] audioBytesArray, @NonNull OutputStream restoreStream) throws IOException {
-    LogUtil.i("DialerBackupUtils.copyStream", "audioByteArray length: " + audioBytesArray.length);
-
-    ByteArrayInputStream decodedStream = new ByteArrayInputStream(audioBytesArray);
-    LogUtil.i(
-        "DialerBackupUtils.copyStream", "decodedStream.available: " + decodedStream.available());
-
-    ByteStreams.copy(decodedStream, restoreStream);
-  }
-
-  public static @Nullable ByteString audioStreamToByteString(@NonNull InputStream stream)
-      throws IOException {
-    if (stream.available() > 0) {
-      return ByteString.readFrom(stream);
-    } else {
-      LogUtil.i("DialerBackupUtils.audioStreamToByteArray", "no audio stream to backup");
-    }
-    return ByteString.EMPTY;
-  }
-
-  public static void writeProtoToFile(@NonNull File file, @NonNull VoicemailInfo voicemailInfo)
-      throws IOException {
-    LogUtil.i(
-        "DialerBackupUtils.writeProtoToFile",
-        "backup " + voicemailInfo + " to " + file.getAbsolutePath());
-
-    byte[] bytes = voicemailInfo.toByteArray();
-    Files.write(bytes, file);
-  }
-
-  /** Only restore voicemails that have the restored column in calllog (NMR2+ builds) */
-  @TargetApi(VERSION_CODES.M)
-  public static boolean canRestoreVoicemails(ContentResolver contentResolver, Context context) {
-    try (Cursor cursor = contentResolver.query(Voicemails.CONTENT_URI, null, null, null, null)) {
-      // Restored column only exists in NMR2 and above builds.
-      if (cursor.getColumnIndex(RESTORED_COLUMN) != -1) {
-        LogUtil.i("DialerBackupUtils.canRestoreVoicemails", "Build supports restore");
-        return true;
-      } else {
-        LogUtil.i("DialerBackupUtils.canRestoreVoicemails", "Build does not support restore");
-        return false;
-      }
-    }
-  }
-
-  public static VoicemailInfo protoFileToVoicemailInfo(@NonNull File file) throws IOException {
-    byte[] byteArray = Files.toByteArray(file);
-    return VoicemailInfo.parseFrom(byteArray);
-  }
-
-  @TargetApi(VERSION_CODES.M)
-  public static VoicemailInfo convertVoicemailCursorRowToProto(
-      @NonNull Cursor cursor, @NonNull ContentResolver contentResolver) throws IOException {
-
-    VoicemailInfo.Builder voicemailInfo = VoicemailInfo.newBuilder();
-
-    for (int i = 0; i < cursor.getColumnCount(); ++i) {
-      String name = cursor.getColumnName(i);
-      String value = cursor.getString(i);
-
-      LogUtil.i(
-          "DialerBackupUtils.convertVoicemailCursorRowToProto",
-          "column index: %d, column name: %s, column value: %s",
-          i,
-          name,
-          value);
-
-      switch (name) {
-        case Voicemails.DATE:
-          voicemailInfo.setDate(value);
-          break;
-        case Voicemails.DELETED:
-          voicemailInfo.setDeleted(value);
-          break;
-        case Voicemails.DIRTY:
-          voicemailInfo.setDirty(value);
-          break;
-        case Voicemails.DIR_TYPE:
-          voicemailInfo.setDirType(value);
-          break;
-        case Voicemails.DURATION:
-          voicemailInfo.setDuration(value);
-          break;
-        case Voicemails.HAS_CONTENT:
-          voicemailInfo.setHasContent(value);
-          break;
-        case Voicemails.IS_READ:
-          voicemailInfo.setIsRead(value);
-          break;
-        case Voicemails.ITEM_TYPE:
-          voicemailInfo.setItemType(value);
-          break;
-        case Voicemails.LAST_MODIFIED:
-          voicemailInfo.setLastModified(value);
-          break;
-        case Voicemails.MIME_TYPE:
-          voicemailInfo.setMimeType(value);
-          break;
-        case Voicemails.NUMBER:
-          voicemailInfo.setNumber(value);
-          break;
-        case Voicemails.PHONE_ACCOUNT_COMPONENT_NAME:
-          voicemailInfo.setPhoneAccountComponentName(value);
-          break;
-        case Voicemails.PHONE_ACCOUNT_ID:
-          voicemailInfo.setPhoneAccountId(value);
-          break;
-        case Voicemails.SOURCE_DATA:
-          voicemailInfo.setSourceData(value);
-          break;
-        case Voicemails.SOURCE_PACKAGE:
-          voicemailInfo.setSourcePackage(value);
-          break;
-        case Voicemails.TRANSCRIPTION:
-          voicemailInfo.setTranscription(value);
-          break;
-        case DialerBackupAgent.VOICEMAIL_URI:
-          try (InputStream audioStream = contentResolver.openInputStream(Uri.parse(value))) {
-            voicemailInfo.setEncodedVoicemailKey(audioStreamToByteString(audioStream));
-          }
-          break;
-        default:
-          LogUtil.i(
-              "DialerBackupUtils.convertVoicemailCursorRowToProto",
-              "Not backing up column: %s, with value: %s",
-              name,
-              value);
-          break;
-      }
-    }
-    return voicemailInfo.build();
-  }
-
-  public static Pair<ContentValues, byte[]> convertVoicemailProtoFileToContentValueAndAudioBytes(
-      @NonNull File file, Context context) throws IOException {
-
-    VoicemailInfo voicemailInfo = DialerBackupUtils.protoFileToVoicemailInfo(file);
-    LogUtil.i(
-        "DialerBackupUtils.convertVoicemailProtoFileToContentValueAndEncodedAudio",
-        "file name: "
-            + file.getName()
-            + " voicemailInfo size: "
-            + voicemailInfo.getSerializedSize());
-
-    if (isDuplicate(context, voicemailInfo)) {
-      LogUtil.i(
-          "DialerBackupUtils.convertVoicemailProtoFileToContentValueAndEncodedAudio",
-          "voicemail already exists");
-      return null;
-    } else {
-      ContentValues contentValues = new ContentValues();
-
-      if (voicemailInfo.hasDate()) {
-        contentValues.put(Voicemails.DATE, voicemailInfo.getDate());
-      }
-      if (voicemailInfo.hasDeleted()) {
-        contentValues.put(Voicemails.DELETED, voicemailInfo.getDeleted());
-      }
-      if (!voicemailInfo.hasDirty()) {
-        contentValues.put(Voicemails.DIRTY, voicemailInfo.getDirty());
-      }
-      if (!voicemailInfo.hasDuration()) {
-        contentValues.put(Voicemails.DURATION, voicemailInfo.getDuration());
-      }
-      if (!voicemailInfo.hasIsRead()) {
-        contentValues.put(Voicemails.IS_READ, voicemailInfo.getIsRead());
-      }
-      if (!voicemailInfo.hasLastModified()) {
-        contentValues.put(Voicemails.LAST_MODIFIED, voicemailInfo.getLastModified());
-      }
-      if (!voicemailInfo.hasMimeType()) {
-        contentValues.put(Voicemails.MIME_TYPE, voicemailInfo.getMimeType());
-      }
-      if (!voicemailInfo.hasNumber()) {
-        contentValues.put(Voicemails.NUMBER, voicemailInfo.getNumber());
-      }
-      if (!voicemailInfo.hasPhoneAccountComponentName()) {
-        contentValues.put(
-            Voicemails.PHONE_ACCOUNT_COMPONENT_NAME, voicemailInfo.getPhoneAccountComponentName());
-      }
-      if (!voicemailInfo.hasPhoneAccountId()) {
-        contentValues.put(Voicemails.PHONE_ACCOUNT_ID, voicemailInfo.getPhoneAccountId());
-      }
-      if (!voicemailInfo.hasSourceData()) {
-        contentValues.put(Voicemails.SOURCE_DATA, voicemailInfo.getSourceData());
-      }
-      if (!voicemailInfo.hasSourcePackage()) {
-        contentValues.put(Voicemails.SOURCE_PACKAGE, voicemailInfo.getSourcePackage());
-      }
-      if (!voicemailInfo.hasTranscription()) {
-        contentValues.put(Voicemails.TRANSCRIPTION, voicemailInfo.getTranscription());
-      }
-      contentValues.put(VoicemailContract.Voicemails.HAS_CONTENT, 1);
-      contentValues.put(RESTORED_COLUMN, "1");
-      contentValues.put(Voicemails.SOURCE_PACKAGE, getSourcePackage(context, voicemailInfo));
-
-      LogUtil.i(
-          "DialerBackupUtils.convertVoicemailProtoFileToContentValueAndEncodedAudio",
-          "cv: " + contentValues);
-
-      return Pair.create(contentValues, voicemailInfo.getEncodedVoicemailKey().toByteArray());
-    }
-  }
-
-  /**
-   * We should be using the system package name as the source package if there is no endless VM/VM
-   * archive present on the device. This is to separate pre-O (no endless VM) and O+ (endless VM)
-   * devices. This ensures that the source of truth for VMs is the VM server when endless VM is not
-   * enabled, and when endless VM/archived VMs is present, the source of truth for VMs is the device
-   * itself.
-   */
-  private static String getSourcePackage(Context context, VoicemailInfo voicemailInfo) {
-    if (ConfigProviderBindings.get(context)
-        .getBoolean("voicemail_restore_force_system_source_package", false)) {
-      LogUtil.i("DialerBackupUtils.getSourcePackage", "forcing system source package");
-      return "com.android.phone";
-    }
-    if (ConfigProviderBindings.get(context)
-        .getBoolean("voicemail_restore_check_archive_for_source_package", true)) {
-      if ("1".equals(voicemailInfo.getArchived())) {
-        LogUtil.i(
-            "DialerBackupUtils.getSourcePackage",
-            "voicemail was archived, using app source package");
-        // Using our app's source package will prevent the archived voicemail from being deleted by
-        // the system when it syncs with the voicemail server. In most cases the user will not see
-        // duplicate voicemails because this voicemail was archived and likely deleted from the
-        // voicemail server.
-        return context.getPackageName();
-      } else {
-        // Use the system source package. This means that if the voicemail is not present on the
-        // voicemail server then the system will delete it when it syncs.
-        LogUtil.i(
-            "DialerBackupUtils.getSourcePackage",
-            "voicemail was not archived, using system source package");
-        return "com.android.phone";
-      }
-    }
-    // Use our app's source package. This means that if the system syncs voicemail from the server
-    // the user could potentially get duplicate voicemails.
-    LogUtil.i("DialerBackupUtils.getSourcePackage", "defaulting to using app source package");
-    return context.getPackageName();
-  }
-
-  @TargetApi(VERSION_CODES.M)
-  private static boolean isDuplicate(Context context, VoicemailInfo voicemailInfo) {
-    // This checks for VM that might already exist, and doesn't restore them
-    try (Cursor cursor =
-        context
-            .getContentResolver()
-            .query(
-                VoicemailContract.Voicemails.CONTENT_URI,
-                null,
-                String.format(
-                    "(%s = ? AND %s = ? AND %s = ?)",
-                    Voicemails.NUMBER, Voicemails.DATE, Voicemails.DURATION),
-                new String[] {
-                  voicemailInfo.getNumber(), voicemailInfo.getDate(), voicemailInfo.getDuration()
-                },
-                null,
-                null)) {
-      if (cursor.moveToFirst()
-          && ConfigProviderBindings.get(context)
-              .getBoolean("enable_vm_restore_no_duplicate", true)) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  public static String getPhoneAccountClause(List<PhoneAccountHandle> phoneAccountsToArchive) {
-    Assert.checkArgument(!phoneAccountsToArchive.isEmpty());
-    StringBuilder whereQuery = new StringBuilder();
-
-    whereQuery.append("(");
-
-    for (int i = 0; i < phoneAccountsToArchive.size(); i++) {
-      whereQuery.append(
-          Voicemails.PHONE_ACCOUNT_ID + " = " + phoneAccountsToArchive.get(i).getId());
-
-      if (phoneAccountsToArchive.size() > 1 && i < phoneAccountsToArchive.size() - 1) {
-        whereQuery.append(" OR ");
-      }
-    }
-    whereQuery.append(")");
-    return whereQuery.toString();
-  }
-
-  public static List<PhoneAccountHandle> getPhoneAccountsToArchive(Context context) {
-    List<PhoneAccountHandle> phoneAccountsToBackUp = new ArrayList<>();
-
-    for (PhoneAccountHandle handle :
-        context.getSystemService(TelecomManager.class).getCallCapablePhoneAccounts()) {
-
-      if (VoicemailComponent.get(context)
-          .getVoicemailClient()
-          .isVoicemailArchiveEnabled(context, handle)) {
-        phoneAccountsToBackUp.add(handle);
-        LogUtil.i(
-            "DialerBackupUtils.getPhoneAccountsToArchive", "enabled for: " + handle.toString());
-      } else {
-        LogUtil.i(
-            "DialerBackupUtils.getPhoneAccountsToArchive", "not enabled for: " + handle.toString());
-      }
-    }
-    return phoneAccountsToBackUp;
-  }
-}
diff --git a/java/com/android/dialer/backup/proto/voicemail_info.proto b/java/com/android/dialer/backup/proto/voicemail_info.proto
deleted file mode 100644
index 7497683..0000000
--- a/java/com/android/dialer/backup/proto/voicemail_info.proto
+++ /dev/null
@@ -1,31 +0,0 @@
-syntax = "proto2";
-
-option java_package = "com.android.dialer.backup";
-option java_multiple_files = true;
-option optimize_for = LITE_RUNTIME;
-
-
-package com.android.dialer.backup;
-
-// Next id: 20
-message VoicemailInfo {
-  optional string date = 1;
-  optional string deleted = 2;
-  optional string dirty = 3;
-  optional string dir_type = 4;
-  optional string duration = 5;
-  optional string has_content = 6;
-  optional string is_read = 7;
-  optional string item_type = 8;
-  optional string last_modified = 9;
-  optional string mime_type = 10;
-  optional string number = 11;
-  optional string phone_account_component_name = 12;
-  optional string phone_account_id = 13;
-  optional string source_data = 14;
-  optional string source_package = 15;
-  optional string transcription = 16;
-  optional string voicemail_uri = 17;
-  optional bytes encoded_voicemail_key = 18;
-  optional string archived = 19;
-}
diff --git a/java/com/android/dialer/binary/google/AndroidManifest.xml b/java/com/android/dialer/binary/google/AndroidManifest.xml
index a27056f..95c7dda 100644
--- a/java/com/android/dialer/binary/google/AndroidManifest.xml
+++ b/java/com/android/dialer/binary/google/AndroidManifest.xml
@@ -101,18 +101,12 @@
   <uses-permission android:name="com.oppo.launcher.permission.WRITE_SETTINGS"/>
 
   <application
-    android:backupAgent='com.android.dialer.backup.DialerBackupAgent'
-    android:fullBackupOnly="true"
-    android:restoreAnyVersion="true"
     android:hardwareAccelerated="true"
     android:icon="@mipmap/ic_launcher_phone"
     android:label="@string/applicationLabel"
     android:name="com.android.dialer.binary.google.GoogleStubDialerApplication"
     android:supportsRtl="true"
     android:usesCleartextTraffic="false">
-
-
-
   </application>
 
 </manifest>
diff --git a/java/com/android/dialer/logging/dialer_impression.proto b/java/com/android/dialer/logging/dialer_impression.proto
index 92ff0a6..1b6f3c2 100644
--- a/java/com/android/dialer/logging/dialer_impression.proto
+++ b/java/com/android/dialer/logging/dialer_impression.proto
@@ -267,24 +267,24 @@
     VOICEMAIL_CONFIGURATION_STATE_CORRUPTION_DETECTED_FROM_NOTIFICATION = 1080;
 
     // Android Auto Backup and Restore (Dolly)
-    BACKUP_ON_BACKUP = 1081;
-    BACKUP_ON_FULL_BACKUP = 1082;
-    BACKUP_ON_BACKUP_DISABLED = 1083;
-    BACKUP_VOICEMAIL_BACKED_UP = 1084;
-    BACKUP_FULL_BACKED_UP = 1085;
-    BACKUP_ON_BACKUP_JSON_EXCEPTION = 1086;
+    BACKUP_ON_BACKUP = 1081 [deprecated = true];
+    BACKUP_ON_FULL_BACKUP = 1082 [deprecated = true];
+    BACKUP_ON_BACKUP_DISABLED = 1083 [deprecated = true];
+    BACKUP_VOICEMAIL_BACKED_UP = 1084 [deprecated = true];
+    BACKUP_FULL_BACKED_UP = 1085 [deprecated = true];
+    BACKUP_ON_BACKUP_JSON_EXCEPTION = 1086 [deprecated = true];
 
-    BACKUP_ON_QUOTA_EXCEEDED = 1087;
+    BACKUP_ON_QUOTA_EXCEEDED = 1087 [deprecated = true];
 
-    BACKUP_ON_RESTORE = 1088;
-    BACKUP_RESTORED_FILE = 1089;
-    BACKUP_RESTORED_VOICEMAIL = 1090;
-    BACKUP_ON_RESTORE_FINISHED = 1091;
-    BACKUP_ON_RESTORE_DISABLED = 1092;
-    BACKUP_ON_RESTORE_JSON_EXCEPTION = 1093;
-    BACKUP_ON_RESTORE_IO_EXCEPTION = 1094;
+    BACKUP_ON_RESTORE = 1088 [deprecated = true];
+    BACKUP_RESTORED_FILE = 1089 [deprecated = true];
+    BACKUP_RESTORED_VOICEMAIL = 1090 [deprecated = true];
+    BACKUP_ON_RESTORE_FINISHED = 1091 [deprecated = true];
+    BACKUP_ON_RESTORE_DISABLED = 1092 [deprecated = true];
+    BACKUP_ON_RESTORE_JSON_EXCEPTION = 1093 [deprecated = true];
+    BACKUP_ON_RESTORE_IO_EXCEPTION = 1094 [deprecated = true];
 
-    BACKUP_MAX_VM_BACKUP_REACHED = 1095;
+    BACKUP_MAX_VM_BACKUP_REACHED = 1095 [deprecated = true];
 
     EVENT_ANSWER_HINT_ACTIVATED = 1096;
     EVENT_ANSWER_HINT_DEACTIVATED = 1097;
@@ -298,7 +298,7 @@
     INCOMING_VIDEO_CALL = 1102;
     USER_PARTICIPATED_IN_A_VIDEO_CALL = 1103;
 
-    BACKUP_ON_RESTORE_VM_DUPLICATE_NOT_RESTORING = 1104;
+    BACKUP_ON_RESTORE_VM_DUPLICATE_NOT_RESTORING = 1104 [deprecated = true];
 
     // User tapped the 'Share and call' button to start the call composer
     CALL_LOG_SHARE_AND_CALL = 1105;
diff --git a/java/com/android/voicemail/impl/AndroidManifest.xml b/java/com/android/voicemail/impl/AndroidManifest.xml
index fd591be..1abc96d 100644
--- a/java/com/android/voicemail/impl/AndroidManifest.xml
+++ b/java/com/android/voicemail/impl/AndroidManifest.xml
@@ -18,7 +18,6 @@
   package="com.android.voicemail.impl">
 
   <application
-    android:allowBackup="false"
     android:supportsRtl="true"
     android:usesCleartextTraffic="true"
     android:defaultToDeviceProtectedStorage="true"