diff --git a/android/build.gradle b/android/build.gradle index aaae11c7..0a158667 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -12,12 +12,12 @@ buildscript { apply plugin: 'com.android.library' android { - compileSdkVersion 28 - buildToolsVersion "28.0.3" + compileSdkVersion 30 + buildToolsVersion "29.0.3" defaultConfig { - minSdkVersion 16 - targetSdkVersion 28 + minSdkVersion 21 + targetSdkVersion 30 versionCode 1 versionName "1.0" } diff --git a/android/src/main/java/com/reactnativecommunity/progressview/RNCProgressViewManager.java b/android/src/main/java/com/reactnativecommunity/progressview/RNCProgressViewManager.java new file mode 100644 index 00000000..2f1c5a24 --- /dev/null +++ b/android/src/main/java/com/reactnativecommunity/progressview/RNCProgressViewManager.java @@ -0,0 +1,53 @@ +package com.reactnativecommunity.progressview; + +import android.content.res.ColorStateList; +import android.widget.ProgressBar; + +import androidx.annotation.NonNull; + +import com.facebook.react.uimanager.SimpleViewManager; +import com.facebook.react.uimanager.ThemedReactContext; +import com.facebook.react.uimanager.annotations.ReactProp; + +public class RNCProgressViewManager extends SimpleViewManager { + private static final int MAX_PROGRESS_VALUE = 1000; + + @NonNull + @Override + public String getName() { + return "RNCProgressView"; + } + + @NonNull + @Override + protected ProgressBar createViewInstance(@NonNull ThemedReactContext reactContext) { + ProgressBar bar = new ProgressBar( + reactContext, + null, + android.R.attr.progressBarStyleHorizontal + ); + bar.setMax(MAX_PROGRESS_VALUE); + return bar; + } + + @ReactProp(name = "progress") + public void setProgress(ProgressBar bar, double progress) { + bar.setProgress((int) (MAX_PROGRESS_VALUE * progress)); + } + + @ReactProp(name = "progressTintColor", customType = "Color") + public void setProgressTintColor(ProgressBar bar, int color) { + bar.setIndeterminateTintList(ColorStateList.valueOf(color)); + bar.setProgressTintList(ColorStateList.valueOf(color)); + } + + @ReactProp(name = "trackTintColor", customType = "Color") + public void setTrackTintColor(ProgressBar bar, int color) { + bar.setProgressBackgroundTintList(ColorStateList.valueOf(color)); + } + + @ReactProp(name = "isIndeterminate") + public void setIsIndeterminate(ProgressBar bar, boolean isIndeterminate) { + bar.setIndeterminate(isIndeterminate); + } +} diff --git a/android/src/main/java/com/reactnativecommunity/progressview/RNCProgressViewModule.java b/android/src/main/java/com/reactnativecommunity/progressview/RNCProgressViewModule.java deleted file mode 100644 index 467b16d9..00000000 --- a/android/src/main/java/com/reactnativecommunity/progressview/RNCProgressViewModule.java +++ /dev/null @@ -1,22 +0,0 @@ - -package com.reactnativecommunity.progressview; - -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReactContextBaseJavaModule; -import com.facebook.react.bridge.ReactMethod; -import com.facebook.react.bridge.Callback; - -public class RNCProgressViewModule extends ReactContextBaseJavaModule { - - private final ReactApplicationContext reactContext; - - public RNCProgressViewModule(ReactApplicationContext reactContext) { - super(reactContext); - this.reactContext = reactContext; - } - - @Override - public String getName() { - return "RNCProgressView"; - } -} \ No newline at end of file diff --git a/android/src/main/java/com/reactnativecommunity/progressview/RNCProgressViewPackage.java b/android/src/main/java/com/reactnativecommunity/progressview/RNCProgressViewPackage.java index 20919b51..3236d0a6 100644 --- a/android/src/main/java/com/reactnativecommunity/progressview/RNCProgressViewPackage.java +++ b/android/src/main/java/com/reactnativecommunity/progressview/RNCProgressViewPackage.java @@ -1,28 +1,25 @@ - package com.reactnativecommunity.progressview; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; +import androidx.annotation.NonNull; import com.facebook.react.ReactPackage; import com.facebook.react.bridge.NativeModule; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.uimanager.ViewManager; -import com.facebook.react.bridge.JavaScriptModule; + +import java.util.Collections; +import java.util.List; + public class RNCProgressViewPackage implements ReactPackage { + @NonNull @Override - public List createNativeModules(ReactApplicationContext reactContext) { - return Arrays.asList(new RNCProgressViewModule(reactContext)); - } - - // Deprecated from RN 0.47 - public List> createJSModules() { - return Collections.emptyList(); + public List createNativeModules(@NonNull ReactApplicationContext reactContext) { + return Collections.emptyList(); } + @NonNull @Override - public List createViewManagers(ReactApplicationContext reactContext) { - return Collections.emptyList(); + public List createViewManagers(@NonNull ReactApplicationContext reactContext) { + return Collections.singletonList(new RNCProgressViewManager()); } -} \ No newline at end of file +} diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index cff96376..93868d6f 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -185,7 +185,7 @@ dependencies { //noinspection GradleDynamicVersion implementation "com.facebook.react:react-native:+" // From node_modules implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0" - + debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") { exclude group:'com.facebook.fbjni' @@ -206,6 +206,8 @@ dependencies { } else { implementation jscFlavor } + + implementation project(':progressview') } // Run this once to be able to run the application with BUCK diff --git a/example/android/app/src/main/java/com/progressviewexample/MainApplication.java b/example/android/app/src/main/java/com/progressviewexample/MainApplication.java index 2ff24c55..5446ef40 100644 --- a/example/android/app/src/main/java/com/progressviewexample/MainApplication.java +++ b/example/android/app/src/main/java/com/progressviewexample/MainApplication.java @@ -8,6 +8,8 @@ import com.facebook.react.ReactNativeHost; import com.facebook.react.ReactPackage; import com.facebook.soloader.SoLoader; +import com.reactnativecommunity.progressview.RNCProgressViewPackage; + import java.lang.reflect.InvocationTargetException; import java.util.List; @@ -26,6 +28,7 @@ protected List getPackages() { List packages = new PackageList(this).getPackages(); // Packages that cannot be autolinked yet can be added manually here, for example: // packages.add(new MyReactNativePackage()); + packages.add(new RNCProgressViewPackage()); return packages; } diff --git a/example/android/build.gradle b/example/android/build.gradle index 3b257356..30801ac3 100644 --- a/example/android/build.gradle +++ b/example/android/build.gradle @@ -2,10 +2,10 @@ buildscript { ext { - buildToolsVersion = "29.0.2" - minSdkVersion = 16 - compileSdkVersion = 29 - targetSdkVersion = 29 + buildToolsVersion = "29.0.3" + minSdkVersion = 21 + compileSdkVersion = 30 + targetSdkVersion = 30 } repositories { google() diff --git a/example/android/settings.gradle b/example/android/settings.gradle index 4374d5b5..8d8206e3 100644 --- a/example/android/settings.gradle +++ b/example/android/settings.gradle @@ -1,3 +1,6 @@ rootProject.name = 'ProgressViewExample' include ':app' + +include ':progressview' +project(':progressview').projectDir = new File(rootProject.projectDir, '../../android') diff --git a/js/ProgressView.android.js b/js/ProgressView.android.js index 0cf16f07..5128f294 100644 --- a/js/ProgressView.android.js +++ b/js/ProgressView.android.js @@ -9,35 +9,19 @@ 'use strict'; import * as React from 'react'; -import {Text, View, StyleSheet} from 'react-native'; +import {requireNativeComponent} from 'react-native'; -class DummyProgressViewIOS extends React.Component { - render() { - return ( - - - ProgressViewIOS is not supported on this platform! - - - ); - } -} +const RNCProgressView = requireNativeComponent('RNCProgressView'); -const styles = StyleSheet.create({ - dummy: { - width: 120, - height: 20, - backgroundColor: '#ffbcbc', - borderWidth: 1, - borderColor: 'red', - alignItems: 'center', - justifyContent: 'center', - }, - text: { - color: '#333333', - margin: 5, - fontSize: 10, - }, -}); +export default function ProgressView(props) { + const nativeProps = { + testID: props.testID, + progress: props.progress, + progressTintColor: props.progressTintColor, + trackTintColor: props.trackTintColor, + isIndeterminate: props.isIndeterminate, + style: [{height: 20}, props.style], + }; -export default DummyProgressViewIOS; + return ; +}