package com.appboy.sample; import android.app.DatePickerDialog; import android.content.Context; import android.content.SharedPreferences; import android.preference.DialogPreference; import android.util.AttributeSet; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.CheckBox; import android.widget.DatePicker; import android.widget.EditText; import android.widget.RadioGroup; import android.widget.TextView; import com.appboy.Appboy; import com.appboy.AppboyUser; import com.appboy.Constants; import com.appboy.enums.Gender; import com.appboy.enums.Month; import com.appboy.sample.util.ButtonUtils; import com.appboy.support.StringUtils; import java.util.Calendar; public class UserProfileDialog extends DialogPreference implements View.OnClickListener { private static final String TAG = String.format("%s.%s", Constants.APPBOY_LOG_TAG_PREFIX, UserProfileDialog.class.getName()); private static final int GENDER_UNSPECIFIED_INDEX = 0; private static final int GENDER_MALE_INDEX = 1; private static final int GENDER_FEMALE_INDEX = 2; private static final Calendar mCalendar = Calendar.getInstance(); private static final String FIRST_NAME_PREFERENCE_KEY = "user.firstname"; private static final String LAST_NAME_PREFERENCE_KEY = "user.lastname"; private static final String EMAIL_PREFERENCE_KEY = "user.email"; private static final String GENDER_PREFERENCE_KEY = "user.gender_resource_id"; private static final String AVATAR_PREFERENCE_KEY = "user.avatar_image_url"; private static final String BIRTHDAY_PREFERENCE_KEY = "user.birthday"; private static final String SAMPLE_FIRST_NAME = "Jane"; private static final String SAMPLE_LAST_NAME = "Doe"; private static final String SAMPLE_EMAIL = "jane@appboy.com"; private static final int SAMPLE_GENDER = R.id.female; private static final String SAMPLE_AVATAR_URL = "https://s3.amazonaws.com/appboy-dashboard-uploads/news/default-news-image.png"; private static final String SAMPLE_BIRTHDAY = Integer.toString(mCalendar.get(Calendar.MONTH) + 1) + "/" + mCalendar.get(Calendar.DAY_OF_MONTH) + "/" + mCalendar.get(Calendar.YEAR); private EditText mFirstName; private EditText mLastName; private EditText mEmail; private RadioGroup mGender; private EditText mAvatarImageUrl; private CheckBox mRequestFlush; private TextView mBirthday; private DatePickerDialog mDatePickerDialog; private int mBirthYear; private int mBirthMonth; private int mBirthDay; private boolean isBirthdaySet = false; public UserProfileDialog(Context context, AttributeSet attrs) { super(context, attrs); setDialogLayoutResource(R.layout.user_preferences); setPersistent(false); } public UserProfileDialog(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); setDialogLayoutResource(R.layout.user_preferences); setPersistent(false); } @Override public View onCreateDialogView() { View view = super.onCreateDialogView(); mFirstName = (EditText) view.findViewById(R.id.first_name); mLastName = (EditText) view.findViewById(R.id.last_name); mEmail = (EditText) view.findViewById(R.id.email); mGender = (RadioGroup) view.findViewById(R.id.gender); mAvatarImageUrl = (EditText) view.findViewById(R.id.avatar_image_url); mRequestFlush = (CheckBox) view.findViewById(R.id.user_dialog_flush_checkbox); mBirthday = (TextView) view.findViewById(R.id.birthday); return view; } @Override protected void onBindDialogView(View view) { super.onBindDialogView(view); SharedPreferences sharedPreferences = getSharedPreferences(); mFirstName.setText(sharedPreferences.getString(FIRST_NAME_PREFERENCE_KEY, null)); mLastName.setText(sharedPreferences.getString(LAST_NAME_PREFERENCE_KEY, null)); mEmail.setText(sharedPreferences.getString(EMAIL_PREFERENCE_KEY, null)); mGender.check(parseGenderFromSharedPreferences()); mAvatarImageUrl.setText(sharedPreferences.getString(AVATAR_PREFERENCE_KEY, null)); mBirthday.setText(sharedPreferences.getString(BIRTHDAY_PREFERENCE_KEY, null)); mRequestFlush.setChecked(false); ButtonUtils.setUpPopulateButton(view, R.id.first_name_button, mFirstName, getSharedPreferences().getString(FIRST_NAME_PREFERENCE_KEY, SAMPLE_FIRST_NAME)); ButtonUtils.setUpPopulateButton(view, R.id.last_name_button, mLastName, getSharedPreferences().getString(LAST_NAME_PREFERENCE_KEY, SAMPLE_LAST_NAME)); ButtonUtils.setUpPopulateButton(view, R.id.email_button, mEmail, getSharedPreferences().getString(EMAIL_PREFERENCE_KEY, SAMPLE_EMAIL)); ButtonUtils.setUpPopulateButton(view, R.id.avatar_image_url_button, mAvatarImageUrl, getSharedPreferences().getString(AVATAR_PREFERENCE_KEY, SAMPLE_AVATAR_URL)); final Button populateButton = (Button) view.findViewById(R.id.user_dialog_button_populate); final Button clearButton = (Button) view.findViewById(R.id.user_dialog_button_clear); final Button birthdayButton = (Button) view.findViewById(R.id.birthday_button); populateButton.setOnClickListener(this); clearButton.setOnClickListener(this); birthdayButton.setOnClickListener(this); mDatePickerDialog = new DatePickerDialog(getContext(), new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { mBirthYear = year; mBirthMonth = monthOfYear; mBirthDay = dayOfMonth; mBirthday.setText(getBirthday()); isBirthdaySet = true; } }, mCalendar.get(Calendar.YEAR), mCalendar.get(Calendar.MONTH), mCalendar.get(Calendar.DAY_OF_MONTH)); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.user_dialog_button_clear: clear(); break; case R.id.user_dialog_button_populate: populate(); break; case R.id.birthday_button: mDatePickerDialog.show(); break; default: break; } } private void clear() { mFirstName.getText().clear(); mLastName.getText().clear(); mEmail.getText().clear(); mGender.check(R.id.unspecified); mAvatarImageUrl.getText().clear(); mBirthday.setText(""); isBirthdaySet = false; } private void populate() { if (mFirstName.getText().length() == 0) { mFirstName.setText(getSharedPreferences().getString(FIRST_NAME_PREFERENCE_KEY, SAMPLE_FIRST_NAME)); } if (mLastName.getText().length() == 0) { mLastName.setText(getSharedPreferences().getString(LAST_NAME_PREFERENCE_KEY, SAMPLE_LAST_NAME)); } if (mEmail.getText().length() == 0) { mEmail.setText(getSharedPreferences().getString(EMAIL_PREFERENCE_KEY, SAMPLE_EMAIL)); } if (mGender.getCheckedRadioButtonId() == R.id.unspecified) { mGender.check(SAMPLE_GENDER); } if (mAvatarImageUrl.getText().length() == 0) { mAvatarImageUrl.setText(getSharedPreferences().getString(AVATAR_PREFERENCE_KEY, SAMPLE_AVATAR_URL)); } if (mBirthday.getText().length() == 0) { mBirthday.setText(getSharedPreferences().getString(BIRTHDAY_PREFERENCE_KEY, SAMPLE_BIRTHDAY)); isBirthdaySet = true; } } @Override public void onDialogClosed(boolean positiveResult) { if (positiveResult) { String firstName = mFirstName.getText().toString(); String lastName = mLastName.getText().toString(); String email = mEmail.getText().toString(); int genderResourceId = mGender.getCheckedRadioButtonId(); View genderRadioButton = mGender.findViewById(genderResourceId); int genderId = mGender.indexOfChild(genderRadioButton); String avatarImageUrl = mAvatarImageUrl.getText().toString(); AppboyUser appboyUser = Appboy.getInstance(getContext()).getCurrentUser(); SharedPreferences.Editor editor = getEditor(); if (!StringUtils.isNullOrBlank(firstName)) { appboyUser.setFirstName(firstName); editor.putString(FIRST_NAME_PREFERENCE_KEY, firstName); } if (!StringUtils.isNullOrBlank(lastName)) { appboyUser.setLastName(lastName); editor.putString(LAST_NAME_PREFERENCE_KEY, lastName); } if (!StringUtils.isNullOrBlank(email)) { editor.putString(EMAIL_PREFERENCE_KEY, email); appboyUser.setEmail(email); } if (!StringUtils.isNullOrBlank(avatarImageUrl)) { editor.putString(AVATAR_PREFERENCE_KEY, avatarImageUrl); appboyUser.setAvatarImageUrl(avatarImageUrl); } if (isBirthdaySet) { editor.putString(BIRTHDAY_PREFERENCE_KEY, getBirthday()); appboyUser.setDateOfBirth(mBirthYear, Month.getMonth(mBirthMonth), mBirthDay); } switch (genderId) { case GENDER_UNSPECIFIED_INDEX: appboyUser.setGender(null); break; case GENDER_MALE_INDEX: appboyUser.setGender(Gender.MALE); editor.putInt(GENDER_PREFERENCE_KEY, genderId); break; case GENDER_FEMALE_INDEX: appboyUser.setGender(Gender.FEMALE); editor.putInt(GENDER_PREFERENCE_KEY, genderId); break; default: Log.w(TAG, "Error parsing gender from user preferences."); } editor.apply(); // Flushing manually is not recommended in almost all production situations as // Appboy automatically flushes data to its servers periodically. This call // is solely for testing purposes. if (mRequestFlush.isChecked()) { Appboy.getInstance(getContext()).requestImmediateDataFlush(); } } } private String getBirthday() { return Integer.toString(mBirthMonth + 1) + "/" + mBirthDay + "/" + mBirthYear; } private int parseGenderFromSharedPreferences() { switch (getSharedPreferences().getInt(GENDER_PREFERENCE_KEY, GENDER_UNSPECIFIED_INDEX)) { case GENDER_UNSPECIFIED_INDEX: return R.id.unspecified; case GENDER_MALE_INDEX: return R.id.male; case GENDER_FEMALE_INDEX: return R.id.female; default: Log.w(TAG, "Error parsing gender from shared preferences."); return R.id.unspecified; } } }