Commit 85fa8b1a authored by Grigory Fedorov's avatar Grigory Fedorov

Merge branch 'feature/chat_scroll' into develop

parents deafcfed c038a3df
......@@ -8,8 +8,8 @@ android {
applicationId "com.xabber.androiddev"
minSdkVersion 14
targetSdkVersion 22
versionCode 162
versionName '0.10.62'
versionCode 171
versionName '0.10.71'
}
compileOptions {
......@@ -23,7 +23,7 @@ repositories {
}
dependencies {
compile 'com.android.support:appcompat-v7:22.0.0'
compile 'com.android.support:appcompat-v7:22.1.0'
compile 'com.android.support:support-v13:22.0.0'
compile 'com.github.ksoichiro:android-observablescrollview:1.5.0'
compile 'de.hdodenhof:circleimageview:1.2.2'
......
......@@ -681,8 +681,7 @@ public class MessageArchiveManager implements OnPacketListener,
* @param newCount
* @param incomingCount
*/
public void requestHistory(String account, String bareAddress,
int newCount, int incomingCount) {
public void requestHistory(String account, String bareAddress, int newCount, int incomingCount) {
if (AccountManager.getInstance().getArchiveMode(account) != ArchiveMode.server
|| (newCount <= 0 && incomingCount <= 0))
return;
......
......@@ -27,6 +27,7 @@ import com.xabber.android.data.connection.ConnectionItem;
import com.xabber.android.data.connection.ConnectionManager;
import com.xabber.android.data.connection.ConnectionThread;
import com.xabber.android.data.connection.OnPacketListener;
import com.xabber.android.data.entity.BaseEntity;
import com.xabber.android.data.extension.capability.CapabilitiesManager;
import com.xabber.android.data.extension.capability.ClientInfo;
import com.xabber.android.data.message.AbstractChat;
......@@ -201,8 +202,8 @@ public class AttentionManager implements OnPacketListener, OnLoadListener {
chat.newAction(null, null, ChatAction.attention_called);
}
public void removeAccountNotifications(String account, String user) {
attentionRequestProvider.remove(account, user);
public void removeAccountNotifications(BaseEntity chat) {
attentionRequestProvider.remove(chat.getAccount(), chat.getUser());
}
}
......@@ -111,6 +111,8 @@ public abstract class AbstractChat extends BaseEntity {
protected Date creationTime = new Date();
private boolean isLastMessageIncoming;
protected AbstractChat(final String account, final String user) {
super(account, user);
threadId = StringUtils.randomString(12);
......@@ -341,8 +343,7 @@ public abstract class AbstractChat extends BaseEntity {
* @param action
*/
public void newAction(String resource, String text, ChatAction action) {
newMessage(resource, text, action, null, true, false, false, false,
true);
newMessage(resource, text, action, null, true, false, false, false, true);
}
/**
......@@ -451,9 +452,9 @@ public abstract class AbstractChat extends BaseEntity {
for (int index = messages.size() - 1; index >= 0; index--) {
MessageItem messageItem = messages.get(index);
if (messageItem.getAction() == null) {
lastText = messageItem.isIncoming() ? messageItem.getText()
: "";
lastText = messageItem.getText();
lastTime = messageItem.getTimestamp();
isLastMessageIncoming = messageItem.isIncoming();
return;
}
}
......@@ -467,8 +468,7 @@ public abstract class AbstractChat extends BaseEntity {
Application.getInstance().runInBackground(new Runnable() {
@Override
public void run() {
MessageTable.getInstance().removeMessages(
MessageManager.getMessageIds(messageItems, true));
MessageTable.getInstance().removeMessages(MessageManager.getMessageIds(messageItems, true));
}
});
}
......@@ -482,8 +482,7 @@ public abstract class AbstractChat extends BaseEntity {
Application.getInstance().runInBackground(new Runnable() {
@Override
public void run() {
MessageTable.getInstance().removeMessages(
MessageManager.getMessageIds(messageItems, true));
MessageTable.getInstance().removeMessages(MessageManager.getMessageIds(messageItems, true));
MessageTable.getInstance().removeMessages(historyIds);
historyIds.clear();
}
......@@ -517,7 +516,7 @@ public abstract class AbstractChat extends BaseEntity {
* @return Last incoming message's text. Empty string if last message is
* outgoing.
*/
protected String getLastText() {
public String getLastText() {
return lastText;
}
......@@ -685,4 +684,8 @@ public abstract class AbstractChat extends BaseEntity {
public void updateCreationTime() {
creationTime.setTime(System.currentTimeMillis());
}
public boolean isLastMessageIncoming() {
return isLastMessageIncoming;
}
}
......@@ -146,7 +146,7 @@ public class MessageItem implements Comparable<MessageItem> {
}
public String getText() {
return text;
return Html.fromHtml(text).toString();
}
public Spannable getSpannable() {
......
......@@ -18,6 +18,7 @@ import com.xabber.android.data.message.chat.ChatManager;
import com.xabber.android.data.message.phrase.PhraseManager;
import com.xabber.android.data.roster.RosterManager;
import com.xabber.android.ui.ChatViewer;
import com.xabber.android.ui.helper.AccountPainter;
import com.xabber.android.utils.StringUtils;
import com.xabber.androiddev.R;
......@@ -26,12 +27,13 @@ import java.util.List;
public class MessageNotificationCreator {
private final Application application;
private final AccountPainter accountPainter;
private List<MessageNotification> messageNotifications;
private NotificationCompat.Builder notificationBuilder;
public MessageNotificationCreator() {
application = Application.getInstance();
accountPainter = new AccountPainter(application);
}
......@@ -65,7 +67,7 @@ public class MessageNotificationCreator {
notificationBuilder.setLargeIcon(getLargeIcon(message));
notificationBuilder.setWhen(message.getTimestamp().getTime());
notificationBuilder.setColor(NotificationManager.COLOR_MATERIAL_RED_500);
notificationBuilder.setColor(accountPainter.getAccountMainColor(message.getAccount()));
notificationBuilder.setStyle(getStyle(message, messageCount, showText));
notificationBuilder.setContentIntent(getIntent(message));
......
......@@ -43,6 +43,7 @@ import com.xabber.android.data.roster.RosterManager;
import com.xabber.android.ui.ClearNotifications;
import com.xabber.android.ui.ContactList;
import com.xabber.android.ui.ReconnectionActivity;
import com.xabber.android.ui.helper.AccountPainter;
import com.xabber.android.utils.StringUtils;
import com.xabber.androiddev.R;
......@@ -66,18 +67,17 @@ public class NotificationManager implements OnInitializedListener, OnAccountChan
private static final int BASE_NOTIFICATION_PROVIDER_ID = 0x10;
private static final long VIBRATION_DURATION = 500;
private final static NotificationManager instance;
public static final int COLOR_MATERIAL_RED_500 = 0xF44336;
static {
instance = new NotificationManager();
Application.getInstance().addManager(instance);
}
private final Application application;
private final android.app.NotificationManager notificationManager;
private final PendingIntent clearNotifications;
private final Handler handler;
private NotificationCompat.Builder persistentNotificationBuilder;
private MessageNotificationCreator messageNotificationCreator;
/**
* Runnable to start vibration.
*/
......@@ -97,17 +97,10 @@ public class NotificationManager implements OnInitializedListener, OnAccountChan
* List of
*/
private final List<MessageNotification> messageNotifications;
private final static NotificationManager instance;
static {
instance = new NotificationManager();
Application.getInstance().addManager(instance);
}
public static NotificationManager getInstance() {
return instance;
}
private final AccountPainter accountPainter;
private NotificationCompat.Builder persistentNotificationBuilder;
private MessageNotificationCreator messageNotificationCreator;
private int persistentNotificationColor;
private NotificationManager() {
this.application = Application.getInstance();
......@@ -151,6 +144,13 @@ public class NotificationManager implements OnInitializedListener, OnAccountChan
messageNotificationCreator = new MessageNotificationCreator();
accountPainter = new AccountPainter(application);
persistentNotificationColor = application.getResources().getColor(R.color.red_500);
}
public static NotificationManager getInstance() {
return instance;
}
private void initPersistentNotification() {
......@@ -272,7 +272,7 @@ public class NotificationManager implements OnInitializedListener, OnAccountChan
notificationBuilder.setDeleteIntent(clearNotifications);
notificationBuilder.setColor(COLOR_MATERIAL_RED_500);
notificationBuilder.setColor(accountPainter.getDefaultMainColor());
notify(id, notificationBuilder.build());
}
......@@ -361,7 +361,7 @@ public class NotificationManager implements OnInitializedListener, OnAccountChan
}
if (connected > 0) {
persistentNotificationBuilder.setColor(COLOR_MATERIAL_RED_500);
persistentNotificationBuilder.setColor(persistentNotificationColor);
persistentNotificationBuilder.setSmallIcon(R.drawable.ic_stat_online);
} else {
persistentNotificationBuilder.setColor(NotificationCompat.COLOR_DEFAULT);
......@@ -493,10 +493,8 @@ public class NotificationManager implements OnInitializedListener, OnAccountChan
return messageNotification.getCount();
}
public void removeMessageNotification(final String account,
final String user) {
MessageNotification messageNotification = getMessageNotification(
account, user);
public void removeMessageNotification(final String account, final String user) {
MessageNotification messageNotification = getMessageNotification(account, user);
if (messageNotification == null)
return;
messageNotifications.remove(messageNotification);
......
......@@ -23,11 +23,20 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import com.xabber.android.data.intent.AccountIntentBuilder;
import com.xabber.android.ui.helper.BarPainter;
import com.xabber.android.ui.helper.ManagedActivity;
import com.xabber.androiddev.R;
public class AccountAdd extends ManagedActivity {
public static Intent createIntent(Context context) {
return new Intent(context, AccountAdd.class);
}
public static Intent createAuthenticatorResult(String account) {
return new AccountIntentBuilder(null, null).setAccount(account).build();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
......@@ -40,10 +49,15 @@ public class AccountAdd extends ManagedActivity {
getSupportFragmentManager().beginTransaction().add(R.id.container, AccountAddFragment.newInstance()).commit();
}
setSupportActionBar((Toolbar) findViewById(R.id.toolbar_default));
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_default);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_clear_white_24dp);
getSupportActionBar().setTitle(null);
BarPainter barPainter = new BarPainter(this, toolbar);
barPainter.setDefaultColor();
}
@Override
......@@ -67,12 +81,4 @@ public class AccountAdd extends ManagedActivity {
return super.onOptionsItemSelected(item);
}
}
public static Intent createIntent(Context context) {
return new Intent(context, AccountAdd.class);
}
public static Intent createAuthenticatorResult(String account) {
return new AccountIntentBuilder(null, null).setAccount(account).build();
}
}
......@@ -23,25 +23,47 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import com.xabber.android.data.intent.EntityIntentBuilder;
import com.xabber.android.ui.helper.ActionBarPainter;
import com.xabber.android.ui.helper.BarPainter;
import com.xabber.android.ui.helper.ManagedActivity;
import com.xabber.androiddev.R;
public class ContactAdd extends ManagedActivity implements ContactAddFragment.Listener {
ActionBarPainter actionBarPainter;
BarPainter barPainter;
public static Intent createIntent(Context context) {
return createIntent(context, null);
}
public static Intent createIntent(Context context, String account) {
return createIntent(context, account, null);
}
public static Intent createIntent(Context context, String account, String user) {
return new EntityIntentBuilder(context, ContactAdd.class).setAccount(account).setUser(user).build();
}
private static String getAccount(Intent intent) {
return EntityIntentBuilder.getAccount(intent);
}
private static String getUser(Intent intent) {
return EntityIntentBuilder.getUser(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.contact_add);
setSupportActionBar((Toolbar) findViewById(R.id.toolbar_default));
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_clear_white_24dp);
getSupportActionBar().setTitle(null);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_default);
toolbar.setNavigationIcon(R.drawable.ic_clear_white_24dp);
setTitle(null);
barPainter = new BarPainter(this, toolbar);
barPainter.setDefaultColor();
setSupportActionBar(toolbar);
actionBarPainter = new ActionBarPainter(this);
Intent intent = getIntent();
......@@ -78,28 +100,8 @@ public class ContactAdd extends ManagedActivity implements ContactAddFragment.Li
}
}
public static Intent createIntent(Context context) {
return createIntent(context, null);
}
public static Intent createIntent(Context context, String account) {
return createIntent(context, account, null);
}
public static Intent createIntent(Context context, String account, String user) {
return new EntityIntentBuilder(context, ContactAdd.class).setAccount(account).setUser(user).build();
}
private static String getAccount(Intent intent) {
return EntityIntentBuilder.getAccount(intent);
}
private static String getUser(Intent intent) {
return EntityIntentBuilder.getUser(intent);
}
@Override
public void onAccountSelected(String account) {
actionBarPainter.updateWithAccountName(account);
barPainter.updateWithAccountName(account);
}
}
......@@ -20,15 +20,19 @@ import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.support.v4.view.MenuItemCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.widget.Toolbar;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
......@@ -58,7 +62,10 @@ import com.xabber.android.ui.dialog.AccountChooseDialogFragment;
import com.xabber.android.ui.dialog.AccountChooseDialogFragment.OnChoosedListener;
import com.xabber.android.ui.dialog.ContactIntegrationDialogFragment;
import com.xabber.android.ui.dialog.StartAtBootDialogFragment;
import com.xabber.android.ui.helper.BarPainter;
import com.xabber.android.ui.helper.ManagedActivity;
import com.xabber.android.ui.preferences.AboutViewer;
import com.xabber.android.ui.preferences.AccountEditor;
import com.xabber.android.ui.preferences.PreferenceEditor;
import com.xabber.androiddev.R;
import com.xabber.xmpp.address.Jid;
......@@ -73,7 +80,7 @@ import java.util.Collection;
* @author alexander.ivanov
*/
public class ContactList extends ManagedActivity implements OnAccountChangedListener,
View.OnClickListener, OnChoosedListener, OnContactClickListener {
View.OnClickListener, OnChoosedListener, OnContactClickListener, ContactListDrawerFragment.ContactListDrawerListener {
/**
* Select contact to be invited to the room was requested.
......@@ -100,6 +107,36 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList
private String sendText;
private SearchView searchView;
private BarPainter barPainter;
private ActionBarDrawerToggle drawerToggle;
private DrawerLayout drawerLayout;
public static Intent createPersistentIntent(Context context) {
Intent intent = new Intent(context, ContactList.class);
intent.setAction("android.intent.action.MAIN");
intent.addCategory("android.intent.category.LAUNCHER");
intent.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | Intent.FLAG_ACTIVITY_NEW_TASK);
return intent;
}
public static Intent createIntent(Context context) {
return new Intent(context, ContactList.class);
}
public static Intent createRoomInviteIntent(Context context, String account, String room) {
Intent intent = new EntityIntentBuilder(context, ContactList.class)
.setAccount(account).setUser(room).build();
intent.setAction(ACTION_ROOM_INVITE);
return intent;
}
private static String getRoomInviteAccount(Intent intent) {
return EntityIntentBuilder.getAccount(intent);
}
private static String getRoomInviteUser(Intent intent) {
return EntityIntentBuilder.getUser(intent);
}
@Override
public void onCreate(Bundle savedInstanceState) {
......@@ -117,10 +154,19 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList
setContentView(R.layout.contact_list);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_default);
toolbar.setLogo(R.drawable.ic_xabber_logo);
toolbar.setOnClickListener(this);
setSupportActionBar(toolbar);
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.production_title, R.string.production_title);
drawerLayout.setDrawerListener(drawerToggle);
getSupportActionBar().setHomeButtonEnabled(true);
barPainter = new BarPainter(this, toolbar);
barPainter.setDefaultColor();
setTitle(getString(R.string.production_title));
if (savedInstanceState != null) {
......@@ -214,6 +260,7 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList
@Override
protected void onResume() {
super.onResume();
barPainter.setDefaultColor();
rebuildAccountToggle();
Application.getInstance().addUIListener(OnAccountChangedListener.class, this);
......@@ -349,6 +396,10 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (drawerToggle.onOptionsItemSelected(item)) {
return true;
}
switch (item.getItemId()) {
case R.id.action_search:
searchView.setIconified(false);
......@@ -366,19 +417,34 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList
startActivity(MUCEditor.createIntent(this));
return true;
case R.id.action_chat_list:
startActivity(ChatViewer.createIntent(this));
return true;
case R.id.action_settings:
startActivity(PreferenceEditor.createIntent(this));
return true;
case R.id.action_exit:
exit();
startActivity(ChatViewer.createRecentChatsIntent(this));
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
drawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
drawerToggle.onConfigurationChanged(newConfig);
}
@Override
public void onBackPressed() {
if (drawerLayout.isDrawerOpen(Gravity.START | Gravity.LEFT)) {
drawerLayout.closeDrawers();
return;
}
super.onBackPressed();
}
private void exit() {
Application.getInstance().requestToClose();
showDialog(DIALOG_CLOSE_APPLICATION_ID);
......@@ -442,7 +508,7 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList
@Override
public void onContactClick(AbstractContact abstractContact) {
if (action == null) {
startActivity(ChatViewer.createIntent(this,
startActivity(ChatViewer.createSpecificChatIntent(this,
abstractContact.getAccount(), abstractContact.getUser()));
return;
}
......@@ -474,7 +540,7 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList
break;
}
default:
startActivity(ChatViewer.createIntent(this,
startActivity(ChatViewer.createSpecificChatIntent(this,
abstractContact.getAccount(), abstractContact.getUser()));
break;
}
......@@ -500,6 +566,7 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList
@Override
public void onAccountsChanged(Collection<String> accounts) {
((ContactListFragment)getSupportFragmentManager().findFragmentById(R.id.container)).onAccountsChanged();
barPainter.setDefaultColor();
}
@Override
......@@ -511,31 +578,26 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList
((ContactListFragment)getSupportFragmentManager().findFragmentById(R.id.container)).rebuild();
}
public static Intent createPersistentIntent(Context context) {
Intent intent = new Intent(context, ContactList.class);
intent.setAction("android.intent.action.MAIN");
intent.addCategory("android.intent.category.LAUNCHER");
intent.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | Intent.FLAG_ACTIVITY_NEW_TASK);
return intent;
}
public static Intent createIntent(Context context) {
return new Intent(context, ContactList.class);
}
public static Intent createRoomInviteIntent(Context context, String account, String room) {
Intent intent = new EntityIntentBuilder(context, ContactList.class)
.setAccount(account).setUser(room).build();
intent.setAction(ACTION_ROOM_INVITE);
return intent;
}
@Override
public void onContactListDrawerListener(int viewId) {
drawerLayout.closeDrawers();
switch (viewId) {
case R.id.drawer_action_settings:
startActivity(PreferenceEditor.createIntent(this));
break;
case R.id.drawer_action_about:
startActivity(AboutViewer.createIntent(this));
break;
case R.id.drawer_action_exit:
exit();
break;
private static String getRoomInviteAccount(Intent intent) {
return EntityIntentBuilder.getAccount(intent);
}
}
private static String getRoomInviteUser(Intent intent) {
return EntityIntentBuilder.getUser(intent);
@Override
public void onAccountSelected(String account) {
drawerLayout.closeDrawers();
startActivity(AccountEditor.createIntent(this, account));
}
}
package com.xabber.android.ui;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import com.xabber.android.data.Application;
import com.xabber.android.data.account.OnAccountChangedListener;
import com.xabber.android.ui.adapter.NavigationDrawerAccountAdapter;
import com.xabber.android.ui.helper.AccountPainter;
import com.xabber.androiddev.R;
import java.util.Collection;
public class ContactListDrawerFragment extends Fragment implements View.OnClickListener, OnAccountChangedListener, AdapterView.OnItemClickListener {
ContactListDrawerListener listener;
private NavigationDrawerAccountAdapter adapter;
private ListView listView;
private View divider;
private View headerTitle;
private View drawerHeader;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
listener = (ContactListDrawerListener) activity;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.contact_list_drawer, container, false);
drawerHeader = view.findViewById(R.id.drawer_header);
listView = (ListView) view.findViewById(R.id.drawer_account_list);
View footerView = ((LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE))
.inflate(R.layout.contact_list_drawer_footer, listView, false);
listView.addFooterView(footerView);
View headerView = ((LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE))
.inflate(R.layout.contact_list_drawer_header, listView, false);
headerTitle = headerView.findViewById(R.id.drawer_header_title);
listView.addHeaderView(headerView);
adapter = new NavigationDrawerAccountAdapter(getActivity());
listView.setAdapter(adapter);
listView.setOnItemClickListener(this);
footerView.findViewById(R.id.drawer_action_settings).setOnClickListener(this);
footerView.findViewById(R.id.drawer_action_about).setOnClickListener(this);
footerView.findViewById(R.id.drawer_action_exit).setOnClickListener(this);
divider = footerView.findViewById(R.id.drawer_divider);
return view;
}
@Override
public void onResume() {
super.onResume();
Application.getInstance().addUIListener(OnAccountChangedListener.class, this);
update();
}
@Override
public void onPause() {
super.onPause();
Application.getInstance().removeUIListener(OnAccountChangedListener.class, this);
}
@Override
public void onDetach() {
super.onDetach();
listener = null;
}
@Override
public void onClick(View v) {
listener.onContactListDrawerListener(v.getId());
}
@Override
public void onAccountsChanged(Collection<String> accounts) {
update();
}
private void update() {
adapter.onChange();
drawerHeader.getBackground().setLevel(AccountPainter.getDefaultAccountColorLevel());
if (adapter.getCount() == 0) {
headerTitle.setVisibility(View.GONE);
divider.setVisibility(View.GONE);
} else {
headerTitle.setVisibility(View.VISIBLE);
divider.setVisibility(View.VISIBLE);
}
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
listener.onAccountSelected((String) listView.getItemAtPosition(position));
}
interface ContactListDrawerListener {
void onContactListDrawerListener(int viewId);
void onAccountSelected(String account);
}
}
......@@ -21,6 +21,7 @@ import android.widget.ListView;
import android.widget.PopupMenu;
import android.widget.TextView;
import com.melnykov.fab.FloatingActionButton;
import com.xabber.android.data.Application;
import com.xabber.android.data.SettingsManager;
import com.xabber.android.data.account.AccountManager;
......@@ -40,6 +41,7 @@ import com.xabber.android.ui.adapter.ContactListState;
import com.xabber.android.ui.adapter.GroupConfiguration;
import com.xabber.android.ui.adapter.GroupedContactAdapter;
import com.xabber.android.ui.adapter.UpdatableAdapter;
import com.xabber.android.ui.helper.AccountPainter;
import com.xabber.android.ui.helper.ContextMenuHelper;
import com.xabber.android.ui.preferences.AccountList;
import com.xabber.androiddev.R;
......@@ -86,6 +88,8 @@ public class ContactListFragment extends Fragment implements OnAccountChangedLis
private AccountActionButtonsAdapter accountActionButtonsAdapter;
private View scrollToChatsActionButtonContainer;
private View actionButtonsContainer;
private FloatingActionButton scrollToChatsActionButton;
private AccountPainter accountPainter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
......@@ -113,6 +117,12 @@ public class ContactListFragment extends Fragment implements OnAccountChangedLis
scrollToChatsActionButtonContainer.setOnClickListener(this);
scrollToChatsActionButtonContainer.setVisibility(View.GONE);
scrollToChatsActionButton = (FloatingActionButton) view.findViewById(R.id.fab_up);
accountPainter = new AccountPainter(getActivity());
scrollToChatsActionButton.setColorNormal(accountPainter.getDefaultMainColor());
scrollToChatsActionButton.setColorPressed(accountPainter.getDefaultDarkColor());
return view;
}
......@@ -123,6 +133,8 @@ public class ContactListFragment extends Fragment implements OnAccountChangedLis
Application.getInstance().addUIListener(OnContactChangedListener.class, this);
Application.getInstance().addUIListener(OnChatChangedListener.class, this);
adapter.onChange();
scrollToChatsActionButton.setColorNormal(accountPainter.getDefaultMainColor());
scrollToChatsActionButton.setColorPressed(accountPainter.getDefaultDarkColor());
if (SettingsManager.contactsShowPanel()) {
actionButtonsContainer.setVisibility(View.VISIBLE);
......@@ -177,6 +189,8 @@ public class ContactListFragment extends Fragment implements OnAccountChangedLis
@Override
public void onAccountsChanged(Collection<String> accounts) {
adapter.refreshRequest();
scrollToChatsActionButton.setColorNormal(accountPainter.getDefaultMainColor());
scrollToChatsActionButton.setColorPressed(accountPainter.getDefaultDarkColor());
}
@Override
......
......@@ -30,18 +30,31 @@ import com.xabber.android.data.roster.AbstractContact;
import com.xabber.android.data.roster.PresenceManager;
import com.xabber.android.data.roster.RosterManager;
import com.xabber.android.data.roster.SubscriptionRequest;
import com.xabber.android.ui.helper.ActionBarPainter;
import com.xabber.android.ui.helper.AccountPainter;
import com.xabber.android.ui.helper.BarPainter;
import com.xabber.android.ui.helper.SingleActivity;
import com.xabber.androiddev.R;
import org.w3c.dom.Text;
public class ContactSubscription extends SingleActivity implements View.OnClickListener {
private String account;
private String user;
private SubscriptionRequest subscriptionRequest;
public static Intent createIntent(Context context, String account,
String user) {
return new EntityIntentBuilder(context, ContactSubscription.class)
.setAccount(account).setUser(user).build();
}
private static String getAccount(Intent intent) {
return EntityIntentBuilder.getAccount(intent);
}
private static String getUser(Intent intent) {
return EntityIntentBuilder.getUser(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
......@@ -61,14 +74,15 @@ public class ContactSubscription extends SingleActivity implements View.OnClickL
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setTitle(getString(R.string.subscription_request_message));
toolbar.setTitle(getString(R.string.subscription_request_message));
ActionBarPainter actionBarPainter = new ActionBarPainter(this);
actionBarPainter.updateWithAccountName(account);
BarPainter barPainter = new BarPainter(this, toolbar);
barPainter.updateWithAccountName(account);
AccountPainter accountPainter = new AccountPainter(this);
View fakeToolbar = findViewById(R.id.fake_toolbar);
fakeToolbar.setBackgroundColor(actionBarPainter.getAccountColor(account));
fakeToolbar.setBackgroundColor(accountPainter.getAccountMainColor(account));
toolbar.setBackgroundResource(android.R.color.transparent);
AbstractContact abstractContact = RosterManager.getInstance().getBestContact(account, user);
......@@ -78,7 +92,7 @@ public class ContactSubscription extends SingleActivity implements View.OnClickL
((TextView)fakeToolbar.findViewById(R.id.dialog_message)).setText(subscriptionRequest.getConfirmation());
Button acceptButton = (Button) findViewById(R.id.accept_button);
acceptButton.setTextColor(actionBarPainter.getAccountColor(account));
acceptButton.setTextColor(accountPainter.getAccountMainColor(account));
acceptButton.setOnClickListener(this);
findViewById(R.id.decline_button).setOnClickListener(this);
......@@ -128,18 +142,4 @@ public class ContactSubscription extends SingleActivity implements View.OnClickL
finish();
}
public static Intent createIntent(Context context, String account,
String user) {
return new EntityIntentBuilder(context, ContactSubscription.class)
.setAccount(account).setUser(user).build();
}
private static String getAccount(Intent intent) {
return EntityIntentBuilder.getAccount(intent);
}
private static String getUser(Intent intent) {
return EntityIntentBuilder.getUser(intent);
}
}
......@@ -62,28 +62,36 @@ public class FingerprintViewer extends ManagedActivity implements
private static final String SAVED_REMOTE_FINGERPRINT = "com.xabber.android.ui.FingerprintViewer.SAVED_REMOTE_FINGERPRINT";
private static final String SAVED_LOCAL_FINGERPRINT = "com.xabber.android.ui.FingerprintViewer.SAVED_LOCAL_FINGERPRINT";
ContactTitleActionBarInflater contactTitleActionBarInflater;
private String account;
private String user;
private String remoteFingerprint;
private String localFingerprint;
/**
* UI update is in progress.
*/
private boolean isUpdating;
private CheckBox verifiedView;
private View scanView;
private View showView;
private View copyView;
/**
* QR code scanner and generator.
*/
private IntentIntegrator integrator;
ContactTitleActionBarInflater contactTitleActionBarInflater;
public static Intent createIntent(Context context, String account, String user) {
return new EntityIntentBuilder(context, FingerprintViewer.class)
.setAccount(account).setUser(user).build();
}
private static String getAccount(Intent intent) {
return AccountIntentBuilder.getAccount(intent);
}
private static String getUser(Intent intent) {
return EntityIntentBuilder.getUser(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
......@@ -93,7 +101,6 @@ public class FingerprintViewer extends ManagedActivity implements
}
setContentView(R.layout.fingerprint_viewer);
setSupportActionBar((Toolbar) findViewById(R.id.toolbar_default));
integrator = new IntentIntegrator(this);
Intent intent = getIntent();
......@@ -121,7 +128,7 @@ public class FingerprintViewer extends ManagedActivity implements
copyView.setOnClickListener(this);
isUpdating = false;
contactTitleActionBarInflater = new ContactTitleActionBarInflater(this);
contactTitleActionBarInflater = new ContactTitleActionBarInflater(this, (Toolbar) findViewById(R.id.toolbar_default));
contactTitleActionBarInflater.setUpActionBarView();
}
......@@ -298,17 +305,4 @@ public class FingerprintViewer extends ManagedActivity implements
isUpdating = false;
}
public static Intent createIntent(Context context, String account, String user) {
return new EntityIntentBuilder(context, FingerprintViewer.class)
.setAccount(account).setUser(user).build();
}
private static String getAccount(Intent intent) {
return AccountIntentBuilder.getAccount(intent);
}
private static String getUser(Intent intent) {
return EntityIntentBuilder.getUser(intent);
}
}
......@@ -37,18 +37,31 @@ import java.util.Collection;
public class GroupEditor extends ManagedActivity implements OnContactChangedListener,
OnAccountChangedListener {
ContactTitleActionBarInflater contactTitleActionBarInflater;
private String account;
private String user;
ContactTitleActionBarInflater contactTitleActionBarInflater;
public static Intent createIntent(Context context, String account, String user) {
Intent intent = new EntityIntentBuilder(context, GroupEditor.class)
.setAccount(account).setUser(user).build();
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
return intent;
}
private static String getAccount(Intent intent) {
return EntityIntentBuilder.getAccount(intent);
}
private static String getUser(Intent intent) {
return EntityIntentBuilder.getUser(intent);
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.group_editor);
setSupportActionBar((Toolbar) findViewById(R.id.toolbar_default));
contactTitleActionBarInflater = new ContactTitleActionBarInflater(this);
contactTitleActionBarInflater = new ContactTitleActionBarInflater(this, (Toolbar) findViewById(R.id.toolbar_default));
contactTitleActionBarInflater.setUpActionBarView();
Intent intent = getIntent();
......@@ -107,19 +120,4 @@ public class GroupEditor extends ManagedActivity implements OnContactChangedList
}
}
public static Intent createIntent(Context context, String account, String user) {
Intent intent = new EntityIntentBuilder(context, GroupEditor.class)
.setAccount(account).setUser(user).build();
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
return intent;
}
private static String getAccount(Intent intent) {
return EntityIntentBuilder.getAccount(intent);
}
private static String getUser(Intent intent) {
return EntityIntentBuilder.getUser(intent);
}
}
......@@ -37,7 +37,7 @@ import com.xabber.android.data.intent.EntityIntentBuilder;
import com.xabber.android.data.message.MessageManager;
import com.xabber.android.data.notification.NotificationManager;
import com.xabber.android.ui.adapter.AccountChooseAdapter;
import com.xabber.android.ui.helper.ActionBarPainter;
import com.xabber.android.ui.helper.BarPainter;
import com.xabber.android.ui.helper.ManagedActivity;
import com.xabber.androiddev.R;
......@@ -67,7 +67,24 @@ public class MUCEditor extends ManagedActivity implements OnItemSelectedListener
private EditText nickView;
private EditText passwordView;
private ActionBarPainter actionBarPainter;
private BarPainter barPainter;
public static Intent createIntent(Context context) {
return MUCEditor.createIntent(context, null, null);
}
public static Intent createIntent(Context context, String account,
String room) {
return new EntityIntentBuilder(context, MUCEditor.class).setAccount(account).setUser(room).build();
}
private static String getAccount(Intent intent) {
return AccountIntentBuilder.getAccount(intent);
}
private static String getUser(Intent intent) {
return EntityIntentBuilder.getUser(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
......@@ -77,11 +94,15 @@ public class MUCEditor extends ManagedActivity implements OnItemSelectedListener
}
setContentView(R.layout.muc_editor);
setSupportActionBar((Toolbar) findViewById(R.id.toolbar_default));
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_clear_white_24dp);
getSupportActionBar().setTitle(null);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_default);
toolbar.setNavigationIcon(R.drawable.ic_clear_white_24dp);
setTitle(null);
setSupportActionBar(toolbar);
barPainter = new BarPainter(this, toolbar);
barPainter.setDefaultColor();
accountView = (Spinner) findViewById(R.id.contact_account);
serverView = (EditText) findViewById(R.id.muc_server);
......@@ -126,10 +147,8 @@ public class MUCEditor extends ManagedActivity implements OnItemSelectedListener
}
}
actionBarPainter = new ActionBarPainter(this);
if (account != null) {
actionBarPainter.updateWithAccountName(account);
barPainter.updateWithAccountName(account);
for (int position = 0; position < accountView.getCount(); position++) {
if (account.equals(accountView.getItemAtPosition(position))) {
......@@ -244,28 +263,11 @@ public class MUCEditor extends ManagedActivity implements OnItemSelectedListener
}
selectedAccount = accountView.getSelectedItemPosition();
actionBarPainter.updateWithAccountName((String) accountView.getSelectedItem());
barPainter.updateWithAccountName((String) accountView.getSelectedItem());
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
selectedAccount = accountView.getSelectedItemPosition();
}
public static Intent createIntent(Context context) {
return MUCEditor.createIntent(context, null, null);
}
public static Intent createIntent(Context context, String account,
String room) {
return new EntityIntentBuilder(context, MUCEditor.class).setAccount(account).setUser(room).build();
}
private static String getAccount(Intent intent) {
return AccountIntentBuilder.getAccount(intent);
}
private static String getUser(Intent intent) {
return EntityIntentBuilder.getUser(intent);
}
}
......@@ -52,14 +52,53 @@ public class QuestionViewer extends ManagedActivity implements
private static final String EXTRA_FIELD_SHOW_QUESTION = "com.xabber.android.data.ui.QuestionViewer.SHOW_QUESTION";
private static final String EXTRA_FIELD_ANSWER_REQUEST = "com.xabber.android.data.ui.QuestionViewer.ANSWER_REQUEST";
private static final String EXTRA_FIELD_CANCEL = "com.xabber.android.data.ui.QuestionViewer.CANCEL";
ContactTitleActionBarInflater contactTitleActionBarInflater;
private String account;
private String user;
private boolean showQuestion;
private boolean answerRequest;
private EditText questionView;
ContactTitleActionBarInflater contactTitleActionBarInflater;
/**
* @param context
* @param account
* @param user
* @return Intent to cancel negotiation.
*/
public static Intent createCancelIntent(Context context, String account, String user) {
Intent intent = new EntityIntentBuilder(context, QuestionViewer.class)
.setAccount(account).setUser(user).build();
intent.putExtra(EXTRA_FIELD_CANCEL, true);
return intent;
}
/**
* @param context
* @param account
* @param user
* @param showQuestion <code>false</code> is used for shared secret.
* @param answerRequest <code>false</code> is used to ask a question.
* @param question must be not <code>null</code> if showQuestion and
* answerRequest are <code>true</code>.
* @return
*/
public static Intent createIntent(Context context, String account, String user,
boolean showQuestion, boolean answerRequest, String question) {
Intent intent = new EntityIntentBuilder(context, QuestionViewer.class)
.setAccount(account).setUser(user).build();
intent.putExtra(EXTRA_FIELD_SHOW_QUESTION, showQuestion);
intent.putExtra(EXTRA_FIELD_ANSWER_REQUEST, answerRequest);
intent.putExtra(Intent.EXTRA_TEXT, question);
return intent;
}
private static String getAccount(Intent intent) {
return AccountIntentBuilder.getAccount(intent);
}
private static String getUser(Intent intent) {
return EntityIntentBuilder.getUser(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
......@@ -89,7 +128,6 @@ public class QuestionViewer extends ManagedActivity implements
answerRequest = intent.getBooleanExtra(EXTRA_FIELD_ANSWER_REQUEST, false);
if (showQuestion) {
setContentView(R.layout.question_viewer);
setSupportActionBar((Toolbar) findViewById(R.id.toolbar_default));
questionView = (EditText) findViewById(R.id.question);
questionView.setEnabled(!answerRequest);
if (answerRequest) {
......@@ -99,12 +137,12 @@ public class QuestionViewer extends ManagedActivity implements
}
} else {
setContentView(R.layout.secret_viewer);
setSupportActionBar((Toolbar) findViewById(R.id.toolbar_default));
}
findViewById(R.id.cancel).setOnClickListener(this);
findViewById(R.id.send).setOnClickListener(this);
contactTitleActionBarInflater = new ContactTitleActionBarInflater(this);
contactTitleActionBarInflater = new ContactTitleActionBarInflater(this, (Toolbar) findViewById(R.id.toolbar_default));
contactTitleActionBarInflater.setUpActionBarView();
}
......@@ -175,45 +213,4 @@ public class QuestionViewer extends ManagedActivity implements
contactTitleActionBarInflater.update(abstractContact);
}
/**
* @param context
* @param account
* @param user
* @return Intent to cancel negotiation.
*/
public static Intent createCancelIntent(Context context, String account, String user) {
Intent intent = new EntityIntentBuilder(context, QuestionViewer.class)
.setAccount(account).setUser(user).build();
intent.putExtra(EXTRA_FIELD_CANCEL, true);
return intent;
}
/**
* @param context
* @param account
* @param user
* @param showQuestion <code>false</code> is used for shared secret.
* @param answerRequest <code>false</code> is used to ask a question.
* @param question must be not <code>null</code> if showQuestion and
* answerRequest are <code>true</code>.
* @return
*/
public static Intent createIntent(Context context, String account, String user,
boolean showQuestion, boolean answerRequest, String question) {
Intent intent = new EntityIntentBuilder(context, QuestionViewer.class)
.setAccount(account).setUser(user).build();
intent.putExtra(EXTRA_FIELD_SHOW_QUESTION, showQuestion);
intent.putExtra(EXTRA_FIELD_ANSWER_REQUEST, answerRequest);
intent.putExtra(Intent.EXTRA_TEXT, question);
return intent;
}
private static String getAccount(Intent intent) {
return AccountIntentBuilder.getAccount(intent);
}
private static String getUser(Intent intent) {
return EntityIntentBuilder.getUser(intent);
}
}
......@@ -3,7 +3,10 @@ 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.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
......@@ -11,18 +14,15 @@ import android.widget.Toast;
import com.xabber.android.data.message.AbstractChat;
import com.xabber.android.ui.adapter.ChatListAdapter;
import com.xabber.android.ui.helper.AccountPainter;
import com.xabber.androiddev.R;
import java.util.ArrayList;
import java.util.List;
public class RecentChatFragment extends ListFragment {
public class RecentChatFragment extends ListFragment implements Toolbar.OnMenuItemClickListener {
private RecentChatFragmentInteractionListener listener;
public static RecentChatFragment newInstance() {
return new RecentChatFragment();
}
/**
* Mandatory empty constructor for the fragment manager to instantiate the
* fragment (e.g. upon screen orientation changes).
......@@ -30,6 +30,10 @@ public class RecentChatFragment extends ListFragment {
public RecentChatFragment() {
}
public static RecentChatFragment newInstance() {
return new RecentChatFragment();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
......@@ -53,6 +57,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 +68,22 @@ 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.recent_chats);
toolbar.setNavigationIcon(R.drawable.ic_arrow_left_white_24dp);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
NavUtils.navigateUpFromSameTask(getActivity());
}
});
toolbar.inflateMenu(R.menu.recent_chats);
toolbar.setOnMenuItemClickListener(this);
AccountPainter accountPainter = new AccountPainter(getActivity());
toolbar.setBackgroundColor(accountPainter.getDefaultMainColor());
return rootView;
}
@Override
......@@ -96,11 +116,20 @@ public class RecentChatFragment extends ListFragment {
}
}
public interface RecentChatFragmentInteractionListener {
public void onChatSelected(AbstractChat chat);
@Override
public boolean onMenuItemClick(MenuItem item) {
if (item.getItemId() == R.id.action_under_construction) {
Toast.makeText(getActivity(), getActivity().getString(R.string.under_construction_message), Toast.LENGTH_SHORT).show();
}
return false;
}
public void updateChats(List<AbstractChat> chats) {
((ChatListAdapter) getListAdapter()).updateChats(chats);
}
public interface RecentChatFragmentInteractionListener {
void onChatSelected(AbstractChat chat);
}
}
......@@ -41,7 +41,7 @@ import com.xabber.android.data.account.StatusMode;
import com.xabber.android.data.intent.AccountIntentBuilder;
import com.xabber.android.ui.adapter.StatusEditorAdapter;
import com.xabber.android.ui.adapter.StatusModeAdapter;
import com.xabber.android.ui.helper.ActionBarPainter;
import com.xabber.android.ui.helper.BarPainter;
import com.xabber.android.ui.helper.ManagedListActivity;
import com.xabber.androiddev.R;
......@@ -58,6 +58,18 @@ public class StatusEditor extends ManagedListActivity implements OnItemClickList
private StatusEditorAdapter adapter;
private View savedStatusesTextView;
public static Intent createIntent(Context context) {
return StatusEditor.createIntent(context, null);
}
public static Intent createIntent(Context context, String account) {
return new AccountIntentBuilder(context, StatusEditor.class).setAccount(account).build();
}
private static String getAccount(Intent intent) {
return AccountIntentBuilder.getAccount(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
......@@ -68,17 +80,21 @@ public class StatusEditor extends ManagedListActivity implements OnItemClickList
actionWithItem = null;
setContentView(R.layout.status_editor);
setSupportActionBar((Toolbar) findViewById(R.id.top_toolbar));
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_clear_white_24dp);
getSupportActionBar().setTitle(null);
Toolbar toolbar = (Toolbar) findViewById(R.id.top_toolbar);
toolbar.setNavigationIcon(R.drawable.ic_clear_white_24dp);
setTitle(null);
setSupportActionBar(toolbar);
Intent intent = getIntent();
account = StatusEditor.getAccount(intent);
BarPainter barPainter = new BarPainter(this, toolbar);
if (account != null) {
ActionBarPainter actionBarPainter = new ActionBarPainter(this);
actionBarPainter.updateWithAccountName(account);
barPainter.updateWithAccountName(account);
} else {
barPainter.setDefaultColor();
}
ListView listView = getListView();
......@@ -233,18 +249,6 @@ public class StatusEditor extends ManagedListActivity implements OnItemClickList
finish();
}
public static Intent createIntent(Context context) {
return StatusEditor.createIntent(context, null);
}
public static Intent createIntent(Context context, String account) {
return new AccountIntentBuilder(context, StatusEditor.class).setAccount(account).build();
}
private static String getAccount(Intent intent) {
return AccountIntentBuilder.getAccount(intent);
}
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
return onOptionsItemSelected(menuItem);
......
package com.xabber.android.ui.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.xabber.android.data.message.AbstractChat;
import com.xabber.android.data.message.MessageManager;
import com.xabber.android.data.notification.NotificationManager;
import com.xabber.android.data.roster.AbstractContact;
import com.xabber.android.data.roster.RosterManager;
import com.xabber.androiddev.R;
import java.util.ArrayList;
import java.util.List;
......@@ -22,12 +16,11 @@ public class ChatListAdapter extends BaseAdapter {
private List<AbstractChat> chats;
private final Context context;
private final ContactItemInflater contactItemInflater;
public ChatListAdapter(Context context) {
this.context = context;
chats = new ArrayList<>();
contactItemInflater = new ContactItemInflater(context);
}
public void updateChats(List<AbstractChat> chats) {
......@@ -53,33 +46,9 @@ public class ChatListAdapter extends BaseAdapter {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final View view;
if (convertView == null) {
view = LayoutInflater.from(context).inflate(R.layout.chat_list_item, parent, false);
} else {
view = convertView;
}
final AbstractChat abstractChat = (AbstractChat) getItem(position);
final AbstractContact abstractContact = RosterManager.getInstance()
.getBestContact(abstractChat.getAccount(), abstractChat.getUser());
((TextView) view.findViewById(R.id.name)).setText(abstractContact.getName());
((ImageView) view.findViewById(R.id.color)).setImageLevel(abstractContact.getColorLevel());
final ImageView avatarView = (ImageView) view.findViewById(R.id.avatar);
avatarView.setImageDrawable(abstractContact.getAvatar());
final TextView textView = (TextView) view.findViewById(R.id.text);
String statusText = MessageManager.getInstance().getLastText(
abstractContact.getAccount(), abstractContact.getUser());
textView.setText(statusText);
boolean newMessages = NotificationManager.getInstance()
.getNotificationMessageCount(abstractChat.getAccount(), abstractChat.getUser()) > 0;
textView.setTextAppearance(context, newMessages ? R.style.ChatList_Notification
: R.style.ChatList_Normal);
return view;
return contactItemInflater.setUpContactView(convertView, parent, abstractContact);
}
}
......@@ -7,16 +7,23 @@ import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.message.AbstractChat;
import com.xabber.android.ui.helper.AccountPainter;
import com.xabber.androiddev.R;
import java.util.ArrayList;
public class ChatScrollIndicatorAdapter {
private final Activity activity;
private final LinearLayout linearLayout;
private final AccountPainter accountPainter;
public ChatScrollIndicatorAdapter(Activity activity, LinearLayout linearLayout) {
this.activity = activity;
this.linearLayout = linearLayout;
accountPainter = new AccountPainter(activity);
}
public void select(int selectedPosition) {
......@@ -24,42 +31,52 @@ public class ChatScrollIndicatorAdapter {
final View view = linearLayout.getChildAt(index);
final AccountViewHolder accountViewHolder = (AccountViewHolder) view.getTag();
accountViewHolder.selection.setVisibility(index == selectedPosition ? View.VISIBLE : View.GONE);
accountViewHolder.body.setVisibility(index == selectedPosition ? View.GONE : View.VISIBLE);
accountViewHolder.selection.setVisibility(index == selectedPosition ? View.VISIBLE : View.INVISIBLE);
accountViewHolder.body.setVisibility(index == selectedPosition ? View.INVISIBLE : View.VISIBLE);
}
}
public void update(int size) {
public void update(ArrayList<AbstractChat> activeChats) {
final LayoutInflater inflater
= (LayoutInflater) activity.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
while (linearLayout.getChildCount() < size) {
final int size = activeChats.size() + 1;
linearLayout.removeAllViews();
for (int i = 0; i < size; i++) {
View view;
if (linearLayout.getChildCount() == 0) {
if (i == 0) {
view = inflater.inflate(R.layout.chat_scroll_indicator_item_square, linearLayout, false);
} else {
view = inflater.inflate(R.layout.chat_scroll_indicator_item_circle, linearLayout, false);
}
linearLayout.addView(view);
final AccountViewHolder accountViewHolder = new AccountViewHolder(view);
view.setTag(accountViewHolder);
}
if (i > 0) {
int colorLevel = AccountManager.getInstance().getColorLevel(activeChats.get(i - 1).getAccount());
accountViewHolder.body.setImageLevel(colorLevel);
accountViewHolder.selection.setImageLevel(colorLevel);
} else {
accountViewHolder.body.setImageDrawable(new ColorDrawable(accountPainter.getDefaultMainColor()));
accountViewHolder.selection.setImageDrawable(new ColorDrawable(accountPainter.getDefaultMainColor()));
}
while (linearLayout.getChildCount() > size) {
linearLayout.removeViewAt(size);
view.setTag(accountViewHolder);
}
}
private static class AccountViewHolder {
final View body;
final View selection;
final ImageView body;
final ImageView selection;
public AccountViewHolder(View view) {
body = view.findViewById(R.id.indicator_item_body);
selection = view.findViewById(R.id.indicator_item_selection);
body = (ImageView) view.findViewById(R.id.indicator_item_body);
selection = (ImageView) view.findViewById(R.id.indicator_item_selection);
}
}
}
......@@ -6,6 +6,7 @@ import android.app.FragmentManager;
import android.support.v13.app.FragmentStatePagerAdapter;
import android.view.ViewGroup;
import com.xabber.android.data.entity.BaseEntity;
import com.xabber.android.data.message.AbstractChat;
import com.xabber.android.data.message.MessageManager;
import com.xabber.android.ui.ChatViewerFragment;
......@@ -34,16 +35,13 @@ public class ChatViewerAdapter extends FragmentStatePagerAdapter {
private Fragment currentFragment;
public ChatViewerAdapter(FragmentManager fragmentManager, String account, String user, FinishUpdateListener finishUpdateListener) {
public ChatViewerAdapter(FragmentManager fragmentManager, BaseEntity chat, FinishUpdateListener finishUpdateListener) {
super(fragmentManager);
this.finishUpdateListener = finishUpdateListener;
activeChats = new ArrayList<>(MessageManager.getInstance().getActiveChats());
intent = MessageManager.getInstance().getOrCreateChat(account, Jid.getBareAddress(user));
intent = MessageManager.getInstance().getOrCreateChat(chat.getAccount(), Jid.getBareAddress(chat.getUser()));
if (!activeChats.contains(intent)) {
intent.updateCreationTime();
}
updateChats();
}
......@@ -121,11 +119,11 @@ public class ChatViewerAdapter extends FragmentStatePagerAdapter {
return true;
}
public int getPageNumber(String account, String user) {
public int getPageNumber(BaseEntity chat) {
int realPosition = 0;
for (int chatIndex = 0; chatIndex < activeChats.size(); chatIndex++) {
if (activeChats.get(chatIndex).equals(account, user)) {
if (activeChats.get(chatIndex).equals(chat)) {
realPosition = chatIndex + 1;
break;
}
......
package com.xabber.android.ui.adapter;
import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.os.Build;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.xabber.android.data.SettingsManager;
import com.xabber.android.data.extension.capability.ClientSoftware;
import com.xabber.android.data.extension.muc.MUCManager;
import com.xabber.android.data.message.AbstractChat;
import com.xabber.android.data.message.MessageManager;
import com.xabber.android.data.roster.AbstractContact;
import com.xabber.android.ui.ContactEditor;
import com.xabber.android.ui.ContactViewer;
import com.xabber.android.utils.StringUtils;
import com.xabber.androiddev.R;
public class ContactItemInflater {
final Context context;
private int[] accountMainColors;
private final int elevation;
public ContactItemInflater(Context context) {
this.context = context;
accountMainColors = context.getResources().getIntArray(R.array.account_action_bar);
elevation = context.getResources().getDimensionPixelSize(R.dimen.contact_elevation);
}
public View setUpContactView(View convertView, ViewGroup parent, final AbstractContact contact) {
final View view;
final ContactListItemViewHolder viewHolder;
if (convertView == null) {
view = LayoutInflater.from(context).inflate(R.layout.contact_list_item, parent, false);
viewHolder = new ContactListItemViewHolder(view);
viewHolder.statusIconSeparator.setVisibility(View.INVISIBLE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
view.setElevation(elevation);
}
view.setTag(viewHolder);
} else {
view = convertView;
viewHolder = (ContactListItemViewHolder) view.getTag();
}
if (contact.isConnected()) {
viewHolder.offlineShadow.setVisibility(View.GONE);
} else {
viewHolder.offlineShadow.setVisibility(View.VISIBLE);
}
int colorLevel = contact.getColorLevel();
viewHolder.color.setImageDrawable(new ColorDrawable(accountMainColors[colorLevel]));
viewHolder.color.setVisibility(View.VISIBLE);
if (SettingsManager.contactsShowAvatars()) {
viewHolder.avatar.setVisibility(View.VISIBLE);
viewHolder.avatar.setImageDrawable(contact.getAvatarForContactList());
} else {
viewHolder.avatar.setVisibility(View.GONE);
}
viewHolder.avatar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onAvatarClick(contact);
}
});
viewHolder.name.setText(contact.getName());
String statusText;
viewHolder.outgoingMessageIndicator.setVisibility(View.GONE);
ClientSoftware clientSoftware = contact.getClientSoftware();
MessageManager messageManager = MessageManager.getInstance();
if (messageManager.hasActiveChat(contact.getAccount(), contact.getUser())) {
AbstractChat chat = messageManager.getChat(contact.getAccount(), contact.getUser());
statusText = chat.getLastText().trim();
viewHolder.smallRightText.setText(StringUtils.getSmartTimeText(context, chat.getLastTime()));
viewHolder.smallRightText.setVisibility(View.VISIBLE);
if (!chat.isLastMessageIncoming()) {
viewHolder.outgoingMessageIndicator.setText(context.getString(R.string.sender_is_you) + ": ");
viewHolder.outgoingMessageIndicator.setVisibility(View.VISIBLE);
viewHolder.outgoingMessageIndicator.setTextColor(accountMainColors[colorLevel]);
}
view.setBackgroundColor(context.getResources().getColor(R.color.grey_50));
viewHolder.smallRightIcon.setImageResource(R.drawable.ic_client_small);
viewHolder.smallRightIcon.setVisibility(View.VISIBLE);
viewHolder.smallRightIcon.setImageLevel(clientSoftware.ordinal());
viewHolder.largeClientIcon.setVisibility(View.GONE);
} else {
statusText = contact.getStatusText().trim();
viewHolder.smallRightText.setVisibility(View.GONE);
view.setBackgroundColor(context.getResources().getColor(R.color.grey_300));
viewHolder.smallRightIcon.setVisibility(View.GONE);
viewHolder.largeClientIcon.setVisibility(View.VISIBLE);
viewHolder.largeClientIcon.setImageLevel(clientSoftware.ordinal());
}
if (statusText.isEmpty()) {
viewHolder.secondLineMessage.setVisibility(View.GONE);
} else {
viewHolder.secondLineMessage.setVisibility(View.VISIBLE);
viewHolder.secondLineMessage.setText(statusText.trim());
}
viewHolder.statusIcon.setImageLevel(contact.getStatusMode().getStatusLevel());
return view;
}
private void onAvatarClick(AbstractContact contact) {
if (MUCManager.getInstance().hasRoom(contact.getAccount(), contact.getUser())) {
context.startActivity(ContactViewer.createIntent(context,
contact.getAccount(), contact.getUser()));
} else {
context.startActivity(ContactEditor.createIntent(context,
contact.getAccount(), contact.getUser()));
}
}
}
package com.xabber.android.ui.adapter;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.xabber.androiddev.R;
class ContactListItemViewHolder {
final ImageView color;
final ImageView avatar;
final TextView name;
final TextView outgoingMessageIndicator;
final TextView secondLineMessage;
final TextView smallRightText;
final ImageView smallRightIcon;
final ImageView largeClientIcon;
final View statusIconSeparator;
final ImageView statusIcon;
final ImageView offlineShadow;
public ContactListItemViewHolder(View view) {
color = (ImageView) view.findViewById(R.id.account_color_indicator);
avatar = (ImageView) view.findViewById(R.id.avatar);
name = (TextView) view.findViewById(R.id.contact_list_item_name);
outgoingMessageIndicator = (TextView) view.findViewById(R.id.outgoing_message_indicator);
secondLineMessage = (TextView) view.findViewById(R.id.second_line_message);
smallRightIcon = (ImageView) view.findViewById(R.id.small_right_icon);
smallRightText = (TextView) view.findViewById(R.id.small_right_text);
largeClientIcon = (ImageView) view.findViewById(R.id.client_icon_large);
statusIconSeparator = view.findViewById(R.id.status_icon_separator);
statusIcon = (ImageView) view.findViewById(R.id.contact_list_item_status_icon);
offlineShadow = (ImageView) view.findViewById(R.id.offline_shadow);
}
}
package com.xabber.android.ui.adapter;
import android.app.Activity;
import android.graphics.drawable.ColorDrawable;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.xabber.android.data.account.AccountItem;
import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.connection.ConnectionState;
import com.xabber.android.data.extension.avatar.AvatarManager;
import com.xabber.androiddev.R;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public class NavigationDrawerAccountAdapter extends BaseListEditorAdapter<String> {
private final int[] accountColors;
public NavigationDrawerAccountAdapter(Activity activity) {
super(activity);
accountColors = activity.getResources().getIntArray(R.array.account_action_bar);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
AccountManager accountManager = AccountManager.getInstance();
if (convertView == null) {
view = getActivity().getLayoutInflater().inflate(R.layout.contact_list_drawer_account_item, parent, false);
} else {
view = convertView;
}
String account = getItem(position);
int accountColor = accountColors[accountManager.getColorLevel(account)];
((ImageView) view.findViewById(R.id.color)).setImageDrawable(new ColorDrawable(accountColor));
((ImageView) view.findViewById(R.id.avatar))
.setImageDrawable(AvatarManager.getInstance().getAccountAvatar(account));
((TextView) view.findViewById(R.id.name)).setText(accountManager.getVerboseName(account));
AccountItem accountItem = accountManager.getAccount(account);
ConnectionState state;
if (accountItem == null) {
state = ConnectionState.offline;
} else {
state = accountItem.getState();
}
((TextView) view.findViewById(R.id.status)).setText(getActivity().getString(state.getStringId()));
return view;
}
@Override
protected Collection<String> getTags() {
List<String> list = new ArrayList<>();
list.addAll(AccountManager.getInstance().getAccounts());
Collections.sort(list);
return list;
}
}
\ No newline at end of file
package com.xabber.android.ui.helper;
import android.content.Context;
import android.content.res.TypedArray;
import com.xabber.android.data.account.AccountManager;
import com.xabber.androiddev.R;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class AccountPainter {
private final int themeMainColor;
private final int themeDarkColor;
private final String[] accountColorNames;
private int[] accountMainColors;
private int[] accountDarkColors;
public AccountPainter(Context context) {
accountMainColors = context.getResources().getIntArray(R.array.account_action_bar);
accountDarkColors = context.getResources().getIntArray(R.array.account_status_bar);
accountColorNames = context.getResources().getStringArray(R.array.account_color_names);
themeMainColor = getThemeMainColor(context);
themeDarkColor = getThemeDarkColor(context);
}
private static String getFirstAccount() {
List<String> list = new ArrayList<>();
list.addAll(AccountManager.getInstance().getAccounts());
Collections.sort(list);
if (list.isEmpty()) {
return null;
} else {
return list.get(0);
}
}
private static int getAccountColorLevel(String account) {
return AccountManager.getInstance().getColorLevel(account);
}
public static int getDefaultAccountColorLevel() {
String firstAccount = getFirstAccount();
if (firstAccount == null) {
return 5;
} else {
return getAccountColorLevel(firstAccount);
}
}
private int getThemeMainColor(Context context) {
TypedArray a = context.getTheme().obtainStyledAttributes(R.style.Theme, new int[]{R.attr.colorPrimary});
int attributeResourceId = a.getResourceId(0, 0);
a.recycle();
return context.getResources().getColor(attributeResourceId);
}
private int getThemeDarkColor(Context context) {
TypedArray a = context.getTheme().obtainStyledAttributes(R.style.Theme, new int[]{R.attr.colorPrimaryDark});
int attributeResourceId = a.getResourceId(0, 0);
a.recycle();
return context.getResources().getColor(attributeResourceId);
}
public int getAccountMainColor(String account) {
return accountMainColors[getAccountColorLevel(account)];
}
public int getDefaultMainColor() {
String firstAccount = getFirstAccount();
if (firstAccount == null) {
return themeMainColor;
} else {
return getAccountMainColor(firstAccount);
}
}
public int getAccountDarkColor(String account) {
return accountDarkColors[getAccountColorLevel(account)];
}
public int getDefaultDarkColor() {
String firstAccount = getFirstAccount();
if (firstAccount == null) {
return themeDarkColor;
} else {
return getAccountDarkColor(firstAccount);
}
}
public int getAccountMainColorByColorName(String targetColorName) {
return accountMainColors[getColorIndexByName(targetColorName)];
}
public int getAccountDarkColorByColorName(String targetColorName) {
return accountDarkColors[getColorIndexByName(targetColorName)];
}
private Integer getColorIndexByName(String targetColorName) {
for (int i = 0; i < accountColorNames.length; i++) {
String accountColorName = accountColorNames[i];
if (accountColorName.equals(targetColorName)) {
return i;
}
}
return null;
}
}
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;
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;
public ActionBarPainter(ActionBarActivity activity) {
this.activity = 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);
defaultActionBarBackground = new ColorDrawable(activity.getResources().getColor(attributeResourceId));
}
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]);
}
activity.getSupportActionBar().setBackgroundDrawable(new ColorDrawable(accountActionBarColors[colorLevel]));
}
public void restore() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
window.setStatusBarColor(defaultStatusBarColor);
}
activity.getSupportActionBar().setBackgroundDrawable(defaultActionBarBackground);
}
public void updateWithColorName(String targetColorName) {
for (int i = 0; i < accountColorNames.length; i++) {
String accountColorName = accountColorNames[i];
if (accountColorName.equals(targetColorName)) {
updateWithColorLevel(i);
}
}
}
public int getAccountColor(String account) {
return accountActionBarColors[AccountManager.getInstance().getColorLevel(account)];
}
}
package com.xabber.android.ui.helper;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
public class BarPainter {
private final Toolbar toolbar;
private StatusBarPainter statusBarPainter;
private AccountPainter accountPainter;
public BarPainter(AppCompatActivity activity, Toolbar toolbar) {
this.toolbar = toolbar;
statusBarPainter = new StatusBarPainter(activity);
accountPainter = new AccountPainter(activity);
}
public void updateWithAccountName(String account) {
toolbar.setBackgroundColor(accountPainter.getAccountMainColor(account));
statusBarPainter.updateWithAccountName(account);
}
public void setDefaultColor() {
toolbar.setBackgroundColor(accountPainter.getDefaultMainColor());
statusBarPainter.updateWithDefaultColor();
}
public void updateWithColorName(String targetColorName) {
toolbar.setBackgroundColor(accountPainter.getAccountMainColorByColorName(targetColorName));
statusBarPainter.updateWithColor(accountPainter.getAccountDarkColorByColorName(targetColorName));
}
}
package com.xabber.android.ui.helper;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.TextView;
import com.xabber.android.data.roster.AbstractContact;
......@@ -13,21 +12,23 @@ import com.xabber.androiddev.R;
public class ContactTitleActionBarInflater {
private final ActionBarActivity activity;
private final AppCompatActivity activity;
private final Toolbar toolbar;
private View actionBarView;
private Animation shakeAnimation = null;
private ActionBarPainter actionBarPainter;
private BarPainter barPainter;
public ContactTitleActionBarInflater(ActionBarActivity activity) {
public ContactTitleActionBarInflater(AppCompatActivity activity, Toolbar toolbar) {
this.activity = activity;
this.toolbar = toolbar;
}
public void setUpActionBarView() {
actionBarPainter = new ActionBarPainter(activity);
barPainter = new BarPainter(activity, toolbar);
activity.setSupportActionBar(toolbar);
ActionBar actionBar = activity.getSupportActionBar();
actionBar.setDisplayShowHomeEnabled(false);
actionBar.setDisplayHomeAsUpEnabled(true);
......@@ -39,7 +40,7 @@ public class ContactTitleActionBarInflater {
}
public void update(AbstractContact abstractContact) {
actionBarPainter.updateWithAccountName(abstractContact.getAccount());
barPainter.updateWithAccountName(abstractContact.getAccount());
activity.getSupportActionBar().setDisplayShowCustomEnabled(true);
activity.getSupportActionBar().setDisplayShowTitleEnabled(false);
......@@ -48,34 +49,6 @@ public class ContactTitleActionBarInflater {
ContactTitleInflater.updateTitle(actionBarView, activity, abstractContact);
}
public void restoreDefaultTitleView(String title) {
actionBarPainter.restore();
activity.getSupportActionBar().setDisplayShowCustomEnabled(false);
activity.getSupportActionBar().setDisplayShowTitleEnabled(true);
actionBarView.setVisibility(View.GONE);
activity.setTitle(title);
}
public void playIncomingAnimation() {
if (shakeAnimation == null) {
shakeAnimation = AnimationUtils.loadAnimation(activity, R.anim.shake);
}
actionBarView.findViewById(R.id.name_holder).startAnimation(shakeAnimation);
}
public void setOnClickListener(View.OnClickListener onClickListener) {
actionBarView.setOnClickListener(onClickListener);
}
public void setOnAvatarClickListener(View.OnClickListener onClickListener) {
actionBarView.findViewById(R.id.avatar).setOnClickListener(onClickListener);
}
public void setName(String name) {
((TextView) actionBarView.findViewById(R.id.name)).setText(name);
}
public void setStatusText(String user) {
((TextView) actionBarView.findViewById(R.id.status_text)).setText(user);
}
......
......@@ -3,8 +3,9 @@ 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.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.TypedValue;
import android.view.View;
......@@ -12,7 +13,6 @@ import android.view.Window;
import android.view.WindowManager;
import android.widget.RelativeLayout;
import com.github.ksoichiro.android.observablescrollview.ObservableListView;
import com.github.ksoichiro.android.observablescrollview.ObservableScrollView;
import com.github.ksoichiro.android.observablescrollview.ObservableScrollViewCallbacks;
import com.github.ksoichiro.android.observablescrollview.ScrollState;
......@@ -27,7 +27,7 @@ import static java.lang.Math.sqrt;
public class ContactTitleExpandableToolbarInflater implements ObservableScrollViewCallbacks {
private final ActionBarActivity activity;
private final AppCompatActivity activity;
private View avatarView;
private View titleView;
......@@ -35,7 +35,6 @@ public class ContactTitleExpandableToolbarInflater implements ObservableScrollVi
private int toolbarHeight;
private int paddingLeftMin;
private int paddingRight;
private int actionBarSize;
private int toolbarHeightDelta;
private int avatarLargeSize;
......@@ -44,7 +43,7 @@ public class ContactTitleExpandableToolbarInflater implements ObservableScrollVi
private int contactTitlePaddingBottomBig;
private int contactTitlePaddingBottomSmall;
public ContactTitleExpandableToolbarInflater(ActionBarActivity activity) {
public ContactTitleExpandableToolbarInflater(AppCompatActivity activity) {
this.activity = activity;
}
......@@ -58,6 +57,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 +78,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);
......
......@@ -72,7 +72,7 @@ public class ContextMenuHelper {
@Override
public boolean onMenuItemClick(MenuItem item) {
MessageManager.getInstance().openChat(account, user);
activity.startActivity(ChatViewer.createIntent(
activity.startActivity(ChatViewer.createSpecificChatIntent(
activity, account, user));
return true;
}
......
......@@ -16,7 +16,7 @@ package com.xabber.android.ui.helper;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.AppCompatActivity;
import com.xabber.android.data.ActivityManager;
......@@ -27,7 +27,7 @@ import com.xabber.android.data.ActivityManager;
*
* @author alexander.ivanov
*/
public abstract class ManagedActivity extends ActionBarActivity {
public abstract class ManagedActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
......
......@@ -16,7 +16,7 @@ package com.xabber.android.ui.helper;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.AppCompatActivity;
import android.widget.ListAdapter;
import android.widget.ListView;
......@@ -29,7 +29,7 @@ import com.xabber.android.data.ActivityManager;
*
* @author alexander.ivanov
*/
public abstract class ManagedListActivity extends ActionBarActivity {
public abstract class ManagedListActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
......
package com.xabber.android.ui.helper;
import android.os.Build;
import android.support.v4.app.FragmentActivity;
import android.view.Window;
import android.view.WindowManager;
public class StatusBarPainter {
private final AccountPainter accountPainter;
private Window window;
public StatusBarPainter(FragmentActivity activity) {
accountPainter = new AccountPainter(activity);
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);
}
}
public void updateWithAccountName(String account) {
updateWithColor(accountPainter.getAccountDarkColor(account));
}
public void updateWithColor(int color) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
window.setStatusBarColor(color);
}
}
public void updateWithDefaultColor() {
updateWithColor(accountPainter.getDefaultDarkColor());
}
}
......@@ -25,16 +25,25 @@ import android.text.method.LinkMovementMethod;
import android.view.MenuItem;
import android.widget.TextView;
import com.xabber.android.ui.helper.BarPainter;
import com.xabber.android.ui.helper.ManagedActivity;
import com.xabber.androiddev.R;
public class AboutViewer extends ManagedActivity {
public static Intent createIntent(Context context) {
return new Intent(context, AboutViewer.class);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.about_viewer);
setSupportActionBar((Toolbar) findViewById(R.id.toolbar_default));
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_default);
setSupportActionBar(toolbar);
BarPainter barPainter = new BarPainter(this, toolbar);
barPainter.setDefaultColor();
((TextView) findViewById(R.id.about_version))
.setText(getString(R.string.about_version, getVersionName()));
......@@ -54,10 +63,6 @@ public class AboutViewer extends ManagedActivity {
return "";
}
public static Intent createIntent(Context context) {
return new Intent(context, AboutViewer.class);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
......
......@@ -5,6 +5,7 @@ import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import com.xabber.android.data.message.phrase.Phrase;
import com.xabber.android.ui.helper.BarPainter;
import com.xabber.android.ui.helper.ManagedActivity;
import com.xabber.androiddev.R;
......@@ -18,9 +19,15 @@ public abstract class BasePhrasePreferences extends ManagedActivity
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_preferences);
setSupportActionBar((Toolbar) findViewById(R.id.toolbar_default));
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_default);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
BarPainter barPainter = new BarPainter(this, toolbar);
barPainter.setDefaultColor();
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.preferences_activity_container, new PhraseEditorFragment()).commit();
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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