use of org.matrix.androidsdk.core.callback.SimpleApiCallback in project matrix-android-sdk by matrix-org.
the class CryptoTest method test29_testAliceAndBobInAEncryptedRoomWithReplyTo.
/**
* We want to test that the relates_to data are well copied from e2e event to clear event
*
* @throws Exception
*/
@Test
public void test29_testAliceAndBobInAEncryptedRoomWithReplyTo() throws Exception {
Log.e(LOG_TAG, "test08_testAliceAndBobInAEncryptedRoom2");
Context context = InstrumentationRegistry.getContext();
CryptoTestData cryptoTestData = mCryptoTestHelper.doE2ETestWithAliceAndBobInARoom(true);
final MXSession aliceSession = cryptoTestData.getFirstSession();
final String aliceRoomId = cryptoTestData.getRoomId();
final MXSession bobSession = cryptoTestData.getSecondSession();
bobSession.getCrypto().setWarnOnUnknownDevices(false);
aliceSession.getCrypto().setWarnOnUnknownDevices(false);
final Room roomFromBobPOV = bobSession.getDataHandler().getRoom(aliceRoomId);
final Room roomFromAlicePOV = aliceSession.getDataHandler().getRoom(aliceRoomId);
Assert.assertTrue(roomFromBobPOV.isEncrypted());
Assert.assertTrue(roomFromAlicePOV.isEncrypted());
final List<Event> bobReceivedEvents = new ArrayList<>();
final List<Event> aliceReceivedEvents = new ArrayList<>();
final int[] nbReceivedMessagesFromAlice = { 0 };
final int[] nbReceivedMessagesFromBob = { 0 };
final List<CountDownLatch> list = new ArrayList<>();
MXEventListener bobEventListener = new MXEventListener() {
@Override
public void onLiveEvent(Event event, RoomState roomState) {
if (TextUtils.equals(event.getType(), Event.EVENT_TYPE_MESSAGE) && !TextUtils.equals(event.getSender(), bobSession.getMyUserId())) {
bobReceivedEvents.add(event);
mCryptoTestHelper.checkEncryptedEvent(event, aliceRoomId, mCryptoTestHelper.getMessagesFromAlice().get(nbReceivedMessagesFromAlice[0]), aliceSession);
nbReceivedMessagesFromAlice[0]++;
list.get(list.size() - 1).countDown();
}
}
};
MXEventListener aliceEventListener = new MXEventListener() {
@Override
public void onLiveEvent(Event event, RoomState roomState) {
if (TextUtils.equals(event.getType(), Event.EVENT_TYPE_MESSAGE) && !TextUtils.equals(event.getSender(), aliceSession.getMyUserId())) {
aliceReceivedEvents.add(event);
try {
// "In reply to" format for body
String expectedMessage = "> <" + aliceSession.getMyUserId() + "> " + mCryptoTestHelper.getMessagesFromAlice().get(nbReceivedMessagesFromAlice[0] - 1) + "\n\n" + mCryptoTestHelper.getMessagesFromBob().get(nbReceivedMessagesFromBob[0]);
mCryptoTestHelper.checkEncryptedEvent(event, aliceRoomId, expectedMessage, bobSession);
nbReceivedMessagesFromBob[0]++;
list.get(list.size() - 1).countDown();
} catch (Exception e) {
}
}
}
};
ApiCallback<Void> callback = new SimpleApiCallback<Void>() {
@Override
public void onSuccess(Void info) {
// Ignore
}
};
roomFromBobPOV.addEventListener(bobEventListener);
roomFromAlicePOV.addEventListener(aliceEventListener);
list.add(new CountDownLatch(2));
final Map<String, Object> results = new HashMap<>();
bobSession.getDataHandler().addListener(new MXEventListener() {
@Override
public void onToDeviceEvent(Event event) {
results.put("onToDeviceEvent", event);
list.get(0).countDown();
}
});
// Alice sends a first event
roomFromAlicePOV.sendEvent(mCryptoTestHelper.buildTextEvent(mCryptoTestHelper.getMessagesFromAlice().get(nbReceivedMessagesFromAlice[0]), aliceSession, aliceRoomId), callback);
mTestHelper.await(list.get(list.size() - 1));
Assert.assertTrue(results.containsKey("onToDeviceEvent"));
Assert.assertEquals(1, nbReceivedMessagesFromAlice[0]);
// Bob reply to Alice event
Assert.assertTrue(roomFromBobPOV.canReplyTo(bobReceivedEvents.get(0)));
list.add(new CountDownLatch(1));
roomFromBobPOV.sendTextMessage(mCryptoTestHelper.getMessagesFromBob().get(nbReceivedMessagesFromBob[0]), null, Message.MSGTYPE_TEXT, bobReceivedEvents.get(0), null);
mTestHelper.await(list.get(list.size() - 1));
Assert.assertEquals(1, nbReceivedMessagesFromBob[0]);
Event event = aliceReceivedEvents.get(0);
JsonObject json = event.getContentAsJsonObject();
Assert.assertNotNull(json);
// Check that the received event contains a formatted body
Assert.assertTrue(json.has("formatted_body"));
// Check that the received event contains the relates to field
Assert.assertTrue(json.has("m.relates_to"));
RelatesTo relatesTo = (RelatesTo) JsonUtils.toClass(json.get("m.relates_to"), RelatesTo.class);
Assert.assertNotNull(relatesTo);
// Check that the event id matches
Assert.assertEquals(bobReceivedEvents.get(0).eventId, relatesTo.dict.get("event_id"));
cryptoTestData.clear(context);
}
use of org.matrix.androidsdk.core.callback.SimpleApiCallback in project matrix-android-sdk by matrix-org.
the class CryptoTest method test08_testAliceAndBobInAEncryptedRoom2.
@Test
public void test08_testAliceAndBobInAEncryptedRoom2() throws Exception {
Log.e(LOG_TAG, "test08_testAliceAndBobInAEncryptedRoom2");
Context context = InstrumentationRegistry.getContext();
CryptoTestData cryptoTestData = mCryptoTestHelper.doE2ETestWithAliceAndBobInARoom(true);
final MXSession aliceSession = cryptoTestData.getFirstSession();
final String aliceRoomId = cryptoTestData.getRoomId();
final MXSession bobSession = cryptoTestData.getSecondSession();
bobSession.getCrypto().setWarnOnUnknownDevices(false);
aliceSession.getCrypto().setWarnOnUnknownDevices(false);
final Room roomFromBobPOV = bobSession.getDataHandler().getRoom(aliceRoomId);
final Room roomFromAlicePOV = aliceSession.getDataHandler().getRoom(aliceRoomId);
Assert.assertTrue(roomFromBobPOV.isEncrypted());
Assert.assertTrue(roomFromAlicePOV.isEncrypted());
final int[] nbReceivedMessagesFromAlice = { 0 };
final int[] nbReceivedMessagesFromBob = { 0 };
final List<CountDownLatch> list = new ArrayList<>();
MXEventListener bobEventListener = new MXEventListener() {
@Override
public void onLiveEvent(Event event, RoomState roomState) {
if (TextUtils.equals(event.getType(), Event.EVENT_TYPE_MESSAGE) && !TextUtils.equals(event.getSender(), bobSession.getMyUserId())) {
mCryptoTestHelper.checkEncryptedEvent(event, aliceRoomId, mCryptoTestHelper.getMessagesFromAlice().get(nbReceivedMessagesFromAlice[0]), aliceSession);
nbReceivedMessagesFromAlice[0]++;
list.get(list.size() - 1).countDown();
}
}
};
MXEventListener aliceEventListener = new MXEventListener() {
@Override
public void onLiveEvent(Event event, RoomState roomState) {
if (TextUtils.equals(event.getType(), Event.EVENT_TYPE_MESSAGE) && !TextUtils.equals(event.getSender(), aliceSession.getMyUserId())) {
mCryptoTestHelper.checkEncryptedEvent(event, aliceRoomId, mCryptoTestHelper.getMessagesFromBob().get(nbReceivedMessagesFromBob[0]), bobSession);
nbReceivedMessagesFromBob[0]++;
list.get(list.size() - 1).countDown();
}
}
};
ApiCallback<Void> callback = new SimpleApiCallback<Void>() {
@Override
public void onSuccess(Void info) {
// Ignored
}
};
roomFromBobPOV.addEventListener(bobEventListener);
roomFromAlicePOV.addEventListener(aliceEventListener);
list.add(new CountDownLatch(2));
final Map<String, Object> results = new HashMap<>();
bobSession.getDataHandler().addListener(new MXEventListener() {
@Override
public void onToDeviceEvent(Event event) {
results.put("onToDeviceEvent", event);
list.get(0).countDown();
}
});
roomFromAlicePOV.sendEvent(mCryptoTestHelper.buildTextEvent(mCryptoTestHelper.getMessagesFromAlice().get(nbReceivedMessagesFromAlice[0]), aliceSession, aliceRoomId), callback);
mTestHelper.await(list.get(list.size() - 1));
Assert.assertTrue(results.containsKey("onToDeviceEvent"));
Assert.assertEquals(1, nbReceivedMessagesFromAlice[0]);
list.add(new CountDownLatch(1));
roomFromBobPOV.sendEvent(mCryptoTestHelper.buildTextEvent(mCryptoTestHelper.getMessagesFromBob().get(nbReceivedMessagesFromBob[0]), bobSession, aliceRoomId), callback);
mTestHelper.await(list.get(list.size() - 1));
Assert.assertEquals(1, nbReceivedMessagesFromBob[0]);
list.add(new CountDownLatch(1));
roomFromBobPOV.sendEvent(mCryptoTestHelper.buildTextEvent(mCryptoTestHelper.getMessagesFromBob().get(nbReceivedMessagesFromBob[0]), bobSession, aliceRoomId), callback);
mTestHelper.await(list.get(list.size() - 1));
Assert.assertEquals(2, nbReceivedMessagesFromBob[0]);
list.add(new CountDownLatch(1));
roomFromBobPOV.sendEvent(mCryptoTestHelper.buildTextEvent(mCryptoTestHelper.getMessagesFromBob().get(nbReceivedMessagesFromBob[0]), bobSession, aliceRoomId), callback);
mTestHelper.await(list.get(list.size() - 1));
Assert.assertEquals(3, nbReceivedMessagesFromBob[0]);
list.add(new CountDownLatch(1));
roomFromAlicePOV.sendEvent(mCryptoTestHelper.buildTextEvent(mCryptoTestHelper.getMessagesFromAlice().get(nbReceivedMessagesFromAlice[0]), aliceSession, aliceRoomId), callback);
mTestHelper.await(list.get(list.size() - 1));
Assert.assertEquals(2, nbReceivedMessagesFromAlice[0]);
cryptoTestData.clear(context);
}
use of org.matrix.androidsdk.core.callback.SimpleApiCallback in project matrix-android-sdk by matrix-org.
the class MXSession method markRoomsAsRead.
/**
* Send the read receipts to the latest room messages.
*
* @param roomsIterator the rooms list iterator
* @param callback the asynchronous callback
*/
private void markRoomsAsRead(final Iterator roomsIterator, final ApiCallback<Void> callback) {
if (roomsIterator.hasNext()) {
Room room = (Room) roomsIterator.next();
boolean isRequestSent = false;
if (mNetworkConnectivityReceiver.isConnected()) {
isRequestSent = room.markAllAsRead(new SimpleApiCallback<Void>(callback) {
@Override
public void onSuccess(Void anything) {
markRoomsAsRead(roomsIterator, callback);
}
});
} else {
// update the local data
room.sendReadReceipt();
}
if (!isRequestSent) {
markRoomsAsRead(roomsIterator, callback);
}
} else {
if (null != callback) {
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
callback.onSuccess(null);
}
});
}
}
}
use of org.matrix.androidsdk.core.callback.SimpleApiCallback in project matrix-android-sdk by matrix-org.
the class MediaScanRestClient method getServerPublicKey.
/**
* Get the current public curve25519 key that the AV server is advertising.
* Read the value from cache if any
*
* @param callback on success callback containing the server public key
*/
public void getServerPublicKey(final ApiCallback<String> callback) {
if (mMxStore == null) {
callback.onUnexpectedError(new Exception("MxStore not configured"));
return;
}
// Check in cache
String keyFromCache = mMxStore.getAntivirusServerPublicKey();
if (keyFromCache != null) {
callback.onSuccess(keyFromCache);
} else {
mApi.getServerPublicKey().enqueue(new RestAdapterCallback<>("getServerPublicKey", null, new SimpleApiCallback<MediaScanPublicKeyResult>(callback) {
@Override
public void onSuccess(MediaScanPublicKeyResult info) {
// Store the key in cache for next times
mMxStore.setAntivirusServerPublicKey(info.mCurve25519PublicKey);
// Note: for some reason info.mCurve25519PublicKey may be null
if (info.mCurve25519PublicKey != null) {
callback.onSuccess(info.mCurve25519PublicKey);
} else {
callback.onUnexpectedError(new Exception("Unable to get server public key from Json"));
}
}
@Override
public void onMatrixError(MatrixError e) {
// Old Antivirus scanner instance will return a 404
if (e.mStatus == HttpURLConnection.HTTP_NOT_FOUND) {
// On 404 consider the public key is not available, so do not encrypt body
mMxStore.setAntivirusServerPublicKey("");
callback.onSuccess("");
} else {
super.onMatrixError(e);
}
}
}, null));
}
}
use of org.matrix.androidsdk.core.callback.SimpleApiCallback in project matrix-android-sdk by matrix-org.
the class ProfileRestClient method refreshTokens.
/**
* Refresh access/refresh tokens, using the current refresh token.
*
* @param refreshToken the refreshToken
* @param callback the callback success and failure callback
*/
public void refreshTokens(final String refreshToken, final ApiCallback<TokenRefreshResponse> callback) {
final String description = "refreshTokens";
TokenRefreshParams params = new TokenRefreshParams();
params.refresh_token = refreshToken;
mApi.tokenRefresh(params).enqueue(new RestAdapterCallback<TokenRefreshResponse>(description, mUnsentEventsManager, new SimpleApiCallback<TokenRefreshResponse>(callback) {
@Override
public void onSuccess(TokenRefreshResponse info) {
setAccessToken(info.accessToken);
if (null != callback) {
callback.onSuccess(info);
}
}
}, null) {
});
}
Aggregations