Merge "Add an alert dialog before clearing data in deletion helper." into nyc-mr1-dev
am: e86eae854c
* commit 'e86eae854cb8c31d67497578dc5ba78ae50e8d8e':
Add an alert dialog before clearing data in deletion helper.
Change-Id: Ide9c26bcfa719b812eecec43ef63ca6f7a8f0a54
This commit is contained in:
@@ -7598,4 +7598,10 @@
|
|||||||
<!-- Summary for when when there is nothing in the downloads folder to clear. [CHAR LIMIT=NONE]-->
|
<!-- Summary for when when there is nothing in the downloads folder to clear. [CHAR LIMIT=NONE]-->
|
||||||
<string name="deletion_helper_downloads_summary_empty"><xliff:g id="used" example="1.2GB">%1$s</xliff:g></string>
|
<string name="deletion_helper_downloads_summary_empty"><xliff:g id="used" example="1.2GB">%1$s</xliff:g></string>
|
||||||
|
|
||||||
|
<!-- Message to warn the user before clearing space in the deletion helper. [CHAR LIMIT=NONE] -->
|
||||||
|
<string name="deletion_helper_clear_dialog_message">Remove <xliff:g id="clearable_bytes" example="1.2GB">%1$s</xliff:g> from your device.</string>
|
||||||
|
|
||||||
|
<!-- Button label for the dialog prompt for clearing data in deletion helper. [CHAR LIMIT=40] -->
|
||||||
|
<string name="deletion_helper_clear_dialog_remove">Remove</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -0,0 +1,64 @@
|
|||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
* 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.settings.deletionhelper;
|
||||||
|
|
||||||
|
import android.app.AlertDialog;
|
||||||
|
import android.app.Dialog;
|
||||||
|
import android.app.DialogFragment;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.DialogInterface;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.text.format.Formatter;
|
||||||
|
import com.android.settings.R;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fragment used to confirm that the user wishes to delete a certain amount of data.
|
||||||
|
*/
|
||||||
|
public class ConfirmDeletionDialog extends DialogFragment implements
|
||||||
|
DialogInterface.OnClickListener {
|
||||||
|
public static final String TAG = "ConfirmDeletionDialog";
|
||||||
|
private static final String ARG_TOTAL_SPACE = "total_freeable";
|
||||||
|
|
||||||
|
public static ConfirmDeletionDialog newInstance(long freeableBytes) {
|
||||||
|
Bundle args = new Bundle(1);
|
||||||
|
args.putLong(ARG_TOTAL_SPACE, freeableBytes);
|
||||||
|
|
||||||
|
ConfirmDeletionDialog dialog = new ConfirmDeletionDialog();
|
||||||
|
dialog.setArguments(args);
|
||||||
|
|
||||||
|
return dialog;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||||
|
final Bundle args = getArguments();
|
||||||
|
long totalFreeableSpace = args.getLong(ARG_TOTAL_SPACE);
|
||||||
|
|
||||||
|
final Context context = getContext();
|
||||||
|
return new AlertDialog.Builder(context)
|
||||||
|
.setMessage(context.getString(R.string.deletion_helper_clear_dialog_message,
|
||||||
|
Formatter.formatFileSize(context, totalFreeableSpace)))
|
||||||
|
.setPositiveButton(R.string.deletion_helper_clear_dialog_remove, this)
|
||||||
|
.setNegativeButton(android.R.string.cancel, null)
|
||||||
|
.create();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
((DeletionHelperFragment) getTargetFragment()).clearData();
|
||||||
|
}
|
||||||
|
}
|
@@ -46,7 +46,8 @@ import java.util.HashSet;
|
|||||||
*/
|
*/
|
||||||
public class DeletionHelperFragment extends SettingsPreferenceFragment implements
|
public class DeletionHelperFragment extends SettingsPreferenceFragment implements
|
||||||
ApplicationsState.Callbacks, AppStateBaseBridge.Callback,
|
ApplicationsState.Callbacks, AppStateBaseBridge.Callback,
|
||||||
Preference.OnPreferenceChangeListener, DeletionType.FreeableChangedListener {
|
Preference.OnPreferenceChangeListener, DeletionType.FreeableChangedListener,
|
||||||
|
View.OnClickListener {
|
||||||
private static final String TAG = "DeletionHelperFragment";
|
private static final String TAG = "DeletionHelperFragment";
|
||||||
|
|
||||||
private static final String EXTRA_HAS_BRIDGE = "hasBridge";
|
private static final String EXTRA_HAS_BRIDGE = "hasBridge";
|
||||||
@@ -108,53 +109,11 @@ public class DeletionHelperFragment extends SettingsPreferenceFragment implement
|
|||||||
private void initializeButtons(View v) {
|
private void initializeButtons(View v) {
|
||||||
mCancel = (Button) v.findViewById(R.id.back_button);
|
mCancel = (Button) v.findViewById(R.id.back_button);
|
||||||
mCancel.setText(R.string.cancel);
|
mCancel.setText(R.string.cancel);
|
||||||
mCancel.setOnClickListener(new View.OnClickListener() {
|
mCancel.setOnClickListener(this);
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
finishFragment();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
mFree = (Button) v.findViewById(R.id.next_button);
|
mFree = (Button) v.findViewById(R.id.next_button);
|
||||||
mFree.setText(R.string.storage_menu_free);
|
mFree.setText(R.string.storage_menu_free);
|
||||||
mFree.setOnClickListener(new View.OnClickListener() {
|
mFree.setOnClickListener(this);
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
// This should be fine as long as there is only one extra deletion feature.
|
|
||||||
// In the future, this should be done in an async queue in order to not interfere
|
|
||||||
// with the simultaneous PackageDeletionTask.
|
|
||||||
if (mPhotoPreference != null && mPhotoPreference.isChecked()) {
|
|
||||||
mPhotoVideoDeletion.clearFreeableData();
|
|
||||||
}
|
|
||||||
if (mDownloadsPreference != null && mDownloadsPreference.isChecked()) {
|
|
||||||
mDownloadsDeletion.clearFreeableData();
|
|
||||||
}
|
|
||||||
|
|
||||||
ArraySet<String> apps = new ArraySet<>();
|
|
||||||
for (AppEntry entry : mAppEntries) {
|
|
||||||
if (mCheckedApplications.contains(entry.label)) {
|
|
||||||
synchronized (entry) {
|
|
||||||
apps.add(entry.info.packageName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// TODO: If needed, add an action on the callback.
|
|
||||||
PackageDeletionTask task = new PackageDeletionTask(
|
|
||||||
getActivity().getPackageManager(), apps,
|
|
||||||
new PackageDeletionTask.Callback() {
|
|
||||||
@Override
|
|
||||||
public void onSuccess() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onError() {
|
|
||||||
Log.e(TAG, "An error occurred while uninstalling packages.");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
finishFragment();
|
|
||||||
task.run();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeDeletionPreferences() {
|
private void initializeDeletionPreferences() {
|
||||||
@@ -329,6 +288,54 @@ public class DeletionHelperFragment extends SettingsPreferenceFragment implement
|
|||||||
updateFreeButtonText();
|
updateFreeButtonText();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
if (v.getId() == mFree.getId()) {
|
||||||
|
ConfirmDeletionDialog dialog =
|
||||||
|
ConfirmDeletionDialog.newInstance(getTotalFreeableSpace());
|
||||||
|
// The 0 is a placeholder for an optional result code.
|
||||||
|
dialog.setTargetFragment(this, 0);
|
||||||
|
dialog.show(getFragmentManager(), ConfirmDeletionDialog.TAG);
|
||||||
|
} else {
|
||||||
|
finishFragment();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears out the selected apps and data from the device and closes the fragment.
|
||||||
|
*/
|
||||||
|
protected void clearData() {
|
||||||
|
// This should be fine as long as there is only one extra deletion feature.
|
||||||
|
// In the future, this should be done in an async queue in order to not
|
||||||
|
// interfere with the simultaneous PackageDeletionTask.
|
||||||
|
if (mPhotoPreference != null && mPhotoPreference.isChecked()) {
|
||||||
|
mPhotoVideoDeletion.clearFreeableData();
|
||||||
|
}
|
||||||
|
|
||||||
|
ArraySet<String> apps = new ArraySet<>();
|
||||||
|
for (AppEntry entry : mAppEntries) {
|
||||||
|
if (mCheckedApplications.contains(entry.label)) {
|
||||||
|
synchronized (entry) {
|
||||||
|
apps.add(entry.info.packageName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// TODO: If needed, add an action on the callback.
|
||||||
|
PackageDeletionTask task = new PackageDeletionTask(getActivity().getPackageManager(), apps,
|
||||||
|
new PackageDeletionTask.Callback() {
|
||||||
|
@Override
|
||||||
|
public void onSuccess() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onError() {
|
||||||
|
Log.e(TAG, "An error occurred while uninstalling packages.");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
task.run();
|
||||||
|
finishFragment();
|
||||||
|
}
|
||||||
|
|
||||||
private long getTotalFreeableSpace() {
|
private long getTotalFreeableSpace() {
|
||||||
long freeableSpace = 0;
|
long freeableSpace = 0;
|
||||||
if (mAppEntries != null) {
|
if (mAppEntries != null) {
|
||||||
|
Reference in New Issue
Block a user