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

Commit 0897f32e authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Close details dialog when bugreport is canceled by user."

parents 77dbac34 a86a3012
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.shell;

import static android.os.Process.THREAD_PRIORITY_BACKGROUND;

import static com.android.shell.BugreportPrefs.STATE_HIDE;
import static com.android.shell.BugreportPrefs.STATE_UNKNOWN;
import static com.android.shell.BugreportPrefs.getWarningState;
@@ -44,6 +45,7 @@ import libcore.io.Streams;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.MetricsProto.MetricsEvent;

import com.google.android.collect.Lists;

import android.accounts.Account;
@@ -78,6 +80,7 @@ import android.text.format.DateUtils;
import android.util.Log;
import android.util.Patterns;
import android.util.SparseArray;
import android.view.KeyEvent;
import android.view.View;
import android.view.WindowManager;
import android.view.View.OnFocusChangeListener;
@@ -543,6 +546,7 @@ public class BugreportProgressService extends Service {
            deleteScreenshots(info);
        }
        stopProgress(id);
        mInfoDialog.cancel();
    }

    /**
@@ -1404,7 +1408,7 @@ public class BugreportProgressService extends Service {
        /**
         * Sets its internal state and displays the dialog.
         */
        private void initialize(final Context context, BugreportInfo info) {
        void initialize(final Context context, BugreportInfo info) {
            final String dialogTitle =
                    context.getString(R.string.bugreport_info_dialog_title, info.id);
            // First initializes singleton.
@@ -1450,6 +1454,7 @@ public class BugreportProgressService extends Service {
                                    }
                                })
                        .create();
                mDialog.setCancelable(true);

                mDialog.getWindow().setAttributes(
                        new WindowManager.LayoutParams(
@@ -1545,13 +1550,18 @@ public class BugreportProgressService extends Service {
         * <p>Once the bugreport is finished dumpstate has already generated the final files, so
         * changing the name would have no effect.
         */
        private void onBugreportFinished(int id) {
        void onBugreportFinished(int id) {
            if (mInfoName != null) {
                mInfoName.setEnabled(false);
                mInfoName.setText(mSavedName);
            }
        }

        void cancel() {
            if (mDialog != null) {
                mDialog.cancel();
            }
        }
    }

    /**
+29 −5
Original line number Diff line number Diff line
@@ -153,7 +153,7 @@ public class BugreportReceiverTest extends InstrumentationTestCase {
        Log.i(TAG, "#### setup() on " + getName());
        Instrumentation instrumentation = getInstrumentation();
        mContext = instrumentation.getTargetContext();
        mUiBot = new UiBot(UiDevice.getInstance(instrumentation), TIMEOUT);
        mUiBot = new UiBot(instrumentation, TIMEOUT);
        mListener = ActionSendMultipleConsumerActivity.getListener(mContext);

        cancelExistingNotifications();
@@ -233,10 +233,7 @@ public class BugreportReceiverTest extends InstrumentationTestCase {

        assertProgressNotification(NAME, 00.00f);

        openProgressNotification(ID);
        UiObject cancelButton = mUiBot.getVisibleObject(mContext.getString(
                com.android.internal.R.string.cancel).toUpperCase());
        mUiBot.click(cancelButton, "cancel_button");
        cancelFromNotification();

        waitForService(false);
    }
@@ -323,6 +320,21 @@ public class BugreportReceiverTest extends InstrumentationTestCase {
        assertServiceNotRunning();
    }

    public void testProgress_cancelBugClosesDetailsDialog() throws Exception {
        resetProperties();
        sendBugreportStarted(1000);
        waitForScreenshotButtonEnabled(true);

        DetailsUi detailsUi = new DetailsUi(mUiBot, ID);
        detailsUi.assertName(NAME);  // Sanity check

        cancelFromNotification();
        mUiBot.closeNotifications();

        assertDetailsUiClosed();
        assertServiceNotRunning();
    }

    public void testProgress_changeDetailsPlainBugreport() throws Exception {
        changeDetailsTest(true);
    }
@@ -579,6 +591,13 @@ public class BugreportReceiverTest extends InstrumentationTestCase {
        }
    }

    private void cancelFromNotification() {
        openProgressNotification(ID);
        UiObject cancelButton = mUiBot.getVisibleObject(mContext.getString(
                com.android.internal.R.string.cancel).toUpperCase());
        mUiBot.click(cancelButton, "cancel_button");
    }

    private void assertProgressNotification(String name, float percent) {
        // TODO: it currently looks for 3 distinct objects, without taking advantage of their
        // relationship.
@@ -929,6 +948,11 @@ public class BugreportReceiverTest extends InstrumentationTestCase {
                screenshotButton.isEnabled());
    }

    private void assertDetailsUiClosed() {
        // TODO: unhardcode resource ids
        mUiBot.assertNotVisibleById("android:id/alertTitle");
    }

    /**
     * Helper class containing the UiObjects present in the bugreport info dialog.
     */
+25 −2
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.shell;

import android.app.Instrumentation;
import android.app.StatusBarManager;
import android.support.test.uiautomator.By;
import android.support.test.uiautomator.UiDevice;
import android.support.test.uiautomator.UiObject;
@@ -24,6 +26,8 @@ import android.support.test.uiautomator.UiScrollable;
import android.support.test.uiautomator.UiSelector;
import android.support.test.uiautomator.Until;
import android.util.Log;

import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;

/**
@@ -34,11 +38,13 @@ final class UiBot {
    private static final String TAG = "UiBot";
    private static final String SYSTEMUI_PACKAGE = "com.android.systemui";

    private final Instrumentation mInstrumentation;
    private final UiDevice mDevice;
    private final int mTimeout;

    public UiBot(UiDevice device, int timeout) {
        mDevice = device;
    public UiBot(Instrumentation instrumentation, int timeout) {
        mInstrumentation = instrumentation;
        mDevice = UiDevice.getInstance(instrumentation);
        mTimeout = timeout;
    }

@@ -57,6 +63,13 @@ final class UiBot {
        return getObject(text);
    }

    public void closeNotifications() throws Exception {
        // TODO: mDevice should provide such method..
        StatusBarManager sbm =
                (StatusBarManager) mInstrumentation.getContext().getSystemService("statusbar");
        sbm.collapsePanels();
    }

    /**
     * Opens the system notification and clicks a given notification.
     *
@@ -111,6 +124,16 @@ final class UiBot {
        return uiObject;
    }

    /**
     * Asserts an object is not visible.
     */
    public void assertNotVisibleById(String id) {
        // TODO: not working when the bugreport dialog is shown, it hangs until the dialog is
        // dismissed and hence always work.
        boolean hasIt = mDevice.hasObject(By.res(id));
        assertFalse("should not have found object with id '" + id+ "'", hasIt);
    }


    /**
     * Clicks on a UI element.