diff --git a/vector/libs/matrix-sdk.aar b/vector/libs/matrix-sdk.aar index 6a64959619..3c7fdd6a2c 100644 Binary files a/vector/libs/matrix-sdk.aar and b/vector/libs/matrix-sdk.aar differ diff --git a/vector/src/main/java/im/vector/Matrix.java b/vector/src/main/java/im/vector/Matrix.java index 0fa3ae2830..04bf6edfc0 100755 --- a/vector/src/main/java/im/vector/Matrix.java +++ b/vector/src/main/java/im/vector/Matrix.java @@ -102,7 +102,7 @@ public void onLiveEvent(Event event, RoomState roomState) { } @Override - public void onLiveEventsChunkProcessed() { + public void onLiveEventsChunkProcessed(String fromToken, String toToken) { // when the client does not use GCM (ie. FDroid), // we need to compute the application badge values diff --git a/vector/src/main/java/im/vector/activity/SplashActivity.java b/vector/src/main/java/im/vector/activity/SplashActivity.java index acb33c9a86..4257043efe 100755 --- a/vector/src/main/java/im/vector/activity/SplashActivity.java +++ b/vector/src/main/java/im/vector/activity/SplashActivity.java @@ -1,6 +1,7 @@ /* * Copyright 2014 OpenMarket Ltd - * + * Copyright 2017 Vector Creations Ltd + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -143,75 +144,95 @@ protected void onCreate(Bundle savedInstanceState) { session.getDataHandler().getStore().open(); final IMXEventListener eventListener = new MXEventListener() { - @Override - public void onInitialSyncComplete() { - super.onInitialSyncComplete(); - boolean noMoreListener; + private void onReady() { + boolean isAlreadyDone; - Log.e(LOG_TAG, "Session " + fSession.getCredentials().userId + " is initialized"); + synchronized (LOG_TAG) { + isAlreadyDone = mDoneListeners.containsKey(fSession); + } - synchronized(LOG_TAG) { - mDoneListeners.put(fSession, mListeners.get(fSession)); - // do not remove the listeners here - // it crashes the application because of the upper loop - //fSession.getDataHandler().removeListener(mListeners.get(fSession)); - // remove from the pending list + if (!isAlreadyDone) { + synchronized (LOG_TAG) { + boolean noMoreListener; - mListeners.remove(fSession); - noMoreListener = (mListeners.size() == 0); - } + Log.e(LOG_TAG, "Session " + fSession.getCredentials().userId + " is initialized"); - try { - int nbrRooms = fSession.getDataHandler().getStore().getRooms().size(); + mDoneListeners.put(fSession, mListeners.get(fSession)); + // do not remove the listeners here + // it crashes the application because of the upper loop + //fSession.getDataHandler().removeListener(mListeners.get(fSession)); + // remove from the pending list - VectorApp.sendGAStats(getApplicationContext(), - VectorApp.GOOGLE_ANALYTICS_STATS_CATEGORY, - VectorApp.GOOGLE_ANALYTICS_STARTUP_MOUNT_DATA_ACTION, - nbrRooms + " rooms in " + (System.currentTimeMillis() - mLaunchTime) + " ms", - System.currentTimeMillis() - mLaunchTime - ); + mListeners.remove(fSession); + noMoreListener = (mListeners.size() == 0); - VectorApp.sendGAStats(getApplicationContext(), - VectorApp.GOOGLE_ANALYTICS_STATS_CATEGORY, - VectorApp.GOOGLE_ANALYTICS_STATS_ROOMS_ACTION, - null, - nbrRooms - ); + try { + int nbrRooms = fSession.getDataHandler().getStore().getRooms().size(); - long preloadTime = fSession.getDataHandler().getStore().getPreloadTime(); - String label = nbrRooms + " rooms in " + preloadTime + " ms"; + VectorApp.sendGAStats(getApplicationContext(), + VectorApp.GOOGLE_ANALYTICS_STATS_CATEGORY, + VectorApp.GOOGLE_ANALYTICS_STARTUP_MOUNT_DATA_ACTION, + nbrRooms + " rooms in " + (System.currentTimeMillis() - mLaunchTime) + " ms", + System.currentTimeMillis() - mLaunchTime + ); - if (0 != nbrRooms) { - label += "(" + preloadTime / nbrRooms + " ms per room)"; - } + VectorApp.sendGAStats(getApplicationContext(), + VectorApp.GOOGLE_ANALYTICS_STATS_CATEGORY, + VectorApp.GOOGLE_ANALYTICS_STATS_ROOMS_ACTION, + null, + nbrRooms + ); - VectorApp.sendGAStats(getApplicationContext(), - VectorApp.GOOGLE_ANALYTICS_STATS_CATEGORY, - VectorApp.GOOGLE_ANALYTICS_STARTUP_STORE_PRELOAD_ACTION, - label, - fSession.getDataHandler().getStore().getPreloadTime() - ); + long preloadTime = fSession.getDataHandler().getStore().getPreloadTime(); + String label = nbrRooms + " rooms in " + preloadTime + " ms"; - Map storeStats = session.getDataHandler().getStore().getStats(); + if (0 != nbrRooms) { + label += "(" + preloadTime / nbrRooms + " ms per room)"; + } - if (null != storeStats) { - for (String key : storeStats.keySet()) { VectorApp.sendGAStats(getApplicationContext(), VectorApp.GOOGLE_ANALYTICS_STATS_CATEGORY, - key, - null, - storeStats.get(key) + VectorApp.GOOGLE_ANALYTICS_STARTUP_STORE_PRELOAD_ACTION, + label, + fSession.getDataHandler().getStore().getPreloadTime() ); + + Map storeStats = session.getDataHandler().getStore().getStats(); + + if (null != storeStats) { + for (String key : storeStats.keySet()) { + VectorApp.sendGAStats(getApplicationContext(), + VectorApp.GOOGLE_ANALYTICS_STATS_CATEGORY, + key, + null, + storeStats.get(key) + ); + } + } + } catch (Exception e) { + Log.e(LOG_TAG, "Fail to send stats " + e.getMessage()); + } + + if (noMoreListener) { + VectorApp.addSyncingSession(session); + onFinish(); } } - } catch (Exception e) { - Log.e(LOG_TAG, "Fail to send stats " + e.getMessage()); } + } - if (noMoreListener) { - VectorApp.addSyncingSession(session); - onFinish(); - } + // should be called if the application was already initialized + @Override + public void onLiveEventsChunkProcessed(String fromToken, String toToken) { + super.onLiveEventsChunkProcessed(fromToken, toToken); + onReady(); + } + + // first application launched + @Override + public void onInitialSyncComplete(String toToken) { + super.onInitialSyncComplete(toToken); + onReady(); } }; diff --git a/vector/src/main/java/im/vector/activity/VectorHomeActivity.java b/vector/src/main/java/im/vector/activity/VectorHomeActivity.java index 25683a2e4b..aa60c5837e 100644 --- a/vector/src/main/java/im/vector/activity/VectorHomeActivity.java +++ b/vector/src/main/java/im/vector/activity/VectorHomeActivity.java @@ -430,7 +430,7 @@ public void run() { // + other actions which require a background listener mLiveEventListener = new MXEventListener() { @Override - public void onLiveEventsChunkProcessed() { + public void onLiveEventsChunkProcessed(String fromToken, String toToken) { // treat any pending URL link workflow, that was started previously processIntentUniversalLink(); @@ -570,7 +570,7 @@ public void onAccountInfoUpdate(MyUser myUser) { } @Override - public void onLiveEventsChunkProcessed() { + public void onLiveEventsChunkProcessed(String fromToken, String toToken) { mSyncInProgressView.setVisibility(View.GONE); } }; diff --git a/vector/src/main/java/im/vector/fragments/VectorRecentsListFragment.java b/vector/src/main/java/im/vector/fragments/VectorRecentsListFragment.java index 9abf0aa683..08ce94f1d2 100644 --- a/vector/src/main/java/im/vector/fragments/VectorRecentsListFragment.java +++ b/vector/src/main/java/im/vector/fragments/VectorRecentsListFragment.java @@ -1,5 +1,6 @@ /* * Copyright 2016 OpenMarket Ltd + * Copyright 2017 Vector Creations Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -514,7 +515,7 @@ private void addSessionListener() { private boolean mInitialSyncComplete = false; @Override - public void onInitialSyncComplete() { + public void onInitialSyncComplete(String toToken) { Log.d(LOG_TAG, "## onInitialSyncComplete()"); getActivity().runOnUiThread(new Runnable() { @Override @@ -526,7 +527,7 @@ public void run() { } @Override - public void onLiveEventsChunkProcessed() { + public void onLiveEventsChunkProcessed(String fromToken, String toToken) { getActivity().runOnUiThread(new Runnable() { @Override public void run() { diff --git a/vector/src/main/java/im/vector/services/EventStreamService.java b/vector/src/main/java/im/vector/services/EventStreamService.java index 1b3b4553b0..40990d2da7 100755 --- a/vector/src/main/java/im/vector/services/EventStreamService.java +++ b/vector/src/main/java/im/vector/services/EventStreamService.java @@ -1,6 +1,7 @@ /* * Copyright 2015 OpenMarket Ltd - * + * Copyright 2017 Vector Creations Ltd + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -284,7 +285,7 @@ public void onBingEvent(Event event, RoomState roomState, BingRule bingRule) { } @Override - public void onLiveEventsChunkProcessed() { + public void onLiveEventsChunkProcessed(String fromToken, String toToken) { triggerPreparedNotification(true); mPendingNotifications.clear();