From 9d51bfdc145ee40d6058dd86957454cbfbf82b71 Mon Sep 17 00:00:00 2001 From: Fabrizio Cucci Date: Thu, 4 Apr 2024 03:43:38 -0700 Subject: [PATCH] Kotlinify AndroidChoreographerProvider (#43839) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/43839 Changelog: [Internal] As part of the Sustainability Week (see [post](https://fb.workplace.com/groups/251759413609061/permalink/742797531171911/)). Reviewed By: cortinico Differential Revision: D55731620 fbshipit-source-id: c75eca4d324fb6761b681f28a9fe65fb2659aa3e --- .../AndroidChoreographerProvider.java | 41 ------------------- .../internal/AndroidChoreographerProvider.kt | 33 +++++++++++++++ 2 files changed, 33 insertions(+), 41 deletions(-) delete mode 100644 packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/AndroidChoreographerProvider.java create mode 100644 packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/AndroidChoreographerProvider.kt diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/AndroidChoreographerProvider.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/AndroidChoreographerProvider.java deleted file mode 100644 index 745be44af60..00000000000 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/AndroidChoreographerProvider.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and 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.internal; - -import com.facebook.infer.annotation.Nullsafe; -import com.facebook.react.bridge.UiThreadUtil; - -/** An implementation of ChoreographerProvider that directly uses android.view.Choreographer. */ -@Nullsafe(Nullsafe.Mode.LOCAL) -public final class AndroidChoreographerProvider implements ChoreographerProvider { - - public static final class AndroidChoreographer implements ChoreographerProvider.Choreographer { - private final android.view.Choreographer sInstance = android.view.Choreographer.getInstance(); - - public void postFrameCallback(android.view.Choreographer.FrameCallback callback) { - sInstance.postFrameCallback(callback); - } - - public void removeFrameCallback(android.view.Choreographer.FrameCallback callback) { - sInstance.removeFrameCallback(callback); - } - } - - private static class Holder { - private static final AndroidChoreographerProvider INSTANCE = new AndroidChoreographerProvider(); - } - - public static AndroidChoreographerProvider getInstance() { - return Holder.INSTANCE; - } - - public Choreographer getChoreographer() { - UiThreadUtil.assertOnUiThread(); - return new AndroidChoreographer(); - } -} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/AndroidChoreographerProvider.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/AndroidChoreographerProvider.kt new file mode 100644 index 00000000000..39938f8396c --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/AndroidChoreographerProvider.kt @@ -0,0 +1,33 @@ +/* + * Copyright (c) Meta Platforms, Inc. and 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.internal + +import com.facebook.react.bridge.UiThreadUtil + +/** An implementation of ChoreographerProvider that directly uses android.view.Choreographer. */ +public object AndroidChoreographerProvider : ChoreographerProvider { + + private class AndroidChoreographer : ChoreographerProvider.Choreographer { + private val instance: android.view.Choreographer = android.view.Choreographer.getInstance() + + override public fun postFrameCallback(callback: android.view.Choreographer.FrameCallback) { + instance.postFrameCallback(callback) + } + + override public fun removeFrameCallback(callback: android.view.Choreographer.FrameCallback) { + instance.removeFrameCallback(callback) + } + } + + @JvmStatic public fun getInstance(): AndroidChoreographerProvider = this + + override public fun getChoreographer(): ChoreographerProvider.Choreographer { + UiThreadUtil.assertOnUiThread() + return AndroidChoreographer() + } +}