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

am: 7188fda4af

Change-Id: If501b5b534bee5b95f446fd48012c4c6a779bb10
This commit is contained in:
Selim Cinek
2017-04-28 18:17:22 +00:00
committed by android-build-merger
3 changed files with 20 additions and 1 deletions

View File

@@ -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<>();

View File

@@ -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 {

View File

@@ -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);