/*
* Created by Itzik Braun on 12/3/2015.
* Copyright (c) 2015 deluge. All rights reserved.
*
* Last Modification at: 3/12/15 4:27 PM
*/
package com.braunster.chatsdk.activities;
import android.app.ActionBar;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.TextView;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageLoader;
import com.braunster.chatsdk.R;
import com.braunster.chatsdk.Utils.Debug;
import com.braunster.chatsdk.Utils.DialogUtils;
import com.braunster.chatsdk.Utils.ImageUtils;
import com.braunster.chatsdk.Utils.asynctask.MakeThreadImage;
import com.braunster.chatsdk.Utils.helper.ChatSDKIntentClickListener;
import com.braunster.chatsdk.Utils.volley.VolleyUtils;
import com.braunster.chatsdk.dao.BThread;
import com.braunster.chatsdk.dao.BUser;
import com.braunster.chatsdk.dao.core.DaoCore;
import com.braunster.chatsdk.fragments.ChatSDKContactsFragment;
import com.braunster.chatsdk.fragments.abstracted.ChatSDKAbstractContactsFragment;
import com.braunster.chatsdk.network.BDefines;
import com.braunster.chatsdk.object.BError;
import com.braunster.chatsdk.object.Cropper;
import com.soundcloud.android.crop.Crop;
import org.apache.commons.lang3.StringUtils;
import org.jdeferred.DoneCallback;
import org.jdeferred.FailCallback;
import java.io.File;
import de.hdodenhof.circleimageview.CircleImageView;
import timber.log.Timber;
/**
* Created by braunster on 24/11/14.
*/
public class ChatSDKThreadDetailsActivity extends ChatSDKBaseThreadActivity {
private static final String TAG = ChatSDKThreadDetailsActivity.class.getSimpleName();
private static final boolean DEBUG = Debug.ThreadDetailsActivity;
private static final int THREAD_PIC = 1991;
private CircleImageView imageThread, imageAdmin;
private TextView txtAdminName, txtThreadName;
private ChatSDKContactsFragment contactsFragment;
private BUser admin;
private Cropper crop;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.chat_sdk_activity_thread_details);
initActionBar();
initViews();
loadData();
}
private void initViews() {
txtAdminName = (TextView) findViewById(R.id.chat_sdk_txt_admin_name);
txtThreadName = (TextView) findViewById(R.id.chat_sdk_txt_thread_name);
imageAdmin = (CircleImageView) findViewById(R.id.chat_sdk_admin_image_view);
imageThread = (CircleImageView) findViewById(R.id.chat_sdk_thread_image_view);
}
private void loadData(){
// Admin data
if (StringUtils.isNotBlank(thread.getCreatorEntityId()))
{
admin = DaoCore.fetchEntityWithEntityID(BUser.class, thread.getCreatorEntityId());
if (admin!=null)
{
if (StringUtils.isNotBlank(admin.getThumbnailPictureURL()))
VolleyUtils.getImageLoader().get(admin.getThumbnailPictureURL(), new ImageLoader.ImageListener() {
@Override
public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
if (response.getBitmap() != null) {
imageAdmin.setImageBitmap(response.getBitmap());
}
}
@Override
public void onErrorResponse(VolleyError error) {
}
});
txtAdminName.setText(admin.getMetaName());
}
}
//Thread image
final String imageUrl = thread.threadImageUrl();
if (StringUtils.isNotEmpty(imageUrl))
{
// Check if there is a image saved in the cahce for this thread.
// if (thread.getType()== BThread.Type.Private)
if (imageUrl.split(",").length > 1)
{
int size = getResources().getDimensionPixelSize(R.dimen.chat_sdk_chat_action_barcircle_image_view_size);
new MakeThreadImage(imageUrl.split(","), size, size, thread.getEntityID(), imageThread).setProgressBar((android.widget.ProgressBar) findViewById(R.id.chat_sdk_progress_bar));
}
else
VolleyUtils.getImageLoader().get(imageUrl, new ImageLoader.ImageListener() {
@Override
public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
if (response.getBitmap() != null) {
imageThread.setImageBitmap(response.getBitmap());
findViewById(R.id.chat_sdk_progress_bar).setVisibility(View.INVISIBLE);
imageThread.setVisibility(View.VISIBLE);
}
}
@Override
public void onErrorResponse(VolleyError error) {
imageThread.setImageResource(R.drawable.ic_users);
findViewById(R.id.chat_sdk_progress_bar).setVisibility(View.INVISIBLE);
}
});
}
else
{
findViewById(R.id.chat_sdk_progress_bar).setVisibility(View.INVISIBLE);
imageThread.setImageResource(R.drawable.ic_users);
imageThread.setVisibility(View.VISIBLE);
}
// Thread name
txtThreadName.setText(thread.displayName());
// Thread users data
contactsFragment = new ChatSDKContactsFragment();
contactsFragment.setInflateMenu(false);
contactsFragment.setOnItemClickListener(getItemClickListener());
contactsFragment.setLoadingMode(ChatSDKAbstractContactsFragment.MODE_LOAD_THREAD_USERS);
contactsFragment.setExtraData(thread.getEntityID());
contactsFragment.setEventTAG(this.getClass().getSimpleName());
contactsFragment.withUpdates(true);
contactsFragment.setClickMode(ChatSDKAbstractContactsFragment.CLICK_MODE_NONE);
getFragmentManager().beginTransaction().replace(R.id.frame_thread_users, contactsFragment).commit();
}
private AdapterView.OnItemClickListener getItemClickListener(){
return new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
final Intent intent = new Intent();
showProgDialog("Opening thread.");
getNetworkAdapter().createThreadWithUsers("", contactsFragment.getAdapter().getItem(position).asBUser(), getNetworkAdapter().currentUserModel())
.done(new DoneCallback<BThread>() {
@Override
public void onDone(final BThread thread) {
if (thread == null) {
if (DEBUG) Timber.e("thread added is null");
return;
}
if (isOnMainThread()) {
intent.putExtra(THREAD_ID, thread.getId());
setResult(RESULT_OK, intent);
finish();
} else
ChatSDKThreadDetailsActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
intent.putExtra(THREAD_ID, thread.getId());
setResult(RESULT_OK, intent);
finish();
}
});
}
})
.fail(new FailCallback<BError>() {
@Override
public void onFail(BError error) {
if (isOnMainThread()) {
showAlertToast(getString(R.string.create_thread_with_users_fail_toast));
dismissProgDialog();
} else
ChatSDKThreadDetailsActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
showAlertToast(getString(R.string.create_thread_with_users_fail_toast));
dismissProgDialog();
}
});
}
});
}
};
}
protected void initActionBar(){
ActionBar ab = getActionBar();
if (ab!=null)
{
ab.setTitle(getString(R.string.thread_details_activity_title));
ab.setHomeButtonEnabled(true);
}
}
@Override
protected void onResume() {
super.onResume();
// Only if the current user is the admin of this thread.
if (StringUtils.isNotBlank(thread.getCreatorEntityId()) && thread.getCreatorEntityId().equals(getNetworkAdapter().currentUserModel().getEntityID()))
{
imageThread.setOnClickListener(ChatSDKIntentClickListener.getPickImageClickListener(this, THREAD_PIC));
txtThreadName.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
DialogUtils.ChatSDKEditTextDialog textDialog = DialogUtils.ChatSDKEditTextDialog.getInstace();
textDialog.setTitleAndListen(getString(R.string.thread_details_activity_change_name_dialog_title), new DialogUtils.ChatSDKEditTextDialog.EditTextDialogInterface() {
@Override
public void onFinished(String s) {
txtThreadName.setText(s);
thread.setName(s);
DaoCore.updateEntity(thread);
getNetworkAdapter().pushThread(thread);
}
});
textDialog.show(getFragmentManager(), DialogUtils.ChatSDKEditTextDialog.class.getSimpleName());
return true;
}
});
}
}
@Override
protected void onPause() {
super.onPause();
getNetworkAdapter().getEventManager().removeEventByTag(this.getClass().getSimpleName());
}
@Override
public void onBackPressed() {
setResult(Activity.RESULT_OK);
finish();
if (animateExit)
overridePendingTransition(R.anim.dummy, R.anim.slide_top_bottom_out);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (DEBUG) Timber.v("onActivityResult");
if (requestCode == THREAD_PIC)
{
if (resultCode == Activity.RESULT_OK)
{
Uri uri = data.getData();
Uri outputUri = Uri.fromFile(new File(this.getCacheDir(), "cropped_thread_image.jpg"));
crop = new Cropper(uri);
Intent cropIntent = crop.getIntent(this, outputUri);
int request = Crop.REQUEST_CROP + THREAD_PIC;
startActivityForResult(cropIntent, request);
}
}
else if (requestCode == Crop.REQUEST_CROP + THREAD_PIC) {
if (resultCode == Crop.RESULT_ERROR)
{
showAlertToast(getString(R.string.unable_to_fetch_image));
}
try
{
File image;
Uri uri = Crop.getOutput(data);
if (DEBUG) Timber.d("Fetch image URI: %s", uri.toString());
image = new File(this.getCacheDir(), "cropped_thread_image.jpg");
Bitmap b = ImageUtils.loadBitmapFromFile(image.getPath());
if (b == null)
{
b = ImageUtils.loadBitmapFromFile(getCacheDir().getPath() + image.getPath());
if (b == null)
{
showAlertToast(getString(R.string.unable_to_save_file));
if (DEBUG) Timber.e("Cant save image to backendless file path is invalid: %s",
getCacheDir().getPath() + image.getPath());
return;
}
}
imageThread.setImageBitmap(b);
Bitmap imageBitmap = ImageUtils.getCompressed(image.getPath());
getNetworkAdapter().uploadImageWithoutThumbnail(imageBitmap)
.done(new DoneCallback<String>() {
@Override
public void onDone(String s) {
thread.setImageUrl(s);
DaoCore.updateEntity(thread);
getNetworkAdapter().pushThread(thread);
}
})
.fail(new FailCallback<BError>() {
@Override
public void onFail(BError error) {
showAlertToast(getString(R.string.unable_to_save_file));
}
});
}
catch (NullPointerException e){
if (DEBUG) Timber.e("Null pointer when getting file.");
showAlertToast(getString(R.string.unable_to_fetch_image));
}
}
}
}