Skip to content

Commit 8e167f4

Browse files
committed
Make text input work with NativeActivity on Android
1 parent 80ca17c commit 8e167f4

6 files changed

Lines changed: 65 additions & 10 deletions

File tree

apps/browser/Dioxus.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[application]
2-
android_main_activity = "MainActivity.kt.hbs"
2+
android_main_activity = "MainActivity.kt"
33

44
[bundle]
55
publisher = "DioxusLabs"

apps/browser/MainActivity.kt

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package dev.dioxus.main
2+
3+
import android.app.NativeActivity
4+
import android.os.Bundle
5+
import android.view.View
6+
import android.view.ViewGroup
7+
import androidx.core.view.ViewCompat
8+
import androidx.core.view.OnApplyWindowInsetsListener
9+
import androidx.core.view.WindowInsetsCompat
10+
11+
// Makes basic text input work with NativeActivity
12+
// Copied from https://github.com/rust-mobile/android-activity/pull/178#issuecomment-2572817579
13+
class MainActivity : NativeActivity() { // ,OnApplyWindowInsetsListener {
14+
private fun getNativeActivityView(): View {
15+
// This is hacky as hell, but NativeActivity does not give any proper way of accessing it.
16+
var parent = window.decorView as ViewGroup
17+
parent = parent.getChildAt(0) as ViewGroup
18+
parent = parent.getChildAt(1) as ViewGroup
19+
return parent.getChildAt(0)
20+
}
21+
22+
override fun onCreate(savedInstanceState: Bundle?) {
23+
super.onCreate(savedInstanceState)
24+
25+
val nativeActivityView = getNativeActivityView()
26+
nativeActivityView.isFocusable = true
27+
nativeActivityView.isFocusableInTouchMode = true
28+
nativeActivityView.requestFocus()
29+
30+
// ViewCompat.setOnApplyWindowInsetsListener(nativeActivityView, this)
31+
}
32+
}

apps/browser/MainActivity.kt.hbs

Lines changed: 0 additions & 4 deletions
This file was deleted.

examples/todomvc/Dioxus.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
[application]
2-
android_main_activity = "MainActivity.kt.hbs"
2+
android_main_activity = "MainActivity.kt"

examples/todomvc/MainActivity.kt

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package dev.dioxus.main
2+
3+
import android.app.NativeActivity
4+
import android.os.Bundle
5+
import android.view.View
6+
import android.view.ViewGroup
7+
import androidx.core.view.ViewCompat
8+
import androidx.core.view.OnApplyWindowInsetsListener
9+
import androidx.core.view.WindowInsetsCompat
10+
11+
// Makes basic text input work with NativeActivity
12+
class MainActivity : NativeActivity() { // ,OnApplyWindowInsetsListener {
13+
private fun getNativeActivityView(): View {
14+
// This is hacky as hell, but NativeActivity does not give any proper way of accessing it.
15+
var parent = window.decorView as ViewGroup
16+
parent = parent.getChildAt(0) as ViewGroup
17+
parent = parent.getChildAt(1) as ViewGroup
18+
return parent.getChildAt(0)
19+
}
20+
21+
override fun onCreate(savedInstanceState: Bundle?) {
22+
super.onCreate(savedInstanceState)
23+
24+
val nativeActivityView = getNativeActivityView()
25+
nativeActivityView.isFocusable = true
26+
nativeActivityView.isFocusableInTouchMode = true
27+
nativeActivityView.requestFocus()
28+
29+
// ViewCompat.setOnApplyWindowInsetsListener(nativeActivityView, this)
30+
}
31+
}

examples/todomvc/MainActivity.kt.hbs

Lines changed: 0 additions & 4 deletions
This file was deleted.

0 commit comments

Comments
 (0)