From 7bcbe46d91954d9ab37e549eff4dcfb76e9c1707 Mon Sep 17 00:00:00 2001
From: Przemek Grondek <github@nerull7.info>
Date: Wed, 20 Aug 2014 15:07:12 +0200
Subject: [PATCH] Added remove element

---
 .../nerull7/mysqlbrowser/ElementFragment.java |  10 +++-
 .../nerull7/mysqlbrowser/LoginFragment.java   |  12 +++--
 .../db/AsyncDatabaseConnector.java            |  44 +++++++++++++++++-
 .../res/drawable-hdpi/ic_action_delete.png    | Bin 0 -> 764 bytes
 .../res/drawable-mdpi/ic_action_delete.png    | Bin 0 -> 507 bytes
 .../res/drawable-xhdpi/ic_action_delete.png   | Bin 0 -> 990 bytes
 .../res/drawable-xxhdpi/ic_action_delete.png  | Bin 0 -> 1721 bytes
 app/src/main/res/menu/element.xml             |   5 ++
 app/src/main/res/values/strings.xml           |   2 +
 9 files changed, 66 insertions(+), 7 deletions(-)
 create mode 100644 app/src/main/res/drawable-hdpi/ic_action_delete.png
 create mode 100644 app/src/main/res/drawable-mdpi/ic_action_delete.png
 create mode 100644 app/src/main/res/drawable-xhdpi/ic_action_delete.png
 create mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_delete.png

diff --git a/app/src/main/java/info/nerull7/mysqlbrowser/ElementFragment.java b/app/src/main/java/info/nerull7/mysqlbrowser/ElementFragment.java
index bfa7c97..42eba73 100644
--- a/app/src/main/java/info/nerull7/mysqlbrowser/ElementFragment.java
+++ b/app/src/main/java/info/nerull7/mysqlbrowser/ElementFragment.java
@@ -62,15 +62,18 @@ public class ElementFragment extends Fragment implements AsyncDatabaseConnector.
 
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
+        List<String> fields = listAdapter.getFieldArray();
         if(item.getItemId() == R.id.action_save ){
-            List<String> fields = listAdapter.getFieldArray();
-
             Static.asyncDatabaseConnector.setStringReturnListener(this);
             if(getArguments().getBoolean(EDIT_ELEMENT))
                 Static.asyncDatabaseConnector.updateElement(tableName, fields, values, getNewValues());
             else
                 Static.asyncDatabaseConnector.addNewElement(tableName, fields, getNewValues());
             return true;
+        } else if(item.getItemId() == R.id.action_remove) {
+            Static.asyncDatabaseConnector.setStringReturnListener(this);
+            Static.asyncDatabaseConnector.removeElement(tableName, fields, values);
+            return true;
         } else {
             return super.onOptionsItemSelected(item);
         }
@@ -87,6 +90,9 @@ public class ElementFragment extends Fragment implements AsyncDatabaseConnector.
     @Override
     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
         inflater.inflate(R.menu.element, menu);
+        if(!getArguments().getBoolean(EDIT_ELEMENT)) {
+            menu.findItem(R.id.action_remove).setVisible(false);
+        }
         super.onCreateOptionsMenu(menu, inflater);
     }
 
diff --git a/app/src/main/java/info/nerull7/mysqlbrowser/LoginFragment.java b/app/src/main/java/info/nerull7/mysqlbrowser/LoginFragment.java
index 726d080..b3b048c 100644
--- a/app/src/main/java/info/nerull7/mysqlbrowser/LoginFragment.java
+++ b/app/src/main/java/info/nerull7/mysqlbrowser/LoginFragment.java
@@ -28,6 +28,8 @@ public class LoginFragment extends Fragment implements View.OnClickListener, Asy
 
     AsyncDatabaseConnector asyncDatabaseConnector;
 
+    private boolean result;
+
     public LoginFragment(){}
 
     @Override
@@ -97,6 +99,12 @@ public class LoginFragment extends Fragment implements View.OnClickListener, Asy
 
     @Override
     public void onBooleanReturn(boolean result) {
+        this.result = result;
+    }
+
+
+    @Override
+    public void onPostExecute() {
         if(result) {
             Static.asyncDatabaseConnector = asyncDatabaseConnector;
             Intent intent = new Intent(getActivity(), ListActivity.class);
@@ -106,11 +114,7 @@ public class LoginFragment extends Fragment implements View.OnClickListener, Asy
         else {
             Static.showErrorAlert(AsyncDatabaseConnector.errorMsg, getActivity());
         }
-    }
 
-
-    @Override
-    public void onPostExecute() {
         loginButton.setEnabled(true); // Now we can click button again
         progressBar.setVisibility(View.INVISIBLE);
     }
diff --git a/app/src/main/java/info/nerull7/mysqlbrowser/db/AsyncDatabaseConnector.java b/app/src/main/java/info/nerull7/mysqlbrowser/db/AsyncDatabaseConnector.java
index f02a60a..8a8872f 100644
--- a/app/src/main/java/info/nerull7/mysqlbrowser/db/AsyncDatabaseConnector.java
+++ b/app/src/main/java/info/nerull7/mysqlbrowser/db/AsyncDatabaseConnector.java
@@ -31,6 +31,7 @@ public class AsyncDatabaseConnector {
     public static final String ACTION_DATA_MATRIX = "getrows";
     public static final String ACTION_ADD_ELEMENT = "addelement";
     public static final String ACTION_UPDATE_ELEMENT = "updateelement";
+    public static final String ACTION_REMOVE_ELEMENT = "removeelement";
 
     private String login;
     private String password;
@@ -206,7 +207,7 @@ public class AsyncDatabaseConnector {
         args.add("l");
         values.add(String.valueOf(count));
 
-        getMatrix(actionUrlBuilder(ACTION_DATA_MATRIX, args, values) );
+        getMatrix(actionUrlBuilder(ACTION_DATA_MATRIX, args, values));
     }
 
     public void getEntriesCount(String table){
@@ -284,6 +285,47 @@ public class AsyncDatabaseConnector {
         downloader.execute(request);
     }
 
+    public void removeElement(String table, List<String> header, List<String> values) {
+        JSONArray headerJSON = new JSONArray();
+        JSONArray valuesJSON = new JSONArray();
+        String request;
+
+        ArrayList<String> args = new ArrayList<String>();
+        ArrayList<String> argValues = new ArrayList<String>();
+
+        args.add("d");
+        argValues.add(database);
+
+        args.add("t");
+        argValues.add(table);
+
+        for (String aHeader : header) {
+            headerJSON.put(aHeader);
+        }
+
+        for (String value : values) {
+            valuesJSON.put(value);
+        }
+
+        args.add("h");
+        argValues.add(headerJSON.toString());
+
+        args.add("v");
+        argValues.add(valuesJSON.toString());
+
+        request = actionUrlBuilder(ACTION_REMOVE_ELEMENT, args, argValues);
+
+        Downloader downloader = new Downloader(new Downloader.OnFinishedListener() {
+            @Override
+            public void onFinished(String data, String error) {
+                if(stringReturnListener!=null){
+                    stringReturnListener.onStringReturn(data);
+                }
+            }
+        }, onPostExecuteListener);
+        downloader.execute(request);
+    }
+
     public void setBooleanReturnListener(BooleanReturnListener booleanReturnListener){
         this.booleanReturnListener = booleanReturnListener;
     }
diff --git a/app/src/main/res/drawable-hdpi/ic_action_delete.png b/app/src/main/res/drawable-hdpi/ic_action_delete.png
new file mode 100644
index 0000000000000000000000000000000000000000..49e4513d88cf182c6efcb7c684f85fc1456f70be
GIT binary patch
literal 764
zcmV<Y0t5YtP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm0008RNkl<ZXhZE;
zOGs8h6!y2$O;+GeH`1;^30f3^8x0ava3SQAwk=(@(S>bl*V3){$e=|~f`YmUL>ECQ
z<SyFiPVBX@hx&bR@6R;dJ7;G82Ojal$JKw%nRC9Gb7s!WEz~G~3d;SjIVT{@U^+m@
zm73{t%|I<2Y)R0JcO%dM)FqDp!utoX59|V85*(FEtW*M5;lN$sHgGM_nXi!l0Biu?
z0(Fbxu>>xohx@=C;6kkNMDH)&o4^Y2GqkT50=HnK2e=YyOpyPM_IJR?kbXl5FwVPy
z_7DRRvhSg@2zcd(FM&(wa0Iv!;ZTgq4wPnr-;%Nq0gn8mDmtI~OcK-5O!yG!twPx3
z4K%~)t!ow}0!-K;X&NisKJQ9w7XdDnV?eoAn^3-7on8Q$ORS4PAC&G1*0_eh25tha
zfu3zc{u9s-NPEdTWZq=;pGSZ@>=U75IzN**!9*VpAVKHnk_09BQ4d?sAoJgjok!pS
zggb>1eT8<G0_k%Re+&R^g5DO|7l1#897~ahg5E0Hmu;CW0vt__zEs<oqiB*Cbj$>G
zURuuk&fWp^o+q<b<dH?-I$9qKqmed;I21$Jc4G=Zd^Uf~BEZmL2>Cu)Az_D;kBpDK
zB?zra1ej1UD@vM_b~y3>*s!rlaTd97I75hQf0NH}STcFxL@~24<LtQd#ASL9jocHQ
z1jf<I(^Slp6)I*wzAIIpZJz3$x(F~QCV~1G?-QM@WMz}@YU46}h{g$^c*eGqSUmx<
zR~<qmpgxJ!FQXlpg|2`k_SvL-WPD6|ZDi_8iPKul@gj^R^*^^2XR@4TEUG`ykc8?Z
zB?+iM)RTnjYn60eR(-LRR*|Z&7D+<&<!%~Es;}40Iz{aV4wHoHPfR8ewIBKH(pT+g
uR;h+p^PyWJQn7aF3r)ogm#bs-1Wo|IXw)%-dy;hk0000<MNUMnLSTZmt6qBm

literal 0
HcmV?d00001

diff --git a/app/src/main/res/drawable-mdpi/ic_action_delete.png b/app/src/main/res/drawable-mdpi/ic_action_delete.png
new file mode 100644
index 0000000000000000000000000000000000000000..2706550e95d428313d6e9d999f57faf06cc66b33
GIT binary patch
literal 507
zcmV<X0R;YuP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F80005PNkl<ZSVzT|
zPbft}6vp3UiC$r^WGSyCYirgd%ErRmlbw~FSYu(MNUT{~ONuO&>`}tfpYMBSYMjp8
zxpS#=>&tWI%sIa~^Y7kz&G@Ms=dV=-=mB^?)a3^7j=zu4Ywmz@0GMzb8g|LGT!grV
zE*wyjrwjl`IR%YE9m$A44xi8!bPBOL(I*8kgr0Lycge)k?G1)Q=q}d32%w2hvruQn
z<i6VnejGv9TAUaFN51$E$wP=etr8jl=Y07OWsen%)3GJjga$AJr!ghU3v3V2NMcHE
z&^`b)6u(Q@jzhZy;8t6K<Z5T~UFZp#jsP+)6P!SO(2@ed-LVOAyS5(*FbUg)Le5bg
zKwqwp2H}%?pLzId)jEg$EC#TO23A3PWP%W)s7=P==r=R~9<OVW<ld|$VjIg|R2><1
z9ftO?9Zta@{%<7!*eoGv%SlfEZRlPC@Qhz50U#lKoT9}k!|ubtJL6Xc%mK`&z<d#M
zN=&yQ0n87gqN8{RfX`5wqqx^?X?Y(ck78EA^fDrV`E^VP(-#tdYMH*0c?i>&QV(JJ
xS{_~^W*;Wn1!?kWR`RCKb4z_0<wdLD{S5+*j3Jmsy~O|k002ovPDHLkV1m;y-kJaa

literal 0
HcmV?d00001

diff --git a/app/src/main/res/drawable-xhdpi/ic_action_delete.png b/app/src/main/res/drawable-xhdpi/ic_action_delete.png
new file mode 100644
index 0000000000000000000000000000000000000000..1487306f124b1ba77501573e78888f41bb0b96fe
GIT binary patch
literal 990
zcmV<410np0P)<h;3K|Lk000e1NJLTq002M$002M;1^@s6s%dfF000A}Nkl<ZcwX&W
zIjl}W6n-y=HH09d&{!g&laNqYDoa5kp|C3`G!zsHg+f6=qaeYv6(kZ0OJylYNOTmo
zMj?U_Vhs}CC;!OJm^*XM+<V`<FXv72<^S)!=gge*&6)Mi?d~$3x{dqaH9){X1Q=(a
zH=DpHa6Ji_2#f|s0)spJ|HAJV;1lo$cny5+jk;-)fI)CzIxq{E3XE4e^bYbbfXBcy
z;I~p=B;Eu8tl7E1JYby2inP#sh};JrbRs3KA(W_-06M-9SO5$Wmai5235C1Bow|sq
zi-6fMXeBU4>rtlsN9bJv9%btPQ>#kAaOAWGU_0-N#QxzT@GZCSDg;bGq3eLjxrNuH
z_X_!(2j1r7mrKAD6t)!@kyB^`I$x3JN#Lb6?;HZ?{1$+nUYio<5vQ~yXbE80?`ToY
z`xU@QII3w58UoniZEr!FPemR3gkylHW7H6^37Pg)Z=Z77f6me2v_wft0LS@_k_=lU
za|X5~=Lr%5*xBs_w3D0<&>343Avt+*vUCJs=UAE~1T2U4BBdjow_gR;12dGmzW7tz
zI0vi%xW3S&+Yr81g#gz6UO+RqzXkd0okF?X-CThLI^P3uxy-Z-Sgc@xYlj0sX%wU)
zfQ7M8X=2S^@`Q)tdP4>Ybp9;x!^>|qt~HUs%3!4gQ;Yzv=XV3rB`w?OVc>h9ByA-4
zHDAnf7%p}J(*A`@=|ezpKOsiIOek@>t4T4#rIAop^Rz=tq_h15{yYge5+gtxYA*jO
z4%9(l$j?yI{3{nDU=N;ax3P*O^x(pEUPYtIBB2U#sVL?4+CfbOa07E+D%ZqwjYCb<
ze9^@HxcG0QwJZXrL3mq50;n!=jB=sgzDk=9nSLBMpZgEW2$&DSRW%UcNQgN|8BJ5k
zHS01I?@0+*3c)40B?a_ikq{~-x3`a(d=n3END0Ut0b&Nk`h=pMbhy;kPjDnCYXWPL
z`y6cv0{K)VG*R=;tcUn>K^g((2{7LT%y)w3he7ibA@fsVjuxgDLnI(~B+x8^{9#$L
zcF5Ud%vuhc-w-jsCC2bHy(vlp%x{a61k*1@TojmoHAWIlzZ`XAwdvR6B*FXv36fy?
zh>U9rrVmLKNicg%&XHjHprj+g^ikR3Qr7HY=^_cHkIVZ+nEYVE-`(MU0ykILJgR&$
z!?S*TtJ`lrnemBm*XBN&DkGv*_fyB@T4ih##tab91grfiPxBG*2MGKYP<l%#F#rGn
M07*qoM6N<$f;$_*VgLXD

literal 0
HcmV?d00001

diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_delete.png b/app/src/main/res/drawable-xxhdpi/ic_action_delete.png
new file mode 100644
index 0000000000000000000000000000000000000000..251f91da422b503afb01693827c75e4be9d4915e
GIT binary patch
literal 1721
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
P00000NkvXXu0mjfj7Sv9

literal 0
HcmV?d00001

diff --git a/app/src/main/res/menu/element.xml b/app/src/main/res/menu/element.xml
index 8f2cd4b..f3262ad 100644
--- a/app/src/main/res/menu/element.xml
+++ b/app/src/main/res/menu/element.xml
@@ -7,4 +7,9 @@
         android:showAsAction="always"
         android:icon="@drawable/ic_action_save"/>
 
+    <item android:id="@+id/action_remove"
+        android:title="@string/action_remove"
+        android:showAsAction="always"
+        android:icon="@drawable/ic_action_delete"/>
+
 </menu>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index db2bbf2..5cea4e6 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -39,5 +39,7 @@
     <string name="warning">Warning</string>
     <string name="status">Status</string>
     <string name="back">Back</string>
+    <string name="action_remove">Remove</string>
+
 
 </resources>