From 3bd4feacbd70e298bfc62d1090ed6dd92b4650ab Mon Sep 17 00:00:00 2001 From: Felix Ableitner Date: Thu, 30 Oct 2014 00:23:01 +0200 Subject: [PATCH] Added text chat functionality. - ChatFragment with layout, Fragment handling in MainActivity - [MessagePack](http://msgpack.org/) serialization in TextMessage - MessageStore to hold old messages - various small code enhancements Way too many changes for one commit, but it's too late to change. --- app/build.gradle | 12 +- app/proguard-rules.pro | 24 --- .../res/drawable-hdpi/ic_action_send_now.png | Bin 0 -> 465 bytes .../res/drawable-mdpi/ic_action_send_now.png | Bin 0 -> 332 bytes .../res/drawable-xhdpi/ic_action_send_now.png | Bin 0 -> 578 bytes .../drawable-xxhdpi/ic_action_send_now.png | Bin 0 -> 759 bytes app/src/main/res/layout/fragment_chat.xml | 59 +++++++ .../ensichat/activities/MainActivity.scala | 85 ++++++++-- .../ensichat/bluetooth/ChatService.scala | 149 +++++++++++------- .../bluetooth/ChatServiceBinder.scala | 6 +- .../ensichat/bluetooth/ConnectThread.scala | 3 +- .../nutomic/ensichat/bluetooth/Device.scala | 5 + .../ensichat/bluetooth/ListenThread.scala | 1 + .../ensichat/bluetooth/TransferThread.scala | 28 ++-- .../ensichat/fragments/ChatFragment.scala | 129 +++++++++++++++ .../ensichat/fragments/ContactsFragment.scala | 33 ++-- .../nutomic/ensichat/messages/Message.scala | 31 ---- .../ensichat/messages/MessageStore.scala | 76 +++++++++ .../ensichat/messages/TextMessage.scala | 56 +++++++ .../ensichat/util/DevicesAdapter.scala | 12 +- .../ensichat/util/MessagesAdapter.scala | 25 +++ 21 files changed, 572 insertions(+), 162 deletions(-) delete mode 100644 app/proguard-rules.pro create mode 100644 app/src/main/res/drawable-hdpi/ic_action_send_now.png create mode 100644 app/src/main/res/drawable-mdpi/ic_action_send_now.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_action_send_now.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_send_now.png create mode 100644 app/src/main/res/layout/fragment_chat.xml create mode 100644 app/src/main/scala/com/nutomic/ensichat/fragments/ChatFragment.scala delete mode 100644 app/src/main/scala/com/nutomic/ensichat/messages/Message.scala create mode 100644 app/src/main/scala/com/nutomic/ensichat/messages/MessageStore.scala create mode 100644 app/src/main/scala/com/nutomic/ensichat/messages/TextMessage.scala create mode 100644 app/src/main/scala/com/nutomic/ensichat/util/MessagesAdapter.scala diff --git a/app/build.gradle b/app/build.gradle index 9edc476..c5e794e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,6 +12,7 @@ buildscript { dependencies { compile "org.scala-lang:scala-library:2.11.2" + compile "org.msgpack:msgpack-scala_2.11:0.6.11" } android { @@ -42,14 +43,13 @@ android { buildTypes { debug { - runProguard true - proguardFile file("proguard-rules.pro") applicationIdSuffix ".debug" } + } - release { - runProguard true - proguardFile file("proguard-rules.pro") - } + // Avoid duplicate file errors during packaging. + packagingOptions { + exclude 'decoder.properties' + exclude 'rootdoc.txt' } } diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro deleted file mode 100644 index 089daa1..0000000 --- a/app/proguard-rules.pro +++ /dev/null @@ -1,24 +0,0 @@ -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in /home/felix/software/android-studio/sdk/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - --dontoptimize --dontobfuscate --dontpreverify --dontwarn scala.** --keep class !scala*.** { *; } --ignorewarnings diff --git a/app/src/main/res/drawable-hdpi/ic_action_send_now.png b/app/src/main/res/drawable-hdpi/ic_action_send_now.png new file mode 100644 index 0000000000000000000000000000000000000000..7e0d46d209f499111d95cc37176a1fabd11bad31 GIT binary patch literal 465 zcmV;?0WSWDP)s_rywyRayV_cTp^s;a7Q5&-6(kY16Oh*}B=1t3FOAf|}56c7r)9nz}t zlL!zBzzOO3k4K$?^eKxm$UCI*m1PISzAVdws0!FBJlZ$@pQ2WT3NS;;TP}|RLIp5s zP23|W2o=B#@(XjX3y6s$K)$07u^r@1i#cec+7A0?vIbD0AT*jR<0G{08Ee` zJhrhDNZ)mLw3Inwj2dRL#^d>~??&#swFVyE;Hb;95NC+ZapEn27uHZGjE!;$#$5n1 z3C39fXrHl%Z-5u$+zQMc_A;l_4;cUQ*?&}kCDVAY<8=~nfTP?CLbOoS3r#{8;OUjy zSXASj3gnWEa{w|)#$5nJ80P>S5nCz7RVtNArBX@IS%3imXPcTVWipH@00000NkvXX Hu0mjfji|uj literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_action_send_now.png b/app/src/main/res/drawable-mdpi/ic_action_send_now.png new file mode 100644 index 0000000000000000000000000000000000000000..ab3db5f8d9fb01d6ff42b57439de4855048b5bdc GIT binary patch literal 332 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1G?>t=`Ln>}1B}lL?P7ry(aO~KzLk?$Lv#VzmdU|+zo@82C zq;Qt)i2pqM`hT;<_!5o?Gb!Bv?!5DULxsG+d)w-7Z_IaDFudxJQc&$yaVc##cs!Yf zZLiQQ=7`1!-j25`L`_>{6nK_w+2|2?Rqx4ildr_A{*|-D zItm-4bcGeU8-Ii^o_h31TZ7J8on==TLskoOSUR+YiSf^RHKVoReP-In1(}n2n*t5E c7?^k%uKmjA;9*x40Q#K4)78&qol`;+0QxR?p#T5? literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_action_send_now.png b/app/src/main/res/drawable-xhdpi/ic_action_send_now.png new file mode 100644 index 0000000000000000000000000000000000000000..ff0e369ee4e77c759668f484b413bd8bbadabd7e GIT binary patch literal 578 zcmV-I0=@l-P)g;nk>&nCnxMIS@;sApV{x`WMjR6BahjI`6e{ynK+S~O1 zdN{o;)M^w(Q4~c{6h%?gdg}FhT|{#qywuAKN|L0HbdP+B_?S+oUxx<3r5i+!7+3~T z7Qg~&=vPlHgNOuu;1MZavT2TZL%fd1Awt7=7Tm#IT@xL|rl%SF?-M+Hlx!MGP^%jhLV!7FGeABV7m%;hN~}E*lpZVoh=pdqsuAFO@?xY)qk2;0r_)i~6H*BmU zKeL={dR|9?KBQIlx=rIY7#ALjidU|&;&C~s+vKs*_wlac3Q?OMXaO*1ToXWU(YPjn z)S__}0RGn2v}jzb0#d8SwE$#RjcWnOts38D1qAg{v@`%Tz}&KNjS9#t8?OR@iQfn% z0CLO5MF9N2Lt@Lur4^7`H!cOxv2I)nz`c5Uuxy;7D2k#eilQj$p!Flb0N@VYT%`vC QQvd(}07*qoM6N<$g4U+^0RR91 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_send_now.png b/app/src/main/res/drawable-xxhdpi/ic_action_send_now.png new file mode 100644 index 0000000000000000000000000000000000000000..373dde239e0ebd7e9935ae186473c955cfce9081 GIT binary patch literal 759 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGok|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m}YvqIEGZ*dNaq?U)oW?;e25S3#;B6rZv0U9<5uzaMG)h zTWXex$jVRYL7(M+$gXteoT{3U+4-bPtjpw#S9i+Xj<+|=H*c?g@40%a{g!KIZ|{tJ zKX+~_&~{{yZ8X#8+>*C~onK#=+dinU`KNfd{N;X+-^TOL{})P&W>kLJw{+^IbApNb z2TFtg7qAO{V~Sh)JFHqt@c)A4Asy?NNb6Oe?%pDuxj%jLO>W5xHDWt%)@^vAo6@qW zp;7KA)BbQ!I=TP=S33$|aH=W;~bG-0<@!QQ6=<(KL_dn?qK%}zH3zhsN%3G~=q za9=y<9EUICIu3bLgOE!~CaiC~%WplH;MsLSuT;rA`5j7#LoDcRpS%bc|q*KHc>q$+1tB2yl!po$Vlydky(F0 z%6f5_&99`tH)isDh}@8seuc}Nb6M_b4sOQwwpI%(K{2Kn^Ru_ywOt}Oe!LJ;Ra(=v zLH~&T-&HDXKHa7FA36UKHEN$7`%daZLyy6k2GN^_YjlHGM;VC4pI-WQ=@h}eIzfNl z_E-8|%XnD0)8)xBr8}`Q-+kqdFV~UPF-kT+8XOR4ZQ$p~<+v}#LiLT?CMBat-dZ!O z8N$;RHnRLkI@!ZNgVC~)UweVlhZKj`O!=A%6h1Vv)NDBG@SxXN;mMo*pQG9RbK@A7 zXeg|b-nxZ#3X5GWW8nQ+E7T6;ZxZ~`AUQ$!#|9=YCiyT2&j*jsHTeDU@ONzxdElGA ze|Peuh1`wT&ov}9A1ME{o_h<+6qbE=B@fIm&EWhnU7?-DE{5$1i`|-rt^@6&0YX4y n^6o~>JHU*bS{NLzR|+RE7;d!x!1aHrF-XeO)z4*}Q$iB}O!YxH literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/fragment_chat.xml b/app/src/main/res/layout/fragment_chat.xml new file mode 100644 index 0000000..09f4dda --- /dev/null +++ b/app/src/main/res/layout/fragment_chat.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + +