@@ -7,10 +7,12 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.os.bundleOf
import androidx.core.view.WindowCompat
import androidx.navigation.findNavController
import androidx.navigation.fragment.findNavController
import javax.inject.Inject
import ltd.evilcorp.atox.di.ViewModelFactory
import ltd.evilcorp.atox.settings.Settings
import ltd.evilcorp.atox.ui.contactlist.ARG_SHARE
private const val TAG = "MainActivity"
private const val SCHEME = "tox:"
@@ -36,22 +38,41 @@ class MainActivity : AppCompatActivity() {
WindowCompat.setDecorFitsSystemWindows(window, false)
setContentView(R.layout.activity_main)
// Handle potential tox link, but only the first time it triggers the app.
if (savedInstanceState == null && intent.action == Intent.ACTION_VIEW) {
val data = intent.dataString ?: ""
Log.i(TAG, "Got uri with data: $data")
if (!data.startsWith(SCHEME) || data.length != SCHEME.length + TOX_ID_LENGTH) {
Log.e(TAG, "Got malformed uri: $data")
return
}
// Only handle intent the first time it triggers the app.
if (savedInstanceState != null) return
when (intent.action) {
// Handle potential tox link
Intent.ACTION_VIEW -> {
val data = intent.dataString ?: ""
Log.i(TAG, "Got uri with data: $data")
if (!data.startsWith(SCHEME) || data.length != SCHEME.length + TOX_ID_LENGTH) {
Log.e(TAG, "Got malformed uri: $data")
return
}
supportFragmentManager.findFragmentById(R.id.nav_host_fragment)?.findNavController()?.navigate(
R.id.action_contactListFragment_to_addContactFragment,
bundleOf("toxId" to data.drop(SCHEME.length))
)
supportFragmentManager.findFragmentById(R.id.nav_host_fragment)?.findNavController()?.navigate(
R.id.action_contactListFragment_to_addContactFragment,
bundleOf("toxId" to data.drop(SCHEME.length))
)
}
Intent.ACTION_SEND -> handleShareIntent(intent)
}
}
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
if (intent?.action != Intent.ACTION_SEND) return
val nav = supportFragmentManager.findFragmentById(R.id.nav_host_fragment)?.findNavController()
if (nav == null) {
Log.e(TAG, "Unable to find navController to handle intent $intent")
return
}
nav.popBackStack(R.id.contactListFragment, false)
handleShareIntent(intent)
}
override fun onPause() {
super.onPause()
autoAway.onBackground()
@@ -61,4 +82,22 @@ class MainActivity : AppCompatActivity() {
super.onResume()
autoAway.onForeground()
}
private fun handleShareIntent(intent: Intent) {
if (intent.type != "text/plain") {
Log.e(TAG, "Got unsupported share type ${intent.type}")
return
}
val data = intent.getStringExtra(Intent.EXTRA_TEXT)
if (data.isNullOrEmpty()) {
Log.e(TAG, "Got share intent with no data")
return
}
Log.i(TAG, "Got text share: $data")
val navController =
supportFragmentManager.findFragmentById(R.id.nav_host_fragment)?.findNavController() ?: return
navController.setGraph(navController.graph, bundleOf(ARG_SHARE to data))
}
}