From 6067d701898f748de156cdfcfa28937202c5fb57 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Wed, 31 Jan 2018 14:40:01 +0100 Subject: [PATCH] Add more UI demo --- .idea/misc.xml | 2 +- .../slam/activity/ChatFragment.java | 67 +++++++++++++++++ .../slam/activity/ChatListFragment.java | 72 +++++++++++++++++++ .../slam/activity/MainActivity.java | 17 ++++- .../vanitasvitae/slam/ui/ChatListEntry.java | 28 ++++++++ .../de/vanitasvitae/slam/ui/ChatMessage.java | 22 ------ .../slam/ui/ChatMessageEntry.java | 28 ++++++++ mobile/src/main/res/layout/activity_main.xml | 11 +-- .../main/res/layout/chatlist_singlechat.xml | 7 +- mobile/src/main/res/layout/fragment_chat.xml | 8 +++ .../src/main/res/layout/fragment_chatlist.xml | 8 +++ .../src/main/res/layout/item_chatmessage.xml | 5 +- 12 files changed, 239 insertions(+), 36 deletions(-) create mode 100644 mobile/src/main/java/de/vanitasvitae/slam/activity/ChatFragment.java create mode 100644 mobile/src/main/java/de/vanitasvitae/slam/activity/ChatListFragment.java create mode 100644 mobile/src/main/java/de/vanitasvitae/slam/ui/ChatListEntry.java delete mode 100644 mobile/src/main/java/de/vanitasvitae/slam/ui/ChatMessage.java create mode 100644 mobile/src/main/java/de/vanitasvitae/slam/ui/ChatMessageEntry.java create mode 100644 mobile/src/main/res/layout/fragment_chat.xml create mode 100644 mobile/src/main/res/layout/fragment_chatlist.xml diff --git a/.idea/misc.xml b/.idea/misc.xml index ba7052b..635999d 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -24,7 +24,7 @@ - + diff --git a/mobile/src/main/java/de/vanitasvitae/slam/activity/ChatFragment.java b/mobile/src/main/java/de/vanitasvitae/slam/activity/ChatFragment.java new file mode 100644 index 0000000..bb5d70b --- /dev/null +++ b/mobile/src/main/java/de/vanitasvitae/slam/activity/ChatFragment.java @@ -0,0 +1,67 @@ +package de.vanitasvitae.slam.activity; + +import android.app.Fragment; +import android.os.Bundle; +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 android.widget.ImageView; +import android.widget.TextView; + +import butterknife.BindView; +import butterknife.ButterKnife; +import de.vanitasvitae.slam.R; +import de.vanitasvitae.slam.ui.ChatMessageEntry; + +/** + * Created by Paul Schaub on 30.01.18. + */ +public class ChatFragment extends Fragment { + + @BindView(R.id.recycler_chat) + RecyclerView recyclerView; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_chat, container, false); + ButterKnife.bind(this, view); + return view; + } + + @Override + public void onViewCreated(final View view, Bundle savedInstanceState) { + final String[] messages = new String[] {"This is an example message.", "null","This is a very long message. Its purpose is to demonstrate Slam!s ability to render longer messages in a sane way without looking too crowded."}; + recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); + recyclerView.setAdapter(new RecyclerView.Adapter() { + @Override + public ChatMessageEntry onCreateViewHolder(ViewGroup parent, int viewType) { + View view1 = LayoutInflater.from(getActivity()).inflate(R.layout.item_chatmessage, parent, false); + return new ChatMessageEntry(view1); + } + + @Override + public void onBindViewHolder(ChatMessageEntry holder, int position) { + View content; + if (position != 1) { + content = new TextView(getActivity()); + ((TextView)content).setText(messages[position]); + } else { + content = new ImageView(getActivity()); + ((ImageView)content).setImageResource(R.drawable.ic_add_a_photo_black_48dp); + } + holder.bind("alice@wonderland.lit", + "Member", content, "just now"); + } + + @Override + public int getItemCount() { + return messages.length; + } + }); + recyclerView.getAdapter().notifyDataSetChanged(); + } + +} diff --git a/mobile/src/main/java/de/vanitasvitae/slam/activity/ChatListFragment.java b/mobile/src/main/java/de/vanitasvitae/slam/activity/ChatListFragment.java new file mode 100644 index 0000000..174053a --- /dev/null +++ b/mobile/src/main/java/de/vanitasvitae/slam/activity/ChatListFragment.java @@ -0,0 +1,72 @@ +package de.vanitasvitae.slam.activity; + +import android.app.Fragment; +import android.os.Bundle; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import butterknife.BindView; +import butterknife.ButterKnife; +import de.vanitasvitae.slam.R; +import de.vanitasvitae.slam.ui.ChatListEntry; + +/** + * Created by Paul Schaub on 30.01.18. + */ +public class ChatListFragment extends Fragment { + + @BindView(R.id.recycler_chatlist) + RecyclerView recyclerView; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_chatlist, container, false); + ButterKnife.bind(this, view); + return view; + } + + @Override + public void onViewCreated(final View view, Bundle savedInstanceState) { + final String[] usernames = {"alice@wonderland.lit", "Bob the Builder", "Marvin"}; + final String[] messages = {"But I don’t want to go among mad people", "Yes we can!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "My name is Marvin!"}; + final String[] dates = {"13:37", "yesterday", "24.12.2018"}; + final boolean[] reads = {true, false, true}; + + recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); + recyclerView.setAdapter(new RecyclerView.Adapter() { + @Override + public ChatListEntry onCreateViewHolder(ViewGroup parent, int viewType) { + View view1 = LayoutInflater.from(getActivity()).inflate(R.layout.chatlist_singlechat, parent, false); + view1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + getFragmentManager().beginTransaction().addToBackStack(null).replace(R.id.fragment_container, new ChatFragment()).commit(); + } + }); + return new ChatListEntry(view1); + } + + @Override + public void onBindViewHolder(ChatListEntry holder, int position) { + holder.bind( + usernames[position], + messages[position], + dates[position], + reads[position]); + } + + @Override + public int getItemCount() { + return usernames.length; + } + }); + recyclerView.getAdapter().notifyDataSetChanged(); + } + +} diff --git a/mobile/src/main/java/de/vanitasvitae/slam/activity/MainActivity.java b/mobile/src/main/java/de/vanitasvitae/slam/activity/MainActivity.java index 1535c07..0cf04c5 100644 --- a/mobile/src/main/java/de/vanitasvitae/slam/activity/MainActivity.java +++ b/mobile/src/main/java/de/vanitasvitae/slam/activity/MainActivity.java @@ -1,11 +1,18 @@ package de.vanitasvitae.slam.activity; +import android.app.Fragment; import android.os.Bundle; import android.support.design.widget.NavigationView; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.widget.Toolbar; +import android.util.Log; +import android.view.LayoutInflater; import android.view.Menu; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.TextView; import butterknife.BindView; import butterknife.ButterKnife; @@ -16,6 +23,8 @@ import de.vanitasvitae.slam.R; */ public class MainActivity extends ThemedAppCompatActivity { + public static final String TAG = "Slam!"; + @BindView(R.id.toolbar) Toolbar toolbar; @@ -25,6 +34,9 @@ public class MainActivity extends ThemedAppCompatActivity { @BindView(R.id.drawer_layout) DrawerLayout drawerLayout; + @BindView(R.id.fragment_container) + FrameLayout fragmentContainer; + private ActionBarDrawerToggle drawerToggle; @Override @@ -38,6 +50,10 @@ public class MainActivity extends ThemedAppCompatActivity { drawerToggle = new ActionBarDrawerToggle( this, drawerLayout, toolbar, R.string.error_incorrect_password, R.string.error_invalid_jid); drawerLayout.addDrawerListener(drawerToggle); + + Fragment chatListFragment = new ChatListFragment(); + Log.d(TAG, "Begin Transaction"); + getFragmentManager().beginTransaction().add(R.id.fragment_container, chatListFragment).commit(); } @Override @@ -51,5 +67,4 @@ public class MainActivity extends ThemedAppCompatActivity { super.onPostCreate(savedInstanceState); drawerToggle.syncState(); } - } diff --git a/mobile/src/main/java/de/vanitasvitae/slam/ui/ChatListEntry.java b/mobile/src/main/java/de/vanitasvitae/slam/ui/ChatListEntry.java new file mode 100644 index 0000000..69cdd41 --- /dev/null +++ b/mobile/src/main/java/de/vanitasvitae/slam/ui/ChatListEntry.java @@ -0,0 +1,28 @@ +package de.vanitasvitae.slam.ui; + +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.widget.TextView; + +import de.vanitasvitae.slam.R; + +/** + * Created by Paul Schaub on 30.01.18. + */ +public class ChatListEntry extends RecyclerView.ViewHolder { + + private View view; + + public ChatListEntry(View itemView) { + super(itemView); + this.view = itemView; + } + + public void bind(String username, String message, String date, boolean read) { + View v = view; + ((TextView)v.findViewById(R.id.contact_name)).setText(username); + ((TextView)v.findViewById(R.id.contact_textcontent)).setText(message); + ((TextView)v.findViewById(R.id.contact_date)).setText(date); + v.findViewById(R.id.send_indicator).setVisibility(read ? View.VISIBLE : View.GONE); + } +} diff --git a/mobile/src/main/java/de/vanitasvitae/slam/ui/ChatMessage.java b/mobile/src/main/java/de/vanitasvitae/slam/ui/ChatMessage.java deleted file mode 100644 index d10a0b9..0000000 --- a/mobile/src/main/java/de/vanitasvitae/slam/ui/ChatMessage.java +++ /dev/null @@ -1,22 +0,0 @@ -package de.vanitasvitae.slam.ui; - -import android.content.Context; -import android.view.ViewGroup; - -import de.vanitasvitae.slam.R; - -/** - * Created by Paul Schaub on 29.01.18. - */ -public class ChatMessage extends ViewGroup { - - public ChatMessage(Context context) { - super(context); - inflate(context, R.layout.item_chatmessage, this); - } - - @Override - protected void onLayout(boolean changed, int l, int t, int r, int b) { - - } -} diff --git a/mobile/src/main/java/de/vanitasvitae/slam/ui/ChatMessageEntry.java b/mobile/src/main/java/de/vanitasvitae/slam/ui/ChatMessageEntry.java new file mode 100644 index 0000000..e8b16fb --- /dev/null +++ b/mobile/src/main/java/de/vanitasvitae/slam/ui/ChatMessageEntry.java @@ -0,0 +1,28 @@ +package de.vanitasvitae.slam.ui; + +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import de.vanitasvitae.slam.R; + +/** + * Created by Paul Schaub on 30.01.18. + */ +public class ChatMessageEntry extends RecyclerView.ViewHolder { + + private View view; + + public ChatMessageEntry(View itemView) { + super(itemView); + this.view = itemView; + } + + public void bind(String sender, String role, View content, String date) { + ((TextView)view.findViewById(R.id.message_sender)).setText(sender); + ((TextView)view.findViewById(R.id.message_sender_role)).setText(role); + ((RelativeLayout)view.findViewById(R.id.message_content)).addView(content); + ((TextView)view.findViewById(R.id.message_date)).setText(date); + } +} diff --git a/mobile/src/main/res/layout/activity_main.xml b/mobile/src/main/res/layout/activity_main.xml index b1f47c9..29b120d 100644 --- a/mobile/src/main/res/layout/activity_main.xml +++ b/mobile/src/main/res/layout/activity_main.xml @@ -16,15 +16,10 @@ android:layout_height="match_parent" tools:openDrawer="start"> - - - - - - + android:layout_height="match_parent" /> @@ -63,6 +64,7 @@ android:layout_toStartOf="@+id/lower_meta"> @@ -73,11 +75,12 @@ android:id="@+id/lower_meta" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_centerVertical="true" android:orientation="horizontal" - android:layout_alignParentEnd="true"> + android:layout_alignParentEnd="true" + android:layout_alignParentBottom="true"> diff --git a/mobile/src/main/res/layout/fragment_chat.xml b/mobile/src/main/res/layout/fragment_chat.xml new file mode 100644 index 0000000..d3741be --- /dev/null +++ b/mobile/src/main/res/layout/fragment_chat.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/mobile/src/main/res/layout/fragment_chatlist.xml b/mobile/src/main/res/layout/fragment_chatlist.xml new file mode 100644 index 0000000..768fe7b --- /dev/null +++ b/mobile/src/main/res/layout/fragment_chatlist.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/mobile/src/main/res/layout/item_chatmessage.xml b/mobile/src/main/res/layout/item_chatmessage.xml index 411fe66..f148878 100644 --- a/mobile/src/main/res/layout/item_chatmessage.xml +++ b/mobile/src/main/res/layout/item_chatmessage.xml @@ -50,13 +50,14 @@ android:layout_width="wrap_content" android:layout_height="wrap_content"> +