AllInOneActivity.java revision ab29d9ea9a4fe6b835c7f484a2273e92e8bc323d
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_day: 123 viewType = ViewType.DAY; 124 break; 125 case R.id.action_week: 126 viewType = ViewType.WEEK; 127 break; 128 case R.id.action_month: 129 viewType = ViewType.MONTH; 130 break; 131 case R.id.action_agenda: 132 viewType = ViewType.AGENDA; 133 break; 134 case R.id.action_today: 135 viewType = ViewType.CURRENT; 136 t = new Time(); 137 t.setToNow(); 138 break; 139 case R.id.action_create_event: 140 mController.sendEventRelatedEvent(this, EventType.CREATE_EVENT, -1, 0, 0, 0, 0); 141 return true; 142 case R.id.action_manage_calendars: 143 mController.sendEvent(this, EventType.LAUNCH_MANAGE_CALENDARS, null, null, 0, 0); 144 return true; 145 case R.id.action_settings: 146 mController.sendEvent(this, EventType.LAUNCH_SETTINGS, null, null, 0, 0); 147 return true; 148 default: 149 return false; 150 } 151 mController.sendEvent(this, EventType.GO_TO, t, null, -1, viewType); 152 return true; 153 } 154 155 @Override 156 public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { 157 if (key.equals(CalendarPreferenceActivity.KEY_WEEK_START_DAY)) { 158 initFragments(mController.getTime()); 159 } 160 } 161 162 private void setMainPane(FragmentTransaction ft, int viewId, int viewType, 163 long timeMillis, boolean force) { 164 if(!force && mController.getPreviousViewType() == viewType) { 165 return; 166 } 167 168 // Deregister old view 169 Fragment frag = findFragmentById(viewId); 170 if (frag != null) { 171 mController.deregisterEventHandler((EventHandler) frag); 172 } 173 174 // Create new one 175 switch (viewType) { 176 case ViewType.AGENDA: 177// FRAG_TODO Change this to agenda when we have AgendaFragment 178 frag = new MonthFragment(false, timeMillis); 179 break; 180 case ViewType.DAY: 181 case ViewType.WEEK: 182 frag = new DayFragment(timeMillis); 183 break; 184 case ViewType.MONTH: 185 frag = new MonthFragment(false, timeMillis); 186 break; 187 default: 188 throw new IllegalArgumentException("Must be Agenda, Day, Week, or Month ViewType"); 189 } 190 191 boolean doCommit = false; 192 if (ft == null) { 193 doCommit = true; 194 ft = openFragmentTransaction(); 195 } 196 197 ft.replace(viewId, frag); 198 mController.registerEventHandler((EventHandler) frag); 199 200 if (doCommit) { 201 ft.commit(); 202 } 203 } 204 205 private void setTitleInActionBar(EventInfo event) { 206 if (event.eventType != EventType.GO_TO) { 207 return; 208 } 209 210 long start = event.startTime.toMillis(false /* use isDst */); 211 long end = start; 212 213 if (event.endTime != null && !event.startTime.equals(event.endTime)) { 214 end = event.endTime.toMillis(false /* use isDst */); 215 } 216 String msg = DateUtils.formatDateRange(this, start, end, DateUtils.FORMAT_SHOW_DATE); 217 218 ActionBar ab = getActionBar(); 219 if (ab != null) { 220 ab.setTitle(msg); 221 } 222 } 223 224 // EventHandler Interface 225 public long getSupportedEventTypes() { 226 return EventType.GO_TO; 227 } 228 229 // EventHandler Interface 230 public void handleEvent(EventInfo event) { 231 if (event.eventType == EventType.GO_TO) { 232 // Set title bar 233 setTitleInActionBar(event); 234 235 setMainPane(null, R.id.main_pane, event.viewType, 236 event.startTime.toMillis(false), false); 237 238 // FRAG_TODO only for XL screen 239 if (event.viewType == ViewType.MONTH) { 240 // hide minimonth and calendar frag 241 // show agenda view 242 } else { 243 // show minimonth and calendar frag 244 } 245 } 246 } 247 248 // EventHandler Interface 249 public void eventsChanged() { 250 } 251 252 // EventHandler Interface 253 public boolean getAllDay() { 254 return false; 255 } 256 257 // EventHandler Interface 258 public long getSelectedTime() { 259 return 0; 260 } 261 262 // EventHandler Interface 263 public void goTo(Time time, boolean animate) { 264 } 265 266 // EventHandler Interface 267 public void goToToday() { 268 } 269} 270