Remove Settings from recents after app uninstall

SettingsActivity now calls finishAndRemoveTask
instead of only finish() to prevent blank
recent task from showing in overview.

Test: Visually inspected bug doesn't exist. Wrote
Roboelectric tests

Fixes: 129733119

Change-Id: I5b73c1b611e6eb52bb6665c215276efdc85c19b2
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 3b01b32..b822a83 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -16,6 +16,8 @@
 
 package com.android.settings;
 
+import static com.android.settings.applications.appinfo.AppButtonsPreferenceController.KEY_REMOVE_TASK_WHEN_FINISHING;
+
 import android.app.ActionBar;
 import android.app.ActivityManager;
 import android.content.BroadcastReceiver;
@@ -542,7 +544,12 @@
      */
     public void finishPreferencePanel(int resultCode, Intent resultData) {
         setResult(resultCode, resultData);
-        finish();
+        if (resultData != null &&
+                resultData.getBooleanExtra(KEY_REMOVE_TASK_WHEN_FINISHING, false)) {
+            finishAndRemoveTask();
+        } else {
+            finish();
+        }
     }
 
     /**
diff --git a/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java b/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java
index e15b0e3..1676829 100644
--- a/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java
+++ b/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java
@@ -80,6 +80,7 @@
         PreferenceControllerMixin, LifecycleObserver, OnResume, OnDestroy,
         ApplicationsState.Callbacks {
     public static final String APP_CHG = "chg";
+    public static final String KEY_REMOVE_TASK_WHEN_FINISHING = "remove_task_when_finishing";
 
     private static final String TAG = "AppButtonsPrefCtl";
     private static final String KEY_ACTION_BUTTONS = "action_buttons";
@@ -196,7 +197,7 @@
                     mActivity, UserManager.DISALLOW_APPS_CONTROL, mUserId);
 
             if (!refreshUi()) {
-                setIntentAndFinish(true);
+                setIntentAndFinish(true, false);
             }
         }
     }
@@ -278,9 +279,9 @@
                 AsyncTask.execute(new DisableChangerRunnable(mPm, mAppEntry.info.packageName,
                         PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER));
             }
-            refreshAndFinishIfPossible();
+            refreshAndFinishIfPossible(true);
         } else if (requestCode == mRequestRemoveDeviceAdmin) {
-            refreshAndFinishIfPossible();
+            refreshAndFinishIfPossible(false);
         }
     }
 
@@ -466,19 +467,20 @@
     /**
      * Finish this fragment and return data if possible
      */
-    private void setIntentAndFinish(boolean appChanged) {
+    private void setIntentAndFinish(boolean appChanged, boolean removeTaskWhenFinishing) {
         if (LOCAL_LOGV) {
             Log.i(TAG, "appChanged=" + appChanged);
         }
         Intent intent = new Intent();
         intent.putExtra(APP_CHG, appChanged);
+        intent.putExtra(KEY_REMOVE_TASK_WHEN_FINISHING, removeTaskWhenFinishing);
         mActivity.finishPreferencePanel(Activity.RESULT_OK, intent);
         mFinishing = true;
     }
 
-    private void refreshAndFinishIfPossible() {
+    private void refreshAndFinishIfPossible(boolean removeTaskWhenFinishing) {
         if (!refreshUi()) {
-            setIntentAndFinish(true);
+            setIntentAndFinish(true, removeTaskWhenFinishing);
         } else {
             startListeningToPackageRemove();
         }