diff --git a/java/com/android/contacts/common/Collapser.java b/java/com/android/contacts/common/Collapser.java
index 0b5c48b..f3d6850 100644
--- a/java/com/android/contacts/common/Collapser.java
+++ b/java/com/android/contacts/common/Collapser.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2009 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,8 +18,9 @@
 package com.android.contacts.common;
 
 import android.content.Context;
-import java.util.Iterator;
+
 import java.util.List;
+import java.util.Objects;
 
 /**
  * Class used for collapsing data items into groups of similar items. The data items that should be
@@ -74,12 +76,7 @@
     }
 
     // Remove the null items
-    Iterator<T> itr = list.iterator();
-    while (itr.hasNext()) {
-      if (itr.next() == null) {
-        itr.remove();
-      }
-    }
+    list.removeIf(Objects::isNull);
   }
 
   /*
diff --git a/java/com/android/contacts/common/ContactsUtils.java b/java/com/android/contacts/common/ContactsUtils.java
index 5dac957..1a24361 100644
--- a/java/com/android/contacts/common/ContactsUtils.java
+++ b/java/com/android/contacts/common/ContactsUtils.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2009 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,7 +20,7 @@
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Directory;
 
-import androidx.annotation.IntDef;
+import androidx.annotation.LongDef;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -80,6 +81,6 @@
    */
   @Retention(RetentionPolicy.SOURCE)
   // TODO: Switch to @LongDef when @LongDef is available in the support library
-  @IntDef({(int) USER_TYPE_CURRENT, (int) USER_TYPE_WORK})
+  @LongDef({USER_TYPE_CURRENT, USER_TYPE_WORK})
   public @interface UserType {}
 }
diff --git a/java/com/android/contacts/common/MoreContactUtils.java b/java/com/android/contacts/common/MoreContactUtils.java
index 9749cab..8fc2270 100644
--- a/java/com/android/contacts/common/MoreContactUtils.java
+++ b/java/com/android/contacts/common/MoreContactUtils.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2012 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,6 +24,7 @@
 import android.telephony.PhoneNumberUtils;
 import android.text.TextUtils;
 import android.view.View;
+
 import com.android.contacts.common.model.account.AccountType;
 import com.google.i18n.phonenumbers.NumberParseException;
 import com.google.i18n.phonenumbers.PhoneNumberUtil;
diff --git a/java/com/android/contacts/common/dialog/CallSubjectDialog.java b/java/com/android/contacts/common/dialog/CallSubjectDialog.java
index 3ddf4da..610316b 100644
--- a/java/com/android/contacts/common/dialog/CallSubjectDialog.java
+++ b/java/com/android/contacts/common/dialog/CallSubjectDialog.java
@@ -45,12 +45,12 @@
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.preference.PreferenceManager;
 
+import com.android.dialer.R;
 import com.android.dialer.animation.AnimUtils;
 import com.android.dialer.callintent.CallInitiationType;
 import com.android.dialer.callintent.CallIntentBuilder;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.contactphoto.ContactPhotoManager;
-import com.android.dialer.contacts.resources.R;
 import com.android.dialer.lettertile.LetterTileDrawable;
 import com.android.dialer.precall.PreCall;
 import com.android.dialer.util.ViewUtil;
@@ -88,8 +88,6 @@
   private TextView mNumberView;
   private EditText mCallSubjectView;
   private TextView mCharacterLimitView;
-  private View mHistoryButton;
-  private View mSendAndCallButton;
   private ListView mSubjectList;
 
   private int mLimit = CALL_SUBJECT_LIMIT;
@@ -276,22 +274,22 @@
     mBackgroundView = findViewById(R.id.call_subject_dialog);
     mBackgroundView.setOnClickListener(mBackgroundListener);
     mDialogView = findViewById(R.id.dialog_view);
-    mContactPhoto = (QuickContactBadge) findViewById(R.id.contact_photo);
-    mNameView = (TextView) findViewById(R.id.name);
-    mNumberView = (TextView) findViewById(R.id.number);
-    mCallSubjectView = (EditText) findViewById(R.id.call_subject);
+    mContactPhoto = findViewById(R.id.contact_photo);
+    mNameView = findViewById(R.id.name);
+    mNumberView = findViewById(R.id.number);
+    mCallSubjectView = findViewById(R.id.call_subject);
     mCallSubjectView.addTextChangedListener(mTextWatcher);
     mCallSubjectView.setOnClickListener(mCallSubjectClickListener);
     InputFilter[] filters = new InputFilter[1];
     filters[0] = new InputFilter.LengthFilter(mLimit);
     mCallSubjectView.setFilters(filters);
-    mCharacterLimitView = (TextView) findViewById(R.id.character_limit);
-    mHistoryButton = findViewById(R.id.history_button);
-    mHistoryButton.setOnClickListener(mHistoryOnClickListener);
-    mHistoryButton.setVisibility(mSubjectHistory.isEmpty() ? View.GONE : View.VISIBLE);
-    mSendAndCallButton = findViewById(R.id.send_and_call_button);
-    mSendAndCallButton.setOnClickListener(mSendAndCallOnClickListener);
-    mSubjectList = (ListView) findViewById(R.id.subject_list);
+    mCharacterLimitView = findViewById(R.id.character_limit);
+    View historyButton = findViewById(R.id.history_button);
+    historyButton.setOnClickListener(mHistoryOnClickListener);
+    historyButton.setVisibility(mSubjectHistory.isEmpty() ? View.GONE : View.VISIBLE);
+    View sendAndCallButton = findViewById(R.id.send_and_call_button);
+    sendAndCallButton.setOnClickListener(mSendAndCallOnClickListener);
+    mSubjectList = findViewById(R.id.subject_list);
     mSubjectList.setOnItemClickListener(mItemClickListener);
     mSubjectList.setVisibility(View.GONE);
 
@@ -356,13 +354,14 @@
       length = subjectText.length();
     }
 
-    mCharacterLimitView.setText(getString(R.string.call_subject_limit, length, mLimit));
+    mCharacterLimitView.setText(getString(R.string.call_subject_limit,
+            String.valueOf(length), String.valueOf(mLimit)));
     if (length >= mLimit) {
       mCharacterLimitView.setTextColor(
-          getResources().getColor(R.color.call_subject_limit_exceeded));
+          getResources().getColor(R.color.call_subject_limit_exceeded, getTheme()));
     } else {
       mCharacterLimitView.setTextColor(
-          getResources().getColor(R.color.dialer_secondary_text_color));
+          getResources().getColor(R.color.dialer_secondary_text_color, getTheme()));
     }
   }
 
@@ -414,9 +413,8 @@
     final int dialogStartingBottom = mDialogView.getBottom();
     if (show) {
       // Showing the subject list; bind the list of history items to the list and show it.
-      ArrayAdapter<String> adapter =
-          new ArrayAdapter<String>(
-              CallSubjectDialog.this, R.layout.call_subject_history_list_item, mSubjectHistory);
+      ArrayAdapter<String> adapter = new ArrayAdapter<>(CallSubjectDialog.this,
+              R.layout.call_subject_history_list_item, mSubjectHistory);
       mSubjectList.setAdapter(adapter);
       mSubjectList.setVisibility(View.VISIBLE);
     } else {
diff --git a/java/com/android/contacts/common/list/ContactEntry.java b/java/com/android/contacts/common/list/ContactEntry.java
index 75e6509..3194255 100644
--- a/java/com/android/contacts/common/list/ContactEntry.java
+++ b/java/com/android/contacts/common/list/ContactEntry.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2013 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,6 +20,7 @@
 import android.content.Context;
 import android.net.Uri;
 import android.provider.ContactsContract.PinnedPositions;
+
 import com.android.dialer.contacts.ContactsComponent;
 
 /** Class to hold contact information */
diff --git a/java/com/android/contacts/common/list/ContactListFilterController.java b/java/com/android/contacts/common/list/ContactListFilterController.java
index a0093e3..f9b9710 100644
--- a/java/com/android/contacts/common/list/ContactListFilterController.java
+++ b/java/com/android/contacts/common/list/ContactListFilterController.java
@@ -70,8 +70,7 @@
 class ContactListFilterControllerImpl extends ContactListFilterController {
 
   private final Context mAppContext;
-  private final List<ContactListFilterListener> mListeners =
-      new ArrayList<ContactListFilterListener>();
+  private final List<ContactListFilterListener> mListeners = new ArrayList<>();
   private ContactListFilter mFilter;
 
   public ContactListFilterControllerImpl(Context context) {
diff --git a/java/com/android/contacts/common/list/ViewPagerTabStrip.java b/java/com/android/contacts/common/list/ViewPagerTabStrip.java
index 329b72d..80dec96 100644
--- a/java/com/android/contacts/common/list/ViewPagerTabStrip.java
+++ b/java/com/android/contacts/common/list/ViewPagerTabStrip.java
@@ -24,6 +24,7 @@
 import android.util.AttributeSet;
 import android.view.View;
 import android.widget.LinearLayout;
+
 import com.android.dialer.contacts.resources.R;
 import com.android.dialer.theme.base.ThemeComponent;
 
diff --git a/java/com/android/contacts/common/model/AccountTypeManager.java b/java/com/android/contacts/common/model/AccountTypeManager.java
index 283863e..70009a5 100644
--- a/java/com/android/contacts/common/model/AccountTypeManager.java
+++ b/java/com/android/contacts/common/model/AccountTypeManager.java
@@ -40,6 +40,7 @@
 import android.text.TextUtils;
 import android.util.ArrayMap;
 import android.util.Log;
+
 import com.android.contacts.common.MoreContactUtils;
 import com.android.contacts.common.list.ContactListFilterController;
 import com.android.contacts.common.model.account.AccountType;
@@ -52,6 +53,7 @@
 import com.android.contacts.common.model.account.SamsungAccountType;
 import com.android.contacts.common.model.dataitem.DataKind;
 import com.android.contacts.common.util.Constants;
+
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -162,8 +164,7 @@
     implements OnAccountsUpdateListener, SyncStatusObserver {
 
   private static final Map<AccountTypeWithDataSet, AccountType>
-      EMPTY_UNMODIFIABLE_ACCOUNT_TYPE_MAP =
-          Collections.unmodifiableMap(new HashMap<AccountTypeWithDataSet, AccountType>());
+      EMPTY_UNMODIFIABLE_ACCOUNT_TYPE_MAP = Collections.unmodifiableMap(new HashMap<>());
 
   /**
    * A sample contact URI used to test whether any activities will respond to an invitable intent
@@ -519,9 +520,9 @@
       }
     }
 
-    Collections.sort(allAccounts, ACCOUNT_COMPARATOR);
-    Collections.sort(contactWritableAccounts, ACCOUNT_COMPARATOR);
-    Collections.sort(groupWritableAccounts, ACCOUNT_COMPARATOR);
+    allAccounts.sort(ACCOUNT_COMPARATOR);
+    contactWritableAccounts.sort(ACCOUNT_COMPARATOR);
+    groupWritableAccounts.sort(ACCOUNT_COMPARATOR);
 
     synchronized (this) {
       mAccountTypesWithDataSets = accountTypesByTypeAndDataSet;
diff --git a/java/com/android/contacts/common/model/Contact.java b/java/com/android/contacts/common/model/Contact.java
index 44b94f7..08c5ce8 100644
--- a/java/com/android/contacts/common/model/Contact.java
+++ b/java/com/android/contacts/common/model/Contact.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2012 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,9 +23,11 @@
 import android.provider.ContactsContract.Data;
 import android.provider.ContactsContract.Directory;
 import android.provider.ContactsContract.DisplayNameSources;
+
 import com.android.contacts.common.GroupMetaData;
 import com.android.contacts.common.model.account.AccountType;
 import com.google.common.collect.ImmutableList;
+
 import java.util.ArrayList;
 
 /**
diff --git a/java/com/android/contacts/common/model/ContactLoader.java b/java/com/android/contacts/common/model/ContactLoader.java
index 3f8e8f9..8942bf4 100644
--- a/java/com/android/contacts/common/model/ContactLoader.java
+++ b/java/com/android/contacts/common/model/ContactLoader.java
@@ -57,6 +57,10 @@
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
@@ -69,10 +73,6 @@
 import java.util.Objects;
 import java.util.Set;
 
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-
 /** Loads a single Contact and all it constituent RawContacts. */
 public class ContactLoader extends AsyncTaskLoader<Contact> {
 
@@ -297,8 +297,7 @@
       // status data.  Initially, result has empty entities and statuses.
       long currentRawContactId = -1;
       RawContact rawContact = null;
-      ImmutableList.Builder<RawContact> rawContactsBuilder =
-          new ImmutableList.Builder<RawContact>();
+      ImmutableList.Builder<RawContact> rawContactsBuilder = new ImmutableList.Builder<>();
       do {
         long rawContactId = cursor.getLong(ContactQuery.RAW_CONTACT_ID);
         if (rawContactId != currentRawContactId) {
@@ -393,8 +392,7 @@
 
   /** Sets the "invitable" account types to {@link Contact#mInvitableAccountTypes}. */
   private void loadInvitableAccountTypes(Contact contactData) {
-    final ImmutableList.Builder<AccountType> resultListBuilder =
-        new ImmutableList.Builder<AccountType>();
+    final ImmutableList.Builder<AccountType> resultListBuilder = new ImmutableList.Builder<>();
     if (!contactData.isUserProfile()) {
       Map<AccountTypeWithDataSet, AccountType> invitables =
           AccountTypeManager.getInstance(getContext()).getUsableInvitableAccountTypes();
@@ -599,7 +597,7 @@
    */
   private void loadGroupMetaData(Contact result) {
     StringBuilder selection = new StringBuilder();
-    ArrayList<String> selectionArgs = new ArrayList<String>();
+    ArrayList<String> selectionArgs = new ArrayList<>();
     final HashSet<AccountKey> accountsSeen = new HashSet<>();
     for (RawContact rawContact : result.getRawContacts()) {
       final String accountName = rawContact.getAccountName();
@@ -624,8 +622,7 @@
         selection.append(")");
       }
     }
-    final ImmutableList.Builder<GroupMetaData> groupListBuilder =
-        new ImmutableList.Builder<GroupMetaData>();
+    final ImmutableList.Builder<GroupMetaData> groupListBuilder = new ImmutableList.Builder<>();
     final Cursor cursor =
         getContext()
             .getContentResolver()
@@ -933,7 +930,7 @@
     static {
       List<String> projectionList = Lists.newArrayList(COLUMNS_INTERNAL);
       projectionList.add(Data.CARRIER_PRESENCE);
-      COLUMNS = projectionList.toArray(new String[projectionList.size()]);
+      COLUMNS = projectionList.toArray(new String[0]);
     }
   }
 
diff --git a/java/com/android/contacts/common/model/RawContact.java b/java/com/android/contacts/common/model/RawContact.java
index 37c5634..cdb2571 100644
--- a/java/com/android/contacts/common/model/RawContact.java
+++ b/java/com/android/contacts/common/model/RawContact.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2012 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -25,9 +26,11 @@
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Data;
 import android.provider.ContactsContract.RawContacts;
+
 import com.android.contacts.common.model.account.AccountType;
 import com.android.contacts.common.model.account.AccountWithDataSet;
 import com.android.contacts.common.model.dataitem.DataItem;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
@@ -69,7 +72,7 @@
 
   public RawContact(ContentValues values) {
     mValues = values;
-    mDataItems = new ArrayList<NamedDataItem>();
+    mDataItems = new ArrayList<>();
   }
 
   /**
diff --git a/java/com/android/contacts/common/model/account/AccountType.java b/java/com/android/contacts/common/model/account/AccountType.java
index 3e659e5..fd9eb0e 100644
--- a/java/com/android/contacts/common/model/account/AccountType.java
+++ b/java/com/android/contacts/common/model/account/AccountType.java
@@ -36,7 +36,6 @@
 
 import java.text.Collator;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
@@ -207,7 +206,7 @@
    * the account.
    */
   public List<String> getExtensionPackageNames() {
-    return new ArrayList<String>();
+    return new ArrayList<>();
   }
 
   /**
@@ -238,13 +237,6 @@
   /** Whether or not groups created under this account type have editable membership lists. */
   public abstract boolean isGroupMembershipEditable();
 
-  /** Return list of {@link DataKind} supported, sorted by {@link DataKind#weight}. */
-  public ArrayList<DataKind> getSortedDataKinds() {
-    // TODO: optimize by marking if already sorted
-    Collections.sort(mKinds, sWeightComparator);
-    return mKinds;
-  }
-
   /** Find the {@link DataKind} for a specific MIME-type, if it's handled by this data source. */
   public DataKind getKindForMimetype(String mimeType) {
     return this.mMimeKinds.get(mimeType);
diff --git a/java/com/android/contacts/common/model/account/AccountTypeWithDataSet.java b/java/com/android/contacts/common/model/account/AccountTypeWithDataSet.java
index a32ebe1..24fcac3 100644
--- a/java/com/android/contacts/common/model/account/AccountTypeWithDataSet.java
+++ b/java/com/android/contacts/common/model/account/AccountTypeWithDataSet.java
@@ -23,6 +23,7 @@
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.RawContacts;
 import android.text.TextUtils;
+
 import java.util.Objects;
 
 /** Encapsulates an "account type" string and a "data set" string. */
diff --git a/java/com/android/contacts/common/model/account/AccountWithDataSet.java b/java/com/android/contacts/common/model/account/AccountWithDataSet.java
index 54e9a3c..63399d1 100644
--- a/java/com/android/contacts/common/model/account/AccountWithDataSet.java
+++ b/java/com/android/contacts/common/model/account/AccountWithDataSet.java
@@ -16,20 +16,11 @@
 
 package com.android.contacts.common.model.account;
 
-import android.accounts.Account;
-import android.content.Context;
-import android.database.Cursor;
-import android.net.Uri;
 import android.os.Parcel;
 import android.os.Parcelable;
-import android.provider.BaseColumns;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.RawContacts;
 import android.text.TextUtils;
-import java.util.ArrayList;
-import java.util.List;
+
 import java.util.Objects;
-import java.util.regex.Pattern;
 
 /** Wrapper for an account that includes a data set (which may be null). */
 public class AccountWithDataSet implements Parcelable {
diff --git a/java/com/android/contacts/common/model/account/BaseAccountType.java b/java/com/android/contacts/common/model/account/BaseAccountType.java
index d96e28c..2fb17ce 100644
--- a/java/com/android/contacts/common/model/account/BaseAccountType.java
+++ b/java/com/android/contacts/common/model/account/BaseAccountType.java
@@ -38,18 +38,21 @@
 import android.util.ArrayMap;
 import android.util.AttributeSet;
 import android.view.inputmethod.EditorInfo;
+
 import com.android.contacts.common.model.dataitem.DataKind;
 import com.android.contacts.common.util.CommonDateUtils;
 import com.android.contacts.common.util.ContactDisplayUtils;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.contacts.resources.R;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
 
 public abstract class BaseAccountType extends AccountType {
 
diff --git a/java/com/android/contacts/common/model/account/ExchangeAccountType.java b/java/com/android/contacts/common/model/account/ExchangeAccountType.java
index 0a95e7e..20f3c09 100644
--- a/java/com/android/contacts/common/model/account/ExchangeAccountType.java
+++ b/java/com/android/contacts/common/model/account/ExchangeAccountType.java
@@ -29,10 +29,12 @@
 import android.provider.ContactsContract.CommonDataKinds.StructuredName;
 import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
 import android.provider.ContactsContract.CommonDataKinds.Website;
+
 import com.android.contacts.common.model.dataitem.DataKind;
 import com.android.contacts.common.util.CommonDateUtils;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.contacts.resources.R;
+
 import java.util.ArrayList;
 import java.util.Locale;
 
diff --git a/java/com/android/contacts/common/model/account/ExternalAccountType.java b/java/com/android/contacts/common/model/account/ExternalAccountType.java
index 24cd6ed..d93195b 100644
--- a/java/com/android/contacts/common/model/account/ExternalAccountType.java
+++ b/java/com/android/contacts/common/model/account/ExternalAccountType.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2009 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -35,11 +36,12 @@
 import com.android.dialer.R;
 import com.android.dialer.common.LogUtil;
 
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
 
 /** A general contacts account type descriptor. */
 public class ExternalAccountType extends BaseAccountType {
@@ -153,7 +155,7 @@
       }
     }
 
-    mExtensionPackageNames = new ArrayList<String>();
+    mExtensionPackageNames = new ArrayList<>();
     mInviteActionLabelResId =
         resolveExternalResId(
             context,
@@ -401,9 +403,7 @@
           addKind(kind);
         }
       }
-    } catch (XmlPullParserException e) {
-      throw new DefinitionException("Problem reading XML", e);
-    } catch (IOException e) {
+    } catch (XmlPullParserException | IOException e) {
       throw new DefinitionException("Problem reading XML", e);
     }
   }
diff --git a/java/com/android/contacts/common/model/account/FallbackAccountType.java b/java/com/android/contacts/common/model/account/FallbackAccountType.java
index 9e8af62..6fc02f1 100644
--- a/java/com/android/contacts/common/model/account/FallbackAccountType.java
+++ b/java/com/android/contacts/common/model/account/FallbackAccountType.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2009 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,7 +18,7 @@
 package com.android.contacts.common.model.account;
 
 import android.content.Context;
-import com.android.contacts.common.model.dataitem.DataKind;
+
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.contacts.resources.R;
 
diff --git a/java/com/android/contacts/common/model/account/GoogleAccountType.java b/java/com/android/contacts/common/model/account/GoogleAccountType.java
index e10ade4..55ab945 100644
--- a/java/com/android/contacts/common/model/account/GoogleAccountType.java
+++ b/java/com/android/contacts/common/model/account/GoogleAccountType.java
@@ -24,10 +24,12 @@
 import android.provider.ContactsContract.CommonDataKinds.Event;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
 import android.provider.ContactsContract.CommonDataKinds.Relation;
+
 import com.android.contacts.common.model.dataitem.DataKind;
 import com.android.contacts.common.util.CommonDateUtils;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.contacts.resources.R;
+
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
diff --git a/java/com/android/contacts/common/model/account/SamsungAccountType.java b/java/com/android/contacts/common/model/account/SamsungAccountType.java
index 77c0575..a550c3f 100644
--- a/java/com/android/contacts/common/model/account/SamsungAccountType.java
+++ b/java/com/android/contacts/common/model/account/SamsungAccountType.java
@@ -23,10 +23,12 @@
 import android.provider.ContactsContract.CommonDataKinds.Phone;
 import android.provider.ContactsContract.CommonDataKinds.Relation;
 import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
+
 import com.android.contacts.common.model.dataitem.DataKind;
 import com.android.contacts.common.util.CommonDateUtils;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.contacts.resources.R;
+
 import java.util.ArrayList;
 import java.util.Locale;
 
diff --git a/java/com/android/contacts/common/model/dataitem/DataItem.java b/java/com/android/contacts/common/model/dataitem/DataItem.java
index 43a472b..ebfe85e 100644
--- a/java/com/android/contacts/common/model/dataitem/DataItem.java
+++ b/java/com/android/contacts/common/model/dataitem/DataItem.java
@@ -35,6 +35,7 @@
 import android.provider.ContactsContract.CommonDataKinds.Website;
 import android.provider.ContactsContract.Contacts.Data;
 import android.provider.ContactsContract.Contacts.Entity;
+
 import com.android.contacts.common.Collapser;
 import com.android.contacts.common.MoreContactUtils;
 import com.android.contacts.common.model.account.AccountType.EditType;
diff --git a/java/com/android/contacts/common/model/dataitem/DataKind.java b/java/com/android/contacts/common/model/dataitem/DataKind.java
index 3b470a2..194aa84 100644
--- a/java/com/android/contacts/common/model/dataitem/DataKind.java
+++ b/java/com/android/contacts/common/model/dataitem/DataKind.java
@@ -19,10 +19,12 @@
 import android.content.ContentValues;
 import android.content.Context;
 import android.provider.ContactsContract.Data;
+
 import com.android.contacts.common.model.account.AccountType.EditField;
 import com.android.contacts.common.model.account.AccountType.EditType;
 import com.android.contacts.common.model.account.AccountType.StringInflater;
 import com.google.common.collect.Iterators;
+
 import java.text.SimpleDateFormat;
 import java.util.List;
 
diff --git a/java/com/android/contacts/common/model/dataitem/EmailDataItem.java b/java/com/android/contacts/common/model/dataitem/EmailDataItem.java
index 2fe2978..aed419d 100644
--- a/java/com/android/contacts/common/model/dataitem/EmailDataItem.java
+++ b/java/com/android/contacts/common/model/dataitem/EmailDataItem.java
@@ -17,6 +17,7 @@
 package com.android.contacts.common.model.dataitem;
 
 import android.content.ContentValues;
+import android.provider.ContactsContract;
 import android.provider.ContactsContract.CommonDataKinds.Email;
 
 /**
diff --git a/java/com/android/contacts/common/model/dataitem/EventDataItem.java b/java/com/android/contacts/common/model/dataitem/EventDataItem.java
index 15d9880..4060e67 100644
--- a/java/com/android/contacts/common/model/dataitem/EventDataItem.java
+++ b/java/com/android/contacts/common/model/dataitem/EventDataItem.java
@@ -18,6 +18,7 @@
 
 import android.content.ContentValues;
 import android.content.Context;
+import android.provider.ContactsContract;
 import android.provider.ContactsContract.CommonDataKinds.Event;
 import android.text.TextUtils;
 
diff --git a/java/com/android/contacts/common/model/dataitem/GroupMembershipDataItem.java b/java/com/android/contacts/common/model/dataitem/GroupMembershipDataItem.java
index 42a0dcd..7b5115d 100644
--- a/java/com/android/contacts/common/model/dataitem/GroupMembershipDataItem.java
+++ b/java/com/android/contacts/common/model/dataitem/GroupMembershipDataItem.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2012 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,7 +19,6 @@
 
 import android.content.ContentValues;
 import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
 
 /**
  * Represents a group memebership data item, wrapping the columns in {@link
diff --git a/java/com/android/contacts/common/model/dataitem/IdentityDataItem.java b/java/com/android/contacts/common/model/dataitem/IdentityDataItem.java
index 81e6934..09cca10 100644
--- a/java/com/android/contacts/common/model/dataitem/IdentityDataItem.java
+++ b/java/com/android/contacts/common/model/dataitem/IdentityDataItem.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2012 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,7 +18,7 @@
 package com.android.contacts.common.model.dataitem;
 
 import android.content.ContentValues;
-import android.provider.ContactsContract.CommonDataKinds.Identity;
+import android.provider.ContactsContract;
 
 /**
  * Represents an identity data item, wrapping the columns in {@link
diff --git a/java/com/android/contacts/common/model/dataitem/ImDataItem.java b/java/com/android/contacts/common/model/dataitem/ImDataItem.java
index 8fbf059..efc6383 100644
--- a/java/com/android/contacts/common/model/dataitem/ImDataItem.java
+++ b/java/com/android/contacts/common/model/dataitem/ImDataItem.java
@@ -18,6 +18,7 @@
 
 import android.content.ContentValues;
 import android.content.Context;
+import android.provider.ContactsContract;
 import android.provider.ContactsContract.CommonDataKinds.Email;
 import android.provider.ContactsContract.CommonDataKinds.Im;
 import android.text.TextUtils;
diff --git a/java/com/android/contacts/common/model/dataitem/NicknameDataItem.java b/java/com/android/contacts/common/model/dataitem/NicknameDataItem.java
index a448be7..0eabb40 100644
--- a/java/com/android/contacts/common/model/dataitem/NicknameDataItem.java
+++ b/java/com/android/contacts/common/model/dataitem/NicknameDataItem.java
@@ -17,6 +17,7 @@
 package com.android.contacts.common.model.dataitem;
 
 import android.content.ContentValues;
+import android.provider.ContactsContract;
 import android.provider.ContactsContract.CommonDataKinds.Nickname;
 
 /**
diff --git a/java/com/android/contacts/common/model/dataitem/NoteDataItem.java b/java/com/android/contacts/common/model/dataitem/NoteDataItem.java
index b55ecc3..ec9a862 100644
--- a/java/com/android/contacts/common/model/dataitem/NoteDataItem.java
+++ b/java/com/android/contacts/common/model/dataitem/NoteDataItem.java
@@ -17,6 +17,7 @@
 package com.android.contacts.common.model.dataitem;
 
 import android.content.ContentValues;
+import android.provider.ContactsContract;
 import android.provider.ContactsContract.CommonDataKinds.Note;
 
 /**
diff --git a/java/com/android/contacts/common/model/dataitem/PhoneDataItem.java b/java/com/android/contacts/common/model/dataitem/PhoneDataItem.java
index a314f7a..e25328f 100644
--- a/java/com/android/contacts/common/model/dataitem/PhoneDataItem.java
+++ b/java/com/android/contacts/common/model/dataitem/PhoneDataItem.java
@@ -19,6 +19,7 @@
 import android.content.ContentValues;
 import android.content.Context;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
+
 import com.android.dialer.phonenumberutil.PhoneNumberHelper;
 
 /**
diff --git a/java/com/android/contacts/common/model/dataitem/RelationDataItem.java b/java/com/android/contacts/common/model/dataitem/RelationDataItem.java
index fdbcbb3..517b7a2 100644
--- a/java/com/android/contacts/common/model/dataitem/RelationDataItem.java
+++ b/java/com/android/contacts/common/model/dataitem/RelationDataItem.java
@@ -18,6 +18,7 @@
 
 import android.content.ContentValues;
 import android.content.Context;
+import android.provider.ContactsContract;
 import android.provider.ContactsContract.CommonDataKinds.Relation;
 import android.text.TextUtils;
 
diff --git a/java/com/android/contacts/common/model/dataitem/StructuredNameDataItem.java b/java/com/android/contacts/common/model/dataitem/StructuredNameDataItem.java
index a2ddf43..2b5b480 100644
--- a/java/com/android/contacts/common/model/dataitem/StructuredNameDataItem.java
+++ b/java/com/android/contacts/common/model/dataitem/StructuredNameDataItem.java
@@ -17,6 +17,7 @@
 package com.android.contacts.common.model.dataitem;
 
 import android.content.ContentValues;
+import android.provider.ContactsContract;
 import android.provider.ContactsContract.CommonDataKinds.StructuredName;
 import android.provider.ContactsContract.Contacts.Data;
 
diff --git a/java/com/android/contacts/common/model/dataitem/WebsiteDataItem.java b/java/com/android/contacts/common/model/dataitem/WebsiteDataItem.java
index b8400ec..53b1039 100644
--- a/java/com/android/contacts/common/model/dataitem/WebsiteDataItem.java
+++ b/java/com/android/contacts/common/model/dataitem/WebsiteDataItem.java
@@ -17,6 +17,7 @@
 package com.android.contacts.common.model.dataitem;
 
 import android.content.ContentValues;
+import android.provider.ContactsContract;
 import android.provider.ContactsContract.CommonDataKinds.Website;
 
 /**
diff --git a/java/com/android/contacts/common/util/ContactDisplayUtils.java b/java/com/android/contacts/common/util/ContactDisplayUtils.java
index 22da719..74123f7 100644
--- a/java/com/android/contacts/common/util/ContactDisplayUtils.java
+++ b/java/com/android/contacts/common/util/ContactDisplayUtils.java
@@ -31,6 +31,7 @@
 
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.contacts.resources.R;
+
 import java.util.Objects;
 
 /** Methods for handling various contact data labels. */
diff --git a/java/com/android/contacts/common/util/ContactListViewUtils.java b/java/com/android/contacts/common/util/ContactListViewUtils.java
index ba24079..5bdb96d 100644
--- a/java/com/android/contacts/common/util/ContactListViewUtils.java
+++ b/java/com/android/contacts/common/util/ContactListViewUtils.java
@@ -16,11 +16,8 @@
 
 package com.android.contacts.common.util;
 
-import android.content.res.Resources;
 import android.view.View;
 import android.widget.ListView;
-import com.android.dialer.contacts.resources.R;
-import com.android.dialer.util.ViewUtil;
 
 /** Utilities for configuring ListViews with a card background. */
 public class ContactListViewUtils {
diff --git a/java/com/android/contacts/common/util/ContactLoaderUtils.java b/java/com/android/contacts/common/util/ContactLoaderUtils.java
index 371bb4e..df081b1 100644
--- a/java/com/android/contacts/common/util/ContactLoaderUtils.java
+++ b/java/com/android/contacts/common/util/ContactLoaderUtils.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2011 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,10 +20,11 @@
 import android.content.ContentResolver;
 import android.content.ContentUris;
 import android.net.Uri;
-import android.provider.Contacts;
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.RawContacts;
 
+import com.android.contacts.common.model.ContactLoader;
+
 /** Utility methods for the {@link ContactLoader}. */
 public final class ContactLoaderUtils {
 
@@ -36,7 +38,6 @@
    *
    * <p>Do not call from the UI thread.
    */
-  @SuppressWarnings("deprecation")
   public static Uri ensureIsContactUri(final ContentResolver resolver, final Uri uri)
       throws IllegalArgumentException {
     if (uri == null) {
diff --git a/java/com/android/contacts/common/util/TelephonyManagerUtils.java b/java/com/android/contacts/common/util/TelephonyManagerUtils.java
index e4c2c63..10af0f5 100644
--- a/java/com/android/contacts/common/util/TelephonyManagerUtils.java
+++ b/java/com/android/contacts/common/util/TelephonyManagerUtils.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2013 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -15,6 +16,7 @@
  */
 package com.android.contacts.common.util;
 
+import android.annotation.SuppressLint;
 import android.content.Context;
 import android.telephony.TelephonyManager;
 
@@ -27,6 +29,7 @@
    * @param context Current application context
    * @return Voicemail tag, the alphabetic identifier associated with the voice mail number.
    */
+  @SuppressLint("MissingPermission")
   public static String getVoiceMailAlphaTag(Context context) {
     final TelephonyManager telephonyManager =
         (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
diff --git a/java/com/android/contacts/common/widget/ActivityTouchLinearLayout.java b/java/com/android/contacts/common/widget/ActivityTouchLinearLayout.java
index 2988a5a..7df82c0 100644
--- a/java/com/android/contacts/common/widget/ActivityTouchLinearLayout.java
+++ b/java/com/android/contacts/common/widget/ActivityTouchLinearLayout.java
@@ -20,6 +20,7 @@
 import android.util.AttributeSet;
 import android.view.MotionEvent;
 import android.widget.LinearLayout;
+
 import com.android.dialer.util.TouchPointManager;
 
 /**
diff --git a/java/com/android/contacts/common/widget/SelectPhoneAccountDialogOptionsUtil.java b/java/com/android/contacts/common/widget/SelectPhoneAccountDialogOptionsUtil.java
index 6106bc3..18b0055 100644
--- a/java/com/android/contacts/common/widget/SelectPhoneAccountDialogOptionsUtil.java
+++ b/java/com/android/contacts/common/widget/SelectPhoneAccountDialogOptionsUtil.java
@@ -19,11 +19,10 @@
 
 import android.os.Parcel;
 import android.os.UserHandle;
-import android.telecom.PhoneAccount;
 import android.telecom.PhoneAccountHandle;
+
 import com.android.dialer.common.Assert;
 import com.android.dialer.telecom.TelecomUtil;
-
 import com.google.protobuf.ByteString;
 
 import java.util.Collection;
diff --git a/java/com/android/dialer/activecalls/ActiveCallsComponent.java b/java/com/android/dialer/activecalls/ActiveCallsComponent.java
index 99e0e94..f583b83 100644
--- a/java/com/android/dialer/activecalls/ActiveCallsComponent.java
+++ b/java/com/android/dialer/activecalls/ActiveCallsComponent.java
@@ -17,8 +17,10 @@
 package com.android.dialer.activecalls;
 
 import android.content.Context;
+
 import com.android.dialer.inject.HasRootComponent;
 import com.android.dialer.inject.IncludeInDialerRoot;
+
 import dagger.Subcomponent;
 
 /** Component for {@link ActiveCalls} */
diff --git a/java/com/android/dialer/activecalls/ActiveCallsModule.java b/java/com/android/dialer/activecalls/ActiveCallsModule.java
index 9c02ba6..8ebb6ff 100644
--- a/java/com/android/dialer/activecalls/ActiveCallsModule.java
+++ b/java/com/android/dialer/activecalls/ActiveCallsModule.java
@@ -17,9 +17,11 @@
 package com.android.dialer.activecalls;
 
 import com.android.dialer.activecalls.impl.ActiveCallsImpl;
+
+import javax.inject.Singleton;
+
 import dagger.Binds;
 import dagger.Module;
-import javax.inject.Singleton;
 
 /** Module for {@link ActiveCallsComponent} */
 @Module
diff --git a/java/com/android/dialer/activecalls/impl/ActiveCallsImpl.java b/java/com/android/dialer/activecalls/impl/ActiveCallsImpl.java
index 10e6ffa..8995962 100644
--- a/java/com/android/dialer/activecalls/impl/ActiveCallsImpl.java
+++ b/java/com/android/dialer/activecalls/impl/ActiveCallsImpl.java
@@ -22,6 +22,7 @@
 import com.android.dialer.activecalls.ActiveCalls;
 import com.android.dialer.common.Assert;
 import com.google.common.collect.ImmutableList;
+
 import javax.inject.Inject;
 
 /** Implementation of {@link ActiveCalls} */
diff --git a/java/com/android/dialer/app/AndroidManifest.xml b/java/com/android/dialer/app/AndroidManifest.xml
index 400551b..c645f15 100644
--- a/java/com/android/dialer/app/AndroidManifest.xml
+++ b/java/com/android/dialer/app/AndroidManifest.xml
@@ -152,7 +152,8 @@
     <provider xmlns:tools="http://schemas.android.com/tools"
         android:name="androidx.startup.InitializationProvider"
         android:authorities="${applicationId}.androidx-startup"
-        tools:replace="android:authorities" />
+        android:exported="false"
+        tools:replace="android:authorities"/>
     <meta-data android:name="supports_per_number_preferred_account" android:value="true" />
   </application>
 </manifest>
diff --git a/java/com/android/dialer/app/calllog/CallLogActivity.java b/java/com/android/dialer/app/calllog/CallLogActivity.java
index 9416124..5df7fdd 100644
--- a/java/com/android/dialer/app/calllog/CallLogActivity.java
+++ b/java/com/android/dialer/app/calllog/CallLogActivity.java
@@ -86,14 +86,14 @@
     tabTitles[1] = getString(R.string.call_log_missed_title);
     tabTitles[2] = getString(R.string.call_log_stats_title);
 
-    viewPager = (ViewPager) findViewById(R.id.call_log_pager);
+    viewPager = findViewById(R.id.call_log_pager);
 
     viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
     viewPager.setAdapter(viewPagerAdapter);
     viewPager.setOffscreenPageLimit(1);
     viewPager.setOnPageChangeListener(this);
 
-    viewPagerTabs = (ViewPagerTabs) findViewById(R.id.viewpager_header);
+    viewPagerTabs = findViewById(R.id.viewpager_header);
 
     viewPagerTabs.setViewPager(viewPager);
     viewPager.setCurrentItem(startingTab);
@@ -212,11 +212,6 @@
     }
   }
 
-  @Override
-  public void onBackPressed() {
-    super.onBackPressed();
-  }
-
   /** Adapter for the view pager. */
   public class ViewPagerAdapter extends FragmentPagerAdapter {
 
diff --git a/java/com/android/dialer/app/calllog/CallLogAdapter.java b/java/com/android/dialer/app/calllog/CallLogAdapter.java
index 6057649..869f90b 100644
--- a/java/com/android/dialer/app/calllog/CallLogAdapter.java
+++ b/java/com/android/dialer/app/calllog/CallLogAdapter.java
@@ -19,8 +19,6 @@
 
 import android.app.Activity;
 import android.content.ContentUris;
-import android.content.DialogInterface;
-import android.content.DialogInterface.OnCancelListener;
 import android.content.res.Resources;
 import android.database.Cursor;
 import android.net.Uri;
@@ -70,8 +68,6 @@
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.FragmentUtils.FragmentUtilListener;
 import com.android.dialer.common.LogUtil;
-import com.android.dialer.common.concurrent.AsyncTaskExecutor;
-import com.android.dialer.common.concurrent.AsyncTaskExecutors;
 import com.android.dialer.contacts.ContactsComponent;
 import com.android.dialer.logging.ContactSource;
 import com.android.dialer.logging.ContactSource.Type;
@@ -630,7 +626,7 @@
    * @param position The position of the entry.
    */
   @Override
-  public void onBindViewHolder(ViewHolder viewHolder, int position) {
+  public void onBindViewHolder(@NonNull ViewHolder viewHolder, int position) {
     Trace.beginSection("onBindViewHolder: " + position);
     switch (getItemViewType(position)) {
       case VIEW_TYPE_ALERT:
@@ -713,10 +709,7 @@
   }
 
   private boolean isHiddenRow(@Nullable String number, long rowId) {
-    if (hiddenRowIds.contains(rowId)) {
-      return true;
-    }
-    return false;
+    return hiddenRowIds.contains(rowId);
   }
 
   private void loadAndRender(
diff --git a/java/com/android/dialer/app/calllog/CallLogFragment.java b/java/com/android/dialer/app/calllog/CallLogFragment.java
index 9aa1af6..82f56d6 100644
--- a/java/com/android/dialer/app/calllog/CallLogFragment.java
+++ b/java/com/android/dialer/app/calllog/CallLogFragment.java
@@ -44,6 +44,7 @@
 import androidx.annotation.CallSuper;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.appcompat.content.res.AppCompatResources;
 import androidx.fragment.app.Fragment;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
@@ -669,8 +670,8 @@
   @Override
   public void setSelectAllModeToFalse() {
     selectAllMode = false;
-    selectUnselectAllIcon.setImageDrawable(
-        getContext().getDrawable(R.drawable.ic_empty_check_mark_white_24dp));
+    selectUnselectAllIcon.setImageDrawable(AppCompatResources.getDrawable(requireContext(),
+                    R.drawable.ic_empty_check_mark_white_24dp));
   }
 
   @Override
@@ -688,12 +689,12 @@
 
   private void updateSelectAllIcon() {
     if (selectAllMode) {
-      selectUnselectAllIcon.setImageDrawable(
-          getContext().getDrawable(R.drawable.ic_check_mark_blue_24dp));
+      selectUnselectAllIcon.setImageDrawable(AppCompatResources.getDrawable(requireContext(),
+                      R.drawable.ic_check_mark_blue_24dp));
       getAdapter().onAllSelected();
     } else {
-      selectUnselectAllIcon.setImageDrawable(
-          getContext().getDrawable(R.drawable.ic_empty_check_mark_white_24dp));
+      selectUnselectAllIcon.setImageDrawable(AppCompatResources.getDrawable(requireContext(),
+              R.drawable.ic_empty_check_mark_white_24dp));
       getAdapter().onAllDeselected();
     }
   }
diff --git a/java/com/android/dialer/app/calllog/CallLogGroupBuilder.java b/java/com/android/dialer/app/calllog/CallLogGroupBuilder.java
index b12fcbb..e4d27a4 100644
--- a/java/com/android/dialer/app/calllog/CallLogGroupBuilder.java
+++ b/java/com/android/dialer/app/calllog/CallLogGroupBuilder.java
@@ -31,7 +31,6 @@
 import com.android.dialer.phonenumberutil.PhoneNumberHelper;
 
 import java.time.ZoneId;
-import java.util.Objects;
 
 /**
  * Groups together calls in the call log. The primary grouping attempts to group together calls to
@@ -190,7 +189,7 @@
    */
   private boolean equalNumbers(@Nullable String number1, @Nullable String number2) {
     if (PhoneNumberHelper.isUriNumber(number1) || PhoneNumberHelper.isUriNumber(number2)) {
-      return compareSipAddresses(number1, number2);
+      return PhoneNumberHelper.compareSipAddresses(number1, number2);
     }
 
     // PhoneNumberUtils.compare(String, String) ignores special characters such as '#'. For example,
@@ -209,36 +208,6 @@
     return TextUtils.equals(name1, name2) && TextUtils.equals(id1, id2);
   }
 
-  private boolean compareSipAddresses(@Nullable String number1, @Nullable String number2) {
-    if (number1 == null || number2 == null) {
-      return Objects.equals(number1, number2);
-    }
-
-    int index1 = number1.indexOf('@');
-    final String userinfo1;
-    final String rest1;
-    if (index1 != -1) {
-      userinfo1 = number1.substring(0, index1);
-      rest1 = number1.substring(index1);
-    } else {
-      userinfo1 = number1;
-      rest1 = "";
-    }
-
-    int index2 = number2.indexOf('@');
-    final String userinfo2;
-    final String rest2;
-    if (index2 != -1) {
-      userinfo2 = number2.substring(0, index2);
-      rest2 = number2.substring(index2);
-    } else {
-      userinfo2 = number2;
-      rest2 = "";
-    }
-
-    return userinfo1.equals(userinfo2) && rest1.equalsIgnoreCase(rest2);
-  }
-
   /**
    * Given a call date and the current date, determine which date group the call belongs in.
    *
diff --git a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java
index 76622ca..1dd4e53 100644
--- a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java
+++ b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java
@@ -54,7 +54,6 @@
 import android.widget.ImageView;
 import android.widget.TextView;
 
-import androidx.annotation.IntDef;
 import androidx.annotation.Nullable;
 import androidx.annotation.RequiresPermission;
 import androidx.cardview.widget.CardView;
@@ -88,8 +87,6 @@
 import com.android.dialer.util.DialerUtils;
 import com.android.dialer.util.UriUtils;
 
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
 import java.lang.ref.WeakReference;
 
 /**
@@ -130,7 +127,6 @@
   private final CachedNumberLookupService cachedNumberLookupService;
   private final VoicemailPlaybackPresenter voicemailPlaybackPresenter;
   private final OnClickListener blockReportListener;
-  @HostUi private final int hostUi;
   /** Whether the data fields are populated by the worker thread, ready to be shown. */
   public boolean isLoaded;
   /** The view containing call log item actions. Null until the ViewStub is inflated. */
@@ -269,21 +265,13 @@
     this.callLogEntryView = callLogEntryView;
     this.dayGroupHeader = dayGroupHeader;
     this.primaryActionButtonView = primaryActionButtonView;
-    this.workIconView = (ImageView) rootView.findViewById(R.id.work_profile_icon);
-    this.checkBoxView = (ImageView) rootView.findViewById(R.id.quick_contact_checkbox);
+    this.workIconView = rootView.findViewById(R.id.work_profile_icon);
+    this.checkBoxView = rootView.findViewById(R.id.quick_contact_checkbox);
 
     // Set text height to false on the TextViews so they don't have extra padding.
     phoneCallDetailsViews.nameView.setElegantTextHeight(false);
     phoneCallDetailsViews.callLocationAndDate.setElegantTextHeight(false);
 
-    if (this.context instanceof CallLogActivity) {
-      hostUi = HostUi.CALL_HISTORY;
-    } else if (this.voicemailPlaybackPresenter == null) {
-      hostUi = HostUi.CALL_LOG;
-    } else {
-      hostUi = HostUi.VOICEMAIL;
-    }
-
     quickContactView.setOverlay(null);
     quickContactView.setPrioritizedMimeType(Phone.CONTENT_ITEM_TYPE);
     primaryActionButtonView.setOnClickListener(this);
@@ -493,7 +481,7 @@
     videoCallButtonView.setVisibility(View.GONE);
 
     // For an emergency number, show "Call details" only.
-    if (PhoneNumberHelper.isLocalEmergencyNumber(context, number)) {
+    if (PhoneNumberHelper.isEmergencyNumber(context, number)) {
       createNewContactButtonView.setVisibility(View.GONE);
       addToExistingContactButtonView.setVisibility(View.GONE);
       sendMessageView.setVisibility(View.GONE);
@@ -899,11 +887,6 @@
     if (OldCallDetailsActivity.isLaunchIntent(intent)) {
       ((Activity) context).startActivity(intent);
     } else {
-      if (Intent.ACTION_CALL.equals(intent.getAction())
-          && intent.getIntExtra(TelecomManager.EXTRA_START_CALL_WITH_VIDEO_STATE, -1)
-              == VideoProfile.STATE_BIDIRECTIONAL) {
-      }
-
       DialerUtils.startActivityWithErrorToast(context, intent);
     }
   }
@@ -964,11 +947,11 @@
     blockView.setVisibility(View.GONE);
     unblockView.setVisibility(View.GONE);
     reportNotSpamView.setVisibility(View.GONE);
-    String e164Number = PhoneNumberUtils.formatNumberToE164(number, countryIso);
+
     if (!canPlaceCallToNumber
         || isVoicemailNumber
         || !BlockedNumberContract.canCurrentUserBlockNumbers(context)
-        || PhoneNumberUtils.isEmergencyNumber(e164Number)) {
+        || PhoneNumberHelper.isEmergencyNumber(context, number, countryIso)) {
       return;
     }
 
@@ -1021,13 +1004,12 @@
           .setOnMenuItemClickListener(this);
     }
 
-    String e164Number = PhoneNumberUtils.formatNumberToE164(number, countryIso);
     boolean isVoicemailNumber = callLogCache.isVoicemailNumber(accountHandle, number);
     boolean canPlaceCallToNumber = PhoneNumberHelper.canPlaceCallsTo(number, numberPresentation);
     if (canPlaceCallToNumber
         && !isVoicemailNumber
         && BlockedNumberContract.canCurrentUserBlockNumbers(context)
-            && !PhoneNumberUtils.isEmergencyNumber(e164Number)) {
+            && !PhoneNumberHelper.isEmergencyNumber(context, number, countryIso)) {
       if (isBlocked) {
         menu.add(
                 ContextMenu.NONE,
@@ -1051,15 +1033,6 @@
     }
   }
 
-  /** Specifies where the view holder belongs. */
-  @IntDef({HostUi.CALL_LOG, HostUi.CALL_HISTORY, HostUi.VOICEMAIL})
-  @Retention(RetentionPolicy.SOURCE)
-  private @interface HostUi {
-    int CALL_LOG = 0;
-    int CALL_HISTORY = 1;
-    int VOICEMAIL = 2;
-  }
-
   public interface OnClickListener {
 
     void onBlockReportSpam(
diff --git a/java/com/android/dialer/app/calllog/CallLogReceiver.java b/java/com/android/dialer/app/calllog/CallLogReceiver.java
index 5d8d130..e28a081 100644
--- a/java/com/android/dialer/app/calllog/CallLogReceiver.java
+++ b/java/com/android/dialer/app/calllog/CallLogReceiver.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2011 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,6 +22,7 @@
 import android.content.Intent;
 import android.database.Cursor;
 import android.provider.VoicemailContract;
+
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.database.CallLogQueryHandler;
 
diff --git a/java/com/android/dialer/app/calllog/DialerQuickContactBadge.java b/java/com/android/dialer/app/calllog/DialerQuickContactBadge.java
index ef61aac..5a4dd0a 100644
--- a/java/com/android/dialer/app/calllog/DialerQuickContactBadge.java
+++ b/java/com/android/dialer/app/calllog/DialerQuickContactBadge.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,6 +21,7 @@
 import android.util.AttributeSet;
 import android.view.View;
 import android.widget.QuickContactBadge;
+
 import com.android.dialer.app.calllog.CallLogAdapter.OnActionModeStateChangedListener;
 
 /** Allows us to click the contact badge for non multi select mode. */
diff --git a/java/com/android/dialer/app/calllog/IntentProvider.java b/java/com/android/dialer/app/calllog/IntentProvider.java
index f80e0d8..10d6a89 100644
--- a/java/com/android/dialer/app/calllog/IntentProvider.java
+++ b/java/com/android/dialer/app/calllog/IntentProvider.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2011 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,6 +24,7 @@
 import android.provider.ContactsContract;
 import android.telecom.PhoneAccountHandle;
 import android.telephony.TelephonyManager;
+
 import com.android.contacts.common.model.Contact;
 import com.android.contacts.common.model.ContactLoader;
 import com.android.dialer.app.AccountSelectionActivity;
@@ -33,6 +35,7 @@
 import com.android.dialer.dialercontact.DialerContact;
 import com.android.dialer.precall.PreCall;
 import com.android.dialer.util.IntentUtil;
+
 import java.util.ArrayList;
 
 /**
diff --git a/java/com/android/dialer/app/calllog/LegacyVoicemailNotifier.java b/java/com/android/dialer/app/calllog/LegacyVoicemailNotifier.java
index 47d97aa..3eb4616 100644
--- a/java/com/android/dialer/app/calllog/LegacyVoicemailNotifier.java
+++ b/java/com/android/dialer/app/calllog/LegacyVoicemailNotifier.java
@@ -16,6 +16,7 @@
 
 package com.android.dialer.app.calllog;
 
+import android.annotation.SuppressLint;
 import android.app.Notification;
 import android.app.PendingIntent;
 import android.content.Context;
@@ -96,6 +97,7 @@
         context
             .getResources()
             .getQuantityString(R.plurals.notification_voicemail_title, count, count);
+    @SuppressLint("MissingPermission")
     PersistableBundle config = pinnedTelephonyManager.getCarrierConfig();
     boolean isOngoing;
     if (config == null) {
diff --git a/java/com/android/dialer/app/calllog/MissedCallNotifier.java b/java/com/android/dialer/app/calllog/MissedCallNotifier.java
index 7f2f663..85ca135 100644
--- a/java/com/android/dialer/app/calllog/MissedCallNotifier.java
+++ b/java/com/android/dialer/app/calllog/MissedCallNotifier.java
@@ -18,9 +18,9 @@
 
 import static com.android.dialer.app.DevicePolicyResources.NOTIFICATION_MISSED_WORK_CALL_TITLE;
 
+import android.annotation.SuppressLint;
 import android.app.BroadcastOptions;
 import android.app.Notification;
-import android.app.Notification.Builder;
 import android.app.PendingIntent;
 import android.app.admin.DevicePolicyManager;
 import android.content.ComponentName;
@@ -48,8 +48,8 @@
 import androidx.core.util.Pair;
 
 import com.android.contacts.common.ContactsUtils;
+import com.android.dialer.R;
 import com.android.dialer.app.MainComponent;
-import com.android.dialer.app.R;
 import com.android.dialer.app.calllog.CallLogNotificationsQueryHelper.NewCall;
 import com.android.dialer.app.contactinfo.ContactPhotoLoader;
 import com.android.dialer.callintent.CallInitiationType;
@@ -368,7 +368,7 @@
   }
 
   private Notification.Builder createNotificationBuilder() {
-    return new Notification.Builder(context)
+    return new Notification.Builder(context, NotificationChannelId.MISSED_CALL)
         .setGroup(MissedCallConstants.GROUP_KEY)
         .setSmallIcon(android.R.drawable.stat_notify_missed_call)
         .setColor(ThemeComponent.get(context).theme().getColorPrimary())
@@ -379,7 +379,7 @@
   }
 
   private Notification.Builder createNotificationBuilder(@NonNull NewCall call) {
-    Builder builder =
+    Notification.Builder builder =
         createNotificationBuilder()
             .setWhen(call.dateMs)
             .setDeleteIntent(
@@ -468,6 +468,7 @@
   }
 
   /** Closes open system dialogs and the notification shade. */
+  @SuppressLint("MissingPermission")
   private void closeSystemDialogs(Context context) {
     final Intent intent = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)
             .addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
diff --git a/java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java b/java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java
index fee98a2..e118543 100644
--- a/java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java
+++ b/java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java
@@ -23,7 +23,7 @@
 import android.provider.CallLog.Calls;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
 import android.telecom.PhoneAccount;
-import android.telephony.PhoneNumberUtils;
+import android.telephony.TelephonyManager;
 import android.text.TextUtils;
 import android.text.format.DateUtils;
 import android.view.View;
@@ -151,7 +151,8 @@
       int color = callLogCache.getAccountColor(details.accountHandle);
       if (color == PhoneAccount.NO_HIGHLIGHT_COLOR) {
         int defaultColor = R.color.dialer_secondary_text_color;
-        views.callAccountLabel.setTextColor(context.getResources().getColor(defaultColor));
+        views.callAccountLabel.setTextColor(context.getResources().getColor(defaultColor,
+                context.getTheme()));
       } else {
         views.callAccountLabel.setTextColor(color);
       }
@@ -180,7 +181,8 @@
       return;
     }
 
-    if (PhoneNumberUtils.isEmergencyNumber(details.displayNumber)) {
+    TelephonyManager telephonyManager = context.getSystemService(TelephonyManager.class);
+    if (telephonyManager.isEmergencyNumber(details.displayNumber)) {
       views.nameView.setText(R.string.emergency_number);
       views.nameView.setTextDirection(View.TEXT_DIRECTION_INHERIT);
       return;
diff --git a/java/com/android/dialer/app/calllog/PhoneCallDetailsViews.java b/java/com/android/dialer/app/calllog/PhoneCallDetailsViews.java
index 8ba3493..88d05fb 100644
--- a/java/com/android/dialer/app/calllog/PhoneCallDetailsViews.java
+++ b/java/com/android/dialer/app/calllog/PhoneCallDetailsViews.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2011 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,6 +19,7 @@
 
 import android.view.View;
 import android.widget.TextView;
+
 import com.android.dialer.app.R;
 import com.android.dialer.calllogutils.CallTypeIconsView;
 import com.android.dialer.widget.BidiTextView;
diff --git a/java/com/android/dialer/app/calllog/VisualVoicemailNotifier.java b/java/com/android/dialer/app/calllog/VisualVoicemailNotifier.java
index edb5115..4fe6019 100644
--- a/java/com/android/dialer/app/calllog/VisualVoicemailNotifier.java
+++ b/java/com/android/dialer/app/calllog/VisualVoicemailNotifier.java
@@ -91,11 +91,11 @@
     if (shouldAlert) {
       groupSummary.setOnlyAlertOnce(false);
       // Group summary will alert when posted/updated
-      groupSummary.setGroupAlertBehavior(Notification.GROUP_ALERT_ALL);
+      groupSummary.setGroupAlertBehavior(NotificationCompat.GROUP_ALERT_ALL);
     } else {
       // Only children will alert. but since all children are set to "only alert summary" it is
       // effectively silenced.
-      groupSummary.setGroupAlertBehavior(Notification.GROUP_ALERT_CHILDREN);
+      groupSummary.setGroupAlertBehavior(NotificationCompat.GROUP_ALERT_CHILDREN);
     }
     PhoneAccountHandle handle = getAccountForCall(context, newCalls.get(0));
     groupSummary.setChannelId(NotificationChannelManager.getVoicemailChannelId(context, handle));
@@ -171,7 +171,7 @@
     }
 
     builder.setChannelId(NotificationChannelManager.getVoicemailChannelId(context, handle));
-    builder.setGroupAlertBehavior(Notification.GROUP_ALERT_SUMMARY);
+    builder.setGroupAlertBehavior(NotificationCompat.GROUP_ALERT_SUMMARY);
 
     ContactPhotoLoader loader = new ContactPhotoLoader(context, contactInfo);
     Bitmap photoIcon = loader.loadPhotoIcon();
diff --git a/java/com/android/dialer/app/calllog/VoicemailNotificationJobService.java b/java/com/android/dialer/app/calllog/VoicemailNotificationJobService.java
index c6ea069..4801f96 100644
--- a/java/com/android/dialer/app/calllog/VoicemailNotificationJobService.java
+++ b/java/com/android/dialer/app/calllog/VoicemailNotificationJobService.java
@@ -24,6 +24,7 @@
 import android.content.ComponentName;
 import android.content.Context;
 import android.provider.VoicemailContract;
+
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.constants.ScheduledJobIds;
 
diff --git a/java/com/android/dialer/app/calllog/calllogcache/CallLogCache.java b/java/com/android/dialer/app/calllog/calllogcache/CallLogCache.java
index ca759af..8e2b4c6 100644
--- a/java/com/android/dialer/app/calllog/calllogcache/CallLogCache.java
+++ b/java/com/android/dialer/app/calllog/calllogcache/CallLogCache.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -27,7 +28,9 @@
 import com.android.dialer.calllogutils.PhoneAccountUtils;
 import com.android.dialer.telecom.TelecomUtil;
 import com.android.dialer.util.CallUtil;
+
 import java.util.Map;
+
 import javax.annotation.concurrent.ThreadSafe;
 
 /**
@@ -104,7 +107,7 @@
     if (phoneAccountColorCache.containsKey(accountHandle)) {
       return phoneAccountColorCache.get(accountHandle);
     } else {
-      Integer color = PhoneAccountUtils.getAccountColor(context, accountHandle);
+      int color = PhoneAccountUtils.getAccountColor(context, accountHandle);
       phoneAccountColorCache.put(accountHandle, color);
       return color;
     }
@@ -121,7 +124,7 @@
     if (phoneAccountCallWithNoteCache.containsKey(accountHandle)) {
       return phoneAccountCallWithNoteCache.get(accountHandle);
     } else {
-      Boolean supportsCallWithNote =
+      boolean supportsCallWithNote =
           PhoneAccountUtils.getAccountSupportsCallSubject(context, accountHandle);
       phoneAccountCallWithNoteCache.put(accountHandle, supportsCallWithNote);
       return supportsCallWithNote;
diff --git a/java/com/android/dialer/app/contactinfo/ContactInfoCache.java b/java/com/android/dialer/app/contactinfo/ContactInfoCache.java
index 0121eeb..f53bd5e 100644
--- a/java/com/android/dialer/app/contactinfo/ContactInfoCache.java
+++ b/java/com/android/dialer/app/contactinfo/ContactInfoCache.java
@@ -31,6 +31,7 @@
 import com.android.dialer.phonenumbercache.ContactInfo;
 import com.android.dialer.phonenumbercache.ContactInfoHelper;
 import com.android.dialer.util.ExpirableCache;
+
 import java.lang.ref.WeakReference;
 import java.util.Objects;
 import java.util.concurrent.BlockingQueue;
diff --git a/java/com/android/dialer/app/contactinfo/ContactInfoRequest.java b/java/com/android/dialer/app/contactinfo/ContactInfoRequest.java
index 256c9c0..f575e87 100644
--- a/java/com/android/dialer/app/contactinfo/ContactInfoRequest.java
+++ b/java/com/android/dialer/app/contactinfo/ContactInfoRequest.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,6 +22,7 @@
 import androidx.annotation.IntDef;
 
 import com.android.dialer.phonenumbercache.ContactInfo;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.Objects;
diff --git a/java/com/android/dialer/app/list/RemoveView.java b/java/com/android/dialer/app/list/RemoveView.java
index ba6fbe1..1420ead 100644
--- a/java/com/android/dialer/app/list/RemoveView.java
+++ b/java/com/android/dialer/app/list/RemoveView.java
@@ -27,6 +27,8 @@
 import android.widget.ImageView;
 import android.widget.TextView;
 
+import androidx.core.content.res.ResourcesCompat;
+
 import com.android.dialer.R;
 
 public class RemoveView extends FrameLayout {
@@ -52,12 +54,12 @@
   @Override
   protected void onFinishInflate() {
     super.onFinishInflate();
-    removeText = (TextView) findViewById(R.id.remove_view_text);
-    removeIcon = (ImageView) findViewById(R.id.remove_view_icon);
+    removeText = findViewById(R.id.remove_view_text);
+    removeIcon = findViewById(R.id.remove_view_icon);
     final Resources r = getResources();
-    unhighlightedColor = r.getColor(android.R.color.white);
-    highlightedColor = r.getColor(R.color.remove_highlighted_text_color);
-    removeDrawable = r.getDrawable(R.drawable.quantum_ic_clear_vd_theme_24,
+    unhighlightedColor = r.getColor(android.R.color.white, getContext().getTheme());
+    highlightedColor = r.getColor(R.color.remove_highlighted_text_color, getContext().getTheme());
+    removeDrawable = ResourcesCompat.getDrawable(r, R.drawable.quantum_ic_clear_vd_theme_24,
             getContext().getTheme());
   }
 
diff --git a/java/com/android/dialer/app/settings/DefaultRingtonePreference.java b/java/com/android/dialer/app/settings/DefaultRingtonePreference.java
index cbabb74..409eea3 100644
--- a/java/com/android/dialer/app/settings/DefaultRingtonePreference.java
+++ b/java/com/android/dialer/app/settings/DefaultRingtonePreference.java
@@ -23,16 +23,9 @@
 import android.net.Uri;
 import android.provider.Settings;
 import android.util.AttributeSet;
-import android.util.Log;
 import android.widget.Toast;
 
-import androidx.activity.result.ActivityResult;
-import androidx.activity.result.ActivityResultCallback;
-import androidx.activity.result.contract.ActivityResultContracts;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.preference.Preference;
-import androidx.preference.PreferenceFragmentCompat;
 
 import com.android.dialer.R;
 
diff --git a/java/com/android/dialer/app/settings/DialerSettingsActivity.java b/java/com/android/dialer/app/settings/DialerSettingsActivity.java
index ec7d85e..b8d087e 100644
--- a/java/com/android/dialer/app/settings/DialerSettingsActivity.java
+++ b/java/com/android/dialer/app/settings/DialerSettingsActivity.java
@@ -241,8 +241,8 @@
         bundle.putInt(PhoneAccountSelectionFragment.PARAM_TARGET_TITLE_RES,
                 R.string.voicemail_settings_label);
       } else {
-        LogUtil.i(
-                "DialerSettingsActivity.addVoicemailSettings", "showing single-SIM voicemail settings");
+        LogUtil.i("DialerSettingsActivity.addVoicemailSettings",
+                "showing single-SIM voicemail settings");
         voicemailSettings.setFragment(VoicemailSettingsFragment.class.getName());
         bundle.putParcelable(VoicemailClient.PARAM_PHONE_ACCOUNT_HANDLE, soleAccount);
       }
@@ -266,8 +266,8 @@
           continue;
         }
         if (phoneAccount.hasCapabilities(PhoneAccount.CAPABILITY_SIM_SUBSCRIPTION)) {
-          LogUtil.i(
-                  "DialerSettingsActivity.getSoleSimAccount", phoneAccountHandle + " is a SIM account");
+          LogUtil.i("DialerSettingsActivity.getSoleSimAccount",
+                  phoneAccountHandle + " is a SIM account");
           if (result != null) {
             return null;
           }
@@ -279,8 +279,8 @@
 
     /**
      * Returns {@code true} or {@code false} based on whether the display options setting should be
-     * shown. For languages such as Chinese, Japanese, or Korean, display options aren't useful since
-     * contacts are sorted and displayed family name first by default.
+     * shown. For languages such as Chinese, Japanese, or Korean, display options aren't useful
+     * since contacts are sorted and displayed family name first by default.
      *
      * @return {@code true} if the display options should be shown, {@code false} otherwise.
      */
diff --git a/java/com/android/dialer/app/settings/PhoneAccountSelectionFragment.java b/java/com/android/dialer/app/settings/PhoneAccountSelectionFragment.java
index 01073b3..fb15a6d 100644
--- a/java/com/android/dialer/app/settings/PhoneAccountSelectionFragment.java
+++ b/java/com/android/dialer/app/settings/PhoneAccountSelectionFragment.java
@@ -112,13 +112,14 @@
     }
   }
 
+  @SuppressLint("MissingPermission")
   @Override
   public void onResume() {
     super.onResume();
-    setPreferenceScreen(getPreferenceManager().createPreferenceScreen(getContext()));
+    setPreferenceScreen(getPreferenceManager().createPreferenceScreen(requireContext()));
     PreferenceScreen screen = getPreferenceScreen();
 
-    TelecomManager telecomManager = getContext().getSystemService(TelecomManager.class);
+    TelecomManager telecomManager = requireContext().getSystemService(TelecomManager.class);
 
     List<PhoneAccountHandle> accountHandles = telecomManager.getCallCapablePhoneAccounts();
 
diff --git a/java/com/android/dialer/app/voicemail/VoicemailAudioManager.java b/java/com/android/dialer/app/voicemail/VoicemailAudioManager.java
index 80117c8..7d6b551 100644
--- a/java/com/android/dialer/app/voicemail/VoicemailAudioManager.java
+++ b/java/com/android/dialer/app/voicemail/VoicemailAudioManager.java
@@ -18,11 +18,15 @@
 package com.android.dialer.app.voicemail;
 
 import android.content.Context;
+import android.media.AudioAttributes;
 import android.media.AudioDeviceInfo;
+import android.media.AudioFocusRequest;
 import android.media.AudioManager;
 import android.media.AudioManager.OnAudioFocusChangeListener;
 import android.telecom.CallAudioState;
+
 import com.android.dialer.common.LogUtil;
+
 import java.util.concurrent.RejectedExecutionException;
 
 /** This class manages all audio changes for voicemail playback. */
@@ -40,6 +44,8 @@
   private CallAudioState callAudioState;
   private boolean bluetoothScoEnabled;
 
+  private AudioFocusRequest audioFocusRequest;
+
   public VoicemailAudioManager(
       Context context, VoicemailPlaybackPresenter voicemailPlaybackPresenter) {
     audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
@@ -53,10 +59,15 @@
   }
 
   public void requestAudioFocus() {
-    int result =
-        audioManager.requestAudioFocus(
-            this, PLAYBACK_STREAM, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
+    audioFocusRequest = new AudioFocusRequest.Builder(
+            AudioManager.AUDIOFOCUS_GAIN_TRANSIENT)
+            .setAudioAttributes(
+                    new AudioAttributes.Builder().setLegacyStreamType(PLAYBACK_STREAM).build())
+            .setOnAudioFocusChangeListener(this)
+            .build();
+    int result = audioManager.requestAudioFocus(audioFocusRequest);
     if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
+      audioFocusRequest = null;
       throw new RejectedExecutionException("Could not capture audio focus.");
     }
     updateBluetoothScoState(true);
@@ -64,7 +75,10 @@
 
   public void abandonAudioFocus() {
     updateBluetoothScoState(false);
-    audioManager.abandonAudioFocus(this);
+    if (audioFocusRequest != null) {
+      audioManager.abandonAudioFocusRequest(audioFocusRequest);
+      audioFocusRequest = null;
+    }
   }
 
   @Override
diff --git a/java/com/android/dialer/app/voicemail/VoicemailErrorManager.java b/java/com/android/dialer/app/voicemail/VoicemailErrorManager.java
index 40d9e7b..a390ff6 100644
--- a/java/com/android/dialer/app/voicemail/VoicemailErrorManager.java
+++ b/java/com/android/dialer/app/voicemail/VoicemailErrorManager.java
@@ -40,6 +40,7 @@
 import com.android.dialer.voicemail.listui.error.VoicemailStatus;
 import com.android.dialer.voicemail.listui.error.VoicemailStatusReader;
 import com.android.voicemail.VoicemailComponent;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
diff --git a/java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java b/java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java
index 506f547..a5f8efa 100644
--- a/java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java
+++ b/java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java
@@ -162,7 +162,7 @@
     if (powerManager.isWakeLockLevelSupported(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK)) {
       proximityWakeLock =
           powerManager.newWakeLock(
-              PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, "VoicemailPlaybackPresenter");
+              PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, "Voicemail:PlaybackPresenter");
     }
   }
 
@@ -862,6 +862,7 @@
           // dialer/app/res/xml/file_paths.xml for correct cache directory name.
           File parentDir = new File(context.getCacheDir(), "my_cache");
           if (!parentDir.exists()) {
+            //noinspection ResultOfMethodCallIgnored
             parentDir.mkdirs();
           }
           File temporaryVoicemailFile =
@@ -874,7 +875,7 @@
               ByteStreams.copy(inputStream, outputStream);
               return new Pair<>(
                   FileProvider.getUriForFile(
-                      context, Constants.get().getFileProviderAuthority(), temporaryVoicemailFile),
+                      context, Constants.FILE_PROVIDER_AUTHORITY, temporaryVoicemailFile),
                   transcription);
             }
           } catch (IOException e) {
diff --git a/java/com/android/dialer/app/voicemail/WiredHeadsetManager.java b/java/com/android/dialer/app/voicemail/WiredHeadsetManager.java
index 3734d05..46a6ba1 100644
--- a/java/com/android/dialer/app/voicemail/WiredHeadsetManager.java
+++ b/java/com/android/dialer/app/voicemail/WiredHeadsetManager.java
@@ -21,6 +21,7 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.media.AudioManager;
+
 import com.android.dialer.common.LogUtil;
 
 /** Listens for and caches headset state. */
diff --git a/java/com/android/dialer/app/widget/DialpadSearchEmptyContentView.java b/java/com/android/dialer/app/widget/DialpadSearchEmptyContentView.java
index 5846b1f..e348102 100644
--- a/java/com/android/dialer/app/widget/DialpadSearchEmptyContentView.java
+++ b/java/com/android/dialer/app/widget/DialpadSearchEmptyContentView.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,6 +20,7 @@
 import android.content.Context;
 import android.view.LayoutInflater;
 import android.widget.LinearLayout;
+
 import com.android.dialer.app.R;
 import com.android.dialer.util.OrientationUtil;
 import com.android.dialer.widget.EmptyContentView;
diff --git a/java/com/android/dialer/assisteddialing/AssistedDialingMediatorImpl.java b/java/com/android/dialer/assisteddialing/AssistedDialingMediatorImpl.java
index 8665b7d..5442e66 100644
--- a/java/com/android/dialer/assisteddialing/AssistedDialingMediatorImpl.java
+++ b/java/com/android/dialer/assisteddialing/AssistedDialingMediatorImpl.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,6 +20,7 @@
 import androidx.annotation.NonNull;
 
 import com.android.dialer.common.LogUtil;
+
 import java.util.Optional;
 
 /**
@@ -33,8 +35,8 @@
   private final LocationDetector locationDetector;
   private final NumberTransformer numberTransformer;
 
-  AssistedDialingMediatorImpl(
-          @NonNull LocationDetector locationDetector, @NonNull NumberTransformer numberTransformer) {
+  AssistedDialingMediatorImpl(@NonNull LocationDetector locationDetector,
+                              @NonNull NumberTransformer numberTransformer) {
     if (locationDetector == null) {
       throw new NullPointerException("locationDetector was null");
     }
diff --git a/java/com/android/dialer/assisteddialing/Constraints.java b/java/com/android/dialer/assisteddialing/Constraints.java
index 6a24016..5b95517 100644
--- a/java/com/android/dialer/assisteddialing/Constraints.java
+++ b/java/com/android/dialer/assisteddialing/Constraints.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,7 +18,6 @@
 package com.android.dialer.assisteddialing;
 
 import android.content.Context;
-import android.telephony.PhoneNumberUtils;
 import android.text.TextUtils;
 
 import androidx.annotation.NonNull;
@@ -28,6 +28,7 @@
 import com.google.i18n.phonenumbers.PhoneNumberUtil;
 import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
 import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber.CountryCodeSource;
+
 import java.util.Locale;
 import java.util.Optional;
 
@@ -193,9 +194,7 @@
   private boolean isNotEmergencyNumber(@NonNull String numberToCheck, @NonNull Context context) {
     // isEmergencyNumber may depend on network state, so also use isLocalEmergencyNumber when
     // roaming and out of service.
-    boolean result =
-        !PhoneNumberUtils.isEmergencyNumber(numberToCheck)
-            && !PhoneNumberHelper.isLocalEmergencyNumber(context, numberToCheck);
+    boolean result = !PhoneNumberHelper.isEmergencyNumber(context, numberToCheck);
     LogUtil.i("Constraints.isNotEmergencyNumber", String.valueOf(result));
     return result;
   }
diff --git a/java/com/android/dialer/assisteddialing/CountryCodeProvider.java b/java/com/android/dialer/assisteddialing/CountryCodeProvider.java
index ffdbdd9..7099cd6 100644
--- a/java/com/android/dialer/assisteddialing/CountryCodeProvider.java
+++ b/java/com/android/dialer/assisteddialing/CountryCodeProvider.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,7 +18,9 @@
 package com.android.dialer.assisteddialing;
 
 import android.util.ArraySet;
+
 import com.android.dialer.common.LogUtil;
+
 import java.util.Arrays;
 import java.util.List;
 import java.util.Locale;
diff --git a/java/com/android/dialer/assisteddialing/LocationDetector.java b/java/com/android/dialer/assisteddialing/LocationDetector.java
index 11f5ae9..51dd182 100644
--- a/java/com/android/dialer/assisteddialing/LocationDetector.java
+++ b/java/com/android/dialer/assisteddialing/LocationDetector.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,6 +24,7 @@
 import androidx.annotation.Nullable;
 
 import com.android.dialer.common.LogUtil;
+
 import java.util.Locale;
 import java.util.Optional;
 
diff --git a/java/com/android/dialer/assisteddialing/NumberTransformer.java b/java/com/android/dialer/assisteddialing/NumberTransformer.java
index f5b1bbd..26b25a5 100644
--- a/java/com/android/dialer/assisteddialing/NumberTransformer.java
+++ b/java/com/android/dialer/assisteddialing/NumberTransformer.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,10 +18,12 @@
 package com.android.dialer.assisteddialing;
 
 import android.text.TextUtils;
+
 import com.android.dialer.common.LogUtil;
 import com.google.i18n.phonenumbers.NumberParseException;
 import com.google.i18n.phonenumbers.PhoneNumberUtil;
 import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
+
 import java.util.Optional;
 
 /** Responsible for transforming numbers to make them dialable and valid when roaming. */
diff --git a/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java b/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java
index 9da71be..082936e 100644
--- a/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java
+++ b/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java
@@ -129,8 +129,8 @@
       }
     }
 
-    countryChooserPref.setEntries(newKeys.toArray(new CharSequence[newKeys.size()]));
-    countryChooserPref.setEntryValues(newValues.toArray(new CharSequence[newValues.size()]));
+    countryChooserPref.setEntries(newKeys.toArray(new CharSequence[0]));
+    countryChooserPref.setEntryValues(newValues.toArray(new CharSequence[0]));
 
     if (!newValues.contains(countryChooserPref.getValue())) {
       ameliorateInvalidSelectedValue(countryChooserPref);
diff --git a/java/com/android/dialer/binary/aosp/AospDialerApplication.java b/java/com/android/dialer/binary/aosp/AospDialerApplication.java
index 52366ce..8b2774e 100644
--- a/java/com/android/dialer/binary/aosp/AospDialerApplication.java
+++ b/java/com/android/dialer/binary/aosp/AospDialerApplication.java
@@ -31,7 +31,6 @@
 import com.android.dialer.lookup.LookupProvider;
 import com.android.dialer.lookup.LookupSettings;
 import com.android.dialer.lookup.ReverseLookupService;
-import com.android.dialer.phonenumbercache.CachedNumberLookupService;
 import com.android.dialer.phonenumbercache.PhoneNumberCacheBindings;
 import com.android.dialer.phonenumbercache.PhoneNumberCacheBindingsFactory;
 import com.android.incallui.bindings.InCallUiBindings;
diff --git a/java/com/android/dialer/binary/aosp/AospDialerRootComponent.java b/java/com/android/dialer/binary/aosp/AospDialerRootComponent.java
index bc4fbd3..407afa2 100644
--- a/java/com/android/dialer/binary/aosp/AospDialerRootComponent.java
+++ b/java/com/android/dialer/binary/aosp/AospDialerRootComponent.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -33,9 +34,11 @@
 import com.android.dialer.storage.StorageModule;
 import com.android.dialer.theme.base.impl.AospThemeModule;
 import com.android.voicemail.impl.VoicemailModule;
-import dagger.Component;
+
 import javax.inject.Singleton;
 
+import dagger.Component;
+
 /** Root component for the AOSP Dialer application. */
 @Singleton
 @Component(
diff --git a/java/com/android/dialer/blocking/Blocking.java b/java/com/android/dialer/blocking/Blocking.java
index 212e395..34cd97d 100644
--- a/java/com/android/dialer/blocking/Blocking.java
+++ b/java/com/android/dialer/blocking/Blocking.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -36,6 +37,7 @@
 import com.google.common.collect.ImmutableCollection;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.util.concurrent.ListenableFuture;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
diff --git a/java/com/android/dialer/blockreportspam/ShowBlockReportSpamDialogReceiver.java b/java/com/android/dialer/blockreportspam/ShowBlockReportSpamDialogReceiver.java
index 8b1a62b..9c5dd36 100644
--- a/java/com/android/dialer/blockreportspam/ShowBlockReportSpamDialogReceiver.java
+++ b/java/com/android/dialer/blockreportspam/ShowBlockReportSpamDialogReceiver.java
@@ -55,7 +55,7 @@
   static final String ACTION_SHOW_DIALOG_TO_UNBLOCK_NUMBER = "show_dialog_to_unblock_number";
   static final String EXTRA_DIALOG_INFO = "dialog_info";
 
-  /** {@link FragmentManager} needed to show a {@link android.app.DialogFragment}. */
+  /** {@link FragmentManager} needed to show a {@link androidx.fragment.app.DialogFragment}. */
   private final FragmentManager fragmentManager;
 
   /** Returns an {@link IntentFilter} containing all actions accepted by this broadcast receiver. */
@@ -155,9 +155,7 @@
 
     // Set up the positive listener for the dialog.
     OnConfirmListener onConfirmListener =
-        () -> {
-          LogUtil.i("ShowBlockReportSpamDialogReceiver.showDialogToReportNotSpam", "confirmed");
-        };
+        () -> LogUtil.i("ShowBlockReportSpamDialogReceiver.showDialogToReportNotSpam", "confirmed");
 
     // Create & show the dialog.
     DialogFragmentForReportingNotSpam.newInstance(
diff --git a/java/com/android/dialer/calldetails/CallDetailsActivityCommon.java b/java/com/android/dialer/calldetails/CallDetailsActivityCommon.java
index e8cd928..da5f9ff 100644
--- a/java/com/android/dialer/calldetails/CallDetailsActivityCommon.java
+++ b/java/com/android/dialer/calldetails/CallDetailsActivityCommon.java
@@ -195,12 +195,6 @@
     return adapter;
   }
 
-  @Override
-  @CallSuper
-  public void onBackPressed() {
-    super.onBackPressed();
-  }
-
   @MainThread
   protected final void setCallDetailsEntries(CallDetailsEntries entries) {
     Assert.isMainThread();
diff --git a/java/com/android/dialer/calldetails/CallDetailsHeaderViewHolder.java b/java/com/android/dialer/calldetails/CallDetailsHeaderViewHolder.java
index c7d58d1..d150be4 100644
--- a/java/com/android/dialer/calldetails/CallDetailsHeaderViewHolder.java
+++ b/java/com/android/dialer/calldetails/CallDetailsHeaderViewHolder.java
@@ -167,7 +167,7 @@
     numberView.setVisibility(View.GONE);
     numberView.setText(null);
 
-    if (PhoneNumberHelper.isLocalEmergencyNumber(context, contact.getNumber())) {
+    if (PhoneNumberHelper.isEmergencyNumber(context, contact.getNumber())) {
       nameView.setText(context.getResources().getString(R.string.emergency_number));
     } else {
       nameView.setText(contact.getNameOrNumber());
diff --git a/java/com/android/dialer/calldetails/OldCallDetailsActivity.java b/java/com/android/dialer/calldetails/OldCallDetailsActivity.java
index 0f53d69..8f5ade1 100644
--- a/java/com/android/dialer/calldetails/OldCallDetailsActivity.java
+++ b/java/com/android/dialer/calldetails/OldCallDetailsActivity.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,6 +19,7 @@
 
 import android.content.Context;
 import android.content.Intent;
+
 import com.android.dialer.calldetails.CallDetailsEntryViewHolder.CallDetailsEntryListener;
 import com.android.dialer.calldetails.CallDetailsFooterViewHolder.DeleteCallDetailsListener;
 import com.android.dialer.calldetails.CallDetailsFooterViewHolder.ReportCallIdListener;
diff --git a/java/com/android/dialer/calllog/AnnotatedCallLogMigrator.java b/java/com/android/dialer/calllog/AnnotatedCallLogMigrator.java
index 71bfb75..5edf217 100644
--- a/java/com/android/dialer/calllog/AnnotatedCallLogMigrator.java
+++ b/java/com/android/dialer/calllog/AnnotatedCallLogMigrator.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,6 +18,7 @@
 package com.android.dialer.calllog;
 
 import android.content.SharedPreferences;
+
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor;
 import com.android.dialer.storage.Unencrypted;
@@ -24,6 +26,7 @@
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListeningExecutorService;
 import com.google.common.util.concurrent.MoreExecutors;
+
 import javax.inject.Inject;
 
 /**
diff --git a/java/com/android/dialer/calllog/CallLogCacheUpdater.java b/java/com/android/dialer/calllog/CallLogCacheUpdater.java
index 42326e9..cdf52a9 100644
--- a/java/com/android/dialer/calllog/CallLogCacheUpdater.java
+++ b/java/com/android/dialer/calllog/CallLogCacheUpdater.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -25,6 +26,7 @@
 import android.provider.CallLog;
 import android.provider.CallLog.Calls;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
+
 import com.android.dialer.DialerPhoneNumber;
 import com.android.dialer.NumberAttributes;
 import com.android.dialer.calllog.database.contract.AnnotatedCallLogContract.AnnotatedCallLog;
@@ -36,9 +38,11 @@
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListeningExecutorService;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.stream.Stream;
+
 import javax.inject.Inject;
 
 /**
diff --git a/java/com/android/dialer/calllog/CallLogComponent.java b/java/com/android/dialer/calllog/CallLogComponent.java
index 4f147f1..824b4d6 100644
--- a/java/com/android/dialer/calllog/CallLogComponent.java
+++ b/java/com/android/dialer/calllog/CallLogComponent.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,8 +17,10 @@
 package com.android.dialer.calllog;
 
 import android.content.Context;
+
 import com.android.dialer.calllog.notifier.RefreshAnnotatedCallLogNotifier;
 import com.android.dialer.inject.HasRootComponent;
+
 import dagger.Subcomponent;
 
 /** Dagger component for the call log package. */
diff --git a/java/com/android/dialer/calllog/CallLogFramework.java b/java/com/android/dialer/calllog/CallLogFramework.java
index 7c7a015..d447eb1 100644
--- a/java/com/android/dialer/calllog/CallLogFramework.java
+++ b/java/com/android/dialer/calllog/CallLogFramework.java
@@ -17,13 +17,10 @@
 
 package com.android.dialer.calllog;
 
-import android.content.Context;
-
 import com.android.dialer.calllog.datasources.CallLogDataSource;
 import com.android.dialer.calllog.datasources.DataSources;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.Annotations.Ui;
-import com.android.dialer.inject.ApplicationContext;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListeningExecutorService;
@@ -43,7 +40,6 @@
 @Singleton
 public final class CallLogFramework {
 
-  private final Context appContext;
   private final DataSources dataSources;
   private final AnnotatedCallLogMigrator annotatedCallLogMigrator;
   private final ListeningExecutorService uiExecutor;
@@ -51,12 +47,10 @@
 
   @Inject
   CallLogFramework(
-      @ApplicationContext Context appContext,
       DataSources dataSources,
       AnnotatedCallLogMigrator annotatedCallLogMigrator,
       @Ui ListeningExecutorService uiExecutor,
       CallLogState callLogState) {
-    this.appContext = appContext;
     this.dataSources = dataSources;
     this.annotatedCallLogMigrator = annotatedCallLogMigrator;
     this.uiExecutor = uiExecutor;
diff --git a/java/com/android/dialer/calllog/CallLogModule.java b/java/com/android/dialer/calllog/CallLogModule.java
index 5657270..48a4c90 100644
--- a/java/com/android/dialer/calllog/CallLogModule.java
+++ b/java/com/android/dialer/calllog/CallLogModule.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,6 +24,7 @@
 import com.android.dialer.calllog.datasources.systemcalllog.SystemCallLogDataSource;
 import com.android.dialer.calllog.datasources.voicemail.VoicemailDataSource;
 import com.google.common.collect.ImmutableList;
+
 import dagger.Module;
 import dagger.Provides;
 
diff --git a/java/com/android/dialer/calllog/CallLogState.java b/java/com/android/dialer/calllog/CallLogState.java
index 7c3dff5..e1a1d36 100644
--- a/java/com/android/dialer/calllog/CallLogState.java
+++ b/java/com/android/dialer/calllog/CallLogState.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -24,6 +25,7 @@
 import com.android.dialer.storage.Unencrypted;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListeningExecutorService;
+
 import javax.annotation.concurrent.ThreadSafe;
 import javax.inject.Inject;
 
diff --git a/java/com/android/dialer/calllog/RefreshAnnotatedCallLogWorker.java b/java/com/android/dialer/calllog/RefreshAnnotatedCallLogWorker.java
index 7d6a000..8031bc7 100644
--- a/java/com/android/dialer/calllog/RefreshAnnotatedCallLogWorker.java
+++ b/java/com/android/dialer/calllog/RefreshAnnotatedCallLogWorker.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,6 +19,7 @@
 
 import android.content.Context;
 import android.content.SharedPreferences;
+
 import com.android.dialer.calllog.constants.SharedPrefKeys;
 import com.android.dialer.calllog.database.MutationApplier;
 import com.android.dialer.calllog.datasources.CallLogDataSource;
@@ -39,8 +41,10 @@
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListeningExecutorService;
 import com.google.common.util.concurrent.MoreExecutors;
+
 import java.util.ArrayList;
 import java.util.List;
+
 import javax.inject.Inject;
 import javax.inject.Singleton;
 
diff --git a/java/com/android/dialer/calllog/database/AnnotatedCallLogConstraints.java b/java/com/android/dialer/calllog/database/AnnotatedCallLogConstraints.java
index cb34bb3..1e2a5e4 100644
--- a/java/com/android/dialer/calllog/database/AnnotatedCallLogConstraints.java
+++ b/java/com/android/dialer/calllog/database/AnnotatedCallLogConstraints.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,6 +24,7 @@
 
 import com.android.dialer.calllog.database.contract.AnnotatedCallLogContract.AnnotatedCallLog;
 import com.android.dialer.common.Assert;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.function.Predicate;
diff --git a/java/com/android/dialer/calllog/database/AnnotatedCallLogContentProvider.java b/java/com/android/dialer/calllog/database/AnnotatedCallLogContentProvider.java
index 8af7876..1b2836b 100644
--- a/java/com/android/dialer/calllog/database/AnnotatedCallLogContentProvider.java
+++ b/java/com/android/dialer/calllog/database/AnnotatedCallLogContentProvider.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -36,6 +37,7 @@
 import com.android.dialer.calllog.database.contract.AnnotatedCallLogContract.AnnotatedCallLog;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 
diff --git a/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java b/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java
index 27b58e7..4ae1dd9 100644
--- a/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java
+++ b/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,13 +21,16 @@
 import android.database.sqlite.SQLiteDatabase;
 import android.database.sqlite.SQLiteOpenHelper;
 import android.provider.CallLog.Calls;
+
 import com.android.dialer.calllog.database.contract.AnnotatedCallLogContract.AnnotatedCallLog;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor;
 import com.android.dialer.inject.ApplicationContext;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListeningExecutorService;
+
 import java.util.Locale;
+
 import javax.inject.Inject;
 import javax.inject.Singleton;
 
diff --git a/java/com/android/dialer/calllog/database/CallLogDatabaseComponent.java b/java/com/android/dialer/calllog/database/CallLogDatabaseComponent.java
index dc16ba4..b971e80 100644
--- a/java/com/android/dialer/calllog/database/CallLogDatabaseComponent.java
+++ b/java/com/android/dialer/calllog/database/CallLogDatabaseComponent.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,7 +17,9 @@
 package com.android.dialer.calllog.database;
 
 import android.content.Context;
+
 import com.android.dialer.inject.HasRootComponent;
+
 import dagger.Subcomponent;
 
 /** Dagger component for database package. */
diff --git a/java/com/android/dialer/calllog/database/MutationApplier.java b/java/com/android/dialer/calllog/database/MutationApplier.java
index b5e3c4e..c6f7aaa 100644
--- a/java/com/android/dialer/calllog/database/MutationApplier.java
+++ b/java/com/android/dialer/calllog/database/MutationApplier.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -35,10 +36,12 @@
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListeningExecutorService;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map.Entry;
+
 import javax.inject.Inject;
 
 /** Applies {@link CallLogMutations} to the annotated call log. */
diff --git a/java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java b/java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java
index b6e4bba..2639ac5 100644
--- a/java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java
+++ b/java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,13 +18,13 @@
 package com.android.dialer.calllog.database.contract;
 
 import android.net.Uri;
-import android.os.Build;
 import android.provider.BaseColumns;
+
 import com.android.dialer.constants.Constants;
 
 /** Contract for the AnnotatedCallLog content provider. */
 public class AnnotatedCallLogContract {
-  public static final String AUTHORITY = Constants.get().getAnnotatedCallLogProviderAuthority();
+  public static final String AUTHORITY = Constants.ANNOTATED_CALL_LOG_PROVIDER_AUTHORITY;
 
   public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY);
 
diff --git a/java/com/android/dialer/calllog/datasources/CallLogMutations.java b/java/com/android/dialer/calllog/datasources/CallLogMutations.java
index 148601d..62e4f18 100644
--- a/java/com/android/dialer/calllog/datasources/CallLogMutations.java
+++ b/java/com/android/dialer/calllog/datasources/CallLogMutations.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,6 +20,7 @@
 import android.content.ContentValues;
 import android.util.ArrayMap;
 import android.util.ArraySet;
+
 import com.android.dialer.common.Assert;
 
 /** A collection of mutations to the annotated call log. */
diff --git a/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java b/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java
index ec1b981..cdf14fd 100644
--- a/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -53,12 +54,14 @@
 import com.google.common.util.concurrent.ListeningExecutorService;
 import com.google.common.util.concurrent.MoreExecutors;
 import com.google.protobuf.InvalidProtocolBufferException;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 import java.util.concurrent.Callable;
+
 import javax.inject.Inject;
 
 /**
diff --git a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
index 7994ddf..fa2f9df 100644
--- a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -50,10 +51,11 @@
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListeningExecutorService;
 import com.google.common.util.concurrent.MoreExecutors;
-import java.util.ArrayList;
+
 import java.util.Arrays;
 import java.util.List;
 import java.util.Set;
+
 import javax.inject.Inject;
 import javax.inject.Singleton;
 
diff --git a/java/com/android/dialer/calllog/datasources/voicemail/VoicemailDataSource.java b/java/com/android/dialer/calllog/datasources/voicemail/VoicemailDataSource.java
index 8d9cae2..0831550 100644
--- a/java/com/android/dialer/calllog/datasources/voicemail/VoicemailDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/voicemail/VoicemailDataSource.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,6 +22,7 @@
 import android.telecom.PhoneAccountHandle;
 import android.telecom.TelecomManager;
 import android.telephony.TelephonyManager;
+
 import com.android.dialer.DialerPhoneNumber;
 import com.android.dialer.calllog.database.contract.AnnotatedCallLogContract.AnnotatedCallLog;
 import com.android.dialer.calllog.datasources.CallLogDataSource;
@@ -34,7 +36,9 @@
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListeningExecutorService;
 import com.google.protobuf.InvalidProtocolBufferException;
+
 import java.util.Map.Entry;
+
 import javax.inject.Inject;
 
 /** Provide information for whether the call is a call to the voicemail inbox. */
diff --git a/java/com/android/dialer/calllog/observer/MarkDirtyObserver.java b/java/com/android/dialer/calllog/observer/MarkDirtyObserver.java
index 93ae96e..209e3ce 100644
--- a/java/com/android/dialer/calllog/observer/MarkDirtyObserver.java
+++ b/java/com/android/dialer/calllog/observer/MarkDirtyObserver.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -25,6 +26,7 @@
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.ThreadUtil;
+
 import javax.inject.Inject;
 
 /**
diff --git a/java/com/android/dialer/calllog/ui/CallLogUiComponent.java b/java/com/android/dialer/calllog/ui/CallLogUiComponent.java
index a8e3b22..a9dbb9a 100644
--- a/java/com/android/dialer/calllog/ui/CallLogUiComponent.java
+++ b/java/com/android/dialer/calllog/ui/CallLogUiComponent.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,7 +17,9 @@
 package com.android.dialer.calllog.ui;
 
 import android.content.Context;
+
 import com.android.dialer.inject.HasRootComponent;
+
 import dagger.Subcomponent;
 
 /** Dagger component for the call log UI package. */
diff --git a/java/com/android/dialer/calllog/ui/RealtimeRowProcessor.java b/java/com/android/dialer/calllog/ui/RealtimeRowProcessor.java
index a28f525..4093f5b 100644
--- a/java/com/android/dialer/calllog/ui/RealtimeRowProcessor.java
+++ b/java/com/android/dialer/calllog/ui/RealtimeRowProcessor.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -41,11 +42,13 @@
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListeningExecutorService;
+
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.concurrent.TimeUnit;
+
 import javax.inject.Inject;
 
 /**
diff --git a/java/com/android/dialer/calllog/ui/menu/BottomSheetHeader.java b/java/com/android/dialer/calllog/ui/menu/BottomSheetHeader.java
index 6d0b795..5eb3dac 100644
--- a/java/com/android/dialer/calllog/ui/menu/BottomSheetHeader.java
+++ b/java/com/android/dialer/calllog/ui/menu/BottomSheetHeader.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,6 +18,7 @@
 package com.android.dialer.calllog.ui.menu;
 
 import android.content.Context;
+
 import com.android.dialer.calllog.model.CoalescedRow;
 import com.android.dialer.calllogutils.CallLogEntryText;
 import com.android.dialer.calllogutils.PhotoInfoBuilder;
diff --git a/java/com/android/dialer/calllog/ui/menu/DeleteCallLogItemModule.java b/java/com/android/dialer/calllog/ui/menu/DeleteCallLogItemModule.java
index e90a2dc..986a751 100644
--- a/java/com/android/dialer/calllog/ui/menu/DeleteCallLogItemModule.java
+++ b/java/com/android/dialer/calllog/ui/menu/DeleteCallLogItemModule.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -32,6 +33,7 @@
 import com.android.dialer.common.concurrent.DialerExecutorComponent;
 import com.android.dialer.common.database.Selection;
 import com.android.dialer.historyitemactions.HistoryItemActionModule;
+
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
 import java.util.List;
diff --git a/java/com/android/dialer/calllog/ui/menu/Modules.java b/java/com/android/dialer/calllog/ui/menu/Modules.java
index 6e47841..37c8aaf 100644
--- a/java/com/android/dialer/calllog/ui/menu/Modules.java
+++ b/java/com/android/dialer/calllog/ui/menu/Modules.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -30,6 +31,7 @@
 import com.android.dialer.historyitemactions.HistoryItemActionModulesBuilder;
 import com.android.dialer.historyitemactions.IntentModule;
 import com.android.dialer.phonenumberutil.PhoneNumberHelper;
+
 import java.util.List;
 
 /**
diff --git a/java/com/android/dialer/calllog/ui/menu/NewCallLogMenu.java b/java/com/android/dialer/calllog/ui/menu/NewCallLogMenu.java
index 3869e78..dc35508 100644
--- a/java/com/android/dialer/calllog/ui/menu/NewCallLogMenu.java
+++ b/java/com/android/dialer/calllog/ui/menu/NewCallLogMenu.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,6 +20,7 @@
 import android.content.Context;
 import android.provider.CallLog.Calls;
 import android.view.View;
+
 import com.android.dialer.calllog.CallLogComponent;
 import com.android.dialer.calllog.model.CoalescedRow;
 import com.android.dialer.common.concurrent.DefaultFutureCallback;
diff --git a/java/com/android/dialer/calllogutils/CallLogDates.java b/java/com/android/dialer/calllogutils/CallLogDates.java
index 9c04c05..8e33c4b 100644
--- a/java/com/android/dialer/calllogutils/CallLogDates.java
+++ b/java/com/android/dialer/calllogutils/CallLogDates.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,6 +21,7 @@
 import android.icu.lang.UCharacter;
 import android.icu.text.BreakIterator;
 import android.text.format.DateUtils;
+
 import java.util.Calendar;
 import java.util.Locale;
 import java.util.concurrent.TimeUnit;
diff --git a/java/com/android/dialer/calllogutils/CallLogDurations.java b/java/com/android/dialer/calllogutils/CallLogDurations.java
index 9ed8a93..d3e4646 100644
--- a/java/com/android/dialer/calllogutils/CallLogDurations.java
+++ b/java/com/android/dialer/calllogutils/CallLogDurations.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,7 +20,9 @@
 import android.content.Context;
 import android.content.res.Resources;
 import android.text.format.Formatter;
+
 import com.android.dialer.util.DialerUtils;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
diff --git a/java/com/android/dialer/calllogutils/CallLogEntryText.java b/java/com/android/dialer/calllogutils/CallLogEntryText.java
index c21237f..15d6538 100644
--- a/java/com/android/dialer/calllogutils/CallLogEntryText.java
+++ b/java/com/android/dialer/calllogutils/CallLogEntryText.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -26,8 +27,8 @@
 import com.android.dialer.spam.Spam;
 import com.google.common.base.Optional;
 import com.google.common.collect.Collections2;
+
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 
 /**
diff --git a/java/com/android/dialer/calllogutils/CallLogRowActions.java b/java/com/android/dialer/calllogutils/CallLogRowActions.java
index d23a15f..10b6164 100644
--- a/java/com/android/dialer/calllogutils/CallLogRowActions.java
+++ b/java/com/android/dialer/calllogutils/CallLogRowActions.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,6 +18,7 @@
 
 import android.app.Activity;
 import android.provider.CallLog.Calls;
+
 import com.android.dialer.callintent.CallInitiationType;
 import com.android.dialer.callintent.CallIntentBuilder;
 import com.android.dialer.calllog.model.CoalescedRow;
diff --git a/java/com/android/dialer/calllogutils/CallTypeIconsView.java b/java/com/android/dialer/calllogutils/CallTypeIconsView.java
index c4a73c4..51bbcf8 100644
--- a/java/com/android/dialer/calllogutils/CallTypeIconsView.java
+++ b/java/com/android/dialer/calllogutils/CallTypeIconsView.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2011 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,13 +22,22 @@
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
 import android.graphics.PorterDuff;
+import android.graphics.PorterDuffColorFilter;
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
 import android.provider.CallLog.Calls;
 import android.util.AttributeSet;
 import android.view.View;
+
+import androidx.annotation.ColorInt;
+import androidx.annotation.DrawableRes;
+import androidx.appcompat.content.res.AppCompatResources;
+import androidx.core.content.res.ResourcesCompat;
+
+import com.android.dialer.R;
 import com.android.dialer.theme.base.Theme;
 import com.android.dialer.theme.base.ThemeComponent;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -44,7 +54,7 @@
   private final boolean useLargeIcons;
 
   private static Resources resources;
-  private static Resources largeResouces;
+  private static Resources largeResources;
   private final List<Integer> callTypes = new ArrayList<>(3);
   private boolean showVideo;
   private boolean showHd;
@@ -67,8 +77,8 @@
     if (resources == null) {
       resources = new Resources(context, false);
     }
-    if (largeResouces == null && useLargeIcons) {
-      largeResouces = new Resources(context, true);
+    if (largeResources == null && useLargeIcons) {
+      largeResources = new Resources(context, true);
     }
   }
 
@@ -152,19 +162,18 @@
   }
 
   private Drawable getCallTypeDrawable(int callType) {
-    Resources resources = useLargeIcons ? largeResouces : CallTypeIconsView.resources;
+    Resources resources = useLargeIcons ? largeResources : CallTypeIconsView.resources;
     switch (callType) {
       case Calls.INCOMING_TYPE:
       case Calls.ANSWERED_EXTERNALLY_TYPE:
         return resources.incoming;
       case Calls.OUTGOING_TYPE:
         return resources.outgoing;
-      case Calls.MISSED_TYPE:
-        return resources.missed;
       case Calls.VOICEMAIL_TYPE:
         return resources.voicemail;
       case Calls.BLOCKED_TYPE:
         return resources.blocked;
+      case Calls.MISSED_TYPE:
       default:
         // It is possible for users to end up with calls with unknown call types in their
         // call history, possibly due to 3rd party call log implementations (e.g. to
@@ -181,7 +190,7 @@
 
   @Override
   protected void onDraw(Canvas canvas) {
-    Resources resources = useLargeIcons ? largeResouces : CallTypeIconsView.resources;
+    Resources resources = useLargeIcons ? largeResources : CallTypeIconsView.resources;
     int left = 0;
     // If we are using large icons, we should only show one icon (video, hd or call type) with
     // priority give to HD or Video. So we skip the call type icon if we plan to show them.
@@ -230,7 +239,7 @@
     // Drawable representing an incoming answered call.
     public final Drawable incoming;
 
-    // Drawable respresenting an outgoing call.
+    // Drawable representing an outgoing call.
     public final Drawable outgoing;
 
     // Drawable representing an incoming missed call.
@@ -242,10 +251,10 @@
     // Drawable representing a blocked call.
     public final Drawable blocked;
 
-    // Drawable repesenting a video call.
+    // Drawable representing a video call.
     final Drawable videoCall;
 
-    // Drawable represeting a hd call.
+    // Drawable representing a hd call.
     final Drawable hdCall;
 
     // Drawable representing a WiFi call.
@@ -272,76 +281,59 @@
      */
     public Resources(Context context, boolean largeIcons) {
       final android.content.res.Resources r = context.getResources();
+      android.content.res.Resources.Theme contextTheme = context.getTheme();
 
-      int iconId = R.drawable.quantum_ic_call_received_vd_theme_24;
-      Drawable drawable = largeIcons ? r.getDrawable(iconId) : getScaledBitmap(context, iconId);
-      incoming = drawable.mutate();
-      incoming.setColorFilter(r.getColor(R.color.answered_incoming_call),
-          PorterDuff.Mode.MULTIPLY);
+      incoming = getBitmap(context, R.drawable.quantum_ic_call_received_vd_theme_24,
+              r.getColor(R.color.answered_incoming_call, contextTheme), largeIcons);
 
       // Create a rotated instance of the call arrow for outgoing calls.
-      iconId = R.drawable.quantum_ic_call_made_vd_theme_24;
-      drawable = largeIcons ? r.getDrawable(iconId) : getScaledBitmap(context, iconId);
-      outgoing = drawable.mutate();
-      outgoing.setColorFilter(r.getColor(R.color.answered_outgoing_call),
-          PorterDuff.Mode.MULTIPLY);
+      outgoing = getBitmap(context, R.drawable.quantum_ic_call_made_vd_theme_24,
+              r.getColor(R.color.answered_outgoing_call, contextTheme), largeIcons);
 
       // Need to make a copy of the arrow drawable, otherwise the same instance colored
       // above will be recolored here.
-      iconId = R.drawable.quantum_ic_call_missed_vd_theme_24;
-      drawable = largeIcons ? r.getDrawable(iconId) : getScaledBitmap(context, iconId);
-      missed = drawable.mutate();
-      missed.setColorFilter(r.getColor(R.color.dialer_red), PorterDuff.Mode.MULTIPLY);
+      missed = getBitmap(context, R.drawable.quantum_ic_call_missed_vd_theme_24,
+              r.getColor(R.color.dialer_red, contextTheme), largeIcons);
 
       Theme theme = ThemeComponent.get(context).theme();
-      iconId = R.drawable.quantum_ic_voicemail_vd_theme_24;
-      drawable = largeIcons ? r.getDrawable(iconId) : getScaledBitmap(context, iconId);
-      voicemail = drawable.mutate();
-      voicemail.setColorFilter(theme.getColorIcon(), PorterDuff.Mode.MULTIPLY);
+      int iconColor = theme.getColorIcon();
 
-      iconId = R.drawable.quantum_ic_block_vd_theme_24;
-      drawable = largeIcons ? r.getDrawable(iconId) : getScaledBitmap(context, iconId);
-      blocked = drawable.mutate();
-      blocked.setColorFilter(theme.getColorIcon(), PorterDuff.Mode.MULTIPLY);
-
-      iconId = R.drawable.quantum_ic_videocam_vd_white_24;
-      drawable = largeIcons ? r.getDrawable(iconId) : getScaledBitmap(context, iconId);
-      videoCall = drawable.mutate();
-      videoCall.setColorFilter(theme.getColorIcon(), PorterDuff.Mode.MULTIPLY);
-
-      iconId = R.drawable.quantum_ic_hd_vd_theme_24;
-      drawable = largeIcons ? r.getDrawable(iconId) : getScaledBitmap(context, iconId);
-      hdCall = drawable.mutate();
-      hdCall.setColorFilter(theme.getColorIcon(), PorterDuff.Mode.MULTIPLY);
-
-      iconId = R.drawable.quantum_ic_signal_wifi_4_bar_vd_theme_24;
-      drawable = largeIcons ? r.getDrawable(iconId) : getScaledBitmap(context, iconId);
-      wifiCall = drawable.mutate();
-      wifiCall.setColorFilter(theme.getColorIcon(), PorterDuff.Mode.MULTIPLY);
-
-      iconId = R.drawable.quantum_ic_language_vd_theme_24;
-      drawable = largeIcons ? r.getDrawable(iconId) : getScaledBitmap(context, iconId);
-      assistedDialedCall = drawable.mutate();
-      assistedDialedCall.setColorFilter(theme.getColorIcon(), PorterDuff.Mode.MULTIPLY);
-
-      iconId = R.drawable.quantum_ic_rtt_vd_theme_24;
-      drawable = largeIcons ? r.getDrawable(iconId, null) : getScaledBitmap(context, iconId);
-      rttCall = drawable.mutate();
-      rttCall.setColorFilter(theme.getColorIcon(), PorterDuff.Mode.MULTIPLY);
+      voicemail = getBitmap(context, R.drawable.quantum_ic_voicemail_vd_theme_24, iconColor,
+              largeIcons);
+      blocked = getBitmap(context, R.drawable.quantum_ic_block_vd_theme_24, iconColor,
+              largeIcons);
+      videoCall = getBitmap(context, R.drawable.quantum_ic_videocam_vd_white_24, iconColor,
+              largeIcons);
+      hdCall = getBitmap(context, R.drawable.quantum_ic_hd_vd_theme_24, iconColor,
+              largeIcons);
+      wifiCall = getBitmap(context, R.drawable.quantum_ic_signal_wifi_4_bar_vd_theme_24,
+              iconColor, largeIcons);
+      assistedDialedCall = getBitmap(context, R.drawable.quantum_ic_language_vd_theme_24,
+              iconColor, largeIcons);
+      rttCall = getBitmap(context, R.drawable.quantum_ic_rtt_vd_theme_24, iconColor,
+              largeIcons);
 
       iconMargin = largeIcons ? 0 : r.getDimensionPixelSize(R.dimen.call_log_icon_margin);
     }
 
+    private Drawable getBitmap(Context context, @DrawableRes int iconId, @ColorInt int color,
+                               boolean largeIcons) {
+      final android.content.res.Resources r = context.getResources();
+      Drawable drawable = largeIcons
+              ? ResourcesCompat.getDrawable(r, iconId, context.getTheme())
+              : getScaledBitmap(context, iconId);
+      drawable.setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.MULTIPLY));
+      return drawable;
+    }
+
     // Gets the icon, scaled to the height of the call type icons. This helps display all the
     // icons to be the same height, while preserving their width aspect ratio.
     private Drawable getScaledBitmap(Context context, int resourceId) {
-      Drawable drawable = context.getDrawable(resourceId);
+      Drawable drawable = AppCompatResources.getDrawable(context, resourceId);
 
       int scaledHeight = context.getResources().getDimensionPixelSize(R.dimen.call_type_icon_size);
-      int scaledWidth =
-          (int)
-              ((float) drawable.getIntrinsicWidth()
-                  * ((float) scaledHeight / (float) drawable.getIntrinsicHeight()));
+      int scaledWidth = (int) ((float) drawable.getIntrinsicWidth()
+              * ((float) scaledHeight / (float) drawable.getIntrinsicHeight()));
 
       Bitmap icon = Bitmap.createBitmap(scaledWidth, scaledHeight, Bitmap.Config.ARGB_8888);
       Canvas canvas = new Canvas(icon);
diff --git a/java/com/android/dialer/calllogutils/FilterSpinnerHelper.java b/java/com/android/dialer/calllogutils/FilterSpinnerHelper.java
index 32bd184..831b64b 100644
--- a/java/com/android/dialer/calllogutils/FilterSpinnerHelper.java
+++ b/java/com/android/dialer/calllogutils/FilterSpinnerHelper.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2014 The CyanogenMod Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -15,12 +16,12 @@
  */
 package com.android.dialer.calllogutils;
 
+import android.annotation.SuppressLint;
 import android.content.Context;
 import android.provider.CallLog;
 import android.telecom.PhoneAccountHandle;
 import android.telecom.TelecomManager;
 import android.text.TextUtils;
-import android.util.Log;
 import android.view.View;
 import android.widget.AdapterView;
 import android.widget.ArrayAdapter;
@@ -28,8 +29,8 @@
 
 import com.android.dialer.R;
 import com.android.dialer.util.PermissionsUtil;
+
 import java.util.ArrayList;
-import java.util.List;
 
 public class FilterSpinnerHelper implements AdapterView.OnItemSelectedListener {
   private static final String TAG = FilterSpinnerHelper.class.getSimpleName();
@@ -82,6 +83,7 @@
     return spinner;
   }
 
+  @SuppressLint("MissingPermission")
   private ArrayAdapter<AccountItem> createAccountAdapter(Context context) {
     ArrayList<AccountItem> items = new ArrayList<>();
     items.add(new AccountItem(null, context.getString(R.string.call_log_show_all_accounts)));
@@ -95,7 +97,7 @@
       }
     }
 
-    return new ArrayAdapter<AccountItem>(context, R.layout.call_log_filter_spinner_item, items);
+    return new ArrayAdapter<>(context, R.layout.call_log_filter_spinner_item, items);
   }
 
   private ArrayAdapter<TypeItem> createTypeAdapter(Context context, boolean includeVoicemail) {
@@ -114,10 +116,10 @@
           context.getString(R.string.call_log_voicemail_header)));
     }
 
-    return new ArrayAdapter<TypeItem>(context, R.layout.call_log_filter_spinner_item, items);
+    return new ArrayAdapter<>(context, R.layout.call_log_filter_spinner_item, items);
   }
 
-  private final class AccountItem {
+  private static final class AccountItem {
     public final PhoneAccountHandle account;
     public final String label;
 
@@ -132,7 +134,7 @@
     }
   }
 
-  private final class TypeItem {
+  private static final class TypeItem {
     public final int value;
     public final String label;
 
diff --git a/java/com/android/dialer/calllogutils/NumberAttributesBuilder.java b/java/com/android/dialer/calllogutils/NumberAttributesBuilder.java
index 015d59f..66c424c 100644
--- a/java/com/android/dialer/calllogutils/NumberAttributesBuilder.java
+++ b/java/com/android/dialer/calllogutils/NumberAttributesBuilder.java
@@ -1,6 +1,7 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
- *
+ * Copyright (C) 2023 The LineageOS Project
+ * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
@@ -17,6 +18,7 @@
 package com.android.dialer.calllogutils;
 
 import android.text.TextUtils;
+
 import com.android.dialer.NumberAttributes;
 import com.android.dialer.phonelookup.PhoneLookupInfo;
 import com.android.dialer.phonelookup.consolidator.PhoneLookupInfoConsolidator;
diff --git a/java/com/android/dialer/calllogutils/PhoneNumberDisplayUtil.java b/java/com/android/dialer/calllogutils/PhoneNumberDisplayUtil.java
index 6509af3..c76aac1 100644
--- a/java/com/android/dialer/calllogutils/PhoneNumberDisplayUtil.java
+++ b/java/com/android/dialer/calllogutils/PhoneNumberDisplayUtil.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2011 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,6 +23,7 @@
 import android.text.BidiFormatter;
 import android.text.TextDirectionHeuristics;
 import android.text.TextUtils;
+
 import com.android.dialer.phonenumberutil.PhoneNumberHelper;
 import com.google.common.base.Optional;
 
diff --git a/java/com/android/dialer/calllogutils/PhotoInfoBuilder.java b/java/com/android/dialer/calllogutils/PhotoInfoBuilder.java
index 16fb9ac..119e681 100644
--- a/java/com/android/dialer/calllogutils/PhotoInfoBuilder.java
+++ b/java/com/android/dialer/calllogutils/PhotoInfoBuilder.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,6 +19,7 @@
 
 import android.content.Context;
 import android.provider.CallLog.Calls;
+
 import com.android.dialer.NumberAttributes;
 import com.android.dialer.calllog.model.CoalescedRow;
 import com.android.dialer.glidephotomanager.PhotoInfo;
diff --git a/java/com/android/dialer/callrecord/CallRecording.java b/java/com/android/dialer/callrecord/CallRecording.java
index 8d9ec0f..76b66e8 100644
--- a/java/com/android/dialer/callrecord/CallRecording.java
+++ b/java/com/android/dialer/callrecord/CallRecording.java
@@ -18,15 +18,12 @@
 package com.android.dialer.callrecord;
 
 import android.content.ContentValues;
-import android.os.Environment;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.provider.MediaStore;
 import android.text.TextUtils;
 import android.webkit.MimeTypeMap;
 
-import java.io.File;
-
 public final class CallRecording implements Parcelable {
   public final String phoneNumber;
   public final long creationTime;
diff --git a/java/com/android/dialer/callrecord/CallRecordingDataStore.java b/java/com/android/dialer/callrecord/CallRecordingDataStore.java
index 0a24c34..1babb85 100644
--- a/java/com/android/dialer/callrecord/CallRecordingDataStore.java
+++ b/java/com/android/dialer/callrecord/CallRecordingDataStore.java
@@ -103,7 +103,7 @@
    * @return list of recordings
    */
   public List<CallRecording> getRecordings(String phoneNumber, long callCreationDate) {
-    List<CallRecording> resultList = new ArrayList<CallRecording>();
+    List<CallRecording> resultList = new ArrayList<>();
 
     final String query = "SELECT " +
         CallRecordingsContract.CallRecording.COLUMN_NAME_RECORDING_FILENAME + "," +
@@ -115,7 +115,7 @@
         " AND " + CallRecordingsContract.CallRecording.COLUMN_NAME_MEDIA_ID + " != 0" +
         " ORDER BY " + CallRecordingsContract.CallRecording.COLUMN_NAME_CREATION_DATE;
 
-    String args[] = {
+    String[] args = {
       phoneNumber, String.valueOf(callCreationDate)
     };
 
diff --git a/java/com/android/dialer/callrecord/impl/CallRecorderService.java b/java/com/android/dialer/callrecord/impl/CallRecorderService.java
index 9940956..ac90d02 100644
--- a/java/com/android/dialer/callrecord/impl/CallRecorderService.java
+++ b/java/com/android/dialer/callrecord/impl/CallRecorderService.java
@@ -30,19 +30,16 @@
 import android.os.RemoteException;
 import android.provider.MediaStore;
 import android.text.TextUtils;
-import android.provider.Settings;
 import android.util.Log;
 
+import com.android.dialer.R;
 import com.android.dialer.callrecord.CallRecording;
 import com.android.dialer.callrecord.ICallRecorderService;
 
-import java.io.File;
 import java.io.IOException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 
-import com.android.dialer.R;
-
 public class CallRecorderService extends Service {
   private static final String TAG = "CallRecorderService";
   private static final boolean DBG = false;
diff --git a/java/com/android/dialer/callstats/CallStatsAdapter.java b/java/com/android/dialer/callstats/CallStatsAdapter.java
index 2f18a8c..7030860 100644
--- a/java/com/android/dialer/callstats/CallStatsAdapter.java
+++ b/java/com/android/dialer/callstats/CallStatsAdapter.java
@@ -44,7 +44,6 @@
 import com.android.dialer.util.PermissionsUtil;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.Comparator;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
@@ -130,8 +129,8 @@
     final String currentCountryIso = GeoUtil.getCurrentCountryIso(mContext);
     mContactInfoHelper = new ContactInfoHelper(mContext, currentCountryIso);
 
-    mAllItems = new ArrayList<CallStatsDetails>();
-    mShownItems = new ArrayList<CallStatsDetails>();
+    mAllItems = new ArrayList<>();
+    mShownItems = new ArrayList<>();
     mTotalItem = new CallStatsDetails(null, 0, null, null, null, null, null, 0);
     mInfoLookup = new ConcurrentHashMap<>();
 
@@ -171,7 +170,7 @@
       }
     }
 
-    Collections.sort(mShownItems, sortByDuration ? mDurationComparator : mCountComparator);
+    mShownItems.sort(sortByDuration ? mDurationComparator : mCountComparator);
     notifyDataSetChanged();
   }
 
diff --git a/java/com/android/dialer/callstats/CallStatsDetailActivity.java b/java/com/android/dialer/callstats/CallStatsDetailActivity.java
index 5d18de8..db32c70 100644
--- a/java/com/android/dialer/callstats/CallStatsDetailActivity.java
+++ b/java/com/android/dialer/callstats/CallStatsDetailActivity.java
@@ -171,7 +171,7 @@
     mTotalData = launchIntent.getParcelableExtra(EXTRA_TOTAL, CallStatsDetails.class);
     updateData();
 
-    TextView dateFilterView = (TextView) findViewById(R.id.date_filter);
+    TextView dateFilterView = findViewById(R.id.date_filter);
     long filterFrom = launchIntent.getLongExtra(EXTRA_FROM, -1);
     if (filterFrom == -1) {
       dateFilterView.setVisibility(View.GONE);
@@ -184,11 +184,11 @@
   @Override
   public void onResume() {
     super.onResume();
-    new UpdateContactTask().execute(mData.number.toString(), mData.countryIso);
+    new UpdateContactTask().execute(mData.number, mData.countryIso);
   }
 
   private void updateData() {
-    mNumber = mData.number.toString();
+    mNumber = mData.number;
 
     // Cache the details about the phone number.
     boolean canPlaceCallsTo = PhoneNumberHelper.canPlaceCallsTo(mNumber, mData.numberPresentation);
diff --git a/java/com/android/dialer/callstats/CallStatsDetails.java b/java/com/android/dialer/callstats/CallStatsDetails.java
index cfa6dfa..740284e 100644
--- a/java/com/android/dialer/callstats/CallStatsDetails.java
+++ b/java/com/android/dialer/callstats/CallStatsDetails.java
@@ -247,8 +247,8 @@
     name = in.readString();
     numberType = in.readInt();
     numberLabel = in.readString();
-    contactUri = in.readParcelable(null);
-    photoUri = in.readParcelable(null);
+    contactUri = in.readParcelable(null, Uri.class);
+    photoUri = in.readParcelable(null, Uri.class);
     photoId = in.readLong();
     inDuration = in.readLong();
     outDuration = in.readLong();
diff --git a/java/com/android/dialer/callstats/CallStatsFragment.java b/java/com/android/dialer/callstats/CallStatsFragment.java
index 2941b0f..b84cd3d 100644
--- a/java/com/android/dialer/callstats/CallStatsFragment.java
+++ b/java/com/android/dialer/callstats/CallStatsFragment.java
@@ -70,10 +70,8 @@
 
   private RecyclerView mRecyclerView;
   private EmptyContentView mEmptyListView;
-  private LinearLayoutManager mLayoutManager;
   private CallStatsAdapter mAdapter;
   private CallStatsQueryHandler mCallStatsQueryHandler;
-  private FilterSpinnerHelper mFilterHelper;
 
   private TextView mSumHeaderView;
   private TextView mDateFilterView;
@@ -103,7 +101,7 @@
   public void onCreate(Bundle state) {
     super.onCreate(state);
 
-    final ContentResolver cr = getActivity().getContentResolver();
+    final ContentResolver cr = requireActivity().getContentResolver();
     mCallStatsQueryHandler = new CallStatsQueryHandler(cr, this);
     cr.registerContentObserver(CallLog.CONTENT_URI, true, mObserver);
     cr.registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true, mObserver);
@@ -113,7 +111,7 @@
     ExpirableCacheHeadlessFragment cacheFragment =
         ExpirableCacheHeadlessFragment.attach((AppCompatActivity) getActivity());
     mAdapter = new CallStatsAdapter(getActivity(),
-        ContactsComponent.get(getActivity()).contactDisplayPreferences(),
+        ContactsComponent.get(requireActivity()).contactDisplayPreferences(),
         cacheFragment.getRetainedCache());
   }
 
@@ -121,16 +119,16 @@
   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
     View view = inflater.inflate(R.layout.call_stats_fragment, container, false);
 
-    mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
+    mRecyclerView = view.findViewById(R.id.recycler_view);
     mRecyclerView.setHasFixedSize(true);
-    mLayoutManager = new LinearLayoutManager(getActivity());
-    mRecyclerView.setLayoutManager(mLayoutManager);
-    mEmptyListView = (EmptyContentView) view.findViewById(R.id.empty_list_view);
+    LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
+    mRecyclerView.setLayoutManager(layoutManager);
+    mEmptyListView = view.findViewById(R.id.empty_list_view);
     mEmptyListView.setImage(R.drawable.empty_call_log);
     mEmptyListView.setActionClickedListener(this);
 
-    mSumHeaderView = (TextView) view.findViewById(R.id.sum_header);
-    mDateFilterView = (TextView) view.findViewById(R.id.date_filter);
+    mSumHeaderView = view.findViewById(R.id.sum_header);
+    mDateFilterView = view.findViewById(R.id.date_filter);
 
     return view;
   }
@@ -139,7 +137,6 @@
   public void onViewCreated(View view, Bundle savedInstanceState) {
     super.onViewCreated(view, savedInstanceState);
     mRecyclerView.setAdapter(mAdapter);
-    mFilterHelper = new FilterSpinnerHelper(view, false, this);
     updateEmptyVisibilityAndMessage();
   }
 
@@ -163,30 +160,22 @@
   @Override
   public boolean onOptionsItemSelected(MenuItem item) {
     final int itemId = item.getItemId();
-    switch (itemId) {
-      case R.id.date_filter: {
-        final DoubleDatePickerDialog.Fragment fragment =
-            new DoubleDatePickerDialog.Fragment();
-        fragment.setArguments(
-            DoubleDatePickerDialog.Fragment.createArguments(mFilterFrom, mFilterTo));
-        fragment.show(getParentFragmentManager(), "filter");
-        break;
-      }
-      case R.id.reset_date_filter: {
-        mFilterFrom = -1;
-        mFilterTo = -1;
-        fetchCalls();
-        updateEmptyVisibilityAndMessage();
-        getActivity().invalidateOptionsMenu();
-        break;
-      }
-      case R.id.sort_by_duration:
-      case R.id.sort_by_count: {
-        mSortByDuration = itemId == R.id.sort_by_duration;
-        mAdapter.updateDisplayedData(mCallTypeFilter, mSortByDuration);
-        getActivity().invalidateOptionsMenu();
-        break;
-      }
+    if (itemId == R.id.date_filter) {
+      final DoubleDatePickerDialog.Fragment fragment =
+              new DoubleDatePickerDialog.Fragment();
+      fragment.setArguments(
+              DoubleDatePickerDialog.Fragment.createArguments(mFilterFrom, mFilterTo));
+      fragment.show(getParentFragmentManager(), "filter");
+    } else if (itemId == R.id.reset_date_filter) {
+      mFilterFrom = -1;
+      mFilterTo = -1;
+      fetchCalls();
+      updateEmptyVisibilityAndMessage();
+      requireActivity().invalidateOptionsMenu();
+    } else if (itemId == R.id.sort_by_duration || itemId == R.id.sort_by_count) {
+      mSortByDuration = itemId == R.id.sort_by_duration;
+      mAdapter.updateDisplayedData(mCallTypeFilter, mSortByDuration);
+      requireActivity().invalidateOptionsMenu();
     }
     return true;
   }
@@ -218,7 +207,7 @@
   public void onDateSet(long from, long to) {
     mFilterFrom = from;
     mFilterTo = to;
-    getActivity().invalidateOptionsMenu();
+    requireActivity().invalidateOptionsMenu();
     fetchCalls();
     updateEmptyVisibilityAndMessage();
   }
diff --git a/java/com/android/dialer/callstats/CallStatsListItemViewHolder.java b/java/com/android/dialer/callstats/CallStatsListItemViewHolder.java
index c861523..01d214a 100644
--- a/java/com/android/dialer/callstats/CallStatsListItemViewHolder.java
+++ b/java/com/android/dialer/callstats/CallStatsListItemViewHolder.java
@@ -18,8 +18,8 @@
 package com.android.dialer.callstats;
 
 import android.content.Context;
-import android.content.res.Resources;
 import android.content.Intent;
+import android.content.res.Resources;
 import android.provider.CallLog.Calls;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
 import android.text.TextUtils;
@@ -87,20 +87,18 @@
     quickContactView.setPrioritizedMimeType(Phone.CONTENT_ITEM_TYPE);
 
     mContext = rootView.getContext();
-    mPhotoSize = mContext.getResources().getDimensionPixelSize(R.dimen.contact_photo_size);
     mContactInfoHelper = contactInfoHelper;
   }
 
-  public static CallStatsListItemViewHolder create(View view,
-      ContactInfoHelper contactInfoHelper) {
+  public static CallStatsListItemViewHolder create(View view, ContactInfoHelper contactInfoHelper) {
     return new CallStatsListItemViewHolder(view,
-        (QuickContactBadge) view.findViewById(R.id.quick_contact_photo),
+        view.findViewById(R.id.quick_contact_photo),
         view.findViewById(R.id.primary_action_view),
-        (TextView) view.findViewById(R.id.name),
-        (TextView) view.findViewById(R.id.number),
-        (TextView) view.findViewById(R.id.label),
-        (TextView) view.findViewById(R.id.percent),
-        (LinearColorBar) view.findViewById(R.id.percent_bar),
+        view.findViewById(R.id.name),
+        view.findViewById(R.id.number),
+        view.findViewById(R.id.label),
+        view.findViewById(R.id.percent),
+        view.findViewById(R.id.percent_bar),
         contactInfoHelper);
   }
 
diff --git a/java/com/android/dialer/callstats/CallStatsQueryHandler.java b/java/com/android/dialer/callstats/CallStatsQueryHandler.java
index 3c93be0..32f7397 100644
--- a/java/com/android/dialer/callstats/CallStatsQueryHandler.java
+++ b/java/com/android/dialer/callstats/CallStatsQueryHandler.java
@@ -1,6 +1,7 @@
 /*
  * Copyright (C) 2011 The Android Open Source Project
  * Copyright (C) 2013 Android Open Kang Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,8 +23,8 @@
 import android.database.Cursor;
 import android.database.sqlite.SQLiteDatabaseCorruptException;
 import android.database.sqlite.SQLiteDiskIOException;
+import android.database.sqlite.SQLiteException;
 import android.database.sqlite.SQLiteFullException;
-import android.net.Uri;
 import android.os.Handler;
 import android.os.Looper;
 import android.os.Message;
@@ -33,9 +34,9 @@
 import android.util.Log;
 
 import com.android.dialer.phonenumbercache.ContactInfo;
+import com.android.dialer.phonenumberutil.PhoneNumberHelper;
 import com.android.dialer.telecom.TelecomUtil;
 import com.android.dialer.util.UriUtils;
-
 import com.google.common.collect.Lists;
 
 import java.lang.ref.WeakReference;
@@ -82,11 +83,7 @@
       try {
         // Perform same query while catching any exceptions
         super.handleMessage(msg);
-      } catch (SQLiteDiskIOException e) {
-        Log.w(TAG, "Exception on background worker thread", e);
-      } catch (SQLiteFullException e) {
-        Log.w(TAG, "Exception on background worker thread", e);
-      } catch (SQLiteDatabaseCorruptException e) {
+      } catch (SQLiteDiskIOException | SQLiteFullException | SQLiteDatabaseCorruptException e) {
         Log.w(TAG, "Exception on background worker thread", e);
       }
     }
@@ -101,7 +98,7 @@
 
   public CallStatsQueryHandler(ContentResolver contentResolver, Listener listener) {
     super(contentResolver);
-    mListener = new WeakReference<Listener>(listener);
+    mListener = new WeakReference<>(listener);
   }
 
   public void fetchCalls(long from, long to, PhoneAccountHandle account) {
@@ -160,9 +157,9 @@
   }
 
   private Map<ContactInfo, CallStatsDetails> processData(Cursor cursor) {
-    final Map<ContactInfo, CallStatsDetails> result = new HashMap<ContactInfo, CallStatsDetails>();
-    final ArrayList<ContactInfo> infos = new ArrayList<ContactInfo>();
-    final ArrayList<CallStatsDetails> calls = new ArrayList<CallStatsDetails>();
+    final Map<ContactInfo, CallStatsDetails> result = new HashMap<>();
+    final ArrayList<ContactInfo> infos = new ArrayList<>();
+    final ArrayList<CallStatsDetails> calls = new ArrayList<>();
     CallStatsDetails pending = null;
 
     cursor.moveToFirst();
@@ -205,8 +202,8 @@
 
   private void mergeItemsByNumber(List<CallStatsDetails> calls, List<ContactInfo> infos) {
     // temporarily store items marked for removal
-    final ArrayList<CallStatsDetails> callsToRemove = new ArrayList<CallStatsDetails>();
-    final ArrayList<ContactInfo> infosToRemove = new ArrayList<ContactInfo>();
+    final ArrayList<CallStatsDetails> callsToRemove = new ArrayList<>();
+    final ArrayList<ContactInfo> infosToRemove = new ArrayList<>();
 
     for (int i = 0; i < calls.size(); i++) {
       final CallStatsDetails outerItem = calls.get(i);
@@ -254,43 +251,13 @@
   }
 
   private static boolean phoneNumbersEqual(String number1, String number2) {
-    if (PhoneNumberUtils.isUriNumber(number1) || PhoneNumberUtils.isUriNumber(number2)) {
-      return sipAddressesEqual(number1, number2);
+    if (PhoneNumberHelper.isUriNumber(number1) || PhoneNumberHelper.isUriNumber(number2)) {
+      return PhoneNumberHelper.compareSipAddresses(number1, number2);
     } else {
       return PhoneNumberUtils.compare(number1, number2);
     }
   }
 
-  private static boolean sipAddressesEqual(String number1, String number2) {
-    if (number1 == null || number2 == null) {
-      return number1 == number2;
-    }
-
-    int index1 = number1.indexOf('@');
-    final String userinfo1;
-    final String rest1;
-    if (index1 != -1) {
-      userinfo1 = number1.substring(0, index1);
-      rest1 = number1.substring(index1);
-    } else {
-      userinfo1 = number1;
-      rest1 = "";
-    }
-
-    int index2 = number2.indexOf('@');
-    final String userinfo2;
-    final String rest2;
-    if (index2 != -1) {
-      userinfo2 = number2.substring(0, index2);
-      rest2 = number2.substring(index2);
-    } else {
-      userinfo2 = number2;
-      rest2 = "";
-    }
-
-    return userinfo1.equals(userinfo2) && rest1.equalsIgnoreCase(rest2);
-  }
-
   public interface Listener {
     void onCallsFetched(Map<ContactInfo, CallStatsDetails> calls);
   }
diff --git a/java/com/android/dialer/callstats/DoubleDatePickerDialog.java b/java/com/android/dialer/callstats/DoubleDatePickerDialog.java
index e0c40bf..1e9e072 100644
--- a/java/com/android/dialer/callstats/DoubleDatePickerDialog.java
+++ b/java/com/android/dialer/callstats/DoubleDatePickerDialog.java
@@ -148,10 +148,10 @@
     View view = inflater.inflate(R.layout.double_date_picker_dialog, null);
     setView(view);
 
-    mDatePickerFrom = (DatePicker) view.findViewById(R.id.date_picker_from);
-    mDatePickerTo = (DatePicker) view.findViewById(R.id.date_picker_to);
+    mDatePickerFrom = view.findViewById(R.id.date_picker_from);
+    mDatePickerTo = view.findViewById(R.id.date_picker_to);
 
-    ArrayList<CharSequence> quickSelEntries = new ArrayList<CharSequence>();
+    ArrayList<CharSequence> quickSelEntries = new ArrayList<>();
     for (int entryId : QUICKSELECTION_ENTRIES) {
       quickSelEntries.add(context.getString(entryId));
     }
@@ -166,7 +166,7 @@
     };
     quickSelAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
 
-    mQuickSelSpinner = (Spinner) view.findViewById(R.id.date_quick_selection);
+    mQuickSelSpinner = view.findViewById(R.id.date_quick_selection);
     mQuickSelSpinner.setOnItemSelectedListener(this);
     mQuickSelSpinner.setAdapter(quickSelAdapter);
 
diff --git a/java/com/android/dialer/common/FragmentUtils.java b/java/com/android/dialer/common/FragmentUtils.java
index f31d2b7..df1e475 100644
--- a/java/com/android/dialer/common/FragmentUtils.java
+++ b/java/com/android/dialer/common/FragmentUtils.java
@@ -56,36 +56,6 @@
     return null;
   }
 
-  /**
-   * Returns an instance of the {@code callbackInterface} that is defined in the parent of the
-   * {@code fragment}, or null if no such call back can be found.
-   */
-  @CheckResult(suggest = "#checkParent(Fragment, Class)}")
-  @Nullable
-  public static <T> T getParent(
-      @NonNull android.app.Fragment fragment, @NonNull Class<T> callbackInterface) {
-    android.app.Fragment parentFragment = fragment.getParentFragment();
-    if (callbackInterface.isInstance(parentFragment)) {
-      @SuppressWarnings("unchecked") // Casts are checked using runtime methods
-      T parent = (T) parentFragment;
-      return parent;
-    } else if (callbackInterface.isInstance(fragment.getActivity())) {
-      @SuppressWarnings("unchecked") // Casts are checked using runtime methods
-      T parent = (T) fragment.getActivity();
-      return parent;
-    } else if (fragment.getActivity() instanceof FragmentUtilListener) {
-      @SuppressWarnings("unchecked") // Casts are checked using runtime methods
-      T parent = ((FragmentUtilListener) fragment.getActivity()).getImpl(callbackInterface);
-      return parent;
-    } else if (fragment.getActivity() instanceof MainActivityPeer.PeerSupplier) {
-      MainActivityPeer peer = ((MainActivityPeer.PeerSupplier) fragment.getActivity()).getPeer();
-      if (peer instanceof FragmentUtilListener) {
-        return ((FragmentUtilListener) peer).getImpl(callbackInterface);
-      }
-    }
-    return null;
-  }
-
   /** Returns the parent or throws. Should perform check elsewhere(e.g. onAttach, newInstance). */
   @NonNull
   public static <T> T getParentUnsafe(
@@ -94,16 +64,6 @@
   }
 
   /**
-   * Version of {@link #getParentUnsafe(Fragment, Class)} which supports {@link
-   * android.app.Fragment}.
-   */
-  @NonNull
-  public static <T> T getParentUnsafe(
-      @NonNull android.app.Fragment fragment, @NonNull Class<T> callbackInterface) {
-    return Assert.isNotNull(getParent(fragment, callbackInterface));
-  }
-
-  /**
    * Ensures fragment has a parent that implements the corresponding interface
    *
    * @param frag The Fragment whose parents are to be checked
diff --git a/java/com/android/dialer/common/concurrent/AsyncTaskExecutors.java b/java/com/android/dialer/common/concurrent/AsyncTaskExecutors.java
index d925b34..ed4faa0 100644
--- a/java/com/android/dialer/common/concurrent/AsyncTaskExecutors.java
+++ b/java/com/android/dialer/common/concurrent/AsyncTaskExecutors.java
@@ -23,6 +23,7 @@
 import androidx.annotation.MainThread;
 
 import com.android.dialer.common.Assert;
+
 import java.util.concurrent.Executor;
 
 /**
diff --git a/java/com/android/dialer/common/concurrent/DialerExecutorModule.java b/java/com/android/dialer/common/concurrent/DialerExecutorModule.java
index b8659b1..7503407 100644
--- a/java/com/android/dialer/common/concurrent/DialerExecutorModule.java
+++ b/java/com/android/dialer/common/concurrent/DialerExecutorModule.java
@@ -17,6 +17,7 @@
 package com.android.dialer.common.concurrent;
 
 import android.os.AsyncTask;
+
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor;
 import com.android.dialer.common.concurrent.Annotations.LightweightExecutor;
@@ -27,15 +28,17 @@
 import com.android.dialer.common.concurrent.Annotations.UiSerial;
 import com.google.common.util.concurrent.ListeningExecutorService;
 import com.google.common.util.concurrent.MoreExecutors;
-import dagger.Binds;
-import dagger.Module;
-import dagger.Provides;
+
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ThreadFactory;
+
 import javax.inject.Singleton;
 
+import dagger.Binds;
+import dagger.Module;
+import dagger.Provides;
+
 /** Module which provides concurrency bindings. */
 @Module
 public abstract class DialerExecutorModule {
diff --git a/java/com/android/dialer/common/concurrent/DialerExecutors.java b/java/com/android/dialer/common/concurrent/DialerExecutors.java
index 91c77ae..b9ed480 100644
--- a/java/com/android/dialer/common/concurrent/DialerExecutors.java
+++ b/java/com/android/dialer/common/concurrent/DialerExecutors.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,6 +22,7 @@
 import androidx.annotation.NonNull;
 
 import com.android.dialer.common.Assert;
+
 import java.util.concurrent.ExecutorService;
 
 /** Shared application executors. */
diff --git a/java/com/android/dialer/common/concurrent/DialerFutureSerializer.java b/java/com/android/dialer/common/concurrent/DialerFutureSerializer.java
index 2629abb..ef36ae6 100644
--- a/java/com/android/dialer/common/concurrent/DialerFutureSerializer.java
+++ b/java/com/android/dialer/common/concurrent/DialerFutureSerializer.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -24,6 +25,7 @@
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.SettableFuture;
+
 import java.util.concurrent.Callable;
 import java.util.concurrent.Executor;
 import java.util.concurrent.atomic.AtomicBoolean;
diff --git a/java/com/android/dialer/common/concurrent/DialerFutures.java b/java/com/android/dialer/common/concurrent/DialerFutures.java
index 0c9f455..45d2106 100644
--- a/java/com/android/dialer/common/concurrent/DialerFutures.java
+++ b/java/com/android/dialer/common/concurrent/DialerFutures.java
@@ -24,6 +24,7 @@
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.MoreExecutors;
+
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicReference;
diff --git a/java/com/android/dialer/common/concurrent/UiThreadExecutor.java b/java/com/android/dialer/common/concurrent/UiThreadExecutor.java
index 8378d69..b112dbc 100644
--- a/java/com/android/dialer/common/concurrent/UiThreadExecutor.java
+++ b/java/com/android/dialer/common/concurrent/UiThreadExecutor.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,9 +19,11 @@
 import com.google.common.util.concurrent.AbstractListeningExecutorService;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.SettableFuture;
+
 import java.util.List;
 import java.util.concurrent.Callable;
 import java.util.concurrent.TimeUnit;
+
 import javax.inject.Inject;
 
 /**
diff --git a/java/com/android/dialer/common/database/Selection.java b/java/com/android/dialer/common/database/Selection.java
index f1b6191..a4af033 100644
--- a/java/com/android/dialer/common/database/Selection.java
+++ b/java/com/android/dialer/common/database/Selection.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,6 +23,7 @@
 import androidx.annotation.Nullable;
 
 import com.android.dialer.common.Assert;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -111,7 +113,6 @@
    *     enclosed in a parenthesis.
    */
   @NonNull
-  @SuppressWarnings("rawtypes")
   public static Selection fromString(@Nullable String selection, @Nullable String... args) {
     return new Builder(selection, args == null ? Collections.emptyList() : Arrays.asList(args))
         .build();
@@ -204,7 +205,7 @@
       }
       return new Selection(
           parenthesized(selection.toString()),
-          selectionArgs.toArray(new String[selectionArgs.size()]));
+          selectionArgs.toArray(new String[0]));
     }
 
     @NonNull
diff --git a/java/com/android/dialer/compat/telephony/TelephonyManagerCompat.java b/java/com/android/dialer/compat/telephony/TelephonyManagerCompat.java
index d50febf..f160fd2 100644
--- a/java/com/android/dialer/compat/telephony/TelephonyManagerCompat.java
+++ b/java/com/android/dialer/compat/telephony/TelephonyManagerCompat.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,15 +17,17 @@
 
 package com.android.dialer.compat.telephony;
 
+import android.annotation.SuppressLint;
 import android.content.Context;
-import android.net.Uri;
 import android.telecom.PhoneAccountHandle;
+import android.telecom.TelecomManager;
 import android.telephony.TelephonyManager;
 
 import androidx.annotation.Nullable;
 
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.telecom.TelecomUtil;
+
 import java.lang.reflect.InvocationTargetException;
 
 /** Hidden APIs in {@link android.telephony.TelephonyManager}. */
@@ -47,10 +50,6 @@
       "android.telephony.event.EVENT_NOTIFY_INTERNATIONAL_CALL_ON_WFC";
   public static final String EVENT_CALL_FORWARDED = "android.telephony.event.EVENT_CALL_FORWARDED";
 
-  public static final String TELEPHONY_MANAGER_CLASS = "android.telephony.TelephonyManager";
-
-  private static final String SECRET_CODE_ACTION = "android.provider.Telephony.SECRET_CODE";
-
   // TODO(erfanian): a bug Replace with the platform/telecom constant when available.
   /**
    * Indicates that the call being placed originated from a known contact.
@@ -64,9 +63,6 @@
   public static final String ASSISTED_DIALING_EXTRAS =
       "android.telecom.extra.ASSISTED_DIALING_EXTRAS";
 
-  /** Indicates the Connection/Call used assisted dialing. */
-  public static final int PROPERTY_ASSISTED_DIALING_USED = 1 << 9;
-
   public static final String EXTRA_IS_REFRESH = "android.telephony.extra.IS_REFRESH";
 
   /**
@@ -100,11 +96,12 @@
   /**
    * Whether the phone supports TTY mode.
    *
-   * @param telephonyManager The telephony manager instance to use for method calls.
+   * @param telecomManager The TelecomManager manager instance to use for method calls.
    * @return {@code true} if the device supports TTY mode, and {@code false} otherwise.
    */
-  public static boolean isTtyModeSupported(@Nullable TelephonyManager telephonyManager) {
-    return telephonyManager != null && telephonyManager.isTtyModeSupported();
+  @SuppressLint("MissingPermission")
+  public static boolean isTtyModeSupported(@Nullable TelecomManager telecomManager) {
+    return telecomManager != null && telecomManager.isTtySupported();
   }
 
   /**
@@ -120,34 +117,6 @@
   }
 
   /**
-   * Returns the URI for the per-account voicemail ringtone set in Phone settings.
-   *
-   * @param telephonyManager The telephony manager instance to use for method calls.
-   * @param accountHandle The handle for the {@link android.telecom.PhoneAccount} for which to
-   *     retrieve the voicemail ringtone.
-   * @return The URI for the ringtone to play when receiving a voicemail from a specific
-   *     PhoneAccount.
-   */
-  @Nullable
-  public static Uri getVoicemailRingtoneUri(
-      TelephonyManager telephonyManager, PhoneAccountHandle accountHandle) {
-    return telephonyManager.getVoicemailRingtoneUri(accountHandle);
-  }
-
-  /**
-   * Returns whether vibration is set for voicemail notification in Phone settings.
-   *
-   * @param telephonyManager The telephony manager instance to use for method calls.
-   * @param accountHandle The handle for the {@link android.telecom.PhoneAccount} for which to
-   *     retrieve the voicemail vibration setting.
-   * @return {@code true} if the vibration is set for this PhoneAccount, {@code false} otherwise.
-   */
-  public static boolean isVoicemailVibrationEnabled(
-      TelephonyManager telephonyManager, PhoneAccountHandle accountHandle) {
-    return telephonyManager.isVoicemailVibrationEnabled(accountHandle);
-  }
-
-  /**
    * This method uses a new system API to enable or disable visual voicemail. TODO(twyen): restrict
    * to N MR1, not needed in future SDK.
    */
@@ -163,23 +132,6 @@
   }
 
   /**
-   * This method uses a new system API to check if visual voicemail is enabled TODO(twyen): restrict
-   * to N MR1, not needed in future SDK.
-   */
-  public static boolean isVisualVoicemailEnabled(
-      TelephonyManager telephonyManager, PhoneAccountHandle handle) {
-    try {
-      return (boolean)
-          TelephonyManager.class
-              .getMethod("isVisualVoicemailEnabled", PhoneAccountHandle.class)
-              .invoke(telephonyManager, handle);
-    } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
-      LogUtil.e("TelephonyManagerCompat.setVisualVoicemailEnabled", "failed", e);
-    }
-    return false;
-  }
-
-  /**
    * Handles secret codes to launch arbitrary activities.
    *
    * @param context the context to use
diff --git a/java/com/android/dialer/constants/Constants.java b/java/com/android/dialer/constants/Constants.java
index dedcf15..a157c77 100644
--- a/java/com/android/dialer/constants/Constants.java
+++ b/java/com/android/dialer/constants/Constants.java
@@ -16,43 +16,18 @@
 
 package com.android.dialer.constants;
 
-import androidx.annotation.NonNull;
-
 /**
  * Utility to access constants
  */
 public class Constants {
-  private static Constants instance;
-  private static boolean didInitializeInstance;
+  public static final String FILE_PROVIDER_AUTHORITY = "com.android.dialer.files";
 
-  @NonNull
-  public static synchronized Constants get() {
-    if (!didInitializeInstance) {
-      didInitializeInstance = true;
-      instance = new Constants();
-    }
-    return instance;
-  }
+  public static final String ANNOTATED_CALL_LOG_PROVIDER_AUTHORITY =
+          "com.android.dialer.annotatedcalllog";
 
-  @NonNull
-  public String getFileProviderAuthority() {
-    return "com.android.dialer.files";
-  }
+  public static final String PHONE_LOOKUP_HISTORY_PROVIDER_AUTHORITY =
+          "com.android.dialer.phonelookuphistory";
 
-  @NonNull
-  public String getAnnotatedCallLogProviderAuthority() {
-    return "com.android.dialer.annotatedcalllog";
-  }
-
-  @NonNull
-  public String getPhoneLookupHistoryProviderAuthority() {
-    return "com.android.dialer.phonelookuphistory";
-  }
-
-  @NonNull
-  public String getPreferredSimFallbackProviderAuthority() {
-    return "com.android.dialer.preferredsimfallback";
-  }
-
-  protected Constants() {}
+  public static final String PREFERRED_SIM_FALLBACK_PROVIDER_AUTHORITY =
+          "com.android.dialer.preferredsimfallback";
 }
diff --git a/java/com/android/dialer/constants/ScheduledJobIds.java b/java/com/android/dialer/constants/ScheduledJobIds.java
index e9815c7..34a27bd 100644
--- a/java/com/android/dialer/constants/ScheduledJobIds.java
+++ b/java/com/android/dialer/constants/ScheduledJobIds.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,11 +17,6 @@
 
 package com.android.dialer.constants;
 
-import androidx.annotation.IntDef;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
 /**
  * Registry of scheduled job ids used by the dialer UID.
  *
diff --git a/java/com/android/dialer/contactphoto/ContactPhotoManager.java b/java/com/android/dialer/contactphoto/ContactPhotoManager.java
index 4bac886..fd98d2b 100644
--- a/java/com/android/dialer/contactphoto/ContactPhotoManager.java
+++ b/java/com/android/dialer/contactphoto/ContactPhotoManager.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2010 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -27,6 +28,7 @@
 import android.view.View;
 import android.widget.ImageView;
 import android.widget.QuickContactBadge;
+
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.lettertile.LetterTileDrawable;
 import com.android.dialer.util.PermissionsUtil;
@@ -97,22 +99,22 @@
     try {
       String contactType = uri.getQueryParameter(CONTACT_TYPE_PARAM_KEY);
       if (!TextUtils.isEmpty(contactType)) {
-        request.contactType = Integer.valueOf(contactType);
+        request.contactType = Integer.parseInt(contactType);
       }
 
       String scale = uri.getQueryParameter(SCALE_PARAM_KEY);
       if (!TextUtils.isEmpty(scale)) {
-        request.scale = Float.valueOf(scale);
+        request.scale = Float.parseFloat(scale);
       }
 
       String offset = uri.getQueryParameter(OFFSET_PARAM_KEY);
       if (!TextUtils.isEmpty(offset)) {
-        request.offset = Float.valueOf(offset);
+        request.offset = Float.parseFloat(offset);
       }
 
       String isCircular = uri.getQueryParameter(IS_CIRCULAR_PARAM_KEY);
       if (!TextUtils.isEmpty(isCircular)) {
-        request.isCircular = Boolean.valueOf(isCircular);
+        request.isCircular = Boolean.parseBoolean(isCircular);
       }
     } catch (NumberFormatException e) {
       LogUtil.w(
diff --git a/java/com/android/dialer/contactphoto/ContactPhotoManagerImpl.java b/java/com/android/dialer/contactphoto/ContactPhotoManagerImpl.java
index 7f2905e..576b040 100644
--- a/java/com/android/dialer/contactphoto/ContactPhotoManagerImpl.java
+++ b/java/com/android/dialer/contactphoto/ContactPhotoManagerImpl.java
@@ -110,7 +110,7 @@
 
   static {
     BITMAP_UNAVAILABLE = new BitmapHolder(new byte[0], 0);
-    BITMAP_UNAVAILABLE.bitmapRef = new SoftReference<Bitmap>(null);
+    BITMAP_UNAVAILABLE.bitmapRef = new SoftReference<>(null);
   }
 
   private final Context context;
@@ -131,8 +131,7 @@
    * A map from ImageView to the corresponding photo ID or uri, encapsulated in a request. The
    * request may swapped out before the photo loading request is started.
    */
-  private final ConcurrentHashMap<ImageView, Request> pendingRequests =
-      new ConcurrentHashMap<ImageView, Request>();
+  private final ConcurrentHashMap<ImageView, Request> pendingRequests = new ConcurrentHashMap<>();
   /** Handler for messages sent to the UI thread. */
   private final Handler mainThreadHandler = new Handler(Looper.getMainLooper(), this);
   /** For debug: How many times we had to reload cached photo for a stale entry */
@@ -281,7 +280,7 @@
 
       holder.decodedSampleSize = sampleSize;
       holder.bitmap = bitmap;
-      holder.bitmapRef = new SoftReference<Bitmap>(bitmap);
+      holder.bitmapRef = new SoftReference<>(bitmap);
       if (DEBUG) {
         LogUtil.d(
             "ContactPhotoManagerImpl.inflateBitmap",
@@ -339,7 +338,7 @@
       LogUtil.d(
           "ContactPhotoManagerImpl.dumpStats",
           "L1 Stats: "
-              + bitmapHolderCache.toString()
+              + bitmapHolderCache
               + ", overwrite: fresh="
               + freshCacheOverwrite.get()
               + " stale="
diff --git a/java/com/android/dialer/contacts/ContactsComponent.java b/java/com/android/dialer/contacts/ContactsComponent.java
index 9c67737..9e374a0 100644
--- a/java/com/android/dialer/contacts/ContactsComponent.java
+++ b/java/com/android/dialer/contacts/ContactsComponent.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,10 +18,12 @@
 package com.android.dialer.contacts;
 
 import android.content.Context;
+
 import com.android.dialer.contacts.displaypreference.ContactDisplayPreferences;
 import com.android.dialer.contacts.hiresphoto.HighResolutionPhotoRequester;
 import com.android.dialer.inject.HasRootComponent;
 import com.android.dialer.inject.IncludeInDialerRoot;
+
 import dagger.Subcomponent;
 
 /** Component for contacts related utilities */
diff --git a/java/com/android/dialer/contacts/ContactsModule.java b/java/com/android/dialer/contacts/ContactsModule.java
index 9cbb6ae..a41dec2 100644
--- a/java/com/android/dialer/contacts/ContactsModule.java
+++ b/java/com/android/dialer/contacts/ContactsModule.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,12 +19,14 @@
 
 import android.content.Context;
 import android.os.UserManager;
+
 import com.android.dialer.contacts.displaypreference.ContactDisplayPreferences;
 import com.android.dialer.contacts.displaypreference.ContactDisplayPreferencesImpl;
 import com.android.dialer.contacts.displaypreference.ContactDisplayPreferencesStub;
 import com.android.dialer.contacts.hiresphoto.HighResolutionPhotoRequester;
 import com.android.dialer.contacts.hiresphoto.HighResolutionPhotoRequesterImpl;
 import com.android.dialer.inject.ApplicationContext;
+
 import dagger.Binds;
 import dagger.Lazy;
 import dagger.Module;
diff --git a/java/com/android/dialer/contacts/hiresphoto/HighResolutionPhotoRequester.java b/java/com/android/dialer/contacts/hiresphoto/HighResolutionPhotoRequester.java
index 1075ec1..13d6104 100644
--- a/java/com/android/dialer/contacts/hiresphoto/HighResolutionPhotoRequester.java
+++ b/java/com/android/dialer/contacts/hiresphoto/HighResolutionPhotoRequester.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,6 +18,7 @@
 package com.android.dialer.contacts.hiresphoto;
 
 import android.net.Uri;
+
 import com.google.common.util.concurrent.ListenableFuture;
 
 /**
diff --git a/java/com/android/dialer/contacts/hiresphoto/HighResolutionPhotoRequesterImpl.java b/java/com/android/dialer/contacts/hiresphoto/HighResolutionPhotoRequesterImpl.java
index 64eab60..c9dbb47 100644
--- a/java/com/android/dialer/contacts/hiresphoto/HighResolutionPhotoRequesterImpl.java
+++ b/java/com/android/dialer/contacts/hiresphoto/HighResolutionPhotoRequesterImpl.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -24,14 +25,17 @@
 import android.net.Uri;
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.RawContacts;
+
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor;
 import com.android.dialer.common.database.Selection;
 import com.android.dialer.inject.ApplicationContext;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListeningExecutorService;
+
 import java.util.ArrayList;
 import java.util.List;
+
 import javax.inject.Inject;
 
 /** Use the contacts sync adapter to load high resolution photos for a Google account. */
diff --git a/java/com/android/dialer/contactsfragment/ContactViewHolder.java b/java/com/android/dialer/contactsfragment/ContactViewHolder.java
index bf8b3d4..25eab26 100644
--- a/java/com/android/dialer/contactsfragment/ContactViewHolder.java
+++ b/java/com/android/dialer/contactsfragment/ContactViewHolder.java
@@ -17,7 +17,6 @@
 
 package com.android.dialer.contactsfragment;
 
-import android.content.Context;
 import android.net.Uri;
 import android.text.TextUtils;
 import android.view.View;
@@ -38,7 +37,6 @@
   private final TextView header;
   private final BidiTextView name;
   private final QuickContactBadge photo;
-  private final Context context;
   private final OnContactSelectedListener onContactSelectedListener;
 
   private String headerText;
@@ -48,7 +46,6 @@
   ContactViewHolder(View itemView, OnContactSelectedListener onContactSelectedListener) {
     super(itemView);
     this.onContactSelectedListener = Assert.isNotNull(onContactSelectedListener);
-    context = itemView.getContext();
     itemView.findViewById(R.id.click_target).setOnClickListener(this);
     header = itemView.findViewById(R.id.header);
     name = itemView.findViewById(R.id.contact_name);
diff --git a/java/com/android/dialer/database/CallLogQueryHandler.java b/java/com/android/dialer/database/CallLogQueryHandler.java
index de4329d..4c19e2d 100644
--- a/java/com/android/dialer/database/CallLogQueryHandler.java
+++ b/java/com/android/dialer/database/CallLogQueryHandler.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2011 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -32,6 +33,7 @@
 import android.provider.CallLog.Calls;
 import android.provider.VoicemailContract.Status;
 import android.provider.VoicemailContract.Voicemails;
+
 import com.android.contacts.common.database.NoNullCursorAsyncQueryHandler;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.phonenumbercache.CallLogQuery;
@@ -39,6 +41,7 @@
 import com.android.dialer.util.PermissionsUtil;
 import com.android.dialer.voicemailstatus.VoicemailStatusQuery;
 import com.android.voicemail.VoicemailComponent;
+
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
 import java.util.List;
@@ -118,7 +121,7 @@
           Status.CONTENT_URI,
           VoicemailStatusQuery.getProjection(),
           where.toString(),
-          selectionArgs.toArray(new String[selectionArgs.size()]),
+          selectionArgs.toArray(new String[0]),
           null);
     } else {
       LogUtil.i(
@@ -144,7 +147,7 @@
           Voicemails.CONTENT_URI,
           new String[] {Voicemails._ID},
           where.toString(),
-          selectionArgs.toArray(new String[selectionArgs.size()]),
+          selectionArgs.toArray(new String[0]),
           null);
     }
   }
@@ -211,7 +214,7 @@
         uri,
         CallLogQuery.getProjection(),
         selection,
-        selectionArgs.toArray(new String[selectionArgs.size()]),
+        selectionArgs.toArray(new String[0]),
         Calls.DEFAULT_SORT_ORDER);
   }
 
diff --git a/java/com/android/dialer/database/Database.java b/java/com/android/dialer/database/Database.java
index 9868e26..0c3a094 100644
--- a/java/com/android/dialer/database/Database.java
+++ b/java/com/android/dialer/database/Database.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,6 +18,7 @@
 package com.android.dialer.database;
 
 import android.content.Context;
+
 import java.util.Objects;
 
 /** Accessor for the database bindings. */
diff --git a/java/com/android/dialer/database/DialerDatabaseHelper.java b/java/com/android/dialer/database/DialerDatabaseHelper.java
index 4da1522..e0d92c8 100644
--- a/java/com/android/dialer/database/DialerDatabaseHelper.java
+++ b/java/com/android/dialer/database/DialerDatabaseHelper.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2013 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -47,6 +48,7 @@
 import com.android.dialer.util.PermissionsUtil;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.MoreExecutors;
+
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Objects;
@@ -444,7 +446,7 @@
           continue;
         }
 
-        final Long contactId = updatedContactCursor.getLong(UpdatedContactQuery.UPDATED_CONTACT_ID);
+        final long contactId = updatedContactCursor.getLong(UpdatedContactQuery.UPDATED_CONTACT_ID);
 
         db.delete(Tables.SMARTDIAL_TABLE, SmartDialDbColumns.CONTACT_ID + "=" + contactId, null);
         db.delete(Tables.PREFIX_TABLE, PrefixColumns.CONTACT_ID + "=" + contactId, null);
@@ -655,7 +657,7 @@
         "DialerDatabaseHelper.updateSmartDialDatabase", "last updated at %s", lastUpdateMillis);
 
     /** Sets the time after querying the database as the current update time. */
-    final Long currentMillis = System.currentTimeMillis();
+    final long currentMillis = System.currentTimeMillis();
 
     /** Removes contacts that have been deleted. */
     removeDeletedContacts(db, lastUpdateMillis);
diff --git a/java/com/android/dialer/databasepopulator/BlockedBumberPopulator.java b/java/com/android/dialer/databasepopulator/BlockedBumberPopulator.java
index 7d7cd56..a354199 100644
--- a/java/com/android/dialer/databasepopulator/BlockedBumberPopulator.java
+++ b/java/com/android/dialer/databasepopulator/BlockedBumberPopulator.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -27,6 +28,7 @@
 import androidx.annotation.NonNull;
 
 import com.android.dialer.common.Assert;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -50,7 +52,7 @@
     try {
       context.getContentResolver().applyBatch(BlockedNumberContract.AUTHORITY, operations);
     } catch (RemoteException | OperationApplicationException e) {
-      Assert.fail("error adding block number entries: " + e);
+      Assert.createAssertionFailException("error adding block number entries: " + e);
     }
   }
 
diff --git a/java/com/android/dialer/databasepopulator/CallLogPopulator.java b/java/com/android/dialer/databasepopulator/CallLogPopulator.java
index 1bc4a88..093b5fb 100644
--- a/java/com/android/dialer/databasepopulator/CallLogPopulator.java
+++ b/java/com/android/dialer/databasepopulator/CallLogPopulator.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,6 +17,7 @@
 
 package com.android.dialer.databasepopulator;
 
+import android.annotation.SuppressLint;
 import android.content.ContentProviderOperation;
 import android.content.ContentValues;
 import android.content.Context;
@@ -29,8 +31,10 @@
 
 import com.android.dialer.common.Assert;
 import com.google.auto.value.AutoValue;
+
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
@@ -86,6 +90,7 @@
     populateCallLog(context, false);
   }
 
+  @SuppressLint("CheckResult")
   @WorkerThread
   public static void populateCallLog(
       @NonNull Context context, boolean isWithoutMissedCalls, boolean fastMode) {
@@ -116,7 +121,7 @@
     try {
       context.getContentResolver().applyBatch(CallLog.AUTHORITY, operations);
     } catch (RemoteException | OperationApplicationException e) {
-      Assert.fail("error adding call entries: " + e);
+      Assert.createAssertionFailException("error adding call entries: " + e);
     }
   }
 
@@ -125,6 +130,7 @@
     populateCallLog(context, true);
   }
 
+  @SuppressLint("CheckResult")
   @WorkerThread
   public static void deleteAllCallLog(@NonNull Context context) {
     Assert.isWorkerThread();
@@ -133,10 +139,10 @@
           .getContentResolver()
           .applyBatch(
               CallLog.AUTHORITY,
-              new ArrayList<>(
-                  Arrays.asList(ContentProviderOperation.newDelete(Calls.CONTENT_URI).build())));
+              new ArrayList<>(Collections.singletonList(
+                      ContentProviderOperation.newDelete(Calls.CONTENT_URI).build())));
     } catch (RemoteException | OperationApplicationException e) {
-      Assert.fail("failed to delete call log: " + e);
+      Assert.createAssertionFailException("failed to delete call log: " + e);
     }
   }
 
diff --git a/java/com/android/dialer/databasepopulator/ContactsPopulator.java b/java/com/android/dialer/databasepopulator/ContactsPopulator.java
index c72b764..c87c946 100644
--- a/java/com/android/dialer/databasepopulator/ContactsPopulator.java
+++ b/java/com/android/dialer/databasepopulator/ContactsPopulator.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,6 +17,7 @@
 
 package com.android.dialer.databasepopulator;
 
+import android.annotation.SuppressLint;
 import android.content.ContentProviderOperation;
 import android.content.Context;
 import android.content.OperationApplicationException;
@@ -35,9 +37,11 @@
 
 import com.android.dialer.common.Assert;
 import com.google.auto.value.AutoValue;
+
 import java.io.ByteArrayOutputStream;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 /** Populates the device database with contacts. */
@@ -128,6 +132,7 @@
         .build(),
   };
 
+  @SuppressLint("CheckResult")
   @WorkerThread
   public static void populateContacts(@NonNull Context context, boolean fastMode) {
     Assert.isWorkerThread();
@@ -145,29 +150,11 @@
     try {
       context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, operations);
     } catch (RemoteException | OperationApplicationException e) {
-      Assert.fail("error adding contacts: " + e);
+      Assert.createAssertionFailException("error adding contacts: " + e);
     }
   }
 
-  @WorkerThread
-  public static void populateSpeedDialTestContacts(@NonNull Context context) {
-    Assert.isWorkerThread();
-    ArrayList<ContentProviderOperation> operations = new ArrayList<>();
-    addContact(SIMPLE_CONTACTS[0], operations);
-    addContact(SIMPLE_CONTACTS[3], operations);
-    addContact(SIMPLE_CONTACTS[5], operations);
-    try {
-      context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, operations);
-    } catch (RemoteException | OperationApplicationException e) {
-      Assert.fail("error adding contacts: " + e);
-    }
-  }
-
-  @WorkerThread
-  public static void populateContacts(@NonNull Context context) {
-    populateContacts(context, false);
-  }
-
+  @SuppressLint("CheckResult")
   @WorkerThread
   public static void deleteAllContacts(@NonNull Context context) {
     Assert.isWorkerThread();
@@ -176,11 +163,10 @@
           .getContentResolver()
           .applyBatch(
               ContactsContract.AUTHORITY,
-              new ArrayList<>(
-                  Arrays.asList(
+              new ArrayList<>(Collections.singletonList(
                       ContentProviderOperation.newDelete(RawContacts.CONTENT_URI).build())));
     } catch (RemoteException | OperationApplicationException e) {
-      Assert.fail("failed to delete contacts: " + e);
+      Assert.createAssertionFailException("failed to delete contacts: " + e);
     }
   }
 
diff --git a/java/com/android/dialer/databasepopulator/VoicemailPopulator.java b/java/com/android/dialer/databasepopulator/VoicemailPopulator.java
index 854dc56..aec765e 100644
--- a/java/com/android/dialer/databasepopulator/VoicemailPopulator.java
+++ b/java/com/android/dialer/databasepopulator/VoicemailPopulator.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -27,8 +28,8 @@
 import androidx.annotation.WorkerThread;
 
 import com.android.dialer.common.Assert;
-import com.android.voicemail.impl.Voicemail;
 import com.google.auto.value.AutoValue;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
diff --git a/java/com/android/dialer/dialpadview/DialpadView.java b/java/com/android/dialer/dialpadview/DialpadView.java
index 6d538f3..a5811f3 100644
--- a/java/com/android/dialer/dialpadview/DialpadView.java
+++ b/java/com/android/dialer/dialpadview/DialpadView.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2014 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -38,10 +39,12 @@
 import android.widget.ImageButton;
 import android.widget.LinearLayout;
 import android.widget.TextView;
+
 import com.android.dialer.animation.AnimUtils;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.i18n.LocaleUtils;
+
 import java.text.DecimalFormat;
 import java.text.NumberFormat;
 import java.util.Locale;
diff --git a/java/com/android/dialer/dialpadview/DigitsEditText.java b/java/com/android/dialer/dialpadview/DigitsEditText.java
index 4a4b9b4..3d30d7f 100644
--- a/java/com/android/dialer/dialpadview/DigitsEditText.java
+++ b/java/com/android/dialer/dialpadview/DigitsEditText.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2011 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,6 +23,7 @@
 import android.util.AttributeSet;
 import android.view.MotionEvent;
 import android.view.inputmethod.InputMethodManager;
+
 import com.android.dialer.widget.ResizingTextEditText;
 
 /** EditText which suppresses IME show up. */
diff --git a/java/com/android/dialer/dialpadview/PseudoEmergencyAnimator.java b/java/com/android/dialer/dialpadview/PseudoEmergencyAnimator.java
index aaa65d0..bc45cb8 100644
--- a/java/com/android/dialer/dialpadview/PseudoEmergencyAnimator.java
+++ b/java/com/android/dialer/dialpadview/PseudoEmergencyAnimator.java
@@ -26,6 +26,7 @@
 import android.graphics.LightingColorFilter;
 import android.os.Handler;
 import android.os.Looper;
+import android.os.VibrationEffect;
 import android.os.Vibrator;
 import android.view.View;
 
@@ -127,9 +128,10 @@
   private void vibrate(long milliseconds) {
     Context context = viewProvider.getContext();
     if (context != null) {
-      Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
-      if (vibrator != null) {
-        vibrator.vibrate(milliseconds);
+      Vibrator vibrator = context.getSystemService(Vibrator.class);
+      if (vibrator != null && vibrator.hasVibrator()) {
+        vibrator.vibrate(VibrationEffect.createOneShot(milliseconds,
+                VibrationEffect.DEFAULT_AMPLITUDE));
       }
     }
   }
diff --git a/java/com/android/dialer/glidephotomanager/GlidePhotoManagerComponent.java b/java/com/android/dialer/glidephotomanager/GlidePhotoManagerComponent.java
index b4699be..b4f4e07 100644
--- a/java/com/android/dialer/glidephotomanager/GlidePhotoManagerComponent.java
+++ b/java/com/android/dialer/glidephotomanager/GlidePhotoManagerComponent.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,7 +18,9 @@
 package com.android.dialer.glidephotomanager;
 
 import android.content.Context;
+
 import com.android.dialer.inject.HasRootComponent;
+
 import dagger.Subcomponent;
 
 /** Entry point for {@link GlidePhotoManager} */
diff --git a/java/com/android/dialer/glidephotomanager/GlidePhotoManagerModule.java b/java/com/android/dialer/glidephotomanager/GlidePhotoManagerModule.java
index 79629d6..f38ce3c 100644
--- a/java/com/android/dialer/glidephotomanager/GlidePhotoManagerModule.java
+++ b/java/com/android/dialer/glidephotomanager/GlidePhotoManagerModule.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,9 +18,11 @@
 package com.android.dialer.glidephotomanager;
 
 import com.android.dialer.glidephotomanager.impl.GlidePhotoManagerImpl;
+
+import javax.inject.Singleton;
+
 import dagger.Binds;
 import dagger.Module;
-import javax.inject.Singleton;
 
 /** Module for {@link GlidePhotoManagerComponent} */
 @Module
diff --git a/java/com/android/dialer/glidephotomanager/impl/DefaultLookupUriGenerator.java b/java/com/android/dialer/glidephotomanager/impl/DefaultLookupUriGenerator.java
index 2c4acd4..fdd7391 100644
--- a/java/com/android/dialer/glidephotomanager/impl/DefaultLookupUriGenerator.java
+++ b/java/com/android/dialer/glidephotomanager/impl/DefaultLookupUriGenerator.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,7 +22,9 @@
 import android.provider.ContactsContract.CommonDataKinds;
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.DisplayNameSources;
+
 import com.android.dialer.glidephotomanager.PhotoInfo;
+
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
diff --git a/java/com/android/dialer/glidephotomanager/impl/GlidePhotoManagerImpl.java b/java/com/android/dialer/glidephotomanager/impl/GlidePhotoManagerImpl.java
index 243e3f9..e030524 100644
--- a/java/com/android/dialer/glidephotomanager/impl/GlidePhotoManagerImpl.java
+++ b/java/com/android/dialer/glidephotomanager/impl/GlidePhotoManagerImpl.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -40,7 +41,9 @@
 import com.android.dialer.i18n.DialerBidiFormatter;
 import com.android.dialer.inject.ApplicationContext;
 import com.android.dialer.lettertile.LetterTileDrawable;
+
 import java.util.List;
+
 import javax.inject.Inject;
 
 /** Implementation of {@link GlidePhotoManager} */
diff --git a/java/com/android/dialer/helplines/AndroidManifest.xml b/java/com/android/dialer/helplines/AndroidManifest.xml
index a16c36c..9117e3b 100644
--- a/java/com/android/dialer/helplines/AndroidManifest.xml
+++ b/java/com/android/dialer/helplines/AndroidManifest.xml
@@ -25,7 +25,7 @@
             android:name=".HelplineActivity"
             android:autoRemoveFromRecents="true"
             android:label="@string/helplines_name"
-            android:theme="@android:style/Theme.DeviceDefault.Settings"
+            android:theme="@style/Dialer.ThemeBase.ActionBar"
             android:excludeFromRecents="true">
             <intent-filter>
                 <action android:name="android.intent.action.VIEW" />
diff --git a/java/com/android/dialer/helplines/HelplineActivity.java b/java/com/android/dialer/helplines/HelplineActivity.java
old mode 100755
new mode 100644
index 5a62489..c79f6cd
--- a/java/com/android/dialer/helplines/HelplineActivity.java
+++ b/java/com/android/dialer/helplines/HelplineActivity.java
@@ -19,7 +19,6 @@
 import static android.graphics.Paint.UNDERLINE_TEXT_FLAG;
 
 import android.app.ActionBar;
-import android.app.Activity;
 import android.app.AlertDialog;
 import android.content.Context;
 import android.content.Intent;
diff --git a/java/com/android/dialer/helplines/LoadHelplinesTask.java b/java/com/android/dialer/helplines/LoadHelplinesTask.java
index 291dd36..7876fb1 100644
--- a/java/com/android/dialer/helplines/LoadHelplinesTask.java
+++ b/java/com/android/dialer/helplines/LoadHelplinesTask.java
@@ -15,6 +15,7 @@
  */
 package com.android.dialer.helplines;
 
+import android.annotation.SuppressLint;
 import android.content.res.Resources;
 import android.os.Handler;
 import android.os.Looper;
@@ -101,6 +102,7 @@
         });
     }
 
+    @SuppressLint("MissingPermission")
     private List<SubscriptionInfo> getSubscriptionInfos() {
         List<SubscriptionInfo> subList = mSubManager.getActiveSubscriptionInfoList();
         if (subList == null) {
diff --git a/java/com/android/dialer/helplines/utils/HelplineUtils.java b/java/com/android/dialer/helplines/utils/HelplineUtils.java
index a31a9ec..6dafd2f 100644
--- a/java/com/android/dialer/helplines/utils/HelplineUtils.java
+++ b/java/com/android/dialer/helplines/utils/HelplineUtils.java
@@ -1,5 +1,5 @@
-/**
- * Copyright (C) 2019-2021 The LineageOS Project
+/*
+ * Copyright (C) 2019-2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,6 +20,7 @@
 
 import com.android.dialer.R;
 import com.android.dialer.helplines.HelplineItem;
+
 import org.lineageos.lib.phone.spn.Item;
 
 import java.util.ArrayList;
diff --git a/java/com/android/dialer/historyitemactions/HistoryItemActionBottomSheet.java b/java/com/android/dialer/historyitemactions/HistoryItemActionBottomSheet.java
index 9fa46c8..9b1e014 100644
--- a/java/com/android/dialer/historyitemactions/HistoryItemActionBottomSheet.java
+++ b/java/com/android/dialer/historyitemactions/HistoryItemActionBottomSheet.java
@@ -170,7 +170,7 @@
   private void setupBottomSheetBehavior() {
     BottomSheetBehavior<View> behavior = BottomSheetBehavior.from(
             findViewById(com.google.android.material.R.id.design_bottom_sheet));
-    behavior.setBottomSheetCallback(
+    behavior.addBottomSheetCallback(
         new BottomSheetBehavior.BottomSheetCallback() {
           @Override
           public void onStateChanged(@NonNull View bottomSheet, int newState) {
diff --git a/java/com/android/dialer/historyitemactions/HistoryItemActionModulesBuilder.java b/java/com/android/dialer/historyitemactions/HistoryItemActionModulesBuilder.java
index 7fff434..ba2389e 100644
--- a/java/com/android/dialer/historyitemactions/HistoryItemActionModulesBuilder.java
+++ b/java/com/android/dialer/historyitemactions/HistoryItemActionModulesBuilder.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -33,6 +34,7 @@
 import com.android.dialer.util.CallUtil;
 import com.android.dialer.util.PermissionsUtil;
 import com.android.dialer.util.UriUtils;
+
 import java.util.ArrayList;
 import java.util.List;
 
diff --git a/java/com/android/dialer/i18n/LocaleUtils.java b/java/com/android/dialer/i18n/LocaleUtils.java
index 0532cc3..f866b73 100644
--- a/java/com/android/dialer/i18n/LocaleUtils.java
+++ b/java/com/android/dialer/i18n/LocaleUtils.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,6 +18,7 @@
 
 import android.content.Context;
 import android.os.LocaleList;
+
 import java.util.Locale;
 
 /** Utilities for locale. */
diff --git a/java/com/android/dialer/interactions/ContactUpdateService.java b/java/com/android/dialer/interactions/ContactUpdateService.java
index 9b2d701..334abe7 100644
--- a/java/com/android/dialer/interactions/ContactUpdateService.java
+++ b/java/com/android/dialer/interactions/ContactUpdateService.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2012 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,6 +20,7 @@
 import android.app.IntentService;
 import android.content.Context;
 import android.content.Intent;
+
 import com.android.contacts.common.database.ContactUpdateUtils;
 
 /** Service for updating primary number on a contact. */
diff --git a/java/com/android/dialer/interactions/UndemoteOutgoingCallReceiver.java b/java/com/android/dialer/interactions/UndemoteOutgoingCallReceiver.java
index 76f7ade..39e3b4f 100644
--- a/java/com/android/dialer/interactions/UndemoteOutgoingCallReceiver.java
+++ b/java/com/android/dialer/interactions/UndemoteOutgoingCallReceiver.java
@@ -28,6 +28,7 @@
 import android.provider.ContactsContract.PhoneLookup;
 import android.provider.ContactsContract.PinnedPositions;
 import android.text.TextUtils;
+
 import com.android.dialer.util.PermissionsUtil;
 
 /**
@@ -93,8 +94,7 @@
     }
     try {
       if (cursor.moveToFirst()) {
-        final long id = cursor.getLong(0);
-        return id;
+        return cursor.getLong(0);
       } else {
         return NO_CONTACT_FOUND;
       }
diff --git a/java/com/android/dialer/lettertile/LetterTileDrawable.java b/java/com/android/dialer/lettertile/LetterTileDrawable.java
index efe595e..f4c3ec8 100644
--- a/java/com/android/dialer/lettertile/LetterTileDrawable.java
+++ b/java/com/android/dialer/lettertile/LetterTileDrawable.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2013 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -37,6 +38,7 @@
 
 import com.android.dialer.R;
 import com.android.dialer.common.Assert;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 
@@ -52,7 +54,8 @@
    * #TYPE_BUSINESS}, and voicemail contacts should use {@link #TYPE_VOICEMAIL}.
    */
   @Retention(RetentionPolicy.SOURCE)
-  @IntDef({TYPE_PERSON, TYPE_BUSINESS, TYPE_VOICEMAIL, TYPE_GENERIC_AVATAR, TYPE_SPAM})
+  @IntDef({TYPE_PERSON, TYPE_BUSINESS, TYPE_VOICEMAIL, TYPE_GENERIC_AVATAR, TYPE_SPAM,
+          TYPE_CONFERENCE})
   public @interface ContactType {}
 
   /** Contact type constants */
@@ -118,9 +121,9 @@
 
   public LetterTileDrawable(final Resources res) {
     colors = res.obtainTypedArray(R.array.letter_tile_colors);
-    spamColor = res.getColor(R.color.spam_contact_background);
-    defaultColor = res.getColor(R.color.letter_tile_default_color);
-    tileFontColor = res.getColor(R.color.letter_tile_font_color);
+    spamColor = res.getColor(R.color.spam_contact_background, null);
+    defaultColor = res.getColor(R.color.letter_tile_default_color, null);
+    tileFontColor = res.getColor(R.color.letter_tile_font_color, null);
     letterToTileRatio = res.getFraction(R.dimen.letter_to_tile_ratio, 1, 1);
     defaultPersonAvatar = res.getDrawable(R.drawable.quantum_ic_person_vd_theme_24, null);
     defaultBusinessAvatar = res.getDrawable(R.drawable.quantum_ic_business_vd_theme_24, null);
diff --git a/java/com/android/dialer/location/CountryDetector.java b/java/com/android/dialer/location/CountryDetector.java
index 093ddd9..f4e5c5d 100644
--- a/java/com/android/dialer/location/CountryDetector.java
+++ b/java/com/android/dialer/location/CountryDetector.java
@@ -211,7 +211,7 @@
       final Location location =
               intent.getParcelableExtra(LocationManager.KEY_LOCATION_CHANGED, Location.class);
 
-      // TODO: rething how we access the gecoder here, right now we have to set the static instance
+      // TODO: rethink how we access the gecoder here, right now we have to set the static instance
       // of CountryDetector to make this work for tests which is weird
       // (see CountryDetectorTest.locationChangedBroadcast_GeocodesLocation)
       processLocationUpdate(context, CountryDetector.getInstance(context).geocoder, location);
diff --git a/java/com/android/dialer/lookup/ContactBuilder.java b/java/com/android/dialer/lookup/ContactBuilder.java
index e88f956..39afe3a 100644
--- a/java/com/android/dialer/lookup/ContactBuilder.java
+++ b/java/com/android/dialer/lookup/ContactBuilder.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2014 Xiao-Long Chen <chillermillerlong@hotmail.com>
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -26,20 +27,16 @@
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Directory;
 import android.provider.ContactsContract.DisplayNameSources;
-import android.text.TextUtils;
 import android.util.Log;
 
 import com.android.contacts.common.util.Constants;
-import com.android.dialer.phonenumbercache.ContactInfo;
 import com.android.dialer.R;
+import com.android.dialer.phonenumbercache.ContactInfo;
 
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
-import org.json.JSONTokener;
-import org.w3c.dom.Text;
 
-import java.sql.Struct;
 import java.util.ArrayList;
 
 public class ContactBuilder {
@@ -69,10 +66,6 @@
       return new ContactBuilder(DirectoryId.NEARBY, null, number);
   }
 
-  public static ContactBuilder forPeopleLookup(String number) {
-      return new ContactBuilder(DirectoryId.PEOPLE, null, number);
-  }
-
   public static ContactBuilder forReverseLookup(String normalizedNumber, String formattedNumber) {
       return new ContactBuilder(DirectoryId.NULL, normalizedNumber, formattedNumber);
   }
@@ -83,75 +76,6 @@
     this.formattedNumber = formattedNumber;
   }
 
-  public ContactBuilder(Uri encodedContactUri) throws JSONException {
-    String jsonData = encodedContactUri.getEncodedFragment();
-    String directoryIdStr = encodedContactUri.getQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY);
-    long directoryId = DirectoryId.DEFAULT;
-
-    if (!TextUtils.isEmpty(directoryIdStr)) {
-      try {
-        directoryId = Long.parseLong(directoryIdStr);
-      } catch (NumberFormatException e) {
-        Log.e(TAG, "Error parsing directory id of uri " + encodedContactUri, e);
-      }
-    }
-
-    this.directoryId = directoryId;
-    this.formattedNumber = null;
-    this.normalizedNumber = null;
-
-    try {
-      // name
-      JSONObject json = new JSONObject(jsonData);
-      JSONObject contact = json.optJSONObject(Contacts.CONTENT_ITEM_TYPE);
-      JSONObject nameObj = contact.optJSONObject(StructuredName.CONTENT_ITEM_TYPE);
-      name = new Name(nameObj);
-
-      if (contact != null) {
-        // numbers
-        if (contact.has(Phone.CONTENT_ITEM_TYPE)) {
-          String phoneData = contact.getString(Phone.CONTENT_ITEM_TYPE);
-          Object phoneObject = new JSONTokener(phoneData).nextValue();
-          JSONArray phoneNumbersJson;
-          if (phoneObject instanceof JSONObject) {
-            phoneNumbersJson = new JSONArray();
-            phoneNumbersJson.put(phoneObject);
-          } else {
-            phoneNumbersJson = contact.getJSONArray(Phone.CONTENT_ITEM_TYPE);
-          }
-          for (int i = 0; i < phoneNumbersJson.length(); ++i) {
-            JSONObject phoneObj = phoneNumbersJson.getJSONObject(i);
-            phoneNumbers.add(new PhoneNumber(phoneObj));
-          }
-        }
-
-        // address
-        if (contact.has(StructuredPostal.CONTENT_ITEM_TYPE)) {
-          JSONArray addressesJson = contact.getJSONArray(StructuredPostal.CONTENT_ITEM_TYPE);
-          for (int i = 0; i < addressesJson.length(); ++i) {
-            JSONObject addrObj = addressesJson.getJSONObject(i);
-            addresses.add(new Address(addrObj));
-          }
-        }
-
-        // websites
-        if (contact.has(Website.CONTENT_ITEM_TYPE)) {
-          JSONArray websitesJson = contact.getJSONArray(Website.CONTENT_ITEM_TYPE);
-          for (int i = 0; i < websitesJson.length(); ++i) {
-            JSONObject websiteObj = websitesJson.getJSONObject(i);
-            final WebsiteUrl websiteUrl = new WebsiteUrl(websiteObj);
-            if (!TextUtils.isEmpty(websiteUrl.url)) {
-              websites.add(new WebsiteUrl(websiteObj));
-            }
-          }
-        }
-      }
-    } catch(JSONException e) {
-      Log.e(TAG, "Error parsing encoded fragment of uri " + encodedContactUri, e);
-      throw e;
-    }
-  }
-
   public ContactBuilder addAddress(Address address) {
     if (DEBUG) Log.d(TAG, "Adding address");
     if (address != null) {
diff --git a/java/com/android/dialer/lookup/DirectoryId.java b/java/com/android/dialer/lookup/DirectoryId.java
index 023585c..1d39d74 100644
--- a/java/com/android/dialer/lookup/DirectoryId.java
+++ b/java/com/android/dialer/lookup/DirectoryId.java
@@ -25,7 +25,7 @@
     if (lookupUri != null) {
       String dqp = lookupUri.getQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY);
       if (dqp != null) {
-        directory = Long.valueOf(dqp);
+        directory = Long.parseLong(dqp);
       }
     }
     return directory;
diff --git a/java/com/android/dialer/lookup/ForwardLookup.java b/java/com/android/dialer/lookup/ForwardLookup.java
index 6a690bf..6d8be80 100644
--- a/java/com/android/dialer/lookup/ForwardLookup.java
+++ b/java/com/android/dialer/lookup/ForwardLookup.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2014 Xiao-Long Chen <chillermillerlong@hotmail.com>
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,8 +21,8 @@
 import android.location.Location;
 import android.util.Log;
 
-import com.android.dialer.phonenumbercache.ContactInfo;
 import com.android.dialer.lookup.openstreetmap.OpenStreetMapForwardLookup;
+import com.android.dialer.phonenumbercache.ContactInfo;
 
 import java.util.List;
 
diff --git a/java/com/android/dialer/lookup/LookupCache.java b/java/com/android/dialer/lookup/LookupCache.java
index 6fe3a9f..10305e5 100644
--- a/java/com/android/dialer/lookup/LookupCache.java
+++ b/java/com/android/dialer/lookup/LookupCache.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2014 Xiao-Long Chen <chenxiaolong@cxl.epac.to>
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -36,9 +37,10 @@
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
-import java.io.InputStreamReader;
 import java.io.IOException;
+import java.io.InputStreamReader;
 import java.io.OutputStreamWriter;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -76,7 +78,7 @@
 
     try {
       out = new FileOutputStream(file);
-      writer = new JsonWriter(new OutputStreamWriter(out, "UTF-8"));
+      writer = new JsonWriter(new OutputStreamWriter(out, StandardCharsets.UTF_8));
       writer.setIndent("  ");
       List messages = new ArrayList();
 
@@ -135,7 +137,7 @@
 
     try {
       in = new FileInputStream(file);
-      reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
+      reader = new JsonReader(new InputStreamReader(in, StandardCharsets.UTF_8));
 
       reader.beginObject();
       while (reader.hasNext()) {
@@ -249,7 +251,7 @@
 
     try {
       out = new FileOutputStream(image);
-      bmp.compress(Bitmap.CompressFormat.WEBP, 100, out);
+      bmp.compress(Bitmap.CompressFormat.WEBP_LOSSLESS, 100, out);
       return Uri.fromFile(image);
     } catch (Exception e) {
       e.printStackTrace();
diff --git a/java/com/android/dialer/lookup/LookupProvider.java b/java/com/android/dialer/lookup/LookupProvider.java
index ba8c2b6..725587c 100644
--- a/java/com/android/dialer/lookup/LookupProvider.java
+++ b/java/com/android/dialer/lookup/LookupProvider.java
@@ -17,6 +17,7 @@
 
 package com.android.dialer.lookup;
 
+import android.annotation.SuppressLint;
 import android.content.ContentProvider;
 import android.content.ContentValues;
 import android.content.UriMatcher;
@@ -32,10 +33,9 @@
 import android.provider.ContactsContract.Contacts;
 import android.util.Log;
 
-import com.android.dialer.searchfragment.common.Projections;
 import com.android.dialer.phonenumbercache.ContactInfo;
+import com.android.dialer.searchfragment.common.Projections;
 import com.android.dialer.util.PermissionsUtil;
-import com.android.dialer.R;
 
 import org.json.JSONArray;
 import org.json.JSONException;
@@ -43,18 +43,18 @@
 
 import java.io.File;
 import java.io.FileNotFoundException;
-import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
 import java.util.concurrent.Callable;
 import java.util.concurrent.CancellationException;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Executors;
 import java.util.concurrent.FutureTask;
-import java.util.concurrent.TimeoutException;
 import java.util.concurrent.TimeUnit;
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.List;
+import java.util.concurrent.TimeoutException;
 
 public class LookupProvider extends ContentProvider {
   private static final String TAG = LookupProvider.class.getSimpleName();
@@ -236,6 +236,7 @@
    *
    * @return The last location
    */
+  @SuppressLint("MissingPermission")
   private Location getLastLocation() {
     LocationManager locationManager = requireContext().getSystemService(LocationManager.class);
 
@@ -266,10 +267,7 @@
       return null;
     }
 
-    try {
-      filter = URLDecoder.decode(filter, "UTF-8");
-    } catch (UnsupportedEncodingException e) {
-    }
+    filter = URLDecoder.decode(filter, StandardCharsets.UTF_8);
 
     ArrayList<ContactInfo> results = new ArrayList<>();
     if ((type == NEARBY || type == NEARBY_AND_PEOPLE) && lastLocation != null) {
@@ -385,8 +383,8 @@
    * @return Instance of the thread
    */
   private <T> T execute(Callable<T> callable, String name) {
-    FutureCallable<T> futureCallable = new FutureCallable<T>(callable);
-    FutureTask<T> future = new FutureTask<T>(futureCallable);
+    FutureCallable<T> futureCallable = new FutureCallable<>(callable);
+    FutureTask<T> future = new FutureTask<>(futureCallable);
     futureCallable.setFuture(future);
 
     synchronized (activeTasks) {
diff --git a/java/com/android/dialer/lookup/LookupSettings.java b/java/com/android/dialer/lookup/LookupSettings.java
index d7ad1d9..3c89f17 100644
--- a/java/com/android/dialer/lookup/LookupSettings.java
+++ b/java/com/android/dialer/lookup/LookupSettings.java
@@ -54,7 +54,7 @@
   }
 
   public static void setForwardLookupEnabled(Context context, boolean value) {
-    getSharedPreferences(context).edit().putBoolean(ENABLE_FORWARD_LOOKUP, value).commit();
+    getSharedPreferences(context).edit().putBoolean(ENABLE_FORWARD_LOOKUP, value).apply();
   }
 
   public static boolean isReverseLookupEnabled(Context context) {
@@ -62,7 +62,7 @@
   }
 
   public static void setReverseLookupEnabled(Context context, boolean value) {
-    getSharedPreferences(context).edit().putBoolean(ENABLE_REVERSE_LOOKUP, value).commit();
+    getSharedPreferences(context).edit().putBoolean(ENABLE_REVERSE_LOOKUP, value).apply();
   }
 
   public static String getForwardLookupProvider(Context context) {
@@ -70,7 +70,7 @@
   }
 
   public static void setForwardLookupProvider(Context context, String value) {
-    getSharedPreferences(context).edit().putString(FORWARD_LOOKUP_PROVIDER, value).commit();
+    getSharedPreferences(context).edit().putString(FORWARD_LOOKUP_PROVIDER, value).apply();
   }
 
   public static String getReverseLookupProvider(Context context) {
@@ -78,6 +78,6 @@
   }
 
   public static void setReverseLookupProvider(Context context, String value) {
-    getSharedPreferences(context).edit().putString(REVERSE_LOOKUP_PROVIDER, value).commit();
+    getSharedPreferences(context).edit().putString(REVERSE_LOOKUP_PROVIDER, value).apply();
   }
 }
diff --git a/java/com/android/dialer/lookup/LookupUtils.java b/java/com/android/dialer/lookup/LookupUtils.java
index 47271c6..f8174f6 100644
--- a/java/com/android/dialer/lookup/LookupUtils.java
+++ b/java/com/android/dialer/lookup/LookupUtils.java
@@ -144,7 +144,7 @@
     Pattern pattern = Pattern.compile(regex, dotall ? Pattern.DOTALL : 0);
     Matcher matcher = pattern.matcher(input);
 
-    List<String> regexResults = new ArrayList<String>();
+    List<String> regexResults = new ArrayList<>();
     while (matcher.find()) {
       regexResults.add(matcher.group(1).trim());
     }
diff --git a/java/com/android/dialer/lookup/ReverseLookup.java b/java/com/android/dialer/lookup/ReverseLookup.java
index ff19002..2df6459 100644
--- a/java/com/android/dialer/lookup/ReverseLookup.java
+++ b/java/com/android/dialer/lookup/ReverseLookup.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2014 Xiao-Long Chen <chillermillerlong@hotmail.com>
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,10 +22,10 @@
 import android.net.Uri;
 import android.util.Log;
 
-import com.android.dialer.phonenumbercache.ContactInfo;
 import com.android.dialer.lookup.dastelefonbuch.TelefonbuchReverseLookup;
 import com.android.dialer.lookup.yellowpages.YellowPagesReverseLookup;
 import com.android.dialer.lookup.zabasearch.ZabaSearchReverseLookup;
+import com.android.dialer.phonenumbercache.ContactInfo;
 
 import java.io.IOException;
 
diff --git a/java/com/android/dialer/lookup/ReverseLookupService.java b/java/com/android/dialer/lookup/ReverseLookupService.java
index 647ca5b..3391ae5 100644
--- a/java/com/android/dialer/lookup/ReverseLookupService.java
+++ b/java/com/android/dialer/lookup/ReverseLookupService.java
@@ -35,7 +35,6 @@
 import java.io.IOException;
 
 public class ReverseLookupService implements PhoneNumberService, Handler.Callback {
-  private final HandlerThread backgroundThread;
   private final Handler backgroundHandler;
   private final Handler handler;
   private final Context context;
@@ -49,7 +48,7 @@
     telephonyManager = context.getSystemService(TelephonyManager.class);
 
     // TODO: stop after a while?
-    backgroundThread = new HandlerThread("ReverseLookup");
+    HandlerThread backgroundThread = new HandlerThread("ReverseLookup");
     backgroundThread.start();
 
     backgroundHandler = new Handler(backgroundThread.getLooper(), this);
diff --git a/java/com/android/dialer/lookup/dastelefonbuch/TelefonbuchReverseLookup.java b/java/com/android/dialer/lookup/dastelefonbuch/TelefonbuchReverseLookup.java
index cd89499..dc6305e 100644
--- a/java/com/android/dialer/lookup/dastelefonbuch/TelefonbuchReverseLookup.java
+++ b/java/com/android/dialer/lookup/dastelefonbuch/TelefonbuchReverseLookup.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2014 Danny Baumann <dannybaumann@web.de>
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,14 +18,10 @@
 package com.android.dialer.lookup.dastelefonbuch;
 
 import android.content.Context;
-import android.net.Uri;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
-import android.provider.ContactsContract.CommonDataKinds.Website;
 
-import com.android.dialer.phonenumbercache.ContactInfo;
 import com.android.dialer.lookup.ContactBuilder;
 import com.android.dialer.lookup.ReverseLookup;
+import com.android.dialer.phonenumbercache.ContactInfo;
 
 import java.io.IOException;
 
diff --git a/java/com/android/dialer/lookup/openstreetmap/OpenStreetMapForwardLookup.java b/java/com/android/dialer/lookup/openstreetmap/OpenStreetMapForwardLookup.java
index 6d3a92d..e5ec00e 100644
--- a/java/com/android/dialer/lookup/openstreetmap/OpenStreetMapForwardLookup.java
+++ b/java/com/android/dialer/lookup/openstreetmap/OpenStreetMapForwardLookup.java
@@ -1,6 +1,7 @@
 /*
  * Copyright (C) 2014 The OmniROM Project
  * Copyright (C) 2014 Xiao-Long Chen <chillermillerlong@hotmail.com>
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -25,10 +26,10 @@
 import android.provider.ContactsContract.CommonDataKinds.Website;
 import android.util.Log;
 
-import com.android.dialer.phonenumbercache.ContactInfo;
 import com.android.dialer.lookup.ContactBuilder;
 import com.android.dialer.lookup.ForwardLookup;
 import com.android.dialer.lookup.LookupUtils;
+import com.android.dialer.phonenumbercache.ContactInfo;
 
 import org.json.JSONArray;
 import org.json.JSONException;
diff --git a/java/com/android/dialer/lookup/yellowpages/YellowPagesApi.java b/java/com/android/dialer/lookup/yellowpages/YellowPagesApi.java
index 30d5aaf..e5d90e7 100644
--- a/java/com/android/dialer/lookup/yellowpages/YellowPagesApi.java
+++ b/java/com/android/dialer/lookup/yellowpages/YellowPagesApi.java
@@ -16,7 +16,6 @@
 
 package com.android.dialer.lookup.yellowpages;
 
-import android.content.Context;
 import android.text.TextUtils;
 
 import com.android.dialer.lookup.LookupUtils;
diff --git a/java/com/android/dialer/lookup/yellowpages/YellowPagesReverseLookup.java b/java/com/android/dialer/lookup/yellowpages/YellowPagesReverseLookup.java
index 5638df6..42e332e 100644
--- a/java/com/android/dialer/lookup/yellowpages/YellowPagesReverseLookup.java
+++ b/java/com/android/dialer/lookup/yellowpages/YellowPagesReverseLookup.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2014 Xiao-Long Chen <chillermillerlong@hotmail.com>
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -24,11 +25,11 @@
 import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
 import android.util.Log;
 
-import com.android.dialer.phonenumbercache.ContactInfo;
 import com.android.dialer.lookup.ContactBuilder;
 import com.android.dialer.lookup.LookupSettings;
 import com.android.dialer.lookup.LookupUtils;
 import com.android.dialer.lookup.ReverseLookup;
+import com.android.dialer.phonenumbercache.ContactInfo;
 
 import java.io.FileNotFoundException;
 import java.io.IOException;
diff --git a/java/com/android/dialer/lookup/zabasearch/ZabaSearchReverseLookup.java b/java/com/android/dialer/lookup/zabasearch/ZabaSearchReverseLookup.java
index 5c6608b..16afd09 100644
--- a/java/com/android/dialer/lookup/zabasearch/ZabaSearchReverseLookup.java
+++ b/java/com/android/dialer/lookup/zabasearch/ZabaSearchReverseLookup.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2014 Xiao-Long Chen <chillermillerlong@hotmail.com>
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,9 +19,9 @@
 
 import android.content.Context;
 
-import com.android.dialer.phonenumbercache.ContactInfo;
 import com.android.dialer.lookup.ContactBuilder;
 import com.android.dialer.lookup.ReverseLookup;
+import com.android.dialer.phonenumbercache.ContactInfo;
 
 import java.io.IOException;
 
diff --git a/java/com/android/dialer/main/MainActivityPeer.java b/java/com/android/dialer/main/MainActivityPeer.java
index fe8d922..494bfc4 100644
--- a/java/com/android/dialer/main/MainActivityPeer.java
+++ b/java/com/android/dialer/main/MainActivityPeer.java
@@ -32,8 +32,6 @@
 
   void onActivityStop();
 
-  void onActivityDestroyed();
-
   void onNewIntent(Intent intent);
 
   void onSaveInstanceState(Bundle bundle);
diff --git a/java/com/android/dialer/main/impl/MainActivity.java b/java/com/android/dialer/main/impl/MainActivity.java
index 380995b..966c323 100644
--- a/java/com/android/dialer/main/impl/MainActivity.java
+++ b/java/com/android/dialer/main/impl/MainActivity.java
@@ -27,6 +27,8 @@
 import com.android.dialer.blockreportspam.ShowBlockReportSpamDialogReceiver;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.main.MainActivityPeer;
+
+import com.android.dialer.R;
 import com.android.dialer.telecom.TelecomUtil;
 import com.android.dialer.util.TransactionSafeActivity;
 
diff --git a/java/com/android/dialer/main/impl/OldMainActivityPeer.java b/java/com/android/dialer/main/impl/OldMainActivityPeer.java
index c2c1b4a..1309d1e 100644
--- a/java/com/android/dialer/main/impl/OldMainActivityPeer.java
+++ b/java/com/android/dialer/main/impl/OldMainActivityPeer.java
@@ -260,7 +260,7 @@
         new MainSpeedDialFragmentHost(
             toolbar,
             activity.findViewById(R.id.root_layout),
-            activity.findViewById(R.id.coordinator_layout),
+            (ViewGroup) snackbarContainer,
             activity.findViewById(R.id.fragment_container));
 
     lastTabController = new LastTabController(activity, bottomNav, showVoicemailTab);
@@ -443,9 +443,6 @@
         activity.getSystemService(KeyguardManager.class).isKeyguardLocked());
   }
 
-  @Override
-  public void onActivityDestroyed() {}
-
   private void showPostCallPrompt() {
     if (TelecomUtil.isInManagedCall(activity)) {
       // No prompt to show if the user is in a call
diff --git a/java/com/android/dialer/metrics/FutureTimer.java b/java/com/android/dialer/metrics/FutureTimer.java
index 3c3072f..b0c7694 100644
--- a/java/com/android/dialer/metrics/FutureTimer.java
+++ b/java/com/android/dialer/metrics/FutureTimer.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -27,8 +28,10 @@
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListeningExecutorService;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
+
 import javax.inject.Inject;
 
 /** Applies logcat and metric logging to a supplied future. */
diff --git a/java/com/android/dialer/notification/DialerNotificationManager.java b/java/com/android/dialer/notification/DialerNotificationManager.java
index 767ef41..385f50b 100644
--- a/java/com/android/dialer/notification/DialerNotificationManager.java
+++ b/java/com/android/dialer/notification/DialerNotificationManager.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -28,6 +29,7 @@
 
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
+
 import java.util.HashSet;
 import java.util.Set;
 
diff --git a/java/com/android/dialer/notification/NotificationChannelManager.java b/java/com/android/dialer/notification/NotificationChannelManager.java
index 9c71fb4..ba51125 100644
--- a/java/com/android/dialer/notification/NotificationChannelManager.java
+++ b/java/com/android/dialer/notification/NotificationChannelManager.java
@@ -29,6 +29,7 @@
 import com.android.dialer.R;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
+
 import java.util.Set;
 
 /** Creates all notification channels for Dialer. */
@@ -116,7 +117,7 @@
         new NotificationChannel(
             NotificationChannelId.INCOMING_CALL,
             context.getText(R.string.notification_channel_incoming_call),
-            NotificationManager.IMPORTANCE_MAX);
+            NotificationManager.IMPORTANCE_HIGH);
     channel.setShowBadge(false);
     channel.enableLights(true);
     channel.enableVibration(false);
diff --git a/java/com/android/dialer/notification/NotificationThrottler.java b/java/com/android/dialer/notification/NotificationThrottler.java
index c34a883..aadc602 100644
--- a/java/com/android/dialer/notification/NotificationThrottler.java
+++ b/java/com/android/dialer/notification/NotificationThrottler.java
@@ -27,8 +27,8 @@
 
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
+
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashSet;
 import java.util.List;
diff --git a/java/com/android/dialer/notification/VoicemailChannelUtils.java b/java/com/android/dialer/notification/VoicemailChannelUtils.java
index ac41cf6..1b77a49 100644
--- a/java/com/android/dialer/notification/VoicemailChannelUtils.java
+++ b/java/com/android/dialer/notification/VoicemailChannelUtils.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -37,6 +38,7 @@
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.util.PermissionsUtil;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
diff --git a/java/com/android/dialer/oem/CequintCallerIdManager.java b/java/com/android/dialer/oem/CequintCallerIdManager.java
index 6620074..69cc84a 100644
--- a/java/com/android/dialer/oem/CequintCallerIdManager.java
+++ b/java/com/android/dialer/oem/CequintCallerIdManager.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -31,6 +32,7 @@
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.google.auto.value.AutoValue;
+
 import java.util.concurrent.ConcurrentHashMap;
 
 /**
diff --git a/java/com/android/dialer/oem/CequintPackageUtils.java b/java/com/android/dialer/oem/CequintPackageUtils.java
index 010d54d..70e16aa 100644
--- a/java/com/android/dialer/oem/CequintPackageUtils.java
+++ b/java/com/android/dialer/oem/CequintPackageUtils.java
@@ -25,6 +25,7 @@
 import androidx.annotation.Nullable;
 
 import com.android.dialer.common.LogUtil;
+
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.security.NoSuchProviderException;
diff --git a/java/com/android/dialer/oem/MotorolaHiddenMenuKeySequence.java b/java/com/android/dialer/oem/MotorolaHiddenMenuKeySequence.java
index 2453a76..595b3fd 100644
--- a/java/com/android/dialer/oem/MotorolaHiddenMenuKeySequence.java
+++ b/java/com/android/dialer/oem/MotorolaHiddenMenuKeySequence.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * This file is derived in part from code issued under the following license.
  *
@@ -23,7 +24,9 @@
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
+
 import com.android.dialer.common.LogUtil;
+
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
diff --git a/java/com/android/dialer/oem/MotorolaUtils.java b/java/com/android/dialer/oem/MotorolaUtils.java
index 4a74034..e40792f 100644
--- a/java/com/android/dialer/oem/MotorolaUtils.java
+++ b/java/com/android/dialer/oem/MotorolaUtils.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,8 +20,10 @@
 import android.content.res.Resources;
 import android.provider.CallLog.Calls;
 import android.telephony.TelephonyManager;
+
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.PackageUtils;
+
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 
@@ -29,7 +32,7 @@
 
   // This is used to check if a Motorola device supports HD voice call feature, which comes from
   // system feature setting.
-  private static final String HD_CALL_FEATRURE = "com.motorola.software.sprint.hd_call";
+  private static final String HD_CALL_FEATURE = "com.motorola.software.sprint.hd_call";
   // This is used to check if a Motorola device supports WiFi call feature, by checking if a certain
   // package is enabled.
   private static final String WIFI_CALL_PACKAGE_NAME = "com.motorola.sprintwfc";
@@ -112,7 +115,7 @@
   private static boolean isSupportingSprintHdCodec(Context context) {
     return isSpnMatched(context)
         && context.getResources().getBoolean(R.bool.motorola_sprint_hd_codec)
-        && context.getPackageManager().hasSystemFeature(HD_CALL_FEATRURE);
+        && context.getPackageManager().hasSystemFeature(HD_CALL_FEATURE);
   }
 
   private static boolean isSupportingSprintWifiCall(Context context) {
diff --git a/java/com/android/dialer/oem/PhoneNumberUtilsAccessor.java b/java/com/android/dialer/oem/PhoneNumberUtilsAccessor.java
index 178a7b2..abbc764 100644
--- a/java/com/android/dialer/oem/PhoneNumberUtilsAccessor.java
+++ b/java/com/android/dialer/oem/PhoneNumberUtilsAccessor.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,6 +19,7 @@
 
 import android.content.Context;
 import android.telephony.PhoneNumberUtils;
+
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 
diff --git a/java/com/android/dialer/oem/SystemPropertiesAccessor.java b/java/com/android/dialer/oem/SystemPropertiesAccessor.java
index e069a8e..4605bf2 100644
--- a/java/com/android/dialer/oem/SystemPropertiesAccessor.java
+++ b/java/com/android/dialer/oem/SystemPropertiesAccessor.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,6 +20,7 @@
 import androidx.annotation.Nullable;
 
 import com.android.dialer.common.LogUtil;
+
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 
diff --git a/java/com/android/dialer/oem/TranssionUtils.java b/java/com/android/dialer/oem/TranssionUtils.java
index 43ca43e..de8df20 100644
--- a/java/com/android/dialer/oem/TranssionUtils.java
+++ b/java/com/android/dialer/oem/TranssionUtils.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,6 +19,7 @@
 
 import android.content.Context;
 import android.os.Build;
+
 import com.android.dialer.common.Assert;
 import com.android.dialer.compat.telephony.TelephonyManagerCompat;
 import com.google.common.collect.ImmutableSet;
diff --git a/java/com/android/dialer/persistentlog/PersistentLogFileHandler.java b/java/com/android/dialer/persistentlog/PersistentLogFileHandler.java
index e3dbbcf..be9bd71 100644
--- a/java/com/android/dialer/persistentlog/PersistentLogFileHandler.java
+++ b/java/com/android/dialer/persistentlog/PersistentLogFileHandler.java
@@ -41,6 +41,7 @@
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Comparator;
 import java.util.List;
 
 /**
@@ -201,10 +202,7 @@
     if (files == null) {
       files = new File[0];
     }
-    Arrays.sort(
-        files,
-        (File lhs, File rhs) ->
-            Long.compare(Long.valueOf(lhs.getName()), Long.valueOf(rhs.getName())));
+    Arrays.sort(files, Comparator.comparingLong((File lhs) -> Long.valueOf(lhs.getName())));
     return files;
   }
 
diff --git a/java/com/android/dialer/phonelookup/PhoneLookupComponent.java b/java/com/android/dialer/phonelookup/PhoneLookupComponent.java
index 70743c8..3a13ae2 100644
--- a/java/com/android/dialer/phonelookup/PhoneLookupComponent.java
+++ b/java/com/android/dialer/phonelookup/PhoneLookupComponent.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,9 +17,11 @@
 package com.android.dialer.phonelookup;
 
 import android.content.Context;
+
 import com.android.dialer.inject.HasRootComponent;
 import com.android.dialer.inject.IncludeInDialerRoot;
 import com.android.dialer.phonelookup.composite.CompositePhoneLookup;
+
 import dagger.Subcomponent;
 
 /** Dagger component for the PhoneLookup package. */
diff --git a/java/com/android/dialer/phonelookup/PhoneLookupModule.java b/java/com/android/dialer/phonelookup/PhoneLookupModule.java
index dd52470..813e2e1 100644
--- a/java/com/android/dialer/phonelookup/PhoneLookupModule.java
+++ b/java/com/android/dialer/phonelookup/PhoneLookupModule.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,6 +24,7 @@
 import com.android.dialer.phonelookup.cp2.Cp2ExtendedDirectoryPhoneLookup;
 import com.android.dialer.phonelookup.emergency.EmergencyPhoneLookup;
 import com.google.common.collect.ImmutableList;
+
 import dagger.Module;
 import dagger.Provides;
 
@@ -31,7 +33,7 @@
 public abstract class PhoneLookupModule {
 
   @Provides
-  @SuppressWarnings({"unchecked", "rawtype"})
+  @SuppressWarnings("rawtypes")
   static ImmutableList<PhoneLookup> providePhoneLookupList(
       CequintPhoneLookup cequintPhoneLookup,
       CnapPhoneLookup cnapPhoneLookup,
diff --git a/java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java b/java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java
index 8c3e50e..c9232aa 100644
--- a/java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -42,7 +43,9 @@
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListeningExecutorService;
+
 import java.util.Set;
+
 import javax.inject.Inject;
 
 /**
diff --git a/java/com/android/dialer/phonelookup/cequint/CequintPhoneLookup.java b/java/com/android/dialer/phonelookup/cequint/CequintPhoneLookup.java
index 4426eb8..875b9bc 100644
--- a/java/com/android/dialer/phonelookup/cequint/CequintPhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/cequint/CequintPhoneLookup.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,6 +20,7 @@
 import android.content.Context;
 import android.telecom.Call;
 import android.text.TextUtils;
+
 import com.android.dialer.DialerPhoneNumber;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor;
@@ -37,6 +39,7 @@
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListeningExecutorService;
+
 import javax.inject.Inject;
 
 /** PhoneLookup implementation for Cequint. */
diff --git a/java/com/android/dialer/phonelookup/cnap/CnapPhoneLookup.java b/java/com/android/dialer/phonelookup/cnap/CnapPhoneLookup.java
index 1b78a8e..657e480 100644
--- a/java/com/android/dialer/phonelookup/cnap/CnapPhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/cnap/CnapPhoneLookup.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,6 +21,7 @@
 import android.database.Cursor;
 import android.telecom.Call;
 import android.text.TextUtils;
+
 import com.android.dialer.DialerPhoneNumber;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
@@ -36,6 +38,7 @@
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListeningExecutorService;
 import com.google.protobuf.InvalidProtocolBufferException;
+
 import javax.inject.Inject;
 
 /** PhoneLookup implementation for CNAP info. */
diff --git a/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java b/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java
index 30b107a..734f6d0 100644
--- a/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -42,9 +43,11 @@
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListeningExecutorService;
 import com.google.common.util.concurrent.MoreExecutors;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+
 import javax.inject.Inject;
 
 /**
diff --git a/java/com/android/dialer/phonelookup/consolidator/PhoneLookupInfoConsolidator.java b/java/com/android/dialer/phonelookup/consolidator/PhoneLookupInfoConsolidator.java
index 5ef6c1f..9ab3e86 100644
--- a/java/com/android/dialer/phonelookup/consolidator/PhoneLookupInfoConsolidator.java
+++ b/java/com/android/dialer/phonelookup/consolidator/PhoneLookupInfoConsolidator.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -27,6 +28,7 @@
 import com.android.dialer.phonelookup.PhoneLookupInfo.PeopleApiInfo;
 import com.android.dialer.phonelookup.PhoneLookupInfo.PeopleApiInfo.InfoType;
 import com.google.common.collect.ImmutableList;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 
diff --git a/java/com/android/dialer/phonelookup/cp2/Cp2DefaultDirectoryPhoneLookup.java b/java/com/android/dialer/phonelookup/cp2/Cp2DefaultDirectoryPhoneLookup.java
index e748cbc..bab7ca3 100644
--- a/java/com/android/dialer/phonelookup/cp2/Cp2DefaultDirectoryPhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/cp2/Cp2DefaultDirectoryPhoneLookup.java
@@ -352,8 +352,8 @@
           try (Cursor cursor =
               queryPhoneLookup(new String[] {ContactsContract.PhoneLookup.CONTACT_ID}, rawNumber)) {
             if (cursor == null) {
-              LogUtil.w(
-                  "Cp2DefaultDirectoryPhoneLookup.queryPhoneLookupTableForContactIdsBasedOnRawNumber",
+              LogUtil.w("Cp2DefaultDirectoryPhoneLookup." +
+                              "queryPhoneLookupTableForContactIdsBasedOnRawNumber",
                   "null cursor");
               return contactIds;
             }
@@ -854,7 +854,7 @@
             Phone.CONTENT_URI,
             projection,
             Phone.NORMALIZED_NUMBER + " IN (" + questionMarks(validE164Numbers.size()) + ")",
-            validE164Numbers.toArray(new String[validE164Numbers.size()]),
+            validE164Numbers.toArray(new String[0]),
             null);
   }
 
diff --git a/java/com/android/dialer/phonelookup/cp2/Cp2ExtendedDirectoryPhoneLookup.java b/java/com/android/dialer/phonelookup/cp2/Cp2ExtendedDirectoryPhoneLookup.java
index d86b2a4..548c92b 100644
--- a/java/com/android/dialer/phonelookup/cp2/Cp2ExtendedDirectoryPhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/cp2/Cp2ExtendedDirectoryPhoneLookup.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,6 +22,7 @@
 import android.net.Uri;
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.Directory;
+
 import com.android.dialer.DialerPhoneNumber;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor;
@@ -36,9 +38,11 @@
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListeningExecutorService;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.function.Predicate;
+
 import javax.inject.Inject;
 
 /**
diff --git a/java/com/android/dialer/phonelookup/cp2/Cp2Projections.java b/java/com/android/dialer/phonelookup/cp2/Cp2Projections.java
index 38390e5..dd0f7f8 100644
--- a/java/com/android/dialer/phonelookup/cp2/Cp2Projections.java
+++ b/java/com/android/dialer/phonelookup/cp2/Cp2Projections.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,6 +24,7 @@
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.PhoneLookup;
 import android.text.TextUtils;
+
 import com.android.dialer.phonelookup.PhoneLookupInfo.Cp2Info.Cp2ContactInfo;
 
 /**
diff --git a/java/com/android/dialer/phonelookup/cp2/MissingPermissionsOperations.java b/java/com/android/dialer/phonelookup/cp2/MissingPermissionsOperations.java
index a241368..c7e3554 100644
--- a/java/com/android/dialer/phonelookup/cp2/MissingPermissionsOperations.java
+++ b/java/com/android/dialer/phonelookup/cp2/MissingPermissionsOperations.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,6 +19,7 @@
 
 import android.content.Context;
 import android.database.Cursor;
+
 import com.android.dialer.DialerPhoneNumber;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor;
@@ -32,7 +34,9 @@
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListeningExecutorService;
 import com.google.protobuf.InvalidProtocolBufferException;
+
 import java.util.function.Predicate;
+
 import javax.inject.Inject;
 
 /** Shared logic for handling missing permissions in CP2 lookups. */
diff --git a/java/com/android/dialer/phonelookup/database/PhoneLookupDatabaseComponent.java b/java/com/android/dialer/phonelookup/database/PhoneLookupDatabaseComponent.java
index 92659c1..e8fca24 100644
--- a/java/com/android/dialer/phonelookup/database/PhoneLookupDatabaseComponent.java
+++ b/java/com/android/dialer/phonelookup/database/PhoneLookupDatabaseComponent.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,8 +17,10 @@
 package com.android.dialer.phonelookup.database;
 
 import android.content.Context;
+
 import com.android.dialer.inject.HasRootComponent;
 import com.android.dialer.inject.IncludeInDialerRoot;
+
 import dagger.Subcomponent;
 
 /** Dagger component for database package. */
diff --git a/java/com/android/dialer/phonelookup/database/PhoneLookupHistoryContentProvider.java b/java/com/android/dialer/phonelookup/database/PhoneLookupHistoryContentProvider.java
index c837fe3..3a2762f 100644
--- a/java/com/android/dialer/phonelookup/database/PhoneLookupHistoryContentProvider.java
+++ b/java/com/android/dialer/phonelookup/database/PhoneLookupHistoryContentProvider.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -36,6 +37,7 @@
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.phonelookup.database.contract.PhoneLookupHistoryContract;
 import com.android.dialer.phonelookup.database.contract.PhoneLookupHistoryContract.PhoneLookupHistory;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
diff --git a/java/com/android/dialer/phonelookup/database/PhoneLookupHistoryDatabaseHelper.java b/java/com/android/dialer/phonelookup/database/PhoneLookupHistoryDatabaseHelper.java
index 337e467..27dfe87 100644
--- a/java/com/android/dialer/phonelookup/database/PhoneLookupHistoryDatabaseHelper.java
+++ b/java/com/android/dialer/phonelookup/database/PhoneLookupHistoryDatabaseHelper.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,12 +21,14 @@
 import android.database.sqlite.SQLiteDatabase;
 import android.database.sqlite.SQLiteOpenHelper;
 import android.os.SystemClock;
+
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor;
 import com.android.dialer.inject.ApplicationContext;
 import com.android.dialer.phonelookup.database.contract.PhoneLookupHistoryContract.PhoneLookupHistory;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListeningExecutorService;
+
 import javax.inject.Inject;
 import javax.inject.Singleton;
 
diff --git a/java/com/android/dialer/phonelookup/database/contract/PhoneLookupHistoryContract.java b/java/com/android/dialer/phonelookup/database/contract/PhoneLookupHistoryContract.java
index a195926..6703989 100644
--- a/java/com/android/dialer/phonelookup/database/contract/PhoneLookupHistoryContract.java
+++ b/java/com/android/dialer/phonelookup/database/contract/PhoneLookupHistoryContract.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,11 +18,12 @@
 package com.android.dialer.phonelookup.database.contract;
 
 import android.net.Uri;
+
 import com.android.dialer.constants.Constants;
 
 /** Contract for the PhoneLookupHistory content provider. */
 public class PhoneLookupHistoryContract {
-  public static final String AUTHORITY = Constants.get().getPhoneLookupHistoryProviderAuthority();
+  public static final String AUTHORITY = Constants.PHONE_LOOKUP_HISTORY_PROVIDER_AUTHORITY;
 
   public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY);
 
diff --git a/java/com/android/dialer/phonelookup/emergency/EmergencyPhoneLookup.java b/java/com/android/dialer/phonelookup/emergency/EmergencyPhoneLookup.java
index d31614a..e1be247 100644
--- a/java/com/android/dialer/phonelookup/emergency/EmergencyPhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/emergency/EmergencyPhoneLookup.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,6 +18,7 @@
 package com.android.dialer.phonelookup.emergency;
 
 import android.content.Context;
+
 import com.android.dialer.DialerPhoneNumber;
 import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor;
 import com.android.dialer.inject.ApplicationContext;
@@ -29,6 +31,7 @@
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListeningExecutorService;
+
 import javax.inject.Inject;
 
 /**
@@ -57,7 +60,7 @@
         () ->
             EmergencyInfo.newBuilder()
                 .setIsEmergencyNumber(
-                    PhoneNumberHelper.isLocalEmergencyNumber(
+                    PhoneNumberHelper.isEmergencyNumber(
                         appContext, dialerPhoneNumber.getNormalizedNumber()))
                 .build());
   }
diff --git a/java/com/android/dialer/phonenumbercache/CachedNumberLookupService.java b/java/com/android/dialer/phonenumbercache/CachedNumberLookupService.java
index 74f701c..d1b2cda 100644
--- a/java/com/android/dialer/phonenumbercache/CachedNumberLookupService.java
+++ b/java/com/android/dialer/phonenumbercache/CachedNumberLookupService.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -24,6 +25,7 @@
 import androidx.annotation.WorkerThread;
 
 import com.android.dialer.logging.ContactSource;
+
 import java.io.InputStream;
 
 public interface CachedNumberLookupService {
diff --git a/java/com/android/dialer/phonenumbercache/CallLogQuery.java b/java/com/android/dialer/phonenumbercache/CallLogQuery.java
index 78a0049..a183870 100644
--- a/java/com/android/dialer/phonenumbercache/CallLogQuery.java
+++ b/java/com/android/dialer/phonenumbercache/CallLogQuery.java
@@ -21,10 +21,6 @@
 
 import androidx.annotation.NonNull;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
 /** The query for the call log table. */
 public final class CallLogQuery {
 
diff --git a/java/com/android/dialer/phonenumbercache/ContactInfoHelper.java b/java/com/android/dialer/phonenumbercache/ContactInfoHelper.java
index 122d6d2..f6e3b7a 100644
--- a/java/com/android/dialer/phonenumbercache/ContactInfoHelper.java
+++ b/java/com/android/dialer/phonenumbercache/ContactInfoHelper.java
@@ -1,15 +1,18 @@
 /*
  * Copyright (C) 2011 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
+ * 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
+ *      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.
+ * 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.phonenumbercache;
@@ -45,11 +48,13 @@
 import com.android.dialer.telecom.TelecomUtil;
 import com.android.dialer.util.PermissionsUtil;
 import com.android.dialer.util.UriUtils;
-import java.util.ArrayList;
-import java.util.List;
+
 import org.json.JSONException;
 import org.json.JSONObject;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /** Utility class to look up the contact information for a given number. */
 public class ContactInfoHelper {
 
diff --git a/java/com/android/dialer/phonenumbercache/PhoneNumberCache.java b/java/com/android/dialer/phonenumbercache/PhoneNumberCache.java
index c29eb77..6071ce4 100644
--- a/java/com/android/dialer/phonenumbercache/PhoneNumberCache.java
+++ b/java/com/android/dialer/phonenumbercache/PhoneNumberCache.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,6 +18,7 @@
 package com.android.dialer.phonenumbercache;
 
 import android.content.Context;
+
 import java.util.Objects;
 
 /** Accessor for the phone number cache bindings. */
diff --git a/java/com/android/dialer/phonenumbergeoutil/PhoneNumberGeoUtilComponent.java b/java/com/android/dialer/phonenumbergeoutil/PhoneNumberGeoUtilComponent.java
index a49005e..fd3c9f9 100644
--- a/java/com/android/dialer/phonenumbergeoutil/PhoneNumberGeoUtilComponent.java
+++ b/java/com/android/dialer/phonenumbergeoutil/PhoneNumberGeoUtilComponent.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,7 +18,9 @@
 package com.android.dialer.phonenumbergeoutil;
 
 import android.content.Context;
+
 import com.android.dialer.inject.HasRootComponent;
+
 import dagger.Subcomponent;
 
 /** Dagger component for phone number geo util. */
diff --git a/java/com/android/dialer/phonenumbergeoutil/impl/PhoneNumberGeoUtilImpl.java b/java/com/android/dialer/phonenumbergeoutil/impl/PhoneNumberGeoUtilImpl.java
index 89fe04a..ebda26d 100644
--- a/java/com/android/dialer/phonenumbergeoutil/impl/PhoneNumberGeoUtilImpl.java
+++ b/java/com/android/dialer/phonenumbergeoutil/impl/PhoneNumberGeoUtilImpl.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,6 +19,7 @@
 
 import android.content.Context;
 import android.text.TextUtils;
+
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.i18n.LocaleUtils;
 import com.android.dialer.phonenumbergeoutil.PhoneNumberGeoUtil;
@@ -25,7 +27,9 @@
 import com.google.i18n.phonenumbers.PhoneNumberUtil;
 import com.google.i18n.phonenumbers.Phonenumber;
 import com.google.i18n.phonenumbers.geocoding.PhoneNumberOfflineGeocoder;
+
 import java.util.Locale;
+
 import javax.inject.Inject;
 
 /** Implementation of {@link PhoneNumberGeoUtil}. */
diff --git a/java/com/android/dialer/phonenumbergeoutil/impl/PhoneNumberGeoUtilModule.java b/java/com/android/dialer/phonenumbergeoutil/impl/PhoneNumberGeoUtilModule.java
index 3878ac5..ab8bfb2 100644
--- a/java/com/android/dialer/phonenumbergeoutil/impl/PhoneNumberGeoUtilModule.java
+++ b/java/com/android/dialer/phonenumbergeoutil/impl/PhoneNumberGeoUtilModule.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,9 +18,11 @@
 package com.android.dialer.phonenumbergeoutil.impl;
 
 import com.android.dialer.phonenumbergeoutil.PhoneNumberGeoUtil;
+
+import javax.inject.Singleton;
+
 import dagger.Binds;
 import dagger.Module;
-import javax.inject.Singleton;
 
 /** Module which binds {@link PhoneNumberGeoUtilImpl}. */
 @Module
diff --git a/java/com/android/dialer/phonenumbergeoutil/stub/PhoneNumberGeoUtilStub.java b/java/com/android/dialer/phonenumbergeoutil/stub/PhoneNumberGeoUtilStub.java
index 06cd137..6b6da4e 100644
--- a/java/com/android/dialer/phonenumbergeoutil/stub/PhoneNumberGeoUtilStub.java
+++ b/java/com/android/dialer/phonenumbergeoutil/stub/PhoneNumberGeoUtilStub.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,7 +18,9 @@
 package com.android.dialer.phonenumbergeoutil.stub;
 
 import android.content.Context;
+
 import com.android.dialer.phonenumbergeoutil.PhoneNumberGeoUtil;
+
 import javax.inject.Inject;
 
 /** Stub implementation of {@link PhoneNumberGeoUtil}. */
diff --git a/java/com/android/dialer/phonenumbergeoutil/stub/StubPhoneNumberGeoUtilModule.java b/java/com/android/dialer/phonenumbergeoutil/stub/StubPhoneNumberGeoUtilModule.java
index 82252cc..0b702bc 100644
--- a/java/com/android/dialer/phonenumbergeoutil/stub/StubPhoneNumberGeoUtilModule.java
+++ b/java/com/android/dialer/phonenumbergeoutil/stub/StubPhoneNumberGeoUtilModule.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,9 +18,11 @@
 package com.android.dialer.phonenumbergeoutil.stub;
 
 import com.android.dialer.phonenumbergeoutil.PhoneNumberGeoUtil;
+
+import javax.inject.Singleton;
+
 import dagger.Binds;
 import dagger.Module;
-import javax.inject.Singleton;
 
 /** Module which binds {@link PhoneNumberGeoUtilStub}. */
 @Module
diff --git a/java/com/android/dialer/phonenumberutil/PhoneNumberHelper.java b/java/com/android/dialer/phonenumberutil/PhoneNumberHelper.java
index f080521..22c847e 100644
--- a/java/com/android/dialer/phonenumberutil/PhoneNumberHelper.java
+++ b/java/com/android/dialer/phonenumberutil/PhoneNumberHelper.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2013 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,7 +24,6 @@
 import android.provider.CallLog;
 import android.telecom.PhoneAccountHandle;
 import android.telephony.PhoneNumberUtils;
-import android.telephony.SubscriptionInfo;
 import android.telephony.TelephonyManager;
 import android.text.BidiFormatter;
 import android.text.TextDirectionHeuristics;
@@ -38,13 +38,12 @@
 import com.android.dialer.compat.telephony.TelephonyManagerCompat;
 import com.android.dialer.i18n.LocaleUtils;
 import com.android.dialer.oem.MotorolaUtils;
-import com.android.dialer.oem.PhoneNumberUtilsAccessor;
 import com.android.dialer.phonenumbergeoutil.PhoneNumberGeoUtilComponent;
 import com.android.dialer.telecom.TelecomUtil;
-import com.google.common.base.Optional;
+
 import java.util.Arrays;
 import java.util.HashSet;
-import java.util.List;
+import java.util.Objects;
 import java.util.Set;
 
 public class PhoneNumberHelper {
@@ -144,37 +143,13 @@
     return rawNumber1.equals(rawNumber2);
   }
 
-  /**
-   * An enhanced version of {@link PhoneNumberUtils#isLocalEmergencyNumber(Context, String)}.
-   *
-   * <p>This methods supports checking the number for all SIMs.
-   *
-   * @param context the context which the number should be checked against
-   * @param number the number to tbe checked
-   * @return true if the specified number is an emergency number for any SIM in the device.
-   */
-  @SuppressWarnings("Guava")
-  public static boolean isLocalEmergencyNumber(Context context, String number) {
-    List<PhoneAccountHandle> phoneAccountHandles =
-        TelecomUtil.getSubscriptionPhoneAccounts(context);
+  public static boolean isEmergencyNumber(Context context, String number) {
+    TelephonyManager telephonyManager = context.getSystemService(TelephonyManager.class);
+    return telephonyManager.isEmergencyNumber(number);
+  }
 
-    // If the number of phone accounts with a subscription is no greater than 1, only one SIM is
-    // installed in the device. We hand over the job to PhoneNumberUtils#isLocalEmergencyNumber.
-    if (phoneAccountHandles.size() <= 1) {
-      return PhoneNumberUtils.isLocalEmergencyNumber(context, number);
-    }
-
-    for (PhoneAccountHandle phoneAccountHandle : phoneAccountHandles) {
-      Optional<SubscriptionInfo> subscriptionInfo =
-          TelecomUtil.getSubscriptionInfo(context, phoneAccountHandle);
-      if (subscriptionInfo.isPresent()
-          && PhoneNumberUtilsAccessor.isLocalEmergencyNumber(
-              context, subscriptionInfo.get().getSubscriptionId(), number)) {
-        return true;
-      }
-    }
-
-    return false;
+  public static boolean isEmergencyNumber(Context context, String number, String countryIso) {
+    return isEmergencyNumber(context, PhoneNumberUtils.formatNumberToE164(number, countryIso));
   }
 
   /**
@@ -197,32 +172,6 @@
     return number != null && isUriNumber(number.toString());
   }
 
-  public static boolean isUnknownNumberThatCanBeLookedUp(
-      Context context, PhoneAccountHandle accountHandle, CharSequence number, int presentation) {
-    if (presentation == CallLog.Calls.PRESENTATION_UNKNOWN) {
-      return false;
-    }
-    if (presentation == CallLog.Calls.PRESENTATION_RESTRICTED) {
-      return false;
-    }
-    if (presentation == CallLog.Calls.PRESENTATION_UNAVAILABLE) {
-      return false;
-    }
-    if (presentation == CallLog.Calls.PRESENTATION_PAYPHONE) {
-      return false;
-    }
-    if (TextUtils.isEmpty(number)) {
-      return false;
-    }
-    if (isVoicemailNumber(context, accountHandle, number)) {
-      return false;
-    }
-    if (isLegacyUnknownNumbers(number)) {
-      return false;
-    }
-    return true;
-  }
-
   public static boolean isLegacyUnknownNumbers(CharSequence number) {
     return number != null && LEGACY_UNKNOWN_NUMBERS.contains(number.toString());
   }
@@ -406,4 +355,34 @@
       return context.getString(R.string.private_num_non_verizon);
     }
   }
+
+  public static boolean compareSipAddresses(@Nullable String number1, @Nullable String number2) {
+    if (number1 == null || number2 == null) {
+      return Objects.equals(number1, number2);
+    }
+
+    int index1 = number1.indexOf('@');
+    final String userinfo1;
+    final String rest1;
+    if (index1 != -1) {
+      userinfo1 = number1.substring(0, index1);
+      rest1 = number1.substring(index1);
+    } else {
+      userinfo1 = number1;
+      rest1 = "";
+    }
+
+    int index2 = number2.indexOf('@');
+    final String userinfo2;
+    final String rest2;
+    if (index2 != -1) {
+      userinfo2 = number2.substring(0, index2);
+      rest2 = number2.substring(index2);
+    } else {
+      userinfo2 = number2;
+      rest2 = "";
+    }
+
+    return userinfo1.equals(userinfo2) && rest1.equalsIgnoreCase(rest2);
+  }
 }
diff --git a/java/com/android/dialer/postcall/PostCall.java b/java/com/android/dialer/postcall/PostCall.java
index 26de1d6..3fc42b5 100644
--- a/java/com/android/dialer/postcall/PostCall.java
+++ b/java/com/android/dialer/postcall/PostCall.java
@@ -89,7 +89,8 @@
         Snackbar.make(rootView, message, durationMs)
             .setAction(actionText, onClickListener)
             .setActionTextColor(
-                activity.getResources().getColor(R.color.dialer_snackbar_action_text_color));
+                activity.getResources().getColor(R.color.dialer_snackbar_action_text_color,
+                        activity.getTheme()));
     activeSnackbar.show();
     StorageComponent.get(activity)
         .unencryptedSharedPrefs()
@@ -115,7 +116,8 @@
         Snackbar.make(rootView, message, Snackbar.LENGTH_LONG)
             .setAction(addMessage, onClickListener)
             .setActionTextColor(
-                activity.getResources().getColor(R.color.dialer_snackbar_action_text_color))
+                activity.getResources().getColor(R.color.dialer_snackbar_action_text_color,
+                        activity.getTheme()))
             .addCallback(
                 new BaseTransientBottomBar.BaseCallback<Snackbar>() {
                   @Override
diff --git a/java/com/android/dialer/postcall/PostCallActivity.java b/java/com/android/dialer/postcall/PostCallActivity.java
index 6988ad0..44e2014 100644
--- a/java/com/android/dialer/postcall/PostCallActivity.java
+++ b/java/com/android/dialer/postcall/PostCallActivity.java
@@ -123,7 +123,4 @@
       startActivity(intent);
     }
   }
-
-  @Override
-  public void onMessageFragmentAfterTextChange(String message) {}
 }
diff --git a/java/com/android/dialer/precall/PreCallComponent.java b/java/com/android/dialer/precall/PreCallComponent.java
index 2f5bf78..b98de35 100644
--- a/java/com/android/dialer/precall/PreCallComponent.java
+++ b/java/com/android/dialer/precall/PreCallComponent.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,6 +23,7 @@
 
 import com.android.dialer.inject.HasRootComponent;
 import com.google.common.collect.ImmutableList;
+
 import dagger.Subcomponent;
 
 /** Daggaer component for {@link PreCall} */
diff --git a/java/com/android/dialer/precall/externalreceiver/LaunchPreCallActivity.java b/java/com/android/dialer/precall/externalreceiver/LaunchPreCallActivity.java
index 4aed1a5..a02e694 100644
--- a/java/com/android/dialer/precall/externalreceiver/LaunchPreCallActivity.java
+++ b/java/com/android/dialer/precall/externalreceiver/LaunchPreCallActivity.java
@@ -17,7 +17,6 @@
 
 package com.android.dialer.precall.externalreceiver;
 
-import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
diff --git a/java/com/android/dialer/precall/impl/AssistedDialAction.java b/java/com/android/dialer/precall/impl/AssistedDialAction.java
index 44b7255..3f48817 100644
--- a/java/com/android/dialer/precall/impl/AssistedDialAction.java
+++ b/java/com/android/dialer/precall/impl/AssistedDialAction.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,6 +20,7 @@
 import android.content.Context;
 import android.os.Bundle;
 import android.telecom.PhoneAccount;
+
 import com.android.dialer.assisteddialing.AssistedDialingMediator;
 import com.android.dialer.assisteddialing.ConcreteCreator;
 import com.android.dialer.assisteddialing.TransformationInfo;
@@ -29,6 +31,7 @@
 import com.android.dialer.precall.PreCallAction;
 import com.android.dialer.precall.PreCallCoordinator;
 import com.android.dialer.util.CallUtil;
+
 import java.util.Optional;
 
 /** Rewrites the call URI with country code. */
diff --git a/java/com/android/dialer/precall/impl/CallingAccountSelector.java b/java/com/android/dialer/precall/impl/CallingAccountSelector.java
index 46cac7f..671c6c6 100644
--- a/java/com/android/dialer/precall/impl/CallingAccountSelector.java
+++ b/java/com/android/dialer/precall/impl/CallingAccountSelector.java
@@ -30,7 +30,6 @@
 import androidx.fragment.app.FragmentActivity;
 
 import com.android.contacts.common.widget.SelectPhoneAccountDialogFragment;
-import com.android.contacts.common.widget.SelectPhoneAccountDialogFragment.SelectPhoneAccountListener;
 import com.android.contacts.common.widget.SelectPhoneAccountDialogOptions;
 import com.android.dialer.callintent.CallIntentBuilder;
 import com.android.dialer.common.Assert;
@@ -182,7 +181,8 @@
                 pendingAction,
                 new PreferredAccountRecorder(number, suggestion, dataId)));
     selectPhoneAccountDialogFragment.show(
-        ((FragmentActivity) coordinator.getActivity()).getSupportFragmentManager(), TAG_CALLING_ACCOUNT_SELECTOR);
+        ((FragmentActivity) coordinator.getActivity()).getSupportFragmentManager(),
+            TAG_CALLING_ACCOUNT_SELECTOR);
   }
 
   @MainThread
@@ -194,7 +194,8 @@
     }
   }
 
-  private class SelectedListener extends SelectPhoneAccountListener {
+  private class SelectedListener extends
+          SelectPhoneAccountDialogFragment.SelectPhoneAccountListener {
 
     private final PreCallCoordinator coordinator;
     private final PreCallCoordinator.PendingAction listener;
diff --git a/java/com/android/dialer/precall/impl/PermissionCheckAction.java b/java/com/android/dialer/precall/impl/PermissionCheckAction.java
index 9377c25..83c872e 100644
--- a/java/com/android/dialer/precall/impl/PermissionCheckAction.java
+++ b/java/com/android/dialer/precall/impl/PermissionCheckAction.java
@@ -19,6 +19,7 @@
 
 import android.content.Context;
 import android.widget.Toast;
+
 import com.android.dialer.callintent.CallIntentBuilder;
 import com.android.dialer.precall.PreCallAction;
 import com.android.dialer.precall.PreCallCoordinator;
diff --git a/java/com/android/dialer/precall/impl/PreCallActivity.java b/java/com/android/dialer/precall/impl/PreCallActivity.java
index 4ff071c..e2e5e1c 100644
--- a/java/com/android/dialer/precall/impl/PreCallActivity.java
+++ b/java/com/android/dialer/precall/impl/PreCallActivity.java
@@ -17,7 +17,6 @@
 
 package com.android.dialer.precall.impl;
 
-import android.app.Activity;
 import android.app.KeyguardManager;
 import android.os.Bundle;
 import android.view.WindowManager.LayoutParams;
diff --git a/java/com/android/dialer/precall/impl/PreCallCoordinatorImpl.java b/java/com/android/dialer/precall/impl/PreCallCoordinatorImpl.java
index 476202b..d320f72 100644
--- a/java/com/android/dialer/precall/impl/PreCallCoordinatorImpl.java
+++ b/java/com/android/dialer/precall/impl/PreCallCoordinatorImpl.java
@@ -35,7 +35,6 @@
 import com.android.dialer.precall.PreCallComponent;
 import com.android.dialer.precall.PreCallCoordinator;
 import com.android.dialer.telecom.TelecomUtil;
-import com.google.common.base.Optional;
 import com.google.common.collect.ImmutableList;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
diff --git a/java/com/android/dialer/precall/impl/PreCallImpl.java b/java/com/android/dialer/precall/impl/PreCallImpl.java
index 34d0745..e7c28a4 100644
--- a/java/com/android/dialer/precall/impl/PreCallImpl.java
+++ b/java/com/android/dialer/precall/impl/PreCallImpl.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -27,6 +28,7 @@
 import com.android.dialer.precall.PreCallAction;
 import com.android.dialer.precall.PreCallCoordinator;
 import com.google.common.collect.ImmutableList;
+
 import javax.inject.Inject;
 
 /** Implementation of {@link PreCall} */
diff --git a/java/com/android/dialer/precall/impl/PreCallModule.java b/java/com/android/dialer/precall/impl/PreCallModule.java
index 7d5ee79..d5ee63e 100644
--- a/java/com/android/dialer/precall/impl/PreCallModule.java
+++ b/java/com/android/dialer/precall/impl/PreCallModule.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,10 +20,12 @@
 import com.android.dialer.precall.PreCall;
 import com.android.dialer.precall.PreCallAction;
 import com.google.common.collect.ImmutableList;
+
+import javax.inject.Singleton;
+
 import dagger.Binds;
 import dagger.Module;
 import dagger.Provides;
-import javax.inject.Singleton;
 
 /** Dagger module for {@link PreCall}. */
 @Module
diff --git a/java/com/android/dialer/precall/impl/UkRegionPrefixInInternationalFormatHandler.java b/java/com/android/dialer/precall/impl/UkRegionPrefixInInternationalFormatHandler.java
index b3fb4d5..0412b1f 100644
--- a/java/com/android/dialer/precall/impl/UkRegionPrefixInInternationalFormatHandler.java
+++ b/java/com/android/dialer/precall/impl/UkRegionPrefixInInternationalFormatHandler.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,6 +19,7 @@
 
 import android.content.Context;
 import android.telephony.PhoneNumberUtils;
+
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.precall.impl.MalformedNumberRectifier.MalformedNumberHandler;
 import com.google.common.base.Optional;
diff --git a/java/com/android/dialer/preferredsim/PreferredAccountRecorder.java b/java/com/android/dialer/preferredsim/PreferredAccountRecorder.java
index 142fefe..ab5f31b 100644
--- a/java/com/android/dialer/preferredsim/PreferredAccountRecorder.java
+++ b/java/com/android/dialer/preferredsim/PreferredAccountRecorder.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -48,7 +49,8 @@
 
   /**
    * Record the result from {@link
-   * com.android.contacts.common.widget.SelectPhoneAccountDialogFragment.SelectPhoneAccountListener#onPhoneAccountSelected}
+   * com.android.contacts.common.widget.SelectPhoneAccountDialogFragment.SelectPhoneAccountListener
+   * #onPhoneAccountSelected}
    */
   public void record(
       Context context, PhoneAccountHandle selectedAccountHandle, boolean setDefault) {
@@ -76,8 +78,8 @@
     private final PhoneAccountHandle phoneAccountHandle;
     private final boolean remember;
 
-    public UserSelectionReporter(
-            @NonNull PhoneAccountHandle phoneAccountHandle, @Nullable String number, boolean remember) {
+    public UserSelectionReporter(@NonNull PhoneAccountHandle phoneAccountHandle,
+                                 @Nullable String number, boolean remember) {
       this.phoneAccountHandle = Assert.isNotNull(phoneAccountHandle);
       this.number = Assert.isNotNull(number);
       this.remember = remember;
@@ -127,7 +129,7 @@
               PreferredSimFallbackContract.CONTENT_URI,
               values,
               PreferredSim.DATA_ID + " = ?",
-              new String[] {String.valueOf(input.dataId)});
+              new String[] {input.dataId});
       return null;
     }
   }
diff --git a/java/com/android/dialer/preferredsim/PreferredAccountUtil.java b/java/com/android/dialer/preferredsim/PreferredAccountUtil.java
index 9ebc0eb..7fc1547 100644
--- a/java/com/android/dialer/preferredsim/PreferredAccountUtil.java
+++ b/java/com/android/dialer/preferredsim/PreferredAccountUtil.java
@@ -40,8 +40,10 @@
    * device.
    */
   @NonNull
-  public static Optional<PhoneAccountHandle> getValidPhoneAccount(
-          @NonNull Context context, @Nullable String componentNameString, @Nullable String idString) {
+  public static Optional<PhoneAccountHandle> getValidPhoneAccount(@NonNull Context context,
+                                                                  @Nullable String
+                                                                          componentNameString,
+                                                                  @Nullable String idString) {
     if (TextUtils.isEmpty(componentNameString) || TextUtils.isEmpty(idString)) {
       LogUtil.i("PreferredAccountUtil.getValidPhoneAccount", "empty componentName or id");
       return Optional.absent();
diff --git a/java/com/android/dialer/preferredsim/PreferredAccountWorker.java b/java/com/android/dialer/preferredsim/PreferredAccountWorker.java
index 965d088..e7bed83 100644
--- a/java/com/android/dialer/preferredsim/PreferredAccountWorker.java
+++ b/java/com/android/dialer/preferredsim/PreferredAccountWorker.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,11 +18,13 @@
 package com.android.dialer.preferredsim;
 
 import android.telecom.PhoneAccountHandle;
+
 import com.android.contacts.common.widget.SelectPhoneAccountDialogOptions;
 import com.android.dialer.preferredsim.suggestion.SuggestionProvider.Suggestion;
 import com.google.auto.value.AutoValue;
 import com.google.common.base.Optional;
 import com.google.common.util.concurrent.ListenableFuture;
+
 import java.util.List;
 
 /** Query a preferred SIM to make a call with. */
diff --git a/java/com/android/dialer/preferredsim/PreferredSimComponent.java b/java/com/android/dialer/preferredsim/PreferredSimComponent.java
index b8d7fa1..9f2eb14 100644
--- a/java/com/android/dialer/preferredsim/PreferredSimComponent.java
+++ b/java/com/android/dialer/preferredsim/PreferredSimComponent.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,7 +18,9 @@
 package com.android.dialer.preferredsim;
 
 import android.content.Context;
+
 import com.android.dialer.inject.HasRootComponent;
+
 import dagger.Subcomponent;
 
 /** Component for preferred SIM */
diff --git a/java/com/android/dialer/preferredsim/PreferredSimFallbackContract.java b/java/com/android/dialer/preferredsim/PreferredSimFallbackContract.java
index 6c2f860..594ff7b 100644
--- a/java/com/android/dialer/preferredsim/PreferredSimFallbackContract.java
+++ b/java/com/android/dialer/preferredsim/PreferredSimFallbackContract.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,6 +21,7 @@
 import android.net.Uri;
 import android.provider.ContactsContract.CommonDataKinds;
 import android.telecom.PhoneAccountHandle;
+
 import com.android.dialer.constants.Constants;
 
 /**
@@ -37,7 +39,7 @@
    * Check the meta-data "com.android.dialer.PREFERRED_SIM_FALLBACK_AUTHORITY" to get the authority
    * of the default dialer if it support it.
    */
-  public static final String AUTHORITY = Constants.get().getPreferredSimFallbackProviderAuthority();
+  public static final String AUTHORITY = Constants.PREFERRED_SIM_FALLBACK_PROVIDER_AUTHORITY;
 
   public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY);
 
diff --git a/java/com/android/dialer/preferredsim/PreferredSimModule.java b/java/com/android/dialer/preferredsim/PreferredSimModule.java
index bdc6a5a..717863e 100644
--- a/java/com/android/dialer/preferredsim/PreferredSimModule.java
+++ b/java/com/android/dialer/preferredsim/PreferredSimModule.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,6 +18,7 @@
 package com.android.dialer.preferredsim;
 
 import com.android.dialer.preferredsim.impl.PreferredAccountWorkerImpl;
+
 import dagger.Binds;
 import dagger.Module;
 
diff --git a/java/com/android/dialer/preferredsim/impl/PreferredAccountWorkerImpl.java b/java/com/android/dialer/preferredsim/impl/PreferredAccountWorkerImpl.java
index 0302232..cc649b3 100644
--- a/java/com/android/dialer/preferredsim/impl/PreferredAccountWorkerImpl.java
+++ b/java/com/android/dialer/preferredsim/impl/PreferredAccountWorkerImpl.java
@@ -62,8 +62,10 @@
 import com.google.common.collect.ImmutableSet;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListeningExecutorService;
+
 import java.util.List;
 import java.util.Objects;
+
 import javax.inject.Inject;
 
 /** Implements {@link PreferredAccountWorker}. */
diff --git a/java/com/android/dialer/preferredsim/impl/PreferredSimDatabaseHelper.java b/java/com/android/dialer/preferredsim/impl/PreferredSimDatabaseHelper.java
index 4795ea4..b47ef4a 100644
--- a/java/com/android/dialer/preferredsim/impl/PreferredSimDatabaseHelper.java
+++ b/java/com/android/dialer/preferredsim/impl/PreferredSimDatabaseHelper.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,6 +20,7 @@
 import android.content.Context;
 import android.database.sqlite.SQLiteDatabase;
 import android.database.sqlite.SQLiteOpenHelper;
+
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.preferredsim.PreferredSimFallbackContract.PreferredSim;
 
diff --git a/java/com/android/dialer/preferredsim/suggestion/SimSuggestionComponent.java b/java/com/android/dialer/preferredsim/suggestion/SimSuggestionComponent.java
index 5e3791b..255c67f 100644
--- a/java/com/android/dialer/preferredsim/suggestion/SimSuggestionComponent.java
+++ b/java/com/android/dialer/preferredsim/suggestion/SimSuggestionComponent.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,6 +23,7 @@
 
 import com.android.dialer.common.Assert;
 import com.android.dialer.inject.HasRootComponent;
+
 import dagger.Subcomponent;
 
 /** Dagger component for {@link SuggestionProvider} */
diff --git a/java/com/android/dialer/preferredsim/suggestion/stub/StubSimSuggestionModule.java b/java/com/android/dialer/preferredsim/suggestion/stub/StubSimSuggestionModule.java
index 2f0e9b2..a1e1823 100644
--- a/java/com/android/dialer/preferredsim/suggestion/stub/StubSimSuggestionModule.java
+++ b/java/com/android/dialer/preferredsim/suggestion/stub/StubSimSuggestionModule.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,9 +18,11 @@
 package com.android.dialer.preferredsim.suggestion.stub;
 
 import com.android.dialer.preferredsim.suggestion.SuggestionProvider;
+
+import javax.inject.Singleton;
+
 import dagger.Binds;
 import dagger.Module;
-import javax.inject.Singleton;
 
 /** Stub module for {@link com.android.dialer.preferredsim.suggestion.SimSuggestionComponent} */
 @Module
diff --git a/java/com/android/dialer/preferredsim/suggestion/stub/StubSuggestionProvider.java b/java/com/android/dialer/preferredsim/suggestion/stub/StubSuggestionProvider.java
index 824a47e..efb75cd 100644
--- a/java/com/android/dialer/preferredsim/suggestion/stub/StubSuggestionProvider.java
+++ b/java/com/android/dialer/preferredsim/suggestion/stub/StubSuggestionProvider.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -24,6 +25,7 @@
 
 import com.android.dialer.preferredsim.suggestion.SuggestionProvider;
 import com.google.common.base.Optional;
+
 import javax.inject.Inject;
 
 /** {@link SuggestionProvider} that does nothing. */
diff --git a/java/com/android/dialer/promotion/PromotionComponent.java b/java/com/android/dialer/promotion/PromotionComponent.java
index caf10db..dfb55d5 100644
--- a/java/com/android/dialer/promotion/PromotionComponent.java
+++ b/java/com/android/dialer/promotion/PromotionComponent.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,9 +18,11 @@
 package com.android.dialer.promotion;
 
 import android.content.Context;
+
 import com.android.dialer.inject.HasRootComponent;
 import com.android.dialer.inject.IncludeInDialerRoot;
 import com.google.common.collect.ImmutableList;
+
 import dagger.Subcomponent;
 
 /** Component for promotion. */
diff --git a/java/com/android/dialer/promotion/PromotionManager.java b/java/com/android/dialer/promotion/PromotionManager.java
index 0918bcc..127149e 100644
--- a/java/com/android/dialer/promotion/PromotionManager.java
+++ b/java/com/android/dialer/promotion/PromotionManager.java
@@ -19,7 +19,9 @@
 
 import com.android.dialer.promotion.Promotion.PromotionType;
 import com.google.common.collect.ImmutableList;
+
 import java.util.Optional;
+
 import javax.inject.Inject;
 
 /**
diff --git a/java/com/android/dialer/promotion/impl/PromotionModule.java b/java/com/android/dialer/promotion/impl/PromotionModule.java
index 0606338..b5438ec 100644
--- a/java/com/android/dialer/promotion/impl/PromotionModule.java
+++ b/java/com/android/dialer/promotion/impl/PromotionModule.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,6 +19,7 @@
 
 import com.android.dialer.promotion.Promotion;
 import com.google.common.collect.ImmutableList;
+
 import dagger.Module;
 import dagger.Provides;
 
diff --git a/java/com/android/dialer/promotion/impl/RttPromotion.java b/java/com/android/dialer/promotion/impl/RttPromotion.java
index bff9fb6..4a9c78c 100644
--- a/java/com/android/dialer/promotion/impl/RttPromotion.java
+++ b/java/com/android/dialer/promotion/impl/RttPromotion.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -28,6 +29,7 @@
 import com.android.dialer.spannable.ContentWithLearnMoreSpanner;
 import com.android.dialer.storage.StorageComponent;
 import com.android.dialer.storage.Unencrypted;
+
 import javax.inject.Inject;
 
 /** RTT promotion. */
diff --git a/java/com/android/dialer/rootcomponentgenerator/ComponentGeneratingStep.java b/java/com/android/dialer/rootcomponentgenerator/ComponentGeneratingStep.java
index 1a40611..3553564 100644
--- a/java/com/android/dialer/rootcomponentgenerator/ComponentGeneratingStep.java
+++ b/java/com/android/dialer/rootcomponentgenerator/ComponentGeneratingStep.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -36,12 +37,13 @@
 import com.squareup.javapoet.ParameterSpec;
 import com.squareup.javapoet.TypeName;
 import com.squareup.javapoet.TypeSpec;
-import dagger.Subcomponent;
+
 import java.lang.annotation.Annotation;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Set;
+
 import javax.annotation.processing.ProcessingEnvironment;
 import javax.lang.model.element.AnnotationMirror;
 import javax.lang.model.element.AnnotationValue;
@@ -51,6 +53,8 @@
 import javax.lang.model.element.VariableElement;
 import javax.lang.model.type.TypeMirror;
 
+import dagger.Subcomponent;
+
 /**
  * Generates component for a type annotated with {@link IncludeInDialerRoot}.
  *
diff --git a/java/com/android/dialer/rootcomponentgenerator/MetadataGeneratingStep.java b/java/com/android/dialer/rootcomponentgenerator/MetadataGeneratingStep.java
index 0a8b831..cc0c1d0 100644
--- a/java/com/android/dialer/rootcomponentgenerator/MetadataGeneratingStep.java
+++ b/java/com/android/dialer/rootcomponentgenerator/MetadataGeneratingStep.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,8 +17,6 @@
 
 package com.android.dialer.rootcomponentgenerator;
 
-import static javax.tools.Diagnostic.Kind.ERROR;
-
 import com.android.dialer.inject.IncludeInDialerRoot;
 import com.android.dialer.inject.RootComponentGeneratorMetadata;
 import com.google.auto.common.BasicAnnotationProcessor.ProcessingStep;
@@ -26,9 +25,11 @@
 import com.google.common.collect.SetMultimap;
 import com.squareup.javapoet.AnnotationSpec;
 import com.squareup.javapoet.TypeSpec;
+
 import java.lang.annotation.Annotation;
 import java.util.Collections;
 import java.util.Set;
+
 import javax.annotation.processing.ProcessingEnvironment;
 import javax.lang.model.element.Element;
 import javax.lang.model.element.TypeElement;
diff --git a/java/com/android/dialer/rootcomponentgenerator/RootComponentProcessor.java b/java/com/android/dialer/rootcomponentgenerator/RootComponentProcessor.java
index 84d1961..9362bbc 100644
--- a/java/com/android/dialer/rootcomponentgenerator/RootComponentProcessor.java
+++ b/java/com/android/dialer/rootcomponentgenerator/RootComponentProcessor.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,6 +20,7 @@
 import com.google.auto.common.BasicAnnotationProcessor;
 import com.google.auto.service.AutoService;
 import com.google.common.collect.ImmutableList;
+
 import javax.annotation.processing.Processor;
 import javax.lang.model.SourceVersion;
 
diff --git a/java/com/android/dialer/rootcomponentgenerator/RootComponentUtils.java b/java/com/android/dialer/rootcomponentgenerator/RootComponentUtils.java
index cdcae92..ef73699 100644
--- a/java/com/android/dialer/rootcomponentgenerator/RootComponentUtils.java
+++ b/java/com/android/dialer/rootcomponentgenerator/RootComponentUtils.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,7 +19,9 @@
 
 import com.squareup.javapoet.JavaFile;
 import com.squareup.javapoet.TypeSpec;
+
 import java.io.IOException;
+
 import javax.annotation.processing.ProcessingEnvironment;
 
 /**
diff --git a/java/com/android/dialer/rtt/RttTranscriptDatabaseHelper.java b/java/com/android/dialer/rtt/RttTranscriptDatabaseHelper.java
index 934eedb..26498f3 100644
--- a/java/com/android/dialer/rtt/RttTranscriptDatabaseHelper.java
+++ b/java/com/android/dialer/rtt/RttTranscriptDatabaseHelper.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,6 +21,7 @@
 import android.database.sqlite.SQLiteDatabase;
 import android.database.sqlite.SQLiteOpenHelper;
 import android.os.SystemClock;
+
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.rtt.RttTranscriptContract.RttTranscriptColumn;
 
diff --git a/java/com/android/dialer/searchfragment/common/QueryBoldingUtil.java b/java/com/android/dialer/searchfragment/common/QueryBoldingUtil.java
index ad74b7d..aa65a16 100644
--- a/java/com/android/dialer/searchfragment/common/QueryBoldingUtil.java
+++ b/java/com/android/dialer/searchfragment/common/QueryBoldingUtil.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -27,6 +28,7 @@
 import androidx.annotation.Nullable;
 
 import com.android.dialer.common.LogUtil;
+
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
diff --git a/java/com/android/dialer/searchfragment/common/RowClickListener.java b/java/com/android/dialer/searchfragment/common/RowClickListener.java
index 9b0e595..2224ebc 100644
--- a/java/com/android/dialer/searchfragment/common/RowClickListener.java
+++ b/java/com/android/dialer/searchfragment/common/RowClickListener.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,8 +17,6 @@
 
 package com.android.dialer.searchfragment.common;
 
-import com.android.dialer.dialercontact.DialerContact;
-
 /** Interface of possible actions that can be performed by search elements. */
 public interface RowClickListener {
 
diff --git a/java/com/android/dialer/searchfragment/cp2/ContactFilterCursor.java b/java/com/android/dialer/searchfragment/cp2/ContactFilterCursor.java
index 3a6c702..b350580 100644
--- a/java/com/android/dialer/searchfragment/cp2/ContactFilterCursor.java
+++ b/java/com/android/dialer/searchfragment/cp2/ContactFilterCursor.java
@@ -131,7 +131,7 @@
     }
 
     // Sort the contacts back into the exact same order they were inside of {@code cursor}
-    Collections.sort(coalescedContacts, (o1, o2) -> compare(contactIdsToPosition, o1, o2));
+    coalescedContacts.sort((o1, o2) -> compare(contactIdsToPosition, o1, o2));
     MatrixCursor newCursor = new MatrixCursor(Projections.CP2_PROJECTION, coalescedContacts.size());
     for (Cp2Contact contact : coalescedContacts) {
       newCursor.addRow(contact.toCursorRow());
diff --git a/java/com/android/dialer/searchfragment/cp2/SearchContactViewHolder.java b/java/com/android/dialer/searchfragment/cp2/SearchContactViewHolder.java
index 49d0b2e..a0f2972 100644
--- a/java/com/android/dialer/searchfragment/cp2/SearchContactViewHolder.java
+++ b/java/com/android/dialer/searchfragment/cp2/SearchContactViewHolder.java
@@ -32,13 +32,12 @@
 import androidx.annotation.IntDef;
 import androidx.recyclerview.widget.RecyclerView;
 
+import com.android.dialer.R;
 import com.android.dialer.common.Assert;
 import com.android.dialer.contactphoto.ContactPhotoManager;
-import com.android.dialer.dialercontact.DialerContact;
 import com.android.dialer.lettertile.LetterTileDrawable;
 import com.android.dialer.searchfragment.common.Projections;
 import com.android.dialer.searchfragment.common.QueryBoldingUtil;
-import com.android.dialer.searchfragment.common.R;
 import com.android.dialer.searchfragment.common.RowClickListener;
 import com.android.dialer.searchfragment.common.SearchCursor;
 import com.android.dialer.widget.BidiTextView;
@@ -70,7 +69,6 @@
 
   private int position;
   private String number;
-  private DialerContact dialerContact;
   private @CallToAction int currentAction;
 
   public SearchContactViewHolder(View view, RowClickListener listener) {
@@ -89,7 +87,6 @@
    * at the cursors set position.
    */
   public void bind(SearchCursor cursor, String query) {
-    dialerContact = getDialerContact(context, cursor);
     position = cursor.getPosition();
     number = cursor.getString(Projections.PHONE_NUMBER);
     String name = cursor.getString(Projections.DISPLAY_NAME);
@@ -98,7 +95,7 @@
         TextUtils.isEmpty(label)
             ? number
             : context.getString(
-                com.android.dialer.contacts.resources.R.string.call_subject_type_and_number,
+                R.string.call_subject_type_and_number,
                 label,
                 number);
 
@@ -206,40 +203,4 @@
       listener.placeVoiceCall(number, position);
     }
   }
-
-  private static DialerContact getDialerContact(Context context, Cursor cursor) {
-    DialerContact.Builder contact = DialerContact.newBuilder();
-    String displayName = cursor.getString(Projections.DISPLAY_NAME);
-    String number = cursor.getString(Projections.PHONE_NUMBER);
-    Uri contactUri =
-        Contacts.getLookupUri(
-            cursor.getLong(Projections.CONTACT_ID), cursor.getString(Projections.LOOKUP_KEY));
-
-    contact
-        .setNumber(number)
-        .setPhotoId(cursor.getLong(Projections.PHOTO_ID))
-        .setContactType(LetterTileDrawable.TYPE_DEFAULT)
-        .setNameOrNumber(displayName)
-        .setNumberLabel(
-            Phone.getTypeLabel(
-                    context.getResources(),
-                    cursor.getInt(Projections.PHONE_TYPE),
-                    cursor.getString(Projections.PHONE_LABEL))
-                .toString());
-
-    String photoUri = cursor.getString(Projections.PHOTO_URI);
-    if (photoUri != null) {
-      contact.setPhotoUri(photoUri);
-    }
-
-    if (contactUri != null) {
-      contact.setContactUri(contactUri.toString());
-    }
-
-    if (!TextUtils.isEmpty(displayName)) {
-      contact.setDisplayNumber(number);
-    }
-
-    return contact.build();
-  }
 }
diff --git a/java/com/android/dialer/searchfragment/directories/DirectoryContactsCursor.java b/java/com/android/dialer/searchfragment/directories/DirectoryContactsCursor.java
index 35a5b1b..5706bc3 100644
--- a/java/com/android/dialer/searchfragment/directories/DirectoryContactsCursor.java
+++ b/java/com/android/dialer/searchfragment/directories/DirectoryContactsCursor.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -28,6 +29,7 @@
 import com.android.dialer.common.cp2.DirectoryUtils;
 import com.android.dialer.searchfragment.common.SearchCursor;
 import com.android.dialer.searchfragment.directories.DirectoriesCursorLoader.Directory;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -96,7 +98,7 @@
       cursorList.add(createHeaderCursor(context, directory.getDisplayName(), directory.getId()));
       cursorList.add(cursor);
     }
-    return cursorList.toArray(new Cursor[cursorList.size()]);
+    return cursorList.toArray(new Cursor[0]);
   }
 
   private static MatrixCursor createHeaderCursor(Context context, String name, long id) {
diff --git a/java/com/android/dialer/searchfragment/list/NewSearchFragment.java b/java/com/android/dialer/searchfragment/list/NewSearchFragment.java
index 8edf4e3..8998d2b 100644
--- a/java/com/android/dialer/searchfragment/list/NewSearchFragment.java
+++ b/java/com/android/dialer/searchfragment/list/NewSearchFragment.java
@@ -441,11 +441,6 @@
     LoaderManager.getInstance(this).restartLoader(CONTACTS_LOADER_ID, null, this);
   }
 
-  @Override
-  public void onPause() {
-    super.onPause();
-  }
-
   /**
    * Returns a list of search actions to be shown in the search results.
    *
diff --git a/java/com/android/dialer/searchfragment/list/SearchCursorManager.java b/java/com/android/dialer/searchfragment/list/SearchCursorManager.java
index eabf8d3..9b4e865 100644
--- a/java/com/android/dialer/searchfragment/list/SearchCursorManager.java
+++ b/java/com/android/dialer/searchfragment/list/SearchCursorManager.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,6 +24,7 @@
 
 import com.android.dialer.common.Assert;
 import com.android.dialer.searchfragment.common.SearchCursor;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
@@ -101,11 +103,7 @@
       return false;
     }
 
-    if (cursor != null) {
-      contactsCursor = cursor;
-    } else {
-      contactsCursor = null;
-    }
+    contactsCursor = cursor;
     return true;
   }
 
@@ -115,11 +113,7 @@
       return false;
     }
 
-    if (cursor != null) {
-      nearbyPlacesCursor = cursor;
-    } else {
-      nearbyPlacesCursor = null;
-    }
+    nearbyPlacesCursor = cursor;
     return true;
   }
 
@@ -138,11 +132,7 @@
       return false;
     }
 
-    if (cursor != null) {
-      corpDirectoryCursor = cursor;
-    } else {
-      corpDirectoryCursor = null;
-    }
+    corpDirectoryCursor = cursor;
     return true;
   }
 
diff --git a/java/com/android/dialer/searchfragment/nearbyplaces/NearbyPlacesCursorLoader.java b/java/com/android/dialer/searchfragment/nearbyplaces/NearbyPlacesCursorLoader.java
index e5bccc8..1ff5443 100644
--- a/java/com/android/dialer/searchfragment/nearbyplaces/NearbyPlacesCursorLoader.java
+++ b/java/com/android/dialer/searchfragment/nearbyplaces/NearbyPlacesCursorLoader.java
@@ -28,6 +28,7 @@
 import com.android.contacts.common.extensions.PhoneDirectoryExtenderAccessor;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.searchfragment.common.Projections;
+
 import java.util.List;
 
 /** Cursor loader for nearby places search results. */
diff --git a/java/com/android/dialer/shortcuts/CallContactActivity.java b/java/com/android/dialer/shortcuts/CallContactActivity.java
index 585ab0c..d50d497 100644
--- a/java/com/android/dialer/shortcuts/CallContactActivity.java
+++ b/java/com/android/dialer/shortcuts/CallContactActivity.java
@@ -25,7 +25,7 @@
 import androidx.activity.result.contract.ActivityResultContracts;
 import androidx.annotation.NonNull;
 
-import android.widget.Toast;
+import com.android.dialer.R;
 import com.android.dialer.callintent.CallInitiationType;
 import com.android.dialer.callintent.CallSpecificAppData;
 import com.android.dialer.common.LogUtil;
@@ -47,7 +47,8 @@
             if (grantResults.values().iterator().next()) {
               makeCall();
             } else {
-              Toast.makeText(this, R.string.dialer_shortcut_no_permissions, Toast.LENGTH_SHORT).show();
+              Toast.makeText(this, R.string.dialer_shortcut_no_permissions, Toast.LENGTH_SHORT)
+                      .show();
               finish();
             }
           });
diff --git a/java/com/android/dialer/shortcuts/IconFactory.java b/java/com/android/dialer/shortcuts/IconFactory.java
index 75b99ac..67d9178 100644
--- a/java/com/android/dialer/shortcuts/IconFactory.java
+++ b/java/com/android/dialer/shortcuts/IconFactory.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -33,6 +34,7 @@
 import com.android.dialer.common.Assert;
 import com.android.dialer.lettertile.LetterTileDrawable;
 import com.android.dialer.util.DrawableConverter;
+
 import java.io.InputStream;
 
 /** Constructs the icons for dialer shortcuts. */
diff --git a/java/com/android/dialer/shortcuts/ShortcutInfoFactory.java b/java/com/android/dialer/shortcuts/ShortcutInfoFactory.java
index 3e71b5d..6cc2ce3 100644
--- a/java/com/android/dialer/shortcuts/ShortcutInfoFactory.java
+++ b/java/com/android/dialer/shortcuts/ShortcutInfoFactory.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -24,6 +25,7 @@
 import androidx.annotation.WorkerThread;
 
 import com.android.dialer.common.Assert;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
diff --git a/java/com/android/dialer/shortcuts/ShortcutRefresher.java b/java/com/android/dialer/shortcuts/ShortcutRefresher.java
index e48b2dd..a87dda4 100644
--- a/java/com/android/dialer/shortcuts/ShortcutRefresher.java
+++ b/java/com/android/dialer/shortcuts/ShortcutRefresher.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -27,6 +28,7 @@
 import com.android.dialer.common.concurrent.DialerExecutor.Worker;
 import com.android.dialer.common.concurrent.DialerExecutorComponent;
 import com.android.dialer.speeddial.loader.SpeedDialUiItem;
+
 import java.util.ArrayList;
 import java.util.List;
 
diff --git a/java/com/android/dialer/simulator/Simulator.java b/java/com/android/dialer/simulator/Simulator.java
index 00a6152..985b3d1 100644
--- a/java/com/android/dialer/simulator/Simulator.java
+++ b/java/com/android/dialer/simulator/Simulator.java
@@ -156,7 +156,7 @@
 
     @Override
     public int hashCode() {
-      return Objects.hash(Integer.valueOf(type), data1, data2);
+      return Objects.hash(type, data1, data2);
     }
   }
 }
diff --git a/java/com/android/dialer/simulator/SimulatorComponent.java b/java/com/android/dialer/simulator/SimulatorComponent.java
index 952c97f..ca7d9ec 100644
--- a/java/com/android/dialer/simulator/SimulatorComponent.java
+++ b/java/com/android/dialer/simulator/SimulatorComponent.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,8 +18,10 @@
 package com.android.dialer.simulator;
 
 import android.content.Context;
+
 import com.android.dialer.inject.HasRootComponent;
 import com.android.dialer.inject.IncludeInDialerRoot;
+
 import dagger.Subcomponent;
 
 /** Subcomponent that can be used to access the simulator implementation. */
diff --git a/java/com/android/dialer/simulator/SimulatorConnectionsBank.java b/java/com/android/dialer/simulator/SimulatorConnectionsBank.java
index 56ac328..a91a8bf 100644
--- a/java/com/android/dialer/simulator/SimulatorConnectionsBank.java
+++ b/java/com/android/dialer/simulator/SimulatorConnectionsBank.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,6 +23,7 @@
 import androidx.annotation.NonNull;
 
 import com.android.dialer.simulator.Simulator.ConferenceType;
+
 import java.util.List;
 
 /**
diff --git a/java/com/android/dialer/simulator/impl/RttChatBot.java b/java/com/android/dialer/simulator/impl/RttChatBot.java
index 14390b1..ff633be 100644
--- a/java/com/android/dialer/simulator/impl/RttChatBot.java
+++ b/java/com/android/dialer/simulator/impl/RttChatBot.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -26,6 +27,7 @@
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.incallui.rtt.protocol.Constants;
+
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
diff --git a/java/com/android/dialer/simulator/impl/SimulatorConference.java b/java/com/android/dialer/simulator/impl/SimulatorConference.java
index 38688e6..de78812 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorConference.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorConference.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -27,6 +28,7 @@
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.simulator.Simulator;
 import com.android.dialer.simulator.Simulator.Event;
+
 import java.util.ArrayList;
 import java.util.List;
 
diff --git a/java/com/android/dialer/simulator/impl/SimulatorConferenceCreator.java b/java/com/android/dialer/simulator/impl/SimulatorConferenceCreator.java
index cca4547..4bb10da 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorConferenceCreator.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorConferenceCreator.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -30,6 +31,7 @@
 import com.android.dialer.simulator.Simulator.Event;
 import com.android.dialer.simulator.SimulatorComponent;
 import com.android.dialer.simulator.SimulatorConnectionsBank;
+
 import java.util.ArrayList;
 import java.util.Locale;
 
diff --git a/java/com/android/dialer/simulator/impl/SimulatorConnection.java b/java/com/android/dialer/simulator/impl/SimulatorConnection.java
index d813373..d8bd89f 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorConnection.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorConnection.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,7 +19,6 @@
 
 import android.content.Context;
 import android.telecom.Connection;
-import android.telecom.Connection.RttTextStream;
 import android.telecom.ConnectionRequest;
 import android.telecom.VideoProfile;
 
@@ -30,6 +30,7 @@
 import com.android.dialer.simulator.Simulator.Event;
 import com.android.dialer.simulator.SimulatorComponent;
 import com.android.dialer.simulator.SimulatorConnectionsBank;
+
 import java.util.ArrayList;
 import java.util.List;
 
diff --git a/java/com/android/dialer/simulator/impl/SimulatorConnectionService.java b/java/com/android/dialer/simulator/impl/SimulatorConnectionService.java
index 174237c..fa3ab06 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorConnectionService.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorConnectionService.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -35,6 +36,7 @@
 import com.android.dialer.simulator.Simulator;
 import com.android.dialer.simulator.SimulatorComponent;
 import com.android.dialer.simulator.SimulatorConnectionsBank;
+
 import java.util.ArrayList;
 import java.util.List;
 
diff --git a/java/com/android/dialer/simulator/impl/SimulatorConnectionsBankImpl.java b/java/com/android/dialer/simulator/impl/SimulatorConnectionsBankImpl.java
index c080c95..04c3174 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorConnectionsBankImpl.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorConnectionsBankImpl.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -28,9 +29,11 @@
 import com.android.dialer.simulator.Simulator.ConferenceType;
 import com.android.dialer.simulator.Simulator.Event;
 import com.android.dialer.simulator.SimulatorConnectionsBank;
+
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+
 import javax.inject.Inject;
 
 /** Wraps a list of connection tags and common methods around the connection tags list. */
diff --git a/java/com/android/dialer/simulator/impl/SimulatorMenu.java b/java/com/android/dialer/simulator/impl/SimulatorMenu.java
index 0d4deb0..caf754f 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorMenu.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorMenu.java
@@ -26,6 +26,7 @@
 import androidx.annotation.NonNull;
 
 import com.android.dialer.common.Assert;
+
 import java.util.Map.Entry;
 
 /** Makes option menu for simulator. */
diff --git a/java/com/android/dialer/simulator/impl/SimulatorModule.java b/java/com/android/dialer/simulator/impl/SimulatorModule.java
index 2bc72c9..3a8ae3c 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorModule.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorModule.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,9 +19,11 @@
 
 import com.android.dialer.simulator.Simulator;
 import com.android.dialer.simulator.SimulatorConnectionsBank;
+
+import javax.inject.Singleton;
+
 import dagger.Binds;
 import dagger.Module;
-import javax.inject.Singleton;
 
 /** This module provides an instance of the simulator. */
 @Module
diff --git a/java/com/android/dialer/simulator/impl/SimulatorPortalEntryGroup.java b/java/com/android/dialer/simulator/impl/SimulatorPortalEntryGroup.java
index 200b10f..e6db99d 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorPortalEntryGroup.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorPortalEntryGroup.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,6 +19,7 @@
 
 import com.google.auto.value.AutoValue;
 import com.google.common.collect.ImmutableMap;
+
 import java.util.Collections;
 import java.util.Map;
 
diff --git a/java/com/android/dialer/simulator/impl/SimulatorPreviewCamera.java b/java/com/android/dialer/simulator/impl/SimulatorPreviewCamera.java
index d068dc7..d402e5f 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorPreviewCamera.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorPreviewCamera.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -25,6 +26,8 @@
 import android.hardware.camera2.CameraManager;
 import android.hardware.camera2.CameraMetadata;
 import android.hardware.camera2.CaptureRequest;
+import android.hardware.camera2.params.OutputConfiguration;
+import android.hardware.camera2.params.SessionConfiguration;
 import android.hardware.camera2.params.StreamConfigurationMap;
 import android.telecom.VideoProfile.CameraCapabilities;
 import android.util.Size;
@@ -35,7 +38,9 @@
 
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
-import java.util.Arrays;
+
+import java.util.Collections;
+import java.util.concurrent.Executors;
 
 /**
  * Used by the video provider to draw the local camera. The in-call UI is responsible for setting
@@ -114,10 +119,11 @@
       }
 
       try {
-        camera.createCaptureSession(
-            Arrays.asList(Assert.isNotNull(surface)),
-            new CaptureSessionCallback(),
-            null /* handler */);
+        OutputConfiguration out = new OutputConfiguration(surface);
+        SessionConfiguration cfg = new SessionConfiguration(SessionConfiguration.SESSION_REGULAR,
+                Collections.singletonList(Assert.isNotNull(out)),
+                Executors.newSingleThreadExecutor(), new CaptureSessionCallback());
+        camera.createCaptureSession(cfg);
       } catch (CameraAccessException e) {
         throw Assert.createIllegalStateFailException("camera error: " + e);
       }
diff --git a/java/com/android/dialer/simulator/impl/SimulatorSimCallManager.java b/java/com/android/dialer/simulator/impl/SimulatorSimCallManager.java
index 9135070..9a07947 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorSimCallManager.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorSimCallManager.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -32,9 +33,10 @@
 
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
-import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import java.util.Random;
 
@@ -164,7 +166,7 @@
     return new PhoneAccount.Builder(getSimCallManagerHandle(context), "Simulator SIM call manager")
         .setCapabilities(PhoneAccount.CAPABILITY_CONNECTION_MANAGER | PhoneAccount.CAPABILITY_RTT)
         .setShortDescription("Simulator SIM call manager")
-        .setSupportedUriSchemes(Arrays.asList(PhoneAccount.SCHEME_TEL))
+        .setSupportedUriSchemes(Collections.singletonList(PhoneAccount.SCHEME_TEL))
         .build();
   }
 
@@ -176,7 +178,7 @@
                 | PhoneAccount.CAPABILITY_SUPPORTS_VIDEO_CALLING
                 | PhoneAccount.CAPABILITY_VIDEO_CALLING)
         .setShortDescription("Simulator video provider")
-        .setSupportedUriSchemes(Arrays.asList(PhoneAccount.SCHEME_TEL))
+        .setSupportedUriSchemes(Collections.singletonList(PhoneAccount.SCHEME_TEL))
         .build();
   }
 
diff --git a/java/com/android/dialer/simulator/impl/SimulatorUtils.java b/java/com/android/dialer/simulator/impl/SimulatorUtils.java
index debcd75..9bd4578 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorUtils.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorUtils.java
@@ -35,6 +35,7 @@
 import com.android.dialer.databasepopulator.VoicemailPopulator;
 import com.android.dialer.persistentlog.PersistentLogger;
 import com.android.dialer.preferredsim.PreferredSimFallbackContract;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
@@ -142,7 +143,7 @@
         .getContentResolver()
         .bulkInsert(
             Voicemails.buildSourceUri(context.getPackageName()),
-            voicemails.toArray(new ContentValues[voicemails.size()]));
+            voicemails.toArray(new ContentValues[0]));
   }
 
   private static class PopulateVoicemailWorker
diff --git a/java/com/android/dialer/simulator/impl/SimulatorVideoProvider.java b/java/com/android/dialer/simulator/impl/SimulatorVideoProvider.java
index 43f5368..2eb9a31 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorVideoProvider.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorVideoProvider.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -38,7 +39,7 @@
   @NonNull
   private final Context context;
   @NonNull private final SimulatorConnection connection;
-  @Nullable private String previewCameraId;;
+  @Nullable private String previewCameraId;
   @Nullable
   private SimulatorPreviewCamera simulatorPreviewCamera;
   @Nullable private SimulatorRemoteVideo simulatorRemoteVideo;
diff --git a/java/com/android/dialer/simulator/service/SimulatorService.java b/java/com/android/dialer/simulator/service/SimulatorService.java
index 1b679b5..51936fb 100644
--- a/java/com/android/dialer/simulator/service/SimulatorService.java
+++ b/java/com/android/dialer/simulator/service/SimulatorService.java
@@ -36,6 +36,7 @@
 import com.android.dialer.simulator.impl.SimulatorMainPortal;
 import com.google.common.base.Optional;
 import com.google.common.collect.ImmutableList;
+
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 
diff --git a/java/com/android/dialer/simulator/service/SimulatorServiceClient.java b/java/com/android/dialer/simulator/service/SimulatorServiceClient.java
index 7917dfb..e48dfab 100644
--- a/java/com/android/dialer/simulator/service/SimulatorServiceClient.java
+++ b/java/com/android/dialer/simulator/service/SimulatorServiceClient.java
@@ -45,8 +45,6 @@
     }
   }
 
-  private void onServiceDisconnected() {}
-
   static class SimulatorServiceConnection implements ServiceConnection {
 
     private SimulatorServiceClient client;
@@ -60,7 +58,6 @@
 
     @Override
     public void onServiceDisconnected(ComponentName name) {
-      client.onServiceDisconnected();
     }
 
     void bindToClient(SimulatorServiceClient client) {
diff --git a/java/com/android/dialer/smartdial/SmartDialCursorLoader.java b/java/com/android/dialer/smartdial/SmartDialCursorLoader.java
index 314bbd6..72aa8da 100644
--- a/java/com/android/dialer/smartdial/SmartDialCursorLoader.java
+++ b/java/com/android/dialer/smartdial/SmartDialCursorLoader.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2013 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -29,6 +30,7 @@
 import com.android.dialer.database.DialerDatabaseHelper.ContactNumber;
 import com.android.dialer.smartdial.util.SmartDialNameMatcher;
 import com.android.dialer.util.PermissionsUtil;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -229,14 +231,14 @@
       final List<String> projectionList =
           new ArrayList<>(Arrays.asList(PROJECTION_PRIMARY_INTERNAL));
       projectionList.add(Phone.CARRIER_PRESENCE); // 9
-      PROJECTION_PRIMARY = projectionList.toArray(new String[projectionList.size()]);
+      PROJECTION_PRIMARY = projectionList.toArray(new String[0]);
     }
 
     static {
       final List<String> projectionList =
           new ArrayList<>(Arrays.asList(PROJECTION_ALTERNATIVE_INTERNAL));
       projectionList.add(Phone.CARRIER_PRESENCE); // 9
-      PROJECTION_ALTERNATIVE = projectionList.toArray(new String[projectionList.size()]);
+      PROJECTION_ALTERNATIVE = projectionList.toArray(new String[0]);
     }
   }
 }
diff --git a/java/com/android/dialer/smartdial/util/SmartDialMatchPosition.java b/java/com/android/dialer/smartdial/util/SmartDialMatchPosition.java
index db317ae..3f2f2e5 100644
--- a/java/com/android/dialer/smartdial/util/SmartDialMatchPosition.java
+++ b/java/com/android/dialer/smartdial/util/SmartDialMatchPosition.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2012 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,6 +18,7 @@
 package com.android.dialer.smartdial.util;
 
 import com.android.dialer.common.LogUtil;
+
 import java.util.ArrayList;
 
 /**
diff --git a/java/com/android/dialer/smartdial/util/SmartDialNameMatcher.java b/java/com/android/dialer/smartdial/util/SmartDialNameMatcher.java
index ae0a7c4..d876856 100644
--- a/java/com/android/dialer/smartdial/util/SmartDialNameMatcher.java
+++ b/java/com/android/dialer/smartdial/util/SmartDialNameMatcher.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2012 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,6 +24,7 @@
 
 import com.android.dialer.smartdial.map.CompositeSmartDialMap;
 import com.android.dialer.smartdial.util.SmartDialPrefix.PhoneNumberTokens;
+
 import java.util.ArrayList;
 
 /**
@@ -262,7 +264,7 @@
     // positions
     int seperatorCount = 0;
 
-    ArrayList<SmartDialMatchPosition> partial = new ArrayList<SmartDialMatchPosition>();
+    ArrayList<SmartDialMatchPosition> partial = new ArrayList<>();
     // Keep going until we reach the end of displayName
     while (nameStart < nameLength && queryStart < queryLength) {
       char ch = displayName.charAt(nameStart);
diff --git a/java/com/android/dialer/smartdial/util/SmartDialPrefix.java b/java/com/android/dialer/smartdial/util/SmartDialPrefix.java
index 0089fd4..74d7479 100644
--- a/java/com/android/dialer/smartdial/util/SmartDialPrefix.java
+++ b/java/com/android/dialer/smartdial/util/SmartDialPrefix.java
@@ -65,8 +65,6 @@
   /** Set of supported country codes in front of the phone number. */
   private static Set<String> countryCodes = null;
 
-  private static boolean nanpInitialized = false;
-
   /** Initializes the Nanp settings, and finds out whether user is in a NANP region. */
   public static void initializeNanpSettings(Context context) {
     final TelephonyManager manager =
@@ -88,7 +86,6 @@
     }
     /** Queries the NANP country list to find out whether user is in a NANP region. */
     userInNanpRegion = isCountryNanp(userSimCountryCode);
-    nanpInitialized = true;
   }
 
   /**
@@ -302,7 +299,7 @@
   }
 
   private static Set<String> initCountryCodes() {
-    final HashSet<String> result = new HashSet<String>();
+    final HashSet<String> result = new HashSet<>();
     result.add("1");
     result.add("7");
     result.add("20");
@@ -540,7 +537,7 @@
   }
 
   private static Set<String> initNanpCountries() {
-    final HashSet<String> result = new HashSet<String>();
+    final HashSet<String> result = new HashSet<>();
     result.add("US"); // United States
     result.add("CA"); // Canada
     result.add("AS"); // American Samoa
diff --git a/java/com/android/dialer/speeddial/DisambigDialog.java b/java/com/android/dialer/speeddial/DisambigDialog.java
index e4fe34b..dbfce63 100644
--- a/java/com/android/dialer/speeddial/DisambigDialog.java
+++ b/java/com/android/dialer/speeddial/DisambigDialog.java
@@ -30,6 +30,7 @@
 
 import androidx.annotation.WorkerThread;
 import androidx.appcompat.app.AlertDialog;
+import androidx.core.content.res.ResourcesCompat;
 import androidx.fragment.app.DialogFragment;
 import androidx.fragment.app.FragmentManager;
 
@@ -87,8 +88,8 @@
   public void onResume() {
     super.onResume();
     getDialog().getWindow().setBackgroundDrawable(
-            getActivity().getResources().getDrawable(R.drawable.dialog_background,
-                    getActivity().getTheme()));
+            ResourcesCompat.getDrawable(requireActivity().getResources(),
+                    R.drawable.dialog_background, requireActivity().getTheme()));
   }
 
   @Override
diff --git a/java/com/android/dialer/speeddial/FavoritesViewHolder.java b/java/com/android/dialer/speeddial/FavoritesViewHolder.java
index 2f43d81..74cc4e4 100644
--- a/java/com/android/dialer/speeddial/FavoritesViewHolder.java
+++ b/java/com/android/dialer/speeddial/FavoritesViewHolder.java
@@ -36,12 +36,12 @@
 import com.android.dialer.glidephotomanager.PhotoInfo;
 import com.android.dialer.speeddial.database.SpeedDialEntry.Channel;
 import com.android.dialer.speeddial.draghelper.SpeedDialFavoritesViewHolderOnTouchListener;
-import com.android.dialer.speeddial.draghelper.SpeedDialFavoritesViewHolderOnTouchListener.OnTouchFinishCallback;
 import com.android.dialer.speeddial.loader.SpeedDialUiItem;
 
 /** ViewHolder for starred/favorite contacts in {@link SpeedDialFragment}. */
-public class FavoritesViewHolder extends RecyclerView.ViewHolder
-    implements OnClickListener, OnLongClickListener, OnTouchFinishCallback {
+public class FavoritesViewHolder extends RecyclerView.ViewHolder implements
+        OnClickListener, OnLongClickListener,
+        SpeedDialFavoritesViewHolderOnTouchListener.OnTouchFinishCallback {
 
   private final FavoriteContactsListener listener;
 
diff --git a/java/com/android/dialer/speeddial/SpeedDialAdapter.java b/java/com/android/dialer/speeddial/SpeedDialAdapter.java
index de0172f..2404c7f 100644
--- a/java/com/android/dialer/speeddial/SpeedDialAdapter.java
+++ b/java/com/android/dialer/speeddial/SpeedDialAdapter.java
@@ -70,7 +70,8 @@
   private static final float IN_REMOVE_VIEW_ALPHA = 0.5f;
 
   @Retention(RetentionPolicy.SOURCE)
-  @IntDef({RowType.STARRED_HEADER, RowType.SUGGESTION_HEADER, RowType.STARRED, RowType.SUGGESTION})
+  @IntDef({RowType.REMOVE_VIEW, RowType.STARRED_HEADER, RowType.SUGGESTION_HEADER, RowType.STARRED,
+          RowType.SUGGESTION})
   @interface RowType {
     int REMOVE_VIEW = 0;
     int STARRED_HEADER = 1;
diff --git a/java/com/android/dialer/speeddial/SpeedDialFragment.java b/java/com/android/dialer/speeddial/SpeedDialFragment.java
index 462f817..0951d7e 100644
--- a/java/com/android/dialer/speeddial/SpeedDialFragment.java
+++ b/java/com/android/dialer/speeddial/SpeedDialFragment.java
@@ -195,7 +195,7 @@
     recyclerView.setAdapter(adapter);
 
     // Setup drag and drop touch helper
-    ItemTouchHelper.Callback callback = new SpeedDialItemTouchHelperCallback(getContext(), adapter);
+    ItemTouchHelper.Callback callback = new SpeedDialItemTouchHelperCallback(adapter);
     ItemTouchHelper touchHelper = new ItemTouchHelper(callback);
     touchHelper.attachToRecyclerView(recyclerView);
     adapter.setItemTouchHelper(touchHelper);
diff --git a/java/com/android/dialer/speeddial/database/SpeedDialEntry.java b/java/com/android/dialer/speeddial/database/SpeedDialEntry.java
index a2dceb5..132a283 100644
--- a/java/com/android/dialer/speeddial/database/SpeedDialEntry.java
+++ b/java/com/android/dialer/speeddial/database/SpeedDialEntry.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,6 +24,7 @@
 
 import com.google.auto.value.AutoValue;
 import com.google.common.base.Optional;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 
diff --git a/java/com/android/dialer/speeddial/database/SpeedDialEntryDatabaseHelper.java b/java/com/android/dialer/speeddial/database/SpeedDialEntryDatabaseHelper.java
index caba77f..f84cbab 100644
--- a/java/com/android/dialer/speeddial/database/SpeedDialEntryDatabaseHelper.java
+++ b/java/com/android/dialer/speeddial/database/SpeedDialEntryDatabaseHelper.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,12 +23,14 @@
 import android.database.sqlite.SQLiteDatabase;
 import android.database.sqlite.SQLiteOpenHelper;
 import android.text.TextUtils;
+
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.database.Selection;
 import com.android.dialer.speeddial.database.SpeedDialEntry.Channel;
 import com.google.common.base.Optional;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
+
 import java.util.ArrayList;
 import java.util.List;
 
diff --git a/java/com/android/dialer/speeddial/draghelper/SpeedDialItemTouchHelperCallback.java b/java/com/android/dialer/speeddial/draghelper/SpeedDialItemTouchHelperCallback.java
index 194fa7b..07ade72 100644
--- a/java/com/android/dialer/speeddial/draghelper/SpeedDialItemTouchHelperCallback.java
+++ b/java/com/android/dialer/speeddial/draghelper/SpeedDialItemTouchHelperCallback.java
@@ -17,7 +17,6 @@
 
 package com.android.dialer.speeddial.draghelper;
 
-import android.content.Context;
 import android.graphics.Canvas;
 
 import androidx.annotation.NonNull;
@@ -30,7 +29,6 @@
 public class SpeedDialItemTouchHelperCallback extends ItemTouchHelper.Callback {
 
   private final ItemTouchHelperAdapter adapter;
-  private final Context context;
 
   // When dragged item is in removeView, onMove() and onChildDraw() are called in turn. This
   // behavior changes when dragged item entering/leaving removeView. The boolean field
@@ -38,8 +36,7 @@
   private boolean movedOverRemoveView;
   private boolean inRemoveView;
 
-  public SpeedDialItemTouchHelperCallback(Context context, ItemTouchHelperAdapter adapter) {
-    this.context = context;
+  public SpeedDialItemTouchHelperCallback(ItemTouchHelperAdapter adapter) {
     this.adapter = adapter;
   }
 
@@ -56,8 +53,8 @@
   }
 
   @Override
-  public boolean canDropOver(
-          @NonNull RecyclerView recyclerView, @NonNull ViewHolder current, @NonNull ViewHolder target) {
+  public boolean canDropOver(@NonNull RecyclerView recyclerView, @NonNull ViewHolder current,
+                             @NonNull ViewHolder target) {
     return adapter.canDropOver(target);
   }
 
diff --git a/java/com/android/dialer/speeddial/loader/SpeedDialUiItem.java b/java/com/android/dialer/speeddial/loader/SpeedDialUiItem.java
index 448d73a..59f9d53 100644
--- a/java/com/android/dialer/speeddial/loader/SpeedDialUiItem.java
+++ b/java/com/android/dialer/speeddial/loader/SpeedDialUiItem.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -35,6 +36,7 @@
 import com.google.auto.value.AutoValue;
 import com.google.common.base.Optional;
 import com.google.common.collect.ImmutableList;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
diff --git a/java/com/android/dialer/speeddial/loader/SpeedDialUiItemMutator.java b/java/com/android/dialer/speeddial/loader/SpeedDialUiItemMutator.java
index 3e1e444..47d102a 100644
--- a/java/com/android/dialer/speeddial/loader/SpeedDialUiItemMutator.java
+++ b/java/com/android/dialer/speeddial/loader/SpeedDialUiItemMutator.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -30,7 +31,6 @@
 import android.util.ArrayMap;
 import android.util.ArraySet;
 
-import androidx.annotation.MainThread;
 import androidx.annotation.WorkerThread;
 
 import com.android.dialer.common.Assert;
@@ -57,11 +57,13 @@
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListeningExecutorService;
 import com.google.common.util.concurrent.MoreExecutors;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
+
 import javax.inject.Inject;
 import javax.inject.Singleton;
 
diff --git a/java/com/android/dialer/speeddial/loader/UiItemLoaderComponent.java b/java/com/android/dialer/speeddial/loader/UiItemLoaderComponent.java
index 8529084..c655611 100644
--- a/java/com/android/dialer/speeddial/loader/UiItemLoaderComponent.java
+++ b/java/com/android/dialer/speeddial/loader/UiItemLoaderComponent.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,7 +18,9 @@
 package com.android.dialer.speeddial.loader;
 
 import android.content.Context;
+
 import com.android.dialer.inject.HasRootComponent;
+
 import dagger.Subcomponent;
 
 /** Dagger component for the speeddial/loader package. */
diff --git a/java/com/android/dialer/storage/StorageComponent.java b/java/com/android/dialer/storage/StorageComponent.java
index 4754cc6..109ea09 100644
--- a/java/com/android/dialer/storage/StorageComponent.java
+++ b/java/com/android/dialer/storage/StorageComponent.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,8 +19,10 @@
 
 import android.content.Context;
 import android.content.SharedPreferences;
+
 import com.android.dialer.inject.HasRootComponent;
 import com.android.dialer.inject.IncludeInDialerRoot;
+
 import dagger.Subcomponent;
 
 /** Dagger component for storage. */
diff --git a/java/com/android/dialer/telecom/TelecomCallUtil.java b/java/com/android/dialer/telecom/TelecomCallUtil.java
index 482c868..600ed6f 100644
--- a/java/com/android/dialer/telecom/TelecomCallUtil.java
+++ b/java/com/android/dialer/telecom/TelecomCallUtil.java
@@ -20,6 +20,7 @@
 import android.net.Uri;
 import android.telecom.Call;
 import android.telephony.PhoneNumberUtils;
+import android.telephony.TelephonyManager;
 import android.text.TextUtils;
 
 import androidx.annotation.NonNull;
@@ -39,10 +40,10 @@
 public class TelecomCallUtil {
 
   /** Returns Whether the call handle is an emergency number. */
-  public static boolean isEmergencyCall(@NonNull Call call) {
+  public static boolean isEmergencyCall(TelephonyManager telephonyManager, @NonNull Call call) {
     Assert.isNotNull(call);
     Uri handle = call.getDetails().getHandle();
-    return PhoneNumberUtils.isEmergencyNumber(handle == null ? "" : handle.getSchemeSpecificPart());
+    return telephonyManager.isEmergencyNumber(handle == null ? "" : handle.getSchemeSpecificPart());
   }
 
   /**
diff --git a/java/com/android/dialer/telecom/TelecomUtil.java b/java/com/android/dialer/telecom/TelecomUtil.java
index 6e21860..b71a007 100644
--- a/java/com/android/dialer/telecom/TelecomUtil.java
+++ b/java/com/android/dialer/telecom/TelecomUtil.java
@@ -17,8 +17,8 @@
 
 package com.android.dialer.telecom;
 
-import android.app.role.RoleManager;
 import android.Manifest.permission;
+import android.app.role.RoleManager;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
diff --git a/java/com/android/dialer/theme/base/ThemeComponent.java b/java/com/android/dialer/theme/base/ThemeComponent.java
index d906761..5025660 100644
--- a/java/com/android/dialer/theme/base/ThemeComponent.java
+++ b/java/com/android/dialer/theme/base/ThemeComponent.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,8 +18,10 @@
 package com.android.dialer.theme.base;
 
 import android.content.Context;
+
 import com.android.dialer.inject.HasRootComponent;
 import com.android.dialer.inject.IncludeInDialerRoot;
+
 import dagger.Subcomponent;
 
 /** Component for Theme. */
diff --git a/java/com/android/dialer/theme/base/impl/AospThemeImpl.java b/java/com/android/dialer/theme/base/impl/AospThemeImpl.java
index 0d9d199..9df5666 100644
--- a/java/com/android/dialer/theme/base/impl/AospThemeImpl.java
+++ b/java/com/android/dialer/theme/base/impl/AospThemeImpl.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -27,6 +28,7 @@
 import com.android.dialer.common.Assert;
 import com.android.dialer.theme.base.R;
 import com.android.dialer.theme.base.Theme;
+
 import javax.inject.Singleton;
 
 /** Utility for fetching */
diff --git a/java/com/android/dialer/theme/base/impl/AospThemeModule.java b/java/com/android/dialer/theme/base/impl/AospThemeModule.java
index 7070932..5b67185 100644
--- a/java/com/android/dialer/theme/base/impl/AospThemeModule.java
+++ b/java/com/android/dialer/theme/base/impl/AospThemeModule.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,8 +18,10 @@
 package com.android.dialer.theme.base.impl;
 
 import android.content.Context;
+
 import com.android.dialer.inject.ApplicationContext;
 import com.android.dialer.theme.base.Theme;
+
 import dagger.Module;
 import dagger.Provides;
 
diff --git a/java/com/android/dialer/util/CallUtil.java b/java/com/android/dialer/util/CallUtil.java
index 160a40f..c27612a 100644
--- a/java/com/android/dialer/util/CallUtil.java
+++ b/java/com/android/dialer/util/CallUtil.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,6 +23,7 @@
 import android.telecom.PhoneAccount;
 import android.telecom.PhoneAccountHandle;
 import android.telecom.TelecomManager;
+
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.phonenumberutil.PhoneNumberHelper;
 
@@ -93,6 +95,7 @@
   /**
    * Returns a list of phone accounts that are able to call to numbers with the supplied scheme
    */
+  @SuppressLint("MissingPermission")
   public static List<PhoneAccount> getCallCapablePhoneAccounts(Context context, String scheme) {
     if (!PermissionsUtil.hasPermission(context, android.Manifest.permission.READ_PHONE_STATE)) {
       return null;
diff --git a/java/com/android/dialer/util/DialerUtils.java b/java/com/android/dialer/util/DialerUtils.java
index b877619..0b9b8e5 100644
--- a/java/com/android/dialer/util/DialerUtils.java
+++ b/java/com/android/dialer/util/DialerUtils.java
@@ -20,8 +20,6 @@
 import android.app.AlertDialog;
 import android.content.ActivityNotFoundException;
 import android.content.Context;
-import android.content.DialogInterface;
-import android.content.DialogInterface.OnClickListener;
 import android.content.Intent;
 import android.content.res.TypedArray;
 import android.graphics.Point;
@@ -40,6 +38,7 @@
 import com.android.dialer.R;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.telecom.TelecomUtil;
+
 import java.util.Iterator;
 
 /** General purpose utility methods for the Dialer. */
diff --git a/java/com/android/dialer/util/EmergencyCallUtil.java b/java/com/android/dialer/util/EmergencyCallUtil.java
index cbcddee..ed0b18a 100644
--- a/java/com/android/dialer/util/EmergencyCallUtil.java
+++ b/java/com/android/dialer/util/EmergencyCallUtil.java
@@ -56,7 +56,7 @@
       return false;
     }
 
-    Long lastEmergencyCallTime = getLastEmergencyCallTimeMillis(context);
+    long lastEmergencyCallTime = getLastEmergencyCallTimeMillis(context);
     if (lastEmergencyCallTime == 0) {
       return false;
     }
diff --git a/java/com/android/dialer/util/ExpirableCache.java b/java/com/android/dialer/util/ExpirableCache.java
index ba3951e..2e6de2d 100644
--- a/java/com/android/dialer/util/ExpirableCache.java
+++ b/java/com/android/dialer/util/ExpirableCache.java
@@ -18,7 +18,9 @@
 package com.android.dialer.util;
 
 import android.util.LruCache;
+
 import java.util.concurrent.atomic.AtomicInteger;
+
 import javax.annotation.concurrent.Immutable;
 import javax.annotation.concurrent.ThreadSafe;
 
@@ -120,7 +122,7 @@
    * @throws IllegalArgumentException if the cache is not empty
    */
   public static <K, V> ExpirableCache<K, V> create(LruCache<K, CachedValue<V>> cache) {
-    return new ExpirableCache<K, V>(cache);
+    return new ExpirableCache<>(cache);
   }
 
   /**
@@ -131,7 +133,7 @@
    * @return the newly created expirable cache
    */
   public static <K, V> ExpirableCache<K, V> create(int maxSize) {
-    return create(new LruCache<K, CachedValue<V>>(maxSize));
+    return create(new LruCache<>(maxSize));
   }
 
   /**
@@ -211,7 +213,7 @@
    * <p>Implementation of {@link LruCache#create(K)} can use this method to create a new entry.
    */
   public CachedValue<V> newCachedValue(V value) {
-    return new GenerationalCachedValue<V>(value, generation);
+    return new GenerationalCachedValue<>(value, generation);
   }
 
   /**
diff --git a/java/com/android/dialer/util/PermissionsUtil.java b/java/com/android/dialer/util/PermissionsUtil.java
index 13fdbdd..3844380 100644
--- a/java/com/android/dialer/util/PermissionsUtil.java
+++ b/java/com/android/dialer/util/PermissionsUtil.java
@@ -232,7 +232,7 @@
         permissionsCurrentlyDenied.add(permission);
       }
     }
-    return permissionsCurrentlyDenied.toArray(new String[permissionsCurrentlyDenied.size()]);
+    return permissionsCurrentlyDenied.toArray(new String[0]);
   }
 
   /**
diff --git a/java/com/android/dialer/util/UriUtils.java b/java/com/android/dialer/util/UriUtils.java
index c4308a8..b1a02f7 100644
--- a/java/com/android/dialer/util/UriUtils.java
+++ b/java/com/android/dialer/util/UriUtils.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2011 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,6 +19,7 @@
 
 import android.net.Uri;
 import android.provider.ContactsContract;
+
 import java.util.List;
 
 /** Utility methods for dealing with URIs. */
diff --git a/java/com/android/dialer/voicemail/listui/error/VoicemailErrorAlert.java b/java/com/android/dialer/voicemail/listui/error/VoicemailErrorAlert.java
index 7e0ad37..98b5690 100644
--- a/java/com/android/dialer/voicemail/listui/error/VoicemailErrorAlert.java
+++ b/java/com/android/dialer/voicemail/listui/error/VoicemailErrorAlert.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,10 +22,12 @@
 import android.view.View;
 import android.widget.ImageView;
 import android.widget.TextView;
+
 import com.android.dialer.app.alert.AlertManager;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.voicemail.listui.error.VoicemailErrorMessage.Action;
+
 import java.util.List;
 
 /**
diff --git a/java/com/android/dialer/voicemail/listui/error/VoicemailErrorMessage.java b/java/com/android/dialer/voicemail/listui/error/VoicemailErrorMessage.java
index c73a563..469a9de 100644
--- a/java/com/android/dialer/voicemail/listui/error/VoicemailErrorMessage.java
+++ b/java/com/android/dialer/voicemail/listui/error/VoicemailErrorMessage.java
@@ -36,6 +36,7 @@
 import com.android.dialer.voicemail.settings.VoicemailChangePinActivity;
 import com.android.voicemail.VoicemailClient;
 import com.android.voicemail.VoicemailComponent;
+
 import java.util.Arrays;
 import java.util.List;
 
diff --git a/java/com/android/dialer/voicemail/listui/error/VoicemailStatus.java b/java/com/android/dialer/voicemail/listui/error/VoicemailStatus.java
index 148d350..ccf631a 100644
--- a/java/com/android/dialer/voicemail/listui/error/VoicemailStatus.java
+++ b/java/com/android/dialer/voicemail/listui/error/VoicemailStatus.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,6 +17,7 @@
 
 package com.android.dialer.voicemail.listui.error;
 
+import android.annotation.SuppressLint;
 import android.content.ComponentName;
 import android.content.Context;
 import android.database.Cursor;
@@ -122,6 +124,7 @@
     isAirplaneMode = builder.isAirplaneMode;
   }
 
+  @SuppressLint("MissingPermission")
   private static int getNotificationChannelStateFormTelephony(
       Context context, PhoneAccountHandle phoneAccountHandle) {
     TelephonyManager telephonyManager =
diff --git a/java/com/android/dialer/voicemail/listui/error/VoicemailStatusWorker.java b/java/com/android/dialer/voicemail/listui/error/VoicemailStatusWorker.java
index 5096da2..4466409 100644
--- a/java/com/android/dialer/voicemail/listui/error/VoicemailStatusWorker.java
+++ b/java/com/android/dialer/voicemail/listui/error/VoicemailStatusWorker.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -26,6 +27,7 @@
 import com.android.dialer.telecom.TelecomUtil;
 import com.android.dialer.voicemailstatus.VoicemailStatusQuery;
 import com.android.voicemail.VoicemailComponent;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -55,7 +57,7 @@
                 Status.CONTENT_URI,
                 VoicemailStatusQuery.getProjection(),
                 where.toString(),
-                selectionArgs.toArray(new String[selectionArgs.size()]),
+                selectionArgs.toArray(new String[0]),
                 null)) {
       if (cursor == null) {
         return statuses;
diff --git a/java/com/android/dialer/voicemail/listui/error/VoicemailTosMessageCreator.java b/java/com/android/dialer/voicemail/listui/error/VoicemailTosMessageCreator.java
index 1ce09dd..7826e9d 100644
--- a/java/com/android/dialer/voicemail/listui/error/VoicemailTosMessageCreator.java
+++ b/java/com/android/dialer/voicemail/listui/error/VoicemailTosMessageCreator.java
@@ -20,7 +20,6 @@
 import android.app.AlertDialog;
 import android.content.ComponentName;
 import android.content.Context;
-import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.telecom.PhoneAccountHandle;
@@ -32,8 +31,6 @@
 import android.text.style.AlignmentSpan;
 import android.text.style.TextAppearanceSpan;
 import android.text.style.URLSpan;
-import android.view.View;
-import android.view.View.OnClickListener;
 
 import androidx.annotation.Nullable;
 import androidx.preference.PreferenceManager;
diff --git a/java/com/android/dialer/voicemail/listui/error/Vvm3VoicemailMessageCreator.java b/java/com/android/dialer/voicemail/listui/error/Vvm3VoicemailMessageCreator.java
index 9da10e9..c4910ae 100644
--- a/java/com/android/dialer/voicemail/listui/error/Vvm3VoicemailMessageCreator.java
+++ b/java/com/android/dialer/voicemail/listui/error/Vvm3VoicemailMessageCreator.java
@@ -21,8 +21,6 @@
 import android.content.Intent;
 import android.net.Uri;
 import android.provider.VoicemailContract.Status;
-import android.view.View;
-import android.view.View.OnClickListener;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
diff --git a/java/com/android/dialer/voicemail/settings/CurrentVoicemailGreetingActivity.java b/java/com/android/dialer/voicemail/settings/CurrentVoicemailGreetingActivity.java
index d112f63..5a73c03 100644
--- a/java/com/android/dialer/voicemail/settings/CurrentVoicemailGreetingActivity.java
+++ b/java/com/android/dialer/voicemail/settings/CurrentVoicemailGreetingActivity.java
@@ -18,18 +18,14 @@
 package com.android.dialer.voicemail.settings;
 
 import android.Manifest;
-import android.app.Activity;
 import android.content.Intent;
 import android.media.MediaPlayer;
 import android.os.Bundle;
+import android.view.View;
+import android.widget.TextView;
 
 import androidx.activity.result.ActivityResultLauncher;
 import androidx.activity.result.contract.ActivityResultContracts;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.ImageButton;
-import android.widget.TextView;
-
 import androidx.appcompat.app.AppCompatActivity;
 
 import com.android.dialer.R;
@@ -52,11 +48,6 @@
             }
           });
 
-  private ImageButton changeGreetingButton;
-  private ImageButton playButton;
-
-  private DialerToolbar currentVoicemailGreetingDialerToolbar;
-
   private int greetingDuration = -1;
 
   private MediaPlayer mediaPlayer;
@@ -72,30 +63,12 @@
     setContentView(R.layout.activity_current_voicemail_greeting);
 
     playbackDisplay = findViewById(R.id.current_voicemail_greeting_recording_display);
-    playbackProgressLabel = (TextView) findViewById(R.id.playback_progress_text_view);
-    currentVoicemailGreetingDialerToolbar = (DialerToolbar) findViewById(R.id.toolbar);
+    playbackProgressLabel = findViewById(R.id.playback_progress_text_view);
+    DialerToolbar currentVoicemailGreetingDialerToolbar = findViewById(R.id.toolbar);
 
     currentVoicemailGreetingDialerToolbar.setTitle(
         R.string.voicemail_change_greeting_preference_title);
 
-    changeGreetingButton = (ImageButton) findViewById(R.id.change_greeting_button);
-    changeGreetingButton.setOnClickListener(
-        new OnClickListener() {
-          @Override
-          public void onClick(View v) {
-            // TODO(sabowitz): Implement this in CL child beta01.
-          }
-        });
-
-    playButton = (ImageButton) findViewById(R.id.play_button);
-    playButton.setOnClickListener(
-        new OnClickListener() {
-          @Override
-          public void onClick(View v) {
-            // TODO(sabowitz): Finish implementing this in CL child beta02.
-          }
-        });
-
     displayCurrentVoicemailGreetingStatus();
   }
 
diff --git a/java/com/android/dialer/voicemail/settings/RecordVoicemailGreetingActivity.java b/java/com/android/dialer/voicemail/settings/RecordVoicemailGreetingActivity.java
index e67d763..f2a7ce7 100644
--- a/java/com/android/dialer/voicemail/settings/RecordVoicemailGreetingActivity.java
+++ b/java/com/android/dialer/voicemail/settings/RecordVoicemailGreetingActivity.java
@@ -17,7 +17,6 @@
 
 package com.android.dialer.voicemail.settings;
 
-import android.app.Activity;
 import android.os.Bundle;
 import android.view.View;
 import android.view.View.OnClickListener;
diff --git a/java/com/android/dialer/voicemail/settings/VoicemailChangePinActivity.java b/java/com/android/dialer/voicemail/settings/VoicemailChangePinActivity.java
index 0fe5c42..67caa41 100644
--- a/java/com/android/dialer/voicemail/settings/VoicemailChangePinActivity.java
+++ b/java/com/android/dialer/voicemail/settings/VoicemailChangePinActivity.java
@@ -20,7 +20,6 @@
 import android.app.AlertDialog;
 import android.app.ProgressDialog;
 import android.content.Context;
-import android.content.DialogInterface;
 import android.content.DialogInterface.OnDismissListener;
 import android.os.Bundle;
 import android.os.Handler;
diff --git a/java/com/android/dialer/voicemailstatus/VisualVoicemailEnabledChecker.java b/java/com/android/dialer/voicemailstatus/VisualVoicemailEnabledChecker.java
index 3e651c2..ca6c748 100644
--- a/java/com/android/dialer/voicemailstatus/VisualVoicemailEnabledChecker.java
+++ b/java/com/android/dialer/voicemailstatus/VisualVoicemailEnabledChecker.java
@@ -47,11 +47,9 @@
       "has_active_voicemail_provider";
   private final SharedPreferences prefs;
   private boolean hasActiveVoicemailProvider;
-  private Context context;
   private final Callback callback;
 
   public VisualVoicemailEnabledChecker(Context context, @Nullable Callback callback) {
-    this.context = context;
     this.callback = callback;
     prefs = PreferenceManager.getDefaultSharedPreferences(context);
     hasActiveVoicemailProvider = prefs.getBoolean(PREF_KEY_HAS_ACTIVE_VOICEMAIL_PROVIDER, false);
diff --git a/java/com/android/dialer/widget/FloatingActionButtonController.java b/java/com/android/dialer/widget/FloatingActionButtonController.java
index 136437c..2ab4f82 100644
--- a/java/com/android/dialer/widget/FloatingActionButtonController.java
+++ b/java/com/android/dialer/widget/FloatingActionButtonController.java
@@ -91,8 +91,8 @@
   public void changeIcon(Context context, @DrawableRes int iconId, String description) {
     if (this.fabIconId != iconId) {
       fab.setImageResource(iconId);
-      fab.setImageTintList(
-          ColorStateList.valueOf(context.getResources().getColor(android.R.color.white)));
+      fab.setImageTintList(ColorStateList.valueOf(context.getResources().getColor(
+              android.R.color.white, context.getTheme())));
       this.fabIconId = iconId;
     }
     if (!fab.getContentDescription().equals(description)) {
@@ -101,7 +101,8 @@
   }
 
   public void changeIconColor(Context context, @ColorRes int color) {
-    fab.setImageTintList(ColorStateList.valueOf(context.getResources().getColor(color)));
+    fab.setImageTintList(ColorStateList.valueOf(context.getResources().getColor(color,
+            context.getTheme())));
   }
 
   /**
diff --git a/java/com/android/dialer/widget/LinearColorBar.java b/java/com/android/dialer/widget/LinearColorBar.java
index 344cb5d..6aa996e 100644
--- a/java/com/android/dialer/widget/LinearColorBar.java
+++ b/java/com/android/dialer/widget/LinearColorBar.java
@@ -1,6 +1,7 @@
 /*
  * Copyright (C) 2011 The Android Open Source Project
  * Copyright (C) 2013 Android Open Kang Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,13 +21,10 @@
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.Canvas;
-import android.graphics.LinearGradient;
 import android.graphics.Paint;
 import android.graphics.Path;
 import android.graphics.Rect;
-import android.graphics.Shader;
 import android.util.AttributeSet;
-import android.util.DisplayMetrics;
 import android.widget.LinearLayout;
 
 import com.android.dialer.R;
@@ -60,22 +58,16 @@
     for (int i = 0; i < n; i++) {
       int attr = a.getIndex(i);
 
-      switch (attr) {
-        case R.styleable.LinearColorBar_backgroundColor:
-          mBackgroundColor = a.getColor(attr, 0);
-          break;
-        case R.styleable.LinearColorBar_redColor:
-          mRedColor = a.getColor(attr, 0);
-          break;
-        case R.styleable.LinearColorBar_greenColor:
-          mGreenColor = a.getColor(attr, 0);
-          break;
-        case R.styleable.LinearColorBar_blueColor:
-          mBlueColor = a.getColor(attr, 0);
-          break;
-        case R.styleable.LinearColorBar_orangeColor:
-          mOrangeColor = a.getColor(attr, 0);
-          break;
+      if (attr == R.styleable.LinearColorBar_backgroundColor) {
+        mBackgroundColor = a.getColor(attr, 0);
+      } else if (attr == R.styleable.LinearColorBar_redColor) {
+        mRedColor = a.getColor(attr, 0);
+      } else if (attr == R.styleable.LinearColorBar_greenColor) {
+        mGreenColor = a.getColor(attr, 0);
+      } else if (attr == R.styleable.LinearColorBar_blueColor) {
+        mBlueColor = a.getColor(attr, 0);
+      } else if (attr == R.styleable.LinearColorBar_orangeColor) {
+        mOrangeColor = a.getColor(attr, 0);
       }
     }
 
diff --git a/java/com/android/dialer/widget/MessageFragment.java b/java/com/android/dialer/widget/MessageFragment.java
index 3d2eb3e..f8d1306 100644
--- a/java/com/android/dialer/widget/MessageFragment.java
+++ b/java/com/android/dialer/widget/MessageFragment.java
@@ -17,6 +17,7 @@
 
 package com.android.dialer.widget;
 
+import android.annotation.SuppressLint;
 import android.os.Bundle;
 import android.text.Editable;
 import android.text.InputFilter;
@@ -106,6 +107,7 @@
     return view;
   }
 
+  @SuppressLint("CheckResult")
   @Override
   public void onClick(View view) {
     if (view == sendMessageContainer) {
@@ -116,7 +118,7 @@
       customMessage.setText(((TextView) view).getText());
       customMessage.setSelection(customMessage.getText().length());
     } else {
-      Assert.fail("Unknown view clicked");
+      Assert.createUnsupportedOperationFailException("Unknown view clicked");
     }
   }
 
@@ -133,7 +135,6 @@
     if (charLimit != NO_CHAR_LIMIT) {
       remainingChar.setText(Integer.toString(charLimit - s.length()));
     }
-    getListener().onMessageFragmentAfterTextChange(s.toString());
   }
 
   @Override
@@ -187,7 +188,5 @@
   /** Interface for parent activity to implement to listen for important events. */
   public interface Listener {
     void onMessageFragmentSendMessage(String message);
-
-    void onMessageFragmentAfterTextChange(String message);
   }
 }
diff --git a/java/com/android/incallui/AccelerometerListener.java b/java/com/android/incallui/AccelerometerListener.java
index 8bd1515..3caa24b 100644
--- a/java/com/android/incallui/AccelerometerListener.java
+++ b/java/com/android/incallui/AccelerometerListener.java
@@ -25,6 +25,7 @@
 import android.os.Handler;
 import android.os.Looper;
 import android.os.Message;
+
 import com.android.dialer.common.LogUtil;
 
 /**
diff --git a/java/com/android/incallui/AudioRouteSelectorActivity.java b/java/com/android/incallui/AudioRouteSelectorActivity.java
index d55a6f0..2c84840 100644
--- a/java/com/android/incallui/AudioRouteSelectorActivity.java
+++ b/java/com/android/incallui/AudioRouteSelectorActivity.java
@@ -18,7 +18,6 @@
 package com.android.incallui;
 
 import android.os.Bundle;
-import android.telecom.CallAudioState;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
diff --git a/java/com/android/incallui/Bindings.java b/java/com/android/incallui/Bindings.java
index 9f42585..8cabda5 100644
--- a/java/com/android/incallui/Bindings.java
+++ b/java/com/android/incallui/Bindings.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,9 +18,11 @@
 package com.android.incallui;
 
 import android.content.Context;
+
 import com.android.incallui.bindings.InCallUiBindings;
 import com.android.incallui.bindings.InCallUiBindingsFactory;
 import com.android.incallui.bindings.InCallUiBindingsStub;
+
 import java.util.Objects;
 
 /** Accessor for the in call UI bindings. */
diff --git a/java/com/android/incallui/CallButtonPresenter.java b/java/com/android/incallui/CallButtonPresenter.java
index 5ac76aa..13b4977 100644
--- a/java/com/android/incallui/CallButtonPresenter.java
+++ b/java/com/android/incallui/CallButtonPresenter.java
@@ -21,7 +21,6 @@
 import android.content.Context;
 import android.content.SharedPreferences;
 import android.content.pm.PackageManager;
-import android.os.Bundle;
 import android.os.Trace;
 import android.telecom.CallAudioState;
 import android.telecom.PhoneAccountHandle;
@@ -292,7 +291,7 @@
 
   @Override
   public void showDialpadClicked(boolean checked) {
-    LogUtil.v("CallButtonPresenter", "show dialpad " + String.valueOf(checked));
+    LogUtil.v("CallButtonPresenter", "show dialpad " + checked);
     getActivity().showDialpadFragment(checked /* show */, true /* animate */);
   }
 
@@ -556,12 +555,6 @@
   }
 
   @Override
-  public void onSaveInstanceState(Bundle outState) {}
-
-  @Override
-  public void onRestoreInstanceState(Bundle savedInstanceState) {}
-
-  @Override
   public void onCameraPermissionGranted() {
     if (call != null) {
       updateButtonsState(call);
diff --git a/java/com/android/incallui/CallCardPresenter.java b/java/com/android/incallui/CallCardPresenter.java
index efcca39..44f4d37 100644
--- a/java/com/android/incallui/CallCardPresenter.java
+++ b/java/com/android/incallui/CallCardPresenter.java
@@ -21,7 +21,6 @@
 
 import android.Manifest;
 import android.content.Context;
-import android.content.Intent;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.graphics.drawable.Drawable;
@@ -96,13 +95,6 @@
    */
   private static final long ACCESSIBILITY_ANNOUNCEMENT_DELAY_MILLIS = 500;
 
-  /**
-   * Make it possible to not get location during an emergency call if the battery is too low, since
-   * doing so could trigger gps and thus potentially cause the phone to die in the middle of the
-   * call.
-   */
-  private static final long CONFIG_MIN_BATTERY_PERCENT_FOR_EMERGENCY_LOCATION_DEFAULT = 10;
-
   private final Context context;
   private final Handler handler = new Handler(Looper.getMainLooper());
 
@@ -505,28 +497,12 @@
   }
 
   @Override
-  public void onCallStateButtonClicked() {
-    Intent broadcastIntent = Bindings.get(context).getCallStateButtonBroadcastIntent(context);
-    if (broadcastIntent != null) {
-      LogUtil.v(
-          "CallCardPresenter.onCallStateButtonClicked",
-          "sending call state button broadcast: " + broadcastIntent);
-      context.sendBroadcast(broadcastIntent, Manifest.permission.READ_PHONE_STATE);
-    }
-  }
-
-  @Override
   public void onManageConferenceClicked() {
     InCallActivity activity =
         (InCallActivity) (inCallScreen.getInCallScreenFragment().getActivity());
     activity.showConferenceFragment(true);
   }
 
-  @Override
-  public void onShrinkAnimationComplete() {
-    InCallPresenter.getInstance().onShrinkAnimationComplete();
-  }
-
   private void maybeStartSearch(DialerCall call, boolean isPrimary) {
     // no need to start search for conference calls which show generic info.
     if (call != null && !call.isConferenceCall()) {
@@ -949,7 +925,7 @@
       return false;
     }
 
-    AccessibilityEvent event = AccessibilityEvent.obtain(AccessibilityEvent.TYPE_ANNOUNCEMENT);
+    AccessibilityEvent event = new AccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT);
     inCallScreen.dispatchPopulateAccessibilityEvent(event);
     View view = inCallScreen.getInCallScreenFragment().getView();
     view.getParent().requestSendAccessibilityEvent(view, event);
@@ -1025,7 +1001,7 @@
     private final boolean isPrimary;
 
     public ContactLookupCallback(CallCardPresenter callCardPresenter, boolean isPrimary) {
-      this.callCardPresenter = new WeakReference<CallCardPresenter>(callCardPresenter);
+      this.callCardPresenter = new WeakReference<>(callCardPresenter);
       this.isPrimary = isPrimary;
     }
 
diff --git a/java/com/android/incallui/CallerInfo.java b/java/com/android/incallui/CallerInfo.java
index 3ab3a77..678bbfa 100644
--- a/java/com/android/incallui/CallerInfo.java
+++ b/java/com/android/incallui/CallerInfo.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2006 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -29,6 +30,7 @@
 import android.provider.ContactsContract.RawContacts;
 import android.telephony.PhoneNumberUtils;
 import android.text.TextUtils;
+
 import com.android.contacts.common.ContactsUtils;
 import com.android.contacts.common.ContactsUtils.UserType;
 import com.android.contacts.common.util.TelephonyManagerUtils;
diff --git a/java/com/android/incallui/CallerInfoAsyncQuery.java b/java/com/android/incallui/CallerInfoAsyncQuery.java
index 2ebcc95..506aaf0 100644
--- a/java/com/android/incallui/CallerInfoAsyncQuery.java
+++ b/java/com/android/incallui/CallerInfoAsyncQuery.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2006 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -41,6 +42,7 @@
 import com.android.dialer.phonenumbercache.ContactInfoHelper;
 import com.android.dialer.phonenumbercache.PhoneNumberCache;
 import com.android.dialer.phonenumberutil.PhoneNumberHelper;
+
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
@@ -163,7 +165,7 @@
     cw.countryIso = info.countryIso;
 
     // check to see if these are recognized numbers, and use shortcuts if we can.
-    if (PhoneNumberHelper.isLocalEmergencyNumber(context, info.phoneNumber)) {
+    if (PhoneNumberHelper.isEmergencyNumber(context, info.phoneNumber)) {
       cw.event = EVENT_EMERGENCY_NUMBER;
     } else if (info.isVoiceMailNumber()) {
       cw.event = EVENT_VOICEMAIL_NUMBER;
@@ -439,7 +441,7 @@
         Log.d(
             this,
             "notifying listener: "
-                + cw.listener.getClass().toString()
+                + cw.listener.getClass()
                 + " for token: "
                 + token
                 + callerInfo);
diff --git a/java/com/android/incallui/CallerInfoUtils.java b/java/com/android/incallui/CallerInfoUtils.java
index 27cb6a8..9db57ca 100644
--- a/java/com/android/incallui/CallerInfoUtils.java
+++ b/java/com/android/incallui/CallerInfoUtils.java
@@ -32,10 +32,11 @@
 import com.android.dialer.phonenumberutil.PhoneNumberHelper;
 import com.android.dialer.util.PermissionsUtil;
 import com.android.incallui.call.DialerCall;
-import java.util.Arrays;
 
 import org.lineageos.lib.phone.SensitivePhoneNumbers;
 
+import java.util.Arrays;
+
 /** Utility methods for contact and caller info related functionality */
 public class CallerInfoUtils {
 
diff --git a/java/com/android/incallui/ConferenceManagerFragment.java b/java/com/android/incallui/ConferenceManagerFragment.java
index 7978d57..ea52c9c 100644
--- a/java/com/android/incallui/ConferenceManagerFragment.java
+++ b/java/com/android/incallui/ConferenceManagerFragment.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2013 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -28,6 +29,7 @@
 import com.android.incallui.baseui.BaseFragment;
 import com.android.incallui.call.CallList;
 import com.android.incallui.call.DialerCall;
+
 import java.util.List;
 
 /** Fragment that allows the user to manage a conference call. */
@@ -59,7 +61,7 @@
       LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
     final View parent = inflater.inflate(R.layout.conference_manager_fragment, container, false);
 
-    conferenceParticipantList = (ListView) parent.findViewById(R.id.participantList);
+    conferenceParticipantList = parent.findViewById(R.id.participantList);
     contactPhotoManager = ContactPhotoManager.getInstance(getActivity().getApplicationContext());
 
     return parent;
diff --git a/java/com/android/incallui/ConferenceManagerPresenter.java b/java/com/android/incallui/ConferenceManagerPresenter.java
index 226741d..97a43cb 100644
--- a/java/com/android/incallui/ConferenceManagerPresenter.java
+++ b/java/com/android/incallui/ConferenceManagerPresenter.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2013 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -25,6 +26,7 @@
 import com.android.incallui.baseui.Ui;
 import com.android.incallui.call.CallList;
 import com.android.incallui.call.DialerCall;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -57,7 +59,7 @@
         final DialerCall call = callList.getActiveOrBackgroundCall();
         if (call != null && call.isConferenceCall()) {
           Log.v(
-              this, "Number of existing calls is " + String.valueOf(call.getChildCallIds().size()));
+              this, "Number of existing calls is " + call.getChildCallIds().size());
           update(callList);
         } else {
           InCallPresenter.getInstance().showConferenceCallManager(false);
@@ -117,7 +119,7 @@
       calls.add(callList.getCallById(callerId));
     }
 
-    Log.d(this, "Number of calls is " + String.valueOf(calls.size()));
+    Log.d(this, "Number of calls is " + calls.size());
 
     // Users can split out a call from the conference call if either the active call or the
     // holding call is empty. If both are filled, users can not split out another call.
diff --git a/java/com/android/incallui/ConferenceParticipantListAdapter.java b/java/com/android/incallui/ConferenceParticipantListAdapter.java
index 38e8e86..f6f68a9 100644
--- a/java/com/android/incallui/ConferenceParticipantListAdapter.java
+++ b/java/com/android/incallui/ConferenceParticipantListAdapter.java
@@ -47,8 +47,6 @@
 
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
diff --git a/java/com/android/incallui/ContactsAsyncHelper.java b/java/com/android/incallui/ContactsAsyncHelper.java
index fe30151..84a5563 100644
--- a/java/com/android/incallui/ContactsAsyncHelper.java
+++ b/java/com/android/incallui/ContactsAsyncHelper.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2008 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -31,6 +32,7 @@
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.DialerExecutor;
 import com.android.dialer.common.concurrent.DialerExecutorComponent;
+
 import java.io.IOException;
 import java.io.InputStream;
 
diff --git a/java/com/android/incallui/DialpadFragment.java b/java/com/android/incallui/DialpadFragment.java
index d47b9bc..147f5c0 100644
--- a/java/com/android/incallui/DialpadFragment.java
+++ b/java/com/android/incallui/DialpadFragment.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2013 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -30,7 +31,6 @@
 import android.view.ViewGroup;
 import android.widget.EditText;
 import android.widget.LinearLayout;
-import android.widget.TextView;
 
 import com.android.dialer.R;
 import com.android.dialer.common.LogUtil;
@@ -39,6 +39,7 @@
 import com.android.dialer.dialpadview.DialpadView;
 import com.android.incallui.DialpadPresenter.DialpadUi;
 import com.android.incallui.baseui.BaseFragment;
+
 import java.util.Map;
 
 /** Fragment for call control buttons */
@@ -48,7 +49,7 @@
   /** Hash Map to map a view id to a character */
   private static final Map<Integer, Character> displayMap = new ArrayMap<>();
 
-  /** Set up the static maps */
+  /* Set up the static maps */
   static {
     // Map the buttons to the display characters
     displayMap.put(R.id.one, '1');
@@ -137,9 +138,9 @@
     Context contextThemeWrapper = new ContextThemeWrapper(getActivity(), R.style.Dialer_ThemeBase);
     LayoutInflater layoutInflater = inflater.cloneInContext(contextThemeWrapper);
     final View parent = layoutInflater.inflate(R.layout.incall_dialpad_fragment, container, false);
-    dialpadView = (DialpadView) parent.findViewById(R.id.dialpad_view);
+    dialpadView = parent.findViewById(R.id.dialpad_view);
     dialpadView.setCanDigitsBeEdited(false);
-    dtmfDialerField = (EditText) parent.findViewById(R.id.digits);
+    dtmfDialerField = parent.findViewById(R.id.digits);
     if (dtmfDialerField != null) {
       LogUtil.i("DialpadFragment.onCreateView", "creating dtmfKeyListener");
       dtmfKeyListener = new DtmfKeyListener(getPresenter());
@@ -190,7 +191,7 @@
 
   /** Starts the slide up animation for the Dialpad keys when the Dialpad is revealed. */
   public void animateShowDialpad() {
-    final DialpadView dialpadView = (DialpadView) getView().findViewById(R.id.dialpad_view);
+    final DialpadView dialpadView = getView().findViewById(R.id.dialpad_view);
     dialpadView.animateShow();
   }
 
@@ -233,7 +234,7 @@
   private void configureKeypadListeners() {
     DialpadKeyButton dialpadKey;
     for (int i = 0; i < buttonIds.length; i++) {
-      dialpadKey = (DialpadKeyButton) dialpadView.findViewById(buttonIds[i]);
+      dialpadKey = dialpadView.findViewById(buttonIds[i]);
       dialpadKey.setOnKeyListener(this);
       dialpadKey.setOnClickListener(this);
       dialpadKey.setOnPressedListener(this);
diff --git a/java/com/android/incallui/DialpadPresenter.java b/java/com/android/incallui/DialpadPresenter.java
index e6fbdc2..c4a7106 100644
--- a/java/com/android/incallui/DialpadPresenter.java
+++ b/java/com/android/incallui/DialpadPresenter.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2013 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project 
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,6 +18,7 @@
 package com.android.incallui;
 
 import android.telephony.PhoneNumberUtils;
+
 import com.android.incallui.DialpadPresenter.DialpadUi;
 import com.android.incallui.baseui.Presenter;
 import com.android.incallui.baseui.Ui;
diff --git a/java/com/android/incallui/ExternalCallNotifier.java b/java/com/android/incallui/ExternalCallNotifier.java
index d1334f3..cdacd60 100644
--- a/java/com/android/incallui/ExternalCallNotifier.java
+++ b/java/com/android/incallui/ExternalCallNotifier.java
@@ -51,6 +51,7 @@
 import com.android.incallui.call.DialerCall;
 import com.android.incallui.call.DialerCallDelegate;
 import com.android.incallui.call.ExternalCallList;
+
 import java.util.Map;
 
 /**
@@ -264,14 +265,15 @@
               .build());
     }
 
-    /**
+    /*
      * This builder is used for the notification shown when the device is locked and the user has
      * set their notification settings to 'hide sensitive content' {@see
      * Notification.Builder#setPublicVersion}.
      */
     Notification.Builder publicBuilder = new Notification.Builder(context);
     publicBuilder.setSmallIcon(R.drawable.quantum_ic_call_vd_theme_24);
-    publicBuilder.setColor(ThemeComponent.get(context).theme().getColorCallNotificationBackground());
+    publicBuilder.setColor(
+            ThemeComponent.get(context).theme().getColorCallNotificationBackground());
     publicBuilder.setChannelId(NotificationChannelId.DEFAULT);
 
     builder.setPublicVersion(publicBuilder.build());
diff --git a/java/com/android/incallui/InCallCameraManager.java b/java/com/android/incallui/InCallCameraManager.java
index 2296afb..8bb7060 100644
--- a/java/com/android/incallui/InCallCameraManager.java
+++ b/java/com/android/incallui/InCallCameraManager.java
@@ -21,6 +21,7 @@
 import android.hardware.camera2.CameraAccessException;
 import android.hardware.camera2.CameraCharacteristics;
 import android.hardware.camera2.CameraManager;
+
 import java.util.Collections;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
@@ -29,7 +30,7 @@
 public class InCallCameraManager {
 
   private final Set<Listener> cameraSelectionListeners =
-      Collections.newSetFromMap(new ConcurrentHashMap<Listener, Boolean>(8, 0.9f, 1));
+      Collections.newSetFromMap(new ConcurrentHashMap<>(8, 0.9f, 1));
   /** The camera ID for the front facing camera. */
   private String frontFacingCameraId;
   /** The camera ID for the rear facing camera. */
diff --git a/java/com/android/incallui/InCallDndHandler.java b/java/com/android/incallui/InCallDndHandler.java
index 062ab34..5ea6eed 100644
--- a/java/com/android/incallui/InCallDndHandler.java
+++ b/java/com/android/incallui/InCallDndHandler.java
@@ -22,10 +22,10 @@
 
 import androidx.preference.PreferenceManager;
 
+import com.android.incallui.InCallPresenter.InCallState;
 import com.android.incallui.call.CallList;
 import com.android.incallui.call.DialerCall;
 import com.android.incallui.call.state.DialerCallState;
-import com.android.incallui.InCallPresenter.InCallState;
 
 public class InCallDndHandler implements InCallPresenter.InCallStateListener {
 
diff --git a/java/com/android/incallui/InCallOrientationEventListener.java b/java/com/android/incallui/InCallOrientationEventListener.java
index 1858f8e..8d5d072 100644
--- a/java/com/android/incallui/InCallOrientationEventListener.java
+++ b/java/com/android/incallui/InCallOrientationEventListener.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project 
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,6 +24,7 @@
 import androidx.annotation.IntDef;
 
 import com.android.dialer.common.LogUtil;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 
diff --git a/java/com/android/incallui/InCallPresenter.java b/java/com/android/incallui/InCallPresenter.java
index 77bf562..66ca448 100644
--- a/java/com/android/incallui/InCallPresenter.java
+++ b/java/com/android/incallui/InCallPresenter.java
@@ -17,6 +17,7 @@
 
 package com.android.incallui;
 
+import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.Intent;
 import android.graphics.Point;
@@ -44,8 +45,6 @@
 import androidx.annotation.Nullable;
 
 import com.android.contacts.common.compat.CallCompat;
-import com.android.dialer.CallConfiguration;
-import com.android.dialer.Mode;
 import com.android.dialer.R;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
@@ -96,20 +95,19 @@
    * resizing, 1 means we only expect a single thread to access the map so make only a single shard
    */
   private final Set<InCallStateListener> listeners =
-      Collections.newSetFromMap(new ConcurrentHashMap<InCallStateListener, Boolean>(8, 0.9f, 1));
+      Collections.newSetFromMap(new ConcurrentHashMap<>(8, 0.9f, 1));
 
   private final List<IncomingCallListener> incomingCallListeners = new CopyOnWriteArrayList<>();
   private final Set<InCallDetailsListener> detailsListeners =
-      Collections.newSetFromMap(new ConcurrentHashMap<InCallDetailsListener, Boolean>(8, 0.9f, 1));
+      Collections.newSetFromMap(new ConcurrentHashMap<>(8, 0.9f, 1));
   private final Set<CanAddCallListener> canAddCallListeners =
-      Collections.newSetFromMap(new ConcurrentHashMap<CanAddCallListener, Boolean>(8, 0.9f, 1));
+      Collections.newSetFromMap(new ConcurrentHashMap<>(8, 0.9f, 1));
   private final Set<InCallUiListener> inCallUiListeners =
-      Collections.newSetFromMap(new ConcurrentHashMap<InCallUiListener, Boolean>(8, 0.9f, 1));
+      Collections.newSetFromMap(new ConcurrentHashMap<>(8, 0.9f, 1));
   private final Set<InCallOrientationListener> orientationListeners =
-      Collections.newSetFromMap(
-          new ConcurrentHashMap<InCallOrientationListener, Boolean>(8, 0.9f, 1));
+      Collections.newSetFromMap(new ConcurrentHashMap<>(8, 0.9f, 1));
   private final Set<InCallEventListener> inCallEventListeners =
-      Collections.newSetFromMap(new ConcurrentHashMap<InCallEventListener, Boolean>(8, 0.9f, 1));
+      Collections.newSetFromMap(new ConcurrentHashMap<>(8, 0.9f, 1));
 
   private StatusBarNotifier statusBarNotifier;
   private ExternalCallNotifier externalCallNotifier;
@@ -1659,6 +1657,7 @@
     }
   }
 
+  @SuppressLint("MissingPermission")
   @Override
   public void onAudioStateChanged(CallAudioState audioState) {
     if (statusBarNotifier != null) {
diff --git a/java/com/android/incallui/InCallServiceImpl.java b/java/com/android/incallui/InCallServiceImpl.java
index 6ff1610..5d0df24 100644
--- a/java/com/android/incallui/InCallServiceImpl.java
+++ b/java/com/android/incallui/InCallServiceImpl.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2014 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,6 +24,7 @@
 import android.telecom.Call;
 import android.telecom.CallAudioState;
 import android.telecom.InCallService;
+
 import com.android.incallui.audiomode.AudioModeProvider;
 import com.android.incallui.call.CallList;
 import com.android.incallui.call.CallRecorder;
@@ -74,11 +76,6 @@
   }
 
   @Override
-  public void onCreate() {
-    super.onCreate();
-  }
-
-  @Override
   public IBinder onBind(Intent intent) {
     Trace.beginSection("InCallServiceImpl.onBind");
     final Context context = getApplicationContext();
diff --git a/java/com/android/incallui/InCallUIMaterialColorMapUtils.java b/java/com/android/incallui/InCallUIMaterialColorMapUtils.java
index 7c47e54..9e524a4 100644
--- a/java/com/android/incallui/InCallUIMaterialColorMapUtils.java
+++ b/java/com/android/incallui/InCallUIMaterialColorMapUtils.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,7 +20,7 @@
 import android.content.Context;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
-import android.telecom.PhoneAccount;
+
 import com.android.contacts.common.util.MaterialColorMapUtils;
 import com.android.dialer.R;
 import com.android.dialer.theme.base.ThemeComponent;
@@ -42,7 +43,6 @@
   /**
    * {@link Resources#getColor(int) used for compatibility
    */
-  @SuppressWarnings("deprecation")
   public static MaterialPalette getDefaultPrimaryAndSecondaryColors(Context context) {
     final int primaryColor = ThemeComponent.get(context).theme().getColorPrimary();
     final int secondaryColor = ThemeComponent.get(context).theme().getColorPrimaryDark();
diff --git a/java/com/android/incallui/InCallVibrationHandler.java b/java/com/android/incallui/InCallVibrationHandler.java
index cde882a..ffd8f69 100644
--- a/java/com/android/incallui/InCallVibrationHandler.java
+++ b/java/com/android/incallui/InCallVibrationHandler.java
@@ -27,12 +27,10 @@
 import android.os.VibratorManager;
 import android.telecom.DisconnectCause;
 
-import androidx.preference.PreferenceManager;
-
+import com.android.incallui.InCallPresenter.InCallState;
 import com.android.incallui.call.CallList;
 import com.android.incallui.call.DialerCall;
 import com.android.incallui.call.state.DialerCallState;
-import com.android.incallui.InCallPresenter.InCallState;
 
 public class InCallVibrationHandler extends Handler implements
     InCallPresenter.InCallStateListener {
diff --git a/java/com/android/incallui/Log.java b/java/com/android/incallui/Log.java
index c63eccb..33be91b 100644
--- a/java/com/android/incallui/Log.java
+++ b/java/com/android/incallui/Log.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2013 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,7 +20,9 @@
 import android.net.Uri;
 import android.telecom.PhoneAccount;
 import android.telephony.PhoneNumberUtils;
+
 import com.android.dialer.common.LogUtil;
+
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 
diff --git a/java/com/android/incallui/MotorolaInCallUiNotifier.java b/java/com/android/incallui/MotorolaInCallUiNotifier.java
index 2377a55..4291df9 100644
--- a/java/com/android/incallui/MotorolaInCallUiNotifier.java
+++ b/java/com/android/incallui/MotorolaInCallUiNotifier.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * This file is derived in part from code issued under the following license.
  *
@@ -20,6 +21,7 @@
 
 import android.content.Context;
 import android.content.Intent;
+
 import com.android.dialer.common.LogUtil;
 import com.android.incallui.InCallPresenter.InCallState;
 import com.android.incallui.InCallPresenter.InCallStateListener;
diff --git a/java/com/android/incallui/NotificationBroadcastReceiver.java b/java/com/android/incallui/NotificationBroadcastReceiver.java
index 1d9c614..4c2977d 100644
--- a/java/com/android/incallui/NotificationBroadcastReceiver.java
+++ b/java/com/android/incallui/NotificationBroadcastReceiver.java
@@ -16,6 +16,7 @@
 
 package com.android.incallui;
 
+import android.annotation.SuppressLint;
 import android.app.BroadcastOptions;
 import android.content.BroadcastReceiver;
 import android.content.Context;
@@ -69,6 +70,7 @@
   public static final String EXTRA_NOTIFICATION_ID =
       "com.android.incallui.extra.EXTRA_NOTIFICATION_ID";
 
+  @SuppressLint("MissingPermission")
   @Override
   public void onReceive(Context context, Intent intent) {
     final String action = intent.getAction();
diff --git a/java/com/android/incallui/ProximitySensor.java b/java/com/android/incallui/ProximitySensor.java
index ad5b77c..c02ebf7 100644
--- a/java/com/android/incallui/ProximitySensor.java
+++ b/java/com/android/incallui/ProximitySensor.java
@@ -168,16 +168,6 @@
     accelerometerListener.enable(isDisplayOn);
   }
 
-  /**
-   * TODO: There is no way to determine if a screen is off due to proximity or if it is legitimately
-   * off, but if ever we can do that in the future, it would be useful here. Until then, this
-   * function will simply return true of the screen is off. TODO: Investigate whether this can be
-   * replaced with the ProximityDisplayListener.
-   */
-  public boolean isScreenReallyOff() {
-    return !powerManager.isScreenOn();
-  }
-
   private void turnOnProximitySensor() {
     if (proximityWakeLock != null) {
       if (!proximityWakeLock.isHeld()) {
diff --git a/java/com/android/incallui/RttCallPresenter.java b/java/com/android/incallui/RttCallPresenter.java
index 4726cd3..6066bba 100644
--- a/java/com/android/incallui/RttCallPresenter.java
+++ b/java/com/android/incallui/RttCallPresenter.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,6 +21,7 @@
 import android.os.HandlerThread;
 import android.os.Looper;
 import android.telecom.Call.RttCall;
+
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.ThreadUtil;
 import com.android.dialer.rtt.RttTranscript;
@@ -29,6 +31,7 @@
 import com.android.incallui.call.DialerCall;
 import com.android.incallui.rtt.protocol.RttCallScreen;
 import com.android.incallui.rtt.protocol.RttCallScreenDelegate;
+
 import java.io.IOException;
 
 /**
diff --git a/java/com/android/incallui/StatusBarNotifier.java b/java/com/android/incallui/StatusBarNotifier.java
index 177a1a5..40449a7 100644
--- a/java/com/android/incallui/StatusBarNotifier.java
+++ b/java/com/android/incallui/StatusBarNotifier.java
@@ -82,7 +82,7 @@
 import com.android.incallui.ContactInfoCache.ContactCacheEntry;
 import com.android.incallui.ContactInfoCache.ContactInfoCacheCallback;
 import com.android.incallui.InCallPresenter.InCallState;
-import com.android.incallui.async.PausableExecutorImpl;
+import com.android.incallui.async.PausableExecutor;
 import com.android.incallui.audiomode.AudioModeProvider;
 import com.android.incallui.call.CallList;
 import com.android.incallui.call.DialerCall;
@@ -93,6 +93,7 @@
 import com.android.incallui.ringtone.InCallTonePlayer;
 import com.android.incallui.ringtone.ToneGeneratorFactory;
 import com.android.incallui.videotech.utils.SessionModificationState;
+
 import java.util.Objects;
 
 /** This class adds Notifications to the status bar for the in-call experience. */
@@ -135,7 +136,7 @@
     this.contactInfoCache = contactInfoCache;
     dialerRingtoneManager =
         new DialerRingtoneManager(
-            new InCallTonePlayer(new ToneGeneratorFactory(), new PausableExecutorImpl()),
+            new InCallTonePlayer(new ToneGeneratorFactory(), new PausableExecutor()),
             CallList.getInstance());
     currentNotification = NOTIFICATION_NONE;
     Trace.endSection();
@@ -592,7 +593,8 @@
     }
 
     if (call.isSpam()) {
-      Drawable drawable = resources.getDrawable(R.drawable.blocked_contact, context.getTheme());
+      Drawable drawable = ResourcesCompat.getDrawable(resources, R.drawable.blocked_contact,
+              context.getTheme());
       largeIcon = DrawableConverter.drawableToBitmap(drawable);
     }
     Trace.endSection();
@@ -1027,6 +1029,7 @@
      * Responds to changes in the session modification state for the call by dismissing the status
      * bar notification as required.
      */
+    @SuppressLint("MissingPermission")
     @Override
     public void onDialerCallSessionModificationStateChange() {
       if (dialerCall.getVideoTech().getSessionModificationState()
diff --git a/java/com/android/incallui/ThemeColorManager.java b/java/com/android/incallui/ThemeColorManager.java
index e6f0f0b..1b73354 100644
--- a/java/com/android/incallui/ThemeColorManager.java
+++ b/java/com/android/incallui/ThemeColorManager.java
@@ -16,6 +16,8 @@
 
 package com.android.incallui;
 
+import static android.telecom.PhoneAccount.NO_HIGHLIGHT_COLOR;
+
 import android.content.Context;
 
 import androidx.annotation.ColorInt;
@@ -26,8 +28,6 @@
 import com.android.dialer.R;
 import com.android.incallui.call.DialerCall;
 
-import static android.telecom.PhoneAccount.NO_HIGHLIGHT_COLOR;
-
 /**
  * Calculates the background color for the in call window. The background color is based on the SIM
  * and spam status.
diff --git a/java/com/android/incallui/VideoCallPresenter.java b/java/com/android/incallui/VideoCallPresenter.java
index 2402394..31f620d 100644
--- a/java/com/android/incallui/VideoCallPresenter.java
+++ b/java/com/android/incallui/VideoCallPresenter.java
@@ -52,6 +52,7 @@
 import com.android.incallui.videosurface.protocol.VideoSurfaceTexture;
 import com.android.incallui.videotech.utils.SessionModificationState;
 import com.android.incallui.videotech.utils.VideoUtils;
+
 import java.util.Objects;
 
 /**
diff --git a/java/com/android/incallui/VideoPauseController.java b/java/com/android/incallui/VideoPauseController.java
index fed7401..3a444c0 100644
--- a/java/com/android/incallui/VideoPauseController.java
+++ b/java/com/android/incallui/VideoPauseController.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -26,6 +27,7 @@
 import com.android.incallui.call.CallList;
 import com.android.incallui.call.DialerCall;
 import com.android.incallui.call.state.DialerCallState;
+
 import java.util.Objects;
 
 /**
diff --git a/java/com/android/incallui/answer/impl/AnswerFragment.java b/java/com/android/incallui/answer/impl/AnswerFragment.java
index 5f13ba7..d3ce392 100644
--- a/java/com/android/incallui/answer/impl/AnswerFragment.java
+++ b/java/com/android/incallui/answer/impl/AnswerFragment.java
@@ -38,9 +38,7 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.View.AccessibilityDelegate;
-import android.view.View.OnClickListener;
 import android.view.ViewGroup;
-import android.view.ViewTreeObserver.OnGlobalLayoutListener;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityNodeInfo;
 import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction;
@@ -639,11 +637,6 @@
   }
 
   @Override
-  public void onDestroy() {
-    super.onDestroy();
-  }
-
-  @Override
   public View onCreateView(
       LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
     Trace.beginSection("AnswerFragment.onCreateView");
diff --git a/java/com/android/incallui/answer/impl/CreateCustomSmsDialogFragment.java b/java/com/android/incallui/answer/impl/CreateCustomSmsDialogFragment.java
index d14d59f..a6f09f0 100644
--- a/java/com/android/incallui/answer/impl/CreateCustomSmsDialogFragment.java
+++ b/java/com/android/incallui/answer/impl/CreateCustomSmsDialogFragment.java
@@ -20,7 +20,6 @@
 import android.app.AlertDialog;
 import android.app.Dialog;
 import android.content.DialogInterface;
-import android.content.DialogInterface.OnShowListener;
 import android.os.Bundle;
 import android.text.Editable;
 import android.text.TextWatcher;
@@ -56,7 +55,7 @@
     super.onCreateDialog(savedInstanceState);
     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
     View view = View.inflate(builder.getContext(), R.layout.fragment_custom_sms_dialog, null);
-    editText = (EditText) view.findViewById(R.id.custom_sms_input);
+    editText = view.findViewById(R.id.custom_sms_input);
     if (savedInstanceState != null) {
       editText.setText(savedInstanceState.getCharSequence(ARG_ENTERED_TEXT));
     }
diff --git a/java/com/android/incallui/answer/impl/FixedAspectSurfaceView.java b/java/com/android/incallui/answer/impl/FixedAspectSurfaceView.java
index 1f7e6fe..ed63a41 100644
--- a/java/com/android/incallui/answer/impl/FixedAspectSurfaceView.java
+++ b/java/com/android/incallui/answer/impl/FixedAspectSurfaceView.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,6 +22,7 @@
 import android.util.AttributeSet;
 import android.view.SurfaceView;
 import android.view.View;
+
 import com.android.dialer.common.Assert;
 
 /**
diff --git a/java/com/android/incallui/answer/impl/SelfManagedAnswerVideoCallScreen.java b/java/com/android/incallui/answer/impl/SelfManagedAnswerVideoCallScreen.java
index 7f33ff9..f6df9c9 100644
--- a/java/com/android/incallui/answer/impl/SelfManagedAnswerVideoCallScreen.java
+++ b/java/com/android/incallui/answer/impl/SelfManagedAnswerVideoCallScreen.java
@@ -42,7 +42,7 @@
 import com.android.dialer.common.LogUtil;
 import com.android.incallui.video.protocol.VideoCallScreen;
 
-import java.util.Arrays;
+import java.util.Collections;
 
 /**
  * Shows the local preview for the incoming video call or video upgrade request. This class is used
@@ -139,7 +139,7 @@
 
     try {
       manager.openCamera(cameraId, this, null);
-    } catch (CameraAccessException e) {
+    } catch (CameraAccessException | SecurityException e) {
       LogUtil.e("SelfManagedAnswerVideoCallScreen.openCamera", "failed to open camera", e);
     }
   }
@@ -225,7 +225,8 @@
     try {
       captureRequestBuilder = camera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
       captureRequestBuilder.addTarget(surface);
-      camera.createCaptureSession(Arrays.asList(surface), new CaptureSessionCallback(), null);
+      camera.createCaptureSession(Collections.singletonList(surface), new CaptureSessionCallback(),
+              null);
     } catch (CameraAccessException e) {
       LogUtil.e(
           "SelfManagedAnswerVideoCallScreen.createCameraPreview", "failed to create preview", e);
diff --git a/java/com/android/incallui/answer/impl/affordance/SwipeButtonHelper.java b/java/com/android/incallui/answer/impl/affordance/SwipeButtonHelper.java
index 5895f9c..7352d68 100644
--- a/java/com/android/incallui/answer/impl/affordance/SwipeButtonHelper.java
+++ b/java/com/android/incallui/answer/impl/affordance/SwipeButtonHelper.java
@@ -85,7 +85,7 @@
     public void run() {
       callback.onAnimationToSideEnded(rightPage);
     }
-  };
+  }
 
   public SwipeButtonHelper(Callback callback, Context context) {
     this.context = context;
@@ -596,8 +596,7 @@
       updateIcon(otherView, 0.0f, 0, true, false, true, false);
     } else {
       callback.onAnimationToSideStarted(!left, translation, 0);
-      translation =
-          left ? callback.getMaxTranslationDistance() : callback.getMaxTranslationDistance();
+      translation = callback.getMaxTranslationDistance();
       updateIcon(otherView, 0.0f, 0.0f, false, false, true, false);
       targetView.instantFinishAnimation();
       flingEndListener.onAnimationEnd(null);
diff --git a/java/com/android/incallui/answer/impl/affordance/SwipeButtonView.java b/java/com/android/incallui/answer/impl/affordance/SwipeButtonView.java
index c6a5b71..931edc3 100644
--- a/java/com/android/incallui/answer/impl/affordance/SwipeButtonView.java
+++ b/java/com/android/incallui/answer/impl/affordance/SwipeButtonView.java
@@ -27,6 +27,7 @@
 import android.graphics.Color;
 import android.graphics.Paint;
 import android.graphics.PorterDuff;
+import android.graphics.PorterDuffColorFilter;
 import android.graphics.drawable.Drawable;
 import android.util.AttributeSet;
 import android.view.View;
@@ -158,7 +159,7 @@
     float alpha = circleRadius / minBackgroundRadius;
     alpha = Math.min(1.0f, alpha);
     int color = (int) colorInterpolator.evaluate(alpha, normalColor, inverseColor);
-    drawable.setColorFilter(color, PorterDuff.Mode.SRC_ATOP);
+    drawable.setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.SRC_ATOP));
   }
 
   private void drawBackgroundCircle(Canvas canvas) {
diff --git a/java/com/android/incallui/answer/impl/answermethod/FlingUpDownTouchHandler.java b/java/com/android/incallui/answer/impl/answermethod/FlingUpDownTouchHandler.java
index afaf799..41e0328 100644
--- a/java/com/android/incallui/answer/impl/answermethod/FlingUpDownTouchHandler.java
+++ b/java/com/android/incallui/answer/impl/answermethod/FlingUpDownTouchHandler.java
@@ -20,7 +20,6 @@
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
 import android.animation.ValueAnimator;
-import android.animation.ValueAnimator.AnimatorUpdateListener;
 import android.annotation.SuppressLint;
 import android.content.Context;
 import android.view.MotionEvent;
@@ -36,10 +35,10 @@
 
 import com.android.dialer.R;
 import com.android.dialer.common.DpUtil;
-import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.MathUtil;
 import com.android.incallui.answer.impl.classifier.FalsingManager;
 import com.android.incallui.answer.impl.utils.FlingAnimationUtils;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 
@@ -165,7 +164,6 @@
 
   private boolean touchAboveFalsingThreshold;
   private final float falsingThresholdPx;
-  private boolean touchUsesFalsing;
 
   private final float acceptThresholdPx;
   private final float rejectThresholdPx;
@@ -249,7 +247,6 @@
         motionAborted = false;
         startMotion(pointerY, false, currentProgress);
         touchAboveFalsingThreshold = false;
-        touchUsesFalsing = listener.shouldUseFalsing(event);
         if (velocityTracker == null) {
           initVelocityTracker();
         }
diff --git a/java/com/android/incallui/answer/impl/answermethod/TwoButtonMethod.java b/java/com/android/incallui/answer/impl/answermethod/TwoButtonMethod.java
index 0521849..ba59691 100644
--- a/java/com/android/incallui/answer/impl/answermethod/TwoButtonMethod.java
+++ b/java/com/android/incallui/answer/impl/answermethod/TwoButtonMethod.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,6 +24,7 @@
 import android.animation.PropertyValuesHolder;
 import android.animation.ValueAnimator;
 import android.animation.ValueAnimator.AnimatorUpdateListener;
+import android.annotation.SuppressLint;
 import android.os.Bundle;
 import android.text.TextUtils;
 import android.view.LayoutInflater;
@@ -172,6 +174,7 @@
     }
   }
 
+  @SuppressLint("CheckResult")
   @Override
   public void onClick(View view) {
     if (view == answerButton) {
@@ -181,7 +184,7 @@
       rejectCall();
       LogUtil.v("TwoButtonMethod.onClick", "two_buttonMethod Call rejected");
     } else {
-      Assert.fail("Unknown click from view: " + view);
+      throw Assert.createIllegalStateFailException("Unknown click from view: " + view);
     }
     buttonClicked = true;
   }
diff --git a/java/com/android/incallui/answer/impl/classifier/AccelerationClassifier.java b/java/com/android/incallui/answer/impl/classifier/AccelerationClassifier.java
index ae0d1c8..3f9d76d 100644
--- a/java/com/android/incallui/answer/impl/classifier/AccelerationClassifier.java
+++ b/java/com/android/incallui/answer/impl/classifier/AccelerationClassifier.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,6 +19,7 @@
 
 import android.util.ArrayMap;
 import android.view.MotionEvent;
+
 import java.util.Map;
 
 /**
diff --git a/java/com/android/incallui/answer/impl/classifier/AnglesClassifier.java b/java/com/android/incallui/answer/impl/classifier/AnglesClassifier.java
index 8c997c7..cacb24d 100644
--- a/java/com/android/incallui/answer/impl/classifier/AnglesClassifier.java
+++ b/java/com/android/incallui/answer/impl/classifier/AnglesClassifier.java
@@ -19,6 +19,7 @@
 
 import android.util.ArrayMap;
 import android.view.MotionEvent;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
diff --git a/java/com/android/incallui/answer/impl/classifier/ClassifierData.java b/java/com/android/incallui/answer/impl/classifier/ClassifierData.java
index 462204a..da63b37 100644
--- a/java/com/android/incallui/answer/impl/classifier/ClassifierData.java
+++ b/java/com/android/incallui/answer/impl/classifier/ClassifierData.java
@@ -19,6 +19,7 @@
 
 import android.util.SparseArray;
 import android.view.MotionEvent;
+
 import java.util.ArrayList;
 import java.util.concurrent.TimeUnit;
 
diff --git a/java/com/android/incallui/answer/impl/classifier/HistoryEvaluator.java b/java/com/android/incallui/answer/impl/classifier/HistoryEvaluator.java
index ac76a01..cf3185a 100644
--- a/java/com/android/incallui/answer/impl/classifier/HistoryEvaluator.java
+++ b/java/com/android/incallui/answer/impl/classifier/HistoryEvaluator.java
@@ -18,6 +18,7 @@
 package com.android.incallui.answer.impl.classifier;
 
 import android.os.SystemClock;
+
 import java.util.ArrayList;
 
 /**
diff --git a/java/com/android/incallui/answer/impl/classifier/ProximityClassifier.java b/java/com/android/incallui/answer/impl/classifier/ProximityClassifier.java
index b63f15d..9c5322e 100644
--- a/java/com/android/incallui/answer/impl/classifier/ProximityClassifier.java
+++ b/java/com/android/incallui/answer/impl/classifier/ProximityClassifier.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,6 +20,7 @@
 import android.hardware.Sensor;
 import android.hardware.SensorEvent;
 import android.view.MotionEvent;
+
 import java.util.concurrent.TimeUnit;
 
 /**
diff --git a/java/com/android/incallui/answer/impl/classifier/SpeedAnglesClassifier.java b/java/com/android/incallui/answer/impl/classifier/SpeedAnglesClassifier.java
index 2fc7b0f..69d9d05 100644
--- a/java/com/android/incallui/answer/impl/classifier/SpeedAnglesClassifier.java
+++ b/java/com/android/incallui/answer/impl/classifier/SpeedAnglesClassifier.java
@@ -19,6 +19,7 @@
 
 import android.util.ArrayMap;
 import android.view.MotionEvent;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
diff --git a/java/com/android/incallui/answerproximitysensor/AnswerProximitySensor.java b/java/com/android/incallui/answerproximitysensor/AnswerProximitySensor.java
index a6a33f4..f2316bc 100644
--- a/java/com/android/incallui/answerproximitysensor/AnswerProximitySensor.java
+++ b/java/com/android/incallui/answerproximitysensor/AnswerProximitySensor.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,13 +22,13 @@
 import android.os.PowerManager;
 import android.os.Trace;
 import android.view.Display;
+
 import com.android.dialer.common.LogUtil;
+import com.android.incallui.R;
 import com.android.incallui.call.DialerCall;
 import com.android.incallui.call.DialerCallListener;
 import com.android.incallui.call.state.DialerCallState;
 
-import com.android.incallui.R;
-
 /**
  * This class prevents users from accidentally answering calls by keeping the screen off until the
  * proximity sensor is unblocked. If the screen is already on or if this is a call waiting call then
diff --git a/java/com/android/incallui/answerproximitysensor/PseudoScreenState.java b/java/com/android/incallui/answerproximitysensor/PseudoScreenState.java
index 676a1a3..53ddc91 100644
--- a/java/com/android/incallui/answerproximitysensor/PseudoScreenState.java
+++ b/java/com/android/incallui/answerproximitysensor/PseudoScreenState.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,6 +18,9 @@
 package com.android.incallui.answerproximitysensor;
 
 import android.util.ArraySet;
+
+import com.android.incallui.InCallActivity;
+
 import java.util.Set;
 
 /**
diff --git a/java/com/android/incallui/async/PausableExecutor.java b/java/com/android/incallui/async/PausableExecutor.java
index 9f51b87..f6622fe 100644
--- a/java/com/android/incallui/async/PausableExecutor.java
+++ b/java/com/android/incallui/async/PausableExecutor.java
@@ -16,20 +16,11 @@
 
 package com.android.incallui.async;
 
-import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
 
-/**
- * Executor that can be used to easily synchronize testing and production code. Production code
- * should call {@link #milestone()} at points in the code where the state of the system is worthy of
- * testing.
- */
-public interface PausableExecutor extends Executor {
-
-  /**
-   * Method called from asynchronous production code to inform this executor that it has reached a
-   * point that puts the system into a state worth testing. TestableExecutors intended for use in a
-   * testing environment should cause the calling thread to block. In the production environment
-   * this should be a no-op.
-   */
-  void milestone();
+/** {@link PausableExecutor} intended for use in production environments. */
+public class PausableExecutor {
+  public void execute(Runnable command) {
+    Executors.newSingleThreadExecutor().execute(command);
+  }
 }
diff --git a/java/com/android/incallui/async/PausableExecutorImpl.java b/java/com/android/incallui/async/PausableExecutorImpl.java
deleted file mode 100644
index 8628ad6..0000000
--- a/java/com/android/incallui/async/PausableExecutorImpl.java
+++ /dev/null
@@ -1,31 +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.incallui.async;
-
-import java.util.concurrent.Executors;
-
-/** {@link PausableExecutor} intended for use in production environments. */
-public class PausableExecutorImpl implements PausableExecutor {
-
-  @Override
-  public void milestone() {}
-
-  @Override
-  public void execute(Runnable command) {
-    Executors.newSingleThreadExecutor().execute(command);
-  }
-}
diff --git a/java/com/android/incallui/audiomode/AudioModeProvider.java b/java/com/android/incallui/audiomode/AudioModeProvider.java
index cefee0d..7b153a6 100644
--- a/java/com/android/incallui/audiomode/AudioModeProvider.java
+++ b/java/com/android/incallui/audiomode/AudioModeProvider.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2013 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,7 +21,9 @@
 import android.media.AudioDeviceInfo;
 import android.media.AudioManager;
 import android.telecom.CallAudioState;
+
 import com.android.dialer.common.LogUtil;
+
 import java.util.ArrayList;
 import java.util.List;
 
diff --git a/java/com/android/incallui/audioroute/AudioRouteSelectorDialogFragment.java b/java/com/android/incallui/audioroute/AudioRouteSelectorDialogFragment.java
index c5836e3..452be1b 100644
--- a/java/com/android/incallui/audioroute/AudioRouteSelectorDialogFragment.java
+++ b/java/com/android/incallui/audioroute/AudioRouteSelectorDialogFragment.java
@@ -35,6 +35,7 @@
 import android.widget.TextView;
 
 import androidx.annotation.Nullable;
+import androidx.core.widget.TextViewCompat;
 
 import com.android.dialer.R;
 import com.android.dialer.common.FragmentUtils;
@@ -42,7 +43,6 @@
 import com.android.dialer.theme.base.ThemeComponent;
 import com.android.incallui.call.TelecomAdapter;
 import com.android.incallui.util.BluetoothUtil;
-
 import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
 
 import java.util.Collection;
@@ -109,15 +109,15 @@
     }
 
     initItem(
-        (TextView) view.findViewById(R.id.audioroute_speaker),
+        view.findViewById(R.id.audioroute_speaker),
         CallAudioState.ROUTE_SPEAKER,
         audioState);
     initItem(
-        (TextView) view.findViewById(R.id.audioroute_headset),
+        view.findViewById(R.id.audioroute_headset),
         CallAudioState.ROUTE_WIRED_HEADSET,
         audioState);
     initItem(
-        (TextView) view.findViewById(R.id.audioroute_earpiece),
+        view.findViewById(R.id.audioroute_earpiece),
         CallAudioState.ROUTE_EARPIECE,
         audioState);
 
@@ -178,10 +178,10 @@
 
   private void setColor(TextView item, boolean isSelected) {
     int color = isSelected
-            ? ThemeComponent.get(getContext()).theme().getColorAccent()
-            : getContext().getColor(R.color.nav_item);
+            ? ThemeComponent.get(requireContext()).theme().getColorAccent()
+            : requireContext().getColor(R.color.nav_item);
     item.setTextColor(color);
-    item.setCompoundDrawableTintList(ColorStateList.valueOf(color));
-    item.setCompoundDrawableTintMode(Mode.SRC_ATOP);
+    TextViewCompat.setCompoundDrawableTintList(item, ColorStateList.valueOf(color));
+    TextViewCompat.setCompoundDrawableTintMode(item, Mode.SRC_ATOP);
   }
 }
diff --git a/java/com/android/incallui/baseui/BaseFragment.java b/java/com/android/incallui/baseui/BaseFragment.java
index ac05984..0dfa28d 100644
--- a/java/com/android/incallui/baseui/BaseFragment.java
+++ b/java/com/android/incallui/baseui/BaseFragment.java
@@ -18,7 +18,10 @@
 package com.android.incallui.baseui;
 
 import android.os.Bundle;
+import android.view.View;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import androidx.fragment.app.Fragment;
 
 /** Parent for all fragments that use Presenters and Ui design. */
@@ -46,8 +49,8 @@
   }
 
   @Override
-  public void onActivityCreated(Bundle savedInstanceState) {
-    super.onActivityCreated(savedInstanceState);
+  public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+    super.onViewCreated(view, savedInstanceState);
     presenter.onUiReady(getUi());
   }
 
@@ -55,7 +58,6 @@
   public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     if (savedInstanceState != null) {
-      presenter.onRestoreInstanceState(savedInstanceState);
       if (savedInstanceState.getBoolean(KEY_FRAGMENT_HIDDEN)) {
         getParentFragmentManager().beginTransaction().hide(this).commit();
       }
@@ -71,7 +73,6 @@
   @Override
   public void onSaveInstanceState(Bundle outState) {
     super.onSaveInstanceState(outState);
-    presenter.onSaveInstanceState(outState);
     outState.putBoolean(KEY_FRAGMENT_HIDDEN, isHidden());
   }
 }
diff --git a/java/com/android/incallui/baseui/Presenter.java b/java/com/android/incallui/baseui/Presenter.java
index e4df938..ab67ea4 100644
--- a/java/com/android/incallui/baseui/Presenter.java
+++ b/java/com/android/incallui/baseui/Presenter.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2013 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,8 +17,6 @@
 
 package com.android.incallui.baseui;
 
-import android.os.Bundle;
-
 /** Base class for Presenters. */
 public abstract class Presenter<U extends Ui> {
 
@@ -44,10 +43,6 @@
    */
   public void onUiUnready(U ui) {}
 
-  public void onSaveInstanceState(Bundle outState) {}
-
-  public void onRestoreInstanceState(Bundle savedInstanceState) {}
-
   public U getUi() {
     return ui;
   }
diff --git a/java/com/android/incallui/bindings/ContactUtils.java b/java/com/android/incallui/bindings/ContactUtils.java
index d2d365d..3b5197d 100644
--- a/java/com/android/incallui/bindings/ContactUtils.java
+++ b/java/com/android/incallui/bindings/ContactUtils.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,6 +19,7 @@
 
 import android.location.Address;
 import android.util.Pair;
+
 import java.util.Calendar;
 import java.util.List;
 
diff --git a/java/com/android/incallui/call/CallList.java b/java/com/android/incallui/call/CallList.java
index 1ff6c47..2649da5 100644
--- a/java/com/android/incallui/call/CallList.java
+++ b/java/com/android/incallui/call/CallList.java
@@ -32,13 +32,13 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
-import com.android.dialer.blocking.FilteredNumberAsyncQueryHandler;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.promotion.impl.RttPromotion;
 import com.android.dialer.shortcuts.ShortcutUsageReporter;
 import com.android.incallui.call.state.DialerCallState;
 import com.android.incallui.videotech.utils.SessionModificationState;
+
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
@@ -70,10 +70,10 @@
    * resizing, 1 means we only expect a single thread to access the map so make only a single shard
    */
   private final Set<Listener> listeners =
-      Collections.newSetFromMap(new ConcurrentHashMap<Listener, Boolean>(8, 0.9f, 1));
+      Collections.newSetFromMap(new ConcurrentHashMap<>(8, 0.9f, 1));
 
   private final Set<DialerCall> pendingDisconnectCalls =
-      Collections.newSetFromMap(new ConcurrentHashMap<DialerCall, Boolean>(8, 0.9f, 1));
+      Collections.newSetFromMap(new ConcurrentHashMap<>(8, 0.9f, 1));
 
   private UiListener uiListeners;
   /** Handles the timeout for destroying disconnected calls. */
@@ -159,7 +159,6 @@
       // Don't log an already logged call. logCall() might be called multiple times
       // for the same call due to a bug.
       if (call.getLogState() != null && !call.getLogState().isLogged) {
-        getLegacyBindings(context).logCall(call);
         call.getLogState().isLogged = true;
       }
 
@@ -176,21 +175,6 @@
     }
   }
 
-  InCallUiLegacyBindings getLegacyBindings(Context context) {
-    Objects.requireNonNull(context);
-
-    Context application = context.getApplicationContext();
-    InCallUiLegacyBindings legacyInstance = null;
-    if (application instanceof InCallUiLegacyBindingsFactory) {
-      legacyInstance = ((InCallUiLegacyBindingsFactory) application).newInCallUiLegacyBindings();
-    }
-
-    if (legacyInstance == null) {
-      legacyInstance = new InCallUiLegacyBindingsStub();
-    }
-    return legacyInstance;
-  }
-
   /**
    * Handles the case where an internal call has become an exteral call. We need to
    *
@@ -205,7 +189,6 @@
       // Don't log an already logged call. logCall() might be called multiple times
       // for the same call due to a bug.
       if (call.getLogState() != null && !call.getLogState().isLogged) {
-        getLegacyBindings(context).logCall(call);
         call.getLogState().isLogged = true;
       }
 
diff --git a/java/com/android/incallui/call/CallRecorder.java b/java/com/android/incallui/call/CallRecorder.java
index 105f756..f20c421 100644
--- a/java/com/android/incallui/call/CallRecorder.java
+++ b/java/com/android/incallui/call/CallRecorder.java
@@ -26,14 +26,13 @@
 import android.os.IBinder;
 import android.os.Looper;
 import android.os.RemoteException;
-import android.os.SystemProperties;
 import android.text.TextUtils;
 import android.util.Log;
 import android.widget.Toast;
 
 import com.android.dialer.R;
-import com.android.dialer.callrecord.CallRecordingDataStore;
 import com.android.dialer.callrecord.CallRecording;
+import com.android.dialer.callrecord.CallRecordingDataStore;
 import com.android.dialer.callrecord.ICallRecorderService;
 import com.android.dialer.callrecord.impl.CallRecorderService;
 import com.android.dialer.location.GeoUtil;
diff --git a/java/com/android/incallui/call/DialerCall.java b/java/com/android/incallui/call/DialerCall.java
index 485a6c7..4a0bd6e 100644
--- a/java/com/android/incallui/call/DialerCall.java
+++ b/java/com/android/incallui/call/DialerCall.java
@@ -39,6 +39,8 @@
 import android.telecom.StatusHints;
 import android.telecom.TelecomManager;
 import android.telecom.VideoProfile;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
 import android.text.TextUtils;
 import android.widget.Toast;
 
@@ -47,6 +49,7 @@
 import androidx.annotation.Nullable;
 
 import com.android.contacts.common.compat.CallCompat;
+import com.android.dialer.R;
 import com.android.dialer.assisteddialing.TransformationInfo;
 import com.android.dialer.callintent.CallInitiationType;
 import com.android.dialer.callintent.CallIntentParser;
@@ -63,7 +66,6 @@
 import com.android.dialer.rtt.RttTranscriptUtil;
 import com.android.dialer.telecom.TelecomCallUtil;
 import com.android.dialer.telecom.TelecomUtil;
-import com.android.dialer.theme.common.R;
 import com.android.dialer.util.PermissionsUtil;
 import com.android.incallui.audiomode.AudioModeProvider;
 import com.android.incallui.call.state.DialerCallState;
@@ -73,9 +75,9 @@
 import com.android.incallui.videotech.empty.EmptyVideoTech;
 import com.android.incallui.videotech.ims.ImsVideoTech;
 import com.android.incallui.videotech.utils.VideoUtils;
-import com.google.common.base.Optional;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.MoreExecutors;
+
 import java.io.IOException;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -359,7 +361,7 @@
     this.context = context;
     this.dialerCallDelegate = dialerCallDelegate;
     this.telecomCall = telecomCall;
-    id = ID_PREFIX + Integer.toString(idCounter++);
+    id = ID_PREFIX + idCounter++;
 
     // Must be after assigning mTelecomCall
     videoTechManager = new VideoTechManager(this);
@@ -1366,6 +1368,7 @@
     return videoTech;
   }
 
+  @SuppressLint("MissingPermission")
   public String getCallbackNumber() {
     if (callbackNumber == null) {
       // Show the emergency callback number if either:
@@ -1375,8 +1378,13 @@
       boolean showCallbackNumber = hasProperty(Details.PROPERTY_EMERGENCY_CALLBACK_MODE);
 
       if (isEmergencyCall() || showCallbackNumber) {
-        callbackNumber =
-            context.getSystemService(TelecomManager.class).getLine1Number(getAccountHandle());
+        PhoneAccountHandle accountHandle = getAccountHandle();
+        if (accountHandle != null) {
+          int subId = context.getSystemService(TelephonyManager.class).getSubscriptionId(
+                  accountHandle);
+          SubscriptionManager subMgr = context.getSystemService(SubscriptionManager.class);
+          callbackNumber = subMgr.getPhoneNumber(subId);
+        }
       }
 
       if (callbackNumber == null) {
diff --git a/java/com/android/incallui/call/ExternalCallList.java b/java/com/android/incallui/call/ExternalCallList.java
index 96a5c19..cad4842 100644
--- a/java/com/android/incallui/call/ExternalCallList.java
+++ b/java/com/android/incallui/call/ExternalCallList.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -26,6 +27,7 @@
 import com.android.contacts.common.compat.CallCompat;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
+
 import java.util.Collections;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
@@ -39,7 +41,7 @@
 
   private final Set<Call> externalCalls = new ArraySet<>();
   private final Set<ExternalCallListener> externalCallListeners =
-      Collections.newSetFromMap(new ConcurrentHashMap<ExternalCallListener, Boolean>(8, 0.9f, 1));
+      Collections.newSetFromMap(new ConcurrentHashMap<>(8, 0.9f, 1));
   /** Handles {@link android.telecom.Call.Callback} callbacks. */
   private final Call.Callback telecomCallCallback =
       new Call.Callback() {
diff --git a/java/com/android/incallui/call/InCallUiLegacyBindings.java b/java/com/android/incallui/call/InCallUiLegacyBindings.java
deleted file mode 100644
index 1b0ed45..0000000
--- a/java/com/android/incallui/call/InCallUiLegacyBindings.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * 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.incallui.call;
-
-/**
- * These are old bindings between InCallUi and the container application. All new bindings should be
- * added to the bindings module and not here.
- */
-public interface InCallUiLegacyBindings {
-
-  void logCall(DialerCall call);
-}
diff --git a/java/com/android/incallui/call/InCallUiLegacyBindingsFactory.java b/java/com/android/incallui/call/InCallUiLegacyBindingsFactory.java
deleted file mode 100644
index 8604976..0000000
--- a/java/com/android/incallui/call/InCallUiLegacyBindingsFactory.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * 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.incallui.call;
-
-/**
- * This interface should be implementated by the Application subclass. It allows the in call UI
- * module to get references to the InCallUiLegacyBindings.
- */
-public interface InCallUiLegacyBindingsFactory {
-
-  InCallUiLegacyBindings newInCallUiLegacyBindings();
-}
diff --git a/java/com/android/incallui/call/InCallUiLegacyBindingsStub.java b/java/com/android/incallui/call/InCallUiLegacyBindingsStub.java
deleted file mode 100644
index 8869c64..0000000
--- a/java/com/android/incallui/call/InCallUiLegacyBindingsStub.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * 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.incallui.call;
-
-/** Default implementation for in call UI legacy bindings. */
-public class InCallUiLegacyBindingsStub implements InCallUiLegacyBindings {
-
-  @Override
-  public void logCall(DialerCall call) {}
-}
diff --git a/java/com/android/incallui/call/InCallVideoCallCallbackNotifier.java b/java/com/android/incallui/call/InCallVideoCallCallbackNotifier.java
index 59b83ac..fd377b1 100644
--- a/java/com/android/incallui/call/InCallVideoCallCallbackNotifier.java
+++ b/java/com/android/incallui/call/InCallVideoCallCallbackNotifier.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2014 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -36,7 +37,7 @@
    * resizing, 1 means we only expect a single thread to access the map so make only a single shard
    */
   private final Set<SurfaceChangeListener> surfaceChangeListeners =
-      Collections.newSetFromMap(new ConcurrentHashMap<SurfaceChangeListener, Boolean>(8, 0.9f, 1));
+      Collections.newSetFromMap(new ConcurrentHashMap<>(8, 0.9f, 1));
 
   /** Private constructor. Instance should only be acquired through getRunningInstance(). */
   private InCallVideoCallCallbackNotifier() {}
diff --git a/java/com/android/incallui/call/TelecomAdapter.java b/java/com/android/incallui/call/TelecomAdapter.java
index 507f64d..a76cd17 100644
--- a/java/com/android/incallui/call/TelecomAdapter.java
+++ b/java/com/android/incallui/call/TelecomAdapter.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -29,6 +30,7 @@
 
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
+
 import java.util.List;
 
 /** Wrapper around Telecom APIs. */
diff --git a/java/com/android/incallui/callpending/CallPendingActivity.java b/java/com/android/incallui/callpending/CallPendingActivity.java
index eb140a9..7fba003 100644
--- a/java/com/android/incallui/callpending/CallPendingActivity.java
+++ b/java/com/android/incallui/callpending/CallPendingActivity.java
@@ -115,7 +115,8 @@
   protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.pending_incall_screen);
-    registerReceiver(finishReceiver, new IntentFilter(ACTION_FINISH_BROADCAST));
+    registerReceiver(finishReceiver, new IntentFilter(ACTION_FINISH_BROADCAST),
+            RECEIVER_NOT_EXPORTED);
   }
 
   @Override
@@ -213,12 +214,6 @@
           public void onInCallButtonUiUnready() {}
 
           @Override
-          public void onSaveInstanceState(Bundle outState) {}
-
-          @Override
-          public void onRestoreInstanceState(Bundle savedInstanceState) {}
-
-          @Override
           public void addCallClicked() {}
 
           @Override
@@ -307,15 +302,9 @@
           public void onSecondaryInfoClicked() {}
 
           @Override
-          public void onCallStateButtonClicked() {}
-
-          @Override
           public void onManageConferenceClicked() {}
 
           @Override
-          public void onShrinkAnimationComplete() {}
-
-          @Override
           public void onInCallScreenResumed() {}
 
           @Override
diff --git a/java/com/android/incallui/contactgrid/ContactGridManager.java b/java/com/android/incallui/contactgrid/ContactGridManager.java
index 13adc4a..27142c8 100644
--- a/java/com/android/incallui/contactgrid/ContactGridManager.java
+++ b/java/com/android/incallui/contactgrid/ContactGridManager.java
@@ -41,7 +41,6 @@
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.glidephotomanager.GlidePhotoManagerComponent;
 import com.android.dialer.glidephotomanager.PhotoInfo;
-import com.android.dialer.lettertile.LetterTileDrawable;
 import com.android.dialer.widget.BidiTextView;
 import com.android.incallui.incall.protocol.ContactPhotoType;
 import com.android.incallui.incall.protocol.PrimaryCallState;
@@ -96,11 +95,10 @@
 
   private PrimaryInfo primaryInfo = PrimaryInfo.empty();
   private PrimaryCallState primaryCallState = PrimaryCallState.empty();
-  private final LetterTileDrawable letterTile;
   private boolean isInMultiWindowMode;
 
-  public ContactGridManager(
-          View view, @Nullable ImageView avatarImageView, int avatarSize, boolean showAnonymousAvatar) {
+  public ContactGridManager(View view, @Nullable ImageView avatarImageView, int avatarSize,
+                            boolean showAnonymousAvatar) {
     context = view.getContext();
     Assert.isNotNull(context);
 
@@ -121,7 +119,6 @@
     topRowSpace = view.findViewById(R.id.contactgrid_top_row_space);
 
     contactGridLayout = (View) contactNameTextView.getParent();
-    letterTile = new LetterTileDrawable(context.getResources());
     isTimerStarted = false;
 
     deviceNumberTextView = view.findViewById(R.id.contactgrid_device_number_text);
diff --git a/java/com/android/incallui/contactgrid/TopRow.java b/java/com/android/incallui/contactgrid/TopRow.java
index bf036ed..51dca28 100644
--- a/java/com/android/incallui/contactgrid/TopRow.java
+++ b/java/com/android/incallui/contactgrid/TopRow.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -177,18 +178,10 @@
 
   private static CharSequence getLabelForIncomingVideo(
       Context context, @SessionModificationState int sessionModificationState, boolean isWifi) {
-    if (sessionModificationState == SessionModificationState.RECEIVED_UPGRADE_TO_VIDEO_REQUEST) {
-      if (isWifi) {
-        return context.getString(R.string.contact_grid_incoming_wifi_video_call);
-      } else {
-        return context.getString(R.string.contact_grid_incoming_video_call);
-      }
+    if (isWifi) {
+      return context.getString(R.string.contact_grid_incoming_wifi_video_call);
     } else {
-      if (isWifi) {
-        return context.getString(R.string.contact_grid_incoming_wifi_video_call);
-      } else {
-        return context.getString(R.string.contact_grid_incoming_video_call);
-      }
+      return context.getString(R.string.contact_grid_incoming_video_call);
     }
   }
 
@@ -274,8 +267,7 @@
         return getLabelForIncomingVideo(context, state.sessionModificationState(), state.isWifi());
       case SessionModificationState.NO_REQUEST:
       default:
-        Assert.fail();
-        return null;
+        throw Assert.createIllegalStateFailException();
     }
   }
 
diff --git a/java/com/android/incallui/disconnectdialog/DisconnectMessage.java b/java/com/android/incallui/disconnectdialog/DisconnectMessage.java
index 97d58f2..0a2beb0 100644
--- a/java/com/android/incallui/disconnectdialog/DisconnectMessage.java
+++ b/java/com/android/incallui/disconnectdialog/DisconnectMessage.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,7 +21,9 @@
 import android.content.Context;
 import android.telecom.DisconnectCause;
 import android.util.Pair;
+
 import com.android.incallui.call.DialerCall;
+
 import java.util.Locale;
 
 /**
diff --git a/java/com/android/incallui/incall/impl/ButtonChooser.java b/java/com/android/incallui/incall/impl/ButtonChooser.java
index 3a18f00..d27bca7 100644
--- a/java/com/android/incallui/incall/impl/ButtonChooser.java
+++ b/java/com/android/incallui/incall/impl/ButtonChooser.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,10 +22,12 @@
 import com.android.dialer.common.Assert;
 import com.android.incallui.incall.impl.MappedButtonConfig.MappingInfo;
 import com.android.incallui.incall.protocol.InCallButtonIds;
+
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Set;
+
 import javax.annotation.concurrent.Immutable;
 
 /**
@@ -83,7 +86,7 @@
     for (int i = 0; i < configuredSlots.size() && placedButtons.size() < numUiButtons; ++i) {
       int slotNumber = configuredSlots.get(i);
       List<Integer> potentialButtons = config.getButtonsForSlot(slotNumber);
-      Collections.sort(potentialButtons, config.getSlotComparator());
+      potentialButtons.sort(config.getSlotComparator());
       for (int j = 0; j < potentialButtons.size(); ++j) {
         if (allowedButtons.contains(potentialButtons.get(j))) {
           placedButtons.add(potentialButtons.get(j));
@@ -100,7 +103,7 @@
       @NonNull Set<Integer> disabledButtons,
       @NonNull List<Integer> placedButtons,
       @NonNull List<Integer> conflicts) {
-    Collections.sort(conflicts, config.getConflictComparator());
+    conflicts.sort(config.getConflictComparator());
     for (Integer conflict : conflicts) {
       if (placedButtons.size() >= numUiButtons) {
         return;
diff --git a/java/com/android/incallui/incall/impl/ButtonController.java b/java/com/android/incallui/incall/impl/ButtonController.java
index 1b018d3..d77ec84 100644
--- a/java/com/android/incallui/incall/impl/ButtonController.java
+++ b/java/com/android/incallui/incall/impl/ButtonController.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,6 +17,7 @@
 
 package com.android.incallui.incall.impl;
 
+import android.annotation.SuppressLint;
 import android.content.res.Resources;
 import android.graphics.drawable.AnimationDrawable;
 import android.telecom.CallAudioState;
@@ -234,9 +236,10 @@
       }
     }
 
+    @SuppressLint("CheckResult")
     @Override
     public void setChecked(boolean isChecked) {
-      Assert.fail();
+      Assert.createAssertionFailException("Fail");
     }
 
     @Override
diff --git a/java/com/android/incallui/incall/impl/CheckableLabeledButton.java b/java/com/android/incallui/incall/impl/CheckableLabeledButton.java
index f1c70d8..4cb8132 100644
--- a/java/com/android/incallui/incall/impl/CheckableLabeledButton.java
+++ b/java/com/android/incallui/incall/impl/CheckableLabeledButton.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -37,6 +38,7 @@
 import androidx.annotation.ColorInt;
 import androidx.annotation.DrawableRes;
 import androidx.annotation.StringRes;
+import androidx.core.content.res.ResourcesCompat;
 
 import com.android.dialer.R;
 
@@ -71,10 +73,10 @@
     CharSequence labelText;
     boolean enabled;
 
-    backgroundMore =
-        getResources().getDrawable(R.drawable.incall_button_background_more, context.getTheme());
-    background =
-        getResources().getDrawable(R.drawable.incall_button_background, context.getTheme());
+    backgroundMore = ResourcesCompat.getDrawable(getResources(),
+            R.drawable.incall_button_background_more, context.getTheme());
+    background = ResourcesCompat.getDrawable(getResources(),
+            R.drawable.incall_button_background, context.getTheme());
 
     TypedArray typedArray =
         context.obtainStyledAttributes(attrs, R.styleable.CheckableLabeledButton);
diff --git a/java/com/android/incallui/incall/impl/InCallButtonGridFragment.java b/java/com/android/incallui/incall/impl/InCallButtonGridFragment.java
index cd8ff81..1d0ebc8 100644
--- a/java/com/android/incallui/incall/impl/InCallButtonGridFragment.java
+++ b/java/com/android/incallui/incall/impl/InCallButtonGridFragment.java
@@ -23,7 +23,6 @@
 import android.view.View;
 import android.view.ViewGroup;
 
-import androidx.annotation.ColorInt;
 import androidx.annotation.Nullable;
 import androidx.fragment.app.Fragment;
 
diff --git a/java/com/android/incallui/incall/impl/InCallFragment.java b/java/com/android/incallui/incall/impl/InCallFragment.java
index 4e1cabe..e02369a 100644
--- a/java/com/android/incallui/incall/impl/InCallFragment.java
+++ b/java/com/android/incallui/incall/impl/InCallFragment.java
@@ -152,7 +152,6 @@
         FragmentUtils.getParent(this, InCallButtonUiDelegateFactory.class)
             .newInCallButtonUiDelegate();
     if (savedInstanceState != null) {
-      inCallButtonUiDelegate.onRestoreInstanceState(savedInstanceState);
       stateRestored = true;
     }
   }
@@ -267,19 +266,13 @@
   }
 
   @Override
-  public void onSaveInstanceState(Bundle outState) {
-    super.onSaveInstanceState(outState);
-    inCallButtonUiDelegate.onSaveInstanceState(outState);
-  }
-
-  @Override
   public void onClick(View view) {
     if (view == endCallButton) {
       LogUtil.i("InCallFragment.onClick", "end call button clicked");
       inCallScreenDelegate.onEndCallClicked();
     } else {
       LogUtil.e("InCallFragment.onClick", "unknown view: " + view);
-      Assert.fail();
+      Assert.createAssertionFailException("");
     }
   }
 
@@ -536,7 +529,7 @@
         return buttonController;
       }
     }
-    Assert.fail();
+    Assert.createAssertionFailException("");
     return null;
   }
 
diff --git a/java/com/android/incallui/incall/protocol/InCallButtonUi.java b/java/com/android/incallui/incall/protocol/InCallButtonUi.java
index 98a5ed9..19a55ee 100644
--- a/java/com/android/incallui/incall/protocol/InCallButtonUi.java
+++ b/java/com/android/incallui/incall/protocol/InCallButtonUi.java
@@ -19,7 +19,6 @@
 
 import android.telecom.CallAudioState;
 
-import androidx.annotation.ColorInt;
 import androidx.fragment.app.Fragment;
 
 /** Interface for the call button UI. */
diff --git a/java/com/android/incallui/incall/protocol/InCallButtonUiDelegate.java b/java/com/android/incallui/incall/protocol/InCallButtonUiDelegate.java
index 4e25ff0..341aacf 100644
--- a/java/com/android/incallui/incall/protocol/InCallButtonUiDelegate.java
+++ b/java/com/android/incallui/incall/protocol/InCallButtonUiDelegate.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,7 +18,6 @@
 package com.android.incallui.incall.protocol;
 
 import android.content.Context;
-import android.os.Bundle;
 import android.telecom.CallAudioState;
 
 /** Callbacks from the module out to the container. */
@@ -27,10 +27,6 @@
 
   void onInCallButtonUiUnready();
 
-  void onSaveInstanceState(Bundle outState);
-
-  void onRestoreInstanceState(Bundle savedInstanceState);
-
   void addCallClicked();
 
   void muteClicked(boolean checked, boolean clickedByUser);
diff --git a/java/com/android/incallui/incall/protocol/InCallScreenDelegate.java b/java/com/android/incallui/incall/protocol/InCallScreenDelegate.java
index c491eab..32d8ddd 100644
--- a/java/com/android/incallui/incall/protocol/InCallScreenDelegate.java
+++ b/java/com/android/incallui/incall/protocol/InCallScreenDelegate.java
@@ -29,12 +29,8 @@
 
   void onSecondaryInfoClicked();
 
-  void onCallStateButtonClicked();
-
   void onManageConferenceClicked();
 
-  void onShrinkAnimationComplete();
-
   void onInCallScreenResumed();
 
   void onInCallScreenPaused();
diff --git a/java/com/android/incallui/incall/protocol/PrimaryCallState.java b/java/com/android/incallui/incall/protocol/PrimaryCallState.java
index 8fe45f0..ba9c524 100644
--- a/java/com/android/incallui/incall/protocol/PrimaryCallState.java
+++ b/java/com/android/incallui/incall/protocol/PrimaryCallState.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -30,6 +31,7 @@
 import com.android.incallui.call.state.DialerCallState;
 import com.android.incallui.videotech.utils.SessionModificationState;
 import com.google.auto.value.AutoValue;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.Locale;
diff --git a/java/com/android/incallui/incall/protocol/PrimaryInfo.java b/java/com/android/incallui/incall/protocol/PrimaryInfo.java
index 05787bc..fbd16e1 100644
--- a/java/com/android/incallui/incall/protocol/PrimaryInfo.java
+++ b/java/com/android/incallui/incall/protocol/PrimaryInfo.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -24,6 +25,7 @@
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.multimedia.MultimediaData;
 import com.google.auto.value.AutoValue;
+
 import java.util.Locale;
 
 /** Information about the primary call. */
diff --git a/java/com/android/incallui/incall/protocol/SecondaryInfo.java b/java/com/android/incallui/incall/protocol/SecondaryInfo.java
index f33f999..76eeecf 100644
--- a/java/com/android/incallui/incall/protocol/SecondaryInfo.java
+++ b/java/com/android/incallui/incall/protocol/SecondaryInfo.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,6 +24,7 @@
 
 import com.android.dialer.common.LogUtil;
 import com.google.auto.value.AutoValue;
+
 import java.util.Locale;
 
 /** Information about the secondary call. */
diff --git a/java/com/android/incallui/multisim/SwapSimWorker.java b/java/com/android/incallui/multisim/SwapSimWorker.java
index df76dc3..6aca4d6 100644
--- a/java/com/android/incallui/multisim/SwapSimWorker.java
+++ b/java/com/android/incallui/multisim/SwapSimWorker.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -38,6 +39,7 @@
 import com.android.incallui.call.DialerCall;
 import com.android.incallui.call.DialerCallListener;
 import com.android.incallui.incalluilock.InCallUiLock;
+
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
diff --git a/java/com/android/incallui/ringtone/DialerRingtoneManager.java b/java/com/android/incallui/ringtone/DialerRingtoneManager.java
index 56ac8f1..6356be2 100644
--- a/java/com/android/incallui/ringtone/DialerRingtoneManager.java
+++ b/java/com/android/incallui/ringtone/DialerRingtoneManager.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -26,6 +27,7 @@
 import com.android.incallui.call.CallList;
 import com.android.incallui.call.DialerCall;
 import com.android.incallui.call.state.DialerCallState;
+
 import java.util.Objects;
 
 /**
diff --git a/java/com/android/incallui/ringtone/InCallTonePlayer.java b/java/com/android/incallui/ringtone/InCallTonePlayer.java
index 3f7d81a..0d4bb2c 100644
--- a/java/com/android/incallui/ringtone/InCallTonePlayer.java
+++ b/java/com/android/incallui/ringtone/InCallTonePlayer.java
@@ -107,15 +107,8 @@
       Log.v(this, "Starting tone " + info);
       toneGenerator = toneGeneratorFactory.newInCallToneGenerator(info.stream, info.volume);
       toneGenerator.startTone(info.tone);
-      /*
-       * During tests, this will block until the tests call mExecutor.ackMilestone. This call
-       * allows for synchronization to the point where the tone has started playing.
-       */
-      executor.milestone();
       if (numPlayingTones != null) {
         numPlayingTones.await(info.toneLengthMillis, TimeUnit.MILLISECONDS);
-        // Allows for synchronization to the point where the tone has completed playing.
-        executor.milestone();
       }
     } catch (InterruptedException e) {
       Log.w(this, "Interrupted while playing in-call tone.");
@@ -126,8 +119,6 @@
       if (numPlayingTones != null) {
         numPlayingTones.countDown();
       }
-      // Allows for synchronization to the point where this background thread has cleaned up.
-      executor.milestone();
     }
   }
 
diff --git a/java/com/android/incallui/rtt/impl/AudioSelectMenu.java b/java/com/android/incallui/rtt/impl/AudioSelectMenu.java
index b9cd358..cc2866a 100644
--- a/java/com/android/incallui/rtt/impl/AudioSelectMenu.java
+++ b/java/com/android/incallui/rtt/impl/AudioSelectMenu.java
@@ -21,6 +21,7 @@
 import android.telecom.CallAudioState;
 import android.view.View;
 import android.widget.PopupWindow;
+
 import com.android.incallui.incall.protocol.InCallButtonUiDelegate;
 
 /** Audio select menu for RTT call. */
diff --git a/java/com/android/incallui/rtt/impl/RttChatFragment.java b/java/com/android/incallui/rtt/impl/RttChatFragment.java
index 5ca8be0..5715c14 100644
--- a/java/com/android/incallui/rtt/impl/RttChatFragment.java
+++ b/java/com/android/incallui/rtt/impl/RttChatFragment.java
@@ -132,9 +132,6 @@
     inCallButtonUiDelegate =
         FragmentUtils.getParent(this, InCallButtonUiDelegateFactory.class)
             .newInCallButtonUiDelegate();
-    if (savedInstanceState != null) {
-      inCallButtonUiDelegate.onRestoreInstanceState(savedInstanceState);
-    }
     inCallScreenDelegate =
         FragmentUtils.getParentUnsafe(this, InCallScreenDelegateFactory.class)
             .newInCallScreenDelegate();
diff --git a/java/com/android/incallui/rtt/impl/RttOverflowMenu.java b/java/com/android/incallui/rtt/impl/RttOverflowMenu.java
index e9f9d04..4654b0a 100644
--- a/java/com/android/incallui/rtt/impl/RttOverflowMenu.java
+++ b/java/com/android/incallui/rtt/impl/RttOverflowMenu.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,6 +21,7 @@
 import android.telecom.CallAudioState;
 import android.view.View;
 import android.widget.PopupWindow;
+
 import com.android.incallui.incall.protocol.InCallButtonUiDelegate;
 import com.android.incallui.incall.protocol.InCallScreenDelegate;
 import com.android.incallui.rtt.impl.RttCheckableButton.OnCheckedChangeListener;
diff --git a/java/com/android/incallui/rtt/protocol/RttChatMessage.java b/java/com/android/incallui/rtt/protocol/RttChatMessage.java
index 61c2402..c9f3e2b 100644
--- a/java/com/android/incallui/rtt/protocol/RttChatMessage.java
+++ b/java/com/android/incallui/rtt/protocol/RttChatMessage.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,6 +23,7 @@
 import com.android.dialer.rtt.RttTranscript;
 import com.android.dialer.rtt.RttTranscriptMessage;
 import com.google.common.base.Splitter;
+
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
diff --git a/java/com/android/incallui/spam/AndroidManifest.xml b/java/com/android/incallui/spam/AndroidManifest.xml
index 66c9983..978f4a9 100644
--- a/java/com/android/incallui/spam/AndroidManifest.xml
+++ b/java/com/android/incallui/spam/AndroidManifest.xml
@@ -33,9 +33,5 @@
         android:theme="@style/AfterCallNotificationTheme">
     </activity>
 
-    <service
-        android:exported="false"
-        android:name=".SpamNotificationService"/>
-
   </application>
 </manifest>
diff --git a/java/com/android/incallui/spam/SpamNotificationActivity.java b/java/com/android/incallui/spam/SpamNotificationActivity.java
index 63b0235..6c39028 100644
--- a/java/com/android/incallui/spam/SpamNotificationActivity.java
+++ b/java/com/android/incallui/spam/SpamNotificationActivity.java
@@ -22,7 +22,6 @@
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.os.Bundle;
-import android.provider.CallLog;
 import android.provider.ContactsContract;
 import android.telephony.PhoneNumberUtils;
 
@@ -64,15 +63,6 @@
   private static final String CALL_INFO_KEY_CALL_ID = "call_id";
   private static final String CALL_INFO_KEY_START_TIME_MILLIS = "call_start_time_millis";
   private static final String CALL_INFO_CONTACT_LOOKUP_RESULT_TYPE = "contact_lookup_result_type";
-  private final DialogInterface.OnDismissListener dismissListener =
-      new DialogInterface.OnDismissListener() {
-        @Override
-        public void onDismiss(DialogInterface dialog) {
-          if (!isFinishing()) {
-            finish();
-          }
-        }
-      };
   private FilteredNumberAsyncQueryHandler filteredNumberAsyncQueryHandler;
 
   /**
diff --git a/java/com/android/incallui/spam/SpamNotificationService.java b/java/com/android/incallui/spam/SpamNotificationService.java
deleted file mode 100644
index e338390..0000000
--- a/java/com/android/incallui/spam/SpamNotificationService.java
+++ /dev/null
@@ -1,123 +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.incallui.spam;
-
-import android.app.Service;
-import android.content.Context;
-import android.content.Intent;
-import android.os.IBinder;
-import android.provider.CallLog;
-
-import androidx.annotation.Nullable;
-
-import com.android.dialer.blocking.FilteredNumberAsyncQueryHandler;
-import com.android.dialer.common.LogUtil;
-import com.android.dialer.location.GeoUtil;
-import com.android.dialer.logging.ContactLookupResult;
-import com.android.dialer.notification.DialerNotificationManager;
-import com.android.incallui.call.DialerCall;
-
-/**
- * This service determines if the device is locked/unlocked and takes an action based on the state.
- * A service is used to to determine this, as opposed to an activity, because the user must unlock
- * the device before a notification can start an activity. This is not the case for a service, and
- * intents can be sent to this service even from the lock screen. This allows users to quickly
- * report a number as spam or not spam from their lock screen.
- */
-public class SpamNotificationService extends Service {
-
-  private static final String TAG = "SpamNotificationSvc";
-
-  private static final String EXTRA_PHONE_NUMBER = "service_phone_number";
-  private static final String EXTRA_CALL_ID = "service_call_id";
-  private static final String EXTRA_CALL_START_TIME_MILLIS = "service_call_start_time_millis";
-  private static final String EXTRA_NOTIFICATION_TAG = "service_notification_tag";
-  private static final String EXTRA_NOTIFICATION_ID = "service_notification_id";
-  private static final String EXTRA_CONTACT_LOOKUP_RESULT_TYPE =
-      "service_contact_lookup_result_type";
-
-  private String notificationTag;
-  private int notificationId;
-
-  /** Creates an intent to start this service. */
-  public static Intent createServiceIntent(
-      Context context,
-      @Nullable DialerCall call,
-      String action,
-      String notificationTag,
-      int notificationId) {
-    Intent intent = new Intent(context, SpamNotificationService.class);
-    intent.setAction(action);
-    intent.putExtra(EXTRA_NOTIFICATION_TAG, notificationTag);
-    intent.putExtra(EXTRA_NOTIFICATION_ID, notificationId);
-
-    if (call != null) {
-      intent.putExtra(EXTRA_PHONE_NUMBER, call.getNumber());
-      intent.putExtra(EXTRA_CALL_ID, call.getUniqueCallId());
-      intent.putExtra(EXTRA_CALL_START_TIME_MILLIS, call.getTimeAddedMs());
-      intent.putExtra(
-          EXTRA_CONTACT_LOOKUP_RESULT_TYPE, call.getLogState().contactLookupResult.getNumber());
-    }
-    return intent;
-  }
-
-  @Nullable
-  @Override
-  public IBinder onBind(Intent intent) {
-    // Return null because clients cannot bind to this service
-    return null;
-  }
-
-  @Override
-  public int onStartCommand(Intent intent, int flags, int startId) {
-    LogUtil.d(TAG, "onStartCommand");
-    if (intent == null) {
-      LogUtil.d(TAG, "Null intent");
-      stopSelf();
-      // Return {@link #START_NOT_STICKY} so service is not restarted.
-      return START_NOT_STICKY;
-    }
-    String number = intent.getStringExtra(EXTRA_PHONE_NUMBER);
-    notificationTag = intent.getStringExtra(EXTRA_NOTIFICATION_TAG);
-    notificationId = intent.getIntExtra(EXTRA_NOTIFICATION_ID, 1);
-    String countryIso = GeoUtil.getCurrentCountryIso(this);
-    ContactLookupResult.Type contactLookupResultType =
-        ContactLookupResult.Type.forNumber(intent.getIntExtra(EXTRA_CONTACT_LOOKUP_RESULT_TYPE, 0));
-
-    // Cancel notification only if we are not showing spam blocking promo. Otherwise we will show
-    // spam blocking promo notification in place.
-    DialerNotificationManager.cancel(this, notificationTag, notificationId);
-
-    switch (intent.getAction()) {
-      case SpamNotificationActivity.ACTION_MARK_NUMBER_AS_SPAM:
-        new FilteredNumberAsyncQueryHandler(this).blockNumber(null, number);
-        break;
-      case SpamNotificationActivity.ACTION_MARK_NUMBER_AS_NOT_SPAM:
-        break;
-      default: // fall out
-    }
-    // TODO: call stopSelf() after async tasks complete (a bug)
-    stopSelf();
-    return START_NOT_STICKY;
-  }
-
-  @Override
-  public void onDestroy() {
-    super.onDestroy();
-    LogUtil.d(TAG, "onDestroy");
-  }
-}
diff --git a/java/com/android/incallui/video/impl/SurfaceViewVideoCallFragment.java b/java/com/android/incallui/video/impl/SurfaceViewVideoCallFragment.java
index dd42c35..3490dca 100644
--- a/java/com/android/incallui/video/impl/SurfaceViewVideoCallFragment.java
+++ b/java/com/android/incallui/video/impl/SurfaceViewVideoCallFragment.java
@@ -18,7 +18,9 @@
 package com.android.incallui.video.impl;
 
 import android.Manifest.permission;
+import android.annotation.SuppressLint;
 import android.content.Context;
+import android.graphics.Insets;
 import android.graphics.Point;
 import android.graphics.drawable.Animatable;
 import android.os.Bundle;
@@ -33,6 +35,7 @@
 import android.view.ViewGroup;
 import android.view.ViewGroup.MarginLayoutParams;
 import android.view.ViewTreeObserver;
+import android.view.WindowInsets;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.animation.AccelerateDecelerateInterpolator;
 import android.view.animation.Interpolator;
@@ -42,7 +45,6 @@
 
 import androidx.activity.result.ActivityResultLauncher;
 import androidx.activity.result.contract.ActivityResultContracts;
-import androidx.annotation.ColorInt;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.fragment.app.Fragment;
@@ -168,9 +170,6 @@
     inCallButtonUiDelegate =
         FragmentUtils.getParent(this, InCallButtonUiDelegateFactory.class)
             .newInCallButtonUiDelegate();
-    if (savedInstanceState != null) {
-      inCallButtonUiDelegate.onRestoreInstanceState(savedInstanceState);
-    }
   }
 
   @Nullable
@@ -186,27 +185,27 @@
     controls = view.findViewById(R.id.videocall_video_controls);
     controls.setVisibility(getActivity().isInMultiWindowMode() ? View.GONE : View.VISIBLE);
     controlsContainer = view.findViewById(R.id.videocall_video_controls_container);
-    speakerButton = (CheckableImageButton) view.findViewById(R.id.videocall_speaker_button);
-    muteButton = (CheckableImageButton) view.findViewById(R.id.videocall_mute_button);
+    speakerButton = view.findViewById(R.id.videocall_speaker_button);
+    muteButton = view.findViewById(R.id.videocall_mute_button);
     muteButton.setOnCheckedChangeListener(this);
     mutePreviewOverlay = view.findViewById(R.id.videocall_video_preview_mute_overlay);
-    cameraOffButton = (CheckableImageButton) view.findViewById(R.id.videocall_mute_video);
+    cameraOffButton = view.findViewById(R.id.videocall_mute_video);
     cameraOffButton.setOnCheckedChangeListener(this);
     previewOffOverlay = view.findViewById(R.id.videocall_video_preview_off_overlay);
-    swapCameraButton = (ImageButton) view.findViewById(R.id.videocall_switch_video);
+    swapCameraButton = view.findViewById(R.id.videocall_switch_video);
     swapCameraButton.setOnClickListener(this);
     view.findViewById(R.id.videocall_switch_controls)
         .setVisibility(getActivity().isInMultiWindowMode() ? View.GONE : View.VISIBLE);
     switchOnHoldButton = view.findViewById(R.id.videocall_switch_on_hold);
     onHoldContainer = view.findViewById(R.id.videocall_on_hold_banner);
-    remoteVideoOff = (TextView) view.findViewById(R.id.videocall_remote_video_off);
+    remoteVideoOff = view.findViewById(R.id.videocall_remote_video_off);
     remoteVideoOff.setAccessibilityLiveRegion(View.ACCESSIBILITY_LIVE_REGION_POLITE);
     endCallButton = view.findViewById(R.id.videocall_end_call);
     endCallButton.setOnClickListener(this);
-    previewSurfaceView = (SurfaceView) view.findViewById(R.id.videocall_video_preview);
+    previewSurfaceView = view.findViewById(R.id.videocall_video_preview);
     previewSurfaceView.setZOrderMediaOverlay(true);
     previewOffOverlay.setOnClickListener(v -> checkCameraPermission());
-    remoteSurfaceView = (SurfaceView) view.findViewById(R.id.videocall_video_remote);
+    remoteSurfaceView = view.findViewById(R.id.videocall_video_remote);
     remoteSurfaceView.setOnClickListener(
         surfaceView -> {
           videoCallScreenDelegate.resetAutoFullscreenTimer();
@@ -220,7 +219,7 @@
         });
     greenScreenBackgroundView = view.findViewById(R.id.videocall_green_screen_background);
     fullscreenBackgroundView = view.findViewById(R.id.videocall_fullscreen_background);
-    previewRoot = (FrameLayout) view.findViewById(R.id.videocall_preview_root);
+    previewRoot = view.findViewById(R.id.videocall_preview_root);
 
     // We need the texture view size to be able to scale the remote video. At this point the view
     // layout won't be complete so add a layout listener.
@@ -270,12 +269,6 @@
   }
 
   @Override
-  public void onSaveInstanceState(Bundle outState) {
-    super.onSaveInstanceState(outState);
-    inCallButtonUiDelegate.onSaveInstanceState(outState);
-  }
-
-  @Override
   public void onDestroyView() {
     super.onDestroyView();
     LogUtil.i("SurfaceViewVideoCallFragment.onDestroyView", null);
@@ -448,17 +441,22 @@
 
   private Point getPreviewOffsetStartShown() {
     // No insets in multiwindow mode, and rootWindowInsets will get the display's insets.
-    if (getActivity().isInMultiWindowMode()) {
+    if (requireActivity().isInMultiWindowMode()) {
       return new Point();
     }
+    if (getView() == null) {
+      return null;
+    }
+    Insets insets = getView().getRootWindowInsets().getInsetsIgnoringVisibility(
+            WindowInsets.Type.systemBars());
     if (isLandscape()) {
       int stableInsetEnd =
           getView().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL
-              ? getView().getRootWindowInsets().getStableInsetLeft()
-              : -getView().getRootWindowInsets().getStableInsetRight();
+              ? insets.left
+              : -insets.right;
       return new Point(stableInsetEnd, 0);
     } else {
-      return new Point(0, -getView().getRootWindowInsets().getStableInsetBottom());
+      return new Point(0, -insets.bottom);
     }
   }
 
@@ -901,7 +899,7 @@
 
   private boolean isLandscape() {
     // Choose orientation based on display orientation, not window orientation
-    int rotation = getActivity().getWindowManager().getDefaultDisplay().getRotation();
+    int rotation = requireActivity().getDisplay().getRotation();
     return rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270;
   }
 
@@ -971,6 +969,7 @@
         muteButton.isChecked() && !isInGreenScreenMode ? View.VISIBLE : View.GONE);
   }
 
+  @SuppressLint("CheckResult")
   private static void animateSetVisibility(final View view, final int visibility) {
     if (view.getVisibility() == visibility) {
       return;
@@ -985,8 +984,7 @@
       startAlpha = 0;
       endAlpha = 1;
     } else {
-      Assert.fail();
-      return;
+      throw Assert.createIllegalStateFailException();
     }
 
     view.setAlpha(startAlpha);
diff --git a/java/com/android/incallui/video/impl/VideoCallFragment.java b/java/com/android/incallui/video/impl/VideoCallFragment.java
index cea7d33..3b11743 100644
--- a/java/com/android/incallui/video/impl/VideoCallFragment.java
+++ b/java/com/android/incallui/video/impl/VideoCallFragment.java
@@ -54,7 +54,6 @@
 
 import androidx.activity.result.ActivityResultLauncher;
 import androidx.activity.result.contract.ActivityResultContracts;
-import androidx.annotation.ColorInt;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.fragment.app.Fragment;
@@ -217,9 +216,6 @@
     inCallButtonUiDelegate =
         FragmentUtils.getParent(this, InCallButtonUiDelegateFactory.class)
             .newInCallButtonUiDelegate();
-    if (savedInstanceState != null) {
-      inCallButtonUiDelegate.onRestoreInstanceState(savedInstanceState);
-    }
   }
 
   @Nullable
@@ -256,14 +252,13 @@
     onHoldContainer = view.findViewById(R.id.videocall_on_hold_banner);
     remoteVideoOff = (TextView) view.findViewById(R.id.videocall_remote_video_off);
     remoteVideoOff.setAccessibilityLiveRegion(View.ACCESSIBILITY_LIVE_REGION_POLITE);
-    remoteOffBlurredImageView =
-        (ImageView) view.findViewById(R.id.videocall_remote_off_blurred_image_view);
+    remoteOffBlurredImageView = view.findViewById(R.id.videocall_remote_off_blurred_image_view);
     endCallButton = view.findViewById(R.id.videocall_end_call);
     endCallButton.setOnClickListener(this);
-    previewTextureView = (TextureView) view.findViewById(R.id.videocall_video_preview);
+    previewTextureView = view.findViewById(R.id.videocall_video_preview);
     previewTextureView.setClipToOutline(true);
     previewOffOverlay.setOnClickListener(v -> checkCameraPermission());
-    remoteTextureView = (TextureView) view.findViewById(R.id.videocall_video_remote);
+    remoteTextureView = view.findViewById(R.id.videocall_video_remote);
     greenScreenBackgroundView = view.findViewById(R.id.videocall_green_screen_background);
     fullscreenBackgroundView = view.findViewById(R.id.videocall_fullscreen_background);
 
@@ -341,12 +336,6 @@
   }
 
   @Override
-  public void onSaveInstanceState(Bundle outState) {
-    super.onSaveInstanceState(outState);
-    inCallButtonUiDelegate.onSaveInstanceState(outState);
-  }
-
-  @Override
   public void onDestroyView() {
     super.onDestroyView();
     LogUtil.i("VideoCallFragment.onDestroyView", null);
@@ -477,7 +466,6 @@
     View view = getView();
     if (view != null) {
       // Code is more expressive with all flags present, even though some may be combined
-      // noinspection PointlessBitwiseExpression
       view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
     }
   }
diff --git a/java/com/android/incallui/video/impl/VideoChargesAlertDialogFragment.java b/java/com/android/incallui/video/impl/VideoChargesAlertDialogFragment.java
index d23e590..01744a7 100644
--- a/java/com/android/incallui/video/impl/VideoChargesAlertDialogFragment.java
+++ b/java/com/android/incallui/video/impl/VideoChargesAlertDialogFragment.java
@@ -41,7 +41,8 @@
 public class VideoChargesAlertDialogFragment extends DialogFragment {
 
   /** Preference key for whether to show the alert dialog for video charges next time. */
-  private static final String KEY_DO_NOT_SHOW_VIDEO_CHARGES_ALERT = "key_do_not_show_video_charges_alert";
+  private static final String KEY_DO_NOT_SHOW_VIDEO_CHARGES_ALERT =
+          "key_do_not_show_video_charges_alert";
 
   /** Key in the arguments bundle for call id. */
   private static final String ARG_CALL_ID = "call_id";
diff --git a/java/com/android/incallui/video/protocol/VideoCallScreenDelegate.java b/java/com/android/incallui/video/protocol/VideoCallScreenDelegate.java
index 9dd5450..24f6627 100644
--- a/java/com/android/incallui/video/protocol/VideoCallScreenDelegate.java
+++ b/java/com/android/incallui/video/protocol/VideoCallScreenDelegate.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,6 +19,7 @@
 
 import android.content.Context;
 import android.view.SurfaceView;
+
 import com.android.incallui.videosurface.protocol.VideoSurfaceTexture;
 
 /** Callbacks from the module out to the container. */
diff --git a/java/com/android/incallui/videosurface/bindings/VideoSurfaceBindings.java b/java/com/android/incallui/videosurface/bindings/VideoSurfaceBindings.java
index 96fccb4..656cf07 100644
--- a/java/com/android/incallui/videosurface/bindings/VideoSurfaceBindings.java
+++ b/java/com/android/incallui/videosurface/bindings/VideoSurfaceBindings.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,6 +18,7 @@
 package com.android.incallui.videosurface.bindings;
 
 import android.view.TextureView;
+
 import com.android.incallui.videosurface.impl.VideoScale;
 import com.android.incallui.videosurface.impl.VideoSurfaceTextureImpl;
 import com.android.incallui.videosurface.protocol.VideoSurfaceTexture;
diff --git a/java/com/android/incallui/videosurface/impl/VideoScale.java b/java/com/android/incallui/videosurface/impl/VideoScale.java
index 1444f59..8094cdc 100644
--- a/java/com/android/incallui/videosurface/impl/VideoScale.java
+++ b/java/com/android/incallui/videosurface/impl/VideoScale.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,6 +19,7 @@
 
 import android.graphics.Matrix;
 import android.view.TextureView;
+
 import com.android.dialer.common.LogUtil;
 
 /** Utilities to scale the preview and remote video. */
diff --git a/java/com/android/incallui/videosurface/impl/VideoSurfaceTextureImpl.java b/java/com/android/incallui/videosurface/impl/VideoSurfaceTextureImpl.java
index 18d09a7..61382c6 100644
--- a/java/com/android/incallui/videosurface/impl/VideoSurfaceTextureImpl.java
+++ b/java/com/android/incallui/videosurface/impl/VideoSurfaceTextureImpl.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2014 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,9 +22,11 @@
 import android.view.Surface;
 import android.view.TextureView;
 import android.view.View;
+
 import com.android.dialer.common.LogUtil;
 import com.android.incallui.videosurface.protocol.VideoSurfaceDelegate;
 import com.android.incallui.videosurface.protocol.VideoSurfaceTexture;
+
 import java.util.Locale;
 import java.util.Objects;
 
@@ -48,7 +51,7 @@
 
   @Override
   public void setDelegate(VideoSurfaceDelegate delegate) {
-    LogUtil.i("VideoSurfaceTextureImpl.setDelegate", "delegate: " + delegate + " " + toString());
+    LogUtil.i("VideoSurfaceTextureImpl.setDelegate", "delegate: " + delegate + " " + this);
     this.delegate = delegate;
   }
 
@@ -66,7 +69,7 @@
   public void setSurfaceDimensions(Point surfaceDimensions) {
     LogUtil.i(
         "VideoSurfaceTextureImpl.setSurfaceDimensions",
-        "surfaceDimensions: " + surfaceDimensions + " " + toString());
+        "surfaceDimensions: " + surfaceDimensions + " " + this);
     this.surfaceDimensions = surfaceDimensions;
     if (surfaceDimensions != null && savedSurfaceTexture != null) {
       savedSurfaceTexture.setDefaultBufferSize(surfaceDimensions.x, surfaceDimensions.y);
@@ -136,7 +139,7 @@
   private boolean createSurface(int width, int height) {
     LogUtil.i(
         "VideoSurfaceTextureImpl.createSurface",
-        "width: " + width + ", height: " + height + " " + toString());
+        "width: " + width + ", height: " + height + " " + this);
     savedSurfaceTexture.setDefaultBufferSize(width, height);
     if (savedSurface != null) {
       savedSurface.release();
@@ -149,7 +152,7 @@
     if (delegate != null) {
       delegate.onSurfaceCreated(this);
     } else {
-      LogUtil.e("VideoSurfaceTextureImpl.onSurfaceCreated", "delegate is null. " + toString());
+      LogUtil.e("VideoSurfaceTextureImpl.onSurfaceCreated", "delegate is null. " + this);
     }
   }
 
@@ -157,7 +160,7 @@
     if (delegate != null) {
       delegate.onSurfaceReleased(this);
     } else {
-      LogUtil.e("VideoSurfaceTextureImpl.onSurfaceReleased", "delegate is null. " + toString());
+      LogUtil.e("VideoSurfaceTextureImpl.onSurfaceReleased", "delegate is null. " + this);
     }
   }
 
@@ -182,7 +185,7 @@
           "newSurfaceTexture: "
               + newSurfaceTexture
               + " "
-              + VideoSurfaceTextureImpl.this.toString());
+              + VideoSurfaceTextureImpl.this);
 
       // Where there is no saved {@link SurfaceTexture} available, use the newly created one.
       // If a saved {@link SurfaceTexture} is available, we are re-creating after an
diff --git a/java/com/android/incallui/videotech/ims/ImsVideoCallCallback.java b/java/com/android/incallui/videotech/ims/ImsVideoCallCallback.java
index 9baef64..deff1d8 100644
--- a/java/com/android/incallui/videotech/ims/ImsVideoCallCallback.java
+++ b/java/com/android/incallui/videotech/ims/ImsVideoCallCallback.java
@@ -26,6 +26,7 @@
 import android.telecom.InCallService.VideoCall;
 import android.telecom.VideoProfile;
 import android.telecom.VideoProfile.CameraCapabilities;
+
 import com.android.dialer.common.LogUtil;
 import com.android.incallui.videotech.VideoTech.VideoTechListener;
 import com.android.incallui.videotech.utils.SessionModificationState;
diff --git a/java/com/android/voicemail/VoicemailComponent.java b/java/com/android/voicemail/VoicemailComponent.java
index 0e09627..e2963e8 100644
--- a/java/com/android/voicemail/VoicemailComponent.java
+++ b/java/com/android/voicemail/VoicemailComponent.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,8 +18,10 @@
 package com.android.voicemail;
 
 import android.content.Context;
+
 import com.android.dialer.inject.HasRootComponent;
 import com.android.dialer.inject.IncludeInDialerRoot;
+
 import dagger.Subcomponent;
 
 /** Subcomponent that can be used to access the voicemail implementation. */
diff --git a/java/com/android/voicemail/VoicemailPowerCycleReceiver.java b/java/com/android/voicemail/VoicemailPowerCycleReceiver.java
index e9362b4..ed0905b 100644
--- a/java/com/android/voicemail/VoicemailPowerCycleReceiver.java
+++ b/java/com/android/voicemail/VoicemailPowerCycleReceiver.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,6 +20,7 @@
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
+
 import com.android.dialer.common.Assert;
 
 /** Receives {@link Intent#ACTION_BOOT_COMPLETED} and {@link Intent#ACTION_SHUTDOWN} */
diff --git a/java/com/android/voicemail/VoicemailSecretCodeReceiver.java b/java/com/android/voicemail/VoicemailSecretCodeReceiver.java
index 6d14241..3bbf5c6 100644
--- a/java/com/android/voicemail/VoicemailSecretCodeReceiver.java
+++ b/java/com/android/voicemail/VoicemailSecretCodeReceiver.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,14 +17,17 @@
 
 package com.android.voicemail;
 
+import android.annotation.SuppressLint;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
+
 import com.android.dialer.common.LogUtil;
 
 /** Receives android.provider.Telephony.SECRET_CODE */
 public class VoicemailSecretCodeReceiver extends BroadcastReceiver {
 
+  @SuppressLint("UnsafeProtectedBroadcastReceiver")
   @Override
   public void onReceive(Context context, Intent intent) {
     String host = intent.getData().getHost();
diff --git a/java/com/android/voicemail/impl/ActivationTask.java b/java/com/android/voicemail/impl/ActivationTask.java
index 895f406..5476111 100644
--- a/java/com/android/voicemail/impl/ActivationTask.java
+++ b/java/com/android/voicemail/impl/ActivationTask.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,6 +17,7 @@
 
 package com.android.voicemail.impl;
 
+import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
@@ -37,6 +39,7 @@
 import com.android.voicemail.impl.sms.StatusSmsFetcher;
 import com.android.voicemail.impl.sync.SyncTask;
 import com.android.voicemail.impl.sync.VvmAccountManager;
+
 import java.io.IOException;
 import java.util.concurrent.CancellationException;
 import java.util.concurrent.ExecutionException;
@@ -272,6 +275,7 @@
     context.sendBroadcast(intent);
   }
 
+  @SuppressLint("MissingPermission")
   private static boolean hasSignal(Context context, PhoneAccountHandle phoneAccountHandle) {
     TelephonyManager telephonyManager =
         context
diff --git a/java/com/android/voicemail/impl/CarrierIdentifier.java b/java/com/android/voicemail/impl/CarrierIdentifier.java
index bbc55e8..81f8193 100644
--- a/java/com/android/voicemail/impl/CarrierIdentifier.java
+++ b/java/com/android/voicemail/impl/CarrierIdentifier.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,6 +24,7 @@
 import androidx.annotation.Nullable;
 
 import com.google.auto.value.AutoValue;
+
 import java.util.Optional;
 
 /** Identifies a carrier. */
diff --git a/java/com/android/voicemail/impl/CarrierVvmPackageInstalledReceiver.java b/java/com/android/voicemail/impl/CarrierVvmPackageInstalledReceiver.java
index c9c09b3..bd3af3b 100644
--- a/java/com/android/voicemail/impl/CarrierVvmPackageInstalledReceiver.java
+++ b/java/com/android/voicemail/impl/CarrierVvmPackageInstalledReceiver.java
@@ -16,6 +16,7 @@
 
 package com.android.voicemail.impl;
 
+import android.annotation.SuppressLint;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
@@ -27,6 +28,7 @@
  */
 public class CarrierVvmPackageInstalledReceiver extends BroadcastReceiver {
 
+  @SuppressLint("UnsafeProtectedBroadcastReceiver")
   @Override
   public void onReceive(Context context, Intent intent) {
     String packageName = intent.getStringExtra(Intent.EXTRA_PACKAGE_NAME);
diff --git a/java/com/android/voicemail/impl/DefaultOmtpEventHandler.java b/java/com/android/voicemail/impl/DefaultOmtpEventHandler.java
index 13aaf05..d595467 100644
--- a/java/com/android/voicemail/impl/DefaultOmtpEventHandler.java
+++ b/java/com/android/voicemail/impl/DefaultOmtpEventHandler.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,6 +20,7 @@
 import android.content.Context;
 import android.provider.VoicemailContract;
 import android.provider.VoicemailContract.Status;
+
 import com.android.voicemail.impl.OmtpEvents.Type;
 
 public class DefaultOmtpEventHandler {
diff --git a/java/com/android/voicemail/impl/DeviceProvisionedJobService.java b/java/com/android/voicemail/impl/DeviceProvisionedJobService.java
index 80b8b6c..1540f5b 100644
--- a/java/com/android/voicemail/impl/DeviceProvisionedJobService.java
+++ b/java/com/android/voicemail/impl/DeviceProvisionedJobService.java
@@ -29,6 +29,7 @@
 import android.provider.Settings;
 import android.provider.Settings.Global;
 import android.telecom.PhoneAccountHandle;
+
 import com.android.dialer.constants.ScheduledJobIds;
 
 /**
diff --git a/java/com/android/voicemail/impl/DialerVvmConfigManager.java b/java/com/android/voicemail/impl/DialerVvmConfigManager.java
index 019db36..2f6858f 100644
--- a/java/com/android/voicemail/impl/DialerVvmConfigManager.java
+++ b/java/com/android/voicemail/impl/DialerVvmConfigManager.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -27,14 +28,16 @@
 import com.android.dialer.R;
 import com.android.voicemail.impl.utils.XmlUtils;
 import com.google.common.collect.ComparisonChain;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.SortedSet;
 import java.util.TreeSet;
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
 
 /** Load and caches dialer vvm config from res/xml/vvm_config.xml */
 public class DialerVvmConfigManager {
diff --git a/java/com/android/voicemail/impl/OmtpVvmCarrierConfigHelper.java b/java/com/android/voicemail/impl/OmtpVvmCarrierConfigHelper.java
index c6110c9..8c91ebf 100644
--- a/java/com/android/voicemail/impl/OmtpVvmCarrierConfigHelper.java
+++ b/java/com/android/voicemail/impl/OmtpVvmCarrierConfigHelper.java
@@ -39,6 +39,7 @@
 import com.android.voicemail.impl.protocol.VisualVoicemailProtocolFactory;
 import com.android.voicemail.impl.sms.StatusMessage;
 import com.android.voicemail.impl.sync.VvmAccountManager;
+
 import java.util.Collections;
 import java.util.Optional;
 import java.util.Set;
@@ -159,10 +160,7 @@
    * known protocol.
    */
   public boolean isValid() {
-    if (protocol == null) {
-      return false;
-    }
-    return true;
+    return protocol != null;
   }
 
   @Nullable
@@ -490,8 +488,7 @@
           continue;
         }
         return true;
-      } catch (NameNotFoundException e) {
-        continue;
+      } catch (NameNotFoundException ignored) {
       }
     }
     return false;
diff --git a/java/com/android/voicemail/impl/PackageReplacedReceiver.java b/java/com/android/voicemail/impl/PackageReplacedReceiver.java
index 2ece94d..148257f 100644
--- a/java/com/android/voicemail/impl/PackageReplacedReceiver.java
+++ b/java/com/android/voicemail/impl/PackageReplacedReceiver.java
@@ -17,6 +17,7 @@
 
 package com.android.voicemail.impl;
 
+import android.annotation.SuppressLint;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
@@ -41,6 +42,7 @@
  */
 public class PackageReplacedReceiver extends BroadcastReceiver {
 
+  @SuppressLint({"MissingPermission", "UnsafeProtectedBroadcastReceiver"})
   @Override
   public void onReceive(Context context, Intent intent) {
     VvmLog.i("PackageReplacedReceiver.onReceive", "package replaced, starting activation");
diff --git a/java/com/android/voicemail/impl/StatusCheckJobService.java b/java/com/android/voicemail/impl/StatusCheckJobService.java
index fb2016b..bae1a7d 100644
--- a/java/com/android/voicemail/impl/StatusCheckJobService.java
+++ b/java/com/android/voicemail/impl/StatusCheckJobService.java
@@ -1,18 +1,22 @@
-/**
+/*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
- * <p>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
+ * 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
  *
- * <p>http://www.apache.org/licenses/LICENSE-2.0
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * <p>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
+ * 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.app.job.JobInfo;
 import android.app.job.JobParameters;
 import android.app.job.JobScheduler;
@@ -21,8 +25,10 @@
 import android.content.Context;
 import android.telecom.PhoneAccountHandle;
 import android.telecom.TelecomManager;
+
 import com.android.dialer.constants.ScheduledJobIds;
 import com.android.voicemail.impl.sync.VvmAccountManager;
+
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -50,6 +56,7 @@
             .build());
   }
 
+  @SuppressLint("MissingPermission")
   @Override
   public boolean onStartJob(JobParameters params) {
     for (PhoneAccountHandle phoneAccountHandle :
diff --git a/java/com/android/voicemail/impl/StatusCheckTask.java b/java/com/android/voicemail/impl/StatusCheckTask.java
index 0a66659..aca9b1f 100644
--- a/java/com/android/voicemail/impl/StatusCheckTask.java
+++ b/java/com/android/voicemail/impl/StatusCheckTask.java
@@ -1,29 +1,35 @@
-/**
+/*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
- * <p>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
+ * 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
  *
- * <p>http://www.apache.org/licenses/LICENSE-2.0
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * <p>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
+ * 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.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
 import android.telecom.PhoneAccountHandle;
 import android.telephony.ServiceState;
 import android.telephony.TelephonyManager;
+
 import com.android.dialer.proguard.UsedByReflection;
 import com.android.voicemail.impl.scheduling.BaseTask;
 import com.android.voicemail.impl.sms.StatusMessage;
 import com.android.voicemail.impl.sms.StatusSmsFetcher;
 import com.android.voicemail.impl.sync.VvmAccountManager;
+
 import java.io.IOException;
 import java.util.concurrent.CancellationException;
 import java.util.concurrent.ExecutionException;
@@ -49,6 +55,7 @@
     context.sendBroadcast(intent);
   }
 
+  @SuppressLint("MissingPermission")
   @Override
   public void onExecuteInBackgroundThread() {
     TelephonyManager telephonyManager =
diff --git a/java/com/android/voicemail/impl/Voicemail.java b/java/com/android/voicemail/impl/Voicemail.java
index a2282a9..ff8d01b 100644
--- a/java/com/android/voicemail/impl/Voicemail.java
+++ b/java/com/android/voicemail/impl/Voicemail.java
@@ -163,7 +163,7 @@
       builderId = builderId == null ? -1 : builderId;
       builderTimestamp = builderTimestamp == null ? 0 : builderTimestamp;
       builderDuration = builderDuration == null ? 0 : builderDuration;
-      builderIsRead = builderIsRead == null ? false : builderIsRead;
+      builderIsRead = builderIsRead != null && builderIsRead;
       return new Voicemail(
           builderTimestamp,
           builderNumber,
@@ -326,8 +326,8 @@
     } else {
       uri = null;
     }
-    isRead = in.readInt() > 0 ? true : false;
-    hasContent = in.readInt() > 0 ? true : false;
+    isRead = in.readInt() > 0;
+    hasContent = in.readInt() > 0;
     transcription = (String) readCharSequence(in);
   }
 
diff --git a/java/com/android/voicemail/impl/VoicemailClientImpl.java b/java/com/android/voicemail/impl/VoicemailClientImpl.java
index 43ed4b4..65181d6 100644
--- a/java/com/android/voicemail/impl/VoicemailClientImpl.java
+++ b/java/com/android/voicemail/impl/VoicemailClientImpl.java
@@ -16,6 +16,7 @@
  */
 package com.android.voicemail.impl;
 
+import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
@@ -156,6 +157,7 @@
     return new PinChangerImpl(context, phoneAccountHandle);
   }
 
+  @SuppressLint("MissingPermission")
   @Override
   public void appendOmtpVoicemailSelectionClause(
       Context context, StringBuilder where, List<String> selectionArgs) {
@@ -187,6 +189,7 @@
     }
   }
 
+  @SuppressLint("MissingPermission")
   @Override
   public void appendOmtpVoicemailStatusSelectionClause(
       Context context, StringBuilder where, List<String> selectionArgs) {
diff --git a/java/com/android/voicemail/impl/VoicemailClientReceiver.java b/java/com/android/voicemail/impl/VoicemailClientReceiver.java
index 688636e..0f1804b 100644
--- a/java/com/android/voicemail/impl/VoicemailClientReceiver.java
+++ b/java/com/android/voicemail/impl/VoicemailClientReceiver.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,6 +21,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.telecom.PhoneAccountHandle;
+
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.voicemail.VoicemailClient;
diff --git a/java/com/android/voicemail/impl/VoicemailModule.java b/java/com/android/voicemail/impl/VoicemailModule.java
index a2a803a..2d11946 100644
--- a/java/com/android/voicemail/impl/VoicemailModule.java
+++ b/java/com/android/voicemail/impl/VoicemailModule.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,13 +18,16 @@
 package com.android.voicemail.impl;
 
 import android.content.Context;
+
 import com.android.dialer.inject.ApplicationContext;
 import com.android.voicemail.VoicemailClient;
 import com.android.voicemail.VoicemailPermissionHelper;
 import com.android.voicemail.stub.StubVoicemailClient;
+
+import javax.inject.Singleton;
+
 import dagger.Module;
 import dagger.Provides;
-import javax.inject.Singleton;
 
 /** This module provides an instance of the voicemail client. */
 @Module
diff --git a/java/com/android/voicemail/impl/VvmLog.java b/java/com/android/voicemail/impl/VvmLog.java
index 7d47904..1a7514a 100644
--- a/java/com/android/voicemail/impl/VvmLog.java
+++ b/java/com/android/voicemail/impl/VvmLog.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,6 +19,7 @@
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.persistentlog.PersistentLogger;
 import com.android.voicemail.impl.utils.IndentingPrintWriter;
+
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
 import java.util.ArrayDeque;
diff --git a/java/com/android/voicemail/impl/VvmPackageInstallHandler.java b/java/com/android/voicemail/impl/VvmPackageInstallHandler.java
index d6d5b77..db61845 100644
--- a/java/com/android/voicemail/impl/VvmPackageInstallHandler.java
+++ b/java/com/android/voicemail/impl/VvmPackageInstallHandler.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,9 +17,11 @@
 
 package com.android.voicemail.impl;
 
+import android.annotation.SuppressLint;
 import android.content.Context;
 import android.telecom.PhoneAccountHandle;
 import android.telecom.TelecomManager;
+
 import com.android.voicemail.impl.settings.VisualVoicemailSettingsUtil;
 
 /**
@@ -37,6 +40,7 @@
    * Iterates through all phone account and disable VVM on a account if {@code packageName} is
    * listed as a carrier VVM package.
    */
+  @SuppressLint("MissingPermission")
   public static void handlePackageInstalled(Context context) {
     // 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.
diff --git a/java/com/android/voicemail/impl/VvmPhoneStateListener.java b/java/com/android/voicemail/impl/VvmPhoneStateListener.java
index ff8b106..cabaea3 100644
--- a/java/com/android/voicemail/impl/VvmPhoneStateListener.java
+++ b/java/com/android/voicemail/impl/VvmPhoneStateListener.java
@@ -20,6 +20,7 @@
 import android.telecom.PhoneAccountHandle;
 import android.telephony.PhoneStateListener;
 import android.telephony.ServiceState;
+
 import com.android.voicemail.impl.sync.SyncTask;
 import com.android.voicemail.impl.sync.VoicemailStatusQueryHelper;
 import com.android.voicemail.impl.sync.VvmAccountManager;
diff --git a/java/com/android/voicemail/impl/configui/ConfigOverrideFragment.java b/java/com/android/voicemail/impl/configui/ConfigOverrideFragment.java
index db77930..6597593 100644
--- a/java/com/android/voicemail/impl/configui/ConfigOverrideFragment.java
+++ b/java/com/android/voicemail/impl/configui/ConfigOverrideFragment.java
@@ -17,6 +17,7 @@
 
 package com.android.voicemail.impl.configui;
 
+import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.SharedPreferences;
 import android.os.Bundle;
@@ -32,7 +33,6 @@
 import androidx.preference.Preference.OnPreferenceChangeListener;
 import androidx.preference.PreferenceFragmentCompat;
 import androidx.preference.PreferenceManager;
-import androidx.preference.PreferenceScreen;
 import androidx.preference.SwitchPreferenceCompat;
 
 import com.android.dialer.R;
@@ -105,8 +105,9 @@
    * Loads the config for the currently carrier into the override values, from the dialer or the
    * carrier config app. This is a "reset" button to load the defaults.
    */
+  @SuppressLint("MissingPermission")
   private void loadCurrentConfig() {
-    Context context = getActivity();
+    Context context = requireActivity();
     PhoneAccountHandle phoneAccountHandle =
         context
             .getSystemService(TelecomManager.class)
diff --git a/java/com/android/voicemail/impl/configui/VoicemailSecretCodeActivity.java b/java/com/android/voicemail/impl/configui/VoicemailSecretCodeActivity.java
index beeb956..d6b0c4b 100644
--- a/java/com/android/voicemail/impl/configui/VoicemailSecretCodeActivity.java
+++ b/java/com/android/voicemail/impl/configui/VoicemailSecretCodeActivity.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,6 +20,7 @@
 import android.content.Intent;
 import android.preference.PreferenceActivity;
 import android.provider.VoicemailContract;
+
 import java.util.List;
 
 /** Activity launched by simulator->voicemail, provides debug features. */
diff --git a/java/com/android/voicemail/impl/fetch/FetchVoicemailReceiver.java b/java/com/android/voicemail/impl/fetch/FetchVoicemailReceiver.java
index 4b8f762..147f323 100644
--- a/java/com/android/voicemail/impl/fetch/FetchVoicemailReceiver.java
+++ b/java/com/android/voicemail/impl/fetch/FetchVoicemailReceiver.java
@@ -16,6 +16,7 @@
  */
 package com.android.voicemail.impl.fetch;
 
+import android.annotation.SuppressLint;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.ContentResolver;
@@ -41,6 +42,7 @@
 import com.android.voicemail.impl.imap.ImapHelper.InitializingException;
 import com.android.voicemail.impl.sync.VvmAccountManager;
 import com.android.voicemail.impl.sync.VvmNetworkRequestCallback;
+
 import java.util.concurrent.Executor;
 import java.util.concurrent.Executors;
 
@@ -153,6 +155,7 @@
    * format. There's a chance of M phone account collisions on multi-SIM devices, but visual
    * voicemail is not supported on M multi-SIM.
    */
+  @SuppressLint("MissingPermission")
   @Nullable
   private static PhoneAccountHandle getAccountFromMarshmallowAccount(
       Context context, PhoneAccountHandle oldAccount) {
diff --git a/java/com/android/voicemail/impl/fetch/VoicemailFetchedCallback.java b/java/com/android/voicemail/impl/fetch/VoicemailFetchedCallback.java
index e15af21..61e0669 100644
--- a/java/com/android/voicemail/impl/fetch/VoicemailFetchedCallback.java
+++ b/java/com/android/voicemail/impl/fetch/VoicemailFetchedCallback.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -15,6 +16,7 @@
  */
 package com.android.voicemail.impl.fetch;
 
+import android.annotation.SuppressLint;
 import android.content.ContentResolver;
 import android.content.ContentValues;
 import android.content.Context;
@@ -29,9 +31,11 @@
 import com.android.voicemail.impl.R;
 import com.android.voicemail.impl.VvmLog;
 import com.android.voicemail.impl.imap.VoicemailPayload;
+
+import org.apache.commons.io.IOUtils;
+
 import java.io.IOException;
 import java.io.OutputStream;
-import org.apache.commons.io.IOUtils;
 
 /**
  * Callback for when a voicemail payload is fetched. It copies the returned stream to the data file
@@ -58,6 +62,7 @@
    *
    * @param voicemailPayload The object containing the content data for the voicemail
    */
+  @SuppressLint("MissingPermission")
   public void setVoicemailContent(@Nullable VoicemailPayload voicemailPayload) {
     Assert.isWorkerThread();
     if (voicemailPayload == null) {
diff --git a/java/com/android/voicemail/impl/imap/ImapHelper.java b/java/com/android/voicemail/impl/imap/ImapHelper.java
index 4ebba33..95e7bbb 100644
--- a/java/com/android/voicemail/impl/imap/ImapHelper.java
+++ b/java/com/android/voicemail/impl/imap/ImapHelper.java
@@ -54,6 +54,9 @@
 import com.android.voicemail.impl.mail.store.imap.ImapResponse;
 import com.android.voicemail.impl.mail.utils.LogUtils;
 import com.android.voicemail.impl.sync.OmtpVvmSyncService.TranscriptionFetchedCallback;
+
+import org.apache.commons.io.IOUtils;
+
 import java.io.BufferedOutputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.Closeable;
@@ -62,7 +65,6 @@
 import java.util.Arrays;
 import java.util.List;
 import java.util.Locale;
-import org.apache.commons.io.IOUtils;
 
 /** A helper interface to abstract commands sent across IMAP interface for a given account. */
 public class ImapHelper implements Closeable {
@@ -133,7 +135,7 @@
     } catch (NumberFormatException e) {
       handleEvent(OmtpEvents.DATA_INVALID_PORT);
       LogUtils.w(TAG, "Could not parse port number");
-      throw new InitializingException("cannot initialize ImapHelper:" + e.toString());
+      throw new InitializingException("cannot initialize ImapHelper:" + e);
     }
   }
 
@@ -150,6 +152,7 @@
       return false;
     }
     return !capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING);
+
   }
 
   public OmtpVvmCarrierConfigHelper getConfig() {
@@ -206,7 +209,7 @@
    * @return A list of voicemail objects containing data about voicemails stored on the server.
    */
   public List<Voicemail> fetchAllVoicemails() {
-    List<Voicemail> result = new ArrayList<Voicemail>();
+    List<Voicemail> result = new ArrayList<>();
     Message[] messages;
     try {
       folder = openImapFolder(ImapFolder.MODE_READ_WRITE);
@@ -327,7 +330,7 @@
       VoicemailPayload voicemailPayload = fetchVoicemailPayload(message);
       callback.setVoicemailContent(voicemailPayload);
       return true;
-    } catch (MessagingException e) {
+    } catch (MessagingException ignored) {
     } finally {
       closeImapFolder();
     }
diff --git a/java/com/android/voicemail/impl/mail/Address.java b/java/com/android/voicemail/impl/mail/Address.java
index 1e5a259..c92cb9e 100644
--- a/java/com/android/voicemail/impl/mail/Address.java
+++ b/java/com/android/voicemail/impl/mail/Address.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,12 +21,14 @@
 import android.text.TextUtils;
 import android.text.util.Rfc822Token;
 import android.text.util.Rfc822Tokenizer;
-import java.util.ArrayList;
-import java.util.regex.Pattern;
+
 import org.apache.james.mime4j.codec.DecodeMonitor;
 import org.apache.james.mime4j.codec.DecoderUtil;
 import org.apache.james.mime4j.codec.EncoderUtil;
 
+import java.util.ArrayList;
+import java.util.regex.Pattern;
+
 /**
  * This class represent email address.
  *
@@ -123,7 +126,7 @@
       return EMPTY_ADDRESS_ARRAY;
     }
     Rfc822Token[] tokens = Rfc822Tokenizer.tokenize(addressList);
-    ArrayList<Address> addresses = new ArrayList<Address>();
+    ArrayList<Address> addresses = new ArrayList<>();
     for (int i = 0, length = tokens.length; i < length; ++i) {
       Rfc822Token token = tokens[i];
       String address = token.getAddress();
@@ -137,7 +140,7 @@
         }
       }
     }
-    return addresses.toArray(new Address[addresses.size()]);
+    return addresses.toArray(new Address[0]);
   }
 
   /** Checks whether a string email address is valid. E.g. name@domain.com is valid. */
diff --git a/java/com/android/voicemail/impl/mail/Base64Body.java b/java/com/android/voicemail/impl/mail/Base64Body.java
index 5c14296..82d6d8b 100644
--- a/java/com/android/voicemail/impl/mail/Base64Body.java
+++ b/java/com/android/voicemail/impl/mail/Base64Body.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,10 +18,12 @@
 
 import android.util.Base64;
 import android.util.Base64OutputStream;
+
+import org.apache.commons.io.IOUtils;
+
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import org.apache.commons.io.IOUtils;
 
 public class Base64Body implements Body {
   private final InputStream source;
diff --git a/java/com/android/voicemail/impl/mail/Body.java b/java/com/android/voicemail/impl/mail/Body.java
index 3ad81bc..d4b04fc 100644
--- a/java/com/android/voicemail/impl/mail/Body.java
+++ b/java/com/android/voicemail/impl/mail/Body.java
@@ -20,7 +20,7 @@
 import java.io.OutputStream;
 
 public interface Body {
-  public InputStream getInputStream() throws MessagingException;
+  InputStream getInputStream() throws MessagingException;
 
-  public void writeTo(OutputStream out) throws IOException, MessagingException;
+  void writeTo(OutputStream out) throws IOException, MessagingException;
 }
diff --git a/java/com/android/voicemail/impl/mail/MailTransport.java b/java/com/android/voicemail/impl/mail/MailTransport.java
index b67c08a..1598058 100644
--- a/java/com/android/voicemail/impl/mail/MailTransport.java
+++ b/java/com/android/voicemail/impl/mail/MailTransport.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,11 +19,13 @@
 import android.content.Context;
 import android.net.Network;
 import android.net.TrafficStats;
+
 import com.android.dialer.constants.TrafficStatsTags;
 import com.android.voicemail.impl.OmtpEvents;
 import com.android.voicemail.impl.imap.ImapHelper;
 import com.android.voicemail.impl.mail.store.ImapStore;
 import com.android.voicemail.impl.mail.utils.LogUtils;
+
 import java.io.BufferedInputStream;
 import java.io.BufferedOutputStream;
 import java.io.IOException;
@@ -33,6 +36,7 @@
 import java.net.Socket;
 import java.util.ArrayList;
 import java.util.List;
+
 import javax.net.ssl.HostnameVerifier;
 import javax.net.ssl.HttpsURLConnection;
 import javax.net.ssl.SSLException;
@@ -99,9 +103,9 @@
    * SSL connection if indicated.
    */
   public void open() throws MessagingException {
-    LogUtils.d(TAG, "*** IMAP open " + host + ":" + String.valueOf(port));
+    LogUtils.d(TAG, "*** IMAP open " + host + ":" + port);
 
-    List<InetSocketAddress> socketAddresses = new ArrayList<InetSocketAddress>();
+    List<InetSocketAddress> socketAddresses = new ArrayList<>();
 
     if (network == null) {
       socketAddresses.add(new InetSocketAddress(host, port));
diff --git a/java/com/android/voicemail/impl/mail/Message.java b/java/com/android/voicemail/impl/mail/Message.java
index 3cd5700..9b7f168 100644
--- a/java/com/android/voicemail/impl/mail/Message.java
+++ b/java/com/android/voicemail/impl/mail/Message.java
@@ -76,7 +76,7 @@
 
   private HashSet<String> getFlagSet() {
     if (flags == null) {
-      flags = new HashSet<String>();
+      flags = new HashSet<>();
     }
     return flags;
   }
diff --git a/java/com/android/voicemail/impl/mail/PackedString.java b/java/com/android/voicemail/impl/mail/PackedString.java
index 5b74b56..66b5512 100644
--- a/java/com/android/voicemail/impl/mail/PackedString.java
+++ b/java/com/android/voicemail/impl/mail/PackedString.java
@@ -17,6 +17,7 @@
 package com.android.voicemail.impl.mail;
 
 import android.util.ArrayMap;
+
 import java.util.Map;
 
 /**
@@ -39,7 +40,7 @@
 
   private final String string;
   private ArrayMap<String, String> exploded;
-  private static final ArrayMap<String, String> EMPTY_MAP = new ArrayMap<String, String>();
+  private static final ArrayMap<String, String> EMPTY_MAP = new ArrayMap<>();
 
   /**
    * Create a packed string using an already-packed string (e.g. from database)
@@ -74,7 +75,7 @@
     if (exploded == null) {
       exploded = explode(string);
     }
-    return new ArrayMap<String, String>(exploded);
+    return new ArrayMap<>(exploded);
   }
 
   /** Read out all values into a map. */
@@ -82,7 +83,7 @@
     if (packed == null || packed.length() == 0) {
       return EMPTY_MAP;
     }
-    ArrayMap<String, String> map = new ArrayMap<String, String>();
+    ArrayMap<String, String> map = new ArrayMap<>();
 
     int length = packed.length();
     int elementStartIndex = 0;
@@ -123,7 +124,7 @@
 
     /** Create a builder that's empty (for filling) */
     public Builder() {
-      map = new ArrayMap<String, String>();
+      map = new ArrayMap<>();
     }
 
     /** Create a builder using the values of an existing PackedString (for editing). */
diff --git a/java/com/android/voicemail/impl/mail/Part.java b/java/com/android/voicemail/impl/mail/Part.java
index 3be5c57..4a681b6 100644
--- a/java/com/android/voicemail/impl/mail/Part.java
+++ b/java/com/android/voicemail/impl/mail/Part.java
@@ -19,33 +19,33 @@
 import java.io.OutputStream;
 
 public interface Part extends Fetchable {
-  public void addHeader(String name, String value) throws MessagingException;
+  void addHeader(String name, String value) throws MessagingException;
 
-  public void removeHeader(String name) throws MessagingException;
+  void removeHeader(String name) throws MessagingException;
 
-  public void setHeader(String name, String value) throws MessagingException;
+  void setHeader(String name, String value) throws MessagingException;
 
-  public Body getBody() throws MessagingException;
+  Body getBody() throws MessagingException;
 
-  public String getContentType() throws MessagingException;
+  String getContentType() throws MessagingException;
 
-  public String getDisposition() throws MessagingException;
+  String getDisposition() throws MessagingException;
 
-  public String getContentId() throws MessagingException;
+  String getContentId() throws MessagingException;
 
-  public String[] getHeader(String name) throws MessagingException;
+  String[] getHeader(String name) throws MessagingException;
 
-  public void setExtendedHeader(String name, String value) throws MessagingException;
+  void setExtendedHeader(String name, String value) throws MessagingException;
 
-  public String getExtendedHeader(String name) throws MessagingException;
+  String getExtendedHeader(String name) throws MessagingException;
 
-  public int getSize() throws MessagingException;
+  int getSize() throws MessagingException;
 
-  public boolean isMimeType(String mimeType) throws MessagingException;
+  boolean isMimeType(String mimeType) throws MessagingException;
 
-  public String getMimeType() throws MessagingException;
+  String getMimeType() throws MessagingException;
 
-  public void setBody(Body body) throws MessagingException;
+  void setBody(Body body) throws MessagingException;
 
-  public void writeTo(OutputStream out) throws IOException, MessagingException;
+  void writeTo(OutputStream out) throws IOException, MessagingException;
 }
diff --git a/java/com/android/voicemail/impl/mail/TempDirectory.java b/java/com/android/voicemail/impl/mail/TempDirectory.java
index f12e45b..e8151d5 100644
--- a/java/com/android/voicemail/impl/mail/TempDirectory.java
+++ b/java/com/android/voicemail/impl/mail/TempDirectory.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,6 +17,7 @@
 package com.android.voicemail.impl.mail;
 
 import android.content.Context;
+
 import java.io.File;
 
 /**
diff --git a/java/com/android/voicemail/impl/mail/internet/BinaryTempFileBody.java b/java/com/android/voicemail/impl/mail/internet/BinaryTempFileBody.java
index d1521bd..ccecff2 100644
--- a/java/com/android/voicemail/impl/mail/internet/BinaryTempFileBody.java
+++ b/java/com/android/voicemail/impl/mail/internet/BinaryTempFileBody.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,17 +18,19 @@
 
 import android.util.Base64;
 import android.util.Base64OutputStream;
+
 import com.android.voicemail.impl.mail.Body;
 import com.android.voicemail.impl.mail.MessagingException;
 import com.android.voicemail.impl.mail.TempDirectory;
+
+import org.apache.commons.io.IOUtils;
+
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
 import java.io.FilterInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import org.apache.commons.io.IOUtils;
+import java.nio.file.Files;
 
 /**
  * A Body that is backed by a temp file. The Body exposes a getOutputStream method that allows the
@@ -51,13 +54,13 @@
   public OutputStream getOutputStream() throws IOException {
     file = File.createTempFile("body", null, TempDirectory.getTempDirectory());
     file.deleteOnExit();
-    return new FileOutputStream(file);
+    return Files.newOutputStream(file.toPath());
   }
 
   @Override
   public InputStream getInputStream() throws MessagingException {
     try {
-      return new BinaryTempFileBodyInputStream(new FileInputStream(file));
+      return new BinaryTempFileBodyInputStream(Files.newInputStream(file.toPath()));
     } catch (IOException ioe) {
       throw new MessagingException("Unable to open body", ioe);
     }
diff --git a/java/com/android/voicemail/impl/mail/internet/MimeBodyPart.java b/java/com/android/voicemail/impl/mail/internet/MimeBodyPart.java
index 5445611..f80afb3 100644
--- a/java/com/android/voicemail/impl/mail/internet/MimeBodyPart.java
+++ b/java/com/android/voicemail/impl/mail/internet/MimeBodyPart.java
@@ -20,6 +20,7 @@
 import com.android.voicemail.impl.mail.BodyPart;
 import com.android.voicemail.impl.mail.MessagingException;
 import com.android.voicemail.impl.mail.Multipart;
+
 import java.io.BufferedWriter;
 import java.io.IOException;
 import java.io.OutputStream;
@@ -113,12 +114,7 @@
 
   @Override
   public String getDisposition() throws MessagingException {
-    String contentDisposition = getFirstHeader(MimeHeader.HEADER_CONTENT_DISPOSITION);
-    if (contentDisposition == null) {
-      return null;
-    } else {
-      return contentDisposition;
-    }
+    return getFirstHeader(MimeHeader.HEADER_CONTENT_DISPOSITION);
   }
 
   @Override
diff --git a/java/com/android/voicemail/impl/mail/internet/MimeHeader.java b/java/com/android/voicemail/impl/mail/internet/MimeHeader.java
index 17d2556..101b5ab 100644
--- a/java/com/android/voicemail/impl/mail/internet/MimeHeader.java
+++ b/java/com/android/voicemail/impl/mail/internet/MimeHeader.java
@@ -17,6 +17,7 @@
 package com.android.voicemail.impl.mail.internet;
 
 import com.android.voicemail.impl.mail.MessagingException;
+
 import java.io.BufferedWriter;
 import java.io.IOException;
 import java.io.OutputStream;
@@ -46,7 +47,7 @@
     HEADER_ANDROID_ATTACHMENT_STORE_DATA
   };
 
-  protected final ArrayList<Field> fields = new ArrayList<Field>();
+  protected final ArrayList<Field> fields = new ArrayList<>();
 
   public void clear() {
     fields.clear();
@@ -73,7 +74,7 @@
   }
 
   public String[] getHeader(String name) throws MessagingException {
-    ArrayList<String> values = new ArrayList<String>();
+    ArrayList<String> values = new ArrayList<>();
     for (Field field : fields) {
       if (field.name.equalsIgnoreCase(name)) {
         values.add(field.value);
@@ -86,7 +87,7 @@
   }
 
   public void removeHeader(String name) throws MessagingException {
-    ArrayList<Field> removeFields = new ArrayList<Field>();
+    ArrayList<Field> removeFields = new ArrayList<>();
     for (Field field : fields) {
       if (field.name.equalsIgnoreCase(name)) {
         removeFields.add(field);
diff --git a/java/com/android/voicemail/impl/mail/internet/MimeMessage.java b/java/com/android/voicemail/impl/mail/internet/MimeMessage.java
index 7f6c098..9ca3d58 100644
--- a/java/com/android/voicemail/impl/mail/internet/MimeMessage.java
+++ b/java/com/android/voicemail/impl/mail/internet/MimeMessage.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -28,6 +29,16 @@
 import com.android.voicemail.impl.mail.Multipart;
 import com.android.voicemail.impl.mail.Part;
 import com.android.voicemail.impl.mail.utils.LogUtils;
+
+import org.apache.james.mime4j.MimeException;
+import org.apache.james.mime4j.dom.field.DateTimeField;
+import org.apache.james.mime4j.field.DefaultFieldParser;
+import org.apache.james.mime4j.io.EOLConvertingInputStream;
+import org.apache.james.mime4j.parser.ContentHandler;
+import org.apache.james.mime4j.parser.MimeStreamParser;
+import org.apache.james.mime4j.stream.BodyDescriptor;
+import org.apache.james.mime4j.stream.Field;
+
 import java.io.BufferedWriter;
 import java.io.IOException;
 import java.io.InputStream;
@@ -38,14 +49,6 @@
 import java.util.Locale;
 import java.util.Stack;
 import java.util.regex.Pattern;
-import org.apache.james.mime4j.MimeException;
-import org.apache.james.mime4j.dom.field.DateTimeField;
-import org.apache.james.mime4j.field.DefaultFieldParser;
-import org.apache.james.mime4j.io.EOLConvertingInputStream;
-import org.apache.james.mime4j.parser.ContentHandler;
-import org.apache.james.mime4j.parser.MimeStreamParser;
-import org.apache.james.mime4j.stream.BodyDescriptor;
-import org.apache.james.mime4j.stream.Field;
 
 /**
  * An implementation of Message that stores all of its metadata in RFC 822 and RFC 2045 style
@@ -107,7 +110,7 @@
       sb.append(c);
     }
     sb.append(".");
-    sb.append(Long.toString(System.currentTimeMillis()));
+    sb.append(System.currentTimeMillis());
     sb.append("@email.android.com>");
     return sb.toString();
   }
@@ -453,7 +456,7 @@
   }
 
   class MimeMessageBuilder implements ContentHandler {
-    private final Stack<Object> stack = new Stack<Object>();
+    private final Stack<Object> stack = new Stack<>();
 
     public MimeMessageBuilder() {}
 
diff --git a/java/com/android/voicemail/impl/mail/internet/MimeMultipart.java b/java/com/android/voicemail/impl/mail/internet/MimeMultipart.java
index 6cb2c27..0ff3ce0 100644
--- a/java/com/android/voicemail/impl/mail/internet/MimeMultipart.java
+++ b/java/com/android/voicemail/impl/mail/internet/MimeMultipart.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,6 +19,7 @@
 import com.android.voicemail.impl.mail.BodyPart;
 import com.android.voicemail.impl.mail.MessagingException;
 import com.android.voicemail.impl.mail.Multipart;
+
 import java.io.BufferedWriter;
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/java/com/android/voicemail/impl/mail/internet/MimeUtility.java b/java/com/android/voicemail/impl/mail/internet/MimeUtility.java
index bd85e47..0d9e0dc 100644
--- a/java/com/android/voicemail/impl/mail/internet/MimeUtility.java
+++ b/java/com/android/voicemail/impl/mail/internet/MimeUtility.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,6 +20,7 @@
 import android.util.Base64;
 import android.util.Base64DataException;
 import android.util.Base64InputStream;
+
 import com.android.voicemail.impl.VvmLog;
 import com.android.voicemail.impl.mail.Body;
 import com.android.voicemail.impl.mail.BodyPart;
@@ -26,6 +28,14 @@
 import com.android.voicemail.impl.mail.MessagingException;
 import com.android.voicemail.impl.mail.Multipart;
 import com.android.voicemail.impl.mail.Part;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.codec.DecoderUtil;
+import org.apache.james.mime4j.codec.EncoderUtil;
+import org.apache.james.mime4j.codec.QuotedPrintableInputStream;
+import org.apache.james.mime4j.util.CharsetUtil;
+
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
@@ -33,12 +43,6 @@
 import java.util.ArrayList;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
-import org.apache.commons.io.IOUtils;
-import org.apache.james.mime4j.codec.DecodeMonitor;
-import org.apache.james.mime4j.codec.DecoderUtil;
-import org.apache.james.mime4j.codec.EncoderUtil;
-import org.apache.james.mime4j.codec.QuotedPrintableInputStream;
-import org.apache.james.mime4j.util.CharsetUtil;
 
 public class MimeUtility {
   private static final String LOG_TAG = "Email";
@@ -253,18 +257,12 @@
         }
       }
 
-    } catch (OutOfMemoryError oom) {
+    } catch (OutOfMemoryError | Exception oom) {
       /*
        * If we are not able to process the body there's nothing we can do about it. Return
        * null and let the upper layers handle the missing content.
        */
-      VvmLog.e(LOG_TAG, "Unable to getTextFromPart " + oom.toString());
-    } catch (Exception e) {
-      /*
-       * If we are not able to process the body there's nothing we can do about it. Return
-       * null and let the upper layers handle the missing content.
-       */
-      VvmLog.e(LOG_TAG, "Unable to getTextFromPart " + e.toString());
+      VvmLog.e(LOG_TAG, "Unable to getTextFromPart " + oom);
     }
     return null;
   }
diff --git a/java/com/android/voicemail/impl/mail/internet/TextBody.java b/java/com/android/voicemail/impl/mail/internet/TextBody.java
index b3bccb7..c778bc9 100644
--- a/java/com/android/voicemail/impl/mail/internet/TextBody.java
+++ b/java/com/android/voicemail/impl/mail/internet/TextBody.java
@@ -17,13 +17,15 @@
 package com.android.voicemail.impl.mail.internet;
 
 import android.util.Base64;
+
 import com.android.voicemail.impl.mail.Body;
 import com.android.voicemail.impl.mail.MessagingException;
+
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
 
 public class TextBody implements Body {
   final String body;
@@ -34,7 +36,7 @@
 
   @Override
   public void writeTo(OutputStream out) throws IOException, MessagingException {
-    byte[] bytes = body.getBytes("UTF-8");
+    byte[] bytes = body.getBytes(StandardCharsets.UTF_8);
     out.write(Base64.encode(bytes, Base64.CRLF));
   }
 
@@ -50,11 +52,7 @@
   /** Returns an InputStream that reads this body's text in UTF-8 format. */
   @Override
   public InputStream getInputStream() throws MessagingException {
-    try {
-      byte[] b = body.getBytes("UTF-8");
-      return new ByteArrayInputStream(b);
-    } catch (UnsupportedEncodingException usee) {
-      return null;
-    }
+    byte[] b = body.getBytes(StandardCharsets.UTF_8);
+    return new ByteArrayInputStream(b);
   }
 }
diff --git a/java/com/android/voicemail/impl/mail/store/ImapConnection.java b/java/com/android/voicemail/impl/mail/store/ImapConnection.java
index 31511b7..4a4debb 100644
--- a/java/com/android/voicemail/impl/mail/store/ImapConnection.java
+++ b/java/com/android/voicemail/impl/mail/store/ImapConnection.java
@@ -18,6 +18,7 @@
 
 import android.util.ArraySet;
 import android.util.Base64;
+
 import com.android.voicemail.impl.OmtpEvents;
 import com.android.voicemail.impl.VvmLog;
 import com.android.voicemail.impl.mail.AuthenticationFailedException;
@@ -31,12 +32,14 @@
 import com.android.voicemail.impl.mail.store.imap.ImapResponseParser;
 import com.android.voicemail.impl.mail.store.imap.ImapUtility;
 import com.android.voicemail.impl.mail.utils.LogUtils;
+
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicInteger;
+
 import javax.net.ssl.SSLException;
 
 /** A cacheable class that stores the details for a single IMAP connection. */
@@ -180,7 +183,7 @@
   }
 
   /** Logs into the IMAP server */
-  private void doLogin() throws IOException, MessagingException, AuthenticationFailedException {
+  private void doLogin() throws IOException, MessagingException {
     try {
       if (capabilities.contains(ImapConstants.CAPABILITY_AUTH_DIGEST_MD5)) {
         doDigestMd5Auth();
@@ -301,7 +304,7 @@
       }
     }
 
-    LogUtils.d(TAG, "Capabilities: " + capabilities.toString());
+    LogUtils.d(TAG, "Capabilities: " + capabilities);
   }
 
   private boolean hasCapability(String capability) {
@@ -380,7 +383,7 @@
    * @throws MessagingException
    */
   List<ImapResponse> getCommandResponses() throws IOException, MessagingException {
-    final List<ImapResponse> responses = new ArrayList<ImapResponse>();
+    final List<ImapResponse> responses = new ArrayList<>();
     ImapResponse response;
     do {
       response = parser.readResponse(false);
diff --git a/java/com/android/voicemail/impl/mail/store/ImapFolder.java b/java/com/android/voicemail/impl/mail/store/ImapFolder.java
index bf99dde..8bf4756 100644
--- a/java/com/android/voicemail/impl/mail/store/ImapFolder.java
+++ b/java/com/android/voicemail/impl/mail/store/ImapFolder.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -44,6 +45,7 @@
 import com.android.voicemail.impl.mail.store.imap.ImapResponse;
 import com.android.voicemail.impl.mail.store.imap.ImapString;
 import com.android.voicemail.impl.mail.utils.Utility;
+
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -79,7 +81,7 @@
 
   /** Callback for each message retrieval. */
   public interface MessageRetrievalListener {
-    public void messageRetrieved(Message message);
+    void messageRetrieved(Message message);
   }
 
   private void destroyResponses() {
@@ -152,7 +154,7 @@
 
   String[] getSearchUids(List<ImapResponse> responses) {
     // S: * SEARCH 2 3 6
-    final ArrayList<String> uids = new ArrayList<String>();
+    final ArrayList<String> uids = new ArrayList<>();
     for (ImapResponse response : responses) {
       if (!response.isDataResponse(0, ImapConstants.SEARCH)) {
         continue;
@@ -220,7 +222,7 @@
   }
 
   public Message[] getMessagesInternal(String[] uids) {
-    final ArrayList<Message> messages = new ArrayList<Message>(uids.length);
+    final ArrayList<Message> messages = new ArrayList<>(uids.length);
     for (int i = 0; i < uids.length; i++) {
       final String uid = uids[i];
       final ImapMessage message = new ImapMessage(uid, this);
@@ -245,7 +247,7 @@
       return;
     }
     checkOpen();
-    ArrayMap<String, Message> messageMap = new ArrayMap<String, Message>();
+    ArrayMap<String, Message> messageMap = new ArrayMap<>();
     for (Message m : messages) {
       messageMap.put(m.getUid(), m);
     }
@@ -261,7 +263,7 @@
      * Part      - UID FETCH (BODY.PEEK[ID]) where ID = mime part ID
      */
 
-    final LinkedHashSet<String> fetchFields = new LinkedHashSet<String>();
+    final LinkedHashSet<String> fetchFields = new LinkedHashSet<>();
 
     fetchFields.add(ImapConstants.UID);
     if (fp.contains(FetchProfile.Item.FLAGS)) {
@@ -300,7 +302,7 @@
               Locale.US,
               ImapConstants.UID_FETCH + " %s (%s)",
               ImapStore.joinMessageUids(messages),
-              Utility.combine(fetchFields.toArray(new String[fetchFields.size()]), ' ')),
+              Utility.combine(fetchFields.toArray(new String[0]), ' ')),
           false);
       ImapResponse response;
       do {
@@ -650,7 +652,7 @@
         } else if (part instanceof MimeBodyPart) {
           ((MimeBodyPart) part).setSize(size);
         } else {
-          throw new MessagingException("Unknown part type " + part.toString());
+          throw new MessagingException("Unknown part type " + part);
         }
       }
       part.setHeader(MimeHeader.HEADER_ANDROID_ATTACHMENT_STORE_DATA, id);
diff --git a/java/com/android/voicemail/impl/mail/store/ImapStore.java b/java/com/android/voicemail/impl/mail/store/ImapStore.java
index 3561da1..cf86acd 100644
--- a/java/com/android/voicemail/impl/mail/store/ImapStore.java
+++ b/java/com/android/voicemail/impl/mail/store/ImapStore.java
@@ -19,14 +19,17 @@
 
 import android.content.Context;
 import android.net.Network;
+
 import com.android.voicemail.impl.imap.ImapHelper;
 import com.android.voicemail.impl.mail.MailTransport;
 import com.android.voicemail.impl.mail.Message;
 import com.android.voicemail.impl.mail.MessagingException;
 import com.android.voicemail.impl.mail.internet.MimeMessage;
+
+import org.apache.james.mime4j.MimeException;
+
 import java.io.IOException;
 import java.io.InputStream;
-import org.apache.james.mime4j.MimeException;
 
 public class ImapStore {
   /**
diff --git a/java/com/android/voicemail/impl/mail/store/imap/DigestMd5Utils.java b/java/com/android/voicemail/impl/mail/store/imap/DigestMd5Utils.java
index 7be99b5..067ab8f 100644
--- a/java/com/android/voicemail/impl/mail/store/imap/DigestMd5Utils.java
+++ b/java/com/android/voicemail/impl/mail/store/imap/DigestMd5Utils.java
@@ -26,6 +26,7 @@
 import com.android.voicemail.impl.mail.MailTransport;
 import com.android.voicemail.impl.mail.MessagingException;
 import com.android.voicemail.impl.mail.store.ImapStore;
+
 import java.nio.charset.StandardCharsets;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
diff --git a/java/com/android/voicemail/impl/mail/store/imap/ImapConstants.java b/java/com/android/voicemail/impl/mail/store/imap/ImapConstants.java
index 2dc2254..d5f70b0 100644
--- a/java/com/android/voicemail/impl/mail/store/imap/ImapConstants.java
+++ b/java/com/android/voicemail/impl/mail/store/imap/ImapConstants.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,6 +18,7 @@
 package com.android.voicemail.impl.mail.store.imap;
 
 import com.android.voicemail.impl.mail.store.ImapStore;
+
 import java.util.Locale;
 
 public final class ImapConstants {
diff --git a/java/com/android/voicemail/impl/mail/store/imap/ImapList.java b/java/com/android/voicemail/impl/mail/store/imap/ImapList.java
index 9fcd562..a5c7f15 100644
--- a/java/com/android/voicemail/impl/mail/store/imap/ImapList.java
+++ b/java/com/android/voicemail/impl/mail/store/imap/ImapList.java
@@ -36,7 +36,7 @@
         }
       };
 
-  private ArrayList<ImapElement> list = new ArrayList<ImapElement>();
+  private ArrayList<ImapElement> list = new ArrayList<>();
 
   /* package */ void add(ImapElement e) {
     if (e == null) {
@@ -177,11 +177,6 @@
     return list.toString();
   }
 
-  /** Return the text representations of the contents concatenated with ",". */
-  public final String flatten() {
-    return flatten(new StringBuilder()).toString();
-  }
-
   /**
    * Returns text representations (i.e. getString()) of contents joined together with "," as the
    * separator.
diff --git a/java/com/android/voicemail/impl/mail/store/imap/ImapMemoryLiteral.java b/java/com/android/voicemail/impl/mail/store/imap/ImapMemoryLiteral.java
index 46f3fc5..8c569f7 100644
--- a/java/com/android/voicemail/impl/mail/store/imap/ImapMemoryLiteral.java
+++ b/java/com/android/voicemail/impl/mail/store/imap/ImapMemoryLiteral.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2010 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,10 +19,11 @@
 
 import com.android.voicemail.impl.VvmLog;
 import com.android.voicemail.impl.mail.FixedLengthInputStream;
+
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
 
 /** Subclass of {@link ImapString} used for literals backed by an in-memory byte array. */
 public class ImapMemoryLiteral extends ImapString {
@@ -53,12 +55,7 @@
 
   @Override
   public String getString() {
-    try {
-      return new String(data, "US-ASCII");
-    } catch (UnsupportedEncodingException e) {
-      VvmLog.e(TAG, "Unsupported encoding: ", e);
-    }
-    return null;
+    return new String(data, StandardCharsets.US_ASCII);
   }
 
   @Override
diff --git a/java/com/android/voicemail/impl/mail/store/imap/ImapResponseParser.java b/java/com/android/voicemail/impl/mail/store/imap/ImapResponseParser.java
index 68d6bab..4c1bf7e 100644
--- a/java/com/android/voicemail/impl/mail/store/imap/ImapResponseParser.java
+++ b/java/com/android/voicemail/impl/mail/store/imap/ImapResponseParser.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2010 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,10 +18,12 @@
 package com.android.voicemail.impl.mail.store.imap;
 
 import android.text.TextUtils;
+
 import com.android.voicemail.impl.VvmLog;
 import com.android.voicemail.impl.mail.FixedLengthInputStream;
 import com.android.voicemail.impl.mail.MessagingException;
 import com.android.voicemail.impl.mail.PeekableInputStream;
+
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
@@ -47,7 +50,7 @@
    * We store all {@link ImapResponse} in it. {@link #destroyResponses()} must be called from time
    * to time to destroy them and clear it.
    */
-  private final ArrayList<ImapResponse> responsesToDestroy = new ArrayList<ImapResponse>();
+  private final ArrayList<ImapResponse> responsesToDestroy = new ArrayList<>();
 
   /**
    * Exception thrown when we receive BYE. It derives from IOException, so it'll be treated in the
diff --git a/java/com/android/voicemail/impl/mail/store/imap/ImapSimpleString.java b/java/com/android/voicemail/impl/mail/store/imap/ImapSimpleString.java
index 9fb5c7b..77362c4 100644
--- a/java/com/android/voicemail/impl/mail/store/imap/ImapSimpleString.java
+++ b/java/com/android/voicemail/impl/mail/store/imap/ImapSimpleString.java
@@ -17,10 +17,9 @@
 
 package com.android.voicemail.impl.mail.store.imap;
 
-import com.android.voicemail.impl.VvmLog;
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
 
 /** Subclass of {@link ImapString} used for non literals. */
 public class ImapSimpleString extends ImapString {
@@ -44,12 +43,7 @@
 
   @Override
   public InputStream getAsStream() {
-    try {
-      return new ByteArrayInputStream(string.getBytes("US-ASCII"));
-    } catch (UnsupportedEncodingException e) {
-      VvmLog.e(TAG, "Unsupported encoding: ", e);
-    }
-    return null;
+    return new ByteArrayInputStream(string.getBytes(StandardCharsets.US_ASCII));
   }
 
   @Override
diff --git a/java/com/android/voicemail/impl/mail/store/imap/ImapString.java b/java/com/android/voicemail/impl/mail/store/imap/ImapString.java
index 099e569..cb032b9 100644
--- a/java/com/android/voicemail/impl/mail/store/imap/ImapString.java
+++ b/java/com/android/voicemail/impl/mail/store/imap/ImapString.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,6 +18,7 @@
 package com.android.voicemail.impl.mail.store.imap;
 
 import com.android.voicemail.impl.VvmLog;
+
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 import java.text.ParseException;
diff --git a/java/com/android/voicemail/impl/mail/store/imap/ImapTempFileLiteral.java b/java/com/android/voicemail/impl/mail/store/imap/ImapTempFileLiteral.java
index 61d4d4a..b742164 100644
--- a/java/com/android/voicemail/impl/mail/store/imap/ImapTempFileLiteral.java
+++ b/java/com/android/voicemail/impl/mail/store/imap/ImapTempFileLiteral.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,15 +20,17 @@
 import com.android.voicemail.impl.mail.TempDirectory;
 import com.android.voicemail.impl.mail.utils.LogUtils;
 import com.android.voicemail.impl.mail.utils.Utility;
+
+import org.apache.commons.io.IOUtils;
+
 import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import org.apache.commons.io.IOUtils;
+import java.nio.file.Files;
 
 /** Subclass of {@link ImapString} used for literals backed by a temp file. */
 public class ImapTempFileLiteral extends ImapString {
@@ -46,7 +49,7 @@
     // so it'd simply cause a memory leak.
     // deleteOnExit() simply adds filenames to a static list and the list will never shrink.
     // mFile.deleteOnExit();
-    OutputStream out = new FileOutputStream(file);
+    OutputStream out = Files.newOutputStream(file.toPath());
     IOUtils.copy(stream, out);
     out.close();
   }
diff --git a/java/com/android/voicemail/impl/mail/store/imap/ImapUtility.java b/java/com/android/voicemail/impl/mail/store/imap/ImapUtility.java
index a325cc2..596d84d 100644
--- a/java/com/android/voicemail/impl/mail/store/imap/ImapUtility.java
+++ b/java/com/android/voicemail/impl/mail/store/imap/ImapUtility.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,7 +17,9 @@
 package com.android.voicemail.impl.mail.store.imap;
 
 import com.android.voicemail.impl.mail.utils.LogUtils;
+
 import java.util.ArrayList;
+import java.util.Arrays;
 
 /** Utility methods for use with IMAP. */
 public class ImapUtility {
@@ -60,7 +63,7 @@
    * </pre>
    */
   public static String[] getImapSequenceValues(String set) {
-    ArrayList<String> list = new ArrayList<String>();
+    ArrayList<String> list = new ArrayList<>();
     if (set != null) {
       String[] setItems = set.split(",");
       for (String item : setItems) {
@@ -74,9 +77,7 @@
           }
         } else {
           // range
-          for (String rangeItem : getImapRangeValues(item)) {
-            list.add(rangeItem);
-          }
+          list.addAll(Arrays.asList(getImapRangeValues(item)));
         }
       }
     }
@@ -95,7 +96,7 @@
    * </pre>
    */
   public static String[] getImapRangeValues(String range) {
-    ArrayList<String> list = new ArrayList<String>();
+    ArrayList<String> list = new ArrayList<>();
     try {
       if (range != null) {
         int colonPos = range.indexOf(':');
diff --git a/java/com/android/voicemail/impl/mail/utils/LogUtils.java b/java/com/android/voicemail/impl/mail/utils/LogUtils.java
index 8d95f57..f675e3a 100644
--- a/java/com/android/voicemail/impl/mail/utils/LogUtils.java
+++ b/java/com/android/voicemail/impl/mail/utils/LogUtils.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * <p>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
@@ -16,7 +17,9 @@
 import android.net.Uri;
 import android.text.TextUtils;
 import android.util.Log;
+
 import com.android.voicemail.impl.VvmLog;
+
 import java.util.List;
 
 public class LogUtils {
diff --git a/java/com/android/voicemail/impl/mail/utils/Utility.java b/java/com/android/voicemail/impl/mail/utils/Utility.java
index 4db1681..2dbd773 100644
--- a/java/com/android/voicemail/impl/mail/utils/Utility.java
+++ b/java/com/android/voicemail/impl/mail/utils/Utility.java
@@ -17,10 +17,11 @@
 import java.nio.ByteBuffer;
 import java.nio.CharBuffer;
 import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 
 /** Simple utility methods used in email functions. */
 public class Utility {
-  public static final Charset ASCII = Charset.forName("US-ASCII");
+  public static final Charset ASCII = StandardCharsets.US_ASCII;
 
   public static final String[] EMPTY_STRINGS = new String[0];
 
diff --git a/java/com/android/voicemail/impl/protocol/CvvmProtocol.java b/java/com/android/voicemail/impl/protocol/CvvmProtocol.java
index ae5c6d9..548d67b 100644
--- a/java/com/android/voicemail/impl/protocol/CvvmProtocol.java
+++ b/java/com/android/voicemail/impl/protocol/CvvmProtocol.java
@@ -19,6 +19,7 @@
 
 import android.content.Context;
 import android.telecom.PhoneAccountHandle;
+
 import com.android.voicemail.impl.OmtpConstants;
 import com.android.voicemail.impl.sms.OmtpCvvmMessageSender;
 import com.android.voicemail.impl.sms.OmtpMessageSender;
@@ -46,14 +47,13 @@
 
   @Override
   public String getCommand(String command) {
-    if (command == OmtpConstants.IMAP_CHANGE_TUI_PWD_FORMAT) {
-      return IMAP_CHANGE_TUI_PWD_FORMAT;
-    }
-    if (command == OmtpConstants.IMAP_CLOSE_NUT) {
-      return IMAP_CLOSE_NUT;
-    }
-    if (command == OmtpConstants.IMAP_CHANGE_VM_LANG_FORMAT) {
-      return IMAP_CHANGE_VM_LANG_FORMAT;
+    switch (command) {
+      case OmtpConstants.IMAP_CHANGE_TUI_PWD_FORMAT:
+        return IMAP_CHANGE_TUI_PWD_FORMAT;
+      case OmtpConstants.IMAP_CLOSE_NUT:
+        return IMAP_CLOSE_NUT;
+      case OmtpConstants.IMAP_CHANGE_VM_LANG_FORMAT:
+        return IMAP_CHANGE_VM_LANG_FORMAT;
     }
     return super.getCommand(command);
   }
diff --git a/java/com/android/voicemail/impl/protocol/OmtpProtocol.java b/java/com/android/voicemail/impl/protocol/OmtpProtocol.java
index 971edcf..86ad10e 100644
--- a/java/com/android/voicemail/impl/protocol/OmtpProtocol.java
+++ b/java/com/android/voicemail/impl/protocol/OmtpProtocol.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,6 +19,7 @@
 
 import android.content.Context;
 import android.telecom.PhoneAccountHandle;
+
 import com.android.voicemail.impl.OmtpConstants;
 import com.android.voicemail.impl.sms.OmtpMessageSender;
 import com.android.voicemail.impl.sms.OmtpStandardMessageSender;
diff --git a/java/com/android/voicemail/impl/protocol/ProtocolHelper.java b/java/com/android/voicemail/impl/protocol/ProtocolHelper.java
index 4d2e7cc..72ee5cb 100644
--- a/java/com/android/voicemail/impl/protocol/ProtocolHelper.java
+++ b/java/com/android/voicemail/impl/protocol/ProtocolHelper.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,6 +18,7 @@
 package com.android.voicemail.impl.protocol;
 
 import android.text.TextUtils;
+
 import com.android.voicemail.impl.OmtpVvmCarrierConfigHelper;
 import com.android.voicemail.impl.VvmLog;
 import com.android.voicemail.impl.sms.OmtpMessageSender;
diff --git a/java/com/android/voicemail/impl/protocol/Vvm3EventHandler.java b/java/com/android/voicemail/impl/protocol/Vvm3EventHandler.java
index 0b8014c..8502857 100644
--- a/java/com/android/voicemail/impl/protocol/Vvm3EventHandler.java
+++ b/java/com/android/voicemail/impl/protocol/Vvm3EventHandler.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -29,6 +30,7 @@
 import com.android.voicemail.impl.OmtpVvmCarrierConfigHelper;
 import com.android.voicemail.impl.VoicemailStatus;
 import com.android.voicemail.impl.VvmLog;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 
@@ -69,7 +71,8 @@
     VMG_COMMUNICATION_ERROR,
     SPG_URL_NOT_FOUND,
     VMG_UNKNOWN_ERROR,
-    PIN_NOT_SET
+    PIN_NOT_SET,
+    SUBSCRIBER_UNKNOWN
   })
   public @interface ErrorCode {}
 
diff --git a/java/com/android/voicemail/impl/protocol/Vvm3Protocol.java b/java/com/android/voicemail/impl/protocol/Vvm3Protocol.java
index 3fd00a7..4ae6542 100644
--- a/java/com/android/voicemail/impl/protocol/Vvm3Protocol.java
+++ b/java/com/android/voicemail/impl/protocol/Vvm3Protocol.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -44,6 +45,7 @@
 import com.android.voicemail.impl.sync.VvmNetworkRequest;
 import com.android.voicemail.impl.sync.VvmNetworkRequest.NetworkWrapper;
 import com.android.voicemail.impl.sync.VvmNetworkRequest.RequestFailedException;
+
 import java.io.IOException;
 import java.security.SecureRandom;
 import java.util.Locale;
diff --git a/java/com/android/voicemail/impl/protocol/Vvm3Subscriber.java b/java/com/android/voicemail/impl/protocol/Vvm3Subscriber.java
index 93862bf..c2c42f7 100644
--- a/java/com/android/voicemail/impl/protocol/Vvm3Subscriber.java
+++ b/java/com/android/voicemail/impl/protocol/Vvm3Subscriber.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -45,6 +46,10 @@
 import com.android.volley.toolbox.RequestFuture;
 import com.android.volley.toolbox.StringRequest;
 import com.android.volley.toolbox.Volley;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+
 import java.io.IOException;
 import java.net.CookieHandler;
 import java.net.CookieManager;
@@ -60,8 +65,6 @@
 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
diff --git a/java/com/android/voicemail/impl/scheduling/BaseTask.java b/java/com/android/voicemail/impl/scheduling/BaseTask.java
index 96ebc84..44db358 100644
--- a/java/com/android/voicemail/impl/scheduling/BaseTask.java
+++ b/java/com/android/voicemail/impl/scheduling/BaseTask.java
@@ -30,6 +30,7 @@
 
 import com.android.dialer.proguard.UsedByReflection;
 import com.android.voicemail.impl.Assert;
+
 import java.util.ArrayList;
 import java.util.List;
 
diff --git a/java/com/android/voicemail/impl/scheduling/BlockerTask.java b/java/com/android/voicemail/impl/scheduling/BlockerTask.java
index 1c8bada..27d48bc 100644
--- a/java/com/android/voicemail/impl/scheduling/BlockerTask.java
+++ b/java/com/android/voicemail/impl/scheduling/BlockerTask.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,6 +19,7 @@
 
 import android.content.Context;
 import android.os.Bundle;
+
 import com.android.dialer.proguard.UsedByReflection;
 import com.android.voicemail.impl.VvmLog;
 
diff --git a/java/com/android/voicemail/impl/scheduling/MinimalIntervalPolicy.java b/java/com/android/voicemail/impl/scheduling/MinimalIntervalPolicy.java
index df4d5c8..0ebcb22 100644
--- a/java/com/android/voicemail/impl/scheduling/MinimalIntervalPolicy.java
+++ b/java/com/android/voicemail/impl/scheduling/MinimalIntervalPolicy.java
@@ -19,6 +19,7 @@
 
 import android.content.Intent;
 import android.os.Bundle;
+
 import com.android.voicemail.impl.scheduling.Task.TaskId;
 
 /**
diff --git a/java/com/android/voicemail/impl/scheduling/PostponePolicy.java b/java/com/android/voicemail/impl/scheduling/PostponePolicy.java
index 8ff1478..a7d9982 100644
--- a/java/com/android/voicemail/impl/scheduling/PostponePolicy.java
+++ b/java/com/android/voicemail/impl/scheduling/PostponePolicy.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,6 +18,7 @@
 package com.android.voicemail.impl.scheduling;
 
 import android.os.Bundle;
+
 import com.android.voicemail.impl.VvmLog;
 
 /**
diff --git a/java/com/android/voicemail/impl/scheduling/RetryPolicy.java b/java/com/android/voicemail/impl/scheduling/RetryPolicy.java
index ec4d72d..d163072 100644
--- a/java/com/android/voicemail/impl/scheduling/RetryPolicy.java
+++ b/java/com/android/voicemail/impl/scheduling/RetryPolicy.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,6 +20,7 @@
 import android.content.Intent;
 import android.os.Bundle;
 import android.telecom.PhoneAccountHandle;
+
 import com.android.voicemail.impl.VoicemailStatus;
 import com.android.voicemail.impl.VvmLog;
 
diff --git a/java/com/android/voicemail/impl/scheduling/TaskExecutor.java b/java/com/android/voicemail/impl/scheduling/TaskExecutor.java
index e7b3833..f572190 100644
--- a/java/com/android/voicemail/impl/scheduling/TaskExecutor.java
+++ b/java/com/android/voicemail/impl/scheduling/TaskExecutor.java
@@ -32,6 +32,7 @@
 import com.android.voicemail.impl.Assert;
 import com.android.voicemail.impl.VvmLog;
 import com.android.voicemail.impl.scheduling.TaskQueue.NextTask;
+
 import java.util.List;
 
 /**
diff --git a/java/com/android/voicemail/impl/scheduling/TaskQueue.java b/java/com/android/voicemail/impl/scheduling/TaskQueue.java
index 872d025..075d6f6 100644
--- a/java/com/android/voicemail/impl/scheduling/TaskQueue.java
+++ b/java/com/android/voicemail/impl/scheduling/TaskQueue.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -26,6 +27,7 @@
 import com.android.voicemail.impl.VvmLog;
 import com.android.voicemail.impl.scheduling.Task.TaskId;
 import com.android.voicemail.impl.scheduling.Tasks.TaskCreationException;
+
 import java.util.ArrayDeque;
 import java.util.ArrayList;
 import java.util.Iterator;
diff --git a/java/com/android/voicemail/impl/scheduling/TaskReceiver.java b/java/com/android/voicemail/impl/scheduling/TaskReceiver.java
index d838b9e..549d083 100644
--- a/java/com/android/voicemail/impl/scheduling/TaskReceiver.java
+++ b/java/com/android/voicemail/impl/scheduling/TaskReceiver.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,8 +21,10 @@
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
+
 import com.android.voicemail.impl.VvmLog;
 import com.android.voicemail.impl.scheduling.Tasks.TaskCreationException;
+
 import java.util.ArrayList;
 import java.util.List;
 
diff --git a/java/com/android/voicemail/impl/scheduling/TaskSchedulerJobService.java b/java/com/android/voicemail/impl/scheduling/TaskSchedulerJobService.java
index 434d9af..8ad0d66 100644
--- a/java/com/android/voicemail/impl/scheduling/TaskSchedulerJobService.java
+++ b/java/com/android/voicemail/impl/scheduling/TaskSchedulerJobService.java
@@ -130,7 +130,7 @@
         .apply();
 
     extras.putParcelableArray(
-        EXTRA_TASK_EXTRAS_ARRAY, pendingTasks.toArray(new Bundle[pendingTasks.size()]));
+        EXTRA_TASK_EXTRAS_ARRAY, pendingTasks.toArray(new Bundle[0]));
     JobInfo.Builder builder =
         new JobInfo.Builder(
                 ScheduledJobIds.VVM_TASK_SCHEDULER_JOB,
diff --git a/java/com/android/voicemail/impl/settings/VisualVoicemailSettingsUtil.java b/java/com/android/voicemail/impl/settings/VisualVoicemailSettingsUtil.java
index 8fbd87e..bb51b1b 100644
--- a/java/com/android/voicemail/impl/settings/VisualVoicemailSettingsUtil.java
+++ b/java/com/android/voicemail/impl/settings/VisualVoicemailSettingsUtil.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,6 +19,7 @@
 import android.content.Context;
 import android.provider.VoicemailContract.Voicemails;
 import android.telecom.PhoneAccountHandle;
+
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.DialerExecutor.Worker;
diff --git a/java/com/android/voicemail/impl/sms/LegacyModeSmsHandler.java b/java/com/android/voicemail/impl/sms/LegacyModeSmsHandler.java
index 3660ea9..6c28fc7 100644
--- a/java/com/android/voicemail/impl/sms/LegacyModeSmsHandler.java
+++ b/java/com/android/voicemail/impl/sms/LegacyModeSmsHandler.java
@@ -16,6 +16,7 @@
 
 package com.android.voicemail.impl.sms;
 
+import android.annotation.SuppressLint;
 import android.app.PendingIntent;
 import android.content.Context;
 import android.content.Intent;
@@ -133,6 +134,7 @@
     context.sendBroadcast(intent);
   }
 
+  @SuppressLint("MissingPermission")
   @Nullable
   private static String getVoicemailNumber(Context context, PhoneAccountHandle phoneAccountHandle) {
     TelephonyManager telephonyManager =
diff --git a/java/com/android/voicemail/impl/sms/OmtpMessageReceiver.java b/java/com/android/voicemail/impl/sms/OmtpMessageReceiver.java
index 0bab169..98fd372 100644
--- a/java/com/android/voicemail/impl/sms/OmtpMessageReceiver.java
+++ b/java/com/android/voicemail/impl/sms/OmtpMessageReceiver.java
@@ -25,6 +25,7 @@
 import android.os.UserManager;
 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.OmtpService;
diff --git a/java/com/android/voicemail/impl/sms/StatusMessage.java b/java/com/android/voicemail/impl/sms/StatusMessage.java
index 6d0d56e..0226e6f 100644
--- a/java/com/android/voicemail/impl/sms/StatusMessage.java
+++ b/java/com/android/voicemail/impl/sms/StatusMessage.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,6 +17,7 @@
 package com.android.voicemail.impl.sms;
 
 import android.os.Bundle;
+
 import com.android.voicemail.impl.OmtpConstants;
 import com.android.voicemail.impl.VisualVoicemailPreferences;
 import com.android.voicemail.impl.VvmLog;
diff --git a/java/com/android/voicemail/impl/sms/StatusSmsFetcher.java b/java/com/android/voicemail/impl/sms/StatusSmsFetcher.java
index 9a41c11..8b3e845 100644
--- a/java/com/android/voicemail/impl/sms/StatusSmsFetcher.java
+++ b/java/com/android/voicemail/impl/sms/StatusSmsFetcher.java
@@ -38,6 +38,7 @@
 import com.android.voicemail.impl.OmtpVvmCarrierConfigHelper;
 import com.android.voicemail.impl.VvmLog;
 import com.android.voicemail.impl.protocol.VisualVoicemailProtocol;
+
 import java.io.Closeable;
 import java.io.IOException;
 import java.util.concurrent.CancellationException;
@@ -71,7 +72,8 @@
     this.phoneAccountHandle = phoneAccountHandle;
     IntentFilter filter = new IntentFilter(ACTION_REQUEST_SENT_INTENT);
     filter.addAction(OmtpService.ACTION_SMS_RECEIVED);
-    context.registerReceiver(this, filter, PERMISSION_DIALER_ORIGIN, /* scheduler= */ null);
+    context.registerReceiver(this, filter, PERMISSION_DIALER_ORIGIN, /* scheduler= */ null,
+            Context.RECEIVER_NOT_EXPORTED);
   }
 
   @Override
@@ -116,9 +118,14 @@
       return;
     }
 
-    VisualVoicemailSms sms = intent.getExtras().getParcelable(OmtpService.EXTRA_VOICEMAIL_SMS);
+    if (intent.getExtras() == null) {
+      return;
+    }
 
-    if (!phoneAccountHandle.equals(sms.getPhoneAccountHandle())) {
+    VisualVoicemailSms sms = intent.getExtras().getParcelable(OmtpService.EXTRA_VOICEMAIL_SMS,
+            VisualVoicemailSms.class);
+
+    if (sms == null || !phoneAccountHandle.equals(sms.getPhoneAccountHandle())) {
       return;
     }
     String eventType = sms.getPrefix();
diff --git a/java/com/android/voicemail/impl/sms/SyncMessage.java b/java/com/android/voicemail/impl/sms/SyncMessage.java
index f7fbaa4..261ad9d 100644
--- a/java/com/android/voicemail/impl/sms/SyncMessage.java
+++ b/java/com/android/voicemail/impl/sms/SyncMessage.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,6 +21,7 @@
 import androidx.annotation.Nullable;
 
 import com.android.voicemail.impl.OmtpConstants;
+
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Locale;
diff --git a/java/com/android/voicemail/impl/sync/OmtpVvmSyncReceiver.java b/java/com/android/voicemail/impl/sync/OmtpVvmSyncReceiver.java
index 1b59ecc..6dc8130 100644
--- a/java/com/android/voicemail/impl/sync/OmtpVvmSyncReceiver.java
+++ b/java/com/android/voicemail/impl/sync/OmtpVvmSyncReceiver.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,22 +17,26 @@
 
 package com.android.voicemail.impl.sync;
 
+import android.annotation.SuppressLint;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.provider.VoicemailContract;
 import android.telecom.PhoneAccountHandle;
 import android.telecom.TelecomManager;
+
 import com.android.voicemail.VoicemailComponent;
 import com.android.voicemail.impl.ActivationTask;
 import com.android.voicemail.impl.VvmLog;
 import com.android.voicemail.impl.settings.VisualVoicemailSettingsUtil;
+
 import java.util.List;
 
 public class OmtpVvmSyncReceiver extends BroadcastReceiver {
 
   private static final String TAG = "OmtpVvmSyncReceiver";
 
+  @SuppressLint("MissingPermission")
   @Override
   public void onReceive(final Context context, Intent intent) {
     if (!VoicemailComponent.get(context).getVoicemailClient().isVoicemailModuleEnabled()) {
diff --git a/java/com/android/voicemail/impl/sync/OmtpVvmSyncService.java b/java/com/android/voicemail/impl/sync/OmtpVvmSyncService.java
index 561ba63..822a177 100644
--- a/java/com/android/voicemail/impl/sync/OmtpVvmSyncService.java
+++ b/java/com/android/voicemail/impl/sync/OmtpVvmSyncService.java
@@ -22,6 +22,7 @@
 import android.telecom.PhoneAccountHandle;
 import android.text.TextUtils;
 import android.util.ArrayMap;
+
 import com.android.voicemail.VoicemailComponent;
 import com.android.voicemail.impl.ActivationTask;
 import com.android.voicemail.impl.Assert;
@@ -39,6 +40,7 @@
 import com.android.voicemail.impl.sync.VvmNetworkRequest.NetworkWrapper;
 import com.android.voicemail.impl.sync.VvmNetworkRequest.RequestFailedException;
 import com.android.voicemail.impl.utils.VoicemailDatabaseUtil;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -292,7 +294,7 @@
 
   /** Builds a map from provider data to message for the given collection of voicemails. */
   private Map<String, Voicemail> buildMap(List<Voicemail> messages) {
-    Map<String, Voicemail> map = new ArrayMap<String, Voicemail>();
+    Map<String, Voicemail> map = new ArrayMap<>();
     for (Voicemail message : messages) {
       map.put(message.getSourceData(), message);
     }
diff --git a/java/com/android/voicemail/impl/sync/SyncOneTask.java b/java/com/android/voicemail/impl/sync/SyncOneTask.java
index 95f4ceb..7452e14 100644
--- a/java/com/android/voicemail/impl/sync/SyncOneTask.java
+++ b/java/com/android/voicemail/impl/sync/SyncOneTask.java
@@ -21,6 +21,7 @@
 import android.content.Intent;
 import android.os.Bundle;
 import android.telecom.PhoneAccountHandle;
+
 import com.android.dialer.proguard.UsedByReflection;
 import com.android.voicemail.impl.Voicemail;
 import com.android.voicemail.impl.VoicemailStatus;
diff --git a/java/com/android/voicemail/impl/sync/SyncTask.java b/java/com/android/voicemail/impl/sync/SyncTask.java
index b04c434..501feba 100644
--- a/java/com/android/voicemail/impl/sync/SyncTask.java
+++ b/java/com/android/voicemail/impl/sync/SyncTask.java
@@ -21,6 +21,7 @@
 import android.content.Intent;
 import android.os.Bundle;
 import android.telecom.PhoneAccountHandle;
+
 import com.android.dialer.proguard.UsedByReflection;
 import com.android.voicemail.impl.scheduling.BaseTask;
 import com.android.voicemail.impl.scheduling.MinimalIntervalPolicy;
diff --git a/java/com/android/voicemail/impl/sync/UploadTask.java b/java/com/android/voicemail/impl/sync/UploadTask.java
index d8f06db..03f0b22 100644
--- a/java/com/android/voicemail/impl/sync/UploadTask.java
+++ b/java/com/android/voicemail/impl/sync/UploadTask.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,6 +21,7 @@
 import android.content.Intent;
 import android.os.Bundle;
 import android.telecom.PhoneAccountHandle;
+
 import com.android.dialer.proguard.UsedByReflection;
 import com.android.voicemail.impl.VoicemailStatus;
 import com.android.voicemail.impl.VvmLog;
diff --git a/java/com/android/voicemail/impl/sync/VoicemailProviderChangeReceiver.java b/java/com/android/voicemail/impl/sync/VoicemailProviderChangeReceiver.java
index 7fde1fe..4bf7ea8 100644
--- a/java/com/android/voicemail/impl/sync/VoicemailProviderChangeReceiver.java
+++ b/java/com/android/voicemail/impl/sync/VoicemailProviderChangeReceiver.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,6 +21,7 @@
 import android.content.Intent;
 import android.provider.VoicemailContract;
 import android.telecom.PhoneAccountHandle;
+
 import com.android.voicemail.VoicemailComponent;
 import com.android.voicemail.impl.settings.VisualVoicemailSettingsUtil;
 
diff --git a/java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java b/java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java
index 43ba5af..5cb0363 100644
--- a/java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java
+++ b/java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java
@@ -30,6 +30,7 @@
 
 import com.android.dialer.common.Assert;
 import com.android.voicemail.impl.Voicemail;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -96,7 +97,7 @@
       return null;
     }
     try {
-      List<Voicemail> voicemails = new ArrayList<Voicemail>();
+      List<Voicemail> voicemails = new ArrayList<>();
       while (cursor.moveToNext()) {
         final long id = cursor.getLong(_ID);
         final String sourceData = cursor.getString(SOURCE_DATA);
@@ -135,7 +136,7 @@
       sb.append(voicemails.get(i).getId());
     }
 
-    String selectionStatement = String.format(Voicemails._ID + " IN (%s)", sb.toString());
+    String selectionStatement = String.format(Voicemails._ID + " IN (%s)", sb);
     return contentResolver.delete(Voicemails.CONTENT_URI, selectionStatement, null);
   }
 
@@ -210,7 +211,7 @@
       String phoneAccountComponentName = phoneAccount.getComponentName().flattenToString();
       String phoneAccountId = phoneAccount.getId();
       String sourceData = voicemail.getSourceData();
-      if (phoneAccountComponentName == null || phoneAccountId == null || sourceData == null) {
+      if (phoneAccountId == null || sourceData == null) {
         return true;
       }
       try {
@@ -223,11 +224,7 @@
                 + "=?";
         String[] whereArgs = {phoneAccountComponentName, phoneAccountId, sourceData};
         cursor = contentResolver.query(sourceUri, PROJECTION, whereClause, whereArgs, null);
-        if (cursor.getCount() == 0) {
-          return true;
-        } else {
-          return false;
-        }
+        return cursor.getCount() == 0;
       } finally {
         if (cursor != null) {
           cursor.close();
diff --git a/java/com/android/voicemail/impl/sync/VvmAccountManager.java b/java/com/android/voicemail/impl/sync/VvmAccountManager.java
index 351a280..90abda7 100644
--- a/java/com/android/voicemail/impl/sync/VvmAccountManager.java
+++ b/java/com/android/voicemail/impl/sync/VvmAccountManager.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -15,6 +16,7 @@
  */
 package com.android.voicemail.impl.sync;
 
+import android.annotation.SuppressLint;
 import android.content.Context;
 import android.os.UserManager;
 import android.telecom.PhoneAccountHandle;
@@ -33,6 +35,7 @@
 import com.android.voicemail.impl.VisualVoicemailPreferences;
 import com.android.voicemail.impl.VoicemailStatus;
 import com.android.voicemail.impl.sms.StatusMessage;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
@@ -93,6 +96,7 @@
     return preferences.getBoolean(IS_ACCOUNT_ACTIVATED, false);
   }
 
+  @SuppressLint("MissingPermission")
   @NonNull
   public static List<PhoneAccountHandle> getActiveAccounts(Context context) {
     List<PhoneAccountHandle> results = new ArrayList<>();
diff --git a/java/com/android/voicemail/impl/sync/VvmNetworkRequest.java b/java/com/android/voicemail/impl/sync/VvmNetworkRequest.java
index 0d72426..a342efa 100644
--- a/java/com/android/voicemail/impl/sync/VvmNetworkRequest.java
+++ b/java/com/android/voicemail/impl/sync/VvmNetworkRequest.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -24,6 +25,7 @@
 import com.android.voicemail.impl.OmtpVvmCarrierConfigHelper;
 import com.android.voicemail.impl.VoicemailStatus;
 import com.android.voicemail.impl.VvmLog;
+
 import java.io.Closeable;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
diff --git a/java/com/android/voicemail/impl/sync/VvmNetworkRequestCallback.java b/java/com/android/voicemail/impl/sync/VvmNetworkRequestCallback.java
index b57da66..d19dae7 100644
--- a/java/com/android/voicemail/impl/sync/VvmNetworkRequestCallback.java
+++ b/java/com/android/voicemail/impl/sync/VvmNetworkRequestCallback.java
@@ -152,7 +152,7 @@
   }
 
   public void requestNetwork() {
-    if (requestSent == true) {
+    if (requestSent) {
       VvmLog.e(TAG, "requestNetwork() called twice");
       return;
     }
diff --git a/java/com/android/voicemail/impl/utils/IndentingPrintWriter.java b/java/com/android/voicemail/impl/utils/IndentingPrintWriter.java
index ab00c6b..cad7bd0 100644
--- a/java/com/android/voicemail/impl/utils/IndentingPrintWriter.java
+++ b/java/com/android/voicemail/impl/utils/IndentingPrintWriter.java
@@ -69,7 +69,7 @@
   }
 
   public void printPair(String key, Object value) {
-    print(key + "=" + String.valueOf(value) + " ");
+    print(key + "=" + value + " ");
   }
 
   public void printPair(String key, Object[] value) {
diff --git a/java/com/android/voicemail/impl/utils/VoicemailDatabaseUtil.java b/java/com/android/voicemail/impl/utils/VoicemailDatabaseUtil.java
index 711d6a8..2cce2b9 100644
--- a/java/com/android/voicemail/impl/utils/VoicemailDatabaseUtil.java
+++ b/java/com/android/voicemail/impl/utils/VoicemailDatabaseUtil.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,7 +23,9 @@
 import android.net.Uri;
 import android.provider.VoicemailContract.Voicemails;
 import android.telecom.PhoneAccountHandle;
+
 import com.android.voicemail.impl.Voicemail;
+
 import java.util.List;
 
 public class VoicemailDatabaseUtil {
diff --git a/java/com/android/voicemail/impl/utils/VvmDumpHandler.java b/java/com/android/voicemail/impl/utils/VvmDumpHandler.java
deleted file mode 100644
index 5290f2c..0000000
--- a/java/com/android/voicemail/impl/utils/VvmDumpHandler.java
+++ /dev/null
@@ -1,43 +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.voicemail.impl.utils;
-
-import android.content.Context;
-import android.telecom.PhoneAccountHandle;
-import android.telecom.TelecomManager;
-import com.android.voicemail.impl.OmtpVvmCarrierConfigHelper;
-import com.android.voicemail.impl.VvmLog;
-import java.io.FileDescriptor;
-import java.io.PrintWriter;
-
-public class VvmDumpHandler {
-
-  public static void dump(Context context, FileDescriptor fd, PrintWriter writer, String[] args) {
-    IndentingPrintWriter indentedWriter = new IndentingPrintWriter(writer, "  ");
-    indentedWriter.println("******* OmtpVvm *******");
-    indentedWriter.println("======= Configs =======");
-    indentedWriter.increaseIndent();
-    for (PhoneAccountHandle handle :
-        context.getSystemService(TelecomManager.class).getCallCapablePhoneAccounts()) {
-      OmtpVvmCarrierConfigHelper config = new OmtpVvmCarrierConfigHelper(context, handle);
-      indentedWriter.println(config.toString());
-    }
-    indentedWriter.decreaseIndent();
-    indentedWriter.println("======== Logs =========");
-    VvmLog.dump(fd, indentedWriter, args);
-  }
-}
diff --git a/java/com/android/voicemail/impl/utils/XmlUtils.java b/java/com/android/voicemail/impl/utils/XmlUtils.java
index 4abb34c..d10c444 100644
--- a/java/com/android/voicemail/impl/utils/XmlUtils.java
+++ b/java/com/android/voicemail/impl/utils/XmlUtils.java
@@ -18,11 +18,13 @@
 package com.android.voicemail.impl.utils;
 
 import android.util.ArrayMap;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
 
 public class XmlUtils {
 
@@ -199,7 +201,7 @@
   }
 
   private static Object readThisPrimitiveValueXml(XmlPullParser parser, String tagName)
-      throws XmlPullParserException, java.io.IOException {
+      throws XmlPullParserException {
     try {
       if (tagName.equals("int")) {
         return Integer.parseInt(parser.getAttributeValue(null, "value"));
diff --git a/java/com/android/voicemail/stub/StubVoicemailClient.java b/java/com/android/voicemail/stub/StubVoicemailClient.java
index 76661c5..d1bb277 100644
--- a/java/com/android/voicemail/stub/StubVoicemailClient.java
+++ b/java/com/android/voicemail/stub/StubVoicemailClient.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -26,7 +27,9 @@
 import com.android.dialer.common.Assert;
 import com.android.voicemail.PinChanger;
 import com.android.voicemail.VoicemailClient;
+
 import java.util.List;
+
 import javax.inject.Inject;
 
 /**
diff --git a/java/com/android/voicemail/stub/StubVoicemailModule.java b/java/com/android/voicemail/stub/StubVoicemailModule.java
index 6c1552c..6f60d7a 100644
--- a/java/com/android/voicemail/stub/StubVoicemailModule.java
+++ b/java/com/android/voicemail/stub/StubVoicemailModule.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2023 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,9 +18,11 @@
 package com.android.voicemail.stub;
 
 import com.android.voicemail.VoicemailClient;
+
+import javax.inject.Singleton;
+
 import dagger.Binds;
 import dagger.Module;
-import javax.inject.Singleton;
 
 /**
  * A no-op version of the voicemail module for build targets that don't support the new OTMP client.
