OSDN Git Service

Store Tile in view tag, not position
authorjackqdyulei <jackqdyulei@google.com>
Mon, 24 Oct 2016 21:28:55 +0000 (14:28 -0700)
committerjackqdyulei <jackqdyulei@google.com>
Mon, 24 Oct 2016 21:44:37 +0000 (14:44 -0700)
The position(used to find the tile) is not up-to-date when recyclerview
changes, so store tile instead.

Bug: 32370624
Test: make -j40 SettingsTests
Change-Id: I10d29b3137ecb1c37b6a8468c6f2709b8497caa6

src/com/android/settings/dashboard/DashboardAdapter.java
tests/app/src/com/android/settings/tests/DashboardAdapterTest.java [new file with mode: 0644]

index 9ea48b0..baea164 100644 (file)
@@ -64,8 +64,7 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
         @Override
         public void onClick(View v) {
             //TODO: get rid of setTag/getTag
-            final Tile tile = (Tile) mDashboardData.getItemEntityByPosition((int) v.getTag());
-            ((SettingsActivity) mContext).openTile(tile);
+            ((SettingsActivity) mContext).openTile((Tile) v.getTag());
         }
     };
 
@@ -205,7 +204,7 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
             case R.layout.dashboard_tile:
                 final Tile tile = (Tile) mDashboardData.getItemEntityByPosition(position);
                 onBindTile(holder, tile);
-                holder.itemView.setTag(position);
+                holder.itemView.setTag(tile);
                 holder.itemView.setOnClickListener(mTileClickListener);
                 break;
             case R.layout.suggestion_header:
diff --git a/tests/app/src/com/android/settings/tests/DashboardAdapterTest.java b/tests/app/src/com/android/settings/tests/DashboardAdapterTest.java
new file mode 100644 (file)
index 0000000..4b8e6cf
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2016 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.settings.tests;
+
+import android.app.Instrumentation;
+import android.content.Context;
+import android.content.Intent;
+import android.provider.Settings;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import com.android.settings.R;
+
+import static android.support.test.espresso.Espresso.onView;
+import static android.support.test.espresso.action.ViewActions.click;
+import static android.support.test.espresso.assertion.ViewAssertions.matches;
+import static android.support.test.espresso.matcher.ViewMatchers.*;
+import static android.support.test.espresso.matcher.ViewMatchers.Visibility.VISIBLE;
+import static org.hamcrest.core.AllOf.allOf;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class DashboardAdapterTest {
+    @Before
+    public void SetUp() {
+        Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
+        instrumentation.startActivitySync(new Intent(Settings
+                .ACTION_SETTINGS));
+    }
+
+    @Test
+    public void testTileConsistency_ToggleSuggestionsAndOpenBluetooth_shouldInBluetooth()
+            throws Exception{
+        final Context context = InstrumentationRegistry.getTargetContext();
+
+        onView(allOf(withText(context.getString(R.string.suggestions_title)),
+                withEffectiveVisibility(VISIBLE))).perform(click());
+        onView(allOf(withText(context.getString(R.string.bluetooth_settings)),
+                withEffectiveVisibility(VISIBLE))).perform(click());
+
+        // It should go to Bluetooth sub page, not other page or crash
+        onView(allOf(withText(context.getString(R.string.bluetooth_settings)),
+                withEffectiveVisibility(VISIBLE))).check(matches(isDisplayed()));
+
+    }
+}