1 package expo.modules.devmenu 2 3 import android.content.pm.PackageManager 4 import android.os.Bundle 5 import com.facebook.react.ReactInstanceManager 6 import com.facebook.react.bridge.ReactContext 7 8 object DevMenuAppInfo { getAppInfonull9 fun getAppInfo(instanceManager: ReactInstanceManager, reactContext: ReactContext): Bundle { 10 val packageManager = reactContext.packageManager 11 val packageName = reactContext.packageName 12 val packageInfo = packageManager.getPackageInfo(packageName, 0) 13 14 var appVersion = packageInfo.versionName 15 val applicationInfo = packageManager.getApplicationInfo(packageName, PackageManager.GET_META_DATA) 16 var appName = packageManager.getApplicationLabel(applicationInfo).toString() 17 val runtimeVersion = getMetadataValue(reactContext, "expo.modules.updates.EXPO_RUNTIME_VERSION") 18 val sdkVersion = getMetadataValue(reactContext, "expo.modules.updates.EXPO_SDK_VERSION") 19 val appIcon = getApplicationIconUri(reactContext) 20 var hostUrl = reactContext.sourceURL 21 22 val manifest = DevMenuManager.currentManifest 23 24 if (manifest != null) { 25 val manifestName = manifest.getName() 26 if (manifestName != null) { 27 appName = manifestName 28 } 29 30 val manifestVersion = manifest.getVersion() 31 if (manifestVersion != null) { 32 appVersion = manifestVersion 33 } 34 } 35 36 if (DevMenuManager.currentManifestURL != null) { 37 hostUrl = DevMenuManager.currentManifestURL 38 } 39 40 val jsExecutorName = instanceManager.jsExecutorName 41 val engine = when { 42 jsExecutorName.contains("Hermes") -> "Hermes" 43 jsExecutorName.contains("V8") -> "V8" 44 else -> "JSC" 45 } 46 47 return Bundle().apply { 48 putString("appVersion", appVersion) 49 putString("appName", appName) 50 putString("appIcon", appIcon) 51 putString("runtimeVersion", runtimeVersion) 52 putString("sdkVersion", sdkVersion) 53 putString("hostUrl", hostUrl) 54 putString("engine", engine) 55 } 56 } 57 getMetadataValuenull58 private fun getMetadataValue(reactContext: ReactContext, key: String): String { 59 val packageManager = reactContext.packageManager 60 val packageName = reactContext.packageName 61 val applicationInfo = packageManager.getApplicationInfo(packageName, PackageManager.GET_META_DATA) 62 return applicationInfo.metaData?.get(key)?.toString() ?: "" 63 } 64 getApplicationIconUrinull65 private fun getApplicationIconUri(reactContext: ReactContext): String { 66 var appIcon = "" 67 val packageManager = reactContext.packageManager 68 val packageName = reactContext.packageName 69 val applicationInfo = packageManager.getApplicationInfo(packageName, 0) 70 71 if (applicationInfo.icon != null) { 72 appIcon = "" + applicationInfo.icon 73 } 74 // TODO - figure out how to get resId for AdaptiveIconDrawable icons 75 return appIcon 76 } 77 } 78