From 46abffb3defbf3a3785eee52a58b97f6abb5ee3b Mon Sep 17 00:00:00 2001 From: Mark Renouf Date: Mon, 4 Oct 2021 11:28:25 -0400 Subject: [PATCH] Fix UsbResolverActivity SuperNotCalledException (pt2) Instead of calling the normal path, this change creates a path to call Activity#onCreate directly and avoid initializing state when the activity is about to self finish() Bug: 201719995 Test: adb shell am start -n com.android.systemui/com.android.systemui.usb.UsbResolverActivity Change-Id: I40ee792e341b828a3e288b1fc713f6df13728b4a --- core/java/com/android/internal/app/ResolverActivity.java | 9 +++++++++ .../com/android/systemui/usb/UsbResolverActivity.java | 6 ++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java index 91b4b7fb2ca1f..b8dbfb3c64bc9 100644 --- a/core/java/com/android/internal/app/ResolverActivity.java +++ b/core/java/com/android/internal/app/ResolverActivity.java @@ -314,6 +314,15 @@ public class ResolverActivity extends Activity implements return intent; } + /** + * Call {@link Activity#onCreate} without initializing anything further. This should + * only be used when the activity is about to be immediately finished to avoid wasting + * initializing steps and leaking resources. + */ + protected void super_onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + @Override protected void onCreate(Bundle savedInstanceState) { // Use a specialized prompt when we're handling the 'Home' app startActivity() diff --git a/packages/SystemUI/src/com/android/systemui/usb/UsbResolverActivity.java b/packages/SystemUI/src/com/android/systemui/usb/UsbResolverActivity.java index 6c3543317e383..da4ccd00b1258 100644 --- a/packages/SystemUI/src/com/android/systemui/usb/UsbResolverActivity.java +++ b/packages/SystemUI/src/com/android/systemui/usb/UsbResolverActivity.java @@ -63,8 +63,7 @@ public class UsbResolverActivity extends ResolverActivity { Intent intent = getIntent(); Parcelable targetParcelable = intent.getParcelableExtra(Intent.EXTRA_INTENT); if (!(targetParcelable instanceof Intent)) { - super.onCreate(savedInstanceState); - onStop(); // unregister receiver registered in onCreate (PackageMonitor) + super_onCreate(savedInstanceState); Log.w("UsbResolverActivity", "Target is not an intent: " + targetParcelable); finish(); return; @@ -97,8 +96,7 @@ public class UsbResolverActivity extends ResolverActivity { } else { mAccessory = (UsbAccessory)target.getParcelableExtra(UsbManager.EXTRA_ACCESSORY); if (mAccessory == null) { - super.onCreate(savedInstanceState); - onStop(); // unregister receiver registered in onCreate (PackageMonitor) + super_onCreate(savedInstanceState); Log.e(TAG, "no device or accessory"); finish(); return;