From 4375eacf47d430f4ab646fa1d2493d734f90d2db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Thu, 7 May 2020 22:54:45 +0200 Subject: [PATCH] Add communication between WebServer and MainActivity --- app/build.gradle | 1 + app/src/main/java/io/bartek/MainActivity.kt | 44 ++++++++++++++++++++ app/src/main/java/io/bartek/web/WebServer.kt | 24 ++++++----- 3 files changed, 58 insertions(+), 11 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index d745082..df926e1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -32,6 +32,7 @@ dependencies { implementation 'androidx.core:core-ktx:1.2.0' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation 'org.nanohttpd:nanohttpd:2.2.0' + implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' diff --git a/app/src/main/java/io/bartek/MainActivity.kt b/app/src/main/java/io/bartek/MainActivity.kt index 177423d..ee6d86c 100644 --- a/app/src/main/java/io/bartek/MainActivity.kt +++ b/app/src/main/java/io/bartek/MainActivity.kt @@ -1,21 +1,64 @@ package io.bartek +import android.content.BroadcastReceiver +import android.content.Context import android.content.Intent +import android.content.IntentFilter import android.os.Build import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.provider.Settings import android.provider.Settings.* import android.view.View +import android.widget.Toast +import androidx.localbroadcastmanager.content.LocalBroadcastManager import io.bartek.service.ForegroundService class MainActivity : AppCompatActivity() { + private val receiver = object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + intent?.let { + when(intent.getStringExtra("STATE")) { + "STARTED" -> notifyOnStart() + "STOPPED" -> notifyOnStop() + } + } + } + } + private fun notifyOnStart() { + Toast.makeText( + this, + resources.getString(R.string.server_toast_service_started), + Toast.LENGTH_SHORT + ).show() + } + + private fun notifyOnStop() { + Toast.makeText( + this, + resources.getString(R.string.server_toast_service_stopped), + Toast.LENGTH_SHORT + ).show() + } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) + } + override fun onResume() { + super.onResume() + LocalBroadcastManager + .getInstance(this) + .registerReceiver(receiver, IntentFilter("io.bartek.web.server.CHANGE_STATE")) + } + + override fun onPause() { + LocalBroadcastManager + .getInstance(this) + .unregisterReceiver(receiver) + super.onPause() } fun startServer(view: View) = actionOnService(ForegroundService.START) @@ -36,4 +79,5 @@ class MainActivity : AppCompatActivity() { } } + } diff --git a/app/src/main/java/io/bartek/web/WebServer.kt b/app/src/main/java/io/bartek/web/WebServer.kt index d55107c..e5a87d7 100644 --- a/app/src/main/java/io/bartek/web/WebServer.kt +++ b/app/src/main/java/io/bartek/web/WebServer.kt @@ -1,8 +1,10 @@ package io.bartek.web import android.content.Context +import android.content.Intent import android.speech.tts.TextToSpeech import android.widget.Toast +import androidx.localbroadcastmanager.content.LocalBroadcastManager import fi.iki.elonen.NanoHTTPD import fi.iki.elonen.NanoHTTPD.Response.Status.* import io.bartek.R @@ -46,7 +48,7 @@ class TTSServer(port: Int, private val context: Context) : NanoHTTPD(port), throw ResponseException(METHOD_NOT_ALLOWED, "") } - if (session.headers["content-type"] ?. let { it != "application/json" } != false) { + if (session.headers["content-type"]?.let { it != "application/json" } != false) { throw ResponseException(BAD_REQUEST, "") } @@ -67,19 +69,19 @@ class TTSServer(port: Int, private val context: Context) : NanoHTTPD(port), override fun start() { super.start() - Toast.makeText( - context, - context.resources.getString(R.string.server_toast_service_started), - Toast.LENGTH_SHORT - ).show() + LocalBroadcastManager + .getInstance(context) + .sendBroadcast(Intent("io.bartek.web.server.CHANGE_STATE").also { + it.putExtra("STATE", "STARTED") + }) } override fun stop() { super.stop() - Toast.makeText( - context, - context.resources.getString(R.string.server_toast_service_stopped), - Toast.LENGTH_SHORT - ).show() + LocalBroadcastManager + .getInstance(context) + .sendBroadcast(Intent("io.bartek.web.server.CHANGE_STATE").also { + it.putExtra("STATE", "STOPPED") + }) } } \ No newline at end of file