diff --git a/.changeset/red-llamas-love.md b/.changeset/red-llamas-love.md new file mode 100644 index 00000000..7e97b291 --- /dev/null +++ b/.changeset/red-llamas-love.md @@ -0,0 +1,8 @@ +--- +'@callstack/brownie': minor +'@callstack/brownfield-cli': minor +'brownfield': minor +'@callstack/react-native-brownfield': minor +--- + +add brownie android diff --git a/apps/AndroidApp/app/build.gradle.kts b/apps/AndroidApp/app/build.gradle.kts index 2b6cd3a6..f724fdcd 100644 --- a/apps/AndroidApp/app/build.gradle.kts +++ b/apps/AndroidApp/app/build.gradle.kts @@ -49,11 +49,11 @@ android { } } compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 } kotlinOptions { - jvmTarget = "11" + jvmTarget = "17" } buildFeatures { compose = true @@ -61,6 +61,7 @@ android { } dependencies { + implementation("com.google.code.gson:gson:2.13.1") implementation(libs.androidx.core.ktx) implementation(libs.androidx.lifecycle.runtime.ktx) implementation(libs.androidx.activity.compose) diff --git a/apps/AndroidApp/app/src/expo/java/com/callstack/brownfield/android/example/BrownfieldStore.kt b/apps/AndroidApp/app/src/expo/java/com/callstack/brownfield/android/example/BrownfieldStore.kt new file mode 100644 index 00000000..c7499219 --- /dev/null +++ b/apps/AndroidApp/app/src/expo/java/com/callstack/brownfield/android/example/BrownfieldStore.kt @@ -0,0 +1,4 @@ +package com.callstack.brownfield.android.example + +typealias BrownfieldStore = com.callstack.rnbrownfield.demo.expoapp.BrownfieldStore +typealias User = com.callstack.rnbrownfield.demo.expoapp.User diff --git a/apps/AndroidApp/app/src/main/java/com/callstack/brownfield/android/example/MainActivity.kt b/apps/AndroidApp/app/src/main/java/com/callstack/brownfield/android/example/MainActivity.kt index 1d265bc0..4765cbbb 100644 --- a/apps/AndroidApp/app/src/main/java/com/callstack/brownfield/android/example/MainActivity.kt +++ b/apps/AndroidApp/app/src/main/java/com/callstack/brownfield/android/example/MainActivity.kt @@ -26,6 +26,7 @@ import androidx.fragment.compose.AndroidFragment import com.callstack.brownfield.android.example.components.GreetingCard import com.callstack.brownfield.android.example.components.PostMessageCard import com.callstack.brownfield.android.example.ui.theme.AndroidBrownfieldAppTheme +import com.callstack.brownie.registerStoreIfNeeded import com.callstack.reactnativebrownfield.ReactNativeFragment import com.callstack.reactnativebrownfield.constants.ReactNativeFragmentArgNames @@ -48,6 +49,15 @@ class MainActivity : AppCompatActivity() { Toast.LENGTH_LONG ).show() } + + registerStoreIfNeeded( + storeName = BrownfieldStore.STORE_NAME + ) { + BrownfieldStore( + counter = 0.0, + user = User(name = "Username") + ) + } } setContent { diff --git a/apps/AndroidApp/app/src/main/java/com/callstack/brownfield/android/example/components/GreetingCard.kt b/apps/AndroidApp/app/src/main/java/com/callstack/brownfield/android/example/components/GreetingCard.kt index 06f4b81d..1f04e99f 100644 --- a/apps/AndroidApp/app/src/main/java/com/callstack/brownfield/android/example/components/GreetingCard.kt +++ b/apps/AndroidApp/app/src/main/java/com/callstack/brownfield/android/example/components/GreetingCard.kt @@ -8,20 +8,42 @@ import androidx.compose.material3.Button import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf -import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp +import com.callstack.brownfield.android.example.BrownfieldStore +import com.callstack.brownie.Store +import com.callstack.brownie.StoreManager +import com.callstack.brownie.store +import com.callstack.brownie.subscribe + +private fun brownieStore(): Store? { + return StoreManager.shared.store(BrownfieldStore.STORE_NAME) +} @Composable fun GreetingCard( name: String, ) { - var counter by rememberSaveable { mutableIntStateOf(0) } + var counter by remember { mutableIntStateOf(0) } + + DisposableEffect(Unit) { + val store = brownieStore() + val unsubscribe = store?.subscribe( + selector = { state -> state.counter.toInt() }, + onChange = { updatedCounter -> counter = updatedCounter } + ) ?: {} + + onDispose { + unsubscribe() + } + } MaterialCard { Column( @@ -43,7 +65,11 @@ fun GreetingCard( style = MaterialTheme.typography.bodyMedium ) - Button(onClick = { counter++ }) { + Button(onClick = { + brownieStore()?.set { state -> + state.copy(counter = state.counter + 1) + } + }) { Text("Increment counter") } } diff --git a/apps/AndroidApp/app/src/vanilla/java/com/callstack/brownfield/android/example/BrownfieldStore.kt b/apps/AndroidApp/app/src/vanilla/java/com/callstack/brownfield/android/example/BrownfieldStore.kt new file mode 100644 index 00000000..299418d3 --- /dev/null +++ b/apps/AndroidApp/app/src/vanilla/java/com/callstack/brownfield/android/example/BrownfieldStore.kt @@ -0,0 +1,4 @@ +package com.callstack.brownfield.android.example + +typealias BrownfieldStore = com.rnapp.brownfieldlib.BrownfieldStore +typealias User = com.rnapp.brownfieldlib.User diff --git a/apps/ExpoApp/components/counter/index.ios.tsx b/apps/ExpoApp/components/counter/index.ios.tsx deleted file mode 100644 index 52b3ccab..00000000 --- a/apps/ExpoApp/components/counter/index.ios.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import { StyleSheet, Text, Button } from 'react-native'; -import { useStore } from '@callstack/brownie'; - -const Counter = () => { - const [counter, setState] = useStore('BrownfieldStore', (s) => s.counter); - - return ( - <> - Count: {counter} - -