Commit a15164c3 authored by Leonardo Aramaki's avatar Leonardo Aramaki

Independently of a new registration token being generated or not just send the...

Independently of a new registration token being generated or not just send the current if available at every connect
parent b5db7b51
...@@ -13,6 +13,7 @@ import chat.rocket.android.R; ...@@ -13,6 +13,7 @@ import chat.rocket.android.R;
import chat.rocket.android.RocketChatCache; import chat.rocket.android.RocketChatCache;
import chat.rocket.android.api.RaixPushHelper; import chat.rocket.android.api.RaixPushHelper;
import chat.rocket.android.helper.LogIfError; import chat.rocket.android.helper.LogIfError;
import chat.rocket.android.push.gcm.GcmPushHelper;
import chat.rocket.core.SyncState; import chat.rocket.core.SyncState;
import chat.rocket.persistence.realm.RealmHelper; import chat.rocket.persistence.realm.RealmHelper;
import chat.rocket.persistence.realm.models.ddp.RealmUser; import chat.rocket.persistence.realm.models.ddp.RealmUser;
...@@ -24,63 +25,72 @@ import io.realm.RealmResults; ...@@ -24,63 +25,72 @@ import io.realm.RealmResults;
* call raix:push-update if needed. * call raix:push-update if needed.
*/ */
public class GcmPushRegistrationObserver extends AbstractModelObserver<GcmPushRegistration> { public class GcmPushRegistrationObserver extends AbstractModelObserver<GcmPushRegistration> {
public GcmPushRegistrationObserver(Context context, String hostname,
RealmHelper realmHelper) {
super(context, hostname, realmHelper);
}
@Override public GcmPushRegistrationObserver(Context context, String hostname,
public RealmResults<GcmPushRegistration> queryItems(Realm realm) { RealmHelper realmHelper) {
return GcmPushRegistration.queryDefault(realm) super(context, hostname, realmHelper);
.equalTo(GcmPushRegistration.SYNC_STATE, SyncState.NOT_SYNCED) }
.equalTo(GcmPushRegistration.GCM_PUSH_ENABLED, true)
.findAll();
}
@Override @Override
public void onUpdateResults(List<GcmPushRegistration> results) { public RealmResults<GcmPushRegistration> queryItems(Realm realm) {
if (results.isEmpty()) { return GcmPushRegistration.queryDefault(realm)
return; .equalTo(GcmPushRegistration.SYNC_STATE, SyncState.NOT_SYNCED)
.equalTo(GcmPushRegistration.GCM_PUSH_ENABLED, true)
.findAll();
} }
realmHelper.executeTransaction(realm -> { @Override
GcmPushRegistration.queryDefault(realm).findFirst().setSyncState(SyncState.SYNCING); public void onUpdateResults(List<GcmPushRegistration> results) {
return null; String gcmToken = GcmPushHelper.INSTANCE.getGcmToken();
}).onSuccessTask(_task -> registerGcmTokenForServer() if (gcmToken != null && !gcmToken.isEmpty()) {
).onSuccessTask(_task -> // We already have gcm token, so try to register it.
realmHelper.executeTransaction(realm -> { try {
GcmPushRegistration.queryDefault(realm).findFirst().setSyncState(SyncState.SYNCED); tryToRegisterToken();
return null; } catch (Exception e) {
}) e.printStackTrace();
).continueWith(task -> { }
if (task.isFaulted()) { }
realmHelper.executeTransaction(realm -> { }
GcmPushRegistration.queryDefault(realm).findFirst().setSyncState(SyncState.FAILED);
return null;
}).continueWith(new LogIfError());
}
return null;
});
}
private Task<Void> registerGcmTokenForServer() throws IOException { private Task<Void> tryToRegisterToken() {
final String gcmToken = getGcmToken(getSenderId()); return realmHelper.executeTransaction(realm -> {
final RealmUser currentUser = realmHelper.executeTransactionForRead(realm -> GcmPushRegistration.queryDefault(realm).findFirst().setSyncState(SyncState.SYNCING);
RealmUser.queryCurrentUser(realm).findFirst()); return null;
final String userId = currentUser != null ? currentUser.getId() : null; }).onSuccessTask(_task -> registerGcmTokenForServer()
final String pushId = RocketChatCache.INSTANCE.getOrCreatePushId(); ).onSuccessTask(_task ->
realmHelper.executeTransaction(realm -> {
GcmPushRegistration.queryDefault(realm).findFirst().setSyncState(SyncState.SYNCED);
return null;
})
).continueWith(task -> {
if (task.isFaulted()) {
realmHelper.executeTransaction(realm -> {
GcmPushRegistration.queryDefault(realm).findFirst().setSyncState(SyncState.FAILED);
return null;
}).continueWith(new LogIfError());
}
return null;
});
}
return new RaixPushHelper(realmHelper) private Task<Void> registerGcmTokenForServer() throws IOException {
.pushUpdate(pushId, gcmToken, userId); final String gcmToken = getGcmToken(getSenderId());
} final RealmUser currentUser = realmHelper.executeTransactionForRead(realm ->
RealmUser.queryCurrentUser(realm).findFirst());
final String userId = currentUser != null ? currentUser.getId() : null;
final String pushId = RocketChatCache.INSTANCE.getOrCreatePushId();
private String getGcmToken(String senderId) throws IOException { return new RaixPushHelper(realmHelper)
return InstanceID.getInstance(context) .pushUpdate(pushId, gcmToken, userId);
.getToken(senderId, GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); }
}
private String getSenderId() { private String getGcmToken(String senderId) throws IOException {
return context.getString(R.string.gcm_sender_id); return InstanceID.getInstance(context)
} .getToken(senderId, GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
}
private String getSenderId() {
return context.getString(R.string.gcm_sender_id);
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment