diff --git a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt index 2de79e56..cd8bccd2 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt @@ -21,17 +21,18 @@ import android.widget.RelativeLayout.LayoutParams import android.widget.AutoCompleteTextView import android.view.* import android.util.Log - -import java.util.* -import java.io.* import android.widget.RelativeLayout import android.media.AudioManager +import android.support.v7.app.NotificationCompat import android.support.v7.view.menu.ActionMenuItemView import android.text.Editable import android.text.TextWatcher import android.view.inputmethod.InputMethodManager import android.widget.EditText +import java.util.* +import java.io.* + class MainActivity : AppCompatActivity() { internal lateinit var appContext: Context @@ -46,6 +47,7 @@ class MainActivity : AppCompatActivity() { internal lateinit var am: AudioManager internal lateinit var imm: InputMethodManager internal lateinit var nm: NotificationManager + internal lateinit var nb: NotificationCompat.Builder override fun onCreate(savedInstanceState: Bundle?) { @@ -60,8 +62,20 @@ class MainActivity : AppCompatActivity() { holdButton = findViewById(R.id.holdButton) as Button dtmf = findViewById(R.id.dtmf) as EditText - am = appContext.getSystemService(Context.AUDIO_SERVICE) as AudioManager + am = getSystemService(Context.AUDIO_SERVICE) as AudioManager imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager + nm = getSystemService(NOTIFICATION_SERVICE) as NotificationManager + + nb = NotificationCompat.Builder(this) + nb.setVisibility(VISIBILITY_PUBLIC).setOngoing(true).setSmallIcon(R.drawable.ic_stat) + .setContentIntent( + PendingIntent.getActivity(this, NOTIFICATION_ID, + Intent(this, MainActivity::class.java) + .setAction(Intent.ACTION_MAIN) + .addCategory(Intent.CATEGORY_LAUNCHER) + .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK), + PendingIntent.FLAG_UPDATE_CURRENT)) + .setContent(RemoteViews(getPackageName(), R.layout.notification)) aorSpinner = findViewById(R.id.AoRList) as Spinner accountAdapter = AccountSpinnerAdapter(applicationContext, aors, images) @@ -263,7 +277,7 @@ class MainActivity : AppCompatActivity() { if (!running) { Log.i("Baresip", "Starting Baresip with path $path") - statusBarIcon(NOTIFICATION_ID, "") + nm.notify(NOTIFICATION_ID, nb.build()) Thread(Runnable { baresipStart(path) }).start() running = true } @@ -365,40 +379,47 @@ class MainActivity : AppCompatActivity() { } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - if (requestCode == EDIT_ACCOUNTS_CODE) { - if (resultCode == RESULT_OK) { - Utils.alertView(this, "Notice", - "You need to restart baresip in order to activate saved accounts!") - } - if (resultCode == RESULT_CANCELED) { - Log.d("Baresip", "Edit accounts canceled") - } - } - if (requestCode == EDIT_CONFIG_CODE) { - if (resultCode == RESULT_OK) { - Utils.alertView(this, "Notice", - "You need to restart baresip in order to activate saved config!") - reload_config() - } - if (resultCode == RESULT_CANCELED) { - Log.d("Baresip", "Edit config canceled") - } - } - if (requestCode == HISTORY_CODE) { - if (resultCode == RESULT_OK) { - if (data != null) { - (findViewById(R.id.callee) as EditText).setText(data.getStringExtra("peer_uri")) + + when (requestCode) { + + EDIT_ACCOUNTS_CODE -> { + if (resultCode == RESULT_OK) { + Utils.alertView(this, "Notice", + "You need to restart baresip in order to activate saved accounts!") + } + if (resultCode == RESULT_CANCELED) { + Log.d("Baresip", "Edit accounts canceled") } } - if (resultCode == RESULT_CANCELED) { - Log.d("Baresip", "History canceled") - if (HistoryActivity.aorHistory(aors[aorSpinner.selectedItemPosition]) == 0) { - (findViewById(R.id.holdButton) as Button).visibility = View.INVISIBLE + + EDIT_CONFIG_CODE -> { + if (resultCode == RESULT_OK) { + Utils.alertView(this, "Notice", + "You need to restart baresip in order to activate saved config!") + reload_config() + } + if (resultCode == RESULT_CANCELED) { + Log.d("Baresip", "Edit config canceled") } } - } - if (requestCode == EDIT_CONTACTS_CODE || requestCode == ABOUT_CODE) { - Log.d("Baresip", "Back arrow or Cancel pressed at request: $requestCode") + + HISTORY_CODE -> { + if (resultCode == RESULT_OK) { + if (data != null) { + (findViewById(R.id.callee) as EditText).setText(data.getStringExtra("peer_uri")) + } + } + if (resultCode == RESULT_CANCELED) { + Log.d("Baresip", "History canceled") + if (HistoryActivity.aorHistory(aors[aorSpinner.selectedItemPosition]) == 0) { + (findViewById(R.id.holdButton) as Button).visibility = View.INVISIBLE + } + } + } + + EDIT_CONTACTS_CODE, ABOUT_CODE -> { + Log.d("Baresip", "Back arrow or Cancel pressed at request: $requestCode") + } } } @@ -572,38 +593,23 @@ class MainActivity : AppCompatActivity() { layout.addView(reject_button) } - private fun statusBarIcon(id: Int, status: String) { - val ni = Intent(this, MainActivity::class.java) - .setAction(Intent.ACTION_MAIN) - .addCategory(Intent.CATEGORY_LAUNCHER) - .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - val pi = PendingIntent.getActivity(this, id, ni, PendingIntent.FLAG_UPDATE_CURRENT) - nm = getSystemService(NOTIFICATION_SERVICE) as NotificationManager - val notification = Notification.Builder(this) - .setSmallIcon(R.drawable.ic_stat) - .setContentTitle("Baresip is running${status}!") - .setVisibility(VISIBILITY_PUBLIC) - .setContentIntent(pi) - .setOngoing(true).build() - nm.notify(id, notification) - } - private fun updateNotification() { - var status: String = "" - for (image in images) { - when (image) { - R.drawable.dot_red -> { - status = status + " X" - } - R.drawable.dot_yellow -> { - status = status + " ?" - } - R.drawable.dot_green -> { - status = status + " OK" - } + val contentView = RemoteViews(getPackageName(), R.layout.notification) + for (i: Int in 0 .. 3) { + val resID = resources.getIdentifier("status$i", "id", packageName); + if (i < images.size) { + contentView.setImageViewResource(resID, images[i]) + contentView.setViewVisibility(resID, View.VISIBLE) + } else { + contentView.setViewVisibility(resID, View.INVISIBLE) } } - statusBarIcon(NOTIFICATION_ID, status) + if (images.size > 4) + contentView.setViewVisibility(R.id.etc, View.VISIBLE) + else + contentView.setViewVisibility(R.id.etc, View.INVISIBLE) + nb.setContent(contentView); + nm.notify(NOTIFICATION_ID, nb.build()) } @Keep @@ -923,13 +929,13 @@ class MainActivity : AppCompatActivity() { internal var callsIn = ArrayList() internal var callsOut = ArrayList() - const val RECORD_AUDIO_PERMISSION = 1 const val EDIT_ACCOUNTS_CODE = 1 const val EDIT_CONTACTS_CODE = 2 const val EDIT_CONFIG_CODE = 3 const val HISTORY_CODE = 4 const val ABOUT_CODE = 5 + const val RECORD_AUDIO_PERMISSION = 1 const val HISTORY_SIZE = 100 const val NOTIFICATION_ID = 10 diff --git a/app/src/main/res/layout/notification.xml b/app/src/main/res/layout/notification.xml new file mode 100644 index 00000000..880bf467 --- /dev/null +++ b/app/src/main/res/layout/notification.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + +