/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.android.ui.fragments;
import java.util.Calendar;
import java.util.TimeZone;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.text.format.DateFormat;
import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;
import com.galaxy.meetup.client.android.EsCursorLoader;
import com.galaxy.meetup.client.android.Intents;
import com.galaxy.meetup.client.android.R;
import com.galaxy.meetup.client.android.TimeZoneSpinnerAdapter;
import com.galaxy.meetup.client.android.analytics.EsAnalytics;
import com.galaxy.meetup.client.android.analytics.OzActions;
import com.galaxy.meetup.client.android.analytics.OzViews;
import com.galaxy.meetup.client.android.content.AudienceData;
import com.galaxy.meetup.client.android.content.CircleData;
import com.galaxy.meetup.client.android.content.EsAccount;
import com.galaxy.meetup.client.android.content.EsEventData;
import com.galaxy.meetup.client.android.content.PersonData;
import com.galaxy.meetup.client.android.service.EsService;
import com.galaxy.meetup.client.android.service.EsServiceListener;
import com.galaxy.meetup.client.android.service.ServiceResult;
import com.galaxy.meetup.client.android.ui.fragments.AlertFragmentDialog.AlertDialogListener;
import com.galaxy.meetup.client.android.ui.fragments.PeopleSearchAdapter.SearchListAdapterListener;
import com.galaxy.meetup.client.android.ui.view.EsImageView.OnImageLoadedListener;
import com.galaxy.meetup.client.android.ui.view.EventThemeView;
import com.galaxy.meetup.client.android.ui.view.TypeableAudienceView;
import com.galaxy.meetup.client.util.EventDateUtils;
import com.galaxy.meetup.client.util.StringUtils;
import com.galaxy.meetup.client.util.TimeZoneHelper;
import com.galaxy.meetup.server.client.util.JsonUtil;
import com.galaxy.meetup.server.client.v2.domain.Event;
import com.galaxy.meetup.server.client.v2.domain.EventTime;
import com.galaxy.meetup.server.client.v2.domain.Location;
import com.galaxy.meetup.server.client.v2.domain.ThemeImage;
import com.galaxy.meetup.server.client.v2.domain.ThemeSpecification;
/**
*
* @author sihai
*
*/
public class EditEventFragment extends EsFragment implements
LoaderCallbacks, OnClickListener, OnItemSelectedListener,
AlertDialogListener, SearchListAdapterListener, OnImageLoadedListener {
private static final String EVENT_COLUMNS[] = {
"event_data"
};
private static final String THEME_COLUMNS[] = {
"theme_id", "image_url", "placeholder_path"
};
private PeopleSearchListAdapter mAudienceAdapter;
private TypeableAudienceView mAudienceView;
private String mAuthKey;
private boolean mChanged;
private int mCurrentSpinnerPosition;
private EditText mDescriptionView;
private Button mEndDateView;
private Button mEndTimeView;
private boolean mError;
private Event mEvent;
private TextWatcher mEventDescriptionTextWatcher;
private String mEventId;
private boolean mEventLoaded;
private TextWatcher mEventNameTextWatcher;
private EditText mEventNameView;
private Long mEventThemeId;
private EventThemeView mEventThemeView;
private String mExternalId;
private final Handler mHandler = new Handler(Looper.getMainLooper());
private OnEditEventListener mListener;
private TextView mLocationView;
private boolean mNewEvent;
private String mOwnerId;
private Integer mPendingRequestId;
private AudienceData mResultAudience;
private final EsServiceListener mServiceListener = new EsServiceListener() {
public final void onCreateEventComplete(int i, ServiceResult serviceresult)
{
handleServiceCallback(i, serviceresult);
}
public final void onUpdateEventComplete(int i, ServiceResult serviceresult)
{
handleServiceCallback(i, serviceresult);
}
};
private Button mStartDateView;
private Button mStartTimeView;
private ProgressBar mThemeProgressBar;
private View mThemeSelectionButton;
private TextView mThemeSelectionTextView;
private TimeZoneHelper mTimeZoneHelper;
private Spinner mTimeZoneSpinner;
private TimeZoneSpinnerAdapter mTimeZoneSpinnerAdapter;
public EditEventFragment() {
mNewEvent = true;
mEventNameTextWatcher = new TextWatcher() {
public final void afterTextChanged(Editable editable) {
}
public final void beforeTextChanged(CharSequence charsequence, int i, int j, int k) {
}
public final void onTextChanged(CharSequence charsequence, int i, int j, int k) {
String s = mEventNameView.getText().toString().trim();
if (!TextUtils.equals(mEvent.getName(), s)) {
mEvent.setName(s);
mChanged = true;
}
}
};
mEventDescriptionTextWatcher = new TextWatcher() {
public final void afterTextChanged(Editable editable) {
}
public final void beforeTextChanged(CharSequence charsequence, int i, int j, int k) {
}
public final void onTextChanged(CharSequence charsequence, int i, int j, int k) {
String s = mDescriptionView.getText().toString().trim();
if (!TextUtils.equals(mEvent.getDescription(), s)) {
mEvent.setDescription(s);
mChanged = true;
}
}
};
}
private void bindEndDate() {
if(null != mEvent.getEndTime())
mEndDateView.setText(EventDateUtils.getSingleDateDisplayLine(getActivity(), mEvent.getEndTime().getTimeMs(), getTimeZone(mEvent.getEndTime())));
else
mEndDateView.setText(null);
}
private void bindEndTime() {
if(null != mEvent.getEndTime() && getActivity() != null)
mEndTimeView.setText(EventDateUtils.getDisplayTime(getActivity(), mEvent.getEndTime().getTimeMs(), getTimeZone(mEvent.getEndTime())));
else
mEndTimeView.setText(null);
}
private void bindStartDate() {
if(null != mEvent.getStartTime())
mStartDateView.setText(EventDateUtils.getSingleDateDisplayLine(getActivity(), mEvent.getStartTime().getTimeMs(), getTimeZone(mEvent.getStartTime())));
else
mStartDateView.setText(null);
}
private void bindStartTime() {
if(null != mEvent.getStartTime() && getActivity() != null) {
mStartTimeView.setText(EventDateUtils.getDisplayTime(getActivity(), mEvent.getStartTime().getTimeMs(), getTimeZone(mEvent.getStartTime())));
} else {
mStartTimeView.setText(null);
}
}
private void bindEvent() {
if(mEvent != null) {
TypeableAudienceView typeableaudienceview = mAudienceView;
int i;
if(mNewEvent)
i = 0;
else
i = 8;
typeableaudienceview.setVisibility(i);
mEventNameView.setText(mEvent.getName());
mDescriptionView.setText(mEvent.getDescription());
bindStartDate();
bindEndDate();
bindTimeZoneSpinner();
bindStartTime();
bindEndTime();
bindLocation();
}
}
private void bindLocation() {
if(null != mEvent.getLocation())
mLocationView.setText(mEvent.getLocation().buildAddress());
else
mLocationView.setText(null);
}
private void bindTimeZoneSpinner() {
if(null != mEvent.getStartTime())
{
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(mEvent.getStartTime().getTimeMs());
TimeZoneHelper timezonehelper = mTimeZoneHelper;
getActivity();
timezonehelper.configure(calendar);
mTimeZoneSpinnerAdapter.setTimeZoneHelper(mTimeZoneHelper);
mCurrentSpinnerPosition = mTimeZoneHelper.getTimeZonePos(mEvent.getStartTime().getTimezone(), null);
mTimeZoneSpinner.setSelection(mCurrentSpinnerPosition);
}
}
private void clearEndTime() {
mEvent.setEndTime(null);
}
private void enableEventPicker() {
mHandler.post(new Runnable() {
public final void run() {
mThemeSelectionButton.setVisibility(0);
mThemeSelectionTextView.setVisibility(0);
mThemeProgressBar.setVisibility(8);
mThemeSelectionButton.setLayoutParams(new android.widget.FrameLayout.LayoutParams(mEventThemeView.getMeasuredWidth(), mEventThemeView.getMeasuredHeight()));
}
});
}
private EsAccount getAccount() {
return (EsAccount)getActivity().getIntent().getExtras().get("account");
}
private static long getDefaultEventTime() {
Calendar calendar = Calendar.getInstance();
calendar.add(12, 90);
calendar.set(12, 0);
calendar.set(13, 0);
calendar.set(14, 0);
return calendar.getTimeInMillis();
}
private TimeZone getTimeZone(EventTime eventtime) {
TimeZone timezone;
if(eventtime != null)
timezone = mTimeZoneHelper.getTimeZone(eventtime.timezone, null);
else
timezone = mTimeZoneHelper.getCurrentTimeZoneInfo().getTimeZone();
return timezone;
}
private boolean isEmptyAudience() {
AudienceData audiencedata = mAudienceView.getAudience();
boolean flag;
if(audiencedata.getCircleCount() + audiencedata.getUserCount() == 0)
flag = true;
else
flag = false;
return flag;
}
private void onAudienceChanged() {
if (mListener != null) {
OnEditEventListener _tmp = mListener;
}
}
private void recordUserAction(OzActions ozactions) {
FragmentActivity fragmentactivity = getActivity();
EsAccount esaccount = getAccount();
if(esaccount != null)
EsAnalytics.recordActionEvent(fragmentactivity, esaccount, ozactions, OzViews.getViewForLogging(fragmentactivity));
}
private void setEndTime(Calendar calendar) {
long l = calendar.getTimeInMillis();
TimeZone timezone = calendar.getTimeZone();
if(null == mEvent.getEndTime()) {
EventTime endTime = new EventTime();
endTime.setTimeMs(Long.valueOf(getDefaultEventTime()));
mEvent.setEndTime(endTime);
}
if(mEvent.getEndTime().getTimeMs().longValue() != l) {
mEvent.getEndTime().setTimeMs(Long.valueOf(l));
mEvent.getEndTime().setTimezone(timezone.getID());
mChanged = true;
}
}
private void setEventTheme(long themeId, String imageURL, Uri imageURI, boolean flag) {
if(null == mEvent) {
return;
}
if(null == mEvent.getThemeSpecification()) {
mEvent.setThemeSpecification(new ThemeSpecification());
}
if(flag || null == mEvent.getThemeSpecification().getThemeId()) {
mEventThemeId = themeId;
mEvent.getThemeSpecification().setThemeId(themeId);
if(null != imageURI)
{
mEventThemeView.setDefaultImageUri(imageURI);
enableEventPicker();
}
mEventThemeView.setImageUrl(imageURL);
} else if(mEvent.getThemeSpecification().getThemeId().longValue() == themeId) {
mEventThemeId = themeId;
if(null != imageURI) {
mEventThemeView.setDefaultImageUri(imageURI);
enableEventPicker();
}
mEventThemeView.setImageUrl(imageURL);
}
}
private void setStartTime(Calendar calendar) {
long l = calendar.getTimeInMillis();
TimeZone timezone = calendar.getTimeZone();
boolean flag;
if(mEvent.getStartTime().getTimezone() != null)
flag = true;
else
flag = false;
if(mEvent.getStartTime().getTimeMs().longValue() != l || !flag) {
mEvent.getStartTime().setTimeMs(l);
mEvent.getStartTime().setTimezone(timezone.getID());
bindTimeZoneSpinner();
mChanged = true;
}
}
private void updateView(View view) {
if(view != null && !mNewEvent) {
TextView textview = (TextView)view.findViewById(R.id.server_error);
View view1 = view.findViewById(R.id.content);
if(mEvent != null) {
textview.setVisibility(8);
view1.setVisibility(0);
showContent(view);
} else if(!mEventLoaded) {
view1.setVisibility(8);
textview.setVisibility(8);
showEmptyViewProgress(view);
} else if(mError) {
textview.setVisibility(0);
textview.setText(R.string.event_details_error);
view1.setVisibility(8);
showContent(view);
} else {
textview.setVisibility(0);
textview.setText(R.string.event_does_not_exist);
view1.setVisibility(8);
showContent(view);
}
}
}
public final void createEvent() {
if(mEvent == null) {
mEvent = new Event();
mEvent.setPublisher(this.getAccount().getName());
EventTime startTime = new EventTime();
startTime.setTimeMs(getDefaultEventTime());
TimeZoneHelper.TimeZoneInfo timezoneinfo = mTimeZoneHelper.getCurrentTimeZoneInfo();
TimeZone timezone = timezoneinfo.getTimeZone();
startTime.setTimezone(timezone.getID());
mEvent.setStartTime(startTime);
mExternalId = (new StringBuilder()).append(System.currentTimeMillis()).append(".").append(StringUtils.randomString(32)).toString();
mEventThemeId = -1L;
}
}
public final void editEvent(String eventId, String ownerName, String authKey) {
mEventId = eventId;
mOwnerId = ownerName;
mAuthKey = authKey;
mEventThemeId = -1L;
mNewEvent = false;
}
protected final void handleServiceCallback(int requestId, ServiceResult serviceresult) {
if(null == mPendingRequestId || requestId != mPendingRequestId.intValue()) {
return;
}
DialogFragment dialogfragment = (DialogFragment)getFragmentManager().findFragmentByTag("req_pending");
if(dialogfragment != null)
dialogfragment.dismiss();
mPendingRequestId = null;
FragmentActivity fragmentactivity = getActivity();
int resourceId;
if(serviceresult != null && serviceresult.hasError()) {
if(mNewEvent)
resourceId = R.string.create_event_server_error;
else
resourceId = R.string.transient_server_error;
Toast.makeText(fragmentactivity, resourceId, 0).show();
} else if(mListener != null) {
if(mNewEvent)
resourceId = R.string.event_create_successful;
else
resourceId = R.string.event_save_successful;
Toast.makeText(fragmentactivity, resourceId, 0).show();
mListener.onEventSaved();
}
}
protected final boolean isEmpty() {
boolean flag;
if(mEvent != null)
flag = true;
else
flag = false;
return flag;
}
public final void onActivityResult(int i, int j, Intent intent) {
super.onActivityResult(i, j, intent);
if(-1 != j || null == intent) {
return;
}
switch(i)
{
case 0: // '\0'
byte[] bytes = intent.getByteArrayExtra("location");
if(null == bytes)
mEvent.setLocation(null);
else
mEvent.setLocation((Location)JsonUtil.fromByteArray(bytes, Location.class));
bindLocation();
break;
case 1: // '\001'
int k = intent.getIntExtra("theme_id", -1);
String s = intent.getStringExtra("theme_url");
if(k != -1 && s != null)
{
setEventTheme(k, s, null, true);
getLoaderManager().restartLoader(0, null, this);
}
break;
case 2: // '\002'
mResultAudience = (AudienceData)intent.getParcelableExtra("audience");
break;
}
}
public final void onAddPersonToCirclesAction(String s, String s1, boolean flag)
{
}
public final void onAttach(Activity activity)
{
super.onAttach(activity);
mTimeZoneHelper = new TimeZoneHelper(getActivity().getApplicationContext());
mTimeZoneHelper.configure(Calendar.getInstance());
}
public final void onChangeCirclesAction(String s, String s1)
{
}
public final void onCircleSelected(String s, CircleData circledata)
{
mAudienceView.addCircle(circledata);
mAudienceView.clearText();
}
public void onClick(View view) {
int viewId = view.getId();
if(R.id.edit_audience == viewId) {
recordUserAction(OzActions.COMPOSE_CHANGE_ACL);
startActivityForResult(Intents.getEditAudienceActivityIntent(getActivity(), getAccount(), getString(R.string.event_invite_activity_title), mAudienceView.getAudience(), 11, false, false, true, false), 2);
return;
} else if(viewId == R.id.start_date) {
DatePickerFragmentDialog datepickerfragmentdialog = new DatePickerFragmentDialog(1);
datepickerfragmentdialog.setTargetFragment(this, 0);
Bundle bundle = new Bundle();
bundle.putLong("date_time", mEvent.getStartTime().getTimeMs());
bundle.putString("time_zone", mEvent.getStartTime().getTimezone());
datepickerfragmentdialog.setArguments(bundle);
datepickerfragmentdialog.show(getFragmentManager(), "date");
} else if(viewId == R.id.end_date) {
DatePickerFragmentDialog datepickerfragmentdialog1 = new DatePickerFragmentDialog(0);
datepickerfragmentdialog1.setTargetFragment(this, 0);
Bundle bundle = new Bundle();
if(null != mEvent.getEndTime())
bundle.putLong("date_time", mEvent.getEndTime().getTimeMs());
else
bundle.putLong("date_time", mEvent.getStartTime().getTimeMs());
bundle.putString("time_zone", mEvent.getStartTime().getTimezone());
datepickerfragmentdialog1.setArguments(bundle);
datepickerfragmentdialog1.show(getFragmentManager(), "date");
} else if(viewId == R.id.start_time) {
TimePickerFragmentDialog timepickerfragmentdialog = new TimePickerFragmentDialog(1);
timepickerfragmentdialog.setTargetFragment(this, 0);
Bundle bundle = new Bundle();
bundle.putLong("date_time", mEvent.getStartTime().getTimeMs());
bundle.putString("time_zone", mEvent.getStartTime().getTimezone());
timepickerfragmentdialog.setArguments(bundle);
timepickerfragmentdialog.show(getFragmentManager(), "time");
} else if(viewId == R.id.end_time) {
TimePickerFragmentDialog timepickerfragmentdialog = new TimePickerFragmentDialog(0);
timepickerfragmentdialog.setTargetFragment(this, 0);
Bundle bundle = new Bundle();
if(null != mEvent.getEndTime())
bundle.putLong("date_time", mEvent.getEndTime().getTimeMs());
else
bundle.putLong("date_time", 0x6ddd00L + mEvent.getStartTime().getTimeMs());
bundle.putString("time_zone", mEvent.getStartTime().getTimezone());
timepickerfragmentdialog.setArguments(bundle);
timepickerfragmentdialog.show(getFragmentManager(), "time");
} else if(viewId == R.id.location_text) {
recordUserAction(OzActions.COMPOSE_CHANGE_LOCATION);
//startActivity(Intents.getChooseLocationIntent(getActivity(), getAccount(), false, null));
startActivityForResult(Intents.getEventLocationActivityIntent(getActivity(), getAccount(), mEvent.getLocation()), 0);
} else if(viewId == R.id.select_theme_button) {
startActivityForResult(Intents.getEventThemePickerIntent(getActivity(), getAccount()), 1);
}
}
public final void onCreate(Bundle bundle) {
super.onCreate(bundle);
if(bundle != null) {
mNewEvent = bundle.getBoolean("new_event");
mEventId = bundle.getString("event_id");
mOwnerId = bundle.getString("owner_id");
if(bundle.containsKey("event")) {
byte[] bytes = bundle.getByteArray("event");
mEvent = (Event)JsonUtil.fromByteArray(bytes, Event.class);
}
if(bundle.containsKey("request_id"))
mPendingRequestId = Integer.valueOf(bundle.getInt("request_id"));
mExternalId = bundle.getString("external_id");
mChanged = bundle.getBoolean("changed");
}
getLoaderManager().initLoader(0, null, this);
if(!mNewEvent && mEvent == null)
getLoaderManager().initLoader(1, null, this);
}
public final Loader onCreateLoader(int i, Bundle bundle) {
final FragmentActivity context = getActivity();
final EsAccount esaccount = getAccount();
Loader loader = null;
if(0 == i) {
loader = new EsCursorLoader(context) {
public final Cursor esLoadInBackground()
{
return EsEventData.getEventTheme(context, esaccount, mEventThemeId, EditEventFragment.THEME_COLUMNS);
}
};
} else if(1 == i) {
loader = new EsCursorLoader(context) {
public final Cursor esLoadInBackground()
{
return EsEventData.retrieveEvent(context, esaccount, mEventId, mAuthKey, EditEventFragment.EVENT_COLUMNS);
}
};
}
return loader;
}
public final View onCreateView(LayoutInflater layoutinflater, ViewGroup viewgroup, Bundle bundle) {
View view = layoutinflater.inflate(R.layout.edit_event_fragment, viewgroup);
mEventThemeView = (EventThemeView)view.findViewById(R.id.event_theme_image);
mEventThemeView.setOnImageLoadedListener(this);
mEventThemeView.setClickable(true);
mEventThemeView.setOnClickListener(this);
mThemeSelectionTextView = (TextView)view.findViewById(R.id.select_theme_text);
mThemeSelectionTextView.setText(getString(R.string.event_change_theme).toUpperCase());
mThemeProgressBar = (ProgressBar)view.findViewById(R.id.event_theme_progress_bar);
mEventNameView = (EditText)view.findViewById(R.id.event_name);
mEventNameView.addTextChangedListener(mEventNameTextWatcher);
mStartDateView = (Button)view.findViewById(R.id.start_date);
mStartDateView.setOnClickListener(this);
mEndDateView = (Button)view.findViewById(R.id.end_date);
mEndDateView.setOnClickListener(this);
mStartTimeView = (Button)view.findViewById(R.id.start_time);
mStartTimeView.setOnClickListener(this);
mEndTimeView = (Button)view.findViewById(R.id.end_time);
mEndTimeView.setOnClickListener(this);
mLocationView = (TextView)view.findViewById(R.id.location_text);
mLocationView.setOnClickListener(this);
mAudienceView = (TypeableAudienceView)view.findViewById(R.id.audience_view);
mAudienceView.setEmptyAudienceHint(R.string.event_invitees_hint);
mAudienceView.setAudienceChangedCallback(new Runnable() {
public final void run()
{
onAudienceChanged();
}
});
mThemeSelectionButton = view.findViewById(R.id.select_theme_button);
mThemeSelectionButton.setOnClickListener(this);
mDescriptionView = (EditText)view.findViewById(R.id.description);
mDescriptionView.addTextChangedListener(mEventDescriptionTextWatcher);
ContextThemeWrapper contextthemewrapper = new ContextThemeWrapper(getActivity(), R.style.CircleBrowserTheme);
mAudienceAdapter = new PeopleSearchListAdapter(contextthemewrapper, getFragmentManager(), getLoaderManager(), getAccount());
mAudienceAdapter.setCircleUsageType(11);
mAudienceAdapter.setShowPersonNameDialog(false);
mAudienceAdapter.setListener(this);
mAudienceAdapter.onCreate(bundle);
mAudienceView.setAutoCompleteAdapter(mAudienceAdapter);
mAudienceView.setAccount(getAccount());
view.findViewById(R.id.edit_audience).setOnClickListener(this);
mTimeZoneSpinnerAdapter = new TimeZoneSpinnerAdapter(contextthemewrapper);
mTimeZoneSpinnerAdapter.setTimeZoneHelper(mTimeZoneHelper);
mTimeZoneSpinner = (Spinner)view.findViewById(R.id.time_zone);
mTimeZoneSpinner.setAdapter(mTimeZoneSpinnerAdapter);
TimeZoneHelper.TimeZoneInfo timezoneinfo = mTimeZoneHelper.getCurrentTimeZoneInfo();
int i;
if(timezoneinfo != null)
i = timezoneinfo.getPosition();
else
i = -1;
mCurrentSpinnerPosition = i;
mTimeZoneSpinner.setSelection(mCurrentSpinnerPosition);
mTimeZoneSpinner.setOnItemSelectedListener(this);
bindEvent();
updateView(view);
return view;
}
public final void onDialogCanceled(String s)
{
}
public final void onDialogListClick(int i, Bundle bundle)
{
}
public final void onDialogNegativeClick(String s)
{
}
public final void onDialogPositiveClick(Bundle bundle, String s) {
if("quit".equals(s) && mListener != null)
mListener.onEventClosed();
}
public final void onDiscard() {
if(!mNewEvent) {
if(mChanged) {
AlertFragmentDialog alertfragmentdialog = AlertFragmentDialog.newInstance(getString(R.string.edit_event_quit_title), getString(R.string.edit_event_quit_question), getString(R.string.yes), getString(R.string.no));
alertfragmentdialog.setTargetFragment(this, 0);
alertfragmentdialog.show(getFragmentManager(), "quit");
} else if(mListener != null) {
mListener.onEventClosed();
}
} else {
boolean flag;
if(!TextUtils.isEmpty(mEvent.getName()) || !TextUtils.isEmpty(mEvent.getDescription()) || !isEmptyAudience())
flag = true;
else
flag = false;
if(!flag) {
if(mListener != null)
mListener.onEventClosed();
return;
} else {
AlertFragmentDialog alertfragmentdialog1 = AlertFragmentDialog.newInstance(getString(R.string.new_event_quit_title), getString(R.string.new_event_quit_question), getString(R.string.yes), getString(R.string.no));
alertfragmentdialog1.setTargetFragment(this, 0);
alertfragmentdialog1.show(getFragmentManager(), "quit");
}
}
}
public final void onDismissSuggestionAction(String s, String s1) {
}
public final void onEndDateCleared() {
clearEndTime();
bindEndDate();
bindEndTime();
}
public final void onEndDateSet(int i, int j, int k) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(((TimeZoneHelper.TimeZoneInfo)mTimeZoneSpinner.getSelectedItem()).getTimeZone());
if(null != mEvent.getEndTime())
calendar.setTimeInMillis(mEvent.getEndTime().getTimeMs());
else
calendar.setTimeInMillis(0x6ddd00L + mEvent.getStartTime().getTimeMs());
if(null == mEvent.getEndTime() || calendar.get(1) != i || calendar.get(2) != j || calendar.get(5) != k) {
calendar.set(i, j, k);
long l = calendar.getTimeInMillis();
if(mEvent.getStartTime().getTimeMs().longValue() > l)
mEvent.getStartTime().getTimeMs().longValue();
setEndTime(calendar);
bindEndDate();
bindEndTime();
}
}
public final void onEndTimeCleared() {
clearEndTime();
bindEndTime();
bindEndDate();
}
public final void onEndTimeSet(int i, int j) {
Calendar calendar = Calendar.getInstance();
if(null != mEvent.getEndTime())
calendar.setTimeInMillis(mEvent.getEndTime().getTimeMs());
else
calendar.setTimeInMillis(0x6ddd00L + mEvent.getStartTime().getTimeMs());
if(null == mEvent.getEndTime() || calendar.get(11) != i || calendar.get(12) != j) {
calendar.set(11, i);
calendar.set(12, j);
calendar.setTimeZone(((TimeZoneHelper.TimeZoneInfo)mTimeZoneSpinner.getSelectedItem()).getTimeZone());
long l = calendar.getTimeInMillis();
if(mEvent.getStartTime().getTimeMs().longValue() > l)
mEvent.getStartTime().getTimeMs().longValue();
setEndTime(calendar);
bindEndTime();
bindEndDate();
}
}
public final void onImageLoaded() {
enableEventPicker();
}
public void onItemSelected(AdapterView adapterview, View view, int position, long l) {
if(position != mCurrentSpinnerPosition) {
TimeZoneHelper.TimeZoneInfo timezoneinfo = (TimeZoneHelper.TimeZoneInfo)mTimeZoneSpinner.getSelectedItem();
long l1 = timezoneinfo.getOffset();
long l2 = mTimeZoneHelper.getCurrentTimeZoneInfo().getOffset();
if(!TextUtils.isEmpty(mEvent.getStartTime().getTimezone())) {
TimeZone timezone = TimeZoneHelper.getSystemTimeZone(mEvent.getStartTime().getTimezone());
l2 = mTimeZoneHelper.getOffset(timezone);
}
long l3 = l2 - l1;
mEvent.getStartTime().setTimezone(timezoneinfo.getTimeZone().getID());
EventTime eventtime = mEvent.getStartTime();
eventtime.setTimeMs(Long.valueOf(l3 + eventtime.getTimeMs().longValue()));
if(null != mEvent.getEndTime() && null != mEvent.getEndTime().getTimeMs()) {
EventTime eventtime1 = mEvent.getEndTime();
eventtime1.setTimeMs(Long.valueOf(l3 + eventtime1.getTimeMs().longValue()));
mEvent.getEndTime().setTimezone(mEvent.getStartTime().getTimezone());
}
}
}
public final void onLoadFinished(Loader loader, Object obj) {
Cursor cursor = (Cursor)obj;
int id = loader.getId();
if(0 == id) {
if(cursor != null && cursor.moveToFirst()) {
int themeId = cursor.getInt(0);
String imageURL = cursor.getString(1);
String s1 = cursor.getString(2);
Uri uri;
if (!TextUtils.isEmpty(s1)) {
android.net.Uri.Builder builder = new android.net.Uri.Builder();
builder.path(s1);
uri = builder.build();
} else {
uri = null;
}
setEventTheme(themeId, imageURL, uri, false);
} else if(mEvent != null && null != mEvent.getTheme()) {
ThemeImage themeimage = EsEventData.getThemeImage(mEvent.getTheme());
if(themeimage != null)
setEventTheme(mEventThemeId, themeimage.getUrl(), null, true);
}
} else if(1 == id) {
mEventLoaded = true;
if(null == cursor) {
mError = true;
} else {
mError = false;
if(cursor.moveToFirst()) {
mEvent = (Event)JsonUtil.fromByteArray(cursor.getBlob(0), Event.class);
mAuthKey = mEvent.getAuthKey();
Long themeId = -1L;
if(null != mEvent.getTheme())
themeId = mEvent.getTheme().getId();
if(!themeId.equals(mEventThemeId))
{
mEventThemeId = themeId;
getLoaderManager().restartLoader(0, null, this);
}
bindEvent();
}
}
updateView(getView());
}
}
public final void onLoaderReset(Loader loader)
{
}
public void onNothingSelected(AdapterView adapterview)
{
}
public final void onPause()
{
super.onPause();
EsService.unregisterListener(mServiceListener);
}
public final void onPersonSelected(String s, String s1, PersonData persondata)
{
mAudienceView.addPerson(persondata);
mAudienceView.clearText();
}
public final void onResume()
{
super.onResume();
EsService.registerListener(mServiceListener);
if(mPendingRequestId != null && !EsService.isRequestPending(mPendingRequestId.intValue()))
{
ServiceResult serviceresult = EsService.removeResult(mPendingRequestId.intValue());
handleServiceCallback(mPendingRequestId.intValue(), serviceresult);
mPendingRequestId = null;
}
if(mResultAudience != null)
{
mAudienceView.replaceAudience(mResultAudience);
mResultAudience = null;
onAudienceChanged();
}
}
public final void onSaveInstanceState(Bundle bundle)
{
super.onSaveInstanceState(bundle);
mAudienceAdapter.onSaveInstanceState(bundle);
bundle.putBoolean("new_event", mNewEvent);
bundle.putString("event_id", mEventId);
bundle.putString("owner_id", mOwnerId);
if(mEvent != null)
bundle.putByteArray("event", JsonUtil.toByteArray(mEvent));
if(mPendingRequestId != null)
bundle.putInt("request_id", mPendingRequestId.intValue());
bundle.putString("external_id", mExternalId);
bundle.putBoolean("changed", mChanged);
}
public final void onSearchListAdapterStateChange(PeopleSearchAdapter peoplesearchadapter)
{
}
public final void onStart()
{
super.onStart();
if(mAudienceAdapter != null)
mAudienceAdapter.onStart();
}
public final void onStartDateSet(int i, int j, int k) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(((TimeZoneHelper.TimeZoneInfo)mTimeZoneSpinner.getSelectedItem()).getTimeZone());
calendar.setTimeInMillis(mEvent.getStartTime().getTimeMs());
if(calendar.get(1) != i || calendar.get(2) != j || calendar.get(5) != k) {
calendar.set(i, j, k);
setStartTime(calendar);
bindStartDate();
bindStartTime();
if(null != mEvent.getEndTime() && mEvent.getEndTime().getTimeMs().longValue() < calendar.getTimeInMillis()) {
calendar.add(13, 7200);
setEndTime(calendar);
bindEndDate();
bindEndTime();
}
}
}
public final void onStartTimeSet(int i, int j) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(((TimeZoneHelper.TimeZoneInfo)mTimeZoneSpinner.getSelectedItem()).getTimeZone());
calendar.setTimeInMillis(mEvent.getStartTime().getTimeMs().longValue());
if(calendar.get(11) != i || calendar.get(12) != j) {
calendar.set(11, i);
calendar.set(12, j);
long l = calendar.getTimeInMillis();
setStartTime(calendar);
bindStartTime();
if(null != mEvent.getEndTime() && mEvent.getEndTime().getTimeMs().longValue() < l)
{
calendar.add(13, 7200);
setEndTime(calendar);
bindEndDate();
bindEndTime();
}
}
}
public final void onStop() {
super.onStop();
if(mAudienceAdapter != null)
mAudienceAdapter.onStop();
}
public final void onUnblockPersonAction(String s, boolean flag) {
}
/**
* 保存
*/
public final void save() {
boolean flag = true;
if(mEvent == null)
flag = false;
else if(TextUtils.isEmpty(mEvent.getName())) {
Toast.makeText(getActivity(), getResources().getString(R.string.event_no_title_hint), 0).show();
flag = false;
} else if(mNewEvent) {
/*if(isEmptyAudience()) {
Toast.makeText(getActivity(), getResources().getString(R.string.event_no_audience_hint), 0).show();
flag = false;
}*/
}
if(flag)
{
ProgressFragmentDialog.newInstance(null, getString(R.string.event_update_operation_pending), false).show(getFragmentManager(), "req_pending");
if(mNewEvent)
mPendingRequestId = Integer.valueOf(EsService.createEvent(getActivity(), getAccount(), mEvent, mAudienceView.getAudience(), mExternalId));
else
mPendingRequestId = Integer.valueOf(EsService.updateEvent(getActivity(), getAccount(), mEvent));
}
}
public final void setOnEventChangedListener(OnEditEventListener onediteventlistener)
{
mListener = onediteventlistener;
}
//==================================================================================================================
// Inner class
//==================================================================================================================
public static class DatePickerFragmentDialog extends DialogFragment implements android.app.DatePickerDialog.OnDateSetListener, android.content.DialogInterface.OnClickListener {
private boolean mCancelled;
private int mType;
public DatePickerFragmentDialog()
{
mType = -1;
}
public DatePickerFragmentDialog(int i)
{
mType = -1;
mType = i;
}
public void onClick(DialogInterface dialoginterface, int i)
{
EditEventFragment editeventfragment = (EditEventFragment)getTargetFragment();
if(-2 == i) {
editeventfragment.onEndDateCleared();
mCancelled = true;
}
}
public final Dialog onCreateDialog(Bundle bundle)
{
if(mType == -1)
{
mType = bundle.getInt("type");
mCancelled = bundle.getBoolean("cancelled", mCancelled);
}
long l = getArguments().getLong("date_time");
TimeZone timezone = TimeZoneHelper.getSystemTimeZone(getArguments().getString("time_zone"));
Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(timezone);
calendar.setTimeInMillis(l);
DatePickerDialog datepickerdialog = new DatePickerDialog(getActivity(), this, calendar.get(1), calendar.get(2), calendar.get(5));
if(mType == 0)
datepickerdialog.setButton(-2, getString(R.string.clear), this);
return datepickerdialog;
}
public void onDateSet(DatePicker datepicker, int i, int j, int k)
{
if(!mCancelled)
if(mType == 1)
((EditEventFragment)getTargetFragment()).onStartDateSet(i, j, k);
else
((EditEventFragment)getTargetFragment()).onEndDateSet(i, j, k);
}
public final void onSaveInstanceState(Bundle bundle)
{
super.onSaveInstanceState(bundle);
bundle.putInt("type", mType);
bundle.putBoolean("cancelled", mCancelled);
}
}
public static interface OnEditEventListener
{
public abstract void onEventClosed();
public abstract void onEventSaved();
}
public static class TimePickerFragmentDialog extends DialogFragment implements android.app.TimePickerDialog.OnTimeSetListener, android.content.DialogInterface.OnClickListener {
private boolean mCancelled;
private int mType;
public TimePickerFragmentDialog()
{
mType = -1;
}
public TimePickerFragmentDialog(int i)
{
mType = -1;
mType = i;
}
public void onClick(DialogInterface dialoginterface, int i) {
EditEventFragment editeventfragment = (EditEventFragment)getTargetFragment();
if(-2 == i) {
editeventfragment.onEndTimeCleared();
mCancelled = true;
}
}
public final Dialog onCreateDialog(Bundle bundle)
{
if(mType == -1)
{
mType = bundle.getInt("type", -1);
mCancelled = bundle.getBoolean("cancelled", mCancelled);
}
long l = getArguments().getLong("date_time");
String s = getArguments().getString("time_zone");
Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(TimeZoneHelper.getSystemTimeZone(s));
calendar.setTimeInMillis(l);
TimePickerDialog timepickerdialog = new TimePickerDialog(getActivity(), this, calendar.get(11), calendar.get(12), DateFormat.is24HourFormat(getActivity()));
if(mType == 0)
timepickerdialog.setButton(-2, getString(R.string.clear), this);
return timepickerdialog;
}
public final void onSaveInstanceState(Bundle bundle) {
super.onSaveInstanceState(bundle);
bundle.putInt("type", mType);
bundle.putBoolean("cancelled", mCancelled);
}
public void onTimeSet(TimePicker timepicker, int i, int j) {
if(!mCancelled)
{
EditEventFragment editeventfragment = (EditEventFragment)getTargetFragment();
if(mType == 1)
editeventfragment.onStartTimeSet(i, j);
else
editeventfragment.onEndTimeSet(i, j);
}
}
}
}