From add87922a60b53a648131f09c2ec6dd672694676 Mon Sep 17 00:00:00 2001 From: Olivier Bouillet <62574056+freeboub@users.noreply.github.com> Date: Tue, 10 Oct 2023 09:47:56 +0200 Subject: [PATCH] feat(android): add prop to control debug log level (#3277) * feat: add prop to allow controlling of debug log level * fix: move props parsing to safeGetters --------- Co-authored-by: olivier --- API.md | 23 +++ .../com/brentvatne/common/toolbox/DebugLog.kt | 95 ++++++++++++ .../common/toolbox/ReactBridgeUtils.kt | 142 ++++++++++++++++++ .../exoplayer/ReactExoplayerView.java | 28 ++-- .../exoplayer/ReactExoplayerViewManager.java | 96 +++++------- src/VideoNativeComponent.ts | 6 + src/types/video.ts | 6 + 7 files changed, 324 insertions(+), 72 deletions(-) create mode 100644 android/src/main/java/com/brentvatne/common/toolbox/DebugLog.kt create mode 100644 android/src/main/java/com/brentvatne/common/toolbox/ReactBridgeUtils.kt diff --git a/API.md b/API.md index b5e0b4df..0020859c 100644 --- a/API.md +++ b/API.md @@ -301,6 +301,7 @@ var styles = StyleSheet.create({ | [contentStartTime](#contentstarttime) | Android | | [controls](#controls) | Android, iOS | | [currentPlaybackTime](#currentplaybacktime) | Android | +| [debug](#debug) | Android | | [disableFocus](#disablefocus) | Android, iOS | | [disableDisconnectError](#disabledisconnecterror) | Android | | [filter](#filter) | iOS | @@ -497,6 +498,28 @@ The start time in ms for SSAI content. This determines at what time to load the Platforms: Android, iOS +#### debug + +Enable more verbosity in logs. + +> [!WARNING] +> Do not use this open in production build + +| Property | Type | Description | +| ------------------ | ------ | ------------------------------------------------------------------------------------------- | +| enable | boolean | when true, display logs with verbosity higher | +| thread | boolean | enable thread display | + + +Example with default values: +``` +debug={{ + enable: true, + thread: true, +}} +``` +Platforms: Android + #### disableFocus Determines whether video audio should override background music/audio in Android devices. * **false (default)** - Override background audio/music diff --git a/android/src/main/java/com/brentvatne/common/toolbox/DebugLog.kt b/android/src/main/java/com/brentvatne/common/toolbox/DebugLog.kt new file mode 100644 index 00000000..a1250f8d --- /dev/null +++ b/android/src/main/java/com/brentvatne/common/toolbox/DebugLog.kt @@ -0,0 +1,95 @@ +package com.brentvatne.common.toolbox + +import android.os.Build +import android.util.Log +import java.lang.Exception + +/* log utils +* This class allow defining a log level for the package +* This is useful for debugging real time issue or tricky use cases +*/ + +object DebugLog { + // log level to display + private var level = Log.WARN + // enable thread display in logs + private var displayThread = true + // add a common prefix for easy filtering + private const val TAG_PREFIX = "RNV" + + @JvmStatic + fun setConfig(_level: Int, _displayThread: Boolean) { + level = _level + displayThread = _displayThread + } + + @JvmStatic + private fun getTag(tag: String): String { + return TAG_PREFIX + tag + } + + @JvmStatic + private fun getMsg(msg: String): String { + return if (displayThread) { + "[" + Thread.currentThread().name + "] " + msg + } else msg + } + + @JvmStatic + fun v(tag: String, msg: String) { + if (level <= Log.VERBOSE) Log.v(getTag(tag), getMsg(msg)) + } + + @JvmStatic + fun d(tag: String, msg: String) { + if (level <= Log.DEBUG) Log.d(getTag(tag), getMsg(msg)) + } + + @JvmStatic + fun i(tag: String, msg: String) { + if (level <= Log.INFO) Log.i(getTag(tag), getMsg(msg)) + } + + @JvmStatic + fun w(tag: String, msg: String) { + if (level <= Log.WARN) Log.w(getTag(tag), getMsg(msg)) + } + + @JvmStatic + fun e(tag: String, msg: String) { + if (level <= Log.ERROR) Log.e(getTag(tag), getMsg(msg)) + } + + @JvmStatic + fun wtf(tag: String, msg: String) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO) { + Log.wtf(getTag(tag), "--------------->" + getMsg(msg)) + } else { + Log.e(getTag(tag), "--------------->" + getMsg(msg)) + } + printCallStack() + } + + @JvmStatic + fun printCallStack() { + if (level <= Log.VERBOSE) { + val e = Exception() + e.printStackTrace() + } + } + + // Additionnal thread safety checkers + @JvmStatic + fun checkUIThread(tag: String, msg: String) { + if (Thread.currentThread().name != "main") { + wtf(tag, "------------------------>" + getMsg(msg)) + } + } + + @JvmStatic + fun checkNotUIThread(tag: String, msg: String) { + if (Thread.currentThread().name == "main") { + wtf(tag, "------------------------>" + getMsg(msg)) + } + } +} \ No newline at end of file diff --git a/android/src/main/java/com/brentvatne/common/toolbox/ReactBridgeUtils.kt b/android/src/main/java/com/brentvatne/common/toolbox/ReactBridgeUtils.kt new file mode 100644 index 00000000..1424bbae --- /dev/null +++ b/android/src/main/java/com/brentvatne/common/toolbox/ReactBridgeUtils.kt @@ -0,0 +1,142 @@ +package com.brentvatne.common.toolbox + +import com.facebook.react.bridge.Dynamic +import com.facebook.react.bridge.ReadableMap +import com.facebook.react.bridge.ReadableArray +import java.util.HashMap + +/* +* Toolbox to safe parsing of