From 5c953be03b313bbcc8ace9428c3397b183bba6c7 Mon Sep 17 00:00:00 2001 From: LYT Date: Wed, 11 Jul 2018 16:56:05 +0200 Subject: [PATCH] add code to core to try and log in / fix database crashes when restarts --- ebc_enclave_messaging | 2 +- ebclibrary/build.gradle | 1 + ebclibrary/src/main/AndroidManifest.xml | 3 +- .../EncounterBasedCommunication.java | 2 -- .../dbplatform/ContentProviderBase.java | 4 +++ .../EncounterFormationCore.java | 20 ++++++++++++- .../EncounterFormationService.java | 28 ------------------ .../bridges/EncounterEntriesBridge.java | 2 +- .../mpisws/encounters/lib/Preferences.java | 2 -- .../drawable-hdpi/ic_action_stat_reply.png | Bin 1480 -> 0 bytes .../drawable-hdpi/ic_action_stat_share.png | Bin 1606 -> 0 bytes .../res/drawable-hdpi/ic_ebc_formation.png | Bin 425 -> 0 bytes .../drawable-mdpi/ic_action_stat_reply.png | Bin 1314 -> 0 bytes .../drawable-mdpi/ic_action_stat_share.png | Bin 1341 -> 0 bytes .../res/drawable-mdpi/ic_ebc_formation.png | Bin 296 -> 0 bytes .../res/drawable-nodpi/example_picture.png | Bin 1885 -> 0 bytes .../drawable-xhdpi/ic_action_stat_reply.png | Bin 1692 -> 0 bytes .../drawable-xhdpi/ic_action_stat_share.png | Bin 1780 -> 0 bytes .../res/drawable-xhdpi/ic_ebc_formation.png | Bin 533 -> 0 bytes .../res/drawable-xxhdpi/ic_ebc_formation.png | Bin 800 -> 0 bytes 20 files changed, 27 insertions(+), 37 deletions(-) delete mode 100644 ebclibrary/src/main/res/drawable-hdpi/ic_action_stat_reply.png delete mode 100644 ebclibrary/src/main/res/drawable-hdpi/ic_action_stat_share.png delete mode 100644 ebclibrary/src/main/res/drawable-hdpi/ic_ebc_formation.png delete mode 100644 ebclibrary/src/main/res/drawable-mdpi/ic_action_stat_reply.png delete mode 100644 ebclibrary/src/main/res/drawable-mdpi/ic_action_stat_share.png delete mode 100644 ebclibrary/src/main/res/drawable-mdpi/ic_ebc_formation.png delete mode 100644 ebclibrary/src/main/res/drawable-nodpi/example_picture.png delete mode 100644 ebclibrary/src/main/res/drawable-xhdpi/ic_action_stat_reply.png delete mode 100644 ebclibrary/src/main/res/drawable-xhdpi/ic_action_stat_share.png delete mode 100644 ebclibrary/src/main/res/drawable-xhdpi/ic_ebc_formation.png delete mode 100644 ebclibrary/src/main/res/drawable-xxhdpi/ic_ebc_formation.png diff --git a/ebc_enclave_messaging b/ebc_enclave_messaging index 9b0f5500..9d89587c 160000 --- a/ebc_enclave_messaging +++ b/ebc_enclave_messaging @@ -1 +1 @@ -Subproject commit 9b0f55007d93bbe13e48f2750d0b887c880a8add +Subproject commit 9d89587c13406c3fd4a52ac1f6b3067ccc3405c8 diff --git a/ebclibrary/build.gradle b/ebclibrary/build.gradle index 9d5fc0ae..dd9bf6fc 100644 --- a/ebclibrary/build.gradle +++ b/ebclibrary/build.gradle @@ -55,6 +55,7 @@ dependencies { //implementation fileTree(include: ['*.jar'], dir: '../ebcutils/build/libs') implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.android.support:support-v4:26.1.0' + implementation 'com.android.support:design:26.1.0' androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) diff --git a/ebclibrary/src/main/AndroidManifest.xml b/ebclibrary/src/main/AndroidManifest.xml index ba2ea2b9..dd30e1a4 100644 --- a/ebclibrary/src/main/AndroidManifest.xml +++ b/ebclibrary/src/main/AndroidManifest.xml @@ -14,8 +14,6 @@ - - @@ -35,6 +33,7 @@ android:exported="true" android:readPermission="READPERM" android:writePermission="WRITEPERM" /> + \ No newline at end of file diff --git a/ebclibrary/src/main/java/org/mpisws/encounters/EncounterBasedCommunication.java b/ebclibrary/src/main/java/org/mpisws/encounters/EncounterBasedCommunication.java index 768f7631..5ccd60b1 100644 --- a/ebclibrary/src/main/java/org/mpisws/encounters/EncounterBasedCommunication.java +++ b/ebclibrary/src/main/java/org/mpisws/encounters/EncounterBasedCommunication.java @@ -195,9 +195,7 @@ public class EncounterBasedCommunication { * @param context The calling application context */ public void initialize(Context context, int configResId) { - // so we can connect to jni code to do stuff SDDR_Native.c_mallocRadio(); - Preferences preferences = new Preferences(context); GlobalObjectRegistry.addObject(preferences); diff --git a/ebclibrary/src/main/java/org/mpisws/encounters/dbplatform/ContentProviderBase.java b/ebclibrary/src/main/java/org/mpisws/encounters/dbplatform/ContentProviderBase.java index 038186c6..ea1e43f1 100644 --- a/ebclibrary/src/main/java/org/mpisws/encounters/dbplatform/ContentProviderBase.java +++ b/ebclibrary/src/main/java/org/mpisws/encounters/dbplatform/ContentProviderBase.java @@ -10,11 +10,13 @@ import android.content.UriMatcher; import android.database.Cursor; import android.database.SQLException; import android.net.Uri; +import android.util.Log; import net.sqlcipher.database.SQLiteDatabase; import net.sqlcipher.database.SQLiteOpenHelper; import org.mpisws.database.DBModel; +import org.mpisws.embeddedsocial.ESClient; import org.mpisws.helpers.ESCredentials; import org.mpisws.helpers.GlobalObjectRegistry; import org.mpisws.encounters.encounterhistory.EncounterHistoryAPM; @@ -22,6 +24,7 @@ import org.mpisws.encounters.encounterhistory.EncounterHistoryAPM; import java.util.ArrayList; public abstract class ContentProviderBase extends ContentProvider { + private final String TAG = ContentProviderBase.class.getSimpleName(); private final UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH); protected SQLiteOpenHelper dbHelper; @@ -119,6 +122,7 @@ public abstract class ContentProviderBase extends ContentProvider { @Override public synchronized int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { if (GlobalObjectRegistry.getObject(ESCredentials.class) == null) return -1; + Log.d(TAG, "User handle is " + GlobalObjectRegistry.getObject(ESCredentials.class).getUserHandle()); final SQLiteDatabase db = dbHelper.getWritableDatabase(GlobalObjectRegistry.getObject(ESCredentials.class).getUserHandle()); final MatchType matchType = codeToModel(matcher.match(uri)); final String realselection = matchType.isRow() ? addPKIDConditionToWhereClause(selection, uri.getLastPathSegment()) : selection; diff --git a/ebclibrary/src/main/java/org/mpisws/encounters/encounterformation/EncounterFormationCore.java b/ebclibrary/src/main/java/org/mpisws/encounters/encounterformation/EncounterFormationCore.java index ede9ffc9..dc931cf5 100644 --- a/ebclibrary/src/main/java/org/mpisws/encounters/encounterformation/EncounterFormationCore.java +++ b/ebclibrary/src/main/java/org/mpisws/encounters/encounterformation/EncounterFormationCore.java @@ -15,9 +15,12 @@ import android.util.Log; import org.apache.commons.lang3.tuple.Pair; import org.mpisws.embeddedsocial.ESClient; +import org.mpisws.encounters.lib.Preferences; +import org.mpisws.helpers.GlobalObjectRegistry; import org.mpisws.helpers.Identifier; import org.mpisws.encounters.encounterhistory.bridges.EncounterEntriesBridge; import org.mpisws.encounters.encounterhistory.events.EncounterConfirmEvent; +import org.mpisws.helpers.Utils; import java.util.HashMap; import java.util.Map; @@ -57,6 +60,9 @@ public class EncounterFormationCore implements Runnable { private void initialize() { Looper.prepare(); + if (SDDR_Native.c_RadioPtr <= 0) { + SDDR_Native.c_mallocRadio(); + } Log.v(TAG, "Initialize SDDRCore on thread " + Thread.currentThread().getName()); this.bluetoothManager = (BluetoothManager) mService.getSystemService(Context.BLUETOOTH_SERVICE); mBluetoothAdapter = bluetoothManager.getAdapter(); @@ -68,6 +74,17 @@ public class EncounterFormationCore implements Runnable { changeEpochTime = System.currentTimeMillis() + CHANGE_EPOCH_TIME; encounterConfirmationAndEpochLinking = new EncounterConfirmationAndEpochLinking(mService); + + // deal with login credentials here + Preferences preferences; + if ((preferences = GlobalObjectRegistry.getObject(Preferences.class)) == null) { + preferences = new Preferences(mService); + GlobalObjectRegistry.addObject(preferences); + } + // try to get ES Credentials + Log.d(TAG, "UserHandle, Auth: " + preferences.getUserHandle() + ", " + preferences.getAuthorizationToken()); + ESClient.getInstance().setESCredentials(preferences.getUserHandle(), preferences.getAuthorizationToken()); + new EncounterEntriesBridge(mService).finalizeOldEncounters(); } @@ -79,7 +96,8 @@ public class EncounterFormationCore implements Runnable { } public void stop() { - //SDDR_Native.c_freeRadio(); + if (SDDR_Native.c_RadioPtr > 0) + SDDR_Native.c_freeRadio(); mAdvertiser.stopAdvertising(); mScannerProcessor.stopScanning(); } diff --git a/ebclibrary/src/main/java/org/mpisws/encounters/encounterformation/EncounterFormationService.java b/ebclibrary/src/main/java/org/mpisws/encounters/encounterformation/EncounterFormationService.java index 5f20a6b1..e294982b 100644 --- a/ebclibrary/src/main/java/org/mpisws/encounters/encounterformation/EncounterFormationService.java +++ b/ebclibrary/src/main/java/org/mpisws/encounters/encounterformation/EncounterFormationService.java @@ -1,9 +1,6 @@ package org.mpisws.encounters.encounterformation; import android.Manifest; -import android.app.Notification; -import android.app.NotificationManager; -import android.app.PendingIntent; import android.app.Service; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothManager; @@ -15,13 +12,6 @@ import android.support.v4.app.ActivityCompat; import android.util.Log; import android.widget.Toast; -import org.mpisws.encounters.R; -import org.mpisws.helpers.ESCredentials; -import org.mpisws.helpers.GlobalObjectRegistry; - -import static android.app.NotificationChannel.DEFAULT_CHANNEL_ID; -import static android.support.v4.app.NotificationCompat.PRIORITY_LOW; - /** * Created by tslilyai on 10/27/17. */ @@ -74,30 +64,12 @@ public class EncounterFormationService extends Service { @Override public int onStartCommand(Intent intent, int flags, int startID) { - /*if (GlobalObjectRegistry.getObject(ESCredentials.class) == null || - GlobalObjectRegistry.getObject(ESCredentials.class).getUserHandle() == null) { - Intent dialogIntent = new Intent(this, Login.class); - dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - startActivity(dialogIntent); - }*/ - if (intent == null) { return START_STICKY; } if (intent.getExtras().containsKey("@string.start_sddr_service")) { check_and_start_core(); - Intent notificationIntent = new Intent(this, getApplicationContext().getClass()); - PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); - - Notification notification = new Notification.Builder(this, DEFAULT_CHANNEL_ID) - .setContentTitle("EbC") - .setContentText("Forming encounters") - .setSmallIcon(R.drawable.ic_ebc_formation) - .setContentIntent(pendingIntent) - .setTicker("EbCTicker?") - .build(); - startForeground(FOREGROUND_SERVICE_ON, notification); return START_STICKY; } diff --git a/ebclibrary/src/main/java/org/mpisws/encounters/encounterhistory/bridges/EncounterEntriesBridge.java b/ebclibrary/src/main/java/org/mpisws/encounters/encounterhistory/bridges/EncounterEntriesBridge.java index 8e709ef7..8ac97ab0 100644 --- a/ebclibrary/src/main/java/org/mpisws/encounters/encounterhistory/bridges/EncounterEntriesBridge.java +++ b/ebclibrary/src/main/java/org/mpisws/encounters/encounterhistory/bridges/EncounterEntriesBridge.java @@ -184,7 +184,7 @@ public class EncounterEntriesBridge extends AbstractEncountersBridge ? OR " + PEncounterEntries.Columns.timestampEnd + " = -1)" + " AND " + PEncounterEntries.Columns.sharedSecret + " IS NOT NULL"; - String sortOrder = PEncounterEntries.Columns.timestampStart + " ASC"; + String sortOrder = PEncounterEntries.Columns.timestampEnd + " ASC"; final Cursor cursor = context.getContentResolver().query(EncounterHistoryAPM.getContentURI(EncounterHistoryAPM.encounterEntries), null, whereClause, selectionArgs, sortOrder); List locs = new ArrayList(); diff --git a/ebclibrary/src/main/java/org/mpisws/encounters/lib/Preferences.java b/ebclibrary/src/main/java/org/mpisws/encounters/lib/Preferences.java index 42f61a9b..f4e5afbb 100644 --- a/ebclibrary/src/main/java/org/mpisws/encounters/lib/Preferences.java +++ b/ebclibrary/src/main/java/org/mpisws/encounters/lib/Preferences.java @@ -16,11 +16,9 @@ import org.mpisws.helpers.GlobalObjectRegistry; public class Preferences { private static final String PREF_FILE_NAME = "com.microsoft.embeddedsocial.pref"; - private static final String INSTANCE_ID = "instance_id"; private static final String USER_HANDLE = "userhandle"; private static final String AUTHORIZATION = "authorization"; private static final String encEntryDBTimestamp = "encEntrys"; - private static final String locationDBTimestamp = "locations"; private static final String ebCKey = "ebCKey"; private static final String latestReadMessageCursor = "lrmc"; diff --git a/ebclibrary/src/main/res/drawable-hdpi/ic_action_stat_reply.png b/ebclibrary/src/main/res/drawable-hdpi/ic_action_stat_reply.png deleted file mode 100644 index 835d96fc6c3354801c672e6ccfd3661774618b95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1480 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsViy(bdJs)y>q@$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1OzjUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dZnqfY zG!Lpb1-DyFaO%|uIz}H9wMbD769T3m5EGtofgE_!Pt60S_ab1z_OYC>m4SiD%G1R$ zq~g|_ndh}x5+#n8-}ss>D*p6=%2Rs>%MOvECubb_PIW3->U&O^bVoME%ClMI(s-6 z{SS+4UEmAb!xP`(ARqDB%0}8zeEmyyK>?=t%6ZGDFJj=A-y*n=>B_9W>@VimlrJf< zn6OtTCI84@{ay87$h5~gKZJL%hdIe2l{QU0`Xar> z=}C6Vn?HBiPcQS|D!8SI@q*{o6IUBa%n92g9r?R4MksIl zH2o4+DOE=QcU~evo#h5E)%Lu|R@^RBrMTPtqIhwPQesr3*S}+7W}VNII5LFxr=@Pc uE}xqJ&h)G8Mxg*EF9*&)*^TjxYz%sv=9vgBpYsS*wtBkyxvXg2a diff --git a/ebclibrary/src/main/res/drawable-hdpi/ic_action_stat_share.png b/ebclibrary/src/main/res/drawable-hdpi/ic_action_stat_share.png deleted file mode 100644 index c329f58daae65d1f35d2959a5c2cac0a0cc7d218..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1606 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsViy$<^4@$kou)$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1OnfUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dPPe$Y z;WQ7bHwCv_3~=hz2RcR{6tzfE4HE*U9}p9saDg0n(of9;ruQOX!cO_L`zQkg(+*D; z$B>F!Z)TqL77dg*mi}kQ&sH|pEN=10#ExwmS&1DJbC-lVx$5Q!HqBnt%JG*ysC&iK z5SFc5!gOz`?A+0~wd;-BBDWBMRFo2ZJ?h$_;_~>Yj3X>4y?O2DIOwwA8(isoFihqz>bHwpL-Ua?$j-u~%8`2-x)myjA zC(328lpj#sz|r&cn$k1T9ZYqZvCPg3WY094ZtyGGQ_d5^Y%0aNrRnj5{>PF(-;2Ds zqTwKxyY;Erf2qn{LA%`;MQh40FzIX*+pfhZ^fyekV+Rw@{Fzrp+>UNmxy=}O)|DEvX7#2~~h>fMxd zGdZ@GD}*9tEx6A$s%am#W9>iS{`#ivg6_>K$9x(KKNz3s-lnubM26*e<=;-bS)1qG zWIWfv{eWSAme?MK?+$9KlKgt)SlVCCZ>zKB%nR_~-*IF|?5U(2raP?bomwZ;Vu5W89YpmiD`d{l1AAj`% z{~Q+gNL?|h*CziAcbxpNe3^1~;^Bv%j1NcHMdv);?&|-iG2YbY?4>g|gH#iG6gOBY z*mFETsIfV3RRmL#yxZZlM-l2qSC_UNOUj$o^n8)X1FhxtEK@GGWoONBbUC_j!s>;Z z`WG&&+0f&eee1@i=u;x6CpZPJ>dJnzYqhp^ncBGvscuehymXptON>jG9+65{@aes} zCh)+ft=bP+bMjJ6xn`tvzGJ_kcDp;@gzJRCt{rB1*%4h!wobb&^!&cj%c+sBiI(qA ze*2|+elMfU%by4CPb+1Zlc4#o+R*C3hR3zizq8KYek3?~{+ui7z@*dJ;BmZ-ftkT( WpX&uphb!l zLB%4F@mx4X7~<|?GNYKe@GSrP2s>?Ex1=rdHQ!oJMpaQnR7TXH@2h`1m)X6SlCIcQdBLUa} ziHNZY>H^J})XOYls>OmMP@9wY!5Y|L>(9~DI9}?smhst+K~d`~gB$QVvjS5-OMh9@ z7p0Dg&AkckVs2*9t(!dd1u)bm9fJqZWjogLFY*$m49R}EZ%i9y7=H_)9aXTn2#BEPp-WuW`_r{RPb$~ac5UF786kkc*iL7gLui^`@T<} z-|zW7@AJ!zcX#cpvNl)&09E0TKccUQ@$N9|UuAUkcYV264aC$Qu~!{tWeB`UF%FS1 z&-TFxWRoL97hyX9OfApb{dFu|^K2@sf@PpuIzr*u(%-kvQz*1P^-S%sh&4 zNe{Z;#So0t2~%8XRE9mHUD3qoK*F6wJ03&YHA*Mop~@l}KPV`a=0P`jDSdB*aTM7| zQ3pKeEm1M18|f5fh`2Dqo*-ICq{WGmPQvYU??D^{N#LXdCtB?!LAhEffjS~*s;jrr&c4b6RSSqI{8qN2M&NC||4FPw zM~Ucv!mtTWFd`cWhM~fO zqOw8)hW#E?=fF5FNd>(DzatQIyL?2DBm<<|NxB10U#Bu_8>9W#s7oQ;KgM>; zxcXts`cTmQF6+iFn~*;Mz?2L7y-{r`zPi5Nah@*Q^|Hx)qPqS{wapYiHztE-+gIhY z%d~sCHhVR*@(0~E-O&GM9kTYMXzBh|jx^Ef1#jkX$d#rWgZ#qy5D1;C$R5h9?5$mx zf9g62wolYtx=GLceC>zjyKGaScq0^lU~Hws7(w|Zz-tR)rte6iWO=6n3h`BXoBRI}u3 z=+%SA{q-+Byt}aT!7OggU#ItEas&&a9P`S1<5PJGJlB#m7e6YfH}4OBf!gZ8>>Y14 z)9)-d_J7Alu7C?~y6Cg@*^$#HHO#s8B7&KVuhW;teyXgVx%}D1M=ICp#q%8}-<>@6 z*I|0lls{Y0EEVg!KPjL~CZb?Hb@gL>c*AKbpU=)7f5t-4i~0Sj5%0%eXD5Td;?^SrN1BKwygm({26V;*@K+Dy UPW>`jH2zxQK$rhR-}49m0a>WR{{R30 diff --git a/ebclibrary/src/main/res/drawable-mdpi/ic_action_stat_share.png b/ebclibrary/src/main/res/drawable-mdpi/ic_action_stat_share.png deleted file mode 100644 index 056deb57b92875e9361c4ee2a769023e55aec274..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1341 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 J+8nOk|38FXU#|cF diff --git a/ebclibrary/src/main/res/drawable-xhdpi/ic_action_stat_reply.png b/ebclibrary/src/main/res/drawable-xhdpi/ic_action_stat_reply.png deleted file mode 100644 index 4cc854ab8001c0bd06aeaafd49467d157a1a9995..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1692 zcmaJ?X;2eq7+%5+f~Fu?ptvlE)+X6qNTA6OB;=@36EUQU7Z8#a0&F&J76>2~0v>p@ zP-f6Uibp*;?h-A>En%u6ds4ec$hWcD6i0 z`H7cDfCm5oUh?G<6+OqdOlaZNg=!Zf=4 zt=(7*062!})k##6VwFHk;2ez|!!hGVnhgLk%gjcNHVdP`G%Q_j5JIDuIv`N56GH2F z3PfQPV;TD81tgYOpj2xMvb201v@8~kF$-t`9HTU#8P7JD1ZE*LsVkt@_G1_VCm~dp z5PF?dk|F^V6C?)mI0##dM4@05mxFQAjhSsQg-$C-Fq4+l z8!0_u0PTvJG$Mx*LUg9DOTdjYvIf)CHPIIan>9ulk@63f46)6@Yv+7N8b+hL(I~S&t zf$gn*tJTv-w14c&8ROEM8S7&P+V3Q7>}N}Ydg<@QTP_i)&G$xXy0d&mzTaP3?31=n z)EVYs;1?!-?Hc07EEjclSgV5D>VFr#cv!vH6FLS$PNR_J!e%w%vdP;r=*!%Z%{fwD z)%CpaQQ!iX#gPM>n^cNBr3>eTB;I=2-jW&4^4lw_X8Y?Nv;oNgTQo|CJckX|^?k14B6KBV_weeHWMt_26Wl%F*}uy;_~1_9 zMgcu23zIhj!@{Ny4U96hBfzIO1qk#ptL|aqmf?pN ze@mUS%~@>Id;Q$t)_0?a_?$UWS+}3@SYC20#<8{27VnmNd0g(~&d*wYsNJ&>k+Qb&5*TDrq&*QkMBIDw`E=DgO}%5Ms;)ht0qJl)vHQ7n7w{IHgbbnbzauFl8XZ*7t zt%hd*hP1Ax;o6YGdk%GHKdnFC`FBlU!1MMNk3Z%bJ%fOzP~Snu7f(*(Jr3`=@3Lx@ z=|_hihTj@wj@3PF46cGxqWgo&WOpsWHxo}v7q}cq@+8McPVDF!_rBkf>Gch_yH&ew zAn;&^f6$|o7eD$_aqZfY=CJ`MB74(rb)aJPSWZgn#GdS$U3F(L=IyI5PslcDhtB4P zo|{*RNY)(Ui`yI>ZNcfgtj-SH(4oj^&cLw1Y&9_NpL6Ql<0LOV%_6no!K%dK%*qO? zJurM>!p7oP(#vXF#bb7nGCypDl$W)2^)8iK=CFhwS5&OCMT^2KjX@7uS>IjX`f+*7 ux5r-nR1e%Z`07maTQ;O!8MpT7VZae+!0!q!^tngd{}*zpQqmZoYWWXGEO(Xw diff --git a/ebclibrary/src/main/res/drawable-xhdpi/ic_action_stat_share.png b/ebclibrary/src/main/res/drawable-xhdpi/ic_action_stat_share.png deleted file mode 100644 index 15549b04eff0aaf80ecd4f5989785bd8bcb1d5fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1780 zcmaJ?c~BE)9NmO+j!-OM6)g=xDM*ve2__~8Bmq(h#c+s%l8|g*3&}3YB0-=6K}56+ z9z{hIv#Rb$5CMW6Di5eYO&nHjma`Cxw8zhsaAXoyQ z{648jNeD@RXdx1tN~0)fo^+BYi%MtFI4sVWBnFL61L+Kq=0%~?xNI*jjZT_=$aplZ zQpJ@D{ikE$D?T|M!%!{=rlh1$QH8AY=&Y1zcw`}@g*QP;e=VXWO%=_B=g!4%PQ7Waa_(FNb88x?_#jN!q4eoa>ZtMo1*Z};#sKi3wFn#Z{;;1~ynuXUUII4mh zc}K(wSFJ~V&S+*{qs5+G=Enm4oLWs%C(6osqtC_%zTL9t1*5%A$a91D2OcOP?+apf zKpo@no-`fo8(DI$yYSp^y-!cXgm(R|8=r{jU*8W!{4$XNwijuMD+nb(Fz`jDU9+X^ z=G$yo#;7t~Hab5Y$PnAg=siHOdv4FCcWg$8{Skz#Stc_6LUBMwexaG^sQnVcbG4n! zeuY(cwo`6KeT{Qzn)x^y73tFK{a2`S>$S|Zfx;&TY*Pr1SHij7r}cq0m9pXGF@*)M zpMWMW9e%!C(*8|%=CSG+9HL_MJ-V45&%Vf^F z#*PJrl(D-HSu4yFO%sNKyzP4p>&((kR{HLPi8q0RSNuo*j;^{pcED`4K{#fCE-7KV z6R#SE%N&A$re<0NlVcLhtbJ~tY+uo|^TFWtMX2yeDGrV8=BL-qsqsmFOstp(p|@Ih2)-~-1pv5@G2TQ{_?cpp2PSV-pYNcmk)Q2nl;8A zpX|SPKQ|H~Vrol6+mHH%d=mk>^fm&g9#eo0mN6dt_f-Q|;m^Aw*=` z9dT|g9e*8{n_=?V?U0h%0bX58e_DkFtq4|m4uzk*p8n^EEYjKI+m^+Hlc#!#=e3Nk z$~DCmsXwm%ddrSD;mMQ!56<1Vl(nv8cirUMPev*Sd(k15;5**0Snu6=UFC5GAfmVc zSa*wJXV2}sXmQ84QtB90cAXdx?q3){h<3!b7J6*mzI}cDI>{ZjKjP3)+4t>e;eWNa-2df%z48>gJU&FD*_dZp_K|2;bwV zI7}HvnI8)d(I`oqj|9tMM-E5~`vQN>N zf!pR*IByi-G3#ye)(?VT<(saBq8hUrfbI3m7kk#ftEI9GwyRsA$Ia#9Vk_5F%S%+G n&8O9J;3M?C*E9F`AOthOrR959nu@X4_#YCBf`zC2WZC}!HVLh* diff --git a/ebclibrary/src/main/res/drawable-xhdpi/ic_ebc_formation.png b/ebclibrary/src/main/res/drawable-xhdpi/ic_ebc_formation.png deleted file mode 100644 index 03d62697fdb83472776d96a2931d06639d0b6c79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 533 zcmV+w0_y#VP)eLnY zia2eeJkwdeLCuNQNG-QUHK!e`?AA6CCVHS?Fdqd+wC7vkm1xm5F&8yhTcFxyx4*~< zooh*OMFQqUk8+b%YP)S_jXssWjn*mFoUHsEplPW$CIUy`gBTg){D5=UTBn6BQr8F? zfD4cV8&6>KMF6NYpz>Ep;qDomU_;6Mfghf5g9%VeOkz?uphU;}J`4X^<= zzy{a=8(;&D8fehi3Jn+S6G-Xe)I$I4AZ zf)?wreiW(P5On^Xt#!qPW&ziBK1bP4DM1plzZk1OURvth=-%4oz~THNLE)~=7xpP( z(vxI;niR^mysUg^sdM|?n;z@;=lJKd+b!5^eE<90^XJa(d4DEPZLvnzB8{n!cIAo9 zVM;$BaAKmOp7Hur{>c;c3K*Xp1$S+>zxA3u#m|6q+JSY^^<|N# zue|ZuG(+wKL(a}`n~s`QO;TCLY{O=q_juD`GwVls=`uA%i@P(cZTgaK9sJy2y_qxa z!OgjB3Cfzt8_ww{_J5ES4$k&uq$?stgULbG6p0Rl5ZJ&+D_Vs`Bna{Rp z+T_oLLjQQ59jv?{;xyZLjp_MYTm2sGT=C>fqrBYQ+syiBtn)YW|IJB0zgT`*e{EoI zQ+`uYt6wc+a-xi(UH=NhZISboe$VKArLjsSQ}PSjii^h#FDIM~NuF@}7SolNskc8) z2v&Q^ww&#}LwEmI|K`jOQX)3Xq*&J(pUvH5nzelcKi_YW`IRzO#*eNl)`_?syshPw zb@bu3#c}en`xuoyXP5Cbmn-sd_^y3u;uF%}u=_!OYvAUUm8%8CnPwMnn*Lz@(Uq-| z26ntfM*Wi)Slg9dh{?QmP}qQZ-6To9==DZD8oiawdFp`^cGl>J++3M!5S@K0(CFxl zr)E<(O*o;vqD!UNYbeONw&q# z`%QrnDfC9Ggx7|p|3qzpKEt!3de%8Uvt^2ZKg#Y;