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;
import android.app.Activity;
import android.app.ListFragment;
import android.os.Bundle;
import android.support.v4.app.NavUtils;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
......@@ -53,6 +55,7 @@ public class RecentChatFragment extends ListFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View rootView = inflater.inflate(R.layout.recent_chats, container, false);
ArrayList<AbstractChat> activeChats = ((ChatViewer) getActivity()).getChatViewerAdapter().getActiveChats();
((ChatListAdapter) getListAdapter()).updateChats(activeChats);
......@@ -63,7 +66,17 @@ public class RecentChatFragment extends ListFragment {
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
......@@ -97,7 +110,7 @@ public class RecentChatFragment extends ListFragment {
}
public interface RecentChatFragmentInteractionListener {
public void onChatSelected(AbstractChat chat);
void onChatSelected(AbstractChat chat);
}
public void updateChats(List<AbstractChat> chats) {
......
......@@ -2,10 +2,7 @@ package com.xabber.android.ui.helper;
import android.content.res.TypedArray;
import android.graphics.drawable.ColorDrawable;
import android.os.Build;
import android.support.v7.app.ActionBarActivity;
import android.view.Window;
import android.view.WindowManager;
import com.xabber.android.data.account.AccountManager;
import com.xabber.androiddev.R;
......@@ -13,28 +10,24 @@ import com.xabber.androiddev.R;
public class ActionBarPainter {
private int[] accountActionBarColors;
private int[] accountStatusBarColors;
private String[] accountColorNames;
private Window window;
private int defaultStatusBarColor;
private ColorDrawable defaultActionBarBackground;
private final ActionBarActivity activity;
private StatusBarPainter statusBarPainter;
public ActionBarPainter(ActionBarActivity activity) {
this.activity = activity;
statusBarPainter = new StatusBarPainter(activity);
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);
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});
int attributeResourceId = a.getResourceId(0, 0);
......@@ -46,18 +39,13 @@ public class ActionBarPainter {
}
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]));
statusBarPainter.updateWithColorLevel(colorLevel);
}
public void restore() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
window.setStatusBarColor(defaultStatusBarColor);
}
activity.getSupportActionBar().setBackgroundDrawable(defaultActionBarBackground);
statusBarPainter.restore();
}
public void updateWithColorName(String targetColorName) {
......
......@@ -3,6 +3,7 @@ package com.xabber.android.ui.helper;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.drawable.ColorDrawable;
import android.os.Build;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.Toolbar;
......@@ -35,7 +36,6 @@ public class ContactTitleExpandableToolbarInflater implements ObservableScrollVi
private int toolbarHeight;
private int paddingLeftMin;
private int paddingRight;
private int actionBarSize;
private int toolbarHeightDelta;
private int avatarLargeSize;
......@@ -58,6 +58,12 @@ public class ContactTitleExpandableToolbarInflater implements ObservableScrollVi
contactNamePanel = activity.findViewById(R.id.contact_name_panel);
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);
int[] accountStatusBarColors = activity.getResources().getIntArray(R.array.account_status_bar);
......@@ -73,7 +79,6 @@ public class ContactTitleExpandableToolbarInflater implements ObservableScrollVi
public void onResume() {
Resources resources = activity.getResources();
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);
avatarNormalSize = resources.getDimensionPixelSize(R.dimen.avatar_normal_size);
avatarRadius = resources.getDimensionPixelSize(R.dimen.avatar_radius);
......
......@@ -14,53 +14,29 @@
*/
package com.xabber.android.ui.helper;
import android.app.Activity;
import android.graphics.drawable.ColorDrawable;
import android.content.Context;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.extension.cs.ChatStateManager;
import com.xabber.android.data.roster.AbstractContact;
import com.xabber.androiddev.R;
import org.jivesoftware.smackx.ChatState;
/**
* Helper class to update <code>contact_title.xml</code>.
*
* @author alexander.ivanov
*/
public class ContactTitleInflater {
/**
* 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) {
public static void updateTitle(View titleView, final Context context, AbstractContact abstractContact) {
final TextView nameView = (TextView) titleView.findViewById(R.id.name);
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());
avatarView.setImageDrawable(abstractContact.getAvatar());
setStatus(activity, titleView, abstractContact);
setStatus(context, 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);
int statusLevel = abstractContact.getStatusMode().getStatusLevel();
......@@ -79,13 +55,13 @@ public class ContactTitleInflater {
CharSequence statusText;
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) {
statusText = activity.getString(R.string.chat_state_paused);
statusText = context.getString(R.string.chat_state_paused);
} else {
statusText = abstractContact.getStatusText().trim();
if (statusText.toString().isEmpty()) {
statusText = activity.getString(abstractContact.getStatusMode().getStringID());
statusText = context.getString(abstractContact.getStatusMode().getStringID());
}
}
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 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<include layout="@layout/toolbar_default"
android:id="@+id/toolbar_default"
/>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/toolbar_default"
/>
<LinearLayout
......@@ -20,9 +18,8 @@
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp"
android:layout_marginTop="62dp"
android:id="@+id/chat_scroll_indicator"
android:layout_below="@+id/toolbar_default"
>
</LinearLayout>
......
......@@ -19,6 +19,26 @@
android:layout_height="match_parent"
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
android:id="@android:id/list"
android:layout_width="match_parent"
......@@ -32,6 +52,7 @@
android:layout_above="@+id/input_layout"
tools:listitem="@layout/chat_viewer_outgoing_message"
android:listSelector="@android:color/transparent"
android:layout_below="@+id/toolbar_default"
/>
<LinearLayout
......
......@@ -4,7 +4,6 @@
android:layout_height="wrap_content"
android:minHeight="?android:attr/actionBarSize"
android:orientation="horizontal"
android:background="@color/green_500"
android:gravity="center_vertical"
>
......
<?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_height="match_parent"
android:background="@drawable/chat_background_repeat"
>
<include layout="@layout/toolbar_default" />
<ListView
android:layout_width="match_parent"
......
......@@ -59,12 +59,6 @@
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"
android:title="@string/clear_history"
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