mirror of
https://github.com/oxen-io/session-android.git
synced 2025-06-09 21:08:34 +00:00
Fix sticker manager text wrapping issues.
This commit is contained in:
parent
a3521681e7
commit
b6d59f1d46
@ -1,27 +1,32 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<FrameLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="64dp"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="@dimen/sticker_management_horizontal_margin"
|
android:layout_marginStart="@dimen/sticker_management_horizontal_margin"
|
||||||
android:layout_marginEnd="@dimen/sticker_management_horizontal_margin">
|
android:layout_marginEnd="@dimen/sticker_management_horizontal_margin">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="0dp"
|
||||||
android:src="@drawable/sticker_management_empty_background"
|
android:src="@drawable/sticker_management_empty_background"
|
||||||
android:tint="?sticker_management_empty_background_color"/>
|
android:tint="?sticker_management_empty_background_color"
|
||||||
|
app:layout_constraintTop_toTopOf="@id/sticker_management_empty_text"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@id/sticker_management_empty_text"/>
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.components.emoji.EmojiTextView
|
<org.thoughtcrime.securesms.components.emoji.EmojiTextView
|
||||||
android:id="@+id/sticker_management_empty_text"
|
android:id="@+id/sticker_management_empty_text"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center"
|
|
||||||
android:textSize="13sp"
|
android:textSize="13sp"
|
||||||
|
android:padding="12dp"
|
||||||
style="@style/Signal.Text.Caption"
|
style="@style/Signal.Text.Caption"
|
||||||
tools:text="@string/StickerManagementAdapter_no_stickers_installed"/>
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
tools:text="With great power there must also come -- great responsibility!"/>
|
||||||
|
|
||||||
<!-- TODO: THEME!! -->
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
</FrameLayout>
|
|
||||||
|
@ -15,64 +15,53 @@
|
|||||||
android:layout_width="64dp"
|
android:layout_width="64dp"
|
||||||
android:layout_height="64dp"
|
android:layout_height="64dp"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent"/>
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintBottom_toTopOf="@id/sticker_management_divider"
|
||||||
|
tools:src="@drawable/ic_person_white_24dp"
|
||||||
|
tools:tint="@color/core_blue"/>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/sticker_management_text_container"
|
android:id="@+id/sticker_management_title_container"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="12dp"
|
android:layout_marginStart="12dp"
|
||||||
android:layout_marginEnd="4dp"
|
android:layout_marginEnd="4dp"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
android:layout_marginBottom="4dp"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
app:layout_constraintTop_toTopOf="@id/sticker_management_cover"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
app:layout_constraintBottom_toBottomOf="@id/sticker_management_cover"
|
app:layout_constraintBottom_toTopOf="@id/sticker_management_divider"
|
||||||
app:layout_constraintStart_toEndOf="@id/sticker_management_cover"
|
app:layout_constraintStart_toEndOf="@id/sticker_management_cover"
|
||||||
app:layout_constraintEnd_toStartOf="@id/sticker_management_share_button">
|
app:layout_constraintEnd_toStartOf="@id/sticker_management_button_barrier">
|
||||||
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:gravity="center_vertical">
|
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.components.emoji.EmojiTextView
|
<org.thoughtcrime.securesms.components.emoji.EmojiTextView
|
||||||
android:id="@+id/sticker_management_title"
|
android:id="@+id/sticker_management_title"
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
style="@style/Signal.Text.Body"
|
|
||||||
android:maxLines="2"
|
|
||||||
android:ellipsize="end"
|
|
||||||
tools:text="Spider-Man"/>
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:id="@+id/sticker_management_blessed_badge"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginStart="2dp"
|
|
||||||
android:layout_marginTop="1dp"
|
|
||||||
android:src="@drawable/ic_check_circle_white_18dp"
|
|
||||||
android:tint="@color/core_blue"/>
|
|
||||||
|
|
||||||
<Space
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_weight="1"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.components.emoji.EmojiTextView
|
|
||||||
android:id="@+id/sticker_management_author"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
style="@style/Signal.Text.Body"
|
style="@style/Signal.Text.Body"
|
||||||
android:maxLines="2"
|
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
|
app:emoji_maxLength="45"
|
||||||
|
tools:text="Spider-Man"/>
|
||||||
|
|
||||||
|
<org.thoughtcrime.securesms.components.emoji.EmojiTextView
|
||||||
|
android:id="@+id/sticker_management_author"
|
||||||
|
style="@style/Signal.Text.Body"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:maxLines="2"
|
||||||
android:textColor="@color/core_grey_60"
|
android:textColor="@color/core_grey_60"
|
||||||
tools:text="Peter Parker" />
|
tools:text="Peter Parker" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.Barrier
|
||||||
|
android:id="@+id/sticker_management_button_barrier"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
app:barrierDirection="start"
|
||||||
|
app:constraint_referenced_ids="sticker_management_action_button,sticker_management_share_button"/>
|
||||||
|
|
||||||
<View
|
<View
|
||||||
android:id="@+id/sticker_management_share_button"
|
android:id="@+id/sticker_management_share_button"
|
||||||
android:layout_width="40dp"
|
android:layout_width="40dp"
|
||||||
@ -80,8 +69,8 @@
|
|||||||
android:layout_marginEnd="4dp"
|
android:layout_marginEnd="4dp"
|
||||||
android:background="?sticker_management_icon"
|
android:background="?sticker_management_icon"
|
||||||
app:layout_constraintEnd_toStartOf="@id/sticker_management_action_button"
|
app:layout_constraintEnd_toStartOf="@id/sticker_management_action_button"
|
||||||
app:layout_constraintTop_toTopOf="@id/sticker_management_text_container"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
app:layout_constraintBottom_toBottomOf="@id/sticker_management_text_container" />
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/sticker_management_share_button_image"
|
android:id="@+id/sticker_management_share_button_image"
|
||||||
@ -100,8 +89,8 @@
|
|||||||
android:layout_height="40dp"
|
android:layout_height="40dp"
|
||||||
android:background="?sticker_management_icon"
|
android:background="?sticker_management_icon"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="@id/sticker_management_text_container"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
app:layout_constraintBottom_toBottomOf="@id/sticker_management_text_container" />
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/sticker_management_action_button_image"
|
android:id="@+id/sticker_management_action_button_image"
|
||||||
@ -119,9 +108,8 @@
|
|||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="1dp"
|
android:layout_height="1dp"
|
||||||
android:background="?sticker_management_divider_color"
|
android:background="?sticker_management_divider_color"
|
||||||
android:layout_marginTop="8dp"
|
app:layout_constraintStart_toStartOf="@id/sticker_management_title_container"
|
||||||
app:layout_constraintStart_toStartOf="@id/sticker_management_text_container"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@id/sticker_management_cover"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"/>
|
app:layout_constraintEnd_toEndOf="parent"/>
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
@ -2,8 +2,14 @@ package org.thoughtcrime.securesms.stickers;
|
|||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.StringRes;
|
import androidx.annotation.StringRes;
|
||||||
|
import androidx.core.content.ContextCompat;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.graphics.PorterDuff;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.text.SpannableString;
|
||||||
|
import android.text.style.ImageSpan;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
@ -13,7 +19,9 @@ import android.widget.TextView;
|
|||||||
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
|
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
|
||||||
|
|
||||||
import org.thoughtcrime.securesms.R;
|
import org.thoughtcrime.securesms.R;
|
||||||
|
import org.thoughtcrime.securesms.components.emoji.EmojiTextView;
|
||||||
import org.thoughtcrime.securesms.database.model.StickerPackRecord;
|
import org.thoughtcrime.securesms.database.model.StickerPackRecord;
|
||||||
|
import org.thoughtcrime.securesms.jobmanager.Constraint;
|
||||||
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri;
|
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri;
|
||||||
import org.thoughtcrime.securesms.mms.GlideRequests;
|
import org.thoughtcrime.securesms.mms.GlideRequests;
|
||||||
import org.thoughtcrime.securesms.util.FeatureFlags;
|
import org.thoughtcrime.securesms.util.FeatureFlags;
|
||||||
@ -182,14 +190,14 @@ final class StickerManagementAdapter extends SectionedRecyclerViewAdapter<String
|
|||||||
static class StickerViewHolder extends RecyclerView.ViewHolder {
|
static class StickerViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
|
||||||
private final ImageView cover;
|
private final ImageView cover;
|
||||||
private final TextView title;
|
private final EmojiTextView title;
|
||||||
private final TextView author;
|
private final TextView author;
|
||||||
private final View badge;
|
|
||||||
private final View divider;
|
private final View divider;
|
||||||
private final View actionButton;
|
private final View actionButton;
|
||||||
private final ImageView actionButtonImage;
|
private final ImageView actionButtonImage;
|
||||||
private final View shareButton;
|
private final View shareButton;
|
||||||
private final ImageView shareButtonImage;
|
private final ImageView shareButtonImage;
|
||||||
|
private final CharSequence blessedBadge;
|
||||||
|
|
||||||
StickerViewHolder(@NonNull View itemView) {
|
StickerViewHolder(@NonNull View itemView) {
|
||||||
super(itemView);
|
super(itemView);
|
||||||
@ -197,12 +205,12 @@ final class StickerManagementAdapter extends SectionedRecyclerViewAdapter<String
|
|||||||
this.cover = itemView.findViewById(R.id.sticker_management_cover);
|
this.cover = itemView.findViewById(R.id.sticker_management_cover);
|
||||||
this.title = itemView.findViewById(R.id.sticker_management_title);
|
this.title = itemView.findViewById(R.id.sticker_management_title);
|
||||||
this.author = itemView.findViewById(R.id.sticker_management_author);
|
this.author = itemView.findViewById(R.id.sticker_management_author);
|
||||||
this.badge = itemView.findViewById(R.id.sticker_management_blessed_badge);
|
|
||||||
this.divider = itemView.findViewById(R.id.sticker_management_divider);
|
this.divider = itemView.findViewById(R.id.sticker_management_divider);
|
||||||
this.actionButton = itemView.findViewById(R.id.sticker_management_action_button);
|
this.actionButton = itemView.findViewById(R.id.sticker_management_action_button);
|
||||||
this.actionButtonImage = itemView.findViewById(R.id.sticker_management_action_button_image);
|
this.actionButtonImage = itemView.findViewById(R.id.sticker_management_action_button_image);
|
||||||
this.shareButton = itemView.findViewById(R.id.sticker_management_share_button);
|
this.shareButton = itemView.findViewById(R.id.sticker_management_share_button);
|
||||||
this.shareButtonImage = itemView.findViewById(R.id.sticker_management_share_button_image);
|
this.shareButtonImage = itemView.findViewById(R.id.sticker_management_share_button_image);
|
||||||
|
this.blessedBadge = buildBlessedBadge(itemView.getContext());
|
||||||
}
|
}
|
||||||
|
|
||||||
void bind(@NonNull GlideRequests glideRequests,
|
void bind(@NonNull GlideRequests glideRequests,
|
||||||
@ -213,7 +221,12 @@ final class StickerManagementAdapter extends SectionedRecyclerViewAdapter<String
|
|||||||
title.setText(stickerPack.getTitle().or(itemView.getResources().getString(R.string.StickerManagementAdapter_untitled)));
|
title.setText(stickerPack.getTitle().or(itemView.getResources().getString(R.string.StickerManagementAdapter_untitled)));
|
||||||
author.setText(stickerPack.getAuthor().or(itemView.getResources().getString(R.string.StickerManagementAdapter_unknown)));
|
author.setText(stickerPack.getAuthor().or(itemView.getResources().getString(R.string.StickerManagementAdapter_unknown)));
|
||||||
divider.setVisibility(lastInList ? View.GONE : View.VISIBLE);
|
divider.setVisibility(lastInList ? View.GONE : View.VISIBLE);
|
||||||
badge.setVisibility(BlessedPacks.contains(stickerPack.getPackId()) ? View.VISIBLE : View.GONE);
|
|
||||||
|
if (BlessedPacks.contains(stickerPack.getPackId())) {
|
||||||
|
title.setOverflowText(blessedBadge);
|
||||||
|
} else {
|
||||||
|
title.setOverflowText(null);
|
||||||
|
}
|
||||||
|
|
||||||
glideRequests.load(new DecryptableUri(stickerPack.getCover().getUri()))
|
glideRequests.load(new DecryptableUri(stickerPack.getCover().getUri()))
|
||||||
.transition(DrawableTransitionOptions.withCrossFade())
|
.transition(DrawableTransitionOptions.withCrossFade())
|
||||||
@ -243,6 +256,17 @@ final class StickerManagementAdapter extends SectionedRecyclerViewAdapter<String
|
|||||||
shareButton.setOnClickListener(null);
|
shareButton.setOnClickListener(null);
|
||||||
itemView.setOnClickListener(null);
|
itemView.setOnClickListener(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static @NonNull CharSequence buildBlessedBadge(@NonNull Context context) {
|
||||||
|
SpannableString badgeSpan = new SpannableString(" ");
|
||||||
|
Drawable badge = ContextCompat.getDrawable(context, R.drawable.ic_check_circle_white_18dp);
|
||||||
|
|
||||||
|
badge.setBounds(0, 0, badge.getIntrinsicWidth(), badge.getIntrinsicHeight());
|
||||||
|
badge.setColorFilter(ContextCompat.getColor(context, R.color.core_blue), PorterDuff.Mode.MULTIPLY);
|
||||||
|
badgeSpan.setSpan(new ImageSpan(badge), 1, badgeSpan.length(), 0);
|
||||||
|
|
||||||
|
return badgeSpan;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static class HeaderViewHolder extends RecyclerView.ViewHolder {
|
static class HeaderViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user