function trace(tag) { Log.e((tag || '') + Java.use('android.util.Log').getStackTraceString(Java.use('java.lang.Throwable').$new())) } class Log { static TAG = '[sam_msg]' static Debug = true static format(...msg) { let m = [] for (let i = 0; i < msg.length; i++) { if (typeof msg[i] === 'object') { m.push(msg[i] + '') } else { m.push(msg[i]) } } m = m.join(' ') return m } static i(...msg) { if (!this.Debug) return console.log(`\x1b[30m${this.TAG} ${this.format(...msg)}\x1b[0m`) } static w(...msg) { console.log(`\x1b[33m${this.TAG} ${this.format(...msg)}\x1b[0m`) } static e(...msg) { console.log(`\x1b[31m${this.TAG} ${this.format(...msg)}\x1b[0m`) } static s(...msg) { console.log(`\x1b[32m${this.TAG} ${this.format(...msg)}\x1b[0m`) } } Java.perform(function () { const r = Java.use('ts.r') Log.i(r) r.g.overload('int', 'android.content.Context').implementation = function (i, context) { Log.i(`r.g(${i}, ${context})`) return true } const RcsFeatures = Java.use('com.samsung.android.messaging.common.configuration.rcs.RcsFeatures') Log.i(RcsFeatures.getRcsSupportedSimSlot()) const Feature = Java.use('com.samsung.android.messaging.common.configuration.Feature') Feature.isRcsSupported.overload().implementation = function () { Log.i('Feature.isRcsSupported()') return true } const CapabilitiesData = Java.use('com.samsung.android.messaging.common.data.rcs.CapabilitiesData') CapabilitiesData.isLocalOffline.overload().implementation = function () { Log.i('CapabilitiesData.isLocalOffline()') return false } const ImsManagerApi = Java.use('com.samsung.android.messaging.common.imsmanager.ImsManagerApi') ImsManagerApi.isRcsServiceAvailable.overload('android.content.Context', 'int').implementation = function ( context, i ) { Log.i(`ImsManagerApi.isRcsServiceAvailable(${context}, ${i})`) return true } })