소스 검색

Ееееееееееееееееееее сообщения отправляются

sneiasckin 5 년 전
부모
커밋
90f5a7bbab

+ 7 - 4
app/src/main/AndroidManifest.xml

@@ -9,11 +9,14 @@
         android:roundIcon="@mipmap/ic_launcher_round"
         android:supportsRtl="true"
         android:theme="@style/AppTheme">
-        <activity android:name=".LoginActivity"
-            android:parentActivityName=".RegisterActivity"></activity>
+        <activity android:name=".MessageActivity"></activity>
+        <activity
+            android:name=".LoginActivity"
+            android:parentActivityName=".RegisterActivity" />
         <activity android:name=".MainActivity" />
-        <activity android:name=".RegisterActivity"
-            android:parentActivityName=".LoginActivity"></activity>
+        <activity
+            android:name=".RegisterActivity"
+            android:parentActivityName=".LoginActivity" />
         <activity android:name=".StartActivity">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />

+ 13 - 0
app/src/main/java/com/example/chatapp/MainActivity.java

@@ -16,6 +16,8 @@ import android.view.MenuItem;
 import android.widget.TextView;
 
 import com.bumptech.glide.Glide;
+import com.example.chatapp.fragments.ChatsFragment;
+import com.example.chatapp.fragments.UsersFragment;
 import com.example.chatapp.model.User;
 import com.google.android.material.tabs.TabLayout;
 import com.google.firebase.auth.FirebaseAuth;
@@ -58,6 +60,12 @@ public class MainActivity extends AppCompatActivity {
         viewPager = findViewById(R.id.viewPager);
 
         ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
+        viewPagerAdapter.addFragment(new ChatsFragment(), "Chats");
+        viewPagerAdapter.addFragment(new UsersFragment(), "Users");
+
+        viewPager.setAdapter(viewPagerAdapter);
+        tabLayout.setupWithViewPager(viewPager);
+
     }
 
     private void fetchCurrentUser() {
@@ -126,6 +134,11 @@ public class MainActivity extends AppCompatActivity {
             return fragments.size();
         }
 
+        public void addFragment(Fragment fragment, String title) {
+            fragments.add(fragment);
+            titles.add(title);
+        }
+
         @Nullable
         @Override
         public CharSequence getPageTitle(int position) {

+ 152 - 0
app/src/main/java/com/example/chatapp/MessageActivity.java

@@ -0,0 +1,152 @@
+package com.example.chatapp;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.widget.Toolbar;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.ImageButton;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.example.chatapp.adapter.MessageAdapter;
+import com.example.chatapp.model.Chat;
+import com.example.chatapp.model.User;
+import com.google.firebase.auth.FirebaseAuth;
+import com.google.firebase.auth.FirebaseUser;
+import com.google.firebase.database.DataSnapshot;
+import com.google.firebase.database.DatabaseError;
+import com.google.firebase.database.DatabaseReference;
+import com.google.firebase.database.FirebaseDatabase;
+import com.google.firebase.database.ValueEventListener;
+import com.squareup.picasso.Picasso;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import de.hdodenhof.circleimageview.CircleImageView;
+
+public class MessageActivity extends AppCompatActivity {
+
+    private CircleImageView circleImageView;
+    private TextView username;
+    private FirebaseUser firebaseUser;
+    private DatabaseReference reference;
+    private Intent intent;
+    private EditText sendInput;
+    private ImageButton sendButton;
+    MessageAdapter messageAdapter;
+    List<Chat> mChat;
+    RecyclerView recyclerView;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_message);
+
+        intent = getIntent();
+        final String userId = intent.getStringExtra("userId");
+
+        final Toolbar toolbar = findViewById(R.id.toolbarMessage);
+        setSupportActionBar(toolbar);
+        getSupportActionBar().setTitle("");
+        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                finish();
+            }
+        });
+
+        recyclerView = findViewById(R.id.messagesList);
+        recyclerView.setHasFixedSize(true);
+        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getApplicationContext());
+        linearLayoutManager.setStackFromEnd(true);
+        recyclerView.setLayoutManager(linearLayoutManager);
+
+        circleImageView = findViewById(R.id.titleCircleImageViewMessage);
+        username = findViewById(R.id.titleRegistrationMessage);
+
+        firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
+        reference = FirebaseDatabase.getInstance().getReference("Users").child(userId);
+
+        sendInput = findViewById(R.id.sendInput);
+        sendButton = findViewById(R.id.sendButton);
+        sendButton.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                String message = sendInput.getText().toString();
+                if (!message.equals("")) {
+                    sendMessage(firebaseUser.getUid(), userId, message);
+                } else {
+                    Toast.makeText(MessageActivity.this, "Enter message", Toast.LENGTH_SHORT).show();
+                }
+                sendInput.setText("");
+            }
+        });
+
+        reference.addValueEventListener(new ValueEventListener() {
+            @Override
+            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
+                User user = dataSnapshot.getValue(User.class);
+                username.setText(user.getUsername());
+                Picasso.get().load(user.getImageURL()).into(circleImageView);
+
+                readMessage(firebaseUser.getUid(), userId, user.getImageURL());
+            }
+
+            @Override
+            public void onCancelled(@NonNull DatabaseError databaseError) {
+
+            }
+        });
+
+    }
+
+    private void sendMessage(String sender, String receiver, String message) {
+
+        DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
+
+        HashMap<String, Object> hashMap = new HashMap<>();
+        hashMap.put("sender", sender);
+        hashMap.put("receiver", receiver);
+        hashMap.put("message", message);
+
+        reference.child("Chats").push().setValue(hashMap);
+    }
+
+    private void readMessage(final String myId, final String userId, final String imageUrl) {
+
+        mChat = new ArrayList<>();
+
+        reference = FirebaseDatabase.getInstance().getReference("Chats");
+        reference.addValueEventListener(new ValueEventListener() {
+            @Override
+            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
+                mChat.clear();
+                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
+                    Chat chat = snapshot.getValue(Chat.class);
+                    if (chat.getReceiver().equals(myId) && chat.getSender().equals(userId) ||
+                        chat.getReceiver().equals(userId) && chat.getSender().equals(myId)) {
+                        mChat.add(chat);
+                    }
+                    messageAdapter = new MessageAdapter(getApplicationContext(), mChat, imageUrl);
+                    recyclerView.setAdapter(messageAdapter);
+                }
+            }
+
+            @Override
+            public void onCancelled(@NonNull DatabaseError databaseError) {
+
+            }
+        });
+
+    }
+
+}

+ 86 - 0
app/src/main/java/com/example/chatapp/adapter/MessageAdapter.java

@@ -0,0 +1,86 @@
+package com.example.chatapp.adapter;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.example.chatapp.R;
+import com.example.chatapp.model.Chat;
+import com.google.firebase.auth.FirebaseAuth;
+import com.google.firebase.auth.FirebaseUser;
+import com.squareup.picasso.Picasso;
+
+import java.util.List;
+
+public class MessageAdapter extends RecyclerView.Adapter<MessageAdapter.ViewHolder> {
+
+    private static final int MSG_TYPE_LEFT = 0;
+    private static final int MSG_TYPE_RIGHT = 1;
+
+    private Context mContext;
+    private List<Chat> mChat;
+    private String imageUrl;
+
+    FirebaseUser firebaseUser;
+
+    public MessageAdapter(Context mContext, List<Chat> mChat, String imageUrl) {
+        this.mChat = mChat;
+        this.mContext = mContext;
+        this.imageUrl = imageUrl;
+    }
+
+    @NonNull
+    @Override
+    public MessageAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+        if (viewType == MSG_TYPE_RIGHT) {
+            View view = LayoutInflater.from(mContext).inflate(R.layout.chat_item_right, parent,false);
+            return new MessageAdapter.ViewHolder(view);
+        } else {
+            View view = LayoutInflater.from(mContext).inflate(R.layout.chat_item_left, parent,false);
+            return new MessageAdapter.ViewHolder(view);
+        }
+    }
+
+    @Override
+    public void onBindViewHolder(@NonNull MessageAdapter.ViewHolder holder, int position) {
+
+        Chat chat = mChat.get(position);
+        holder.show_message.setText(chat.getMessage());
+
+        Picasso.get().load(imageUrl).into(holder.profileImageView);
+
+    }
+
+    @Override
+    public int getItemCount() {
+        return mChat.size();
+    }
+
+    public class ViewHolder extends RecyclerView.ViewHolder {
+
+        public TextView show_message;
+        public ImageView profileImageView;
+
+        public ViewHolder(View itemView) {
+            super(itemView);
+            show_message = itemView.findViewById(R.id.show_message);
+            profileImageView = itemView.findViewById(R.id.profileImage);
+        }
+    }
+
+    @Override
+    public int getItemViewType(int position) {
+        firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
+        if (mChat.get(position).getSender().equals(firebaseUser.getUid())) {
+            return MSG_TYPE_RIGHT;
+        } else {
+            return MSG_TYPE_LEFT;
+        }
+    }
+}

+ 70 - 0
app/src/main/java/com/example/chatapp/adapter/UserAdapter.java

@@ -0,0 +1,70 @@
+package com.example.chatapp.adapter;
+
+import android.content.Context;
+import android.content.Intent;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.example.chatapp.MessageActivity;
+import com.example.chatapp.R;
+import com.example.chatapp.model.User;
+import com.squareup.picasso.Picasso;
+
+import java.util.List;
+
+public class UserAdapter extends RecyclerView.Adapter<UserAdapter.ViewHolder> {
+
+    private Context mContext;
+    private List<User> mUsers;
+
+    public UserAdapter(Context mContext, List<User> mUsers) {
+        this.mUsers = mUsers;
+        this.mContext = mContext;
+    }
+
+    @NonNull
+    @Override
+    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+        View view = LayoutInflater.from(mContext).inflate(R.layout.user_item, parent,false);
+        return new UserAdapter.ViewHolder(view);
+    }
+
+    @Override
+    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
+        final User user = mUsers.get(position);
+        holder.username.setText(user.getUsername());
+        Picasso.get().load(user.getImageURL()).into(holder.profileImageView);
+
+        holder.itemView.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                Intent intent = new Intent(mContext, MessageActivity.class);
+                intent.putExtra("userId", user.getId());
+                mContext.startActivity(intent);
+            }
+        });
+    }
+
+    @Override
+    public int getItemCount() {
+        return mUsers.size();
+    }
+
+    public class ViewHolder extends RecyclerView.ViewHolder {
+
+        public TextView username;
+        public ImageView profileImageView;
+
+        public ViewHolder(View itemView) {
+            super(itemView);
+            username = itemView.findViewById(R.id.usernameUserListMain);
+            profileImageView = itemView.findViewById(R.id.profileImageUserListMain);
+        }
+    }
+}

+ 81 - 0
app/src/main/java/com/example/chatapp/fragments/UsersFragment.java

@@ -0,0 +1,81 @@
+package com.example.chatapp.fragments;
+
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.example.chatapp.R;
+import com.example.chatapp.adapter.UserAdapter;
+import com.example.chatapp.model.User;
+import com.google.firebase.auth.FirebaseAuth;
+import com.google.firebase.auth.FirebaseUser;
+import com.google.firebase.database.DataSnapshot;
+import com.google.firebase.database.DatabaseError;
+import com.google.firebase.database.DatabaseReference;
+import com.google.firebase.database.FirebaseDatabase;
+import com.google.firebase.database.ValueEventListener;
+import com.squareup.picasso.Picasso;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class UsersFragment extends Fragment {
+
+    private RecyclerView recyclerView;
+    private List<User> mUser;
+    private UserAdapter userAdapter;
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+                             Bundle savedInstanceState) {
+        // Inflate the layout for this fragment
+        View view = inflater.inflate(R.layout.fragment_users, container, false);
+
+        recyclerView = view.findViewById(R.id.recyclerView);
+        recyclerView.setHasFixedSize(true);
+        recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
+
+        mUser = new ArrayList<>();
+
+        readUsers();
+        
+        return view;
+    }
+
+    private void readUsers() {
+
+        final FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
+        DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Users");
+
+        reference.addValueEventListener(new ValueEventListener() {
+            @Override
+            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
+                mUser.clear();
+                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
+                    User user = snapshot.getValue(User.class);
+
+                    assert user != null;
+                    assert firebaseUser != null;
+                    if (!user.getId().equals(firebaseUser.getUid())) {
+                        mUser.add(user);
+                    }
+                }
+
+                userAdapter = new UserAdapter(getContext(), mUser);
+                recyclerView.setAdapter(userAdapter);
+            }
+
+            @Override
+            public void onCancelled(@NonNull DatabaseError databaseError) {
+
+            }
+        });
+    }
+
+}

+ 41 - 0
app/src/main/java/com/example/chatapp/model/Chat.java

@@ -0,0 +1,41 @@
+package com.example.chatapp.model;
+
+public class Chat {
+
+    private String sender;
+    private String receiver;
+    private String message;
+
+    public Chat(String sender, String receiver, String message) {
+        this.sender = sender;
+        this.receiver = receiver;
+        this.message = message;
+    }
+
+    public Chat() {
+    }
+
+    public String getSender() {
+        return sender;
+    }
+
+    public void setSender(String sender) {
+        this.sender = sender;
+    }
+
+    public String getReceiver() {
+        return receiver;
+    }
+
+    public void setReceiver(String receiver) {
+        this.receiver = receiver;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+}

+ 11 - 0
app/src/main/res/drawable-anydpi/ic_send_message.xml

@@ -0,0 +1,11 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24"
+    android:tint="#FFBE42"
+    android:alpha="0.8">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M2.01,21L23,12 2.01,3 2,10l15,2 -15,2z"/>
+</vector>

BIN
app/src/main/res/drawable-hdpi/ic_send_message.png


BIN
app/src/main/res/drawable-mdpi/ic_send_message.png


BIN
app/src/main/res/drawable-xhdpi/ic_send_message.png


BIN
app/src/main/res/drawable-xxhdpi/ic_send_message.png


+ 10 - 0
app/src/main/res/drawable/background_left.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+
+    <corners android:radius="10dp"
+        android:topLeftRadius="0dp"/>
+
+    <solid android:color="#FFE2DCDC"/>
+
+</shape>

+ 10 - 0
app/src/main/res/drawable/background_right.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+
+    <corners android:radius="10dp"
+        android:topRightRadius="0dp"/>
+
+    <solid android:color="@android:color/holo_orange_light"/>
+
+</shape>

+ 8 - 9
app/src/main/res/layout/activity_main.xml

@@ -15,7 +15,7 @@
         android:id="@+id/viewMain"
         android:layout_width="wrap_content"
         android:layout_height="100sp"
-        android:layout_marginTop="10dp"
+        android:layout_marginTop="5dp"
         android:background="@android:color/holo_red_light"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintHorizontal_bias="0.0"
@@ -46,21 +46,20 @@
     <androidx.viewpager.widget.ViewPager
         android:id="@+id/viewPager"
         android:layout_width="match_parent"
-        android:layout_height="555sp"
-        app:layout_constraintBottom_toBottomOf="parent"
+        android:layout_height="565sp"
+        android:layout_marginTop="5dp"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@+id/viewMain"
-        app:layout_constraintVertical_bias="1.0">
+        app:layout_constraintTop_toBottomOf="@+id/viewMain">
 
         <com.google.android.material.tabs.TabLayout
             android:id="@+id/tabLayout"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:background="@android:color/holo_red_light"
-            app:tabIndicator="@android:color/holo_red_light"
-            app:tabSelectedTextColor="@android:color/holo_red_light"
-            app:tabTextColor="@android:color/holo_red_light" />
+            android:background="@android:color/holo_orange_light"
+            app:tabIndicator="@android:color/black"
+            app:tabSelectedTextColor="@android:color/black"
+            app:tabTextColor="@android:color/black" />
     </androidx.viewpager.widget.ViewPager>
 
 

+ 76 - 0
app/src/main/res/layout/activity_message.xml

@@ -0,0 +1,76 @@
+<?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"
+    tools:context=".MessageActivity"
+    android:background="#00CFCFCF">
+
+
+    <androidx.appcompat.widget.Toolbar
+        android:id="@+id/toolbarMessage"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@android:color/holo_red_light"
+        android:orientation="vertical">
+
+        <de.hdodenhof.circleimageview.CircleImageView
+            android:id="@+id/titleCircleImageViewMessage"
+            android:layout_width="50dp"
+            android:layout_height="50dp"
+            android:layout_marginStart="5dp"
+            android:layout_marginTop="5dp"
+            android:layout_margin="5dp"
+            app:civ_border_width="2sp"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="@+id/viewMain" />
+
+        <TextView
+            android:id="@+id/titleRegistrationMessage"
+            android:layout_width="200dp"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="16dp"
+            android:layout_marginTop="20dp"
+            android:text="Username"
+            android:textSize="16sp"
+            app:layout_constraintStart_toEndOf="@+id/titleCircleImageViewMessage"
+            app:layout_constraintTop_toTopOf="@+id/viewMain" />
+
+    </androidx.appcompat.widget.Toolbar>
+
+    <androidx.recyclerview.widget.RecyclerView
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:id="@+id/messagesList"
+        android:layout_below="@+id/toolbarMessage"
+        android:layout_above="@+id/sendRelativeLayout"/>
+
+    <RelativeLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_alignParentBottom="true"
+        android:background="#F3EFEF"
+        android:padding="5dp"
+        android:id="@+id/sendRelativeLayout">
+
+        <EditText
+            android:id="@+id/sendInput"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_centerVertical="true"
+            android:layout_toLeftOf="@id/sendButton"
+            android:background="@android:color/transparent"
+            android:hint="Enter message..." />
+
+        <ImageButton
+            android:id="@+id/sendButton"
+            android:layout_width="40dp"
+            android:layout_height="40dp"
+            android:layout_alignParentEnd="true"
+            android:layout_alignParentRight="true"
+            android:background="@drawable/ic_send_message" />
+
+    </RelativeLayout>
+
+</RelativeLayout>

+ 24 - 0
app/src/main/res/layout/chat_item_left.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical" android:layout_width="300dp"
+    android:layout_height="wrap_content"
+    android:padding="8dp">
+
+    <de.hdodenhof.circleimageview.CircleImageView
+        android:layout_width="40dp"
+        android:layout_height="40dp"
+        android:id="@+id/profileImage"
+        android:src="@mipmap/ic_launcher"/>
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_toRightOf="@id/profileImage"
+        android:layout_marginLeft="5dp"
+        android:text="Hello"
+        android:id="@+id/show_message"
+        android:textSize="18sp"
+        android:padding="5dp"
+        android:background="@drawable/background_left"/>
+
+</RelativeLayout>

+ 34 - 0
app/src/main/res/layout/chat_item_right.xml

@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical" android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:padding="8dp">
+
+    <RelativeLayout
+        android:layout_width="300dp"
+        android:layout_height="wrap_content"
+        android:layout_alignParentEnd="true"
+        android:layout_alignParentRight="true">
+
+        <de.hdodenhof.circleimageview.CircleImageView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:id="@+id/profileImage"
+            android:visibility="gone"/>
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:background="@drawable/background_right"
+            android:text="Hay hi i Ivan Gey!"
+            android:layout_alignParentEnd="true"
+            android:id="@+id/show_message"
+            android:textSize="18sp"
+            android:textColor="@android:color/black"
+            android:padding="5dp"
+            android:layout_alignParentRight="true"/>
+
+    </RelativeLayout>
+
+
+</RelativeLayout>

+ 3 - 2
app/src/main/res/layout/fragment_chats.xml

@@ -3,12 +3,13 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    tools:context=".fragments.ChatsFragment">
+    tools:context=".fragments.ChatsFragment"
+    android:background="#00CFCFCF">
 
     <!-- TODO: Update blank fragment layout -->
     <TextView
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:text="@string/hello_blank_fragment" />
+        android:text="hello_blank_fragment" />
 
 </FrameLayout>

+ 14 - 0
app/src/main/res/layout/fragment_users.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<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"
+    tools:context=".fragments.UsersFragment"
+    android:background="#00CFCFCF">
+
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/recyclerView"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"/>
+
+</RelativeLayout>

+ 24 - 0
app/src/main/res/layout/user_item.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:padding="10dp">
+
+    <de.hdodenhof.circleimageview.CircleImageView
+        android:layout_width="50dp"
+        android:layout_height="50dp"
+        android:id="@+id/profileImageUserListMain"
+        android:src="@mipmap/ic_launcher"/>
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="Username"
+        android:id="@+id/usernameUserListMain"
+        android:layout_toRightOf="@id/profileImageUserListMain"
+        android:layout_marginLeft="10dp"
+        android:layout_centerVertical="true"
+        android:textSize="16sp"/>
+
+</RelativeLayout>