diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ca55d98b0..ae30f332c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -182,6 +182,14 @@ + + + + + + + + diff --git a/app/src/main/java/io/homeassistant/companion/android/share/ShareActivity.kt b/app/src/main/java/io/homeassistant/companion/android/share/ShareActivity.kt new file mode 100644 index 000000000..b40c09670 --- /dev/null +++ b/app/src/main/java/io/homeassistant/companion/android/share/ShareActivity.kt @@ -0,0 +1,68 @@ +package io.homeassistant.companion.android.share + +import android.content.Intent +import android.os.Bundle +import android.util.Log +import android.widget.Toast +import androidx.appcompat.app.AppCompatActivity +import androidx.core.app.ActivityCompat +import io.homeassistant.companion.android.R +import io.homeassistant.companion.android.common.dagger.GraphComponentAccessor +import io.homeassistant.companion.android.common.data.integration.IntegrationRepository +import javax.inject.Inject +import kotlinx.coroutines.runBlocking +import okhttp3.HttpUrl.Companion.toHttpUrlOrNull + +class ShareActivity : AppCompatActivity() { + + companion object { + private const val TAG = "ShareActivity" + } + + @Inject + lateinit var integrationRepository: IntegrationRepository + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + DaggerShareComponent.builder() + .appComponent((application as GraphComponentAccessor).appComponent) + .build() + .inject(this) + + val data = mutableMapOf( + "caller" to ActivityCompat.getReferrer(this).toString() + ) + + if (intent?.action == Intent.ACTION_SEND) { + intent.getStringExtra(Intent.EXTRA_SUBJECT)?.let { + data["subject"] = it + } + intent.getStringExtra(Intent.EXTRA_TEXT)?.let { + if (it.toHttpUrlOrNull() == null) + data["text"] = it + else + data["url"] = it + } + } + runBlocking { + try { + integrationRepository.fireEvent("mobile_app.share", data) + Log.d(TAG, "Share successful!") + Toast.makeText( + applicationContext, + R.string.share_success, + Toast.LENGTH_SHORT + ).show() + } catch (e: Exception) { + Log.e(TAG, "Issue sharing with Home Assistant", e) + Toast.makeText( + applicationContext, + R.string.share_failed, + Toast.LENGTH_LONG + ).show() + } + } + finish() + } +} diff --git a/app/src/main/java/io/homeassistant/companion/android/share/ShareComponent.kt b/app/src/main/java/io/homeassistant/companion/android/share/ShareComponent.kt new file mode 100644 index 000000000..1e8f4e546 --- /dev/null +++ b/app/src/main/java/io/homeassistant/companion/android/share/ShareComponent.kt @@ -0,0 +1,10 @@ +package io.homeassistant.companion.android.share + +import dagger.Component +import io.homeassistant.companion.android.common.dagger.AppComponent + +@Component(dependencies = [AppComponent::class]) +interface ShareComponent { + + fun inject(activity: ShareActivity) +} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c1c1e2cc9..fb08a7e5b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -297,4 +297,6 @@ like to connect to: Service 30 Widget text size: + Shared with Home Assistant + Sharing with Home Assistant Failed!