diff --git a/PREUPLOAD.cfg b/PREUPLOAD.cfg
new file mode 100644
index 0000000..9874044
--- /dev/null
+++ b/PREUPLOAD.cfg
@@ -0,0 +1,2 @@
+[Hook Scripts]
+aosp_hook = ${REPO_ROOT}/packages/services/Telecomm/scripts/aosp_tag_preupload.py ${PREUPLOAD_COMMIT}
diff --git a/res/values/config.xml b/res/values/config.xml
index 540bece..5b9636d 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -66,4 +66,12 @@
          classified as being on a user's ear. If the Y-component is less than this negative value,
          the device is probably upside-down and therefore not on a ear -->
     <item name="device_on_ear_y_gravity_negative_threshold" format="float" type="dimen">-1</item>
+
+    <!-- When true, an option is shown in the call blocking screen which allows the user to block
+         all incoming calls from callers not in their contacts. -->
+    <bool name="show_option_to_block_callers_not_in_contacts">false</bool>
+
+    <!-- When true, the options in the call blocking settings to block restricted and unknown
+         callers are combined into a single toggle. -->
+    <bool name="combine_options_to_block_restricted_and_unknown_callers">true</bool>
 </resources>
diff --git a/scripts/aosp_tag_preupload.py b/scripts/aosp_tag_preupload.py
new file mode 100755
index 0000000..8ec013e
--- /dev/null
+++ b/scripts/aosp_tag_preupload.py
@@ -0,0 +1,65 @@
+#!/usr/bin/python
+
+import re
+import subprocess
+import sys
+
+# Looks for a string of the form [aosp/branch-name]
+AOSP_BRANCH_REGEX = "\[aosp/[^\]]+\]"
+
+AOSP_COMMIT_TAG_REGEX = "AOSP:"
+AOSP_COMMIT_LINK_REGEX = "aosp/\d+"
+AOSP_INFEASIBLE_REGEX = "Infeasible[ ]?\S+"
+
+ERROR_MESSAGE = """
+The source of truth for this project is AOSP. If you are uploading something to
+a non-AOSP branch first, please provide a link in your commit message to the
+corresponding patch in AOSP. The link should be formatted as follows:
+
+  AOSP: aosp/<patch number>
+
+If it's infeasible for the change to be included in AOSP (for example, if a
+change contains confidential or security-sensitive information), please state
+that it's infeasible and provide reasoning as follows:
+
+  AOSP: Infeasible <your reasoning here>
+
+If you need to cherry-pick your change from an internal branch to AOSP before
+uploading, you can do so locally by adding the internal branch as a remote in
+AOSP:
+  git remote add goog-master /path/to/your/remote/branch/.git
+starting a new branch in AOSP:
+  repo start <your-branch-name>-cp
+then fetching and cherry-picking the change:
+  git fetch goog-master your-branch-name && git cherry-pick FETCH_HEAD
+"""
+
+def main():
+  if _is_in_aosp():
+    sys.exit(0)
+
+  commit_msg = subprocess.check_output(["git", "show",
+                                        sys.argv[1], "--no-notes"])
+  for commit_line in commit_msg.splitlines():
+    if re.search(AOSP_COMMIT_TAG_REGEX, commit_line, re.IGNORECASE):
+      _check_aosp_message(commit_line)
+
+  print(ERROR_MESSAGE)
+  sys.exit(1)
+
+def _is_in_aosp():
+  branch_info = subprocess.check_output(["git", "branch", "-vv"])
+  return re.search(AOSP_BRANCH_REGEX, branch_info) is not None
+
+def _check_aosp_message(aosp_line):
+  if re.search(AOSP_COMMIT_LINK_REGEX, aosp_line):
+    sys.exit(0)
+
+  if re.search(AOSP_INFEASIBLE_REGEX, aosp_line, re.IGNORECASE):
+    sys.exit(0)
+
+  print(ERROR_MESSAGE)
+  sys.exit(1)
+
+if __name__ == '__main__':
+  main()
diff --git a/src/com/android/server/telecom/RoleManagerAdapter.java b/src/com/android/server/telecom/RoleManagerAdapter.java
index 647d7bf..f1eb455 100644
--- a/src/com/android/server/telecom/RoleManagerAdapter.java
+++ b/src/com/android/server/telecom/RoleManagerAdapter.java
@@ -65,15 +65,12 @@
     void setTestDefaultCallScreeningApp(String packageName);
 
     /**
-     * Retrieves a list of package names of the app(s) which fill the
-     * {@link android.app.role.RoleManager} companion device role.
-     * @return List of package names filling the role, or empty list if there are none.
+     * @return List of package names of companion apps, or empty list if there are none.
      */
     List<String> getCallCompanionApps();
 
     /**
-     * Set a package to be added to the list of the {@link android.app.role.RoleManager} companion
-     * apps.  Used for testing purposes only.
+     * Set a package to be added to the list of the companion apps. Used for testing purposes only.
      * @param packageName Package name of the app to be added or removed as an override call
      *                    companion app.
      * @param isAdded {@code true} if the specified package should be added, {@code false} if it
@@ -82,17 +79,13 @@
     void addOrRemoveTestCallCompanionApp(String packageName, boolean isAdded);
 
     /**
-     * Returns the package name of the app which fills the {@link android.app.role.RoleManager}
-     * projection mode role.
-     * @return Package name of the car more app or {@code null} if there are no apps that fill this
-     * role.
+     * @return Package name of the car more app or {@code null} if there are no apps that match.
      */
     String getCarModeDialerApp();
 
     /**
-     * Override the {@link android.app.role.RoleManager} automotive app with another value.
-     * Used for testing purposes only.
-     * @param packageName Package name of the app to fill the automotive app role.  Where
+     * Override the automotive app with another value. Used for testing purposes only.
+     * @param packageName Package name of the automotive app. Where
      *                    {@code null}, the override is removed.
      */
     void setTestAutoModeApp(String packageName);
diff --git a/src/com/android/server/telecom/settings/EnhancedCallBlockingFragment.java b/src/com/android/server/telecom/settings/EnhancedCallBlockingFragment.java
index b475ec6..ecc019f 100644
--- a/src/com/android/server/telecom/settings/EnhancedCallBlockingFragment.java
+++ b/src/com/android/server/telecom/settings/EnhancedCallBlockingFragment.java
@@ -26,6 +26,7 @@
 import android.provider.BlockedNumberContract.SystemContract;
 import android.telephony.CarrierConfigManager;
 import android.telephony.SubscriptionManager;
+import android.telecom.Log;
 import android.view.LayoutInflater;
 import android.view.MenuItem;
 import android.view.View;
@@ -35,12 +36,21 @@
 
 public class EnhancedCallBlockingFragment extends PreferenceFragment
         implements Preference.OnPreferenceChangeListener {
+    private static final String BLOCK_NUMBERS_NOT_IN_CONTACTS_KEY =
+            "block_numbers_not_in_contacts_setting";
+    private static final String BLOCK_RESTRICTED_NUMBERS_KEY =
+            "block_private_number_calls_setting";
+    private static final String BLOCK_UNKNOWN_NUMBERS_KEY =
+            "block_unknown_calls_setting";
+    private boolean mIsCombiningRestrictedAndUnknownOption = false;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         addPreferencesFromResource(R.xml.enhanced_call_blocking_settings);
 
+        maybeConfigureCallBlockingOptions();
+
         setOnPreferenceChangeListener(SystemContract.ENHANCED_SETTING_KEY_BLOCK_UNREGISTERED);
         setOnPreferenceChangeListener(SystemContract.ENHANCED_SETTING_KEY_BLOCK_PRIVATE);
         setOnPreferenceChangeListener(SystemContract.ENHANCED_SETTING_KEY_BLOCK_PAYPHONE);
@@ -67,6 +77,25 @@
         return b.getBoolean(CarrierConfigManager.KEY_SHOW_BLOCKING_PAY_PHONE_OPTION_BOOL);
     }
 
+    private void maybeConfigureCallBlockingOptions() {
+        PreferenceScreen screen = getPreferenceScreen();
+        boolean isShowingNotInContactsOption =
+                getResources().getBoolean(R.bool.show_option_to_block_callers_not_in_contacts);
+        if (!isShowingNotInContactsOption) {
+            Preference pref = findPreference(BLOCK_NUMBERS_NOT_IN_CONTACTS_KEY);
+            screen.removePreference(pref);
+            Log.i(this, "onCreate: removed block not in contacts preference.");
+        }
+
+        mIsCombiningRestrictedAndUnknownOption = getResources().getBoolean(
+                        R.bool.combine_options_to_block_restricted_and_unknown_callers);
+        if (mIsCombiningRestrictedAndUnknownOption) {
+            Preference pref = findPreference(BLOCK_RESTRICTED_NUMBERS_KEY);
+            screen.removePreference(pref);
+            Log.i(this, "onCreate: removed block restricted preference.");
+        }
+    }
+
     /**
      * Set OnPreferenceChangeListener for the preference.
      */
@@ -101,6 +130,13 @@
 
     @Override
     public boolean onPreferenceChange(Preference preference, Object objValue) {
+        if (mIsCombiningRestrictedAndUnknownOption
+                && preference.getKey().equals(BLOCK_UNKNOWN_NUMBERS_KEY)) {
+            Log.i(this, "onPreferenceChange: changing %s and %s to %b",
+                    preference.getKey(), BLOCK_RESTRICTED_NUMBERS_KEY, (boolean) objValue);
+            BlockedNumbersUtil.setEnhancedBlockSetting(getActivity(), BLOCK_RESTRICTED_NUMBERS_KEY,
+                    (boolean) objValue);
+        }
         BlockedNumbersUtil.setEnhancedBlockSetting(getActivity(), preference.getKey(),
                 (boolean) objValue);
         return true;
