Associates notifications in top bar to the right account & logs in it if the current authenticated account is different
This commit is contained in:
parent
5bc23d3a23
commit
0ecb808ecd
|
@ -64,6 +64,8 @@ import mastodon.etalab.gouv.fr.mastodon.R;
|
||||||
import static fr.gouv.etalab.mastodon.helper.Helper.HOME_TIMELINE_INTENT;
|
import static fr.gouv.etalab.mastodon.helper.Helper.HOME_TIMELINE_INTENT;
|
||||||
import static fr.gouv.etalab.mastodon.helper.Helper.INTENT_ACTION;
|
import static fr.gouv.etalab.mastodon.helper.Helper.INTENT_ACTION;
|
||||||
import static fr.gouv.etalab.mastodon.helper.Helper.NOTIFICATION_INTENT;
|
import static fr.gouv.etalab.mastodon.helper.Helper.NOTIFICATION_INTENT;
|
||||||
|
import static fr.gouv.etalab.mastodon.helper.Helper.PREF_KEY_ID;
|
||||||
|
import static fr.gouv.etalab.mastodon.helper.Helper.changeUser;
|
||||||
import static fr.gouv.etalab.mastodon.helper.Helper.menuAccounts;
|
import static fr.gouv.etalab.mastodon.helper.Helper.menuAccounts;
|
||||||
import static fr.gouv.etalab.mastodon.helper.Helper.updateHeaderAccountInfo;
|
import static fr.gouv.etalab.mastodon.helper.Helper.updateHeaderAccountInfo;
|
||||||
|
|
||||||
|
@ -147,18 +149,7 @@ public class MainActivity extends AppCompatActivity
|
||||||
});
|
});
|
||||||
|
|
||||||
boolean menuWasSelected = false;
|
boolean menuWasSelected = false;
|
||||||
if( getIntent() != null && getIntent().getExtras() != null ){
|
mamageNewIntent(getIntent());
|
||||||
Bundle extras = getIntent().getExtras();
|
|
||||||
if (extras.getInt(INTENT_ACTION) == NOTIFICATION_INTENT){
|
|
||||||
navigationView.setCheckedItem(R.id.nav_notification);
|
|
||||||
navigationView.getMenu().performIdentifierAction(R.id.nav_notification, 0);
|
|
||||||
menuWasSelected = true;
|
|
||||||
}else if( extras.getInt(INTENT_ACTION) == HOME_TIMELINE_INTENT){
|
|
||||||
navigationView.setCheckedItem(R.id.nav_home);
|
|
||||||
navigationView.getMenu().performIdentifierAction(R.id.nav_home, 0);
|
|
||||||
menuWasSelected = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (savedInstanceState == null && !menuWasSelected) {
|
if (savedInstanceState == null && !menuWasSelected) {
|
||||||
navigationView.setCheckedItem(R.id.nav_home);
|
navigationView.setCheckedItem(R.id.nav_home);
|
||||||
navigationView.getMenu().performIdentifierAction(R.id.nav_home, 0);
|
navigationView.getMenu().performIdentifierAction(R.id.nav_home, 0);
|
||||||
|
@ -201,15 +192,32 @@ public class MainActivity extends AppCompatActivity
|
||||||
@Override
|
@Override
|
||||||
protected void onNewIntent(Intent intent) {
|
protected void onNewIntent(Intent intent) {
|
||||||
super.onNewIntent(intent);
|
super.onNewIntent(intent);
|
||||||
|
mamageNewIntent(intent);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Manages new intents
|
||||||
|
* @param intent Intent - intent related to a notification in top bar
|
||||||
|
*/
|
||||||
|
private void mamageNewIntent(Intent intent){
|
||||||
if( intent == null || intent.getExtras() == null )
|
if( intent == null || intent.getExtras() == null )
|
||||||
return;
|
return;
|
||||||
Bundle extras = intent.getExtras();
|
Bundle extras = intent.getExtras();
|
||||||
|
String userIdIntent;
|
||||||
if( extras.containsKey(INTENT_ACTION) ){
|
if( extras.containsKey(INTENT_ACTION) ){
|
||||||
|
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||||
|
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null); //Id of the authenticated account
|
||||||
final NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
|
final NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
|
||||||
|
userIdIntent = extras.getString(PREF_KEY_ID); //Id of the account in the intent
|
||||||
if (extras.getInt(INTENT_ACTION) == NOTIFICATION_INTENT){
|
if (extras.getInt(INTENT_ACTION) == NOTIFICATION_INTENT){
|
||||||
|
if( userId!= null && !userId.equals(userIdIntent)) //Connected account is different from the id in the intent
|
||||||
|
changeUser(MainActivity.this, userIdIntent); //Connects the account which is related to the notification
|
||||||
navigationView.setCheckedItem(R.id.nav_notification);
|
navigationView.setCheckedItem(R.id.nav_notification);
|
||||||
navigationView.getMenu().performIdentifierAction(R.id.nav_notification, 0);
|
navigationView.getMenu().performIdentifierAction(R.id.nav_notification, 0);
|
||||||
}else if( extras.getInt(INTENT_ACTION) == HOME_TIMELINE_INTENT){
|
}else if( extras.getInt(INTENT_ACTION) == HOME_TIMELINE_INTENT){
|
||||||
|
if( userId!= null && !userId.equals(userIdIntent)) //Connected account is different from the id in the intent
|
||||||
|
changeUser(MainActivity.this, userIdIntent); //Connects the account which is related to the notification
|
||||||
navigationView.setCheckedItem(R.id.nav_home);
|
navigationView.setCheckedItem(R.id.nav_home);
|
||||||
navigationView.getMenu().performIdentifierAction(R.id.nav_home, 0);
|
navigationView.getMenu().performIdentifierAction(R.id.nav_home, 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,16 +32,17 @@ public class RetrieveHomeTimelineServiceAsyncTask extends AsyncTask<Void, Void,
|
||||||
private Context context;
|
private Context context;
|
||||||
private List<fr.gouv.etalab.mastodon.client.Entities.Status> statuses;
|
private List<fr.gouv.etalab.mastodon.client.Entities.Status> statuses;
|
||||||
private String since_id;
|
private String since_id;
|
||||||
private String acct;
|
private String acct, userId;
|
||||||
private OnRetrieveHomeTimelineServiceInterface listener;
|
private OnRetrieveHomeTimelineServiceInterface listener;
|
||||||
private String instance;
|
private String instance;
|
||||||
|
|
||||||
public RetrieveHomeTimelineServiceAsyncTask(Context context, String instance, String since_id, String acct, OnRetrieveHomeTimelineServiceInterface onRetrieveHomeTimelineServiceInterface){
|
public RetrieveHomeTimelineServiceAsyncTask(Context context, String instance, String since_id, String acct, String userId, OnRetrieveHomeTimelineServiceInterface onRetrieveHomeTimelineServiceInterface){
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.since_id = since_id;
|
this.since_id = since_id;
|
||||||
this.listener = onRetrieveHomeTimelineServiceInterface;
|
this.listener = onRetrieveHomeTimelineServiceInterface;
|
||||||
this.acct = acct;
|
this.acct = acct;
|
||||||
this.instance = instance;
|
this.instance = instance;
|
||||||
|
this.userId = userId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -52,7 +53,7 @@ public class RetrieveHomeTimelineServiceAsyncTask extends AsyncTask<Void, Void,
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onPostExecute(Void result) {
|
protected void onPostExecute(Void result) {
|
||||||
listener.onRetrieveHomeTimelineService(statuses, acct);
|
listener.onRetrieveHomeTimelineService(statuses, acct, userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,24 +34,26 @@ public class RetrieveNotificationsAsyncTask extends AsyncTask<Void, Void, Void>
|
||||||
private Context context;
|
private Context context;
|
||||||
private List<Notification> notifications;
|
private List<Notification> notifications;
|
||||||
private String max_id;
|
private String max_id;
|
||||||
private String acct;
|
private String acct, userId;
|
||||||
private OnRetrieveNotificationsInterface listener;
|
private OnRetrieveNotificationsInterface listener;
|
||||||
private String instance;
|
private String instance;
|
||||||
|
|
||||||
public RetrieveNotificationsAsyncTask(Context context, String max_id, String acct, OnRetrieveNotificationsInterface onRetrieveNotificationsInterface){
|
public RetrieveNotificationsAsyncTask(Context context, String max_id, String acct, String userId, OnRetrieveNotificationsInterface onRetrieveNotificationsInterface){
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.max_id = max_id;
|
this.max_id = max_id;
|
||||||
this.listener = onRetrieveNotificationsInterface;
|
this.listener = onRetrieveNotificationsInterface;
|
||||||
this.acct = acct;
|
this.acct = acct;
|
||||||
|
this.userId = userId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public RetrieveNotificationsAsyncTask(Context context, String instance, String max_id, String acct, OnRetrieveNotificationsInterface onRetrieveNotificationsInterface){
|
public RetrieveNotificationsAsyncTask(Context context, String instance, String max_id, String acct, String userId, OnRetrieveNotificationsInterface onRetrieveNotificationsInterface){
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.max_id = max_id;
|
this.max_id = max_id;
|
||||||
this.listener = onRetrieveNotificationsInterface;
|
this.listener = onRetrieveNotificationsInterface;
|
||||||
this.acct = acct;
|
this.acct = acct;
|
||||||
this.instance = instance;
|
this.instance = instance;
|
||||||
|
this.userId = userId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -65,7 +67,7 @@ public class RetrieveNotificationsAsyncTask extends AsyncTask<Void, Void, Void>
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onPostExecute(Void result) {
|
protected void onPostExecute(Void result) {
|
||||||
listener.onRetrieveNotifications(notifications, acct);
|
listener.onRetrieveNotifications(notifications, acct, userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,7 +92,7 @@ public class DisplayNotificationsFragment extends Fragment implements OnRetrieve
|
||||||
if(firstVisibleItem + visibleItemCount == totalItemCount ) {
|
if(firstVisibleItem + visibleItemCount == totalItemCount ) {
|
||||||
if(!flag_loading ) {
|
if(!flag_loading ) {
|
||||||
flag_loading = true;
|
flag_loading = true;
|
||||||
asyncTask = new RetrieveNotificationsAsyncTask(context, max_id, null,DisplayNotificationsFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
asyncTask = new RetrieveNotificationsAsyncTask(context, max_id, null, null,DisplayNotificationsFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
nextElementLoader.setVisibility(View.VISIBLE);
|
nextElementLoader.setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -108,7 +108,7 @@ public class DisplayNotificationsFragment extends Fragment implements OnRetrieve
|
||||||
notifications = new ArrayList<>();
|
notifications = new ArrayList<>();
|
||||||
firstLoad = true;
|
firstLoad = true;
|
||||||
flag_loading = true;
|
flag_loading = true;
|
||||||
asyncTask = new RetrieveNotificationsAsyncTask(context, max_id, null,DisplayNotificationsFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
asyncTask = new RetrieveNotificationsAsyncTask(context, max_id, null, null, DisplayNotificationsFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
swipeRefreshLayout.setColorSchemeResources(R.color.colorAccent,
|
swipeRefreshLayout.setColorSchemeResources(R.color.colorAccent,
|
||||||
|
@ -116,7 +116,7 @@ public class DisplayNotificationsFragment extends Fragment implements OnRetrieve
|
||||||
R.color.colorPrimaryDark);
|
R.color.colorPrimaryDark);
|
||||||
|
|
||||||
|
|
||||||
asyncTask = new RetrieveNotificationsAsyncTask(context, max_id, null, DisplayNotificationsFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
asyncTask = new RetrieveNotificationsAsyncTask(context, max_id, null, null, DisplayNotificationsFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
return rootView;
|
return rootView;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,7 +145,7 @@ public class DisplayNotificationsFragment extends Fragment implements OnRetrieve
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onRetrieveNotifications(List<Notification> notifications, String acct) {
|
public void onRetrieveNotifications(List<Notification> notifications, String acct, String userId) {
|
||||||
|
|
||||||
if( firstLoad && (notifications == null || notifications.size() == 0))
|
if( firstLoad && (notifications == null || notifications.size() == 0))
|
||||||
textviewNoAction.setVisibility(View.VISIBLE);
|
textviewNoAction.setVisibility(View.VISIBLE);
|
||||||
|
@ -170,13 +170,13 @@ public class DisplayNotificationsFragment extends Fragment implements OnRetrieve
|
||||||
//Store last notification id to avoid to notify for those that have been already seen
|
//Store last notification id to avoid to notify for those that have been already seen
|
||||||
if( notifications != null && notifications.size() > 0) {
|
if( notifications != null && notifications.size() > 0) {
|
||||||
final SharedPreferences sharedpreferences = getContext().getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
final SharedPreferences sharedpreferences = getContext().getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||||
//acct is null when used in Fragment, data need to be retrieved via shared preferences and db
|
//acct is null as userId when used in Fragment, data need to be retrieved via shared preferences and db
|
||||||
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
|
userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
|
||||||
SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
|
SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
|
||||||
Account currentAccount = new AccountDAO(context, db).getAccountByID(userId);
|
Account currentAccount = new AccountDAO(context, db).getAccountByID(userId);
|
||||||
if( currentAccount != null){
|
if( currentAccount != null){
|
||||||
SharedPreferences.Editor editor = sharedpreferences.edit();
|
SharedPreferences.Editor editor = sharedpreferences.edit();
|
||||||
editor.putString(Helper.LAST_NOTIFICATION_MAX_ID + currentAccount.getAcct(), notifications.get(0).getId());
|
editor.putString(Helper.LAST_NOTIFICATION_MAX_ID + currentAccount.getId(), notifications.get(0).getId());
|
||||||
editor.apply();
|
editor.apply();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -256,7 +256,7 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn
|
||||||
Account currentAccount = new AccountDAO(context, db).getAccountByID(userId);
|
Account currentAccount = new AccountDAO(context, db).getAccountByID(userId);
|
||||||
if( currentAccount != null){
|
if( currentAccount != null){
|
||||||
SharedPreferences.Editor editor = sharedpreferences.edit();
|
SharedPreferences.Editor editor = sharedpreferences.edit();
|
||||||
editor.putString(Helper.LAST_HOMETIMELINE_MAX_ID + currentAccount.getAcct(), statuses.get(0).getId());
|
editor.putString(Helper.LAST_HOMETIMELINE_MAX_ID + currentAccount.getId(), statuses.get(0).getId());
|
||||||
editor.apply();
|
editor.apply();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -414,19 +414,16 @@ public class Helper {
|
||||||
/**
|
/**
|
||||||
* Sends notification with intent
|
* Sends notification with intent
|
||||||
* @param context Context
|
* @param context Context
|
||||||
* @param intentAction int intent action
|
* @param intent Intent associated to the notifcation
|
||||||
* @param notificationId int id of the notification
|
* @param notificationId int id of the notification
|
||||||
* @param icon Bitmap profile picture
|
* @param icon Bitmap profile picture
|
||||||
* @param title String title of the notification
|
* @param title String title of the notification
|
||||||
* @param message String message for the notification
|
* @param message String message for the notification
|
||||||
*/
|
*/
|
||||||
public static void notify_user(Context context, int intentAction, int notificationId, Bitmap icon, String title, String message ) {
|
public static void notify_user(Context context, Intent intent, int notificationId, Bitmap icon, String title, String message ) {
|
||||||
final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||||
// prepare intent which is triggered if the user click on the notification
|
// prepare intent which is triggered if the user click on the notification
|
||||||
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
|
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
|
||||||
final Intent intent = new Intent(context, MainActivity.class);
|
|
||||||
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK );
|
|
||||||
intent.putExtra(INTENT_ACTION, intentAction);
|
|
||||||
PendingIntent pIntent = PendingIntent.getActivity(context, notificationId, intent, PendingIntent.FLAG_ONE_SHOT);
|
PendingIntent pIntent = PendingIntent.getActivity(context, notificationId, intent, PendingIntent.FLAG_ONE_SHOT);
|
||||||
RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
|
RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
|
||||||
// build notification
|
// build notification
|
||||||
|
@ -601,7 +598,7 @@ public class Helper {
|
||||||
* @param activity Activity
|
* @param activity Activity
|
||||||
* @param userID String - the new user id
|
* @param userID String - the new user id
|
||||||
*/
|
*/
|
||||||
private static void changeUser(Activity activity, String userID) {
|
public static void changeUser(Activity activity, String userID) {
|
||||||
|
|
||||||
SQLiteDatabase db = Sqlite.getInstance(activity, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
|
SQLiteDatabase db = Sqlite.getInstance(activity, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
|
||||||
Account account = new AccountDAO(activity,db).getAccountByID(userID);
|
Account account = new AccountDAO(activity,db).getAccountByID(userID);
|
||||||
|
|
|
@ -23,5 +23,5 @@ import fr.gouv.etalab.mastodon.client.Entities.Status;
|
||||||
* Interface when home timeline toots have been retrieved
|
* Interface when home timeline toots have been retrieved
|
||||||
*/
|
*/
|
||||||
public interface OnRetrieveHomeTimelineServiceInterface {
|
public interface OnRetrieveHomeTimelineServiceInterface {
|
||||||
void onRetrieveHomeTimelineService(List<Status> statuses, String acct);
|
void onRetrieveHomeTimelineService(List<Status> statuses, String acct, String userId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,5 +24,5 @@ import fr.gouv.etalab.mastodon.client.Entities.Notification;
|
||||||
* Interface when notifications have been retrieved
|
* Interface when notifications have been retrieved
|
||||||
*/
|
*/
|
||||||
public interface OnRetrieveNotificationsInterface {
|
public interface OnRetrieveNotificationsInterface {
|
||||||
void onRetrieveNotifications(List<Notification> notifications, String acct);
|
void onRetrieveNotifications(List<Notification> notifications, String acct, String userId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@ package fr.gouv.etalab.mastodon.jobs;
|
||||||
* 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.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
|
@ -34,6 +35,7 @@ import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import fr.gouv.etalab.mastodon.activities.MainActivity;
|
||||||
import fr.gouv.etalab.mastodon.asynctasks.RetrieveHomeTimelineServiceAsyncTask;
|
import fr.gouv.etalab.mastodon.asynctasks.RetrieveHomeTimelineServiceAsyncTask;
|
||||||
import fr.gouv.etalab.mastodon.client.Entities.Account;
|
import fr.gouv.etalab.mastodon.client.Entities.Account;
|
||||||
import fr.gouv.etalab.mastodon.client.Entities.Status;
|
import fr.gouv.etalab.mastodon.client.Entities.Status;
|
||||||
|
@ -45,6 +47,8 @@ import fr.gouv.etalab.mastodon.sqlite.Sqlite;
|
||||||
import mastodon.etalab.gouv.fr.mastodon.R;
|
import mastodon.etalab.gouv.fr.mastodon.R;
|
||||||
|
|
||||||
import static fr.gouv.etalab.mastodon.helper.Helper.HOME_TIMELINE_INTENT;
|
import static fr.gouv.etalab.mastodon.helper.Helper.HOME_TIMELINE_INTENT;
|
||||||
|
import static fr.gouv.etalab.mastodon.helper.Helper.INTENT_ACTION;
|
||||||
|
import static fr.gouv.etalab.mastodon.helper.Helper.PREF_KEY_ID;
|
||||||
import static fr.gouv.etalab.mastodon.helper.Helper.notify_user;
|
import static fr.gouv.etalab.mastodon.helper.Helper.notify_user;
|
||||||
|
|
||||||
|
|
||||||
|
@ -102,9 +106,9 @@ public class HomeTimelineSyncJob extends Job implements OnRetrieveHomeTimelineSe
|
||||||
return;
|
return;
|
||||||
//Retrieve users in db that owner has.
|
//Retrieve users in db that owner has.
|
||||||
for (Account account: accounts) {
|
for (Account account: accounts) {
|
||||||
String since_id = sharedpreferences.getString(Helper.LAST_HOMETIMELINE_MAX_ID + account.getAcct(), null);
|
String since_id = sharedpreferences.getString(Helper.LAST_HOMETIMELINE_MAX_ID + account.getId(), null);
|
||||||
notificationId = (int) Math.round(Double.parseDouble(account.getId())/1000);
|
notificationId = (int) Math.round(Double.parseDouble(account.getId())/1000);
|
||||||
new RetrieveHomeTimelineServiceAsyncTask(getContext(), account.getInstance(), since_id, account.getAcct(), HomeTimelineSyncJob.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
new RetrieveHomeTimelineServiceAsyncTask(getContext(), account.getInstance(), since_id, account.getAcct(), account.getId(), HomeTimelineSyncJob.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -112,13 +116,13 @@ public class HomeTimelineSyncJob extends Job implements OnRetrieveHomeTimelineSe
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onRetrieveHomeTimelineService(List<Status> statuses, String acct) {
|
public void onRetrieveHomeTimelineService(List<Status> statuses, String acct, String userId) {
|
||||||
if( statuses == null || statuses.size() == 0)
|
if( statuses == null || statuses.size() == 0)
|
||||||
return;
|
return;
|
||||||
Bitmap icon_notification = null;
|
Bitmap icon_notification = null;
|
||||||
final SharedPreferences sharedpreferences = getContext().getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
final SharedPreferences sharedpreferences = getContext().getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||||
|
|
||||||
String max_id = sharedpreferences.getString(Helper.LAST_HOMETIMELINE_MAX_ID + acct, null);
|
String max_id = sharedpreferences.getString(Helper.LAST_HOMETIMELINE_MAX_ID + userId, null);
|
||||||
//No previous notifications in cache, so no notification will be sent
|
//No previous notifications in cache, so no notification will be sent
|
||||||
if( max_id != null ){
|
if( max_id != null ){
|
||||||
String message;
|
String message;
|
||||||
|
@ -153,10 +157,14 @@ public class HomeTimelineSyncJob extends Job implements OnRetrieveHomeTimelineSe
|
||||||
message = getContext().getResources().getQuantityString(R.plurals.other_notif_hometimeline, statuses.size(), statuses.size());
|
message = getContext().getResources().getQuantityString(R.plurals.other_notif_hometimeline, statuses.size(), statuses.size());
|
||||||
else
|
else
|
||||||
message = "";
|
message = "";
|
||||||
notify_user(getContext(), HOME_TIMELINE_INTENT, notificationId, icon_notification,title,message);
|
final Intent intent = new Intent(getContext(), MainActivity.class);
|
||||||
|
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK );
|
||||||
|
intent.putExtra(INTENT_ACTION, HOME_TIMELINE_INTENT);
|
||||||
|
intent.putExtra(PREF_KEY_ID, userId);
|
||||||
|
notify_user(getContext(), intent, notificationId, icon_notification,title,message);
|
||||||
}
|
}
|
||||||
SharedPreferences.Editor editor = sharedpreferences.edit();
|
SharedPreferences.Editor editor = sharedpreferences.edit();
|
||||||
editor.putString(Helper.LAST_HOMETIMELINE_MAX_ID + acct, statuses.get(0).getId());
|
editor.putString(Helper.LAST_HOMETIMELINE_MAX_ID + userId, statuses.get(0).getId());
|
||||||
editor.apply();
|
editor.apply();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@ package fr.gouv.etalab.mastodon.jobs;
|
||||||
* 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.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
|
@ -36,6 +37,7 @@ import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import fr.gouv.etalab.mastodon.activities.MainActivity;
|
||||||
import fr.gouv.etalab.mastodon.client.PatchBaseImageDownloader;
|
import fr.gouv.etalab.mastodon.client.PatchBaseImageDownloader;
|
||||||
import fr.gouv.etalab.mastodon.helper.Helper;
|
import fr.gouv.etalab.mastodon.helper.Helper;
|
||||||
import mastodon.etalab.gouv.fr.mastodon.R;
|
import mastodon.etalab.gouv.fr.mastodon.R;
|
||||||
|
@ -46,7 +48,9 @@ import fr.gouv.etalab.mastodon.interfaces.OnRetrieveNotificationsInterface;
|
||||||
import fr.gouv.etalab.mastodon.sqlite.AccountDAO;
|
import fr.gouv.etalab.mastodon.sqlite.AccountDAO;
|
||||||
import fr.gouv.etalab.mastodon.sqlite.Sqlite;
|
import fr.gouv.etalab.mastodon.sqlite.Sqlite;
|
||||||
|
|
||||||
|
import static fr.gouv.etalab.mastodon.helper.Helper.INTENT_ACTION;
|
||||||
import static fr.gouv.etalab.mastodon.helper.Helper.NOTIFICATION_INTENT;
|
import static fr.gouv.etalab.mastodon.helper.Helper.NOTIFICATION_INTENT;
|
||||||
|
import static fr.gouv.etalab.mastodon.helper.Helper.PREF_KEY_ID;
|
||||||
import static fr.gouv.etalab.mastodon.helper.Helper.notify_user;
|
import static fr.gouv.etalab.mastodon.helper.Helper.notify_user;
|
||||||
|
|
||||||
|
|
||||||
|
@ -112,9 +116,9 @@ public class NotificationsSyncJob extends Job implements OnRetrieveNotifications
|
||||||
return;
|
return;
|
||||||
//Retrieve users in db that owner has.
|
//Retrieve users in db that owner has.
|
||||||
for (Account account: accounts) {
|
for (Account account: accounts) {
|
||||||
String max_id = sharedpreferences.getString(Helper.LAST_NOTIFICATION_MAX_ID + account.getAcct(), null);
|
String max_id = sharedpreferences.getString(Helper.LAST_NOTIFICATION_MAX_ID + account.getId(), null);
|
||||||
notificationId = (int) Math.round(Double.parseDouble(account.getId())/1000);
|
notificationId = (int) Math.round(Double.parseDouble(account.getId())/1000);
|
||||||
new RetrieveNotificationsAsyncTask(getContext(), account.getInstance(), max_id, account.getAcct(), NotificationsSyncJob.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
new RetrieveNotificationsAsyncTask(getContext(), account.getInstance(), max_id, account.getAcct(), account.getId(), NotificationsSyncJob.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -122,7 +126,7 @@ public class NotificationsSyncJob extends Job implements OnRetrieveNotifications
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onRetrieveNotifications(List<Notification> notifications, String acct) {
|
public void onRetrieveNotifications(List<Notification> notifications, String acct, String userId) {
|
||||||
if( notifications == null || notifications.size() == 0)
|
if( notifications == null || notifications.size() == 0)
|
||||||
return;
|
return;
|
||||||
Bitmap icon_notification = null;
|
Bitmap icon_notification = null;
|
||||||
|
@ -132,7 +136,7 @@ public class NotificationsSyncJob extends Job implements OnRetrieveNotifications
|
||||||
//boolean notif_ask = sharedpreferences.getBoolean(Helper.SET_NOTIF_ASK, true);
|
//boolean notif_ask = sharedpreferences.getBoolean(Helper.SET_NOTIF_ASK, true);
|
||||||
boolean notif_mention = sharedpreferences.getBoolean(Helper.SET_NOTIF_MENTION, true);
|
boolean notif_mention = sharedpreferences.getBoolean(Helper.SET_NOTIF_MENTION, true);
|
||||||
boolean notif_share = sharedpreferences.getBoolean(Helper.SET_NOTIF_SHARE, true);
|
boolean notif_share = sharedpreferences.getBoolean(Helper.SET_NOTIF_SHARE, true);
|
||||||
String max_id = sharedpreferences.getString(Helper.LAST_NOTIFICATION_MAX_ID + acct, null);
|
String max_id = sharedpreferences.getString(Helper.LAST_NOTIFICATION_MAX_ID + userId, null);
|
||||||
//No previous notifications in cache, so no notification will be sent
|
//No previous notifications in cache, so no notification will be sent
|
||||||
if( max_id != null ){
|
if( max_id != null ){
|
||||||
int newFollows = 0;
|
int newFollows = 0;
|
||||||
|
@ -213,11 +217,15 @@ public class NotificationsSyncJob extends Job implements OnRetrieveNotifications
|
||||||
message = getContext().getResources().getQuantityString(R.plurals.other_notifications, other, other);
|
message = getContext().getResources().getQuantityString(R.plurals.other_notifications, other, other);
|
||||||
else
|
else
|
||||||
message = "";
|
message = "";
|
||||||
notify_user(getContext(), NOTIFICATION_INTENT, notificationId, icon_notification,title,message);
|
final Intent intent = new Intent(getContext(), MainActivity.class);
|
||||||
|
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK );
|
||||||
|
intent.putExtra(INTENT_ACTION, NOTIFICATION_INTENT);
|
||||||
|
intent.putExtra(PREF_KEY_ID, userId);
|
||||||
|
notify_user(getContext(), intent, notificationId, icon_notification,title,message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SharedPreferences.Editor editor = sharedpreferences.edit();
|
SharedPreferences.Editor editor = sharedpreferences.edit();
|
||||||
editor.putString(Helper.LAST_NOTIFICATION_MAX_ID + acct, notifications.get(0).getId());
|
editor.putString(Helper.LAST_NOTIFICATION_MAX_ID + userId, notifications.get(0).getId());
|
||||||
editor.apply();
|
editor.apply();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,7 +76,6 @@ public class AccountDAO {
|
||||||
db.insert(Sqlite.TABLE_USER_ACCOUNT, null, values);
|
db.insert(Sqlite.TABLE_USER_ACCOUNT, null, values);
|
||||||
|
|
||||||
}catch (Exception e) {
|
}catch (Exception e) {
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
Loading…
Reference in New Issue