PickerViewModule.java 20.8 KB
Newer Older
xwenliang's avatar
xwenliang committed
1 2
package com.beefe.picker;

3
import android.content.res.AssetManager;
xwenliang's avatar
xwenliang committed
4
import android.app.Activity;
5
import android.app.Dialog;
xwenliang's avatar
xwenliang committed
6
import android.graphics.Color;
7
import android.graphics.PixelFormat;
8
import android.graphics.Typeface;
冷佳娟's avatar
冷佳娟 committed
9
import androidx.annotation.Nullable;
xwenliang's avatar
xwenliang committed
10 11 12
import android.text.TextUtils;
import android.view.Gravity;
import android.view.View;
13
import android.view.Window;
xwenliang's avatar
xwenliang committed
14 15 16
import android.view.WindowManager;
import android.widget.RelativeLayout;
import android.widget.TextView;
Karthikeyan Ganesan's avatar
Karthikeyan Ganesan committed
17
import android.os.Build;
xwenliang's avatar
xwenliang committed
18

travelgeezer's avatar
travelgeezer committed
19
import com.beefe.picker.util.MIUIUtils;
xwenliang's avatar
xwenliang committed
20 21 22
import com.beefe.picker.view.OnSelectedListener;
import com.beefe.picker.view.PickerViewAlone;
import com.beefe.picker.view.PickerViewLinkage;
xwenliang's avatar
xwenliang committed
23
import com.beefe.picker.view.ReturnData;
xwenliang's avatar
xwenliang committed
24 25
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.Callback;
xwenliang's avatar
xwenliang committed
26
import com.facebook.react.bridge.LifecycleEventListener;
xwenliang's avatar
xwenliang committed
27 28 29 30 31 32 33 34 35 36 37 38
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.WritableArray;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.modules.core.DeviceEventManagerModule;

import java.util.ArrayList;

xwenliang's avatar
xwenliang committed
39 40
import static android.graphics.Color.argb;

xwenliang's avatar
xwenliang committed
41
/**
xwenliang's avatar
xwenliang committed
42
 * Author: <a href="https://github.com/shexiaoheng">heng</a>
43
 * <p>
xwenliang's avatar
xwenliang committed
44
 * Created by heng on 16/9/5.
45
 * <p>
xwenliang's avatar
xwenliang committed
46
 * Edited by heng on 16/9/22.
47 48
 * 1. PopupWindow height : full screen -> assignation
 * 2. Added pickerToolBarHeight support
49
 * <p>
50 51 52
 * Edited by heng on 2016/10/19.
 * 1. Added weights support
 * 2. Fixed return data bug
53 54 55 56 57 58 59 60 61
 * <p>
 * Edited by heng on 2016/11/16.
 * 1. Used WindowManager replace PopupWindow
 * 2. Removed method initOK() toggle() show() isPickerShow()
 * 3. Implements Application.ActivityLifecycleCallbacks
 * <p>
 * Edited by heng on 2016/11/17
 * 1. Used Dialog replace WindowManger
 * 2. Restore method show() isPickerShow()
xwenliang's avatar
xwenliang committed
62 63 64 65
 * <p>
 * Edited by heng on 2016/12/23
 * 1. Changed returnData type
 * 2. Added pickerToolBarFontSize
xwenliang's avatar
xwenliang committed
66
 * <p>
xwenliang's avatar
xwenliang committed
67 68 69 70 71 72
 * Edited by heng on 2016/12/26
 * 1. Fixed returnData bug
 * 2. Added pickerFontColor
 * 3. Added pickerFontSize
 * 4. Used LifecycleEventListener replace Application.ActivityLifecycleCallbacks
 * 5. Fixed other bug
xwenliang's avatar
xwenliang committed
73 74 75 76
 *
 * Edited by heng on 2017/01/17
 * 1. Added select(ReadableArray array, Callback callback)
 * 2. Optimization code
xwenliang's avatar
xwenliang committed
77 78
 */

xwenliang's avatar
xwenliang committed
79
public class PickerViewModule extends ReactContextBaseJavaModule implements LifecycleEventListener {
80 81 82 83
    
    private static final String FONTS = "fonts/";
    private static final String OTF = ".otf";
    private static final String TTF = ".ttf";
xwenliang's avatar
xwenliang committed
84 85 86 87 88

    private static final String REACT_CLASS = "BEEPickerManager";

    private static final String PICKER_DATA = "pickerData";
    private static final String SELECTED_VALUE = "selectedValue";
89

xwenliang's avatar
xwenliang committed
90
    private static final String IS_LOOP = "isLoop";
91 92 93

    private static final String WEIGHTS = "wheelFlex";

xwenliang's avatar
xwenliang committed
94
    private static final String PICKER_BG_COLOR = "pickerBg";
95

xwenliang's avatar
xwenliang committed
96 97 98
    private static final String PICKER_TOOL_BAR_BG = "pickerToolBarBg";
    private static final String PICKER_TOOL_BAR_HEIGHT = "pickerToolBarHeight";
    private static final String PICKER_TOOL_BAR_TEXT_SIZE = "pickerToolBarFontSize";
99

xwenliang's avatar
xwenliang committed
100 101
    private static final String PICKER_CONFIRM_BTN_TEXT = "pickerConfirmBtnText";
    private static final String PICKER_CONFIRM_BTN_COLOR = "pickerConfirmBtnColor";
102

xwenliang's avatar
xwenliang committed
103 104
    private static final String PICKER_CANCEL_BTN_TEXT = "pickerCancelBtnText";
    private static final String PICKER_CANCEL_BTN_COLOR = "pickerCancelBtnColor";
105

xwenliang's avatar
xwenliang committed
106 107 108 109 110
    private static final String PICKER_TITLE_TEXT = "pickerTitleText";
    private static final String PICKER_TITLE_TEXT_COLOR = "pickerTitleColor";

    private static final String PICKER_TEXT_COLOR = "pickerFontColor";
    private static final String PICKER_TEXT_SIZE = "pickerFontSize";
111
    private static final String PICKER_TEXT_ELLIPSIS_LEN = "pickerTextEllipsisLen";
xwenliang's avatar
xwenliang committed
112

113 114
    private static final String PICKER_FONT_FAMILY = "pickerFontFamily";

xwenliang's avatar
xwenliang committed
115 116 117 118 119
    private static final String PICKER_EVENT_NAME = "pickerEvent";
    private static final String EVENT_KEY_CONFIRM = "confirm";
    private static final String EVENT_KEY_CANCEL = "cancel";
    private static final String EVENT_KEY_SELECTED = "select";

xwenliang's avatar
xwenliang committed
120
    private static final String ERROR_NOT_INIT = "please initialize the component first";
xwenliang's avatar
xwenliang committed
121

122
    private Dialog dialog = null;
xwenliang's avatar
xwenliang committed
123 124 125 126 127 128

    private boolean isLoop = true;

    private String confirmText;
    private String cancelText;
    private String titleText;
129
    private int pickerTextEllipsisLen;
xwenliang's avatar
xwenliang committed
130

131 132
    private double[] weights;

xwenliang's avatar
xwenliang committed
133
    private ArrayList<ReturnData> returnData;
xwenliang's avatar
xwenliang committed
134

135
    private int curStatus;
xwenliang's avatar
xwenliang committed
136

xwenliang's avatar
xwenliang committed
137 138 139
    private PickerViewLinkage pickerViewLinkage;
    private PickerViewAlone pickerViewAlone;

xwenliang's avatar
xwenliang committed
140 141
    public PickerViewModule(ReactApplicationContext reactContext) {
        super(reactContext);
xwenliang's avatar
xwenliang committed
142
        reactContext.addLifecycleEventListener(this);
xwenliang's avatar
xwenliang committed
143 144 145 146 147 148 149 150 151 152 153
    }

    @Override
    public String getName() {
        return REACT_CLASS;
    }

    @ReactMethod
    public void _init(ReadableMap options) {
        Activity activity = getCurrentActivity();
        if (activity != null && options.hasKey(PICKER_DATA)) {
154
            View view = activity.getLayoutInflater().inflate(R.layout.picker_view, null);
155 156 157 158
            RelativeLayout barLayout = (RelativeLayout) view.findViewById(R.id.barLayout);
            TextView cancelTV = (TextView) view.findViewById(R.id.cancel);
            TextView titleTV = (TextView) view.findViewById(R.id.title);
            TextView confirmTV = (TextView) view.findViewById(R.id.confirm);
159
            RelativeLayout pickerLayout = (RelativeLayout) view.findViewById(R.id.pickerLayout);
jinlongtao's avatar
jinlongtao committed
160 161
            pickerViewLinkage = (PickerViewLinkage) view.findViewById(R.id.pickerViewLinkage);
            pickerViewAlone = (PickerViewAlone) view.findViewById(R.id.pickerViewAlone);
162 163

            int barViewHeight;
xwenliang's avatar
xwenliang committed
164
            if (options.hasKey(PICKER_TOOL_BAR_HEIGHT)) {
xwenliang's avatar
xwenliang committed
165
                try {
xwenliang's avatar
xwenliang committed
166
                    barViewHeight = options.getInt(PICKER_TOOL_BAR_HEIGHT);
xwenliang's avatar
xwenliang committed
167
                } catch (Exception e) {
xwenliang's avatar
xwenliang committed
168
                    barViewHeight = (int) options.getDouble(PICKER_TOOL_BAR_HEIGHT);
xwenliang's avatar
xwenliang committed
169
                }
xwenliang's avatar
xwenliang committed
170 171 172 173 174 175 176
            } else {
                barViewHeight = (int) (activity.getResources().getDisplayMetrics().density * 40);
            }
            RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
                    RelativeLayout.LayoutParams.MATCH_PARENT,
                    barViewHeight);
            barLayout.setLayoutParams(params);
xwenliang's avatar
xwenliang committed
177

xwenliang's avatar
xwenliang committed
178 179
            if (options.hasKey(PICKER_TOOL_BAR_BG)) {
                ReadableArray array = options.getArray(PICKER_TOOL_BAR_BG);
180
                int[] colors = getColor(array);
xwenliang's avatar
xwenliang committed
181
                barLayout.setBackgroundColor(argb(colors[3], colors[0], colors[1], colors[2]));
xwenliang's avatar
xwenliang committed
182 183
            }

xwenliang's avatar
xwenliang committed
184 185 186 187 188 189
            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);
            }
xwenliang's avatar
xwenliang committed
190

xwenliang's avatar
xwenliang committed
191 192
            if (options.hasKey(PICKER_CONFIRM_BTN_TEXT)) {
                confirmText = options.getString(PICKER_CONFIRM_BTN_TEXT);
xwenliang's avatar
xwenliang committed
193 194 195
            }
            confirmTV.setText(!TextUtils.isEmpty(confirmText) ? confirmText : "");

xwenliang's avatar
xwenliang committed
196 197
            if (options.hasKey(PICKER_CONFIRM_BTN_COLOR)) {
                ReadableArray array = options.getArray(PICKER_CONFIRM_BTN_COLOR);
198
                int[] colors = getColor(array);
xwenliang's avatar
xwenliang committed
199
                confirmTV.setTextColor(argb(colors[3], colors[0], colors[1], colors[2]));
xwenliang's avatar
xwenliang committed
200 201 202 203
            }
            confirmTV.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
204
                    switch (curStatus) {
205 206 207 208 209 210 211
                        case 0:
                            returnData = pickerViewAlone.getSelectedData();
                            break;
                        case 1:
                            returnData = pickerViewLinkage.getSelectedData();
                            break;
                    }
xwenliang's avatar
xwenliang committed
212 213 214 215 216 217
                    commonEvent(EVENT_KEY_CONFIRM);
                    hide();
                }
            });


xwenliang's avatar
xwenliang committed
218 219
            if (options.hasKey(PICKER_TITLE_TEXT)) {
                titleText = options.getString(PICKER_TITLE_TEXT);
xwenliang's avatar
xwenliang committed
220 221
            }
            titleTV.setText(!TextUtils.isEmpty(titleText) ? titleText : "");
xwenliang's avatar
xwenliang committed
222 223
            if (options.hasKey(PICKER_TITLE_TEXT_COLOR)) {
                ReadableArray array = options.getArray(PICKER_TITLE_TEXT_COLOR);
224
                int[] colors = getColor(array);
xwenliang's avatar
xwenliang committed
225
                titleTV.setTextColor(argb(colors[3], colors[0], colors[1], colors[2]));
xwenliang's avatar
xwenliang committed
226 227
            }

xwenliang's avatar
xwenliang committed
228 229
            if (options.hasKey(PICKER_CANCEL_BTN_TEXT)) {
                cancelText = options.getString(PICKER_CANCEL_BTN_TEXT);
xwenliang's avatar
xwenliang committed
230 231
            }
            cancelTV.setText(!TextUtils.isEmpty(cancelText) ? cancelText : "");
xwenliang's avatar
xwenliang committed
232 233
            if (options.hasKey(PICKER_CANCEL_BTN_COLOR)) {
                ReadableArray array = options.getArray(PICKER_CANCEL_BTN_COLOR);
234
                int[] colors = getColor(array);
xwenliang's avatar
xwenliang committed
235
                cancelTV.setTextColor(argb(colors[3], colors[0], colors[1], colors[2]));
xwenliang's avatar
xwenliang committed
236 237 238 239
            }
            cancelTV.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
240
                    switch (curStatus) {
241 242 243 244 245 246 247
                        case 0:
                            returnData = pickerViewAlone.getSelectedData();
                            break;
                        case 1:
                            returnData = pickerViewLinkage.getSelectedData();
                            break;
                    }
xwenliang's avatar
xwenliang committed
248 249 250 251 252
                    commonEvent(EVENT_KEY_CANCEL);
                    hide();
                }
            });

253 254 255 256
            if(options.hasKey(PICKER_TEXT_ELLIPSIS_LEN)){
                pickerTextEllipsisLen = options.getInt(PICKER_TEXT_ELLIPSIS_LEN);
            }

xwenliang's avatar
xwenliang committed
257 258 259 260
            if (options.hasKey(IS_LOOP)) {
                isLoop = options.getBoolean(IS_LOOP);
            }

261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286
            if (options.hasKey(WEIGHTS)) {
                ReadableArray array = options.getArray(WEIGHTS);
                weights = new double[array.size()];
                for (int i = 0; i < array.size(); i++) {
                    switch (array.getType(i).name()) {
                        case "Number":
                            try {
                                weights[i] = array.getInt(i);
                            } catch (Exception e) {
                                weights[i] = array.getDouble(i);
                            }
                            break;
                        case "String":
                            try {
                                weights[i] = Double.parseDouble(array.getString(i));
                            } catch (Exception e) {
                                weights[i] = 1.0;
                            }
                            break;
                        default:
                            weights[i] = 1.0;
                            break;
                    }
                }
            }

xwenliang's avatar
xwenliang committed
287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302
            int pickerTextColor = 0xff000000;
            if (options.hasKey(PICKER_TEXT_COLOR)) {
                ReadableArray array = options.getArray(PICKER_TEXT_COLOR);
                int[] colors = getColor(array);
                pickerTextColor = Color.argb(colors[3], colors[0], colors[1], colors[2]);
            }

            int pickerTextSize = 16;
            if (options.hasKey(PICKER_TEXT_SIZE)) {
                try {
                    pickerTextSize = options.getInt(PICKER_TEXT_SIZE);
                } catch (Exception e) {
                    pickerTextSize = (int) options.getDouble(PICKER_TEXT_SIZE);
                }
            }

xwenliang's avatar
xwenliang committed
303 304
            ReadableArray pickerData = options.getArray(PICKER_DATA);

305
            int pickerViewHeight;
xwenliang's avatar
xwenliang committed
306 307
            String name = pickerData.getType(0).name();
            switch (name) {
xwenliang's avatar
xwenliang committed
308
                case "Map":
309
                    curStatus = 1;
xwenliang's avatar
xwenliang committed
310 311
                    pickerViewLinkage.setVisibility(View.VISIBLE);
                    pickerViewAlone.setVisibility(View.GONE);
312

313
                    pickerViewLinkage.setPickerData(pickerData, weights);
xwenliang's avatar
xwenliang committed
314 315
                    pickerViewLinkage.setTextColor(pickerTextColor);
                    pickerViewLinkage.setTextSize(pickerTextSize);
316
                    pickerViewLinkage.setTextEllipsisLen(pickerTextEllipsisLen);
xwenliang's avatar
xwenliang committed
317
                    pickerViewLinkage.setIsLoop(isLoop);
318

xwenliang's avatar
xwenliang committed
319 320
                    pickerViewLinkage.setOnSelectListener(new OnSelectedListener() {
                        @Override
xwenliang's avatar
xwenliang committed
321
                        public void onSelected(ArrayList<ReturnData> selectedList) {
322
                            returnData = selectedList;
xwenliang's avatar
xwenliang committed
323 324 325
                            commonEvent(EVENT_KEY_SELECTED);
                        }
                    });
xwenliang's avatar
xwenliang committed
326
                    pickerViewHeight = pickerViewLinkage.getViewHeight();
xwenliang's avatar
xwenliang committed
327
                    break;
xwenliang's avatar
xwenliang committed
328
                default:
329
                    curStatus = 0;
xwenliang's avatar
xwenliang committed
330 331
                    pickerViewAlone.setVisibility(View.VISIBLE);
                    pickerViewLinkage.setVisibility(View.GONE);
xwenliang's avatar
xwenliang committed
332

333
                    pickerViewAlone.setPickerData(pickerData, weights);
xwenliang's avatar
xwenliang committed
334 335
                    pickerViewAlone.setTextColor(pickerTextColor);
                    pickerViewAlone.setTextSize(pickerTextSize);
336
                    pickerViewAlone.setTextEllipsisLen(pickerTextEllipsisLen);
xwenliang's avatar
xwenliang committed
337 338 339 340
                    pickerViewAlone.setIsLoop(isLoop);

                    pickerViewAlone.setOnSelectedListener(new OnSelectedListener() {
                        @Override
xwenliang's avatar
xwenliang committed
341
                        public void onSelected(ArrayList<ReturnData> selectedList) {
342
                            returnData = selectedList;
xwenliang's avatar
xwenliang committed
343 344 345 346
                            commonEvent(EVENT_KEY_SELECTED);
                        }
                    });

xwenliang's avatar
xwenliang committed
347
                    pickerViewHeight = pickerViewAlone.getViewHeight();
xwenliang's avatar
xwenliang committed
348 349 350
                    break;
            }

351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376
            if (options.hasKey(PICKER_FONT_FAMILY)) {
                Typeface typeface = null;
                AssetManager assetManager = activity.getApplicationContext().getAssets();
                final String fontFamily = options.getString(PICKER_FONT_FAMILY);
                try {
                    String path = FONTS + fontFamily + TTF;
                    typeface = Typeface.createFromAsset(assetManager, path);
                } catch (Exception ignored) {
                    try {
                        String path = FONTS + fontFamily + OTF;
                        typeface = Typeface.createFromAsset(assetManager, path);
                    } catch (Exception ignored2) {
                        try {
                            typeface = Typeface.create(fontFamily, Typeface.NORMAL);
                        } catch (Exception ignored3) {
                        }
                    }
                }
                cancelTV.setTypeface(typeface);
                titleTV.setTypeface(typeface);
                confirmTV.setTypeface(typeface);

                pickerViewAlone.setTypeface(typeface);
                pickerViewLinkage.setTypeface(typeface);
            }

xwenliang's avatar
xwenliang committed
377 378 379 380 381 382
            if (options.hasKey(SELECTED_VALUE)) {
                ReadableArray array = options.getArray(SELECTED_VALUE);
                String[] selectedValue = getSelectedValue(array);
                select(selectedValue);
            }

383 384 385
            if (options.hasKey(PICKER_BG_COLOR)) {
                ReadableArray array = options.getArray(PICKER_BG_COLOR);
                int[] colors = getColor(array);
xwenliang's avatar
xwenliang committed
386
                pickerLayout.setBackgroundColor(argb(colors[3], colors[0], colors[1], colors[2]));
387 388 389 390 391
            }

            int height = barViewHeight + pickerViewHeight;
            if (dialog == null) {
                dialog = new Dialog(activity, R.style.Dialog_Full_Screen);
392 393 394 395
                dialog.setContentView(view);
                WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
                Window window = dialog.getWindow();
                if (window != null) {
Karthikeyan Ganesan's avatar
Karthikeyan Ganesan committed
396
                    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
397
                        window.setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
Karthikeyan Ganesan's avatar
Karthikeyan Ganesan committed
398 399 400 401 402 403
                    }else{
                        if (MIUIUtils.isMIUI()) {
                            layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION;
                        }else {
                            //layoutParams.type = WindowManager.LayoutParams.TYPE_TOAST;
                        }
404 405 406 407 408 409 410
                    }
                    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;
Karthikeyan Ganesan's avatar
Karthikeyan Ganesan committed
411
                    window.setAttributes(layoutParams);   
412
                }
413
            } else {
414
                dialog.dismiss();
415
                dialog.setContentView(view);
xwenliang's avatar
xwenliang committed
416 417 418 419
            }
        }
    }

xwenliang's avatar
xwenliang committed
420 421 422 423 424 425 426 427 428 429 430 431
    @ReactMethod
    public void select(ReadableArray array, Callback callback) {
        if (dialog == null) {
            if (callback != null) {
                callback.invoke(ERROR_NOT_INIT);
            }
            return;
        }
        String[] selectedValue = getSelectedValue(array);
        select(selectedValue);
    }

xwenliang's avatar
xwenliang committed
432
    @ReactMethod
433 434
    public void show() {
        if (dialog == null) {
xwenliang's avatar
xwenliang committed
435 436
            return;
        }
437 438
        if (!dialog.isShowing()) {
            dialog.show();
xwenliang's avatar
xwenliang committed
439 440 441 442 443
        }
    }

    @ReactMethod
    public void hide() {
444 445 446 447 448
        if (dialog == null) {
            return;
        }
        if (dialog.isShowing()) {
            dialog.dismiss();
xwenliang's avatar
xwenliang committed
449 450 451 452 453
        }
    }

    @ReactMethod
    public void isPickerShow(Callback callback) {
xwenliang's avatar
xwenliang committed
454 455
        if (callback == null)
            return;
456
        if (dialog == null) {
xwenliang's avatar
xwenliang committed
457 458
            callback.invoke(ERROR_NOT_INIT);
        } else {
459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477
            callback.invoke(null, dialog.isShowing());
        }
    }

    private int[] getColor(ReadableArray array) {
        int[] colors = new int[4];
        for (int i = 0; i < array.size(); i++) {
            switch (i) {
                case 0:
                case 1:
                case 2:
                    colors[i] = array.getInt(i);
                    break;
                case 3:
                    colors[i] = (int) (array.getDouble(i) * 255);
                    break;
                default:
                    break;
            }
xwenliang's avatar
xwenliang committed
478
        }
479
        return colors;
xwenliang's avatar
xwenliang committed
480 481
    }

xwenliang's avatar
xwenliang committed
482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516
    private String[] getSelectedValue(ReadableArray array) {
        String[] selectValue = new String[array.size()];
        String value = "";
        for (int i = 0; i < array.size(); i++) {
            switch (array.getType(i).name()) {
                case "Boolean":
                    value = String.valueOf(array.getBoolean(i));
                    break;
                case "Number":
                    try {
                        value = String.valueOf(array.getInt(i));
                    } catch (Exception e) {
                        value = String.valueOf(array.getDouble(i));
                    }
                    break;
                case "String":
                    value = array.getString(i);
                    break;
            }
            selectValue[i] = value;
        }
        return selectValue;
    }

    private void select(String[] selectedValue) {
        switch (curStatus) {
            case 0:
                pickerViewAlone.setSelectValue(selectedValue);
                break;
            case 1:
                pickerViewLinkage.setSelectValue(selectedValue);
                break;
        }
    }

xwenliang's avatar
xwenliang committed
517 518
    private void commonEvent(String eventKey) {
        WritableMap map = Arguments.createMap();
xwenliang's avatar
xwenliang committed
519 520 521 522 523 524
        map.putString("type", eventKey);
        WritableArray indexes = Arguments.createArray();
        WritableArray values = Arguments.createArray();
        for (ReturnData data : returnData) {
            indexes.pushInt(data.getIndex());
            values.pushString(data.getItem());
xwenliang's avatar
xwenliang committed
525
        }
xwenliang's avatar
xwenliang committed
526 527
        map.putArray("selectedValue", values);
        map.putArray("selectedIndex", indexes);
xwenliang's avatar
xwenliang committed
528 529 530 531 532 533 534 535 536 537
        sendEvent(getReactApplicationContext(), PICKER_EVENT_NAME, map);
    }

    private void sendEvent(ReactContext reactContext,
                           String eventName,
                           @Nullable WritableMap params) {
        reactContext
                .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
                .emit(eventName, params);
    }
538 539

    @Override
xwenliang's avatar
xwenliang committed
540
    public void onHostResume() {
541 542 543 544

    }

    @Override
xwenliang's avatar
xwenliang committed
545
    public void onHostPause() {
546
        hide();
xwenliang's avatar
xwenliang committed
547
        dialog = null;
548 549 550
    }

    @Override
xwenliang's avatar
xwenliang committed
551
    public void onHostDestroy() {
552 553
        hide();
        dialog = null;
554
    }
xwenliang's avatar
xwenliang committed
555
}