Search in sources :

Example 26 with MXEventListener

use of org.matrix.androidsdk.listeners.MXEventListener in project matrix-android-sdk by matrix-org.

the class TestsHelper method createAccountAndSync.

/**
 * Create an account and a dedicated session
 * @param context the context
 * @param userName the account username
 * @param password the password
 * @param startSession true to perform an initial sync
 * @param callback the callback
 * @throws Exception an exception if the account cannot be created
 */
public static void createAccountAndSync(Context context, String userName, String password, boolean startSession, ApiCallback<MXSession> callback) throws Exception {
    RestClient.mUseMXExececutor = true;
    Uri uri = Uri.parse(TESTS_HOME_SERVER_URL);
    HomeServerConnectionConfig hs = new HomeServerConnectionConfig(uri);
    LoginRestClient loginRestClient = new LoginRestClient(hs);
    final HashMap<String, Object> params = new HashMap<>();
    RegistrationParams registrationParams = new RegistrationParams();
    mLock = new CountDownLatch(1);
    // get the registration session id
    loginRestClient.register(registrationParams, new ApiCallback<Credentials>() {

        @Override
        public void onSuccess(Credentials credentials) {
            mLock.countDown();
        }

        @Override
        public void onNetworkError(Exception e) {
            mLock.countDown();
        }

        @Override
        public void onMatrixError(MatrixError e) {
            // detect if a parameter is expected
            RegistrationFlowResponse registrationFlowResponse = null;
            // when a response is not completed the server returns an error message
            if ((null != e.mStatus) && (e.mStatus == 401)) {
                try {
                    registrationFlowResponse = JsonUtils.toRegistrationFlowResponse(e.mErrorBodyAsString);
                } catch (Exception castExcept) {
                }
            }
            // check if the server response can be casted
            if (null != registrationFlowResponse) {
                params.put("session", registrationFlowResponse.session);
            }
            mLock.countDown();
        }

        @Override
        public void onUnexpectedError(Exception e) {
            mLock.countDown();
        }
    });
    mLock.await(1000, TimeUnit.MILLISECONDS);
    String session = (String) params.get("session");
    if (null == session) {
        callback.onUnexpectedError(null);
    }
    registrationParams.username = userName;
    registrationParams.password = password;
    HashMap<String, Object> authParams = new HashMap<>();
    authParams.put("session", session);
    authParams.put("type", LoginRestClient.LOGIN_FLOW_TYPE_DUMMY);
    registrationParams.auth = authParams;
    mLock = new CountDownLatch(1);
    loginRestClient.register(registrationParams, new ApiCallback<Credentials>() {

        @Override
        public void onSuccess(Credentials credentials) {
            params.put("credentials", credentials);
            mLock.countDown();
        }

        @Override
        public void onNetworkError(Exception e) {
            mLock.countDown();
        }

        @Override
        public void onMatrixError(MatrixError e) {
            mLock.countDown();
        }

        @Override
        public void onUnexpectedError(Exception e) {
            mLock.countDown();
        }
    });
    mLock.await(1000, TimeUnit.MILLISECONDS);
    Credentials credentials = (Credentials) params.get("credentials");
    if (null == credentials) {
        callback.onMatrixError(null);
        return;
    }
    hs.setCredentials(credentials);
    IMXStore store = new MXFileStore(hs, context);
    MXSession mxSession = new MXSession(hs, new MXDataHandler(store, credentials), context);
    if (!startSession) {
        callback.onSuccess(mxSession);
        return;
    }
    mxSession.getDataHandler().getStore().open();
    mxSession.startEventStream(null);
    mLock = new CountDownLatch(1);
    mxSession.getDataHandler().addListener(new MXEventListener() {

        @Override
        public void onInitialSyncComplete(String toToken) {
            params.put("isInit", true);
            mLock.countDown();
        }
    });
    mLock.await(10000, TimeUnit.MILLISECONDS);
    if (params.containsKey("isInit")) {
        callback.onSuccess(mxSession);
    } else {
        callback.onMatrixError(null);
    }
}
Also used : HashMap(java.util.HashMap) RegistrationFlowResponse(org.matrix.androidsdk.rest.model.login.RegistrationFlowResponse) IMXStore(org.matrix.androidsdk.data.store.IMXStore) MXFileStore(org.matrix.androidsdk.data.store.MXFileStore) CountDownLatch(java.util.concurrent.CountDownLatch) Uri(android.net.Uri) MXEventListener(org.matrix.androidsdk.listeners.MXEventListener) RegistrationParams(org.matrix.androidsdk.rest.model.login.RegistrationParams) LoginRestClient(org.matrix.androidsdk.rest.client.LoginRestClient) MatrixError(org.matrix.androidsdk.rest.model.MatrixError) Credentials(org.matrix.androidsdk.rest.model.login.Credentials)

Example 27 with MXEventListener

use of org.matrix.androidsdk.listeners.MXEventListener in project matrix-android-sdk by matrix-org.

the class User method addEventListener.

/**
 * Add an event listener to this room. Only events relative to the room will come down.
 *
 * @param eventListener the event listener to add
 */
public void addEventListener(final IMXEventListener eventListener) {
    // Create a global listener that we'll add to the data handler
    IMXEventListener globalListener = new MXEventListener() {

        @Override
        public void onPresenceUpdate(Event event, User user) {
            // Only pass event through for this user
            if (user.user_id.equals(user_id)) {
                eventListener.onPresenceUpdate(event, user);
            }
        }
    };
    getEventListeners().put(eventListener, globalListener);
    // the handler could be set later
    if (null != mDataHandler) {
        mDataHandler.addListener(globalListener);
    } else {
        getPendingListeners().add(globalListener);
    }
}
Also used : IMXEventListener(org.matrix.androidsdk.listeners.IMXEventListener) IMXEventListener(org.matrix.androidsdk.listeners.IMXEventListener) MXEventListener(org.matrix.androidsdk.listeners.MXEventListener)

Aggregations

MXEventListener (org.matrix.androidsdk.listeners.MXEventListener)27 HashMap (java.util.HashMap)25 CountDownLatch (java.util.concurrent.CountDownLatch)25 MatrixError (org.matrix.androidsdk.rest.model.MatrixError)25 JsonObject (com.google.gson.JsonObject)21 Test (org.junit.Test)19 Room (org.matrix.androidsdk.data.Room)19 Event (org.matrix.androidsdk.rest.model.Event)19 RoomState (org.matrix.androidsdk.data.RoomState)16 Context (android.content.Context)14 Uri (android.net.Uri)10 IMXStore (org.matrix.androidsdk.data.store.IMXStore)10 MXFileStore (org.matrix.androidsdk.data.store.MXFileStore)10 Credentials (org.matrix.androidsdk.rest.model.login.Credentials)10 ArrayList (java.util.ArrayList)9 MXDeviceInfo (org.matrix.androidsdk.crypto.data.MXDeviceInfo)6 MXStoreListener (org.matrix.androidsdk.data.store.MXStoreListener)6 EventTimeline (org.matrix.androidsdk.data.EventTimeline)5 MXUsersDevicesMap (org.matrix.androidsdk.crypto.data.MXUsersDevicesMap)4 LoginRestClient (org.matrix.androidsdk.rest.client.LoginRestClient)3