Show first time warning in Deletion Helper.

Due to the potentially destructive nature of deleting, we have
a special warning message to show to users before they confirm
deletion through the deletion helper. This is shown the first
time the user deletes using the tool.

Bug: 30455784
Test: manually installed app on devices and verified text
Change-Id: I1f8156cf0b76b292737b9178f2cd1d26a508cec6
diff --git a/src/com/android/storagemanager/deletionhelper/ConfirmDeletionDialog.java b/src/com/android/storagemanager/deletionhelper/ConfirmDeletionDialog.java
index 93e89ec..640d68b 100644
--- a/src/com/android/storagemanager/deletionhelper/ConfirmDeletionDialog.java
+++ b/src/com/android/storagemanager/deletionhelper/ConfirmDeletionDialog.java
@@ -22,11 +22,14 @@
 import android.app.DialogFragment;
 import android.content.Context;
 import android.content.DialogInterface;
+import android.content.SharedPreferences;
 import android.os.Bundle;
+import android.os.SystemProperties;
 import android.text.format.Formatter;
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.storagemanager.R;
+import com.android.storagemanager.utils.Constants;
 
 /**
  * Fragment used to confirm that the user wishes to delete a certain amount of data.
@@ -35,6 +38,9 @@
         DialogInterface.OnClickListener {
     public static final String TAG = "ConfirmDeletionDialog";
     private static final String ARG_TOTAL_SPACE = "total_freeable";
+    // If the confirm deletion dialog has been shown before. Used to choose which warning message
+    // we show to the user.
+    private static final String SHOWN_BEFORE = "shown_before";
 
     private long mFreeableBytes;
 
@@ -55,7 +61,7 @@
 
         final Context context = getContext();
         return new AlertDialog.Builder(context)
-                .setMessage(context.getString(R.string.deletion_helper_clear_dialog_message,
+                .setMessage(context.getString(getClearWarningText(),
                         Formatter.formatFileSize(context, mFreeableBytes)))
                 .setPositiveButton(R.string.deletion_helper_clear_dialog_remove, this)
                 .setNegativeButton(android.R.string.cancel, this)
@@ -64,6 +70,11 @@
 
     @Override
     public void onClick(DialogInterface dialog, int which) {
+        // Set the first time flag to avoid showing the first time warning twice.
+        SharedPreferences.Editor editor = getSharedPreferences().edit();
+        editor.putBoolean(SHOWN_BEFORE, true);
+        editor.apply();
+
         switch (which) {
             case DialogInterface.BUTTON_POSITIVE:
                 ((DeletionHelperSettings) getTargetFragment()).clearData();
@@ -88,4 +99,23 @@
                 break;
         }
     }
+
+    private int getClearWarningText() {
+        // If the storage manager is on by default, we can use the normal message.
+        boolean warningUnneeded = SystemProperties.getBoolean(
+                Constants.STORAGE_MANAGER_VISIBLE_PROPERTY, false);
+        if (warningUnneeded) {
+            return R.string.deletion_helper_clear_dialog_message;
+        }
+
+        SharedPreferences sp = getSharedPreferences();
+        boolean shownBefore = sp.getBoolean(SHOWN_BEFORE, false);
+        return shownBefore ? R.string.deletion_helper_clear_dialog_message :
+                R.string.deletion_helper_clear_dialog_message_first_time;
+    }
+
+    private SharedPreferences getSharedPreferences() {
+        return getContext().getSharedPreferences(Constants.SHARED_PREFERENCE_NAME,
+                Context.MODE_PRIVATE);
+    }
 }
diff --git a/src/com/android/storagemanager/utils/Constants.java b/src/com/android/storagemanager/utils/Constants.java
new file mode 100644
index 0000000..9201316
--- /dev/null
+++ b/src/com/android/storagemanager/utils/Constants.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2016 Google Inc.
+ * Licensed to 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.
+ */
+
+package com.android.storagemanager.utils;
+
+/**
+ * Contains constants used across multiple classes in StorageManager.
+ */
+public class Constants {
+    /**
+     * A string to use for getting shared preferences. Beware key collisions when using this.
+     */
+    public static final String SHARED_PREFERENCE_NAME = "StorageManager";
+
+    /**
+     * Read-only property for if we need to show the storage manager in Settings. This value
+     * cannot be changed due to it being used in Setup Wizard.
+     */
+    public static final String STORAGE_MANAGER_VISIBLE_PROPERTY = "ro.storage_manager.enabled";
+}