Skip to content
Snippets Groups Projects
Commit 8d71075c authored by Adrien Béraud's avatar Adrien Béraud
Browse files

contacts: fix loading in some cases

Change-Id: Ic6d1f2cc7860d28aad10a92b621ba8df3cc59f39
parent f00879f1
No related branches found
No related tags found
No related merge requests found
...@@ -384,29 +384,47 @@ public class NotificationServiceImpl implements NotificationService { ...@@ -384,29 +384,47 @@ public class NotificationServiceImpl implements NotificationService {
mNotificationBuilders.put(notificationId, messageNotificationBuilder); mNotificationBuilders.put(notificationId, messageNotificationBuilder);
} }
private NotificationCompat.Builder getRequestNotificationBuilder(String accountId) {
NotificationCompat.Builder builder = new NotificationCompat.Builder(mContext, NOTIF_CHANNEL_REQUEST)
.setDefaults(NotificationCompat.DEFAULT_ALL)
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
.setAutoCancel(true)
.setSmallIcon(R.drawable.ic_ring_logo_white)
.setCategory(NotificationCompat.CATEGORY_SOCIAL)
.setContentTitle(mContext.getString(R.string.contact_request_title));
Intent intentOpenTrustRequestFragment = new Intent(HomeActivity.ACTION_PRESENT_TRUST_REQUEST_FRAGMENT)
.setClass(mContext, HomeActivity.class)
.putExtra(ContactRequestsFragment.ACCOUNT_ID, accountId);
builder.setContentIntent(PendingIntent.getActivity(mContext,
random.nextInt(), intentOpenTrustRequestFragment, PendingIntent.FLAG_ONE_SHOT));
builder.setColor(ResourcesCompat.getColor(mContext.getResources(),
R.color.color_primary_dark, null));
return builder;
}
@Override @Override
public void showIncomingTrustRequestNotification(final Account account) { public void showIncomingTrustRequestNotification(final Account account) {
int notificationId = getIncomingTrustNotificationId(account.getAccountID()); int notificationId = getIncomingTrustNotificationId(account.getAccountID());
NotificationCompat.Builder messageNotificationBuilder;
Set<String> notifiedRequests = mPreferencesService.loadRequestsPreferences(account.getAccountID()); Set<String> notifiedRequests = mPreferencesService.loadRequestsPreferences(account.getAccountID());
Collection<Conversation> requests = account.getPending(); Collection<Conversation> requests = account.getPending();
if (requests.isEmpty()) { if (requests.isEmpty())
return; return;
} else if (requests.size() == 1) { if (requests.size() == 1) {
Conversation request = requests.iterator().next(); Conversation request = requests.iterator().next();
CallContact contact = request.getContact(); CallContact contact = request.getContact();
String contactKey = contact.getPrimaryUri().getRawRingId(); String contactKey = contact.getPrimaryUri().getRawRingId();
if (notifiedRequests.contains(contactKey)) { if (notifiedRequests.contains(contactKey)) {
return; return;
} }
mContactService.loadContactData(contact); mContactService.getLoadedContact(account.getAccountID(), contact).subscribe(c -> {
NotificationCompat.Builder builder = getRequestNotificationBuilder(account.getAccountID());
mPreferencesService.saveRequestPreferences(account.getAccountID(), contactKey); mPreferencesService.saveRequestPreferences(account.getAccountID(), contactKey);
messageNotificationBuilder = new NotificationCompat.Builder(mContext, NOTIF_CHANNEL_REQUEST);
Bundle info = new Bundle(); Bundle info = new Bundle();
info.putString(TRUST_REQUEST_NOTIFICATION_ACCOUNT_ID, account.getAccountID()); info.putString(TRUST_REQUEST_NOTIFICATION_ACCOUNT_ID, account.getAccountID());
info.putString(TRUST_REQUEST_NOTIFICATION_FROM, contact.getPrimaryNumber()); info.putString(TRUST_REQUEST_NOTIFICATION_FROM, c.getPrimaryNumber());
messageNotificationBuilder.setContentText(contact.getRingUsername()) builder.setContentText(c.getRingUsername())
.addAction(R.drawable.baseline_person_add_24, mContext.getText(R.string.accept), .addAction(R.drawable.baseline_person_add_24, mContext.getText(R.string.accept),
PendingIntent.getService(mContext, random.nextInt(), PendingIntent.getService(mContext, random.nextInt(),
new Intent(DRingService.ACTION_TRUST_REQUEST_ACCEPT) new Intent(DRingService.ACTION_TRUST_REQUEST_ACCEPT)
...@@ -426,9 +444,11 @@ public class NotificationServiceImpl implements NotificationService { ...@@ -426,9 +444,11 @@ public class NotificationServiceImpl implements NotificationService {
.putExtras(info), .putExtras(info),
PendingIntent.FLAG_ONE_SHOT)); PendingIntent.FLAG_ONE_SHOT));
setContactPicture(contact, messageNotificationBuilder); setContactPicture(c, builder);
notificationManager.notify(notificationId, builder.build());
});
} else { } else {
messageNotificationBuilder = new NotificationCompat.Builder(mContext, NOTIF_CHANNEL_REQUEST); NotificationCompat.Builder builder = getRequestNotificationBuilder(account.getAccountID());
boolean newRequest = false; boolean newRequest = false;
for (Conversation request : requests) { for (Conversation request : requests) {
CallContact contact = request.getContact(); CallContact contact = request.getContact();
...@@ -440,30 +460,10 @@ public class NotificationServiceImpl implements NotificationService { ...@@ -440,30 +460,10 @@ public class NotificationServiceImpl implements NotificationService {
} }
if (!newRequest) if (!newRequest)
return; return;
messageNotificationBuilder.setContentText(String.format(mContext.getString(R.string.contact_request_msg), Integer.toString(requests.size()))); builder.setContentText(String.format(mContext.getString(R.string.contact_request_msg), Integer.toString(requests.size())));
messageNotificationBuilder.setLargeIcon(null); builder.setLargeIcon(null);
messageNotificationBuilder.mActions.clear(); notificationManager.notify(notificationId, builder.build());
} }
messageNotificationBuilder
.setDefaults(NotificationCompat.DEFAULT_ALL)
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
.setAutoCancel(true)
.setSmallIcon(R.drawable.ic_ring_logo_white)
.setCategory(NotificationCompat.CATEGORY_SOCIAL)
.setContentTitle(mContext.getString(R.string.contact_request_title));
Intent intentOpenTrustRequestFragment = new Intent(HomeActivity.ACTION_PRESENT_TRUST_REQUEST_FRAGMENT)
.setClass(mContext, HomeActivity.class)
.putExtra(ContactRequestsFragment.ACCOUNT_ID, account.getAccountID());
messageNotificationBuilder.setContentIntent(PendingIntent.getActivity(mContext,
random.nextInt(), intentOpenTrustRequestFragment, PendingIntent.FLAG_ONE_SHOT));
messageNotificationBuilder.setColor(ResourcesCompat.getColor(mContext.getResources(),
R.color.color_primary_dark, null));
mNotificationBuilders.put(notificationId, messageNotificationBuilder);
notificationManager.notify(notificationId, messageNotificationBuilder.build());
} }
@Override @Override
...@@ -645,7 +645,6 @@ public class NotificationServiceImpl implements NotificationService { ...@@ -645,7 +645,6 @@ public class NotificationServiceImpl implements NotificationService {
} }
int notificationId = getIncomingTrustNotificationId(accountID); int notificationId = getIncomingTrustNotificationId(accountID);
notificationManager.cancel(notificationId); notificationManager.cancel(notificationId);
mNotificationBuilders.remove(notificationId);
} }
@Override @Override
......
...@@ -29,6 +29,7 @@ import cx.ring.model.SipCall; ...@@ -29,6 +29,7 @@ import cx.ring.model.SipCall;
import cx.ring.mvp.RootPresenter; import cx.ring.mvp.RootPresenter;
import cx.ring.services.AccountService; import cx.ring.services.AccountService;
import cx.ring.services.CallService; import cx.ring.services.CallService;
import cx.ring.services.ContactService;
import cx.ring.services.HardwareService; import cx.ring.services.HardwareService;
import cx.ring.services.NotificationService; import cx.ring.services.NotificationService;
import cx.ring.utils.Log; import cx.ring.utils.Log;
...@@ -41,6 +42,7 @@ public class CallPresenter extends RootPresenter<CallView> { ...@@ -41,6 +42,7 @@ public class CallPresenter extends RootPresenter<CallView> {
public final static String TAG = CallPresenter.class.getSimpleName(); public final static String TAG = CallPresenter.class.getSimpleName();
private AccountService mAccountService; private AccountService mAccountService;
private ContactService mContactService;
private NotificationService mNotificationService; private NotificationService mNotificationService;
private HardwareService mHardwareService; private HardwareService mHardwareService;
private CallService mCallService; private CallService mCallService;
...@@ -62,10 +64,12 @@ public class CallPresenter extends RootPresenter<CallView> { ...@@ -62,10 +64,12 @@ public class CallPresenter extends RootPresenter<CallView> {
@Inject @Inject
public CallPresenter(AccountService accountService, public CallPresenter(AccountService accountService,
ContactService contactService,
NotificationService notificationService, NotificationService notificationService,
HardwareService hardwareService, HardwareService hardwareService,
CallService callService) { CallService callService) {
mAccountService = accountService; mAccountService = accountService;
mContactService = contactService;
mNotificationService = notificationService; mNotificationService = notificationService;
mHardwareService = hardwareService; mHardwareService = hardwareService;
mCallService = callService; mCallService = callService;
...@@ -259,8 +263,7 @@ public class CallPresenter extends RootPresenter<CallView> { ...@@ -259,8 +263,7 @@ public class CallPresenter extends RootPresenter<CallView> {
private void contactUpdate(final SipCall call) { private void contactUpdate(final SipCall call) {
if (mSipCall != call) { if (mSipCall != call) {
mSipCall = call; mSipCall = call;
mCompositeDisposable.add(call.getContact() mCompositeDisposable.add(mContactService.observeContact(call.getAccount(), call.getContact())
.getUpdates()
.observeOn(mUiScheduler) .observeOn(mUiScheduler)
.subscribe(c -> getView().updateContactBubble(c))); .subscribe(c -> getView().updateContactBubble(c)));
} }
......
...@@ -60,7 +60,7 @@ public class CallContact { ...@@ -60,7 +60,7 @@ public class CallContact {
private String mDisplayName; private String mDisplayName;
private Object mContactPhoto = null; private Object mContactPhoto = null;
private final Subject<CallContact> mContactUpdates = PublishSubject.create(); private final Subject<CallContact> mContactUpdates = BehaviorSubject.create();
private Observable<CallContact> mContactObservable; private Observable<CallContact> mContactObservable;
public CallContact(long cID) { public CallContact(long cID) {
......
...@@ -98,6 +98,7 @@ public abstract class ContactService { ...@@ -98,6 +98,7 @@ public abstract class ContactService {
.doOnDispose(() -> { .doOnDispose(() -> {
mAccountService.subscribeBuddy(accountId, uriString, false); mAccountService.subscribeBuddy(accountId, uriString, false);
}) })
.filter(c -> c.isUsernameLoaded() && c.detailsLoaded)
.replay(1) .replay(1)
.refCount()); .refCount());
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment