diff --git a/res/values/strings.xml b/res/values/strings.xml index b900d98..151fcad 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -8,6 +8,8 @@ Навигация Сохранить Загрузить + Удалить + Удалено @string/to_prev_scene diff --git a/src/com/annimon/everlastingsummer/Dialogs.java b/src/com/annimon/everlastingsummer/Dialogs.java index 9665c55..43b9698 100644 --- a/src/com/annimon/everlastingsummer/Dialogs.java +++ b/src/com/annimon/everlastingsummer/Dialogs.java @@ -1,6 +1,8 @@ package com.annimon.everlastingsummer; +import java.text.DateFormat; import java.util.List; +import java.util.Locale; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; @@ -9,6 +11,7 @@ import android.view.LayoutInflater; import android.view.View; import android.widget.SeekBar; import android.widget.TextView; +import android.widget.Toast; /** * Работа с диалогами. @@ -83,9 +86,55 @@ public final class Dialogs { builder.show(); } - public void showSaves(List saves, DialogInterface.OnClickListener listener) { + public void showSaves(final List saves, DialogInterface.OnClickListener listener) { builder.setTitle(R.string.load); builder.setAdapter(new SavesAdapter(context, saves), listener); + builder.setPositiveButton(R.string.remove, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + Dialogs.with(context).showSavesRemove(saves); + } + }); + builder.setNegativeButton(android.R.string.cancel, dismissDialog); + builder.setCancelable(true); + builder.show(); + } + + public void showSavesRemove(final List saves) { + final int size = saves.size(); + final String[] items = new String[size]; + final DateFormat format = DateFormat.getDateTimeInstance( + DateFormat.MEDIUM, DateFormat.MEDIUM, Locale.getDefault()); + for (int i = 0; i < size; i++) { + final SaveInfo info = saves.get(i); + items[i] = format.format(info.getTime()) + "\n" + info.getPath(); + } + final boolean[] checkedItems = new boolean[size]; + + builder.setTitle(R.string.remove); + builder.setMultiChoiceItems(items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() { + @Override + public void onClick(DialogInterface dialog, int which, boolean isChecked) { + checkedItems[which] = isChecked; + } + }); + + builder.setPositiveButton(R.string.remove, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + boolean removed = false; + for (int i = 0; i < size; i++) { + if (checkedItems[i]) { + IOUtil.removeSaveInfo(context, Long.toString(saves.get(i).getTime())); + removed = true; + } + } + if (removed) { + Toast.makeText(context, R.string.removed, Toast.LENGTH_SHORT).show(); + } + } + }); builder.setNegativeButton(android.R.string.cancel, dismissDialog); builder.setCancelable(true); builder.show(); diff --git a/src/com/annimon/everlastingsummer/IOUtil.java b/src/com/annimon/everlastingsummer/IOUtil.java index 4e6765f..49994b7 100644 --- a/src/com/annimon/everlastingsummer/IOUtil.java +++ b/src/com/annimon/everlastingsummer/IOUtil.java @@ -3,6 +3,7 @@ package com.annimon.everlastingsummer; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; +import java.io.File; import java.io.FileDescriptor; import java.io.FileInputStream; import java.io.IOException; @@ -61,6 +62,13 @@ public final class IOUtil { dos.close(); } + public static void removeSaveInfo(Context context, String filename) { + final File file = context.getFileStreamPath(filename); + if (file != null) { + file.delete(); + } + } + private static FileInputStream streamForFD; public static FileDescriptor getFD(String file) throws IOException { if (streamForFD != null) streamForFD.close();