Add the ability to share things (text) to Home Assistant. (#938)

* Add the ability to share things (text) to Home Assistant.

* Add caller package and subject if present.
This commit is contained in:
Justin Bassett 2020-09-15 20:45:42 -04:00 committed by GitHub
parent 75fbb9165b
commit 532ae9d366
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 88 additions and 0 deletions

View file

@ -182,6 +182,14 @@
<activity <activity
android:name=".nfc.NfcSetupActivity" android:name=".nfc.NfcSetupActivity"
android:label="@string/nfc_title_nfc_setup" /> android:label="@string/nfc_title_nfc_setup" />
<activity android:name=".share.ShareActivity">
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/*" />
</intent-filter>
</activity>
</application> </application>
</manifest> </manifest>

View file

@ -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()
}
}

View file

@ -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)
}

View file

@ -297,4 +297,6 @@ like to connect to:</string>
<string name="widget_text_hint_service_service">Service</string> <string name="widget_text_hint_service_service">Service</string>
<string name="widget_text_size_default">30</string> <string name="widget_text_size_default">30</string>
<string name="widget_text_size_label">Widget text size:</string> <string name="widget_text_size_label">Widget text size:</string>
<string name="share_success">Shared with Home Assistant</string>
<string name="share_failed">Sharing with Home Assistant Failed!</string>
</resources> </resources>