mirror of
https://github.com/pierre42100/ComunicAndroid
synced 2024-11-23 22:09:30 +00:00
Display the number of unread conversation and notifications on AppBar
This commit is contained in:
parent
13f109b5fa
commit
0cd0b3f7d5
@ -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
|
||||||
|
@ -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());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user