diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/RetrieveRepliesAsyncTask.java b/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/RetrieveRepliesAsyncTask.java index fa6dc5fe4..2e19e8cb8 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/RetrieveRepliesAsyncTask.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/RetrieveRepliesAsyncTask.java @@ -16,11 +16,9 @@ package fr.gouv.etalab.mastodon.asynctasks; import android.content.Context; import android.os.AsyncTask; -import android.os.SystemClock; - import java.lang.ref.WeakReference; +import java.util.ArrayList; import java.util.List; - import fr.gouv.etalab.mastodon.client.API; import fr.gouv.etalab.mastodon.client.APIResponse; import fr.gouv.etalab.mastodon.interfaces.OnRetrieveRepliesInterface; @@ -35,12 +33,12 @@ public class RetrieveRepliesAsyncTask extends AsyncTask { private APIResponse apiResponse; private OnRetrieveRepliesInterface listener; - private List statuses; + private fr.gouv.etalab.mastodon.client.Entities.Status status; private WeakReference contextReference; - public RetrieveRepliesAsyncTask(Context context, List statuses, OnRetrieveRepliesInterface onRetrieveRepliesInterface){ + public RetrieveRepliesAsyncTask(Context context, fr.gouv.etalab.mastodon.client.Entities.Status status, OnRetrieveRepliesInterface onRetrieveRepliesInterface){ this.contextReference = new WeakReference<>(context); - this.statuses = statuses; + this.status = status; this.listener = onRetrieveRepliesInterface; } @@ -48,12 +46,11 @@ public class RetrieveRepliesAsyncTask extends AsyncTask { protected Void doInBackground(Void... params) { API api = new API(this.contextReference.get()); - for (fr.gouv.etalab.mastodon.client.Entities.Status status : statuses) { - fr.gouv.etalab.mastodon.client.Entities.Context statusContext = api.getStatusContext((status.getReblog() != null) ? status.getReblog().getId() : status.getId()); - SystemClock.sleep(25); - status.setReplies(statusContext.getDescendants()); - } + fr.gouv.etalab.mastodon.client.Entities.Context statusContext = api.getStatusContext((status.getReblog() != null) ? status.getReblog().getId() : status.getId()); + status.setReplies(statusContext.getDescendants()); apiResponse = new APIResponse(); + List statuses = new ArrayList<>(); + statuses.add(status); apiResponse.setStatuses(statuses); return null; } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java index 24b9e8679..9dae75f21 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java @@ -86,6 +86,7 @@ import fr.gouv.etalab.mastodon.activities.ShowConversationActivity; import fr.gouv.etalab.mastodon.activities.TootActivity; import fr.gouv.etalab.mastodon.asynctasks.PostActionAsyncTask; import fr.gouv.etalab.mastodon.asynctasks.RetrieveFeedsAsyncTask; +import fr.gouv.etalab.mastodon.asynctasks.RetrieveRepliesAsyncTask; import fr.gouv.etalab.mastodon.client.API; import fr.gouv.etalab.mastodon.client.APIResponse; import fr.gouv.etalab.mastodon.client.Entities.Attachment; @@ -97,6 +98,7 @@ import fr.gouv.etalab.mastodon.helper.Helper; import fr.gouv.etalab.mastodon.interfaces.OnPostActionInterface; import fr.gouv.etalab.mastodon.interfaces.OnRetrieveEmojiInterface; import fr.gouv.etalab.mastodon.interfaces.OnRetrieveFeedsInterface; +import fr.gouv.etalab.mastodon.interfaces.OnRetrieveRepliesInterface; import fr.gouv.etalab.mastodon.interfaces.OnTranslatedInterface; import fr.gouv.etalab.mastodon.translation.GoogleTranslateQuery; import fr.gouv.etalab.mastodon.translation.YandexQuery; @@ -111,7 +113,7 @@ import static fr.gouv.etalab.mastodon.helper.Helper.changeDrawableColor; * Created by Thomas on 24/04/2017. * Adapter for Status */ -public class StatusListAdapter extends RecyclerView.Adapter implements OnPostActionInterface, OnTranslatedInterface, OnRetrieveFeedsInterface, OnRetrieveEmojiInterface { +public class StatusListAdapter extends RecyclerView.Adapter implements OnPostActionInterface, OnTranslatedInterface, OnRetrieveFeedsInterface, OnRetrieveEmojiInterface, OnRetrieveRepliesInterface { private Context context; private List statuses; @@ -167,6 +169,24 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct return statuses.size(); } + @Override + public void onRetrieveReplies(APIResponse apiResponse) { + if( apiResponse.getError() != null || apiResponse.getStatuses() == null || apiResponse.getStatuses().size() == 0){ + return; + } + List modifiedStatus = apiResponse.getStatuses(); + for(Status stmp: modifiedStatus){ + for(Status status: statuses){ + if( status.getId().equals(stmp.getId())) + if( stmp.getReplies() != null ) + status.setReplies(stmp.getReplies()); + else + status.setReplies(new ArrayList()); + } + } + statusListAdapter.notifyDataSetChanged(); + } + private class ViewHolderEmpty extends RecyclerView.ViewHolder{ ViewHolderEmpty(View itemView) { super(itemView); @@ -317,8 +337,16 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct DisplayImageOptions options = new DisplayImageOptions.Builder().displayer(new RoundedBitmapDisplayer(10)).cacheInMemory(false) .cacheOnDisk(true).resetViewBeforeLoading(true).build(); - final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); + //Retrieves replies + if( type == RetrieveFeedsAsyncTask.Type.HOME ) { + boolean showPreview = sharedpreferences.getBoolean(Helper.SET_PREVIEW_REPLIES, false); + //Retrieves attached replies to a toot + if (showPreview && status.getReplies() == null) { + new RetrieveRepliesAsyncTask(context, status, StatusListAdapter.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + } + } + final String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null); diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java index a179cc5b4..32eb17911 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java @@ -24,7 +24,6 @@ import android.support.v4.view.ViewCompat; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -35,12 +34,10 @@ import java.util.List; import fr.gouv.etalab.mastodon.activities.MainActivity; import fr.gouv.etalab.mastodon.asynctasks.RetrieveMissingFeedsAsyncTask; -import fr.gouv.etalab.mastodon.asynctasks.RetrieveRepliesAsyncTask; import fr.gouv.etalab.mastodon.client.APIResponse; import fr.gouv.etalab.mastodon.drawers.StatusListAdapter; import fr.gouv.etalab.mastodon.helper.Helper; import fr.gouv.etalab.mastodon.interfaces.OnRetrieveMissingFeedsInterface; -import fr.gouv.etalab.mastodon.interfaces.OnRetrieveRepliesInterface; import fr.gouv.etalab.mastodon.services.StreamingFederatedTimelineService; import fr.gouv.etalab.mastodon.services.StreamingLocalTimelineService; import mastodon.etalab.gouv.fr.mastodon.R; @@ -53,7 +50,7 @@ import fr.gouv.etalab.mastodon.interfaces.OnRetrieveFeedsInterface; * Created by Thomas on 24/04/2017. * Fragment to display content related to status */ -public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsInterface, OnRetrieveRepliesInterface, OnRetrieveMissingFeedsInterface { +public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsInterface, OnRetrieveMissingFeedsInterface { private boolean flag_loading; @@ -291,14 +288,7 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn swipeRefreshLayout.setRefreshing(false); firstLoad = false; - //Retrieves replies - if(statuses != null && statuses.size() > 0 && type == RetrieveFeedsAsyncTask.Type.HOME ) { - boolean showPreview = sharedpreferences.getBoolean(Helper.SET_PREVIEW_REPLIES, false); - //Retrieves attached replies to a toot - if (showPreview) { - new RetrieveRepliesAsyncTask(context, statuses, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - } - } + } /** @@ -491,24 +481,6 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn } } - @Override - public void onRetrieveReplies(APIResponse apiResponse) { - if( apiResponse.getError() != null || apiResponse.getStatuses() == null || apiResponse.getStatuses().size() == 0){ - return; - } - List modifiedStatus = apiResponse.getStatuses(); - for(Status stmp: modifiedStatus){ - for(Status status: statuses){ - if( status.getId().equals(stmp.getId())) - if( stmp.getReplies() != null ) - status.setReplies(stmp.getReplies()); - else - status.setReplies(new ArrayList()); - } - } - statusListAdapter.notifyDataSetChanged(); - } - @Override public void onRetrieveMissingFeeds(List statuses) { if( statuses != null && statuses.size() > 0) {