Fix Friendica conversation issue
This commit is contained in:
parent
7bca31f2cd
commit
0d5223dff7
|
@ -78,6 +78,7 @@ public class ShowConversationActivity extends BaseActivity implements OnRetriev
|
|||
private StatusListAdapter statusListAdapter;
|
||||
private boolean expanded;
|
||||
private BroadcastReceiver receive_action;
|
||||
private String conversationId;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
|
@ -112,6 +113,7 @@ public class ShowConversationActivity extends BaseActivity implements OnRetriev
|
|||
detailsStatus = b.getParcelable("status");
|
||||
expanded = b.getBoolean("expanded", false);
|
||||
initialStatus = b.getParcelable("initialStatus");
|
||||
conversationId = b.getString("conversationId", null);
|
||||
}
|
||||
if( detailsStatus == null || detailsStatus.getId() == null)
|
||||
finish();
|
||||
|
@ -253,6 +255,8 @@ public class ShowConversationActivity extends BaseActivity implements OnRetriev
|
|||
statusIdToFetch = detailsStatus.getId();
|
||||
if( statusIdToFetch == null)
|
||||
finish();
|
||||
if( conversationId != null)
|
||||
statusIdToFetch = conversationId;
|
||||
new RetrieveContextAsyncTask(getApplicationContext(), expanded, statusIdToFetch, ShowConversationActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
switch (theme){
|
||||
case Helper.THEME_LIGHT:
|
||||
|
@ -322,33 +326,74 @@ public class ShowConversationActivity extends BaseActivity implements OnRetriev
|
|||
if( context.getAncestors() == null ){
|
||||
return;
|
||||
}
|
||||
|
||||
statusListAdapter.setConversationPosition( context.getAncestors().size());
|
||||
if(!expanded) {
|
||||
if (context.getAncestors() != null && context.getAncestors().size() > 0) {
|
||||
statuses.addAll(0, context.getAncestors());
|
||||
statusListAdapter.notifyItemRangeInserted(0, context.getAncestors().size());
|
||||
}
|
||||
if (context.getDescendants() != null && context.getDescendants().size() > 0) {
|
||||
statuses.addAll(context.getAncestors().size() + 1, context.getDescendants());
|
||||
statusListAdapter.notifyItemRangeChanged(context.getAncestors().size()+1, context.getDescendants().size());
|
||||
if( MainActivity.social != UpdateAccountInfoAsyncTask.SOCIAL.GNU && MainActivity.social != UpdateAccountInfoAsyncTask.SOCIAL.FRIENDICA){
|
||||
statusListAdapter.setConversationPosition( context.getAncestors().size());
|
||||
if(!expanded) {
|
||||
if (context.getAncestors() != null && context.getAncestors().size() > 0) {
|
||||
statuses.addAll(0, context.getAncestors());
|
||||
statusListAdapter.notifyItemRangeInserted(0, context.getAncestors().size());
|
||||
}
|
||||
if (context.getDescendants() != null && context.getDescendants().size() > 0) {
|
||||
statuses.addAll(context.getAncestors().size() + 1, context.getDescendants());
|
||||
statusListAdapter.notifyItemRangeChanged(context.getAncestors().size()+1, context.getDescendants().size());
|
||||
}
|
||||
}else{
|
||||
List<Status> statusesTemp = context.getDescendants();
|
||||
int i = 1;
|
||||
int position = 0;
|
||||
for(Status status: statusesTemp){
|
||||
statuses.add(status);
|
||||
if( status.getId().equals(detailsStatus.getId())) {
|
||||
statusListAdapter.setConversationPosition(i);
|
||||
detailsStatus = status;
|
||||
position = i;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
statusListAdapter.notifyItemRangeChanged(1,context.getDescendants().size());
|
||||
lv_status.scrollToPosition(position);
|
||||
}
|
||||
}else{
|
||||
List<Status> statusesTemp = context.getDescendants();
|
||||
int i = 1;
|
||||
int position = 0;
|
||||
for(Status status: statusesTemp){
|
||||
statuses.add(status);
|
||||
if( status.getId().equals(detailsStatus.getId())) {
|
||||
statusListAdapter.setConversationPosition(i);
|
||||
detailsStatus = status;
|
||||
position = i;
|
||||
int i = 0;
|
||||
if( context.getAncestors() != null && context.getAncestors().size() > 1){
|
||||
statuses = new ArrayList<>();
|
||||
statuses.clear();
|
||||
for(Status status: context.getAncestors()){
|
||||
if(detailsStatus.equals(status)) {
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
i++;
|
||||
boolean isOnWifi = Helper.isOnWIFI(getApplicationContext());
|
||||
for(Status status: context.getAncestors()){
|
||||
statuses.add(0,status);
|
||||
}
|
||||
statusListAdapter = new StatusListAdapter(ShowConversationActivity.this, (statuses.size()-1-i), null, isOnWifi, statuses);
|
||||
statusListAdapter.setConversationPosition((statuses.size()-1-i));
|
||||
final LinearLayoutManager mLayoutManager;
|
||||
mLayoutManager = new LinearLayoutManager(this);
|
||||
lv_status.setLayoutManager(mLayoutManager);
|
||||
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
|
||||
switch (theme){
|
||||
case Helper.THEME_LIGHT:
|
||||
setTheme(R.style.AppTheme_NoActionBar);
|
||||
break;
|
||||
case Helper.THEME_DARK:
|
||||
setTheme(R.style.AppThemeDark_NoActionBar);
|
||||
break;
|
||||
case Helper.THEME_BLACK:
|
||||
setTheme(R.style.AppThemeBlack_NoActionBar);
|
||||
break;
|
||||
default:
|
||||
setTheme(R.style.AppThemeDark_NoActionBar);
|
||||
}
|
||||
|
||||
lv_status.addItemDecoration(new ConversationDecoration(ShowConversationActivity.this, theme));
|
||||
lv_status.setAdapter(statusListAdapter);
|
||||
}
|
||||
statusListAdapter.notifyItemRangeChanged(1,context.getDescendants().size());
|
||||
lv_status.scrollToPosition(position);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -20,7 +20,6 @@ import android.content.SharedPreferences;
|
|||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.content.LocalBroadcastManager;
|
||||
import android.util.Log;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
|
@ -548,19 +547,11 @@ public class GNUAPI {
|
|||
fr.gouv.etalab.mastodon.client.Entities.Context statusContext = new fr.gouv.etalab.mastodon.client.Entities.Context();
|
||||
try {
|
||||
HttpsConnection httpsConnection = new HttpsConnection(context);
|
||||
Log.v(Helper.TAG,"url: " + getAbsoluteUrl(String.format("/statusnet/conversation/%s.json", statusId)));
|
||||
String response = httpsConnection.get(getAbsoluteUrl(String.format("/statusnet/conversation/%s.json", statusId)), 60, null, prefKeyOauthTokenT);
|
||||
statuses = parseStatuses(context, new JSONArray(response));
|
||||
if( statuses != null && statuses.size() > 0){
|
||||
ArrayList<Status> ancestors = new ArrayList<>();
|
||||
ArrayList<Status> descendants = new ArrayList<>();
|
||||
for(Status status: statuses){
|
||||
if( Long.parseLong(status.getId()) > Long.parseLong(statusId) +1)
|
||||
descendants.add(status);
|
||||
else if( Long.parseLong(status.getId()) < Long.parseLong(statusId))
|
||||
ancestors.add(status);
|
||||
}
|
||||
statusContext.setAncestors(ancestors);
|
||||
statusContext.setAncestors(statuses);
|
||||
statusContext.setDescendants(descendants);
|
||||
}
|
||||
|
||||
|
@ -1818,7 +1809,11 @@ public class GNUAPI {
|
|||
}catch (Exception ignored){ status.setMedia_attachments(new ArrayList<>());}
|
||||
|
||||
status.setCard(null);
|
||||
|
||||
try {
|
||||
status.setConversationId(resobj.get("statusnet_conversation_id").toString());
|
||||
}catch (Exception ignored){
|
||||
status.setConversationId(resobj.get("id").toString());
|
||||
}
|
||||
//Retrieves mentions
|
||||
List<Mention> mentions = new ArrayList<>();
|
||||
if( resobj.has("attentions")) {
|
||||
|
|
|
@ -855,6 +855,8 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
|
|||
if (type != RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE) {
|
||||
Intent intent = new Intent(context, ShowConversationActivity.class);
|
||||
Bundle b = new Bundle();
|
||||
if( social == UpdateAccountInfoAsyncTask.SOCIAL.GNU || social == UpdateAccountInfoAsyncTask.SOCIAL.FRIENDICA)
|
||||
b.putString("conversationId", status.getConversationId());
|
||||
if (status.getReblog() == null)
|
||||
b.putParcelable("status", status);
|
||||
else
|
||||
|
@ -875,6 +877,8 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
|
|||
if (type != RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE) {
|
||||
Intent intent = new Intent(context, ShowConversationActivity.class);
|
||||
Bundle b = new Bundle();
|
||||
if( social == UpdateAccountInfoAsyncTask.SOCIAL.GNU || social == UpdateAccountInfoAsyncTask.SOCIAL.FRIENDICA)
|
||||
b.putString("conversationId", status.getConversationId());
|
||||
if (status.getReblog() == null)
|
||||
b.putParcelable("status", status);
|
||||
else
|
||||
|
|
Loading…
Reference in New Issue