From e72060c131be132a79ec5f184e0057557e3bffed Mon Sep 17 00:00:00 2001 From: Ishant Sagar Date: Tue, 18 Sep 2018 14:13:33 +0530 Subject: [PATCH 1/8] event listener changed with promise callback (#3) * Android Fix: react events changed with Promise based callback * Removed resolve calling multiple time. * Update RCTBEEPickerManager.m Event removed & resolved added for picker init. * add promise in _init function --- .../com/beefe/picker/PickerViewModule.java | 21 +-- android/src/main/res/layout/picker_view.xml | 84 ++++----- index.js | 164 +++++++++--------- ios/RCTBEEPickerManager/BzwPicker.m | 4 - ios/RCTBEEPickerManager/RCTBEEPickerManager.m | 5 +- 5 files changed, 137 insertions(+), 141 deletions(-) diff --git a/android/src/main/java/com/beefe/picker/PickerViewModule.java b/android/src/main/java/com/beefe/picker/PickerViewModule.java index 813a0bddf..027d36554 100644 --- a/android/src/main/java/com/beefe/picker/PickerViewModule.java +++ b/android/src/main/java/com/beefe/picker/PickerViewModule.java @@ -77,7 +77,7 @@ */ public class PickerViewModule extends ReactContextBaseJavaModule implements LifecycleEventListener { - + private static final String FONTS = "fonts/"; private static final String OTF = ".otf"; private static final String TTF = ".ttf"; @@ -136,6 +136,7 @@ public class PickerViewModule extends ReactContextBaseJavaModule implements Life private PickerViewLinkage pickerViewLinkage; private PickerViewAlone pickerViewAlone; + private Promise promise; public PickerViewModule(ReactApplicationContext reactContext) { super(reactContext); @@ -148,7 +149,8 @@ public String getName() { } @ReactMethod - public void _init(ReadableMap options) { + public void _init(ReadableMap options, Promise promise) { + this.promise = promise; Activity activity = getCurrentActivity(); if (activity != null && options.hasKey(PICKER_DATA)) { View view = activity.getLayoutInflater().inflate(R.layout.picker_view, null); @@ -340,7 +342,6 @@ public void onSelected(ArrayList selectedList) { @Override public void onSelected(ArrayList selectedList) { returnData = selectedList; - commonEvent(EVENT_KEY_SELECTED); } }); @@ -386,8 +387,8 @@ public void onSelected(ArrayList selectedList) { pickerLayout.setBackgroundColor(argb(colors[3], colors[0], colors[1], colors[2])); } - int height = barViewHeight + pickerViewHeight; - if (dialog == null) { + int height = barViewHeight + pickerViewHeight; + dialog = new Dialog(activity, R.style.Dialog_Full_Screen); dialog.setContentView(view); WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(); @@ -408,12 +409,8 @@ public void onSelected(ArrayList selectedList) { layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; layoutParams.height = height; layoutParams.gravity = Gravity.BOTTOM; - window.setAttributes(layoutParams); + window.setAttributes(layoutParams); } - } else { - dialog.dismiss(); - dialog.setContentView(view); - } } } @@ -531,9 +528,7 @@ private void commonEvent(String eventKey) { private void sendEvent(ReactContext reactContext, String eventName, @Nullable WritableMap params) { - reactContext - .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class) - .emit(eventName, params); + promise.resolve(params); } @Override diff --git a/android/src/main/res/layout/picker_view.xml b/android/src/main/res/layout/picker_view.xml index 9886bdd02..21189fdd3 100644 --- a/android/src/main/res/layout/picker_view.xml +++ b/android/src/main/res/layout/picker_view.xml @@ -4,53 +4,59 @@ android:layout_height="wrap_content" android:background="#00000000"> - + android:background="@android:color/white"> - - - + + + + + + + + + + + android:layout_alignParentBottom="true"> - + - + + - - - - - - \ No newline at end of file + diff --git a/index.js b/index.js index bb5d1360e..ee6bf5f3f 100644 --- a/index.js +++ b/index.js @@ -1,97 +1,97 @@ -import { - Platform, - NativeModules, - NativeAppEventEmitter -} from 'react-native'; +import { Platform, NativeModules, NativeAppEventEmitter } from 'react-native'; const ios = Platform.OS === 'ios'; const android = Platform.OS === 'android'; const Picker = NativeModules.BEEPickerManager; const options = { - isLoop: false, - pickerConfirmBtnText: 'confirm', - pickerCancelBtnText: 'cancel', - pickerTitleText: 'pls select', - pickerConfirmBtnColor: [1, 186, 245, 1], - pickerCancelBtnColor: [1, 186, 245, 1], - pickerTitleColor: [20, 20, 20, 1], - pickerToolBarBg: [232, 232, 232, 1], - pickerTextEllipsisLen: 6, - pickerBg: [196, 199, 206, 1], - pickerRowHeight: 24, - wheelFlex: [1, 1, 1], - pickerData: [], - selectedValue: [], - onPickerConfirm(){}, - onPickerCancel(){}, - onPickerSelect(){}, - pickerToolBarFontSize: 16, - pickerFontSize: 16, - pickerFontColor: [31, 31 ,31, 1] + isLoop: false, + pickerConfirmBtnText: 'confirm', + pickerCancelBtnText: 'cancel', + pickerTitleText: 'pls select', + pickerConfirmBtnColor: [1, 186, 245, 1], + pickerCancelBtnColor: [1, 186, 245, 1], + pickerTitleColor: [20, 20, 20, 1], + pickerToolBarBg: [232, 232, 232, 1], + pickerTextEllipsisLen: 6, + pickerBg: [196, 199, 206, 1], + pickerRowHeight: 24, + wheelFlex: [1, 1, 1], + pickerData: [], + selectedValue: [], + onPickerConfirm() {}, + onPickerCancel() {}, + onPickerSelect() {}, + pickerToolBarFontSize: 16, + pickerFontSize: 16, + pickerFontColor: [31, 31, 31, 1] }; export default { - init(params){ - const opt = { - ...options, - ...params - }; - const fnConf = { - confirm: opt.onPickerConfirm, - cancel: opt.onPickerCancel, - select: opt.onPickerSelect - }; + init(params) { + const opt = { + ...options, + ...params + }; + const fnConf = { + confirm: opt.onPickerConfirm, + cancel: opt.onPickerCancel, + select: opt.onPickerSelect + }; - Picker._init(opt); - //there are no `removeListener` for NativeAppEventEmitter & DeviceEventEmitter - this.listener && this.listener.remove(); - this.listener = NativeAppEventEmitter.addListener('pickerEvent', event => { - fnConf[event['type']](event['selectedValue'], event['selectedIndex']); - }); - }, + Picker._init(opt) + .then(event => { + fnConf[event['type']](event['selectedValue'], event['selectedIndex']); + this.listener && this.listener.remove(); + }) + .catch(error => { + console.log(error); + }); + //there are no `removeListener` for NativeAppEventEmitter & DeviceEventEmitter + // this.listener && this.listener.remove(); + // this.listener = NativeAppEventEmitter.addListener('pickerEvent', event => { + // fnConf[event['type']](event['selectedValue'], event['selectedIndex']); + // }); + }, - show(){ - Picker.show(); - }, + show() { + Picker.show(); + }, - hide(){ - Picker.hide(); - }, + hide() { + Picker.hide(); + }, - select(arr, fn) { - if(ios){ - Picker.select(arr); - } - else if(android){ - Picker.select(arr, err => { - typeof fn === 'function' && fn(err); - }); - } - }, + select(arr, fn) { + if (ios) { + Picker.select(arr); + } else if (android) { + Picker.select(arr, err => { + typeof fn === 'function' && fn(err); + }); + } + }, - toggle(){ - this.isPickerShow(show => { - if(show){ - this.hide(); - } - else{ - this.show(); - } - }); - }, + toggle() { + this.isPickerShow(show => { + if (show) { + this.hide(); + } else { + this.show(); + } + }); + }, - isPickerShow(fn){ - //android return two params: err(error massage) and status(show or not) - //ios return only one param: hide or not... - Picker.isPickerShow((err, status) => { - let returnValue = null; - if(android){ - returnValue = err ? false : status; - } - else if(ios){ - returnValue = !err; - } - fn && fn(returnValue); - }); - } + isPickerShow(fn) { + //android return two params: err(error massage) and status(show or not) + //ios return only one param: hide or not... + Picker.isPickerShow((err, status) => { + let returnValue = null; + if (android) { + returnValue = err ? false : status; + } else if (ios) { + returnValue = !err; + } + fn && fn(returnValue); + }); + } }; diff --git a/ios/RCTBEEPickerManager/BzwPicker.m b/ios/RCTBEEPickerManager/BzwPicker.m index 41aea4b99..fe1c0fda5 100755 --- a/ios/RCTBEEPickerManager/BzwPicker.m +++ b/ios/RCTBEEPickerManager/BzwPicker.m @@ -456,10 +456,6 @@ - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComp } else { [dic setValue:value forKey:@"selectedIndex"]; } - - if (self.backArry.count>0) { - self.bolock(dic); - } } - (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component diff --git a/ios/RCTBEEPickerManager/RCTBEEPickerManager.m b/ios/RCTBEEPickerManager/RCTBEEPickerManager.m index 0215d49e2..01a0d581a 100644 --- a/ios/RCTBEEPickerManager/RCTBEEPickerManager.m +++ b/ios/RCTBEEPickerManager/RCTBEEPickerManager.m @@ -34,7 +34,7 @@ + (BOOL)requiresMainQueueSetup RCT_EXPORT_MODULE(); -RCT_EXPORT_METHOD(_init:(NSDictionary *)indic){ +RCT_EXPORT_METHOD(_init:(NSDictionary *)indic resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject){ dispatch_async(dispatch_get_main_queue(), ^{ [[UIApplication sharedApplication].keyWindow endEditing:YES]; @@ -85,8 +85,7 @@ + (BOOL)requiresMainQueueSetup _pick.bolock=^(NSDictionary *backinfoArry){ dispatch_async(dispatch_get_main_queue(), ^{ - - [self.bridge.eventDispatcher sendAppEventWithName:@"pickerEvent" body:backinfoArry]; + resolve(backinfoArry); }); }; From 344d95edda87b744a082aef2f3ea0b26f4c02b56 Mon Sep 17 00:00:00 2001 From: Dishant Walia Date: Thu, 20 Sep 2018 12:14:01 +0530 Subject: [PATCH 2/8] Resolve crashes for Android O with target sdk 26 (#4) * Resolve crashes for Android O with target sdk 26 TYPE_APPLICATION_OVERLAY - add type check in window manager * Update PickerViewModule.java --- .../java/com/beefe/picker/PickerViewModule.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/android/src/main/java/com/beefe/picker/PickerViewModule.java b/android/src/main/java/com/beefe/picker/PickerViewModule.java index 027d36554..5f40d64d2 100644 --- a/android/src/main/java/com/beefe/picker/PickerViewModule.java +++ b/android/src/main/java/com/beefe/picker/PickerViewModule.java @@ -389,19 +389,14 @@ public void onSelected(ArrayList selectedList) { int height = barViewHeight + pickerViewHeight; + if (dialog == null) { dialog = new Dialog(activity, R.style.Dialog_Full_Screen); dialog.setContentView(view); WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(); Window window = dialog.getWindow(); if (window != null) { - if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - window.setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); - }else{ - if (MIUIUtils.isMIUI()) { - layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION; - }else { - //layoutParams.type = WindowManager.LayoutParams.TYPE_TOAST; - } + if (MIUIUtils.isMIUI()) { + layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION; } layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; layoutParams.format = PixelFormat.TRANSPARENT; @@ -410,7 +405,12 @@ public void onSelected(ArrayList selectedList) { layoutParams.height = height; layoutParams.gravity = Gravity.BOTTOM; window.setAttributes(layoutParams); + window.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY); } + } else { + dialog.dismiss(); + dialog.setContentView(view); + } } } From 504a4ad39a26eae3379c874901e074d9da5876e7 Mon Sep 17 00:00:00 2001 From: Dishant Walia Date: Thu, 20 Sep 2018 15:12:18 +0530 Subject: [PATCH 3/8] Update PickerView Module (#5) * Update PickerView Module Add condition for Android O * Update PickerViewModule.java --- .../com/beefe/picker/PickerViewModule.java | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/android/src/main/java/com/beefe/picker/PickerViewModule.java b/android/src/main/java/com/beefe/picker/PickerViewModule.java index 5f40d64d2..16fe9e20a 100644 --- a/android/src/main/java/com/beefe/picker/PickerViewModule.java +++ b/android/src/main/java/com/beefe/picker/PickerViewModule.java @@ -389,24 +389,26 @@ public void onSelected(ArrayList selectedList) { int height = barViewHeight + pickerViewHeight; - if (dialog == null) { + if (dialog == null) { dialog = new Dialog(activity, R.style.Dialog_Full_Screen); dialog.setContentView(view); WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(); Window window = dialog.getWindow(); if (window != null) { - if (MIUIUtils.isMIUI()) { + if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + window.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY); + } else if (MIUIUtils.isMIUI()) { layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION; } - layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; - layoutParams.format = PixelFormat.TRANSPARENT; - layoutParams.windowAnimations = R.style.PickerAnim; - layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; - layoutParams.height = height; - layoutParams.gravity = Gravity.BOTTOM; - window.setAttributes(layoutParams); - window.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY); } + layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; + layoutParams.format = PixelFormat.TRANSPARENT; + layoutParams.windowAnimations = R.style.PickerAnim; + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = height; + layoutParams.gravity = Gravity.BOTTOM; + window.setAttributes(layoutParams); + } else { dialog.dismiss(); dialog.setContentView(view); From c752ebdc8889f4ec8efc5a16a529a61b887f74bc Mon Sep 17 00:00:00 2001 From: Dishant Walia Date: Fri, 21 Sep 2018 13:01:09 +0530 Subject: [PATCH 4/8] Update Picker Module (#6) --- android/src/main/java/com/beefe/picker/PickerViewModule.java | 1 + 1 file changed, 1 insertion(+) diff --git a/android/src/main/java/com/beefe/picker/PickerViewModule.java b/android/src/main/java/com/beefe/picker/PickerViewModule.java index 16fe9e20a..73c2d9fee 100644 --- a/android/src/main/java/com/beefe/picker/PickerViewModule.java +++ b/android/src/main/java/com/beefe/picker/PickerViewModule.java @@ -22,6 +22,7 @@ import com.beefe.picker.view.PickerViewLinkage; import com.beefe.picker.view.ReturnData; import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.Promise; import com.facebook.react.bridge.Callback; import com.facebook.react.bridge.LifecycleEventListener; import com.facebook.react.bridge.ReactApplicationContext; From a73aee162a67ddb4cf99c1d8fee3b458c3d88c17 Mon Sep 17 00:00:00 2001 From: Dishant Walia Date: Tue, 20 Nov 2018 15:37:34 +0530 Subject: [PATCH 5/8] Update pickerViewModule (#7) increase density pixel for toolbar height to fix tool bar display --- .../main/java/com/beefe/picker/PickerViewModule.java | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/android/src/main/java/com/beefe/picker/PickerViewModule.java b/android/src/main/java/com/beefe/picker/PickerViewModule.java index 73c2d9fee..1c763289e 100644 --- a/android/src/main/java/com/beefe/picker/PickerViewModule.java +++ b/android/src/main/java/com/beefe/picker/PickerViewModule.java @@ -163,16 +163,8 @@ public void _init(ReadableMap options, Promise promise) { pickerViewLinkage = (PickerViewLinkage) view.findViewById(R.id.pickerViewLinkage); pickerViewAlone = (PickerViewAlone) view.findViewById(R.id.pickerViewAlone); - int barViewHeight; - if (options.hasKey(PICKER_TOOL_BAR_HEIGHT)) { - try { - barViewHeight = options.getInt(PICKER_TOOL_BAR_HEIGHT); - } catch (Exception e) { - barViewHeight = (int) options.getDouble(PICKER_TOOL_BAR_HEIGHT); - } - } else { - barViewHeight = (int) (activity.getResources().getDisplayMetrics().density * 40); - } + int barViewHeight = (int) (activity.getResources().getDisplayMetrics().density * 90); + RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.MATCH_PARENT, barViewHeight); From 0bd31f76abb9e0bf0cce5d1d54360dac7526ef6f Mon Sep 17 00:00:00 2001 From: Ishant Sagar Date: Tue, 27 Nov 2018 16:04:18 +0530 Subject: [PATCH 6/8] PickerViewModule last commit revert --- .../main/java/com/beefe/picker/PickerViewModule.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/com/beefe/picker/PickerViewModule.java b/android/src/main/java/com/beefe/picker/PickerViewModule.java index 1c763289e..0be4a101d 100644 --- a/android/src/main/java/com/beefe/picker/PickerViewModule.java +++ b/android/src/main/java/com/beefe/picker/PickerViewModule.java @@ -163,7 +163,16 @@ public void _init(ReadableMap options, Promise promise) { pickerViewLinkage = (PickerViewLinkage) view.findViewById(R.id.pickerViewLinkage); pickerViewAlone = (PickerViewAlone) view.findViewById(R.id.pickerViewAlone); - int barViewHeight = (int) (activity.getResources().getDisplayMetrics().density * 90); + int barViewHeight; + if (options.hasKey(PICKER_TOOL_BAR_HEIGHT)) { + try { + barViewHeight = options.getInt(PICKER_TOOL_BAR_HEIGHT); + } catch (Exception e) { + barViewHeight = (int) options.getDouble(PICKER_TOOL_BAR_HEIGHT); + } + } else { + barViewHeight = (int) (activity.getResources().getDisplayMetrics().density * 40); + } RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.MATCH_PARENT, From f9f94ebb76ae02cae3847df1fbbb9f75a2b1c144 Mon Sep 17 00:00:00 2001 From: Dishant Walia Date: Mon, 31 Jan 2022 11:14:43 +0530 Subject: [PATCH 7/8] Update gradle to make it compatible with gradle 7 --- android/build.gradle | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 40f4f265c..9037e9151 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,12 +1,15 @@ apply plugin: 'com.android.library' +def safeExtGet(prop, fallback) { + rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback +} android { - compileSdkVersion 27 - buildToolsVersion "23.0.1" + compileSdkVersion safeExtGet('compileSdkVersion', 30) + buildToolsVersion safeExtGet('buildToolsVersion', "30.0.3") defaultConfig { - minSdkVersion 16 - targetSdkVersion 27 + minSdkVersion safeExtGet('minSdkVersion', 18) + targetSdkVersion safeExtGet('targetSdkVersion', 30) versionCode 1 versionName "1.0" @@ -22,6 +25,6 @@ android { } dependencies { - compile fileTree(include: ['*.jar'], dir: 'libs') - compile 'com.facebook.react:react-native:+' + implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation 'com.facebook.react:react-native:+' } From da0a19718329097b4195eea1e021021cd9e13f5f Mon Sep 17 00:00:00 2001 From: Dishant Walia Date: Wed, 11 Sep 2024 15:51:42 +0530 Subject: [PATCH 8/8] [JIRA-MF-2479] Update PickerViewModule.java Add DP for restrict font scaling --- .../src/main/java/com/beefe/picker/PickerViewModule.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/android/src/main/java/com/beefe/picker/PickerViewModule.java b/android/src/main/java/com/beefe/picker/PickerViewModule.java index 0be4a101d..b9082d8bc 100644 --- a/android/src/main/java/com/beefe/picker/PickerViewModule.java +++ b/android/src/main/java/com/beefe/picker/PickerViewModule.java @@ -6,8 +6,9 @@ import android.graphics.Color; import android.graphics.PixelFormat; import android.graphics.Typeface; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.text.TextUtils; +import android.util.TypedValue; import android.view.Gravity; import android.view.View; import android.view.Window; @@ -187,9 +188,9 @@ public void _init(ReadableMap options, Promise promise) { if (options.hasKey(PICKER_TOOL_BAR_TEXT_SIZE)) { int toolBarTextSize = options.getInt(PICKER_TOOL_BAR_TEXT_SIZE); - cancelTV.setTextSize(toolBarTextSize); - titleTV.setTextSize(toolBarTextSize); - confirmTV.setTextSize(toolBarTextSize); + cancelTV.setTextSize(TypedValue.COMPLEX_UNIT_DIP, toolBarTextSize); + titleTV.setTextSize(TypedValue.COMPLEX_UNIT_DIP,toolBarTextSize); + confirmTV.setTextSize(TypedValue.COMPLEX_UNIT_DIP,toolBarTextSize); } if (options.hasKey(PICKER_CONFIRM_BTN_TEXT)) {