Commit 70556309 authored by Grigory Fedorov's avatar Grigory Fedorov

Chats: toolbar moved from ChatViewer activity to fragments. Same for options menu.

 Toolbar implemented as standalone, up button uses icon from drawable (not system one).
New class StatusBarPainter excluded from ActionBarPainter.
parent cb05547c
...@@ -3,6 +3,8 @@ package com.xabber.android.ui; ...@@ -3,6 +3,8 @@ package com.xabber.android.ui;
import android.app.Activity; import android.app.Activity;
import android.app.ListFragment; import android.app.ListFragment;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.app.NavUtils;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
...@@ -53,6 +55,7 @@ public class RecentChatFragment extends ListFragment { ...@@ -53,6 +55,7 @@ public class RecentChatFragment extends ListFragment {
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState); super.onCreateView(inflater, container, savedInstanceState);
View rootView = inflater.inflate(R.layout.recent_chats, container, false);
ArrayList<AbstractChat> activeChats = ((ChatViewer) getActivity()).getChatViewerAdapter().getActiveChats(); ArrayList<AbstractChat> activeChats = ((ChatViewer) getActivity()).getChatViewerAdapter().getActiveChats();
((ChatListAdapter) getListAdapter()).updateChats(activeChats); ((ChatListAdapter) getListAdapter()).updateChats(activeChats);
...@@ -63,7 +66,17 @@ public class RecentChatFragment extends ListFragment { ...@@ -63,7 +66,17 @@ public class RecentChatFragment extends ListFragment {
activity.finish(); activity.finish();
} }
return inflater.inflate(R.layout.recent_chats, container, false); Toolbar toolbar = (Toolbar) rootView.findViewById(R.id.toolbar_default);
toolbar.setTitle(R.string.group_active_chat);
toolbar.setNavigationIcon(R.drawable.ic_arrow_left_white_24dp);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
NavUtils.navigateUpFromSameTask(getActivity());
}
});
return rootView;
} }
@Override @Override
...@@ -97,7 +110,7 @@ public class RecentChatFragment extends ListFragment { ...@@ -97,7 +110,7 @@ public class RecentChatFragment extends ListFragment {
} }
public interface RecentChatFragmentInteractionListener { public interface RecentChatFragmentInteractionListener {
public void onChatSelected(AbstractChat chat); void onChatSelected(AbstractChat chat);
} }
public void updateChats(List<AbstractChat> chats) { public void updateChats(List<AbstractChat> chats) {
......
...@@ -2,10 +2,7 @@ package com.xabber.android.ui.helper; ...@@ -2,10 +2,7 @@ package com.xabber.android.ui.helper;
import android.content.res.TypedArray; import android.content.res.TypedArray;
import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.ColorDrawable;
import android.os.Build;
import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBarActivity;
import android.view.Window;
import android.view.WindowManager;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
import com.xabber.androiddev.R; import com.xabber.androiddev.R;
...@@ -13,28 +10,24 @@ import com.xabber.androiddev.R; ...@@ -13,28 +10,24 @@ import com.xabber.androiddev.R;
public class ActionBarPainter { public class ActionBarPainter {
private int[] accountActionBarColors; private int[] accountActionBarColors;
private int[] accountStatusBarColors;
private String[] accountColorNames; private String[] accountColorNames;
private Window window;
private int defaultStatusBarColor;
private ColorDrawable defaultActionBarBackground; private ColorDrawable defaultActionBarBackground;
private final ActionBarActivity activity; private final ActionBarActivity activity;
private StatusBarPainter statusBarPainter;
public ActionBarPainter(ActionBarActivity activity) { public ActionBarPainter(ActionBarActivity activity) {
this.activity = activity; this.activity = activity;
statusBarPainter = new StatusBarPainter(activity);
accountActionBarColors = activity.getResources().getIntArray(R.array.account_action_bar); accountActionBarColors = activity.getResources().getIntArray(R.array.account_action_bar);
accountStatusBarColors = activity.getResources().getIntArray(R.array.account_status_bar);
accountColorNames = activity.getResources().getStringArray(R.array.account_color_names); accountColorNames = activity.getResources().getStringArray(R.array.account_color_names);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
window = this.activity.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
defaultStatusBarColor = window.getStatusBarColor();
}
TypedArray a = activity.getTheme().obtainStyledAttributes(R.style.Theme, new int[] {R.attr.colorPrimary}); TypedArray a = activity.getTheme().obtainStyledAttributes(R.style.Theme, new int[] {R.attr.colorPrimary});
int attributeResourceId = a.getResourceId(0, 0); int attributeResourceId = a.getResourceId(0, 0);
...@@ -46,18 +39,13 @@ public class ActionBarPainter { ...@@ -46,18 +39,13 @@ public class ActionBarPainter {
} }
public void updateWithColorLevel(int colorLevel) { public void updateWithColorLevel(int colorLevel) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
window.setStatusBarColor(accountStatusBarColors[colorLevel]);
}
activity.getSupportActionBar().setBackgroundDrawable(new ColorDrawable(accountActionBarColors[colorLevel])); activity.getSupportActionBar().setBackgroundDrawable(new ColorDrawable(accountActionBarColors[colorLevel]));
statusBarPainter.updateWithColorLevel(colorLevel);
} }
public void restore() { public void restore() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
window.setStatusBarColor(defaultStatusBarColor);
}
activity.getSupportActionBar().setBackgroundDrawable(defaultActionBarBackground); activity.getSupportActionBar().setBackgroundDrawable(defaultActionBarBackground);
statusBarPainter.restore();
} }
public void updateWithColorName(String targetColorName) { public void updateWithColorName(String targetColorName) {
......
...@@ -3,6 +3,7 @@ package com.xabber.android.ui.helper; ...@@ -3,6 +3,7 @@ package com.xabber.android.ui.helper;
import android.content.res.Resources; import android.content.res.Resources;
import android.content.res.TypedArray; import android.content.res.TypedArray;
import android.graphics.drawable.ColorDrawable;
import android.os.Build; import android.os.Build;
import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
...@@ -35,7 +36,6 @@ public class ContactTitleExpandableToolbarInflater implements ObservableScrollVi ...@@ -35,7 +36,6 @@ public class ContactTitleExpandableToolbarInflater implements ObservableScrollVi
private int toolbarHeight; private int toolbarHeight;
private int paddingLeftMin; private int paddingLeftMin;
private int paddingRight;
private int actionBarSize; private int actionBarSize;
private int toolbarHeightDelta; private int toolbarHeightDelta;
private int avatarLargeSize; private int avatarLargeSize;
...@@ -58,6 +58,12 @@ public class ContactTitleExpandableToolbarInflater implements ObservableScrollVi ...@@ -58,6 +58,12 @@ public class ContactTitleExpandableToolbarInflater implements ObservableScrollVi
contactNamePanel = activity.findViewById(R.id.contact_name_panel); contactNamePanel = activity.findViewById(R.id.contact_name_panel);
titleView = activity.findViewById(R.id.expandable_contact_title); titleView = activity.findViewById(R.id.expandable_contact_title);
int[] accountActionBarColors = activity.getResources().getIntArray(R.array.account_action_bar);
titleView.setBackgroundDrawable(new ColorDrawable(accountActionBarColors[
AccountManager.getInstance().getColorLevel(abstractContact.getAccount())]));
ContactTitleInflater.updateTitle(titleView, activity, abstractContact); ContactTitleInflater.updateTitle(titleView, activity, abstractContact);
int[] accountStatusBarColors = activity.getResources().getIntArray(R.array.account_status_bar); int[] accountStatusBarColors = activity.getResources().getIntArray(R.array.account_status_bar);
...@@ -73,7 +79,6 @@ public class ContactTitleExpandableToolbarInflater implements ObservableScrollVi ...@@ -73,7 +79,6 @@ public class ContactTitleExpandableToolbarInflater implements ObservableScrollVi
public void onResume() { public void onResume() {
Resources resources = activity.getResources(); Resources resources = activity.getResources();
paddingLeftMin = resources.getDimensionPixelSize(R.dimen.contact_title_padding_left); paddingLeftMin = resources.getDimensionPixelSize(R.dimen.contact_title_padding_left);
paddingRight = resources.getDimensionPixelSize(R.dimen.contact_title_padding_right);
avatarLargeSize = resources.getDimensionPixelSize(R.dimen.avatar_large_size); avatarLargeSize = resources.getDimensionPixelSize(R.dimen.avatar_large_size);
avatarNormalSize = resources.getDimensionPixelSize(R.dimen.avatar_normal_size); avatarNormalSize = resources.getDimensionPixelSize(R.dimen.avatar_normal_size);
avatarRadius = resources.getDimensionPixelSize(R.dimen.avatar_radius); avatarRadius = resources.getDimensionPixelSize(R.dimen.avatar_radius);
......
...@@ -14,53 +14,29 @@ ...@@ -14,53 +14,29 @@
*/ */
package com.xabber.android.ui.helper; package com.xabber.android.ui.helper;
import android.app.Activity; import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.view.View; import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.extension.cs.ChatStateManager; import com.xabber.android.data.extension.cs.ChatStateManager;
import com.xabber.android.data.roster.AbstractContact; import com.xabber.android.data.roster.AbstractContact;
import com.xabber.androiddev.R; import com.xabber.androiddev.R;
import org.jivesoftware.smackx.ChatState; import org.jivesoftware.smackx.ChatState;
/**
* Helper class to update <code>contact_title.xml</code>.
*
* @author alexander.ivanov
*/
public class ContactTitleInflater { public class ContactTitleInflater {
/** public static void updateTitle(View titleView, final Context context, AbstractContact abstractContact) {
* Fill title with information about {@link AbstractContact} and provides
* back button callback.
*
* @param titleView
* @param activity
* @param abstractContact
*/
public static void updateTitle(View titleView, final Activity activity,
AbstractContact abstractContact) {
final TextView nameView = (TextView) titleView.findViewById(R.id.name); final TextView nameView = (TextView) titleView.findViewById(R.id.name);
final ImageView avatarView = (ImageView) titleView.findViewById(R.id.avatar); final ImageView avatarView = (ImageView) titleView.findViewById(R.id.avatar);
int[] accountActionBarColors = activity.getResources().getIntArray(R.array.account_action_bar);
titleView.setBackgroundDrawable(new ColorDrawable(accountActionBarColors[
AccountManager.getInstance().getColorLevel(abstractContact.getAccount())]));
nameView.setTextColor(activity.getResources().getColor(R.color.primary_text_default_material_dark));
nameView.setText(abstractContact.getName()); nameView.setText(abstractContact.getName());
avatarView.setImageDrawable(abstractContact.getAvatar()); avatarView.setImageDrawable(abstractContact.getAvatar());
setStatus(context, titleView, abstractContact);
setStatus(activity, titleView, abstractContact);
} }
private static void setStatus(Activity activity, View titleView, AbstractContact abstractContact) { private static void setStatus(Context context, View titleView, AbstractContact abstractContact) {
final ImageView statusModeView = (ImageView) titleView.findViewById(R.id.status_icon); final ImageView statusModeView = (ImageView) titleView.findViewById(R.id.status_icon);
int statusLevel = abstractContact.getStatusMode().getStatusLevel(); int statusLevel = abstractContact.getStatusMode().getStatusLevel();
...@@ -79,13 +55,13 @@ public class ContactTitleInflater { ...@@ -79,13 +55,13 @@ public class ContactTitleInflater {
CharSequence statusText; CharSequence statusText;
if (chatState == ChatState.composing) { if (chatState == ChatState.composing) {
statusText = activity.getString(R.string.chat_state_composing); statusText = context.getString(R.string.chat_state_composing);
} else if (chatState == ChatState.paused) { } else if (chatState == ChatState.paused) {
statusText = activity.getString(R.string.chat_state_paused); statusText = context.getString(R.string.chat_state_paused);
} else { } else {
statusText = abstractContact.getStatusText().trim(); statusText = abstractContact.getStatusText().trim();
if (statusText.toString().isEmpty()) { if (statusText.toString().isEmpty()) {
statusText = activity.getString(abstractContact.getStatusMode().getStringID()); statusText = context.getString(abstractContact.getStatusMode().getStringID());
} }
} }
statusTextView.setText(statusText); statusTextView.setText(statusText);
......
package com.xabber.android.ui.helper;
import android.os.Build;
import android.support.v4.app.FragmentActivity;
import android.view.Window;
import android.view.WindowManager;
import com.xabber.android.data.account.AccountManager;
import com.xabber.androiddev.R;
public class StatusBarPainter {
private Window window;
private int defaultStatusBarColor;
private int[] accountStatusBarColors;
public StatusBarPainter(FragmentActivity activity) {
accountStatusBarColors = activity.getResources().getIntArray(R.array.account_status_bar);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
window = activity.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
defaultStatusBarColor = window.getStatusBarColor();
}
}
public void updateWithAccountName(String account) {
updateWithColorLevel(AccountManager.getInstance().getColorLevel(account));
}
public void updateWithColorLevel(int colorLevel) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
window.setStatusBarColor(accountStatusBarColors[colorLevel]);
}
}
public void restore() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
window.setStatusBarColor(defaultStatusBarColor);
}
}
}
...@@ -4,15 +4,13 @@ ...@@ -4,15 +4,13 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<include layout="@layout/toolbar_default"
android:id="@+id/toolbar_default"
/>
<android.support.v4.view.ViewPager <android.support.v4.view.ViewPager
android:id="@+id/pager" android:id="@+id/pager"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_below="@+id/toolbar_default"
/> />
<LinearLayout <LinearLayout
...@@ -20,9 +18,8 @@ ...@@ -20,9 +18,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal" android:orientation="horizontal"
android:layout_centerHorizontal="true" android:layout_centerHorizontal="true"
android:layout_marginTop="10dp" android:layout_marginTop="62dp"
android:id="@+id/chat_scroll_indicator" android:id="@+id/chat_scroll_indicator"
android:layout_below="@+id/toolbar_default"
> >
</LinearLayout> </LinearLayout>
......
...@@ -19,6 +19,26 @@ ...@@ -19,6 +19,26 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@drawable/chat_background_repeat" android:background="@drawable/chat_background_repeat"
> >
<android.support.v7.widget.Toolbar xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar_default"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="52dp"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
android:background="?attr/colorPrimary"
android:elevation="8dp"
>
<include layout="@layout/contact_title"
android:id="@+id/contact_title"
/>
</android.support.v7.widget.Toolbar>
<ListView <ListView
android:id="@android:id/list" android:id="@android:id/list"
android:layout_width="match_parent" android:layout_width="match_parent"
...@@ -32,6 +52,7 @@ ...@@ -32,6 +52,7 @@
android:layout_above="@+id/input_layout" android:layout_above="@+id/input_layout"
tools:listitem="@layout/chat_viewer_outgoing_message" tools:listitem="@layout/chat_viewer_outgoing_message"
android:listSelector="@android:color/transparent" android:listSelector="@android:color/transparent"
android:layout_below="@+id/toolbar_default"
/> />
<LinearLayout <LinearLayout
......
...@@ -4,7 +4,6 @@ ...@@ -4,7 +4,6 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:minHeight="?android:attr/actionBarSize" android:minHeight="?android:attr/actionBarSize"
android:orientation="horizontal" android:orientation="horizontal"
android:background="@color/green_500"
android:gravity="center_vertical" android:gravity="center_vertical"
> >
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent" android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent"
android:background="@drawable/chat_background_repeat"
>
<include layout="@layout/toolbar_default" />
<ListView <ListView
android:layout_width="match_parent" android:layout_width="match_parent"
......
...@@ -59,12 +59,6 @@ ...@@ -59,12 +59,6 @@
android:visible="false" android:visible="false"
/> />
<item android:id="@+id/action_clear_text"
android:title="@string/clear_message"
app:showAsAction="never"
android:orderInCategory="150"
/>
<item android:id="@+id/action_clear_history" <item android:id="@+id/action_clear_history"
android:title="@string/clear_history" android:title="@string/clear_history"
app:showAsAction="never" app:showAsAction="never"
......
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