package com.livefyre.comments.activities; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.text.Html; import android.util.Log; import android.view.View; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.TextView; import com.livefyre.comments.Config; import com.livefyre.comments.R; import com.livefyre.comments.manager.SharedPreferenceManager; import com.livefyre.comments.util.Constant; import com.livefyre.comments.util.Util; import com.livefyre.streamhub_android_sdk.activity.AuthenticationActivity; import com.livefyre.streamhub_android_sdk.network.WriteClient; import com.livefyre.streamhub_android_sdk.util.LFSActions; import com.livefyre.streamhub_android_sdk.util.LFSConstants; import com.loopj.android.http.JsonHttpResponseHandler; import com.loopj.android.http.RequestParams; import com.squareup.picasso.Callback; import com.squareup.picasso.Picasso; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.net.MalformedURLException; import java.util.ArrayList; import java.util.HashMap; import cz.msebera.android.httpclient.Header; import io.filepicker.Filepicker; import io.filepicker.models.FPFile; public class NewActivity extends BaseActivity { public static final String TAG = NewActivity.class.getSimpleName(); Toolbar toolbar; TextView commentEt; LinearLayout attachImageLL; FrameLayout attacheImageFL; ImageView capturedImage; ProgressBar progressBar; RelativeLayout deleteCapturedImage; JSONObject imgObj; //id-selected comment Id Used for editing and new reply String purpose, id, body; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.new_activity); pullViews(); getDataFromIntent(); setListenersToViews(); setListenersToViewsAndSetConfig(); } private void getDataFromIntent() { Intent intent = getIntent(); purpose = intent.getStringExtra(Constant.PURPOSE); if (purpose.equals(Constant.NEW_COMMENT)) { } else if (purpose.equals(Constant.NEW_REPLY)) { id = intent.getStringExtra(Constant.ID); } else if (purpose.equals(Constant.EDIT)) { id = intent.getStringExtra(Constant.ID); body = intent.getStringExtra(Constant.BODY); commentEt.setText(Util.trimTrailingWhitespace(Html .fromHtml(body)), TextView.BufferType.SPANNABLE); } } private void pullViews() { attachImageLL = (LinearLayout) findViewById(R.id.attachImageLL); attacheImageFL = (FrameLayout) findViewById(R.id.attacheImageFL); capturedImage = (ImageView) findViewById(R.id.capturedImage); deleteCapturedImage = (RelativeLayout) findViewById(R.id.deleteCapturedImage); commentEt = (TextView) findViewById(R.id.commentEt); progressBar = (ProgressBar) findViewById(R.id.progressBar); } private void setListenersToViews() { attachImageLL.setOnClickListener(attachImageLLListener); deleteCapturedImage.setOnClickListener(deleteCapturedImageListener); } private void setListenersToViewsAndSetConfig() { toolbar = (Toolbar) findViewById(R.id.app_bar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayShowTitleEnabled(false); //Activity Name TextView activityName = (TextView) findViewById(R.id.activityTitle); if (purpose.equals(Constant.NEW_COMMENT)) { commentEt.setHint("Write your comment here...");//setting hint to Edittext activityName.setText("New Comment"); } else if (purpose.equals(Constant.NEW_REPLY)) { commentEt.setHint("Write your Reply here...");//setting hint to Edittext activityName.setText("Reply"); attachImageLL.setVisibility(View.VISIBLE);//Hide Image Selection option } else if (purpose.equals(Constant.EDIT)) { activityName.setText("Edit"); attachImageLL.setVisibility(View.GONE);//Hide Image Selection option } //Activity Icon ImageView homeIcon = (ImageView) findViewById(R.id.activityIcon); homeIcon.setBackgroundResource(R.drawable.close_b); LinearLayout activityIconLL = (LinearLayout) findViewById(R.id.activityIconLL); activityIconLL.setOnClickListener(homeIconListener); //Action TextView actionTv = (TextView) findViewById(R.id.actionTv); actionTv.setText("POST"); LinearLayout actionLL = (LinearLayout) findViewById(R.id.actionLL); actionLL.setVisibility(View.VISIBLE); actionLL.setOnClickListener(actionTvListener); } void postNewComment(String body) { showProgressDialog(); HashMap<String, Object> parameters = new HashMap<>(); parameters.put(LFSConstants.LFSPostBodyKey, body); parameters.put(LFSConstants.LFSPostType, LFSConstants.LFSPostTypeComment); parameters.put(LFSConstants.LFSPostUserTokenKey, SharedPreferenceManager.getInstance().getString(AuthenticationActivity.TOKEN, "")); if (imgObj != null) parameters.put(LFSConstants.LFSPostAttachmentsKey, (new JSONArray().put(imgObj)).toString()); try { WriteClient.postContent( Config.COLLECTION_ID, null, SharedPreferenceManager.getInstance().getString(AuthenticationActivity.TOKEN, ""), parameters, new WriteClientCallback()); } catch (MalformedURLException e) { e.printStackTrace(); } } void postNewReply(String body) { showProgressDialog(); if (purpose.equals(Constant.NEW_REPLY)) { Log.d("REPLY", "IN NEW REPLY"); HashMap<String, Object> parameters = new HashMap<>(); parameters.put(LFSConstants.LFSPostBodyKey, body); parameters.put(LFSConstants.LFSPostType, LFSConstants.LFSPostTypeReply); parameters.put(LFSConstants.LFSPostUserTokenKey, SharedPreferenceManager.getInstance().getString(AuthenticationActivity.TOKEN, "")); if (imgObj != null) parameters.put(LFSConstants.LFSPostAttachmentsKey, (new JSONArray().put(imgObj)).toString()); try { WriteClient.postContent( Config.COLLECTION_ID, id, SharedPreferenceManager.getInstance().getString(AuthenticationActivity.TOKEN, ""), parameters, new newReplyCallback()); } catch (MalformedURLException e) { e.printStackTrace(); } } else if (purpose.equals(Constant.EDIT)) { Log.d("EDIT", "IN EDIT REPLY"); RequestParams parameters = new RequestParams(); parameters.put(LFSConstants.LFSPostBodyKey, body); parameters.put(LFSConstants.LFSPostUserTokenKey, SharedPreferenceManager.getInstance().getString(AuthenticationActivity.TOKEN, "")); WriteClient.postAction(Config.COLLECTION_ID, id, SharedPreferenceManager.getInstance().getString(AuthenticationActivity.TOKEN, ""), LFSActions.EDIT, parameters, new editCallback()); } } //Call backs //New Comment public class WriteClientCallback extends JsonHttpResponseHandler { @Override public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) { super.onFailure(statusCode, headers, throwable, errorResponse); dismissProgressDialog(); showToast("Error posting comment!"); } @Override public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONArray errorResponse) { super.onFailure(statusCode, headers, throwable, errorResponse); dismissProgressDialog(); showToast("Error posting comment!"); } @Override public void onSuccess(int statusCode, Header[] headers, JSONObject response) { super.onSuccess(statusCode, headers, response); dismissProgressDialog(); showAlert("Comment Posted Successfully.", "OK", null); } @Override public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) { super.onFailure(statusCode, headers, responseString, throwable); dismissProgressDialog(); if (null != responseString) Log.d("data error", "" + responseString); try { JSONObject errorJson = new JSONObject(responseString); if (!errorJson.isNull("msg")) { showAlert(errorJson.getString("msg"), "TRY AGAIN", tryAgain); } else { showAlert("Something went wrong.", "TRY AGAIN", tryAgain); } } catch (JSONException e) { e.printStackTrace(); showAlert("Something went wrong.", "TRY AGAIN", tryAgain); } } } //New Reply public class newReplyCallback extends JsonHttpResponseHandler { @Override public void onSuccess(int statusCode, Header[] headers, JSONArray response) { super.onSuccess(statusCode, headers, response); dismissProgressDialog(); showAlert("Reply Posted Successfully.", "OK", null); Intent returnIntent = new Intent(); returnIntent.putExtra("result", 1); setResult(RESULT_OK, returnIntent); } @Override public void onSuccess(int statusCode, Header[] headers, String responseString) { super.onSuccess(statusCode, headers, responseString); dismissProgressDialog(); showAlert("Reply Posted Successfully.", "OK", null); Intent returnIntent = new Intent(); returnIntent.putExtra("result", 1); setResult(RESULT_OK, returnIntent); } @Override public void onSuccess(int statusCode, Header[] headers, JSONObject response) { super.onSuccess(statusCode, headers, response); dismissProgressDialog(); showAlert("Reply Posted Successfully.", "OK", null); Intent returnIntent = new Intent(); returnIntent.putExtra("result", 1); setResult(RESULT_OK, returnIntent); } @Override public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONArray errorResponse) { super.onFailure(statusCode, headers, throwable, errorResponse); showAlert("Something went wrong.", "TRY AGAIN", tryAgain); } @Override public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) { super.onFailure(statusCode, headers, throwable, errorResponse); dismissProgressDialog(); try { if (!errorResponse.isNull("msg")) { showAlert(errorResponse.getString("msg"), "TRY AGAIN", tryAgain); } else { showAlert("Something went wrong.", "TRY AGAIN", tryAgain); } } catch (JSONException e) { e.printStackTrace(); showAlert("Something went wrong.", "TRY AGAIN", tryAgain); } } @Override public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) { super.onFailure(statusCode, headers, responseString, throwable); dismissProgressDialog(); try { JSONObject errorJson = new JSONObject(responseString); if (!errorJson.isNull("msg")) { showAlert(errorJson.getString("msg"), "TRY AGAIN", tryAgain); } else { showAlert("Something went wrong.", "TRY AGAIN", tryAgain); } } catch (JSONException e) { e.printStackTrace(); showAlert("Something went wrong.", "TRY AGAIN", tryAgain); } } } // Edit Comment private class editCallback extends JsonHttpResponseHandler { @Override public void onSuccess(int statusCode, Header[] headers, JSONObject response) { super.onSuccess(statusCode, headers, response); dismissProgressDialog(); showAlert("Reply Edited Successfully.", "OK", null); } @Override public void onSuccess(int statusCode, Header[] headers, JSONArray response) { super.onSuccess(statusCode, headers, response); dismissProgressDialog(); showAlert("Reply Edited Successfully.", "OK", null); } @Override public void onSuccess(int statusCode, Header[] headers, String responseString) { super.onSuccess(statusCode, headers, responseString); dismissProgressDialog(); showAlert("Reply Edited Successfully.", "OK", null); } @Override public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) { super.onFailure(statusCode, headers, throwable, errorResponse); dismissProgressDialog(); dismissProgressDialog(); try { if (!errorResponse.isNull("msg")) { showAlert(errorResponse.getString("msg"), "TRY AGAIN", tryAgain); } else { showAlert("Something went wrong.", "TRY AGAIN", tryAgain); } } catch (JSONException e) { e.printStackTrace(); showAlert("Something went wrong.", "TRY AGAIN", tryAgain); } } @Override public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONArray errorResponse) { super.onFailure(statusCode, headers, throwable, errorResponse); dismissProgressDialog(); showAlert("Something went wrong.", "TRY AGAIN", tryAgain); } @Override public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) { super.onFailure(statusCode, headers, responseString, throwable); dismissProgressDialog(); try { JSONObject errorJson = new JSONObject(responseString); if (!errorJson.isNull("msg")) { showAlert(errorJson.getString("msg"), "TRY AGAIN", tryAgain); } else { showAlert("Something went wrong.", "TRY AGAIN", tryAgain); } } catch (JSONException e) { e.printStackTrace(); showAlert("Something went wrong.", "TRY AGAIN", tryAgain); } } } // Listeners View.OnClickListener actionTvListener = new View.OnClickListener() { @Override public void onClick(View v) { if (!isNetworkAvailable()) { showAlert("No connection available", "TRY AGAIN", tryAgain); return; } String description = commentEt.getText().toString(); if (description.length() == 0) { showAlert("Please enter text to post.", "TRY AGAIN", tryAgain); return; } if (purpose.equals(Constant.NEW_COMMENT)) { String descriptionHTML = Html.toHtml((android.text.Spanned) commentEt.getText()); postNewComment(descriptionHTML); } else { String htmlReplyText = Html.toHtml((android.text.Spanned) commentEt.getText()); postNewReply(htmlReplyText); } } }; View.OnClickListener homeIconListener = new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }; View.OnClickListener deleteCapturedImageListener = new View.OnClickListener() { @Override public void onClick(View v) { attachImageLL.setVisibility(View.VISIBLE); attacheImageFL.setVisibility(View.GONE); } }; View.OnClickListener attachImageLLListener = new View.OnClickListener() { @Override public void onClick(View v) { if (Config.FILEPICKER_API_KEY.length() == 0) { showToast("Something went wrong."); } else { Intent intent = new Intent(NewActivity.this, Filepicker.class); Filepicker.setKey(Config.FILEPICKER_API_KEY); startActivityForResult(intent, Filepicker.REQUEST_CODE_GETFILE); } } }; // Dialog Listeners DialogInterface.OnClickListener selectImageDialogAction = new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { Intent intent = new Intent(NewActivity.this, Filepicker.class); Filepicker.setKey(Config.FILEPICKER_API_KEY); startActivityForResult(intent, Filepicker.REQUEST_CODE_GETFILE); } }; DialogInterface.OnClickListener tryAgain = new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { } }; //On Image Selected @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == Filepicker.REQUEST_CODE_GETFILE) { if (resultCode != RESULT_OK) { // Result was cancelled by the user or there was an error showAlert("No Image Selected.", "SELECT IMAGE", selectImageDialogAction); attachImageLL.setVisibility(View.VISIBLE); attacheImageFL.setVisibility(View.GONE); return; } attachImageLL.setVisibility(View.GONE); attacheImageFL.setVisibility(View.VISIBLE); ArrayList<FPFile> fpFiles = data.getParcelableArrayListExtra(Filepicker.FPFILES_EXTRA); String imgUrl = fpFiles.get(0).getUrl(); Log.d("url", imgUrl + ""); try { imgObj = new JSONObject(); imgObj.put("link", imgUrl); imgObj.put("provider_name", "LivefyreFilePicker"); imgObj.put("thumbnail_url", imgUrl); imgObj.put("type", "photo"); imgObj.put("url", imgUrl); try { progressBar.setVisibility(View.VISIBLE); Picasso.with(getBaseContext()).load(imgUrl).fit().into(capturedImage, new ImageLoadCallBack()); } catch (Exception e) { e.printStackTrace(); } } catch (JSONException e) { e.printStackTrace(); } } } private class ImageLoadCallBack implements Callback { @Override public void onSuccess() { //Hide progressBar.setVisibility(View.GONE); } @Override public void onError() { //Hide progressBar.setVisibility(View.GONE); } } }