Add null check for handler on Clock view

On reboot, we've encountered an issue where the handler returns null,
causing a null pointer exception in the broadcast receiver.

In this CL, we add a null check and an error message to prevent a sysui
crash.

Bug: 148869042
Test: build, reboot a few times
Change-Id: Iac7f3a538be9a53d4a76926523aa2a3f4f22723d
Merged-In: Ie8a2627004876cf35291d52bd3686a5014498f52
This commit is contained in:
Heemin Seog
2020-02-05 17:35:19 -08:00
parent e693b797bc
commit fb23ff98d9

View File

@@ -34,6 +34,7 @@ import android.text.format.DateFormat;
import android.text.style.CharacterStyle;
import android.text.style.RelativeSizeSpan;
import android.util.AttributeSet;
import android.util.Log;
import android.view.Display;
import android.view.View;
import android.widget.TextView;
@@ -67,6 +68,7 @@ public class Clock extends TextView implements DemoMode, Tunable, CommandQueue.C
DarkReceiver, ConfigurationListener {
public static final String CLOCK_SECONDS = "clock_seconds";
private static final String TAG = "StatusBarClock";
private static final String CLOCK_SUPER_PARCELABLE = "clock_super_parcelable";
private static final String CURRENT_USER_ID = "current_user_id";
private static final String VISIBLE_BY_POLICY = "visible_by_policy";
@@ -228,9 +230,18 @@ public class Clock extends TextView implements DemoMode, Tunable, CommandQueue.C
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Handler handler = getHandler();
if (handler == null) {
Log.e(TAG,
"Received intent, but handler is null - still attached to window? Window "
+ "token: "
+ getWindowToken());
return;
}
if (action.equals(Intent.ACTION_TIMEZONE_CHANGED)) {
String tz = intent.getStringExtra("time-zone");
getHandler().post(() -> {
handler.post(() -> {
mCalendar = Calendar.getInstance(TimeZone.getTimeZone(tz));
if (mClockFormat != null) {
mClockFormat.setTimeZone(mCalendar.getTimeZone());
@@ -238,14 +249,14 @@ public class Clock extends TextView implements DemoMode, Tunable, CommandQueue.C
});
} else if (action.equals(Intent.ACTION_CONFIGURATION_CHANGED)) {
final Locale newLocale = getResources().getConfiguration().locale;
getHandler().post(() -> {
handler.post(() -> {
if (!newLocale.equals(mLocale)) {
mLocale = newLocale;
mClockFormatString = ""; // force refresh
}
});
}
getHandler().post(() -> updateClock());
handler.post(() -> updateClock());
}
};