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

Commit 7188fda4 authored by Selim Cinek's avatar Selim Cinek Committed by Android (Google) Code Review
Browse files

Merge "Fixes a bug where the asynctask wasn't removed when inflating" into oc-dev

parents ba836ad1 dc1231c3
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -222,11 +222,21 @@ public class NotificationData {
            for (AsyncTask task : mRunningTasks) {
                task.cancel(true /* mayInterruptIfRunning */);
            }
            mRunningTasks.clear();
        }

        public void addInflationTask(AsyncTask asyncInflationTask) {
            mRunningTasks.add(asyncInflationTask);
        }

        public void onInflationTaskFinished(AsyncTask asyncInflationTask) {
            mRunningTasks.remove(asyncInflationTask);
        }

        @VisibleForTesting
        public ArraySet<AsyncTask> getRunningTasks() {
            return mRunningTasks;
        }
    }

    private final ArrayMap<String, Entry> mEntries = new ArrayMap<>();
+1 −0
Original line number Diff line number Diff line
@@ -325,6 +325,7 @@ public class NotificationInflater {

        @Override
        protected void onPostExecute(Notification.Builder builder) {
            mRow.getEntry().onInflationTaskFinished(this);
            if (mError == null) {
                finishInflation(mReInflateFlags, builder, mPackageContext);
            } else {
+9 −1
Original line number Diff line number Diff line
@@ -115,13 +115,21 @@ public class NotificationInflaterTest {
    public void testInflationThrowsErrorDoesntCallUpdated() throws Exception {
        mRow.getPrivateLayout().removeAllViews();
        mRow.getStatusBarNotification().getNotification().contentView
                = new RemoteViews(mContext.getPackageName(), R.layout.status_bar);;
                = new RemoteViews(mContext.getPackageName(), R.layout.status_bar);
        runThenWaitForInflation(() -> mNotificationInflater.inflateNotificationViews(),
                true /* expectingException */, mNotificationInflater);
        Assert.assertTrue(mRow.getPrivateLayout().getChildCount() == 0);
        verify(mRow, times(0)).onNotificationUpdated();
    }

    @Test
    public void testAsyncTaskRemoved() throws Exception {
        mRow.getEntry().abortInflation();
        runThenWaitForInflation(() -> mNotificationInflater.inflateNotificationViews(),
                mNotificationInflater);
        Assert.assertTrue(mRow.getEntry().getRunningTasks().size() == 0);
    }

    public static void runThenWaitForInflation(Runnable block,
            NotificationInflater inflater) throws Exception {
        runThenWaitForInflation(block, false /* expectingException */, inflater);