Skip to content

Commit af6c3e7

Browse files
feat: Add Android support for progress-view (#58)
Co-authored-by: Alpha <[email protected]>
1 parent 3dd6cab commit af6c3e7

17 files changed

+114
-98
lines changed

.flowconfig

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@
33
.*/*[.]android.js
44
.*/*[.]windows.js
55

6+
; Ignore "BUCK" generated dirs
7+
<PROJECT_ROOT>/\.buckd/
8+
9+
; Ignore polyfills
10+
node_modules/react-native/Libraries/polyfills/.*
11+
612
; These should not be required directly
713
; require from fbjs/lib instead: require('fbjs/lib/warning')
814
.*/node_modules/warning/.*
@@ -19,8 +25,8 @@
1925
.*/node_modules/.*
2026

2127
[libs]
22-
interface.js
23-
flow/
28+
node_modules/react-native/interface.js
29+
node_modules/react-native/flow/
2430

2531
[options]
2632
emoji=true
@@ -36,19 +42,15 @@ module.file_ext=.ios.js
3642

3743
munge_underscores=true
3844

39-
module.name_mapper='^react-native$' -> '<PROJECT_ROOT>/node_modules/react-native/Libraries/react-native/react-native-implementation'
40-
module.name_mapper='^react-native/\(.*\)$' -> '<PROJECT_ROOT>/node_modules/react-native/\1'
41-
module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> '<PROJECT_ROOT>/node_modules/react-native/Libraries/Image/RelativeImageStub'
45+
module.name_mapper='^react-native/\(.*\)$' -> '<PROJECT_ROOT>/node_modules/react-native/\1'
46+
module.name_mapper='^@?[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> '<PROJECT_ROOT>/node_modules/react-native/Libraries/Image/RelativeImageStub'
4247

4348
suppress_type=$FlowIssue
4449
suppress_type=$FlowFixMe
4550
suppress_type=$FlowFixMeProps
4651
suppress_type=$FlowFixMeState
47-
suppress_type=$FlowFixMeEmpty
4852

49-
experimental.well_formed_exports=true
50-
experimental.types_first=true
51-
experimental.abstract_locations=true
53+
sharedmemory.heap_size=4000000000
5254

5355
[lints]
5456
sketchy-null-number=warn
@@ -60,8 +62,6 @@ deprecated-type=warn
6062
unsafe-getters-setters=warn
6163
unnecessary-invariant=warn
6264
signature-verification-failure=warn
63-
deprecated-utility=error
64-
unsafe-addition=error
6565

6666
[strict]
6767
deprecated-type
@@ -73,4 +73,4 @@ untyped-import
7373
untyped-type-import
7474

7575
[version]
76-
^0.127.0
76+
^0.137.0

.github/workflows/ci.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ jobs:
66
runs-on: ubuntu-18.04
77
strategy:
88
matrix:
9-
node-version: [10]
9+
node-version: [12]
1010
steps:
1111
- uses: actions/checkout@v2
1212
- uses: actions/setup-node@v1
@@ -27,7 +27,7 @@ jobs:
2727
runs-on: ubuntu-18.04
2828
strategy:
2929
matrix:
30-
node-version: [10]
30+
node-version: [12]
3131
steps:
3232
- uses: actions/checkout@v2
3333
- uses: actions/setup-node@v1
@@ -48,7 +48,7 @@ jobs:
4848
runs-on: ubuntu-18.04
4949
strategy:
5050
matrix:
51-
node-version: [10]
51+
node-version: [12]
5252
steps:
5353
- uses: actions/checkout@v2
5454
- uses: actions/setup-node@v1
@@ -69,7 +69,7 @@ jobs:
6969
runs-on: ubuntu-18.04
7070
strategy:
7171
matrix:
72-
node-version: [10]
72+
node-version: [12]
7373
steps:
7474
- uses: actions/checkout@v2
7575
- uses: actions/setup-node@v1
@@ -90,7 +90,7 @@ jobs:
9090
runs-on: macos-latest
9191
strategy:
9292
matrix:
93-
node-version: [10]
93+
node-version: [12]
9494
steps:
9595
- uses: actions/checkout@v2
9696
- uses: actions/setup-node@v1

android/build.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@ buildscript {
1212
apply plugin: 'com.android.library'
1313

1414
android {
15-
compileSdkVersion 28
16-
buildToolsVersion "28.0.3"
15+
compileSdkVersion 30
16+
buildToolsVersion "29.0.3"
1717

1818
defaultConfig {
19-
minSdkVersion 16
20-
targetSdkVersion 28
19+
minSdkVersion 21
20+
targetSdkVersion 30
2121
versionCode 1
2222
versionName "1.0"
2323
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package com.reactnativecommunity.progressview;
2+
3+
import android.content.res.ColorStateList;
4+
import android.widget.ProgressBar;
5+
6+
import androidx.annotation.NonNull;
7+
8+
import com.facebook.react.uimanager.SimpleViewManager;
9+
import com.facebook.react.uimanager.ThemedReactContext;
10+
import com.facebook.react.uimanager.annotations.ReactProp;
11+
12+
public class RNCProgressViewManager extends SimpleViewManager<ProgressBar> {
13+
private static final int MAX_PROGRESS_VALUE = 1000;
14+
15+
@NonNull
16+
@Override
17+
public String getName() {
18+
return "RNCProgressView";
19+
}
20+
21+
@NonNull
22+
@Override
23+
protected ProgressBar createViewInstance(@NonNull ThemedReactContext reactContext) {
24+
ProgressBar bar = new ProgressBar(
25+
reactContext,
26+
null,
27+
android.R.attr.progressBarStyleHorizontal
28+
);
29+
bar.setMax(MAX_PROGRESS_VALUE);
30+
return bar;
31+
}
32+
33+
@ReactProp(name = "progress")
34+
public void setProgress(ProgressBar bar, double progress) {
35+
bar.setProgress((int) (MAX_PROGRESS_VALUE * progress));
36+
}
37+
38+
@ReactProp(name = "progressTintColor", customType = "Color")
39+
public void setProgressTintColor(ProgressBar bar, int color) {
40+
bar.setIndeterminateTintList(ColorStateList.valueOf(color));
41+
bar.setProgressTintList(ColorStateList.valueOf(color));
42+
}
43+
44+
@ReactProp(name = "trackTintColor", customType = "Color")
45+
public void setTrackTintColor(ProgressBar bar, int color) {
46+
bar.setProgressBackgroundTintList(ColorStateList.valueOf(color));
47+
}
48+
49+
@ReactProp(name = "isIndeterminate")
50+
public void setIsIndeterminate(ProgressBar bar, boolean isIndeterminate) {
51+
bar.setIndeterminate(isIndeterminate);
52+
}
53+
}

android/src/main/java/com/reactnativecommunity/progressview/RNCProgressViewModule.java

Lines changed: 0 additions & 22 deletions
This file was deleted.
Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,25 @@
1-
21
package com.reactnativecommunity.progressview;
32

4-
import java.util.Arrays;
5-
import java.util.Collections;
6-
import java.util.List;
3+
import androidx.annotation.NonNull;
74

85
import com.facebook.react.ReactPackage;
96
import com.facebook.react.bridge.NativeModule;
107
import com.facebook.react.bridge.ReactApplicationContext;
118
import com.facebook.react.uimanager.ViewManager;
12-
import com.facebook.react.bridge.JavaScriptModule;
9+
10+
import java.util.Collections;
11+
import java.util.List;
12+
1313
public class RNCProgressViewPackage implements ReactPackage {
14+
@NonNull
1415
@Override
15-
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
16-
return Arrays.<NativeModule>asList(new RNCProgressViewModule(reactContext));
17-
}
18-
19-
// Deprecated from RN 0.47
20-
public List<Class<? extends JavaScriptModule>> createJSModules() {
21-
return Collections.emptyList();
16+
public List<NativeModule> createNativeModules(@NonNull ReactApplicationContext reactContext) {
17+
return Collections.emptyList();
2218
}
2319

20+
@NonNull
2421
@Override
25-
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
26-
return Collections.emptyList();
22+
public List<ViewManager> createViewManagers(@NonNull ReactApplicationContext reactContext) {
23+
return Collections.<ViewManager>singletonList(new RNCProgressViewManager());
2724
}
28-
}
25+
}

example/App.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ export class App extends React.Component<Props, State> {
3333
/* $FlowFixMe(>=0.85.0 site=react_native_fb) This comment suppresses an error
3434
* found when Flow v0.85 was deployed. To see the error, delete this comment
3535
* and run Flow. */
36-
getProgress = offset => {
36+
getProgress = (offset) => {
3737
const progress = this.state.progress + offset;
3838
return Math.sin(progress % Math.PI) % 1;
3939
};

example/android/app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@ dependencies {
190190

191191
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"
192192

193+
193194
debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") {
194195
exclude group:'com.facebook.fbjni'
195196
}
@@ -210,7 +211,6 @@ dependencies {
210211
} else {
211212
implementation jscFlavor
212213
}
213-
214214
// used for example
215215
implementation project(':progressview')
216216
}

example/android/settings.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
rootProject.name = 'example'
22
apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
33
include ':app'
4+
5+
include ':progressview'
6+
project(':progressview').projectDir = new File(rootProject.projectDir, '../../android')

js/ProgressView.android.js

Lines changed: 13 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -9,35 +9,19 @@
99
'use strict';
1010

1111
import * as React from 'react';
12-
import {Text, View, StyleSheet} from 'react-native';
12+
import {requireNativeComponent} from 'react-native';
1313

14-
class DummyProgressViewIOS extends React.Component {
15-
render() {
16-
return (
17-
<View style={[styles.dummy, this.props.style]}>
18-
<Text style={styles.text}>
19-
ProgressViewIOS is not supported on this platform!
20-
</Text>
21-
</View>
22-
);
23-
}
24-
}
14+
const RNCProgressView = requireNativeComponent('RNCProgressView');
2515

26-
const styles = StyleSheet.create({
27-
dummy: {
28-
width: 120,
29-
height: 20,
30-
backgroundColor: '#ffbcbc',
31-
borderWidth: 1,
32-
borderColor: 'red',
33-
alignItems: 'center',
34-
justifyContent: 'center',
35-
},
36-
text: {
37-
color: '#333333',
38-
margin: 5,
39-
fontSize: 10,
40-
},
41-
});
16+
export default function ProgressView(props) {
17+
const nativeProps = {
18+
testID: props.testID,
19+
progress: props.progress,
20+
progressTintColor: props.progressTintColor,
21+
trackTintColor: props.trackTintColor,
22+
isIndeterminate: props.isIndeterminate,
23+
style: [{height: 20}, props.style],
24+
};
4225

43-
export default DummyProgressViewIOS;
26+
return <RNCProgressView {...nativeProps} />;
27+
}

0 commit comments

Comments
 (0)