diff --git a/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java b/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java
index a9ac286..c118a43 100644
--- a/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java
+++ b/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java
@@ -22,6 +22,7 @@
 import android.app.settings.SettingsEnums;
 import android.bluetooth.BluetoothDevice;
 import android.content.Context;
+import android.content.res.TypedArray;
 import android.net.Uri;
 import android.os.Bundle;
 import android.provider.DeviceConfig;
@@ -49,7 +50,6 @@
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
 import java.util.ArrayList;
-import java.util.IllegalFormatException;
 import java.util.List;
 
 public class BluetoothDeviceDetailsFragment extends RestrictedDashboardFragment {
@@ -136,7 +136,6 @@
         use(BlockingSlicePrefController.class).setSliceUri(sliceEnabled
                 ? featureProvider.getBluetoothDeviceSettingsUri(mCachedDevice.getDevice())
                 : null);
-        updateExtraControlUri(/* viewWidth */ 0);
     }
 
     private void updateExtraControlUri(int viewWidth) {
@@ -148,13 +147,14 @@
         String uri = featureProvider.getBluetoothDeviceControlUri(mCachedDevice.getDevice());
         if (!TextUtils.isEmpty(uri)) {
             try {
-                controlUri = Uri.parse(String.format(uri, viewWidth));
-            } catch (IllegalFormatException | NullPointerException exception) {
+                controlUri = Uri.parse(uri + viewWidth);
+            } catch (NullPointerException exception) {
                 Log.d(TAG, "unable to parse uri");
                 controlUri = null;
             }
         }
         use(SlicePreferenceController.class).setSliceUri(sliceEnabled ? controlUri : null);
+        use(SlicePreferenceController.class).onStart();
     }
 
     private final ViewTreeObserver.OnGlobalLayoutListener mOnGlobalLayoutListener =
@@ -165,7 +165,10 @@
                     if (view == null) {
                         return;
                     }
-                    updateExtraControlUri(view.getWidth());
+                    if (view.getWidth() <= 0) {
+                        return;
+                    }
+                    updateExtraControlUri(view.getWidth() - getPaddingSize());
                     view.getViewTreeObserver().removeOnGlobalLayoutListener(
                             mOnGlobalLayoutListener);
                 }
@@ -251,4 +254,17 @@
         }
         return controllers;
     }
+
+    private int getPaddingSize() {
+        TypedArray resolvedAttributes =
+                getContext().obtainStyledAttributes(
+                        new int[]{
+                                android.R.attr.listPreferredItemPaddingStart,
+                                android.R.attr.listPreferredItemPaddingEnd
+                        });
+        int width = resolvedAttributes.getDimensionPixelSize(0, 0)
+                + resolvedAttributes.getDimensionPixelSize(1, 0);
+        resolvedAttributes.recycle();
+        return width;
+    }
 }
diff --git a/src/com/android/settings/panel/VolumePanel.java b/src/com/android/settings/panel/VolumePanel.java
index 98939cf..08884d5 100644
--- a/src/com/android/settings/panel/VolumePanel.java
+++ b/src/com/android/settings/panel/VolumePanel.java
@@ -26,6 +26,7 @@
 import static com.android.settings.slices.CustomSliceRegistry.VOLUME_MEDIA_URI;
 import static com.android.settings.slices.CustomSliceRegistry.VOLUME_RINGER_URI;
 
+import android.app.Activity;
 import android.app.settings.SettingsEnums;
 import android.bluetooth.BluetoothDevice;
 import android.content.BroadcastReceiver;
@@ -49,7 +50,6 @@
 import com.android.settingslib.media.MediaOutputConstants;
 
 import java.util.ArrayList;
-import java.util.IllegalFormatException;
 import java.util.List;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.FutureTask;
@@ -64,6 +64,7 @@
 
     private PanelContentCallback mCallback;
     private LocalBluetoothProfileManager mProfileManager;
+    private int mControlSliceWidth;
 
     private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
         @Override
@@ -80,6 +81,14 @@
 
     private VolumePanel(Context context) {
         mContext = context.getApplicationContext();
+        if (context instanceof Activity) {
+            int panelWidth =
+                    ((Activity) context).getWindowManager().getCurrentWindowMetrics().getBounds()
+                            .width();
+            // The control slice width = panel width - two left and right horizontal paddings
+            mControlSliceWidth = panelWidth - context.getResources().getDimensionPixelSize(
+                    R.dimen.panel_slice_Horizontal_padding) * 2;
+        }
 
         final FutureTask<LocalBluetoothManager> localBtManagerFutureTask = new FutureTask<>(
                 // Avoid StrictMode ThreadPolicy violation
@@ -102,8 +111,7 @@
     public void onResume() {
         final IntentFilter filter = new IntentFilter();
         filter.addAction(MediaOutputConstants.ACTION_CLOSE_PANEL);
-        mContext.registerReceiver(mReceiver, filter,
-                Context.RECEIVER_EXPORTED_UNAUDITED);
+        mContext.registerReceiver(mReceiver, filter, Context.RECEIVER_EXPORTED_UNAUDITED);
     }
 
     /** Invoked when the panel is paused. */
@@ -159,13 +167,11 @@
         Uri controlUri = null;
         final BluetoothDevice bluetoothDevice = findActiveDevice();
         if (bluetoothDevice != null) {
-            final int width = mContext.getResources().getDimensionPixelSize(
-                    R.dimen.settings_panel_width);
             final String uri = BluetoothUtils.getControlUriMetaData(bluetoothDevice);
             if (!TextUtils.isEmpty(uri)) {
                 try {
-                    controlUri = Uri.parse(String.format(uri, width));
-                } catch (IllegalFormatException | NullPointerException exception) {
+                    controlUri = Uri.parse(uri + mControlSliceWidth);
+                } catch (NullPointerException exception) {
                     Log.d(TAG, "unable to parse uri");
                     controlUri = null;
                 }
