AllInOneActivity.java revision cb81189e4868769ea016253eca104e46df2f033a
14970159b2e6674fc5d61425aa0fcff8e5fc15bdbMichael Chan/* 24970159b2e6674fc5d61425aa0fcff8e5fc15bdbMichael Chan * Copyright (C) 2010 The Android Open Source Project 34970159b2e6674fc5d61425aa0fcff8e5fc15bdbMichael Chan * 44970159b2e6674fc5d61425aa0fcff8e5fc15bdbMichael Chan * Licensed under the Apache License, Version 2.0 (the "License"); 54970159b2e6674fc5d61425aa0fcff8e5fc15bdbMichael Chan * you may not use this file except in compliance with the License. 64970159b2e6674fc5d61425aa0fcff8e5fc15bdbMichael Chan * You may obtain a copy of the License at 74970159b2e6674fc5d61425aa0fcff8e5fc15bdbMichael Chan * 84970159b2e6674fc5d61425aa0fcff8e5fc15bdbMichael Chan * http://www.apache.org/licenses/LICENSE-2.0 94970159b2e6674fc5d61425aa0fcff8e5fc15bdbMichael Chan * 104970159b2e6674fc5d61425aa0fcff8e5fc15bdbMichael Chan * Unless required by applicable law or agreed to in writing, software 114970159b2e6674fc5d61425aa0fcff8e5fc15bdbMichael Chan * distributed under the License is distributed on an "AS IS" BASIS, 124970159b2e6674fc5d61425aa0fcff8e5fc15bdbMichael Chan * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134970159b2e6674fc5d61425aa0fcff8e5fc15bdbMichael Chan * See the License for the specific language governing permissions and 144970159b2e6674fc5d61425aa0fcff8e5fc15bdbMichael Chan * limitations under the License. 154970159b2e6674fc5d61425aa0fcff8e5fc15bdbMichael Chan */ 164970159b2e6674fc5d61425aa0fcff8e5fc15bdbMichael Chan 174970159b2e6674fc5d61425aa0fcff8e5fc15bdbMichael Chanpackage com.android.calendar; 184970159b2e6674fc5d61425aa0fcff8e5fc15bdbMichael Chan 19dd95df57c8c5a58a85c4c0effad5652dec14f621Erikimport static android.provider.Calendar.EVENT_BEGIN_TIME; 20dd95df57c8c5a58a85c4c0effad5652dec14f621Erikimport static android.provider.Calendar.EVENT_END_TIME; 21dd95df57c8c5a58a85c4c0effad5652dec14f621Erik 2283b0fe36b523192a504a1d2baf2f36676a80b9d5Michael Chanimport com.android.calendar.CalendarController.EventHandler; 23ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chanimport com.android.calendar.CalendarController.EventInfo; 2483b0fe36b523192a504a1d2baf2f36676a80b9d5Michael Chanimport com.android.calendar.CalendarController.EventType; 253458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chanimport com.android.calendar.CalendarController.ViewType; 2600b8c1a39d75c1b4626dc987bd1a51cfaf7c9be1Mason Tangimport com.android.calendar.agenda.AgendaFragment; 27dd95df57c8c5a58a85c4c0effad5652dec14f621Erikimport com.android.calendar.event.EditEventFragment; 289a3cb14e28536e4133dddbe952f47189fe344ec1Mason Tangimport com.android.calendar.selectcalendars.SelectCalendarsFragment; 2983b0fe36b523192a504a1d2baf2f36676a80b9d5Michael Chan 30ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chanimport android.app.ActionBar; 314970159b2e6674fc5d61425aa0fcff8e5fc15bdbMichael Chanimport android.app.Activity; 3283b0fe36b523192a504a1d2baf2f36676a80b9d5Michael Chanimport android.app.Fragment; 333458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chanimport android.app.FragmentTransaction; 34954c871f4753d3182314d7027c0dd17c236d9ca7Erikimport android.content.ContentResolver; 35dd95df57c8c5a58a85c4c0effad5652dec14f621Erikimport android.content.Intent; 368e3d430a020744faa21bf4ca24f1a99c36ec5c4fMason Tangimport android.content.SharedPreferences; 378e3d430a020744faa21bf4ca24f1a99c36ec5c4fMason Tangimport android.content.SharedPreferences.OnSharedPreferenceChangeListener; 38ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chanimport android.content.res.Configuration; 39954c871f4753d3182314d7027c0dd17c236d9ca7Erikimport android.database.ContentObserver; 40dd95df57c8c5a58a85c4c0effad5652dec14f621Erikimport android.net.Uri; 414970159b2e6674fc5d61425aa0fcff8e5fc15bdbMichael Chanimport android.os.Bundle; 42954c871f4753d3182314d7027c0dd17c236d9ca7Erikimport android.os.Handler; 43954c871f4753d3182314d7027c0dd17c236d9ca7Erikimport android.provider.Calendar; 443458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chanimport android.text.format.DateUtils; 4583b0fe36b523192a504a1d2baf2f36676a80b9d5Michael Chanimport android.text.format.Time; 46954c871f4753d3182314d7027c0dd17c236d9ca7Erikimport android.util.Log; 472051f1275ec5e5eeffe5bbf5773860b855316d95Erikimport android.view.Menu; 483458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chanimport android.view.MenuItem; 49ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chanimport android.view.View; 506d2e6f78726cc167e561148a3efb27aa15524b82Daisuke Miyakawaimport android.widget.SearchView; 514970159b2e6674fc5d61425aa0fcff8e5fc15bdbMichael Chan 52ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chanpublic class AllInOneActivity extends Activity implements EventHandler, 536d2e6f78726cc167e561148a3efb27aa15524b82Daisuke Miyakawa OnSharedPreferenceChangeListener, SearchView.OnQueryChangeListener { 54d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chan private static final String TAG = "AllInOneActivity"; 55954c871f4753d3182314d7027c0dd17c236d9ca7Erik private static final boolean DEBUG = false; 56d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chan private static final String BUNDLE_KEY_RESTORE_TIME = "key_restore_time"; 577b92da258a480284dcc15a518ea570072329a31dErik private static final String BUNDLE_KEY_RESTORE_EDIT = "key_restore_edit"; 587b92da258a480284dcc15a518ea570072329a31dErik private static final String BUNDLE_KEY_EVENT_ID = "key_event_id"; 593f348f3ea8a7927566a1283b6d6bb5e220662889Erik private static final int HANDLER_KEY = 0; 600558defd2215696cee0768ce2bf2cb4da56efc42Michael Chan private static CalendarController mController; 619fc409f5a5f22d3faa42a4f58ec204686f5fe4c9Erik private static boolean mIsMultipane; 62954c871f4753d3182314d7027c0dd17c236d9ca7Erik private ContentResolver mContentResolver; 63648c59cfdf0ceaa09c4ea0da3af1566cef703e7cErik private int mPreviousView; 64648c59cfdf0ceaa09c4ea0da3af1566cef703e7cErik private int mCurrentView; 65cb81189e4868769ea016253eca104e46df2f033aErik private boolean mPaused = true; 66cb81189e4868769ea016253eca104e46df2f033aErik private boolean mUpdateOnResume = false; 67954c871f4753d3182314d7027c0dd17c236d9ca7Erik 68954c871f4753d3182314d7027c0dd17c236d9ca7Erik // Create an observer so that we can update the views whenever a 69954c871f4753d3182314d7027c0dd17c236d9ca7Erik // Calendar event changes. 707b92da258a480284dcc15a518ea570072329a31dErik private ContentObserver mObserver = new ContentObserver(new Handler()) { 71954c871f4753d3182314d7027c0dd17c236d9ca7Erik @Override 72954c871f4753d3182314d7027c0dd17c236d9ca7Erik public boolean deliverSelfNotifications() { 73954c871f4753d3182314d7027c0dd17c236d9ca7Erik return true; 74954c871f4753d3182314d7027c0dd17c236d9ca7Erik } 75954c871f4753d3182314d7027c0dd17c236d9ca7Erik 76954c871f4753d3182314d7027c0dd17c236d9ca7Erik @Override 77954c871f4753d3182314d7027c0dd17c236d9ca7Erik public void onChange(boolean selfChange) { 78954c871f4753d3182314d7027c0dd17c236d9ca7Erik eventsChanged(); 79954c871f4753d3182314d7027c0dd17c236d9ca7Erik } 80954c871f4753d3182314d7027c0dd17c236d9ca7Erik }; 8183b0fe36b523192a504a1d2baf2f36676a80b9d5Michael Chan 824970159b2e6674fc5d61425aa0fcff8e5fc15bdbMichael Chan @Override 8383b0fe36b523192a504a1d2baf2f36676a80b9d5Michael Chan protected void onCreate(Bundle icicle) { 8483b0fe36b523192a504a1d2baf2f36676a80b9d5Michael Chan super.onCreate(icicle); 8583b0fe36b523192a504a1d2baf2f36676a80b9d5Michael Chan 8683b0fe36b523192a504a1d2baf2f36676a80b9d5Michael Chan // This needs to be created before setContentView 870558defd2215696cee0768ce2bf2cb4da56efc42Michael Chan mController = CalendarController.getInstance(this); 88954c871f4753d3182314d7027c0dd17c236d9ca7Erik // Get time from intent or icicle 89954c871f4753d3182314d7027c0dd17c236d9ca7Erik long timeMillis; 90954c871f4753d3182314d7027c0dd17c236d9ca7Erik if (icicle != null) { 91954c871f4753d3182314d7027c0dd17c236d9ca7Erik timeMillis = icicle.getLong(BUNDLE_KEY_RESTORE_TIME); 92954c871f4753d3182314d7027c0dd17c236d9ca7Erik } else { 93954c871f4753d3182314d7027c0dd17c236d9ca7Erik timeMillis = Utils.timeFromIntentInMillis(getIntent()); 94954c871f4753d3182314d7027c0dd17c236d9ca7Erik } 957b92da258a480284dcc15a518ea570072329a31dErik boolean restoreEdit = icicle != null ? icicle.getBoolean(BUNDLE_KEY_RESTORE_EDIT, false) 967b92da258a480284dcc15a518ea570072329a31dErik : false; 977b92da258a480284dcc15a518ea570072329a31dErik int viewType; 987b92da258a480284dcc15a518ea570072329a31dErik if (restoreEdit) { 997b92da258a480284dcc15a518ea570072329a31dErik viewType = ViewType.EDIT; 1007b92da258a480284dcc15a518ea570072329a31dErik } else { 1017b92da258a480284dcc15a518ea570072329a31dErik viewType = Utils.getViewTypeFromIntentAndSharedPref(this); 1027b92da258a480284dcc15a518ea570072329a31dErik } 103954c871f4753d3182314d7027c0dd17c236d9ca7Erik Time t = new Time(); 104954c871f4753d3182314d7027c0dd17c236d9ca7Erik t.set(timeMillis); 105954c871f4753d3182314d7027c0dd17c236d9ca7Erik 1067b92da258a480284dcc15a518ea570072329a31dErik if (icicle != null && getIntent() != null) { 1077b92da258a480284dcc15a518ea570072329a31dErik Log.d(TAG, "both, icicle:" + icicle.toString() + " intent:" + getIntent().toString()); 1087b92da258a480284dcc15a518ea570072329a31dErik } else { 1097b92da258a480284dcc15a518ea570072329a31dErik Log.d(TAG, "not both, icicle:" + icicle + " intent:" + getIntent()); 1107b92da258a480284dcc15a518ea570072329a31dErik } 1117b92da258a480284dcc15a518ea570072329a31dErik 1127b92da258a480284dcc15a518ea570072329a31dErik mIsMultipane = (getResources().getConfiguration().screenLayout 1137b92da258a480284dcc15a518ea570072329a31dErik & Configuration.SCREENLAYOUT_SIZE_XLARGE) != 0; 1149fc409f5a5f22d3faa42a4f58ec204686f5fe4c9Erik 1153f348f3ea8a7927566a1283b6d6bb5e220662889Erik // Must be the first to register because this activity can modify the 1163f348f3ea8a7927566a1283b6d6bb5e220662889Erik // list of event handlers in it's handle method. This affects who the 1173f348f3ea8a7927566a1283b6d6bb5e220662889Erik // rest of the handlers the controller dispatches to are. 1183f348f3ea8a7927566a1283b6d6bb5e220662889Erik mController.registerEventHandler(HANDLER_KEY, this); 11983b0fe36b523192a504a1d2baf2f36676a80b9d5Michael Chan 1204970159b2e6674fc5d61425aa0fcff8e5fc15bdbMichael Chan setContentView(R.layout.all_in_one); 12183b0fe36b523192a504a1d2baf2f36676a80b9d5Michael Chan 1227b92da258a480284dcc15a518ea570072329a31dErik initFragments(timeMillis, viewType, icicle); 1238e3d430a020744faa21bf4ca24f1a99c36ec5c4fMason Tang 1248e3d430a020744faa21bf4ca24f1a99c36ec5c4fMason Tang // Listen for changes that would require this to be refreshed 1254b441bd6544fe6d11be75f974a41afd8fa040a4fDaisuke Miyakawa SharedPreferences prefs = GeneralPreferences.getSharedPreferences(this); 1268e3d430a020744faa21bf4ca24f1a99c36ec5c4fMason Tang prefs.registerOnSharedPreferenceChangeListener(this); 127cb81189e4868769ea016253eca104e46df2f033aErik 128954c871f4753d3182314d7027c0dd17c236d9ca7Erik mContentResolver = getContentResolver(); 129954c871f4753d3182314d7027c0dd17c236d9ca7Erik } 130954c871f4753d3182314d7027c0dd17c236d9ca7Erik 131954c871f4753d3182314d7027c0dd17c236d9ca7Erik @Override 132954c871f4753d3182314d7027c0dd17c236d9ca7Erik protected void onResume() { 133954c871f4753d3182314d7027c0dd17c236d9ca7Erik super.onResume(); 134954c871f4753d3182314d7027c0dd17c236d9ca7Erik mContentResolver.registerContentObserver(Calendar.Events.CONTENT_URI, true, mObserver); 135cb81189e4868769ea016253eca104e46df2f033aErik if (mUpdateOnResume) { 136cb81189e4868769ea016253eca104e46df2f033aErik initFragments(mController.getTime(), mController.getViewType(), null); 137cb81189e4868769ea016253eca104e46df2f033aErik mUpdateOnResume = false; 138cb81189e4868769ea016253eca104e46df2f033aErik } 139cb81189e4868769ea016253eca104e46df2f033aErik mPaused = false; 1408e3d430a020744faa21bf4ca24f1a99c36ec5c4fMason Tang } 1418e3d430a020744faa21bf4ca24f1a99c36ec5c4fMason Tang 1428e3d430a020744faa21bf4ca24f1a99c36ec5c4fMason Tang @Override 143d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chan protected void onPause() { 144d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chan super.onPause(); 145cb81189e4868769ea016253eca104e46df2f033aErik mPaused = true; 146954c871f4753d3182314d7027c0dd17c236d9ca7Erik mContentResolver.unregisterContentObserver(mObserver); 147cb81189e4868769ea016253eca104e46df2f033aErik if (isFinishing()) { 148cb81189e4868769ea016253eca104e46df2f033aErik // Stop listening for changes that would require this to be refreshed 149cb81189e4868769ea016253eca104e46df2f033aErik SharedPreferences prefs = GeneralPreferences.getSharedPreferences(this); 150cb81189e4868769ea016253eca104e46df2f033aErik prefs.unregisterOnSharedPreferenceChangeListener(this); 151cb81189e4868769ea016253eca104e46df2f033aErik } 1527b92da258a480284dcc15a518ea570072329a31dErik // FRAG_TODO save highlighted days of the week; 153dd95df57c8c5a58a85c4c0effad5652dec14f621Erik if (mController.getViewType() != ViewType.EDIT) { 154dd95df57c8c5a58a85c4c0effad5652dec14f621Erik Utils.setDefaultView(this, mController.getViewType()); 155dd95df57c8c5a58a85c4c0effad5652dec14f621Erik } 156d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chan } 157d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chan 158d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chan @Override 1597b92da258a480284dcc15a518ea570072329a31dErik protected void onUserLeaveHint() { 1607b92da258a480284dcc15a518ea570072329a31dErik mController.sendEvent(this, EventType.USER_HOME, null, null, -1, ViewType.CURRENT); 1617b92da258a480284dcc15a518ea570072329a31dErik super.onUserLeaveHint(); 1627b92da258a480284dcc15a518ea570072329a31dErik } 1637b92da258a480284dcc15a518ea570072329a31dErik 1647b92da258a480284dcc15a518ea570072329a31dErik @Override 165d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chan public void onSaveInstanceState(Bundle outState) { 166d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chan super.onSaveInstanceState(outState); 167d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chan 168d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chan outState.putLong(BUNDLE_KEY_RESTORE_TIME, mController.getTime()); 1697b92da258a480284dcc15a518ea570072329a31dErik if (mCurrentView == ViewType.EDIT) { 1707b92da258a480284dcc15a518ea570072329a31dErik outState.putBoolean(BUNDLE_KEY_RESTORE_EDIT, true); 1717b92da258a480284dcc15a518ea570072329a31dErik outState.putLong(BUNDLE_KEY_EVENT_ID, mController.getEventId()); 1727b92da258a480284dcc15a518ea570072329a31dErik } 173d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chan } 174d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chan 175d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chan @Override 1768e3d430a020744faa21bf4ca24f1a99c36ec5c4fMason Tang protected void onDestroy() { 1778e3d430a020744faa21bf4ca24f1a99c36ec5c4fMason Tang super.onDestroy(); 1788e3d430a020744faa21bf4ca24f1a99c36ec5c4fMason Tang 1794b441bd6544fe6d11be75f974a41afd8fa040a4fDaisuke Miyakawa SharedPreferences prefs = GeneralPreferences.getSharedPreferences(this); 1808e3d430a020744faa21bf4ca24f1a99c36ec5c4fMason Tang prefs.unregisterOnSharedPreferenceChangeListener(this); 181ed61b48c048c5e8f6646f528561988fd25fe7416Erik CalendarController.removeInstance(this); 1828e3d430a020744faa21bf4ca24f1a99c36ec5c4fMason Tang } 1838e3d430a020744faa21bf4ca24f1a99c36ec5c4fMason Tang 1847b92da258a480284dcc15a518ea570072329a31dErik private void initFragments(long timeMillis, int viewType, Bundle icicle) { 1851d564f63f731565219aaca9e1b7e5f466b143c71Mason Tang FragmentTransaction ft = getFragmentManager().openTransaction(); 1863458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan 1879fc409f5a5f22d3faa42a4f58ec204686f5fe4c9Erik if (mIsMultipane) { 188c7003b457950130d31c1a4f30370edb782d3666aErik Fragment miniMonthFrag = new MonthFragment(false, timeMillis, true); 189ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan ft.replace(R.id.mini_month, miniMonthFrag); 1903f348f3ea8a7927566a1283b6d6bb5e220662889Erik mController.registerEventHandler(R.id.mini_month, (EventHandler) miniMonthFrag); 191ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan 192ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan Fragment selectCalendarsFrag = new SelectCalendarsFragment(); 193ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan ft.replace(R.id.calendar_list, selectCalendarsFrag); 194dd95df57c8c5a58a85c4c0effad5652dec14f621Erik } 1957b92da258a480284dcc15a518ea570072329a31dErik if (!mIsMultipane || viewType == ViewType.EDIT) { 196ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan findViewById(R.id.mini_month).setVisibility(View.GONE); 197ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan findViewById(R.id.calendar_list).setVisibility(View.GONE); 198ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan } 1993458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan 200dd95df57c8c5a58a85c4c0effad5652dec14f621Erik EventInfo info = null; 201dd95df57c8c5a58a85c4c0effad5652dec14f621Erik if (viewType == ViewType.EDIT) { 2024b441bd6544fe6d11be75f974a41afd8fa040a4fDaisuke Miyakawa mPreviousView = GeneralPreferences.getSharedPreferences(this).getInt( 2037b92da258a480284dcc15a518ea570072329a31dErik GeneralPreferences.KEY_START_VIEW, GeneralPreferences.DEFAULT_START_VIEW); 204dd95df57c8c5a58a85c4c0effad5652dec14f621Erik 2054143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa long eventId = -1; 206dd95df57c8c5a58a85c4c0effad5652dec14f621Erik Intent intent = getIntent(); 207dd95df57c8c5a58a85c4c0effad5652dec14f621Erik Uri data = intent.getData(); 208dd95df57c8c5a58a85c4c0effad5652dec14f621Erik if (data != null) { 209dd95df57c8c5a58a85c4c0effad5652dec14f621Erik try { 2104143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa eventId = Long.parseLong(data.getLastPathSegment()); 211dd95df57c8c5a58a85c4c0effad5652dec14f621Erik } catch (NumberFormatException e) { 212dd95df57c8c5a58a85c4c0effad5652dec14f621Erik if (DEBUG) { 213dd95df57c8c5a58a85c4c0effad5652dec14f621Erik Log.d(TAG, "Create new event"); 214dd95df57c8c5a58a85c4c0effad5652dec14f621Erik } 215dd95df57c8c5a58a85c4c0effad5652dec14f621Erik } 2167b92da258a480284dcc15a518ea570072329a31dErik } else if (icicle != null && icicle.containsKey(BUNDLE_KEY_EVENT_ID)) { 2177b92da258a480284dcc15a518ea570072329a31dErik eventId = icicle.getLong(BUNDLE_KEY_EVENT_ID); 218dd95df57c8c5a58a85c4c0effad5652dec14f621Erik } 2194143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa 220dd95df57c8c5a58a85c4c0effad5652dec14f621Erik long begin = intent.getLongExtra(EVENT_BEGIN_TIME, -1); 221dd95df57c8c5a58a85c4c0effad5652dec14f621Erik long end = intent.getLongExtra(EVENT_END_TIME, -1); 222dd95df57c8c5a58a85c4c0effad5652dec14f621Erik info = new EventInfo(); 223dd95df57c8c5a58a85c4c0effad5652dec14f621Erik if (end != -1) { 224dd95df57c8c5a58a85c4c0effad5652dec14f621Erik info.endTime = new Time(); 225dd95df57c8c5a58a85c4c0effad5652dec14f621Erik info.endTime.set(end); 226dd95df57c8c5a58a85c4c0effad5652dec14f621Erik } 227dd95df57c8c5a58a85c4c0effad5652dec14f621Erik if (begin != -1) { 228dd95df57c8c5a58a85c4c0effad5652dec14f621Erik info.startTime = new Time(); 229dd95df57c8c5a58a85c4c0effad5652dec14f621Erik info.startTime.set(begin); 230dd95df57c8c5a58a85c4c0effad5652dec14f621Erik } 231dd95df57c8c5a58a85c4c0effad5652dec14f621Erik info.id = eventId; 232dd95df57c8c5a58a85c4c0effad5652dec14f621Erik // We set the viewtype so if the user presses back when they are 233dd95df57c8c5a58a85c4c0effad5652dec14f621Erik // done editing the controller knows we were in the Edit Event 2347b92da258a480284dcc15a518ea570072329a31dErik // screen. Likewise for eventId 235dd95df57c8c5a58a85c4c0effad5652dec14f621Erik mController.setViewType(viewType); 2367b92da258a480284dcc15a518ea570072329a31dErik mController.setEventId(eventId); 237dd95df57c8c5a58a85c4c0effad5652dec14f621Erik } else { 238dd95df57c8c5a58a85c4c0effad5652dec14f621Erik mPreviousView = viewType; 239dd95df57c8c5a58a85c4c0effad5652dec14f621Erik } 240dd95df57c8c5a58a85c4c0effad5652dec14f621Erik setMainPane(ft, R.id.main_pane, viewType, timeMillis, true, info); 2413458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan 2423458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan ft.commit(); // this needs to be after setMainPane() 2433458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan 244d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chan Time t = new Time(); 245d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chan t.set(timeMillis); 246dd95df57c8c5a58a85c4c0effad5652dec14f621Erik if (viewType != ViewType.EDIT) { 247dd95df57c8c5a58a85c4c0effad5652dec14f621Erik mController.sendEvent(this, EventType.GO_TO, t, null, -1, viewType); 248dd95df57c8c5a58a85c4c0effad5652dec14f621Erik } 2494970159b2e6674fc5d61425aa0fcff8e5fc15bdbMichael Chan } 2502051f1275ec5e5eeffe5bbf5773860b855316d95Erik 2512051f1275ec5e5eeffe5bbf5773860b855316d95Erik @Override 252648c59cfdf0ceaa09c4ea0da3af1566cef703e7cErik public void onBackPressed() { 253648c59cfdf0ceaa09c4ea0da3af1566cef703e7cErik if (mPreviousView == mCurrentView) { 254648c59cfdf0ceaa09c4ea0da3af1566cef703e7cErik super.onBackPressed(); 255648c59cfdf0ceaa09c4ea0da3af1566cef703e7cErik } else { 256dd95df57c8c5a58a85c4c0effad5652dec14f621Erik mController.sendEvent(this, EventType.GO_TO, null, null, -1, mPreviousView); 257648c59cfdf0ceaa09c4ea0da3af1566cef703e7cErik } 258648c59cfdf0ceaa09c4ea0da3af1566cef703e7cErik } 259648c59cfdf0ceaa09c4ea0da3af1566cef703e7cErik 260648c59cfdf0ceaa09c4ea0da3af1566cef703e7cErik @Override 2612051f1275ec5e5eeffe5bbf5773860b855316d95Erik public boolean onCreateOptionsMenu(Menu menu) { 2622051f1275ec5e5eeffe5bbf5773860b855316d95Erik super.onCreateOptionsMenu(menu); 2632051f1275ec5e5eeffe5bbf5773860b855316d95Erik 2642051f1275ec5e5eeffe5bbf5773860b855316d95Erik getMenuInflater().inflate(R.menu.all_in_one_title_bar, menu); 2656d2e6f78726cc167e561148a3efb27aa15524b82Daisuke Miyakawa 2666d2e6f78726cc167e561148a3efb27aa15524b82Daisuke Miyakawa SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); 2676d2e6f78726cc167e561148a3efb27aa15524b82Daisuke Miyakawa searchView.setIconifiedByDefault(true); 2686d2e6f78726cc167e561148a3efb27aa15524b82Daisuke Miyakawa searchView.setOnQueryChangeListener(this); 2696d2e6f78726cc167e561148a3efb27aa15524b82Daisuke Miyakawa 2702051f1275ec5e5eeffe5bbf5773860b855316d95Erik return true; 2712051f1275ec5e5eeffe5bbf5773860b855316d95Erik } 2723458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan 2733458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan @Override 2743458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan public boolean onOptionsItemSelected(MenuItem item) { 2753458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan Time t = null; 2763458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan int viewType = ViewType.CURRENT; 2773458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan switch (item.getItemId()) { 278ba1b94afd187279623a57417da1ef78efa1217e2Erik case R.id.action_refresh: 279ba1b94afd187279623a57417da1ef78efa1217e2Erik mController.refreshCalendars(); 280ba1b94afd187279623a57417da1ef78efa1217e2Erik return true; 2813458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan case R.id.action_day: 2823458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan viewType = ViewType.DAY; 2833458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan break; 2843458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan case R.id.action_week: 2853458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan viewType = ViewType.WEEK; 2863458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan break; 2873458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan case R.id.action_month: 2883458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan viewType = ViewType.MONTH; 2893458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan break; 2903458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan case R.id.action_today: 2913458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan viewType = ViewType.CURRENT; 2923458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan t = new Time(); 2933458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan t.setToNow(); 2943458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan break; 2953458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan case R.id.action_create_event: 2963458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan mController.sendEventRelatedEvent(this, EventType.CREATE_EVENT, -1, 0, 0, 0, 0); 2973458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan return true; 298ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan case R.id.action_settings: 299ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan mController.sendEvent(this, EventType.LAUNCH_SETTINGS, null, null, 0, 0); 300ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan return true; 3013458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan default: 3023458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan return false; 3033458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan } 304ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan mController.sendEvent(this, EventType.GO_TO, t, null, -1, viewType); 3053458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan return true; 3063458a1775920dda53099b7f1913cd4ec4c8b4095Michael Chan } 3078e3d430a020744faa21bf4ca24f1a99c36ec5c4fMason Tang 3088e3d430a020744faa21bf4ca24f1a99c36ec5c4fMason Tang @Override 3098e3d430a020744faa21bf4ca24f1a99c36ec5c4fMason Tang public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { 3104b441bd6544fe6d11be75f974a41afd8fa040a4fDaisuke Miyakawa if (key.equals(GeneralPreferences.KEY_WEEK_START_DAY)) { 311cb81189e4868769ea016253eca104e46df2f033aErik if (mPaused) { 312cb81189e4868769ea016253eca104e46df2f033aErik mUpdateOnResume = true; 313cb81189e4868769ea016253eca104e46df2f033aErik } else { 314cb81189e4868769ea016253eca104e46df2f033aErik initFragments(mController.getTime(), mController.getViewType(), null); 315cb81189e4868769ea016253eca104e46df2f033aErik } 3168e3d430a020744faa21bf4ca24f1a99c36ec5c4fMason Tang } 3178e3d430a020744faa21bf4ca24f1a99c36ec5c4fMason Tang } 318ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan 3197b92da258a480284dcc15a518ea570072329a31dErik private void setMainPane(FragmentTransaction ft, int viewId, int viewType, long timeMillis, 3207b92da258a480284dcc15a518ea570072329a31dErik boolean force, EventInfo e) { 3217b92da258a480284dcc15a518ea570072329a31dErik if (!force && mCurrentView == viewType) { 322ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan return; 323ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan } 324ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan 325648c59cfdf0ceaa09c4ea0da3af1566cef703e7cErik if (viewType != mCurrentView) { 326648c59cfdf0ceaa09c4ea0da3af1566cef703e7cErik // The rules for this previous view are different than the 327648c59cfdf0ceaa09c4ea0da3af1566cef703e7cErik // controller's and are used for intercepting the back button. 328dd95df57c8c5a58a85c4c0effad5652dec14f621Erik if (mCurrentView != ViewType.EDIT && mCurrentView > 0) { 329dd95df57c8c5a58a85c4c0effad5652dec14f621Erik mPreviousView = mCurrentView; 330dd95df57c8c5a58a85c4c0effad5652dec14f621Erik } 331648c59cfdf0ceaa09c4ea0da3af1566cef703e7cErik mCurrentView = viewType; 332648c59cfdf0ceaa09c4ea0da3af1566cef703e7cErik } 3333f348f3ea8a7927566a1283b6d6bb5e220662889Erik // Create new fragment 3343f348f3ea8a7927566a1283b6d6bb5e220662889Erik Fragment frag; 335ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan switch (viewType) { 336ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan case ViewType.AGENDA: 33731df4265e34c36df56e8b49de5cd0b24c02701e6Mason Tang frag = new AgendaFragment(timeMillis); 338ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan break; 339ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan case ViewType.DAY: 34075d9b567e1fd3b9c6945cd0afe28781f5a19c6c8Michael Chan frag = new DayFragment(timeMillis, 1); 34175d9b567e1fd3b9c6945cd0afe28781f5a19c6c8Michael Chan break; 342ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan case ViewType.WEEK: 34375d9b567e1fd3b9c6945cd0afe28781f5a19c6c8Michael Chan frag = new DayFragment(timeMillis, 7); 344ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan break; 345ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan case ViewType.MONTH: 346c7003b457950130d31c1a4f30370edb782d3666aErik frag = new MonthFragment(false, timeMillis, false); 347ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan break; 348dd95df57c8c5a58a85c4c0effad5652dec14f621Erik case ViewType.EDIT: 349dd95df57c8c5a58a85c4c0effad5652dec14f621Erik frag = new EditEventFragment(e, mPreviousView); 350dd95df57c8c5a58a85c4c0effad5652dec14f621Erik break; 351ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan default: 352d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chan throw new IllegalArgumentException( 353d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chan "Must be Agenda, Day, Week, or Month ViewType, not " + viewType); 354ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan } 355ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan 356ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan boolean doCommit = false; 357ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan if (ft == null) { 358ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan doCommit = true; 3591d564f63f731565219aaca9e1b7e5f466b143c71Mason Tang ft = getFragmentManager().openTransaction(); 360ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan } 361ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan 362ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan ft.replace(viewId, frag); 363954c871f4753d3182314d7027c0dd17c236d9ca7Erik if (DEBUG) { 364954c871f4753d3182314d7027c0dd17c236d9ca7Erik Log.d(TAG, "Adding handler with viewId " + viewId + " and type " + viewType); 365954c871f4753d3182314d7027c0dd17c236d9ca7Erik } 3663f348f3ea8a7927566a1283b6d6bb5e220662889Erik // If the key is already registered this will replace it 3673f348f3ea8a7927566a1283b6d6bb5e220662889Erik mController.registerEventHandler(viewId, (EventHandler) frag); 368ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan 369ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan if (doCommit) { 370ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan ft.commit(); 371ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan } 372ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan } 373ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan 374ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan private void setTitleInActionBar(EventInfo event) { 375ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan if (event.eventType != EventType.GO_TO) { 376ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan return; 377ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan } 378ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan 379ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan long start = event.startTime.toMillis(false /* use isDst */); 380ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan long end = start; 381ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan 382d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chan if (event.endTime != null) { 383ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan end = event.endTime.toMillis(false /* use isDst */); 384ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan } 385ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan String msg = DateUtils.formatDateRange(this, start, end, DateUtils.FORMAT_SHOW_DATE); 386ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan 387ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan ActionBar ab = getActionBar(); 388ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan if (ab != null) { 389ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan ab.setTitle(msg); 390ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan } 391ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan } 392ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan 3933f348f3ea8a7927566a1283b6d6bb5e220662889Erik @Override 394ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan public long getSupportedEventTypes() { 3957b92da258a480284dcc15a518ea570072329a31dErik return EventType.GO_TO | EventType.VIEW_EVENT | EventType.EDIT_EVENT 3967b92da258a480284dcc15a518ea570072329a31dErik | EventType.CREATE_EVENT; 397ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan } 398ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan 3993f348f3ea8a7927566a1283b6d6bb5e220662889Erik @Override 400ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan public void handleEvent(EventInfo event) { 401ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan if (event.eventType == EventType.GO_TO) { 4027b92da258a480284dcc15a518ea570072329a31dErik if (mCurrentView == ViewType.EDIT) { 4037b92da258a480284dcc15a518ea570072329a31dErik // If we are leaving the edit view ping it so it has a chance to 4047b92da258a480284dcc15a518ea570072329a31dErik // save if it needs to 4057b92da258a480284dcc15a518ea570072329a31dErik EventHandler editHandler = (EventHandler) getFragmentManager().findFragmentById( 4067b92da258a480284dcc15a518ea570072329a31dErik R.id.main_pane); 4077b92da258a480284dcc15a518ea570072329a31dErik editHandler.handleEvent(event); 4087b92da258a480284dcc15a518ea570072329a31dErik } 409ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan // Set title bar 410ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan setTitleInActionBar(event); 411ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan 4127b92da258a480284dcc15a518ea570072329a31dErik setMainPane(null, R.id.main_pane, event.viewType, event.startTime.toMillis(false), 4137b92da258a480284dcc15a518ea570072329a31dErik false, event); 414ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan 4159fc409f5a5f22d3faa42a4f58ec204686f5fe4c9Erik if (!mIsMultipane) { 4169fc409f5a5f22d3faa42a4f58ec204686f5fe4c9Erik return; 4179fc409f5a5f22d3faa42a4f58ec204686f5fe4c9Erik } 418ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan if (event.viewType == ViewType.MONTH) { 419ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan // hide minimonth and calendar frag 4209fc409f5a5f22d3faa42a4f58ec204686f5fe4c9Erik findViewById(R.id.mini_month).setVisibility(View.GONE); 4219fc409f5a5f22d3faa42a4f58ec204686f5fe4c9Erik findViewById(R.id.calendar_list).setVisibility(View.GONE); 422ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan } else { 423ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan // show minimonth and calendar frag 4249fc409f5a5f22d3faa42a4f58ec204686f5fe4c9Erik findViewById(R.id.mini_month).setVisibility(View.VISIBLE); 4259fc409f5a5f22d3faa42a4f58ec204686f5fe4c9Erik findViewById(R.id.calendar_list).setVisibility(View.VISIBLE); 426ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan } 42771d08836af4cf5fc45d340b1883044a9f8290232Michael Chan } else if (event.eventType == EventType.VIEW_EVENT) { 4287b92da258a480284dcc15a518ea570072329a31dErik EventInfoFragment fragment = new EventInfoFragment( 4297b92da258a480284dcc15a518ea570072329a31dErik event.id, event.startTime.toMillis(false), event.endTime.toMillis(false)); 43071d08836af4cf5fc45d340b1883044a9f8290232Michael Chan fragment.setDialogParams(event.x, event.y); 43171d08836af4cf5fc45d340b1883044a9f8290232Michael Chan fragment.show(getFragmentManager(), "EventInfoFragment"); 4327b92da258a480284dcc15a518ea570072329a31dErik } else if (event.eventType == EventType.EDIT_EVENT 4337b92da258a480284dcc15a518ea570072329a31dErik || event.eventType == EventType.CREATE_EVENT) { 434dd95df57c8c5a58a85c4c0effad5652dec14f621Erik setMainPane(null, R.id.main_pane, ViewType.EDIT, -1, true, event); 435dd95df57c8c5a58a85c4c0effad5652dec14f621Erik // hide minimonth and calendar frag 436dd95df57c8c5a58a85c4c0effad5652dec14f621Erik findViewById(R.id.mini_month).setVisibility(View.GONE); 437dd95df57c8c5a58a85c4c0effad5652dec14f621Erik findViewById(R.id.calendar_list).setVisibility(View.GONE); 438ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan } 439ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan } 440ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan 4413f348f3ea8a7927566a1283b6d6bb5e220662889Erik @Override 442ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan public void eventsChanged() { 443954c871f4753d3182314d7027c0dd17c236d9ca7Erik mController.sendEvent(this, EventType.EVENTS_CHANGED, null, null, -1, ViewType.CURRENT); 444ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan } 445ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan 4463f348f3ea8a7927566a1283b6d6bb5e220662889Erik @Override 447ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan public boolean getAllDay() { 448ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan return false; 449ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan } 450ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan 4513f348f3ea8a7927566a1283b6d6bb5e220662889Erik @Override 452ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan public long getSelectedTime() { 453ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan return 0; 454ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan } 455ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan 4563f348f3ea8a7927566a1283b6d6bb5e220662889Erik @Override 457ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan public void goTo(Time time, boolean animate) { 458ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan } 459ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan 4603f348f3ea8a7927566a1283b6d6bb5e220662889Erik @Override 461ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan public void goToToday() { 462ab29d9ea9a4fe6b835c7f484a2273e92e8bc323dMichael Chan } 4636d2e6f78726cc167e561148a3efb27aa15524b82Daisuke Miyakawa 4646d2e6f78726cc167e561148a3efb27aa15524b82Daisuke Miyakawa @Override 4656d2e6f78726cc167e561148a3efb27aa15524b82Daisuke Miyakawa public boolean onQueryTextChanged(String newText) { 4666d2e6f78726cc167e561148a3efb27aa15524b82Daisuke Miyakawa return false; 4676d2e6f78726cc167e561148a3efb27aa15524b82Daisuke Miyakawa } 4686d2e6f78726cc167e561148a3efb27aa15524b82Daisuke Miyakawa 4696d2e6f78726cc167e561148a3efb27aa15524b82Daisuke Miyakawa @Override 4706d2e6f78726cc167e561148a3efb27aa15524b82Daisuke Miyakawa public boolean onSubmitQuery(String query) { 4717b92da258a480284dcc15a518ea570072329a31dErik mController.sendEvent(this, EventType.SEARCH, null, null, -1, ViewType.CURRENT, query, 4727b92da258a480284dcc15a518ea570072329a31dErik getComponentName()); 4736d2e6f78726cc167e561148a3efb27aa15524b82Daisuke Miyakawa return false; 4746d2e6f78726cc167e561148a3efb27aa15524b82Daisuke Miyakawa } 4754970159b2e6674fc5d61425aa0fcff8e5fc15bdbMichael Chan} 476