diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index e189252..90c4980 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -3,24 +3,25 @@ - - - - - - + android:roundIcon="@mipmap/ic_launcher_round" + android:supportsRtl="true" + android:theme="@style/AppTheme"> + + + + + + + diff --git a/android/app/src/main/java/com/trust/ywx/AppManager.kt b/android/app/src/main/java/com/trust/ywx/AppManager.kt new file mode 100644 index 0000000..e954660 --- /dev/null +++ b/android/app/src/main/java/com/trust/ywx/AppManager.kt @@ -0,0 +1,31 @@ +package com.trust.ywx + +import android.app.Activity +import java.util.Stack + +object AppManager { + private val activityStack: Stack = Stack() + fun addActivity(activity: Activity) { + activityStack.add(activity) + } + + fun removeActivity(activity: Activity) { + activityStack.remove(activity) + } + + fun finishActivity(activity: Activity?) { + if (activity != null) { + removeActivity(activity) + activity.finish() + } else { + lastActivity()?.apply { + removeActivity(this) + this.finish() + } + } + } + + fun lastActivity(): Activity? { + return activityStack.lastElement() + } +} \ No newline at end of file diff --git a/android/app/src/main/java/com/trust/ywx/BuzActivity.kt b/android/app/src/main/java/com/trust/ywx/BuzActivity.kt new file mode 100644 index 0000000..09fc5a8 --- /dev/null +++ b/android/app/src/main/java/com/trust/ywx/BuzActivity.kt @@ -0,0 +1,34 @@ +package com.trust.ywx + +import android.os.Bundle +import com.facebook.react.ReactActivity +import com.trust.ywx.specs.navigation.NavigationHelper +import com.facebook.react.ReactActivityDelegate +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled +import com.facebook.react.defaults.DefaultReactActivityDelegate + +class BuzActivity : ReactActivity() { + + /** + * Returns the name of the main component registered from JavaScript. This is used to schedule + * rendering of the component. + */ + override fun getMainComponentName(): String = NavigationHelper.routerName + + /** + * Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate] + * which allows you to enable New Architecture with a single boolean flags [fabricEnabled] + */ + override fun createReactActivityDelegate(): ReactActivityDelegate = + DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled) + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + AppManager.addActivity(this) + } + + override fun onDestroy() { + AppManager.removeActivity(this) + super.onDestroy() + } +} diff --git a/android/app/src/main/java/com/trust/ywx/MainActivity.kt b/android/app/src/main/java/com/trust/ywx/MainActivity.kt index 9d6792b..d9ecd78 100644 --- a/android/app/src/main/java/com/trust/ywx/MainActivity.kt +++ b/android/app/src/main/java/com/trust/ywx/MainActivity.kt @@ -1,22 +1,14 @@ package com.trust.ywx -import com.facebook.react.ReactActivity -import com.facebook.react.ReactActivityDelegate -import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled -import com.facebook.react.defaults.DefaultReactActivityDelegate +import android.content.Intent +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import com.trust.ywx.specs.navigation.NavigationHelper -class MainActivity : ReactActivity() { - - /** - * Returns the name of the main component registered from JavaScript. This is used to schedule - * rendering of the component. - */ - override fun getMainComponentName(): String = "app" - - /** - * Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate] - * which allows you to enable New Architecture with a single boolean flags [fabricEnabled] - */ - override fun createReactActivityDelegate(): ReactActivityDelegate = - DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled) +class MainActivity : AppCompatActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + NavigationHelper.routerName = "app" + startActivity(Intent(this, BuzActivity::class.java)) + } } diff --git a/android/app/src/main/java/com/trust/ywx/specs/NavigationManager.kt b/android/app/src/main/java/com/trust/ywx/specs/NavigationManager.kt new file mode 100644 index 0000000..e9c017b --- /dev/null +++ b/android/app/src/main/java/com/trust/ywx/specs/NavigationManager.kt @@ -0,0 +1,23 @@ +package com.trust.ywx.specs + + +import android.content.Intent +import com.facebook.react.bridge.ReactApplicationContext +import com.trust.ywx.AppManager +import com.trust.ywx.BuzActivity +import com.trust.ywx.specs.NativeNavigationManagerSpec +import com.trust.ywx.specs.navigation.NavigationHelper + +class NavigationManager(reactContext: ReactApplicationContext) : + NativeNavigationManagerSpec(reactContext) { + override fun navigate(name: String) { + NavigationHelper.routerName = name + AppManager.lastActivity() + ?.startActivity(Intent(AppManager.lastActivity(), BuzActivity::class.java)) + } + + override fun pop(name: String?) { + + } + +} \ No newline at end of file diff --git a/android/app/src/main/java/com/trust/ywx/specs/navigation/NavigationHelper.kt b/android/app/src/main/java/com/trust/ywx/specs/navigation/NavigationHelper.kt new file mode 100644 index 0000000..ea776ec --- /dev/null +++ b/android/app/src/main/java/com/trust/ywx/specs/navigation/NavigationHelper.kt @@ -0,0 +1,5 @@ +package com.trust.ywx.specs.navigation + +object NavigationHelper { + var routerName: String = "app" +} \ No newline at end of file diff --git a/android/app/src/main/res/layout/activity_main.xml b/android/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..41d2ef1 --- /dev/null +++ b/android/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/package.json b/package.json index e5a18e5..be774f2 100644 --- a/package.json +++ b/package.json @@ -14,14 +14,13 @@ "build-android-hospital": "react-native bundle --platform android --dev false --entry-file src/hospital/hospital.ts --bundle-output ./bundle/hospital.android.bundle --assets-dest ./bundle --config metro.main.config.js --minify true --reset-cache" }, "codegenConfig": { - "name": "SpecsManager", + "name": "SpecManager", "type": "modules", - "jsSrcsDir": "./src/specs", + "jsSrcsDir": "specs", "android": { "javaPackageName": "com.trust.ywx.specs" } }, - "dependencies": { "@react-native-async-storage/async-storage": "^2.2.0", "@react-native/new-app-screen": "0.80.1", diff --git a/src/specs/SpecsManager.ts b/specs/NativeNavigationManager.ts similarity index 100% rename from src/specs/SpecsManager.ts rename to specs/NativeNavigationManager.ts diff --git a/specs/README.md b/specs/README.md new file mode 100644 index 0000000..2418139 --- /dev/null +++ b/specs/README.md @@ -0,0 +1 @@ +# 文件名必须`Native`开头 diff --git a/src/app/App.tsx b/src/app/App.tsx index d091223..90e549b 100644 --- a/src/app/App.tsx +++ b/src/app/App.tsx @@ -5,8 +5,14 @@ * @format */ -import { NewAppScreen } from '@react-native/new-app-screen'; -import { StatusBar, StyleSheet, useColorScheme, View } from 'react-native'; +import { + Button, + StatusBar, + StyleSheet, + useColorScheme, + View, +} from 'react-native'; +import { pushByName } from '../common/NavigationHelper.ts'; function App() { const isDarkMode = useColorScheme() === 'dark'; @@ -14,7 +20,13 @@ function App() { return ( - + +