- b/1412318 Edit Event Fit and finish - Added spinner prompts for Calendar, Repeats, Presence, and Privacy.
- Pick the email domain of the correct calendar and use it for email validation
diff --git a/res/layout/edit_event.xml b/res/layout/edit_event.xml
index 2dd4a4f..0a5d3aa 100644
--- a/res/layout/edit_event.xml
+++ b/res/layout/edit_event.xml
@@ -192,7 +192,8 @@
<Spinner android:id="@+id/calendars"
android:layout_width="fill_parent"
- android:layout_height="wrap_content" />
+ android:layout_height="wrap_content"
+ android:prompt="@string/edit_event_calendar_label"/>
</LinearLayout>
<!-- GUESTS/ATTENDEES -->
@@ -233,7 +234,8 @@
<Spinner android:id="@+id/repeats"
android:layout_width="fill_parent"
- android:layout_height="wrap_content"/>
+ android:layout_height="wrap_content"
+ android:prompt="@string/repeats_label"/>
</LinearLayout>
<!-- MORE OPTIONS -->
@@ -259,7 +261,8 @@
<Spinner android:id="@+id/availability"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
- android:entries="@array/availability" />
+ android:entries="@array/availability"
+ android:prompt="@string/presence_label"/>
</LinearLayout>
<!-- PRIVACY -->
@@ -278,7 +281,8 @@
<Spinner android:id="@+id/visibility"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
- android:entries="@array/visibility" />
+ android:entries="@array/visibility"
+ android:prompt="@string/privacy_label"/>
</LinearLayout>
</LinearLayout>
diff --git a/src/com/android/calendar/EditEvent.java b/src/com/android/calendar/EditEvent.java
index cb5a6f3..d235456 100644
--- a/src/com/android/calendar/EditEvent.java
+++ b/src/com/android/calendar/EditEvent.java
@@ -19,6 +19,10 @@
import static android.provider.Calendar.EVENT_BEGIN_TIME;
import static android.provider.Calendar.EVENT_END_TIME;
+import android.accounts.Account;
+import android.accounts.AccountManager;
+import android.accounts.AuthenticatorException;
+import android.accounts.OperationCanceledException;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
@@ -83,6 +87,9 @@
import android.widget.TimePicker;
import android.widget.Toast;
+import com.google.android.googlelogin.GoogleLoginServiceConstants;
+
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
@@ -244,6 +251,7 @@
private DeleteEventHelper mDeleteEventHelper;
private QueryHandler mQueryHandler;
+ private AccountManager mAccountManager;
/* This class is used to update the time buttons. */
private class TimeListener implements OnTimeSetListener {
@@ -497,27 +505,76 @@
return;
}
- // Find user domain and set it to the validator
- // TODO This won't work realiably if there are calendars in different domains
- cursor.moveToFirst();
- String ownEmail = cursor.getString(CALENDARS_INDEX_OWNER_ACCOUNT);
- if (ownEmail != null) {
- int separator = ownEmail.lastIndexOf('@');
- if (separator != -1 && ++separator < ownEmail.length()) {
- mAttendeesList.setValidator(new Rfc822Validator(ownEmail
- .substring(separator)));
- }
- }
+ int primaryCalendarPosition = findPrimaryCalendarPosition();
// populate the calendars spinner
CalendarsAdapter adapter = new CalendarsAdapter(EditEvent.this, mCalendarsCursor);
mCalendarsSpinner.setAdapter(adapter);
+ mCalendarsSpinner.setSelection(primaryCalendarPosition);
mCalendarsQueryComplete = true;
if (mSaveAfterQueryComplete) {
mLoadingCalendarsDialog.cancel();
save();
finish();
}
+
+ // Find user domain and set it to the validator
+ if(cursor.moveToPosition(primaryCalendarPosition)) {
+ String ownEmail = cursor.getString(CALENDARS_INDEX_OWNER_ACCOUNT);
+ if (ownEmail != null) {
+ int separator = ownEmail.lastIndexOf('@');
+ if (separator != -1 && ++separator < ownEmail.length()) {
+ mAttendeesList.setValidator(new Rfc822Validator(ownEmail
+ .substring(separator)));
+ }
+ }
+ }
+ }
+ }
+
+ // Find the calendar position in the cursor that matches the signed-in
+ // account
+ private int findPrimaryCalendarPosition() {
+ int primaryCalendarPosition = -1;
+ try {
+ Account[] accounts = mAccountManager.getAccountsByTypeAndFeatures(
+ GoogleLoginServiceConstants.ACCOUNT_TYPE, new String[] {
+ GoogleLoginServiceConstants.FEATURE_LEGACY_HOSTED_OR_GOOGLE
+ }, null, null).getResult();
+ if (accounts.length > 0) {
+ for (int i = 0; i < accounts.length && primaryCalendarPosition == -1; ++i) {
+ String name = accounts[i].name;
+ if (name == null) {
+ continue;
+ }
+
+ int position = 0;
+ mCalendarsCursor.moveToPosition(-1);
+ while (mCalendarsCursor.moveToNext()) {
+ if (name.equals(mCalendarsCursor
+ .getString(CALENDARS_INDEX_OWNER_ACCOUNT))) {
+ primaryCalendarPosition = position;
+ break;
+ }
+ position++;
+ }
+ }
+ }
+ } catch (OperationCanceledException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (AuthenticatorException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } finally {
+ if (primaryCalendarPosition != -1) {
+ return primaryCalendarPosition;
+ } else {
+ return 0;
+ }
}
}
}
@@ -527,6 +584,7 @@
super.onCreate(icicle);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.edit_event);
+ mAccountManager = AccountManager.get(this);
mFirstDayOfWeek = Calendar.getInstance().getFirstDayOfWeek();