diff options
Diffstat (limited to 'packages/Shell/src')
-rw-r--r-- | packages/Shell/src/com/android/shell/BugreportProgressService.java | 66 |
1 files changed, 54 insertions, 12 deletions
diff --git a/packages/Shell/src/com/android/shell/BugreportProgressService.java b/packages/Shell/src/com/android/shell/BugreportProgressService.java index c9daf538d280..f7b1c5bf9c5b 100644 --- a/packages/Shell/src/com/android/shell/BugreportProgressService.java +++ b/packages/Shell/src/com/android/shell/BugreportProgressService.java @@ -47,6 +47,7 @@ import android.content.res.Configuration; import android.graphics.Bitmap; import android.net.Uri; import android.os.AsyncTask; +import android.os.Binder; import android.os.BugreportManager; import android.os.BugreportManager.BugreportCallback; import android.os.BugreportManager.BugreportCallback.BugreportErrorCode; @@ -186,7 +187,7 @@ public class BugreportProgressService extends Service { static final int SCREENSHOT_DELAY_SECONDS = 3; /** System property where dumpstate stores last triggered bugreport id */ - private static final String PROPERTY_LAST_ID = "dumpstate.last_id"; + static final String PROPERTY_LAST_ID = "dumpstate.last_id"; private static final String BUGREPORT_SERVICE = "bugreport"; @@ -233,7 +234,7 @@ public class BugreportProgressService extends Service { private File mBugreportsDir; - private BugreportManager mBugreportManager; + @VisibleForTesting BugreportManager mBugreportManager; /** * id of the notification used to set service on foreground. @@ -248,6 +249,11 @@ public class BugreportProgressService extends Service { */ private boolean mTakingScreenshot; + /** + * The delay timeout before taking a screenshot. + */ + @VisibleForTesting int mScreenshotDelaySec = SCREENSHOT_DELAY_SECONDS; + @GuardedBy("sNotificationBundle") private static final Bundle sNotificationBundle = new Bundle(); @@ -282,6 +288,7 @@ public class BugreportProgressService extends Service { mContext.getString(R.string.bugreport_notification_channel), isTv(this) ? NotificationManager.IMPORTANCE_DEFAULT : NotificationManager.IMPORTANCE_LOW)); + mBugreportManager = mContext.getSystemService(BugreportManager.class); } @Override @@ -305,7 +312,7 @@ public class BugreportProgressService extends Service { @Override public IBinder onBind(Intent intent) { - return null; + return new LocalBinder(); } @Override @@ -375,6 +382,7 @@ public class BugreportProgressService extends Service { mInfo.renameScreenshots(); synchronized (mLock) { sendBugreportFinishedBroadcastLocked(); + mMainThreadHandler.post(() -> mInfoDialog.onBugreportFinished(mInfo)); } } @@ -627,8 +635,6 @@ public class BugreportProgressService extends Service { } } - mBugreportManager = (BugreportManager) mContext.getSystemService( - Context.BUGREPORT_SERVICE); final Executor executor = ActivityThread.currentActivityThread().getExecutor(); Log.i(TAG, "bugreport type = " + bugreportType @@ -888,12 +894,12 @@ public class BugreportProgressService extends Service { collapseNotificationBar(); final String msg = mContext.getResources() .getQuantityString(com.android.internal.R.plurals.bugreport_countdown, - SCREENSHOT_DELAY_SECONDS, SCREENSHOT_DELAY_SECONDS); + mScreenshotDelaySec, mScreenshotDelaySec); Log.i(TAG, msg); // Show a toast just once, otherwise it might be captured in the screenshot. Toast.makeText(mContext, msg, Toast.LENGTH_SHORT).show(); - takeScreenshot(id, SCREENSHOT_DELAY_SECONDS); + takeScreenshot(id, mScreenshotDelaySec); } /** @@ -1623,6 +1629,16 @@ public class BugreportProgressService extends Service { } /** + * A local binder with interface to return an instance of BugreportProgressService for the + * purpose of testing. + */ + final class LocalBinder extends Binder { + @VisibleForTesting BugreportProgressService getService() { + return BugreportProgressService.this; + } + } + + /** * Helper class encapsulating the UI elements and logic used to display a dialog where user * can change the details of a bugreport. */ @@ -1751,6 +1767,22 @@ public class BugreportProgressService extends Service { } } + /** + * Notifies the dialog that the bugreport has finished so it disables the {@code name} + * field. + * <p>Once the bugreport is finished dumpstate has already generated the final files, so + * changing the name would have no effect. + */ + void onBugreportFinished(BugreportInfo info) { + if (mId == info.id && mInfoName != null) { + mInfoName.setEnabled(false); + mInfoName.setText(null); + if (!TextUtils.isEmpty(info.getName())) { + mInfoName.setText(info.getName()); + } + } + } + void cancel() { if (mDialog != null) { mDialog.cancel(); @@ -1995,12 +2027,21 @@ public class BugreportProgressService extends Service { Log.i(TAG, "Deleting empty bugreport file: " + bugreportFile); bugreportFile.delete(); } - for (File file : screenshotFiles) { - if (file.length() == 0) { + deleteEmptyScreenshots(); + } + + /** + * Deletes empty screenshot files. + */ + private void deleteEmptyScreenshots() { + screenshotFiles.removeIf(file -> { + final long length = file.length(); + if (length == 0) { Log.i(TAG, "Deleting empty screenshot file: " + file); file.delete(); } - } + return length == 0; + }); } /** @@ -2008,7 +2049,8 @@ public class BugreportProgressService extends Service { * {@code initialName} if user has changed it. */ void renameScreenshots() { - if (TextUtils.isEmpty(name)) { + deleteEmptyScreenshots(); + if (TextUtils.isEmpty(name) || screenshotFiles.isEmpty()) { return; } final List<File> renamedFiles = new ArrayList<>(screenshotFiles.size()); @@ -2027,7 +2069,7 @@ public class BugreportProgressService extends Service { if (newFile.length() > 0) { renamedFiles.add(newFile); } else if (newFile.delete()) { - Log.d(TAG, "screenshot file: " + newFile + "deleted successfully."); + Log.d(TAG, "screenshot file: " + newFile + " deleted successfully."); } } screenshotFiles = renamedFiles; |