Some fixes

This commit is contained in:
stom79 2019-01-11 14:55:53 +01:00
parent 9cde0eeaf3
commit b60216a8c1
5 changed files with 49 additions and 23 deletions

View File

@ -1752,7 +1752,6 @@ public class API {
b.putParcelable("status", status1); b.putParcelable("status", status1);
b.putSerializable("action", statusAction); b.putSerializable("action", statusAction);
} catch (JSONException ignored) {} } catch (JSONException ignored) {}
b.putSerializable("action", statusAction);
Intent intentBC = new Intent(Helper.RECEIVE_ACTION); Intent intentBC = new Intent(Helper.RECEIVE_ACTION);
intentBC.putExtras(b); intentBC.putExtras(b);
LocalBroadcastManager.getInstance(context).sendBroadcast(intentBC); LocalBroadcastManager.getInstance(context).sendBroadcast(intentBC);

View File

@ -855,6 +855,24 @@ public class NotificationsListAdapter extends RecyclerView.Adapter implements On
} }
} }
public void notifyNotificationWithActionChanged(Status status){
for (int i = 0; i < notificationsListAdapter.getItemCount(); i++) {
if (notificationsListAdapter.getItemAt(i) != null && notificationsListAdapter.getItemAt(i).getType().toLowerCase().equals("mention") && notificationsListAdapter.getItemAt(i).getStatus() != null && notificationsListAdapter.getItemAt(i).getStatus().getId().equals(status.getId())) {
try {
if( notifications.get(i).getStatus() != null){
notifications.get(i).getStatus().setFavourited(status.isFavourited());
notifications.get(i).getStatus().setFavourites_count(status.getFavourites_count());
notifications.get(i).getStatus().setReblogged(status.isReblogged());
notifications.get(i).getStatus().setReblogs_count(status.getReblogs_count());
}
notificationsListAdapter.notifyItemChanged(i);
} catch (Exception ignored) {
}
}
}
}
@Override @Override
public long getItemId(int position) { public long getItemId(int position) {
return position; return position;

View File

@ -2700,31 +2700,15 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
} }
} }
public void notifyStatusWithActionChanged(API.StatusAction statusAction, Status status){ public void notifyStatusWithActionChanged(Status status){
for (int i = 0; i < statusListAdapter.getItemCount(); i++) { for (int i = 0; i < statusListAdapter.getItemCount(); i++) {
//noinspection ConstantConditions //noinspection ConstantConditions
if (statusListAdapter.getItemAt(i) != null && statusListAdapter.getItemAt(i).getId().equals(status.getId())) { if (statusListAdapter.getItemAt(i) != null && statusListAdapter.getItemAt(i).getId().equals(status.getId())) {
try { try {
int j;
int countFav = statuses.get(i).getFavourites_count();
int countReblog = statuses.get(i).getReblogs_count();
if( statusAction == API.StatusAction.UNFAVOURITE){
countFav--;
if( countFav < 0)
countFav = 0;
}else if( statusAction == API.StatusAction.FAVOURITE){
countFav++;
}else if( statusAction == API.StatusAction.UNREBLOG){
countReblog--;
if( countReblog < 0)
countReblog = 0;
}else if( statusAction == API.StatusAction.REBLOG){
countReblog++;
}
statuses.get(i).setFavourited(status.isFavourited()); statuses.get(i).setFavourited(status.isFavourited());
statuses.get(i).setFavourites_count(countFav); statuses.get(i).setFavourites_count(status.getFavourites_count());
statuses.get(i).setReblogged(status.isReblogged()); statuses.get(i).setReblogged(status.isReblogged());
statuses.get(i).setReblogs_count(countReblog); statuses.get(i).setReblogs_count(status.getReblogs_count());
statusListAdapter.notifyItemChanged(i); statusListAdapter.notifyItemChanged(i);
} catch (Exception ignored) { } catch (Exception ignored) {
} }

View File

@ -14,7 +14,10 @@ package fr.gouv.etalab.mastodon.fragments;
* You should have received a copy of the GNU General Public License along with Mastalab; if not, * You should have received a copy of the GNU General Public License along with Mastalab; if not,
* see <http://www.gnu.org/licenses>. */ * see <http://www.gnu.org/licenses>. */
import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Bundle; import android.os.Bundle;
@ -23,6 +26,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.DividerItemDecoration; import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.LinearLayoutManager;
@ -41,9 +45,11 @@ import fr.gouv.etalab.mastodon.R;
import fr.gouv.etalab.mastodon.activities.MainActivity; import fr.gouv.etalab.mastodon.activities.MainActivity;
import fr.gouv.etalab.mastodon.asynctasks.RetrieveMissingNotificationsAsyncTask; import fr.gouv.etalab.mastodon.asynctasks.RetrieveMissingNotificationsAsyncTask;
import fr.gouv.etalab.mastodon.asynctasks.RetrieveNotificationsAsyncTask; import fr.gouv.etalab.mastodon.asynctasks.RetrieveNotificationsAsyncTask;
import fr.gouv.etalab.mastodon.asynctasks.UpdateAccountInfoAsyncTask;
import fr.gouv.etalab.mastodon.client.APIResponse; import fr.gouv.etalab.mastodon.client.APIResponse;
import fr.gouv.etalab.mastodon.client.Entities.Account; import fr.gouv.etalab.mastodon.client.Entities.Account;
import fr.gouv.etalab.mastodon.client.Entities.Notification; import fr.gouv.etalab.mastodon.client.Entities.Notification;
import fr.gouv.etalab.mastodon.client.Entities.Status;
import fr.gouv.etalab.mastodon.drawers.NotificationsListAdapter; import fr.gouv.etalab.mastodon.drawers.NotificationsListAdapter;
import fr.gouv.etalab.mastodon.helper.Helper; import fr.gouv.etalab.mastodon.helper.Helper;
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveMissingNotificationsInterface; import fr.gouv.etalab.mastodon.interfaces.OnRetrieveMissingNotificationsInterface;
@ -72,6 +78,7 @@ public class DisplayNotificationsFragment extends Fragment implements OnRetrieve
private String userId, instance; private String userId, instance;
private SharedPreferences sharedpreferences; private SharedPreferences sharedpreferences;
LinearLayoutManager mLayoutManager; LinearLayoutManager mLayoutManager;
private BroadcastReceiver receive_action;
public DisplayNotificationsFragment(){ public DisplayNotificationsFragment(){
} }
@ -125,6 +132,24 @@ public class DisplayNotificationsFragment extends Fragment implements OnRetrieve
} }
}); });
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) {
notificationsListAdapter.notifyNotificationWithActionChanged(status);
}
}
};
LocalBroadcastManager.getInstance(context).registerReceiver(receive_action, new IntentFilter(Helper.RECEIVE_ACTION));
}
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override @Override
public void onRefresh() { public void onRefresh() {
@ -198,6 +223,8 @@ public class DisplayNotificationsFragment extends Fragment implements OnRetrieve
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);
if( receive_action != null)
LocalBroadcastManager.getInstance(context).unregisterReceiver(receive_action);
} }
@Override @Override

View File

@ -51,7 +51,6 @@ import fr.gouv.etalab.mastodon.asynctasks.RetrieveFeedsAsyncTask;
import fr.gouv.etalab.mastodon.asynctasks.RetrieveMissingFeedsAsyncTask; import fr.gouv.etalab.mastodon.asynctasks.RetrieveMissingFeedsAsyncTask;
import fr.gouv.etalab.mastodon.asynctasks.RetrievePeertubeSearchAsyncTask; import fr.gouv.etalab.mastodon.asynctasks.RetrievePeertubeSearchAsyncTask;
import fr.gouv.etalab.mastodon.asynctasks.UpdateAccountInfoAsyncTask; import fr.gouv.etalab.mastodon.asynctasks.UpdateAccountInfoAsyncTask;
import fr.gouv.etalab.mastodon.client.API;
import fr.gouv.etalab.mastodon.client.APIResponse; import fr.gouv.etalab.mastodon.client.APIResponse;
import fr.gouv.etalab.mastodon.client.Entities.Account; import fr.gouv.etalab.mastodon.client.Entities.Account;
import fr.gouv.etalab.mastodon.client.Entities.Conversation; import fr.gouv.etalab.mastodon.client.Entities.Conversation;
@ -217,9 +216,8 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn
Bundle b = intent.getExtras(); Bundle b = intent.getExtras();
assert b != null; assert b != null;
Status status = b.getParcelable("status"); Status status = b.getParcelable("status");
API.StatusAction statusAction = (API.StatusAction)b.getSerializable("action");
if( status != null) { if( status != null) {
statusListAdapter.notifyStatusWithActionChanged(statusAction, status); statusListAdapter.notifyStatusWithActionChanged(status);
} }
} }
}; };