/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android.ui.fragments; import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.Comparator; import java.util.HashSet; import java.util.List; import java.util.Set; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.support.v4.app.Fragment; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ScrollView; import android.widget.TextView; import android.widget.Toast; import com.galaxy.meetup.client.android.Intents; import com.galaxy.meetup.client.android.R; 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.EsPeopleData; 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.view.ImageTextButton; import com.galaxy.meetup.client.android.ui.view.TextOnlyAudienceView; import com.galaxy.meetup.client.util.PrimitiveUtils; import com.galaxy.meetup.client.util.SoftInput; import com.galaxy.meetup.server.client.domain.CoarseDate; import com.galaxy.meetup.server.client.domain.DataCircleMemberId; import com.galaxy.meetup.server.client.domain.DateInfo; import com.galaxy.meetup.server.client.domain.Education; import com.galaxy.meetup.server.client.domain.Educations; import com.galaxy.meetup.server.client.domain.Employment; import com.galaxy.meetup.server.client.domain.Employments; import com.galaxy.meetup.server.client.domain.Locations; import com.galaxy.meetup.server.client.domain.Metadata; import com.galaxy.meetup.server.client.domain.SharingRoster; import com.galaxy.meetup.server.client.domain.SharingRosterData; import com.galaxy.meetup.server.client.domain.SharingTarget; import com.galaxy.meetup.server.client.domain.SharingTargetId; import com.galaxy.meetup.server.client.domain.SimpleProfile; import com.galaxy.meetup.server.client.domain.User; import com.galaxy.meetup.server.client.util.JsonUtil; /** * * @author sihai * */ public class ProfileEditFragment extends Fragment implements OnClickListener { private EsAccount mAccount; TextView mAddItemView; private AudienceData mAudience; TextOnlyAudienceView mAudienceView; View mDeletedFieldView; private String mDomainId; private String mDomainName; private int mEditMode; View mFocusOverrideView; private boolean mHasPublicCircle; private ArrayList mItemViewIdsList; LinearLayout mItemViews; private String mItemsJson; private Set mModifiedViews; private AudienceData mOriginalAudience; private int mOriginalCount; private Educations mOriginalEducations; private Employments mOriginalEmployments; private String mOriginalItemsJson; private Locations mOriginalLocations; private String mOriginalRequiredScopeId; private final EsServiceListener mProfileEditServiceListener = new EsServiceListener() { public final void onMutateProfileComplete(int i, ServiceResult serviceresult) { if(mProfilePendingRequestId != null && mProfilePendingRequestId.intValue() == i) { dismissProgressDialog(); boolean flag = showErrorToast(serviceresult); mProfilePendingRequestId = null; if(!flag) finishActivity(-1); } } }; private Integer mProfilePendingRequestId; ImageTextButton mSaveButton; ScrollView mScollView; private SharingRosterData mSharingRosterData; private String mSharingRosterDataJson; private int mViewIdNextCurrent; private int mViewIdNextEndDate; private int mViewIdNextName; private int mViewIdNextStartDate; private int mViewIdNextTitleOrMajor; public ProfileEditFragment() { mViewIdNextName = 1000; mViewIdNextTitleOrMajor = 2000; mViewIdNextStartDate = 3000; mViewIdNextEndDate = 4000; mViewIdNextCurrent = 5000; mModifiedViews = new HashSet(); } private void addChangedField(View view) { mModifiedViews.add(view); boolean flag; boolean flag1; if(mOriginalCount == 0 && mItemViews.getChildCount() == 0) flag = true; else flag = false; if(mModifiedViews.size() == 1 && view == mAudienceView) flag1 = true; else flag1 = false; if(!flag1 || !flag) mSaveButton.setEnabled(true); } private View addItem() { int i = mEditMode; View view = null; if(1 == i) { view = getView(((Employment) (null)), null); } else if(2 == i) { view = getView(((Education) (null)), null); } else if(3 == i) { view = getView(null, null, null); } mItemViews.addView(view); updateViewsWithOriginalValues(); return view; } private void configureDataInfo(View view, ItemViewIds itemviewids, DateInfo dateinfo) { EditText edittext = (EditText)view.findViewById(R.id.start); edittext.setId(itemviewids.startDate); if(dateinfo != null && dateinfo.start != null && dateinfo.start.year != null) edittext.setText(Integer.toString(dateinfo.start.year.intValue())); EditText edittext1 = (EditText)view.findViewById(R.id.end); edittext1.setId(itemviewids.endDate); if(dateinfo != null && dateinfo.end != null && dateinfo.end.year != null) edittext1.setText(Integer.toString(dateinfo.end.year.intValue())); CheckBox checkbox = (CheckBox)view.findViewById(R.id.current); checkbox.setId(itemviewids.current); checkbox.setTag(edittext1); if(dateinfo != null) checkbox.setChecked(PrimitiveUtils.safeBoolean(dateinfo.current)); ImageView imageview = (ImageView)view.findViewById(R.id.delete_item); imageview.setOnClickListener(this); imageview.setTag(view); } private Educations createEducations() { Educations educations = new Educations(); int i = mItemViews.getChildCount(); educations.education = new ArrayList(i); for(int j = 0; j < i; j++) { View view = mItemViews.getChildAt(j); ItemViewIds itemviewids = (ItemViewIds)view.getTag(); Education education = new Education(); education.school = getEditedString(view, itemviewids.name); education.majorConcentration = getEditedString(view, itemviewids.titleOrMajor); education.dateInfo = new DateInfo(); String s = getEditedString(view, itemviewids.startDate); if(!TextUtils.isEmpty(s)) { education.dateInfo.start = new CoarseDate(); education.dateInfo.start.year = Integer.valueOf(Integer.parseInt(s)); } String s1 = getEditedString(view, itemviewids.endDate); if(!TextUtils.isEmpty(s1)) { education.dateInfo.end = new CoarseDate(); education.dateInfo.end.year = Integer.valueOf(Integer.parseInt(s1)); } education.dateInfo.current = Boolean.valueOf(getCurrent(view, itemviewids.current)); educations.education.add(education); } educations.metadata = createMetadata(); return educations; } private Employments createEmployments() { Employments employments = new Employments(); int i = mItemViews.getChildCount(); employments.employment = new ArrayList(i); for(int j = 0; j < i; j++) { View view = mItemViews.getChildAt(j); ItemViewIds itemviewids = (ItemViewIds)view.getTag(); Employment employment = new Employment(); employment.employer = getEditedString(view, itemviewids.name); employment.title = getEditedString(view, itemviewids.titleOrMajor); employment.dateInfo = new DateInfo(); String s = getEditedString(view, itemviewids.startDate); if(!TextUtils.isEmpty(s)) { employment.dateInfo.start = new CoarseDate(); employment.dateInfo.start.year = Integer.valueOf(Integer.parseInt(s)); } String s1 = getEditedString(view, itemviewids.endDate); if(!TextUtils.isEmpty(s1)) { employment.dateInfo.end = new CoarseDate(); employment.dateInfo.end.year = Integer.valueOf(Integer.parseInt(s1)); } employment.dateInfo.current = Boolean.valueOf(getCurrent(view, itemviewids.current)); employments.employment.add(employment); } employments.metadata = createMetadata(); return employments; } private Locations createLocations(boolean flag) { Locations locations = new Locations(); String s = null; int i = mItemViews.getChildCount(); for(int j = 0; j < i; j++) { View view = mItemViews.getChildAt(j); ItemViewIds itemviewids = (ItemViewIds)view.getTag(); if(getCurrent(view, itemviewids.current)) { s = getEditedString(view, itemviewids.name); if(!flag) continue; s = (new StringBuilder("~~Internal~CurrentLocation.")).append(s).toString(); } if(locations.otherLocation == null) locations.otherLocation = new ArrayList(); locations.otherLocation.add(getEditedString(view, itemviewids.name)); } if(s != null) locations.currentLocation = s; locations.metadata = createMetadata(); return locations; } private Metadata createMetadata() { AudienceData audiencedata = mAudienceView.getAudience(); Metadata metadata = new Metadata(); int i = audiencedata.getCircleCount(); int j = audiencedata.getUserCount(); if(1 == i && 0 == j) { int i1 = audiencedata.getCircle(0).getType(); if(1 != i1) { if(i1 != 9) { if(i1 == 8) metadata.scope = "DOMAIN"; else if(i1 == 7) metadata.scope = "EXTENDED_CIRCLES"; else if(i1 == 5) metadata.scope = "MY_CIRCLES"; else if(i1 == 101) metadata.scope = "PRIVATE"; } else { metadata.scope = "PUBLIC"; } return metadata; } } metadata.scope = "CUSTOM_CHIPS"; metadata.sharingRoster = new SharingRoster(); if(mOriginalRequiredScopeId != null) metadata.sharingRoster.requiredScopeId = (SharingTargetId)JsonUtil.toBean(mOriginalRequiredScopeId, SharingTargetId.class); metadata.sharingRoster.sharingTargetId = new ArrayList(); int k = 0; CircleData circledata; SharingTargetId sharingtargetid1; if(k < i) { circledata = audiencedata.getCircle(k); sharingtargetid1 = new SharingTargetId(); switch(circledata.getType()) { case 1: sharingtargetid1.circleId = EsPeopleData.getFocusCircleId(circledata.getId()); break; case 2: break; case 3: break; case 4: break; case 5: sharingtargetid1.groupType = "YOUR_CIRCLES"; break; case 6: break; case 7: sharingtargetid1.groupType = "EXTENDED_CIRCLES"; break; case 8: sharingtargetid1.groupType = "DASHER_DOMAIN"; break; case 9: break; default: break; } metadata.scope = "PUBLIC"; return metadata; } else { int l = 0; while(l < j) { PersonData persondata = audiencedata.getUser(l); SharingTargetId sharingtargetid = new SharingTargetId(); sharingtargetid.personId = new DataCircleMemberId(); sharingtargetid.personId.obfuscatedGaiaId = persondata.getObfuscatedId(); metadata.sharingRoster.sharingTargetId.add(sharingtargetid); l++; } return metadata; } } private void dismissProgressDialog() { DialogFragment dialogfragment = (DialogFragment)getFragmentManager().findFragmentByTag("req_pending"); if(dialogfragment != null) dialogfragment.dismiss(); } private void finishActivity(int i) { getActivity().setResult(i, null); getActivity().finish(); } private AudienceData createAudience() { AudienceData audiencedata; CircleData circledata; if(mHasPublicCircle) circledata = new CircleData("0", 9, getString(R.string.acl_public), 0); else if(mDomainName != null) circledata = new CircleData("v.domain", 8, mDomainName, 0); else circledata = new CircleData("1c", 5, getString(R.string.acl_your_circles), 0); audiencedata = new AudienceData(circledata); return audiencedata; } private AudienceData getAudience(Metadata metadata) { if(null == metadata || null == metadata.scope) { return createAudience(); } if("PRIVATE".equals(metadata.scope)) { return new AudienceData(new CircleData("v.private", 101, getString(R.string.acl_private), 1)); } if(metadata.sharingRoster != null && metadata.sharingRoster.sharingTargetId != null) { ArrayList arraylist = new ArrayList(); ArrayList arraylist1 = new ArrayList(); List list = metadata.sharingRoster.sharingTargetId; int i = list.size(); int j = 0; while(j < i) { SharingTargetId sharingtargetid = (SharingTargetId)list.get(j); if(sharingtargetid.groupType != null) { if("PUBLIC".equals(sharingtargetid.groupType)) arraylist1.add(new CircleData("0", 9, getString(R.string.acl_public), 0)); else if("DASHER_DOMAIN".equals(sharingtargetid.groupType)) arraylist1.add(new CircleData(mDomainId, 8, mDomainName, 1)); else if("EXTENDED_CIRCLES".equals(sharingtargetid.groupType)) arraylist1.add(new CircleData("1f", 7, getString(R.string.acl_extended_network), 0)); else if("YOUR_CIRCLES".equals(sharingtargetid.groupType)) arraylist1.add(new CircleData("1c", 5, getString(R.string.acl_your_circles), 0)); } else if(sharingtargetid.circleId != null) { String s1 = getCircleNameFromSharingRoster(sharingtargetid.circleId); arraylist1.add(new CircleData(EsPeopleData.getCircleId(sharingtargetid.circleId), 1, s1, 1)); } else if(sharingtargetid.personId != null && sharingtargetid.personId != null && sharingtargetid.personId.obfuscatedGaiaId != null) { String s = getPersonNameFromSharingRoster(sharingtargetid.personId.obfuscatedGaiaId); arraylist.add(new PersonData(sharingtargetid.personId.obfuscatedGaiaId, s, null)); } j++; } if(arraylist.isEmpty() && arraylist1.isEmpty()) arraylist1.add(new CircleData("v.private", 101, getString(R.string.acl_private), 1)); return new AudienceData(arraylist, arraylist1); } else { return createAudience(); } } private String getCircleNameFromSharingRoster(String s) { return getNameFromSharingRoster(1, s); } private static boolean getCurrent(View view, int i) { CheckBox checkbox = (CheckBox)view.findViewById(i); boolean flag; if(checkbox != null && checkbox.isChecked()) flag = true; else flag = false; return flag; } private static String getEditedString(View view, int i) { EditText edittext = (EditText)view.findViewById(i); String s; if(edittext != null) s = edittext.getText().toString(); else s = null; return s; } private String getNameFromSharingRoster(int i, String s) { if(mSharingRosterData == null && !TextUtils.isEmpty(mSharingRosterDataJson)) mSharingRosterData = (SharingRosterData)JsonUtil.toBean(mSharingRosterDataJson, SharingRosterData.class); if(mSharingRosterData == null || mSharingRosterData.targets == null) return null; int size = mSharingRosterData.targets.size(); for(int k = 0; k < size; k++) { SharingTarget sharingtarget = (SharingTarget)mSharingRosterData.targets.get(k); if(null != sharingtarget.id) { if(1 == i) { if(TextUtils.equals(sharingtarget.id.circleId, s)) { return sharingtarget.displayName; } } else if(2 == i) { if(null != sharingtarget.id.personId && TextUtils.equals(sharingtarget.id.personId.obfuscatedGaiaId, s)) { return sharingtarget.displayName; } } else if(3 == i) { if("DASHER_DOMAIN".equals(sharingtarget.id.groupType)) { return sharingtarget.displayName; } } } } return null; } private String getPersonNameFromSharingRoster(String s) { return getNameFromSharingRoster(2, s); } private View getView(Education education, ItemViewIds itemviewids) { if(itemviewids == null) { int i = mViewIdNextName; mViewIdNextName = i + 1; int j = mViewIdNextTitleOrMajor; mViewIdNextTitleOrMajor = j + 1; int k = mViewIdNextStartDate; mViewIdNextStartDate = k + 1; int l = mViewIdNextEndDate; mViewIdNextEndDate = l + 1; int i1 = mViewIdNextCurrent; mViewIdNextCurrent = i1 + 1; itemviewids = new ItemViewIds(i, j, k, l, i1); } View view = getActivity().getLayoutInflater().inflate(R.layout.profile_edit_item_education, null); view.setTag(itemviewids); EditText edittext = (EditText)view.findViewById(R.id.name); edittext.setId(itemviewids.name); String s; EditText edittext1; String s1; DateInfo dateinfo; if(education != null) s = education.school; else s = ""; edittext.setText(s); edittext1 = (EditText)view.findViewById(R.id.title); edittext1.setId(itemviewids.titleOrMajor); if(education != null) s1 = education.majorConcentration; else s1 = ""; edittext1.setText(s1); dateinfo = null; if(education != null) dateinfo = education.dateInfo; configureDataInfo(view, itemviewids, dateinfo); return view; } private View getView(Employment employment, ItemViewIds itemviewids) { if(itemviewids == null) { int i = mViewIdNextName; mViewIdNextName = i + 1; int j = mViewIdNextTitleOrMajor; mViewIdNextTitleOrMajor = j + 1; int k = mViewIdNextStartDate; mViewIdNextStartDate = k + 1; int l = mViewIdNextEndDate; mViewIdNextEndDate = l + 1; int i1 = mViewIdNextCurrent; mViewIdNextCurrent = i1 + 1; itemviewids = new ItemViewIds(i, j, k, l, i1); } View view = getActivity().getLayoutInflater().inflate(R.layout.profile_edit_item_employment, null); view.setTag(itemviewids); EditText edittext = (EditText)view.findViewById(R.id.name); edittext.setId(itemviewids.name); String s; EditText edittext1; String s1; DateInfo dateinfo; if(employment != null) s = employment.employer; else s = ""; edittext.setText(s); edittext1 = (EditText)view.findViewById(R.id.title); edittext1.setId(itemviewids.titleOrMajor); if(employment != null) s1 = employment.title; else s1 = ""; edittext1.setText(s1); dateinfo = null; if(employment != null) dateinfo = employment.dateInfo; configureDataInfo(view, itemviewids, dateinfo); return view; } private View getView(String s, String s1, ItemViewIds itemviewids) { if(itemviewids == null) { int i = mViewIdNextName; mViewIdNextName = i + 1; int j = mViewIdNextTitleOrMajor; mViewIdNextTitleOrMajor = j + 1; int k = mViewIdNextStartDate; mViewIdNextStartDate = k + 1; int l = mViewIdNextEndDate; mViewIdNextEndDate = l + 1; int i1 = mViewIdNextCurrent; mViewIdNextCurrent = i1 + 1; itemviewids = new ItemViewIds(i, j, k, l, i1); } View view = getActivity().getLayoutInflater().inflate(R.layout.profile_edit_item_location, null); view.setTag(itemviewids); EditText edittext = (EditText)view.findViewById(R.id.name); edittext.setId(itemviewids.name); edittext.setText(s); CheckBox checkbox = (CheckBox)view.findViewById(R.id.current); checkbox.setId(itemviewids.current); checkbox.setTag(view); boolean flag; ImageView imageview; if(s1 != null && s1.equals(s)) flag = true; else flag = false; checkbox.setChecked(flag); imageview = (ImageView)view.findViewById(R.id.delete_item); imageview.setOnClickListener(this); imageview.setTag(view); return view; } private AudienceData normalizeAudience(AudienceData audiencedata) { Arrays.sort(audiencedata.getUsers(), new Comparator() { public final int compare(Object obj, Object obj1) { PersonData persondata = (PersonData)obj; PersonData persondata1 = (PersonData)obj1; return ProfileEditFragment.access$600(ProfileEditFragment.this, persondata.getObfuscatedId(), persondata1.getObfuscatedId()); } }); Arrays.sort(audiencedata.getCircles(), new Comparator() { public final int compare(Object obj, Object obj1) { CircleData circledata = (CircleData)obj; CircleData circledata1 = (CircleData)obj1; int i = circledata.getType() - circledata1.getType(); if(i == 0) if(circledata.getType() != 1) i = 0; else i = ProfileEditFragment.access$600(ProfileEditFragment.this, circledata.getId(), circledata1.getId()); return i; } }); return audiencedata; } private void onCancel() { if(mSaveButton.isEnabled()) { SoftInput.hide(mFocusOverrideView); AlertFragmentDialog alertfragmentdialog = AlertFragmentDialog.newInstance(getString(R.string.app_name), getString(R.string.profile_edit_items_exit_unsaved), getString(R.string.yes), getString(R.string.no)); alertfragmentdialog.setListener(new AlertFragmentDialog.AlertDialogListener() { 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) { finishActivity(0); } }); alertfragmentdialog.show(getFragmentManager(), "quit"); } else { finishActivity(0); } } private void removeChangedField(View view) { mModifiedViews.remove(view); boolean flag; boolean flag1; if(mOriginalCount == 0 && mItemViews.getChildCount() == 0) flag = true; else flag = false; if(mModifiedViews.size() == 1 && mModifiedViews.contains(mAudienceView)) flag1 = true; else flag1 = false; if(mModifiedViews.size() == 0 || flag1 && flag) mSaveButton.setEnabled(false); } private void removeFocus() { if(mFocusOverrideView != null) mFocusOverrideView.requestFocus(); SoftInput.hide(getView()); } private boolean showErrorToast(ServiceResult serviceresult) { if(serviceresult != null && !serviceresult.hasError()) { Exception exception = serviceresult.getException(); if(exception == null) return false; } String s; if(serviceresult != null && serviceresult.getException() != null) { String s1 = serviceresult.getException().getMessage(); s = getString(R.string.profile_edit_update_error, new Object[] { s1 }); } else { s = getString(R.string.transient_server_error); } Toast.makeText(getActivity(), s, 1).show(); return true; } private void updateViewsWithDateInfoValues(View view, ItemViewIds itemviewids, DateInfo dateinfo) { boolean flag = true; boolean flag1; String s; EditText edittext; EditTextWatcher edittextwatcher; boolean flag2; String s1; EditText edittext1; EditTextWatcher edittextwatcher1; CheckBox checkbox; CheckboxWatcher checkboxwatcher; if(dateinfo != null && dateinfo.start != null && dateinfo.start.year != null) flag1 = flag; else flag1 = false; if(flag1) s = Integer.toString(dateinfo.start.year.intValue()); else s = ""; edittext = (EditText)view.findViewById(itemviewids.startDate); edittextwatcher = new EditTextWatcher(edittext, s); edittextwatcher.onTextChanged(edittext.getText(), 0, 0, 0); edittext.addTextChangedListener(edittextwatcher); if(dateinfo != null && dateinfo.end != null && dateinfo.end.year != null) flag2 = flag; else flag2 = false; if(flag2) s1 = Integer.toString(dateinfo.end.year.intValue()); else s1 = ""; edittext1 = (EditText)view.findViewById(itemviewids.endDate); edittextwatcher1 = new EditTextWatcher(edittext1, s1); if(dateinfo == null || !PrimitiveUtils.safeBoolean(dateinfo.current)) flag = false; checkbox = (CheckBox)view.findViewById(itemviewids.current); checkboxwatcher = new CheckboxWatcher(edittext1, edittextwatcher1, flag); checkboxwatcher.onCheckedChanged(checkbox, checkbox.isChecked()); checkbox.setOnCheckedChangeListener(checkboxwatcher); } private void updateViewsWithOriginalValues() { mModifiedViews.clear(); mSaveButton.setEnabled(false); if(1 == mEditMode) { int i2; int j2; if(mOriginalEmployments.employment != null) i2 = mOriginalEmployments.employment.size(); else i2 = 0; j2 = mItemViews.getChildCount(); if(j2 == 0) { if(i2 != 0) mSaveButton.setEnabled(true); } else { int k2 = 0; while(k2 < j2) { Employment employment; View view2; ItemViewIds itemviewids2; String s3; EditText edittext3; EditTextWatcher edittextwatcher3; String s4; EditText edittext4; EditTextWatcher edittextwatcher4; DateInfo dateinfo1; if(k2 < i2) employment = (Employment)mOriginalEmployments.employment.get(k2); else employment = null; view2 = mItemViews.getChildAt(k2); itemviewids2 = (ItemViewIds)view2.getTag(); if(employment != null) s3 = employment.employer; else s3 = ""; edittext3 = (EditText)view2.findViewById(itemviewids2.name); edittextwatcher3 = new EditTextWatcher(edittext3, s3); edittextwatcher3.onTextChanged(edittext3.getText(), 0, 0, 0); edittext3.addTextChangedListener(edittextwatcher3); if(employment != null) s4 = employment.title; else s4 = ""; edittext4 = (EditText)view2.findViewById(itemviewids2.titleOrMajor); edittextwatcher4 = new EditTextWatcher(edittext4, s4); edittextwatcher4.onTextChanged(edittext4.getText(), 0, 0, 0); edittext4.addTextChangedListener(edittextwatcher4); if(employment != null) dateinfo1 = employment.dateInfo; else dateinfo1 = null; updateViewsWithDateInfoValues(view2, itemviewids2, dateinfo1); k2++; } if(i2 > j2) addChangedField(mDeletedFieldView); } } else if(2 == mEditMode) { int j1; int k1; if(mOriginalEducations.education != null) j1 = mOriginalEducations.education.size(); else j1 = 0; k1 = mItemViews.getChildCount(); if(k1 == 0) { if(j1 != 0) mSaveButton.setEnabled(true); } else { int l1 = 0; while(l1 < k1) { Education education; View view1; ItemViewIds itemviewids1; String s1; EditText edittext1; EditTextWatcher edittextwatcher1; String s2; EditText edittext2; EditTextWatcher edittextwatcher2; DateInfo dateinfo; if(l1 < j1) education = (Education)mOriginalEducations.education.get(l1); else education = null; view1 = mItemViews.getChildAt(l1); itemviewids1 = (ItemViewIds)view1.getTag(); if(education != null) s1 = education.school; else s1 = ""; edittext1 = (EditText)view1.findViewById(itemviewids1.name); edittextwatcher1 = new EditTextWatcher(edittext1, s1); edittextwatcher1.onTextChanged(edittext1.getText(), 0, 0, 0); edittext1.addTextChangedListener(edittextwatcher1); if(education != null) s2 = education.majorConcentration; else s2 = ""; edittext2 = (EditText)view1.findViewById(itemviewids1.titleOrMajor); edittextwatcher2 = new EditTextWatcher(edittext2, s2); edittextwatcher2.onTextChanged(edittext2.getText(), 0, 0, 0); edittext2.addTextChangedListener(edittextwatcher2); if(education != null) dateinfo = education.dateInfo; else dateinfo = null; updateViewsWithDateInfoValues(view1, itemviewids1, dateinfo); l1++; } if(j1 > k1) addChangedField(mDeletedFieldView); } } else if(3 == mEditMode) { int i; int j; int k; if(mOriginalLocations.otherLocation != null) i = mOriginalLocations.otherLocation.size(); else i = 0; j = mItemViews.getChildCount(); k = 0; if(j == 0) { if(mOriginalLocations.currentLocation != null || mOriginalLocations.otherLocation != null && mOriginalLocations.otherLocation.size() > 0) mSaveButton.setEnabled(true); } else { int l = 0; while(l < j) { String s; boolean flag; View view; ItemViewIds itemviewids; EditText edittext; EditTextWatcher edittextwatcher; CheckBox checkbox; LocationCheckboxWatcher locationcheckboxwatcher; if(l == 0 && !TextUtils.isEmpty(mOriginalLocations.currentLocation)) { s = mOriginalLocations.currentLocation; flag = true; k = 1; } else { int i1 = l - k; if(i1 < i) s = (String)mOriginalLocations.otherLocation.get(i1); else s = ""; flag = false; } view = mItemViews.getChildAt(l); itemviewids = (ItemViewIds)view.getTag(); edittext = (EditText)view.findViewById(itemviewids.name); edittextwatcher = new EditTextWatcher(edittext, s); edittextwatcher.onTextChanged(edittext.getText(), 0, 0, 0); edittext.addTextChangedListener(edittextwatcher); checkbox = (CheckBox)view.findViewById(itemviewids.current); locationcheckboxwatcher = new LocationCheckboxWatcher(flag); locationcheckboxwatcher.onCheckedChanged(checkbox, checkbox.isChecked()); checkbox.setOnCheckedChangeListener(locationcheckboxwatcher); l++; } if(i > j - k) addChangedField(mDeletedFieldView); } } } public final void onActivityResult(int i, int j, Intent intent) { if(j == -1) { switch(i) { case 1: // '\001' if(intent != null) { AudienceData audiencedata = (AudienceData)intent.getParcelableExtra("audience"); if(audiencedata != null) { mAudienceView.replaceAudience(audiencedata); if(mOriginalAudience.equals(normalizeAudience(audiencedata.clone()))) removeChangedField(mAudienceView); else addChangedField(mAudienceView); } } break; } } } public void onClick(View view) { int i = view.getId(); if(i == R.id.cancel) { onCancel(); return; } else if(i == R.id.save) { removeFocus(); SoftInput.hide(getView()); if(1 == mEditMode || 3 == mEditMode) { SimpleProfile simpleprofile; if(1 == mEditMode) { Employments employments = createEmployments(); simpleprofile = new SimpleProfile(); simpleprofile.user = new User(); simpleprofile.user.employments = employments; simpleprofile.user.employments.metadata = createMetadata(); } else { Locations locations = createLocations(false); simpleprofile = new SimpleProfile(); simpleprofile.user = new User(); simpleprofile.user.locations = locations; simpleprofile.user.locations.metadata = createMetadata(); } mProfilePendingRequestId = EsService.mutateProfile(getActivity(), mAccount, simpleprofile); ProgressFragmentDialog.newInstance(null, getString(R.string.profile_edit_updating), false).show(getFragmentManager(), "req_pending"); } else if(2 == mEditMode) { Educations educations = createEducations(); SimpleProfile simpleprofile = new SimpleProfile(); simpleprofile.user = new User(); simpleprofile.user.educations = educations; simpleprofile.user.educations.metadata = createMetadata(); } } else if(i == R.id.add_item) { View view1 = addItem(); if(view1 != null) { View view2 = view1.findViewById(((ItemViewIds)view1.getTag()).name); view2.requestFocus(); SoftInput.show(view2); } } else if(i == R.id.delete_item) { final View itemToBeRemoved = (View)view.getTag(); android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(getActivity()); builder.setMessage(R.string.profile_edit_item_remove_confirm); builder.setPositiveButton(R.string.profile_edit_item_remove, new android.content.DialogInterface.OnClickListener() { public final void onClick(DialogInterface dialoginterface, int j) { mItemViews.removeView(itemToBeRemoved); updateViewsWithOriginalValues(); } }); builder.setNegativeButton(0x1040000, new android.content.DialogInterface.OnClickListener() { public final void onClick(DialogInterface dialoginterface, int j) { dialoginterface.dismiss(); } }); builder.show(); } else if(i == R.id.audience) { removeFocus(); SimpleAudiencePickerDialog simpleaudiencepickerdialog = SimpleAudiencePickerDialog.newInstance(mDomainName, mDomainId, mHasPublicCircle); simpleaudiencepickerdialog.setTargetFragment(this, 0); simpleaudiencepickerdialog.show(getFragmentManager(), "simple_audience"); } } public final void onCreate(Bundle bundle) { super.onCreate(bundle); if(bundle != null) { mDomainName = bundle.getString("domain_name"); mDomainId = bundle.getString("domain_id"); mHasPublicCircle = bundle.getBoolean("has_public_circle"); mItemsJson = bundle.getString("items_json"); mAudience = (AudienceData)bundle.getParcelable("audience"); mOriginalRequiredScopeId = bundle.getString("required_scope_id"); mItemViewIdsList = (ArrayList)bundle.getSerializable("items"); mViewIdNextName = bundle.getInt("next_name"); mViewIdNextTitleOrMajor = bundle.getInt("next_title"); mViewIdNextStartDate = bundle.getInt("next_start"); mViewIdNextEndDate = bundle.getInt("next_end"); mViewIdNextCurrent = bundle.getInt("next_current"); } mEditMode = getArguments().getInt("profile_edit_mode"); mAccount = (EsAccount)getArguments().getParcelable("account"); mOriginalItemsJson = getArguments().getString("profile_edit_items_json"); if(mItemsJson == null) mItemsJson = mOriginalItemsJson; mSharingRosterDataJson = getArguments().getString("profile_edit_roster_json"); if(1 == mEditMode) { mOriginalEmployments = (Employments)JsonUtil.toBean(mOriginalItemsJson, Employments.class); mOriginalAudience = normalizeAudience(getAudience(mOriginalEmployments.metadata)); int l; if(mOriginalEmployments.employment != null) l = mOriginalEmployments.employment.size(); else l = 0; mOriginalCount = l; } else if(2 == mEditMode) { mOriginalEducations = (Educations)JsonUtil.toBean(mOriginalItemsJson, Educations.class); mOriginalAudience = normalizeAudience(getAudience(mOriginalEducations.metadata)); List list1 = mOriginalEducations.education; int k = 0; if(list1 != null) k = mOriginalEducations.education.size(); mOriginalCount = k; } else if(3 == mEditMode) { mOriginalLocations = (Locations)JsonUtil.toBean(mOriginalItemsJson, Locations.class); mOriginalAudience = normalizeAudience(getAudience(mOriginalLocations.metadata)); int i; List list; int j; if(!TextUtils.isEmpty(mOriginalLocations.currentLocation)) i = 1; else i = 0; list = mOriginalLocations.otherLocation; j = 0; if(list != null) j = mOriginalLocations.otherLocation.size(); mOriginalCount = i + j; } } public final View onCreateView(LayoutInflater layoutinflater, ViewGroup viewgroup, Bundle bundle) { int i = mEditMode; Metadata metadata; int j = 0; View view = layoutinflater.inflate(R.layout.profile_edit_items, null); mFocusOverrideView = view.findViewById(R.id.focus_override); mDeletedFieldView = new View(getActivity()); ((ImageTextButton)view.findViewById(R.id.cancel)).setOnClickListener(this); mSaveButton = (ImageTextButton)view.findViewById(R.id.save); mSaveButton.setOnClickListener(this); mScollView = (ScrollView)view.findViewById(R.id.scroller); mItemViews = (LinearLayout)view.findViewById(R.id.items); CircleData circledata = EsPeopleData.getCircleData(getActivity(), mAccount, 8); if(circledata != null) { mDomainName = circledata.getName(); mDomainId = circledata.getId(); } mHasPublicCircle = EsPeopleData.hasPublicCircle(getActivity(), mAccount); metadata = null; if(1 == i) { boolean flag3 = TextUtils.isEmpty(mItemsJson); metadata = null; j = 0; if(!flag3) { Employments employments = (Employments)JsonUtil.toBean(mItemsJson, Employments.class); metadata = null; j = 0; if(employments != null) { List list1 = employments.employment; metadata = null; j = 0; if(list1 != null) { j = employments.employment.size(); int l1 = 0; while(l1 < j) { Employment employment = (Employment)employments.employment.get(l1); ItemViewIds itemviewids2; View view4; if(mItemViewIdsList != null && mItemViewIdsList.size() > l1) itemviewids2 = (ItemViewIds)mItemViewIdsList.get(l1); else itemviewids2 = null; view4 = getView(employment, itemviewids2); mItemViews.addView(view4); l1++; } metadata = employments.metadata; } } } } else if(2 == i) { boolean flag2 = TextUtils.isEmpty(mItemsJson); metadata = null; j = 0; if(!flag2) { Educations educations = (Educations)JsonUtil.toBean(mItemsJson, Educations.class); metadata = null; j = 0; if(educations != null) { List list = educations.education; metadata = null; j = 0; if(list != null) { j = educations.education.size(); int k1 = 0; while(k1 < j) { Education education = (Education)educations.education.get(k1); ItemViewIds itemviewids1; View view3; if(mItemViewIdsList != null && mItemViewIdsList.size() > k1) itemviewids1 = (ItemViewIds)mItemViewIdsList.get(k1); else itemviewids1 = null; view3 = getView(education, itemviewids1); mItemViews.addView(view3); k1++; } metadata = educations.metadata; } } } } else if(3 == i) { boolean flag = TextUtils.isEmpty(mItemsJson); metadata = null; j = 0; if(!flag) { Locations locations = (Locations)JsonUtil.toBean(mItemsJson, Locations.class); metadata = null; j = 0; if(locations != null) { String s = locations.currentLocation; boolean flag1 = TextUtils.isEmpty(s); int k = 0; if(!flag1) if(s.startsWith("~~Internal~CurrentLocation.")) { s = locations.currentLocation.substring(27); } else { View view2 = getView(s, s, null); mItemViews.addView(view2); k = 1; } if(locations.otherLocation != null) { int i1 = locations.otherLocation.size(); k += i1; int j1 = 0; while(j1 < i1) { ItemViewIds itemviewids; View view1; if(mItemViewIdsList != null && mItemViewIdsList.size() > j1) itemviewids = (ItemViewIds)mItemViewIdsList.get(j1); else itemviewids = null; view1 = getView((String)locations.otherLocation.get(j1), s, itemviewids); mItemViews.addView(view1); j1++; } } metadata = locations.metadata; j = k; } } } if(j == 0) addItem(); int l = 0; if(1 == mEditMode) { l = R.string.profile_add_a_job; } else if(2 == mEditMode) { l = R.string.profile_add_a_school; } else if(3 == mEditMode) { l = R.string.profile_add_a_place; } mAddItemView = (TextView)view.findViewById(R.id.add_item); mAddItemView.setText(l); mAddItemView.setOnClickListener(this); if(mAudience == null) mAudience = getAudience(metadata); mAudienceView = (TextOnlyAudienceView)view.findViewById(R.id.audience); mAudienceView.setAccount(mAccount); mAudienceView.setOnClickListener(this); mAudienceView.setChevronDirection(TextOnlyAudienceView.ChevronDirection.POINT_RIGHT); mAudienceView.replaceAudience(mAudience); if(bundle == null) mFocusOverrideView.requestFocus(); updateViewsWithOriginalValues(); return view; } public final void onDiscard() { onCancel(); } public final void onPause() { super.onPause(); EsService.unregisterListener(mProfileEditServiceListener); } public final void onResume() { super.onResume(); EsService.registerListener(mProfileEditServiceListener); if(mProfilePendingRequestId != null && !EsService.isRequestPending(mProfilePendingRequestId.intValue())) { ServiceResult serviceresult = EsService.removeResult(mProfilePendingRequestId.intValue()); mProfilePendingRequestId = null; dismissProgressDialog(); if(!showErrorToast(serviceresult)) finishActivity(-1); } } public final void onSaveInstanceState(Bundle bundle) { String s = null; bundle.putParcelable("audience", mAudience); if(1 == mEditMode) { Employments employments = createEmployments(); s = employments.toJsonString(); } else if(2 == mEditMode) { Educations educations = createEducations(); s = educations.toJsonString(); } else if(3 == mEditMode) { Locations locations = createLocations(true); s = locations.toJsonString(); } bundle.putString("items_json", s); if(mDomainName != null) bundle.putString("domain_name", mDomainName); if(mDomainId != null) bundle.putString("domain_id", mDomainId); bundle.putBoolean("has_public_circle", mHasPublicCircle); bundle.putString("required_scope_id", mOriginalRequiredScopeId); int i = mItemViews.getChildCount(); if(i > 0) { if(mItemViewIdsList == null) mItemViewIdsList = new ArrayList(); mItemViewIdsList.clear(); for(int j = 0; j < i; j++) { View view = mItemViews.getChildAt(j); mItemViewIdsList.add((ItemViewIds)view.getTag()); } } bundle.putSerializable("items", mItemViewIdsList); bundle.putInt("next_name", mViewIdNextName); bundle.putInt("next_title", mViewIdNextTitleOrMajor); bundle.putInt("next_start", mViewIdNextStartDate); bundle.putInt("next_end", mViewIdNextEndDate); bundle.putInt("next_current", mViewIdNextCurrent); super.onSaveInstanceState(bundle); return; } public final void onSetSimpleAudience(String s, int i, String s1) { if(i > 0) { AudienceData audiencedata = new AudienceData(new CircleData(s, i, s1, 1)); mAudienceView.replaceAudience(audiencedata); mOriginalAudience.equals(audiencedata); addChangedField(mAudienceView); } else { AudienceData audiencedata1 = mAudienceView.getAudience(); if(audiencedata1.getCircleCount() == 1 && "v.private".equals(audiencedata1.getCircle(0).getId())) audiencedata1 = null; Intent intent = Intents.getEditAudienceActivityIntent(getActivity(), mAccount, getString(R.string.profile_edit_item_acl_picker), audiencedata1, 5, false, true, true, false); SoftInput.hide(getView()); startActivityForResult(intent, 1); } } static int access$600(ProfileEditFragment profileeditfragment, String s, String s1) { int i; if(s == null && s1 == null) i = 0; else if(s1 == null) i = -1; else if(s == null) i = 1; else i = s.compareTo(s1); return i; } //================================================================================================================== // Inner class //================================================================================================================== private final class CheckboxWatcher implements android.widget.CompoundButton.OnCheckedChangeListener { private final EditText mLinkedEditText; private String mLinkedEditTextPreviousValue; private final EditTextWatcher mLinkedEditTextWatcher; private final boolean mOriginalCurrent; public CheckboxWatcher(EditText edittext, EditTextWatcher edittextwatcher, boolean flag) { super(); mLinkedEditText = edittext; mLinkedEditTextWatcher = edittextwatcher; mOriginalCurrent = flag; } public final void onCheckedChanged(CompoundButton compoundbutton, boolean flag) { boolean flag1 = true; EditText edittext; if(flag) { mLinkedEditTextPreviousValue = mLinkedEditText.getText().toString(); removeChangedField(mLinkedEditText); mLinkedEditText.removeTextChangedListener(mLinkedEditTextWatcher); Calendar calendar = Calendar.getInstance(); mLinkedEditText.setText(Integer.toString(calendar.get(1))); } else { if(mLinkedEditTextPreviousValue == null) mLinkedEditTextPreviousValue = mLinkedEditText.getText().toString(); mLinkedEditText.addTextChangedListener(mLinkedEditTextWatcher); mLinkedEditText.setText(mLinkedEditTextPreviousValue); } edittext = mLinkedEditText; if(flag) flag1 = false; edittext.setEnabled(flag1); if(mOriginalCurrent == flag) removeChangedField(compoundbutton); else addChangedField(compoundbutton); } } private final class EditTextWatcher implements TextWatcher { private final String mOriginalValue; private final View mView; public EditTextWatcher(View view, String s) { super(); mView = view; mOriginalValue = s; } 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) { if(charsequence.toString().equals(mOriginalValue)) removeChangedField(mView); else addChangedField(mView); } } public static final class ItemViewIds implements Serializable { public int current; public int endDate; public int name; public int startDate; public int titleOrMajor; public ItemViewIds(int i, int j, int k, int l, int i1) { name = i; titleOrMajor = j; startDate = k; endDate = l; current = i1; } } private final class LocationCheckboxWatcher implements android.widget.CompoundButton.OnCheckedChangeListener { private final boolean mOriginalValue; public LocationCheckboxWatcher(boolean flag) { super(); mOriginalValue = flag; } public final void onCheckedChanged(CompoundButton compoundbutton, boolean flag) { if(flag) { View view = (View)compoundbutton.getTag(); LinearLayout linearlayout = (LinearLayout)view.getParent(); int i = linearlayout.getChildCount(); for(int j = 0; j < i; j++) { View view1 = linearlayout.getChildAt(j); if(view1 != view) ((CheckBox)view1.findViewById(((ItemViewIds)view1.getTag()).current)).setChecked(false); } } if(mOriginalValue == flag) removeChangedField(compoundbutton); else addChangedField(compoundbutton); } } }