diff options
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/os/BugreportManager.java | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/core/java/android/os/BugreportManager.java b/core/java/android/os/BugreportManager.java index fab906b9e122..9e996d15fa84 100644 --- a/core/java/android/os/BugreportManager.java +++ b/core/java/android/os/BugreportManager.java @@ -27,6 +27,7 @@ import android.annotation.SystemService; import android.annotation.TestApi; import android.app.ActivityManager; import android.content.Context; +import android.content.Intent; import android.os.Handler; import android.util.Log; import android.widget.Toast; @@ -52,6 +53,8 @@ import java.util.concurrent.Executor; public final class BugreportManager { private static final String TAG = "BugreportManager"; + private static final String INTENT_UI_INTENSIVE_BUGREPORT_DUMPS_FINISHED = + "com.android.internal.intent.action.UI_INTENSIVE_BUGREPORT_DUMPS_FINISHED"; private final Context mContext; private final IDumpstate mBinder; @@ -284,5 +287,27 @@ public final class BugreportManager { Toast.makeText(mContext, message, Toast.LENGTH_LONG).show(); }); } + + @Override + public void onUiIntensiveBugreportDumpsFinished(String callingPackage) + throws RemoteException { + final long identity = Binder.clearCallingIdentity(); + try { + mExecutor.execute(() -> { + // Send intent to let calling app to show UI safely without interfering with + // the bugreport/screenshot generation. + // TODO(b/154298410): When S is ready for API change, add a method in + // BugreportCallback so we can just call the callback instead of using + // broadcast. + Intent intent = new Intent(INTENT_UI_INTENSIVE_BUGREPORT_DUMPS_FINISHED); + intent.setPackage(callingPackage); + intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); + intent.addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND); + mContext.sendBroadcast(intent, android.Manifest.permission.DUMP); + }); + } finally { + Binder.restoreCallingIdentity(identity); + } + } } } |
