Make sure TileServices get onTileRemoved on reset

Test: runtest systemui
Change-Id: Ic23eb6759f99c9cfe45ab975b3bb723dae56e0d8
Fixes: 34481238
This commit is contained in:
Jason Monk
2017-03-29 13:13:51 -04:00
parent b7980a3bbe
commit 903556b162
3 changed files with 58 additions and 1 deletions

View File

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

View File

@@ -114,6 +114,12 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta
mCurrentSpecs = newSpecs;
}
public void resetTileSpecs(QSTileHost host, List<String> specs) {
// Notify the host so the tiles get removed callbacks.
host.changeTiles(mCurrentSpecs, specs);
setTileSpecs(specs);
}
public void setTileSpecs(List<String> currentSpecs) {
if (currentSpecs.equals(mCurrentSpecs)) {
return;

View File

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