Fix boost/fav not updated.

This commit is contained in:
stom79 2019-01-10 11:51:25 +01:00
parent 0cf5920956
commit dc6c595186
5 changed files with 85 additions and 11 deletions

View File

@ -58,6 +58,7 @@ import android.text.Editable;
import android.text.InputFilter; import android.text.InputFilter;
import android.text.TextWatcher; import android.text.TextWatcher;
import android.util.Patterns; import android.util.Patterns;
import android.util.SparseArray;
import android.view.Gravity; import android.view.Gravity;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
@ -214,6 +215,7 @@ public abstract class BaseMainActivity extends BaseActivity
public static HashMap<Integer, RetrieveFeedsAsyncTask.Type> typePosition = new HashMap<>(); public static HashMap<Integer, RetrieveFeedsAsyncTask.Type> typePosition = new HashMap<>();
private FloatingActionButton federatedTimelines; private FloatingActionButton federatedTimelines;
public static UpdateAccountInfoAsyncTask.SOCIAL social; public static UpdateAccountInfoAsyncTask.SOCIAL social;
SparseArray<Fragment> registeredFragments = new SparseArray<>();
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@ -1351,6 +1353,7 @@ public abstract class BaseMainActivity extends BaseActivity
} }
Helper.switchLayout(BaseMainActivity.this); Helper.switchLayout(BaseMainActivity.this);
if( receive_data != null) if( receive_data != null)
LocalBroadcastManager.getInstance(this).unregisterReceiver(receive_data); LocalBroadcastManager.getInstance(this).unregisterReceiver(receive_data);
receive_data = new BroadcastReceiver() { receive_data = new BroadcastReceiver() {
@ -1368,6 +1371,7 @@ public abstract class BaseMainActivity extends BaseActivity
} }
} }
}; };
mamageNewIntent(getIntent()); mamageNewIntent(getIntent());
if( social == UpdateAccountInfoAsyncTask.SOCIAL.MASTODON) { if( social == UpdateAccountInfoAsyncTask.SOCIAL.MASTODON) {
@ -1602,6 +1606,8 @@ public abstract class BaseMainActivity extends BaseActivity
return true; return true;
} }
public void refreshFilters(){ public void refreshFilters(){
if(homeFragment != null) if(homeFragment != null)
homeFragment.refreshFilter(); homeFragment.refreshFilter();
@ -2383,8 +2389,10 @@ public abstract class BaseMainActivity extends BaseActivity
@NonNull @NonNull
@Override @Override
public Object instantiateItem(@NonNull ViewGroup container, int position) { public Object instantiateItem(@NonNull ViewGroup container, int position) {
Fragment createdFragment = (Fragment) super.instantiateItem(container, position);
registeredFragments.put(position, createdFragment);
if( social == UpdateAccountInfoAsyncTask.SOCIAL.MASTODON) { if( social == UpdateAccountInfoAsyncTask.SOCIAL.MASTODON) {
Fragment createdFragment = (Fragment) super.instantiateItem(container, position);
// save the appropriate reference depending on position // save the appropriate reference depending on position
if (position == 0) { if (position == 0) {
homeFragment = (DisplayStatusFragment) createdFragment; homeFragment = (DisplayStatusFragment) createdFragment;
@ -2399,13 +2407,15 @@ public abstract class BaseMainActivity extends BaseActivity
artFragment = (DisplayStatusFragment) createdFragment; artFragment = (DisplayStatusFragment) createdFragment;
} }
return createdFragment;
}else if( social == UpdateAccountInfoAsyncTask.SOCIAL.PEERTUBE){
return super.instantiateItem(container, position);
}
return null;
}
}
return createdFragment;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
registeredFragments.remove(position);
super.destroyItem(container, position, object);
}
@Override @Override
public int getCount() { public int getCount() {
return mNumOfTabs; return mNumOfTabs;

View File

@ -15,8 +15,11 @@ package fr.gouv.etalab.mastodon.client;
* see <http://www.gnu.org/licenses>. */ * see <http://www.gnu.org/licenses>. */
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v4.content.LocalBroadcastManager;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
@ -1738,11 +1741,21 @@ public class API {
return -1; return -1;
} }
if(statusAction != StatusAction.UNSTATUS ) { if(statusAction != StatusAction.UNSTATUS ) {
try { try {
HttpsConnection httpsConnection = new HttpsConnection(context); HttpsConnection httpsConnection = new HttpsConnection(context);
httpsConnection.post(getAbsoluteUrl(action), 60, params, prefKeyOauthTokenT); String resp = httpsConnection.post(getAbsoluteUrl(action), 60, params, prefKeyOauthTokenT);
actionCode = httpsConnection.getActionCode(); actionCode = httpsConnection.getActionCode();
if( statusAction == StatusAction.REBLOG || statusAction == StatusAction.UNREBLOG || statusAction == StatusAction.FAVOURITE || statusAction == StatusAction.UNFAVOURITE) {
Bundle b = new Bundle();
try {
Status status1 = parseStatuses(context, new JSONObject(resp));
b.putParcelable("status", status1);
} catch (JSONException ignored) {}
b.putSerializable("action", statusAction);
Intent intentBC = new Intent(Helper.RECEIVE_ACTION);
intentBC.putExtras(b);
LocalBroadcastManager.getInstance(context).sendBroadcast(intentBC);
}
} catch (HttpsConnection.HttpsConnectionException e) { } catch (HttpsConnection.HttpsConnectionException e) {
setError(e.getStatusCode(), e); setError(e.getStatusCode(), e);
} catch (NoSuchAlgorithmException e) { } catch (NoSuchAlgorithmException e) {

View File

@ -2700,6 +2700,28 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
} }
} }
public void notifyStatusWithActionChanged(Status status){
for (int i = 0; i < statusListAdapter.getItemCount(); i++) {
//noinspection ConstantConditions
if (statusListAdapter.getItemAt(i) != null && statusListAdapter.getItemAt(i).getId().equals(status.getId())) {
try {
int countFav = statuses.get(i).getFavourites_count() -1;
if( countFav < 0)
countFav = 0;
int countReblog = statuses.get(i).getReblogs_count() -1;
if( countReblog < 0)
countReblog = 0;
statuses.get(i).setFavourited(status.isFavourited());
statuses.get(i).setFavourites_count(countFav);
statuses.get(i).setReblogged(status.isReblogged());
statuses.get(i).setReblogs_count(countReblog);
statusListAdapter.notifyItemChanged(i);
} catch (Exception ignored) {
}
}
}
}
@Override @Override
public void onRetrieveEmoji(Status status, boolean fromTranslation) { public void onRetrieveEmoji(Status status, boolean fromTranslation) {

View File

@ -15,8 +15,10 @@ package fr.gouv.etalab.mastodon.fragments;
* see <http://www.gnu.org/licenses>. */ * see <http://www.gnu.org/licenses>. */
import android.app.Activity; import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase;
import android.os.AsyncTask; import android.os.AsyncTask;
@ -26,6 +28,7 @@ import android.os.Looper;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.support.v4.content.ContextCompat; import android.support.v4.content.ContextCompat;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v4.widget.SwipeRefreshLayout; import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
@ -107,12 +110,11 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn
private String initialBookMark; private String initialBookMark;
private boolean fetchMoreButtonDisplayed; private boolean fetchMoreButtonDisplayed;
private TagTimeline tagTimeline; private TagTimeline tagTimeline;
private String updatedBookMark; private String updatedBookMark;
private String lastReadToot; private String lastReadToot;
private boolean ischannel; private boolean ischannel;
private boolean ownVideos; private boolean ownVideos;
private BroadcastReceiver receive_action;
public DisplayStatusFragment(){ public DisplayStatusFragment(){
} }
@ -204,7 +206,23 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn
mLayoutManager = new LinearLayoutManager(context); mLayoutManager = new LinearLayoutManager(context);
lv_status.setLayoutManager(mLayoutManager); lv_status.setLayoutManager(mLayoutManager);
if( MainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.MASTODON) {
if( receive_action != null)
LocalBroadcastManager.getInstance(context).unregisterReceiver(receive_action);
receive_action = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Bundle b = intent.getExtras();
assert b != null;
Status status = b.getParcelable("status");
if( status != null) {
applyAction(status);
}
}
};
LocalBroadcastManager.getInstance(context).registerReceiver(receive_action, new IntentFilter(Helper.RECEIVE_ACTION));
}
if( type == RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE && search_peertube != null) if( type == RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE && search_peertube != null)
((Activity)context).setTitle(remoteInstance + " - " + search_peertube); ((Activity)context).setTitle(remoteInstance + " - " + search_peertube);
@ -408,6 +426,9 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn
super.onDestroy(); super.onDestroy();
if(asyncTask != null && asyncTask.getStatus() == AsyncTask.Status.RUNNING) if(asyncTask != null && asyncTask.getStatus() == AsyncTask.Status.RUNNING)
asyncTask.cancel(true); asyncTask.cancel(true);
Log.v(Helper.TAG,type + " - destroy: " + receive_action);
if( receive_action != null)
LocalBroadcastManager.getInstance(context).unregisterReceiver(receive_action);
} }
@ -916,4 +937,11 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn
lastReadToot = this.statuses.get(0).getId(); lastReadToot = this.statuses.get(0).getId();
} }
} }
public void applyAction(Status status){
if( statusListAdapter != null && this.statuses != null && this.statuses.contains(status)){
statusListAdapter.notifyStatusWithActionChanged(status);
}
}
} }

View File

@ -384,6 +384,7 @@ public class Helper {
public static final String INTENT_BACKUP_FINISH = "intent_backup_finish"; public static final String INTENT_BACKUP_FINISH = "intent_backup_finish";
//Receiver //Receiver
public static final String RECEIVE_DATA = "receive_data"; public static final String RECEIVE_DATA = "receive_data";
public static final String RECEIVE_ACTION = "receive_action";
public static final String RECEIVE_HOME_DATA = "receive_home_data"; public static final String RECEIVE_HOME_DATA = "receive_home_data";
public static final String RECEIVE_FEDERATED_DATA = "receive_federated_data"; public static final String RECEIVE_FEDERATED_DATA = "receive_federated_data";
public static final String RECEIVE_LOCAL_DATA = "receive_local_data"; public static final String RECEIVE_LOCAL_DATA = "receive_local_data";