From 49c40812ca1765ec4db822aef62425c674520f43 Mon Sep 17 00:00:00 2001 From: Alan Lee Date: Wed, 3 Apr 2024 23:42:44 -0700 Subject: [PATCH] convert DebuggingOverlay to Kotlin (#43819) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/43819 convert Java to Kotlin: `react/views/debuggingoverlay/DebuggingOverlay.java` Changelog: [Internal] internal Reviewed By: makovkastar Differential Revision: D55662115 fbshipit-source-id: 45fd36efdb93a598224af0fb6c9d33ac5e5cad27 --- .../ReactAndroid/api/ReactAndroid.api | 8 +- .../debuggingoverlay/DebuggingOverlay.java | 97 ------------------- .../debuggingoverlay/DebuggingOverlay.kt | 86 ++++++++++++++++ 3 files changed, 90 insertions(+), 101 deletions(-) delete mode 100644 packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/debuggingoverlay/DebuggingOverlay.java create mode 100644 packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/debuggingoverlay/DebuggingOverlay.kt diff --git a/packages/react-native/ReactAndroid/api/ReactAndroid.api b/packages/react-native/ReactAndroid/api/ReactAndroid.api index cd228df0b02..0de0ee7d50f 100644 --- a/packages/react-native/ReactAndroid/api/ReactAndroid.api +++ b/packages/react-native/ReactAndroid/api/ReactAndroid.api @@ -5872,12 +5872,12 @@ public class com/facebook/react/views/common/ViewUtils { public static fun getTestId (Landroid/view/View;)Ljava/lang/String; } -public class com/facebook/react/views/debuggingoverlay/DebuggingOverlay : android/view/View { +public final class com/facebook/react/views/debuggingoverlay/DebuggingOverlay : android/view/View { public fun (Landroid/content/Context;)V - public fun clearElementsHighlights ()V + public final fun clearElementsHighlights ()V public fun onDraw (Landroid/graphics/Canvas;)V - public fun setHighlightedElementsRectangles (Ljava/util/List;)V - public fun setTraceUpdates (Ljava/util/List;)V + public final fun setHighlightedElementsRectangles (Ljava/util/List;)V + public final fun setTraceUpdates (Ljava/util/List;)V } public class com/facebook/react/views/debuggingoverlay/DebuggingOverlayManager : com/facebook/react/uimanager/SimpleViewManager { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/debuggingoverlay/DebuggingOverlay.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/debuggingoverlay/DebuggingOverlay.java deleted file mode 100644 index 24d6e440a78..00000000000 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/debuggingoverlay/DebuggingOverlay.java +++ /dev/null @@ -1,97 +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.views.debuggingoverlay; - -import android.content.Context; -import android.graphics.Canvas; -import android.graphics.Paint; -import android.graphics.RectF; -import android.view.View; -import androidx.annotation.UiThread; -import com.facebook.infer.annotation.Nullsafe; -import com.facebook.react.bridge.UiThreadUtil; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -@Nullsafe(Nullsafe.Mode.LOCAL) -public class DebuggingOverlay extends View { - - private final Paint mTraceUpdatePaint = new Paint(); - private HashMap mTraceUpdatesToDisplayMap = new HashMap(); - private HashMap mTraceUpdateIdToCleanupRunnableMap = new HashMap(); - - private final Paint mHighlightedElementsPaint = new Paint(); - private List mHighlightedElementsRectangles = new ArrayList<>(); - - public DebuggingOverlay(Context context) { - super(context); - - mTraceUpdatePaint.setStyle(Paint.Style.STROKE); - mTraceUpdatePaint.setStrokeWidth(6); - - mHighlightedElementsPaint.setStyle(Paint.Style.FILL); - mHighlightedElementsPaint.setColor(0xCCC8E6FF); - } - - @UiThread - public void setTraceUpdates(List traceUpdates) { - for (TraceUpdate traceUpdate : traceUpdates) { - int traceUpdateId = traceUpdate.getId(); - if (mTraceUpdateIdToCleanupRunnableMap.containsKey(traceUpdateId)) { - UiThreadUtil.removeOnUiThread(mTraceUpdateIdToCleanupRunnableMap.get(traceUpdateId)); - mTraceUpdateIdToCleanupRunnableMap.remove(traceUpdateId); - } - - mTraceUpdatesToDisplayMap.put(traceUpdateId, traceUpdate); - } - - invalidate(); - } - - @UiThread - public void setHighlightedElementsRectangles(List elementsRectangles) { - mHighlightedElementsRectangles = elementsRectangles; - invalidate(); - } - - @UiThread - public void clearElementsHighlights() { - mHighlightedElementsRectangles.clear(); - invalidate(); - } - - @Override - public void onDraw(Canvas canvas) { - super.onDraw(canvas); - - // Draw border outside of the given overlays to be aligned with web trace highlights - for (TraceUpdate traceUpdate : mTraceUpdatesToDisplayMap.values()) { - mTraceUpdatePaint.setColor(traceUpdate.getColor()); - canvas.drawRect(traceUpdate.getRectangle(), mTraceUpdatePaint); - - int traceUpdateId = traceUpdate.getId(); - Runnable block = - () -> { - mTraceUpdatesToDisplayMap.remove(traceUpdateId); - mTraceUpdateIdToCleanupRunnableMap.remove(traceUpdateId); - - invalidate(); - }; - - if (!mTraceUpdateIdToCleanupRunnableMap.containsKey(traceUpdateId)) { - mTraceUpdateIdToCleanupRunnableMap.put(traceUpdateId, block); - UiThreadUtil.runOnUiThread(block, 2000); - } - } - - for (RectF elementRectangle : mHighlightedElementsRectangles) { - canvas.drawRect(elementRectangle, mHighlightedElementsPaint); - } - } -} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/debuggingoverlay/DebuggingOverlay.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/debuggingoverlay/DebuggingOverlay.kt new file mode 100644 index 00000000000..62af63d0a95 --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/debuggingoverlay/DebuggingOverlay.kt @@ -0,0 +1,86 @@ +/* + * 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.views.debuggingoverlay + +import android.content.Context +import android.graphics.Canvas +import android.graphics.Paint +import android.graphics.RectF +import android.view.View +import androidx.annotation.UiThread +import com.facebook.react.bridge.UiThreadUtil + +public class DebuggingOverlay(context: Context) : View(context) { + private val traceUpdatePaint = Paint() + private val traceUpdatesToDisplayMap = hashMapOf() + private val traceUpdateIdToCleanupRunnableMap = hashMapOf() + + private val highlightedElementsPaint = Paint() + private var highlightedElementsRectangles = mutableListOf() + + init { + traceUpdatePaint.style = Paint.Style.STROKE + traceUpdatePaint.strokeWidth = 6f + highlightedElementsPaint.style = Paint.Style.FILL + highlightedElementsPaint.color = 0xCCC8E6FF.toInt() + } + + @UiThread + public fun setTraceUpdates(traceUpdates: List) { + for (traceUpdate in traceUpdates) { + val traceUpdateId = traceUpdate.id + if (traceUpdateIdToCleanupRunnableMap.containsKey(traceUpdateId)) { + UiThreadUtil.removeOnUiThread(traceUpdateIdToCleanupRunnableMap[traceUpdateId]) + traceUpdateIdToCleanupRunnableMap.remove(traceUpdateId) + } + + traceUpdatesToDisplayMap[traceUpdateId] = traceUpdate + } + + invalidate() + } + + @UiThread + public fun setHighlightedElementsRectangles(elementsRectangles: MutableList) { + highlightedElementsRectangles = elementsRectangles + invalidate() + } + + @UiThread + public fun clearElementsHighlights() { + highlightedElementsRectangles.clear() + invalidate() + } + + public override fun onDraw(canvas: Canvas) { + super.onDraw(canvas) + + // Draw border outside of the given overlays to be aligned with web trace highlights + for (traceUpdate in traceUpdatesToDisplayMap.values) { + traceUpdatePaint.color = traceUpdate.color + canvas.drawRect(traceUpdate.rectangle, traceUpdatePaint) + + val traceUpdateId = traceUpdate.id + val block = Runnable { + traceUpdatesToDisplayMap.remove(traceUpdateId) + traceUpdateIdToCleanupRunnableMap.remove(traceUpdateId) + + invalidate() + } + + if (!traceUpdateIdToCleanupRunnableMap.containsKey(traceUpdateId)) { + traceUpdateIdToCleanupRunnableMap[traceUpdateId] = block + UiThreadUtil.runOnUiThread(block, 2000) + } + } + + for (elementRectangle in highlightedElementsRectangles) { + canvas.drawRect(elementRectangle, highlightedElementsPaint) + } + } +}