Some improvements
This commit is contained in:
parent
530ad6940c
commit
7b9776f808
|
@ -100,8 +100,6 @@ import fr.gouv.etalab.mastodon.fragments.TabLayoutSettingsFragment;
|
||||||
import fr.gouv.etalab.mastodon.sqlite.AccountDAO;
|
import fr.gouv.etalab.mastodon.sqlite.AccountDAO;
|
||||||
import mastodon.etalab.gouv.fr.mastodon.R;
|
import mastodon.etalab.gouv.fr.mastodon.R;
|
||||||
|
|
||||||
import static fr.gouv.etalab.mastodon.fragments.DisplayNotificationsFragment.tempNotifications;
|
|
||||||
import static fr.gouv.etalab.mastodon.fragments.DisplayStatusFragment.tempStatuses;
|
|
||||||
import static fr.gouv.etalab.mastodon.helper.Helper.CHANGE_THEME_INTENT;
|
import static fr.gouv.etalab.mastodon.helper.Helper.CHANGE_THEME_INTENT;
|
||||||
import static fr.gouv.etalab.mastodon.helper.Helper.CHANGE_USER_INTENT;
|
import static fr.gouv.etalab.mastodon.helper.Helper.CHANGE_USER_INTENT;
|
||||||
import static fr.gouv.etalab.mastodon.helper.Helper.HOME_TIMELINE_INTENT;
|
import static fr.gouv.etalab.mastodon.helper.Helper.HOME_TIMELINE_INTENT;
|
||||||
|
@ -141,7 +139,7 @@ public class MainActivity extends AppCompatActivity
|
||||||
public static int countNewNotifications = 0;
|
public static int countNewNotifications = 0;
|
||||||
private String userIdService;
|
private String userIdService;
|
||||||
private Intent streamingIntent, streamingFederatedIntent;
|
private Intent streamingIntent, streamingFederatedIntent;
|
||||||
public static boolean broadCastRegistred = false, broadCastFederatedRegistred = false;
|
public static String lastHomeId = null, lastNotificationId = null;
|
||||||
|
|
||||||
public MainActivity() {
|
public MainActivity() {
|
||||||
}
|
}
|
||||||
|
@ -154,73 +152,6 @@ public class MainActivity extends AppCompatActivity
|
||||||
final SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
|
final SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
|
||||||
|
|
||||||
|
|
||||||
receive_federated_data = new BroadcastReceiver() {
|
|
||||||
@Override
|
|
||||||
public void onReceive(Context context, Intent intent) {
|
|
||||||
Bundle b = intent.getExtras();
|
|
||||||
userIdService = b.getString("userIdService", null);
|
|
||||||
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
|
|
||||||
if( userIdService != null && userIdService.equals(userId)) {
|
|
||||||
Status status = b.getParcelable("data");
|
|
||||||
if (federatedFragment != null) {
|
|
||||||
federatedFragment.refresh(status);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
receive_data = new BroadcastReceiver() {
|
|
||||||
@Override
|
|
||||||
public void onReceive(Context context, Intent intent) {
|
|
||||||
Bundle b = intent.getExtras();
|
|
||||||
StreamingService.EventStreaming eventStreaming = (StreamingService.EventStreaming) intent.getSerializableExtra("eventStreaming");
|
|
||||||
userIdService = b.getString("userIdService", null);
|
|
||||||
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
|
|
||||||
if( userIdService != null && userIdService.equals(userId)) {
|
|
||||||
if (eventStreaming == StreamingService.EventStreaming.NOTIFICATION) {
|
|
||||||
Notification notification = b.getParcelable("data");
|
|
||||||
if (notificationsFragment != null) {
|
|
||||||
notificationsFragment.refresh(notification);
|
|
||||||
} else {
|
|
||||||
tempNotifications.add(notification);
|
|
||||||
}
|
|
||||||
} else if (eventStreaming == StreamingService.EventStreaming.UPDATE) {
|
|
||||||
Status status = b.getParcelable("data");
|
|
||||||
if (homeFragment != null) {
|
|
||||||
homeFragment.refresh(status);
|
|
||||||
} else {
|
|
||||||
tempStatuses.add(status);
|
|
||||||
}
|
|
||||||
} else if (eventStreaming == StreamingService.EventStreaming.DELETE) {
|
|
||||||
String id = b.getString("id");
|
|
||||||
if (notificationsFragment != null) {
|
|
||||||
if (notificationsFragment.getUserVisibleHint()) {
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
updateNotifCounter();
|
|
||||||
updateHomeCounter();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
streamingIntent = new Intent(this, StreamingService.class);
|
|
||||||
startService(streamingIntent);
|
|
||||||
|
|
||||||
streamingFederatedIntent = new Intent(this, StreamingFederatedTimelineService.class);
|
|
||||||
startService(streamingFederatedIntent);
|
|
||||||
|
|
||||||
if( !broadCastRegistred) {
|
|
||||||
LocalBroadcastManager.getInstance(this).registerReceiver(receive_data, new IntentFilter(Helper.RECEIVE_DATA));
|
|
||||||
broadCastRegistred = true;
|
|
||||||
}
|
|
||||||
if( !broadCastFederatedRegistred) {
|
|
||||||
LocalBroadcastManager.getInstance(this).registerReceiver(receive_federated_data, new IntentFilter(Helper.RECEIVE_FEDERATED_DATA));
|
|
||||||
broadCastFederatedRegistred = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
final int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
|
final int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
|
||||||
if( theme == Helper.THEME_LIGHT){
|
if( theme == Helper.THEME_LIGHT){
|
||||||
|
@ -760,7 +691,6 @@ public class MainActivity extends AppCompatActivity
|
||||||
* @param intent Intent - intent related to a notification in top bar
|
* @param intent Intent - intent related to a notification in top bar
|
||||||
*/
|
*/
|
||||||
private boolean mamageNewIntent(Intent intent){
|
private boolean mamageNewIntent(Intent intent){
|
||||||
|
|
||||||
if( intent == null || intent.getExtras() == null )
|
if( intent == null || intent.getExtras() == null )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -931,10 +861,86 @@ public class MainActivity extends AppCompatActivity
|
||||||
//Proceeds to update of the authenticated account
|
//Proceeds to update of the authenticated account
|
||||||
if(Helper.isLoggedIn(getApplicationContext()))
|
if(Helper.isLoggedIn(getApplicationContext()))
|
||||||
new UpdateAccountInfoByIDAsyncTask(getApplicationContext(), MainActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
new UpdateAccountInfoByIDAsyncTask(getApplicationContext(), MainActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
|
if( lastHomeId != null && homeFragment != null){
|
||||||
|
homeFragment.retrieveMissingToots(lastHomeId);
|
||||||
|
}
|
||||||
|
if( lastNotificationId != null && notificationsFragment != null){
|
||||||
|
notificationsFragment.retrieveMissingNotifications(lastNotificationId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStart(){
|
||||||
|
super.onStart();
|
||||||
|
final SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||||
|
receive_federated_data = new BroadcastReceiver() {
|
||||||
|
@Override
|
||||||
|
public void onReceive(Context context, Intent intent) {
|
||||||
|
Bundle b = intent.getExtras();
|
||||||
|
userIdService = b.getString("userIdService", null);
|
||||||
|
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
|
||||||
|
if( userIdService != null && userIdService.equals(userId)) {
|
||||||
|
Status status = b.getParcelable("data");
|
||||||
|
if (federatedFragment != null) {
|
||||||
|
federatedFragment.refresh(status);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
receive_data = new BroadcastReceiver() {
|
||||||
|
@Override
|
||||||
|
public void onReceive(Context context, Intent intent) {
|
||||||
|
Bundle b = intent.getExtras();
|
||||||
|
StreamingService.EventStreaming eventStreaming = (StreamingService.EventStreaming) intent.getSerializableExtra("eventStreaming");
|
||||||
|
userIdService = b.getString("userIdService", null);
|
||||||
|
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
|
||||||
|
if( userIdService != null && userIdService.equals(userId)) {
|
||||||
|
if (eventStreaming == StreamingService.EventStreaming.NOTIFICATION) {
|
||||||
|
Notification notification = b.getParcelable("data");
|
||||||
|
if (notificationsFragment != null) {
|
||||||
|
notificationsFragment.refresh(notification);
|
||||||
|
}
|
||||||
|
} else if (eventStreaming == StreamingService.EventStreaming.UPDATE) {
|
||||||
|
Status status = b.getParcelable("data");
|
||||||
|
if (homeFragment != null) {
|
||||||
|
homeFragment.refresh(status);
|
||||||
|
}
|
||||||
|
} else if (eventStreaming == StreamingService.EventStreaming.DELETE) {
|
||||||
|
String id = b.getString("id");
|
||||||
|
if (notificationsFragment != null) {
|
||||||
|
if (notificationsFragment.getUserVisibleHint()) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
updateNotifCounter();
|
||||||
|
updateHomeCounter();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
streamingIntent = new Intent(this, StreamingService.class);
|
||||||
|
startService(streamingIntent);
|
||||||
|
streamingFederatedIntent = new Intent(this, StreamingFederatedTimelineService.class);
|
||||||
|
startService(streamingFederatedIntent);
|
||||||
|
LocalBroadcastManager.getInstance(this).registerReceiver(receive_data, new IntentFilter(Helper.RECEIVE_DATA));
|
||||||
|
LocalBroadcastManager.getInstance(this).registerReceiver(receive_federated_data, new IntentFilter(Helper.RECEIVE_FEDERATED_DATA));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStop(){
|
||||||
|
super.onStop();
|
||||||
|
if( streamingIntent != null)
|
||||||
|
stopService(streamingIntent);
|
||||||
|
if( streamingFederatedIntent != null)
|
||||||
|
stopService(streamingFederatedIntent);
|
||||||
|
if( receive_data != null)
|
||||||
|
LocalBroadcastManager.getInstance(this).unregisterReceiver(receive_data);
|
||||||
|
if( receive_federated_data != null)
|
||||||
|
LocalBroadcastManager.getInstance(this).unregisterReceiver(receive_federated_data);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onPause() {
|
protected void onPause() {
|
||||||
|
@ -945,14 +951,6 @@ public class MainActivity extends AppCompatActivity
|
||||||
@Override
|
@Override
|
||||||
public void onDestroy(){
|
public void onDestroy(){
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
if( streamingIntent != null)
|
|
||||||
stopService(streamingIntent);
|
|
||||||
if( streamingFederatedIntent != null)
|
|
||||||
stopService(streamingFederatedIntent);
|
|
||||||
LocalBroadcastManager.getInstance(this).unregisterReceiver(receive_data);
|
|
||||||
LocalBroadcastManager.getInstance(this).unregisterReceiver(receive_federated_data);
|
|
||||||
broadCastRegistred = false;
|
|
||||||
broadCastFederatedRegistred = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("StatementWithEmptyBody")
|
@SuppressWarnings("StatementWithEmptyBody")
|
||||||
|
|
|
@ -16,11 +16,8 @@ package fr.gouv.etalab.mastodon.asynctasks;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
import fr.gouv.etalab.mastodon.client.API;
|
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.helper.Helper;
|
|
||||||
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveFeedsInterface;
|
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveFeedsInterface;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,72 @@
|
||||||
|
/* Copyright 2017 Thomas Schneider
|
||||||
|
*
|
||||||
|
* This file is a part of Mastalab
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
||||||
|
* GNU General Public License as published by the Free Software Foundation; either version 3 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Mastalab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
|
||||||
|
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||||
|
* Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with Mastalab; if not,
|
||||||
|
* see <http://www.gnu.org/licenses>. */
|
||||||
|
package fr.gouv.etalab.mastodon.asynctasks;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.AsyncTask;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import fr.gouv.etalab.mastodon.activities.MainActivity;
|
||||||
|
import fr.gouv.etalab.mastodon.client.API;
|
||||||
|
import fr.gouv.etalab.mastodon.client.APIResponse;
|
||||||
|
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveMissingFeedsInterface;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Thomas on 27/09/2017.
|
||||||
|
* Retrieves missing toots since last pause
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class RetrieveMissingFeedsAsyncTask extends AsyncTask<Void, Void, Void> {
|
||||||
|
|
||||||
|
private Context context;
|
||||||
|
private String since_id;
|
||||||
|
private OnRetrieveMissingFeedsInterface listener;
|
||||||
|
private List<fr.gouv.etalab.mastodon.client.Entities.Status> statuses = new ArrayList<>();
|
||||||
|
|
||||||
|
public RetrieveMissingFeedsAsyncTask(Context context, String since_id, OnRetrieveMissingFeedsInterface onRetrieveMissingFeedsInterface){
|
||||||
|
this.context = context;
|
||||||
|
this.since_id = since_id;
|
||||||
|
this.listener = onRetrieveMissingFeedsInterface;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Void doInBackground(Void... params) {
|
||||||
|
int loopInc = 0;
|
||||||
|
API api = new API(context);
|
||||||
|
List<fr.gouv.etalab.mastodon.client.Entities.Status> tempStatus;
|
||||||
|
while (loopInc < 10){
|
||||||
|
APIResponse apiResponse = api.getHomeTimelineSinceId(since_id, 80);
|
||||||
|
String max_id = apiResponse.getMax_id();
|
||||||
|
since_id = apiResponse.getSince_id();
|
||||||
|
tempStatus = apiResponse.getStatuses();
|
||||||
|
if( statuses != null && tempStatus != null)
|
||||||
|
statuses.addAll(0, tempStatus);
|
||||||
|
loopInc++;
|
||||||
|
if( max_id == null || max_id.equals(since_id))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if( statuses != null && statuses.size() > 0) {
|
||||||
|
MainActivity.lastHomeId = statuses.get(0).getId();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(Void result) {
|
||||||
|
listener.onRetrieveMissingFeeds(statuses);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,75 @@
|
||||||
|
/* Copyright 2017 Thomas Schneider
|
||||||
|
*
|
||||||
|
* This file is a part of Mastalab
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
||||||
|
* GNU General Public License as published by the Free Software Foundation; either version 3 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Mastalab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
|
||||||
|
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||||
|
* Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with Mastalab; if not,
|
||||||
|
* see <http://www.gnu.org/licenses>. */
|
||||||
|
package fr.gouv.etalab.mastodon.asynctasks;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.AsyncTask;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import fr.gouv.etalab.mastodon.activities.MainActivity;
|
||||||
|
import fr.gouv.etalab.mastodon.client.API;
|
||||||
|
import fr.gouv.etalab.mastodon.client.APIResponse;
|
||||||
|
import fr.gouv.etalab.mastodon.client.Entities.Notification;
|
||||||
|
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveMissingNotificationsInterface;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Thomas on 27/09/2017.
|
||||||
|
* Retrieves missing notifications since last pause
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class RetrieveMissingNotificationsAsyncTask extends AsyncTask<Void, Void, Void> {
|
||||||
|
|
||||||
|
private Context context;
|
||||||
|
private String since_id;
|
||||||
|
private OnRetrieveMissingNotificationsInterface listener;
|
||||||
|
private List<Notification> notifications = new ArrayList<>();
|
||||||
|
|
||||||
|
public RetrieveMissingNotificationsAsyncTask(Context context, String since_id, OnRetrieveMissingNotificationsInterface onRetrieveMissingNotifications){
|
||||||
|
this.context = context;
|
||||||
|
this.since_id = since_id;
|
||||||
|
this.listener = onRetrieveMissingNotifications;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Void doInBackground(Void... params) {
|
||||||
|
int loopInc = 0;
|
||||||
|
API api = new API(context);
|
||||||
|
List<Notification> tempNotifications;
|
||||||
|
while (loopInc < 10){
|
||||||
|
APIResponse apiResponse = api.getNotificationsSince(since_id, 40);
|
||||||
|
String max_id = apiResponse.getMax_id();
|
||||||
|
since_id = apiResponse.getSince_id();
|
||||||
|
tempNotifications = apiResponse.getNotifications();
|
||||||
|
if( notifications != null && tempNotifications != null)
|
||||||
|
notifications.addAll(0, tempNotifications);
|
||||||
|
loopInc++;
|
||||||
|
if( max_id == null || max_id.equals(since_id))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if( notifications != null && notifications.size() > 0) {
|
||||||
|
MainActivity.lastNotificationId = notifications.get(0).getId();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(Void result) {
|
||||||
|
listener.onRetrieveMissingNotifications(notifications);
|
||||||
|
}
|
||||||
|
}
|
|
@ -468,6 +468,14 @@ public class API {
|
||||||
return getHomeTimeline(max_id, null, tootPerPage);
|
return getHomeTimeline(max_id, null, tootPerPage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves home timeline for the account *synchronously*
|
||||||
|
* @return APIResponse
|
||||||
|
*/
|
||||||
|
public APIResponse getHomeTimeline( String max_id, int tootPerPage) {
|
||||||
|
return getHomeTimeline(max_id, null, tootPerPage);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves home timeline for the account since an Id value *synchronously*
|
* Retrieves home timeline for the account since an Id value *synchronously*
|
||||||
* @return APIResponse
|
* @return APIResponse
|
||||||
|
@ -476,6 +484,14 @@ public class API {
|
||||||
return getHomeTimeline(null, since_id, tootPerPage);
|
return getHomeTimeline(null, since_id, tootPerPage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves home timeline for the account since an Id value *synchronously*
|
||||||
|
* @return APIResponse
|
||||||
|
*/
|
||||||
|
public APIResponse getHomeTimelineSinceId(String since_id, int tootPerPage) {
|
||||||
|
return getHomeTimeline(null, since_id, tootPerPage);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves home timeline for the account *synchronously*
|
* Retrieves home timeline for the account *synchronously*
|
||||||
* @param max_id String id max
|
* @param max_id String id max
|
||||||
|
@ -490,8 +506,8 @@ public class API {
|
||||||
params.put("max_id", max_id);
|
params.put("max_id", max_id);
|
||||||
if (since_id != null)
|
if (since_id != null)
|
||||||
params.put("since_id", since_id);
|
params.put("since_id", since_id);
|
||||||
if (0 > limit || limit > 40)
|
if (0 > limit || limit > 80)
|
||||||
limit = 40;
|
limit = 80;
|
||||||
params.put("limit",String.valueOf(limit));
|
params.put("limit",String.valueOf(limit));
|
||||||
statuses = new ArrayList<>();
|
statuses = new ArrayList<>();
|
||||||
get("/timelines/home", params, new JsonHttpResponseHandler() {
|
get("/timelines/home", params, new JsonHttpResponseHandler() {
|
||||||
|
@ -1070,6 +1086,15 @@ public class API {
|
||||||
return getNotifications(null, since_id, notificationPerPage);
|
return getNotifications(null, since_id, notificationPerPage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves notifications for the authenticated account since an id*synchronously*
|
||||||
|
* @param since_id String since max
|
||||||
|
* @return APIResponse
|
||||||
|
*/
|
||||||
|
public APIResponse getNotificationsSince(String since_id, int notificationPerPage){
|
||||||
|
return getNotifications(null, since_id, notificationPerPage);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves notifications for the authenticated account *synchronously*
|
* Retrieves notifications for the authenticated account *synchronously*
|
||||||
* @param max_id String id max
|
* @param max_id String id max
|
||||||
|
|
|
@ -31,10 +31,12 @@ import java.util.List;
|
||||||
|
|
||||||
import fr.gouv.etalab.mastodon.activities.MainActivity;
|
import fr.gouv.etalab.mastodon.activities.MainActivity;
|
||||||
import fr.gouv.etalab.mastodon.asynctasks.RetrieveFeedsAsyncTask;
|
import fr.gouv.etalab.mastodon.asynctasks.RetrieveFeedsAsyncTask;
|
||||||
|
import fr.gouv.etalab.mastodon.asynctasks.RetrieveMissingNotificationsAsyncTask;
|
||||||
import fr.gouv.etalab.mastodon.client.APIResponse;
|
import fr.gouv.etalab.mastodon.client.APIResponse;
|
||||||
import fr.gouv.etalab.mastodon.client.Entities.Status;
|
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 mastodon.etalab.gouv.fr.mastodon.R;
|
import mastodon.etalab.gouv.fr.mastodon.R;
|
||||||
import fr.gouv.etalab.mastodon.asynctasks.RetrieveNotificationsAsyncTask;
|
import fr.gouv.etalab.mastodon.asynctasks.RetrieveNotificationsAsyncTask;
|
||||||
import fr.gouv.etalab.mastodon.client.Entities.Notification;
|
import fr.gouv.etalab.mastodon.client.Entities.Notification;
|
||||||
|
@ -45,7 +47,7 @@ import fr.gouv.etalab.mastodon.interfaces.OnRetrieveNotificationsInterface;
|
||||||
* Created by Thomas on 28/04/2017.
|
* Created by Thomas on 28/04/2017.
|
||||||
* Fragment to display notifications related to accounts
|
* Fragment to display notifications related to accounts
|
||||||
*/
|
*/
|
||||||
public class DisplayNotificationsFragment extends Fragment implements OnRetrieveNotificationsInterface {
|
public class DisplayNotificationsFragment extends Fragment implements OnRetrieveNotificationsInterface, OnRetrieveMissingNotificationsInterface {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -62,7 +64,6 @@ public class DisplayNotificationsFragment extends Fragment implements OnRetrieve
|
||||||
private ListView lv_notifications;
|
private ListView lv_notifications;
|
||||||
private String lastReadNotifications;
|
private String lastReadNotifications;
|
||||||
private String userId;
|
private String userId;
|
||||||
public static ArrayList<Notification> tempNotifications = new ArrayList<>();
|
|
||||||
|
|
||||||
public DisplayNotificationsFragment(){
|
public DisplayNotificationsFragment(){
|
||||||
}
|
}
|
||||||
|
@ -155,31 +156,6 @@ public class DisplayNotificationsFragment extends Fragment implements OnRetrieve
|
||||||
asyncTask.cancel(true);
|
asyncTask.cancel(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onResume() {
|
|
||||||
super.onResume();
|
|
||||||
ArrayList<String> knownId = new ArrayList<>();
|
|
||||||
for(Notification nt: notifications){
|
|
||||||
knownId.add(nt.getId());
|
|
||||||
}
|
|
||||||
for(Notification notification: tempNotifications){
|
|
||||||
if( !knownId.contains(notification.getId())) {
|
|
||||||
int index = lv_notifications.getFirstVisiblePosition() + 1;
|
|
||||||
View v = lv_notifications.getChildAt(0);
|
|
||||||
int top = (v == null) ? 0 : v.getTop();
|
|
||||||
notifications.add(0, notification);
|
|
||||||
notificationsListAdapter.notifyDataSetChanged();
|
|
||||||
lv_notifications.setSelectionFromTop(index, top);
|
|
||||||
if (textviewNoAction.getVisibility() == View.VISIBLE)
|
|
||||||
textviewNoAction.setVisibility(View.GONE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
((MainActivity)context).updateNotifCounter();
|
|
||||||
tempNotifications.clear();
|
|
||||||
tempNotifications = new ArrayList<>();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onRetrieveNotifications(APIResponse apiResponse, String acct, String userId, boolean refreshData) {
|
public void onRetrieveNotifications(APIResponse apiResponse, String acct, String userId, boolean refreshData) {
|
||||||
final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||||
|
@ -215,6 +191,8 @@ public class DisplayNotificationsFragment extends Fragment implements OnRetrieve
|
||||||
this.notifications.add(tmpNotification);
|
this.notifications.add(tmpNotification);
|
||||||
}
|
}
|
||||||
if( firstLoad) {
|
if( firstLoad) {
|
||||||
|
//Update the id of the last notification retrieved
|
||||||
|
MainActivity.lastNotificationId = notifications.get(0).getId();
|
||||||
SharedPreferences.Editor editor = sharedpreferences.edit();
|
SharedPreferences.Editor editor = sharedpreferences.edit();
|
||||||
editor.putString(Helper.LAST_NOTIFICATION_MAX_ID + this.userId, notifications.get(0).getId());
|
editor.putString(Helper.LAST_NOTIFICATION_MAX_ID + this.userId, notifications.get(0).getId());
|
||||||
editor.apply();
|
editor.apply();
|
||||||
|
@ -230,6 +208,14 @@ public class DisplayNotificationsFragment extends Fragment implements OnRetrieve
|
||||||
flag_loading = (max_id == null );
|
flag_loading = (max_id == null );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called from main activity in onResume to retrieve missing notifications
|
||||||
|
* @param sinceId String
|
||||||
|
*/
|
||||||
|
public void retrieveMissingNotifications(String sinceId){
|
||||||
|
asyncTask = new RetrieveMissingNotificationsAsyncTask(context, sinceId, DisplayNotificationsFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setMenuVisibility(final boolean visible) {
|
public void setMenuVisibility(final boolean visible) {
|
||||||
super.setMenuVisibility(visible);
|
super.setMenuVisibility(visible);
|
||||||
|
@ -264,6 +250,8 @@ public class DisplayNotificationsFragment extends Fragment implements OnRetrieve
|
||||||
if( context == null)
|
if( context == null)
|
||||||
return;
|
return;
|
||||||
if( notification != null){
|
if( notification != null){
|
||||||
|
//Update the id of the last notification retrieved
|
||||||
|
MainActivity.lastNotificationId = notification.getId();
|
||||||
int index = lv_notifications.getFirstVisiblePosition() + 1;
|
int index = lv_notifications.getFirstVisiblePosition() + 1;
|
||||||
View v = lv_notifications.getChildAt(0);
|
View v = lv_notifications.getChildAt(0);
|
||||||
int top = (v == null) ? 0 : v.getTop();
|
int top = (v == null) ? 0 : v.getTop();
|
||||||
|
@ -275,4 +263,24 @@ public class DisplayNotificationsFragment extends Fragment implements OnRetrieve
|
||||||
textviewNoAction.setVisibility(View.GONE);
|
textviewNoAction.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRetrieveMissingNotifications(List<Notification> notifications) {
|
||||||
|
if( notifications != null && notifications.size() > 0) {
|
||||||
|
ArrayList<String> knownId = new ArrayList<>();
|
||||||
|
for (Notification nt : this.notifications) {
|
||||||
|
knownId.add(nt.getId());
|
||||||
|
}
|
||||||
|
for (int i = notifications.size()-1 ; i >= 0 ; i--) {
|
||||||
|
if (!knownId.contains(notifications.get(i).getId())) {
|
||||||
|
MainActivity.countNewNotifications++;
|
||||||
|
this.notifications.add(0, notifications.get(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
notificationsListAdapter.notifyDataSetChanged();
|
||||||
|
try {
|
||||||
|
((MainActivity) context).updateNotifCounter();
|
||||||
|
}catch (Exception ignored){}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,10 +36,12 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import fr.gouv.etalab.mastodon.activities.MainActivity;
|
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.asynctasks.RetrieveRepliesAsyncTask;
|
||||||
import fr.gouv.etalab.mastodon.client.APIResponse;
|
import fr.gouv.etalab.mastodon.client.APIResponse;
|
||||||
import fr.gouv.etalab.mastodon.drawers.StatusListAdapter;
|
import fr.gouv.etalab.mastodon.drawers.StatusListAdapter;
|
||||||
import fr.gouv.etalab.mastodon.helper.Helper;
|
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.interfaces.OnRetrieveRepliesInterface;
|
||||||
import mastodon.etalab.gouv.fr.mastodon.R;
|
import mastodon.etalab.gouv.fr.mastodon.R;
|
||||||
import fr.gouv.etalab.mastodon.asynctasks.RetrieveFeedsAsyncTask;
|
import fr.gouv.etalab.mastodon.asynctasks.RetrieveFeedsAsyncTask;
|
||||||
|
@ -51,7 +53,7 @@ import fr.gouv.etalab.mastodon.interfaces.OnRetrieveFeedsInterface;
|
||||||
* Created by Thomas on 24/04/2017.
|
* Created by Thomas on 24/04/2017.
|
||||||
* Fragment to display content related to status
|
* Fragment to display content related to status
|
||||||
*/
|
*/
|
||||||
public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsInterface, OnRetrieveRepliesInterface {
|
public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsInterface, OnRetrieveRepliesInterface, OnRetrieveMissingFeedsInterface {
|
||||||
|
|
||||||
|
|
||||||
private boolean flag_loading;
|
private boolean flag_loading;
|
||||||
|
@ -76,8 +78,6 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn
|
||||||
private String instanceValue;
|
private String instanceValue;
|
||||||
private String lastReadStatus;
|
private String lastReadStatus;
|
||||||
private String userId;
|
private String userId;
|
||||||
public static ArrayList<Status> tempStatuses = new ArrayList<>();
|
|
||||||
private int lastTotalItemCount = 0;
|
|
||||||
|
|
||||||
public DisplayStatusFragment(){
|
public DisplayStatusFragment(){
|
||||||
}
|
}
|
||||||
|
@ -228,37 +228,6 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onResume() {
|
|
||||||
super.onResume();
|
|
||||||
if( type == RetrieveFeedsAsyncTask.Type.HOME && tempStatuses != null && tempStatuses.size() > 0 ){
|
|
||||||
ArrayList<String> knownId = new ArrayList<>();
|
|
||||||
for(Status st: statuses){
|
|
||||||
knownId.add(st.getId());
|
|
||||||
}
|
|
||||||
for(Status status: tempStatuses){
|
|
||||||
if( !knownId.contains(status.getId())){
|
|
||||||
int index = lv_status.getFirstVisiblePosition() + 1;
|
|
||||||
View v = lv_status.getChildAt(0);
|
|
||||||
int top = (v == null) ? 0 : v.getTop();
|
|
||||||
status.setReplies(new ArrayList<Status>());
|
|
||||||
statuses.add(0,status);
|
|
||||||
statusListAdapter.notifyDataSetChanged();
|
|
||||||
lv_status.setSelectionFromTop(index, top);
|
|
||||||
if (textviewNoAction.getVisibility() == View.VISIBLE)
|
|
||||||
textviewNoAction.setVisibility(View.GONE);
|
|
||||||
MainActivity.countNewStatus++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if( getActivity() != null && getActivity().getClass().isInstance(MainActivity.class))
|
|
||||||
((MainActivity)context).updateHomeCounter();
|
|
||||||
//Resets value for the counter but doesn't update it
|
|
||||||
MainActivity.countNewStatus = 0;
|
|
||||||
tempStatuses.clear();
|
|
||||||
tempStatuses = new ArrayList<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAttach(Context context) {
|
public void onAttach(Context context) {
|
||||||
super.onAttach(context);
|
super.onAttach(context);
|
||||||
|
@ -321,6 +290,8 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn
|
||||||
}
|
}
|
||||||
|
|
||||||
if( firstLoad && type == RetrieveFeedsAsyncTask.Type.HOME) {
|
if( firstLoad && type == RetrieveFeedsAsyncTask.Type.HOME) {
|
||||||
|
//Update the id of the last toot retrieved
|
||||||
|
MainActivity.lastHomeId = statuses.get(0).getId();
|
||||||
SharedPreferences.Editor editor = sharedpreferences.edit();
|
SharedPreferences.Editor editor = sharedpreferences.edit();
|
||||||
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
|
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
|
||||||
editor.putString(Helper.LAST_HOMETIMELINE_MAX_ID + userId, statuses.get(0).getId());
|
editor.putString(Helper.LAST_HOMETIMELINE_MAX_ID + userId, statuses.get(0).getId());
|
||||||
|
@ -347,12 +318,18 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deals with new status coming from the streaming api
|
||||||
|
* @param status Status
|
||||||
|
*/
|
||||||
public void refresh(Status status){
|
public void refresh(Status status){
|
||||||
//New data are available
|
//New data are available
|
||||||
if( type == RetrieveFeedsAsyncTask.Type.HOME) {
|
if( type == RetrieveFeedsAsyncTask.Type.HOME) {
|
||||||
if (context == null)
|
if (context == null)
|
||||||
return;
|
return;
|
||||||
if (status != null) {
|
if (status != null) {
|
||||||
|
//Update the id of the last toot retrieved
|
||||||
|
MainActivity.lastHomeId = status.getId();
|
||||||
int index = lv_status.getFirstVisiblePosition() + 1;
|
int index = lv_status.getFirstVisiblePosition() + 1;
|
||||||
View v = lv_status.getChildAt(0);
|
View v = lv_status.getChildAt(0);
|
||||||
int top = (v == null) ? 0 : v.getTop();
|
int top = (v == null) ? 0 : v.getTop();
|
||||||
|
@ -393,12 +370,24 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called from main activity in onResume to retrieve missing toots (home timeline)
|
||||||
|
* @param sinceId String
|
||||||
|
*/
|
||||||
|
public void retrieveMissingToots(String sinceId){
|
||||||
|
asyncTask = new RetrieveMissingFeedsAsyncTask(context, sinceId, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When tab comes visible, first displayed toot is defined as read
|
||||||
|
* @param visible boolean
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void setMenuVisibility(final boolean visible) {
|
public void setMenuVisibility(final boolean visible) {
|
||||||
super.setMenuVisibility(visible);
|
super.setMenuVisibility(visible);
|
||||||
if( context == null)
|
if( context == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
//Store last toot id for home timeline to avoid to notify for those that have been already seen
|
//Store last toot id for home timeline to avoid to notify for those that have been already seen
|
||||||
if (type == RetrieveFeedsAsyncTask.Type.HOME && visible && statuses != null && statuses.size() > 0) {
|
if (type == RetrieveFeedsAsyncTask.Type.HOME && visible && statuses != null && statuses.size() > 0) {
|
||||||
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||||
|
@ -442,4 +431,25 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn
|
||||||
}
|
}
|
||||||
statusListAdapter.notifyDataSetChanged();
|
statusListAdapter.notifyDataSetChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRetrieveMissingFeeds(List<Status> statuses) {
|
||||||
|
if( statuses != null && statuses.size() > 0) {
|
||||||
|
ArrayList<String> knownId = new ArrayList<>();
|
||||||
|
for (Status st : this.statuses) {
|
||||||
|
knownId.add(st.getId());
|
||||||
|
}
|
||||||
|
for (int i = statuses.size()-1 ; i >= 0 ; i--) {
|
||||||
|
if (!knownId.contains(statuses.get(i).getId())) {
|
||||||
|
statuses.get(i).setNew(true);
|
||||||
|
MainActivity.countNewStatus++;
|
||||||
|
this.statuses.add(0, statuses.get(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
statusListAdapter.notifyDataSetChanged();
|
||||||
|
try {
|
||||||
|
((MainActivity) context).updateHomeCounter();
|
||||||
|
}catch (Exception ignored){}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -937,17 +937,6 @@ public class Helper {
|
||||||
}
|
}
|
||||||
SharedPreferences sharedpreferences = activity.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
SharedPreferences sharedpreferences = activity.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||||
String oldUserId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
|
String oldUserId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
|
||||||
//User wont' be the same, temp values are cleared
|
|
||||||
if( oldUserId != null && !oldUserId.equals(userID)){
|
|
||||||
if( DisplayStatusFragment.tempStatuses != null) {
|
|
||||||
DisplayStatusFragment.tempStatuses.clear();
|
|
||||||
DisplayStatusFragment.tempStatuses = new ArrayList<>();
|
|
||||||
}
|
|
||||||
if( DisplayNotificationsFragment.tempNotifications != null) {
|
|
||||||
DisplayNotificationsFragment.tempNotifications.clear();
|
|
||||||
DisplayNotificationsFragment.tempNotifications = new ArrayList<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SharedPreferences.Editor editor = sharedpreferences.edit();
|
SharedPreferences.Editor editor = sharedpreferences.edit();
|
||||||
editor.putString(Helper.PREF_KEY_OAUTH_TOKEN, account.getToken());
|
editor.putString(Helper.PREF_KEY_OAUTH_TOKEN, account.getToken());
|
||||||
editor.putString(Helper.PREF_KEY_ID, account.getId());
|
editor.putString(Helper.PREF_KEY_ID, account.getId());
|
||||||
|
@ -967,9 +956,8 @@ public class Helper {
|
||||||
final Paint paint = new Paint();
|
final Paint paint = new Paint();
|
||||||
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
|
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
|
||||||
final RectF rectF = new RectF(rect);
|
final RectF rectF = new RectF(rect);
|
||||||
final float roundPx = roundPixelSize;
|
|
||||||
paint.setAntiAlias(true);
|
paint.setAntiAlias(true);
|
||||||
canvas.drawRoundRect(rectF,roundPx,roundPx, paint);
|
canvas.drawRoundRect(rectF, (float) roundPixelSize, (float) roundPixelSize, paint);
|
||||||
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
|
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
|
||||||
canvas.drawBitmap(bitmap, rect, rect, paint);
|
canvas.drawBitmap(bitmap, rect, rect, paint);
|
||||||
return output;
|
return output;
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
/* Copyright 2017 Thomas Schneider
|
||||||
|
*
|
||||||
|
* This file is a part of Mastalab
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
||||||
|
* GNU General Public License as published by the Free Software Foundation; either version 3 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Mastalab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
|
||||||
|
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||||
|
* Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with Mastalab; if not,
|
||||||
|
* see <http://www.gnu.org/licenses>. */
|
||||||
|
package fr.gouv.etalab.mastodon.interfaces;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import fr.gouv.etalab.mastodon.client.Entities.Status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Thomas on 27/09/2017.
|
||||||
|
* Interface when missing status have been retrieved
|
||||||
|
*/
|
||||||
|
public interface OnRetrieveMissingFeedsInterface {
|
||||||
|
void onRetrieveMissingFeeds(List<Status> statuses);
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
/* Copyright 2017 Thomas Schneider
|
||||||
|
*
|
||||||
|
* This file is a part of Mastalab
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
||||||
|
* GNU General Public License as published by the Free Software Foundation; either version 3 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Mastalab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
|
||||||
|
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||||
|
* Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with Mastalab; if not,
|
||||||
|
* see <http://www.gnu.org/licenses>. */
|
||||||
|
package fr.gouv.etalab.mastodon.interfaces;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import fr.gouv.etalab.mastodon.client.Entities.Notification;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Thomas on 27/09/2017.
|
||||||
|
* Interface when missing notifications have been retrieved
|
||||||
|
*/
|
||||||
|
public interface OnRetrieveMissingNotificationsInterface {
|
||||||
|
void onRetrieveMissingNotifications(List<Notification> notifications);
|
||||||
|
}
|
|
@ -102,8 +102,6 @@ import fr.gouv.etalab.mastodon.fragments.TabLayoutSettingsFragment;
|
||||||
import fr.gouv.etalab.mastodon.sqlite.AccountDAO;
|
import fr.gouv.etalab.mastodon.sqlite.AccountDAO;
|
||||||
import mastodon.etalab.gouv.fr.mastodon.R;
|
import mastodon.etalab.gouv.fr.mastodon.R;
|
||||||
|
|
||||||
import static fr.gouv.etalab.mastodon.fragments.DisplayNotificationsFragment.tempNotifications;
|
|
||||||
import static fr.gouv.etalab.mastodon.fragments.DisplayStatusFragment.tempStatuses;
|
|
||||||
import static fr.gouv.etalab.mastodon.helper.Helper.CHANGE_THEME_INTENT;
|
import static fr.gouv.etalab.mastodon.helper.Helper.CHANGE_THEME_INTENT;
|
||||||
import static fr.gouv.etalab.mastodon.helper.Helper.CHANGE_USER_INTENT;
|
import static fr.gouv.etalab.mastodon.helper.Helper.CHANGE_USER_INTENT;
|
||||||
import static fr.gouv.etalab.mastodon.helper.Helper.HOME_TIMELINE_INTENT;
|
import static fr.gouv.etalab.mastodon.helper.Helper.HOME_TIMELINE_INTENT;
|
||||||
|
@ -144,7 +142,7 @@ public class MainActivity extends AppCompatActivity
|
||||||
public static int countNewNotifications = 0;
|
public static int countNewNotifications = 0;
|
||||||
private String userIdService;
|
private String userIdService;
|
||||||
private Intent streamingIntent, streamingFederatedIntent;
|
private Intent streamingIntent, streamingFederatedIntent;
|
||||||
public static boolean broadCastRegistred = false, broadCastFederatedRegistred = false;
|
public static String lastHomeId = null, lastNotificationId = null;
|
||||||
|
|
||||||
public MainActivity() {
|
public MainActivity() {
|
||||||
}
|
}
|
||||||
|
@ -157,71 +155,6 @@ public class MainActivity extends AppCompatActivity
|
||||||
final SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
|
final SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
|
||||||
|
|
||||||
|
|
||||||
receive_federated_data = new BroadcastReceiver() {
|
|
||||||
@Override
|
|
||||||
public void onReceive(Context context, Intent intent) {
|
|
||||||
Bundle b = intent.getExtras();
|
|
||||||
userIdService = b.getString("userIdService", null);
|
|
||||||
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
|
|
||||||
if( userIdService != null && userIdService.equals(userId)) {
|
|
||||||
Status status = b.getParcelable("data");
|
|
||||||
if (federatedFragment != null) {
|
|
||||||
federatedFragment.refresh(status);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
receive_data = new BroadcastReceiver() {
|
|
||||||
@Override
|
|
||||||
public void onReceive(Context context, Intent intent) {
|
|
||||||
Bundle b = intent.getExtras();
|
|
||||||
StreamingService.EventStreaming eventStreaming = (StreamingService.EventStreaming) intent.getSerializableExtra("eventStreaming");
|
|
||||||
userIdService = b.getString("userIdService", null);
|
|
||||||
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
|
|
||||||
if( userIdService != null && userIdService.equals(userId)) {
|
|
||||||
if (eventStreaming == StreamingService.EventStreaming.NOTIFICATION) {
|
|
||||||
Notification notification = b.getParcelable("data");
|
|
||||||
if (notificationsFragment != null) {
|
|
||||||
notificationsFragment.refresh(notification);
|
|
||||||
} else {
|
|
||||||
tempNotifications.add(notification);
|
|
||||||
}
|
|
||||||
} else if (eventStreaming == StreamingService.EventStreaming.UPDATE) {
|
|
||||||
Status status = b.getParcelable("data");
|
|
||||||
if (homeFragment != null) {
|
|
||||||
homeFragment.refresh(status);
|
|
||||||
} else {
|
|
||||||
tempStatuses.add(status);
|
|
||||||
}
|
|
||||||
} else if (eventStreaming == StreamingService.EventStreaming.DELETE) {
|
|
||||||
String id = b.getString("id");
|
|
||||||
if (notificationsFragment != null) {
|
|
||||||
if (notificationsFragment.getUserVisibleHint()) {
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
updateNotifCounter();
|
|
||||||
updateHomeCounter();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
streamingIntent = new Intent(this, StreamingService.class);
|
|
||||||
startService(streamingIntent);
|
|
||||||
|
|
||||||
|
|
||||||
if( !broadCastRegistred) {
|
|
||||||
LocalBroadcastManager.getInstance(this).registerReceiver(receive_data, new IntentFilter(Helper.RECEIVE_DATA));
|
|
||||||
broadCastRegistred = true;
|
|
||||||
}
|
|
||||||
if( !broadCastFederatedRegistred) {
|
|
||||||
LocalBroadcastManager.getInstance(this).registerReceiver(receive_federated_data, new IntentFilter(Helper.RECEIVE_FEDERATED_DATA));
|
|
||||||
broadCastFederatedRegistred = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
ProviderInstaller.installIfNeededAsync(this, this);
|
|
||||||
|
|
||||||
final int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
|
final int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
|
||||||
if( theme == Helper.THEME_LIGHT){
|
if( theme == Helper.THEME_LIGHT){
|
||||||
|
@ -931,10 +864,86 @@ public class MainActivity extends AppCompatActivity
|
||||||
//Proceeds to update of the authenticated account
|
//Proceeds to update of the authenticated account
|
||||||
if(Helper.isLoggedIn(getApplicationContext()))
|
if(Helper.isLoggedIn(getApplicationContext()))
|
||||||
new UpdateAccountInfoByIDAsyncTask(getApplicationContext(), MainActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
new UpdateAccountInfoByIDAsyncTask(getApplicationContext(), MainActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
|
if( lastHomeId != null && homeFragment != null){
|
||||||
|
homeFragment.retrieveMissingToots(lastHomeId);
|
||||||
|
}
|
||||||
|
if( lastNotificationId != null && notificationsFragment != null){
|
||||||
|
notificationsFragment.retrieveMissingNotifications(lastNotificationId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStart(){
|
||||||
|
super.onStart();
|
||||||
|
final SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||||
|
receive_federated_data = new BroadcastReceiver() {
|
||||||
|
@Override
|
||||||
|
public void onReceive(Context context, Intent intent) {
|
||||||
|
Bundle b = intent.getExtras();
|
||||||
|
userIdService = b.getString("userIdService", null);
|
||||||
|
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
|
||||||
|
if( userIdService != null && userIdService.equals(userId)) {
|
||||||
|
Status status = b.getParcelable("data");
|
||||||
|
if (federatedFragment != null) {
|
||||||
|
federatedFragment.refresh(status);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
receive_data = new BroadcastReceiver() {
|
||||||
|
@Override
|
||||||
|
public void onReceive(Context context, Intent intent) {
|
||||||
|
Bundle b = intent.getExtras();
|
||||||
|
StreamingService.EventStreaming eventStreaming = (StreamingService.EventStreaming) intent.getSerializableExtra("eventStreaming");
|
||||||
|
userIdService = b.getString("userIdService", null);
|
||||||
|
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
|
||||||
|
if( userIdService != null && userIdService.equals(userId)) {
|
||||||
|
if (eventStreaming == StreamingService.EventStreaming.NOTIFICATION) {
|
||||||
|
Notification notification = b.getParcelable("data");
|
||||||
|
if (notificationsFragment != null) {
|
||||||
|
notificationsFragment.refresh(notification);
|
||||||
|
}
|
||||||
|
} else if (eventStreaming == StreamingService.EventStreaming.UPDATE) {
|
||||||
|
Status status = b.getParcelable("data");
|
||||||
|
if (homeFragment != null) {
|
||||||
|
homeFragment.refresh(status);
|
||||||
|
}
|
||||||
|
} else if (eventStreaming == StreamingService.EventStreaming.DELETE) {
|
||||||
|
String id = b.getString("id");
|
||||||
|
if (notificationsFragment != null) {
|
||||||
|
if (notificationsFragment.getUserVisibleHint()) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
updateNotifCounter();
|
||||||
|
updateHomeCounter();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
streamingIntent = new Intent(this, StreamingService.class);
|
||||||
|
startService(streamingIntent);
|
||||||
|
streamingFederatedIntent = new Intent(this, StreamingFederatedTimelineService.class);
|
||||||
|
startService(streamingFederatedIntent);
|
||||||
|
LocalBroadcastManager.getInstance(this).registerReceiver(receive_data, new IntentFilter(Helper.RECEIVE_DATA));
|
||||||
|
LocalBroadcastManager.getInstance(this).registerReceiver(receive_federated_data, new IntentFilter(Helper.RECEIVE_FEDERATED_DATA));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStop(){
|
||||||
|
super.onStop();
|
||||||
|
if( streamingIntent != null)
|
||||||
|
stopService(streamingIntent);
|
||||||
|
if( streamingFederatedIntent != null)
|
||||||
|
stopService(streamingFederatedIntent);
|
||||||
|
if( receive_data != null)
|
||||||
|
LocalBroadcastManager.getInstance(this).unregisterReceiver(receive_data);
|
||||||
|
if( receive_federated_data != null)
|
||||||
|
LocalBroadcastManager.getInstance(this).unregisterReceiver(receive_federated_data);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onPause() {
|
protected void onPause() {
|
||||||
|
@ -945,14 +954,6 @@ public class MainActivity extends AppCompatActivity
|
||||||
@Override
|
@Override
|
||||||
public void onDestroy(){
|
public void onDestroy(){
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
if( streamingIntent != null)
|
|
||||||
stopService(streamingIntent);
|
|
||||||
if( streamingFederatedIntent != null)
|
|
||||||
stopService(streamingFederatedIntent);
|
|
||||||
LocalBroadcastManager.getInstance(this).unregisterReceiver(receive_data);
|
|
||||||
LocalBroadcastManager.getInstance(this).unregisterReceiver(receive_federated_data);
|
|
||||||
broadCastRegistred = false;
|
|
||||||
broadCastFederatedRegistred = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("StatementWithEmptyBody")
|
@SuppressWarnings("StatementWithEmptyBody")
|
||||||
|
|
Loading…
Reference in New Issue