AllInOneActivity.java revision ba1b94afd187279623a57417da1ef78efa1217e2
1/* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.calendar; 18 19import static android.provider.Calendar.EVENT_BEGIN_TIME; 20 21import com.android.calendar.CalendarController.EventHandler; 22import com.android.calendar.CalendarController.EventInfo; 23import com.android.calendar.CalendarController.EventType; 24import com.android.calendar.CalendarController.ViewType; 25import com.android.calendar.SelectCalendars.SelectCalendarsFragment; 26 27import android.app.ActionBar; 28import android.app.Activity; 29import android.app.Fragment; 30import android.app.FragmentTransaction; 31import android.content.SharedPreferences; 32import android.content.SharedPreferences.OnSharedPreferenceChangeListener; 33import android.content.res.Configuration; 34import android.os.Bundle; 35import android.text.format.DateUtils; 36import android.text.format.Time; 37import android.view.Menu; 38import android.view.MenuItem; 39import android.view.View; 40 41public class AllInOneActivity extends Activity implements EventHandler, 42 OnSharedPreferenceChangeListener { 43 private static String TAG = "AllInOneActivity"; 44 public static CalendarController mController; // FRAG_TODO make private 45 46 @Override 47 protected void onCreate(Bundle icicle) { 48 super.onCreate(icicle); 49 50 // This needs to be created before setContentView 51 mController = new CalendarController(this); 52 // Must be the first to register. Needed to remove other eventhandlers 53 mController.registerEventHandler(this); 54 55 setContentView(R.layout.all_in_one); 56 57 // Get time from intent or icicle 58 long timeMillis; 59 if (icicle != null) { 60 timeMillis = icicle.getLong(EVENT_BEGIN_TIME); 61 } else { 62 timeMillis = Utils.timeFromIntentInMillis(getIntent()); 63 } 64 65 initFragments(timeMillis); 66 67 // Listen for changes that would require this to be refreshed 68 SharedPreferences prefs = CalendarPreferenceActivity.getSharedPreferences(this); 69 prefs.registerOnSharedPreferenceChangeListener(this); 70 } 71 72 @Override 73 protected void onDestroy() { 74 super.onDestroy(); 75 76 SharedPreferences prefs = CalendarPreferenceActivity.getSharedPreferences(this); 77 prefs.unregisterOnSharedPreferenceChangeListener(this); 78 } 79 80 private void initFragments(long timeMillis) { 81 FragmentTransaction ft = openFragmentTransaction(); 82 83 boolean multipane = (getResources().getConfiguration().screenLayout & 84 Configuration.SCREENLAYOUT_SIZE_XLARGE) != 0; 85 86 if (multipane) { 87 Fragment miniMonthFrag = new MonthFragment(false, timeMillis); 88 ft.replace(R.id.mini_month, miniMonthFrag); 89 mController.registerEventHandler((EventHandler) miniMonthFrag); 90 91 Fragment selectCalendarsFrag = new SelectCalendarsFragment(); 92 ft.replace(R.id.calendar_list, selectCalendarsFrag); 93 } else { 94 findViewById(R.id.mini_month).setVisibility(View.GONE); 95 findViewById(R.id.calendar_list).setVisibility(View.GONE); 96 } 97 98 // FRAG_TODO restore event.viewType from icicle 99 setMainPane(ft, R.id.main_pane, ViewType.WEEK, timeMillis, true); 100 101 ft.commit(); // this needs to be after setMainPane() 102 103 // Set title 104 String msg = DateUtils.formatDateRange(this, timeMillis, timeMillis, 105 DateUtils.FORMAT_SHOW_DATE); 106 setTitle(msg); 107 } 108 109 @Override 110 public boolean onCreateOptionsMenu(Menu menu) { 111 super.onCreateOptionsMenu(menu); 112 113 getMenuInflater().inflate(R.menu.all_in_one_title_bar, menu); 114 return true; 115 } 116 117 @Override 118 public boolean onOptionsItemSelected(MenuItem item) { 119 Time t = null; 120 int viewType = ViewType.CURRENT; 121 switch (item.getItemId()) { 122 case R.id.action_refresh: 123 mController.refreshCalendars(); 124 return true; 125 case R.id.action_day: 126 viewType = ViewType.DAY; 127 break; 128 case R.id.action_week: 129 viewType = ViewType.WEEK; 130 break; 131 case R.id.action_month: 132 viewType = ViewType.MONTH; 133 break; 134 case R.id.action_agenda: 135 viewType = ViewType.AGENDA; 136 break; 137 case R.id.action_today: 138 viewType = ViewType.CURRENT; 139 t = new Time(); 140 t.setToNow(); 141 break; 142 case R.id.action_create_event: 143 mController.sendEventRelatedEvent(this, EventType.CREATE_EVENT, -1, 0, 0, 0, 0); 144 return true; 145 case R.id.action_manage_calendars: 146 mController.sendEvent(this, EventType.LAUNCH_MANAGE_CALENDARS, null, null, 0, 0); 147 return true; 148 case R.id.action_settings: 149 mController.sendEvent(this, EventType.LAUNCH_SETTINGS, null, null, 0, 0); 150 return true; 151 default: 152 return false; 153 } 154 mController.sendEvent(this, EventType.GO_TO, t, null, -1, viewType); 155 return true; 156 } 157 158 @Override 159 public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { 160 if (key.equals(CalendarPreferenceActivity.KEY_WEEK_START_DAY)) { 161 initFragments(mController.getTime()); 162 } 163 } 164 165 private void setMainPane(FragmentTransaction ft, int viewId, int viewType, 166 long timeMillis, boolean force) { 167 if(!force && mController.getPreviousViewType() == viewType) { 168 return; 169 } 170 171 // Deregister old view 172 Fragment frag = findFragmentById(viewId); 173 if (frag != null) { 174 mController.deregisterEventHandler((EventHandler) frag); 175 } 176 177 // Create new one 178 switch (viewType) { 179 case ViewType.AGENDA: 180 frag = new AgendaFragment(timeMillis); 181 break; 182 case ViewType.DAY: 183 case ViewType.WEEK: 184 frag = new DayFragment(timeMillis); 185 break; 186 case ViewType.MONTH: 187 frag = new MonthFragment(false, timeMillis); 188 break; 189 default: 190 throw new IllegalArgumentException("Must be Agenda, Day, Week, or Month ViewType"); 191 } 192 193 boolean doCommit = false; 194 if (ft == null) { 195 doCommit = true; 196 ft = openFragmentTransaction(); 197 } 198 199 ft.replace(viewId, frag); 200 mController.registerEventHandler((EventHandler) frag); 201 202 if (doCommit) { 203 ft.commit(); 204 } 205 } 206 207 private void setTitleInActionBar(EventInfo event) { 208 if (event.eventType != EventType.GO_TO) { 209 return; 210 } 211 212 long start = event.startTime.toMillis(false /* use isDst */); 213 long end = start; 214 215 if (event.endTime != null && !event.startTime.equals(event.endTime)) { 216 end = event.endTime.toMillis(false /* use isDst */); 217 } 218 String msg = DateUtils.formatDateRange(this, start, end, DateUtils.FORMAT_SHOW_DATE); 219 220 ActionBar ab = getActionBar(); 221 if (ab != null) { 222 ab.setTitle(msg); 223 } 224 } 225 226 // EventHandler Interface 227 public long getSupportedEventTypes() { 228 return EventType.GO_TO; 229 } 230 231 // EventHandler Interface 232 public void handleEvent(EventInfo event) { 233 if (event.eventType == EventType.GO_TO) { 234 // Set title bar 235 setTitleInActionBar(event); 236 237 setMainPane(null, R.id.main_pane, event.viewType, 238 event.startTime.toMillis(false), false); 239 240 // FRAG_TODO only for XL screen 241 if (event.viewType == ViewType.MONTH) { 242 // hide minimonth and calendar frag 243 // show agenda view 244 } else { 245 // show minimonth and calendar frag 246 } 247 } 248 } 249 250 // EventHandler Interface 251 public void eventsChanged() { 252 } 253 254 // EventHandler Interface 255 public boolean getAllDay() { 256 return false; 257 } 258 259 // EventHandler Interface 260 public long getSelectedTime() { 261 return 0; 262 } 263 264 // EventHandler Interface 265 public void goTo(Time time, boolean animate) { 266 } 267 268 // EventHandler Interface 269 public void goToToday() { 270 } 271} 272