Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ public interface ChattyApiDefinition {
@POST("diary/chat/{diary_id}/")
Call<AppendChatResponse> postChat(
@Path("diary_id") int diary_id,
@Body ChatRequest chatRequest
@Part("label") String label,
@Part MultipartBody.Part profile_image
);

@GET("/diary/detail/{diary_id}")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,21 @@
package com.chatty.android.chattyClient.model;

import android.net.Uri;

import java.util.Calendar;

public class ChatBalloon {
private Calendar calendar;
public String speech;
public String username;
public boolean isRead;
public String selectImage;

public void setSelectImage(String selectImage) {
this.selectImage = selectImage;
}

public String getSelectImage() {
return selectImage;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,9 @@

public class ChatRequest {
public String label;
public String image;

public String getImage() {
return image;
}
}
Original file line number Diff line number Diff line change
@@ -1,29 +1,39 @@
package com.chatty.android.chattyClient.presenter.write;


import android.annotation.SuppressLint;
import android.content.Context;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.chatty.android.chattyClient.R;
import com.chatty.android.chattyClient.externalModules.ReduxJava.ReduxJava;
import com.chatty.android.chattyClient.model.ChatBalloon;
import com.chatty.android.chattyClient.view.write.WriteActivity;

import java.util.ArrayList;
import java.util.List;

public class ChatDialogueAdapter extends RecyclerView.Adapter {
private List<ChatBalloon> chatBalloons;
Context context;

public ChatDialogueAdapter(List<ChatBalloon> chatBalloons) {
this.chatBalloons = chatBalloons;
}

public void update(ArrayList<ChatBalloon> chatBalloons) {
public void update(ArrayList<ChatBalloon> chatBalloons,Context context) {
this.chatBalloons.clear();
this.chatBalloons.addAll(chatBalloons);
this.context = context;
this.notifyDataSetChanged();
}

Expand All @@ -38,12 +48,14 @@ public class ChatEntryPartnerViewHolder extends RecyclerView.ViewHolder {
}
}

public class ChatEntrySelfViewHolder extends RecyclerView.ViewHolder {
public static class ChatEntrySelfViewHolder extends RecyclerView.ViewHolder {
TextView textView;
ImageView imageView;

ChatEntrySelfViewHolder(View itemView) {
super(itemView);
this.textView= itemView.findViewById(R.id.textView);
this.textView = itemView.findViewById(R.id.textView_self);
this.imageView = itemView.findViewById(R.id.imageView_send_image);
}
}

Expand Down Expand Up @@ -80,12 +92,19 @@ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int positi
((ChatEntryPartnerViewHolder) holder).textView_isRead.setText(chatBalloon.username);
break;
case 2:
Log.e("내 말", String.valueOf(chatBalloon.selectImage+"0"));
if (chatBalloon.selectImage != null) {
ImageView imageView = ((ChatEntrySelfViewHolder) holder).imageView;
imageView.setVisibility(View.VISIBLE);
Glide.with(this.context)
.load(chatBalloon.selectImage)
.into(imageView);
}
((ChatEntrySelfViewHolder) holder).textView.setText(chatBalloon.speech);
break;
}
}
}

@Override
public int getItemCount() {
return this.chatBalloons.size();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,26 +1,41 @@
package com.chatty.android.chattyClient.presenter.write;

import android.app.Activity;
import android.text.TextUtils;
import android.Manifest;
import android.content.Context;
import android.net.Uri;
import android.support.v4.app.FragmentManager;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import com.chatty.android.chattyClient.api.ChattyApiDefinition;
import com.chatty.android.chattyClient.api.ChattyApi;
import com.chatty.android.chattyClient.externalModules.AndroidExtended.ExtendedPresenter;
import com.chatty.android.chattyClient.model.ChatBalloon;
import com.chatty.android.chattyClient.model.State;
import com.chatty.android.chattyClient.externalModules.ReduxJava.ReduxJavaAndroidConnector;
import com.chatty.android.chattyClient.state.Store;
import com.chatty.android.chattyClient.state.action.ChatAction;
import com.chatty.android.chattyClient.view.write.WriteActivityProps;
import com.chatty.android.chattyClient.view.write.WriteActivityState;
import com.gun0912.tedpermission.PermissionListener;
import com.gun0912.tedpermission.TedPermission;

import java.io.File;
import java.util.List;

import gun0912.tedbottompicker.TedBottomPicker;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;

public class WritePresenter extends ExtendedPresenter<WriteActivityProps, WriteActivityState, State> {
private static final String FALSE= "FALSE";
private static final String IS_INITIALIZED = "IS_INITIALIZED";
private static final String TRUE = "TRUE";
private static int SELECT = 0;
private Uri uri=null;

File sendImage = new File(uri.getPath());

RequestBody currentImage = RequestBody.create(MediaType.parse("multipart/*"), this.sendImage);
MultipartBody.Part requestImage = MultipartBody.Part.createFormData("profile_image", this.sendImage.getName(), currentImage);

@Override
public WriteActivityProps initiate() {
Expand All @@ -31,6 +46,7 @@ public WriteActivityProps initiate() {
}
WriteActivityProps writeActivityProps = new WriteActivityProps();
writeActivityProps.handleClickWriteSubmitButton = this::handleClickWriteSubmit;
writeActivityProps.handleClickSelectImageButton = this::handleClickSelectImage;
return writeActivityProps;
}

Expand All @@ -41,14 +57,48 @@ public WriteActivityProps stateListener(State state) {
props.writeDiaryId = state.chat.writeDiaryId;
return props;
}

public void handleClickWriteSubmit(EditText editText) {
try {
String writeDiaryId = Store.getState().chat.writeDiaryId;
Store.dispatch(ChatAction.requestAppendChat(writeDiaryId, editText.getText().toString()));
Store.dispatch(ChatAction.requestAppendChat(
writeDiaryId,
editText.getText().toString(),
toString(this.uri),
requestImage));
this.uri = null;
editText.setText(null);
} catch (Exception e) {
e.printStackTrace();
}
}

public void handleClickSelectImage(Context context, FragmentManager fragmentManager) {
SELECT=1;
PermissionListener permissionListener = new PermissionListener() {
@Override
public void onPermissionGranted() {
TedBottomPicker tedBottomPicker = new TedBottomPicker.Builder(context)
.setOnImageSelectedListener(uri ->
selectImage(uri)
).create();
tedBottomPicker.show(fragmentManager);
}

@Override
public void onPermissionDenied(List<String> deniedPermissions) {
// Toast.makeText(WriteActivity, "Not allowed\n.", Toast.LENGTH_SHORT).show();fd f
}
};

TedPermission.with(context)
.setPermissionListener(permissionListener)
.setDeniedMessage("If you reject permission,you can not use this service\\n\\nPlease turn on permissions at [Setting] > [Permission]")
.setPermissions(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.check();
}

private void selectImage(Uri uri) {
this.uri = uri;
Log.e("2", String.valueOf(this.uri));
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.chatty.android.chattyClient.state.action;

import android.util.Log;

import com.chatty.android.chattyClient.api.ChattyApi;
import com.chatty.android.chattyClient.constants.ActionType;
import com.chatty.android.chattyClient.externalModules.ReduxJava.Action;
Expand All @@ -8,6 +10,11 @@
import com.chatty.android.chattyClient.model.response.AppendChatResponse;
import com.chatty.android.chattyClient.model.response.ChatResponse;

import org.w3c.dom.Entity;

import java.util.HashMap;

import okhttp3.MultipartBody;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
Expand All @@ -33,23 +40,27 @@ public void onFailure(Call<ChatResponse> call, Throwable t) {
};
}

public static ReduxJava.DispatcherMiddleware requestAppendChat(String diaryId, String text) {
public static ReduxJava.DispatcherMiddleware requestAppendChat(String diaryId, String text, String uri, MultipartBody.Part file) {
return (dispatch) -> {
ChatRequest request = new ChatRequest();
request.label = text;
request.image = uri;
Log.e("통신시작",text+uri);
dispatch.run(Action.of(ActionType.REQUEST_APPEND_CHAT)
.payloadAdd("chat", text));
.payloadAdd("chat", request));

ChattyApi.getApi().postChat(Integer.parseInt(diaryId), request)
ChattyApi.getApi().postChat(Integer.parseInt(diaryId),request.label,file)
.enqueue(new Callback<AppendChatResponse>() {
@Override
public void onResponse(Call<AppendChatResponse> call, Response<AppendChatResponse> response) {
Log.e("통신성공","ㅋ");
dispatch.run(Action.of(ActionType.REQUEST_APPEND_CHAT_SUCCESS)
.payloadAdd("chat", response.body()));
}

@Override
public void onFailure(Call<AppendChatResponse> call, Throwable t) {
Log.e("통신실패","ㅋ");
dispatch.run(Action.of(ActionType.REQUEST_APPEND_CHAT_ERROR)
.payloadAdd("error", t.getMessage()));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,21 @@
import com.chatty.android.chattyClient.externalModules.ReduxJava.ReduxJava;
import com.chatty.android.chattyClient.model.ChatBalloon;
import com.chatty.android.chattyClient.model.State;
import com.chatty.android.chattyClient.model.request.ChatRequest;
import com.chatty.android.chattyClient.model.response.AppendChatResponse;
import com.chatty.android.chattyClient.model.response.ChatResponse;

import java.util.ArrayList;
import java.util.HashMap;

public class ChatReducer implements Reducer<State.Chat> {
public State.Chat run(State.Chat chat, Action action) {
switch (action.getType()) {
case ActionType.REQUEST_APPEND_CHAT:
String text = (String) action.getPayload().get("chat");
ChatRequest chatRequest = (ChatRequest) action.getPayload().get("chat");
ChatBalloon chatBalloon = new ChatBalloon();
chatBalloon.speech = text;
chatBalloon.speech =chatRequest.label;
chatBalloon.selectImage = chatRequest.image;
chat.chatBalloons.add(chatBalloon);

ArrayList<ChatBalloon> newChatBalloons = new ArrayList<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public State.Diary run(State.Diary diary, Action action) {
case ActionType.REQUEST_GET_DIARIES_SUCCESS:
TimelineResponse timeline = (TimelineResponse) action.getPayload().get("timeline");
ArrayList<TimelineEntry> timelineEntries = timeline
.diaries
.complete_diaries
.stream()
.map((_diary) -> {
TimelineEntry entry = new TimelineEntry();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
package com.chatty.android.chattyClient.view.write;

import android.content.Intent;
import android.net.Uri;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;

import com.chatty.android.chattyClient.R;
import com.chatty.android.chattyClient.constants.Header;
import com.chatty.android.chattyClient.externalModules.AndroidExtended.ExtendedView;
import com.chatty.android.chattyClient.externalModules.AndroidExtended.Props;
import com.chatty.android.chattyClient.externalModules.Renderer.Renderer;
import com.chatty.android.chattyClient.model.ChatBalloon;
import com.chatty.android.chattyClient.presenter.Contract;
Expand Down Expand Up @@ -41,12 +42,19 @@ public class WriteActivity extends AppCompatActivity implements ExtendedView<Wri
@BindView(R.id.editText_writeInput)
public EditText writeInputEditText;

@BindView(R.id.btn_write_plus)
public ImageButton imagePlusButton;

@BindView(R.id.button_writeSubmit)
public ImageButton writeSubmitButton;

@BindView(R.id.textView_timeline_title)
public TextView timelineTitle;

@BindView(R.id.imageView_send_image)
public ImageView writeInputImageView;
public FragmentManager writeContext = this.getSupportFragmentManager();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Expand All @@ -69,6 +77,7 @@ public void initialRender(WriteActivityProps writeActivityProps) {
this.renderDialogueRecyclerView(writeActivityProps);
this.renderSetTitle();
this.renderWriteSubmitButton(writeActivityProps);
this.renderSelectImageButton(writeActivityProps);
}

@Override
Expand Down Expand Up @@ -106,7 +115,14 @@ private void renderWriteSubmitButton(WriteActivityProps writeActivityProps) {

private void updateChatBalloons(Object o) {
ArrayList<ChatBalloon> chatBalloons = (ArrayList<ChatBalloon>) o;
this.dialogueAdapter.update(chatBalloons);
this.dialogueAdapter.update(chatBalloons,getApplicationContext());
this.dialogueRecyclerView.scrollToPosition(chatBalloons.size() -1);
}

private void renderSelectImageButton(WriteActivityProps writeActivityProps) {
this.imagePlusButton.setOnClickListener((__) -> {
writeActivityProps.handleClickSelectImageButton.accept(this.getApplicationContext(),this.getSupportFragmentManager());
});
}

}
Loading