Skip to content

Commit 7b0be42

Browse files
committed
feat(android): implement BrownfieldNavigationDelegate
1 parent 32ba266 commit 7b0be42

4 files changed

Lines changed: 142 additions & 1 deletion

File tree

apps/AndroidApp/app/src/main/AndroidManifest.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,14 @@
1313
android:supportsRtl="true"
1414
android:theme="@style/Theme.AndroidBrownfieldApp"
1515
android:usesCleartextTraffic="true">
16+
<activity
17+
android:name=".ReferralsActivity"
18+
android:exported="false"
19+
android:theme="@style/Theme.AndroidBrownfieldApp" />
20+
<activity
21+
android:name=".SettingsActivity"
22+
android:exported="false"
23+
android:theme="@style/Theme.AndroidBrownfieldApp" />
1624
<activity
1725
android:name=".MainActivity"
1826
android:exported="true"

apps/AndroidApp/app/src/main/java/com/callstack/brownfield/android/example/MainActivity.kt

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.callstack.brownfield.android.example
22

3+
import android.content.Intent
34
import android.content.res.Configuration
45
import android.os.Bundle
56
import android.widget.Toast
@@ -26,10 +27,12 @@ import androidx.fragment.compose.AndroidFragment
2627
import com.callstack.brownfield.android.example.components.GreetingCard
2728
import com.callstack.brownfield.android.example.components.PostMessageCard
2829
import com.callstack.brownfield.android.example.ui.theme.AndroidBrownfieldAppTheme
30+
import com.callstack.nativebrownfieldnavigation.BrownfieldNavigationDelegate
31+
import com.callstack.nativebrownfieldnavigation.BrownfieldNavigationManager
2932
import com.callstack.reactnativebrownfield.ReactNativeFragment
3033
import com.callstack.reactnativebrownfield.constants.ReactNativeFragmentArgNames
3134

32-
class MainActivity : AppCompatActivity() {
35+
class MainActivity : AppCompatActivity(), BrownfieldNavigationDelegate {
3336
override fun onConfigurationChanged(newConfig: Configuration) {
3437
super.onConfigurationChanged(newConfig)
3538

@@ -39,6 +42,7 @@ class MainActivity : AppCompatActivity() {
3942
override fun onCreate(savedInstanceState: Bundle?) {
4043
super.onCreate(null)
4144
enableEdgeToEdge()
45+
BrownfieldNavigationManager.setDelegate(this)
4246

4347
if (savedInstanceState == null) {
4448
ReactNativeHostManager.initialize(application) {
@@ -65,6 +69,19 @@ class MainActivity : AppCompatActivity() {
6569
}
6670
}
6771
}
72+
73+
override fun navigateToSettings() {
74+
startActivity(Intent(this, SettingsActivity::class.java))
75+
}
76+
77+
override fun navigateToReferrals(userId: String) {
78+
startActivity(
79+
Intent(this, ReferralsActivity::class.java).putExtra(
80+
ReferralsActivity.EXTRA_USER_ID,
81+
userId
82+
)
83+
)
84+
}
6885
}
6986

7087
@Composable
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package com.callstack.brownfield.android.example
2+
3+
import android.os.Bundle
4+
import androidx.activity.ComponentActivity
5+
import androidx.activity.compose.setContent
6+
import androidx.activity.enableEdgeToEdge
7+
import androidx.compose.foundation.layout.Arrangement
8+
import androidx.compose.foundation.layout.Column
9+
import androidx.compose.foundation.layout.fillMaxSize
10+
import androidx.compose.foundation.layout.padding
11+
import androidx.compose.material3.Button
12+
import androidx.compose.material3.MaterialTheme
13+
import androidx.compose.material3.Scaffold
14+
import androidx.compose.material3.Text
15+
import androidx.compose.ui.Alignment
16+
import androidx.compose.ui.Modifier
17+
import androidx.compose.ui.text.style.TextAlign
18+
import androidx.compose.ui.unit.dp
19+
import com.callstack.brownfield.android.example.ui.theme.AndroidBrownfieldAppTheme
20+
21+
class ReferralsActivity : ComponentActivity() {
22+
override fun onCreate(savedInstanceState: Bundle?) {
23+
super.onCreate(savedInstanceState)
24+
enableEdgeToEdge()
25+
26+
val userId = intent.getStringExtra(EXTRA_USER_ID).orEmpty()
27+
28+
setContent {
29+
AndroidBrownfieldAppTheme {
30+
Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
31+
Column(
32+
modifier = Modifier
33+
.fillMaxSize()
34+
.padding(innerPadding)
35+
.padding(24.dp),
36+
verticalArrangement = Arrangement.spacedBy(16.dp),
37+
horizontalAlignment = Alignment.CenterHorizontally
38+
) {
39+
Text(
40+
text = "Referrals",
41+
style = MaterialTheme.typography.headlineMedium
42+
)
43+
Text(
44+
text = "Opened from BrownfieldNavigation.navigateToReferrals(userId).",
45+
textAlign = TextAlign.Center
46+
)
47+
Text(
48+
text = "userId: $userId",
49+
style = MaterialTheme.typography.bodyLarge
50+
)
51+
Button(onClick = { finish() }) {
52+
Text("Go back")
53+
}
54+
}
55+
}
56+
}
57+
}
58+
}
59+
60+
companion object {
61+
const val EXTRA_USER_ID = "extra_user_id"
62+
}
63+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package com.callstack.brownfield.android.example
2+
3+
import android.os.Bundle
4+
import androidx.activity.ComponentActivity
5+
import androidx.activity.compose.setContent
6+
import androidx.activity.enableEdgeToEdge
7+
import androidx.compose.foundation.layout.Arrangement
8+
import androidx.compose.foundation.layout.Column
9+
import androidx.compose.foundation.layout.fillMaxSize
10+
import androidx.compose.foundation.layout.padding
11+
import androidx.compose.material3.Button
12+
import androidx.compose.material3.MaterialTheme
13+
import androidx.compose.material3.Scaffold
14+
import androidx.compose.material3.Text
15+
import androidx.compose.ui.Alignment
16+
import androidx.compose.ui.Modifier
17+
import androidx.compose.ui.text.style.TextAlign
18+
import androidx.compose.ui.unit.dp
19+
import com.callstack.brownfield.android.example.ui.theme.AndroidBrownfieldAppTheme
20+
21+
class SettingsActivity : ComponentActivity() {
22+
override fun onCreate(savedInstanceState: Bundle?) {
23+
super.onCreate(savedInstanceState)
24+
enableEdgeToEdge()
25+
26+
setContent {
27+
AndroidBrownfieldAppTheme {
28+
Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
29+
Column(
30+
modifier = Modifier
31+
.fillMaxSize()
32+
.padding(innerPadding)
33+
.padding(24.dp),
34+
verticalArrangement = Arrangement.spacedBy(16.dp),
35+
horizontalAlignment = Alignment.CenterHorizontally
36+
) {
37+
Text(
38+
text = "Settings",
39+
style = MaterialTheme.typography.headlineMedium
40+
)
41+
Text(
42+
text = "Opened from BrownfieldNavigation.navigateToSettings().",
43+
textAlign = TextAlign.Center
44+
)
45+
Button(onClick = { finish() }) {
46+
Text("Go back")
47+
}
48+
}
49+
}
50+
}
51+
}
52+
}
53+
}

0 commit comments

Comments
 (0)