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
......@@ -22,38 +22,27 @@ import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.LinearLayout;
import com.xabber.android.data.ActivityManager;
import com.xabber.android.data.Application;
import com.xabber.android.data.NetworkException;
import com.xabber.android.data.account.OnAccountChangedListener;
import com.xabber.android.data.entity.BaseEntity;
import com.xabber.android.data.extension.archive.MessageArchiveManager;
import com.xabber.android.data.extension.attention.AttentionManager;
import com.xabber.android.data.extension.muc.MUCManager;
import com.xabber.android.data.extension.muc.RoomChat;
import com.xabber.android.data.extension.muc.RoomState;
import com.xabber.android.data.intent.EntityIntentBuilder;
import com.xabber.android.data.message.AbstractChat;
import com.xabber.android.data.message.MessageManager;
import com.xabber.android.data.message.OnChatChangedListener;
import com.xabber.android.data.message.RegularChat;
import com.xabber.android.data.notification.NotificationManager;
import com.xabber.android.data.roster.AbstractContact;
import com.xabber.android.data.roster.OnContactChangedListener;
import com.xabber.android.data.roster.RosterManager;
import com.xabber.android.ui.adapter.ChatScrollIndicatorAdapter;
import com.xabber.android.ui.adapter.ChatViewerAdapter;
import com.xabber.android.ui.dialog.ChatExportDialogFragment;
import com.xabber.android.ui.helper.ContactTitleActionBarInflater;
import com.xabber.android.ui.helper.ManagedActivity;
import com.xabber.android.ui.preferences.ChatEditor;
import com.xabber.android.ui.helper.StatusBarPainter;
import com.xabber.androiddev.R;
import java.util.Collection;
......@@ -67,7 +56,10 @@ import java.util.HashSet;
*/
public class ChatViewer extends ManagedActivity implements OnChatChangedListener,
OnContactChangedListener, OnAccountChangedListener, ViewPager.OnPageChangeListener,
ChatViewerAdapter.FinishUpdateListener, RecentChatFragment.RecentChatFragmentInteractionListener, View.OnClickListener {
ChatViewerAdapter.FinishUpdateListener, RecentChatFragment.RecentChatFragmentInteractionListener, View.OnClickListener,
ChatViewerFragment.ChatViewerFragmentListener
{
/**
* Attention request.
......@@ -78,8 +70,6 @@ public class ChatViewer extends ManagedActivity implements OnChatChangedListener
private static final String SAVED_USER = "com.xabber.android.ui.ChatViewer.SAVED_USER";
private static final String SAVED_EXIT_ON_SEND = "com.xabber.android.ui.ChatViewer.EXIT_ON_SEND";
private static final int MINIMUM_MESSAGES_TO_LOAD = 10;
private boolean exitOnSend;
private String extraText = null;
......@@ -95,10 +85,9 @@ public class ChatViewer extends ManagedActivity implements OnChatChangedListener
private String actionWithAccount = null;
private String actionWithUser = null;
private ContactTitleActionBarInflater contactTitleActionBarInflater;
private StatusBarPainter statusBarPainter;
private boolean isChatSelected;
private Menu menu = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
......@@ -125,19 +114,8 @@ public class ChatViewer extends ManagedActivity implements OnChatChangedListener
}
setContentView(R.layout.activity_chat_viewer);
setSupportActionBar((Toolbar) findViewById(R.id.toolbar_default));
contactTitleActionBarInflater = new ContactTitleActionBarInflater(this);
contactTitleActionBarInflater.setUpActionBarView();
contactTitleActionBarInflater.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
scrollChat();
}
});
contactTitleActionBarInflater.setOnAvatarClickListener(this);
statusBarPainter = new StatusBarPainter(this);
if (account != null && user != null) {
chatViewerAdapter = new ChatViewerAdapter(getFragmentManager(), account, user, this);
......@@ -158,77 +136,6 @@ public class ChatViewer extends ManagedActivity implements OnChatChangedListener
selectPage(account, user, false);
}
private void scrollChat() {
if (!isChatSelected) {
return;
}
for (ChatViewerFragment chat : registeredChats) {
if (chat.isEqual(actionWithAccount, actionWithUser)) {
chat.scrollChat();
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
this.menu = menu;
createOptionsMenu();
return true;
}
private void createOptionsMenu() {
if (menu == null) {
return;
}
menu.clear();
if (!isChatSelected) {
return;
}
getMenuInflater().inflate(R.menu.chat, menu);
final String account = actionWithAccount;
final String user = actionWithUser;
AbstractChat abstractChat = MessageManager.getInstance().getChat(account, user);
if (abstractChat instanceof RoomChat) {
RoomState chatState = ((RoomChat) abstractChat).getState();
if (chatState == RoomState.available) {
menu.findItem(R.id.action_list_of_occupants).setVisible(true);
}
if (chatState == RoomState.unavailable) {
menu.findItem(R.id.action_join_conference).setVisible(true);
} else {
menu.findItem(R.id.action_invite_to_chat).setVisible(true);
if (chatState == RoomState.error) {
menu.findItem(R.id.action_authorization_settings).setVisible(true);
} else {
menu.findItem(R.id.action_leave_conference).setVisible(true);
}
}
}
if (abstractChat instanceof RegularChat) {
menu.findItem(R.id.action_view_contact).setVisible(true);
menu.findItem(R.id.action_close_chat).setVisible(true);
}
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
createOptionsMenu();
return true;
}
@Override
protected void onResume() {
super.onResume();
......@@ -287,113 +194,6 @@ public class ChatViewer extends ManagedActivity implements OnChatChangedListener
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
final String account = actionWithAccount;
final String user = actionWithUser;
switch (item.getItemId()) {
case R.id.action_view_contact:
showContactInfo();
return true;
case R.id.action_chat_list:
selectRecentChatsPage();
return true;
case R.id.action_chat_settings:
startActivity(ChatEditor.createIntent(this, account, user));
return true;
case R.id.action_show_history:
showHistory(account, user);
return true;
case R.id.action_authorization_settings:
startActivity(MUCEditor.createIntent(this, account, user));
return true;
case R.id.action_close_chat:
closeChat(account, user);
return true;
case R.id.action_clear_text:
cleatInputText(account, user);
return true;
case R.id.action_clear_history:
clearHistory(account, user);
return true;
case R.id.action_export_chat:
ChatExportDialogFragment.newInstance(account, user).show(getFragmentManager(), "CHAT_EXPORT");
return true;
case R.id.action_call_attention:
callAttention(account, user);
return true;
/* conferences */
case R.id.action_join_conference:
MUCManager.getInstance().joinRoom(account, user, true);
return true;
case R.id.action_invite_to_chat:
startActivity(ContactList.createRoomInviteIntent(this, account, user));
return true;
case R.id.action_leave_conference:
leaveConference(account, user);
return true;
case R.id.action_list_of_occupants:
startActivity(OccupantList.createIntent(this, account, user));
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private void cleatInputText(String account, String user) {
for (ChatViewerFragment chat : registeredChats) {
if (chat.isEqual(account, user)) {
chat.clearInputText();
}
}
}
private void callAttention(String account, String user) {
try {
AttentionManager.getInstance().sendAttention(account, user);
} catch (NetworkException e) {
Application.getInstance().onError(e);
}
}
private void clearHistory(String account, String user) {
MessageManager.getInstance().clearHistory(account, user);
updateRegisteredChats();
}
private void closeChat(String account, String user) {
MessageManager.getInstance().closeChat(account, user);
NotificationManager.getInstance().removeMessageNotification(account, user);
close();
}
private void leaveConference(String account, String user) {
MUCManager.getInstance().leaveRoom(account, user);
closeChat(account, user);
}
private void showHistory(String account, String user) {
MessageManager.getInstance().requestToLoadLocalHistory(account, user);
MessageArchiveManager.getInstance().requestHistory(account, user, MINIMUM_MESSAGES_TO_LOAD, 0);
updateRegisteredChats();
}
private void selectPage(String account, String user, boolean smoothScroll) {
int position = chatViewerAdapter.getPageNumber(account, user);
selectPage(position, smoothScroll);
......@@ -494,7 +294,7 @@ public class ChatViewer extends ManagedActivity implements OnChatChangedListener
&& actionWithUser != null && actionWithUser.equals(user)) {
updateActionBar(account, user);
if (incoming) {
contactTitleActionBarInflater.playIncomingAnimation();
// contactTitleActionBarInflater.playIncomingAnimation();
}
}
}
......@@ -557,10 +357,8 @@ public class ChatViewer extends ManagedActivity implements OnChatChangedListener
actionWithUser = null;
}
createOptionsMenu();
if (!isChatSelected) {
contactTitleActionBarInflater.restoreDefaultTitleView(getString(R.string.chat_list));
statusBarPainter.restore();
MessageManager.getInstance().removeVisibleChat();
return;
}
......@@ -577,9 +375,7 @@ public class ChatViewer extends ManagedActivity implements OnChatChangedListener
}
private void updateActionBar(String account, String user) {
final AbstractContact abstractContact = RosterManager.getInstance().getBestContact(account, user);
contactTitleActionBarInflater.update(abstractContact);
statusBarPainter.updateWithAccountName(account);
}
private void updateRegisteredChats() {
......@@ -690,11 +486,6 @@ public class ChatViewer extends ManagedActivity implements OnChatChangedListener
public void onChatSelected(AbstractChat chat) {
selectPage(chat.getAccount(), chat.getUser(), true);
}
public void selectRecentChatsPage() {
selectPage(null, null, false);
}
public ChatViewerAdapter getChatViewerAdapter() {
return chatViewerAdapter;
}
......@@ -722,4 +513,9 @@ public class ChatViewer extends ManagedActivity implements OnChatChangedListener
startActivity(ContactEditor.createIntent(this, actionWithAccount, actionWithUser));
}
}
@Override
public void onCloseChat() {
close();
}
}
package com.xabber.android.ui;
import android.app.Activity;
import android.app.Fragment;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.NavUtils;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.Toolbar;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.ContextMenu;
......@@ -26,7 +30,12 @@ import com.xabber.android.data.LogManager;
import com.xabber.android.data.NetworkException;
import com.xabber.android.data.SettingsManager;
import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.extension.archive.MessageArchiveManager;
import com.xabber.android.data.extension.attention.AttentionManager;
import com.xabber.android.data.extension.cs.ChatStateManager;
import com.xabber.android.data.extension.muc.MUCManager;
import com.xabber.android.data.extension.muc.RoomChat;
import com.xabber.android.data.extension.muc.RoomState;
import com.xabber.android.data.extension.otr.OTRManager;
import com.xabber.android.data.extension.otr.SecurityLevel;
import com.xabber.android.data.message.AbstractChat;
......@@ -34,14 +43,23 @@ import com.xabber.android.data.message.MessageItem;
import com.xabber.android.data.message.MessageManager;
import com.xabber.android.data.message.RegularChat;
import com.xabber.android.data.message.chat.ChatManager;
import com.xabber.android.data.notification.NotificationManager;
import com.xabber.android.data.roster.AbstractContact;
import com.xabber.android.data.roster.RosterManager;
import com.xabber.android.ui.adapter.ChatMessageAdapter;
import com.xabber.android.ui.dialog.ChatExportDialogFragment;
import com.xabber.android.ui.helper.ActionBarPainter;
import com.xabber.android.ui.helper.ContactTitleInflater;
import com.xabber.android.ui.preferences.ChatEditor;
import com.xabber.androiddev.R;
public class ChatViewerFragment extends Fragment implements AdapterView.OnItemClickListener, PopupMenu.OnMenuItemClickListener {
public class ChatViewerFragment extends Fragment implements AdapterView.OnItemClickListener, PopupMenu.OnMenuItemClickListener, View.OnClickListener, Toolbar.OnMenuItemClickListener {
public static final String ARGUMENT_ACCOUNT = "ARGUMENT_ACCOUNT";
public static final String ARGUMENT_USER = "ARGUMENT_USER";
private static final int MINIMUM_MESSAGES_TO_LOAD = 10;
private EditText inputView;
private ListView listView;
private ChatMessageAdapter chatMessageAdapter;
......@@ -54,6 +72,9 @@ public class ChatViewerFragment extends Fragment implements AdapterView.OnItemCl
boolean isInputEmpty = true;
private ImageButton sendButton;
private ImageButton securityButton;
private Toolbar toolbar;
private ChatViewerFragmentListener listener;
public static ChatViewerFragment newInstance(String account, String user) {
ChatViewerFragment fragment = new ChatViewerFragment();
......@@ -80,6 +101,27 @@ public class ChatViewerFragment extends Fragment implements AdapterView.OnItemCl
View view = inflater.inflate(R.layout.chat_viewer_item, container, false);
View contactTitle = view.findViewById(R.id.contact_title);
final AbstractContact abstractContact = RosterManager.getInstance().getBestContact(account, user);
ContactTitleInflater.updateTitle(contactTitle, getActivity(), abstractContact);
contactTitle.findViewById(R.id.avatar).setOnClickListener(this);
ActionBarPainter actionBarPainter = new ActionBarPainter((ActionBarActivity) getActivity());
toolbar = (Toolbar) view.findViewById(R.id.toolbar_default);
toolbar.setBackgroundColor(actionBarPainter.getAccountColor(account));
toolbar.inflateMenu(R.menu.chat);
toolbar.setOnMenuItemClickListener(this);
toolbar.setNavigationIcon(R.drawable.ic_arrow_left_white_24dp);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
NavUtils.navigateUpFromSameTask(getActivity());
}
});
view.getBackground().setAlpha(40);
sendButton = (ImageButton) view.findViewById(R.id.button_send_message);
......@@ -165,7 +207,24 @@ public class ChatViewerFragment extends Fragment implements AdapterView.OnItemCl
updateChat();
return view;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
listener = (ChatViewerFragmentListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement ChatViewerFragmentListener");
}
}
@Override
public void onDetach() {
super.onDetach();
listener = null;
}
private void showSecurityMenu() {
......@@ -272,6 +331,36 @@ public class ChatViewerFragment extends Fragment implements AdapterView.OnItemCl
updateChat();
}
private void setUpOptionsMenu(Menu menu) {
AbstractChat abstractChat = MessageManager.getInstance().getChat(account, user);
if (abstractChat instanceof RoomChat) {
RoomState chatState = ((RoomChat) abstractChat).getState();
if (chatState == RoomState.available) {
menu.findItem(R.id.action_list_of_occupants).setVisible(true);
}
if (chatState == RoomState.unavailable) {
menu.findItem(R.id.action_join_conference).setVisible(true);
} else {
menu.findItem(R.id.action_invite_to_chat).setVisible(true);
if (chatState == RoomState.error) {
menu.findItem(R.id.action_authorization_settings).setVisible(true);
} else {
menu.findItem(R.id.action_leave_conference).setVisible(true);
}
}
}
if (abstractChat instanceof RegularChat) {
menu.findItem(R.id.action_view_contact).setVisible(true);
menu.findItem(R.id.action_close_chat).setVisible(true);
}
}
@Override
public void onCreateContextMenu(ContextMenu menu, View view,
ContextMenu.ContextMenuInfo menuInfo) {
......@@ -326,6 +415,7 @@ public class ChatViewerFragment extends Fragment implements AdapterView.OnItemCl
public void updateChat() {
chatMessageAdapter.onChange();
setUpOptionsMenu(toolbar.getMenu());
updateSecurityButton();
}
......@@ -353,7 +443,7 @@ public class ChatViewerFragment extends Fragment implements AdapterView.OnItemCl
return user;
}
public void clearInputText() {
private void clearInputText() {
skipOnTextChanges = true;
inputView.getText().clear();
skipOnTextChanges = false;
......@@ -376,6 +466,8 @@ public class ChatViewerFragment extends Fragment implements AdapterView.OnItemCl
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
/* security menu */
case R.id.action_start_encryption:
startEncryption(account, user);
return true;
......@@ -400,11 +492,69 @@ public class ChatViewerFragment extends Fragment implements AdapterView.OnItemCl
startActivity(QuestionViewer.createIntent(getActivity(), account, user, false, false, null));
return true;
/* regular chat options menu */
case R.id.action_view_contact:
showContactInfo();
return true;
case R.id.action_chat_settings:
startActivity(ChatEditor.createIntent(getActivity(), account, user));
return true;
case R.id.action_show_history:
showHistory(account, user);
return true;
case R.id.action_authorization_settings:
startActivity(MUCEditor.createIntent(getActivity(), account, user));
return true;
case R.id.action_close_chat:
closeChat(account, user);
return true;
case R.id.action_clear_history:
clearHistory(account, user);
return true;
case R.id.action_export_chat:
ChatExportDialogFragment.newInstance(account, user).show(getFragmentManager(), "CHAT_EXPORT");
return true;
case R.id.action_call_attention:
callAttention();
return true;
/* conference specific options menu */
case R.id.action_join_conference:
MUCManager.getInstance().joinRoom(account, user, true);
return true;
case R.id.action_invite_to_chat:
startActivity(ContactList.createRoomInviteIntent(getActivity(), account, user));
return true;
case R.id.action_leave_conference:
leaveConference(account, user);
return true;
case R.id.action_list_of_occupants:
startActivity(OccupantList.createIntent(getActivity(), account, user));
return true;
default:
return false;
}
}
private void showHistory(String account, String user) {
MessageManager.getInstance().requestToLoadLocalHistory(account, user);
MessageArchiveManager.getInstance().requestHistory(account, user, MINIMUM_MESSAGES_TO_LOAD, 0);
}
private void stopEncryption(String account, String user) {
try {
OTRManager.getInstance().endSession(account, user);
......@@ -428,4 +578,46 @@ public class ChatViewerFragment extends Fragment implements AdapterView.OnItemCl
Application.getInstance().onError(e);
}
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.avatar) {
showContactInfo();
}
}
private void showContactInfo() {
if (MUCManager.getInstance().hasRoom(account, user)) {
startActivity(ContactViewer.createIntent(getActivity(), account, user));
} else {
startActivity(ContactEditor.createIntent(getActivity(), account, user));
}
}
private void closeChat(String account, String user) {
MessageManager.getInstance().closeChat(account, user);
NotificationManager.getInstance().removeMessageNotification(account, user);
listener.onCloseChat();
}
private void clearHistory(String account, String user) {
MessageManager.getInstance().clearHistory(account, user);
}
private void leaveConference(String account, String user) {
MUCManager.getInstance().leaveRoom(account, user);
closeChat(account, user);
}
private void callAttention() {
try {
AttentionManager.getInstance().sendAttention(account, user);
} catch (NetworkException e) {
Application.getInstance().onError(e);
}
}
public interface ChatViewerFragmentListener {
void onCloseChat();
}
}
......@@ -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