diff --git a/robotests/src/com/android/storagemanager/deletionhelper/AppsAsyncLoaderTest.java b/robotests/src/com/android/storagemanager/deletionhelper/AppsAsyncLoaderTest.java
index aa13932..8aa9cd0 100644
--- a/robotests/src/com/android/storagemanager/deletionhelper/AppsAsyncLoaderTest.java
+++ b/robotests/src/com/android/storagemanager/deletionhelper/AppsAsyncLoaderTest.java
@@ -18,6 +18,7 @@
 
 import android.app.usage.UsageStats;
 import android.app.usage.UsageStatsManager;
+import android.content.ComponentName;
 import android.content.Context;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager.NameNotFoundException;
@@ -61,6 +62,7 @@
     private static final String PACKAGE_NAME = "package.mcpackageface";
     public static final String PACKAGE_CLEARABLE = "package.clearable";
     public static final String PACKAGE_TOO_NEW_TO_DELETE = "package.tooNewToDelete";
+    public static final String PACKAGE_DEFAULT_LAUNCHER = "package.launcherface";
 
     @Mock private UsageStatsManager mUsageStatsManager;
     @Mock private StorageStatsSource mStorageStatsSource;
@@ -89,6 +91,8 @@
         // Set up the loader to return our fake list of apps.
         mInfo = new ArrayList<>();
         when(mPackageManager.getInstalledApplicationsAsUser(anyInt(), anyInt())).thenReturn(mInfo);
+        when(mPackageManager.getHomeActivities(any(List.class)))
+                .thenReturn(new ComponentName(PACKAGE_DEFAULT_LAUNCHER, ""));
 
         AppsAsyncLoader.FILTER_USAGE_STATS.init();
 
@@ -334,6 +338,22 @@
                 .isEqualTo(secondary);
     }
 
+    @Test
+    public void test_defaultLauncherDisallowedFromDeletion() {
+        mLoader.mFilter = AppsAsyncLoader.FILTER_USAGE_STATS;
+        mLoader.mFilter.init();
+        AppsAsyncLoader.PackageInfo defaultLauncher =
+                createPackage(
+                        PACKAGE_DEFAULT_LAUNCHER,
+                        TimeUnit.DAYS.toMillis(800),
+                        TimeUnit.DAYS.toMillis(800));
+        registerLastUse(PACKAGE_DEFAULT_LAUNCHER, TimeUnit.DAYS.toMillis(800));
+        registerApp(defaultLauncher, 0, TimeUnit.DAYS.toMillis(800));
+        List<AppsAsyncLoader.PackageInfo> infos = mLoader.loadInBackground();
+
+        assertThat(containsPackage(infos, PACKAGE_DEFAULT_LAUNCHER)).isFalse();
+    }
+
     private AppsAsyncLoader.PackageInfo createPackage(
             String packageName, long lastUse, long installTime) {
         AppsAsyncLoader.PackageInfo app =
diff --git a/src/com/android/storagemanager/deletionhelper/AppsAsyncLoader.java b/src/com/android/storagemanager/deletionhelper/AppsAsyncLoader.java
index e70b413..578a869 100644
--- a/src/com/android/storagemanager/deletionhelper/AppsAsyncLoader.java
+++ b/src/com/android/storagemanager/deletionhelper/AppsAsyncLoader.java
@@ -18,9 +18,11 @@
 
 import android.app.usage.UsageStats;
 import android.app.usage.UsageStatsManager;
+import android.content.ComponentName;
 import android.content.Context;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
 import android.graphics.drawable.Drawable;
 import android.os.SystemProperties;
 import android.os.UserHandle;
@@ -144,7 +146,7 @@
                             .setLabel(mPackageManager.loadLabel(app))
                             .build();
             seenUid.add(app.uid);
-            if (mFilter.filterApp(extraInfo)) {
+            if (mFilter.filterApp(extraInfo) && !isDefaultLauncher(mPackageManager, extraInfo)) {
                 stats.add(extraInfo);
             }
         }
@@ -203,6 +205,24 @@
     @Override
     protected void onDiscardResult(List<PackageInfo> result) {}
 
+    private static boolean isDefaultLauncher(
+            PackageManagerWrapper packageManager, PackageInfo info) {
+        if (packageManager == null) {
+            return false;
+        }
+
+        final List<ResolveInfo> homeActivities = new ArrayList<>();
+        ComponentName defaultActivity = packageManager.getHomeActivities(homeActivities);
+        if (defaultActivity != null) {
+            String packageName = defaultActivity.getPackageName();
+            return packageName == null
+                    ? false
+                    : defaultActivity.getPackageName().equals(info.packageName);
+        }
+
+        return false;
+    }
+
     public static class Builder {
         private Context mContext;
         private int mUid;
diff --git a/src/com/android/storagemanager/deletionhelper/DeletionHelperSettings.java b/src/com/android/storagemanager/deletionhelper/DeletionHelperSettings.java
index 7185caa..fca2380 100644
--- a/src/com/android/storagemanager/deletionhelper/DeletionHelperSettings.java
+++ b/src/com/android/storagemanager/deletionhelper/DeletionHelperSettings.java
@@ -236,7 +236,7 @@
 
     @Override
     public void onFreeableChanged(int numItems, long bytesFreeable) {
-        if (bytesFreeable > 0 || allTypesEmpty()) {
+        if (numItems > 0 || bytesFreeable > 0 || allTypesEmpty()) {
             mLoadingController.onCategoryLoad();
         }
 
