diff options
Diffstat (limited to 'app/src/main/java/fr/gouv/etalab/mastodon/drawers/ConversationDecoration.java')
-rw-r--r-- | app/src/main/java/fr/gouv/etalab/mastodon/drawers/ConversationDecoration.java | 81 |
1 files changed, 57 insertions, 24 deletions
diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/ConversationDecoration.java b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/ConversationDecoration.java index ac271cf47..4f7511df3 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/ConversationDecoration.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/ConversationDecoration.java @@ -16,8 +16,10 @@ package fr.gouv.etalab.mastodon.drawers; import android.content.Context; +import android.content.SharedPreferences; import android.graphics.Canvas; import android.graphics.drawable.Drawable; +import android.support.annotation.NonNull; import android.support.v4.content.ContextCompat; import android.support.v7.widget.RecyclerView; import android.view.View; @@ -26,6 +28,8 @@ import fr.gouv.etalab.mastodon.R; import fr.gouv.etalab.mastodon.client.Entities.Status; import fr.gouv.etalab.mastodon.helper.Helper; +import static fr.gouv.etalab.mastodon.drawers.StatusListAdapter.FOCUSED_STATUS; + /** * Created by Thomas on 08/09/2018. * Adapter for thread decoration @@ -34,45 +38,74 @@ public class ConversationDecoration extends RecyclerView.ItemDecoration{ private Drawable divider; private Context context; - private int statusOpenedPosition; + private boolean compactMode; - public ConversationDecoration(Context context, int statusOpenedPosition){ - divider = ContextCompat.getDrawable(context,R.drawable.line_divider); - this.statusOpenedPosition = statusOpenedPosition; + public ConversationDecoration(Context context, int theme, boolean compactMode){ + SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); + if( theme == Helper.THEME_BLACK) + divider = ContextCompat.getDrawable(context,R.drawable.line_divider_black); + else if(theme == Helper.THEME_DARK) + divider = ContextCompat.getDrawable(context,R.drawable.line_divider_dark); + else if(theme == Helper.THEME_LIGHT) + divider = ContextCompat.getDrawable(context,R.drawable.line_divider_light); + this.compactMode = compactMode; this.context = context; } @Override - public void onDraw(Canvas canvas, RecyclerView parent, RecyclerView.State state) { - canvas.save(); - int left = parent.getPaddingLeft(); - int right = parent.getWidth() - parent.getPaddingRight(); + public void onDraw(@NonNull Canvas canvas, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + + int leftSide; + if( compactMode) + leftSide = (int) Helper.convertDpToPixel(12, context); + else + leftSide = (int) Helper.convertDpToPixel(28, context); + + int left = parent.getPaddingLeft() + leftSide; + int right = left + (int)Helper.convertDpToPixel(4, context); int childCount = parent.getChildCount(); - int top = 0, bottom = 0; - StatusListAdapter adapter = (StatusListAdapter) parent.getAdapter(); - int offSet = (int) Helper.convertDpToPixel(50, context); + + int offSet = (int) Helper.convertDpToPixel(30, context); + for (int i = 0; i < childCount; i++) { + View child = parent.getChildAt(i); + StatusListAdapter adapter = (StatusListAdapter) parent.getAdapter(); int position = parent.getChildAdapterPosition(child); + + assert adapter != null; Status status = adapter.getItem(position); + + int top, bottom; if( status != null){ - Status statusBefore = null; - if( position > 0) - statusBefore = adapter.getItem(position - 1); - top = (statusBefore != null && statusBefore.getId().equals(status.getIn_reply_to_id()))? - child.getBottom(): (child.getTop() + offSet); - Status statusAfter = null; - if( adapter.getItemCount() > position+1) - statusAfter = adapter.getItem(position + 1); - bottom = (statusAfter != null && status.getId().equals(statusAfter.getIn_reply_to_id()) && position != statusOpenedPosition)? - child.getTop():child.getTop()+offSet; + int itemViewType = status.getItemViewType(); + Status statusBefore = null; + if( itemViewType != FOCUSED_STATUS || position == 0){ + if( position > 0) + statusBefore = adapter.getItem(position - 1); + top = (statusBefore != null && statusBefore.getId().equals(status.getIn_reply_to_id()))? + child.getTop(): (child.getTop() + offSet); + Status statusAfter = null; + if( adapter.getItemCount() > position+1) + statusAfter = adapter.getItem(position + 1); + bottom = (statusAfter != null && status.getId().equals(statusAfter.getIn_reply_to_id()) )? + child.getBottom():child.getTop()+offSet; + if( position == 0 && childCount > 1) + top = bottom - (int)Helper.convertDpToPixel(14, context); + if( position == 0 && childCount <= 1 ) + top = bottom; + }else{ + top = child.getTop(); + bottom = top + (int)Helper.convertDpToPixel(14, context); + } + divider.setBounds(left, top, right, bottom); + divider.draw(canvas); } - divider.setBounds(left, top, right, bottom); - divider.draw(canvas); + } - canvas.restore(); + } } |