b/3395354 Make month view always go to correct time

Also makes month views not animate if they're moving more
than two visible ranges and fixes a bug with popups not
being created after pressing home and then launching an
event from the widget.

Change-Id: I5cf32170227f839e14af018141efe0224d324497
diff --git a/src/com/android/calendar/AllInOneActivity.java b/src/com/android/calendar/AllInOneActivity.java
index 92372a2..02ba806 100644
--- a/src/com/android/calendar/AllInOneActivity.java
+++ b/src/com/android/calendar/AllInOneActivity.java
@@ -32,6 +32,7 @@
 import android.app.ActionBar.Tab;
 import android.app.Activity;
 import android.app.Fragment;
+import android.app.FragmentManager;
 import android.app.FragmentTransaction;
 import android.content.ContentResolver;
 import android.content.Intent;
@@ -65,6 +66,7 @@
         ActionBar.TabListener {
     private static final String TAG = "AllInOneActivity";
     private static final boolean DEBUG = false;
+    private static final String EVENT_INFO_FRAGMENT_TAG = "EventInfoFragment";
     private static final String BUNDLE_KEY_RESTORE_TIME = "key_restore_time";
     private static final String BUNDLE_KEY_RESTORE_EDIT = "key_restore_edit";
     private static final String BUNDLE_KEY_EVENT_ID = "key_event_id";
@@ -116,6 +118,14 @@
     };
 
     @Override
+    protected void onNewIntent(Intent intent) {
+        String action = intent.getAction();
+        if (Intent.ACTION_VIEW.equals(action)) {
+            parseViewAction(intent);
+        }
+    }
+
+    @Override
     protected void onCreate(Bundle icicle) {
         if (Utils.getSharedPreference(this, OtherPreferences.KEY_OTHER_1, false)) {
             setTheme(R.style.CalendarTheme_WithActionBarWallpaper);
@@ -162,7 +172,7 @@
         mIsMultipane =
                 (res.getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_XLARGE) != 0;
 
-        Utils.allowWeekForDetailView(mIsMultipane);
+        Utils.setAllowWeekForDetailView(mIsMultipane);
 
         mDateRange = (TextView) getLayoutInflater().inflate(R.layout.date_range_title, null);
 
@@ -359,7 +369,7 @@
         } else {
             mPreviousView = viewType;
         }
-        setMainPane(ft, R.id.main_pane, viewType, timeMillis, true, info);
+        setMainPane(ft, R.id.main_pane, viewType, timeMillis, true);
 
         ft.commit(); // this needs to be after setMainPane()
 
@@ -432,8 +442,8 @@
         }
     }
 
-    private void setMainPane(FragmentTransaction ft, int viewId, int viewType, long timeMillis,
-            boolean force, EventInfo e) {
+    private void setMainPane(
+            FragmentTransaction ft, int viewId, int viewType, long timeMillis, boolean force) {
         if (mOnSaveInstanceStateCalled) {
             return;
         }
@@ -554,8 +564,8 @@
     @Override
     public void handleEvent(EventInfo event) {
         if (event.eventType == EventType.GO_TO) {
-            setMainPane(null, R.id.main_pane, event.viewType, event.startTime.toMillis(false),
-                    false, event);
+            setMainPane(
+                    null, R.id.main_pane, event.viewType, event.startTime.toMillis(false), false);
 
             if (!mIsMultipane) {
                 return;
@@ -575,8 +585,22 @@
             EventInfoFragment fragment = new EventInfoFragment(this,
                     event.id, event.startTime.toMillis(false), event.endTime.toMillis(false),
                     (int) event.extraLong);
+            if (event.startTime != null) {
+                Time time = new Time(mTimeZone);
+                time.set(mIntentEventStartMillis);
+                mController.sendEvent(this, EventType.GO_TO, event.startTime, event.startTime, -1,
+                        ViewType.DETAIL);
+            }
             fragment.setDialogParams(event.x, event.y);
-            fragment.show(getFragmentManager(), "EventInfoFragment");
+            FragmentManager fm = getFragmentManager();
+            FragmentTransaction ft = fm.beginTransaction();
+            // if we have an old popup close it
+            Fragment fOld = fm.findFragmentByTag(EVENT_INFO_FRAGMENT_TAG);
+            if (fOld != null) {
+                ft.remove(fOld);
+            }
+            ft.add(fragment, EVENT_INFO_FRAGMENT_TAG);
+            ft.commit();
         } else if (event.eventType == EventType.UPDATE_TITLE) {
             setTitleInActionBar(event);
         }