Loading app/src/main/java/app/fedilab/android/activities/ProfileActivity.java +21 −4 Original line number Diff line number Diff line Loading @@ -115,6 +115,7 @@ public class ProfileActivity extends BaseActivity { private String account_id; private String mention_str; private WellKnownNodeinfo.NodeInfo nodeInfo; private boolean checkRemotely; private final BroadcastReceiver broadcast_data = new BroadcastReceiver() { @Override Loading @@ -141,10 +142,12 @@ public class ProfileActivity extends BaseActivity { ActionBar actionBar = getSupportActionBar(); Bundle b = getIntent().getExtras(); binding.accountFollow.setEnabled(false); checkRemotely = false; if (b != null) { account = (Account) b.getSerializable(Helper.ARG_ACCOUNT); account_id = b.getString(Helper.ARG_USER_ID, null); mention_str = b.getString(Helper.ARG_MENTION, null); checkRemotely = b.getBoolean(Helper.ARG_CHECK_REMOTELY, false); } postponeEnterTransition(); Loading Loading @@ -239,7 +242,7 @@ public class ProfileActivity extends BaseActivity { binding.accountTabLayout.clearOnTabSelectedListeners(); binding.accountTabLayout.removeAllTabs(); //Tablayout for timelines/following/followers FedilabProfileTLPageAdapter fedilabProfileTLPageAdapter = new FedilabProfileTLPageAdapter(getSupportFragmentManager(), account); FedilabProfileTLPageAdapter fedilabProfileTLPageAdapter = new FedilabProfileTLPageAdapter(getSupportFragmentManager(), account, checkRemotely); binding.accountTabLayout.addTab(binding.accountTabLayout.newTab().setText(getString(R.string.status_cnt, Helper.withSuffix(account.statuses_count)))); binding.accountTabLayout.addTab(binding.accountTabLayout.newTab().setText(getString(R.string.following_cnt, Helper.withSuffix(account.following_count)))); binding.accountTabLayout.addTab(binding.accountTabLayout.newTab().setText(getString(R.string.followers_cnt, Helper.withSuffix(account.followers_count)))); Loading Loading @@ -339,11 +342,25 @@ public class ProfileActivity extends BaseActivity { binding.accountMoved.setMovementMethod(LinkMovementMethod.getInstance()); } if (account.acct != null && account.acct.contains("@")) binding.warningMessage.setVisibility(View.VISIBLE); binding.warningContainer.setVisibility(View.VISIBLE); else binding.warningMessage.setVisibility(View.GONE); binding.warningContainer.setVisibility(View.GONE); binding.openRemoteProfile.setBackgroundTintList(ThemeHelper.getButtonActionColorStateList(ProfileActivity.this)); if (checkRemotely) { binding.openRemoteProfile.setVisibility(View.GONE); } binding.openRemoteProfile.setOnClickListener(v -> { Intent intent = new Intent(ProfileActivity.this, ProfileActivity.class); Bundle b = new Bundle(); b.putSerializable(Helper.ARG_ACCOUNT, account); b.putSerializable(Helper.ARG_CHECK_REMOTELY, true); intent.putExtras(b); ActivityOptionsCompat options = ActivityOptionsCompat .makeSceneTransitionAnimation(ProfileActivity.this, binding.profilePicture, getString(R.string.activity_porfile_pp)); startActivity(intent, options.toBundle()); finish(); }); //Fields for profile List<Field> fields = account.fields; if (fields != null && fields.size() > 0) { Loading app/src/main/java/app/fedilab/android/helper/CrossActionHelper.java +36 −0 Original line number Diff line number Diff line Loading @@ -439,6 +439,42 @@ public class CrossActionHelper { } /** * Fetch and federate the remote status */ public static void fetchAccountInRemoteInstance(@NonNull Context context, String acct, String instance, Callback callback) { MastodonSearchService mastodonSearchService = init(context, instance); new Thread(() -> { Call<Results> resultsCall = mastodonSearchService.search(null, acct, null, "accounts", null, null, null, null, null, null, 1); Results results = null; if (resultsCall != null) { try { Response<Results> resultsResponse = resultsCall.execute(); if (resultsResponse.isSuccessful()) { results = resultsResponse.body(); if (results != null) { if (results.accounts == null) { results.accounts = new ArrayList<>(); } } } } catch (IOException e) { e.printStackTrace(); } } Handler mainHandler = new Handler(Looper.getMainLooper()); Results finalResults = results; Runnable myRunnable = () -> { if (finalResults != null && finalResults.accounts != null && finalResults.accounts.size() > 0) { callback.federatedAccount(finalResults.accounts.get(0)); } }; mainHandler.post(myRunnable); }).start(); } public enum TypeOfCrossAction { FOLLOW_ACTION, UNFOLLOW_ACTION, Loading app/src/main/java/app/fedilab/android/helper/Helper.java +1 −0 Original line number Diff line number Diff line Loading @@ -272,6 +272,7 @@ public class Helper { public static final String ARG_SHOW_PINNED = "ARG_SHOW_PINNED"; 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"; public static final String ARG_USER_ID = "ARG_USER_ID"; public static final String ARG_MEDIA_ARRAY = "ARG_MEDIA_ARRAY"; public static final String ARG_VISIBILITY = "ARG_VISIBILITY"; Loading app/src/main/java/app/fedilab/android/ui/drawer/NotificationAdapter.java +1 −1 Original line number Diff line number Diff line Loading @@ -259,7 +259,7 @@ public class NotificationAdapter extends RecyclerView.Adapter<RecyclerView.ViewH if (notification.status != null) { notification.status.cached = notification.cached; } statusManagement(context, statusesVM, searchVM, holderStatus, this, null, notification.status, Timeline.TimeLineEnum.NOTIFICATION, false, true, null); statusManagement(context, statusesVM, searchVM, holderStatus, this, null, notification.status, Timeline.TimeLineEnum.NOTIFICATION, false, true, false, null); holderStatus.bindingNotification.status.dateShort.setText(Helper.dateDiff(context, notification.created_at)); holderStatus.bindingNotification.containerTransparent.setAlpha(.3f); if (getItemViewType(position) == TYPE_MENTION || getItemViewType(position) == TYPE_STATUS || getItemViewType(position) == TYPE_REACTION) { Loading app/src/main/java/app/fedilab/android/ui/drawer/StatusAdapter.java +6 −4 Original line number Diff line number Diff line Loading @@ -153,14 +153,16 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> private final boolean minified; private final Timeline.TimeLineEnum timelineType; private final boolean canBeFederated; private final boolean checkRemotely; public FetchMoreCallBack fetchMoreCallBack; private Context context; public StatusAdapter(List<Status> statuses, Timeline.TimeLineEnum timelineType, boolean minified, boolean canBeFederated) { public StatusAdapter(List<Status> statuses, Timeline.TimeLineEnum timelineType, boolean minified, boolean canBeFederated, boolean checkRemotely) { this.statusList = statuses; this.timelineType = timelineType; this.minified = minified; this.canBeFederated = canBeFederated; this.checkRemotely = checkRemotely; } Loading Loading @@ -349,14 +351,14 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> List<Status> statusList, Status status, Timeline.TimeLineEnum timelineType, boolean minified, boolean canBeFederated, boolean minified, boolean canBeFederated, boolean checkRemotely, FetchMoreCallBack fetchMoreCallBack) { if (status == null) { return; } SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context); boolean remote = timelineType == Timeline.TimeLineEnum.REMOTE; boolean remote = timelineType == Timeline.TimeLineEnum.REMOTE || checkRemotely; Status statusToDeal = status.reblog != null ? status.reblog : status; Loading Loading @@ -2161,7 +2163,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> StatusViewHolder holder = (StatusViewHolder) viewHolder; StatusesVM statusesVM = new ViewModelProvider((ViewModelStoreOwner) context).get(StatusesVM.class); SearchVM searchVM = new ViewModelProvider((ViewModelStoreOwner) context).get(SearchVM.class); statusManagement(context, statusesVM, searchVM, holder, this, statusList, status, timelineType, minified, canBeFederated, fetchMoreCallBack); statusManagement(context, statusesVM, searchVM, holder, this, statusList, status, timelineType, minified, canBeFederated, checkRemotely, fetchMoreCallBack); } else if (viewHolder.getItemViewType() == STATUS_FILTERED) { StatusViewHolder holder = (StatusViewHolder) viewHolder; holder.bindingFiltered.filteredText.setText(context.getString(R.string.filtered_by, status.filteredByApp.title)); Loading Loading
app/src/main/java/app/fedilab/android/activities/ProfileActivity.java +21 −4 Original line number Diff line number Diff line Loading @@ -115,6 +115,7 @@ public class ProfileActivity extends BaseActivity { private String account_id; private String mention_str; private WellKnownNodeinfo.NodeInfo nodeInfo; private boolean checkRemotely; private final BroadcastReceiver broadcast_data = new BroadcastReceiver() { @Override Loading @@ -141,10 +142,12 @@ public class ProfileActivity extends BaseActivity { ActionBar actionBar = getSupportActionBar(); Bundle b = getIntent().getExtras(); binding.accountFollow.setEnabled(false); checkRemotely = false; if (b != null) { account = (Account) b.getSerializable(Helper.ARG_ACCOUNT); account_id = b.getString(Helper.ARG_USER_ID, null); mention_str = b.getString(Helper.ARG_MENTION, null); checkRemotely = b.getBoolean(Helper.ARG_CHECK_REMOTELY, false); } postponeEnterTransition(); Loading Loading @@ -239,7 +242,7 @@ public class ProfileActivity extends BaseActivity { binding.accountTabLayout.clearOnTabSelectedListeners(); binding.accountTabLayout.removeAllTabs(); //Tablayout for timelines/following/followers FedilabProfileTLPageAdapter fedilabProfileTLPageAdapter = new FedilabProfileTLPageAdapter(getSupportFragmentManager(), account); FedilabProfileTLPageAdapter fedilabProfileTLPageAdapter = new FedilabProfileTLPageAdapter(getSupportFragmentManager(), account, checkRemotely); binding.accountTabLayout.addTab(binding.accountTabLayout.newTab().setText(getString(R.string.status_cnt, Helper.withSuffix(account.statuses_count)))); binding.accountTabLayout.addTab(binding.accountTabLayout.newTab().setText(getString(R.string.following_cnt, Helper.withSuffix(account.following_count)))); binding.accountTabLayout.addTab(binding.accountTabLayout.newTab().setText(getString(R.string.followers_cnt, Helper.withSuffix(account.followers_count)))); Loading Loading @@ -339,11 +342,25 @@ public class ProfileActivity extends BaseActivity { binding.accountMoved.setMovementMethod(LinkMovementMethod.getInstance()); } if (account.acct != null && account.acct.contains("@")) binding.warningMessage.setVisibility(View.VISIBLE); binding.warningContainer.setVisibility(View.VISIBLE); else binding.warningMessage.setVisibility(View.GONE); binding.warningContainer.setVisibility(View.GONE); binding.openRemoteProfile.setBackgroundTintList(ThemeHelper.getButtonActionColorStateList(ProfileActivity.this)); if (checkRemotely) { binding.openRemoteProfile.setVisibility(View.GONE); } binding.openRemoteProfile.setOnClickListener(v -> { Intent intent = new Intent(ProfileActivity.this, ProfileActivity.class); Bundle b = new Bundle(); b.putSerializable(Helper.ARG_ACCOUNT, account); b.putSerializable(Helper.ARG_CHECK_REMOTELY, true); intent.putExtras(b); ActivityOptionsCompat options = ActivityOptionsCompat .makeSceneTransitionAnimation(ProfileActivity.this, binding.profilePicture, getString(R.string.activity_porfile_pp)); startActivity(intent, options.toBundle()); finish(); }); //Fields for profile List<Field> fields = account.fields; if (fields != null && fields.size() > 0) { Loading
app/src/main/java/app/fedilab/android/helper/CrossActionHelper.java +36 −0 Original line number Diff line number Diff line Loading @@ -439,6 +439,42 @@ public class CrossActionHelper { } /** * Fetch and federate the remote status */ public static void fetchAccountInRemoteInstance(@NonNull Context context, String acct, String instance, Callback callback) { MastodonSearchService mastodonSearchService = init(context, instance); new Thread(() -> { Call<Results> resultsCall = mastodonSearchService.search(null, acct, null, "accounts", null, null, null, null, null, null, 1); Results results = null; if (resultsCall != null) { try { Response<Results> resultsResponse = resultsCall.execute(); if (resultsResponse.isSuccessful()) { results = resultsResponse.body(); if (results != null) { if (results.accounts == null) { results.accounts = new ArrayList<>(); } } } } catch (IOException e) { e.printStackTrace(); } } Handler mainHandler = new Handler(Looper.getMainLooper()); Results finalResults = results; Runnable myRunnable = () -> { if (finalResults != null && finalResults.accounts != null && finalResults.accounts.size() > 0) { callback.federatedAccount(finalResults.accounts.get(0)); } }; mainHandler.post(myRunnable); }).start(); } public enum TypeOfCrossAction { FOLLOW_ACTION, UNFOLLOW_ACTION, Loading
app/src/main/java/app/fedilab/android/helper/Helper.java +1 −0 Original line number Diff line number Diff line Loading @@ -272,6 +272,7 @@ public class Helper { public static final String ARG_SHOW_PINNED = "ARG_SHOW_PINNED"; 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"; public static final String ARG_USER_ID = "ARG_USER_ID"; public static final String ARG_MEDIA_ARRAY = "ARG_MEDIA_ARRAY"; public static final String ARG_VISIBILITY = "ARG_VISIBILITY"; Loading
app/src/main/java/app/fedilab/android/ui/drawer/NotificationAdapter.java +1 −1 Original line number Diff line number Diff line Loading @@ -259,7 +259,7 @@ public class NotificationAdapter extends RecyclerView.Adapter<RecyclerView.ViewH if (notification.status != null) { notification.status.cached = notification.cached; } statusManagement(context, statusesVM, searchVM, holderStatus, this, null, notification.status, Timeline.TimeLineEnum.NOTIFICATION, false, true, null); statusManagement(context, statusesVM, searchVM, holderStatus, this, null, notification.status, Timeline.TimeLineEnum.NOTIFICATION, false, true, false, null); holderStatus.bindingNotification.status.dateShort.setText(Helper.dateDiff(context, notification.created_at)); holderStatus.bindingNotification.containerTransparent.setAlpha(.3f); if (getItemViewType(position) == TYPE_MENTION || getItemViewType(position) == TYPE_STATUS || getItemViewType(position) == TYPE_REACTION) { Loading
app/src/main/java/app/fedilab/android/ui/drawer/StatusAdapter.java +6 −4 Original line number Diff line number Diff line Loading @@ -153,14 +153,16 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> private final boolean minified; private final Timeline.TimeLineEnum timelineType; private final boolean canBeFederated; private final boolean checkRemotely; public FetchMoreCallBack fetchMoreCallBack; private Context context; public StatusAdapter(List<Status> statuses, Timeline.TimeLineEnum timelineType, boolean minified, boolean canBeFederated) { public StatusAdapter(List<Status> statuses, Timeline.TimeLineEnum timelineType, boolean minified, boolean canBeFederated, boolean checkRemotely) { this.statusList = statuses; this.timelineType = timelineType; this.minified = minified; this.canBeFederated = canBeFederated; this.checkRemotely = checkRemotely; } Loading Loading @@ -349,14 +351,14 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> List<Status> statusList, Status status, Timeline.TimeLineEnum timelineType, boolean minified, boolean canBeFederated, boolean minified, boolean canBeFederated, boolean checkRemotely, FetchMoreCallBack fetchMoreCallBack) { if (status == null) { return; } SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context); boolean remote = timelineType == Timeline.TimeLineEnum.REMOTE; boolean remote = timelineType == Timeline.TimeLineEnum.REMOTE || checkRemotely; Status statusToDeal = status.reblog != null ? status.reblog : status; Loading Loading @@ -2161,7 +2163,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> StatusViewHolder holder = (StatusViewHolder) viewHolder; StatusesVM statusesVM = new ViewModelProvider((ViewModelStoreOwner) context).get(StatusesVM.class); SearchVM searchVM = new ViewModelProvider((ViewModelStoreOwner) context).get(SearchVM.class); statusManagement(context, statusesVM, searchVM, holder, this, statusList, status, timelineType, minified, canBeFederated, fetchMoreCallBack); statusManagement(context, statusesVM, searchVM, holder, this, statusList, status, timelineType, minified, canBeFederated, checkRemotely, fetchMoreCallBack); } else if (viewHolder.getItemViewType() == STATUS_FILTERED) { StatusViewHolder holder = (StatusViewHolder) viewHolder; holder.bindingFiltered.filteredText.setText(context.getString(R.string.filtered_by, status.filteredByApp.title)); Loading