Display the number of unread conversation and notifications on AppBar

This commit is contained in:
Pierre HUBERT 2018-08-22 17:15:09 +02:00
parent 13f109b5fa
commit 0cd0b3f7d5
3 changed files with 71 additions and 5 deletions

View File

@ -7,6 +7,7 @@ import android.app.NotificationManager;
import android.app.PendingIntent; import android.app.PendingIntent;
import android.content.Intent; import android.content.Intent;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v4.content.LocalBroadcastManager;
import android.util.Log; import android.util.Log;
import org.communiquons.android.comunic.client.R; import org.communiquons.android.comunic.client.R;
@ -16,6 +17,8 @@ import org.communiquons.android.comunic.client.data.helpers.NotificationsHelper;
import org.communiquons.android.comunic.client.data.utils.PreferencesUtils; import org.communiquons.android.comunic.client.data.utils.PreferencesUtils;
import org.communiquons.android.comunic.client.ui.activities.MainActivity; import org.communiquons.android.comunic.client.ui.activities.MainActivity;
import java.util.Objects;
/** /**
* Notifications service * Notifications service
* *
@ -30,6 +33,18 @@ public class NotificationsService extends IntentService {
*/ */
private static final String TAG = "NotificationsService"; private static final String TAG = "NotificationsService";
/**
* Broadcast action
*/
public static final String BROADCAST_ACTION =
"org.communiquons.android.comunic.NotificationService.BROADCAST";
/**
* Notification extras
*/
public static final String BROADCAST_EXTRA_NUMBER_NOTIFICATIONS = "NumberNotifications";
public static final String BROADCAST_EXTRACT_UNREAD_CONVERSATIONS = "UnreadConversations";
/** /**
* Notification channel ID * Notification channel ID
*/ */
@ -54,7 +69,7 @@ public class NotificationsService extends IntentService {
/** /**
* Last notification count * Last notification count
*/ */
private NotificationsCount mLastCount; private static NotificationsCount mLastCount;
/** /**
@ -136,6 +151,12 @@ public class NotificationsService extends IntentService {
//Save last notifications count //Save last notifications count
mLastCount = count; mLastCount = count;
//Create an intent and push nut data
Intent pushIntent = new Intent(BROADCAST_ACTION)
.putExtra(BROADCAST_EXTRA_NUMBER_NOTIFICATIONS, count.getNotificationsCount())
.putExtra(BROADCAST_EXTRACT_UNREAD_CONVERSATIONS, count.getConversationsCount());
LocalBroadcastManager.getInstance(this).sendBroadcast(pushIntent);
} }
Log.v(TAG, "Stop service"); Log.v(TAG, "Stop service");
@ -166,6 +187,7 @@ public class NotificationsService extends IntentService {
// or other notification behaviors after this // or other notification behaviors after this
NotificationManager notificationManager = (NotificationManager) getSystemService( NotificationManager notificationManager = (NotificationManager) getSystemService(
NOTIFICATION_SERVICE); NOTIFICATION_SERVICE);
assert notificationManager != null;
notificationManager.createNotificationChannel(mChannel); notificationManager.createNotificationChannel(mChannel);
//Create notification builder //Create notification builder
@ -189,7 +211,7 @@ public class NotificationsService extends IntentService {
mBuilder.setContentIntent(pendingIntent); mBuilder.setContentIntent(pendingIntent);
//Get notification manager to push notification //Get notification manager to push notification
((NotificationManager) getSystemService(NOTIFICATION_SERVICE)).notify( ((NotificationManager) Objects.requireNonNull(getSystemService(NOTIFICATION_SERVICE))).notify(
MAIN_NOTIFICATION_ID, mBuilder.build()); MAIN_NOTIFICATION_ID, mBuilder.build());
} }
@ -197,7 +219,8 @@ public class NotificationsService extends IntentService {
* Remove the notification * Remove the notification
*/ */
private void removeNotification(){ private void removeNotification(){
((NotificationManager) getSystemService(NOTIFICATION_SERVICE)).cancel(MAIN_NOTIFICATION_ID); ((NotificationManager) Objects.requireNonNull(getSystemService(NOTIFICATION_SERVICE)))
.cancel(MAIN_NOTIFICATION_ID);
} }
@Override @Override

View File

@ -2,13 +2,17 @@ package org.communiquons.android.comunic.client.ui.activities;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v4.app.FragmentTransaction; import android.support.v4.app.FragmentTransaction;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.AppCompatActivity; import android.support.v7.app.AppCompatActivity;
import android.util.Log; import android.util.Log;
import android.view.Menu; import android.view.Menu;
@ -25,6 +29,7 @@ import org.communiquons.android.comunic.client.data.helpers.AccountHelper;
import org.communiquons.android.comunic.client.data.helpers.ConversationsListHelper; import org.communiquons.android.comunic.client.data.helpers.ConversationsListHelper;
import org.communiquons.android.comunic.client.data.helpers.DatabaseHelper; import org.communiquons.android.comunic.client.data.helpers.DatabaseHelper;
import org.communiquons.android.comunic.client.data.helpers.DebugHelper; import org.communiquons.android.comunic.client.data.helpers.DebugHelper;
import org.communiquons.android.comunic.client.data.models.NotificationsCount;
import org.communiquons.android.comunic.client.data.runnables.FriendRefreshLoopRunnable; import org.communiquons.android.comunic.client.data.runnables.FriendRefreshLoopRunnable;
import org.communiquons.android.comunic.client.data.services.NotificationsService; import org.communiquons.android.comunic.client.data.services.NotificationsService;
import org.communiquons.android.comunic.client.data.utils.AccountUtils; import org.communiquons.android.comunic.client.data.utils.AccountUtils;
@ -90,6 +95,29 @@ public class MainActivity extends AppCompatActivity implements
*/ */
private NavigationBar mNavBar; private NavigationBar mNavBar;
/**
* Broadcast receiver
*/
private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction() == null)
return;
//Notifications number update
if(intent.getAction().equals(NotificationsService.BROADCAST_ACTION)){
NotificationsCount count = new NotificationsCount();
assert intent.getExtras() != null;
count.setNotificationsCount(intent.getExtras().getInt(
NotificationsService.BROADCAST_EXTRA_NUMBER_NOTIFICATIONS));
count.setConversationsCount(intent.getExtras().getInt(
NotificationsService.BROADCAST_EXTRACT_UNREAD_CONVERSATIONS));
updateNumberNotifications(count);
}
}
};
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -136,6 +164,10 @@ public class MainActivity extends AppCompatActivity implements
if (savedInstanceState == null){ if (savedInstanceState == null){
openNotificationsFragment(false); openNotificationsFragment(false);
} }
//Receive broadcasts
IntentFilter intentFilter = new IntentFilter(NotificationsService.BROADCAST_ACTION);
LocalBroadcastManager.getInstance(this).registerReceiver(mBroadcastReceiver, intentFilter);
} }
@Override @Override
@ -302,7 +334,18 @@ public class MainActivity extends AppCompatActivity implements
} }
/**
* Update the number of unread notifications
*
* @param count New number of notifications
*/
public void updateNumberNotifications(NotificationsCount count){
mNavBar.getItemIdentifierView(R.id.action_notifications).setNumberNews(
count.getNotificationsCount());
mNavBar.getItemIdentifierView(R.id.action_conversations).setNumberNews(
count.getConversationsCount());
}

View File

@ -126,7 +126,7 @@ public class NavigationBar extends BaseFrameLayoutView implements NavigationBarI
* @param index The index of the item to get * @param index The index of the item to get
* @return Related view * @return Related view
*/ */
public View getItemIndexView(int index){ public NavigationBarItem getItemIndexView(int index){
return mItems.get(index); return mItems.get(index);
} }
@ -136,7 +136,7 @@ public class NavigationBar extends BaseFrameLayoutView implements NavigationBarI
* @param id The identifier of the item to get * @param id The identifier of the item to get
* @return Related view * @return Related view
*/ */
public View getItemIdentifierView(int id){ public NavigationBarItem getItemIdentifierView(int id){
return getItemIndexView(MenuUtils.MenuIdentifierToIndex(mMenu, id)); return getItemIndexView(MenuUtils.MenuIdentifierToIndex(mMenu, id));
} }