mirror of
https://github.com/home-assistant/android
synced 2024-09-18 23:52:51 +00:00
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:
parent
75fbb9165b
commit
532ae9d366
|
@ -182,6 +182,14 @@
|
|||
<activity
|
||||
android:name=".nfc.NfcSetupActivity"
|
||||
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>
|
||||
|
||||
</manifest>
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
|
@ -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)
|
||||
}
|
|
@ -297,4 +297,6 @@ like to connect to:</string>
|
|||
<string name="widget_text_hint_service_service">Service</string>
|
||||
<string name="widget_text_size_default">30</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>
|
||||
|
|
Loading…
Reference in a new issue