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/.github/actions/prepare-ios/action.yml b/.github/actions/prepare-ios/action.yml index 2fd43b24..95d789cb 100644 --- a/.github/actions/prepare-ios/action.yml +++ b/.github/actions/prepare-ios/action.yml @@ -13,7 +13,7 @@ runs: - name: Use appropriate Xcode version uses: maxim-lobanov/setup-xcode@60606e260d2fc5762a71e64e74b2174e8ea3c8bd # v1.6.0 with: - xcode-version: '26' + xcode-version: '26.3' - name: Setup Ruby uses: ruby/setup-ruby@5dd816ae0186f20dfa905997a64104db9a8221c7 # v1.280.0 diff --git a/apps/AndroidApp/app/build.gradle.kts b/apps/AndroidApp/app/build.gradle.kts index 03398065..afbb59b1 100644 --- a/apps/AndroidApp/app/build.gradle.kts +++ b/apps/AndroidApp/app/build.gradle.kts @@ -52,11 +52,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 @@ -64,6 +64,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/expo54/java/com/callstack/brownfield/android/expo/BrownfieldStore.kt b/apps/AndroidApp/app/src/expo54/java/com/callstack/brownfield/android/expo/BrownfieldStore.kt new file mode 100644 index 00000000..d54e8c19 --- /dev/null +++ b/apps/AndroidApp/app/src/expo54/java/com/callstack/brownfield/android/expo/BrownfieldStore.kt @@ -0,0 +1,4 @@ +package com.callstack.brownfield.android.example + +typealias BrownfieldStore = com.callstack.rnbrownfield.demo.expoapp54.BrownfieldStore +typealias User = com.callstack.rnbrownfield.demo.expoapp54.User diff --git a/apps/AndroidApp/app/src/expo54/java/com/callstack/brownfield/android/expo/ReactNativeConstants.kt b/apps/AndroidApp/app/src/expo54/java/com/callstack/brownfield/android/expo/ReactNativeConstants.kt index ef91af22..6ca0d426 100644 --- a/apps/AndroidApp/app/src/expo54/java/com/callstack/brownfield/android/expo/ReactNativeConstants.kt +++ b/apps/AndroidApp/app/src/expo54/java/com/callstack/brownfield/android/expo/ReactNativeConstants.kt @@ -1,6 +1,6 @@ package com.callstack.brownfield.android.example object ReactNativeConstants { - const val MAIN_MODULE_NAME = "main" + const val MAIN_MODULE_NAME = "RNApp" const val APP_NAME = "Android (Expo 54)" } diff --git a/apps/AndroidApp/app/src/expo55/java/com/callstack/brownfield/android/expo/BrownfieldStore.kt b/apps/AndroidApp/app/src/expo55/java/com/callstack/brownfield/android/expo/BrownfieldStore.kt new file mode 100644 index 00000000..2dae42ba --- /dev/null +++ b/apps/AndroidApp/app/src/expo55/java/com/callstack/brownfield/android/expo/BrownfieldStore.kt @@ -0,0 +1,4 @@ +package com.callstack.brownfield.android.example + +typealias BrownfieldStore = com.callstack.rnbrownfield.demo.expoapp55.BrownfieldStore +typealias User = com.callstack.rnbrownfield.demo.expoapp55.User diff --git a/apps/AndroidApp/app/src/expo55/java/com/callstack/brownfield/android/expo/ReactNativeConstants.kt b/apps/AndroidApp/app/src/expo55/java/com/callstack/brownfield/android/expo/ReactNativeConstants.kt index ee7e89bf..83732b1e 100644 --- a/apps/AndroidApp/app/src/expo55/java/com/callstack/brownfield/android/expo/ReactNativeConstants.kt +++ b/apps/AndroidApp/app/src/expo55/java/com/callstack/brownfield/android/expo/ReactNativeConstants.kt @@ -1,6 +1,6 @@ package com.callstack.brownfield.android.example object ReactNativeConstants { - const val MAIN_MODULE_NAME = "main" + const val MAIN_MODULE_NAME = "RNApp" const val APP_NAME = "Android (Expo 55)" } 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 a665b3b0..f1311942 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 @@ -27,6 +27,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.nativebrownfieldnavigation.BrownfieldNavigationDelegate import com.callstack.nativebrownfieldnavigation.BrownfieldNavigationManager import com.callstack.reactnativebrownfield.ReactNativeFragment @@ -52,6 +53,15 @@ class MainActivity : AppCompatActivity(), BrownfieldNavigationDelegate { 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/ExpoApp54/components/counter/index.ios.tsx b/apps/ExpoApp54/components/counter/index.ios.tsx deleted file mode 100644 index 52b3ccab..00000000 --- a/apps/ExpoApp54/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} - -