diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index e6324abe2123616413cb0718bff0325b91dcf455..7198ef46d7c44d10c5948123e23a7a34d1d17649 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -5499,6 +5499,14 @@ public final class Settings {
          */
         public static final String KEY_HOME_DOUBLE_TAP_ACTION = "key_home_double_tap_action";
 
+        /**
+         * Action to perform when the back key is long-pressed.
+         * (Default can be configured via config_longPressOnBackBehavior)
+         * (See KEY_HOME_LONG_PRESS_ACTION for valid values)
+         * @hide
+         */
+        public static final String KEY_BACK_LONG_PRESS_ACTION = "key_back_long_press_action";
+
         /**
          * Action to perform when the menu key is pressed. (Default is 1)
          * @hide
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 912f2922e5fc09c54756d9f683717d575ad3d8b8..534a297238e2d00b62e635bb9047b22f2e050ba9 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -1012,13 +1012,6 @@
     -->
     <integer name="config_keyChordPowerVolumeUp">2</integer>
 
-    <!-- Control the behavior when the user long presses the back button.  Non-zero values are only
-         valid for watches as part of CDD/CTS.
-            0 - Nothing
-            1 - Go to voice assist
-    -->
-    <integer name="config_longPressOnBackBehavior">0</integer>
-
     <!-- Allows activities to be launched on a long press on power during device setup. -->
     <bool name="config_allowStartActivityForLongPressOnPowerInSetup">false</bool>
 
diff --git a/core/res/res/values/lmodroid_config.xml b/core/res/res/values/lmodroid_config.xml
index 352f84187ee6115487a4fa5239d809559f40df56..47945ba897410069d772fcc419d08ba156a01fea 100644
--- a/core/res/res/values/lmodroid_config.xml
+++ b/core/res/res/values/lmodroid_config.xml
@@ -111,6 +111,12 @@
          config to 7. -->
     <integer name="config_deviceHardwareWakeKeys">64</integer>
 
+    <!-- Control the behavior when the user long presses the back button.
+         This needs to match the enums in
+         frameworks/base/core/java/com/android/internal/util/libremobileos/hwkeys/DeviceKeysConstants.java.
+    -->
+    <integer name="config_longPressOnBackBehavior">0</integer>
+
     <!-- Control the behavior when the user long presses the home button.
          This needs to match the enums in
          frameworks/base/core/java/com/android/internal/util/libremobileos/hwkeys/DeviceKeysConstants.java.
diff --git a/core/res/res/values/lmodroid_symbols.xml b/core/res/res/values/lmodroid_symbols.xml
index f3c3537140268f93e1d04bfedce23bab30d94e75..2eb24348268902f61cc427048e46f9f105059680 100644
--- a/core/res/res/values/lmodroid_symbols.xml
+++ b/core/res/res/values/lmodroid_symbols.xml
@@ -50,6 +50,7 @@
     <java-symbol type="integer" name="config_deviceHardwareWakeKeys" />
 
     <!-- Device keys user-customisable behavior -->
+    <java-symbol type="integer" name="config_longPressOnBackBehavior" />
     <java-symbol type="integer" name="config_longPressOnHomeBehavior" />
     <java-symbol type="integer" name="config_doubleTapOnHomeBehavior" />
     <java-symbol type="integer" name="config_longPressOnMenuBehavior" />
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 113f8b2f6e04d3109e9bc4b52bc35eacee6b2c38..63cb5259a4d8b8cf6984e25d61e0f328c24ecb1d 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -556,6 +556,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
     boolean mPendingCapsLockToggle;
 
     // Tracks user-customisable behavior for certain key events
+    private Action mBackLongPressAction;
     private Action mHomeLongPressAction;
     private Action mHomeDoubleTapAction;
     private Action mMenuPressAction;
@@ -829,6 +830,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
             resolver.registerContentObserver(Settings.System.getUriFor(
                     Settings.System.TORCH_LONG_PRESS_POWER_TIMEOUT), false, this,
                     UserHandle.USER_ALL);
+            resolver.registerContentObserver(Settings.System.getUriFor(
+                    Settings.System.KEY_BACK_LONG_PRESS_ACTION), false, this,
+                    UserHandle.USER_ALL);
             resolver.registerContentObserver(Settings.System.getUriFor(
                     Settings.System.KEY_HOME_LONG_PRESS_ACTION), false, this,
                     UserHandle.USER_ALL);
@@ -1306,13 +1310,14 @@ public class PhoneWindowManager implements WindowManagerPolicy {
     private void backLongPress() {
         mBackKeyHandled = true;
 
-        switch (mLongPressOnBackBehavior) {
-            case LONG_PRESS_BACK_NOTHING:
-                break;
-            case LONG_PRESS_BACK_GO_TO_VOICE_ASSIST:
-                launchVoiceAssist(false /* allowDuringSetup */);
-                break;
-        }
+        long now = SystemClock.uptimeMillis();
+        KeyEvent event = new KeyEvent(now, now, KeyEvent.ACTION_DOWN,
+                KEYCODE_BACK, 0, 0, KeyCharacterMap.VIRTUAL_KEYBOARD, 0,
+                KeyEvent.FLAG_FROM_SYSTEM, InputDevice.SOURCE_KEYBOARD);
+
+        performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, false,
+                "Back - Long Press");
+        performKeyAction(mBackLongPressAction, event);
     }
 
     private void accessibilityShortcutActivated() {
@@ -1380,7 +1385,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
     }
 
     private boolean hasLongPressOnBackBehavior() {
-        return mLongPressOnBackBehavior != LONG_PRESS_BACK_NOTHING;
+        return mBackLongPressAction != Action.NOTHING;
     }
 
     private void interceptScreenshotChord() {
@@ -2320,10 +2325,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
             powerKeyGestures |= KEY_LONGPRESS;
         }
         mSingleKeyGestureDetector.addRule(new PowerKeyRule(powerKeyGestures));
-
-        if (hasLongPressOnBackBehavior()) {
-            mSingleKeyGestureDetector.addRule(new BackKeyRule(KEY_LONGPRESS));
-        }
+        mSingleKeyGestureDetector.addRule(new BackKeyRule(KEY_LONGPRESS));
     }
 
     private void updateKeyAssignments() {
@@ -2354,6 +2356,16 @@ public class PhoneWindowManager implements WindowManagerPolicy {
 
         mEdgeLongSwipeAction = Action.NOTHING;
 
+        mBackLongPressAction = Action.fromIntSafe(res.getInteger(
+                com.android.internal.R.integer.config_longPressOnBackBehavior));
+        if (mBackLongPressAction.ordinal() > Action.SLEEP.ordinal()) {
+            mBackLongPressAction = Action.NOTHING;
+        }
+
+        mBackLongPressAction = Action.fromSettings(resolver,
+                Settings.System.KEY_BACK_LONG_PRESS_ACTION,
+                mBackLongPressAction);
+
         mHomeLongPressAction = Action.fromIntSafe(res.getInteger(
                 com.android.internal.R.integer.config_longPressOnHomeBehavior));
         if (mHomeLongPressAction.ordinal() > Action.SLEEP.ordinal()) {