From ec353b0c390f7b3f45b950171e56c6ddcd0a9607 Mon Sep 17 00:00:00 2001 From: Adithya Abraham Philip Date: Thu, 26 Feb 2015 21:58:25 +0530 Subject: [PATCH] initial Log Display function --- .../keychain/ui/LogDisplayFragment.java | 102 ++++++++++++++++++ .../drawable-hdpi/ic_action_save_white.png | Bin 0 -> 394 bytes .../drawable-mdpi/ic_action_save_white.png | Bin 0 -> 362 bytes .../drawable-xhdpi/ic_action_save_white.png | Bin 0 -> 441 bytes .../drawable-xxhdpi/ic_action_save_white.png | Bin 0 -> 495 bytes .../src/main/res/menu/log_display.xml | 11 ++ OpenKeychain/src/main/res/values/strings.xml | 4 + 7 files changed, 117 insertions(+) create mode 100644 OpenKeychain/src/main/res/drawable-hdpi/ic_action_save_white.png create mode 100644 OpenKeychain/src/main/res/drawable-mdpi/ic_action_save_white.png create mode 100644 OpenKeychain/src/main/res/drawable-xhdpi/ic_action_save_white.png create mode 100644 OpenKeychain/src/main/res/drawable-xxhdpi/ic_action_save_white.png create mode 100644 OpenKeychain/src/main/res/menu/log_display.xml diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/LogDisplayFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/LogDisplayFragment.java index 2baebc83d..a44274c67 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/LogDisplayFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/LogDisplayFragment.java @@ -23,8 +23,13 @@ import android.content.Intent; import android.graphics.Color; import android.os.Bundle; import android.support.v4.app.ListFragment; +import android.support.v4.view.MenuItemCompat; +import android.support.v7.widget.SearchView; import android.util.TypedValue; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; @@ -32,12 +37,26 @@ import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.TextView; +import android.widget.Toast; +import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.operations.results.OperationResult; import org.sufficientlysecure.keychain.operations.results.OperationResult.LogEntryParcel; import org.sufficientlysecure.keychain.operations.results.OperationResult.LogLevel; import org.sufficientlysecure.keychain.operations.results.OperationResult.SubLogEntryParcel; +import org.sufficientlysecure.keychain.provider.KeychainContract; +import org.sufficientlysecure.keychain.provider.KeychainDatabase; +import org.sufficientlysecure.keychain.ui.util.Notify; +import org.sufficientlysecure.keychain.util.ExportHelper; +import org.sufficientlysecure.keychain.util.FileHelper; +import org.sufficientlysecure.keychain.util.Log; +import org.sufficientlysecure.keychain.util.Preferences; + +import java.io.File; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Iterator; public class LogDisplayFragment extends ListFragment implements OnItemClickListener { @@ -46,6 +65,12 @@ public class LogDisplayFragment extends ListFragment implements OnItemClickListe OperationResult mResult; public static final String EXTRA_RESULT = "log"; + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setHasOptionsMenu(true); + } @Override public void onActivityCreated(Bundle savedInstanceState) { @@ -70,6 +95,83 @@ public class LogDisplayFragment extends ListFragment implements OnItemClickListe getListView().setFastScrollEnabled(true); getListView().setDividerHeight(0); + + } + + @Override + public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) { + Toast.makeText(this.getActivity(),"Options created",Toast.LENGTH_SHORT).show(); + inflater.inflate(R.menu.log_display, menu); + + super.onCreateOptionsMenu(menu, inflater); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch(item.getItemId()) { + case R.id.menu_log_display_export_log: + exportLog(); + break; + } + + return super.onOptionsItemSelected(item); + } + + private void exportLog() { + Toast.makeText(this.getActivity(),"Exporting log",Toast.LENGTH_LONG).show(); + showExportLogDialog(new File(Constants.Path.APP_DIR, "export.log")); + } + + private void writeToLogFile(final OperationResult.OperationLog operationLog, final File f) { + + PrintWriter pw = null; + try { + pw = new PrintWriter(f); + } catch(IOException e) { + e.printStackTrace(); + } + + Iterator logIterator = operationLog.iterator(); + + while(logIterator.hasNext()) { + + pw.println(getPrintableLogEntry(logIterator.next())); + } + + pw.close(); + } + + /** + * returns an indented String of a LogEntryParcel + * @param entry log entry whose String representation is to be obtained + * @return the passed log entry in a readable format + */ + private String getPrintableLogEntry(OperationResult.LogEntryParcel entry) { + String printable = ""; + + return entry.toString(); + } + + private void showExportLogDialog(final File exportFile) { + + String title = this.getString(R.string.title_export_log); + + String message = this.getString(R.string.specify_file_to_export_log_to); + + FileHelper.saveFile(new FileHelper.FileDialogCallback() { + @Override + public void onFileSelected(File file, boolean checked) { + writeToLogFile(getOperationLog(),file); + } + }, this.getActivity().getSupportFragmentManager(), title, message, exportFile, null); + } + + private OperationResult.OperationLog getOperationLog(){ + OperationResult operationResult = this.getActivity().getIntent().getParcelableExtra( + LogDisplayFragment.EXTRA_RESULT); + OperationResult.OperationLog operationResultLog = operationResult.getLog(); + + return operationResultLog; } @Override diff --git a/OpenKeychain/src/main/res/drawable-hdpi/ic_action_save_white.png b/OpenKeychain/src/main/res/drawable-hdpi/ic_action_save_white.png new file mode 100644 index 0000000000000000000000000000000000000000..0fe36a1ec3d5519890f4a978080ab567401f6cf4 GIT binary patch literal 394 zcmV;50d@X~P)GDd`KZz4U!n2!bF8Vg~}1uL2sk0CtQ#x7_sKTZkQf3;ueQ2hi^I2o#WqBmqd8LtzI#nGqM_^ zoRLLaNL(B<>5+u=m4G&hi=)A1H3?Sb`xlI5`=&c~& z#0^M9hTOp3(iVY8w?3j1GYU;AN;qnI#9;>CifKY5;6o;cz4o?hA|Dj+se(7Kp=9X$ z+dF-LPQ2ZTRqsE#iLtg(POIL3w4#vsz89TNpfyzY*H%pE?8b#r=%1pHsg}}6o9TT^ oxkR9H;INe-2!bGv!bgAs0M`Oe{s;Z08UO$Q07*qoM6N<$f`(h64gdfE literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-mdpi/ic_action_save_white.png b/OpenKeychain/src/main/res/drawable-mdpi/ic_action_save_white.png new file mode 100644 index 0000000000000000000000000000000000000000..664260d8c6a01580f05c23e407a270f9b7425d18 GIT binary patch literal 362 zcmV-w0hRuVP)|n{gP19FMD7c7%}D z)uDE_$GML$fJR#~IAX@WydXD@{eWVx#yeHE7i@eCz{N9i^77iSF{Qdx0F;b@NLNU+ z1o7Asz$l1x#e%Q41`xCed#Es35DP$t{85XYS?Ei({;{YLHBq`AA;m6h;0@)T{w4M9 zO98Y9o$$H+PwniGhU!o18GZ$#_6*qvIvedKz7H1xH4m^YQ;5mAyaUJmUC*r zmAbAekPeF&DcA)KDQckf^iP8TaB&oKEDt44WBMt_ldk{+0K^$qNLVDtO8@`>07*qo IM6N<$f?n;B_5c6? literal 0 HcmV?d00001 diff --git a/OpenKeychain/src/main/res/drawable-xhdpi/ic_action_save_white.png b/OpenKeychain/src/main/res/drawable-xhdpi/ic_action_save_white.png new file mode 100644 index 0000000000000000000000000000000000000000..dde278b5e2186411cc5d71f54f5b7fc278066e90 GIT binary patch literal 441 zcmV;q0Y?6bP)@_6J5wKF2%}Nf{+psjI zdDFy3;z>io^2fJaH8Go0G!AW4BrGD&VS|J+R{>v3NI}3?5>gTHv4oTad?X&)Pcx)8=rJT8VDP!XXvOe~ zL6$-61;gBC)(BrVy8Z@Vk?{WiE>2HFJz2ZT71_b+(8E4Kge zJH?hVF4?}fcaPkCEib=)%w_|r_^St z%72+{p$}zLWmcbP=t)&(ePZz7%K1iBRnLr~lta5Ft^TB%x0~^Ku3Orn%c^UnM0DL* zM5Z}7BywV>{xq{NX|*vhaWF8lED#9&qaf_Gr)-x<~`r7%GBHY8@qE!*O? zN&mJb=LWAJpq>5#A5>c&Crx;*?~~@8>%ATvd<+Z=c + + + + + diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index e01f1c049..9d980500d 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -42,6 +42,7 @@ "Exchange Keys" "Advanced Key Info" "Keys" + "Export Log" "Identities" @@ -106,6 +107,7 @@ "Search cloud" "Export all keys" "Show advanced info" + "Export Log" "Message" @@ -237,6 +239,8 @@ "Note: only subkeys support ElGamal." "Couldn't find key %08X." + "Please specify file to export to. \nWARNING: File will be overwritten if it exists." + " "%d bad secret key ignored. Perhaps you exported with the option\n --export-secret-subkeys\nMake sure you export with\n --export-secret-keys\ninstead."" "%d bad secret keys ignored. Perhaps you exported with the option\n --export-secret-subkeys\nMake sure you export with\n --export-secret-keys\ninstead.""