From a65ade536651f689c5bea4a1bd09e07cfa0b52d3 Mon Sep 17 00:00:00 2001 From: agrajaghh Date: Wed, 11 Nov 2015 15:35:32 +0100 Subject: [PATCH] add action buttons to the call notification fixes #4160 Closes #4490 --- .../ic_call_end_grey600_32dp.png | Bin 0 -> 425 bytes res/drawable-hdpi/ic_close_grey600_32dp.png | Bin 0 -> 256 bytes res/drawable-hdpi/ic_phone_grey600_32dp.png | Bin 0 -> 457 bytes .../redphone_stat_sys_phone_call.png | Bin 444 -> 0 bytes .../ic_call_end_grey600_32dp.png | Bin 0 -> 313 bytes res/drawable-mdpi/ic_close_grey600_32dp.png | Bin 0 -> 197 bytes res/drawable-mdpi/ic_phone_grey600_32dp.png | Bin 0 -> 350 bytes .../redphone_stat_sys_phone_call.png | Bin 346 -> 0 bytes .../ic_call_end_grey600_32dp.png | Bin 0 -> 557 bytes res/drawable-xhdpi/ic_close_grey600_32dp.png | Bin 0 -> 307 bytes res/drawable-xhdpi/ic_phone_grey600_32dp.png | Bin 0 -> 612 bytes .../redphone_stat_sys_phone_call.png | Bin 536 -> 0 bytes .../ic_call_end_grey600_32dp.png | Bin 0 -> 773 bytes res/drawable-xxhdpi/ic_close_grey600_32dp.png | Bin 0 -> 411 bytes res/drawable-xxhdpi/ic_phone_grey600_32dp.png | Bin 0 -> 863 bytes .../redphone_stat_sys_phone_call.png | Bin 739 -> 0 bytes .../ic_call_end_grey600_32dp.png | Bin 0 -> 996 bytes .../ic_close_grey600_32dp.png | Bin 0 -> 460 bytes .../ic_phone_grey600_32dp.png | Bin 0 -> 1167 bytes res/values/strings.xml | 6 +++ src/org/thoughtcrime/redphone/RedPhone.java | 38 ++++++++++---- .../redphone/RedPhoneService.java | 12 +++-- .../redphone/ui/NotificationBarManager.java | 47 ++++++++++++------ 23 files changed, 75 insertions(+), 28 deletions(-) create mode 100644 res/drawable-hdpi/ic_call_end_grey600_32dp.png create mode 100644 res/drawable-hdpi/ic_close_grey600_32dp.png create mode 100644 res/drawable-hdpi/ic_phone_grey600_32dp.png delete mode 100644 res/drawable-hdpi/redphone_stat_sys_phone_call.png create mode 100644 res/drawable-mdpi/ic_call_end_grey600_32dp.png create mode 100644 res/drawable-mdpi/ic_close_grey600_32dp.png create mode 100644 res/drawable-mdpi/ic_phone_grey600_32dp.png delete mode 100644 res/drawable-mdpi/redphone_stat_sys_phone_call.png create mode 100644 res/drawable-xhdpi/ic_call_end_grey600_32dp.png create mode 100644 res/drawable-xhdpi/ic_close_grey600_32dp.png create mode 100644 res/drawable-xhdpi/ic_phone_grey600_32dp.png delete mode 100644 res/drawable-xhdpi/redphone_stat_sys_phone_call.png create mode 100644 res/drawable-xxhdpi/ic_call_end_grey600_32dp.png create mode 100644 res/drawable-xxhdpi/ic_close_grey600_32dp.png create mode 100644 res/drawable-xxhdpi/ic_phone_grey600_32dp.png delete mode 100644 res/drawable-xxhdpi/redphone_stat_sys_phone_call.png create mode 100644 res/drawable-xxxhdpi/ic_call_end_grey600_32dp.png create mode 100644 res/drawable-xxxhdpi/ic_close_grey600_32dp.png create mode 100644 res/drawable-xxxhdpi/ic_phone_grey600_32dp.png diff --git a/res/drawable-hdpi/ic_call_end_grey600_32dp.png b/res/drawable-hdpi/ic_call_end_grey600_32dp.png new file mode 100644 index 0000000000000000000000000000000000000000..4aaf9cf732672ffdbbeefb9f47a73342a911cb71 GIT binary patch literal 425 zcmV;a0apHrP)Zu7)JMJCF0Err+l~zTfZn-n-#Qk|as`4~U3eE^-+!XrKe*I~_Fmnafnq!rrWX_PTv# zQ6mpT&FSXI9>|~%bE*dR^pPGue~1s5Q#Y{ZQ|Ls5yshBBfjxOb_fH#i33Zopl{`Sz zbwo9Wx3T4OPaB+#ZSa~~B_fVHwlHw&?GKZg;S(56&#SSYBe@l{EyX8wjV7Q(QL#SH zaT>C0Vc>v#5c@D3rYGwb@0=o^u#Wcc^fuZOZgF|EKvNK5zQC2XNRlK;k~HEA3~EQQ T{l#P(00000NkvXXu0mjf+L*r) literal 0 HcmV?d00001 diff --git a/res/drawable-hdpi/ic_close_grey600_32dp.png b/res/drawable-hdpi/ic_close_grey600_32dp.png new file mode 100644 index 0000000000000000000000000000000000000000..7810e54fc5db8e2473c475e97903fbaa306b0a69 GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}b0D#Ar-gYPIKgHHV|;-t~%1D zb1T_m-CnQEf{Sv7tkG`|xr&|t!0PxcUHblM1^XwDK31HYec{I9-T8NO4<1{%_OSZw zH=DH>=I6e;C)y>se@%|y_hUe6OXP+4|MDM2#IDW#%e!Gs!k#5yw8ml2ItaS(A!b>Q zq}K{R#^uvRt>mJ(-%k6u#Nwa&=efaOlHzM_cHjNDAOMUmd|U%T7XNMvNmYw2U#=M! qn!kJD)|8Epv^?$i9Di(?yRWKax#xCCkA*-lF?hQAxvX z2?R|fU=fW)jB6xw5r+e^r-`2F_J2y@{D{LWqvGOZLk{;aU#5YaB+!6~OkENP8NdX8 z<$x9kRFZPQEe9Yg2V8T2H!BAmasXE4fK3)S69e=z3v_~CLIBb%V01=Fg*pSgc*AnQ zzsUL?3Q8^%BI_5FWWgUi!O*<>OG-NIxLHr>Ndl_MO*pl{rAjyfylMIkdF3Ym#9pvw zX~+qHG+sXm>?t?tb^1&cod7GpQL{vd87Bl%Xj|eLSto>^N8b_;<#EO4kLb(~KIVQI z#!j32N1=c&3_3XX*O2ojD#?LgAlM=z)Wyj99{u&(PqoAcL9)lj0dFuIAn zJ)h`$8Z~IhqYXpI1$?~0NC1>KiYs=R06004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00002VoOIv0RM-N%)bBt010qN zS#tmY3ljhU3ljkVnw%H_00A^fL_t(Y$L-d!O2beTfZ>~fU>7^I2o@cLK7`i#1P;y} zG|)M8X_vN32H(NKQYsGWP^b?e4vM&nZy-A8qMHt-zk`>=+!ze!W~=9H8NQHn&pjs! zl~1a9fLxjcVYVqsp(gPdNuizrT}z>s0o_X>&w$==WY9KdtjeI}1k{j04$lTOkT&Fr z0d=HMyxfPlQmDwMlritxnUpc18UQoa?Qj1T0O$75rvA7c`*}0~;Dr@isKgThw=CLD z$U0L1CM?*FT3=V{fJU?F|Q-x})-g8HNq}&I30bM*}$xazg5r-2@Xw zJIfaFb**4b^;ZUhZ0o45PcS`#tb47*Q9jUjw_oN1DHI!=@{tFmP%N>>h{qV@+3fx@ mTkPZ0#f#>a`u{)rGrs^}t?GqNgz3Bh0000#_v^ diff --git a/res/drawable-mdpi/ic_call_end_grey600_32dp.png b/res/drawable-mdpi/ic_call_end_grey600_32dp.png new file mode 100644 index 0000000000000000000000000000000000000000..ce1b386c36d62fa30ccd4d9ff27477710d5a3798 GIT binary patch literal 313 zcmV-90mlA`P)kdg00031Nkl4AI%2uMN?SV>^^+N@om$(pebeVJMbBOA) zUgY5E1_~W7lqSaCh0>+RfT}yugsa3unTZX$Q07X}!IgVQ!6*O#C@k4UJ)SO(Ar-gYPO;`|P!Mpj?GRt| ziSGzoluVzVXkC)Cp_7rC6xZ_Dd(36bhv&-)yDvP&$)@=$N>nU!=BzrEHz#J~f0X>W zX4x~%g!Qh`U$%0|1edndgu1n|KEqFtZ wdoFyqWzopr0KI!p2mk;8 literal 0 HcmV?d00001 diff --git a/res/drawable-mdpi/ic_phone_grey600_32dp.png b/res/drawable-mdpi/ic_phone_grey600_32dp.png new file mode 100644 index 0000000000000000000000000000000000000000..73de3a88229c32ea88888b9a3e3e54824d138b96 GIT binary patch literal 350 zcmV-k0iphhP)kdg0003cNkl}y$sjBv4M@8q*M-#fo-|$WTnL_@zQTV1HP5> zlbxJPCX<&25T1|%r^g>fYUI1202~gd8@R|cpn<7$57--9LYc|;#&d9foZ7&IDpM#; zq@kro(44uxgd6TMw$fEVkq>2CN}Ee_OTq}07p3;4pTHhDQ>G5pz8)>1UnlH}=U|0D zN}F@}5ZV!tphpTMOZPz)e+6Pp0|<;xOFXO!+QeNg(Y^iSC=gv=-a0C%1ia{u@siU0rr07*qoM6N<$g7gcFhX4Qo literal 0 HcmV?d00001 diff --git a/res/drawable-mdpi/redphone_stat_sys_phone_call.png b/res/drawable-mdpi/redphone_stat_sys_phone_call.png deleted file mode 100644 index bc0e4a3ab938d84e09d11438a6cc862f80d07fa4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 346 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_*1g=CK)Uj~LMH3o);76yi2K%s^g z3=E|P3=FRl7#OT(FffQ0%-I!a1C(G&@^*J&_}|`tWO=~G=WkKx z$Y!=pKS$A|e-C3q(VS4KwO?^Sz_azw#fA$NnNY&Kzbbk6j ze8Du6pi4nA0f*=Rcl1zt^Z(}u^?hj@rs*tTcC`8UKfG~|@c-w3@>`c0mhkrcpMBuq z?nnD20)B4&&+&n~{8Jz6@27|VSN{)WocCwJpZeqVJ`M`ZmVfSl`me7kNkl`9szeAP*9h^? zCs2rm2qESR2%`4|j3S9e4$G()E@Q9}#@oBS%`UN+-_yQ3^UMne2gh+7$8j7d6)z~1 zhh#*JsqyWM$w+x9D8NI$?j4j1YKAXa;|5KOY_O(Ys2MdL96**PdcvYqS!0tXVVdfr zRC#Wq2RjuGs|Wl>lQMPAho|8o4ehJ*d`FW(YP_cRpc_FSr}>#C!>q8R_aYfy;!2yP zE^=1g42v>Y8HoC|ul=aMG9ZItkvBNYMXtww`$=6yC+ZlNTYmgQUUMosiUfFsxA`jO zm-03oMl6rh{1wxF30>k+%t;N=+Q+}P*Z9UB&a8l)<)C1V%URZGax7qHU7f*Sa@}5i z?gb1tWfFgQqPazrYk`%WD}1#QlZpZXMn8_d^_$uSc)|i=)7sc?%_Py}4PI!S(g=MYY-Q zuiNb1`}V8F)K}us*IH!$T6J@-`QE})>)BLlcKZ?Mwg0v^>wU{K`K^Cj)s-=Zy$^n@ zYB`JLnzwL-zHh=_lg6)?ARK>(y>^UWf3a+w*B@!I?(1%b)#7R!;^r^7{(0tk_APPm zIj?^GD*URxt>)%~nm=Q)dP)jPiYYI!Tae0#I+ zvDMFGD-L~@5pv+?T=Sgedb-Mjxc`&2IGPkVzMW%_Tk>STqVQ2kP+)kv`njxgN@xNA D$Sj3E literal 0 HcmV?d00001 diff --git a/res/drawable-xhdpi/ic_phone_grey600_32dp.png b/res/drawable-xhdpi/ic_phone_grey600_32dp.png new file mode 100644 index 0000000000000000000000000000000000000000..1a2aa8d6808a3643b5082ab368c457d06880039a GIT binary patch literal 612 zcmV-q0-ODbP)I1OIcjd*$Angy0!jzY7GU^($|3JrJHEO3lMGv~l!o)310Uj_Tc@w2vv zG~oR|$IoCl>98Z3UzyAou2{Tx^B|uHsEPuBVHkWIGi{SR-%5=XRd=AS+aek&27PKqQaER zk+%3CYROkJ*G1aQ1#lv_s6)TPZNGx+YI2I6i27Zwy@%4ISK(f9GYLw&@DdD0)jotV zC*y7HT8z)U3RA^iVf^1OGe6B6l<@$g$hY?8K`!)_A(tEr9aG0yaP8+%gZsfBN%lvR_yi02PojN!>ED1RPhBIwty!(fNAjmrEPbF zy@pl&0-pGgd7@vy*MT8?)i2-~-iWi9Q7j-_KY5f<*Dv6)eKu}(8kma4C!QhP!Gcg= yoU}xHaS8=<1CQ(re8x9Z`JM4-J7qGNOv*3!crAhOdvsF(0000004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00002VoOIv0RM-N%)bBt010qN zS#tmY3ljhU3ljkVnw%H_00EFmL_t(o!|m6-N&`U@hT)kgC>YSj%1#g={$LYJK@@B? z!DTD4NpB+xwqhmTf!G+tMg%Ldh~1EB#xs?fEt8ywJ)52L zjY8SIR3G?nK!!5W^+HAxh?fT_O9D+yD*VMR=+KO-k&FGKTw~0M zMYV1{)R8fo54{&|n-mp`YTX}`4mAoqvgnTGf!~K;hxgFW3+#6+-vgjXQRL^Vr}#d^ zA$6O;_kG;j1r&;9?(G5!MViydV;2V$iV+;njYpP}GD7zXfncg-w_vOkiiN~I|9pk200H;JNKZBh_|k#%Tk-Tj_-$J<;AyBP_xRMfFIs`#vW<}(tpnh$kR2J;FLQ|ZjnJB+F%2GPktW3DTlM(bNFhuNi-WbsBH^w8Vxr=E+KrxjuL5W+AYreie~a$Kb7*Lf0+`n`tA_r@LA-}9 ziU1l@vHkQX96=hoXaZ==s1x)H&SM_Br~+s#u)XwA>2k2#+WgqKAfAVnN=ytsp0f)1zmpdw`Zx!>7hZX%a(lfwW#wx5XX5+@OOymgI> zn_^=QZofAapbTdb9$VYVMX_yo==k=32nEn%yz~vXWEQ*4hY(&F&%fU;Sw6-R3>Yj; z!^+>jW_UFN)46v4_bK#ddFPY7i}FnEz>sn!sMeu@bOuEGw;6H6kc<%uv^D? zVcdO#DGbHeQ-Se1zGc*XgDG5ZSw$WQ1=JPu?k}H00t-KvedTlHA$0~{7B{yphXOf1 zh3Yh)j8u}xR0WQ66RK&E5JCtcgb+dqA%qY@2qDCG6c+3O6`Q8g00000NkvXXu0mjf DC-z)B literal 0 HcmV?d00001 diff --git a/res/drawable-xxhdpi/ic_close_grey600_32dp.png b/res/drawable-xxhdpi/ic_close_grey600_32dp.png new file mode 100644 index 0000000000000000000000000000000000000000..fc507f758e7e2e5de0bb1ff760a3b2d673b2462d GIT binary patch literal 411 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 literal 0 HcmV?d00001 diff --git a/res/drawable-xxxhdpi/ic_phone_grey600_32dp.png b/res/drawable-xxxhdpi/ic_phone_grey600_32dp.png new file mode 100644 index 0000000000000000000000000000000000000000..630384d91afd71be01edfd0d51601adadc59adc7 GIT binary patch literal 1167 zcmV;A1aSL_P)Y6d^m3GRI9ny{xl4;J)T$7ns9}`FvvxRJs z9Y|DjqI)4(fMZB>Q)nd%a7G&dIkEub>HrUs1vsG%Af03Zepd$oSs=sO0KAnfzz^C0 zc!ezBuhju|kp=if9pGECfZtIE_?0ZcOX>iVan?eBN0Df!=LQP_?$!sudIJHXmCy%x z!$1IDgv9gD0sO2EP|BZYAb<=Y(GK5gAOOFp4}h0#Y>Mgw95N7quR)@pVl&NkxhDLj z55OHX_u+GW0Q6Z1um$=6+YAJd+w=isoq+&x7N@m;632_l0{%?3{4=&&Ex~Q%Jp>#@7EuYv$99@KKUS?kAtoR@)-G`aFg?qx`{$7 z`9PjBcLehCg#Nw9Bb*8({o52Fu#+%b!9vt?P;W7P++l$3DSzn)$k!ZvP;7trj3 z>#IIzdbrp^3j9FDOY8&&aZ&_-buC%9a8s6kG5b#;gR;pG1FBhAjn9 z$Te{rK0?_@0R2f+ej11VlK_)*`?pJa<;NKY7@@fiS0XP1IHe5m0ol;KkXK=I8sg7s zEx#09Ywko+v=XcF0zSpj+RNuPWLdmGRut}(&NRo{=;yC6gd-SDXB-Je@L}awKL~;# h2!bF8f*=Tj;BWUXYid-UNqqnS002ovPDHLkV1oHT9b*6h literal 0 HcmV?d00001 diff --git a/res/values/strings.xml b/res/values/strings.xml index 716e81c2df..110e158f3b 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -313,6 +313,12 @@ Signal call in progress Missed call from %s Missed Signal call + Establishing Signal call + Incoming Signal call + Deny call + Answer call + End call + Cancel call Multimedia message diff --git a/src/org/thoughtcrime/redphone/RedPhone.java b/src/org/thoughtcrime/redphone/RedPhone.java index e196cb5a2f..d5b9ecbd99 100644 --- a/src/org/thoughtcrime/redphone/RedPhone.java +++ b/src/org/thoughtcrime/redphone/RedPhone.java @@ -61,6 +61,10 @@ public class RedPhone extends Activity { private static final int STANDARD_DELAY_FINISH = 1000; public static final int BUSY_SIGNAL_DELAY_FINISH = 5500; + public static final String ANSWER_ACTION = RedPhone.class.getCanonicalName() + ".ANSWER_ACTION"; + public static final String DENY_ACTION = RedPhone.class.getCanonicalName() + ".DENY_ACTION"; + public static final String END_CALL_ACTION = RedPhone.class.getCanonicalName() + ".END_CALL_ACTION"; + private CallScreen callScreen; private BroadcastReceiver bluetoothStateReceiver; @@ -87,6 +91,16 @@ public class RedPhone extends Activity { registerBluetoothReceiver(); } + @Override + public void onNewIntent(Intent intent){ + if (ANSWER_ACTION.equals(intent.getAction())) { + handleAnswerCall(); + } else if (DENY_ACTION.equals(intent.getAction())) { + handleDenyCall(); + } else if (END_CALL_ACTION.equals(intent.getAction())) { + handleEndCall(); + } + } @Override public void onPause() { @@ -151,6 +165,19 @@ public class RedPhone extends Activity { } } + private void handleEndCall() { + Log.w(TAG, "Hangup pressed, handling termination now..."); + Intent intent = new Intent(RedPhone.this, RedPhoneService.class); + intent.setAction(RedPhoneService.ACTION_HANGUP_CALL); + startService(intent); + + RedPhoneEvent event = EventBus.getDefault().getStickyEvent(RedPhoneEvent.class); + + if (event != null) { + RedPhone.this.handleTerminate(event.getRecipient()); + } + } + private void handleIncomingCall(@NonNull RedPhoneEvent event) { callScreen.setIncomingCall(event.getRecipient()); } @@ -303,16 +330,7 @@ public class RedPhone extends Activity { private class HangupButtonListener implements CallControls.HangupButtonListener { public void onClick() { - Log.w(TAG, "Hangup pressed, handling termination now..."); - Intent intent = new Intent(RedPhone.this, RedPhoneService.class); - intent.setAction(RedPhoneService.ACTION_HANGUP_CALL); - startService(intent); - - RedPhoneEvent event = EventBus.getDefault().getStickyEvent(RedPhoneEvent.class); - - if (event != null) { - RedPhone.this.handleTerminate(event.getRecipient()); - } + handleEndCall(); } } diff --git a/src/org/thoughtcrime/redphone/RedPhoneService.java b/src/org/thoughtcrime/redphone/RedPhoneService.java index bd493c45b2..7027988163 100644 --- a/src/org/thoughtcrime/redphone/RedPhoneService.java +++ b/src/org/thoughtcrime/redphone/RedPhoneService.java @@ -204,7 +204,8 @@ public class RedPhoneService extends Service implements CallStateListener, CallS if (remoteNumber == null || remoteNumber.length() == 0) return; - sendMessage(Type.OUTGOING_CALL, getRecipient(), null); + Recipient recipient = getRecipient(); + sendMessage(Type.OUTGOING_CALL, recipient, null); state = STATE_DIALING; lockManager.updatePhoneState(LockManager.PhoneState.INTERACTIVE); @@ -212,7 +213,7 @@ public class RedPhoneService extends Service implements CallStateListener, CallS remoteNumber, zid); this.currentCallManager.start(); - NotificationBarManager.setCallInProgress(this); + NotificationBarManager.setCallInProgress(this, NotificationBarManager.TYPE_OUTGOING_RINGING, recipient); DatabaseFactory.getSmsDatabase(this).insertOutgoingCall(remoteNumber); } @@ -389,7 +390,7 @@ public class RedPhoneService extends Service implements CallStateListener, CallS startCallCardActivity(); incomingRinger.start(); - NotificationBarManager.setCallInProgress(this); + NotificationBarManager.setCallInProgress(this, NotificationBarManager.TYPE_INCOMING_RINGING, getRecipient()); } public void notifyBusy() { @@ -414,7 +415,10 @@ public class RedPhoneService extends Service implements CallStateListener, CallS outgoingRinger.playComplete(); lockManager.updatePhoneState(LockManager.PhoneState.IN_CALL); state = STATE_CONNECTED; - sendMessage(Type.CALL_CONNECTED, getRecipient(), sas.getSasText()); + Recipient recipient = getRecipient(); + sendMessage(Type.CALL_CONNECTED, recipient, sas.getSasText()); + + NotificationBarManager.setCallInProgress(this, NotificationBarManager.TYPE_ESTABLISHED, recipient); } public void notifyConnectingtoInitiator() { diff --git a/src/org/thoughtcrime/redphone/ui/NotificationBarManager.java b/src/org/thoughtcrime/redphone/ui/NotificationBarManager.java index 30c304c307..f89755eb09 100644 --- a/src/org/thoughtcrime/redphone/ui/NotificationBarManager.java +++ b/src/org/thoughtcrime/redphone/ui/NotificationBarManager.java @@ -17,20 +17,15 @@ package org.thoughtcrime.redphone.ui; -import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; -import android.net.Uri; import android.support.v4.app.NotificationCompat; import org.thoughtcrime.redphone.RedPhone; -import org.thoughtcrime.securesms.ConversationActivity; import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.database.DatabaseFactory; -import org.thoughtcrime.securesms.recipients.RecipientFactory; -import org.thoughtcrime.securesms.recipients.Recipients; +import org.thoughtcrime.securesms.recipients.Recipient; /** * Manages the state of the RedPhone items in the Android notification bar. @@ -44,6 +39,10 @@ public class NotificationBarManager { private static final int RED_PHONE_NOTIFICATION = 313388; private static final int MISSED_CALL_NOTIFICATION = 313389; + public static final int TYPE_INCOMING_RINGING = 1; + public static final int TYPE_OUTGOING_RINGING = 2; + public static final int TYPE_ESTABLISHED = 3; + public static void setCallEnded(Context context) { NotificationManager notificationManager = (NotificationManager)context .getSystemService(Context.NOTIFICATION_SERVICE); @@ -51,20 +50,40 @@ public class NotificationBarManager { notificationManager.cancel(RED_PHONE_NOTIFICATION); } - public static void setCallInProgress(Context context) { + public static void setCallInProgress(Context context, int type, Recipient recipient) { NotificationManager notificationManager = (NotificationManager)context .getSystemService(Context.NOTIFICATION_SERVICE); Intent contentIntent = new Intent(context, RedPhone.class); contentIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, contentIntent, 0); - String notificationText = context.getString(R.string.NotificationBarManager_signal_call_in_progress); - Notification notification = new Notification(R.drawable.redphone_stat_sys_phone_call, null, - System.currentTimeMillis()); - notification.setLatestEventInfo(context, notificationText, notificationText, pendingIntent); - notification.flags = Notification.FLAG_NO_CLEAR; - notificationManager.notify(RED_PHONE_NOTIFICATION, notification); + NotificationCompat.Builder builder = new NotificationCompat.Builder(context) + .setSmallIcon(R.drawable.ic_call_secure_white_24dp) + .setContentIntent(pendingIntent) + .setOngoing(true) + .setContentTitle(recipient.getName()); + + if (type == TYPE_INCOMING_RINGING) { + builder.setContentText(context.getString(R.string.NotificationBarManager__incoming_signal_call)); + builder.addAction(getNotificationAction(context, RedPhone.DENY_ACTION, R.drawable.ic_close_grey600_32dp, R.string.NotificationBarManager__deny_call)); + builder.addAction(getNotificationAction(context, RedPhone.ANSWER_ACTION, R.drawable.ic_phone_grey600_32dp, R.string.NotificationBarManager__answer_call)); + } else if (type == TYPE_OUTGOING_RINGING) { + builder.setContentText(context.getString(R.string.NotificationBarManager__establishing_signal_call)); + builder.addAction(getNotificationAction(context, RedPhone.END_CALL_ACTION, R.drawable.ic_call_end_grey600_32dp, R.string.NotificationBarManager__cancel_call)); + } else { + builder.setContentText(context.getString(R.string.NotificationBarManager_signal_call_in_progress)); + builder.addAction(getNotificationAction(context, RedPhone.END_CALL_ACTION, R.drawable.ic_call_end_grey600_32dp, R.string.NotificationBarManager__end_call)); + } + + notificationManager.notify(RED_PHONE_NOTIFICATION, builder.build()); + } + + private static NotificationCompat.Action getNotificationAction(Context context, String action, int iconResId, int titleResId) { + Intent intent = new Intent(context, RedPhone.class); + intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); + intent.setAction(action); + PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); + return new NotificationCompat.Action(iconResId, context.getString(titleResId), pendingIntent); } - }