use of org.matrix.androidsdk.crypto.interfaces.CryptoRoom in project matrix-android-sdk by matrix-org.
the class MXCryptoImpl method onRoomMembership.
/**
* Handle a change in the membership state of a member of a room.
*
* @param event the membership event causing the change
*/
private void onRoomMembership(final CryptoEvent event) {
final IMXEncrypting alg;
synchronized (mRoomEncryptors) {
alg = mRoomEncryptors.get(event.getRoomId());
}
if (null == alg) {
// No encrypting in this room
return;
}
final String userId = event.getStateKey();
final CryptoRoom room = mSession.getDataHandler().getRoom(event.getRoomId());
CryptoRoomMember roomMember = room.getState().getMember(userId);
if (null != roomMember) {
final String membership = roomMember.getMembership();
getEncryptingThreadHandler().post(new Runnable() {
@Override
public void run() {
if (TextUtils.equals(membership, CryptoRoomMember.MEMBERSHIP_JOIN)) {
// make sure we are tracking the deviceList for this user.
getDeviceList().startTrackingDeviceList(Arrays.asList(userId));
} else if (TextUtils.equals(membership, CryptoRoomMember.MEMBERSHIP_INVITE) && room.shouldEncryptForInvitedMembers() && mCryptoConfig.mEnableEncryptionForInvitedMembers) {
// track the deviceList for this invited user.
// Caution: there's a big edge case here in that federated servers do not
// know what other servers are in the room at the time they've been invited.
// They therefore will not send device updates if a user logs in whilst
// their state is invite.
getDeviceList().startTrackingDeviceList(Arrays.asList(userId));
}
}
});
}
}
use of org.matrix.androidsdk.crypto.interfaces.CryptoRoom in project matrix-android-sdk by matrix-org.
the class MXCryptoImpl method setRoomBlacklistUnverifiedDevices.
/**
* Manages the room black-listing for unverified devices.
*
* @param roomId the room id
* @param add true to add the room id to the list, false to remove it.
* @param callback the asynchronous callback
*/
private void setRoomBlacklistUnverifiedDevices(final String roomId, final boolean add, final ApiCallback<Void> callback) {
final CryptoRoom room = mSession.getDataHandler().getRoom(roomId);
// sanity check
if (null == room) {
getUIHandler().post(new Runnable() {
@Override
public void run() {
callback.onSuccess(null);
}
});
return;
}
getEncryptingThreadHandler().post(new Runnable() {
@Override
public void run() {
List<String> roomIds = mCryptoStore.getRoomsListBlacklistUnverifiedDevices();
if (add) {
if (!roomIds.contains(roomId)) {
roomIds.add(roomId);
}
} else {
roomIds.remove(roomId);
}
mCryptoStore.setRoomsListBlacklistUnverifiedDevices(roomIds);
getUIHandler().post(new Runnable() {
@Override
public void run() {
if (null != callback) {
callback.onSuccess(null);
}
}
});
}
});
}
use of org.matrix.androidsdk.crypto.interfaces.CryptoRoom in project matrix-android-sdk by matrix-org.
the class MXCryptoImpl method onCryptoEvent.
/**
* Handle an m.room.encryption event.
*
* @param event the encryption event.
*/
private void onCryptoEvent(final CryptoEvent event) {
final CryptoEventContent eventContent = event.getWireEventContent();
final CryptoRoom room = mSession.getDataHandler().getRoom(event.getRoomId());
// Check whether the event content must be encrypted for the invited members.
boolean encryptForInvitedMembers = mCryptoConfig.mEnableEncryptionForInvitedMembers && room.shouldEncryptForInvitedMembers();
ApiCallback<List<CryptoRoomMember>> callback = new ApiCallback<List<CryptoRoomMember>>() {
@Override
public void onSuccess(final List<CryptoRoomMember> info) {
getEncryptingThreadHandler().post(new Runnable() {
@Override
public void run() {
setEncryptionInRoom(event.getRoomId(), eventContent.getAlgorithm(), true, info);
}
});
}
private void onError() {
// Ensure setEncryption in room is done, even if there is a failure to fetch the room members
getEncryptingThreadHandler().post(new Runnable() {
@Override
public void run() {
setEncryptionInRoom(event.getRoomId(), eventContent.getAlgorithm(), true, room.getState().getLoadedMembersCrypto());
}
});
}
@Override
public void onNetworkError(Exception e) {
Log.w(LOG_TAG, "[MXCrypto] onCryptoEvent: Warning: Unable to get all members from the HS. Fallback by using lazy-loaded members", e);
onError();
}
@Override
public void onMatrixError(MatrixError e) {
Log.w(LOG_TAG, "[MXCrypto] onCryptoEvent: Warning: Unable to get all members from the HS. Fallback by using lazy-loaded members");
onError();
}
@Override
public void onUnexpectedError(Exception e) {
Log.w(LOG_TAG, "[MXCrypto] onCryptoEvent: Warning: Unable to get all members from the HS. Fallback by using lazy-loaded members", e);
onError();
}
};
if (encryptForInvitedMembers) {
room.getActiveMembersAsyncCrypto(callback);
} else {
room.getJoinedMembersAsyncCrypto(callback);
}
}
Aggregations