Commit b5ab93d4 authored by Thomas's avatar Thomas
Browse files

- Fix #1383 add fediverse creator support in link preview cards

parent f23c8079
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -14,11 +14,25 @@ package app.fedilab.android.mastodon.client.entities.api;
 * You should have received a copy of the GNU General Public License along with Fedilab; if not,
 * see <http://www.gnu.org/licenses>. */

import androidx.annotation.Nullable;

import com.google.gson.annotations.SerializedName;

import java.io.Serializable;
import java.util.List;

public class Card implements Serializable {

    public static class PreviewCardAuthor implements Serializable {
        @SerializedName("name")
        public String name;
        @SerializedName("url")
        public String url;
        @Nullable
        @SerializedName("account")
        public Account account;
    }

    @SerializedName("url")
    public String url;
    @SerializedName("title")
@@ -47,4 +61,7 @@ public class Card implements Serializable {
    public String embed_url;
    @SerializedName("blurhash")
    public String blurhash;
    @Nullable
    @SerializedName("authors")
    public List<PreviewCardAuthor> authors;
}
+36 −0
Original line number Diff line number Diff line
@@ -160,6 +160,7 @@ import app.fedilab.android.mastodon.activities.StatusInfoActivity;
import app.fedilab.android.mastodon.activities.TimelineActivity;
import app.fedilab.android.mastodon.activities.admin.AdminAccountActivity;
import app.fedilab.android.mastodon.client.entities.api.Attachment;
import app.fedilab.android.mastodon.client.entities.api.Card;
import app.fedilab.android.mastodon.client.entities.api.Field;
import app.fedilab.android.mastodon.client.entities.api.Filter;
import app.fedilab.android.mastodon.client.entities.api.Notification;
@@ -1026,6 +1027,41 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
            holder.binding.card.setOnClickListener(v -> {
                SpannableHelper.linkClickAction(context, statusToDeal.card.url);
            });
            Card.PreviewCardAuthor author = null;
            if (statusToDeal.card.authors != null && !statusToDeal.card.authors.isEmpty()) {
                author = statusToDeal.card.authors.get(0);
            }
            if (author != null && (author.account != null || author.name != null)) {
                holder.binding.cardAuthorSeparator.setVisibility(View.VISIBLE);
                holder.binding.cardAuthorContainer.setVisibility(View.VISIBLE);
                if (author.account != null) {
                    String displayName = author.account.display_name != null && !author.account.display_name.isEmpty()
                            ? author.account.display_name : author.name;
                    holder.binding.cardAuthorName.setText(context.getString(R.string.more_from, displayName));
                    holder.binding.cardAuthorAvatar.setVisibility(View.VISIBLE);
                    MastodonHelper.loadPPMastodon(holder.binding.cardAuthorAvatar, author.account);
                    app.fedilab.android.mastodon.client.entities.api.Account finalAccount = author.account;
                    holder.binding.cardAuthorContainer.setOnClickListener(v -> {
                        Intent intent = new Intent(context, ProfileActivity.class);
                        Bundle args = new Bundle();
                        args.putSerializable(Helper.ARG_ACCOUNT, finalAccount);
                        new CachedBundle(context).insertBundle(args, Helper.getCurrentAccount(context), bundleId -> {
                            Bundle bundle = new Bundle();
                            bundle.putLong(Helper.ARG_INTENT_ID, bundleId);
                            intent.putExtras(bundle);
                            context.startActivity(intent);
                        });
                    });
                } else {
                    holder.binding.cardAuthorName.setText(context.getString(R.string.more_from, author.name));
                    holder.binding.cardAuthorAvatar.setVisibility(View.GONE);
                    holder.binding.cardAuthorContainer.setOnClickListener(null);
                    holder.binding.cardAuthorContainer.setClickable(false);
                }
            } else {
                holder.binding.cardAuthorSeparator.setVisibility(View.GONE);
                holder.binding.cardAuthorContainer.setVisibility(View.GONE);
            }
            holder.binding.card.setVisibility(View.VISIBLE);
        } else {
            holder.binding.card.setVisibility(View.GONE);
+40 −0
Original line number Diff line number Diff line
@@ -458,6 +458,46 @@
                            android:textAppearance="@style/TextAppearance.AppCompat.Caption"
                            tools:text="https://domain.test" />

                        <View
                            android:id="@+id/card_author_separator"
                            android:layout_width="match_parent"
                            android:layout_height="1dp"
                            android:layout_marginTop="6dp"
                            android:background="?android:attr/listDivider"
                            android:visibility="gone"
                            tools:visibility="visible" />

                        <androidx.appcompat.widget.LinearLayoutCompat
                            android:id="@+id/card_author_container"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:gravity="center_vertical"
                            android:orientation="horizontal"
                            android:paddingTop="6dp"
                            android:paddingBottom="2dp"
                            android:visibility="gone"
                            tools:visibility="visible">

                            <androidx.appcompat.widget.AppCompatImageView
                                android:id="@+id/card_author_avatar"
                                android:layout_width="24dp"
                                android:layout_height="24dp"
                                android:contentDescription="@string/profile_picture"
                                tools:src="@tools:sample/avatars" />

                            <androidx.appcompat.widget.AppCompatTextView
                                android:id="@+id/card_author_name"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_marginStart="8dp"
                                android:ellipsize="end"
                                android:maxLines="1"
                                android:textColor="?colorPrimary"
                                android:textSize="13sp"
                                tools:text="More from Author" />

                        </androidx.appcompat.widget.LinearLayoutCompat>

                    </androidx.appcompat.widget.LinearLayoutCompat>

                </androidx.appcompat.widget.LinearLayoutCompat>
+36 −0
Original line number Diff line number Diff line
@@ -266,6 +266,42 @@
                                        android:text="https://domain.test"
                                        android:textAppearance="@style/TextAppearance.AppCompat.Caption" />

                                    <View
                                        android:id="@+id/card_author_separator"
                                        android:layout_width="match_parent"
                                        android:layout_height="1dp"
                                        android:layout_marginTop="6dp"
                                        android:background="?android:attr/listDivider"
                                        android:visibility="gone" />

                                    <androidx.appcompat.widget.LinearLayoutCompat
                                        android:id="@+id/card_author_container"
                                        android:layout_width="match_parent"
                                        android:layout_height="wrap_content"
                                        android:gravity="center_vertical"
                                        android:orientation="horizontal"
                                        android:paddingTop="6dp"
                                        android:paddingBottom="2dp"
                                        android:visibility="gone">

                                        <androidx.appcompat.widget.AppCompatImageView
                                            android:id="@+id/card_author_avatar"
                                            android:layout_width="24dp"
                                            android:layout_height="24dp"
                                            android:contentDescription="@string/profile_picture" />

                                        <androidx.appcompat.widget.AppCompatTextView
                                            android:id="@+id/card_author_name"
                                            android:layout_width="wrap_content"
                                            android:layout_height="wrap_content"
                                            android:layout_marginStart="8dp"
                                            android:ellipsize="end"
                                            android:maxLines="1"
                                            android:textColor="?colorPrimary"
                                            android:textSize="13sp" />

                                    </androidx.appcompat.widget.LinearLayoutCompat>

                                </androidx.appcompat.widget.LinearLayoutCompat>

                            </androidx.appcompat.widget.LinearLayoutCompat>
+1 −0
Original line number Diff line number Diff line
@@ -1974,6 +1974,7 @@
    <string name="toast_pin">The message has been pinned</string>
    <string name="pinned">Pinned</string>
    <string name="card_picture">Card picture</string>
    <string name="more_from">More from %1$s</string>
    <string name="set_live_translate_title">Translate messages</string>
    <string name="set_live_translate">Force translation to a specific language. Choose first value to reset to device settings</string>
    <string name="edit_message">Edit message</string>