Commit 1ce01c63 authored by Rafal's avatar Rafal

Merge remote-tracking branch 'origin/master'

parents b137c064 98522569
...@@ -65,12 +65,10 @@ ...@@ -65,12 +65,10 @@
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/coverage-instrumented-classes" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/debug" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex-cache" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/cn.pedant.sweetalert/library/1.3/jars" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/cn.pedant.sweetalert/library/1.3/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.1.1/jars" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.1.1/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/cardview-v7/23.1.1/jars" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/cardview-v7/23.1.1/jars" />
...@@ -106,17 +104,12 @@ ...@@ -106,17 +104,12 @@
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.google.android.gms/play-services/8.3.0/jars" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.google.android.gms/play-services/8.3.0/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.pnikosis/materialish-progress/1.0/jars" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.pnikosis/materialish-progress/1.0/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jacoco" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaResources" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/libs" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/ndk" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/proguard" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/tmp" />
<excludeFolder url="file://$MODULE_DIR$/build/outputs" /> <excludeFolder url="file://$MODULE_DIR$/build/outputs" />
<excludeFolder url="file://$MODULE_DIR$/build/tmp" /> <excludeFolder url="file://$MODULE_DIR$/build/tmp" />
</content> </content>
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
package="anotherlineofcode.com.jointhecityapp" > package="anotherlineofcode.com.jointhecityapp">
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
...@@ -17,11 +17,11 @@ ...@@ -17,11 +17,11 @@
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Light" android:theme="@style/Theme.AppCompat.Light"
tools:replace="android:icon" > tools:replace="android:icon">
<activity <activity
android:name=".MainActivity" android:name=".MainActivity"
android:label="@string/app_name" android:label="@string/app_name"
android:screenOrientation="portrait" > android:screenOrientation="portrait">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
...@@ -47,7 +47,7 @@ ...@@ -47,7 +47,7 @@
<activity <activity
android:name=".MapsActivity" android:name=".MapsActivity"
android:label="@string/title_activity_maps" > android:label="@string/title_activity_maps">
<meta-data <meta-data
android:name="android.support.PARENT_ACTIVITY" android:name="android.support.PARENT_ACTIVITY"
android:value="anotherlineofcode.com.jointhecityapp.MainActivity" /> android:value="anotherlineofcode.com.jointhecityapp.MainActivity" />
...@@ -56,11 +56,21 @@ ...@@ -56,11 +56,21 @@
android:name=".FriendsActivity" android:name=".FriendsActivity"
android:label="@string/title_activity_friends" android:label="@string/title_activity_friends"
android:parentActivityName=".MainActivity" android:parentActivityName=".MainActivity"
android:theme="@style/Theme.AppCompat.Light.NoActionBar" > android:theme="@style/Theme.AppCompat.Light.NoActionBar">
<meta-data <meta-data
android:name="android.support.PARENT_ACTIVITY" android:name="android.support.PARENT_ACTIVITY"
android:value="anotherlineofcode.com.jointhecityapp.MainActivity" /> android:value="anotherlineofcode.com.jointhecityapp.MainActivity" />
</activity> </activity>
<activity
android:name=".discussion_support.ChatActivity"
android:label="@string/title_activity_chat"></activity>
<activity
android:name=".discussion_support.DiscussionActivity"
android:label="DiscussionActivity"></activity>
<activity
android:name=".BaseActivityWithMenu"
android:label="@string/title_activity_base_activity_with_menu"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"></activity>
<activity <activity
android:name=".AddApiActivity" android:name=".AddApiActivity"
android:label="@string/title_activity_add_api" android:label="@string/title_activity_add_api"
......
package anotherlineofcode.com.jointhecityapp;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import anotherlineofcode.com.jointhecityapp.discussion_support.DiscussionActivity;
public class BaseActivityWithMenu extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base_activity_with_menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
// if (id == R.id.map) {
// Intent intent = new Intent(this, MapsActivity.class);
// startActivity(intent);
// return true;
// }
if (id == R.id.api_list) {
Intent intent = new Intent(this, FriendsActivity.class);
startActivity(intent);
return true;
}
if (id == R.id.messages) {
Intent intent = new Intent(this, DiscussionActivity.class);
startActivity(intent);
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
}
...@@ -7,7 +7,7 @@ import android.support.v7.app.AppCompatActivity; ...@@ -7,7 +7,7 @@ import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import android.view.View; import android.view.View;
public class FriendsActivity extends AppCompatActivity { public class FriendsActivity extends BaseActivityWithMenu {
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
......
...@@ -27,7 +27,7 @@ import org.json.JSONObject; ...@@ -27,7 +27,7 @@ import org.json.JSONObject;
import cn.pedant.SweetAlert.SweetAlertDialog; import cn.pedant.SweetAlert.SweetAlertDialog;
import cz.msebera.android.httpclient.Header; import cz.msebera.android.httpclient.Header;
public class LoginAndRegistrationActivity extends AppCompatActivity { public class LoginAndRegistrationActivity extends BaseActivityWithMenu {
private AsyncHttpClient client; private AsyncHttpClient client;
private SharedPreferences sharedPreferences; private SharedPreferences sharedPreferences;
......
...@@ -28,7 +28,7 @@ import java.util.List; ...@@ -28,7 +28,7 @@ import java.util.List;
import cz.msebera.android.httpclient.Header; import cz.msebera.android.httpclient.Header;
public class MainActivity extends AppCompatActivity { public class MainActivity extends BaseActivityWithMenu {
public final static int LOGIN_REQUEST = 1; public final static int LOGIN_REQUEST = 1;
private SharedPreferences sharedPreferences; private SharedPreferences sharedPreferences;
...@@ -79,6 +79,12 @@ public class MainActivity extends AppCompatActivity { ...@@ -79,6 +79,12 @@ public class MainActivity extends AppCompatActivity {
startActivityForResult(intent, LOGIN_REQUEST); startActivityForResult(intent, LOGIN_REQUEST);
} }
if (savedInstanceState == null) {
// Add header and main menu fragments
}
// List<ApiObject> rowListItem = getAllItemList();
// RecyclerView.LayoutManager lLayout = new GridLayoutManager(MainActivity.this, 4);
final GridLayoutManager lLayout = new GridLayoutManager(context, 2); final GridLayoutManager lLayout = new GridLayoutManager(context, 2);
rView = (RecyclerView)findViewById(R.id.recycler_view); rView = (RecyclerView)findViewById(R.id.recycler_view);
...@@ -151,21 +157,5 @@ public class MainActivity extends AppCompatActivity { ...@@ -151,21 +157,5 @@ public class MainActivity extends AppCompatActivity {
return !sharedPreferences.getString("token", "").isEmpty(); return !sharedPreferences.getString("token", "").isEmpty();
} }
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
return super.onOptionsItemSelected(item);
}
} }
package anotherlineofcode.com.jointhecityapp.discussion_support;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.RequestParams;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import anotherlineofcode.com.jointhecityapp.BaseActivityWithMenu;
import anotherlineofcode.com.jointhecityapp.JSONParser;
import anotherlineofcode.com.jointhecityapp.R;
import cz.msebera.android.httpclient.Header;
public class ChatActivity extends BaseActivityWithMenu {
private String mDiscussionInfoLink;
private AsyncHttpClient mHttpClient;
private Discussion mDiscussion;
private List<Message> mMessages;
private RecyclerView mChatView;
private RecyclerView.LayoutManager mLayoutManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat);
Intent inputIntent = getIntent();
mDiscussionInfoLink = inputIntent.getExtras().getString(getString(R.string.discussion_link));
mChatView = (RecyclerView) findViewById(R.id.chat_recycler_view);
mChatView.setHasFixedSize(true);
mMessages = new ArrayList<Message>();
mLayoutManager = new LinearLayoutManager(ChatActivity.this);
MessageViewAdapter mMessageViewAdapter = new MessageViewAdapter(mMessages);
mChatView.setAdapter(mMessageViewAdapter);
mChatView.setLayoutManager(mLayoutManager);
getDiscusionInfo();
Button sendMessageButton = (Button) findViewById(R.id.chatSendButton);
sendMessageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
EditText editText = (EditText)findViewById(R.id.messageEdit);
String message = editText.getText().toString();
sendMessage(message);
getMessages();
}
});
}
private void getDiscusionInfo(){
mHttpClient = new AsyncHttpClient();
mHttpClient.get(mDiscussionInfoLink, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
Log.i("info", "Successfuly got tags from server");
JSONObject jsonDiscussion = JSONParser.parseObject(responseBody);
mDiscussion = new Discussion(jsonDiscussion);
Log.i("info", "got discussion " + mDiscussion.toString());
getMessages();
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
Log.i("error", "Failure while getting tags from server");
Log.i("error", error.toString());
}
});
};
private void getMessages(){
for(String messageLink: mDiscussion.getMessages()){
AsyncHttpClient client = new AsyncHttpClient();
client.get(messageLink, new AsyncHttpResponseHandler(){
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
JSONObject jsonResponse = JSONParser.parseObject(responseBody);
try {
mMessages.add(new Message(jsonResponse));
} catch (JSONException e){
e.printStackTrace();
}
updateView();
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
Log.i("error", "We have a failure");
Log.i("error", "Error: " + error.toString());
}
});
}
}
private void updateView(){
// Messages may not arive in proper sequence
// Collections.sort(mMessages, (m1, m2) -> m1.getId() > m2.getId());
MessageViewAdapter mMessageViewAdapter = new MessageViewAdapter(mMessages);
mChatView.setAdapter(mMessageViewAdapter);
}
private void sendMessage(String text){
AsyncHttpClient client = new AsyncHttpClient();
RequestParams requestParams = new RequestParams();
requestParams.put("text", text);
requestParams.put("user", "Default user");
client.post(getString(R.string.api_url) + "/api/text_message/", new AsyncHttpResponseHandler(){
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
Log.i("info", "Message successfully sent");
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
Log.i("info", "Message wasn't sent to server");
}
});
}
}
package anotherlineofcode.com.jointhecityapp.discussion_support;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* Created by adam on 12.01.16.
*/
public class Discussion {
// Discussion title
private String mQuestion;
// Discussion owner
private String mUser;
private String mUserLink;
// Discussion category
private String mTag;
private String mDiscussionLink;
private ArrayList<String> mMessages;
public Discussion(){
mQuestion = "Default question";
mUser = "Unknown";
mTag = "Default tag";
mDiscussionLink = "127.0.0.1";
}
public void getAuthorFromServer(){
}
public Discussion(JSONObject json){
try {
mQuestion = (String) json.get("question");
mUserLink = (String) json.get("user");
mTag = (String) json.get("tag");
mDiscussionLink = (String) json.get("url");
mMessages = new ArrayList<String>();
JSONArray jsonArray = json.getJSONArray("message");
for (int i=0; i<jsonArray.length(); i++) {
mMessages.add( jsonArray.getString(i) );
}
} catch (JSONException e) {
e.printStackTrace();
}
getAuthorFromServer();
}
@Override
public String toString(){
return mQuestion;
}
public String getUser(){
return mUser;
}
public String getTag(){
return mTag;
}
public String getDiscussionLink(){return mDiscussionLink;}
public List<String> getMessages(){return mMessages;}
}
package anotherlineofcode.com.jointhecityapp.discussion_support;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
import anotherlineofcode.com.jointhecityapp.BaseActivityWithMenu;
import anotherlineofcode.com.jointhecityapp.JSONParser;
import anotherlineofcode.com.jointhecityapp.R;
import cz.msebera.android.httpclient.Header;
public class DiscussionActivity extends BaseActivityWithMenu {
private List<Tag> tags;
private ArrayList<Discussion> mDiscussionsList;
private AsyncHttpClient mHttpClient;
private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.i("info","DiscussionActivity onCreate called");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_discussion);
mRecyclerView = (RecyclerView) findViewById(R.id.discussion_recycler_view);
mRecyclerView.setHasFixedSize(true);
mDiscussionsList = new ArrayList<Discussion>();
mLayoutManager = new LinearLayoutManager(DiscussionActivity.this);
RecyclerDiscussionAdapter mRecyclerViewAdapter = new RecyclerDiscussionAdapter(mDiscussionsList);
mRecyclerView.setAdapter(mRecyclerViewAdapter);
mRecyclerView.setLayoutManager(mLayoutManager);
getTagsFromServer();
getDiscussionsFromServer();
}
private void getTagsFromServer(){
Log.i("info","DiscussionActivity getTagsFromServer called");
mHttpClient = new AsyncHttpClient();
tags = new ArrayList<Tag>();
mHttpClient.get(getString(R.string.api_url) + "api/tag/", new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
Log.i("info", "Successfuly got tags from server");
JSONObject jsonResponse = JSONParser.parseObject(responseBody);
try {
JSONArray tags_json = jsonResponse.getJSONArray("results");
for(int i = 0; i < tags_json.length(); i++){
Tag tag = new Tag((JSONObject)tags_json.get(i));
tags.add(tag);
}
} catch (JSONException e) {
e.printStackTrace();
}
Log.d("debug", "Got tags: " + tags.toString());
updateView();
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
Log.i("error", "Failure while getting tags from server");
Log.i("error", error.toString());
}
});
}
private void getDiscussionsFromServer(){
mHttpClient = new AsyncHttpClient();
mDiscussionsList = new ArrayList<Discussion>();
mHttpClient.get(getString(R.string.api_url) + "api/discussion/", new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
Log.i("info", "Successfuly got tags from server");
JSONObject jsonResponse = JSONParser.parseObject(responseBody);
try {
JSONArray discussions_json = jsonResponse.getJSONArray("results");
for(int i = 0; i < discussions_json.length(); i++){
Discussion discussion = new Discussion((JSONObject)discussions_json.get(i));
mDiscussionsList.add(discussion);
}
} catch (JSONException e) {
e.printStackTrace();
}
Log.d("debug", "Got discussions: " + tags.toString());
updateView();
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
Log.i("error", "Failure while getting tags from server");
Log.i("error", error.toString());
}
});
}
private void updateView(){
RecyclerDiscussionAdapter mRecyclerViewAdapter = new RecyclerDiscussionAdapter(mDiscussionsList);
mRecyclerView.setAdapter(mRecyclerViewAdapter);
}
}
package anotherlineofcode.com.jointhecityapp.discussion_support;
import org.json.JSONException;
import org.json.JSONObject;
/**
* Created by adam on 12.01.16.
*/
public class Message {
private String mTimestamp;
private String mText;
private String mUser;
private int mId;
public Message(){
mTimestamp = "1970-01-01 12:00:00";
mText = "Default text";
mUser = "Rafaello";
}
public Message(JSONObject jsonObject) throws JSONException {
mTimestamp = (String) jsonObject.get("created_at");
mText = (String) jsonObject.get("text");
mUser = (String) jsonObject.get("user");
mId = (int) jsonObject.get("id");
}
public int getId(){
return mId;
}
public String getUser(){
return mUser;
}
@Override
public String toString(){
return mText;
}
}
package anotherlineofcode.com.jointhecityapp.discussion_support;
import android.app.Activity;
import android.content.Intent;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import java.util.List;
import anotherlineofcode.com.jointhecityapp.R;
/**
* Created by adam on 17.01.16.
*/
public class MessageViewAdapter extends RecyclerView.Adapter<MessageViewAdapter.ViewHolder> {
private List<Message> mDataset;
public static class ViewHolder extends RecyclerView.ViewHolder{
public LinearLayout mView;
private int mPosition;
public ViewHolder(LinearLayout v) {
super(v);
mView = v;
mPosition = getAdapterPosition();
}
public View getView(){
return mView;
}
}
public MessageViewAdapter(List<Message> messages){
mDataset = messages;
}
@Override
public MessageViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.discussion_list_view, parent, false);
ViewHolder vh = new ViewHolder((LinearLayout)v);
return vh;
}
@Override
public void onBindViewHolder(MessageViewAdapter.ViewHolder holder, int position) {
TextView title = (TextView) holder.getView().findViewById(R.id.discussion_name);
title.setText(mDataset.get(position).toString());
TextView author = (TextView) holder.getView().findViewById(R.id.discussion_owner);
author.setText(mDataset.get(position).getUser());
}
@Override
public int getItemCount() {
return mDataset.size();
}
}
package anotherlineofcode.com.jointhecityapp.discussion_support;
import android.app.Activity;
import android.content.Intent;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import anotherlineofcode.com.jointhecityapp.R;
/**
* Created by adam on 12.01.16.
*/
public class RecyclerDiscussionAdapter extends RecyclerView.Adapter<RecyclerDiscussionAdapter.ViewHolder> {
private static ArrayList<Discussion> mDataset;
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
public LinearLayout mView;
private int mPosition;
public ViewHolder(LinearLayout v) {
super(v);
v.setOnClickListener(this);
mView = v;
}
public View getView(){
return mView;
}
@Override
public void onClick(View view) {
mPosition = getAdapterPosition();
if(mPosition == -1) return;
Activity parentAcitivity = (Activity) view.getContext();
Toast.makeText(view.getContext(), "Item clicked", Toast.LENGTH_SHORT);
Intent chatIntent = new Intent(parentAcitivity, ChatActivity.class);
String discussionLink = mDataset.get(mPosition).getDiscussionLink();
chatIntent.putExtra(parentAcitivity.getString(R.string.discussion_link), discussionLink);
parentAcitivity.startActivity(chatIntent);
}
}
public RecyclerDiscussionAdapter(ArrayList<Discussion> myDataset) {
mDataset = myDataset;
}
@Override
public RecyclerDiscussionAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.discussion_list_view, parent, false);
ViewHolder vh = new ViewHolder((LinearLayout)v);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
TextView title = (TextView) holder.getView().findViewById(R.id.discussion_name);
title.setText(mDataset.get(position).toString());
TextView author = (TextView) holder.getView().findViewById(R.id.discussion_owner);
author.setText(mDataset.get(position).getUser());
}
@Override
public int getItemCount() {
return mDataset.size();
}
}
package anotherlineofcode.com.jointhecityapp.discussion_support;
import android.content.Context;
import android.content.Intent;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import org.json.JSONException;
import org.json.JSONObject;
import anotherlineofcode.com.jointhecityapp.JSONParser;
import cz.msebera.android.httpclient.Header;
/**
* Created by adam on 12.01.16.
*/
public class Tag {
private String mName;
private String mLocation_link;
private Float mLatitude;
private Float mLongitude;
public Tag(JSONObject jsonObject){
try {
mName = (String) jsonObject.get("name");
mLocation_link = (String) ((JSONObject)jsonObject).get("localization");
} catch (JSONException e) {
e.printStackTrace();
}
AsyncHttpClient client = new AsyncHttpClient();
client.get(mLocation_link, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
JSONObject jsonResponse = JSONParser.parseObject(responseBody);
try {
mLongitude = Float.parseFloat((String)jsonResponse.get("longitude"));
mLatitude = Float.parseFloat((String) jsonResponse.get("latitude"));
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
}
});
}
public void startChat(Context context){
Intent startChat = new Intent(context, ChatActivity.class);
}
@Override
public String toString(){
return mName;
}
}
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="anotherlineofcode.com.jointhecityapp.BaseActivityWithMenu">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_base_activity_with_menu" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="20dp">
<EditText
android:id="@+id/messageEdit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_toLeftOf="@+id/chatSendButton"
android:autoText="true"
android:hint="type message" />
<Button
android:id="@+id/chatSendButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:background="@color/background_floating_material_dark"
android:text="Send MSG"
android:textColor="@color/background_material_light"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/chat_recycler_view"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="false"
android:layout_alignParentTop="false"
android:layout_marginBottom="20dp"
android:layout_above="@+id/messageEdit"
android:layout_marginTop="10dp"
android:listSelector="@android:color/transparent"
android:transcriptMode="alwaysScroll"
android:divider="@null" />
</RelativeLayout>
</LinearLayout>
\ No newline at end of file
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".discussion_support.DiscussionActivity">
<Spinner
android:id="@+id/tags_spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<android.support.v7.widget.RecyclerView
android:id="@+id/discussion_recycler_view"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
...@@ -5,8 +5,9 @@ ...@@ -5,8 +5,9 @@
android:paddingTop="@dimen/activity_vertical_margin" android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin"
android:orientation="vertical" android:orientation="vertical"
android:background="@drawable/background"
tools:context="anotherlineofcode.com.jointhecityapp.LoginAndRegistrationActivity"> tools:context="anotherlineofcode.com.jointhecityapp.LoginAndRegistrationActivity">
<!--android:background="@drawable/background"-->
<ImageView android:id="@+id/logo" <ImageView android:id="@+id/logo"
android:src="@drawable/logo" android:src="@drawable/logo"
......
...@@ -3,8 +3,8 @@ ...@@ -3,8 +3,8 @@
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
android:background="@drawable/background"> <!--android:background="@drawable/background">-->
<android.support.v7.widget.RecyclerView <android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view" android:id="@+id/recycler_view"
......
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:orientation="vertical">
<TextView
android:id="@+id/txtInfo"
android:layout_width="wrap_content"
android:layout_height="30sp"
android:layout_gravity="right"
android:textSize="12sp"
android:textColor="@android:color/darker_gray" />
<LinearLayout
android:id="@+id/contentWithBackground"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:background="@drawable/in_message_bg"
android:paddingLeft="10dp"
android:paddingBottom="10dp"
android:orientation="vertical">
<TextView
android:id="@+id/txtMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:maxWidth="240dp" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="anotherlineofcode.com.jointhecityapp.BaseActivityWithMenu"
tools:showIn="@layout/activity_base_activity_with_menu">
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="20dp">
<TextView
android:id="@+id/discussion_name"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:layout_margin="10dp"
/>
<TextView
android:id="@+id/discussion_owner"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:layout_margin="10dp"
></TextView>
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="20dp">
<TextView
android:id="@+id/discussion_name"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:layout_margin="10dp"
android:background="@drawable/in_message_bg"
/>
<TextView
android:id="@+id/discussion_owner"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:layout_margin="10dp"
></TextView>
</LinearLayout>
\ No newline at end of file
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".discussion_support.ChatActivity">
<item android:id="@+id/action_settings" android:title="@string/action_settings"
android:orderInCategory="100" app:showAsAction="never" />
</menu>
<menu xmlns:android="http://schemas.android.com/apk/res/android" <menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity"> xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/menu"
tools:context=".MainActivity">
<item <item
android:id="@+id/api_list" android:id="@+id/api_list"
......
...@@ -10,9 +10,13 @@ ...@@ -10,9 +10,13 @@
<string name="api_url">http://jointhecity.telemabk.pl/</string> <string name="api_url">http://jointhecity.telemabk.pl/</string>
<string name="action_sign_in">Zaloguj się</string> <string name="action_sign_in">Zaloguj się</string>
<!-- TODO: Remove or change this placeholder text --> <!-- TODO: Remove or change this placeholder text -->
<string name="hello_blank_fragment">Hello blank fragment</string> <string name="hello_blank_fragment">Hello blank fragment</string>
<string name="title_activity_maps">Map</string> <string name="title_activity_maps">Map</string>
<string name="title_activity_friends">FriendsActivity</string> <string name="title_activity_friends">FriendsActivity</string>
<string name="title_activity_chat">ChatActivity</string>
<string name="title_activity_base_activity_with_menu">BaseActivityWithMenu</string>
<string name="discussion_link">Discussion link</string>
<string name="title_activity_add_api">AddApiActivity</string> <string name="title_activity_add_api">AddApiActivity</string>
</resources> </resources>
...@@ -3,8 +3,12 @@ ...@@ -3,8 +3,12 @@
<!-- Base application theme. --> <!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. --> <!-- Customize your theme here. -->
<item name="windowActionBar">false</item>
</style> </style>
<style name="AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" /> <style name="AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
<style name="PopupOverlay" parent="ThemeOverlay.AppCompat.Light" /> <style name="PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
</resources> </resources>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment