diff --git a/android/src/main/java/io/callstack/react_native_material_palette/MaterialPalettePackage.kt b/android/src/main/java/io/callstack/react_native_material_palette/MaterialPalettePackage.kt index 222d35a..ae65950 100644 --- a/android/src/main/java/io/callstack/react_native_material_palette/MaterialPalettePackage.kt +++ b/android/src/main/java/io/callstack/react_native_material_palette/MaterialPalettePackage.kt @@ -1,13 +1,12 @@ package io.callstack.react_native_material_palette -import android.view.View import com.facebook.react.ReactPackage import com.facebook.react.bridge.JavaScriptModule import com.facebook.react.bridge.NativeModule import com.facebook.react.bridge.ReactApplicationContext -import com.facebook.react.uimanager.ReactShadowNode import com.facebook.react.uimanager.ViewManager import java.util.* +import java.util.Arrays class MaterialPalettePackage : ReactPackage { @@ -16,7 +15,11 @@ class MaterialPalettePackage : ReactPackage { override fun createNativeModules(reactContext: ReactApplicationContext): MutableList = mutableListOf(MaterialPaletteModule(reactContext)) - override fun createViewManagers(reactContext: ReactApplicationContext?): - MutableList> = Collections.emptyList() + override fun createViewManagers( + reactContext: ReactApplicationContext): List> { + return Arrays.asList>( + PaletteBackgroundManager() + ) + } } diff --git a/android/src/main/java/io/callstack/react_native_material_palette/PaletteBackgroundManager.kt b/android/src/main/java/io/callstack/react_native_material_palette/PaletteBackgroundManager.kt new file mode 100644 index 0000000..668d03a --- /dev/null +++ b/android/src/main/java/io/callstack/react_native_material_palette/PaletteBackgroundManager.kt @@ -0,0 +1,55 @@ +package io.callstack.react_native_material_palette + +import android.graphics.Bitmap +import android.graphics.BitmapFactory +import android.net.Uri +import android.provider.MediaStore +import android.support.v7.graphics.Palette +import android.util.Log +import com.facebook.react.bridge.ReadableMap +import com.facebook.react.uimanager.ThemedReactContext +import com.facebook.react.views.view.ReactViewGroup +import com.facebook.react.uimanager.annotations.ReactProp +import com.facebook.react.views.view.ReactViewManager +import java.io.IOException +import java.net.URL + +class PaletteBackgroundManager : ReactViewManager() { + + private val REACT_CLASS = "PaletteBackground" + private lateinit var ctx: ThemedReactContext + private lateinit var palette: Palette + + override fun createViewInstance(context: ThemedReactContext): ReactViewGroup { + ctx = context + return super.createViewInstance(context) + } + + override fun getName(): String { + return REACT_CLASS + } + +// @ReactProp(name = "source") +// fun setSource(view: ReactViewGroup, source: ReadableMap) { +// val bitmap: Bitmap +// val uri = source.getString("uri") +// try { +// if (uri.contains("http")) { +// val url = URL(uri) +// // TODO handle network error in case of invalid image +// bitmap = BitmapFactory.decodeStream(url.openConnection().getInputStream()) +// } else { +// bitmap = MediaStore.Images.Media.getBitmap(ctx.contentResolver, Uri.parse(uri)) +// } +// palette = Palette.from(bitmap).generate() +// view.backgroundColor = palette.getVibrantColor(16777215) +// } catch(error: IOException) { +// throw IOException("The URI provided is not an image or the path is incorrect") +// } +// } + + @ReactProp(name = "testColor") + fun setTestColor(view: ReactViewGroup, testColor: Int) { + view.backgroundColor = testColor + } +} diff --git a/example/index.android.js b/example/index.android.js index 37e6f12..6c1c61c 100644 --- a/example/index.android.js +++ b/example/index.android.js @@ -4,73 +4,45 @@ * @flow */ -import React, { Component } from 'react'; -import { AppRegistry, StyleSheet, Text, View, Image } from 'react-native'; +import React from 'react'; +import { AppRegistry, View, Button, StyleSheet } from 'react-native'; +import { StackNavigator } from 'react-navigation'; +import AsyncExample from './src/AsyncExample'; +import ComponentsExample from './src/ComponentsExample'; -import MaterialPalette from 'react-native-material-palette'; - -export default class TestPalette extends Component { - state = { - isLoading: true, - palette: null, +class HomeScreen extends React.Component { + static navigationOptions = { + title: 'RN Material Palette', }; - async componentDidMount() { - const palette = await MaterialPalette.create( - require('./assets/wroclaw.jpg'), // eslint-disable-line global-require - { - types: ['lightMuted', 'darkVibrant', 'vibrant'], - }, - ); - this.setState({ - palette, - isLoading: false, - }); - } - render() { - const { palette, isLoading } = this.state; + const { navigate } = this.props.navigation; return ( - - {isLoading - ? - Generating palette asynchronously... - - : - - {Object.keys(palette).map(profile => ( - - - {profile.toUpperCase()} - - - ))} - } + + +