Loading app/src/main/java/app/fedilab/android/mastodon/activities/ProfileActivity.java +42 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); } }); } Loading app/src/main/java/app/fedilab/android/mastodon/activities/TimelineActivity.java +9 −0 Original line number Diff line number Diff line Loading @@ -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); } Loading app/src/main/java/app/fedilab/android/mastodon/client/endpoints/MastodonAccountsService.java +1 −0 Original line number Diff line number Diff line Loading @@ -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 ); Loading app/src/main/java/app/fedilab/android/mastodon/helper/Helper.java +1 −0 Original line number Diff line number Diff line Loading @@ -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"; Loading app/src/main/java/app/fedilab/android/mastodon/ui/fragment/media/FragmentMediaProfile.java +3 −3 Original line number Diff line number Diff line Loading @@ -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()) { Loading @@ -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); } } Loading Loading @@ -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 Loading
app/src/main/java/app/fedilab/android/mastodon/activities/ProfileActivity.java +42 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); } }); } Loading
app/src/main/java/app/fedilab/android/mastodon/activities/TimelineActivity.java +9 −0 Original line number Diff line number Diff line Loading @@ -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); } Loading
app/src/main/java/app/fedilab/android/mastodon/client/endpoints/MastodonAccountsService.java +1 −0 Original line number Diff line number Diff line Loading @@ -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 ); Loading
app/src/main/java/app/fedilab/android/mastodon/helper/Helper.java +1 −0 Original line number Diff line number Diff line Loading @@ -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"; Loading
app/src/main/java/app/fedilab/android/mastodon/ui/fragment/media/FragmentMediaProfile.java +3 −3 Original line number Diff line number Diff line Loading @@ -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()) { Loading @@ -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); } } Loading Loading @@ -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