Merge "Fix expanding and scrolling in AlarmClockFragment." into ics-ub-clock-amazon
diff --git a/src/com/android/deskclock/AlarmClockFragment.java b/src/com/android/deskclock/AlarmClockFragment.java
index 84adcd5..31eeffd 100644
--- a/src/com/android/deskclock/AlarmClockFragment.java
+++ b/src/com/android/deskclock/AlarmClockFragment.java
@@ -615,24 +615,6 @@
         if (alarmPosition >= 0) {
             mAdapter.setNewAlarm(alarmId);
             mAlarmsList.smoothScrollToPositionFromTop(alarmPosition, 0);
-
-            final int firstPositionId = mAlarmsList.getFirstVisiblePosition();
-            final int childId = alarmPosition - firstPositionId;
-
-            // We need to expand the first view item because bindView may have been called
-            // before setNewAlarm took effect. In that case, the newly created alarm will not be
-            // expanded.
-            final View view = mAlarmsList.getChildAt(childId);
-            if (view != null) {
-                // The view may be null if it isn't visible yet. In that case, the above call to
-                // setNewAlarm() will make sure it's expanded when it comes into view.
-                Object tag = view.getTag();
-                if (tag != null && tag instanceof AlarmItemAdapter.ItemHolder) {
-                    mAdapter.expandAlarm((AlarmItemAdapter.ItemHolder) tag, true);
-                } else {
-                    Log.e("Unable to get ItemHolder for view at id "+childId);
-                }
-            }
         } else {
             // Trying to display a deleted alarm should only happen from a missed notification for
             // an alarm that has been marked deleted after use.
@@ -1153,13 +1135,15 @@
 
             if (expanded) {
                 expandAlarm(itemHolder, false);
+            } else {
+                collapseAlarm(itemHolder, false);
             }
 
             itemHolder.alarmItem.setOnClickListener(new View.OnClickListener() {
                 @Override
                 public void onClick(View view) {
                     if (isAlarmExpanded(alarm)) {
-                        collapseAlarm(itemHolder);
+                        collapseAlarm(itemHolder, true);
                     } else {
                         expandAlarm(itemHolder, true);
                     }
@@ -1523,7 +1507,7 @@
             return mExpanded.contains(alarm.id);
         }
 
-        private void collapseAlarm(final ItemHolder itemHolder) {
+        private void collapseAlarm(final ItemHolder itemHolder, boolean animate) {
             mExpanded.remove(itemHolder.alarm.id);
 
             // Save the starting height so we can animate from this value.
@@ -1533,6 +1517,13 @@
             itemHolder.alarmItem.setBackgroundResource(mBackgroundColor);
             itemHolder.expandArea.setVisibility(View.GONE);
 
+            if (!animate) {
+                // Set the "end" layout and don't do the animation.
+                itemHolder.arrow.setRotation(0);
+                itemHolder.hairLine.setTranslationY(0);
+                return;
+            }
+
             // Add an onPreDrawListener, which gets called after measurement but before the draw.
             // This way we can check the height we need to animate to before any drawing.
             // Note the series of events:
@@ -1765,6 +1756,7 @@
 
                     // Add alarm to db
                     Alarm newAlarm = Alarm.addAlarm(cr, alarm);
+                    mScrollToAlarmId = newAlarm.id;
 
                     // Create and add instance to db
                     if (newAlarm.enabled) {
@@ -1779,8 +1771,6 @@
                 if (alarm.enabled && instance != null) {
                     AlarmUtils.popAlarmSetToast(context, instance.getAlarmTime().getTimeInMillis());
                 }
-                mAdapter.setNewAlarm(alarm.id);
-                scrollToAlarm(alarm.id);
             }
         };
         updateTask.execute();