From 3ae0d91cb435522d4d6bf2adce35904e1b69da2b Mon Sep 17 00:00:00 2001 From: stom79 Date: Sat, 28 Apr 2018 12:27:49 +0200 Subject: [PATCH] Fixes issue #170 - Add a way to display not cropped preview images --- .../mastodon/drawers/StatusListAdapter.java | 229 ++++++++++++++---- .../mastodon/fragments/SettingsFragment.java | 14 ++ .../gouv/etalab/mastodon/helper/Helper.java | 1 + .../res/layout-sw600dp/fragment_settings.xml | 7 + app/src/main/res/layout/drawer_status.xml | 116 +++++++++ .../main/res/layout/drawer_status_focused.xml | 114 +++++++++ app/src/main/res/layout/fragment_settings.xml | 7 + app/src/main/res/values/strings.xml | 1 + 8 files changed, 436 insertions(+), 53 deletions(-) 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 1143ef184..1ea64ca05 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 @@ -252,6 +252,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct Button status_show_more; ImageView status_more; LinearLayout status_document_container; + RelativeLayout status_horizontal_document_container; ImageView status_prev1; ImageView status_prev2; ImageView status_prev3; @@ -260,6 +261,14 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct ImageView status_prev2_play; ImageView status_prev3_play; ImageView status_prev4_play; + ImageView status_prev1_h; + ImageView status_prev2_h; + ImageView status_prev3_h; + ImageView status_prev4_h; + ImageView status_prev1_play_h; + ImageView status_prev2_play_h; + ImageView status_prev3_play_h; + ImageView status_prev4_play_h; RelativeLayout status_prev4_container; TextView status_reply; ImageView status_pin; @@ -282,7 +291,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct TextView status_cardview_title, status_cardview_content, status_cardview_url; FrameLayout status_cardview_video; WebView status_cardview_webview; - ImageView hide_preview; + ImageView hide_preview, hide_preview_h; TextView status_toot_app; public View getView(){ @@ -294,6 +303,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct loader_replies = itemView.findViewById(R.id.loader_replies); fetch_more = itemView.findViewById(R.id.fetch_more); status_document_container = itemView.findViewById(R.id.status_document_container); + status_horizontal_document_container = itemView.findViewById(R.id.status_horizontal_document_container); status_content = itemView.findViewById(R.id.status_content); status_content_translated = itemView.findViewById(R.id.status_content_translated); status_account_username = itemView.findViewById(R.id.status_account_username); @@ -315,6 +325,14 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct status_prev2_play = itemView.findViewById(R.id.status_prev2_play); status_prev3_play = itemView.findViewById(R.id.status_prev3_play); status_prev4_play = itemView.findViewById(R.id.status_prev4_play); + status_prev1_h = itemView.findViewById(R.id.status_prev1_h); + status_prev2_h = itemView.findViewById(R.id.status_prev2_h); + status_prev3_h = itemView.findViewById(R.id.status_prev3_h); + status_prev4_h = itemView.findViewById(R.id.status_prev4_h); + status_prev1_play_h = itemView.findViewById(R.id.status_prev1_play_h); + status_prev2_play_h = itemView.findViewById(R.id.status_prev2_play_h); + status_prev3_play_h = itemView.findViewById(R.id.status_prev3_play_h); + status_prev4_play_h = itemView.findViewById(R.id.status_prev4_play_h); status_container2 = itemView.findViewById(R.id.status_container2); status_container3 = itemView.findViewById(R.id.status_container3); status_prev4_container = itemView.findViewById(R.id.status_prev4_container); @@ -343,6 +361,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct status_cardview_video = itemView.findViewById(R.id.status_cardview_video); status_cardview_webview = itemView.findViewById(R.id.status_cardview_webview); hide_preview = itemView.findViewById(R.id.hide_preview); + hide_preview_h = itemView.findViewById(R.id.hide_preview_h); status_toot_app = itemView.findViewById(R.id.status_toot_app); } } @@ -439,6 +458,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct final String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null); boolean displayBookmarkButton = sharedpreferences.getBoolean(Helper.SET_SHOW_BOOKMARK, true); + boolean fullAttachement = sharedpreferences.getBoolean(Helper.SET_FULL_PREVIEW, false); if( displayBookmarkButton) holder.status_bookmark.setVisibility(View.VISIBLE); @@ -810,7 +830,10 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct } if( status.getReblog() == null) { if (status.getMedia_attachments().size() < 1) { - holder.status_document_container.setVisibility(View.GONE); + if( fullAttachement ) + holder.status_horizontal_document_container.setVisibility(View.GONE); + else + holder.status_document_container.setVisibility(View.GONE); holder.status_show_more.setVisibility(View.GONE); } else { //If medias are loaded without any conditions or if device is on wifi @@ -824,7 +847,10 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct holder.status_show_more.setText(textShowMore); if (!status.isAttachmentShown()) { holder.status_show_more.setVisibility(View.VISIBLE); - holder.status_document_container.setVisibility(View.GONE); + if( fullAttachement ) + holder.status_horizontal_document_container.setVisibility(View.GONE); + else + holder.status_document_container.setVisibility(View.GONE); } else { loadAttachments(status, holder); } @@ -833,7 +859,10 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct }else { //Attachments for reblogs if (status.getReblog().getMedia_attachments().size() < 1) { - holder.status_document_container.setVisibility(View.GONE); + if( fullAttachement ) + holder.status_horizontal_document_container.setVisibility(View.GONE); + else + holder.status_document_container.setVisibility(View.GONE); holder.status_show_more.setVisibility(View.GONE); } else { //If medias are loaded without any conditions or if device is on wifi @@ -847,7 +876,10 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct holder.status_show_more.setText(textShowMore); if (!status.isAttachmentShown()) { holder.status_show_more.setVisibility(View.VISIBLE); - holder.status_document_container.setVisibility(View.GONE); + if( fullAttachement ) + holder.status_horizontal_document_container.setVisibility(View.GONE); + else + holder.status_document_container.setVisibility(View.GONE); } else { loadAttachments(status.getReblog(), holder); } @@ -855,22 +887,40 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct } } - holder.hide_preview.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - status.setAttachmentShown(!status.isAttachmentShown()); - if( status.getReblog() != null) - status.getReblog().setSensitive(true); - else - status.setSensitive(true); + if(!fullAttachement) + holder.hide_preview.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + status.setAttachmentShown(!status.isAttachmentShown()); + if( status.getReblog() != null) + status.getReblog().setSensitive(true); + else + status.setSensitive(true); - if( theme == Helper.THEME_DARK) - changeDrawableColor(context, R.drawable.ic_photo,R.color.dark_text); - else - changeDrawableColor(context, R.drawable.ic_photo,R.color.mastodonC4); - notifyStatusChanged(status); - } - }); + if( theme == Helper.THEME_DARK) + changeDrawableColor(context, R.drawable.ic_photo,R.color.dark_text); + else + changeDrawableColor(context, R.drawable.ic_photo,R.color.mastodonC4); + notifyStatusChanged(status); + } + }); + else + holder.hide_preview_h.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + status.setAttachmentShown(!status.isAttachmentShown()); + if( status.getReblog() != null) + status.getReblog().setSensitive(true); + else + status.setSensitive(true); + + if( theme == Helper.THEME_DARK) + changeDrawableColor(context, R.drawable.ic_photo,R.color.dark_text); + else + changeDrawableColor(context, R.drawable.ic_photo,R.color.mastodonC4); + notifyStatusChanged(status); + } + }); //Toot was translated and user asked to see it @@ -1535,62 +1585,132 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct private void loadAttachments(final Status status, final ViewHolder holder){ + SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); + boolean fullAttachement = sharedpreferences.getBoolean(Helper.SET_FULL_PREVIEW, false); List attachments = status.getMedia_attachments(); + if( attachments != null && attachments.size() > 0){ int i = 0; - holder.status_document_container.setVisibility(View.VISIBLE); - if( attachments.size() == 1){ - holder.status_container2.setVisibility(View.GONE); - if( attachments.get(0).getUrl().trim().contains("missing.png")) - holder.status_document_container.setVisibility(View.GONE); - }else if(attachments.size() == 2){ - holder.status_container2.setVisibility(View.VISIBLE); - holder.status_container3.setVisibility(View.GONE); - holder.status_prev4_container.setVisibility(View.GONE); - if( attachments.get(1).getUrl().trim().contains("missing.png")) + if(fullAttachement) + holder.status_horizontal_document_container.setVisibility(View.VISIBLE); + else + holder.status_document_container.setVisibility(View.VISIBLE); + if( attachments.size() == 1 ){ + if( !fullAttachement) holder.status_container2.setVisibility(View.GONE); - }else if( attachments.size() == 3){ - holder.status_container2.setVisibility(View.VISIBLE); - holder.status_container3.setVisibility(View.VISIBLE); - holder.status_prev4_container.setVisibility(View.GONE); - if( attachments.get(2).getUrl().trim().contains("missing.png")) + else { + holder.status_prev1_h.setVisibility(View.VISIBLE); + holder.status_prev2_h.setVisibility(View.GONE); + holder.status_prev3_h.setVisibility(View.GONE); + holder.status_prev4_h.setVisibility(View.GONE); + } + if( attachments.get(0).getUrl().trim().contains("missing.png")) + if(fullAttachement) + holder.status_horizontal_document_container.setVisibility(View.GONE); + else + holder.status_document_container.setVisibility(View.GONE); + }else if(attachments.size() == 2){ + if( !fullAttachement) { + holder.status_container2.setVisibility(View.VISIBLE); holder.status_container3.setVisibility(View.GONE); - }else { - holder.status_container2.setVisibility(View.VISIBLE); - holder.status_container3.setVisibility(View.VISIBLE); - holder.status_prev4_container.setVisibility(View.VISIBLE); - if( attachments.get(2).getUrl().trim().contains("missing.png")) holder.status_prev4_container.setVisibility(View.GONE); + if (attachments.get(1).getUrl().trim().contains("missing.png")) + holder.status_container2.setVisibility(View.GONE); + }else { + holder.status_prev1_h.setVisibility(View.VISIBLE); + holder.status_prev2_h.setVisibility(View.VISIBLE); + holder.status_prev3_h.setVisibility(View.GONE); + holder.status_prev4_h.setVisibility(View.GONE); + if (attachments.get(1).getUrl().trim().contains("missing.png")) + holder.status_prev2_h.setVisibility(View.GONE); + } + }else if( attachments.size() == 3 ){ + if( !fullAttachement) { + holder.status_container2.setVisibility(View.VISIBLE); + holder.status_container3.setVisibility(View.VISIBLE); + holder.status_prev4_container.setVisibility(View.GONE); + if (attachments.get(2).getUrl().trim().contains("missing.png")) + holder.status_container3.setVisibility(View.GONE); + }else { + holder.status_prev1_h.setVisibility(View.VISIBLE); + holder.status_prev2_h.setVisibility(View.VISIBLE); + holder.status_prev3_h.setVisibility(View.VISIBLE); + holder.status_prev4_h.setVisibility(View.GONE); + if (attachments.get(2).getUrl().trim().contains("missing.png")) + holder.status_prev3_h.setVisibility(View.GONE); + } + }else { + if(!fullAttachement) { + holder.status_container2.setVisibility(View.VISIBLE); + holder.status_container3.setVisibility(View.VISIBLE); + holder.status_prev4_container.setVisibility(View.VISIBLE); + if (attachments.get(2).getUrl().trim().contains("missing.png")) + holder.status_prev4_container.setVisibility(View.GONE); + }else { + holder.status_prev1_h.setVisibility(View.VISIBLE); + holder.status_prev2_h.setVisibility(View.VISIBLE); + holder.status_prev3_h.setVisibility(View.VISIBLE); + holder.status_prev4_h.setVisibility(View.VISIBLE); + if (attachments.get(2).getUrl().trim().contains("missing.png")) + holder.status_prev3_h.setVisibility(View.GONE); + } } int position = 1; for(final Attachment attachment: attachments){ ImageView imageView; if( i == 0) { - imageView = holder.status_prev1; + imageView = fullAttachement?holder.status_prev1_h:holder.status_prev1; if( attachment.getType().equals("image") || attachment.getType().equals("unknown")) - holder.status_prev1_play.setVisibility(View.GONE); + if( fullAttachement) + holder.status_prev1_play_h.setVisibility(View.GONE); + else + holder.status_prev1_play.setVisibility(View.GONE); else - holder.status_prev1_play.setVisibility(View.VISIBLE); + if( fullAttachement) + holder.status_prev1_play_h.setVisibility(View.VISIBLE); + else + holder.status_prev1_play.setVisibility(View.VISIBLE); }else if( i == 1) { - imageView = holder.status_prev2; + imageView = fullAttachement?holder.status_prev2_h:holder.status_prev2; if( attachment.getType().equals("image") || attachment.getType().equals("unknown")) - holder.status_prev2_play.setVisibility(View.GONE); + if( fullAttachement) + holder.status_prev2_play_h.setVisibility(View.GONE); + else + holder.status_prev2_play.setVisibility(View.GONE); else - holder.status_prev2_play.setVisibility(View.VISIBLE); + if( fullAttachement) + holder.status_prev2_play_h.setVisibility(View.VISIBLE); + else + holder.status_prev2_play.setVisibility(View.VISIBLE); }else if(i == 2) { - imageView = holder.status_prev3; + imageView = fullAttachement?holder.status_prev3_h:holder.status_prev3; if( attachment.getType().equals("image") || attachment.getType().equals("unknown")) - holder.status_prev3_play.setVisibility(View.GONE); + if( fullAttachement) + holder.status_prev3_play_h.setVisibility(View.GONE); + else + holder.status_prev3_play.setVisibility(View.GONE); else - holder.status_prev3_play.setVisibility(View.VISIBLE); + if( fullAttachement) + holder.status_prev3_play_h.setVisibility(View.VISIBLE); + else + holder.status_prev3_play.setVisibility(View.VISIBLE); }else { - imageView = holder.status_prev4; + imageView = fullAttachement?holder.status_prev4_h:holder.status_prev4; if( attachment.getType().equals("image") || attachment.getType().equals("unknown")) - holder.status_prev4_play.setVisibility(View.GONE); + if( fullAttachement) + holder.status_prev4_play_h.setVisibility(View.GONE); + else + holder.status_prev4_play.setVisibility(View.GONE); else - holder.status_prev4_play.setVisibility(View.VISIBLE); + if( fullAttachement) + holder.status_prev4_play_h.setVisibility(View.VISIBLE); + else + holder.status_prev4_play.setVisibility(View.VISIBLE); } String url = attachment.getPreview_url(); + if( fullAttachement){ + + } if( url == null || url.trim().equals("") ) url = attachment.getUrl(); else if( attachment.getType().equals("unknown")) @@ -1619,7 +1739,10 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct position++; } }else{ - holder.status_document_container.setVisibility(View.GONE); + if(fullAttachement) + holder.status_horizontal_document_container.setVisibility(View.GONE); + else + holder.status_document_container.setVisibility(View.GONE); } holder.status_show_more.setVisibility(View.GONE); diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/SettingsFragment.java b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/SettingsFragment.java index 52d0ca265..b52df4569 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/SettingsFragment.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/SettingsFragment.java @@ -212,6 +212,20 @@ public class SettingsFragment extends Fragment { } }); + boolean fit_preview = sharedpreferences.getBoolean(Helper.SET_FULL_PREVIEW, false); + final CheckBox set_fit_preview = rootView.findViewById(R.id.set_fit_preview); + set_fit_preview.setChecked(fit_preview); + + set_fit_preview.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + SharedPreferences.Editor editor = sharedpreferences.edit(); + editor.putBoolean(Helper.SET_FULL_PREVIEW, set_fit_preview.isChecked()); + editor.apply(); + } + }); + + boolean multiaccount_actions = sharedpreferences.getBoolean(Helper.SET_ALLOW_CROSS_ACTIONS, true); final CheckBox set_multiaccount_actions = rootView.findViewById(R.id.set_multiaccount_actions); set_multiaccount_actions.setChecked(multiaccount_actions); diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java b/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java index 91ebbdeba..9875f8882 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java @@ -241,6 +241,7 @@ public class Helper { public static final String SET_CAPITALIZE = "set_capitalize"; public static final String SET_PICTURE_RESIZE = "set_picture_resize"; public static final String SET_SHOW_BOOKMARK = "set_show_bookmark"; + public static final String SET_FULL_PREVIEW = "set_full_preview"; public static final int S_512KO = 1; public static final int S_1MO = 2; public static final int S_2MO = 3; diff --git a/app/src/main/res/layout-sw600dp/fragment_settings.xml b/app/src/main/res/layout-sw600dp/fragment_settings.xml index f00c78303..cabc2c0fb 100644 --- a/app/src/main/res/layout-sw600dp/fragment_settings.xml +++ b/app/src/main/res/layout-sw600dp/fragment_settings.xml @@ -157,6 +157,13 @@ android:text="@string/set_display_bookmark_button" android:layout_height="wrap_content" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Display the number of replies in home timeline Display profile pictures? Allow interactions between accounts? + Fit preview images You have reached the 160 characters allowed! You have reached the 30 characters allowed!