Search in sources :

Example 51 with Room

use of org.matrix.androidsdk.data.Room in project matrix-android-sdk by matrix-org.

the class MXCrypto method getE2eRoomMembers.

/**
 * get the users we share an e2e-enabled room with
 *
 * @return {Object<string>} userid->userid map (should be a Set but argh ES6)
 */
private List<String> getE2eRoomMembers() {
    HashSet<String> list = new HashSet<>();
    List<Room> rooms = getE2eRooms();
    for (Room r : rooms) {
        Collection<RoomMember> activeMembers = r.getActiveMembers();
        for (RoomMember m : activeMembers) {
            // add only the matrix id
            if (MXSession.PATTERN_CONTAIN_MATRIX_USER_IDENTIFIER.matcher(m.getUserId()).matches()) {
                list.add(m.getUserId());
            }
        }
    }
    return new ArrayList<>(list);
}
Also used : RoomMember(org.matrix.androidsdk.rest.model.RoomMember) ArrayList(java.util.ArrayList) Room(org.matrix.androidsdk.data.Room) HashSet(java.util.HashSet)

Example 52 with Room

use of org.matrix.androidsdk.data.Room in project matrix-android-sdk by matrix-org.

the class MXCrypto method setGlobalBlacklistUnverifiedDevices.

/**
 * Set the global override for whether the client should ever send encrypted
 * messages to unverified devices.
 * If false, it can still be overridden per-room.
 * If true, it overrides the per-room settings.
 *
 * @param block    true to unilaterally blacklist all
 * @param callback the asynchronous callback.
 */
public void setGlobalBlacklistUnverifiedDevices(final boolean block, final ApiCallback<Void> callback) {
    final String userId = mSession.getMyUserId();
    final ArrayList<String> userRoomIds = new ArrayList<>();
    Collection<Room> rooms = mSession.getDataHandler().getStore().getRooms();
    for (Room room : rooms) {
        if (room.isEncrypted()) {
            RoomMember roomMember = room.getMember(userId);
            // test if the user joins the room
            if ((null != roomMember) && TextUtils.equals(roomMember.membership, RoomMember.MEMBERSHIP_JOIN)) {
                userRoomIds.add(room.getRoomId());
            }
        }
    }
    getEncryptingThreadHandler().post(new Runnable() {

        @Override
        public void run() {
            mCryptoStore.setGlobalBlacklistUnverifiedDevices(block);
            getUIHandler().post(new Runnable() {

                @Override
                public void run() {
                    if (null != callback) {
                        callback.onSuccess(null);
                    }
                }
            });
        }
    });
}
Also used : RoomMember(org.matrix.androidsdk.rest.model.RoomMember) ArrayList(java.util.ArrayList) Room(org.matrix.androidsdk.data.Room)

Example 53 with Room

use of org.matrix.androidsdk.data.Room in project matrix-android-sdk by matrix-org.

the class MXCrypto 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 Room 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);
                    }
                }
            });
        }
    });
}
Also used : ArrayList(java.util.ArrayList) List(java.util.List) Room(org.matrix.androidsdk.data.Room)

Example 54 with Room

use of org.matrix.androidsdk.data.Room in project matrix-android-sdk by matrix-org.

the class MatrixMessageListFragment method onResume.

@Override
public void onResume() {
    super.onResume();
    Activity activity = getActivity();
    if (activity instanceof IEventSendingListener) {
        mEventSendingListener = (IEventSendingListener) activity;
    }
    if (activity instanceof IOnScrollListener) {
        mActivityOnScrollListener = (IOnScrollListener) activity;
    }
    // sanity check
    if ((null != mRoom) && mEventTimeLine.isLiveTimeline()) {
        Room room = mSession.getDataHandler().getRoom(mRoom.getRoomId(), false);
        if (null != room) {
            room.addEventListener(mEventsListener);
        } else {
            Log.e(LOG_TAG, "the room " + mRoom.getRoomId() + " does not exist anymore");
        }
    }
    // a room history filling was suspended because the fragment was not active
    if (mFillHistoryOnResume) {
        mFillHistoryOnResume = false;
        backPaginate(true);
    }
}
Also used : Activity(android.app.Activity) Room(org.matrix.androidsdk.data.Room)

Example 55 with Room

use of org.matrix.androidsdk.data.Room in project matrix-android-sdk by matrix-org.

the class MXFileStore method loadRoomToken.

/**
 * Load the room token from the file system.
 *
 * @param roomId the room id.
 * @return true if it succeeds.
 */
private boolean loadRoomToken(final String roomId) {
    boolean succeed = true;
    Room room = getRoom(roomId);
    // should always be true
    if (null != room) {
        String token = null;
        try {
            File messagesListFile = new File(mStoreRoomsTokensFolderFile, roomId);
            Object tokenAsVoid = readObject("loadRoomToken " + roomId, messagesListFile);
            if (null == tokenAsVoid) {
                succeed = false;
            } else {
                token = (String) tokenAsVoid;
                // check if the oldest event has a token.
                LinkedHashMap<String, Event> eventsHash = mRoomEvents.get(roomId);
                if ((null != eventsHash) && (eventsHash.size() > 0)) {
                    Event event = eventsHash.values().iterator().next();
                    // so, if the oldest messages has a token, use it instead of the stored token.
                    if (null != event.mToken) {
                        token = event.mToken;
                    }
                }
            }
        } catch (Exception e) {
            succeed = false;
            Log.e(LOG_TAG, "loadRoomToken failed : " + e.toString());
        }
        if (null != token) {
            mRoomTokens.put(roomId, token);
        } else {
            deleteRoom(roomId);
        }
    } else {
        try {
            File messagesListFile = new File(mStoreRoomsTokensFolderFile, roomId);
            messagesListFile.delete();
        } catch (Exception e) {
            Log.e(LOG_TAG, "loadRoomToken failed with error " + e.getMessage());
        }
    }
    return succeed;
}
Also used : Event(org.matrix.androidsdk.rest.model.Event) Room(org.matrix.androidsdk.data.Room) File(java.io.File)

Aggregations

Room (org.matrix.androidsdk.data.Room)60 MatrixError (org.matrix.androidsdk.rest.model.MatrixError)33 Event (org.matrix.androidsdk.rest.model.Event)27 ArrayList (java.util.ArrayList)26 CountDownLatch (java.util.concurrent.CountDownLatch)26 HashMap (java.util.HashMap)25 JsonObject (com.google.gson.JsonObject)24 Test (org.junit.Test)22 RoomState (org.matrix.androidsdk.data.RoomState)22 MXEventListener (org.matrix.androidsdk.listeners.MXEventListener)19 Context (android.content.Context)15 RoomMember (org.matrix.androidsdk.rest.model.RoomMember)12 EventTimeline (org.matrix.androidsdk.data.EventTimeline)8 IMXStore (org.matrix.androidsdk.data.store.IMXStore)8 File (java.io.File)7 MXDeviceInfo (org.matrix.androidsdk.crypto.data.MXDeviceInfo)6 ApiCallback (org.matrix.androidsdk.rest.callback.ApiCallback)6 Credentials (org.matrix.androidsdk.rest.model.login.Credentials)6 List (java.util.List)5 Uri (android.net.Uri)4