Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(android): Forward initial properties from manifest #84

Merged
merged 1 commit into from
May 16, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions android/app/src/main/java/com/sample/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ class MainActivity : ReactActivity() {
private val listener = { component: ComponentViewModel ->
startActivity(
ComponentActivity.newIntent(
this, component.name, component.displayName
this, component.name, component.displayName, component.initialProperties
)
)
}
Expand Down Expand Up @@ -91,7 +91,7 @@ class MainActivity : ReactActivity() {

private fun setupRecyclerView(manifestComponents: List<Component>) {
val components = manifestComponents.map {
ComponentViewModel(it.appKey, it.displayName ?: it.appKey)
ComponentViewModel(it.appKey, it.displayName ?: it.appKey, it.initialProperties)
}
findViewById<RecyclerView>(R.id.recyclerview).apply {
layoutManager = LinearLayoutManager(context)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,49 @@ import android.os.Bundle
import android.view.MenuItem
import androidx.fragment.app.Fragment
import com.facebook.react.ReactActivity
import com.facebook.react.ReactActivityDelegate

class ComponentActivity : ReactActivity() {

private inner class ComponentActivityDelegate(
activity: ReactActivity,
mainComponentName: String?
) : ReactActivityDelegate(activity, mainComponentName) {
override fun getLaunchOptions(): Bundle? {
return intent.extras?.getBundle(COMPONENT_INITIAL_PROPERTIES)
}
}

companion object {
private const val COMPONENT_NAME = "extra:componentName"
private const val COMPONENT_DISPLAY_NAME = "extra:componentDisplayName"
private const val COMPONENT_INITIAL_PROPERTIES = "extra:componentInitialProperties"

fun newIntent(
activity: Activity,
componentName: String,
componentDisplayName: String
componentDisplayName: String,
componentInitialProperties: Map<String, String?>?
): Intent {
return Intent(activity, ComponentActivity::class.java).apply {
putExtra(COMPONENT_NAME, componentName)
putExtra(COMPONENT_DISPLAY_NAME, componentDisplayName)

if (componentInitialProperties != null) {
val bundle = Bundle()
for ((k, v) in componentInitialProperties) {
bundle.putString(k, v)
}
putExtra(COMPONENT_INITIAL_PROPERTIES, bundle)
}
}
}
}

override fun createReactActivityDelegate(): ReactActivityDelegate {
return ComponentActivityDelegate(this, mainComponentName)
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

Expand Down Expand Up @@ -59,7 +83,7 @@ class ComponentActivity : ReactActivity() {
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (android.R.id.home == item.itemId) {
onBackPressed()
return true;
return true
}

return super.onOptionsItemSelected(item)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
package com.sample.component

data class ComponentViewModel(val name: String, val displayName: String)
data class ComponentViewModel(
val name: String,
val displayName: String,
val initialProperties: Map<String, String?>?
)
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
],
"homepage": "https://github.com/microsoft/react-native-test-app",
"scripts": {
"clean": "npx rimraf example/node_modules/react-native-test-app; git clean -dfqx",
"clean": "npx --quiet rimraf example/node_modules/react-native-test-app; git clean -dfqx",
"format:c": "clang-format -i $(git ls-files '*.h' '*.m' '*.mm')",
"format:js": "prettier --write $(git ls-files '*.js' '*.yml')",
"lint:js": "eslint $(git ls-files '*.js')"
Expand Down