package com.todoroo.astrid.gcal; import java.util.ArrayList; import java.util.HashMap; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.TextView; import com.timsu.astrid.R; import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.astrid.actfm.sync.ActFmPreferenceService; import com.todoroo.astrid.activity.EditPreferences; import com.todoroo.astrid.activity.TaskListActivity; import com.todoroo.astrid.dao.TagMetadataDao; import com.todoroo.astrid.dao.UserDao; import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.User; import com.todoroo.astrid.service.TagDataService; import com.todoroo.astrid.service.ThemeService; public class CalendarAlarmListCreator extends Activity { public static final String TOKEN_LIST_NAME = "listName"; //$NON-NLS-1$ @Autowired private UserDao userDao; @Autowired private TagDataService tagDataService; @Autowired private ActFmPreferenceService actFmPreferenceService; @Autowired private TagMetadataDao tagMetadataDao; private ArrayList<String> names; private ArrayList<String> emails; private HashMap<String, User> emailsToUsers; private String tagName; private TextView inviteAll; private TextView moreOptions; private TextView ignoreButton; private View dismissButton; private View ignoreSettingsButton; private final OnClickListener dismissListener = new OnClickListener() { @Override public void onClick(View v) { TagData tagData = new TagData(); tagData.setValue(TagData.NAME, tagName); tagDataService.save(tagData); dismissWithAnimation(); } }; private void dismissWithAnimation() { finish(); AndroidUtilities.callOverridePendingTransition(CalendarAlarmListCreator.this, 0, android.R.anim.fade_out); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); DependencyInjectionService.getInstance().inject(this); setContentView(R.layout.calendar_alarm_list_creator); Intent intent = getIntent(); tagName = intent.getStringExtra(TOKEN_LIST_NAME); inviteAll = (TextView) findViewById(R.id.invite_all); moreOptions = (TextView) findViewById(R.id.list_settings); ignoreButton = (TextView) findViewById(R.id.ignore); dismissButton = findViewById(R.id.dismiss); ignoreSettingsButton = findViewById(R.id.ignore_settings); emails = intent.getStringArrayListExtra(CalendarReminderActivity.TOKEN_EMAILS); names = intent.getStringArrayListExtra(CalendarReminderActivity.TOKEN_NAMES); initializeUserMap(); setupUi(); addListeners(); } private void initializeUserMap() { emailsToUsers = new HashMap<String, User>(); TodorooCursor<User> users = userDao.query(Query.select(User.PROPERTIES).where(User.EMAIL.in(emails.toArray(new String[emails.size()])))); try { for (users.moveToFirst(); !users.isAfterLast(); users.moveToNext()) { User u = new User(users); emailsToUsers.put(u.getValue(User.EMAIL), u); } } finally { users.close(); } } private void setupUi() { TextView dialogView = (TextView) findViewById(R.id.reminder_message); StringBuilder builder = new StringBuilder(getString(R.string.CRA_created_list_dialog, tagName)); String attendeesString = buildAttendeesString(); int color = ThemeService.getThemeColor(); String title; if (!TextUtils.isEmpty(attendeesString)) { builder.append(" ") //$NON-NLS-1$ .append(attendeesString) .append(" ") //$NON-NLS-1$ .append(getString(R.string.CRA_invitation_prompt)); inviteAll.setBackgroundColor(getResources().getColor(color)); title = getString(R.string.CRA_share_list_title); } else { title = getString(R.string.CRA_list_created_title); moreOptions.setBackgroundColor(getResources().getColor(color)); inviteAll.setVisibility(View.GONE); ignoreButton.setVisibility(View.GONE); ignoreSettingsButton.setVisibility(View.GONE); } ((TextView) findViewById(R.id.reminder_title)) .setText(title); dialogView.setText(builder.toString()); } private void addListeners() { ignoreButton.setOnClickListener(dismissListener); dismissButton.setOnClickListener(dismissListener); ignoreSettingsButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent editPreferences = new Intent(CalendarAlarmListCreator.this, EditPreferences.class); startActivity(editPreferences); dismissListener.onClick(v); } }); inviteAll.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // Set members json and save if (!actFmPreferenceService.isLoggedIn()) { moreOptions.performClick(); return; } else { TagData tagData = new TagData(); tagData.setValue(TagData.NAME, tagName); tagData.setValue(TagData.MEMBER_COUNT, emails.size()); tagDataService.save(tagData); for (String email : emails) { tagMetadataDao.createMemberLink(tagData.getId(), tagData.getUuid(), email, false); } dismissWithAnimation(); } } }); moreOptions.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(CalendarAlarmListCreator.this, TaskListActivity.class); intent.putExtra(TaskListActivity.TOKEN_CREATE_NEW_LIST_NAME, tagName); intent.putExtra(TaskListActivity.TOKEN_CREATE_NEW_LIST_MEMBERS, buildMembersArray().toString()); intent.putExtra(TaskListActivity.TOKEN_CREATE_NEW_LIST, true); startActivity(intent); dismissWithAnimation(); } }); } private String buildAttendeesString() { if (emails.size() == 0) { return ""; //$NON-NLS-1$ } else if (emails.size() == 1) { String displayName = getDisplayName(0); return getString(R.string.CRA_one_attendee, displayName); } else { // emails.size() >= 2 String displayName1 = getDisplayName(0); String displayName2 = getDisplayName(1); int extras = emails.size() - 2; if (extras > 0) return getString(R.string.CRA_many_attendees, displayName1, displayName2, extras); else return getString(R.string.CRA_two_attendees, displayName1, displayName2); } } private JSONArray buildMembersArray() { JSONArray array = new JSONArray(); for (String email : emails) { JSONObject member = new JSONObject(); try { member.put("email", email); //$NON-NLS-1$ array.put(member); } catch (JSONException e) { Log.e(CalendarAlarmScheduler.TAG, "Error creating json member " + email, e); //$NON-NLS-1$ } } return array; } private String getDisplayName(int index) { String name = names.get(index); if (!TextUtils.isEmpty(name)) return name; String email = emails.get(index); if (emailsToUsers.containsKey(email)) { User u = emailsToUsers.get(email); String userName = u.getDisplayName(); if (!TextUtils.isEmpty(userName)) return userName; } return email; } }