From 060e5e8e24ebaf15a2e14d795ed84d3659cccf90 Mon Sep 17 00:00:00 2001 From: jendib Date: Sun, 10 May 2015 21:44:39 +0200 Subject: [PATCH] Android: ACLs in right drawer --- .../docs/activity/DocumentViewActivity.java | 98 ++++++++++------ .../sismics/docs/adapter/AclListAdapter.java | 77 +++++++++++++ .../drawable-xhdpi/ic_create_grey600_24dp.png | Bin 0 -> 379 bytes .../drawable-xhdpi/ic_create_white_24dp.png | Bin 378 -> 0 bytes .../ic_file_download_grey600_24dp.png | Bin 0 -> 283 bytes .../ic_file_upload_grey600_24dp.png | Bin 0 -> 275 bytes .../drawable-xhdpi/ic_people_grey600_24dp.png | Bin 0 -> 476 bytes .../ic_create_grey600_24dp.png | Bin 0 -> 493 bytes .../drawable-xxhdpi/ic_create_white_24dp.png | Bin 490 -> 0 bytes .../ic_file_download_grey600_24dp.png | Bin 0 -> 353 bytes .../ic_file_upload_grey600_24dp.png | Bin 0 -> 339 bytes .../ic_people_grey600_24dp.png | Bin 0 -> 623 bytes .../app/src/main/res/layout/acl_list_item.xml | 65 +++++++++++ .../res/layout/document_view_activity.xml | 108 +++++++++++++++++- .../main/res/menu/document_view_activity.xml | 32 ------ .../app/src/main/res/values/strings.xml | 9 +- 16 files changed, 319 insertions(+), 70 deletions(-) create mode 100644 docs-android/app/src/main/java/com/sismics/docs/adapter/AclListAdapter.java create mode 100644 docs-android/app/src/main/res/drawable-xhdpi/ic_create_grey600_24dp.png delete mode 100644 docs-android/app/src/main/res/drawable-xhdpi/ic_create_white_24dp.png create mode 100644 docs-android/app/src/main/res/drawable-xhdpi/ic_file_download_grey600_24dp.png create mode 100644 docs-android/app/src/main/res/drawable-xhdpi/ic_file_upload_grey600_24dp.png create mode 100644 docs-android/app/src/main/res/drawable-xhdpi/ic_people_grey600_24dp.png create mode 100644 docs-android/app/src/main/res/drawable-xxhdpi/ic_create_grey600_24dp.png delete mode 100644 docs-android/app/src/main/res/drawable-xxhdpi/ic_create_white_24dp.png create mode 100644 docs-android/app/src/main/res/drawable-xxhdpi/ic_file_download_grey600_24dp.png create mode 100644 docs-android/app/src/main/res/drawable-xxhdpi/ic_file_upload_grey600_24dp.png create mode 100644 docs-android/app/src/main/res/drawable-xxhdpi/ic_people_grey600_24dp.png create mode 100644 docs-android/app/src/main/res/layout/acl_list_item.xml diff --git a/docs-android/app/src/main/java/com/sismics/docs/activity/DocumentViewActivity.java b/docs-android/app/src/main/java/com/sismics/docs/activity/DocumentViewActivity.java index 82c17698..5ecc3dee 100644 --- a/docs-android/app/src/main/java/com/sismics/docs/activity/DocumentViewActivity.java +++ b/docs-android/app/src/main/java/com/sismics/docs/activity/DocumentViewActivity.java @@ -23,11 +23,14 @@ import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; +import android.widget.Button; import android.widget.ImageView; +import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import com.sismics.docs.R; +import com.sismics.docs.adapter.AclListAdapter; import com.sismics.docs.adapter.FilePagerAdapter; import com.sismics.docs.event.DocumentDeleteEvent; import com.sismics.docs.event.DocumentEditEvent; @@ -186,6 +189,58 @@ public class DocumentViewActivity extends AppCompatActivity { ImageView sharedImageView = (ImageView) findViewById(R.id.sharedImageView); sharedImageView.setVisibility(shared ? View.VISIBLE : View.GONE); + // Action edit document + Button button = (Button) findViewById(R.id.actionEditDocument); + button.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent = new Intent(DocumentViewActivity.this, DocumentEditActivity.class); + intent.putExtra("document", DocumentViewActivity.this.document.toString()); + startActivityForResult(intent, REQUEST_CODE_EDIT_DOCUMENT); + } + }); + + // Action upload file + button = (Button) findViewById(R.id.actionUploadFile); + button.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent = new Intent(Intent.ACTION_GET_CONTENT) + .setType("*/*") + .putExtra("android.intent.extra.ALLOW_MULTIPLE", true) + .addCategory(Intent.CATEGORY_OPENABLE); + startActivityForResult(Intent.createChooser(intent, getText(R.string.upload_from)), REQUEST_CODE_ADD_FILE); + } + }); + + // Action download document + button = (Button) findViewById(R.id.actionDownload); + button.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + downloadZip(); + } + }); + + // Action delete document + button = (Button) findViewById(R.id.actionDelete); + button.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + deleteDocument(); + } + }); + + // Action share + button = (Button) findViewById(R.id.actionSharing); + button.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogFragment dialog = DocShareFragment.newInstance(DocumentViewActivity.this.document.optString("id")); + dialog.show(getSupportFragmentManager(), "DocShareFragment"); + } + }); + // Grab the attached files updateFiles(); @@ -217,37 +272,10 @@ public class DocumentViewActivity extends AppCompatActivity { downloadCurrentFile(); return true; - case R.id.download_document: - downloadZip(); - return true; - - case R.id.share: - DialogFragment dialog = DocShareFragment.newInstance(document.optString("id")); - dialog.show(getSupportFragmentManager(), "DocShareFragment"); - return true; - - case R.id.upload_file: - Intent intent = new Intent(Intent.ACTION_GET_CONTENT) - .setType("*/*") - .putExtra("android.intent.extra.ALLOW_MULTIPLE", true) - .addCategory(Intent.CATEGORY_OPENABLE); - startActivityForResult(Intent.createChooser(intent, getText(R.string.upload_from)), REQUEST_CODE_ADD_FILE); - return true; - - case R.id.edit: - intent = new Intent(this, DocumentEditActivity.class); - intent.putExtra("document", document.toString()); - startActivityForResult(intent, REQUEST_CODE_EDIT_DOCUMENT); - return true; - case R.id.delete_file: deleteCurrentFile(); return true; - case R.id.delete_document: - deleteDocument(); - return true; - case android.R.id.home: finish(); return true; @@ -525,17 +553,21 @@ public class DocumentViewActivity extends AppCompatActivity { DocumentResource.get(this, document.optString("id"), new JsonHttpResponseHandler() { @Override public void onSuccess(int statusCode, Header[] headers, JSONObject response) { - boolean writable = response.optBoolean("writable"); + document = response; + boolean writable = document.optBoolean("writable"); if (menu != null) { - menu.findItem(R.id.share).setVisible(writable); - menu.findItem(R.id.upload_file).setVisible(writable); - menu.findItem(R.id.edit).setVisible(writable); menu.findItem(R.id.delete_file).setVisible(writable); - menu.findItem(R.id.delete_document).setVisible(writable); } - // TODO Show the ACLs in a sliding panel from the right + findViewById(R.id.actionEditDocument).setVisibility(writable ? View.VISIBLE : View.INVISIBLE); + findViewById(R.id.actionUploadFile).setVisibility(writable ? View.VISIBLE : View.INVISIBLE); + findViewById(R.id.actionSharing).setVisibility(writable ? View.VISIBLE : View.INVISIBLE); + findViewById(R.id.actionDelete).setVisibility(writable ? View.VISIBLE : View.INVISIBLE); + + // ACLs + ListView aclListView = (ListView) findViewById(R.id.aclListView); + aclListView.setAdapter(new AclListAdapter(document.optJSONArray("acls"))); } }); } diff --git a/docs-android/app/src/main/java/com/sismics/docs/adapter/AclListAdapter.java b/docs-android/app/src/main/java/com/sismics/docs/adapter/AclListAdapter.java new file mode 100644 index 00000000..f7aabce7 --- /dev/null +++ b/docs-android/app/src/main/java/com/sismics/docs/adapter/AclListAdapter.java @@ -0,0 +1,77 @@ +package com.sismics.docs.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; + +import com.sismics.docs.R; + +import org.json.JSONArray; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; + +/** + * ACL list adapter. + * + * @author bgamard. + */ +public class AclListAdapter extends BaseAdapter { + /** + * Shares. + */ + private List acls; + + /** + * ACL list adapter. + * + * @param acls ACLs + */ + public AclListAdapter(JSONArray acls) { + this.acls = new ArrayList<>(); + + // Extract only share ACLs + for (int i = 0; i < acls.length(); i++) { + JSONObject acl = acls.optJSONObject(i); + this.acls.add(acl); + } + } + + @Override + public int getCount() { + return acls.size(); + } + + @Override + public JSONObject getItem(int position) { + return acls.get(position); + } + + @Override + public long getItemId(int position) { + return getItem(position).optString("id").hashCode(); + } + + @Override + public View getView(int position, View view, final ViewGroup parent) { + if (view == null) { + LayoutInflater vi = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); + view = vi.inflate(R.layout.acl_list_item, parent, false); + } + + // Fill the view + final JSONObject acl = getItem(position); + TextView typeTextView = (TextView) view.findViewById(R.id.typeTextView); + typeTextView.setText(acl.optString("type")); + TextView nameTextView = (TextView) view.findViewById(R.id.nameTextView); + nameTextView.setText(acl.optString("name")); + TextView permTextView = (TextView) view.findViewById(R.id.permTextView); + permTextView.setText(acl.optString("perm")); + + return view; + } +} diff --git a/docs-android/app/src/main/res/drawable-xhdpi/ic_create_grey600_24dp.png b/docs-android/app/src/main/res/drawable-xhdpi/ic_create_grey600_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..4c95bd5770afb117fc5363e259ee6232d445b2af GIT binary patch literal 379 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}a}tg=CK)Uj~LMH3o);76yi2K%s^g z3=E|}g|8AA7_4S6Fo+k-*%fF5lweBoc6VX;-`;;_Kaj^+;1OBOz`!jG!i)^F=12eq zKYO}3hD02Gd;K8iAqRohhpevy4EJ`huNIucmE*YPK-ivJjw0OxN4gg&sqEfty}MF> zd+NLY?2{E${O;^{tQF8WC-Ow(yrKywEgY21D{G&x5ZqJKlJG2)iFsRGoZwiq2=cf$URo!}Gi#t-jyA5l9qoiS>k zzr*`Q5&ztE0u`o)m&dd5oO{mbV8`C@$&BHduEN~?H-4HpoLJ7_Wyd$+lVQWO>x@Zp z%xnJ0{NAMeytZN9cgCuF>@R-CJg_pE&(82uhT+t0h8f!#EatOu{QNaNlJVFc#>L;y VrKz=kF}I4okhJ31{w9syt6I zFaG|YeX_TQR>*0;&<3U_XZZMQ3J+&VE^urAXCk)nG&@J?Jr#=wJpV0Ns$IpKcW5<8 zwJUsl)+i-wXTjEC&HYDyt?!nI;sXW6HH(h6-Bv0$Jl-;WKG%G-7RFl{?y;ytFI zpSs^u)z9s2uzAn)X%F{_&pQuf=h^Wqe6nPi>d%~F$9e&zY5M*%Od8MF#f4XFO!+Mg P3LpkgS3j3^P6ISpu0q6J#WFGGw$6zf_`@QTn!&So0$7b*ip`!-AwS= z#bz_L1{=Fj8%~Y$J-X#gXNrq2x*n)3`|yfo;&b)gMfYa;+VfwzIjiA1LvAqRe^kSK|#PJ@b8OxoAtLZP|zwbR}*P+yKubPA;!Qz^UWzHmOJ5=-xL-s zsk9bvOK7m2Z^6WV&c=1Y0aJegi4SKEvoLM>tRTo-Ca0uy;5>5+|B;^)J}~IW3z#)L zk3Gb+V~_I|M!S5W8w)~TH&y#?Vqj!qdGYzT=YoA}IbX27n921+d;=3-zoX*O?rTqh P&SLO%^>bP0l+XkK004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00002VoOIv0RM-N%)bBt010qN zS#tmY3ljhU3ljkVnw%H_00C4~gho!--OQP4<@D-_2O zZwXu!bTR|(BJK)Y6!bF#{D=nv7X`tr1x{wbZDB47nwbGdg}ErG@{}5Ps1)Xf9@=AK z+-0Q{FR&`AoYG~$fP3m0k4WNXUC*_k#x57M@$eZk#OIkd=j>3M=se_G%TofI18#B_ zfkN@cHT#LrWse^%j|nQA@R1uGuXpM!M000)K5pB}S;2YLWivY1i;jm)tGtzpS14Xt z)_zYT9=2SSj#nryM}ln~4_iK`68O>5(D1NDO004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00002VoOIv0RM-N%)bBt010qN zS#tmY3ljhU3ljkVnw%H_00Cu5L_t(&-tF2wP6I&<1>j9Xb}vFou7h$9cN~HOQE-j{ zl08$3P(TYsKuXvdkL~R9Y+?BVpEUk?#dOpytGWOMC_n*1)rwZj0rm7kU-U`Ov|a*e zppm|RYe#)+&^bpy^5#@Y{+tS_1&1XeLE9pSAz`2Fp+Z{wH#JXs@&OIB5t2SUKm(0* zpgR%ihzI>mmW=d>2AvOjos{SX3;Mrzcv8wATI?DulTzvKqqlONl*%y#enbszxe8W4nI2fbrBRuGJ10|7Y}5R{__fjL?boTCFda5Nwn jPJAQ?P=Epyph^7zYj6*RQp!$^00000NkvXXu0mjf2004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00002VoOIv0RM-N%)bBt010qN zS#tmY3ljhU3ljkVnw%H_00Cl2L_t(&-tF44Q3Npz1<<{O+ie6w+F_`LA_y1)>M(F@ zO#~1?`U#kuIaph^bo=EEBsK76Y)e1zfMHub1SmiO3J|Mz*lhZa0*QNMcNNm!|5D4O2OrRct47kN2WY~KcU(7- zKKP*H%W5Otvq7g1y-rHF;DY|o9hsE!i;V+3LDM_hlo%l72 z)~p-k2OM zh|bZ0bev}kM+0)Dtspl}8_1E<0&?ZlK_d>HoEpfTBZG9Dmo+#Ns0*hI>clC5 zx^eQLj+{KGBPS2)$T<&0;G6@ZaO|L04#x_jacm$W#{!~q^dK@v3!-y$AP0^HI(3)EF2VS{N990fib~ zFff!FFfhDIU|_JC!N4G1FlSew4N!t9$=lt9;eUJonf*W>XMsm#F#`j)FbFd;%$g$s z6ujx_;uw-~@9mA-T+IdoEf0TO*qit3Nmb&)j~?o pd?x=N&j&hZ5g#MSX$!a;#jYGkGF(%6b`sE&44$rjF6*2UngI3mg3tf} literal 0 HcmV?d00001 diff --git a/docs-android/app/src/main/res/drawable-xxhdpi/ic_file_upload_grey600_24dp.png b/docs-android/app/src/main/res/drawable-xxhdpi/ic_file_upload_grey600_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..77d80081f558af8d8114ae1b6de13fbd8017dd4e GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhaw6p}rHd>I(3)EF2VS{N990fib~ zFff!FFfhDIU|_JC!N4G1FlSew4N!t9$=lt9;eUJonf*W>XMsm#F#`j)FbFd;%$g$s z6g=(e;uw-~@9outT!$QZS{}Z2uHI%>DHddTU!Cx2f%Wp1DXg|dTppGejMaTlHN+K9QjykWGSMrF6ndaYD$u67GXYWnHa?Kq_9av_DQjmis+QbEFMxC=O=n{t!Pu8 z^lO1tpUbPpEK8=7wd=Y!&7c40TLS|l6AK5(32e-=Vh#=e__oLx3Iq9f6dgcvUtAYx Ym+&VUzL)oz3G^0&r>mdKI;Vst0C~!D%>V!Z literal 0 HcmV?d00001 diff --git a/docs-android/app/src/main/res/drawable-xxhdpi/ic_people_grey600_24dp.png b/docs-android/app/src/main/res/drawable-xxhdpi/ic_people_grey600_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..198a57955e0afe4540423cec9fd2232251939e1a GIT binary patch literal 623 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhaw6p}rHd>I(3)EF2VS{N990fib~ zFff!FFfhDIU|_JC!N4G1FlSew4N!t9$=lt9;eUJonf*W>XMsm#F#`j)FbFd;%$g&? zz`*$2)5S3)YwVQJj64FYZots%bRjj>UweI`$^E9S>$jo2b%9=V)Lqz(+ zhq*gLpPY1>dEi^vBrluD6$-Kwf*+l9GJV;gt~yWW%0#{l&5tRHlPwO&YzqjrdJx#D z&i!;Lv)`18O#x9>39+61AG~YjZ~Swcsm^`$6opT)WzrXv5`TJpg$Ms>uD&A^t)6Y3SU;&Eexc~bpJq$7-UVy5KV_U7WM{oZ zKA$HmP;I3}u+Vgu{Qb33@9QkvPoFR<(=&K2S>*cg?)ha4*Cam`ojq^&8~=)XJ71S> zc@bf_@oCU5zVo+LjVmrMOJ3TT*?u9e;+~%6l~u`44=8RCnYZ2h)veZ5d<#22?1{Z} zRqxB&U;Zj4`P09&2|Pb;Wpdt0=ZMo{p+|FPA%fp+O8hsa7j3Wn=eq*a0fVQjpUXO@ GgeCxbQW9bS literal 0 HcmV?d00001 diff --git a/docs-android/app/src/main/res/layout/acl_list_item.xml b/docs-android/app/src/main/res/layout/acl_list_item.xml new file mode 100644 index 00000000..40384f83 --- /dev/null +++ b/docs-android/app/src/main/res/layout/acl_list_item.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-android/app/src/main/res/layout/document_view_activity.xml b/docs-android/app/src/main/res/layout/document_view_activity.xml index b0e67d1d..19744f59 100644 --- a/docs-android/app/src/main/res/layout/document_view_activity.xml +++ b/docs-android/app/src/main/res/layout/document_view_activity.xml @@ -49,6 +49,94 @@ android:background="#fff" android:elevation="5dp"> + + + + + + +