blob: a864b532d3e52d79ecf606776293a66db862ecf7 [file] [log] [blame]
Daisuke Miyakawa4b441bd2010-09-16 14:55:36 -07001/*
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
Erik6b858fc2010-09-15 18:59:04 -070019import android.accounts.Account;
20import android.accounts.AccountManager;
Erike584a7d2011-01-11 11:12:18 -080021import android.app.ActionBar;
Erik6b858fc2010-09-15 18:59:04 -070022import android.content.ContentResolver;
Erike584a7d2011-01-11 11:12:18 -080023import android.content.Intent;
Erik6b858fc2010-09-15 18:59:04 -070024import android.os.Bundle;
Erik5e5c84a2011-01-21 15:21:34 -080025import android.os.Handler;
Daisuke Miyakawa4b441bd2010-09-16 14:55:36 -070026import android.preference.PreferenceActivity;
RoboErika7c03902011-06-14 11:06:44 -070027import android.provider.CalendarContract;
28import android.provider.CalendarContract.Calendars;
Erik34bb0022011-01-19 13:18:56 -080029import android.provider.Settings;
Erikca478672011-01-19 20:02:47 -080030import android.text.format.DateUtils;
Erik34bb0022011-01-19 13:18:56 -080031import android.view.Menu;
Erike584a7d2011-01-11 11:12:18 -080032import android.view.MenuItem;
Daisuke Miyakawa4b441bd2010-09-16 14:55:36 -070033
34import java.util.List;
35
36public class CalendarSettingsActivity extends PreferenceActivity {
Erik5e5c84a2011-01-21 15:21:34 -080037 private static final int CHECK_ACCOUNTS_DELAY = 3000;
38 private Account[] mAccounts;
39 private Handler mHandler = new Handler();
Michael Chane98dca72012-06-16 08:22:47 -070040 private boolean mHideMenuButtons = false;
Erik5e5c84a2011-01-21 15:21:34 -080041
Daisuke Miyakawa4b441bd2010-09-16 14:55:36 -070042 @Override
43 public void onBuildHeaders(List<Header> target) {
44 loadHeadersFromResource(R.xml.calendar_settings_headers, target);
Isaac Katzenelson5b2a9072011-04-08 15:23:57 -070045
Erik6b858fc2010-09-15 18:59:04 -070046 Account[] accounts = AccountManager.get(this).getAccounts();
47 if (accounts != null) {
48 int length = accounts.length;
49 for (int i = 0; i < length; i++) {
50 Account acct = accounts[i];
RoboErika7c03902011-06-14 11:06:44 -070051 if (ContentResolver.getIsSyncable(acct, CalendarContract.AUTHORITY) > 0) {
Erik6b858fc2010-09-15 18:59:04 -070052 Header accountHeader = new Header();
53 accountHeader.title = acct.name;
54 accountHeader.fragment =
55 "com.android.calendar.selectcalendars.SelectCalendarsSyncFragment";
56 Bundle args = new Bundle();
57 args.putString(Calendars.ACCOUNT_NAME, acct.name);
58 args.putString(Calendars.ACCOUNT_TYPE, acct.type);
59 accountHeader.fragmentArguments = args;
60 target.add(1, accountHeader);
61 }
62 }
63 }
Erik5e5c84a2011-01-21 15:21:34 -080064 mAccounts = accounts;
Erikca478672011-01-19 20:02:47 -080065 if (Utils.getTardis() + DateUtils.MINUTE_IN_MILLIS > System.currentTimeMillis()) {
66 Header tardisHeader = new Header();
Sam Blitzstein0dfbaae2013-02-14 14:41:56 -080067 tardisHeader.title = getString(R.string.preferences_experimental_category);
Erikca478672011-01-19 20:02:47 -080068 tardisHeader.fragment = "com.android.calendar.OtherPreferences";
69 target.add(tardisHeader);
70 }
Daisuke Miyakawa4b441bd2010-09-16 14:55:36 -070071 }
Erike584a7d2011-01-11 11:12:18 -080072
73 @Override
74 public boolean onOptionsItemSelected(MenuItem item) {
Michael Chanbb6d9272012-08-17 17:32:58 -070075 if (item.getItemId() == android.R.id.home) {
76 finish();
77 return true;
78 } else if (item.getItemId() == R.id.action_add_account) {
79 Intent nextIntent = new Intent(Settings.ACTION_ADD_ACCOUNT);
80 final String[] array = { "com.android.calendar" };
81 nextIntent.putExtra(Settings.EXTRA_AUTHORITIES, array);
82 nextIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
83 startActivity(nextIntent);
84 return true;
Erike584a7d2011-01-11 11:12:18 -080085 }
86 return super.onOptionsItemSelected(item);
87 }
Erik34bb0022011-01-19 13:18:56 -080088
89 @Override
90 public boolean onCreateOptionsMenu(Menu menu) {
Michael Chane98dca72012-06-16 08:22:47 -070091 if (!mHideMenuButtons) {
92 getMenuInflater().inflate(R.menu.settings_title_bar, menu);
93 }
RoboErikc5c3b1c2011-08-22 14:07:02 -070094 getActionBar()
95 .setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP, ActionBar.DISPLAY_HOME_AS_UP);
Erik34bb0022011-01-19 13:18:56 -080096 return true;
97 }
Erik5e5c84a2011-01-21 15:21:34 -080098
99 @Override
100 public void onResume() {
101 if (mHandler != null) {
102 mHandler.postDelayed(mCheckAccounts, CHECK_ACCOUNTS_DELAY);
103 }
104 super.onResume();
105 }
106
107 @Override
108 public void onPause() {
109 if (mHandler != null) {
110 mHandler.removeCallbacks(mCheckAccounts);
111 }
112 super.onPause();
113 }
114
Alon Albertffd61012013-09-06 10:29:56 -0700115 @Override
116 protected boolean isValidFragment(String fragmentName) {
117 // This activity is not exported so we can just approve everything
118 return true;
119 }
120
Erik5e5c84a2011-01-21 15:21:34 -0800121 Runnable mCheckAccounts = new Runnable() {
122 @Override
123 public void run() {
124 Account[] accounts = AccountManager.get(CalendarSettingsActivity.this).getAccounts();
125 if (accounts != null && !accounts.equals(mAccounts)) {
126 invalidateHeaders();
127 }
128 }
129 };
Michael Chane98dca72012-06-16 08:22:47 -0700130
131 public void hideMenuButtons() {
132 mHideMenuButtons = true;
133 }
Erik6b858fc2010-09-15 18:59:04 -0700134}