diff --git a/android/.idea/misc.xml b/android/.idea/misc.xml
index 9fdea7e63e11bad24497deecd92148f3a7d21718..37a750962da6f2b31810e85c8acae1081de7f58c 100644
--- a/android/.idea/misc.xml
+++ b/android/.idea/misc.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8 (1)" project-jdk-type="JavaSDK">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/build/classes" />
   </component>
   <component name="ProjectType">
diff --git a/android/app/src/main/java/com/chatman/AuthActivity.java b/android/app/src/main/java/com/chatman/AuthActivity.java
index e3afc94002c9ffe38ae0ca49e26c46f1444bf2c7..894c3d93f2544f8151a9848968ff158f8fe64fd2 100644
--- a/android/app/src/main/java/com/chatman/AuthActivity.java
+++ b/android/app/src/main/java/com/chatman/AuthActivity.java
@@ -20,9 +20,13 @@ import com.bumptech.glide.Glide;
 import com.chatman.helper.FirebaseHelper;
 import com.chatman.helper.PreferencesHelper;
 import com.chatman.model.User;
+import com.google.android.gms.tasks.OnCompleteListener;
+import com.google.android.gms.tasks.Task;
 import com.google.firebase.database.DataSnapshot;
 import com.google.firebase.database.DatabaseError;
 import com.google.firebase.database.ValueEventListener;
+import com.google.firebase.iid.FirebaseInstanceId;
+import com.google.firebase.iid.InstanceIdResult;
 
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
@@ -137,9 +141,9 @@ public class AuthActivity extends AppCompatActivity {
 
     // do register
     public void register(View view) {
-        String name = nameEditText.getText().toString().trim();
+        final String name = nameEditText.getText().toString().trim();
         final String email = emailEditText.getText().toString().trim();
-        String password = passwordEditText.getText().toString().trim();
+        final String password = passwordEditText.getText().toString().trim();
         String confirm = confirmEditText.getText().toString().trim();
 
         if (password.equals(confirm)) {
@@ -159,18 +163,23 @@ public class AuthActivity extends AppCompatActivity {
             });
 
             if (emailUnique[0] && !name.equals("") && !email.equals("") && !password.equals("") && !confirm.equals("") ) {
-                String key = FirebaseHelper.dbUser.push().getKey();
-                User user = new User(key, name, email, md5(password));
-                user.setKey(key);
-                PreferencesHelper.setUserFirebaseKey(this, key);
-                PreferencesHelper.setUserName(this, user.getName());
-                PreferencesHelper.setHasLogin(this, true);
-
-                FirebaseHelper.dbUser.child(key).setValue(user);
-
-
-                finish();
-                startActivity(new Intent(this, MainActivity.class));
+                FirebaseInstanceId.getInstance().getInstanceId().addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
+                    @Override
+                    public void onComplete(@NonNull Task<InstanceIdResult> task) {
+                        String key = FirebaseHelper.dbUser.push().getKey();
+                        String instanceId = task.getResult().getToken();
+                        User user;
+                        user = new User(instanceId, name, email, md5(password));
+                        user.setKey(instanceId);
+                        PreferencesHelper.setUserFirebaseKey(AuthActivity.this, key);
+                        PreferencesHelper.setUserName(AuthActivity.this, user.getName());
+                        PreferencesHelper.setHasLogin(AuthActivity.this, true);
+
+                        FirebaseHelper.dbUser.child(key).setValue(user);
+                        finish();
+                        startActivity(new Intent(AuthActivity.this, MainActivity.class));
+                    }
+                });
             } else {
                 showSnackBar(this, "Email has been used");
             }
diff --git a/android/app/src/main/java/com/chatman/adapter/MainViewPagerAdapter.java b/android/app/src/main/java/com/chatman/adapter/MainViewPagerAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..8eb32376651027cf5e2903dc5852427e444b5456
--- /dev/null
+++ b/android/app/src/main/java/com/chatman/adapter/MainViewPagerAdapter.java
@@ -0,0 +1,50 @@
+package com.chatman.adapter;
+
+import android.content.Context;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentStatePagerAdapter;
+
+import com.chatman.fragment.ChatBot;
+import com.chatman.fragment.ChatList;
+
+public class MainViewPagerAdapter extends FragmentStatePagerAdapter {
+    private Context context;
+    public MainViewPagerAdapter(FragmentManager fm, Context context) {
+        super(fm);
+        this.context = context;
+    }
+
+    @Override
+    public Fragment getItem(int i) {
+        switch (i) {
+            case 0:
+                ChatList chatList = new ChatList();
+                chatList.setContext(context);
+                return chatList;
+            case 1:
+                return new ChatBot();
+        }
+        return null;
+    }
+
+    @Override
+    public int getCount() {
+        return 2;
+    }
+
+    @Nullable
+    @Override
+    public CharSequence getPageTitle(int position) {
+        super.getPageTitle(position);
+        switch (position) {
+            case 0:
+                return "Chats";
+            case 1:
+                return "Bot";
+            default:
+                return null;
+        }
+    }
+}
diff --git a/android/app/src/main/java/com/chatman/fragment/ChatBot.java b/android/app/src/main/java/com/chatman/fragment/ChatBot.java
new file mode 100644
index 0000000000000000000000000000000000000000..422908bb00b55ae9e6deb1a851d7708001d8ced4
--- /dev/null
+++ b/android/app/src/main/java/com/chatman/fragment/ChatBot.java
@@ -0,0 +1,30 @@
+package com.chatman.fragment;
+
+
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.chatman.R;
+
+/**
+ * A simple {@link Fragment} subclass.
+ */
+public class ChatBot extends Fragment {
+
+
+    public ChatBot() {
+        // Required empty public constructor
+    }
+
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+                             Bundle savedInstanceState) {
+        // Inflate the layout for this fragment
+        return inflater.inflate(R.layout.fragment_chat_bot, container, false);
+    }
+
+}
diff --git a/android/app/src/main/java/com/chatman/fragment/ChatList.java b/android/app/src/main/java/com/chatman/fragment/ChatList.java
new file mode 100644
index 0000000000000000000000000000000000000000..1401eb169fb6670b1203942731cae05d1f0749fc
--- /dev/null
+++ b/android/app/src/main/java/com/chatman/fragment/ChatList.java
@@ -0,0 +1,120 @@
+package com.chatman.fragment;
+
+
+import android.content.Context;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.chatman.R;
+import com.chatman.adapter.ChatListAdapter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A simple {@link Fragment} subclass.
+ */
+public class ChatList extends Fragment {
+
+    private RecyclerView recycler;
+    private ChatListAdapter adapter;
+    private List<com.chatman.model.ChatList> chatLists;
+    private Context context;
+
+    public ChatList() {
+
+    }
+
+    public void setContext(Context context) {
+        this.context = context;
+    }
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+                             Bundle savedInstanceState) {
+        // Inflate the layout for this fragment
+
+        View rootView = inflater.inflate(R.layout.fragment_chat_list, container, false);
+        recycler = rootView.findViewById(R.id.chat_list_rv);
+        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context);
+        linearLayoutManager.setReverseLayout(true);
+        linearLayoutManager.setStackFromEnd(true);
+        recycler.setLayoutManager(linearLayoutManager);
+        getChatLists();
+        adapter = new ChatListAdapter(chatLists);
+        recycler.setAdapter(adapter);
+
+        return rootView;
+    }
+
+    private List<com.chatman.model.ChatList> getChatLists() {
+        chatLists = new ArrayList<>();
+        chatLists.add(new com.chatman.model.ChatList(
+                R.drawable.priagung,
+                "Priagung Satyagama",
+                "Woi sini ke sekre 2 temani diriku yang kesepian"
+        ));
+        chatLists.add(new com.chatman.model.ChatList(
+                R.drawable.rama,
+                "Yusuf Rahmat Pratama",
+                "Eh, gmn gmn?"
+        ));
+        chatLists.add(new com.chatman.model.ChatList(
+                R.drawable.priagung,
+                "Priagung Satyagama",
+                "Woi sini ke sekre 2 temani diriku yang kesepian"
+        ));
+        chatLists.add(new com.chatman.model.ChatList(
+                R.drawable.rama,
+                "Yusuf Rahmat Pratama",
+                "Eh, gmn gmn?"
+        ));
+        chatLists.add(new com.chatman.model.ChatList(
+                R.drawable.priagung,
+                "Priagung Satyagama",
+                "Woi sini ke sekre 2 temani diriku yang kesepian"
+        ));
+        chatLists.add(new com.chatman.model.ChatList(
+                R.drawable.rama,
+                "Yusuf Rahmat Pratama",
+                "Eh, gmn gmn?"
+        ));
+        chatLists.add(new com.chatman.model.ChatList(
+                R.drawable.priagung,
+                "Priagung Satyagama",
+                "Woi sini ke sekre 2 temani diriku yang kesepian"
+        ));
+        chatLists.add(new com.chatman.model.ChatList(
+                R.drawable.rama,
+                "Yusuf Rahmat Pratama",
+                "Eh, gmn gmn?"
+        ));
+        chatLists.add(new com.chatman.model.ChatList(
+                R.drawable.priagung,
+                "Priagung Satyagama",
+                "Woi sini ke sekre 2 temani diriku yang kesepian"
+        ));
+        chatLists.add(new com.chatman.model.ChatList(
+                R.drawable.rama,
+                "Yusuf Rahmat Pratama",
+                "Eh, gmn gmn?"
+        ));
+        chatLists.add(new com.chatman.model.ChatList(
+                R.drawable.priagung,
+                "Priagung Satyagama",
+                "Woi sini ke sekre 2 temani diriku yang kesepian"
+        ));
+        chatLists.add(new com.chatman.model.ChatList(
+                R.drawable.rama,
+                "Yusuf Rahmat Pratama",
+                "Eh, gmn gmn?"
+        ));
+        return chatLists;
+    }
+
+}
diff --git a/android/app/src/main/java/com/chatman/model/Chat.java b/android/app/src/main/java/com/chatman/model/Chat.java
new file mode 100644
index 0000000000000000000000000000000000000000..ecb083b637e0c916d08f94dacd4da6f051359ae8
--- /dev/null
+++ b/android/app/src/main/java/com/chatman/model/Chat.java
@@ -0,0 +1,49 @@
+package com.chatman.model;
+
+import java.util.Date;
+
+public class Chat {
+    private String idSender;
+    private String idReceiver;
+    private Date date;
+    private String message;
+
+    public Chat(String idSender, String idReceiver, Date date, String message) {
+        this.idSender = idSender;
+        this.idReceiver = idReceiver;
+        this.date = date;
+        this.message = message;
+    }
+
+    public String getIdSender() {
+        return idSender;
+    }
+
+    public void setIdSender(String idSender) {
+        this.idSender = idSender;
+    }
+
+    public String getIdReceiver() {
+        return idReceiver;
+    }
+
+    public void setIdReceiver(String idReceiver) {
+        this.idReceiver = idReceiver;
+    }
+
+    public Date getDate() {
+        return date;
+    }
+
+    public void setDate(Date date) {
+        this.date = date;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+}
diff --git a/android/app/src/main/java/com/chatman/model/ChatRoom.java b/android/app/src/main/java/com/chatman/model/ChatRoom.java
new file mode 100644
index 0000000000000000000000000000000000000000..fb68f0348b25f2ca90f60dca2c8ec2781a2c1e22
--- /dev/null
+++ b/android/app/src/main/java/com/chatman/model/ChatRoom.java
@@ -0,0 +1,29 @@
+package com.chatman.model;
+
+import java.util.List;
+
+public class ChatRoom {
+    private String idSender;
+    private List<Chat> messages;
+
+    public ChatRoom(String idSender, List<Chat> messages) {
+        this.idSender = idSender;
+        this.messages = messages;
+    }
+
+    public String getIdSender() {
+        return idSender;
+    }
+
+    public void setIdSender(String idSender) {
+        this.idSender = idSender;
+    }
+
+    public List<Chat> getMessages() {
+        return messages;
+    }
+
+    public void setMessages(List<Chat> messages) {
+        this.messages = messages;
+    }
+}
diff --git a/android/app/src/main/res/layout/fragment_chat_bot.xml b/android/app/src/main/res/layout/fragment_chat_bot.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ba28517a12dc44df14de9166846b0e9534cc7e69
--- /dev/null
+++ b/android/app/src/main/res/layout/fragment_chat_bot.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout 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=".fragment.ChatBot">
+
+    <!-- TODO: Update blank fragment layout -->
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:text="@string/hello_blank_fragment" />
+
+</FrameLayout>
\ No newline at end of file
diff --git a/android/app/src/main/res/layout/fragment_chat_list.xml b/android/app/src/main/res/layout/fragment_chat_list.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a8365f88fbe7989ecf3540ce7c9a7f41f1788bb3
--- /dev/null
+++ b/android/app/src/main/res/layout/fragment_chat_list.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout 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=".fragment.ChatList">
+
+    <android.support.constraint.ConstraintLayout
+        xmlns:app="http://schemas.android.com/apk/res-auto"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        app:layout_behavior="@string/appbar_scrolling_view_behavior"
+        tools:context=".MainActivity"
+        tools:showIn="@layout/app_bar_main">
+
+        <android.support.v7.widget.RecyclerView
+            android:id="@+id/chat_list_rv"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintBottom_toBottomOf="parent">
+
+        </android.support.v7.widget.RecyclerView>
+
+    </android.support.constraint.ConstraintLayout>
+
+</FrameLayout>
\ No newline at end of file