Skip to content

Commit 0062f97

Browse files
author
Sid Zi
committed
Merge branch 'chat' into development
Conflicts: app/src/main/java/com/sidzi/circleofmusic/adapters/ChatAdapter.java app/src/main/java/com/sidzi/circleofmusic/entities/ChatMessage.java app/src/main/java/com/sidzi/circleofmusic/fragments/ShoutboxFragment.java app/src/main/java/com/sidzi/circleofmusic/helpers/BasicAuthJsonObjectRequest.java app/src/main/res/layout/fragment_chat_bot.xml app/src/main/res/layout/row_chat.xml
2 parents 8b3d6b4 + 5912678 commit 0062f97

File tree

9 files changed

+357
-7
lines changed

9 files changed

+357
-7
lines changed
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
package com.sidzi.circleofmusic.adapters;
2+
3+
import android.content.Context;
4+
import android.support.v7.widget.RecyclerView;
5+
import android.view.LayoutInflater;
6+
import android.view.View;
7+
import android.view.ViewGroup;
8+
import android.widget.TextView;
9+
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;
15+
import com.sidzi.circleofmusic.R;
16+
import com.sidzi.circleofmusic.config;
17+
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;
23+
24+
import java.util.ArrayList;
25+
import java.util.List;
26+
27+
public class ChatAdapter extends RecyclerView.Adapter<ChatAdapter.ViewHolder> {
28+
29+
private List<ChatMessage> chatMessageList;
30+
private Context mContext;
31+
32+
public ChatAdapter(Context context) {
33+
super();
34+
mContext = context;
35+
chatMessageList = new ArrayList<>();
36+
populate();
37+
}
38+
39+
void populate() {
40+
RequestQueue rq = Volley.newRequestQueue(mContext);
41+
BasicAuthJsonObjectRequest request = new BasicAuthJsonObjectRequest(mContext, Request.Method.GET, config.com_url + "getMessages", null, new Response.Listener<JSONObject>() {
42+
@Override
43+
public void onResponse(JSONObject response) {
44+
addToArrayList(response);
45+
}
46+
}, new Response.ErrorListener() {
47+
@Override
48+
public void onErrorResponse(VolleyError error) {
49+
error.printStackTrace();
50+
}
51+
});
52+
rq.add(request);
53+
}
54+
55+
public void sendMessage(String message) {
56+
JSONObject params = new JSONObject();
57+
try {
58+
params.put("message_text", message);
59+
} catch (JSONException e) {
60+
e.printStackTrace();
61+
}
62+
RequestQueue rq = Volley.newRequestQueue(mContext);
63+
BasicAuthJsonObjectRequest request = new BasicAuthJsonObjectRequest(mContext, Request.Method.POST, config.com_url + "postMessage", params, new Response.Listener<JSONObject>() {
64+
@Override
65+
public void onResponse(JSONObject response) {
66+
addToArrayList(response);
67+
}
68+
}, new Response.ErrorListener() {
69+
@Override
70+
public void onErrorResponse(VolleyError error) {
71+
error.printStackTrace();
72+
}
73+
});
74+
rq.add(request);
75+
}
76+
77+
private void addToArrayList(JSONObject response) {
78+
try {
79+
JSONArray messages_list = response.getJSONArray("messages");
80+
chatMessageList.clear();
81+
for (int i = 0; i < messages_list.length(); i++) {
82+
chatMessageList.add(new ChatMessage(messages_list.getJSONObject(i).getString("username"), messages_list.getJSONObject(i).getString("message_text")));
83+
}
84+
} catch (JSONException e) {
85+
e.printStackTrace();
86+
}
87+
notifyDataSetChanged();
88+
}
89+
90+
@Override
91+
public ChatAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
92+
final View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_chat, parent, false);
93+
return new ViewHolder(view);
94+
}
95+
96+
@Override
97+
public void onBindViewHolder(ChatAdapter.ViewHolder holder, int position) {
98+
holder.tvChatMessageSender.setText(chatMessageList.get(position).getSender());
99+
holder.tvChatMessageBody.setText(chatMessageList.get(position).getBody());
100+
}
101+
102+
@Override
103+
public int getItemCount() {
104+
return chatMessageList.size();
105+
}
106+
107+
class ViewHolder extends RecyclerView.ViewHolder {
108+
private TextView tvChatMessageSender;
109+
private TextView tvChatMessageBody;
110+
111+
ViewHolder(View view) {
112+
super(view);
113+
this.tvChatMessageSender = (TextView) view.findViewById(R.id.tvChatMessageSender);
114+
this.tvChatMessageBody = (TextView) view.findViewById(R.id.tvChatMessageBody);
115+
}
116+
}
117+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.sidzi.circleofmusic.entities;
2+
3+
import com.j256.ormlite.field.DatabaseField;
4+
import com.j256.ormlite.table.DatabaseTable;
5+
6+
@DatabaseTable(tableName = "table_messages")
7+
public class ChatMessage {
8+
@DatabaseField(generatedId = true)
9+
private int id;
10+
11+
@DatabaseField
12+
private String body;
13+
14+
@DatabaseField
15+
private String sender;
16+
17+
public ChatMessage() {
18+
}
19+
20+
public ChatMessage(String sender, String body) {
21+
this.sender = sender;
22+
this.body = body;
23+
}
24+
25+
26+
public int getId() {
27+
return id;
28+
}
29+
30+
public void setId(int id) {
31+
this.id = id;
32+
}
33+
34+
public String getBody() {
35+
return body;
36+
}
37+
38+
public String getSender() {
39+
return sender;
40+
}
41+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.sidzi.circleofmusic.fragments;
2+
3+
import android.os.Bundle;
4+
import android.support.annotation.Nullable;
5+
import android.support.v4.app.Fragment;
6+
import android.support.v7.widget.LinearLayoutManager;
7+
import android.support.v7.widget.RecyclerView;
8+
import android.view.LayoutInflater;
9+
import android.view.View;
10+
import android.view.ViewGroup;
11+
import android.widget.EditText;
12+
import android.widget.ImageButton;
13+
14+
import com.sidzi.circleofmusic.R;
15+
import com.sidzi.circleofmusic.adapters.ChatAdapter;
16+
17+
18+
public class ShoutboxFragment extends Fragment {
19+
@Nullable
20+
@Override
21+
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
22+
View homeView = inflater.inflate(R.layout.fragment_chat_bot, container, false);
23+
final RecyclerView chatRecyclerView = (RecyclerView) homeView.findViewById(R.id.rvChatConsole);
24+
final ChatAdapter chatAdapter = new ChatAdapter(getContext());
25+
final LinearLayoutManager chatLayoutManager = new LinearLayoutManager(getContext());
26+
27+
chatLayoutManager.setStackFromEnd(true);
28+
chatRecyclerView.setAdapter(chatAdapter);
29+
chatRecyclerView.setLayoutManager(chatLayoutManager);
30+
ImageButton ibSend = (ImageButton) homeView.findViewById(R.id.ibSendMessage);
31+
final EditText etChatMessage = (EditText) homeView.findViewById(R.id.etChatMessage);
32+
ibSend.setOnClickListener(new View.OnClickListener() {
33+
@Override
34+
public void onClick(View view) {
35+
String message = etChatMessage.getText().toString();
36+
if (!message.equals("")) {
37+
etChatMessage.setText("");
38+
// Send message to server here
39+
chatAdapter.sendMessage(message);
40+
}
41+
}
42+
});
43+
return homeView;
44+
}
45+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.sidzi.circleofmusic.helpers;
2+
3+
import android.content.Context;
4+
import android.content.SharedPreferences;
5+
import android.provider.Settings;
6+
7+
import com.android.volley.AuthFailureError;
8+
import com.android.volley.Response;
9+
import com.android.volley.toolbox.JsonObjectRequest;
10+
11+
import org.json.JSONObject;
12+
13+
import java.util.HashMap;
14+
import java.util.Map;
15+
16+
public class BasicAuthJsonObjectRequest extends JsonObjectRequest {
17+
private String AuthToken = null;
18+
private String UserName = null;
19+
20+
public BasicAuthJsonObjectRequest(Context context, int method, String url, JSONObject jsonRequest, Response.Listener<JSONObject> listener, Response.ErrorListener errorListener) {
21+
super(method, url, jsonRequest, listener, errorListener);
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", "");
25+
}
26+
27+
@Override
28+
public Map<String, String> getHeaders() throws AuthFailureError {
29+
Map<String, String> params = new HashMap<>();
30+
params.put("Authorization", AuthToken);
31+
params.put("Username", UserName);
32+
return params;
33+
}
34+
}

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

Lines changed: 35 additions & 2 deletions
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;
@@ -47,6 +48,7 @@
4748
import com.sidzi.circleofmusic.fragments.BucketFragment;
4849
import com.sidzi.circleofmusic.fragments.LocalMusicFragment;
4950
import com.sidzi.circleofmusic.fragments.PotmFragment;
51+
import com.sidzi.circleofmusic.fragments.ShoutboxFragment;
5052
import com.sidzi.circleofmusic.fragments.TheFifthFragment;
5153
import com.sidzi.circleofmusic.helpers.BucketSaver;
5254
import com.sidzi.circleofmusic.helpers.DatabaseSynchronization;
@@ -152,6 +154,29 @@ public void onServiceDisconnected(ComponentName componentName) {
152154

153155
ViewPager mViewPager = (ViewPager) findViewById(R.id.container);
154156
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+
});
155180

156181
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
157182
tabLayout.setupWithViewPager(mViewPager);
@@ -324,15 +349,21 @@ public Fragment getItem(int position) {
324349
return new BucketFragment();
325350
case 3:
326351
return new TheFifthFragment();
352+
case 4:
353+
return new ShoutboxFragment();
327354
default:
328355
return null;
329356
}
330357
}
331358

332359
@Override
333360
public int getCount() {
334-
// Show 4 total pages.
335-
return 4;
361+
SharedPreferences settings = getSharedPreferences("com_prefs", 0);
362+
if (!settings.getBoolean("registered", false))
363+
// Show 4 total pages.
364+
return 4;
365+
else
366+
return 5;
336367
}
337368

338369
@Override
@@ -346,6 +377,8 @@ public CharSequence getPageTitle(int position) {
346377
return "Bucket";
347378
case 3:
348379
return "Com";
380+
case 4:
381+
return "Shoutbox";
349382
default:
350383
return null;
351384
}

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>
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:tools="http://schemas.android.com/tools"
4+
android:layout_width="match_parent"
5+
android:layout_height="match_parent"
6+
android:orientation="vertical"
7+
tools:context="com.sidzi.circleofmusic.ui.MainActivity$PlaceholderFragment">
8+
9+
10+
<RelativeLayout
11+
android:id="@+id/rlChatControls"
12+
android:layout_width="match_parent"
13+
android:layout_height="wrap_content"
14+
android:layout_alignParentBottom="true"
15+
android:orientation="horizontal">
16+
17+
<ImageButton
18+
android:id="@+id/ibSendMessage"
19+
android:layout_width="wrap_content"
20+
android:layout_height="wrap_content"
21+
android:layout_alignParentEnd="true"
22+
android:background="@android:color/transparent"
23+
android:contentDescription="@string/send_message"
24+
android:paddingBottom="@dimen/activity_vertical_margin"
25+
android:paddingLeft="@dimen/activity_horizontal_margin"
26+
android:paddingRight="@dimen/activity_horizontal_margin"
27+
android:paddingTop="@dimen/activity_vertical_margin"
28+
android:src="@drawable/ic_send" />
29+
30+
<EditText
31+
android:id="@+id/etChatMessage"
32+
android:layout_width="wrap_content"
33+
android:layout_height="wrap_content"
34+
android:layout_alignParentStart="true"
35+
android:layout_toStartOf="@+id/ibSendMessage"
36+
android:paddingBottom="@dimen/activity_vertical_margin"
37+
android:paddingLeft="@dimen/activity_horizontal_margin"
38+
android:paddingRight="@dimen/activity_horizontal_margin"
39+
android:paddingTop="@dimen/activity_vertical_margin" />
40+
</RelativeLayout>
41+
42+
<android.support.v7.widget.RecyclerView
43+
android:id="@+id/rvChatConsole"
44+
android:layout_width="match_parent"
45+
android:layout_height="match_parent"
46+
android:layout_above="@+id/rlChatControls"
47+
android:paddingLeft="@dimen/activity_horizontal_margin"
48+
android:paddingRight="@dimen/activity_horizontal_margin" />
49+
50+
51+
</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"

0 commit comments

Comments
 (0)