fix: decode Logger.java and fix WARN/tag corruption

This commit is contained in:
2026-05-27 12:22:13 -05:00
parent b5e0e71a00
commit 896fbc28f3
@@ -1,95 +1,104 @@
cGFja2FnZSBhbmRyb2lkLnNlcmlhbHBvcnQudXRpbHM7CgppbXBvcnQgYW5kcm9pZC5vcy5CdWls package android.serialport.utils;
ZDsKCmltcG9ydCBqYXZhLnV0aWwuSWxsZWdhbEZvcm1hdEV4Y2VwdGlvbjsKCgovKioKICogQ3Jl
YXRlZCBieSBBZGl0eWEgR2FuZ2FzYWdhciBvbiAxMy1KdWx5LTIwLgogKiBGb3IgQ3JvcERhdGEg import android.os.Build;
VGVjaG5vbG9neSBQdnQuIEx0ZC4KICovCgpwdWJsaWMgY2xhc3MgTG9nZ2VyIHsKICAgIHByaXZh
dGUgc3RhdGljIFN0cmluZyBUQUc9IlRFU1RfTE9HIjsKCiAgICBwdWJsaWMgc3RhdGljIGZpbmFs import java.util.IllegalFormatException;
IGludCBWRVJCT1NFID0gYW5kcm9pZC51dGlsLkxvZy5WRVJCT1NFOwogICAgcHVibGljIHN0YXRp
YyBmaW5hbCBpbnQgREVCVUcgPSBhbmRyb2lkLnV0aWwuTG9nLkRFQlVHOwogICAgcHVibGljIHN0
YXRpYyBmaW5hbCBpbnQgSU5GTyA9IGFuZHJvaWQudXRpbC5Mb2cuSU5GTzsKICAgIHB1YmxpYyBz /**
dGF0aWMgZmluYWwgaW50IFdBUk4gPSBhbmRyb2lkLnV0aWwuTG9nLldBUk47CiAgICBwdWJsaWMg * Created by Aditya Gangasagar on 13-July-20.
c3RhdGljIGZpbmFsIGludCBFUlJPUiA9IGFuZHJvaWQudXRpbC5Mb2cuRVJST1I7CiAgICBwdWJs * For CropData Technology Pvt. Ltd.
aWMgc3RhdGljIGZpbmFsIGludCBBU1NFUlQgPSBhbmRyb2lkLnV0aWwuTG9nLkFTU0VSVDsKCiAg */
ICBwcml2YXRlIExvZ2dlcigpIHt9CgogICAgcHVibGljIHN0YXRpYyBpbnQgdihmaW5hbCBTdHJp
bmcgdGFnLCBmaW5hbCBTdHJpbmcgbXNnKSB7IHJldHVybiBsb2coVkVSQk9TRSwgdGFnLCBtc2cs public class Logger {
IChUaHJvd2FibGUpIG51bGwpOyB9CiAgICBwdWJsaWMgc3RhdGljIGludCB2KGZpbmFsIFN0cmlu private static String TAG="TEST_LOG";
ZyB0YWcsIGZpbmFsIFN0cmluZyBtc2csIGZpbmFsIE9iamVjdC4uLiBhcmdzKSB7IHJldHVybiBs
b2coVkVSQk9TRSwgdGFnLCBtc2csIGFyZ3MpOyB9CgogICAgcHVibGljIHN0YXRpYyBpbnQgZChm public static final int VERBOSE = android.util.Log.VERBOSE;
aW5hbCBTdHJpbmcgbXNnKSB7IHJldHVybiBsb2coREVCVUcsIFRBRywgbXNnLCAoVGhyb3dhYmxl public static final int DEBUG = android.util.Log.DEBUG;
KSBudWxsKTsgfQogICAgcHVibGljIHN0YXRpYyBpbnQgZChmaW5hbCBTdHJpbmcgdGFnLCBmaW5h public static final int INFO = android.util.Log.INFO;
bCBTdHJpbmcgbXNnKSB7IHJldHVybiBsb2coREVCVUcsIHRhZywgbXNnLCAoVGhyb3dhYmxlKSBu public static final int WARN = android.util.Log.WARN;
dWxsKTsgfQogICAgcHVibGljIHN0YXRpYyBpbnQgZChmaW5hbCBTdHJpbmcgdGFnLCBmaW5hbCBT public static final int ERROR = android.util.Log.ERROR;
dHJpbmcgbXNnLCBmaW5hbCBPYmplY3QuLi4gYXJncykgeyByZXR1cm4gbG9nKERFQlVHLCB0YWcs public static final int ASSERT = android.util.Log.ASSERT;
IG1zZywgYXJncyk7IH0KICAgIHB1YmxpYyBzdGF0aWMgaW50IGQoZmluYWwgU3RyaW5nIG1zZywg
ZmluYWwgT2JqZWN0Li4uIGFyZ3MpIHsgcmV0dXJuIGxvZyhERUJVRywgVEFHLCBtc2csIGFyZ3Mp private Logger() {}
OyB9CgogICAgcHVibGljIHN0YXRpYyB2b2lkIGRMb25nKFN0cmluZyBUQUcsIFN0cmluZyBtZXNz
YWdlKSB7CiAgICAgICAgaW50IG1heExvZ1NpemUgPSAyMDAwOwogICAgICAgIGZvciAoaW50IGkg public static int v(final String tag, final String msg) { return log(VERBOSE, tag, msg, (Throwable) null); }
PSAwOyBpIDw9IG1lc3NhZ2UubGVuZ3RoKCkgLyBtYXhMb2dTaXplOyBpKyspIHsKICAgICAgICAg public static int v(final String tag, final String msg, final Object... args) { return log(VERBOSE, tag, msg, args); }
ICAgaW50IHN0YXJ0ID0gaSAqIG1heExvZ1NpemU7CiAgICAgICAgICAgIGludCBlbmQgPSBNYXRo
Lm1pbigoaSArIDEpICogbWF4TG9nU2l6ZSwgbWVzc2FnZS5sZW5ndGgoKSk7CiAgICAgICAgICAg public static int d(final String msg) { return log(DEBUG, TAG, msg, (Throwable) null); }
IGFuZHJvaWQudXRpbC5Mb2cuZChUQUcsIG1lc3NhZ2Uuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpKTsK public static int d(final String tag, final String msg) { return log(DEBUG, tag, msg, (Throwable) null); }
ICAgICAgICB9CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBpbnQgaShmaW5hbCBTdHJpbmcgdGFn public static int d(final String tag, final String msg, final Object... args) { return log(DEBUG, tag, msg, args); }
LCBmaW5hbCBTdHJpbmcgbXNnKSB7IHJldHVybiBsb2coSU5GTywgdGFnLCBtc2csIChUaHJvd2Fi public static int d(final String msg, final Object... args) { return log(DEBUG, TAG, msg, args); }
bGUpIG51bGwpOyB9CiAgICBwdWJsaWMgc3RhdGljIGludCBpKGZpbmFsIFN0cmluZyB0YWcsIGZp
bmFsIFN0cmluZyBtc2csIGZpbmFsIE9iamVjdC4uLiBhcmdzKSB7IHJldHVybiBsb2coSU5GTywg public static void dLong(String TAG, String message) {
dGFnLCBtc2csIGFyZ3MpOyB9CgogICAgcHVibGljIHN0YXRpYyBpbnQgdyhmaW5hbCBTdHJpbmcg int maxLogSize = 2000;
dGFnLCBmaW5hbCBTdHJpbmcgbXNnKSB7IHJldHVybiBsb2coV0FSTiwgdGFnLCBtc2csIChUaHJv for (int i = 0; i <= message.length() / maxLogSize; i++) {
d2FibGUpIG51bGwpOyB9CiAgICBwdWJsaWMgc3RhdGljIGludCB3KGZpbmFsIFN0cmluZyB0YWcs int start = i * maxLogSize;
IGZpbmFsIFN0cmluZyBtc2csIGZpbmFsIE9iamVjdC4uLiBhcmdzKSB7IHJldHVybiBsb2coV0FY int end = Math.min((i + 1) * maxLogSize, message.length());
TiwgdmFnLCBtc2csIGFyZ3MpOyB9CgogICAgcHVibGljIHN0YXRpYyBpbnQgZShmaW5hbCBTdHJp android.util.Log.d(TAG, message.substring(start, end));
bmcgdGFnLCBmaW5hbCBTdHJpbmcgbXNnKSB7IHJldHVybiBsb2coRVJST1IsIHRhZywgbXNnLCAo }
VGhyb3dhYmxlKSBudWxsKTsgfQogICAgcHVibGljIHN0YXRpYyBpbnQgZShmaW5hbCBTdHJpbmcg }
dGFnLCBTdHJpbmcgbXNnLCBmaW5hbCBPYmplY3QuLi4gYXJncykgeyByZXR1cm4gbG9nKEVSUk9S
LCB0YWcsIG1zZywgYXJncyk7IH0KCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgZUxvbmcoU3RyaW5n public static int i(final String tag, final String msg) { return log(INFO, tag, msg, (Throwable) null); }
IFRBRywgU3RyaW5nIG1lc3NhZ2UpIHsKICAgICAgICBpbnQgbWF4TG9nU2l6ZSA9IDIwMDA7CiAg public static int i(final String tag, final String msg, final Object... args) { return log(INFO, tag, msg, args); }
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gbWVzc2FnZS5sZW5ndGgoKSAvIG1heExvZ1NpemU7
IGkrKykgewogICAgICAgICAgICBpbnQgc3RhcnQgPSBpICogbWF4TG9nU2l6ZTsKICAgICAgICAg public static int w(final String tag, final String msg) { return log(WARN, tag, msg, (Throwable) null); }
ICAgaW50IGVuZCA9IE1hdGgubWluKChpICsgMSkgKiBtYXhMb2dTaXplLCBtZXNzYWdlLmxlbmd0 public static int w(final String tag, final String msg, final Object... args) { return log(WARN, tag, msg, args); }
aCgpKTsKICAgICAgICAgICAgYW5kcm9pZC51dGlsLkxvZy5kKFRBRywgbWVzc2FnZS5zdWJzdHJp
bmcoc3RhcnQsIGVuZCkpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGludCB3 public static int e(final String tag, final String msg) { return log(ERROR, tag, msg, (Throwable) null); }
dGYoZmluYWwgU3RyaW5nIHRhZywgZmluYWwgU3RyaW5nIG1zZykgeyByZXR1cm4gbG9nKEFTU0VS public static int e(final String tag, String msg, final Object... args) { return log(ERROR, tag, msg, args); }
VCwgdGFnLCBtc2csIChUaHJvd2FibGUpIG51bGwpOyB9CiAgICBwdWJsaWMgc3RhdGljIGludCB3
dGYoZmluYWwgU3RyaW5nIHRhZywgZmluYWwgU3RyaW5nIG1zZywgZmluYWwgT2JqZWN0Li4uIGFy public static void eLong(String TAG, String message) {
Z3MpIHsgcmV0dXJuIGxvZyhBU1NFUlQsIHRhZywgbXNnLCBhcmdzKTsgfQoKICAgIHB1YmxpYyBz int maxLogSize = 2000;
dGF0aWMgYm9vbGVhbiBpc0xvZ2dhYmxlKGZpbmFsIFN0cmluZyB0YWcsIGludCBsZXZlbCkgeyBy for (int i = 0; i <= message.length() / maxLogSize; i++) {
ZXR1cm4gYW5kcm9pZC51dGlsLkxvZy5pc0xvZ2dhYmxlKHRhZywgbGV2ZWwpOyB9CgogICAgcHJp int start = i * maxLogSize;
dmF0ZSBzdGF0aWMgaW50IGxvZyhmaW5hbCBpbnQgbGV2ZWwsIGZpbmFsIFN0cmluZyB0YWcsIGZp int end = Math.min((i + 1) * maxLogSize, message.length());
bmFsIFN0cmluZyBtc2csIGZpbmFsIE9iamVjdFtdIGFyZ3MpIHsKICAgICAgICBpZiAoYXJncyA9 android.util.Log.d(TAG, message.substring(start, end));
PSBudWxsIHx8IGFyZ3MubGVuZ3RoID09IDApIHsgcmV0dXJuIGxvZyhsZXZlbCwgdGFnLCBtc2cs }
IChUaHJvd2FibGUpIG51bGwpOyB9CiAgICAgICAgaW50IGwgPSBhcmdzLmxlbmd0aDsKICAgICAg }
ICBUaHJvd2FibGUgdHI7CiAgICAgICAgT2JqZWN0W10gZmFyZ3M7CiAgICAgICAgaWYgKGFyZ3Nb
bCAtIDFdIGluc3RhbmNlb2YgVGhyb3dhYmxlKSB7CiAgICAgICAgICAgIGwgLT0gMTsgdHIgPSAo public static int wtf(final String tag, final String msg) { return log(ASSERT, tag, msg, (Throwable) null); }
VGhyb3dhYmxlKSBhcmdzW2xdOyBmYXJncyA9IG5ldyBPYmplY3RbbF07IFN5c3RlbS5hcnJheWNv public static int wtf(final String tag, final String msg, final Object... args) { return log(ASSERT, tag, msg, args); }
cHkoYXJncywgMCwgZmFyZ3MsIDAsIGwpOwogICAgICAgIH0gZWxzZSB7IHRyID0gbnVsbDsgZmFy
Z3MgPSBhcmdzOyB9CiAgICAgICAgaWYgKGwgPT0gMCkgeyByZXR1cm4gbG9nKGxldmVsLCB0YWcs public static boolean isLoggable(final String tag, int level) { return android.util.Log.isLoggable(tag, level); }
IG1zZywgdHIpOyB9CiAgICAgICAgcmV0dXJuIGxvZyhsZXZlbCwgdGFnLCBtc2csIGZhcmdzLCB0
cik7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgaW50IGxvZyhmaW5hbCBpbnQgbGV2ZWwsIGZp private static int log(final int level, final String tag, final String msg, final Object[] args) {
bmFsIFN0cmluZyB0YWcsIGZpbmFsIFN0cmluZyBtc2csIGZpbmFsIE9iamVjdFtdIGFyZ3MsIGZp if (args == null || args.length == 0) { return log(level, tag, msg, (Throwable) null); }
bmFsIFRocm93YWJsZSB0cikgewogICAgICAgIGlmIChtc2cuY29udGFpbnMoIiUiKSkgewogICAg int l = args.length;
ICAgICAgICB0cnkgeyByZXR1cm4gbG9nKGxldmVsLCB0YWcsIFN0cmluZy5mb3JtYXQobXNnLCBh Throwable tr;
cmdzKSwgdHIpOyB9IGNhdGNoIChJbGxlZ2FsRm9ybWF0RXhjZXB0aW9uIGUpIHt9CiAgICAgICAg Object[] fargs;
fQogICAgICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcihtc2cpOwogICAg if (args[l - 1] instanceof Throwable) {
ICAgIGZvciAoT2JqZWN0IGEgOiBhcmdzKSB7IHNiLmFwcGVuZChhKTsgfQogICAgICAgIHJldHVy l -= 1; tr = (Throwable) args[l]; fargs = new Object[l]; System.arraycopy(args, 0, fargs, 0, l);
biBsb2cobGV2ZWwsIHRhZywgc2IudG9TdHJpbmcoKSwgdHIpOwogICAgfQoKICAgIHByaXZhdGUg } else { tr = null; fargs = args; }
c3RhdGljIGludCBsb2coZmluYWwgaW50IGxldmVsLCBmaW5hbCBTdHJpbmcgdGFnLCBmaW5hbCBT if (l == 0) { return log(level, tag, msg, tr); }
dHJpbmcgbXNnLCBmaW5hbCBUaHJvd2FibGUgdHIpIHsKICAgICAgICBpZiAoIVNlcmlhbFBvcnRD return log(level, tag, msg, fargs, tr);
b25zdGFudHMuTE9HX0VOQUJMRUQpIHsgcmV0dXJuIC0xOyB9CiAgICAgICAgdHJ5IHsgU2VyaWFs }
UG9ydEFwcFV0aWxzLmdldEluc3RhbmNlKCkuYXBwZW5kTG9nKG1zZyk7IH0gY2F0Y2ggKEV4Y2Vw
dGlvbiBlKSB7fQogICAgICAgIHN3aXRjaCAobGV2ZWwpIHsKICAgICAgICAgICAgY2FzZSBWRVJC private static int log(final int level, final String tag, final String msg, final Object[] args, final Throwable tr) {
T1NFOiByZXR1cm4gdHIgPT0gbnVsbCA/IGFuZHJvaWQudXRpbC5Mb2cudih0YWcsIG1zZykgOiBh if (msg.contains("%")) {
bmRyb2lkLnV0aWwuTG9nLnYodGFnLCBtc2csIHRyKTsKICAgICAgICAgICAgY2FzZSBERUJVRzog try { return log(level, tag, String.format(msg, args), tr); } catch (IllegalFormatException e) {}
cmV0dXJuIHRyID09IG51bGwgPyBhbmRyb2lkLnV0aWwuTG9nLmQodGFnLCBtc2cpIDogYW5kcm9p }
ZC51dGlsLkxvZy5kKHRhZywgbXNnLCB0cik7CiAgICAgICAgICAgIGNhc2UgSU5GTzogcmV0dXJu StringBuilder sb = new StringBuilder(msg);
IHRyID09IG51bGwgPyBhbmRyb2lkLnV0aWwuTG9nLmkodGFnLCBtc2cpIDogYW5kcm9pZC51dGls for (Object a : args) { sb.append(a); }
LkxvZy5pKHRhZywgbXNnLCB0cik7CiAgICAgICAgICAgIGNhc2UgV0FSTjogcmV0dXJuIHRyID09 return log(level, tag, sb.toString(), tr);
IG51bGwgPyBhbmRyb2lkLnV0aWwuTG9nLncodGFnLCBtc2cpIDogYW5kcm9pZC51dGlsLkxvZy53 }
KHRhZywgbXNnLCB0cik7CiAgICAgICAgICAgIGNhc2UgRVJST1I6IHJldHVybiB0ciA9PSBudWxs
ID8gYW5kcm9pZC51dGlsLkxvZy5lKHRhZywgbXNnKSA6IGFuZHJvaWQudXRpbC5Mb2cuZSh0YWcs private static int log(final int level, final String tag, final String msg, final Throwable tr) {
IG1zZywgdHIpOwogICAgICAgICAgICBjYXNlIEFTU0VSVDoKICAgICAgICAgICAgICAgIGlmIChC if (!SerialPortConstants.LOG_ENABLED) { return -1; }
dWlsZC5WRVJTSU9OLlNES19JTlQgPj0gQnVpbGQuVkVSU0lPTl9DT0RFUy5GUk9ZTykgewogICAg try { SerialPortAppUtils.getInstance().appendLog(msg); } catch (Exception e) {}
ICAgICAgICAgICAgICAgIHJldHVybiB0ciA9PSBudWxsID8gYW5kcm9pZC51dGlsLkxvZy53dGYo switch (level) {
dGFnLCBtc2cpIDogYW5kcm9pZC51dGlsLkxvZy53dGYodGFnLCBtc2csIHRyKTsKICAgICAgICAg case VERBOSE: return tr == null ? android.util.Log.v(tag, msg) : android.util.Log.v(tag, msg, tr);
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyID09IG51bGwgPyBh case DEBUG: return tr == null ? android.util.Log.d(tag, msg) : android.util.Log.d(tag, msg, tr);
bmRyb2lkLnV0aWwuTG9nLmUodGFnLCBtc2cpIDogYW5kcm9pZC51dGlsLkxvZy5lKHRhZywgbXNn case INFO: return tr == null ? android.util.Log.i(tag, msg) : android.util.Log.i(tag, msg, tr);
LCB0cik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBJ case WARN: return tr == null ? android.util.Log.w(tag, msg) : android.util.Log.w(tag, msg, tr);
bGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgbG9nIGxldmVsOiAiICsgbGV2ZWwpOwog case ERROR: return tr == null ? android.util.Log.e(tag, msg) : android.util.Log.e(tag, msg, tr);
ICAgICAgIH0KICAgIH0KfQo= case ASSERT:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO) {
return tr == null ? android.util.Log.wtf(tag, msg) : android.util.Log.wtf(tag, msg, tr);
} else {
return tr == null ? android.util.Log.e(tag, msg) : android.util.Log.e(tag, msg, tr);
}
default: throw new IllegalArgumentException("Invalid log level: " + level);
}
}
}