diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 164dbc9..26fed40 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -20,7 +20,7 @@
   android:versionName="19.0">
 
   <uses-sdk
-    android:minSdkVersion="23"
+    android:minSdkVersion="24"
     android:targetSdkVersion="27"/>
 
   <uses-permission android:name="android.permission.CALL_PHONE"/>
diff --git a/java/com/android/contacts/common/dialog/CallSubjectDialog.java b/java/com/android/contacts/common/dialog/CallSubjectDialog.java
index 48f292c..bbf31e8 100644
--- a/java/com/android/contacts/common/dialog/CallSubjectDialog.java
+++ b/java/com/android/contacts/common/dialog/CallSubjectDialog.java
@@ -23,8 +23,6 @@
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.net.Uri;
-import android.os.Build.VERSION;
-import android.os.Build.VERSION_CODES;
 import android.os.Bundle;
 import android.preference.PreferenceManager;
 import android.telecom.PhoneAccount;
@@ -519,12 +517,6 @@
    * current phone account.
    */
   private void loadConfiguration() {
-    // Only attempt to load configuration from the phone account extras if the SDK is N or
-    // later.  If we've got a prior SDK the default encoding and message length will suffice.
-    if (VERSION.SDK_INT < VERSION_CODES.N) {
-      return;
-    }
-
     if (mPhoneAccountHandle == null) {
       return;
     }
diff --git a/java/com/android/dialer/app/AndroidManifest.xml b/java/com/android/dialer/app/AndroidManifest.xml
index 0c1a362..e77bbe2 100644
--- a/java/com/android/dialer/app/AndroidManifest.xml
+++ b/java/com/android/dialer/app/AndroidManifest.xml
@@ -55,7 +55,7 @@
   <uses-permission android:name="android.permission.STOP_APP_SWITCHES"/>
 
   <uses-sdk
-    android:minSdkVersion="23"
+    android:minSdkVersion="24"
     android:targetSdkVersion="27"/>
 
   <application android:theme="@style/Theme.AppCompat">
diff --git a/java/com/android/dialer/app/calllog/CallLogAsyncTaskUtil.java b/java/com/android/dialer/app/calllog/CallLogAsyncTaskUtil.java
index 08f5585..b306e75 100644
--- a/java/com/android/dialer/app/calllog/CallLogAsyncTaskUtil.java
+++ b/java/com/android/dialer/app/calllog/CallLogAsyncTaskUtil.java
@@ -34,7 +34,8 @@
 import com.android.dialer.util.PermissionsUtil;
 import com.android.voicemail.VoicemailClient;
 
-@TargetApi(VERSION_CODES.M)
+/** TODO(calderwoodra): documentation */
+@TargetApi(VERSION_CODES.N)
 public class CallLogAsyncTaskUtil {
 
   private static final String TAG = "CallLogAsyncTaskUtil";
@@ -155,6 +156,7 @@
     UPDATE_DURATION,
   }
 
+  /** TODO(calderwoodra): documentation */
   public interface CallLogAsyncTaskListener {
     void onDeleteVoicemail();
   }
diff --git a/java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java b/java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java
index 3afb6bb..ce6e5ba 100644
--- a/java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java
+++ b/java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java
@@ -51,7 +51,7 @@
 import java.util.concurrent.TimeUnit;
 
 /** Helper class operating on call log notifications. */
-@TargetApi(Build.VERSION_CODES.M)
+@TargetApi(Build.VERSION_CODES.N)
 public class CallLogNotificationsQueryHelper {
 
   @VisibleForTesting
@@ -341,14 +341,14 @@
 
     @Override
     @Nullable
-    @TargetApi(Build.VERSION_CODES.M)
+    @TargetApi(Build.VERSION_CODES.N)
     public List<NewCall> query(int type) {
       return query(type, NO_THRESHOLD);
     }
 
     @Override
     @Nullable
-    @TargetApi(Build.VERSION_CODES.M)
+    @TargetApi(Build.VERSION_CODES.N)
     @SuppressWarnings("MissingPermission")
     public List<NewCall> query(int type, long thresholdMillis) {
       if (!PermissionsUtil.hasPermission(context, Manifest.permission.READ_CALL_LOG)) {
diff --git a/java/com/android/dialer/app/calllog/VisualVoicemailNotifier.java b/java/com/android/dialer/app/calllog/VisualVoicemailNotifier.java
index 78d3075..cba389c 100644
--- a/java/com/android/dialer/app/calllog/VisualVoicemailNotifier.java
+++ b/java/com/android/dialer/app/calllog/VisualVoicemailNotifier.java
@@ -233,9 +233,6 @@
   @Nullable
   private static Uri getVoicemailRingtoneUri(
       @NonNull Context context, @Nullable PhoneAccountHandle handle) {
-    if (VERSION.SDK_INT < VERSION_CODES.N) {
-      return null;
-    }
     if (handle == null) {
       LogUtil.i("VisualVoicemailNotifier.getVoicemailRingtoneUri", "null handle, getting fallback");
       handle = getFallbackAccount(context);
@@ -251,9 +248,6 @@
 
   private static int getNotificationDefaultFlags(
       @NonNull Context context, @Nullable PhoneAccountHandle handle) {
-    if (VERSION.SDK_INT < VERSION_CODES.N) {
-      return Notification.DEFAULT_ALL;
-    }
     if (handle == null) {
       LogUtil.i(
           "VisualVoicemailNotifier.getNotificationDefaultFlags", "null handle, getting fallback");
diff --git a/java/com/android/dialer/app/calllog/VoicemailNotificationJobService.java b/java/com/android/dialer/app/calllog/VoicemailNotificationJobService.java
index ba61601..754ab27 100644
--- a/java/com/android/dialer/app/calllog/VoicemailNotificationJobService.java
+++ b/java/com/android/dialer/app/calllog/VoicemailNotificationJobService.java
@@ -22,7 +22,6 @@
 import android.app.job.JobService;
 import android.content.ComponentName;
 import android.content.Context;
-import android.os.Build;
 import android.provider.VoicemailContract;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.constants.ScheduledJobIds;
@@ -37,12 +36,8 @@
    * notification is visible.
    */
   public static void scheduleJob(Context context) {
-    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
-      LogUtil.i("VoicemailNotificationJobService.scheduleJob", "not supported");
-    } else {
-      context.getSystemService(JobScheduler.class).schedule(getJobInfo(context));
-      LogUtil.i("VoicemailNotificationJobService.scheduleJob", "job scheduled");
-    }
+    context.getSystemService(JobScheduler.class).schedule(getJobInfo(context));
+    LogUtil.i("VoicemailNotificationJobService.scheduleJob", "job scheduled");
   }
 
   /**
diff --git a/java/com/android/dialer/assisteddialing/AndroidManifest.xml b/java/com/android/dialer/assisteddialing/AndroidManifest.xml
index a19af3b..0a5b613 100644
--- a/java/com/android/dialer/assisteddialing/AndroidManifest.xml
+++ b/java/com/android/dialer/assisteddialing/AndroidManifest.xml
@@ -16,7 +16,7 @@
     package="com.android.dialer.assisteddialing">
 
   <uses-sdk
-      android:minSdkVersion="23"
+      android:minSdkVersion="24"
       android:targetSdkVersion="27"/>
 
 </manifest>
diff --git a/java/com/android/dialer/assisteddialing/ui/AndroidManifest.xml b/java/com/android/dialer/assisteddialing/ui/AndroidManifest.xml
index 3e79de3..d59056e 100644
--- a/java/com/android/dialer/assisteddialing/ui/AndroidManifest.xml
+++ b/java/com/android/dialer/assisteddialing/ui/AndroidManifest.xml
@@ -16,7 +16,7 @@
     package="com.android.dialer.assisteddialing.ui">
 
   <uses-sdk
-      android:minSdkVersion="23"
+      android:minSdkVersion="24"
       android:targetSdkVersion="27"/>
 
   <application>
diff --git a/java/com/android/dialer/binary/google/AndroidManifest.xml b/java/com/android/dialer/binary/google/AndroidManifest.xml
index c1f1a59..f6ac430 100644
--- a/java/com/android/dialer/binary/google/AndroidManifest.xml
+++ b/java/com/android/dialer/binary/google/AndroidManifest.xml
@@ -20,7 +20,7 @@
   android:versionName="19.0">
 
   <uses-sdk
-    android:minSdkVersion="23"
+    android:minSdkVersion="24"
     android:targetSdkVersion="27"/>
 
   <uses-permission android:name="android.permission.CALL_PHONE"/>
diff --git a/java/com/android/dialer/blocking/BlockedNumbersMigrator.java b/java/com/android/dialer/blocking/BlockedNumbersMigrator.java
index 88f474a..61ebf2f 100644
--- a/java/com/android/dialer/blocking/BlockedNumbersMigrator.java
+++ b/java/com/android/dialer/blocking/BlockedNumbersMigrator.java
@@ -35,7 +35,7 @@
  * Class which should be used to migrate numbers from {@link FilteredNumberContract} blocking to
  * {@link android.provider.BlockedNumberContract} blocking.
  */
-@TargetApi(VERSION_CODES.M)
+@TargetApi(VERSION_CODES.N)
 public class BlockedNumbersMigrator {
 
   private final Context context;
diff --git a/java/com/android/dialer/blocking/FilteredNumberAsyncQueryHandler.java b/java/com/android/dialer/blocking/FilteredNumberAsyncQueryHandler.java
index 09fd5f0..8be479c 100644
--- a/java/com/android/dialer/blocking/FilteredNumberAsyncQueryHandler.java
+++ b/java/com/android/dialer/blocking/FilteredNumberAsyncQueryHandler.java
@@ -37,6 +37,7 @@
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
+/** TODO(calderwoodra): documentation */
 public class FilteredNumberAsyncQueryHandler extends AsyncQueryHandler {
 
   public static final int INVALID_ID = -1;
@@ -199,7 +200,7 @@
    *
    * @return blocked id.
    */
-  @TargetApi(VERSION_CODES.M)
+  @TargetApi(VERSION_CODES.N)
   @Nullable
   public Integer getBlockedIdSynchronous(@Nullable String number, String countryIso) {
     Assert.isWorkerThread();
@@ -382,6 +383,7 @@
         null);
   }
 
+  /** TODO(calderwoodra): documentation */
   public interface OnCheckBlockedListener {
 
     /**
@@ -392,6 +394,7 @@
     void onCheckComplete(Integer id);
   }
 
+  /** TODO(calderwoodra): documentation */
   public interface OnBlockNumberListener {
 
     /**
@@ -402,6 +405,7 @@
     void onBlockComplete(Uri uri);
   }
 
+  /** TODO(calderwoodra): documentation */
   public interface OnUnblockNumberListener {
 
     /**
@@ -413,6 +417,7 @@
     void onUnblockComplete(int rows, ContentValues values);
   }
 
+  /** TODO(calderwoodra): documentation */
   interface OnHasBlockedNumbersListener {
 
     /**
diff --git a/java/com/android/dialer/blocking/FilteredNumberCompat.java b/java/com/android/dialer/blocking/FilteredNumberCompat.java
index bea84e8..b0af45c 100644
--- a/java/com/android/dialer/blocking/FilteredNumberCompat.java
+++ b/java/com/android/dialer/blocking/FilteredNumberCompat.java
@@ -16,16 +16,12 @@
 
 package com.android.dialer.blocking;
 
-import android.annotation.TargetApi;
 import android.app.FragmentManager;
 import android.content.ContentUris;
 import android.content.ContentValues;
 import android.content.Context;
 import android.content.Intent;
 import android.net.Uri;
-import android.os.Build.VERSION;
-import android.os.Build.VERSION_CODES;
-import android.os.UserManager;
 import android.preference.PreferenceManager;
 import android.provider.BlockedNumberContract;
 import android.provider.BlockedNumberContract.BlockedNumbers;
@@ -110,7 +106,7 @@
    *     otherwise.
    */
   public static boolean canUseNewFiltering() {
-    return VERSION.SDK_INT >= VERSION_CODES.N;
+    return true;
   }
 
   /**
@@ -162,16 +158,14 @@
 
   private static Uri getBaseUri(Context context) {
     // Explicit version check to aid static analysis
-    return useNewFiltering(context) && VERSION.SDK_INT >= VERSION_CODES.N
-        ? BlockedNumbers.CONTENT_URI
-        : FilteredNumber.CONTENT_URI;
+    return useNewFiltering(context) ? BlockedNumbers.CONTENT_URI : FilteredNumber.CONTENT_URI;
   }
 
   /**
    * Removes any null column names from the given projection array. This method is intended to be
    * used to strip out any column names that aren't available in every version of number blocking.
    * Example: {@literal getContext().getContentResolver().query( someUri, // Filtering ensures that
-   * no non-existant columns are queried FilteredNumberCompat.filter(new String[]
+   * no non-existent columns are queried FilteredNumberCompat.filter(new String[]
    * {FilteredNumberCompat.getIdColumnName(), FilteredNumberCompat.getTypeColumnName()},
    * FilteredNumberCompat.getE164NumberColumnName() + " = ?", new String[] {e164Number}); }
    *
@@ -249,9 +243,7 @@
    */
   public static Intent createManageBlockedNumbersIntent(Context context) {
     // Explicit version check to aid static analysis
-    if (canUseNewFiltering()
-        && hasMigratedToNewBlocking(context)
-        && VERSION.SDK_INT >= VERSION_CODES.N) {
+    if (canUseNewFiltering() && hasMigratedToNewBlocking(context)) {
       return context.getSystemService(TelecomManager.class).createManageBlockedNumbersIntent();
     }
     Intent intent = new Intent("com.android.dialer.action.BLOCKED_NUMBERS_SETTINGS");
@@ -270,11 +262,6 @@
       return canAttemptBlockOperationsForTest;
     }
 
-    if (VERSION.SDK_INT < VERSION_CODES.N) {
-      // Dialer blocking, must be primary user
-      return context.getSystemService(UserManager.class).isSystemUser();
-    }
-
     // Great Wall blocking, must be primary user and the default or system dialer
     // TODO(maxwelb): check that we're the system Dialer
     return TelecomUtil.isDefaultDialer(context)
@@ -294,10 +281,6 @@
    *     otherwise.
    */
   public static boolean canCurrentUserOpenBlockSettings(Context context) {
-    if (VERSION.SDK_INT < VERSION_CODES.N) {
-      // Dialer blocking, must be primary user
-      return context.getSystemService(UserManager.class).isSystemUser();
-    }
     // BlockedNumberContract blocking, verify through Contract API
     return TelecomUtil.isDefaultDialer(context)
         && safeBlockedNumbersContractCanCurrentUserBlockNumbers(context);
@@ -312,7 +295,6 @@
    * @return the result of BlockedNumberContract#canCurrentUserBlockNumbers, or {@code false} if an
    *     exception was thrown.
    */
-  @TargetApi(VERSION_CODES.N)
   private static boolean safeBlockedNumbersContractCanCurrentUserBlockNumbers(Context context) {
     try {
       return BlockedNumberContract.canCurrentUserBlockNumbers(context);
diff --git a/java/com/android/dialer/callcomposer/CopyAndResizeImageWorker.java b/java/com/android/dialer/callcomposer/CopyAndResizeImageWorker.java
index 725cea7..0f1ab5f 100644
--- a/java/com/android/dialer/callcomposer/CopyAndResizeImageWorker.java
+++ b/java/com/android/dialer/callcomposer/CopyAndResizeImageWorker.java
@@ -37,7 +37,7 @@
 import java.io.OutputStream;
 
 /** Task for copying and resizing images to be shared with RCS process. */
-@TargetApi(VERSION_CODES.M)
+@TargetApi(VERSION_CODES.N)
 class CopyAndResizeImageWorker implements Worker<Uri, Pair<File, String>> {
   private static final String MIME_TYPE = "image/jpeg";
 
diff --git a/java/com/android/dialer/callcomposer/camera/ImagePersistWorker.java b/java/com/android/dialer/callcomposer/camera/ImagePersistWorker.java
index 69f5469..c18e22d 100644
--- a/java/com/android/dialer/callcomposer/camera/ImagePersistWorker.java
+++ b/java/com/android/dialer/callcomposer/camera/ImagePersistWorker.java
@@ -38,7 +38,7 @@
 import java.io.OutputStream;
 
 /** Persisting image routine. */
-@TargetApi(VERSION_CODES.M)
+@TargetApi(VERSION_CODES.N)
 public class ImagePersistWorker implements Worker<Void, Result> {
   private int width;
   private int height;
diff --git a/java/com/android/dialer/calllog/AndroidManifest.xml b/java/com/android/dialer/calllog/AndroidManifest.xml
index 69731fe..7c904d9 100644
--- a/java/com/android/dialer/calllog/AndroidManifest.xml
+++ b/java/com/android/dialer/calllog/AndroidManifest.xml
@@ -17,7 +17,7 @@
     package="com.android.dialer.calllog">
 
   <uses-sdk
-      android:minSdkVersion="23"
+      android:minSdkVersion="24"
       android:targetSdkVersion="27"/>
 
   <application>
diff --git a/java/com/android/dialer/calllog/database/AnnotatedCallLogContentProvider.java b/java/com/android/dialer/calllog/database/AnnotatedCallLogContentProvider.java
index 9a80af2..7fc474a 100644
--- a/java/com/android/dialer/calllog/database/AnnotatedCallLogContentProvider.java
+++ b/java/com/android/dialer/calllog/database/AnnotatedCallLogContentProvider.java
@@ -92,7 +92,7 @@
     return true;
   }
 
-  @TargetApi(Build.VERSION_CODES.M) // Uses try-with-resources
+  @TargetApi(Build.VERSION_CODES.N) // Uses try-with-resources
   @Nullable
   @Override
   public Cursor query(
diff --git a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
index 6fd19dd..dce51b7 100644
--- a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
@@ -256,7 +256,7 @@
     }
   }
 
-  @TargetApi(Build.VERSION_CODES.M) // Uses try-with-resources
+  @TargetApi(Build.VERSION_CODES.N) // Uses try-with-resources
   private void handleInsertsAndUpdates(
       Context appContext, CallLogMutations mutations, Set<Long> existingAnnotatedCallLogIds) {
     long previousTimestampProcessed = sharedPreferences.getLong(PREF_LAST_TIMESTAMP_PROCESSED, 0L);
@@ -481,7 +481,7 @@
     }
   }
 
-  @TargetApi(Build.VERSION_CODES.M) // Uses try-with-resources
+  @TargetApi(Build.VERSION_CODES.N) // Uses try-with-resources
   private static Set<Long> getAnnotatedCallLogIds(Context appContext) {
     ArraySet<Long> ids = new ArraySet<>();
 
@@ -510,7 +510,7 @@
     return ids;
   }
 
-  @TargetApi(Build.VERSION_CODES.M) // Uses try-with-resources
+  @TargetApi(Build.VERSION_CODES.N) // Uses try-with-resources
   private static Set<Long> getIdsFromSystemCallLogThatMatch(
       Context appContext, Set<Long> matchingIds) {
     ArraySet<Long> ids = new ArraySet<>();
diff --git a/java/com/android/dialer/calllogutils/CallLogDates.java b/java/com/android/dialer/calllogutils/CallLogDates.java
index fe3c0c3..5a63c3c 100644
--- a/java/com/android/dialer/calllogutils/CallLogDates.java
+++ b/java/com/android/dialer/calllogutils/CallLogDates.java
@@ -19,8 +19,6 @@
 import android.content.Context;
 import android.icu.lang.UCharacter;
 import android.icu.text.BreakIterator;
-import android.os.Build.VERSION;
-import android.os.Build.VERSION_CODES;
 import android.text.format.DateUtils;
 import java.util.Calendar;
 import java.util.Locale;
@@ -145,12 +143,6 @@
     // of the string is not usually capitalized. For example, "Wednesdsay" in Uzbek is "chorshanba”
     // (not capitalized). To handle this issue we apply title casing to the start of the sentence so
     // that "chorshanba, 2016 may 25,20:02" becomes "Chorshanba, 2016 may 25,20:02".
-    //
-    // The ICU library was not available in Android until N, so we can only do this in N+ devices.
-    // Pre-N devices will still see incorrect capitalization in some languages.
-    if (VERSION.SDK_INT < VERSION_CODES.N) {
-      return value;
-    }
 
     // Using the ICU library is safer than just applying toUpperCase() on the first letter of the
     // word because in some languages, there can be multiple starting characters which should be
diff --git a/java/com/android/dialer/compat/CompatUtils.java b/java/com/android/dialer/compat/CompatUtils.java
index 584f205..d09f8b0 100644
--- a/java/com/android/dialer/compat/CompatUtils.java
+++ b/java/com/android/dialer/compat/CompatUtils.java
@@ -16,17 +16,17 @@
 package com.android.dialer.compat;
 
 import android.content.Context;
-import android.os.Build;
 import android.os.Build.VERSION;
 import android.os.Build.VERSION_CODES;
 import android.os.LocaleList;
 import java.util.Locale;
 
+/** TODO(calderwoodra): documentation */
 public final class CompatUtils {
 
   /** PrioritizedMimeType is added in API level 23. */
   public static boolean hasPrioritizedMimeType() {
-    return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) >= Build.VERSION_CODES.M;
+    return true;
   }
 
   /**
@@ -36,8 +36,7 @@
    * @return {@code true} if multi-SIM capability is available, {@code false} otherwise.
    */
   public static boolean isMSIMCompatible() {
-    return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.LOLLIPOP)
-        >= Build.VERSION_CODES.LOLLIPOP_MR1;
+    return true;
   }
 
   /**
@@ -47,7 +46,7 @@
    * @return {@code true} if video calling is allowed, {@code false} otherwise.
    */
   public static boolean isVideoCompatible() {
-    return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.LOLLIPOP) >= Build.VERSION_CODES.M;
+    return true;
   }
 
   /**
@@ -57,7 +56,7 @@
    * @return {@code true} if video presence checking is allowed, {@code false} otherwise.
    */
   public static boolean isVideoPresenceCompatible() {
-    return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) > Build.VERSION_CODES.M;
+    return true;
   }
 
   /**
@@ -67,7 +66,7 @@
    * @return {@code true} if call subject is a feature on this device, {@code false} otherwise.
    */
   public static boolean isCallSubjectCompatible() {
-    return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.LOLLIPOP) >= Build.VERSION_CODES.M;
+    return true;
   }
 
   /** Returns locale of the device. */
diff --git a/java/com/android/dialer/compat/SdkVersionOverride.java b/java/com/android/dialer/compat/SdkVersionOverride.java
deleted file mode 100644
index 1d253a3..0000000
--- a/java/com/android/dialer/compat/SdkVersionOverride.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.dialer.compat;
-
-import android.os.Build.VERSION;
-
-/**
- * Class used to override the current sdk version to test specific branches of compatibility logic.
- * When such branching occurs, use {@link #getSdkVersion(int)} rather than explicitly calling {@link
- * VERSION#SDK_INT}. This allows the sdk version to be forced to a specific value.
- */
-public class SdkVersionOverride {
-
-  /** Flag used to determine if override sdk versions are returned. */
-  private static final boolean ALLOW_OVERRIDE_VERSION = false;
-
-  private SdkVersionOverride() {}
-
-  /**
-   * Gets the sdk version
-   *
-   * @param overrideVersion the version to attempt using
-   * @return overrideVersion if the {@link #ALLOW_OVERRIDE_VERSION} flag is set to {@code true},
-   *     otherwise the current version
-   */
-  public static int getSdkVersion(int overrideVersion) {
-    return ALLOW_OVERRIDE_VERSION ? overrideVersion : VERSION.SDK_INT;
-  }
-}
diff --git a/java/com/android/dialer/compat/telephony/TelephonyManagerCompat.java b/java/com/android/dialer/compat/telephony/TelephonyManagerCompat.java
index c4ed6e6..655540b 100644
--- a/java/com/android/dialer/compat/telephony/TelephonyManagerCompat.java
+++ b/java/com/android/dialer/compat/telephony/TelephonyManagerCompat.java
@@ -25,7 +25,6 @@
 import android.support.v4.os.BuildCompat;
 import android.telecom.PhoneAccountHandle;
 import android.telephony.TelephonyManager;
-import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.telecom.TelecomUtil;
 import java.lang.reflect.InvocationTargetException;
@@ -133,9 +132,6 @@
   @Nullable
   public static Uri getVoicemailRingtoneUri(
       TelephonyManager telephonyManager, PhoneAccountHandle accountHandle) {
-    if (VERSION.SDK_INT < VERSION_CODES.N) {
-      return null;
-    }
     return telephonyManager.getVoicemailRingtoneUri(accountHandle);
   }
 
@@ -149,8 +145,7 @@
    */
   public static boolean isVoicemailVibrationEnabled(
       TelephonyManager telephonyManager, PhoneAccountHandle accountHandle) {
-    return VERSION.SDK_INT < VERSION_CODES.N
-        || telephonyManager.isVoicemailVibrationEnabled(accountHandle);
+    return telephonyManager.isVoicemailVibrationEnabled(accountHandle);
   }
 
   /**
@@ -159,9 +154,6 @@
    */
   public static void setVisualVoicemailEnabled(
       TelephonyManager telephonyManager, PhoneAccountHandle handle, boolean enabled) {
-    if (VERSION.SDK_INT < VERSION_CODES.N_MR1) {
-      Assert.fail("setVisualVoicemailEnabled called on pre-NMR1");
-    }
     try {
       TelephonyManager.class
           .getMethod("setVisualVoicemailEnabled", PhoneAccountHandle.class, boolean.class)
@@ -177,9 +169,6 @@
    */
   public static boolean isVisualVoicemailEnabled(
       TelephonyManager telephonyManager, PhoneAccountHandle handle) {
-    if (VERSION.SDK_INT < VERSION_CODES.N_MR1) {
-      Assert.fail("isVisualVoicemailEnabled called on pre-NMR1");
-    }
     try {
       return (boolean)
           TelephonyManager.class
diff --git a/java/com/android/dialer/database/CallLogQueryHandler.java b/java/com/android/dialer/database/CallLogQueryHandler.java
index 92c49a0..e974cc4 100644
--- a/java/com/android/dialer/database/CallLogQueryHandler.java
+++ b/java/com/android/dialer/database/CallLogQueryHandler.java
@@ -26,7 +26,6 @@
 import android.database.sqlite.SQLiteException;
 import android.database.sqlite.SQLiteFullException;
 import android.net.Uri;
-import android.os.Build;
 import android.os.Handler;
 import android.os.Looper;
 import android.os.Message;
@@ -36,7 +35,6 @@
 import com.android.contacts.common.database.NoNullCursorAsyncQueryHandler;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.compat.AppCompatConstants;
-import com.android.dialer.compat.SdkVersionOverride;
 import com.android.dialer.phonenumbercache.CallLogQuery;
 import com.android.dialer.telecom.TelecomUtil;
 import com.android.dialer.util.PermissionsUtil;
@@ -157,9 +155,7 @@
     selectionArgs.add(Integer.toString(AppCompatConstants.CALLS_BLOCKED_TYPE));
 
     // Ignore voicemails marked as deleted
-    if (SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) >= Build.VERSION_CODES.M) {
-      where.append(" AND (").append(Voicemails.DELETED).append(" = 0)");
-    }
+    where.append(" AND (").append(Voicemails.DELETED).append(" = 0)");
 
     if (newOnly) {
       where.append(" AND (").append(Calls.NEW).append(" = 1)");
diff --git a/java/com/android/dialer/oem/CequintCallerIdManager.java b/java/com/android/dialer/oem/CequintCallerIdManager.java
index 48a5985..ee865bc 100644
--- a/java/com/android/dialer/oem/CequintCallerIdManager.java
+++ b/java/com/android/dialer/oem/CequintCallerIdManager.java
@@ -41,7 +41,7 @@
  * Cequint Caller ID. It also caches any information fetched in static map, which lives through
  * whole application lifecycle.
  */
-@TargetApi(VERSION_CODES.M)
+@TargetApi(VERSION_CODES.N)
 public class CequintCallerIdManager {
 
   private static final String CONFIG_CALLER_ID_ENABLED = "config_caller_id_enabled";
diff --git a/java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java b/java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java
index a3d51a7..fe6642e 100644
--- a/java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java
@@ -16,11 +16,8 @@
 
 package com.android.dialer.phonelookup.blockednumber;
 
-import android.annotation.TargetApi;
 import android.content.Context;
 import android.database.Cursor;
-import android.os.Build.VERSION;
-import android.os.Build.VERSION_CODES;
 import android.provider.BlockedNumberContract.BlockedNumbers;
 import android.support.annotation.NonNull;
 import android.support.annotation.WorkerThread;
@@ -72,10 +69,7 @@
     if (!FilteredNumberCompat.useNewFiltering(appContext)) {
       return Futures.immediateFuture(SystemBlockedNumberInfo.getDefaultInstance());
     }
-    return executorService.submit(
-        () -> {
-          return queryNumbers(ImmutableSet.of(number)).get(number);
-        });
+    return executorService.submit(() -> queryNumbers(ImmutableSet.of(number)).get(number));
   }
 
   @Override
@@ -96,7 +90,6 @@
   }
 
   @WorkerThread
-  @TargetApi(VERSION_CODES.N)
   private ImmutableMap<DialerPhoneNumber, SystemBlockedNumberInfo> queryNumbers(
       ImmutableSet<DialerPhoneNumber> numbers) {
     Assert.isWorkerThread();
@@ -171,9 +164,6 @@
 
   @Override
   public void registerContentObservers() {
-    if (VERSION.SDK_INT < VERSION_CODES.N) {
-      return;
-    }
     appContext
         .getContentResolver()
         .registerContentObserver(
diff --git a/java/com/android/dialer/phonenumbercache/ContactInfoHelper.java b/java/com/android/dialer/phonenumbercache/ContactInfoHelper.java
index 01f9669..d6e378c 100644
--- a/java/com/android/dialer/phonenumbercache/ContactInfoHelper.java
+++ b/java/com/android/dialer/phonenumbercache/ContactInfoHelper.java
@@ -14,14 +14,11 @@
 
 package com.android.dialer.phonenumbercache;
 
-import android.annotation.TargetApi;
 import android.content.ContentValues;
 import android.content.Context;
 import android.database.Cursor;
 import android.database.sqlite.SQLiteFullException;
 import android.net.Uri;
-import android.os.Build.VERSION;
-import android.os.Build.VERSION_CODES;
 import android.provider.CallLog.Calls;
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
@@ -53,8 +50,6 @@
 import org.json.JSONObject;
 
 /** Utility class to look up the contact information for a given number. */
-// This class uses Java 7 language features, so it must target M+
-@TargetApi(VERSION_CODES.M)
 public class ContactInfoHelper {
 
   private static final String TAG = ContactInfoHelper.class.getSimpleName();
@@ -153,15 +148,6 @@
     // Get URI for the number in the PhoneLookup table, with a parameter to indicate whether
     // the number is a SIP number.
     Uri uri = PhoneLookup.ENTERPRISE_CONTENT_FILTER_URI;
-    if (VERSION.SDK_INT < VERSION_CODES.N) {
-      if (directoryId != -1) {
-        // ENTERPRISE_CONTENT_FILTER_URI in M doesn't support directory lookup
-        uri = PhoneLookup.CONTENT_FILTER_URI;
-      } else {
-        // a bug in M. PhoneLookup.ENTERPRISE_CONTENT_FILTER_URI, encodes twice.
-        number = Uri.encode(number);
-      }
-    }
     Uri.Builder builder =
         uri.buildUpon()
             .appendPath(number)
@@ -187,8 +173,7 @@
     info.type = c.getInt(CallLogQuery.CACHED_NUMBER_TYPE);
     info.label = c.getString(CallLogQuery.CACHED_NUMBER_LABEL);
     String matchedNumber = c.getString(CallLogQuery.CACHED_MATCHED_NUMBER);
-    String postDialDigits =
-        (VERSION.SDK_INT >= VERSION_CODES.N) ? c.getString(CallLogQuery.POST_DIAL_DIGITS) : "";
+    String postDialDigits = c.getString(CallLogQuery.POST_DIAL_DIGITS);
     info.number =
         (matchedNumber == null) ? c.getString(CallLogQuery.NUMBER) + postDialDigits : matchedNumber;
 
@@ -294,10 +279,7 @@
 
   private List<Long> getRemoteDirectories(Context context) {
     List<Long> remoteDirectories = new ArrayList<>();
-    Uri uri =
-        VERSION.SDK_INT >= VERSION_CODES.N
-            ? Directory.ENTERPRISE_CONTENT_URI
-            : Directory.CONTENT_URI;
+    Uri uri = Directory.ENTERPRISE_CONTENT_URI;
     Cursor cursor =
         context.getContentResolver().query(uri, new String[] {Directory._ID}, null, null, null);
     if (cursor == null) {
diff --git a/java/com/android/dialer/preferredsim/PreferredAccountWorker.java b/java/com/android/dialer/preferredsim/PreferredAccountWorker.java
index bfaaa7c..aa61788 100644
--- a/java/com/android/dialer/preferredsim/PreferredAccountWorker.java
+++ b/java/com/android/dialer/preferredsim/PreferredAccountWorker.java
@@ -24,8 +24,6 @@
 import android.content.pm.ResolveInfo;
 import android.database.Cursor;
 import android.net.Uri;
-import android.os.Build.VERSION;
-import android.os.Build.VERSION_CODES;
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Data;
 import android.provider.ContactsContract.PhoneLookup;
@@ -130,9 +128,6 @@
   private static Optional<String> getDataId(
       @NonNull Context context, @Nullable String phoneNumber) {
     Assert.isWorkerThread();
-    if (VERSION.SDK_INT < VERSION_CODES.N) {
-      return Optional.absent();
-    }
     try (Cursor cursor =
         context
             .getContentResolver()
diff --git a/java/com/android/dialer/shortcuts/AndroidManifest.xml b/java/com/android/dialer/shortcuts/AndroidManifest.xml
index 1170058..36f61fe 100644
--- a/java/com/android/dialer/shortcuts/AndroidManifest.xml
+++ b/java/com/android/dialer/shortcuts/AndroidManifest.xml
@@ -17,7 +17,7 @@
   package="com.android.dialer.shortcuts">
 
   <uses-sdk
-    android:minSdkVersion="23"
+    android:minSdkVersion="24"
     android:targetSdkVersion="27"/>
 
   <application android:theme="@style/Theme.AppCompat">
diff --git a/java/com/android/dialer/spannable/AndroidManifest.xml b/java/com/android/dialer/spannable/AndroidManifest.xml
index e256dc1..5fa6407 100644
--- a/java/com/android/dialer/spannable/AndroidManifest.xml
+++ b/java/com/android/dialer/spannable/AndroidManifest.xml
@@ -17,6 +17,6 @@
     package="com.android.dialer.spannable">
 
   <uses-sdk
-      android:minSdkVersion="23"
+      android:minSdkVersion="24"
       android:targetSdkVersion="27"/>
 </manifest>
diff --git a/java/com/android/dialer/voicemail/listui/error/VoicemailStatusWorker.java b/java/com/android/dialer/voicemail/listui/error/VoicemailStatusWorker.java
index df58d41..e87dee3 100644
--- a/java/com/android/dialer/voicemail/listui/error/VoicemailStatusWorker.java
+++ b/java/com/android/dialer/voicemail/listui/error/VoicemailStatusWorker.java
@@ -32,7 +32,7 @@
 /**
  * Worker for {@link com.android.dialer.common.concurrent.DialerExecutors} to fetch voicemail status
  */
-@TargetApi(VERSION_CODES.M)
+@TargetApi(VERSION_CODES.N)
 public class VoicemailStatusWorker implements Worker<Context, List<VoicemailStatus>> {
 
   @Nullable
diff --git a/java/com/android/incallui/AndroidManifest.xml b/java/com/android/incallui/AndroidManifest.xml
index 2417797..9a762fe 100644
--- a/java/com/android/incallui/AndroidManifest.xml
+++ b/java/com/android/incallui/AndroidManifest.xml
@@ -18,7 +18,7 @@
     package="com.android.incallui">
 
   <uses-sdk
-      android:minSdkVersion="23"
+      android:minSdkVersion="24"
       android:targetSdkVersion="27"/>
 
   <uses-permission android:name="android.permission.CONTROL_INCALL_EXPERIENCE"/>
diff --git a/java/com/android/incallui/CallerInfoAsyncQuery.java b/java/com/android/incallui/CallerInfoAsyncQuery.java
index 87dcc4f..4170cc3 100644
--- a/java/com/android/incallui/CallerInfoAsyncQuery.java
+++ b/java/com/android/incallui/CallerInfoAsyncQuery.java
@@ -53,7 +53,7 @@
  *
  * @see CallerInfo
  */
-@TargetApi(VERSION_CODES.M)
+@TargetApi(VERSION_CODES.N)
 public class CallerInfoAsyncQuery {
 
   /** Interface for a CallerInfoAsyncQueryHandler result return. */
diff --git a/java/com/android/incallui/answer/impl/hint/PawImageLoaderImpl.java b/java/com/android/incallui/answer/impl/hint/PawImageLoaderImpl.java
index 31b1711..aef5687 100644
--- a/java/com/android/incallui/answer/impl/hint/PawImageLoaderImpl.java
+++ b/java/com/android/incallui/answer/impl/hint/PawImageLoaderImpl.java
@@ -29,7 +29,7 @@
 import com.android.incallui.answer.impl.hint.PawSecretCodeListener.PawType;
 
 /** Decrypt the event payload to be shown if in a specific time range and the key is received. */
-@TargetApi(VERSION_CODES.M)
+@TargetApi(VERSION_CODES.N)
 public final class PawImageLoaderImpl implements PawImageLoader {
 
   @Override
diff --git a/java/com/android/incallui/autoresizetext/AndroidManifest.xml b/java/com/android/incallui/autoresizetext/AndroidManifest.xml
index e26670e..1ba8b7c 100644
--- a/java/com/android/incallui/autoresizetext/AndroidManifest.xml
+++ b/java/com/android/incallui/autoresizetext/AndroidManifest.xml
@@ -18,7 +18,7 @@
     package="com.android.incallui.autoresizetext">
 
   <uses-sdk
-      android:minSdkVersion="23"
+      android:minSdkVersion="24"
       android:targetSdkVersion="27"/>
 
   <application />
diff --git a/java/com/android/incallui/legacyblocking/DeleteBlockedCallTask.java b/java/com/android/incallui/legacyblocking/DeleteBlockedCallTask.java
index a3f2dfa..f9fe6a6 100644
--- a/java/com/android/incallui/legacyblocking/DeleteBlockedCallTask.java
+++ b/java/com/android/incallui/legacyblocking/DeleteBlockedCallTask.java
@@ -34,7 +34,7 @@
  * versions of the OS, call blocking is implemented in the system and there's no need to mess with
  * the call log.
  */
-@TargetApi(VERSION_CODES.M)
+@TargetApi(VERSION_CODES.N)
 public class DeleteBlockedCallTask extends AsyncTask<Void, Void, Long> {
 
   public static final String IDENTIFIER = "DeleteBlockedCallTask";
diff --git a/java/com/android/incallui/rtt/protocol/AndroidManifest.xml b/java/com/android/incallui/rtt/protocol/AndroidManifest.xml
index 52514a5..c0d39b0 100644
--- a/java/com/android/incallui/rtt/protocol/AndroidManifest.xml
+++ b/java/com/android/incallui/rtt/protocol/AndroidManifest.xml
@@ -17,6 +17,6 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.incallui.rtt.protocol">
   <uses-sdk
-      android:minSdkVersion="23"
+      android:minSdkVersion="24"
       android:targetSdkVersion="26"/>
 </manifest>
\ No newline at end of file
diff --git a/java/com/android/incallui/spam/SpamCallListListener.java b/java/com/android/incallui/spam/SpamCallListListener.java
index 22b3833..9ef65d8 100644
--- a/java/com/android/incallui/spam/SpamCallListListener.java
+++ b/java/com/android/incallui/spam/SpamCallListListener.java
@@ -87,7 +87,7 @@
   }
 
   /** Checks if the number is in the call history. */
-  @TargetApi(VERSION_CODES.M)
+  @TargetApi(VERSION_CODES.N)
   private static final class NumberInCallHistoryWorker implements Worker<Void, Integer> {
 
     private final Context appContext;
diff --git a/java/com/android/incallui/video/protocol/AndroidManifest.xml b/java/com/android/incallui/video/protocol/AndroidManifest.xml
index 6f65582..f059b19 100644
--- a/java/com/android/incallui/video/protocol/AndroidManifest.xml
+++ b/java/com/android/incallui/video/protocol/AndroidManifest.xml
@@ -17,6 +17,6 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.incallui.video.protocol">
   <uses-sdk
-      android:minSdkVersion="23"
+      android:minSdkVersion="24"
       android:targetSdkVersion="27"/>
 </manifest>
diff --git a/java/com/android/incallui/videotech/ims/ImsVideoTech.java b/java/com/android/incallui/videotech/ims/ImsVideoTech.java
index a2fb73b..d9660e1 100644
--- a/java/com/android/incallui/videotech/ims/ImsVideoTech.java
+++ b/java/com/android/incallui/videotech/ims/ImsVideoTech.java
@@ -17,7 +17,6 @@
 package com.android.incallui.videotech.ims;
 
 import android.content.Context;
-import android.os.Build;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.annotation.VisibleForTesting;
@@ -61,10 +60,6 @@
 
   @Override
   public boolean isAvailable(Context context, PhoneAccountHandle phoneAccountHandle) {
-    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
-      return false;
-    }
-
     if (call.getVideoCall() == null) {
       return false;
     }
diff --git a/java/com/android/voicemail/AndroidManifest.xml b/java/com/android/voicemail/AndroidManifest.xml
index d64fb25..23c746a 100644
--- a/java/com/android/voicemail/AndroidManifest.xml
+++ b/java/com/android/voicemail/AndroidManifest.xml
@@ -17,7 +17,7 @@
   package="com.android.voicemail">
 
   <uses-sdk
-    android:minSdkVersion="23"
+    android:minSdkVersion="24"
     android:targetSdkVersion="27"/>
 
   <!-- Applications using this module should merge these permissions using android_manifest_merge -->
diff --git a/java/com/android/voicemail/impl/PackageReplacedReceiver.java b/java/com/android/voicemail/impl/PackageReplacedReceiver.java
index bc56286..9fa9f75 100644
--- a/java/com/android/voicemail/impl/PackageReplacedReceiver.java
+++ b/java/com/android/voicemail/impl/PackageReplacedReceiver.java
@@ -91,7 +91,7 @@
       this.context = context;
     }
 
-    @TargetApi(android.os.Build.VERSION_CODES.M) // used for try with resources
+    @TargetApi(android.os.Build.VERSION_CODES.N) // used for try with resources
     @Override
     public Void doInBackground(Void arg) throws Throwable {
       LogUtil.i("PackageReplacedReceiver.ExistingVoicemailCheck.doInBackground", "");
diff --git a/java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java b/java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java
index c47b40d..be11c44 100644
--- a/java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java
+++ b/java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java
@@ -256,7 +256,7 @@
   }
 
   /** Find the oldest voicemails that are on the device, and also on the server. */
-  @TargetApi(VERSION_CODES.M) // used for try with resources
+  @TargetApi(VERSION_CODES.N) // used for try with resources
   public List<Voicemail> oldestVoicemailsOnServer(int numVoicemails) {
     if (numVoicemails <= 0) {
       Assert.fail("Query for remote voicemails cannot be <= 0");
diff --git a/java/com/android/voicemail/impl/transcribe/TranscriptionUtils.java b/java/com/android/voicemail/impl/transcribe/TranscriptionUtils.java
index 3bd1473..d8c00ed 100644
--- a/java/com/android/voicemail/impl/transcribe/TranscriptionUtils.java
+++ b/java/com/android/voicemail/impl/transcribe/TranscriptionUtils.java
@@ -34,7 +34,7 @@
   static final String AMR_PREFIX = "#!AMR\n";
 
   // Uses try-with-resource
-  @TargetApi(android.os.Build.VERSION_CODES.M)
+  @TargetApi(android.os.Build.VERSION_CODES.N)
   static ByteString getAudioData(Context context, Uri voicemailUri) {
     try (InputStream in = context.getContentResolver().openInputStream(voicemailUri)) {
       return ByteString.readFrom(in);
