Revert "Correct recycling to take setViewId into account."

This reverts commit 308a272289cafedbb72bc7f5310ac54d50502ae7.

Bug: 183104573
Test: Install from Play Store with the screen off on wembley, and the device doesn't crash when the screen turns back on.

Change-Id: I289fcafc6685c4ede295e8d6916a54da9bac1ad5
diff --git a/core/java/android/appwidget/AppWidgetHostView.java b/core/java/android/appwidget/AppWidgetHostView.java
index a6b4b47..8fd0de7 100644
--- a/core/java/android/appwidget/AppWidgetHostView.java
+++ b/core/java/android/appwidget/AppWidgetHostView.java
@@ -520,7 +520,9 @@
                 return;
             }
             int layoutId = rvToApply.getLayoutId();
-            if (rvToApply.canRecycleView(mView)) {
+            // If our stale view has been prepared to match active, and the new
+            // layout matches, try recycling it
+            if (content == null && layoutId == mLayoutId) {
                 try {
                     rvToApply.reapply(mContext, mView, mInteractionHandler, mCurrentSize,
                             mColorResources);
diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java
index 0cedcea..2b73923 100644
--- a/core/java/android/widget/RemoteViews.java
+++ b/core/java/android/widget/RemoteViews.java
@@ -2196,7 +2196,7 @@
                 int recycledViewIndex = findViewIndexToRecycle(target, rvToApply);
                 if (recycledViewIndex >= 0) {
                     View child = target.getChildAt(recycledViewIndex);
-                    if (rvToApply.canRecycleView(child)) {
+                    if (getViewLayoutId(child) == rvToApply.getLayoutId()) {
                         if (nextChild < recycledViewIndex) {
                             target.removeViews(nextChild, recycledViewIndex - nextChild);
                         }
@@ -2254,7 +2254,7 @@
                     // application are placed before.
                     ViewTree recycled = target.mChildren.get(recycledViewIndex);
                     // We can only recycle the view if the layout id is the same.
-                    if (rvToApply.canRecycleView(recycled.mRoot)) {
+                    if (getViewLayoutId(recycled.mRoot) == rvToApply.getLayoutId()) {
                         if (recycledViewIndex > nextChild) {
                             target.removeChildren(nextChild, recycledViewIndex - nextChild);
                         }
@@ -3726,8 +3726,7 @@
      *
      * The {@code stableId} will be used to identify a potential view to recycled when the remote
      * view is inflated. Views can be re-used if inserted in the same order, potentially with
-     * some views appearing / disappearing. To be recycled the view must not change the layout
-     * used to inflate it or its view id (see {@link RemoteViews#setViewId}).
+     * some views appearing / disappearing.
      *
      * Note: if a view is re-used, all the actions will be re-applied on it. However, its properties
      * are not reset, so what was applied in previous round will have an effect. As a view may be
@@ -5117,7 +5116,6 @@
         View v = inflater.inflate(rv.getLayoutId(), parent, false);
         if (mViewId != View.NO_ID) {
             v.setId(mViewId);
-            v.setTagInternal(R.id.remote_views_override_id, mViewId);
         }
         v.setTagInternal(R.id.widget_frame, rv.getLayoutId());
         return v;
@@ -5337,13 +5335,6 @@
         reapply(context, v, handler, size, colorResources, true);
     }
 
-    /** @hide */
-    public boolean canRecycleView(View v) {
-        Integer overrideIdTag = (Integer) v.getTag(R.id.remote_views_override_id);
-        int overrideId = overrideIdTag == null ? View.NO_ID : overrideIdTag;
-        return (Integer) v.getTag(R.id.widget_frame) == getLayoutId() && mViewId == overrideId;
-    }
-
     // Note: topLevel should be true only for calls on the topLevel RemoteViews, internal calls
     // should set it to false.
     private void reapply(Context context, View v, InteractionHandler handler, SizeF size,
@@ -5356,7 +5347,7 @@
         // (orientation or size), we throw an exception, since the layouts may be completely
         // unrelated.
         if (hasMultipleLayouts()) {
-            if (!rvToApply.canRecycleView(v)) {
+            if ((Integer) v.getTag(R.id.widget_frame) != rvToApply.getLayoutId()) {
                 throw new RuntimeException("Attempting to re-apply RemoteViews to a view that" +
                         " that does not share the same root layout id.");
             }
diff --git a/core/res/res/values/ids.xml b/core/res/res/values/ids.xml
index c3b35c8..7bc4663 100644
--- a/core/res/res/values/ids.xml
+++ b/core/res/res/values/ids.xml
@@ -252,8 +252,5 @@
   <item type="id" name="remote_views_next_child" />
 
   <!-- View tag associating a view with its stable id for potential recycling. -->
-  <item type="id" name="remote_views_stable_id" />
-
-  <!-- View tag associating a view with its overridden id, to ensure valid recycling only. -->
-  <item type="id" name="remote_views_override_id" />
+  <item type="id" name = "remote_views_stable_id" />
 </resources>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 567feee3..0f834933 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -4323,8 +4323,6 @@
 
   <java-symbol type="id" name="remote_views_next_child" />
   <java-symbol type="id" name="remote_views_stable_id" />
-  <java-symbol type="id" name="remote_views_override_id" />
-
   <!-- View and control prompt -->
   <java-symbol type="drawable" name="ic_accessibility_24dp" />
   <java-symbol type="string" name="view_and_control_notification_title" />