diff --git a/Libraries/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec-generated.mm b/Libraries/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec-generated.mm index bf5093af987..c3d0f565300 100644 --- a/Libraries/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec-generated.mm +++ b/Libraries/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec-generated.mm @@ -2378,39 +2378,6 @@ namespace facebook { } // namespace react } // namespace facebook -@implementation RCTCxxConvert (NativeTimePickerAndroid_TimePickerOptions) -+ (RCTManagedPointer *)JS_NativeTimePickerAndroid_TimePickerOptions:(id)json -{ - return facebook::react::managedPointer(json); -} -@end -namespace facebook { - namespace react { - - - static facebook::jsi::Value __hostFunction_NativeTimePickerAndroidSpecJSI_open(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) { - return static_cast(turboModule).invokeObjCMethod(rt, PromiseKind, "open", @selector(open:resolve:reject:), args, count); - } - - - NativeTimePickerAndroidSpecJSI::NativeTimePickerAndroidSpecJSI(const ObjCTurboModule::InitParams ¶ms) - : ObjCTurboModule(params) { - - methodMap_["open"] = MethodMetadata {1, __hostFunction_NativeTimePickerAndroidSpecJSI_open}; - - setMethodArgConversionSelector(@"open", 0, @"JS_NativeTimePickerAndroid_TimePickerOptions:"); - - - } - - } // namespace react -} // namespace facebook -@implementation RCTCxxConvert (NativeTimePickerAndroid_TimePickerResult) -+ (RCTManagedPointer *)JS_NativeTimePickerAndroid_TimePickerResult:(id)json -{ - return facebook::react::managedPointer(json); -} -@end namespace facebook { namespace react { diff --git a/Libraries/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec.h b/Libraries/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec.h index 8cd831f0272..ae5df71d3c9 100644 --- a/Libraries/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec.h +++ b/Libraries/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec.h @@ -2525,63 +2525,6 @@ namespace facebook { }; } // namespace react } // namespace facebook - -namespace JS { - namespace NativeTimePickerAndroid { - struct TimePickerOptions { - folly::Optional hour() const; - folly::Optional minute() const; - folly::Optional is24Hour() const; - NSString *mode() const; - - TimePickerOptions(NSDictionary *const v) : _v(v) {} - private: - NSDictionary *_v; - }; - } -} - -@interface RCTCxxConvert (NativeTimePickerAndroid_TimePickerOptions) -+ (RCTManagedPointer *)JS_NativeTimePickerAndroid_TimePickerOptions:(id)json; -@end -@protocol NativeTimePickerAndroidSpec - -- (void)open:(JS::NativeTimePickerAndroid::TimePickerOptions &)options - resolve:(RCTPromiseResolveBlock)resolve - reject:(RCTPromiseRejectBlock)reject; - -@end -namespace facebook { - namespace react { - /** - * ObjC++ class for module 'TimePickerAndroid' - */ - - class JSI_EXPORT NativeTimePickerAndroidSpecJSI : public ObjCTurboModule { - public: - NativeTimePickerAndroidSpecJSI(const ObjCTurboModule::InitParams ¶ms); - - }; - } // namespace react -} // namespace facebook - -namespace JS { - namespace NativeTimePickerAndroid { - struct TimePickerResult { - NSString *action() const; - double hour() const; - double minute() const; - - TimePickerResult(NSDictionary *const v) : _v(v) {} - private: - NSDictionary *_v; - }; - } -} - -@interface RCTCxxConvert (NativeTimePickerAndroid_TimePickerResult) -+ (RCTManagedPointer *)JS_NativeTimePickerAndroid_TimePickerResult:(id)json; -@end @protocol NativeTimingSpec - (void)createTimer:(double)callbackID @@ -3797,41 +3740,6 @@ inline JS::NativeStatusBarManagerIOS::Constants::Builder::Builder(const Input i) inline JS::NativeStatusBarManagerIOS::Constants::Builder::Builder(Constants i) : _factory(^{ return i.unsafeRawValue(); }) {} -inline folly::Optional JS::NativeTimePickerAndroid::TimePickerOptions::hour() const -{ - id const p = _v[@"hour"]; - return RCTBridgingToOptionalDouble(p); -} -inline folly::Optional JS::NativeTimePickerAndroid::TimePickerOptions::minute() const -{ - id const p = _v[@"minute"]; - return RCTBridgingToOptionalDouble(p); -} -inline folly::Optional JS::NativeTimePickerAndroid::TimePickerOptions::is24Hour() const -{ - id const p = _v[@"is24Hour"]; - return RCTBridgingToOptionalBool(p); -} -inline NSString *JS::NativeTimePickerAndroid::TimePickerOptions::mode() const -{ - id const p = _v[@"mode"]; - return RCTBridgingToString(p); -} -inline NSString *JS::NativeTimePickerAndroid::TimePickerResult::action() const -{ - id const p = _v[@"action"]; - return RCTBridgingToString(p); -} -inline double JS::NativeTimePickerAndroid::TimePickerResult::hour() const -{ - id const p = _v[@"hour"]; - return RCTBridgingToDouble(p); -} -inline double JS::NativeTimePickerAndroid::TimePickerResult::minute() const -{ - id const p = _v[@"minute"]; - return RCTBridgingToDouble(p); -} inline JS::NativeToastAndroid::Constants::Builder::Builder(const Input i) : _factory(^{ NSMutableDictionary *d = [NSMutableDictionary new]; auto SHORT = i.SHORT.get(); diff --git a/Libraries/TimePickerAndroid/NativeTimePickerAndroid.js b/Libraries/TimePickerAndroid/NativeTimePickerAndroid.js deleted file mode 100644 index b91cfa7b27a..00000000000 --- a/Libraries/TimePickerAndroid/NativeTimePickerAndroid.js +++ /dev/null @@ -1,34 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - */ - -'use strict'; - -import type {TurboModule} from '../TurboModule/RCTExport'; -import * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry'; - -export type TimePickerOptions = {| - hour?: number, - minute?: number, - is24Hour?: boolean, - mode?: string, -|}; - -export type TimePickerResult = {| - action: string, - hour: number, - minute: number, -|}; - -export interface Spec extends TurboModule { - // eslint-disable-next-line lint/react-native-modules - +open: (options: TimePickerOptions) => Promise; -} - -export default (TurboModuleRegistry.get('TimePickerAndroid'): ?Spec); diff --git a/ReactAndroid/src/androidTest/java/com/facebook/react/tests/BUCK b/ReactAndroid/src/androidTest/java/com/facebook/react/tests/BUCK index 798f91566e8..0b29ef31268 100644 --- a/ReactAndroid/src/androidTest/java/com/facebook/react/tests/BUCK +++ b/ReactAndroid/src/androidTest/java/com/facebook/react/tests/BUCK @@ -28,7 +28,6 @@ rn_android_library( react_native_target("java/com/facebook/react/modules/deviceinfo:deviceinfo"), react_native_target("java/com/facebook/react/modules/share:share"), react_native_target("java/com/facebook/react/modules/systeminfo:systeminfo"), - react_native_target("java/com/facebook/react/modules/timepicker:timepicker"), react_native_target("java/com/facebook/react/touch:touch"), react_native_target("java/com/facebook/react/uimanager:uimanager"), react_native_target("java/com/facebook/react/uimanager/annotations:annotations"), diff --git a/ReactAndroid/src/androidTest/java/com/facebook/react/tests/TimePickerDialogTestCase.java b/ReactAndroid/src/androidTest/java/com/facebook/react/tests/TimePickerDialogTestCase.java deleted file mode 100644 index 4325a3a6af4..00000000000 --- a/ReactAndroid/src/androidTest/java/com/facebook/react/tests/TimePickerDialogTestCase.java +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -package com.facebook.react.tests; - -import android.app.TimePickerDialog; -import android.content.DialogInterface; -import androidx.fragment.app.DialogFragment; -import com.facebook.react.bridge.BaseJavaModule; -import com.facebook.react.bridge.JavaScriptModule; -import com.facebook.react.bridge.ReactMethod; -import com.facebook.react.bridge.WritableMap; -import com.facebook.react.bridge.WritableNativeMap; -import com.facebook.react.modules.timepicker.TimePickerDialogModule; -import com.facebook.react.testing.ReactAppInstrumentationTestCase; -import com.facebook.react.testing.ReactInstanceSpecForTest; -import java.util.ArrayList; -import java.util.List; - -/** Test case for {@link TimePickerDialogModule} options and callbacks. */ -public class TimePickerDialogTestCase extends ReactAppInstrumentationTestCase { - - private static interface TimePickerDialogTestModule extends JavaScriptModule { - public void showTimePickerDialog(WritableMap options); - } - - private static class TimePickerDialogRecordingModule extends BaseJavaModule { - - private final List mTimes = new ArrayList(); - private int mDismissed = 0; - private int mErrors = 0; - - @Override - public String getName() { - return "TimePickerDialogRecordingModule"; - } - - @ReactMethod - public void recordTime(int hour, int minute) { - mTimes.add(new Integer[] {hour, minute}); - } - - @ReactMethod - public void recordDismissed() { - mDismissed++; - } - - @ReactMethod - public void recordError() { - mErrors++; - } - - public List getTimes() { - return new ArrayList(mTimes); - } - - public int getDismissed() { - return mDismissed; - } - - public int getErrors() { - return mErrors; - } - } - - final TimePickerDialogRecordingModule mRecordingModule = new TimePickerDialogRecordingModule(); - - @Override - protected ReactInstanceSpecForTest createReactInstanceSpecForTest() { - return super.createReactInstanceSpecForTest().addNativeModule(mRecordingModule); - } - - @Override - protected String getReactApplicationKeyUnderTest() { - return "TimePickerDialogTestApp"; - } - - private TimePickerDialogTestModule getTestModule() { - return getReactContext().getCatalystInstance().getJSModule(TimePickerDialogTestModule.class); - } - - private DialogFragment showDialog(WritableMap options) { - getTestModule().showTimePickerDialog(options); - - waitForBridgeAndUIIdle(); - getInstrumentation().waitForIdleSync(); - - return (DialogFragment) - getActivity() - .getSupportFragmentManager() - .findFragmentByTag(TimePickerDialogModule.FRAGMENT_TAG); - } - - public void testShowBasicTimePicker() { - final DialogFragment fragment = showDialog(null); - - assertNotNull(fragment); - } - - public void testPresetTimeAndCallback() throws Throwable { - final WritableMap options = new WritableNativeMap(); - options.putInt("hour", 4); - options.putInt("minute", 5); - - final DialogFragment fragment = showDialog(options); - - List recordedTimes = mRecordingModule.getTimes(); - assertEquals(0, recordedTimes.size()); - - runTestOnUiThread( - new Runnable() { - @Override - public void run() { - ((TimePickerDialog) fragment.getDialog()) - .getButton(DialogInterface.BUTTON_POSITIVE) - .performClick(); - } - }); - - getInstrumentation().waitForIdleSync(); - waitForBridgeAndUIIdle(); - - assertEquals(0, mRecordingModule.getErrors()); - assertEquals(0, mRecordingModule.getDismissed()); - - recordedTimes = mRecordingModule.getTimes(); - assertEquals(1, recordedTimes.size()); - assertEquals(4, (int) recordedTimes.get(0)[0]); - assertEquals(5, (int) recordedTimes.get(0)[1]); - } - - public void testDismissCallback() throws Throwable { - final DialogFragment fragment = showDialog(null); - - assertEquals(0, mRecordingModule.getDismissed()); - - runTestOnUiThread( - new Runnable() { - @Override - public void run() { - fragment.getDialog().dismiss(); - } - }); - - getInstrumentation().waitForIdleSync(); - waitForBridgeAndUIIdle(); - - assertEquals(0, mRecordingModule.getErrors()); - assertEquals(0, mRecordingModule.getTimes().size()); - assertEquals(1, mRecordingModule.getDismissed()); - } -} diff --git a/ReactAndroid/src/main/java/com/facebook/fbreact/specs/NativeTimePickerAndroidSpec.java b/ReactAndroid/src/main/java/com/facebook/fbreact/specs/NativeTimePickerAndroidSpec.java deleted file mode 100644 index e9707f4f3b3..00000000000 --- a/ReactAndroid/src/main/java/com/facebook/fbreact/specs/NativeTimePickerAndroidSpec.java +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - *

This source code is licensed under the MIT license found in the LICENSE file in the root - * directory of this source tree. - * - *

Generated by an internal genrule from Flow types. - * - * @generated - * @nolint - */ - -package com.facebook.fbreact.specs; - -import com.facebook.react.bridge.Promise; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReactContextBaseJavaModule; -import com.facebook.react.bridge.ReactMethod; -import com.facebook.react.bridge.ReactModuleWithSpec; -import com.facebook.react.bridge.ReadableMap; -import com.facebook.react.turbomodule.core.interfaces.TurboModule; - -public abstract class NativeTimePickerAndroidSpec extends ReactContextBaseJavaModule implements ReactModuleWithSpec, TurboModule { - public NativeTimePickerAndroidSpec(ReactApplicationContext reactContext) { - super(reactContext); - } - - @ReactMethod - public abstract void open(ReadableMap options, Promise promise); -} diff --git a/ReactAndroid/src/main/java/com/facebook/fbreact/specs/jni/FBReactNativeSpec-generated.cpp b/ReactAndroid/src/main/java/com/facebook/fbreact/specs/jni/FBReactNativeSpec-generated.cpp index c262ffe6b2f..8de44bae7bf 100644 --- a/ReactAndroid/src/main/java/com/facebook/fbreact/specs/jni/FBReactNativeSpec-generated.cpp +++ b/ReactAndroid/src/main/java/com/facebook/fbreact/specs/jni/FBReactNativeSpec-generated.cpp @@ -2093,26 +2093,6 @@ namespace facebook { - } - - } // namespace react -} // namespace facebook -namespace facebook { - namespace react { - - - static facebook::jsi::Value __hostFunction_NativeTimePickerAndroidSpecJSI_open(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) { - return static_cast(turboModule).invokeJavaMethod(rt, PromiseKind, "open", "(Lcom/facebook/react/bridge/ReadableMap;Lcom/facebook/react/bridge/Promise;)V", args, count); - } - - - NativeTimePickerAndroidSpecJSI::NativeTimePickerAndroidSpecJSI(const JavaTurboModule::InitParams ¶ms) - : JavaTurboModule(params) { - - methodMap_["open"] = MethodMetadata {1, __hostFunction_NativeTimePickerAndroidSpecJSI_open}; - - - } } // namespace react diff --git a/ReactAndroid/src/main/java/com/facebook/fbreact/specs/jni/FBReactNativeSpec.h b/ReactAndroid/src/main/java/com/facebook/fbreact/specs/jni/FBReactNativeSpec.h index 569634d5233..bfe63a18595 100644 --- a/ReactAndroid/src/main/java/com/facebook/fbreact/specs/jni/FBReactNativeSpec.h +++ b/ReactAndroid/src/main/java/com/facebook/fbreact/specs/jni/FBReactNativeSpec.h @@ -745,20 +745,6 @@ namespace facebook { } // namespace react } // namespace facebook -namespace facebook { - namespace react { - /** - * C++ class for module 'TimePickerAndroid' - */ - - class JSI_EXPORT NativeTimePickerAndroidSpecJSI : public JavaTurboModule { - public: - NativeTimePickerAndroidSpecJSI(const JavaTurboModule::InitParams ¶ms); - - }; - } // namespace react -} // namespace facebook - namespace facebook { namespace react { /** diff --git a/ReactAndroid/src/main/java/com/facebook/react/modules/timepicker/BUCK b/ReactAndroid/src/main/java/com/facebook/react/modules/timepicker/BUCK deleted file mode 100644 index f736a7e2961..00000000000 --- a/ReactAndroid/src/main/java/com/facebook/react/modules/timepicker/BUCK +++ /dev/null @@ -1,26 +0,0 @@ -load("//tools/build_defs/oss:rn_defs.bzl", "react_native_dep", "react_native_target", "rn_android_library") - -rn_android_library( - name = "timepicker", - srcs = glob(["**/*.java"]), - is_androidx = True, - labels = ["supermodule:xplat/default/public.react_native.infra"], - provided_deps = [ - react_native_dep("third-party/android/androidx:annotation"), - react_native_dep("third-party/android/androidx:core"), - react_native_dep("third-party/android/androidx:fragment"), - react_native_dep("third-party/android/androidx:legacy-support-core-ui"), - react_native_dep("third-party/android/androidx:legacy-support-core-utils"), - ], - visibility = [ - "PUBLIC", - ], - deps = [ - react_native_dep("third-party/java/infer-annotations:infer-annotations"), - react_native_dep("third-party/java/jsr-305:jsr-305"), - react_native_target("java/com/facebook/react/bridge:bridge"), - react_native_target("java/com/facebook/react/common:common"), - react_native_target("java/com/facebook/react/module/annotations:annotations"), - ], - exported_deps = [react_native_target("java/com/facebook/fbreact/specs:FBReactNativeSpec")], -) diff --git a/ReactAndroid/src/main/java/com/facebook/react/modules/timepicker/DismissableTimePickerDialog.java b/ReactAndroid/src/main/java/com/facebook/react/modules/timepicker/DismissableTimePickerDialog.java deleted file mode 100644 index 23540757dea..00000000000 --- a/ReactAndroid/src/main/java/com/facebook/react/modules/timepicker/DismissableTimePickerDialog.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -package com.facebook.react.modules.timepicker; - -import android.app.TimePickerDialog; -import android.content.Context; -import android.os.Build; -import androidx.annotation.Nullable; - -/** - * Certain versions of Android (Jellybean-KitKat) have a bug where when dismissed, the {@link - * TimePickerDialog} still calls the OnTimeSetListener. This class works around that issue by *not* - * calling super.onStop on KitKat on lower, as that would erroneously call the OnTimeSetListener - * when the dialog is dismissed, or call it twice when "OK" is pressed. - * - *

See: Issue 34833 - */ -public class DismissableTimePickerDialog extends TimePickerDialog { - - public DismissableTimePickerDialog( - Context context, - @Nullable TimePickerDialog.OnTimeSetListener callback, - int hourOfDay, - int minute, - boolean is24HourView) { - super(context, callback, hourOfDay, minute, is24HourView); - } - - public DismissableTimePickerDialog( - Context context, - int theme, - @Nullable TimePickerDialog.OnTimeSetListener callback, - int hourOfDay, - int minute, - boolean is24HourView) { - super(context, theme, callback, hourOfDay, minute, is24HourView); - } - - @Override - protected void onStop() { - if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) { - super.onStop(); - } - } -} diff --git a/ReactAndroid/src/main/java/com/facebook/react/modules/timepicker/TimePickerDialogFragment.java b/ReactAndroid/src/main/java/com/facebook/react/modules/timepicker/TimePickerDialogFragment.java deleted file mode 100644 index 298e0bc14c2..00000000000 --- a/ReactAndroid/src/main/java/com/facebook/react/modules/timepicker/TimePickerDialogFragment.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -package com.facebook.react.modules.timepicker; - -import android.app.Dialog; -import android.app.TimePickerDialog.OnTimeSetListener; -import android.content.Context; -import android.content.DialogInterface; -import android.content.DialogInterface.OnDismissListener; -import android.os.Build; -import android.os.Bundle; -import android.text.format.DateFormat; -import androidx.annotation.Nullable; -import androidx.fragment.app.DialogFragment; -import java.util.Calendar; -import java.util.Locale; - -@SuppressWarnings("ValidFragment") -public class TimePickerDialogFragment extends DialogFragment { - - @Nullable private OnTimeSetListener mOnTimeSetListener; - @Nullable private OnDismissListener mOnDismissListener; - - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { - final Bundle args = getArguments(); - return createDialog(args, getActivity(), mOnTimeSetListener); - } - - /*package*/ static Dialog createDialog( - Bundle args, Context activityContext, @Nullable OnTimeSetListener onTimeSetListener) { - final Calendar now = Calendar.getInstance(); - int hour = now.get(Calendar.HOUR_OF_DAY); - int minute = now.get(Calendar.MINUTE); - boolean is24hour = DateFormat.is24HourFormat(activityContext); - - TimePickerMode mode = TimePickerMode.DEFAULT; - if (args != null && args.getString(TimePickerDialogModule.ARG_MODE, null) != null) { - mode = - TimePickerMode.valueOf( - args.getString(TimePickerDialogModule.ARG_MODE).toUpperCase(Locale.US)); - } - - if (args != null) { - hour = args.getInt(TimePickerDialogModule.ARG_HOUR, now.get(Calendar.HOUR_OF_DAY)); - minute = args.getInt(TimePickerDialogModule.ARG_MINUTE, now.get(Calendar.MINUTE)); - is24hour = - args.getBoolean( - TimePickerDialogModule.ARG_IS24HOUR, DateFormat.is24HourFormat(activityContext)); - } - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - if (mode == TimePickerMode.CLOCK) { - return new DismissableTimePickerDialog( - activityContext, - activityContext - .getResources() - .getIdentifier("ClockTimePickerDialog", "style", activityContext.getPackageName()), - onTimeSetListener, - hour, - minute, - is24hour); - } else if (mode == TimePickerMode.SPINNER) { - return new DismissableTimePickerDialog( - activityContext, - activityContext - .getResources() - .getIdentifier( - "SpinnerTimePickerDialog", "style", activityContext.getPackageName()), - onTimeSetListener, - hour, - minute, - is24hour); - } - } - return new DismissableTimePickerDialog( - activityContext, onTimeSetListener, hour, minute, is24hour); - } - - @Override - public void onDismiss(DialogInterface dialog) { - super.onDismiss(dialog); - if (mOnDismissListener != null) { - mOnDismissListener.onDismiss(dialog); - } - } - - public void setOnDismissListener(@Nullable OnDismissListener onDismissListener) { - mOnDismissListener = onDismissListener; - } - - public void setOnTimeSetListener(@Nullable OnTimeSetListener onTimeSetListener) { - mOnTimeSetListener = onTimeSetListener; - } -} diff --git a/ReactAndroid/src/main/java/com/facebook/react/modules/timepicker/TimePickerDialogModule.java b/ReactAndroid/src/main/java/com/facebook/react/modules/timepicker/TimePickerDialogModule.java deleted file mode 100644 index b40f7b6b46c..00000000000 --- a/ReactAndroid/src/main/java/com/facebook/react/modules/timepicker/TimePickerDialogModule.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -package com.facebook.react.modules.timepicker; - -import android.app.Activity; -import android.app.TimePickerDialog.OnTimeSetListener; -import android.content.DialogInterface; -import android.content.DialogInterface.OnDismissListener; -import android.os.Bundle; -import android.widget.TimePicker; -import androidx.annotation.Nullable; -import androidx.fragment.app.DialogFragment; -import androidx.fragment.app.FragmentActivity; -import androidx.fragment.app.FragmentManager; -import com.facebook.fbreact.specs.NativeTimePickerAndroidSpec; -import com.facebook.react.bridge.NativeModule; -import com.facebook.react.bridge.Promise; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReadableMap; -import com.facebook.react.bridge.WritableMap; -import com.facebook.react.bridge.WritableNativeMap; -import com.facebook.react.common.annotations.VisibleForTesting; -import com.facebook.react.module.annotations.ReactModule; - -/** - * {@link NativeModule} that allows JS to show a native time picker dialog and get called back when - * the user selects a time. - */ -@ReactModule(name = TimePickerDialogModule.FRAGMENT_TAG) -public class TimePickerDialogModule extends NativeTimePickerAndroidSpec { - - @VisibleForTesting public static final String FRAGMENT_TAG = "TimePickerAndroid"; - - private static final String ERROR_NO_ACTIVITY = "E_NO_ACTIVITY"; - - /* package */ static final String ARG_HOUR = "hour"; - /* package */ static final String ARG_MINUTE = "minute"; - /* package */ static final String ARG_IS24HOUR = "is24Hour"; - /* package */ static final String ARG_MODE = "mode"; - /* package */ static final String ACTION_TIME_SET = "timeSetAction"; - /* package */ static final String ACTION_DISMISSED = "dismissedAction"; - - public TimePickerDialogModule(ReactApplicationContext reactContext) { - super(reactContext); - } - - @Override - public String getName() { - return FRAGMENT_TAG; - } - - private class TimePickerDialogListener implements OnTimeSetListener, OnDismissListener { - - private final Promise mPromise; - private boolean mPromiseResolved = false; - - public TimePickerDialogListener(Promise promise) { - mPromise = promise; - } - - @Override - public void onTimeSet(TimePicker view, int hour, int minute) { - if (!mPromiseResolved && getReactApplicationContext().hasActiveCatalystInstance()) { - WritableMap result = new WritableNativeMap(); - result.putString("action", ACTION_TIME_SET); - result.putInt("hour", hour); - result.putInt("minute", minute); - mPromise.resolve(result); - mPromiseResolved = true; - } - } - - @Override - public void onDismiss(DialogInterface dialog) { - if (!mPromiseResolved && getReactApplicationContext().hasActiveCatalystInstance()) { - WritableMap result = new WritableNativeMap(); - result.putString("action", ACTION_DISMISSED); - mPromise.resolve(result); - mPromiseResolved = true; - } - } - } - - @Override - public void open(@Nullable final ReadableMap options, Promise promise) { - - Activity raw_activity = getCurrentActivity(); - if (raw_activity == null || !(raw_activity instanceof FragmentActivity)) { - promise.reject( - ERROR_NO_ACTIVITY, - "Tried to open a DatePicker dialog while not attached to a FragmentActivity"); - return; - } - - FragmentActivity activity = (FragmentActivity) raw_activity; - - // We want to support both android.app.Activity and the pre-Honeycomb FragmentActivity - // (for apps that use it for legacy reasons). This unfortunately leads to some code duplication. - FragmentManager fragmentManager = activity.getSupportFragmentManager(); - DialogFragment oldFragment = (DialogFragment) fragmentManager.findFragmentByTag(FRAGMENT_TAG); - if (oldFragment != null) { - oldFragment.dismiss(); - } - TimePickerDialogFragment fragment = new TimePickerDialogFragment(); - if (options != null) { - Bundle args = createFragmentArguments(options); - fragment.setArguments(args); - } - TimePickerDialogListener listener = new TimePickerDialogListener(promise); - fragment.setOnDismissListener(listener); - fragment.setOnTimeSetListener(listener); - fragment.show(fragmentManager, FRAGMENT_TAG); - } - - private Bundle createFragmentArguments(ReadableMap options) { - final Bundle args = new Bundle(); - if (options.hasKey(ARG_HOUR) && !options.isNull(ARG_HOUR)) { - args.putInt(ARG_HOUR, options.getInt(ARG_HOUR)); - } - if (options.hasKey(ARG_MINUTE) && !options.isNull(ARG_MINUTE)) { - args.putInt(ARG_MINUTE, options.getInt(ARG_MINUTE)); - } - if (options.hasKey(ARG_IS24HOUR) && !options.isNull(ARG_IS24HOUR)) { - args.putBoolean(ARG_IS24HOUR, options.getBoolean(ARG_IS24HOUR)); - } - if (options.hasKey(ARG_MODE) && !options.isNull(ARG_MODE)) { - args.putString(ARG_MODE, options.getString(ARG_MODE)); - } - return args; - } -} diff --git a/ReactAndroid/src/main/java/com/facebook/react/modules/timepicker/TimePickerMode.java b/ReactAndroid/src/main/java/com/facebook/react/modules/timepicker/TimePickerMode.java deleted file mode 100644 index d6c28ebd348..00000000000 --- a/ReactAndroid/src/main/java/com/facebook/react/modules/timepicker/TimePickerMode.java +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -package com.facebook.react.modules.timepicker; - -public enum TimePickerMode { - CLOCK, - SPINNER, - DEFAULT -} diff --git a/ReactAndroid/src/main/java/com/facebook/react/shell/BUCK b/ReactAndroid/src/main/java/com/facebook/react/shell/BUCK index 576c7f182c7..66f78ea103f 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/shell/BUCK +++ b/ReactAndroid/src/main/java/com/facebook/react/shell/BUCK @@ -46,7 +46,6 @@ rn_android_library( react_native_target("java/com/facebook/react/modules/statusbar:statusbar"), react_native_target("java/com/facebook/react/modules/storage:storage"), react_native_target("java/com/facebook/react/modules/sound:sound"), - react_native_target("java/com/facebook/react/modules/timepicker:timepicker"), react_native_target("java/com/facebook/react/modules/toast:toast"), react_native_target("java/com/facebook/react/modules/vibration:vibration"), react_native_target("java/com/facebook/react/modules/websocket:websocket"), diff --git a/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java b/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java index e5d6f99a318..f2609de08bb 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java +++ b/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java @@ -37,7 +37,6 @@ import com.facebook.react.modules.share.ShareModule; import com.facebook.react.modules.sound.SoundManagerModule; import com.facebook.react.modules.statusbar.StatusBarModule; import com.facebook.react.modules.storage.AsyncStorageModule; -import com.facebook.react.modules.timepicker.TimePickerDialogModule; import com.facebook.react.modules.toast.ToastModule; import com.facebook.react.modules.vibration.VibrationModule; import com.facebook.react.modules.websocket.WebSocketModule; @@ -92,7 +91,6 @@ import java.util.Map; ShareModule.class, SoundManagerModule.class, StatusBarModule.class, - TimePickerDialogModule.class, ToastModule.class, VibrationModule.class, WebSocketModule.class, @@ -155,8 +153,6 @@ public class MainReactPackage extends TurboReactPackage { return new StatusBarModule(context); case SoundManagerModule.NAME: return new SoundManagerModule(context); - case TimePickerDialogModule.FRAGMENT_TAG: - return new TimePickerDialogModule(context); case ToastModule.NAME: return new ToastModule(context); case VibrationModule.NAME: @@ -229,7 +225,6 @@ public class MainReactPackage extends TurboReactPackage { ShareModule.class, StatusBarModule.class, SoundManagerModule.class, - TimePickerDialogModule.class, ToastModule.class, VibrationModule.class, WebSocketModule.class diff --git a/ReactAndroid/src/main/res/shell/values/styles.xml b/ReactAndroid/src/main/res/shell/values/styles.xml index b53a21ea4f4..b0418ce8525 100644 --- a/ReactAndroid/src/main/res/shell/values/styles.xml +++ b/ReactAndroid/src/main/res/shell/values/styles.xml @@ -27,21 +27,4 @@ calendar - - - - - - - - -