From 61541fb43ea6424a611530ff4b5c1ad0d53ab252 Mon Sep 17 00:00:00 2001 From: tom79 Date: Sat, 8 Jun 2019 12:49:29 +0200 Subject: [PATCH] #193 comment - change layout --- .../android/drawers/StatusListAdapter.java | 226 +++++++++++------- .../app/fedilab/android/helper/Helper.java | 6 + .../main/res/drawable/ic_bookmark_white.xml | 5 + .../res/drawable/ic_bookmark_white_full.xml | 5 + app/src/main/res/drawable/ic_logo_button.xml | 33 +++ app/src/main/res/drawable/ic_timelapse.xml | 5 + .../main/res/drawable/ic_translate_white.xml | 5 + .../res/layout/custom_fedilab_features.xml | 63 +++++ app/src/main/res/layout/drawer_status.xml | 73 ++---- app/src/main/res/values/strings.xml | 3 + 10 files changed, 283 insertions(+), 141 deletions(-) create mode 100644 app/src/main/res/drawable/ic_bookmark_white.xml create mode 100644 app/src/main/res/drawable/ic_bookmark_white_full.xml create mode 100644 app/src/main/res/drawable/ic_logo_button.xml create mode 100644 app/src/main/res/drawable/ic_timelapse.xml create mode 100644 app/src/main/res/drawable/ic_translate_white.xml create mode 100644 app/src/main/res/layout/custom_fedilab_features.xml diff --git a/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java b/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java index 908664bcf..96b5e176e 100644 --- a/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java +++ b/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java @@ -54,6 +54,7 @@ import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; +import android.view.Window; import android.webkit.URLUtil; import android.webkit.WebView; import android.webkit.WebViewClient; @@ -365,7 +366,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct LinearLayout status_peertube_container; TextView status_peertube_reply, status_peertube_delete, show_more_content; ImageView cached_status, status_account_bot; - + ImageView fedilab_features; //Poll LinearLayout poll_container, single_choice, multiple_choice, rated; RadioGroup radio_group; @@ -461,7 +462,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct status_peertube_container = itemView.findViewById(R.id.status_peertube_container); status_peertube_reply = itemView.findViewById(R.id.status_peertube_reply); status_peertube_delete = itemView.findViewById(R.id.status_peertube_delete); - + fedilab_features = itemView.findViewById(R.id.fedilab_features); poll_container = itemView.findViewById(R.id.poll_container); single_choice = itemView.findViewById(R.id.single_choice); multiple_choice = itemView.findViewById(R.id.multiple_choice); @@ -473,6 +474,8 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct refresh_poll = itemView.findViewById(R.id.refresh_poll); cached_status = itemView.findViewById(R.id.cached_status); status_account_bot = itemView.findViewById(R.id.status_account_bot); + + } } @@ -580,10 +583,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct } } - if (type != RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE && !isCompactMode && !isConsoleMode && displayBookmarkButton) - holder.status_bookmark.setVisibility(View.VISIBLE); - else - holder.status_bookmark.setVisibility(View.GONE); + holder.status_reply.setText(""); //Display a preview for accounts that have replied *if enabled and only for home timeline* @@ -939,22 +939,102 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct holder.status_account_displayname.setTextColor(ContextCompat.getColor(context, R.color.action_light_header)); holder.status_toot_date.setTextColor(ContextCompat.getColor(context, R.color.light_black)); } - 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)); - if( status.iscached()){ - holder.cached_status.setVisibility(View.VISIBLE); - }else{ - holder.cached_status.setVisibility(View.GONE); + + + if( holder.status_bookmark != null) { + 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)); + if (type != RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE && !isCompactMode && !isConsoleMode && displayBookmarkButton) + holder.status_bookmark.setVisibility(View.VISIBLE); + else + holder.status_bookmark.setVisibility(View.GONE); + + holder.status_bookmark.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (type != RetrieveFeedsAsyncTask.Type.CACHE_BOOKMARKS) { + status.setBookmarked(!status.isBookmarked()); + try { + final SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); + if (status.isBookmarked()) { + new StatusCacheDAO(context, db).insertStatus(StatusCacheDAO.BOOKMARK_CACHE, status); + Toasty.success(context, context.getString(R.string.status_bookmarked), Toast.LENGTH_LONG).show(); + } else { + new StatusCacheDAO(context, db).remove(StatusCacheDAO.BOOKMARK_CACHE, status); + Toasty.success(context, context.getString(R.string.status_unbookmarked), Toast.LENGTH_LONG).show(); + } + notifyStatusChanged(status); + } catch (Exception e) { + e.printStackTrace(); + Toasty.error(context, context.getString(R.string.toast_error), Toast.LENGTH_LONG).show(); + } + } else { + int position = 0; + for (Status statustmp : statuses) { + if (statustmp.getId().equals(status.getId())) { + statuses.remove(status); + statusListAdapter.notifyItemRemoved(position); + final SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); + new StatusCacheDAO(context, db).remove(StatusCacheDAO.BOOKMARK_CACHE, statustmp); + Toasty.success(context, context.getString(R.string.status_unbookmarked), Toast.LENGTH_LONG).show(); + break; + } + position++; + } + } + } + }); + holder.status_bookmark.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + CrossActions.doCrossBookmark(context, status, statusListAdapter); + return false; + } + }); } - holder.cached_status.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new ManageCachedStatusAsyncTask(context, status.getId(), StatusListAdapter.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + + if( holder.cached_status != null) { + if (status.iscached()) { + holder.cached_status.setVisibility(View.VISIBLE); + } else { + holder.cached_status.setVisibility(View.GONE); } - }); + holder.cached_status.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new ManageCachedStatusAsyncTask(context, status.getId(), StatusListAdapter.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + } + }); + } + + if( holder.fedilab_features != null) { + holder.fedilab_features.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + int style; + if (theme == Helper.THEME_DARK) { + style = R.style.DialogDark; + } else if (theme == Helper.THEME_BLACK) { + style = R.style.DialogBlack; + } else { + style = R.style.Dialog; + } + AlertDialog.Builder dialogBuilderFeatures = new AlertDialog.Builder(context, style); + LayoutInflater inflaterBoost = ((Activity) context).getLayoutInflater(); + @SuppressLint("InflateParams") View dialogViewBoost = inflaterBoost.inflate(R.layout.custom_fedilab_features, null); + dialogBuilderFeatures.setView(dialogViewBoost); + AlertDialog dialogFeatures = dialogBuilderFeatures.create(); + dialogFeatures.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialogFeatures.setCancelable(true); + dialogFeatures.show(); + } + }); + } + + //Redraws top icons (boost/reply) final float scale = context.getResources().getDisplayMetrics().density; @@ -1107,14 +1187,39 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct }); } + if( holder.status_translate != null) { + holder.status_translate.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + translateToot(status); + } + }); + boolean differentLanguage; + if (status.getReblog() == null) + differentLanguage = status.getLanguage() != null && !status.getLanguage().trim().equals(currentLocale); + else + differentLanguage = status.getReblog().getLanguage() != null && !status.getReblog().getLanguage().trim().equals(currentLocale); - - holder.status_translate.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - translateToot(status); + if ((getItemViewType(viewHolder.getAdapterPosition()) != COMPACT_STATUS) && getItemViewType(viewHolder.getAdapterPosition()) != CONSOLE_STATUS && (trans_forced || (translator != Helper.TRANS_NONE && currentLocale != null && differentLanguage))) { + if (status.getSpoiler_text() != null && status.getSpoiler_text().length() > 0) { + if (status.isSpoilerShown() || expand_cw || getItemViewType(viewHolder.getAdapterPosition()) == FOCUSED_STATUS) { + holder.status_translate.setVisibility(View.VISIBLE); + } else { + holder.status_translate.setVisibility(View.GONE); + } + } else if (status.getReblog() != null && status.getReblog().getSpoiler_text() != null && status.getReblog().getSpoiler_text().length() > 0) { + if (status.isSpoilerShown() || expand_cw || getItemViewType(viewHolder.getAdapterPosition()) == FOCUSED_STATUS) { + holder.status_translate.setVisibility(View.VISIBLE); + } else { + holder.status_translate.setVisibility(View.GONE); + } + } else { + holder.status_translate.setVisibility(View.VISIBLE); + } + } else { + holder.status_translate.setVisibility(View.GONE); } - }); + } if( isConsoleMode){ String starting = ""; @@ -1223,6 +1328,9 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct holder.status_content.setText(status.getContentSpan(), TextView.BufferType.SPANNABLE); holder.status_spoiler.setText(status.getContentSpanCW(), TextView.BufferType.SPANNABLE); } + + + holder.status_content.setMovementMethod(LinkMovementMethod.getInstance()); holder.status_spoiler.setMovementMethod(LinkMovementMethod.getInstance()); if (truncate_toots_size > 0) { @@ -1260,48 +1368,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct } }); - holder.status_bookmark.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (type != RetrieveFeedsAsyncTask.Type.CACHE_BOOKMARKS) { - status.setBookmarked(!status.isBookmarked()); - try { - final SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); - if (status.isBookmarked()) { - new StatusCacheDAO(context, db).insertStatus(StatusCacheDAO.BOOKMARK_CACHE, status); - Toasty.success(context, context.getString(R.string.status_bookmarked), Toast.LENGTH_LONG).show(); - } else { - new StatusCacheDAO(context, db).remove(StatusCacheDAO.BOOKMARK_CACHE, status); - Toasty.success(context, context.getString(R.string.status_unbookmarked), Toast.LENGTH_LONG).show(); - } - notifyStatusChanged(status); - } catch (Exception e) { - e.printStackTrace(); - Toasty.error(context, context.getString(R.string.toast_error), Toast.LENGTH_LONG).show(); - } - } else { - int position = 0; - for (Status statustmp : statuses) { - if (statustmp.getId().equals(status.getId())) { - statuses.remove(status); - statusListAdapter.notifyItemRemoved(position); - final SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); - new StatusCacheDAO(context, db).remove(StatusCacheDAO.BOOKMARK_CACHE, statustmp); - Toasty.success(context, context.getString(R.string.status_unbookmarked), Toast.LENGTH_LONG).show(); - break; - } - position++; - } - } - } - }); - holder.status_bookmark.setOnLongClickListener(new View.OnLongClickListener() { - @Override - public boolean onLongClick(View v) { - CrossActions.doCrossBookmark(context, status, statusListAdapter); - return false; - } - }); + holder.status_content_translated.setMovementMethod(LinkMovementMethod.getInstance()); //-------- END -> Manages translations @@ -1513,31 +1580,8 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct Helper.loadGiF(context, status.getConversationProfilePicture().get(3), holder.conversation_pp_4); } } - boolean differentLanguage; - if (status.getReblog() == null) - differentLanguage = status.getLanguage() != null && !status.getLanguage().trim().equals(currentLocale); - else - differentLanguage = status.getReblog().getLanguage() != null && !status.getReblog().getLanguage().trim().equals(currentLocale); - if ((getItemViewType(viewHolder.getAdapterPosition()) != COMPACT_STATUS) && getItemViewType(viewHolder.getAdapterPosition()) != CONSOLE_STATUS && (trans_forced || (translator != Helper.TRANS_NONE && currentLocale != null && differentLanguage))) { - if (status.getSpoiler_text() != null && status.getSpoiler_text().length() > 0) { - if (status.isSpoilerShown() || expand_cw || getItemViewType(viewHolder.getAdapterPosition()) == FOCUSED_STATUS) { - holder.status_translate.setVisibility(View.VISIBLE); - } else { - holder.status_translate.setVisibility(View.GONE); - } - } else if (status.getReblog() != null && status.getReblog().getSpoiler_text() != null && status.getReblog().getSpoiler_text().length() > 0) { - if (status.isSpoilerShown() || expand_cw || getItemViewType(viewHolder.getAdapterPosition()) == FOCUSED_STATUS) { - holder.status_translate.setVisibility(View.VISIBLE); - } else { - holder.status_translate.setVisibility(View.GONE); - } - } else { - holder.status_translate.setVisibility(View.VISIBLE); - } - } else { - holder.status_translate.setVisibility(View.GONE); - } + /*if (expand_cw) holder.status_spoiler_button.setVisibility(View.GONE);*/ String contentCheck = ""; diff --git a/app/src/main/java/app/fedilab/android/helper/Helper.java b/app/src/main/java/app/fedilab/android/helper/Helper.java index 74cc43936..37d425cf6 100644 --- a/app/src/main/java/app/fedilab/android/helper/Helper.java +++ b/app/src/main/java/app/fedilab/android/helper/Helper.java @@ -2333,6 +2333,8 @@ public class Helper { * @param hexaColor example 0xffff00 */ public static void changeDrawableColor(Context context, ImageView imageView, int hexaColor){ + if( imageView == null) + return; imageView.setColorFilter(context.getResources().getColor(hexaColor)); } @@ -2342,6 +2344,8 @@ public class Helper { * @param hexaColor example 0xffff00 */ public static void changeDrawableColor(Context context, ImageButton imageButton, int hexaColor){ + if( imageButton == null) + return; imageButton.setColorFilter(context.getResources().getColor(hexaColor)); } @@ -2351,6 +2355,8 @@ public class Helper { * @param hexaColor example 0xffff00 */ public static void changeButtonTextColor(Context context, Button button, int hexaColor){ + if( button == null) + return; button.setTextColor(context.getResources().getColor(hexaColor)); } /** diff --git a/app/src/main/res/drawable/ic_bookmark_white.xml b/app/src/main/res/drawable/ic_bookmark_white.xml new file mode 100644 index 000000000..4b895836e --- /dev/null +++ b/app/src/main/res/drawable/ic_bookmark_white.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_bookmark_white_full.xml b/app/src/main/res/drawable/ic_bookmark_white_full.xml new file mode 100644 index 000000000..feb16ed63 --- /dev/null +++ b/app/src/main/res/drawable/ic_bookmark_white_full.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_logo_button.xml b/app/src/main/res/drawable/ic_logo_button.xml new file mode 100644 index 000000000..3c81576fa --- /dev/null +++ b/app/src/main/res/drawable/ic_logo_button.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_timelapse.xml b/app/src/main/res/drawable/ic_timelapse.xml new file mode 100644 index 000000000..6466e4fae --- /dev/null +++ b/app/src/main/res/drawable/ic_timelapse.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_translate_white.xml b/app/src/main/res/drawable/ic_translate_white.xml new file mode 100644 index 000000000..61f4a78eb --- /dev/null +++ b/app/src/main/res/drawable/ic_translate_white.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/layout/custom_fedilab_features.xml b/app/src/main/res/layout/custom_fedilab_features.xml new file mode 100644 index 000000000..0447f8c80 --- /dev/null +++ b/app/src/main/res/layout/custom_fedilab_features.xml @@ -0,0 +1,63 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/drawer_status.xml b/app/src/main/res/layout/drawer_status.xml index 3de7b1bbf..a738dd0e4 100644 --- a/app/src/main/res/layout/drawer_status.xml +++ b/app/src/main/res/layout/drawer_status.xml @@ -36,7 +36,7 @@ android:layout_height="match_parent" android:orientation="vertical"> + - - - - - - - - + android:layout_width="24dp" + android:layout_height="24dp" + android:background="#FF2b90d9" + android:src="@drawable/ic_logo_button" + android:contentDescription="@string/app_features" /> Unmute conversation The conversation is no longer muted! The conversation is muted + Open application features + Timed mute + Mention the account %d vote %d votes