Skip to content

Commit 319157e

Browse files
author
Sid Zi
committed
chat is now functional but buggy
1 parent 54b2787 commit 319157e

File tree

9 files changed

+132
-67
lines changed

9 files changed

+132
-67
lines changed
Lines changed: 73 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,87 @@
11
package com.sidzi.circleofmusic.adapters;
22

3+
import android.content.Context;
34
import android.support.v7.widget.RecyclerView;
45
import android.view.LayoutInflater;
56
import android.view.View;
67
import android.view.ViewGroup;
78
import android.widget.TextView;
89

10+
import com.android.volley.Request;
11+
import com.android.volley.RequestQueue;
12+
import com.android.volley.Response;
13+
import com.android.volley.VolleyError;
14+
import com.android.volley.toolbox.Volley;
915
import com.sidzi.circleofmusic.R;
16+
import com.sidzi.circleofmusic.config;
1017
import com.sidzi.circleofmusic.entities.ChatMessage;
18+
import com.sidzi.circleofmusic.helpers.BasicAuthJsonObjectRequest;
19+
20+
import org.json.JSONArray;
21+
import org.json.JSONException;
22+
import org.json.JSONObject;
1123

1224
import java.util.ArrayList;
1325
import java.util.List;
1426

1527
public class ChatAdapter extends RecyclerView.Adapter<ChatAdapter.ViewHolder> {
1628

17-
private List<ChatMessage> chatEntries = new ArrayList<>();
29+
private List<ChatMessage> chatMessageList;
30+
private Context mContext;
1831

19-
public void addMessage(String messageString, boolean chatMe) {
20-
if (!"".equals(messageString)) {
21-
ChatMessage chatMessage = new ChatMessage(messageString, chatMe);
22-
chatEntries.add(chatMessage);
23-
notifyItemInserted(getItemCount());
24-
}
32+
public ChatAdapter(Context context) {
33+
super();
34+
mContext = context;
35+
chatMessageList = new ArrayList<>();
2536
}
2637

38+
public void populate(final String message) {
39+
RequestQueue rq = Volley.newRequestQueue(mContext);
40+
JSONObject params;
41+
String url;
42+
43+
final int method;
44+
if (message == null) {
45+
method = Request.Method.GET;
46+
params = null;
47+
url = "getMessages";
48+
} else {
49+
method = Request.Method.POST;
50+
params = new JSONObject();
51+
url = "postMessage";
52+
try {
53+
params.put("message_text", message);
54+
} catch (JSONException e) {
55+
e.printStackTrace();
56+
}
57+
}
58+
BasicAuthJsonObjectRequest request = new BasicAuthJsonObjectRequest(mContext, method, config.com_url + url, params, new Response.Listener<JSONObject>() {
59+
@Override
60+
public void onResponse(JSONObject response) {
61+
try {
62+
if (method == Request.Method.POST)
63+
populate(null);
64+
else {
65+
JSONArray messages_list = response.getJSONArray("messages");
66+
chatMessageList.clear();
67+
for (int i = 0; i < messages_list.length(); i++) {
68+
chatMessageList.add(new ChatMessage(messages_list.getJSONObject(i).getString("username"), messages_list.getJSONObject(i).getString("message_text")));
69+
}
70+
notifyDataSetChanged();
71+
}
72+
} catch (JSONException e) {
73+
e.printStackTrace();
74+
}
75+
76+
}
77+
}, new Response.ErrorListener() {
78+
@Override
79+
public void onErrorResponse(VolleyError error) {
80+
error.printStackTrace();
81+
}
82+
});
83+
rq.add(request);
84+
}
2785

2886
@Override
2987
public ChatAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
@@ -33,37 +91,23 @@ public ChatAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
3391

3492
@Override
3593
public void onBindViewHolder(ChatAdapter.ViewHolder holder, int position) {
36-
if (chatEntries.get(holder.getAdapterPosition()).isSelf_flag()) {
37-
holder.tvChatMessageLocal.setVisibility(View.VISIBLE);
38-
holder.tvChatMessageLocal.setText(chatEntries.get(holder.getAdapterPosition()).getBody());
39-
holder.tvChatMessageRemote.setVisibility(View.GONE);
40-
41-
} else {
42-
holder.tvChatMessageRemote.setVisibility(View.VISIBLE);
43-
holder.tvChatMessageRemote.setText(chatEntries.get(holder.getAdapterPosition()).getBody());
44-
holder.tvChatMessageLocal.setVisibility(View.GONE);
45-
}
94+
holder.tvChatMessageSender.setText(chatMessageList.get(position).getSender());
95+
holder.tvChatMessageBody.setText(chatMessageList.get(position).getBody());
4696
}
4797

4898
@Override
4999
public int getItemCount() {
50-
return chatEntries.size();
100+
return chatMessageList.size();
51101
}
52102

53-
class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
54-
private TextView tvChatMessageLocal;
55-
private TextView tvChatMessageRemote;
103+
class ViewHolder extends RecyclerView.ViewHolder {
104+
private TextView tvChatMessageSender;
105+
private TextView tvChatMessageBody;
56106

57107
ViewHolder(View view) {
58108
super(view);
59-
this.tvChatMessageLocal = (TextView) view.findViewById(R.id.tvChatMessageLocal);
60-
this.tvChatMessageRemote = (TextView) view.findViewById(R.id.tvChatMessageRemote);
61-
view.setOnClickListener(this);
62-
}
63-
64-
@Override
65-
public void onClick(View v) {
66-
109+
this.tvChatMessageSender = (TextView) view.findViewById(R.id.tvChatMessageSender);
110+
this.tvChatMessageBody = (TextView) view.findViewById(R.id.tvChatMessageBody);
67111
}
68112
}
69113
}

app/src/main/java/com/sidzi/circleofmusic/entities/ChatMessage.java

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,16 @@ public class ChatMessage {
1212
private String body;
1313

1414
@DatabaseField
15-
private boolean self_flag;
15+
private String sender;
1616

1717
public ChatMessage() {
1818
}
1919

20-
public ChatMessage(String body, boolean self_flag) {
21-
20+
public ChatMessage(String sender, String body) {
21+
this.sender = sender;
2222
this.body = body;
23-
24-
this.self_flag = self_flag;
2523
}
2624

27-
public boolean isSelf_flag() {
28-
return self_flag;
29-
}
3025

3126
public int getId() {
3227
return id;
@@ -36,14 +31,11 @@ public void setId(int id) {
3631
this.id = id;
3732
}
3833

39-
4034
public String getBody() {
4135
return body;
4236
}
4337

44-
public void setBody(String body) {
45-
this.body = body;
38+
public String getSender() {
39+
return sender;
4640
}
47-
48-
4941
}

app/src/main/java/com/sidzi/circleofmusic/fragments/ShoutboxFragment.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ public class ShoutboxFragment extends Fragment {
2121
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
2222
View homeView = inflater.inflate(R.layout.fragment_chat_bot, container, false);
2323
final RecyclerView chatRecyclerView = (RecyclerView) homeView.findViewById(R.id.rvChatConsole);
24-
final ChatAdapter chatAdapter = new ChatAdapter();
24+
final ChatAdapter chatAdapter = new ChatAdapter(getContext());
25+
chatAdapter.populate(null);
2526
final LinearLayoutManager chatLayoutManager = new LinearLayoutManager(getContext());
2627

2728
chatLayoutManager.setStackFromEnd(true);
@@ -32,13 +33,11 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
3233
ibSend.setOnClickListener(new View.OnClickListener() {
3334
@Override
3435
public void onClick(View view) {
35-
etChatMessage.setHint("");
3636
String message = etChatMessage.getText().toString();
3737
if (!message.equals("")) {
38-
chatAdapter.addMessage(message, true);
39-
chatRecyclerView.smoothScrollToPosition(chatAdapter.getItemCount());
4038
etChatMessage.setText("");
4139
// Send message to server here
40+
chatAdapter.populate(message);
4241
}
4342
}
4443
});

app/src/main/java/com/sidzi/circleofmusic/helpers/BasicAuthJsonObjectRequest.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package com.sidzi.circleofmusic.helpers;
22

3+
import android.content.Context;
4+
import android.content.SharedPreferences;
5+
import android.provider.Settings;
6+
37
import com.android.volley.AuthFailureError;
48
import com.android.volley.Response;
59
import com.android.volley.toolbox.JsonObjectRequest;
@@ -13,19 +17,20 @@ public class BasicAuthJsonObjectRequest extends JsonObjectRequest {
1317
private String AuthToken = null;
1418
private String UserName = null;
1519

16-
BasicAuthJsonObjectRequest(int method, String url, JSONObject jsonRequest, Response.Listener<JSONObject> listener, Response.ErrorListener errorListener, String AuthToken, String UserName) {
20+
public BasicAuthJsonObjectRequest(Context context, int method, String url, JSONObject jsonRequest, Response.Listener<JSONObject> listener, Response.ErrorListener errorListener) {
1721
super(method, url, jsonRequest, listener, errorListener);
18-
this.AuthToken = AuthToken;
19-
this.UserName = UserName;
22+
this.AuthToken = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
23+
SharedPreferences settings = context.getSharedPreferences("com_prefs", 0);
24+
this.UserName = settings.getString("username", "");
2025
}
2126

2227
@Override
2328
public Map<String, String> getHeaders() throws AuthFailureError {
2429
Map<String, String> params = new HashMap<>();
25-
params.put("Content-Type", "application/json");
26-
params.put("Accept", "application/json");
2730
params.put("Authorization", AuthToken);
2831
params.put("Username", UserName);
32+
params.put("Content-Type", "application/json");
33+
params.put("Accept", "application/json");
2934
return params;
3035
}
3136
}

app/src/main/java/com/sidzi/circleofmusic/ui/MainActivity.java

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import android.view.MenuItem;
3333
import android.view.View;
3434
import android.widget.EditText;
35+
import android.widget.LinearLayout;
3536
import android.widget.Toast;
3637

3738
import com.android.volley.Request;
@@ -153,6 +154,29 @@ public void onServiceDisconnected(ComponentName componentName) {
153154

154155
ViewPager mViewPager = (ViewPager) findViewById(R.id.container);
155156
mViewPager.setAdapter(mSectionsPagerAdapter);
157+
final LinearLayout llPlaybackPanel = (LinearLayout) findViewById(R.id.llPlayerPanel);
158+
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
159+
@Override
160+
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
161+
162+
}
163+
164+
@Override
165+
public void onPageSelected(int position) {
166+
if (position == 4) {
167+
llPlaybackPanel.setVisibility(View.GONE);
168+
} else {
169+
if (llPlaybackPanel.getVisibility() != View.VISIBLE) {
170+
llPlaybackPanel.setVisibility(View.VISIBLE);
171+
}
172+
}
173+
}
174+
175+
@Override
176+
public void onPageScrollStateChanged(int state) {
177+
178+
}
179+
});
156180

157181
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
158182
tabLayout.setupWithViewPager(mViewPager);
@@ -354,7 +378,7 @@ public CharSequence getPageTitle(int position) {
354378
case 3:
355379
return "Com";
356380
case 4:
357-
return "Chat";
381+
return "Shoutbox";
358382
default:
359383
return null;
360384
}

app/src/main/res/drawable/bot_chat_box_background.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
<solid android:color="@color/primary" />
88

99
<padding
10-
android:bottom="@dimen/activity_vertical_margin"
11-
android:left="@dimen/activity_horizontal_margin"
12-
android:right="@dimen/activity_horizontal_margin"
13-
android:top="@dimen/activity_vertical_margin" />
10+
android:bottom="8dp"
11+
android:left="8dp"
12+
android:right="8dp"
13+
android:top="8dp" />
1414

1515
<corners android:radius="10dp" />
1616
</shape>

app/src/main/res/layout/fragment_chat_bot.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,9 @@
4343
android:id="@+id/rvChatConsole"
4444
android:layout_width="match_parent"
4545
android:layout_height="match_parent"
46-
android:layout_above="@+id/rlChatControls" />
46+
android:layout_above="@+id/rlChatControls"
47+
android:paddingLeft="@dimen/activity_horizontal_margin"
48+
android:paddingRight="@dimen/activity_horizontal_margin" />
4749

4850

4951
</RelativeLayout>

app/src/main/res/layout/playback_panel.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3-
android:id="@+id/llPlayer"
3+
android:id="@+id/llPlayerPanel"
44
android:layout_width="match_parent"
55
android:layout_height="wrap_content"
66
android:layout_gravity="bottom"

app/src/main/res/layout/row_chat.xml

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,28 @@
22
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
33
android:layout_width="match_parent"
44
android:layout_height="wrap_content"
5-
android:background="?attr/selectableItemBackground"
5+
android:background="@drawable/human_chat_box_background"
66
android:clickable="true"
77
android:focusable="true"
8-
android:orientation="horizontal"
8+
android:orientation="vertical"
99
android:paddingBottom="@dimen/activity_vertical_margin"
1010
android:paddingLeft="@dimen/activity_horizontal_margin"
1111
android:paddingRight="@dimen/activity_horizontal_margin"
1212
android:paddingTop="@dimen/activity_vertical_margin">
1313

1414
<TextView
15-
android:id="@+id/tvChatMessageLocal"
15+
android:id="@+id/tvChatMessageBody"
1616
style="@style/TextAppearance.AppCompat.Medium"
1717
android:layout_width="match_parent"
1818
android:layout_height="match_parent"
19-
android:background="@drawable/human_chat_box_background"
2019
android:gravity="center"
2120
android:textColor="@color/primary" />
2221

2322
<TextView
24-
android:id="@+id/tvChatMessageRemote"
25-
style="@style/TextAppearance.AppCompat.Medium.Inverse"
26-
android:layout_width="match_parent"
27-
android:layout_height="match_parent"
23+
android:id="@+id/tvChatMessageSender"
24+
style="@style/TextAppearance.AppCompat.Small.Inverse"
25+
android:layout_width="wrap_content"
26+
android:layout_height="wrap_content"
2827
android:background="@drawable/bot_chat_box_background"
29-
android:gravity="center" />
28+
android:gravity="end|bottom" />
3029
</LinearLayout>

0 commit comments

Comments
 (0)