Commit d514c7b8 authored by Thomas's avatar Thomas
Browse files

Featured tags displayed in profiles

parent 5b843291
Loading
Loading
Loading
Loading
+42 −0
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ import android.text.method.LinkMovementMethod;
import android.text.style.ForegroundColorSpan;
import android.text.style.UnderlineSpan;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
@@ -69,6 +70,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.target.CustomTarget;
import com.bumptech.glide.request.transition.Transition;
import com.google.android.material.chip.Chip;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.tabs.TabLayout;

@@ -96,6 +98,7 @@ import app.fedilab.android.databinding.TabProfileCustomViewBinding;
import app.fedilab.android.mastodon.client.entities.api.Account;
import app.fedilab.android.mastodon.client.entities.api.Attachment;
import app.fedilab.android.mastodon.client.entities.api.FamiliarFollowers;
import app.fedilab.android.mastodon.client.entities.api.FeaturedTag;
import app.fedilab.android.mastodon.client.entities.api.Field;
import app.fedilab.android.mastodon.client.entities.api.IdentityProof;
import app.fedilab.android.mastodon.client.entities.api.MastodonList;
@@ -116,6 +119,7 @@ import app.fedilab.android.mastodon.helper.SpannableHelper;
import app.fedilab.android.mastodon.helper.ThemeHelper;
import app.fedilab.android.mastodon.ui.drawer.FieldAdapter;
import app.fedilab.android.mastodon.ui.drawer.IdentityProofsAdapter;
import app.fedilab.android.mastodon.ui.drawer.StatusAdapter;
import app.fedilab.android.mastodon.ui.pageadapter.FedilabProfileTLPageAdapter;
import app.fedilab.android.mastodon.viewmodel.mastodon.AccountsVM;
import app.fedilab.android.mastodon.viewmodel.mastodon.NodeInfoVM;
@@ -229,7 +233,45 @@ public class ProfileActivity extends BaseActivity {
        //Check if account is homeMuted
        accountsVM.isMuted(Helper.getCurrentAccount(ProfileActivity.this), account).observe(this, result -> homeMuted = result != null && result);
        ContextCompat.registerReceiver(ProfileActivity.this, broadcast_data, new IntentFilter(Helper.BROADCAST_DATA), ContextCompat.RECEIVER_NOT_EXPORTED);
        //Search for featured tags
        accountsVM.getAccountFeaturedTags(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, account.id).observe(this, featuredTags -> {
            if(featuredTags != null && !featuredTags.isEmpty()) {
                binding.featuredHashtagsContainer.setVisibility(View.VISIBLE);
                binding.featuredHashtags.removeAllViews();
                for(FeaturedTag featuredTag: featuredTags) {
                    if(featuredTag.statuses_count > 0 ) {
                        Chip chip = new Chip(ProfileActivity.this);
                        chip.setClickable(true);
                        chip.setEnsureMinTouchTargetSize(false);
                        chip.setText(String.format("#%s", featuredTag.name));
                        chip.setTextColor(ThemeHelper.getAttColor(ProfileActivity.this, R.attr.colorPrimary));
                        chip.setOnClickListener(v -> {
                            Bundle args = new Bundle();
                            args.putSerializable(Helper.ARG_TIMELINE_TYPE, Timeline.TimeLineEnum.ACCOUNT_TIMELINE);
                            if (account != null) {
                                args.putSerializable(Helper.ARG_CACHED_ACCOUNT_ID, account.id);
                            }
                            args.putString(Helper.ARG_TAGGED, featuredTag.name);
                            args.putBoolean(Helper.ARG_SHOW_PINNED, false);
                            args.putBoolean(Helper.ARG_SHOW_REPLIES, false);
                            args.putBoolean(Helper.ARG_SHOW_REBLOGS, false);
                            args.putBoolean(Helper.ARG_CHECK_REMOTELY, checkRemotely);
                            Intent intent = new Intent(ProfileActivity.this, TimelineActivity.class);
                            new CachedBundle(ProfileActivity.this).insertBundle(args, Helper.getCurrentAccount(ProfileActivity.this), bundleId -> {
                                Bundle _bundle = new Bundle();
                                _bundle.putLong(Helper.ARG_INTENT_ID, bundleId);
                                intent.putExtras(_bundle);
                                startActivity(intent);
                            });
                        });
                        binding.featuredHashtags.addView(chip);
                    }
                }

            } else {
                binding.featuredHashtagsContainer.setVisibility(View.GONE);
            }
        });

    }

+9 −0
Original line number Diff line number Diff line
@@ -57,21 +57,30 @@ public class TimelineActivity extends BaseBarActivity {
        Timeline.TimeLineEnum timelineType = null;
        String lemmy_post_id = null;
        PinnedTimeline pinnedTimeline = null;
        String tagged = null;
        String timelineAccountId = null;
        Status status = null;
        if (bundle != null) {
            timelineType = (Timeline.TimeLineEnum) bundle.get(Helper.ARG_TIMELINE_TYPE);
            lemmy_post_id = bundle.getString(Helper.ARG_LEMMY_POST_ID, null);
            pinnedTimeline = (PinnedTimeline) bundle.getSerializable(Helper.ARG_REMOTE_INSTANCE);
            status = (Status) bundle.getSerializable(Helper.ARG_STATUS);
            tagged = bundle.getString(Helper.ARG_TAGGED, null);
            timelineAccountId = bundle.getString(Helper.ARG_CACHED_ACCOUNT_ID, null);
        }
        if (pinnedTimeline != null && pinnedTimeline.remoteInstance != null) {
            setTitle(pinnedTimeline.remoteInstance.host);
        }
        if(tagged != null) {
            setTitle(String.format("#%s",tagged));
        }
        FragmentMastodonTimeline fragmentMastodonTimeline = new FragmentMastodonTimeline();
        Bundle args = new Bundle();
        args.putSerializable(Helper.ARG_TIMELINE_TYPE, timelineType);
        args.putSerializable(Helper.ARG_REMOTE_INSTANCE, pinnedTimeline);
        args.putSerializable(Helper.ARG_LEMMY_POST_ID, lemmy_post_id);
        args.putSerializable(Helper.ARG_TAGGED, tagged);
        args.putSerializable(Helper.ARG_CACHED_ACCOUNT_ID, timelineAccountId);
        if (status != null) {
            args.putSerializable(Helper.ARG_STATUS, status);
        }
+1 −0
Original line number Diff line number Diff line
@@ -124,6 +124,7 @@ public interface MastodonAccountsService {
            @Query("exclude_reblogs") Boolean exclude_reblogs,
            @Query("only_media") Boolean only_media,
            @Query("pinned") Boolean pinned,
            @Query("tagged") String tagged,
            @Query("limit") int limit
    );

+1 −0
Original line number Diff line number Diff line
@@ -288,6 +288,7 @@ public class Helper {
    public static final String ARG_SHOW_REBLOGS = "ARG_SHOW_REBLOGS";
    public static final String ARG_INITIALIZE_VIEW = "ARG_INITIALIZE_VIEW";
    public static final String ARG_SHOW_PINNED = "ARG_SHOW_PINNED";
    public static final String ARG_TAGGED = "ARG_TAGGED";
    public static final String ARG_SHOW_MEDIA_ONY = "ARG_SHOW_MEDIA_ONY";
    public static final String ARG_MENTION = "ARG_MENTION";
    public static final String ARG_CHECK_REMOTELY = "ARG_CHECK_REMOTELY";
+3 −3
Original line number Diff line number Diff line
@@ -128,7 +128,7 @@ public class FragmentMediaProfile extends Fragment {
                public void federatedAccount(Account account) {
                    if (account != null && isAdded() && !requireActivity().isFinishing()) {
                        accountId = account.id;
                        accountsVM.getAccountStatuses(tempInstance, null, accountId, null, null, null, null, null, true, false, MastodonHelper.statusesPerCall(requireActivity()))
                        accountsVM.getAccountStatuses(tempInstance, null, accountId, null, null, null, null, null, true, false, null, MastodonHelper.statusesPerCall(requireActivity()))
                                .observe(getViewLifecycleOwner(), statuses -> initializeStatusesCommonView(statuses));
                    } else {
                        if (isAdded() && !requireActivity().isFinishing()) {
@@ -141,7 +141,7 @@ public class FragmentMediaProfile extends Fragment {
            tempToken = BaseMainActivity.currentToken;
            tempInstance = BaseMainActivity.currentInstance;
            accountId = accountTimeline.id;
            accountsVM.getAccountStatuses(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, accountTimeline.id, null, null, null, null, null, true, false, MastodonHelper.statusesPerCall(requireActivity()))
            accountsVM.getAccountStatuses(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, accountTimeline.id, null, null, null, null, null, true, false, null, MastodonHelper.statusesPerCall(requireActivity()))
                    .observe(getViewLifecycleOwner(), this::initializeStatusesCommonView);
        }
    }
@@ -208,7 +208,7 @@ public class FragmentMediaProfile extends Fragment {
                        if (!flagLoading) {
                            flagLoading = true;
                            binding.loadingNextElements.setVisibility(View.VISIBLE);
                            accountsVM.getAccountStatuses(tempInstance, tempToken, accountId, max_id, null, null, null, null, true, false, MastodonHelper.statusesPerCall(requireActivity()))
                            accountsVM.getAccountStatuses(tempInstance, tempToken, accountId, max_id, null, null, null, null, true, false, null, MastodonHelper.statusesPerCall(requireActivity()))
                                    .observe(getViewLifecycleOwner(), newStatuses -> dealWithPagination(newStatuses));
                        }
                    } else {
Loading