From 9ee3eebb99a67200979ca073dbbac8adba0a100d Mon Sep 17 00:00:00 2001 From: Songchun Fan Date: Wed, 1 Sep 2021 16:09:08 -0700 Subject: [PATCH] [SettingsProvider] additional logging for debug telephony bug For the past few months we have been seening a telephony bug that happens occasionally without a reliable way to reproduce it. The bug is that for some reason, all of a sudden, the telephony thinks that the device is unprovisioned, even though the device is provisioned. Based on initial inspection, the inconsistency is from Settings Provider. However, the dumpsys shows that the DEVICE_PROVISIONED value is 1, and no other clients have reported this issue. The inconsistency could be from memory corruption, though that would probably have been reported by other clients as well. To further assist debugging, I am adding additional logging just for the query on DEVICE_PROVISIONED. This will at least show what exactly is the value returned to telephony, when the bug occurs again. I will remove the additional logging as soon as we have some clue. BUG: 197879371 Test: builds Change-Id: I1321168081fa808dca4503b84d58983df145e790 --- core/java/android/provider/Settings.java | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 7a2898a7cf573..db9e403387608 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -15463,9 +15463,27 @@ public final class Settings { */ public static int getInt(ContentResolver cr, String name, int def) { String v = getString(cr, name); + final boolean isQueryForDeviceProvision = name.equals(DEVICE_PROVISIONED); try { - return v != null ? Integer.parseInt(v) : def; + // TODO(b/197879371): remove the extra logging after bug is fixed + final int result; + if (v != null) { + result = Integer.parseInt(v); + if (isQueryForDeviceProvision) { + Log.w(TAG, "Found settings value for provision. Returning " + result); + } + } else { + result = def; + if (isQueryForDeviceProvision) { + Log.w(TAG, "Missing settings value for provision. Returning " + result); + } + } + return result; } catch (NumberFormatException e) { + if (isQueryForDeviceProvision) { + Log.w(TAG, "Wrong settings value for provision. Found: " + v + + ". Returning " + v); + } return def; } }