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 { ...@@ -8,8 +8,8 @@ android {
applicationId "com.xabber.androiddev" applicationId "com.xabber.androiddev"
minSdkVersion 14 minSdkVersion 14
targetSdkVersion 22 targetSdkVersion 22
versionCode 162 versionCode 171
versionName '0.10.62' versionName '0.10.71'
} }
compileOptions { compileOptions {
...@@ -23,7 +23,7 @@ repositories { ...@@ -23,7 +23,7 @@ repositories {
} }
dependencies { 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.android.support:support-v13:22.0.0'
compile 'com.github.ksoichiro:android-observablescrollview:1.5.0' compile 'com.github.ksoichiro:android-observablescrollview:1.5.0'
compile 'de.hdodenhof:circleimageview:1.2.2' compile 'de.hdodenhof:circleimageview:1.2.2'
......
...@@ -681,8 +681,7 @@ public class MessageArchiveManager implements OnPacketListener, ...@@ -681,8 +681,7 @@ public class MessageArchiveManager implements OnPacketListener,
* @param newCount * @param newCount
* @param incomingCount * @param incomingCount
*/ */
public void requestHistory(String account, String bareAddress, public void requestHistory(String account, String bareAddress, int newCount, int incomingCount) {
int newCount, int incomingCount) {
if (AccountManager.getInstance().getArchiveMode(account) != ArchiveMode.server if (AccountManager.getInstance().getArchiveMode(account) != ArchiveMode.server
|| (newCount <= 0 && incomingCount <= 0)) || (newCount <= 0 && incomingCount <= 0))
return; return;
......
...@@ -27,6 +27,7 @@ import com.xabber.android.data.connection.ConnectionItem; ...@@ -27,6 +27,7 @@ import com.xabber.android.data.connection.ConnectionItem;
import com.xabber.android.data.connection.ConnectionManager; import com.xabber.android.data.connection.ConnectionManager;
import com.xabber.android.data.connection.ConnectionThread; import com.xabber.android.data.connection.ConnectionThread;
import com.xabber.android.data.connection.OnPacketListener; 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.CapabilitiesManager;
import com.xabber.android.data.extension.capability.ClientInfo; import com.xabber.android.data.extension.capability.ClientInfo;
import com.xabber.android.data.message.AbstractChat; import com.xabber.android.data.message.AbstractChat;
...@@ -201,8 +202,8 @@ public class AttentionManager implements OnPacketListener, OnLoadListener { ...@@ -201,8 +202,8 @@ public class AttentionManager implements OnPacketListener, OnLoadListener {
chat.newAction(null, null, ChatAction.attention_called); chat.newAction(null, null, ChatAction.attention_called);
} }
public void removeAccountNotifications(String account, String user) { public void removeAccountNotifications(BaseEntity chat) {
attentionRequestProvider.remove(account, user); attentionRequestProvider.remove(chat.getAccount(), chat.getUser());
} }
} }
...@@ -111,6 +111,8 @@ public abstract class AbstractChat extends BaseEntity { ...@@ -111,6 +111,8 @@ public abstract class AbstractChat extends BaseEntity {
protected Date creationTime = new Date(); protected Date creationTime = new Date();
private boolean isLastMessageIncoming;
protected AbstractChat(final String account, final String user) { protected AbstractChat(final String account, final String user) {
super(account, user); super(account, user);
threadId = StringUtils.randomString(12); threadId = StringUtils.randomString(12);
...@@ -341,8 +343,7 @@ public abstract class AbstractChat extends BaseEntity { ...@@ -341,8 +343,7 @@ public abstract class AbstractChat extends BaseEntity {
* @param action * @param action
*/ */
public void newAction(String resource, String text, ChatAction action) { public void newAction(String resource, String text, ChatAction action) {
newMessage(resource, text, action, null, true, false, false, false, newMessage(resource, text, action, null, true, false, false, false, true);
true);
} }
/** /**
...@@ -451,9 +452,9 @@ public abstract class AbstractChat extends BaseEntity { ...@@ -451,9 +452,9 @@ public abstract class AbstractChat extends BaseEntity {
for (int index = messages.size() - 1; index >= 0; index--) { for (int index = messages.size() - 1; index >= 0; index--) {
MessageItem messageItem = messages.get(index); MessageItem messageItem = messages.get(index);
if (messageItem.getAction() == null) { if (messageItem.getAction() == null) {
lastText = messageItem.isIncoming() ? messageItem.getText() lastText = messageItem.getText();
: "";
lastTime = messageItem.getTimestamp(); lastTime = messageItem.getTimestamp();
isLastMessageIncoming = messageItem.isIncoming();
return; return;
} }
} }
...@@ -467,8 +468,7 @@ public abstract class AbstractChat extends BaseEntity { ...@@ -467,8 +468,7 @@ public abstract class AbstractChat extends BaseEntity {
Application.getInstance().runInBackground(new Runnable() { Application.getInstance().runInBackground(new Runnable() {
@Override @Override
public void run() { public void run() {
MessageTable.getInstance().removeMessages( MessageTable.getInstance().removeMessages(MessageManager.getMessageIds(messageItems, true));
MessageManager.getMessageIds(messageItems, true));
} }
}); });
} }
...@@ -482,8 +482,7 @@ public abstract class AbstractChat extends BaseEntity { ...@@ -482,8 +482,7 @@ public abstract class AbstractChat extends BaseEntity {
Application.getInstance().runInBackground(new Runnable() { Application.getInstance().runInBackground(new Runnable() {
@Override @Override
public void run() { public void run() {
MessageTable.getInstance().removeMessages( MessageTable.getInstance().removeMessages(MessageManager.getMessageIds(messageItems, true));
MessageManager.getMessageIds(messageItems, true));
MessageTable.getInstance().removeMessages(historyIds); MessageTable.getInstance().removeMessages(historyIds);
historyIds.clear(); historyIds.clear();
} }
...@@ -517,7 +516,7 @@ public abstract class AbstractChat extends BaseEntity { ...@@ -517,7 +516,7 @@ public abstract class AbstractChat extends BaseEntity {
* @return Last incoming message's text. Empty string if last message is * @return Last incoming message's text. Empty string if last message is
* outgoing. * outgoing.
*/ */
protected String getLastText() { public String getLastText() {
return lastText; return lastText;
} }
...@@ -685,4 +684,8 @@ public abstract class AbstractChat extends BaseEntity { ...@@ -685,4 +684,8 @@ public abstract class AbstractChat extends BaseEntity {
public void updateCreationTime() { public void updateCreationTime() {
creationTime.setTime(System.currentTimeMillis()); creationTime.setTime(System.currentTimeMillis());
} }
public boolean isLastMessageIncoming() {
return isLastMessageIncoming;
}
} }
...@@ -146,7 +146,7 @@ public class MessageItem implements Comparable<MessageItem> { ...@@ -146,7 +146,7 @@ public class MessageItem implements Comparable<MessageItem> {
} }
public String getText() { public String getText() {
return text; return Html.fromHtml(text).toString();
} }
public Spannable getSpannable() { public Spannable getSpannable() {
......
...@@ -18,6 +18,7 @@ import com.xabber.android.data.message.chat.ChatManager; ...@@ -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.message.phrase.PhraseManager;
import com.xabber.android.data.roster.RosterManager; import com.xabber.android.data.roster.RosterManager;
import com.xabber.android.ui.ChatViewer; import com.xabber.android.ui.ChatViewer;
import com.xabber.android.ui.helper.AccountPainter;
import com.xabber.android.utils.StringUtils; import com.xabber.android.utils.StringUtils;
import com.xabber.androiddev.R; import com.xabber.androiddev.R;
...@@ -26,12 +27,13 @@ import java.util.List; ...@@ -26,12 +27,13 @@ import java.util.List;
public class MessageNotificationCreator { public class MessageNotificationCreator {
private final Application application; private final Application application;
private final AccountPainter accountPainter;
private List<MessageNotification> messageNotifications; private List<MessageNotification> messageNotifications;
private NotificationCompat.Builder notificationBuilder; private NotificationCompat.Builder notificationBuilder;
public MessageNotificationCreator() { public MessageNotificationCreator() {
application = Application.getInstance(); application = Application.getInstance();
accountPainter = new AccountPainter(application);
} }
...@@ -65,7 +67,7 @@ public class MessageNotificationCreator { ...@@ -65,7 +67,7 @@ public class MessageNotificationCreator {
notificationBuilder.setLargeIcon(getLargeIcon(message)); notificationBuilder.setLargeIcon(getLargeIcon(message));
notificationBuilder.setWhen(message.getTimestamp().getTime()); 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.setStyle(getStyle(message, messageCount, showText));
notificationBuilder.setContentIntent(getIntent(message)); notificationBuilder.setContentIntent(getIntent(message));
......
...@@ -43,6 +43,7 @@ import com.xabber.android.data.roster.RosterManager; ...@@ -43,6 +43,7 @@ import com.xabber.android.data.roster.RosterManager;
import com.xabber.android.ui.ClearNotifications; import com.xabber.android.ui.ClearNotifications;
import com.xabber.android.ui.ContactList; import com.xabber.android.ui.ContactList;
import com.xabber.android.ui.ReconnectionActivity; import com.xabber.android.ui.ReconnectionActivity;
import com.xabber.android.ui.helper.AccountPainter;
import com.xabber.android.utils.StringUtils; import com.xabber.android.utils.StringUtils;
import com.xabber.androiddev.R; import com.xabber.androiddev.R;
...@@ -66,18 +67,17 @@ public class NotificationManager implements OnInitializedListener, OnAccountChan ...@@ -66,18 +67,17 @@ public class NotificationManager implements OnInitializedListener, OnAccountChan
private static final int BASE_NOTIFICATION_PROVIDER_ID = 0x10; private static final int BASE_NOTIFICATION_PROVIDER_ID = 0x10;
private static final long VIBRATION_DURATION = 500; 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 Application application;
private final android.app.NotificationManager notificationManager; private final android.app.NotificationManager notificationManager;
private final PendingIntent clearNotifications; private final PendingIntent clearNotifications;
private final Handler handler; private final Handler handler;
private NotificationCompat.Builder persistentNotificationBuilder;
private MessageNotificationCreator messageNotificationCreator;
/** /**
* Runnable to start vibration. * Runnable to start vibration.
*/ */
...@@ -97,17 +97,10 @@ public class NotificationManager implements OnInitializedListener, OnAccountChan ...@@ -97,17 +97,10 @@ public class NotificationManager implements OnInitializedListener, OnAccountChan
* List of * List of
*/ */
private final List<MessageNotification> messageNotifications; private final List<MessageNotification> messageNotifications;
private final AccountPainter accountPainter;
private final static NotificationManager instance; private NotificationCompat.Builder persistentNotificationBuilder;
private MessageNotificationCreator messageNotificationCreator;
static { private int persistentNotificationColor;
instance = new NotificationManager();
Application.getInstance().addManager(instance);
}
public static NotificationManager getInstance() {
return instance;
}
private NotificationManager() { private NotificationManager() {
this.application = Application.getInstance(); this.application = Application.getInstance();
...@@ -151,6 +144,13 @@ public class NotificationManager implements OnInitializedListener, OnAccountChan ...@@ -151,6 +144,13 @@ public class NotificationManager implements OnInitializedListener, OnAccountChan
messageNotificationCreator = new MessageNotificationCreator(); messageNotificationCreator = new MessageNotificationCreator();
accountPainter = new AccountPainter(application);
persistentNotificationColor = application.getResources().getColor(R.color.red_500);
}
public static NotificationManager getInstance() {
return instance;
} }
private void initPersistentNotification() { private void initPersistentNotification() {
...@@ -272,7 +272,7 @@ public class NotificationManager implements OnInitializedListener, OnAccountChan ...@@ -272,7 +272,7 @@ public class NotificationManager implements OnInitializedListener, OnAccountChan
notificationBuilder.setDeleteIntent(clearNotifications); notificationBuilder.setDeleteIntent(clearNotifications);
notificationBuilder.setColor(COLOR_MATERIAL_RED_500); notificationBuilder.setColor(accountPainter.getDefaultMainColor());
notify(id, notificationBuilder.build()); notify(id, notificationBuilder.build());
} }
...@@ -361,7 +361,7 @@ public class NotificationManager implements OnInitializedListener, OnAccountChan ...@@ -361,7 +361,7 @@ public class NotificationManager implements OnInitializedListener, OnAccountChan
} }
if (connected > 0) { if (connected > 0) {
persistentNotificationBuilder.setColor(COLOR_MATERIAL_RED_500); persistentNotificationBuilder.setColor(persistentNotificationColor);
persistentNotificationBuilder.setSmallIcon(R.drawable.ic_stat_online); persistentNotificationBuilder.setSmallIcon(R.drawable.ic_stat_online);
} else { } else {
persistentNotificationBuilder.setColor(NotificationCompat.COLOR_DEFAULT); persistentNotificationBuilder.setColor(NotificationCompat.COLOR_DEFAULT);
...@@ -493,10 +493,8 @@ public class NotificationManager implements OnInitializedListener, OnAccountChan ...@@ -493,10 +493,8 @@ public class NotificationManager implements OnInitializedListener, OnAccountChan
return messageNotification.getCount(); return messageNotification.getCount();
} }
public void removeMessageNotification(final String account, public void removeMessageNotification(final String account, final String user) {
final String user) { MessageNotification messageNotification = getMessageNotification(account, user);
MessageNotification messageNotification = getMessageNotification(
account, user);
if (messageNotification == null) if (messageNotification == null)
return; return;
messageNotifications.remove(messageNotification); messageNotifications.remove(messageNotification);
......
...@@ -23,11 +23,20 @@ import android.view.MenuInflater; ...@@ -23,11 +23,20 @@ import android.view.MenuInflater;
import android.view.MenuItem; import android.view.MenuItem;
import com.xabber.android.data.intent.AccountIntentBuilder; import com.xabber.android.data.intent.AccountIntentBuilder;
import com.xabber.android.ui.helper.BarPainter;
import com.xabber.android.ui.helper.ManagedActivity; import com.xabber.android.ui.helper.ManagedActivity;
import com.xabber.androiddev.R; import com.xabber.androiddev.R;
public class AccountAdd extends ManagedActivity { 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 @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
...@@ -40,10 +49,15 @@ public class AccountAdd extends ManagedActivity { ...@@ -40,10 +49,15 @@ public class AccountAdd extends ManagedActivity {
getSupportFragmentManager().beginTransaction().add(R.id.container, AccountAddFragment.newInstance()).commit(); 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().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_clear_white_24dp); getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_clear_white_24dp);
getSupportActionBar().setTitle(null); getSupportActionBar().setTitle(null);
BarPainter barPainter = new BarPainter(this, toolbar);
barPainter.setDefaultColor();
} }
@Override @Override
...@@ -67,12 +81,4 @@ public class AccountAdd extends ManagedActivity { ...@@ -67,12 +81,4 @@ public class AccountAdd extends ManagedActivity {
return super.onOptionsItemSelected(item); 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; ...@@ -23,25 +23,47 @@ import android.view.MenuInflater;
import android.view.MenuItem; import android.view.MenuItem;
import com.xabber.android.data.intent.EntityIntentBuilder; 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.android.ui.helper.ManagedActivity;
import com.xabber.androiddev.R; import com.xabber.androiddev.R;
public class ContactAdd extends ManagedActivity implements ContactAddFragment.Listener { 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 @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.contact_add); setContentView(R.layout.contact_add);
setSupportActionBar((Toolbar) findViewById(R.id.toolbar_default)); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_default);
getSupportActionBar().setDisplayHomeAsUpEnabled(true); toolbar.setNavigationIcon(R.drawable.ic_clear_white_24dp);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_clear_white_24dp); setTitle(null);
getSupportActionBar().setTitle(null); barPainter = new BarPainter(this, toolbar);
barPainter.setDefaultColor();
setSupportActionBar(toolbar);
actionBarPainter = new ActionBarPainter(this);
Intent intent = getIntent(); Intent intent = getIntent();
...@@ -78,28 +100,8 @@ public class ContactAdd extends ManagedActivity implements ContactAddFragment.Li ...@@ -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 @Override
public void onAccountSelected(String account) { public void onAccountSelected(String account) {
actionBarPainter.updateWithAccountName(account); barPainter.updateWithAccountName(account);
} }
} }
...@@ -20,15 +20,19 @@ import android.content.Context; ...@@ -20,15 +20,19 @@ import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener; import android.content.DialogInterface.OnCancelListener;
import android.content.Intent; import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.support.v4.view.MenuItemCompat; 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.support.v7.widget.Toolbar;
import android.view.ContextMenu; import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo; import android.view.ContextMenu.ContextMenuInfo;
import android.view.Gravity;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
...@@ -58,7 +62,10 @@ import com.xabber.android.ui.dialog.AccountChooseDialogFragment; ...@@ -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.AccountChooseDialogFragment.OnChoosedListener;
import com.xabber.android.ui.dialog.ContactIntegrationDialogFragment; import com.xabber.android.ui.dialog.ContactIntegrationDialogFragment;
import com.xabber.android.ui.dialog.StartAtBootDialogFragment; 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.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.android.ui.preferences.PreferenceEditor;
import com.xabber.androiddev.R; import com.xabber.androiddev.R;
import com.xabber.xmpp.address.Jid; import com.xabber.xmpp.address.Jid;
...@@ -73,7 +80,7 @@ import java.util.Collection; ...@@ -73,7 +80,7 @@ import java.util.Collection;
* @author alexander.ivanov * @author alexander.ivanov
*/ */
public class ContactList extends ManagedActivity implements OnAccountChangedListener, 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. * Select contact to be invited to the room was requested.
...@@ -100,6 +107,36 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList ...@@ -100,6 +107,36 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList
private String sendText; private String sendText;
private SearchView searchView; 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 @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
...@@ -117,10 +154,19 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList ...@@ -117,10 +154,19 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList
setContentView(R.layout.contact_list); setContentView(R.layout.contact_list);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_default); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_default);
toolbar.setLogo(R.drawable.ic_xabber_logo);
toolbar.setOnClickListener(this); toolbar.setOnClickListener(this);
setSupportActionBar(toolbar); 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)); setTitle(getString(R.string.production_title));
if (savedInstanceState != null) { if (savedInstanceState != null) {
...@@ -214,6 +260,7 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList ...@@ -214,6 +260,7 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList
@Override @Override
protected void onResume() { protected void onResume() {
super.onResume(); super.onResume();
barPainter.setDefaultColor();
rebuildAccountToggle(); rebuildAccountToggle();
Application.getInstance().addUIListener(OnAccountChangedListener.class, this); Application.getInstance().addUIListener(OnAccountChangedListener.class, this);
...@@ -349,6 +396,10 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList ...@@ -349,6 +396,10 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
if (drawerToggle.onOptionsItemSelected(item)) {
return true;
}
switch (item.getItemId()) { switch (item.getItemId()) {
case R.id.action_search: case R.id.action_search:
searchView.setIconified(false); searchView.setIconified(false);
...@@ -366,19 +417,34 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList ...@@ -366,19 +417,34 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList
startActivity(MUCEditor.createIntent(this)); startActivity(MUCEditor.createIntent(this));
return true; return true;
case R.id.action_chat_list: case R.id.action_chat_list:
startActivity(ChatViewer.createIntent(this)); startActivity(ChatViewer.createRecentChatsIntent(this));
return true;
case R.id.action_settings:
startActivity(PreferenceEditor.createIntent(this));
return true;
case R.id.action_exit:
exit();
return true; return true;
default: default:
return super.onOptionsItemSelected(item); 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() { private void exit() {
Application.getInstance().requestToClose(); Application.getInstance().requestToClose();
showDialog(DIALOG_CLOSE_APPLICATION_ID); showDialog(DIALOG_CLOSE_APPLICATION_ID);
...@@ -442,7 +508,7 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList ...@@ -442,7 +508,7 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList
@Override @Override
public void onContactClick(AbstractContact abstractContact) { public void onContactClick(AbstractContact abstractContact) {
if (action == null) { if (action == null) {
startActivity(ChatViewer.createIntent(this, startActivity(ChatViewer.createSpecificChatIntent(this,
abstractContact.getAccount(), abstractContact.getUser())); abstractContact.getAccount(), abstractContact.getUser()));
return; return;
} }
...@@ -474,7 +540,7 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList ...@@ -474,7 +540,7 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList
break; break;
} }
default: default:
startActivity(ChatViewer.createIntent(this, startActivity(ChatViewer.createSpecificChatIntent(this,
abstractContact.getAccount(), abstractContact.getUser())); abstractContact.getAccount(), abstractContact.getUser()));
break; break;
} }
...@@ -500,6 +566,7 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList ...@@ -500,6 +566,7 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList
@Override @Override
public void onAccountsChanged(Collection<String> accounts) { public void onAccountsChanged(Collection<String> accounts) {
((ContactListFragment)getSupportFragmentManager().findFragmentById(R.id.container)).onAccountsChanged(); ((ContactListFragment)getSupportFragmentManager().findFragmentById(R.id.container)).onAccountsChanged();
barPainter.setDefaultColor();
} }
@Override @Override
...@@ -511,31 +578,26 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList ...@@ -511,31 +578,26 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList
((ContactListFragment)getSupportFragmentManager().findFragmentById(R.id.container)).rebuild(); ((ContactListFragment)getSupportFragmentManager().findFragmentById(R.id.container)).rebuild();
} }
public static Intent createPersistentIntent(Context context) { @Override
Intent intent = new Intent(context, ContactList.class); public void onContactListDrawerListener(int viewId) {
intent.setAction("android.intent.action.MAIN"); drawerLayout.closeDrawers();
intent.addCategory("android.intent.category.LAUNCHER"); switch (viewId) {
intent.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | Intent.FLAG_ACTIVITY_NEW_TASK); case R.id.drawer_action_settings:
return intent; startActivity(PreferenceEditor.createIntent(this));
} break;
case R.id.drawer_action_about:
public static Intent createIntent(Context context) { startActivity(AboutViewer.createIntent(this));
return new Intent(context, ContactList.class); break;
} case R.id.drawer_action_exit:
exit();
public static Intent createRoomInviteIntent(Context context, String account, String room) { break;
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) { @Override
return EntityIntentBuilder.getUser(intent); 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; ...@@ -21,6 +21,7 @@ import android.widget.ListView;
import android.widget.PopupMenu; import android.widget.PopupMenu;
import android.widget.TextView; import android.widget.TextView;
import com.melnykov.fab.FloatingActionButton;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.SettingsManager; import com.xabber.android.data.SettingsManager;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
...@@ -40,6 +41,7 @@ import com.xabber.android.ui.adapter.ContactListState; ...@@ -40,6 +41,7 @@ import com.xabber.android.ui.adapter.ContactListState;
import com.xabber.android.ui.adapter.GroupConfiguration; import com.xabber.android.ui.adapter.GroupConfiguration;
import com.xabber.android.ui.adapter.GroupedContactAdapter; import com.xabber.android.ui.adapter.GroupedContactAdapter;
import com.xabber.android.ui.adapter.UpdatableAdapter; 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.helper.ContextMenuHelper;
import com.xabber.android.ui.preferences.AccountList; import com.xabber.android.ui.preferences.AccountList;
import com.xabber.androiddev.R; import com.xabber.androiddev.R;
...@@ -86,6 +88,8 @@ public class ContactListFragment extends Fragment implements OnAccountChangedLis ...@@ -86,6 +88,8 @@ public class ContactListFragment extends Fragment implements OnAccountChangedLis
private AccountActionButtonsAdapter accountActionButtonsAdapter; private AccountActionButtonsAdapter accountActionButtonsAdapter;
private View scrollToChatsActionButtonContainer; private View scrollToChatsActionButtonContainer;
private View actionButtonsContainer; private View actionButtonsContainer;
private FloatingActionButton scrollToChatsActionButton;
private AccountPainter accountPainter;
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...@@ -113,6 +117,12 @@ public class ContactListFragment extends Fragment implements OnAccountChangedLis ...@@ -113,6 +117,12 @@ public class ContactListFragment extends Fragment implements OnAccountChangedLis
scrollToChatsActionButtonContainer.setOnClickListener(this); scrollToChatsActionButtonContainer.setOnClickListener(this);
scrollToChatsActionButtonContainer.setVisibility(View.GONE); 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; return view;
} }
...@@ -123,6 +133,8 @@ public class ContactListFragment extends Fragment implements OnAccountChangedLis ...@@ -123,6 +133,8 @@ public class ContactListFragment extends Fragment implements OnAccountChangedLis
Application.getInstance().addUIListener(OnContactChangedListener.class, this); Application.getInstance().addUIListener(OnContactChangedListener.class, this);
Application.getInstance().addUIListener(OnChatChangedListener.class, this); Application.getInstance().addUIListener(OnChatChangedListener.class, this);
adapter.onChange(); adapter.onChange();
scrollToChatsActionButton.setColorNormal(accountPainter.getDefaultMainColor());
scrollToChatsActionButton.setColorPressed(accountPainter.getDefaultDarkColor());
if (SettingsManager.contactsShowPanel()) { if (SettingsManager.contactsShowPanel()) {
actionButtonsContainer.setVisibility(View.VISIBLE); actionButtonsContainer.setVisibility(View.VISIBLE);
...@@ -177,6 +189,8 @@ public class ContactListFragment extends Fragment implements OnAccountChangedLis ...@@ -177,6 +189,8 @@ public class ContactListFragment extends Fragment implements OnAccountChangedLis
@Override @Override
public void onAccountsChanged(Collection<String> accounts) { public void onAccountsChanged(Collection<String> accounts) {
adapter.refreshRequest(); adapter.refreshRequest();
scrollToChatsActionButton.setColorNormal(accountPainter.getDefaultMainColor());
scrollToChatsActionButton.setColorPressed(accountPainter.getDefaultDarkColor());
} }
@Override @Override
......
...@@ -30,18 +30,31 @@ import com.xabber.android.data.roster.AbstractContact; ...@@ -30,18 +30,31 @@ import com.xabber.android.data.roster.AbstractContact;
import com.xabber.android.data.roster.PresenceManager; import com.xabber.android.data.roster.PresenceManager;
import com.xabber.android.data.roster.RosterManager; import com.xabber.android.data.roster.RosterManager;
import com.xabber.android.data.roster.SubscriptionRequest; 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.android.ui.helper.SingleActivity;
import com.xabber.androiddev.R; import com.xabber.androiddev.R;
import org.w3c.dom.Text;
public class ContactSubscription extends SingleActivity implements View.OnClickListener { public class ContactSubscription extends SingleActivity implements View.OnClickListener {
private String account; private String account;
private String user; private String user;
private SubscriptionRequest subscriptionRequest; 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 @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
...@@ -61,14 +74,15 @@ public class ContactSubscription extends SingleActivity implements View.OnClickL ...@@ -61,14 +74,15 @@ public class ContactSubscription extends SingleActivity implements View.OnClickL
setSupportActionBar(toolbar); setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setTitle(getString(R.string.subscription_request_message)); toolbar.setTitle(getString(R.string.subscription_request_message));
ActionBarPainter actionBarPainter = new ActionBarPainter(this); BarPainter barPainter = new BarPainter(this, toolbar);
actionBarPainter.updateWithAccountName(account); barPainter.updateWithAccountName(account);
AccountPainter accountPainter = new AccountPainter(this);
View fakeToolbar = findViewById(R.id.fake_toolbar); View fakeToolbar = findViewById(R.id.fake_toolbar);
fakeToolbar.setBackgroundColor(actionBarPainter.getAccountColor(account)); fakeToolbar.setBackgroundColor(accountPainter.getAccountMainColor(account));
toolbar.setBackgroundResource(android.R.color.transparent); toolbar.setBackgroundResource(android.R.color.transparent);
AbstractContact abstractContact = RosterManager.getInstance().getBestContact(account, user); AbstractContact abstractContact = RosterManager.getInstance().getBestContact(account, user);
...@@ -78,7 +92,7 @@ public class ContactSubscription extends SingleActivity implements View.OnClickL ...@@ -78,7 +92,7 @@ public class ContactSubscription extends SingleActivity implements View.OnClickL
((TextView)fakeToolbar.findViewById(R.id.dialog_message)).setText(subscriptionRequest.getConfirmation()); ((TextView)fakeToolbar.findViewById(R.id.dialog_message)).setText(subscriptionRequest.getConfirmation());
Button acceptButton = (Button) findViewById(R.id.accept_button); Button acceptButton = (Button) findViewById(R.id.accept_button);
acceptButton.setTextColor(actionBarPainter.getAccountColor(account)); acceptButton.setTextColor(accountPainter.getAccountMainColor(account));
acceptButton.setOnClickListener(this); acceptButton.setOnClickListener(this);
findViewById(R.id.decline_button).setOnClickListener(this); findViewById(R.id.decline_button).setOnClickListener(this);
...@@ -128,18 +142,4 @@ public class ContactSubscription extends SingleActivity implements View.OnClickL ...@@ -128,18 +142,4 @@ public class ContactSubscription extends SingleActivity implements View.OnClickL
finish(); 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 ...@@ -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_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"; private static final String SAVED_LOCAL_FINGERPRINT = "com.xabber.android.ui.FingerprintViewer.SAVED_LOCAL_FINGERPRINT";
ContactTitleActionBarInflater contactTitleActionBarInflater;
private String account; private String account;
private String user; private String user;
private String remoteFingerprint; private String remoteFingerprint;
private String localFingerprint; private String localFingerprint;
/** /**
* UI update is in progress. * UI update is in progress.
*/ */
private boolean isUpdating; private boolean isUpdating;
private CheckBox verifiedView; private CheckBox verifiedView;
private View scanView; private View scanView;
private View showView; private View showView;
private View copyView; private View copyView;
/** /**
* QR code scanner and generator. * QR code scanner and generator.
*/ */
private IntentIntegrator integrator; 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 @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
...@@ -93,7 +101,6 @@ public class FingerprintViewer extends ManagedActivity implements ...@@ -93,7 +101,6 @@ public class FingerprintViewer extends ManagedActivity implements
} }
setContentView(R.layout.fingerprint_viewer); setContentView(R.layout.fingerprint_viewer);
setSupportActionBar((Toolbar) findViewById(R.id.toolbar_default));
integrator = new IntentIntegrator(this); integrator = new IntentIntegrator(this);
Intent intent = getIntent(); Intent intent = getIntent();
...@@ -121,7 +128,7 @@ public class FingerprintViewer extends ManagedActivity implements ...@@ -121,7 +128,7 @@ public class FingerprintViewer extends ManagedActivity implements
copyView.setOnClickListener(this); copyView.setOnClickListener(this);
isUpdating = false; isUpdating = false;
contactTitleActionBarInflater = new ContactTitleActionBarInflater(this); contactTitleActionBarInflater = new ContactTitleActionBarInflater(this, (Toolbar) findViewById(R.id.toolbar_default));
contactTitleActionBarInflater.setUpActionBarView(); contactTitleActionBarInflater.setUpActionBarView();
} }
...@@ -298,17 +305,4 @@ public class FingerprintViewer extends ManagedActivity implements ...@@ -298,17 +305,4 @@ public class FingerprintViewer extends ManagedActivity implements
isUpdating = false; 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; ...@@ -37,18 +37,31 @@ import java.util.Collection;
public class GroupEditor extends ManagedActivity implements OnContactChangedListener, public class GroupEditor extends ManagedActivity implements OnContactChangedListener,
OnAccountChangedListener { OnAccountChangedListener {
ContactTitleActionBarInflater contactTitleActionBarInflater;
private String account; private String account;
private String user; 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) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.group_editor); 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(); contactTitleActionBarInflater.setUpActionBarView();
Intent intent = getIntent(); Intent intent = getIntent();
...@@ -107,19 +120,4 @@ public class GroupEditor extends ManagedActivity implements OnContactChangedList ...@@ -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; ...@@ -37,7 +37,7 @@ import com.xabber.android.data.intent.EntityIntentBuilder;
import com.xabber.android.data.message.MessageManager; import com.xabber.android.data.message.MessageManager;
import com.xabber.android.data.notification.NotificationManager; import com.xabber.android.data.notification.NotificationManager;
import com.xabber.android.ui.adapter.AccountChooseAdapter; 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.android.ui.helper.ManagedActivity;
import com.xabber.androiddev.R; import com.xabber.androiddev.R;
...@@ -67,7 +67,24 @@ public class MUCEditor extends ManagedActivity implements OnItemSelectedListener ...@@ -67,7 +67,24 @@ public class MUCEditor extends ManagedActivity implements OnItemSelectedListener
private EditText nickView; private EditText nickView;
private EditText passwordView; 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 @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
...@@ -77,11 +94,15 @@ public class MUCEditor extends ManagedActivity implements OnItemSelectedListener ...@@ -77,11 +94,15 @@ public class MUCEditor extends ManagedActivity implements OnItemSelectedListener
} }
setContentView(R.layout.muc_editor); setContentView(R.layout.muc_editor);
setSupportActionBar((Toolbar) findViewById(R.id.toolbar_default));
getSupportActionBar().setDisplayHomeAsUpEnabled(true); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_default);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_clear_white_24dp); toolbar.setNavigationIcon(R.drawable.ic_clear_white_24dp);
getSupportActionBar().setTitle(null); setTitle(null);
setSupportActionBar(toolbar);
barPainter = new BarPainter(this, toolbar);
barPainter.setDefaultColor();
accountView = (Spinner) findViewById(R.id.contact_account); accountView = (Spinner) findViewById(R.id.contact_account);
serverView = (EditText) findViewById(R.id.muc_server); serverView = (EditText) findViewById(R.id.muc_server);
...@@ -126,10 +147,8 @@ public class MUCEditor extends ManagedActivity implements OnItemSelectedListener ...@@ -126,10 +147,8 @@ public class MUCEditor extends ManagedActivity implements OnItemSelectedListener
} }
} }
actionBarPainter = new ActionBarPainter(this);
if (account != null) { if (account != null) {
actionBarPainter.updateWithAccountName(account); barPainter.updateWithAccountName(account);
for (int position = 0; position < accountView.getCount(); position++) { for (int position = 0; position < accountView.getCount(); position++) {
if (account.equals(accountView.getItemAtPosition(position))) { if (account.equals(accountView.getItemAtPosition(position))) {
...@@ -244,28 +263,11 @@ public class MUCEditor extends ManagedActivity implements OnItemSelectedListener ...@@ -244,28 +263,11 @@ public class MUCEditor extends ManagedActivity implements OnItemSelectedListener
} }
selectedAccount = accountView.getSelectedItemPosition(); selectedAccount = accountView.getSelectedItemPosition();
actionBarPainter.updateWithAccountName((String) accountView.getSelectedItem()); barPainter.updateWithAccountName((String) accountView.getSelectedItem());
} }
@Override @Override
public void onNothingSelected(AdapterView<?> parent) { public void onNothingSelected(AdapterView<?> parent) {
selectedAccount = accountView.getSelectedItemPosition(); 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 ...@@ -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_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_ANSWER_REQUEST = "com.xabber.android.data.ui.QuestionViewer.ANSWER_REQUEST";
private static final String EXTRA_FIELD_CANCEL = "com.xabber.android.data.ui.QuestionViewer.CANCEL"; private static final String EXTRA_FIELD_CANCEL = "com.xabber.android.data.ui.QuestionViewer.CANCEL";
ContactTitleActionBarInflater contactTitleActionBarInflater;
private String account; private String account;
private String user; private String user;
private boolean showQuestion; private boolean showQuestion;
private boolean answerRequest; private boolean answerRequest;
private EditText questionView; 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 @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
...@@ -89,7 +128,6 @@ public class QuestionViewer extends ManagedActivity implements ...@@ -89,7 +128,6 @@ public class QuestionViewer extends ManagedActivity implements
answerRequest = intent.getBooleanExtra(EXTRA_FIELD_ANSWER_REQUEST, false); answerRequest = intent.getBooleanExtra(EXTRA_FIELD_ANSWER_REQUEST, false);
if (showQuestion) { if (showQuestion) {
setContentView(R.layout.question_viewer); setContentView(R.layout.question_viewer);
setSupportActionBar((Toolbar) findViewById(R.id.toolbar_default));
questionView = (EditText) findViewById(R.id.question); questionView = (EditText) findViewById(R.id.question);
questionView.setEnabled(!answerRequest); questionView.setEnabled(!answerRequest);
if (answerRequest) { if (answerRequest) {
...@@ -99,12 +137,12 @@ public class QuestionViewer extends ManagedActivity implements ...@@ -99,12 +137,12 @@ public class QuestionViewer extends ManagedActivity implements
} }
} else { } else {
setContentView(R.layout.secret_viewer); setContentView(R.layout.secret_viewer);
setSupportActionBar((Toolbar) findViewById(R.id.toolbar_default));
} }
findViewById(R.id.cancel).setOnClickListener(this); findViewById(R.id.cancel).setOnClickListener(this);
findViewById(R.id.send).setOnClickListener(this); findViewById(R.id.send).setOnClickListener(this);
contactTitleActionBarInflater = new ContactTitleActionBarInflater(this); contactTitleActionBarInflater = new ContactTitleActionBarInflater(this, (Toolbar) findViewById(R.id.toolbar_default));
contactTitleActionBarInflater.setUpActionBarView(); contactTitleActionBarInflater.setUpActionBarView();
} }
...@@ -175,45 +213,4 @@ public class QuestionViewer extends ManagedActivity implements ...@@ -175,45 +213,4 @@ public class QuestionViewer extends ManagedActivity implements
contactTitleActionBarInflater.update(abstractContact); 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; ...@@ -3,7 +3,10 @@ package com.xabber.android.ui;
import android.app.Activity; import android.app.Activity;
import android.app.ListFragment; import android.app.ListFragment;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.app.NavUtils;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ListView; import android.widget.ListView;
...@@ -11,18 +14,15 @@ import android.widget.Toast; ...@@ -11,18 +14,15 @@ import android.widget.Toast;
import com.xabber.android.data.message.AbstractChat; import com.xabber.android.data.message.AbstractChat;
import com.xabber.android.ui.adapter.ChatListAdapter; import com.xabber.android.ui.adapter.ChatListAdapter;
import com.xabber.android.ui.helper.AccountPainter;
import com.xabber.androiddev.R; import com.xabber.androiddev.R;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class RecentChatFragment extends ListFragment { public class RecentChatFragment extends ListFragment implements Toolbar.OnMenuItemClickListener {
private RecentChatFragmentInteractionListener listener; private RecentChatFragmentInteractionListener listener;
public static RecentChatFragment newInstance() {
return new RecentChatFragment();
}
/** /**
* Mandatory empty constructor for the fragment manager to instantiate the * Mandatory empty constructor for the fragment manager to instantiate the
* fragment (e.g. upon screen orientation changes). * fragment (e.g. upon screen orientation changes).
...@@ -30,6 +30,10 @@ public class RecentChatFragment extends ListFragment { ...@@ -30,6 +30,10 @@ public class RecentChatFragment extends ListFragment {
public RecentChatFragment() { public RecentChatFragment() {
} }
public static RecentChatFragment newInstance() {
return new RecentChatFragment();
}
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
...@@ -53,6 +57,7 @@ public class RecentChatFragment extends ListFragment { ...@@ -53,6 +57,7 @@ public class RecentChatFragment extends ListFragment {
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState); super.onCreateView(inflater, container, savedInstanceState);
View rootView = inflater.inflate(R.layout.recent_chats, container, false);
ArrayList<AbstractChat> activeChats = ((ChatViewer) getActivity()).getChatViewerAdapter().getActiveChats(); ArrayList<AbstractChat> activeChats = ((ChatViewer) getActivity()).getChatViewerAdapter().getActiveChats();
((ChatListAdapter) getListAdapter()).updateChats(activeChats); ((ChatListAdapter) getListAdapter()).updateChats(activeChats);
...@@ -63,7 +68,22 @@ public class RecentChatFragment extends ListFragment { ...@@ -63,7 +68,22 @@ public class RecentChatFragment extends ListFragment {
activity.finish(); activity.finish();
} }
return inflater.inflate(R.layout.recent_chats, container, false); Toolbar toolbar = (Toolbar) rootView.findViewById(R.id.toolbar_default);
toolbar.setTitle(R.string.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 @Override
...@@ -96,11 +116,20 @@ public class RecentChatFragment extends ListFragment { ...@@ -96,11 +116,20 @@ public class RecentChatFragment extends ListFragment {
} }
} }
public interface RecentChatFragmentInteractionListener { @Override
public void onChatSelected(AbstractChat chat); 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) { public void updateChats(List<AbstractChat> chats) {
((ChatListAdapter) getListAdapter()).updateChats(chats); ((ChatListAdapter) getListAdapter()).updateChats(chats);
} }
public interface RecentChatFragmentInteractionListener {
void onChatSelected(AbstractChat chat);
}
} }
...@@ -41,7 +41,7 @@ import com.xabber.android.data.account.StatusMode; ...@@ -41,7 +41,7 @@ import com.xabber.android.data.account.StatusMode;
import com.xabber.android.data.intent.AccountIntentBuilder; import com.xabber.android.data.intent.AccountIntentBuilder;
import com.xabber.android.ui.adapter.StatusEditorAdapter; import com.xabber.android.ui.adapter.StatusEditorAdapter;
import com.xabber.android.ui.adapter.StatusModeAdapter; 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.android.ui.helper.ManagedListActivity;
import com.xabber.androiddev.R; import com.xabber.androiddev.R;
...@@ -58,6 +58,18 @@ public class StatusEditor extends ManagedListActivity implements OnItemClickList ...@@ -58,6 +58,18 @@ public class StatusEditor extends ManagedListActivity implements OnItemClickList
private StatusEditorAdapter adapter; private StatusEditorAdapter adapter;
private View savedStatusesTextView; 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 @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
...@@ -68,17 +80,21 @@ public class StatusEditor extends ManagedListActivity implements OnItemClickList ...@@ -68,17 +80,21 @@ public class StatusEditor extends ManagedListActivity implements OnItemClickList
actionWithItem = null; actionWithItem = null;
setContentView(R.layout.status_editor); setContentView(R.layout.status_editor);
setSupportActionBar((Toolbar) findViewById(R.id.top_toolbar));
getSupportActionBar().setDisplayHomeAsUpEnabled(true); Toolbar toolbar = (Toolbar) findViewById(R.id.top_toolbar);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_clear_white_24dp); toolbar.setNavigationIcon(R.drawable.ic_clear_white_24dp);
getSupportActionBar().setTitle(null); setTitle(null);
setSupportActionBar(toolbar);
Intent intent = getIntent(); Intent intent = getIntent();
account = StatusEditor.getAccount(intent); account = StatusEditor.getAccount(intent);
BarPainter barPainter = new BarPainter(this, toolbar);
if (account != null) { if (account != null) {
ActionBarPainter actionBarPainter = new ActionBarPainter(this); barPainter.updateWithAccountName(account);
actionBarPainter.updateWithAccountName(account); } else {
barPainter.setDefaultColor();
} }
ListView listView = getListView(); ListView listView = getListView();
...@@ -233,18 +249,6 @@ public class StatusEditor extends ManagedListActivity implements OnItemClickList ...@@ -233,18 +249,6 @@ public class StatusEditor extends ManagedListActivity implements OnItemClickList
finish(); 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 @Override
public boolean onMenuItemClick(MenuItem menuItem) { public boolean onMenuItemClick(MenuItem menuItem) {
return onOptionsItemSelected(menuItem); return onOptionsItemSelected(menuItem);
......
package com.xabber.android.ui.adapter; package com.xabber.android.ui.adapter;
import android.content.Context; import android.content.Context;
import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.BaseAdapter; 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.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.AbstractContact;
import com.xabber.android.data.roster.RosterManager; import com.xabber.android.data.roster.RosterManager;
import com.xabber.androiddev.R;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -22,12 +16,11 @@ public class ChatListAdapter extends BaseAdapter { ...@@ -22,12 +16,11 @@ public class ChatListAdapter extends BaseAdapter {
private List<AbstractChat> chats; private List<AbstractChat> chats;
private final Context context; private final ContactItemInflater contactItemInflater;
public ChatListAdapter(Context context) { public ChatListAdapter(Context context) {
this.context = context;
chats = new ArrayList<>(); chats = new ArrayList<>();
contactItemInflater = new ContactItemInflater(context);
} }
public void updateChats(List<AbstractChat> chats) { public void updateChats(List<AbstractChat> chats) {
...@@ -53,33 +46,9 @@ public class ChatListAdapter extends BaseAdapter { ...@@ -53,33 +46,9 @@ public class ChatListAdapter extends BaseAdapter {
@Override @Override
public View getView(int position, View convertView, ViewGroup parent) { 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 AbstractChat abstractChat = (AbstractChat) getItem(position);
final AbstractContact abstractContact = RosterManager.getInstance() final AbstractContact abstractContact = RosterManager.getInstance()
.getBestContact(abstractChat.getAccount(), abstractChat.getUser()); .getBestContact(abstractChat.getAccount(), abstractChat.getUser());
return contactItemInflater.setUpContactView(convertView, parent, abstractContact);
((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;
} }
} }
...@@ -7,16 +7,23 @@ import android.view.View; ...@@ -7,16 +7,23 @@ import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.LinearLayout; 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 com.xabber.androiddev.R;
import java.util.ArrayList;
public class ChatScrollIndicatorAdapter { public class ChatScrollIndicatorAdapter {
private final Activity activity; private final Activity activity;
private final LinearLayout linearLayout; private final LinearLayout linearLayout;
private final AccountPainter accountPainter;
public ChatScrollIndicatorAdapter(Activity activity, LinearLayout linearLayout) { public ChatScrollIndicatorAdapter(Activity activity, LinearLayout linearLayout) {
this.activity = activity; this.activity = activity;
this.linearLayout = linearLayout; this.linearLayout = linearLayout;
accountPainter = new AccountPainter(activity);
} }
public void select(int selectedPosition) { public void select(int selectedPosition) {
...@@ -24,42 +31,52 @@ public class ChatScrollIndicatorAdapter { ...@@ -24,42 +31,52 @@ public class ChatScrollIndicatorAdapter {
final View view = linearLayout.getChildAt(index); final View view = linearLayout.getChildAt(index);
final AccountViewHolder accountViewHolder = (AccountViewHolder) view.getTag(); final AccountViewHolder accountViewHolder = (AccountViewHolder) view.getTag();
accountViewHolder.selection.setVisibility(index == selectedPosition ? View.VISIBLE : View.GONE); accountViewHolder.selection.setVisibility(index == selectedPosition ? View.VISIBLE : View.INVISIBLE);
accountViewHolder.body.setVisibility(index == selectedPosition ? View.GONE : View.VISIBLE); accountViewHolder.body.setVisibility(index == selectedPosition ? View.INVISIBLE : View.VISIBLE);
} }
} }
public void update(int size) { public void update(ArrayList<AbstractChat> activeChats) {
final LayoutInflater inflater final LayoutInflater inflater
= (LayoutInflater) activity.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); = (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; View view;
if (linearLayout.getChildCount() == 0) { if (i == 0) {
view = inflater.inflate(R.layout.chat_scroll_indicator_item_square, linearLayout, false); view = inflater.inflate(R.layout.chat_scroll_indicator_item_square, linearLayout, false);
} else { } else {
view = inflater.inflate(R.layout.chat_scroll_indicator_item_circle, linearLayout, false); view = inflater.inflate(R.layout.chat_scroll_indicator_item_circle, linearLayout, false);
} }
linearLayout.addView(view); linearLayout.addView(view);
final AccountViewHolder accountViewHolder = new AccountViewHolder(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) { view.setTag(accountViewHolder);
linearLayout.removeViewAt(size);
} }
} }
private static class AccountViewHolder { private static class AccountViewHolder {
final View body; final ImageView body;
final View selection; final ImageView selection;
public AccountViewHolder(View view) { public AccountViewHolder(View view) {
body = view.findViewById(R.id.indicator_item_body); body = (ImageView) view.findViewById(R.id.indicator_item_body);
selection = view.findViewById(R.id.indicator_item_selection); selection = (ImageView) view.findViewById(R.id.indicator_item_selection);
} }
} }
} }
...@@ -6,6 +6,7 @@ import android.app.FragmentManager; ...@@ -6,6 +6,7 @@ import android.app.FragmentManager;
import android.support.v13.app.FragmentStatePagerAdapter; import android.support.v13.app.FragmentStatePagerAdapter;
import android.view.ViewGroup; import android.view.ViewGroup;
import com.xabber.android.data.entity.BaseEntity;
import com.xabber.android.data.message.AbstractChat; import com.xabber.android.data.message.AbstractChat;
import com.xabber.android.data.message.MessageManager; import com.xabber.android.data.message.MessageManager;
import com.xabber.android.ui.ChatViewerFragment; import com.xabber.android.ui.ChatViewerFragment;
...@@ -34,16 +35,13 @@ public class ChatViewerAdapter extends FragmentStatePagerAdapter { ...@@ -34,16 +35,13 @@ public class ChatViewerAdapter extends FragmentStatePagerAdapter {
private Fragment currentFragment; private Fragment currentFragment;
public ChatViewerAdapter(FragmentManager fragmentManager, String account, String user, FinishUpdateListener finishUpdateListener) { public ChatViewerAdapter(FragmentManager fragmentManager, BaseEntity chat, FinishUpdateListener finishUpdateListener) {
super(fragmentManager); super(fragmentManager);
this.finishUpdateListener = finishUpdateListener; this.finishUpdateListener = finishUpdateListener;
activeChats = new ArrayList<>(MessageManager.getInstance().getActiveChats()); 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(); updateChats();
} }
...@@ -121,11 +119,11 @@ public class ChatViewerAdapter extends FragmentStatePagerAdapter { ...@@ -121,11 +119,11 @@ public class ChatViewerAdapter extends FragmentStatePagerAdapter {
return true; return true;
} }
public int getPageNumber(String account, String user) { public int getPageNumber(BaseEntity chat) {
int realPosition = 0; int realPosition = 0;
for (int chatIndex = 0; chatIndex < activeChats.size(); chatIndex++) { for (int chatIndex = 0; chatIndex < activeChats.size(); chatIndex++) {
if (activeChats.get(chatIndex).equals(account, user)) { if (activeChats.get(chatIndex).equals(chat)) {
realPosition = chatIndex + 1; realPosition = chatIndex + 1;
break; 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; package com.xabber.android.ui.helper;
import android.support.v7.app.ActionBar; 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.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.TextView; import android.widget.TextView;
import com.xabber.android.data.roster.AbstractContact; import com.xabber.android.data.roster.AbstractContact;
...@@ -13,21 +12,23 @@ import com.xabber.androiddev.R; ...@@ -13,21 +12,23 @@ import com.xabber.androiddev.R;
public class ContactTitleActionBarInflater { public class ContactTitleActionBarInflater {
private final ActionBarActivity activity; private final AppCompatActivity activity;
private final Toolbar toolbar;
private View actionBarView; 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.activity = activity;
this.toolbar = toolbar;
} }
public void setUpActionBarView() { public void setUpActionBarView() {
actionBarPainter = new ActionBarPainter(activity); barPainter = new BarPainter(activity, toolbar);
activity.setSupportActionBar(toolbar);
ActionBar actionBar = activity.getSupportActionBar(); ActionBar actionBar = activity.getSupportActionBar();
actionBar.setDisplayShowHomeEnabled(false); actionBar.setDisplayShowHomeEnabled(false);
actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setDisplayHomeAsUpEnabled(true);
...@@ -39,7 +40,7 @@ public class ContactTitleActionBarInflater { ...@@ -39,7 +40,7 @@ public class ContactTitleActionBarInflater {
} }
public void update(AbstractContact abstractContact) { public void update(AbstractContact abstractContact) {
actionBarPainter.updateWithAccountName(abstractContact.getAccount()); barPainter.updateWithAccountName(abstractContact.getAccount());
activity.getSupportActionBar().setDisplayShowCustomEnabled(true); activity.getSupportActionBar().setDisplayShowCustomEnabled(true);
activity.getSupportActionBar().setDisplayShowTitleEnabled(false); activity.getSupportActionBar().setDisplayShowTitleEnabled(false);
...@@ -48,34 +49,6 @@ public class ContactTitleActionBarInflater { ...@@ -48,34 +49,6 @@ public class ContactTitleActionBarInflater {
ContactTitleInflater.updateTitle(actionBarView, activity, abstractContact); 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) { public void setStatusText(String user) {
((TextView) actionBarView.findViewById(R.id.status_text)).setText(user); ((TextView) actionBarView.findViewById(R.id.status_text)).setText(user);
} }
......
...@@ -3,8 +3,9 @@ package com.xabber.android.ui.helper; ...@@ -3,8 +3,9 @@ package com.xabber.android.ui.helper;
import android.content.res.Resources; import android.content.res.Resources;
import android.content.res.TypedArray; import android.content.res.TypedArray;
import android.graphics.drawable.ColorDrawable;
import android.os.Build; import android.os.Build;
import android.support.v7.app.ActionBarActivity; import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import android.util.TypedValue; import android.util.TypedValue;
import android.view.View; import android.view.View;
...@@ -12,7 +13,6 @@ import android.view.Window; ...@@ -12,7 +13,6 @@ import android.view.Window;
import android.view.WindowManager; import android.view.WindowManager;
import android.widget.RelativeLayout; import android.widget.RelativeLayout;
import com.github.ksoichiro.android.observablescrollview.ObservableListView;
import com.github.ksoichiro.android.observablescrollview.ObservableScrollView; import com.github.ksoichiro.android.observablescrollview.ObservableScrollView;
import com.github.ksoichiro.android.observablescrollview.ObservableScrollViewCallbacks; import com.github.ksoichiro.android.observablescrollview.ObservableScrollViewCallbacks;
import com.github.ksoichiro.android.observablescrollview.ScrollState; import com.github.ksoichiro.android.observablescrollview.ScrollState;
...@@ -27,7 +27,7 @@ import static java.lang.Math.sqrt; ...@@ -27,7 +27,7 @@ import static java.lang.Math.sqrt;
public class ContactTitleExpandableToolbarInflater implements ObservableScrollViewCallbacks { public class ContactTitleExpandableToolbarInflater implements ObservableScrollViewCallbacks {
private final ActionBarActivity activity; private final AppCompatActivity activity;
private View avatarView; private View avatarView;
private View titleView; private View titleView;
...@@ -35,7 +35,6 @@ public class ContactTitleExpandableToolbarInflater implements ObservableScrollVi ...@@ -35,7 +35,6 @@ public class ContactTitleExpandableToolbarInflater implements ObservableScrollVi
private int toolbarHeight; private int toolbarHeight;
private int paddingLeftMin; private int paddingLeftMin;
private int paddingRight;
private int actionBarSize; private int actionBarSize;
private int toolbarHeightDelta; private int toolbarHeightDelta;
private int avatarLargeSize; private int avatarLargeSize;
...@@ -44,7 +43,7 @@ public class ContactTitleExpandableToolbarInflater implements ObservableScrollVi ...@@ -44,7 +43,7 @@ public class ContactTitleExpandableToolbarInflater implements ObservableScrollVi
private int contactTitlePaddingBottomBig; private int contactTitlePaddingBottomBig;
private int contactTitlePaddingBottomSmall; private int contactTitlePaddingBottomSmall;
public ContactTitleExpandableToolbarInflater(ActionBarActivity activity) { public ContactTitleExpandableToolbarInflater(AppCompatActivity activity) {
this.activity = activity; this.activity = activity;
} }
...@@ -58,6 +57,12 @@ public class ContactTitleExpandableToolbarInflater implements ObservableScrollVi ...@@ -58,6 +57,12 @@ public class ContactTitleExpandableToolbarInflater implements ObservableScrollVi
contactNamePanel = activity.findViewById(R.id.contact_name_panel); contactNamePanel = activity.findViewById(R.id.contact_name_panel);
titleView = activity.findViewById(R.id.expandable_contact_title); titleView = activity.findViewById(R.id.expandable_contact_title);
int[] accountActionBarColors = activity.getResources().getIntArray(R.array.account_action_bar);
titleView.setBackgroundDrawable(new ColorDrawable(accountActionBarColors[
AccountManager.getInstance().getColorLevel(abstractContact.getAccount())]));
ContactTitleInflater.updateTitle(titleView, activity, abstractContact); ContactTitleInflater.updateTitle(titleView, activity, abstractContact);
int[] accountStatusBarColors = activity.getResources().getIntArray(R.array.account_status_bar); int[] accountStatusBarColors = activity.getResources().getIntArray(R.array.account_status_bar);
...@@ -73,7 +78,6 @@ public class ContactTitleExpandableToolbarInflater implements ObservableScrollVi ...@@ -73,7 +78,6 @@ public class ContactTitleExpandableToolbarInflater implements ObservableScrollVi
public void onResume() { public void onResume() {
Resources resources = activity.getResources(); Resources resources = activity.getResources();
paddingLeftMin = resources.getDimensionPixelSize(R.dimen.contact_title_padding_left); paddingLeftMin = resources.getDimensionPixelSize(R.dimen.contact_title_padding_left);
paddingRight = resources.getDimensionPixelSize(R.dimen.contact_title_padding_right);
avatarLargeSize = resources.getDimensionPixelSize(R.dimen.avatar_large_size); avatarLargeSize = resources.getDimensionPixelSize(R.dimen.avatar_large_size);
avatarNormalSize = resources.getDimensionPixelSize(R.dimen.avatar_normal_size); avatarNormalSize = resources.getDimensionPixelSize(R.dimen.avatar_normal_size);
avatarRadius = resources.getDimensionPixelSize(R.dimen.avatar_radius); avatarRadius = resources.getDimensionPixelSize(R.dimen.avatar_radius);
......
...@@ -14,53 +14,29 @@ ...@@ -14,53 +14,29 @@
*/ */
package com.xabber.android.ui.helper; package com.xabber.android.ui.helper;
import android.app.Activity; import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.view.View; import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.extension.cs.ChatStateManager; import com.xabber.android.data.extension.cs.ChatStateManager;
import com.xabber.android.data.roster.AbstractContact; import com.xabber.android.data.roster.AbstractContact;
import com.xabber.androiddev.R; import com.xabber.androiddev.R;
import org.jivesoftware.smackx.ChatState; import org.jivesoftware.smackx.ChatState;
/**
* Helper class to update <code>contact_title.xml</code>.
*
* @author alexander.ivanov
*/
public class ContactTitleInflater { public class ContactTitleInflater {
/** public static void updateTitle(View titleView, final Context context, AbstractContact abstractContact) {
* Fill title with information about {@link AbstractContact} and provides
* back button callback.
*
* @param titleView
* @param activity
* @param abstractContact
*/
public static void updateTitle(View titleView, final Activity activity,
AbstractContact abstractContact) {
final TextView nameView = (TextView) titleView.findViewById(R.id.name); final TextView nameView = (TextView) titleView.findViewById(R.id.name);
final ImageView avatarView = (ImageView) titleView.findViewById(R.id.avatar); final ImageView avatarView = (ImageView) titleView.findViewById(R.id.avatar);
int[] accountActionBarColors = activity.getResources().getIntArray(R.array.account_action_bar);
titleView.setBackgroundDrawable(new ColorDrawable(accountActionBarColors[
AccountManager.getInstance().getColorLevel(abstractContact.getAccount())]));
nameView.setTextColor(activity.getResources().getColor(R.color.primary_text_default_material_dark));
nameView.setText(abstractContact.getName()); nameView.setText(abstractContact.getName());
avatarView.setImageDrawable(abstractContact.getAvatar()); avatarView.setImageDrawable(abstractContact.getAvatar());
setStatus(context, titleView, abstractContact);
setStatus(activity, titleView, abstractContact);
} }
private static void setStatus(Activity activity, View titleView, AbstractContact abstractContact) { private static void setStatus(Context context, View titleView, AbstractContact abstractContact) {
final ImageView statusModeView = (ImageView) titleView.findViewById(R.id.status_icon); final ImageView statusModeView = (ImageView) titleView.findViewById(R.id.status_icon);
int statusLevel = abstractContact.getStatusMode().getStatusLevel(); int statusLevel = abstractContact.getStatusMode().getStatusLevel();
...@@ -79,13 +55,13 @@ public class ContactTitleInflater { ...@@ -79,13 +55,13 @@ public class ContactTitleInflater {
CharSequence statusText; CharSequence statusText;
if (chatState == ChatState.composing) { if (chatState == ChatState.composing) {
statusText = activity.getString(R.string.chat_state_composing); statusText = context.getString(R.string.chat_state_composing);
} else if (chatState == ChatState.paused) { } else if (chatState == ChatState.paused) {
statusText = activity.getString(R.string.chat_state_paused); statusText = context.getString(R.string.chat_state_paused);
} else { } else {
statusText = abstractContact.getStatusText().trim(); statusText = abstractContact.getStatusText().trim();
if (statusText.toString().isEmpty()) { if (statusText.toString().isEmpty()) {
statusText = activity.getString(abstractContact.getStatusMode().getStringID()); statusText = context.getString(abstractContact.getStatusMode().getStringID());
} }
} }
statusTextView.setText(statusText); statusTextView.setText(statusText);
......
...@@ -72,7 +72,7 @@ public class ContextMenuHelper { ...@@ -72,7 +72,7 @@ public class ContextMenuHelper {
@Override @Override
public boolean onMenuItemClick(MenuItem item) { public boolean onMenuItemClick(MenuItem item) {
MessageManager.getInstance().openChat(account, user); MessageManager.getInstance().openChat(account, user);
activity.startActivity(ChatViewer.createIntent( activity.startActivity(ChatViewer.createSpecificChatIntent(
activity, account, user)); activity, account, user));
return true; return true;
} }
......
...@@ -16,7 +16,7 @@ package com.xabber.android.ui.helper; ...@@ -16,7 +16,7 @@ package com.xabber.android.ui.helper;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.app.ActionBarActivity; import android.support.v7.app.AppCompatActivity;
import com.xabber.android.data.ActivityManager; import com.xabber.android.data.ActivityManager;
...@@ -27,7 +27,7 @@ import com.xabber.android.data.ActivityManager; ...@@ -27,7 +27,7 @@ import com.xabber.android.data.ActivityManager;
* *
* @author alexander.ivanov * @author alexander.ivanov
*/ */
public abstract class ManagedActivity extends ActionBarActivity { public abstract class ManagedActivity extends AppCompatActivity {
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
......
...@@ -16,7 +16,7 @@ package com.xabber.android.ui.helper; ...@@ -16,7 +16,7 @@ package com.xabber.android.ui.helper;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.app.ActionBarActivity; import android.support.v7.app.AppCompatActivity;
import android.widget.ListAdapter; import android.widget.ListAdapter;
import android.widget.ListView; import android.widget.ListView;
...@@ -29,7 +29,7 @@ import com.xabber.android.data.ActivityManager; ...@@ -29,7 +29,7 @@ import com.xabber.android.data.ActivityManager;
* *
* @author alexander.ivanov * @author alexander.ivanov
*/ */
public abstract class ManagedListActivity extends ActionBarActivity { public abstract class ManagedListActivity extends AppCompatActivity {
@Override @Override
protected void onCreate(Bundle savedInstanceState) { 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; ...@@ -25,16 +25,25 @@ import android.text.method.LinkMovementMethod;
import android.view.MenuItem; import android.view.MenuItem;
import android.widget.TextView; import android.widget.TextView;
import com.xabber.android.ui.helper.BarPainter;
import com.xabber.android.ui.helper.ManagedActivity; import com.xabber.android.ui.helper.ManagedActivity;
import com.xabber.androiddev.R; import com.xabber.androiddev.R;
public class AboutViewer extends ManagedActivity { public class AboutViewer extends ManagedActivity {
public static Intent createIntent(Context context) {
return new Intent(context, AboutViewer.class);
}
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.about_viewer); 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)) ((TextView) findViewById(R.id.about_version))
.setText(getString(R.string.about_version, getVersionName())); .setText(getString(R.string.about_version, getVersionName()));
...@@ -54,10 +63,6 @@ public class AboutViewer extends ManagedActivity { ...@@ -54,10 +63,6 @@ public class AboutViewer extends ManagedActivity {
return ""; return "";
} }
public static Intent createIntent(Context context) {
return new Intent(context, AboutViewer.class);
}
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) { switch (item.getItemId()) {
......
...@@ -5,6 +5,7 @@ import android.os.Bundle; ...@@ -5,6 +5,7 @@ import android.os.Bundle;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import com.xabber.android.data.message.phrase.Phrase; 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.android.ui.helper.ManagedActivity;
import com.xabber.androiddev.R; import com.xabber.androiddev.R;
...@@ -18,9 +19,15 @@ public abstract class BasePhrasePreferences extends ManagedActivity ...@@ -18,9 +19,15 @@ public abstract class BasePhrasePreferences extends ManagedActivity
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_preferences); 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); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
BarPainter barPainter = new BarPainter(this, toolbar);
barPainter.setDefaultColor();
if (savedInstanceState == null) { if (savedInstanceState == null) {
getFragmentManager().beginTransaction() getFragmentManager().beginTransaction()
.add(R.id.preferences_activity_container, new PhraseEditorFragment()).commit(); .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