Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 93fafd67 authored by Ben Lin's avatar Ben Lin
Browse files

Register change Uri and notify changes in bugreportServices.

Bug: 28767380
Change-Id: Ia4d1f5a2e44881d300f2869c628d4990406caf40
(cherry picked from commit 6c9ff513c6d7d3de7ab8920d88111c2b1dc1bb1f)
parent 64148406
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -815,6 +815,14 @@ public class BugreportProgressService extends Service {
     */
    private void onBugreportFinished(int id, Intent intent) {
        final File bugreportFile = getFileExtra(intent, EXTRA_BUGREPORT);
        // Since BugreportProvider and BugreportProgressService aren't tightly coupled,
        // we need to make sure they are explicitly tied to a single unique notification URI
        // so that the service can alert the provider of changes it has done (ie. new bug
        // reports)
        // See { @link Cursor#setNotificationUri } and {@link ContentResolver#notifyChanges }
        final Uri notificationUri = BugreportStorageProvider.getNotificationUri();
        mContext.getContentResolver().notifyChange(notificationUri, null, false);

        if (bugreportFile == null) {
            // Should never happen, dumpstate always set the file.
            Log.wtf(TAG, "Missing " + EXTRA_BUGREPORT + " on intent " + intent);
+10 −0
Original line number Diff line number Diff line
@@ -19,9 +19,11 @@ package com.android.shell;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.database.MatrixCursor.RowBuilder;
import android.net.Uri;
import android.os.CancellationSignal;
import android.os.FileUtils;
import android.os.ParcelFileDescriptor;
import android.provider.DocumentsContract;
import android.provider.DocumentsContract.Document;
import android.provider.DocumentsContract.Root;
import android.provider.DocumentsProvider;
@@ -32,6 +34,7 @@ import java.io.File;
import java.io.FileNotFoundException;

public class BugreportStorageProvider extends DocumentsProvider {
    private static final String AUTHORITY = "com.android.shell.documents";
    private static final String DOC_ID_ROOT = "bugreport";

    private static final String[] DEFAULT_ROOT_PROJECTION = new String[] {
@@ -103,6 +106,7 @@ public class BugreportStorageProvider extends DocumentsProvider {
                for (File file : files) {
                    addFileRow(result, file);
                }
                result.setNotificationUri(getContext().getContentResolver(), getNotificationUri());
            }
        }
        return result;
@@ -130,6 +134,12 @@ public class BugreportStorageProvider extends DocumentsProvider {
        }
    }

    // This is used by BugreportProgressService so that the notification uri shared by
    // BugreportProgressService and BugreportStorageProvider are guaranteed the same and unique
    protected static Uri getNotificationUri() {
      return DocumentsContract.buildChildDocumentsUri(AUTHORITY, DOC_ID_ROOT);
    }

    private static String[] resolveRootProjection(String[] projection) {
        return projection != null ? projection : DEFAULT_ROOT_PROJECTION;
    }