Skip to content

Commit 83029e3

Browse files
author
Grigory Fedorov
committed
Merge branch 'release/1.0.72'
2 parents ef6b284 + 89e4b86 commit 83029e3

File tree

423 files changed

+1973
-657
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

423 files changed

+1973
-657
lines changed

xabber/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ android {
77
defaultConfig {
88
minSdkVersion 14
99
targetSdkVersion 23
10-
versionCode 236
11-
versionName '1.0.63'
10+
versionCode 245
11+
versionName '1.0.72'
1212
}
1313

1414
compileOptions {

xabber/src/main/AndroidManifest.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,16 @@
316316
android:noHistory="true"
317317
android:stateNotNeeded="true"
318318
android:taskAffinity="" />
319+
320+
<activity
321+
android:name="com.xabber.android.ui.preferences.ThemeSettings"
322+
android:parentActivityName="com.xabber.android.ui.preferences.PreferenceEditor">
323+
<!-- Parent activity meta-data to support 4.0 and lower -->
324+
<meta-data
325+
android:name="android.support.PARENT_ACTIVITY"
326+
android:value="com.xabber.android.ui.preferences.PreferenceEditor" />
327+
</activity>
328+
319329
<activity
320330
android:name=".ui.preferences.ContactListSettings"
321331
android:parentActivityName=".ui.preferences.PreferenceEditor">

xabber/src/main/java/com/xabber/android/data/ActivityManager.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,12 @@ public boolean hasContactList(Context context) {
120120
*/
121121
private void applyTheme(Activity activity) {
122122
activity.setTheme(R.style.Theme);
123+
SettingsManager.InterfaceTheme theme = SettingsManager.interfaceTheme();
124+
if (theme.equals(SettingsManager.InterfaceTheme.dark)) {
125+
activity.setTheme(R.style.ThemeDark);
126+
} else {
127+
activity.setTheme(R.style.Theme);
128+
}
123129
}
124130

125131
/**
@@ -130,8 +136,12 @@ private void applyTheme(Activity activity) {
130136
* @param activity
131137
*/
132138
public void onCreate(Activity activity) {
133-
if (LOG)
139+
if (LOG) {
134140
LogManager.i(activity, "onCreate: " + activity.getIntent());
141+
}
142+
if (!activity.getClass().getSimpleName().equals("AboutViewer")) {
143+
applyTheme(activity);
144+
}
135145
if (application.isClosing() && !(activity instanceof LoadActivity)) {
136146
activity.startActivity(LoadActivity.createIntent(activity));
137147
activity.finish();

xabber/src/main/java/com/xabber/android/data/SettingsManager.java

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import com.xabber.android.service.XabberService;
3636
import com.xabber.android.ui.adapter.ComparatorByName;
3737
import com.xabber.android.ui.adapter.ComparatorByStatus;
38+
import com.xabber.android.ui.color.ColorManager;
3839
import com.xabber.android.utils.Emoticons;
3940
import com.xabber.xmpp.carbon.CarbonManager;
4041

@@ -465,19 +466,16 @@ public static boolean showConnectionErrors() {
465466
}
466467

467468
public static InterfaceTheme interfaceTheme() {
468-
String value = getString(R.string.interface_theme_key,
469-
R.string.interface_theme_default);
470-
if (Application.getInstance()
471-
.getString(R.string.interface_theme_dark_value).equals(value))
469+
String value = getString(R.string.interface_theme_key, R.string.interface_theme_default);
470+
if (Application.getInstance().getString(R.string.interface_theme_dark_value).equals(value)) {
472471
return InterfaceTheme.dark;
473-
else if (Application.getInstance()
474-
.getString(R.string.interface_theme_light_value).equals(value))
472+
} else if (Application.getInstance().getString(R.string.interface_theme_light_value).equals(value)) {
475473
return InterfaceTheme.light;
476-
else if (Application.getInstance()
477-
.getString(R.string.interface_theme_normal_value).equals(value))
478-
return InterfaceTheme.normal;
479-
else
474+
} else if (Application.getInstance().getString(R.string.interface_theme_normal_value).equals(value)) {
475+
return InterfaceTheme.light;
476+
} else {
480477
throw new IllegalStateException();
478+
}
481479
}
482480

483481
public static Map<Pattern, Integer> interfaceSmiles() {
@@ -561,6 +559,19 @@ public static void setTranslationSuggested() {
561559
setBoolean(R.string.translation_suggested_key, true);
562560
}
563561

562+
public static boolean isDarkThemeSuggested() {
563+
return getBoolean(R.string.dark_theme_suggested_key, false);
564+
}
565+
566+
public static void setDarkThemeSuggested() {
567+
setBoolean(R.string.dark_theme_suggested_key, true);
568+
}
569+
570+
public static void setDarkTheme() {
571+
setString(R.string.interface_theme_key, Application.getInstance().getString(
572+
R.string.interface_theme_dark_value));
573+
}
574+
564575
/**
565576
* @return Common status mode for all accounts or
566577
* {@link StatusMode#available} if mode was not set.
@@ -659,6 +670,12 @@ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
659670
} else if (key.equals(Application.getInstance().getString(
660671
R.string.security_otr_mode_key))) {
661672
OTRManager.getInstance().onSettingsChanged();
673+
} else if (key.equals(Application.getInstance().getString(
674+
R.string.interface_theme_key))) {
675+
ColorManager.getInstance().onSettingsChanged();
676+
if (SettingsManager.interfaceTheme() == InterfaceTheme.dark) {
677+
SettingsManager.setDarkThemeSuggested();
678+
}
662679
}
663680
}
664681

xabber/src/main/java/com/xabber/android/data/account/StatusMode.java

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -82,19 +82,35 @@ public enum StatusMode {
8282
* @return
8383
*/
8484
static public StatusMode createStatusMode(Presence presence) {
85-
if (presence.getType() == Presence.Type.unavailable)
85+
if (presence == null) {
8686
return StatusMode.unavailable;
87-
final Mode mode = presence.getMode();
88-
if (mode == Mode.away)
89-
return StatusMode.away;
90-
else if (mode == Mode.chat)
91-
return StatusMode.chat;
92-
else if (mode == Mode.dnd)
93-
return StatusMode.dnd;
94-
else if (mode == Mode.xa)
95-
return StatusMode.xa;
96-
else
97-
return StatusMode.available;
87+
}
88+
89+
switch (presence.getType()) {
90+
case available:
91+
final Mode mode = presence.getMode();
92+
if (mode == Mode.away)
93+
return StatusMode.away;
94+
else if (mode == Mode.chat)
95+
return StatusMode.chat;
96+
else if (mode == Mode.dnd)
97+
return StatusMode.dnd;
98+
else if (mode == Mode.xa)
99+
return StatusMode.xa;
100+
else
101+
return StatusMode.available;
102+
103+
case error:
104+
case unsubscribed:
105+
return StatusMode.unsubscribed;
106+
case unavailable:
107+
case subscribe:
108+
case subscribed:
109+
case unsubscribe:
110+
case probe:
111+
return StatusMode.unavailable;
112+
}
113+
return StatusMode.unavailable;
98114
}
99115

100116
/**

xabber/src/main/java/com/xabber/android/data/connection/ConnectionThread.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,6 @@ private void createConnection(String fqdn, int port, boolean useSRVLookup) {
189189
private void onReady(XMPPTCPConnectionConfiguration.Builder builder) {
190190
builder.setSecurityMode(tlsMode.getSecurityMode());
191191
builder.setCompressionEnabled(compression);
192-
builder.setSendPresence(false);
193192

194193
try {
195194
if (SettingsManager.securityCheckCertificate()) {
@@ -215,8 +214,10 @@ private void onReady(XMPPTCPConnectionConfiguration.Builder builder) {
215214

216215

217216
AccountRosterListener rosterListener = new AccountRosterListener(((AccountItem)connectionItem).getAccount());
218-
Roster.getInstanceFor(xmppConnection).addRosterListener(rosterListener);
219-
Roster.getInstanceFor(xmppConnection).addRosterLoadedListener(rosterListener);
217+
final Roster roster = Roster.getInstanceFor(xmppConnection);
218+
roster.addRosterListener(rosterListener);
219+
roster.addRosterLoadedListener(rosterListener);
220+
roster.setSubscriptionMode(Roster.SubscriptionMode.manual);
220221

221222
org.jivesoftware.smackx.ping.PingManager.getInstanceFor(xmppConnection).registerPingFailedListener(this);
222223

xabber/src/main/java/com/xabber/android/data/extension/attention/AttentionManager.java

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,7 @@
3737
import com.xabber.android.data.message.RegularChat;
3838
import com.xabber.android.data.notification.EntityNotificationProvider;
3939
import com.xabber.android.data.notification.NotificationManager;
40-
import com.xabber.android.data.roster.PresenceManager;
41-
import com.xabber.android.data.roster.ResourceItem;
40+
import com.xabber.android.data.roster.RosterManager;
4241
import com.xabber.xmpp.address.Jid;
4342
import com.xabber.xmpp.attention.Attention;
4443

@@ -47,6 +46,7 @@
4746
import org.jivesoftware.smack.XMPPConnectionRegistry;
4847
import org.jivesoftware.smack.packet.ExtensionElement;
4948
import org.jivesoftware.smack.packet.Message;
49+
import org.jivesoftware.smack.packet.Presence;
5050
import org.jivesoftware.smack.packet.Stanza;
5151
import org.jivesoftware.smackx.disco.ServiceDiscoveryManager;
5252

@@ -170,22 +170,26 @@ public void onPacket(ConnectionItem connection, String bareAddress, Stanza packe
170170
}
171171
}
172172

173-
public void sendAttention(String account, String user)
174-
throws NetworkException {
175-
AbstractChat chat = MessageManager.getInstance().getOrCreateChat(
176-
account, user);
177-
if (!(chat instanceof RegularChat))
173+
public void sendAttention(String account, String user) throws NetworkException {
174+
AbstractChat chat = MessageManager.getInstance().getOrCreateChat(account, user);
175+
if (!(chat instanceof RegularChat)) {
178176
throw new NetworkException(R.string.ENTRY_IS_NOT_FOUND);
177+
}
179178
String to = chat.getTo();
180179
if (Jid.getResource(to) == null || "".equals(Jid.getResource(to))) {
181-
ResourceItem resourceItem = PresenceManager.getInstance()
182-
.getResourceItem(account, user);
183-
if (resourceItem == null)
184-
throw new NetworkException(R.string.NOT_CONNECTED);
185-
to = resourceItem.getUser(user);
180+
final Presence presence = RosterManager.getInstance().getPresence(account, user);
181+
if (presence == null) {
182+
to = null;
183+
} else {
184+
to = presence.getFrom();
185+
}
186+
}
187+
188+
if (to == null) {
189+
throw new NetworkException(R.string.ENTRY_IS_NOT_AVAILABLE);
186190
}
187-
ClientInfo clientInfo = CapabilitiesManager.getInstance()
188-
.getClientInfo(account, to);
191+
192+
ClientInfo clientInfo = CapabilitiesManager.getInstance().getClientInfo(account, to);
189193
if (clientInfo == null)
190194
throw new NetworkException(R.string.ENTRY_IS_NOT_AVAILABLE);
191195
if (!clientInfo.getFeatures().contains(Attention.NAMESPACE))

xabber/src/main/java/com/xabber/android/data/extension/avatar/AvatarManager.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,11 @@
3131
import com.xabber.android.data.OnLowMemoryListener;
3232
import com.xabber.android.data.SettingsManager;
3333
import com.xabber.android.data.account.AccountItem;
34-
import com.xabber.android.data.account.AccountManager;
3534
import com.xabber.android.data.account.OAuthManager;
3635
import com.xabber.android.data.connection.ConnectionItem;
3736
import com.xabber.android.data.connection.OnPacketListener;
3837
import com.xabber.android.data.extension.vcard.VCardManager;
38+
import com.xabber.android.ui.color.ColorManager;
3939
import com.xabber.xmpp.address.Jid;
4040
import com.xabber.xmpp.avatar.VCardUpdate;
4141

@@ -104,15 +104,12 @@ public class AvatarManager implements OnLoadListener, OnLowMemoryListener, OnPac
104104
* Rooms' default avatar set.
105105
*/
106106
private final BaseAvatarSet roomAvatarSet;
107-
private final int[] accountColors;
108107

109108
private AvatarManager() {
110109
this.application = Application.getInstance();
111110
userAvatarSet = new BaseAvatarSet(application, R.array.default_avatars_icons, R.array.default_avatars_colors);
112111
roomAvatarSet = new BaseAvatarSet(application, R.array.muc_avatars, R.array.default_avatars_colors);
113112

114-
accountColors = application.getResources().getIntArray(R.array.account_action_bar);
115-
116113
hashes = new HashMap<>();
117114
bitmaps = new HashMap<>();
118115
contactListDrawables = new HashMap<>();
@@ -301,7 +298,7 @@ public Drawable getAccountAvatar(String account) {
301298
@NonNull
302299
public Drawable getDefaultAccountAvatar(String account) {
303300
Drawable[] layers = new Drawable[2];
304-
layers[0] = new ColorDrawable(accountColors[AccountManager.getInstance().getColorLevel(account)]);
301+
layers[0] = new ColorDrawable(ColorManager.getInstance().getAccountPainter().getAccountMainColor(account));
305302
layers[1] = application.getResources().getDrawable(R.drawable.ic_avatar_1);
306303
return new LayerDrawable(layers);
307304
}

xabber/src/main/java/com/xabber/android/data/extension/capability/CapabilitiesManager.java

Lines changed: 36 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import android.database.Cursor;
1818

1919
import com.xabber.android.data.Application;
20+
import com.xabber.android.data.LogManager;
2021
import com.xabber.android.data.NetworkException;
2122
import com.xabber.android.data.OnLoadListener;
2223
import com.xabber.android.data.account.AccountItem;
@@ -420,42 +421,47 @@ public void onDisconnect(ConnectionItem connection) {
420421
}
421422
}
422423

424+
public void onPresenceChanged(final String account, final Presence presence) {
425+
final String user = Jid.getStringPrep(presence.getFrom());
426+
if (user == null)
427+
return;
428+
if (presence.getType() == Presence.Type.error)
429+
return;
430+
if (presence.getType() == Presence.Type.unavailable) {
431+
userCapabilities.remove(account, user);
432+
return;
433+
}
434+
435+
LogManager.i(this, "onPresenceChanged " + user);
436+
437+
for (ExtensionElement packetExtension : presence.getExtensions()) {
438+
if (packetExtension instanceof CapsExtension) {
439+
CapsExtension capsExtension = (CapsExtension) packetExtension;
440+
if (capsExtension.getNode() == null || capsExtension.getVer() == null) {
441+
continue;
442+
}
443+
Capability capability = new Capability(account, user,
444+
capsExtension.getHash(), capsExtension.getNode(),
445+
capsExtension.getVer());
446+
if (capability.equals(userCapabilities.get(account, user))) {
447+
continue;
448+
}
449+
userCapabilities.put(account, user, capability);
450+
ClientInfo clientInfo = clientInformations.get(capability);
451+
if (clientInfo == null || clientInfo == INVALID_CLIENT_INFO) {
452+
request(account, presence.getFrom(), capability);
453+
}
454+
}
455+
}
456+
}
457+
423458
@Override
424459
public void onPacket(ConnectionItem connection, String bareAddress, Stanza packet) {
425460
if (!(connection instanceof AccountItem))
426461
return;
427462
final String account = ((AccountItem) connection).getAccount();
428463
final String user = Jid.getStringPrep(packet.getFrom());
429-
if (packet instanceof Presence) {
430-
if (user == null)
431-
return;
432-
final Presence presence = (Presence) packet;
433-
if (presence.getType() == Presence.Type.error)
434-
return;
435-
if (presence.getType() == Presence.Type.unavailable) {
436-
userCapabilities.remove(account, user);
437-
return;
438-
}
439-
for (ExtensionElement packetExtension : presence.getExtensions()) {
440-
if (packetExtension instanceof CapsExtension) {
441-
CapsExtension capsExtension = (CapsExtension) packetExtension;
442-
if (capsExtension.getNode() == null || capsExtension.getVer() == null) {
443-
continue;
444-
}
445-
Capability capability = new Capability(account, user,
446-
capsExtension.getHash(), capsExtension.getNode(),
447-
capsExtension.getVer());
448-
if (capability.equals(userCapabilities.get(account, user))) {
449-
continue;
450-
}
451-
userCapabilities.put(account, user, capability);
452-
ClientInfo clientInfo = clientInformations.get(capability);
453-
if (clientInfo == null || clientInfo == INVALID_CLIENT_INFO) {
454-
request(account, packet.getFrom(), capability);
455-
}
456-
}
457-
}
458-
} else if (packet instanceof IQ) {
464+
if (packet instanceof IQ) {
459465
IQ iq = (IQ) packet;
460466
if (iq.getType() != Type.error
461467
&& !(packet instanceof DiscoverInfo && iq.getType() == Type.result))

0 commit comments

Comments
 (0)