From b5616d5d70bf6b1071af8a08fe54e695cfcf41e3 Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Fri, 25 May 2018 18:33:12 +0300 Subject: [PATCH] replaced text buttons with image buttons stolen from jssip demo client --- .../kotlin/com/tutpro/baresip/MainActivity.kt | 170 +++++++++--------- app/src/main/res/drawable/call.png | Bin 0 -> 3952 bytes app/src/main/res/drawable/clock.png | Bin 0 -> 1355 bytes app/src/main/res/drawable/hangup.png | Bin 0 -> 2970 bytes app/src/main/res/drawable/hold.png | Bin 0 -> 2323 bytes app/src/main/res/drawable/resume.png | Bin 0 -> 2408 bytes app/src/main/res/layout/activity_main.xml | 57 +++--- 7 files changed, 113 insertions(+), 114 deletions(-) create mode 100644 app/src/main/res/drawable/call.png create mode 100644 app/src/main/res/drawable/clock.png create mode 100644 app/src/main/res/drawable/hangup.png create mode 100644 app/src/main/res/drawable/hold.png create mode 100644 app/src/main/res/drawable/resume.png diff --git a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt index faed01b0..6cc1e06c 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt @@ -11,7 +11,6 @@ import android.content.IntentFilter import android.content.pm.PackageManager import android.content.res.Configuration import android.graphics.Color -import android.graphics.PorterDuff import android.support.v4.app.ActivityCompat import android.support.v4.content.ContextCompat import android.support.v7.app.AlertDialog @@ -42,8 +41,9 @@ class MainActivity : AppCompatActivity() { internal lateinit var layout: RelativeLayout internal lateinit var callee: AutoCompleteTextView internal lateinit var securityButton: ImageButton - internal lateinit var callButton: Button - internal lateinit var holdButton: Button + internal lateinit var callButton: ImageButton + internal lateinit var holdButton: ImageButton + internal lateinit var historyButton: ImageButton internal lateinit var dtmf: EditText internal lateinit var uaAdapter: UaSpinnerAdapter internal lateinit var aorSpinner: Spinner @@ -62,8 +62,9 @@ class MainActivity : AppCompatActivity() { layout = findViewById(R.id.mainActivityLayout) as RelativeLayout callee = findViewById(R.id.callee) as AutoCompleteTextView securityButton = findViewById(R.id.securityButton) as ImageButton - callButton = findViewById(R.id.callButton) as Button - holdButton = findViewById(R.id.holdButton) as Button + callButton = findViewById(R.id.callButton) as ImageButton + holdButton = findViewById(R.id.holdButton) as ImageButton + historyButton = findViewById(R.id.historyButton) as ImageButton dtmf = findViewById(R.id.dtmf) as EditText filesPath = applicationContext.filesDir.absolutePath @@ -87,6 +88,7 @@ class MainActivity : AppCompatActivity() { override fun onReceive(context: Context, intent: Intent) { val intentExtras = intent.extras val info = intentExtras.getParcelable("networkInfo") + Log.d("Baresip", "Got event $info") if (running && (info.state == NetworkInfo.State.CONNECTED)) { Log.d("Baresip", "Registering upon CONNECTED event") UserAgent.register(uas) @@ -108,25 +110,23 @@ class MainActivity : AppCompatActivity() { if (callsOut.size == 0) { callee.text.clear() callee.hint = "Callee" - callButton.text = "Call" - callButton.setTextColor(Color.BLACK) - callButton.getBackground().clearColorFilter() + callButton.tag = "Call" + callButton.setImageResource(R.drawable.call) if (HistoryActivity.aorHistory(aor) > 0) { - holdButton.text = "History" - holdButton.visibility = View.VISIBLE + historyButton.visibility = View.VISIBLE } else { - holdButton.visibility = View.INVISIBLE + historyButton.visibility = View.INVISIBLE } securityButton.visibility = View.INVISIBLE dtmf.visibility = View.INVISIBLE } else { callee.setText(callsOut[0].peerURI) - callButton.text = callsOut[0].status + callButton.tag = callsOut[0].status if (callsOut[0].status == "Hangup") { if (callsOut[0].hold) { - holdButton.text = "Unhold" + holdButton.setImageResource(R.drawable.resume) } else { - holdButton.text = "Hold" + holdButton.setImageResource(R.drawable.hold) } holdButton.visibility = View.VISIBLE securityButton.setImageResource(callsOut[0].security) @@ -271,13 +271,11 @@ class MainActivity : AppCompatActivity() { } } - callButton.text = "Call" - callButton.getBackground().clearColorFilter() - callButton.setBackgroundResource(android.R.drawable.btn_default) + callButton.tag = "Call" callButton.setOnClickListener { val ua = uas[aorSpinner.selectedItemPosition] val aor = ua.aor - when (callButton.text.toString()) { + when (callButton.tag) { "Call" -> { val callee = (findViewById(R.id.callee) as EditText).text.toString() if (callee.length > 0) { @@ -305,33 +303,38 @@ class MainActivity : AppCompatActivity() { } } - val holdButton = findViewById(R.id.holdButton) as Button + holdButton.tag = "Hold" + holdButton.visibility = View.INVISIBLE holdButton.setOnClickListener { - when (holdButton.text.toString()) { + when (holdButton.tag) { "Hold" -> { - Log.i("Baresip", "Holding up " + (findViewById(R.id.callee) as EditText).text) + Log.i("Baresip", "Holding " + (findViewById(R.id.callee) as EditText).text) val call = Call.calls(calls, "out")[0] call_hold(call.callp) call.hold = true - holdButton.text = "Unhold" + holdButton.tag= "Resume" + holdButton.setImageResource(R.drawable.resume) } - "Unhold" -> { - Log.i("Baresip", "Unholding " + (findViewById(R.id.callee) as EditText).text) + "Resume" -> { + Log.i("Baresip", "Resuming " + (findViewById(R.id.callee) as EditText).text) val call = Call.calls(calls, "out")[0] call_unhold(call.callp) call.hold = false - holdButton.text = "Hold" - } - "History" -> { - val i = Intent(this@MainActivity, HistoryActivity::class.java) - val b = Bundle() - b.putString("aor", uas[aorSpinner.selectedItemPosition].aor) - i.putExtras(b) - startActivityForResult(i, HISTORY_CODE) + holdButton.tag= "Hold" + holdButton.setImageResource(R.drawable.hold) } } } + historyButton.visibility = View.INVISIBLE + historyButton.setOnClickListener { + val i = Intent(this@MainActivity, HistoryActivity::class.java) + val b = Bundle() + b.putString("aor", uas[aorSpinner.selectedItemPosition].aor) + i.putExtras(b) + startActivityForResult(i, HISTORY_CODE) + } + if (!running) { Log.i("Baresip", "Starting Baresip with path $path") if (!Utils.isConnected(this)) { @@ -475,7 +478,7 @@ class MainActivity : AppCompatActivity() { if (resultCode == RESULT_CANCELED) { Log.d("Baresip", "History canceled") if (HistoryActivity.aorHistory(uas[aorSpinner.selectedItemPosition].aor) == 0) { - (findViewById(R.id.holdButton) as Button).visibility = View.INVISIBLE + holdButton.visibility = View.INVISIBLE } } } @@ -504,11 +507,9 @@ class MainActivity : AppCompatActivity() { } } calls.add(Call(call, ua, uri, "out","Cancel", dtmfWatcher)) - val callButton = findViewById(R.id.callButton) as Button - callButton.text = "Cancel" - callButton.getBackground().setColorFilter(0xFFFF0000.toInt(), PorterDuff.Mode.MULTIPLY) - callButton.setTextColor(Color.WHITE) - (findViewById(R.id.holdButton) as Button).visibility = View.INVISIBLE + callButton.tag = "Cancel" + callButton.setImageResource(R.drawable.hangup) + holdButton.visibility = View.INVISIBLE } } @@ -606,18 +607,15 @@ class MainActivity : AppCompatActivity() { answer_row_params.addRule(RelativeLayout.BELOW, caller_row.id) answer_row.layoutParams = answer_row_params - val answer_button = Button(appContext) - answer_button.text = call.status - if (answer_button.text == "Answer") { - answer_button.getBackground().setColorFilter(0xFF00FF00.toInt(), PorterDuff.Mode.MULTIPLY) - answer_button.setTextColor(Color.WHITE) - } else { - answer_button.getBackground().setColorFilter(0xFFFF0000.toInt(), PorterDuff.Mode.MULTIPLY) - answer_button.setTextColor(Color.WHITE) - } + val answer_button = ImageButton(appContext) + answer_button.tag = call.status + if (answer_button.tag == "Answer") + answer_button.setImageResource(R.drawable.call) + else + answer_button.setImageResource(R.drawable.hangup) answer_button.id = answer_row.id + 1 answer_button.setOnClickListener { v -> - when ((v as Button).text.toString()) { + when ((v as ImageButton).tag) { "Answer" -> { Log.i("Baresip", "UA ${call.ua.uap} accepting incoming call ${call.callp}") ua_answer(call.ua.uap, call.callp) @@ -627,15 +625,13 @@ class MainActivity : AppCompatActivity() { call.hold = false this@MainActivity.runOnUiThread { Log.d("Baresip", "Setting answer button at ${answer_button.id} to Hangup") - val answer_button = layout.findViewById(answer_button.id) as Button - answer_button.text = "Hangup" - answer_button.getBackground().setColorFilter(0xFFFF00000.toInt(), PorterDuff.Mode.MULTIPLY) - answer_button.setTextColor(Color.WHITE) + // val answer_button = layout.findViewById(answer_button.id) as ImageButton + answer_button.tag = "Hangup" + answer_button.setImageResource(R.drawable.hangup) Log.d("Baresip", "Setting reject button at ${answer_button.id + 1} to Hold") - val reject_button = layout.findViewById(answer_button.id + 1) as Button - reject_button.text = "Hold" - reject_button.getBackground().clearColorFilter() - reject_button.setTextColor(Color.BLACK) + val reject_button = layout.findViewById(answer_button.id + 1) as ImageButton + reject_button.tag = "Hold" + reject_button.setImageResource(R.drawable.hold) } } } @@ -643,33 +639,33 @@ class MainActivity : AppCompatActivity() { Log.i("Baresip", "UA ${call.ua.uap} hanging up call ${call.callp}") ua_hangup(call.ua.uap, call.callp, 200, "OK") } - else -> Log.e("Baresip", "Invalid answer button text: " + v.text.toString()) + else -> Log.e("Baresip", "Invalid answer button tag: " + v.tag) } } - val answer_button_params = LayoutParams(resources.getDimensionPixelSize(R.dimen.button_width), + val answer_button_params = LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT) answer_button_params.setMargins(3, 10, 0, 0) answer_button.layoutParams = answer_button_params + answer_button.setPadding(0, 0, 0, 0) Log.d("Baresip", "Adding answer button at ${answer_button.id}") answer_row.addView(answer_button) - val reject_button = Button(appContext) + val reject_button = ImageButton(appContext) if (call.status == "Answer") { - reject_button.text = "Reject" - reject_button.getBackground().setColorFilter(0xFFFF0000.toInt(), PorterDuff.Mode.MULTIPLY) - reject_button.setTextColor(Color.WHITE) + reject_button.tag = "Reject" + reject_button.setImageResource(R.drawable.hangup) } else { - reject_button.setBackgroundResource(android.R.drawable.btn_default) - reject_button.setTextColor(Color.BLACK) if (call.hold) { - reject_button.text = "Unhold" + reject_button.tag = "Resume" + reject_button.setImageResource(R.drawable.resume) } else { - reject_button.text = "Hold" + reject_button.tag = "Hold" + reject_button.setImageResource(R.drawable.hold) } } reject_button.id = answer_button.id + 1 reject_button.setOnClickListener { v -> - when ((v as Button).text.toString()) { + when ((v as ImageButton).tag) { "Reject" -> { Log.i("Baresip", "UA " + call.ua + " rejecting incoming call " + call.callp) @@ -677,20 +673,23 @@ class MainActivity : AppCompatActivity() { } "Hold" -> { call_hold(call.callp) - v.text = "Unhold" + v.tag = "Resume" + reject_button.setImageResource(R.drawable.resume) call.hold = true } - "Unhold" -> { + "Resume" -> { call_unhold(call.callp) - v.text = "Hold" + v.tag = "Hold" + reject_button.setImageResource(R.drawable.hold) call.hold = false } } } - val reject_button_params = LayoutParams(resources.getDimensionPixelSize(R.dimen.button_width), + val reject_button_params = LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT) reject_button_params.setMargins(16, 10, 0, 0) reject_button.layoutParams = reject_button_params + reject_button.setPadding(0, 0, 0, 0) Log.d("Baresip", "Adding reject button at ${reject_button.id}") answer_row.addView(reject_button) @@ -779,10 +778,10 @@ class MainActivity : AppCompatActivity() { call.security = R.drawable.box_red this@MainActivity.runOnUiThread { if (ua == uas[aorSpinner.selectedItemPosition]) { - callButton.text = "Hangup" - callButton.setTextColor(Color.WHITE) - callButton.getBackground().setColorFilter(0xFFFF0000.toInt(), PorterDuff.Mode.MULTIPLY) - holdButton.text = "Hold" + callButton.tag = "Hangup" + callButton.setImageResource(R.drawable.hangup) + holdButton.tag = "Hold" + holdButton.setImageResource(R.drawable.hold) holdButton.visibility = View.VISIBLE if (acc.mediaenc == "") { securityButton.visibility = View.INVISIBLE @@ -809,14 +808,14 @@ class MainActivity : AppCompatActivity() { if (ua == uas[aorSpinner.selectedItemPosition]) { if (acc.mediaenc != "") { val inIndex = Call.index(calls, call, "in") - var view_id = (inIndex + 1) * 10 + 3 + val view_id = (inIndex + 1) * 10 + 3 val securityButton = findViewById(view_id) as ImageButton securityButton.setImageResource(R.drawable.box_red) securityButton.tag = "red" securityButton.visibility = View.VISIBLE - view_id = (inIndex + 1) * 10 + 6 - val rejectButton = findViewById(view_id) as Button - rejectButton.text = "Hold" + val rejectButton = findViewById(view_id + 3) as ImageButton + rejectButton.tag = "Hold" + rejectButton.setImageResource(R.drawable.hold) } } } @@ -944,9 +943,7 @@ class MainActivity : AppCompatActivity() { calls.removeAt(Call.index(calls, call, "")) this@MainActivity.runOnUiThread { if (ua == uas[aorSpinner.selectedItemPosition]) { - if (callButton.text == "Call") { - holdButton.text = "History" - holdButton.visibility = View.VISIBLE + if (callButton.tag == "Call") { callee.setOnKeyListener(null) } val caller_heading = layout.findViewById(view_id) @@ -969,14 +966,12 @@ class MainActivity : AppCompatActivity() { call.peerURI) this@MainActivity.runOnUiThread { if (ua == uas[aorSpinner.selectedItemPosition]) { - callButton.text = "Call" - callButton.setTextColor(Color.BLACK) - callButton.getBackground().clearColorFilter() + callButton.tag = "Call" + callButton.setImageResource(R.drawable.call) callButton.isEnabled = true callee.setText("") callee.hint = "Callee" - holdButton.text = "History" - holdButton.visibility = View.VISIBLE + holdButton.visibility = View.INVISIBLE if (this.currentFocus == dtmf) { imm.hideSoftInputFromWindow(dtmf.getWindowToken(), 0) } @@ -993,6 +988,7 @@ class MainActivity : AppCompatActivity() { "out", false)) } } + historyButton.visibility = View.VISIBLE if (calls.size == 0) am.mode = AudioManager.MODE_NORMAL } else -> Log.d("Baresip", "Unknown event '${ev[0]}'") diff --git a/app/src/main/res/drawable/call.png b/app/src/main/res/drawable/call.png new file mode 100644 index 0000000000000000000000000000000000000000..13226723f4c6d9aea722a7200962cfff9c16493b GIT binary patch literal 3952 zcmV-$50CJPP)8N$Q3bSaZfz2$cIeEXc4 z@k~%jTZGus*4bxfpL5oKUHs`lFvXfsEe#+9yx)x1YYj z&-~6rqt%)^T&p$aT?j4boFHN%Vqzcyh#=x|0)l`EA`XYci6BzFul~m9y%TT_k3*b8 zoZtWx!%R^#j6~9eS`yVH!#K2duid?O@9w=DS2owKe3{;_{Lu+Skk5VQmIZ*1fAV2I z`{`u>CMKsI3q|7>T_~RN-p@Jj#ECNzLA=8OPTURvafmp)2oUgOL&pHb<6OSZMtdCj zeh~pDI{;Ksi$pC^OC*gF%3yf8k8#nRbzivh<@Fan|0lQj`9C;pz)l1{_J=2$zE=M+ zt%YBAq4;o7)J_#eC_)H$@A1JCyvO_e8hoHu6cmNWxqzt0yMiEr;5^<3f(v+G;3W`z zb?pM)SCMfUgqe{v5>rVT2Ml+egV?9r@5Jr)=8g6B`~P(F#`0g^xUzof(m&Jt=qFAP zMgW?JCJ*DnFDLQ8;EUSnTD|UT^@30YiV!G@K&=QAwSX_O_jTy-R-;~PGBMGhQEO26 zI)w`qp&D+BpzP5vdvph#TD@666I1-i z^wf0k`004}65BUE_nBL`5rCrEoDcQdlSQqz!OY-XT_Sb>j|gy90A zKZnH{f*=mWIS^OX0@+XjL&vF-ERr;lH0IMHYFgc6Rjq+IArygnz3CeD#!|D{dh*cB z?EJ{?aRiD`Ybwk}bHPLa!*u6VO~hzu^0?syGmRw<&!6N_<0zU+R@#>t4mL3cn6L6V zC8AFR7xAvdJD=-fXY6Jo2eF#M{Q?J*X`v5rc0w4yO z&EG{{8Gztv`ZE|(Ci*hsVaV{n#G)0|SNBx*^i!#&1FjTOCS z%=-YCR8F@s2C)3&s)-;CW*Uo}Id+~$PoAgI3=Fl;Aa=ooqYKBly?KnS-Wt(u#C)UTh;dKm_lZoME#*&$tSq}G)v$}niPPtAQ2bgI#-X*f| z$muh#4O6sABO65^<&?>(6p1O3%7m7Ql#Fyx1T-gXMVW@EpemRsPOakR>@y6+tV)BN zZXysupxK~t+35+INLEE6Mq*UTn5ot*fkqBu zA=EiiOsE->6cqt6)G5QVPk-1Zr3m6MWDG(i^Ln@6XJdPfjozDd<2vR_i~>QcrnW<$ zj5#A0ua33Qs3#<1%x6kUSw>RQ+?V9Q6xzxEl+xI%;vglZJLs_0xyP{VR|*tN1Xo@6 z2LrCJe2c5A7g=pzW1t`01!b^ zl|rd%=PoNxONs67I`_8j(Cv4|#^g+JbOvp1u3hHaH=gCq&C5g?;(fsRfT)g(H*@D6 z|5p*nHIPyjh3Yz{NQzkjl*3#HmNci`{uFYU#oRHIB9+Du0$5_Jd!Lo{TWohXsv@#1 zhfVn2=57At%HOlHc^wragd#gYBQgRinL5Xj7!gL*rOk2?rz!(9B~nb3DT66vmKnJ| zbw2Gj*J+`rA%piQIR1Qe0%`H|rx zyXAosQu*@?+2<0COCvCM3ws_be5 z4>Yo>D<;)Um6fJ-K6|p;+h+OBC63OV;?d*p!3FT%GdnfUV~ZEq9^7ZOeT|e7g|AiY zM2-YIGQ}(lFLV@v{JUzo{zf&BRC5iaL@X1rjA$|}>03kqK~0G%Rl{#W4T3qG7Y1p_ z+Qx0JuUz8R+GQ3OPSI?%m}*UP?$i^kZhn`|_I=ueHIi4ntK~6rkFsTl3ab>d3P{qC z49{oOij|_~P8?IkSO?ZX^(85z1{p^M^Eh)DiVk{wclC8HUU`4p+$u%Y#ka%|t1uPRxbPTLP#irldxU zX5m~2krg7C=6bM%HC+Wl>=uD(dGzfBAg=Zc-) zF?LinfmL!khs2HRAf-_;SA`rCq?lC!2NiK8Z?!^gRZ4jS^@gg$dxr^>vCFNsWxoFE zm#7y_9$R`G=Y{FXLp*x&Jl#QuvK(-2^;>j@+XP?YTu~|B%9G}(yD17+V{>qqVd{

a&5f(vzJHyK&Kmu)TZz7$ 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 N002ovPDHLkV1gp*d87aU literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/hangup.png b/app/src/main/res/drawable/hangup.png new file mode 100644 index 0000000000000000000000000000000000000000..75786e9ed820d182d9b3113471082f301a75d56f GIT binary patch literal 2970 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/hold.png b/app/src/main/res/drawable/hold.png new file mode 100644 index 0000000000000000000000000000000000000000..ac313acab2ea85fd7f95747aa695ccbf2aa9a068 GIT binary patch literal 2323 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 90409f63..0d3f4cf9 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -31,7 +31,7 @@ android:layout_height="wrap_content" android:layout_below="@id/AoRList" android:paddingTop="16dp" - android:paddingLeft="3dp" + android:paddingStart="3dp" android:textSize="20sp" android:textColor="@android:color/black" android:text="Outgoing call to ..." > @@ -62,53 +62,56 @@ android:layout_weight = "0" android:layout_gravity = "center_vertical" android:visibility="invisible" - android:contentDescription="@string/app_name" - > + android:contentDescription="@string/app_name" > - + android:layout_below="@id/calleeRow" + android:padding="0dp" + android:src="@drawable/call" > + - - - + + android:hint="DTMF" + android:visibility="invisible" > + + +