From b6751f8852ce7037e23878a3d5e910b7d4c6b59c Mon Sep 17 00:00:00 2001 From: stom79 Date: Thu, 15 Feb 2018 11:18:40 +0100 Subject: [PATCH] Adds icon for bookmark + handles click and fixes an error --- .../fr/gouv/etalab/mastodon/client/API.java | 18 ++++++----- .../mastodon/client/Entities/Status.java | 9 ++++++ .../mastodon/drawers/StatusListAdapter.java | 29 +++++++++++++++++- .../mastodon/sqlite/StatusCacheDAO.java | 12 ++++---- .../main/res/drawable-hdpi/ic_bookmark.png | Bin 0 -> 164 bytes .../res/drawable-hdpi/ic_bookmark_border.png | Bin 0 -> 229 bytes .../main/res/drawable-ldpi/ic_bookmark.png | Bin 0 -> 218 bytes .../res/drawable-ldpi/ic_bookmark_border.png | Bin 0 -> 269 bytes .../main/res/drawable-mdpi/ic_bookmark.png | Bin 0 -> 134 bytes .../res/drawable-mdpi/ic_bookmark_border.png | Bin 0 -> 168 bytes .../main/res/drawable-xhdpi/ic_bookmark.png | Bin 0 -> 190 bytes .../res/drawable-xhdpi/ic_bookmark_border.png | Bin 0 -> 247 bytes .../main/res/drawable-xxhdpi/ic_bookmark.png | Bin 0 -> 269 bytes .../drawable-xxhdpi/ic_bookmark_border.png | Bin 0 -> 359 bytes .../main/res/drawable-xxxhdpi/ic_bookmark.png | Bin 0 -> 280 bytes .../drawable-xxxhdpi/ic_bookmark_border.png | Bin 0 -> 401 bytes app/src/main/res/layout/drawer_status.xml | 8 +++++ app/src/main/res/values/strings.xml | 4 +++ 18 files changed, 65 insertions(+), 15 deletions(-) create mode 100644 app/src/main/res/drawable-hdpi/ic_bookmark.png create mode 100644 app/src/main/res/drawable-hdpi/ic_bookmark_border.png create mode 100644 app/src/main/res/drawable-ldpi/ic_bookmark.png create mode 100644 app/src/main/res/drawable-ldpi/ic_bookmark_border.png create mode 100644 app/src/main/res/drawable-mdpi/ic_bookmark.png create mode 100644 app/src/main/res/drawable-mdpi/ic_bookmark_border.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_bookmark.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_bookmark_border.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_bookmark.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_bookmark_border.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_bookmark.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_bookmark_border.png diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/API.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/API.java index d999f2098..f1e1213e5 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/API.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/API.java @@ -1683,11 +1683,13 @@ public class API { //Retrieve Application Application application = new Application(); - JSONObject arrayApplication = resobj.getJSONObject("application"); - if( arrayApplication != null){ - application.setName(arrayApplication.get("name").toString()); - application.setWebsite(arrayApplication.get("website").toString()); - } + try { + JSONObject arrayApplication = resobj.getJSONObject("application"); + if( arrayApplication != null){ + application.setName(arrayApplication.get("name").toString()); + application.setWebsite(arrayApplication.get("website").toString()); + } + }catch (Exception ignored){} status.setApplication(application); @@ -1703,7 +1705,7 @@ public class API { try { status.setFavourited(Boolean.valueOf(resobj.get("favourited").toString())); }catch (Exception e){ - status.setReblogged(false); + status.setFavourited(false); } try { status.setMuted(Boolean.valueOf(resobj.get("muted").toString())); @@ -1717,8 +1719,8 @@ public class API { } try{ status.setReblog(parseStatuses(context, resobj.getJSONObject("reblog"))); - }catch (Exception ignored){} - } catch (JSONException ignored) {} + }catch (Exception ignored){ignored.printStackTrace();} + } catch (JSONException ignored) {ignored.printStackTrace();} return status; } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Status.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Status.java index 5eb4d0adc..2b726b8b0 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Status.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Status.java @@ -79,6 +79,7 @@ public class Status implements Parcelable{ private boolean muted; private boolean pinned; private boolean sensitive; + private boolean bookmarked; private String visibility; private boolean attachmentShown = false; private boolean spoilerShown = false; @@ -775,4 +776,12 @@ public class Status implements Parcelable{ public void setMuted(boolean muted) { this.muted = muted; } + + public boolean isBookmarked() { + return bookmarked; + } + + public void setBookmarked(boolean bookmarked) { + this.bookmarked = bookmarked; + } } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java index ac65fe50c..4a064d486 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java @@ -110,6 +110,7 @@ import fr.gouv.etalab.mastodon.interfaces.OnRetrieveFeedsInterface; import fr.gouv.etalab.mastodon.interfaces.OnRetrieveRepliesInterface; import fr.gouv.etalab.mastodon.sqlite.AccountDAO; import fr.gouv.etalab.mastodon.sqlite.Sqlite; +import fr.gouv.etalab.mastodon.sqlite.StatusCacheDAO; import fr.gouv.etalab.mastodon.sqlite.TempMuteDAO; import static fr.gouv.etalab.mastodon.activities.MainActivity.currentLocale; @@ -262,7 +263,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct TextView status_reply; ImageView status_pin; ImageView status_privacy; - FloatingActionButton status_translate; + FloatingActionButton status_translate, status_bookmark; LinearLayout status_container2; LinearLayout status_container3; LinearLayout main_container; @@ -316,6 +317,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct status_reply = itemView.findViewById(R.id.status_reply); status_privacy = itemView.findViewById(R.id.status_privacy); status_translate = itemView.findViewById(R.id.status_translate); + status_bookmark = itemView.findViewById(R.id.status_bookmark); status_content_translated_container = itemView.findViewById(R.id.status_content_translated_container); main_container = itemView.findViewById(R.id.main_container); status_spoiler_container = itemView.findViewById(R.id.status_spoiler_container); @@ -468,6 +470,10 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct holder.status_replies.setVisibility(View.GONE); } } + if( status.isBookmarked()) + holder.status_bookmark.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_bookmark)); + else + holder.status_bookmark.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_bookmark_border)); changeDrawableColor(context, R.drawable.ic_fiber_new,R.color.mastodonC4); if( status.isNew()) holder.new_element.setVisibility(View.VISIBLE); @@ -596,6 +602,27 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct } } }); + + holder.status_bookmark.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); + if( status.isBookmarked()){ + Status status1 = new StatusCacheDAO(context, db).getStatus(status.getId()); + if( status1 == null) + new StatusCacheDAO(context, db).insertStatus(StatusCacheDAO.BOOKMARK_CACHE, status); + else + new StatusCacheDAO(context, db).updateStatus(StatusCacheDAO.BOOKMARK_CACHE, status); + status.setBookmarked(true); + Toast.makeText(context, R.string.status_bookmarked, Toast.LENGTH_LONG).show(); + }else { + new StatusCacheDAO(context, db).remove(StatusCacheDAO.BOOKMARK_CACHE, status); + status.setBookmarked(false); + Toast.makeText(context, R.string.status_unbookmarked, Toast.LENGTH_LONG).show(); + } + notifyStatusChanged(status); + } + }); holder.status_content_translated.setMovementMethod(LinkMovementMethod.getInstance()); //-------- END -> Manages translations diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/sqlite/StatusCacheDAO.java b/app/src/main/java/fr/gouv/etalab/mastodon/sqlite/StatusCacheDAO.java index 1239f1622..7b231ccce 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/sqlite/StatusCacheDAO.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/sqlite/StatusCacheDAO.java @@ -100,7 +100,7 @@ public class StatusCacheDAO { * @param status Status * @return boolean */ - public int updateStatus(Status status ) { + public int updateStatus(int cacheType, Status status ) { ContentValues values = new ContentValues(); String instance = Helper.getLiveInstance(context); values.put(Sqlite.COL_REBLOGS_COUNT, status.getReblogs_count()); @@ -110,8 +110,8 @@ public class StatusCacheDAO { values.put(Sqlite.COL_MUTED, status.isMuted()); values.put(Sqlite.COL_PINNED, status.isPinned()); return db.update(Sqlite.TABLE_STATUSES_CACHE, - values, Sqlite.COL_STATUS_ID + " = ? AND " + Sqlite.COL_INSTANCE + " = ? ", - new String[]{String.valueOf(status.getId()), instance}); + values, Sqlite.COL_STATUS_ID + " = ? AND " + Sqlite.COL_INSTANCE + " = ? " + Sqlite.COL_CACHED_ACTION + " = ?", + new String[]{String.valueOf(status.getId()), instance, String.valueOf(cacheType)}); } @@ -121,9 +121,9 @@ public class StatusCacheDAO { * Remove stored status * @return int */ - public int remove(Status status){ + public int remove(int cacheType, Status status){ String instance = Helper.getLiveInstance(context); - return db.delete(Sqlite.TABLE_STATUSES_CACHE, Sqlite.COL_STATUS_ID + " = \"" + status.getId() + "\" AND " + Sqlite.COL_INSTANCE + " = \"" + instance + "\"", null); + return db.delete(Sqlite.TABLE_STATUSES_CACHE, Sqlite.COL_CACHED_ACTION + " = \""+ cacheType +"\" AND " + Sqlite.COL_STATUS_ID + " = \"" + status.getId() + "\" AND " + Sqlite.COL_INSTANCE + " = \"" + instance + "\"", null); } public int removeAllStatus(int cacheType){ @@ -151,7 +151,7 @@ public class StatusCacheDAO { * Returns a cached status by id in db * @return stored status StoredStatus */ - public Status getStatus(long id){ + public Status getStatus(String id){ String instance = Helper.getLiveInstance(context); try { Cursor c = db.query(Sqlite.TABLE_STATUSES_CACHE, null, Sqlite.COL_STATUS_ID + " = '" + id + "' AND " + Sqlite.COL_INSTANCE + " = '" + instance, null, null, null, null, null); diff --git a/app/src/main/res/drawable-hdpi/ic_bookmark.png b/app/src/main/res/drawable-hdpi/ic_bookmark.png new file mode 100644 index 0000000000000000000000000000000000000000..b3c3729ce9a3286e37fcbf3868f3ec9dc9dfb289 GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^(jd&i0wmS%+S~(D*`6+rAr-fh6C|=8?Em(^^S^jP z>*Rmgk1whG{QtQA&V$GGoNsO|`uCVU@WxhEfeX_NR^^7=?zs5v`Ttx0FFO2bugJ~+ zSN>;ubJxkg@BjRtwqaZM|KNYci#m&$j_N(SmiFnsoWEuA|NAK&qP+~t+p}L3vx^@9 PTFc<+>gTe~DWM4fZF)_6 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_bookmark_border.png b/app/src/main/res/drawable-hdpi/ic_bookmark_border.png new file mode 100644 index 0000000000000000000000000000000000000000..a7dadc808d94a822a8bc1b235aefab6e55fe0873 GIT binary patch literal 229 zcmV^P)U32Wrl%Q45W=vYM^;q?O zKE*dlJ-Tz$w!F&Li=S4UcQB!UVRL$;U-8eP4qa_FUYn%ISLUCd3Pjs+%0B)5`NHej z0sM^blHYbOJURXTgF_z}qC@Yc@7Pys=^nh{*pn5~vJ+p2Us-xDdH=Nc>AZ5;(-l&; SuAT>UEQ6=3pUXO@geCyghFnJg literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-ldpi/ic_bookmark_border.png b/app/src/main/res/drawable-ldpi/ic_bookmark_border.png new file mode 100644 index 0000000000000000000000000000000000000000..0d3f4179e50fc1e99841a847013a823d3f20550a GIT binary patch literal 269 zcmV+o0rLKdP)6Y+ zGg)ohx>GoFD-1)Ysw%Ip>wVKS88{7)Ntdr&zv4JvVk87AxCD;@N~*(*=M3tTV_*ork}1CoHh~asNmC|NqP$ z1^@rEm8c&3zmZWn#FZ~X)Urowk;}#X|8F;Zkk50S|Ih!|dah?H86)Q#h`#)D{_pv2 ir9<2z7Z;WpF)^%PEBmq4ZhkJ%U}1CoHh~asNmC|NqP$ z1^@rEm8c&3|NsB~hD9%!0*-KmPGk-^!MOiKN8p$FU+uNyT>rcNzy7bDt;O`eYk}si z|Nnpgum8WD@u9s!wtboF{D1zx)^j~u$rw4`K=kFG^MB8GD;?q%xwx>*h>5|cZ*9ic T!hL6eRx^0I`njxgN@xNABh^X& literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_bookmark.png b/app/src/main/res/drawable-xhdpi/ic_bookmark.png new file mode 100644 index 0000000000000000000000000000000000000000..f4ac0d098e79c6956c84542796fad8f5b7f4ccad GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k0wldT1B8K8tEY=&NX4z>1PNA^=Knqa|NguF zFaH4Z>jo_ePU+46>a8CMnrHm^v& zaQ?sdzuAlrg%rATn&17*||%u<<&e ou=u}_OXwS+|GjRr&6hAS?DevI)3`9?5zs*lp00i_>zopr0FP=)Bme*a literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_bookmark_border.png b/app/src/main/res/drawable-xhdpi/ic_bookmark_border.png new file mode 100644 index 0000000000000000000000000000000000000000..b42c2c44dc9decd1176f5b5799429e4d5482355e GIT binary patch literal 247 zcmV+m@sxIuGA6au6F>nJKmqibOGy`l z$ayf(b0_~3M8bjRWVvegBz~Y9XWE~ey5%HQXV9pDij71ir>Q(Z9oO-i$)wi#gBp&k xzN%}IDPlNCV-b95?^~002ovPDHLkV1f>6Wz_%x literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_bookmark.png b/app/src/main/res/drawable-xxhdpi/ic_bookmark.png new file mode 100644 index 0000000000000000000000000000000000000000..553bd15430370dea049f8f8cb9bba6834b638e62 GIT binary patch literal 269 zcmV+o0rLKdP)Pi7zN-X+G?WCpgR~FOC7?*1z5%jw6U?bF#?5g2iKq`JWnkM!Mph1i9zz-YX}_q zlGhNFVwk@O2AE*dl{88FuJPu?{Y9%@ti4wt`RAGHmaK9c0+a3yWpg z*$YdE5hK<#EFwmXSi7*87%^h)!jh(7IgYw{{aA_(#?KQIeU;XS-4N=Z-}0|;sPBFm zdknWg@b+YYWo1-ntQgML@~BQ&bvRp#QNJ3MmlIhRi}FC2zOY6TWj1S;9>`OgKf=m z$ir^nQhgrw;DkN$u$R1T!FoX!dDn!8z2XZk1QX02 zJEQCY^U=dBTba?7zdP(0L&SyO?3nHZ^wEgunm$dY{$8)-C0!{3kYA2?nm6 Zw{V8>NtcD5&Oom+c)I$ztaD0e0szK*Y5D*F literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_bookmark_border.png b/app/src/main/res/drawable-xxxhdpi/ic_bookmark_border.png new file mode 100644 index 0000000000000000000000000000000000000000..72c1e14b70433157479b65f50c7d8df87eb05b41 GIT binary patch literal 401 zcmV;C0dD?@P)p`E^a6T<6rR8%2tiR4(raa-AQ(i6=I@7! zx|r9z3<9kaJDXvkljxw+FwjGE&{G)b_19KOz~H-&Yoj-T1QJLffdrax&`=J*E1wh!x@Cu% z@71&H+MUWkUD`~I_+8VsCnbYEOUimLtH8*hbV*q=uE2<((IsX7Z~I$d6p*_l{{n+S v{w4Vp7zD~+lDojbpTH%LKmrLQP}TDe*x_;$&_w1200000NkvXXu0mjfdo#73 literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/drawer_status.xml b/app/src/main/res/layout/drawer_status.xml index 8041b7861..2c5e1af28 100644 --- a/app/src/main/res/layout/drawer_status.xml +++ b/app/src/main/res/layout/drawer_status.xml @@ -90,6 +90,14 @@ app:fabSize="mini" android:layout_marginTop="10dp" android:src="@drawable/ic_translate" /> + %d reply %d replies + + Status has been added to bookmarks! + Status was removed from bookmarks! + %d s %d m