package com.mobmonkey.mobmonkeyandroid; import java.util.Calendar; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Typeface; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.Button; import android.widget.RadioGroup; import android.widget.Toast; import android.widget.RadioGroup.OnCheckedChangeListener; import com.mobmonkey.mobmonkeyandroid.R; import com.mobmonkey.mobmonkeyandroid.arrayadapters.MMArrayAdapter; import com.mobmonkey.mobmonkeyandroid.utils.MMConstants; import com.mobmonkey.mobmonkeyandroid.utils.MMExpandedListView; import com.mobmonkey.mobmonkeyandroid.utils.MMSegmentedRadioGroup; import com.mobmonkey.mobmonkeyandroid.utils.MMUtility; import com.mobmonkey.mobmonkeysdk.adapters.MMMakeARequestAdapter; import com.mobmonkey.mobmonkeysdk.utils.MMSDKConstants; import com.mobmonkey.mobmonkeysdk.utils.MMCallback; import com.mobmonkey.mobmonkeysdk.utils.MMProgressDialog; /** * @author Dezapp, LLC * */ public class MakeARequestScreen extends Activity implements OnCheckedChangeListener, OnItemClickListener, View.OnClickListener { private static final String TAG = "MakeARequestScreen: "; private MMSegmentedRadioGroup rgRequests; private RadioGroup rgStayActive; private MMExpandedListView mmelvAddMessage; private MMExpandedListView mmelvScheduleRequest; private Button btnSendRequest; private Calendar requestCal; private String message; private String scheduleRequest; private String mediaType; private int[] icons; private String[] labels; private int[] indicatorIcons; private MMArrayAdapter mmArrayAdapter; private String scheduleDate; private int duration; private JSONObject jObj; private boolean repeat = true; private String repeatRate; // private int radiusInYards = 50; //TODO: Remove hard-coded value for radius private SharedPreferences userPrefs; private String locationId; private String providerId; /* * (non-Javadoc) * @see android.app.Activity#onCreate(android.os.Bundle) */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); overridePendingTransition(R.anim.slide_bottom_in, R.anim.slide_hold); setContentView(R.layout.make_a_request_screen); init(); } /* * (non-Javadoc) * @see android.widget.RadioGroup.OnCheckedChangeListener#onCheckedChanged(android.widget.RadioGroup, int) */ @Override public void onCheckedChanged(RadioGroup group, int checkedId) { if(group == rgRequests) { switch(checkedId) { case R.id.rbvideorequest: btnSendRequest.setText(R.string.btn_send_video_request); mediaType = MMSDKConstants.MEDIA_VIDEO; break; case R.id.rbphotorequest: btnSendRequest.setText(R.string.btn_send_photo_request); mediaType = MMSDKConstants.MEDIA_IMAGE; break; case R.id.rbtextrequest: btnSendRequest.setText(R.string.btn_send_text_request); mediaType = MMSDKConstants.MEDIA_TEXT; break; } } else if(group == rgStayActive) { switch(checkedId) { case R.id.rbfifteenmin: duration = 15; break; case R.id.rbthirtymin: duration = 30; break; case R.id.rbonehour: duration = 60; break; case R.id.rbthreehour: duration = 180; break; } } } /* * (non-Javadoc) * @see android.widget.AdapterView.OnItemClickListener#onItemClick(android.widget.AdapterView, android.view.View, int, long) */ @Override public void onItemClick(AdapterView<?> adapterView, View view, int position, long arg3) { if(adapterView == mmelvAddMessage) { if(position == 0) { Intent addMessageIntent = new Intent(MakeARequestScreen.this, AddMessageScreen.class); addMessageIntent.putExtra(MMSDKConstants.KEY_INTENT_EXTRA_MESSAGE, message); startActivityForResult(addMessageIntent, MMSDKConstants.REQUEST_CODE_ADD_MESSAGE); } } else if (adapterView == mmelvScheduleRequest) { if(position == 0) { Intent scheduleRequestIntent = new Intent(MakeARequestScreen.this, ScheduleRequestScreen.class); scheduleRequestIntent.putExtra(MMSDKConstants.KEY_INTENT_EXTRA_MESSAGE, scheduleRequest); if(requestCal != null) { scheduleRequestIntent.putExtra(MMSDKConstants.KEY_INTENT_EXTRA_SCHEDULE_REQUEST_TIME, requestCal); } scheduleRequestIntent.putExtra(MMSDKConstants.KEY_INTENT_EXTRA_SCHEDULE_REQUEST_REPEATING, repeat); scheduleRequestIntent.putExtra(MMSDKConstants.KEY_INTENT_EXTRA_SCHEDULE_REQUEST_REPEATING_RATE, repeatRate); startActivityForResult(scheduleRequestIntent, MMSDKConstants.REQUEST_CODE_SCHEDULE_REQUEST); } } } /* * (non-Javadoc) * @see android.view.View.OnClickListener#onClick(android.view.View) */ @Override public void onClick(View view) { // clicked on sendRequestButton if(view.getId() == R.id.btnsentrequest) { Log.d(TAG, "sent request"); if(mediaType.equals(MMSDKConstants.MEDIA_TEXT) && message.equals(MMSDKConstants.DEFAULT_STRING_EMPTY)) { Toast.makeText(MakeARequestScreen.this, R.string.toast_no_message_detected, Toast.LENGTH_SHORT).show(); } else { makeARequest(); } } } /* * (non-Javadoc) * @see android.app.Activity#onActivityResult(int, int, android.content.Intent) */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == MMSDKConstants.REQUEST_CODE_ADD_MESSAGE) { processAddMessageResult(resultCode, data); } else if(requestCode == MMSDKConstants.REQUEST_CODE_SCHEDULE_REQUEST) { processScheduleRequestResult(resultCode, data); } } /* (non-Javadoc) * @see android.app.Activity#onBackPressed() */ @Override public void onBackPressed() { super.onBackPressed(); overridePendingTransition(R.anim.slide_hold, R.anim.slide_bottom_out); } /** * */ private void init() { rgRequests = (MMSegmentedRadioGroup) findViewById(R.id.rgrequests); rgStayActive = (RadioGroup) findViewById(R.id.rgstayactivefor); mmelvAddMessage = (MMExpandedListView) findViewById(R.id.mmelvaddmessage); mmelvScheduleRequest = (MMExpandedListView) findViewById(R.id.mmelvschedulerequest); btnSendRequest = (Button) findViewById(R.id.btnsentrequest); message = MMSDKConstants.DEFAULT_STRING_EMPTY; scheduleRequest = MMSDKConstants.DEFAULT_STRING_EMPTY; mediaType = MMSDKConstants.MEDIA_VIDEO; rgRequests.setOnCheckedChangeListener(MakeARequestScreen.this); rgStayActive.setOnCheckedChangeListener(MakeARequestScreen.this); setSingleItemAddMessage(); mmelvAddMessage.setOnItemClickListener(MakeARequestScreen.this); setSingleScheduleRequest(); mmelvScheduleRequest.setOnItemClickListener(MakeARequestScreen.this); switch(rgStayActive.getCheckedRadioButtonId()) { case R.id.rbfifteenmin: duration = 15; break; case R.id.rbthirtymin: duration = 30; break; case R.id.rbonehour: duration = 60; break; case R.id.rbthreehour: duration = 180; break; } try { jObj = new JSONObject(getIntent().getStringExtra(MMSDKConstants.KEY_INTENT_EXTRA_LOCATION_DETAILS)); locationId = jObj.getString(MMSDKConstants.JSON_KEY_LOCATION_ID); providerId = jObj.getString(MMSDKConstants.JSON_KEY_PROVIDER_ID); } catch (JSONException e) { e.printStackTrace(); } userPrefs = getSharedPreferences(MMSDKConstants.USER_PREFS, MODE_PRIVATE); } /** * */ private void setSingleItemAddMessage() { icons = new int[] {R.drawable.icon_clipboard}; labels = new String[] {getString(R.string.tv_add_message)}; indicatorIcons = new int[] {R.drawable.listview_accessory_indicator}; mmArrayAdapter = new MMArrayAdapter(MakeARequestScreen.this, R.layout.listview_row, icons, labels, indicatorIcons, android.R.style.TextAppearance_Medium, Typeface.DEFAULT_BOLD, null); mmelvAddMessage.setAdapter(mmArrayAdapter); mmelvAddMessage.invalidate(); } /** * * @param resultCode * @param data */ private void processAddMessageResult(int resultCode, Intent data) { message = data.getStringExtra(MMSDKConstants.KEY_INTENT_EXTRA_MESSAGE); if(resultCode == RESULT_CANCELED) { setSingleItemAddMessage(); } else if(resultCode == RESULT_OK) { icons = new int[] {R.drawable.icon_clipboard, R.drawable.icon_clipboard}; labels = new String[] {getString(R.string.tv_add_message), message}; indicatorIcons = new int[] {R.drawable.listview_accessory_indicator, R.drawable.listview_accessory_indicator_close}; mmArrayAdapter = new MMArrayAdapter(MakeARequestScreen.this, R.layout.listview_row, icons, labels, indicatorIcons, android.R.style.TextAppearance_Medium, Typeface.DEFAULT_BOLD, new View.OnClickListener() { @Override public void onClick(View v) { message = MMSDKConstants.DEFAULT_STRING_EMPTY; setSingleItemAddMessage(); } }); mmelvAddMessage.setAdapter(mmArrayAdapter); mmelvAddMessage.invalidate(); } } /** * */ private void setSingleScheduleRequest() { requestCal = null; repeatRate = MMSDKConstants.REQUEST_REPEAT_RATE_NONE; scheduleRequest = MMSDKConstants.DEFAULT_STRING_EMPTY; icons = new int[] {R.drawable.icon_calendar}; labels = new String[] {getString(R.string.tv_schedule_request)}; indicatorIcons = new int[] {R.drawable.listview_accessory_indicator}; mmArrayAdapter = new MMArrayAdapter(MakeARequestScreen.this, R.layout.listview_row, icons, labels, indicatorIcons, android.R.style.TextAppearance_Medium, Typeface.DEFAULT_BOLD, null); mmelvScheduleRequest.setAdapter(mmArrayAdapter); mmelvScheduleRequest.invalidate(); } /** * * @param resultCode * @param data */ private void processScheduleRequestResult(int resultCode, Intent data) { if(resultCode == RESULT_OK) { repeat = data.getBooleanExtra(MMSDKConstants.KEY_INTENT_EXTRA_SCHEDULE_REQUEST_REPEATING, true); repeatRate = data.getStringExtra(MMSDKConstants.KEY_INTENT_EXTRA_SCHEDULE_REQUEST_REPEATING_RATE); Log.d(TAG, TAG + "repeatRate: " + repeatRate); requestCal = (Calendar) data.getSerializableExtra(MMSDKConstants.KEY_INTENT_EXTRA_SCHEDULE_REQUEST_TIME); scheduleDate = Long.toString(requestCal.getTimeInMillis()); String scheduleMessage = MMUtility.getDate(requestCal.getTimeInMillis(), "KK:mm a") + " on " + MMUtility.getDate(requestCal.getTimeInMillis(), "MM/dd/yyyy"); icons = new int[] {R.drawable.icon_calendar, R.drawable.icon_calendar}; labels = new String[] {getString(R.string.tv_schedule_request), scheduleMessage}; indicatorIcons = new int[] {R.drawable.listview_accessory_indicator, R.drawable.listview_accessory_indicator_close}; mmArrayAdapter = new MMArrayAdapter(MakeARequestScreen.this, R.layout.listview_row, icons, labels, indicatorIcons, android.R.style.TextAppearance_Medium, Typeface.DEFAULT_BOLD, new View.OnClickListener() { @Override public void onClick(View v) { setSingleScheduleRequest(); } }); mmelvScheduleRequest.setAdapter(mmArrayAdapter); mmelvScheduleRequest.invalidate(); } } /** * */ private void makeARequest() { MMMakeARequestAdapter.makeARequest(new SendRequestCallback(), message, scheduleDate, providerId, locationId, duration, repeatRate, mediaType); MMProgressDialog.displayDialog(MakeARequestScreen.this, MMSDKConstants.DEFAULT_STRING_EMPTY, getString(R.string.pd_sending_request)); } /** * * @author Dezapp, LLC * */ private class SendRequestCallback implements MMCallback { @Override public void processCallback(Object obj) { MMProgressDialog.dismissDialog(); if(obj != null) { if(((String) obj).equals(MMSDKConstants.CONNECTION_TIMED_OUT)) { Toast.makeText(MakeARequestScreen.this, getString(R.string.toast_connection_timed_out), Toast.LENGTH_SHORT).show(); } else { try { JSONObject response = new JSONObject((String)obj); if(response.getString(MMSDKConstants.JSON_KEY_STATUS).equals(MMSDKConstants.RESPONSE_STATUS_SUCCESS)) { Toast.makeText(MakeARequestScreen.this, R.string.toast_request_successful, Toast.LENGTH_SHORT).show(); finish(); overridePendingTransition(R.anim.slide_hold, R.anim.slide_bottom_out); } else { Toast.makeText(MakeARequestScreen.this, response.getString(MMSDKConstants.JSON_KEY_DESCRIPTION), Toast.LENGTH_SHORT).show(); } } catch (JSONException e) { e.printStackTrace(); } } } } } }