Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions app/res/menu/menu_app_home.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_messaging"
android:icon="@drawable/ic_connect_messaging_base"
android:title="@string/personalid_messaging_menu_title"
app:showAsAction="always" />
<item
android:id="@+id/action_update"
android:icon="@android:drawable/ic_menu_upload"
Expand Down
55 changes: 55 additions & 0 deletions app/src/org/commcare/activities/StandardHomeActivity.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,22 @@
package org.commcare.activities;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;

import androidx.localbroadcastmanager.content.LocalBroadcastManager;

import org.commcare.CommCareApplication;
import org.commcare.CommCareNoficationManager;
import org.commcare.android.database.connect.models.ConnectAppRecord;
import org.commcare.connect.ConnectJobHelper;
import org.commcare.connect.ConnectNavHelper;
import org.commcare.connect.MessageManager;
import org.commcare.android.database.connect.models.ConnectJobRecord;

import org.commcare.connect.database.ConnectJobUtils;
Expand All @@ -23,6 +30,7 @@
import org.commcare.tasks.ResultAndError;
import org.commcare.utils.ApkDependenciesUtils;
import org.commcare.utils.ConnectivityStatus;
import org.commcare.utils.FirebaseMessagingUtil;
import org.commcare.utils.SessionUnavailableException;
import org.commcare.views.notifications.NotificationMessageFactory;
import org.javarosa.core.services.locale.Localization;
Expand All @@ -42,6 +50,7 @@ public class StandardHomeActivity
private static final String AIRPLANE_MODE_CATEGORY = "airplane-mode";

private StandardHomeActivityUIController uiController;
private MenuItem messagingMenuItem;
private Map<Integer, String> menuIdToAnalyticsParam;

@Override
Expand All @@ -50,6 +59,38 @@ public void onCreateSessionSafe(Bundle savedInstanceState) {
uiController.setupUI();
}

@Override
protected void onResume() {
super.onResume();

if(shouldShowMessaging()) {
updateMessagingIcon();
MessageManager.retrieveMessages(this, success -> {
updateMessagingIcon();
});
}

LocalBroadcastManager.getInstance(this).registerReceiver(updateReceiver,
new IntentFilter(FirebaseMessagingUtil.MESSAGING_UPDATE_BROADCAST));
}

@Override
public void onPause() {
super.onPause();
LocalBroadcastManager.getInstance(this).unregisterReceiver(updateReceiver);
}

private final BroadcastReceiver updateReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
updateMessagingIcon();
}
};

private boolean shouldShowMessaging() {
return getIntent().getBooleanExtra(LoginActivity.PERSONALID_MANAGED_LOGIN , false);
}

@Override
public void onResumeSessionSafe() {
super.onResumeSessionSafe();
Expand Down Expand Up @@ -142,6 +183,8 @@ public boolean onCreateOptionsMenu(Menu menu) {
menu.findItem(R.id.action_set_pin).setTitle(Localization.get("home.menu.pin.set"));
menu.findItem(R.id.action_update_commcare).setTitle(Localization.get("home.menu.update.commcare"));

messagingMenuItem = menu.findItem(R.id.action_messaging);

return super.onCreateOptionsMenu(menu);
}

Expand All @@ -158,6 +201,9 @@ public boolean onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.action_about).setVisible(enableMenus);
menu.findItem(R.id.action_update_commcare).setVisible(enableMenus && showCommCareUpdateMenu);
preparePinMenu(menu, enableMenus);

messagingMenuItem.setVisible(shouldShowMessaging());
updateMessagingIcon();
return true;
}

Expand All @@ -179,6 +225,12 @@ private static void preparePinMenu(Menu menu, boolean enableMenus) {
}
}

public void updateMessagingIcon() {
if(shouldShowMessaging() && messagingMenuItem != null) {
messagingMenuItem.setIcon(MessageManager.getMessagingIcon(this));
}
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
FirebaseAnalyticsUtil.reportOptionsMenuItemClick(this.getClass(),
Expand Down Expand Up @@ -209,6 +261,9 @@ public boolean onOptionsItemSelected(MenuItem item) {
} else if (itemId == R.id.action_update_commcare) {
startCommCareUpdate();
return true;
} else if(itemId == R.id.action_messaging) {
ConnectNavHelper.INSTANCE.goToMessaging(this);
return true;
}

return super.onOptionsItemSelected(item);
Expand Down
10 changes: 1 addition & 9 deletions app/src/org/commcare/activities/connect/ConnectActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
import android.view.MenuItem;

import androidx.appcompat.app.ActionBar;
import androidx.core.content.res.ResourcesCompat;
import androidx.fragment.app.Fragment;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import androidx.navigation.NavGraph;
Expand All @@ -26,17 +25,14 @@
import org.commcare.activities.NavigationHostCommCareActivity;
import org.commcare.android.database.connect.models.ConnectJobRecord;
import org.commcare.connect.ConnectConstants;
import org.commcare.connect.ConnectJobHelper;
import org.commcare.connect.ConnectNavHelper;
import org.commcare.connect.MessageManager;
import org.commcare.connect.PersonalIdManager;
import org.commcare.connect.database.ConnectJobUtils;
import org.commcare.connect.database.ConnectMessagingDatabaseHelper;
import org.commcare.dalvik.R;
import org.commcare.fragments.RefreshableFragment;
import org.commcare.utils.FirebaseMessagingUtil;
import org.commcare.views.dialogs.CustomProgressDialog;
import org.javarosa.core.services.Logger;

import java.util.Objects;

Expand Down Expand Up @@ -167,11 +163,7 @@ private void retrieveMessages(){

public void updateMessagingIcon() {
if(messagingMenuItem != null) {
int icon = R.drawable.ic_connect_messaging_base;
if(ConnectMessagingDatabaseHelper.getUnviewedMessages(this).size() > 0) {
icon = R.drawable.ic_connect_messaging_unread;
}
messagingMenuItem.setIcon(ResourcesCompat.getDrawable(getResources(), icon, null));
messagingMenuItem.setIcon(MessageManager.getMessagingIcon(this));
}
}

Expand Down
8 changes: 7 additions & 1 deletion app/src/org/commcare/connect/MessageManager.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.commcare.connect;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.widget.Toast;

Expand All @@ -12,7 +13,6 @@
import org.commcare.connect.network.ApiPersonalId;
import org.commcare.connect.network.IApiCallback;
import org.commcare.dalvik.R;
import org.commcare.util.LogTypes;
import org.javarosa.core.io.StreamsUtil;
import org.javarosa.core.services.Logger;
import org.json.JSONArray;
Expand All @@ -25,8 +25,14 @@
import java.util.Map;

import androidx.annotation.Nullable;
import androidx.core.content.res.ResourcesCompat;

public class MessageManager {
public static Drawable getMessagingIcon(Context context) {
int icon = ConnectMessagingDatabaseHelper.getUnviewedMessages(context).isEmpty() ?
R.drawable.ic_connect_messaging_base : R.drawable.ic_connect_messaging_unread;
return ResourcesCompat.getDrawable(context.getResources(), icon, null);
}

public static ConnectMessagingChannelRecord handleReceivedChannel(Context context, Map<String, String> payloadData) {
ConnectMessagingChannelRecord channel = ConnectMessagingChannelRecord.fromMessagePayload(payloadData);
Expand Down