From 903556b16240844da08c3ca87d3559deffddc484 Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Wed, 29 Mar 2017 13:13:51 -0400 Subject: [PATCH] Make sure TileServices get onTileRemoved on reset Test: runtest systemui Change-Id: Ic23eb6759f99c9cfe45ab975b3bb723dae56e0d8 Fixes: 34481238 --- .../systemui/qs/customize/QSCustomizer.java | 2 +- .../android/systemui/qs/customize/TileAdapter.java | 6 +++ .../systemui/qs/customize/TileAdapterTest.java | 51 ++++++++++++++++++++++ 3 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileAdapterTest.java diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java index d8e554254076..596d3bc6e8f6 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java +++ b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java @@ -209,7 +209,7 @@ public class QSCustomizer extends LinearLayout implements OnMenuItemClickListene for (String tile : defTiles.split(",")) { tiles.add(tile); } - mTileAdapter.setTileSpecs(tiles); + mTileAdapter.resetTileSpecs(mHost, tiles); } private void setTileSpecs() { diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java b/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java index c33d7da2d808..0a0d2ce00a1b 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java +++ b/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java @@ -114,6 +114,12 @@ public class TileAdapter extends RecyclerView.Adapter implements TileSta mCurrentSpecs = newSpecs; } + public void resetTileSpecs(QSTileHost host, List specs) { + // Notify the host so the tiles get removed callbacks. + host.changeTiles(mCurrentSpecs, specs); + setTileSpecs(specs); + } + public void setTileSpecs(List currentSpecs) { if (currentSpecs.equals(mCurrentSpecs)) { return; diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileAdapterTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileAdapterTest.java new file mode 100644 index 000000000000..6e7d99e49ec1 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileAdapterTest.java @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.android.systemui.qs.customize; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +import android.testing.AndroidTestingRunner; +import android.testing.TestableLooper; +import android.testing.TestableLooper.RunWithLooper; + +import com.android.systemui.SysuiTestCase; +import com.android.systemui.qs.QSTileHost; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.util.Collections; + +@RunWith(AndroidTestingRunner.class) +@RunWithLooper +public class TileAdapterTest extends SysuiTestCase { + + private TileAdapter mTileAdapter; + + @Before + public void setup() throws Exception { + TestableLooper.get(this).runWithLooper(() -> mTileAdapter = new TileAdapter(mContext)); + } + + @Test + public void testResetNotifiesHost() { + QSTileHost host = mock(QSTileHost.class); + mTileAdapter.resetTileSpecs(host, Collections.emptyList()); + verify(host).changeTiles(any(), any()); + } +} -- 2.11.0