diff --git a/service/res/drawable/action_button_background.xml b/service/res/drawable/action_button_background.xml
new file mode 100644
index 0000000..afed15e
--- /dev/null
+++ b/service/res/drawable/action_button_background.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2020 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.
+  -->
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+    android:color="@*android:color/car_card_ripple_background">
+    <item>
+        <shape android:shape="rectangle">
+            <solid android:color="@color/action_button_background_color" />
+            <corners android:radius="@dimen/action_button_corner_radius"/>
+        </shape>
+    </item>
+</ripple>
diff --git a/service/res/drawable/button_background.xml b/service/res/drawable/button_background.xml
deleted file mode 100644
index c714124..0000000
--- a/service/res/drawable/button_background.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2018 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.
--->
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
-    <solid android:color="@color/button_background"/>
-    <corners android:radius="@dimen/button_radius"/>
-</shape>
diff --git a/service/res/drawable/button_ripple_background.xml b/service/res/drawable/button_ripple_background.xml
deleted file mode 100644
index 418c508..0000000
--- a/service/res/drawable/button_ripple_background.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2018 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.
--->
-<ripple
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:color="@color/ripple_background">
-    <item android:drawable="@drawable/button_background" />
-</ripple>
diff --git a/service/res/drawable/car_ic_ux_restricted_48dp.xml b/service/res/drawable/car_ic_ux_restricted_48dp.xml
new file mode 100644
index 0000000..97fd3d5
--- /dev/null
+++ b/service/res/drawable/car_ic_ux_restricted_48dp.xml
@@ -0,0 +1,4 @@
+<vector android:height="48dp" android:viewportHeight="24"
+    android:viewportWidth="24" android:width="48dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FFFFFFFF" android:pathData="M18,8h-1L17,6c0,-2.76 -2.24,-5 -5,-5S7,3.24 7,6v2L6,8c-1.1,0 -2,0.9 -2,2v10c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2L20,10c0,-1.1 -0.9,-2 -2,-2zM9,6c0,-1.66 1.34,-3 3,-3s3,1.34 3,3v2L9,8L9,6zM18,20L6,20L6,10h12v10zM12,17c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2 -2,0.9 -2,2 0.9,2 2,2z"/>
+</vector>
diff --git a/service/res/layout/activity_blocking.xml b/service/res/layout/activity_blocking.xml
index 0c10016..f79406d 100644
--- a/service/res/layout/activity_blocking.xml
+++ b/service/res/layout/activity_blocking.xml
@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
+<?xml version="1.0" encoding="utf-8"?><!-- 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.
@@ -13,69 +12,58 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:orientation="vertical"
     android:background="@color/activity_blocking_activity_background"
-    android:gravity="center">
-    <LinearLayout
-        android:layout_height="wrap_content"
-        android:layout_width="match_parent"
-        android:orientation="horizontal"
-        android:gravity="center">
-        <ImageView
-            android:id="@+id/blocked_app_icon"
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content" />
-        <TextView
-            android:id="@+id/blocked_app_name"
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content"
-            android:layout_marginStart="@dimen/common_margin"
-            android:textColor="@color/blocking_text"
-            android:textAppearance="@style/ActivityBlockingActivityText" />
-    </LinearLayout>
+    android:gravity="center"
+    android:orientation="vertical">
 
-    <TextView
-        android:id="@+id/blocking_text"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        android:layout_marginTop="@dimen/common_margin"
-        android:gravity="center"
-        android:textAppearance="@style/ActivityBlockingActivityText" />
+  <ImageView
+      android:id="@+id/ux_restricted_icon"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:layout_marginBottom="@dimen/common_margin"
+      android:src="@drawable/car_ic_ux_restricted_48dp" />
 
-    <!-- Show exit button if we need to (and are able to) restart the blocked task -->
-    <TextView
-        android:id="@+id/exit_button_message"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        android:layout_marginTop="@dimen/common_margin"
-        android:textAppearance="@style/ActivityBlockingActivityText" />
+  <TextView
+      android:id="@+id/blocking_text"
+      android:layout_width="@dimen/blocking_text_width"
+      android:layout_height="wrap_content"
+      android:gravity="center"
+      android:text="@string/activity_blocked_text"
+      android:textAppearance="@style/ActivityBlockingActivityText" />
+
+  <LinearLayout
+      android:id="@+id/action_button_container"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:layout_marginTop="48dp"
+      android:layout_gravity="center"
+      android:gravity="center_horizontal"
+      android:orientation="horizontal">
     <Button
         android:id="@+id/exit_button"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        android:layout_marginTop="@dimen/common_margin"
-        android:text="@string/exit_button"
-        style="@style/ButtonStyle"/>
+        style="@style/ButtonStyle" />
 
-    <!-- Widgets to display debug info. They should not show for non-user build. -->
     <Button
         android:id="@+id/toggle_debug_info"
-        android:visibility="gone"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        android:layout_marginTop="@dimen/common_margin"
+        style="@style/ButtonStyle"
         android:text="@string/debug_button_text"
-        style="@style/ButtonStyle"/>
-
-    <TextView
-        android:id="@+id/debug_info"
         android:visibility="gone"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        android:layout_marginTop="@dimen/common_margin"
-        android:textAppearance="@style/ActivityBlockingActivityText" />
+        android:layout_marginStart="@dimen/action_button_padding_horizontal"/>
+
+  </LinearLayout>
+
+  <TextView
+      android:id="@+id/debug_info"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:textAppearance="@style/ActivityBlockingActivityText"
+      android:visibility="gone" />
+
 </LinearLayout>
+
diff --git a/service/res/values/colors.xml b/service/res/values/colors.xml
index 6764116..109a4a4 100644
--- a/service/res/values/colors.xml
+++ b/service/res/values/colors.xml
@@ -18,18 +18,17 @@
 -->
 <resources>
     <!-- Semi-transparent background color of blocking activity. -->
-    <!-- In Call background scrim: grey 200 -->
-    <color name="activity_blocking_activity_background">#ffeeeeee</color>
+    <color name="activity_blocking_activity_background">#c7000000</color>
 
     <!-- Color of text in blocking activity. -->
-    <color name="blocking_text">#ff212121</color>
+    <color name="blocking_text">#ffffff</color>
 
     <!-- Background color of button. -->
-    <color name="button_background">#ff00796b</color>
+    <color name="action_button_background_color">@*android:color/car_grey_868</color>
 
     <!-- Color of button text. -->
-    <color name="button_text">#fffafafa</color>
+    <color name="button_text">#ffffffff</color>
 
     <!-- Ripple color of button background. -->
-    <color name="ripple_background">#3d000000</color>
+    <color name="ripple_background">@*android:color/car_card_ripple_background_dark</color>
 </resources>
diff --git a/service/res/values/dimens.xml b/service/res/values/dimens.xml
index 23653db..1cf1308 100644
--- a/service/res/values/dimens.xml
+++ b/service/res/values/dimens.xml
@@ -18,15 +18,17 @@
 -->
 <resources>
     <!-- Text size in ActivityBlockingActivity. -->
-    <dimen name="blocking_text_size">32sp</dimen>
-    <!-- Widget margin. It should be half the height of button. -->
-    <dimen name="common_margin">28dp</dimen>
-    <!-- Minimum height of button in ActivityBlockingActivity. -->
-    <dimen name="button_min_height">56dp</dimen>
-    <!-- Minimum width of button in ActivityBlockingActivity. -->
-    <dimen name="button_min_width">156dp</dimen>
-    <!-- Padding of button in ActivityBlockingActivity. -->
-    <dimen name="button_padding">16dp</dimen>
-    <!-- Radius of button in ActivityBlockingActivity. -->
-    <dimen name="button_radius">4dp</dimen>
+    <dimen name="blocking_text_size">@*android:dimen/car_body1_size</dimen>
+    <dimen name="blocking_text_width">706dp</dimen>
+
+    <dimen name="common_margin">32dp</dimen>
+
+    <!-- Dimensions for the Buttons in ActivityBlockingActivity -->
+    <dimen name="action_button_height">76dp</dimen>
+    <dimen name="action_button_top_margin">48dp</dimen>
+    <dimen name="action_button_corner_radius">38dp</dimen>
+    <dimen name="action_button_max_width">268dp</dimen>
+    <dimen name="action_button_min_width">@*android:dimen/car_button_min_width</dimen>
+    <dimen name="action_button_text_size">@*android:dimen/car_body3_size</dimen>
+    <dimen name="action_button_padding_horizontal">@*android:dimen/car_padding_4</dimen>
 </resources>
diff --git a/service/res/values/strings.xml b/service/res/values/strings.xml
index 1589180..f11e2c5 100644
--- a/service/res/values/strings.xml
+++ b/service/res/values/strings.xml
@@ -115,11 +115,15 @@
         box and restart the car</string>
 
     <!-- Blocking activity: Message to show to user when a feature of current application is not allowed. [CHAR LIMIT=120] -->
-    <string name="activity_blocked_text">For your safety, this activity isn\u2019t available while driving.\nTo continue, wait until you\u2019re parked.</string>
+    <string name="activity_blocked_text">Not available while driving</string>
     <!-- Blocking activity: Message to accompany the exit_button that restarts the blocked app. [CHAR LIMIT=120] -->
     <string name="exit_button_message">To start over with safe app features, select <xliff:g id="exit_button" example="Back">%s</xliff:g>.</string>
     <!-- Blocking activity: Text for button that restarts the current blocked application. [CHAR LIMIT=15] -->
     <string name="exit_button">Back</string>
+    <!-- Blocking activity: Text for button that closes current blocked application. [CHAR LIMIT=20] -->
+    <string name="exit_button_close_application">Close app</string>
+    <!-- Blocking activity: Text for button that closes current blocked application. [CHAR LIMIT=15] -->
+    <string name="exit_button_go_back">Back</string>
     <!-- Blocking activity: Text for button that shows debug info in non-user build. -->
     <string name="debug_button_text" translatable="false">Debug Info</string>
 
diff --git a/service/res/values/styles.xml b/service/res/values/styles.xml
index 35b0b29..e9c8942 100644
--- a/service/res/values/styles.xml
+++ b/service/res/values/styles.xml
@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2018 The Android Open Source Project
+<?xml version="1.0" encoding="utf-8"?><!-- Copyright (C) 2018 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.
@@ -16,23 +15,31 @@
 <resources>
     <!-- TextAppearances for ActivityBlockingActivity. -->
     <style name="ActivityBlockingActivityText">
-        <item name="android:fontFamily">sans-serif-medium</item>
+        <item name="android:fontFamily">roboto-regular</item>
         <item name="android:textColor">@color/blocking_text</item>
         <item name="android:textStyle">normal</item>
         <item name="android:textSize">@dimen/blocking_text_size</item>
     </style>
 
+    <!-- TextAppearances for Button Text in ActivityBlockingActivity. -->
+    <style name="ActionButtonText" parent="android:TextAppearance.DeviceDefault">
+        <item name="android:fontFamily">roboto-regular</item>
+        <item name="android:textColor">@color/blocking_text</item>
+        <item name="android:textSize">@*android:dimen/car_body3_size</item>
+    </style>
+
     <!-- Style for buttons in ActivityBlockingActivity. -->
     <style name="ButtonStyle">
-        <item name="android:background">@drawable/button_ripple_background</item>
-        <item name="android:fontFamily">sans-serif-medium</item>
-        <item name="android:minHeight">@dimen/button_min_height</item>
-        <item name="android:minWidth">@dimen/button_min_width</item>
-        <item name="android:paddingHorizontal">@dimen/button_padding</item>
-        <item name="android:textAllCaps">true</item>
-        <item name="android:textAlignment">center</item>
-        <item name="android:textAppearance">@style/ActivityBlockingActivityText</item>
-        <item name="android:textColor">@color/button_text</item>
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:layout_height">@dimen/action_button_height</item>
+        <item name="android:minWidth">@dimen/action_button_min_width</item>
+        <item name="android:maxWidth">@dimen/action_button_max_width</item>
+        <item name="android:textAppearance">@style/ActionButtonText</item>
+        <item name="android:textColor">@color/blocking_text</item>
+        <item name="android:singleLine">true</item>
+        <item name="android:background">@drawable/action_button_background</item>
+        <item name="android:gravity">center</item>
+        <item name="android:paddingHorizontal">@dimen/action_button_padding_horizontal</item>
     </style>
 </resources>
 
diff --git a/service/src/com/android/car/pm/ActivityBlockingActivity.java b/service/src/com/android/car/pm/ActivityBlockingActivity.java
index 9756523..a9f0d6a 100644
--- a/service/src/com/android/car/pm/ActivityBlockingActivity.java
+++ b/service/src/com/android/car/pm/ActivityBlockingActivity.java
@@ -27,20 +27,15 @@
 import android.car.drivingstate.CarUxRestrictionsManager;
 import android.content.ComponentName;
 import android.content.Intent;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
-import android.graphics.drawable.Drawable;
 import android.os.Build;
 import android.os.Bundle;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.View;
+import android.view.ViewTreeObserver;
 import android.widget.Button;
-import android.widget.ImageView;
 import android.widget.TextView;
 
-import androidx.annotation.Nullable;
-
 import com.android.car.CarLog;
 import com.android.car.R;
 
@@ -54,26 +49,35 @@
     private Car mCar;
     private CarUxRestrictionsManager mUxRManager;
 
-    private TextView mBlockedAppName;
-    private ImageView mBlockedAppIcon;
-    private TextView mBlockingText;
-    private TextView mExitButtonMessage;
     private Button mExitButton;
+    private Button mToggleDebug;
 
     private int mBlockedTaskId;
 
+    private final View.OnClickListener mOnExitButtonClickedListener =
+            v -> {
+                if (isExitOptionCloseApplication()) {
+                    handleCloseApplication();
+                } else {
+                    handleRestartingTask();
+                }
+            };
+
+    private final ViewTreeObserver.OnGlobalLayoutListener mOnGlobalLayoutListener =
+            new ViewTreeObserver.OnGlobalLayoutListener() {
+                @Override
+                public void onGlobalLayout() {
+                    mToggleDebug.getViewTreeObserver().removeOnGlobalLayoutListener(this);
+                    updateButtonWidths();
+                }
+            };
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_blocking);
 
-        mBlockingText = findViewById(R.id.blocking_text);
-        mBlockedAppName = findViewById(R.id.blocked_app_name);
-        mBlockedAppIcon = findViewById(R.id.blocked_app_icon);
         mExitButton = findViewById(R.id.exit_button);
-        mExitButtonMessage = findViewById(R.id.exit_button_message);
-
-        mBlockingText.setText(getString(R.string.activity_blocked_text));
 
         // Listen to the CarUxRestrictions so this blocking activity can be dismissed when the
         // restrictions are lifted.
@@ -110,26 +114,9 @@
             if (Log.isLoggable(CarLog.TAG_AM, Log.DEBUG)) {
                 Log.d(CarLog.TAG_AM, "Blocking activity " + blockedActivity);
             }
-            // Show application icon and name of blocked activity.
-            Drawable appIcon = findApplicationIcon(blockedActivity);
-            if (appIcon != null) {
-                mBlockedAppIcon.setImageDrawable(appIcon);
-            } else {
-                mBlockedAppIcon.setVisibility(View.GONE);
-            }
-            mBlockedAppName.setText(findHumanReadableLabel(blockedActivity));
         }
 
-        boolean isRootDO = getIntent().getBooleanExtra(
-                BLOCKING_INTENT_EXTRA_IS_ROOT_ACTIVITY_DO, false);
-
-        // Display a button to restart task if root task is DO.
-        boolean showButton = mBlockedTaskId != INVALID_TASK_ID && isRootDO;
-        mExitButton.setVisibility(showButton ? View.VISIBLE : View.GONE);
-        mExitButton.setOnClickListener(v -> handleRestartingTask());
-        mExitButtonMessage.setVisibility(showButton ? View.VISIBLE : View.GONE);
-        mExitButtonMessage.setText(
-                getString(R.string.exit_button_message, getString(R.string.exit_button)));
+        displayExitButton();
 
         // Show more debug info for non-user build.
         if (Build.IS_ENG || Build.IS_USERDEBUG) {
@@ -137,6 +124,26 @@
         }
     }
 
+    private void displayExitButton() {
+        String exitButtonText = getExitButtonText();
+
+        mExitButton.setText(exitButtonText);
+        mExitButton.setOnClickListener(mOnExitButtonClickedListener);
+    }
+
+    // If the root activity is DO, the user will have the option to go back to that activity,
+    // otherwise, the user will have the option to close the blocked application
+    private boolean isExitOptionCloseApplication() {
+        boolean isRootDO = getIntent().getBooleanExtra(
+                BLOCKING_INTENT_EXTRA_IS_ROOT_ACTIVITY_DO, false);
+        return mBlockedTaskId == INVALID_TASK_ID || !isRootDO;
+    }
+
+    private String getExitButtonText() {
+        return isExitOptionCloseApplication() ? getString(R.string.exit_button_close_application)
+                : getString(R.string.exit_button_go_back);
+    }
+
     private void displayDebugInfo() {
         String blockedActivity = getIntent().getStringExtra(
                 BLOCKING_INTENT_EXTRA_BLOCKED_ACTIVITY_NAME);
@@ -147,12 +154,29 @@
 
         // We still want to ensure driving safety for non-user build;
         // toggle visibility of debug info with this button.
-        Button toggleDebug = findViewById(R.id.toggle_debug_info);
-        toggleDebug.setVisibility(View.VISIBLE);
-        toggleDebug.setOnClickListener(v -> {
+        mToggleDebug = findViewById(R.id.toggle_debug_info);
+        mToggleDebug.setVisibility(View.VISIBLE);
+        mToggleDebug.setOnClickListener(v -> {
             boolean isDebugVisible = debugInfo.getVisibility() == View.VISIBLE;
             debugInfo.setVisibility(isDebugVisible ? View.GONE : View.VISIBLE);
         });
+
+        mToggleDebug.getViewTreeObserver().addOnGlobalLayoutListener(mOnGlobalLayoutListener);
+    }
+
+    // When the Debug button is visible, we set both of the visible buttons to have the width
+    // of whichever button is wider
+    private void updateButtonWidths() {
+        Button debugButton = findViewById(R.id.toggle_debug_info);
+
+        int exitButtonWidth = mExitButton.getWidth();
+        int debugButtonWidth = debugButton.getWidth();
+
+        if (exitButtonWidth > debugButtonWidth) {
+            debugButton.setWidth(exitButtonWidth);
+        } else {
+            mExitButton.setWidth(debugButtonWidth);
+        }
     }
 
     private String getDebugInfo(String blockedActivity, String rootActivity) {
@@ -195,6 +219,8 @@
     protected void onDestroy() {
         super.onDestroy();
         mUxRManager.unregisterListener();
+        mToggleDebug.getViewTreeObserver().removeOnGlobalLayoutListener(mOnGlobalLayoutListener);
+        mCar.disconnect();
     }
 
     // If no distraction optimization is required in the new restrictions, then dismiss the
@@ -208,48 +234,16 @@
         }
     }
 
-    // Finds the icon of the application (package) the component belongs to.
-    @Nullable
-    private Drawable findApplicationIcon(String flattenComponentName) {
-        ComponentName componentName = ComponentName.unflattenFromString(flattenComponentName);
-        try {
-            return getPackageManager().getApplicationIcon(componentName.getPackageName());
-        } catch (PackageManager.NameNotFoundException e) {
-            if (Log.isLoggable(CarLog.TAG_AM, Log.INFO)) {
-                Log.i(CarLog.TAG_AM, "Could not find package for component name "
-                        + componentName.toString());
-            }
+    private void handleCloseApplication() {
+        if (isFinishing()) {
+            return;
         }
-        return null;
-    }
 
-    /**
-     * Returns a human-readable string for {@code flattenComponentName}.
-     *
-     * <p>It first attempts to return the application label for this activity. If that fails,
-     * it will return the last part in the activity name.
-     */
-    private String findHumanReadableLabel(String flattenComponentName) {
-        ComponentName componentName = ComponentName.unflattenFromString(flattenComponentName);
-        String label = null;
-        // Attempt to find application label.
-        try {
-            ApplicationInfo applicationInfo = getPackageManager().getApplicationInfo(
-                    componentName.getPackageName(), 0);
-            CharSequence appLabel = getPackageManager().getApplicationLabel(applicationInfo);
-            if (appLabel != null) {
-                label = appLabel.toString();
-            }
-        } catch (PackageManager.NameNotFoundException e) {
-            if (Log.isLoggable(CarLog.TAG_AM, Log.INFO)) {
-                Log.i(CarLog.TAG_AM, "Could not find package for component name "
-                        + componentName.toString());
-            }
-        }
-        if (TextUtils.isEmpty(label)) {
-            label = componentName.getClass().getSimpleName();
-        }
-        return label;
+        Intent startMain = new Intent(Intent.ACTION_MAIN);
+        startMain.addCategory(Intent.CATEGORY_HOME);
+        startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        startActivity(startMain);
+        finish();
     }
 
     private void handleRestartingTask() {
