diff --git a/src/main/java/dk/aau/netsec/hostage/logging/LogExport.java b/src/main/java/dk/aau/netsec/hostage/logging/LogExport.java index dfbaecc8..c7326a2d 100644 --- a/src/main/java/dk/aau/netsec/hostage/logging/LogExport.java +++ b/src/main/java/dk/aau/netsec/hostage/logging/LogExport.java @@ -26,15 +26,15 @@ * @author Lars Pandikow */ public class LogExport extends IntentService { - public static final String ACTION_EXPORT_DATABASE = "dk.aau.netsec.hostage.logging.ACTION_EXPORT_DATABASE"; - public static final String FORMAT_EXPORT_DATABASE = "dk.aau.netsec.hostage.logging.FORMAT_EXPORT_DATABASE"; +// public static final String ACTION_EXPORT_DATABASE = "dk.aau.netsec.hostage.logging.ACTION_EXPORT_DATABASE"; +// public static final String FORMAT_EXPORT_DATABASE = "dk.aau.netsec.hostage.logging.FORMAT_EXPORT_DATABASE"; - static Handler mMainThreadHandler = null; +// static Handler mMainThreadHandler = null; - static SharedPreferences pref; - static DaoSession dbSession; - static DAOHelper daoHelper; - public static Formatter formatter; +// static SharedPreferences pref; +// static DaoSession dbSession; +// static DAOHelper daoHelper; +// public static Formatter formatter; public LogExport() { super(LogExport.class.getName()); @@ -43,10 +43,10 @@ public LogExport() { @Override public void onCreate() { super.onCreate(); - pref = PreferenceManager.getDefaultSharedPreferences(this); - dbSession = HostageApplication.getInstances().getDaoSession(); - daoHelper = new DAOHelper(dbSession,this); - mMainThreadHandler = new Handler(); +// pref = PreferenceManager.getDefaultSharedPreferences(this); +// dbSession = HostageApplication.getInstances().getDaoSession(); +// daoHelper = new DAOHelper(dbSession,this); +// mMainThreadHandler = new Handler(); } /** @@ -56,74 +56,74 @@ public void onCreate() { */ @Override protected void onHandleIntent(Intent intent) { - if (intent != null) { - final String action = intent.getAction(); - - if (ACTION_EXPORT_DATABASE.equals(action)) { - final int format = intent.getIntExtra(FORMAT_EXPORT_DATABASE, 0); - formatter = (format == 0 ? TraCINgFormatter.getInstance() : null); - - Intent filipsIntent = new Intent(Intent.ACTION_CREATE_DOCUMENT); - - filipsIntent.setType("application/json"); - - filipsIntent.putExtra(Intent.EXTRA_TITLE, getFileName("file",".json")); - -// startActivityForResult - - -// if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { -// if(format == 0) { -// exportDatabase(formatter); -// } else if(format == 1) { -// exportJSONFormat(); -// } -// } -// else{ -// Toast.makeText(this, "Could not write out to storage", Toast.LENGTH_SHORT).show(); -// } - } - } +// if (intent != null) { +// final String action = intent.getAction(); +// +// if (ACTION_EXPORT_DATABASE.equals(action)) { +// final int format = intent.getIntExtra(FORMAT_EXPORT_DATABASE, 0); +// formatter = (format == 0 ? TraCINgFormatter.getInstance() : null); +// +// Intent filipsIntent = new Intent(Intent.ACTION_CREATE_DOCUMENT); +// +// filipsIntent.setType("application/json"); +// +// filipsIntent.putExtra(Intent.EXTRA_TITLE, getFileName("file",".json")); +// +//// startActivityForResult +// +// +//// if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { +//// if(format == 0) { +//// exportDatabase(formatter); +//// } else if(format == 1) { +//// exportJSONFormat(); +//// } +//// } +//// else{ +//// Toast.makeText(this, "Could not write out to storage", Toast.LENGTH_SHORT).show(); +//// } +// } +// } } private void exportJSONFormat(){ - JSONHelper jsonHelper = new JSONHelper(); - try { - File file = getDirFile("file", ".json"); - String filename = getFileName("file",".json"); - ArrayList records = daoHelper.getAttackRecordDAO().getAllRecords(); - jsonHelper.jsonWriter(records,file); - - makeToast(filename+" saved on external (if you have an sd card) or internal memory! ", Toast.LENGTH_LONG); - }catch (Exception e){ - makeToast("Could not write to a JSON File in SD Card or Internal Storage",Toast.LENGTH_SHORT); - } - - } - - private static File getDirFile(String format,String extension){ - String filename = getFileName(format,extension); - String externalLocation = pref.getString("pref_external_location", ""); - - String root = getExternalStoragePath(); - File dir = new File(root + externalLocation); - dir.mkdirs(); - File file = new File(dir, filename); +// JSONHelper jsonHelper = new JSONHelper(); +// try { +// File file = getDirFile("file", ".json"); +// String filename = getFileName("file",".json"); +// ArrayList records = daoHelper.getAttackRecordDAO().getAllRecords(); +// jsonHelper.jsonWriter(records,file); +// +// makeToast(filename+" saved on external (if you have an sd card) or internal memory! ", Toast.LENGTH_LONG); +// }catch (Exception e){ +// makeToast("Could not write to a JSON File in SD Card or Internal Storage",Toast.LENGTH_SHORT); +// } - return file; } - private static String getExternalStoragePath(){ - String path = System.getenv("SECONDARY_STORAGE"); //SD card - if(path!=null && !path.trim().isEmpty()){ - return path; - } - return System.getenv("EXTERNAL_STORAGE"); //internal Storage - } - - public static String getFileName(String format,String extension){ - return "hostage_" + (format) + "_"+ System.currentTimeMillis() + extension; - } +// private static File getDirFile(String format,String extension){ +// String filename = getFileName(format,extension); +// String externalLocation = pref.getString("pref_external_location", ""); +// +// String root = getExternalStoragePath(); +// File dir = new File(root + externalLocation); +// dir.mkdirs(); +// File file = new File(dir, filename); +// +// return file; +// } + +// private static String getExternalStoragePath(){ +// String path = System.getenv("SECONDARY_STORAGE"); //SD card +// if(path!=null && !path.trim().isEmpty()){ +// return path; +// } +// return System.getenv("EXTERNAL_STORAGE"); //internal Storage +// } +// +// public static String getFileName(String format,String extension){ +// return "hostage_" + (format) + "_"+ System.currentTimeMillis() + extension; +// } /** * Exports all records in a given format. Before exporting checks export @@ -132,38 +132,38 @@ public static String getFileName(String format,String extension){ * @param format Integer coded export format * @see RecordAll #toString(int) */ - public static void exportDatabase(Formatter format) { - try { - FileOutputStream log; - String filename = getFileName(format.toString(),".log"); - log = new FileOutputStream(getDirFile(format.toString(),".log")); - - ArrayList records = daoHelper.getAttackRecordDAO().getAllRecords(); - for (RecordAll record : records) { - log.write((record.toString(format)).getBytes()); - } - log.flush(); - log.close(); - makeToast(filename + " saved on external (if you have an sd card) or internal memory! ", Toast.LENGTH_LONG); - } catch (Exception e) { - makeToast("Could not write to SD Card or Internal Storage", Toast.LENGTH_SHORT); - e.printStackTrace(); - } - } - - /** - * Checks if external storage is available for read and write. - * - * @return True if external storage is available for read and write, else - * false. - */ - private static boolean isExternalStorageWritable() { - String state = Environment.getExternalStorageState(); - return Environment.MEDIA_MOUNTED.equals(state); - } - - private static void makeToast(final String text, final int length){ - mMainThreadHandler.post(() -> Toast.makeText(Hostage.getContext(), text, length).show()); - } +// public static void exportDatabase(Formatter format) { +// try { +// FileOutputStream log; +// String filename = getFileName(format.toString(),".log"); +// log = new FileOutputStream(getDirFile(format.toString(),".log")); +// +// ArrayList records = daoHelper.getAttackRecordDAO().getAllRecords(); +// for (RecordAll record : records) { +// log.write((record.toString(format)).getBytes()); +// } +// log.flush(); +// log.close(); +// makeToast(filename + " saved on external (if you have an sd card) or internal memory! ", Toast.LENGTH_LONG); +// } catch (Exception e) { +// makeToast("Could not write to SD Card or Internal Storage", Toast.LENGTH_SHORT); +// e.printStackTrace(); +// } +// } +// +// /** +// * Checks if external storage is available for read and write. +// * +// * @return True if external storage is available for read and write, else +// * false. +// */ +// private static boolean isExternalStorageWritable() { +// String state = Environment.getExternalStorageState(); +// return Environment.MEDIA_MOUNTED.equals(state); +// } +// +// private static void makeToast(final String text, final int length){ +// mMainThreadHandler.post(() -> Toast.makeText(Hostage.getContext(), text, length).show()); +// } } diff --git a/src/main/java/dk/aau/netsec/hostage/logging/LogSaveWorker.java b/src/main/java/dk/aau/netsec/hostage/logging/LogSaveWorker.java index c29a2564..24ff3e23 100644 --- a/src/main/java/dk/aau/netsec/hostage/logging/LogSaveWorker.java +++ b/src/main/java/dk/aau/netsec/hostage/logging/LogSaveWorker.java @@ -2,7 +2,7 @@ import android.content.Context; import android.net.Uri; -import android.widget.Toast; +import android.util.Log; import androidx.annotation.NonNull; import androidx.work.Worker; @@ -11,17 +11,23 @@ import org.json.JSONArray; import java.io.BufferedWriter; -import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Date; import dk.aau.netsec.hostage.HostageApplication; import dk.aau.netsec.hostage.commons.JSONHelper; +import dk.aau.netsec.hostage.logging.formatter.Formatter; +import dk.aau.netsec.hostage.logging.formatter.TraCINgFormatter; import dk.aau.netsec.hostage.persistence.DAO.DAOHelper; import dk.aau.netsec.hostage.ui.fragment.RecordOverviewFragment; + /** * @author Filip Adamik * Created on 21/06/2021 @@ -41,53 +47,75 @@ public LogSaveWorker(@NonNull Context context, @NonNull WorkerParameters workerP public Result doWork() { dbSession = HostageApplication.getInstances().getDaoSession(); - daoHelper = new DAOHelper(dbSession,filipsContext); + daoHelper = new DAOHelper(dbSession, filipsContext); + + Uri uri = Uri.parse(getInputData().getString(RecordOverviewFragment.WORKER_DATA_URI_KEY)); + int exportFormat = getInputData().getInt(RecordOverviewFragment.LOG_EXPORT_FORMAT, RecordOverviewFragment.EXPORT_FORMAT_POSITION_PLAINTEXT); + + if (exportFormat == RecordOverviewFragment.EXPORT_FORMAT_POSITION_JSON) { - // String filipsDataToWrite = getInputData().getString("filipsKey"); - Uri uri = Uri.parse(getInputData().getString("filipsHorribleUri")); - int exportFormat = getInputData().getInt(RecordOverviewFragment.LOG_EXPORT_FORMAT, RecordOverviewFragment.POSITION_EXPORT_FORMAT_PLAINTEXT); + writeJSONFile(uri); + return Result.success(); + } else if (exportFormat == RecordOverviewFragment.EXPORT_FORMAT_POSITION_PLAINTEXT) { + writePlaintextFile(uri); - writeJSONFile(uri); - return Result.success(); + return Result.success(); + } + + return Result.failure(); } -// private void exportJSONFormat(){ + public static String getFileName(int exportFormat) { + SimpleDateFormat formatter = new SimpleDateFormat("ddMMyyyy_HHmm"); + Date date = new Date(System.currentTimeMillis()); -// try { -// -// -// -// -// makeToast(filename+" saved on external (if you have an sd card) or internal memory! ", Toast.LENGTH_LONG); -// }catch (Exception e){ -// makeToast("Could not write to a JSON File in SD Card or Internal Storage",Toast.LENGTH_SHORT); -// } + if (exportFormat == RecordOverviewFragment.EXPORT_FORMAT_POSITION_JSON) { + return "hostage_" + formatter.format(date) + ".json"; + } else { + return "hostage_" + formatter.format(date) + ".txt"; + } + } - private void writeJSONFile(@NonNull Uri uri) { - JSONHelper jsonHelper = new JSONHelper(); + private void writePlaintextFile(Uri outputFileUri) { + Formatter formatter = TraCINgFormatter.getInstance(); ArrayList records = daoHelper.getAttackRecordDAO().getAllRecords(); - OutputStream outputStream; try { - outputStream = filipsContext.getContentResolver().openOutputStream(uri); + outputStream = filipsContext.getContentResolver().openOutputStream(outputFileUri); -// jsonHelper.jsonWriter(records, outputStream); + for (RecordAll record : records) { + outputStream.write((record.toString(formatter)).getBytes()); + } - BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outputStream, "utf8"),8192); -// + outputStream.flush(); + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private void writeJSONFile(@NonNull Uri outputFileUri) { + JSONHelper jsonHelper = new JSONHelper(); + ArrayList records = daoHelper.getAttackRecordDAO().getAllRecords(); + + OutputStream outputStream; + try { + outputStream = filipsContext.getContentResolver().openOutputStream(outputFileUri); + + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outputStream, "utf8"), 8192); JSONArray arr = new JSONArray(); - for(RecordAll record: records) { + for (RecordAll record : records) { arr.put(record.toJSON()); } + bw.write(arr.toString()); -// -// bw.write(); bw.flush(); bw.close(); + } catch (IOException e) { e.printStackTrace(); } diff --git a/src/main/java/dk/aau/netsec/hostage/ui/activity/MainActivity.java b/src/main/java/dk/aau/netsec/hostage/ui/activity/MainActivity.java index ac175abc..781a28f2 100644 --- a/src/main/java/dk/aau/netsec/hostage/ui/activity/MainActivity.java +++ b/src/main/java/dk/aau/netsec/hostage/ui/activity/MainActivity.java @@ -1,13 +1,5 @@ package dk.aau.netsec.hostage.ui.activity; -import java.io.BufferedWriter; -import java.io.IOException; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.lang.ref.WeakReference; -import java.util.ArrayList; -import java.util.List; - import android.Manifest; import android.annotation.SuppressLint; import android.app.ActivityManager; @@ -38,7 +30,6 @@ import android.widget.Toast; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; @@ -47,6 +38,11 @@ import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; +import java.io.IOException; +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + import dk.aau.netsec.hostage.Hostage; import dk.aau.netsec.hostage.R; import dk.aau.netsec.hostage.location.MyLocationManager; diff --git a/src/main/java/dk/aau/netsec/hostage/ui/fragment/RecordOverviewFragment.java b/src/main/java/dk/aau/netsec/hostage/ui/fragment/RecordOverviewFragment.java index 76b375a0..2ae8f4a7 100644 --- a/src/main/java/dk/aau/netsec/hostage/ui/fragment/RecordOverviewFragment.java +++ b/src/main/java/dk/aau/netsec/hostage/ui/fragment/RecordOverviewFragment.java @@ -1,6 +1,5 @@ package dk.aau.netsec.hostage.ui.fragment; -import android.Manifest; import android.app.Activity; import android.app.AlertDialog; import android.app.FragmentManager; @@ -10,11 +9,8 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; -import android.content.pm.PackageManager; -import android.net.Uri; import android.os.Bundle; -import android.provider.Settings; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; @@ -30,7 +26,6 @@ import android.widget.Toast; -import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.localbroadcastmanager.content.LocalBroadcastManager; import androidx.preference.PreferenceManager; @@ -38,12 +33,7 @@ import androidx.work.OneTimeWorkRequest; import androidx.work.WorkManager; import androidx.work.WorkRequest; -import androidx.work.WorkerParameters; -import java.io.BufferedWriter; -import java.io.IOException; -import java.io.OutputStream; -import java.io.OutputStreamWriter; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -59,7 +49,6 @@ import dk.aau.netsec.hostage.HostageApplication; import dk.aau.netsec.hostage.R; import dk.aau.netsec.hostage.logging.DaoSession; -import dk.aau.netsec.hostage.logging.LogExport; import dk.aau.netsec.hostage.logging.LogSaveWorker; import dk.aau.netsec.hostage.logging.RecordAll; import dk.aau.netsec.hostage.persistence.DAO.DAOHelper; @@ -141,11 +130,12 @@ public class RecordOverviewFragment extends UpNavigatibleFragment implements Che private Bundle savedInstanceState; - public static final int filipsRequestCode = 101; - - public static final int POSITION_EXPORT_FORMAT_PLAINTEXT = 0; - public static final int POSITION_EXPORT_FORMAT_JSON = 1; + public static final int EXPORT_LOGS_PLAINTEXT_REQUEST_CODE = 724; + public static final int EXPORT_LOGS_JSON_REQUEST_CODE = 725; + public static final int EXPORT_FORMAT_POSITION_PLAINTEXT = 0; + public static final int EXPORT_FORMAT_POSITION_JSON = 1; public static final String LOG_EXPORT_FORMAT = "dk.aau.netsec.hostage.logging.LOG_EXPORT_FORMAT"; + public static final String WORKER_DATA_URI_KEY = "dk.aau.netsec.hostage.logging.WORKER_DATA_URI_KEY"; /** * Constructor @@ -507,25 +497,22 @@ public boolean onOptionsItemSelected(MenuItem item) { builderExport.setTitle(MainActivity.getInstance().getString(R.string.rec_choose_export_format)); builderExport.setItems(R.array.format, (dialog, position) -> { + Intent saveLogsIntent = new Intent(Intent.ACTION_CREATE_DOCUMENT); - Intent filipsIntent = new Intent(Intent.ACTION_CREATE_DOCUMENT); + if (position == EXPORT_FORMAT_POSITION_PLAINTEXT) { + saveLogsIntent.putExtra(Intent.EXTRA_TITLE, LogSaveWorker.getFileName(EXPORT_FORMAT_POSITION_PLAINTEXT)); + saveLogsIntent.setType("text/plain"); - filipsIntent.setType("application/json"); + startActivityForResult(saveLogsIntent, EXPORT_LOGS_PLAINTEXT_REQUEST_CODE); - filipsIntent.putExtra(Intent.EXTRA_TITLE, LogExport.getFileName("file", ".json")); - filipsIntent.putExtra(LOG_EXPORT_FORMAT, position); + } else { + saveLogsIntent.putExtra(Intent.EXTRA_TITLE, LogSaveWorker.getFileName(EXPORT_FORMAT_POSITION_JSON)); + saveLogsIntent.setType("application/json"); -// filipsIntent.putExtra() - startActivityForResult(filipsIntent, filipsRequestCode); + startActivityForResult(saveLogsIntent, EXPORT_LOGS_JSON_REQUEST_CODE); + } -// Intent intent = new Intent(getActivity(), LogExport.class); -// requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_WRITE_STORAGE); -// -// intent.setAction(LogExport.ACTION_EXPORT_DATABASE); -// intent.putExtra(LogExport.FORMAT_EXPORT_DATABASE, position); -// -// RecordOverviewFragment.this.getActivity().startService(intent); }); builderExport.create(); builderExport.show(); @@ -613,24 +600,35 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == SyncUtils.SYNC_SUCCESSFUL) { actualiseListViewInBackground(); } - } else if (requestCode == filipsRequestCode) { + } else if (requestCode == EXPORT_LOGS_PLAINTEXT_REQUEST_CODE || requestCode == EXPORT_LOGS_JSON_REQUEST_CODE) { switch (resultCode) { case AppCompatActivity.RESULT_OK: if (data != null && data.getData() != null) { - int export_format = data.getIntExtra(LOG_EXPORT_FORMAT, POSITION_EXPORT_FORMAT_PLAINTEXT); + int export_format; - WorkRequest createLogWorkRequest = new OneTimeWorkRequest.Builder(LogSaveWorker.class) - .setInputData(new Data.Builder() - .putString("filipsKey", "filips Awesomeeee data") - .putString("filipsHorribleUri", data.getData().toString()) - .putInt(LOG_EXPORT_FORMAT, export_format) - .build()) + if (requestCode == EXPORT_LOGS_PLAINTEXT_REQUEST_CODE){ + export_format = EXPORT_FORMAT_POSITION_PLAINTEXT; + } + else { + export_format = EXPORT_FORMAT_POSITION_JSON; + } + + Data workData = new Data.Builder() + .putString(WORKER_DATA_URI_KEY, data.getData().toString()) + .putInt(LOG_EXPORT_FORMAT, export_format) + .build(); + + WorkRequest createLogWorkRequest = new OneTimeWorkRequest + .Builder(LogSaveWorker.class) + .setInputData(workData) .build(); + WorkManager.getInstance(getContext()).enqueue(createLogWorkRequest); } break; + case AppCompatActivity.RESULT_CANCELED: break; } @@ -1715,29 +1713,29 @@ private void actualiseFilterButton() { } } - @Override - public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { - if (requestCode == MY_PERMISSIONS_REQUEST_WRITE_STORAGE) { - if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { - LogExport.exportDatabase(LogExport.formatter); - - } else { - androidx.appcompat.app.AlertDialog.Builder dialog = new androidx.appcompat.app.AlertDialog.Builder(getContext()); - dialog.setTitle("Permission Required"); - dialog.setMessage("If you don't allow the permission to access External Storage you won't be able to extract any records."); - dialog.setPositiveButton("Settings", (dialog1, which) -> { - Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, - Uri.fromParts("package", getApplicationContext().getPackageName(), null)); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - startActivity(intent); - }); - dialog.setNegativeButton("No, thanks", (dialog1, which) -> { - }); - androidx.appcompat.app.AlertDialog alertDialog = dialog.create(); - alertDialog.show(); - } - } - } +// @Override +// public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { +// if (requestCode == MY_PERMISSIONS_REQUEST_WRITE_STORAGE) { +// if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { +// LogExport.exportDatabase(LogExport.formatter); +// +// } else { +// androidx.appcompat.app.AlertDialog.Builder dialog = new androidx.appcompat.app.AlertDialog.Builder(getContext()); +// dialog.setTitle("Permission Required"); +// dialog.setMessage("If you don't allow the permission to access External Storage you won't be able to extract any records."); +// dialog.setPositiveButton("Settings", (dialog1, which) -> { +// Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, +// Uri.fromParts("package", getApplicationContext().getPackageName(), null)); +// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); +// startActivity(intent); +// }); +// dialog.setNegativeButton("No, thanks", (dialog1, which) -> { +// }); +// androidx.appcompat.app.AlertDialog alertDialog = dialog.create(); +// alertDialog.show(); +// } +// } +// } /** * Deletes the current displayed attacks.