package edu.mit.mitmobile2.libraries; import java.util.Arrays; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.Button; import android.widget.EditText; import android.widget.Spinner; import android.widget.SpinnerAdapter; import android.widget.AdapterView.OnItemSelectedListener; import edu.mit.mitmobile2.FullScreenLoader; import edu.mit.mitmobile2.LockingScrollView; import edu.mit.mitmobile2.MobileWebApi; import edu.mit.mitmobile2.NewModule; import edu.mit.mitmobile2.NewModuleActivity; import edu.mit.mitmobile2.R; import edu.mit.mitmobile2.SimpleSpinnerAdapter; import edu.mit.mitmobile2.TwoLineActionRow; import edu.mit.mitmobile2.libraries.LibraryModel.FormResult; import edu.mit.mitmobile2.libraries.LibraryModel.UserIdentity; import edu.mit.mitmobile2.libraries.VerifyUserCredentials.VerifyUserCredentialsListener; public class AppointmentActivity extends NewModuleActivity { public static final String TAG = "AppointmentActivity"; private Spinner mPurposeSpinner; private Spinner mTopicSpinner; private Spinner mStatusSpinner; private EditText mResearchTopic; private EditText mResearchTimeframe; private EditText mResearchInfo; private EditText mResearchCourse; private EditText mDepartment; private EditText mPhoneNumber; private Button mSubmitButton; private TwoLineActionRow mContentResult; private TwoLineActionRow mGoHomeButton; private View mThankYouView; private FullScreenLoader mLoader; private LockingScrollView mScrollView; private String[] topicsArray; private String[] statusArray; private String[] purposeArray; private Context mContext; @Override protected void onCreate(Bundle savedInstanceState) { Log.d(TAG,"onCreate()"); super.onCreate(savedInstanceState); setContentView(R.layout.library_appointment); addSecondaryTitle("Make Appointment"); mContext = this; mScrollView = (LockingScrollView) findViewById(R.id.appointmentScrollView); mPurposeSpinner = (Spinner) findViewById(R.id.purposeSpinner); mTopicSpinner = (Spinner) findViewById(R.id.discussTopic); mTopicSpinner.setOnItemSelectedListener(mUpdateSubmitSpinnerListener); mStatusSpinner = (Spinner) findViewById(R.id.appointmentStatusSpinner); mStatusSpinner.setOnItemSelectedListener(mUpdateSubmitSpinnerListener); mResearchTopic = (EditText) findViewById(R.id.researchTopic); mResearchTopic.addTextChangedListener(mUpdateSubmitButtonTextWatcher); mResearchTimeframe = (EditText) findViewById(R.id.researchTimeframe); mResearchInfo = (EditText) findViewById(R.id.researchInfo); mResearchInfo.addTextChangedListener(mUpdateSubmitButtonTextWatcher); mResearchCourse = (EditText) findViewById(R.id.whichCourse); mDepartment = (EditText) findViewById(R.id.appointmentDepartment); mDepartment.addTextChangedListener(mUpdateSubmitButtonTextWatcher); mPhoneNumber = (EditText) findViewById(R.id.appointmentPhoneNumber); mSubmitButton = (Button) findViewById(R.id.submitAppointment); mSubmitButton.setEnabled(false); mThankYouView = findViewById(R.id.libraryAppointmentThankYou); mContentResult = (TwoLineActionRow) findViewById(R.id.librariesThankYouContentActionRow); mGoHomeButton = (TwoLineActionRow) findViewById(R.id.librariesThankYouReturnHome); mGoHomeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(mContext, getNewModule().getModuleHomeActivity()); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); } }); mLoader = (FullScreenLoader) findViewById(R.id.appointmentLoading); topicsArray = getResources().getStringArray(R.array.libraryResearchTopics); String topicTitle = getResources().getString(R.string.libraryResearchTopicTitle); SpinnerAdapter topicsAdapter = new SimpleSpinnerAdapter(this, topicTitle, Arrays.asList(topicsArray)); mTopicSpinner.setAdapter(topicsAdapter); mTopicSpinner.setPrompt(topicTitle); statusArray = getResources().getStringArray(R.array.libraryStatus); String statusTitle = getResources().getString(R.string.libraryStatusTitle); SpinnerAdapter statusAdapter = new SimpleSpinnerAdapter(this, statusTitle, Arrays.asList(statusArray)); mStatusSpinner.setAdapter(statusAdapter); mStatusSpinner.setPrompt(statusTitle); purposeArray = getResources().getStringArray(R.array.libraryResearchPurpose); SpinnerAdapter purposeAdapter = new SimpleSpinnerAdapter(this, "", Arrays.asList(purposeArray)); mPurposeSpinner.setAdapter(purposeAdapter); mSubmitButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String topic = mResearchTopic.getText().toString().trim(); String timeframe = mResearchTimeframe.getText().toString().trim(); String information = mResearchInfo.getText().toString().trim(); int position = mPurposeSpinner.getSelectedItemPosition()-1; String purpose = ""; if(position >= 0) { purpose = purposeArray[position]; } String course = mResearchCourse.getText().toString().trim(); position = mTopicSpinner.getSelectedItemPosition()-1; String researchTopic = null; if (position >= 0) { researchTopic = topicsArray[position]; } position = mStatusSpinner.getSelectedItemPosition()-1; String status = null; if (position >= 0) { String[] statusCodeArray = getResources().getStringArray(R.array.libraryStatusCode); status = statusCodeArray[position]; } String department = mDepartment.getText().toString(); String phoneNumber = mPhoneNumber.getText().toString().trim(); showLoading(); LibraryModel.sendAppointmentEmail(AppointmentActivity.this, uiHandler, topic, timeframe, information, purpose, course, researchTopic, status, department, phoneNumber); } }); showLoading(); VerifyUserCredentials.VerifyUserHasFormAccess(this, new VerifyUserCredentialsListener() { @Override public void onUserLoggedIn(UserIdentity user) { showForm(); } }); } TextWatcher mUpdateSubmitButtonTextWatcher = new TextWatcher() { @Override public void afterTextChanged(Editable s) { mSubmitButton.setEnabled(formValidates()); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } }; OnItemSelectedListener mUpdateSubmitSpinnerListener = new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View row, int position, long id) { mSubmitButton.setEnabled(formValidates()); } @Override public void onNothingSelected(AdapterView<?> parent) { } }; private boolean formValidates() { Spinner[] spinners = new Spinner[] {mTopicSpinner, mStatusSpinner}; for (int i=0; i < spinners.length; i++) { if (spinners[i].getSelectedItemPosition() < 1) { return false; } } EditText[] editTexts = new EditText[] {mResearchTopic, mResearchInfo, mDepartment}; for (int i=0; i < editTexts.length; i++) { if (editTexts[i].getText().toString().trim().length() == 0) { return false; } } return true; } private void showLoading() { mScrollView.setVisibility(View.GONE); mLoader.setVisibility(View.VISIBLE); mLoader.showLoading(); } private void showForm() { mScrollView.setVisibility(View.VISIBLE); mLoader.setVisibility(View.GONE); mLoader.stopLoading(); } private Handler uiHandler = new Handler() { @Override public void handleMessage(Message msg) { mLoader.setVisibility(View.GONE); if (msg.arg1 == MobileWebApi.SUCCESS) { FormResult result = (FormResult)msg.obj; mThankYouView.setVisibility(View.VISIBLE); mContentResult.setTitle(result.getFeedbackString()); } else { mScrollView.setVisibility(View.VISIBLE); } } }; @Override protected NewModule getNewModule() { return new LibrariesModule(); } @Override public boolean isModuleHomeActivity() { return false; } @Override protected boolean isScrollable() { return false; } @Override protected void onOptionSelected(String optionId) { } }