Skip to content

Commit 94bc267

Browse files
author
Grigory Fedorov
committed
Merge branch 'release/1.0.73'
2 parents 83029e3 + ce12009 commit 94bc267

File tree

15 files changed

+120
-12
lines changed

15 files changed

+120
-12
lines changed

README.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ Supported protocols
4141
* XEP-0136: Message Archiving
4242
* XEP-0224: Attention
4343
* XEP-0077: In-Band Registration
44+
* XEP-0352: Client State Indication
4445

4546
Translations
4647
============

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 245
11-
versionName '1.0.72'
10+
versionCode 246
11+
versionName '1.0.73'
1212
}
1313

1414
compileOptions {

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import com.xabber.android.data.OnInitializedListener;
2828
import com.xabber.android.data.SettingsManager;
2929
import com.xabber.android.data.connection.ConnectionManager;
30+
import com.xabber.android.data.extension.csi.ClientStateManager;
3031
import com.xabber.android.receiver.GoAwayReceiver;
3132
import com.xabber.android.receiver.GoXaReceiver;
3233
import com.xabber.android.receiver.ScreenReceiver;
@@ -96,13 +97,19 @@ public void onScreen(Intent intent) {
9697
alarmManager.cancel(goAwayPendingIntent);
9798
alarmManager.cancel(goXaPendingIntent);
9899
AccountManager.getInstance().wakeUp();
100+
101+
// notify server(s) that client is now active
102+
ClientStateManager.setActive();
99103
} else if (Intent.ACTION_SCREEN_OFF.equals(intent.getAction())) {
100104
if (goAway >= 0)
101105
alarmManager.set(AlarmManager.RTC_WAKEUP, getTime(goAway),
102106
goAwayPendingIntent);
103107
if (goXa >= 0)
104108
alarmManager.set(AlarmManager.RTC_WAKEUP, getTime(goXa),
105109
goXaPendingIntent);
110+
111+
// notify server(s) that client is now inactive
112+
ClientStateManager.setInactive();
106113
}
107114
}
108115

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@
3737
import org.jivesoftware.smack.filter.StanzaFilter;
3838
import org.jivesoftware.smack.packet.Stanza;
3939
import org.jivesoftware.smack.packet.StreamError;
40+
import org.jivesoftware.smack.parsing.ExceptionLoggingCallback;
4041
import org.jivesoftware.smack.roster.Roster;
41-
import org.jivesoftware.smack.roster.RosterLoadedListener;
4242
import org.jivesoftware.smack.sasl.provided.SASLPlainMechanism;
4343
import org.jivesoftware.smack.tcp.XMPPTCPConnection;
4444
import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration;
@@ -189,6 +189,7 @@ 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);
192193

193194
try {
194195
if (SettingsManager.securityCheckCertificate()) {
@@ -212,6 +213,8 @@ private void onReady(XMPPTCPConnectionConfiguration.Builder builder) {
212213
xmppConnection.addAsyncStanzaListener(this, ACCEPT_ALL);
213214
xmppConnection.addConnectionListener(this);
214215

216+
// by default Smack disconnects in case of parsing errors
217+
xmppConnection.setParsingExceptionCallback(new ExceptionLoggingCallback());
215218

216219
AccountRosterListener rosterListener = new AccountRosterListener(((AccountItem)connectionItem).getAccount());
217220
final Roster roster = Roster.getInstanceFor(xmppConnection);
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package com.xabber.android.data.extension.csi;
2+
3+
import com.xabber.android.data.account.AccountItem;
4+
import com.xabber.android.data.account.AccountManager;
5+
import com.xabber.android.data.connection.ConnectionThread;
6+
7+
import org.jivesoftware.smack.SmackException;
8+
import org.jivesoftware.smack.XMPPConnection;
9+
import org.jivesoftware.smack.packet.PlainStreamElement;
10+
import org.jivesoftware.smackx.csi.packet.ClientStateIndication;
11+
12+
/**
13+
* Client State Indication (XEP-0352) manager
14+
* @author Ricki Hirner (www.bitfire.at)
15+
*/
16+
public class ClientStateManager {
17+
18+
private ClientStateManager() {
19+
}
20+
21+
22+
public static void setInactive() {
23+
sendClientState(ClientStateIndication.Inactive.INSTANCE);
24+
}
25+
26+
public static void setActive() {
27+
sendClientState(ClientStateIndication.Active.INSTANCE);
28+
}
29+
30+
protected static void sendClientState(PlainStreamElement element) {
31+
AccountManager accountManager = AccountManager.getInstance();
32+
for (String accountName : accountManager.getAccounts()) {
33+
AccountItem account = accountManager.getAccount(accountName);
34+
if (account == null)
35+
continue;
36+
ConnectionThread connectionThread = account.getConnectionThread();
37+
if (connectionThread == null)
38+
continue;
39+
40+
XMPPConnection stream = connectionThread.getXMPPConnection();
41+
if (stream.hasFeature("csi", ClientStateIndication.NAMESPACE))
42+
try {
43+
stream.send(element);
44+
} catch (SmackException.NotConnectedException e) {
45+
// not connected
46+
}
47+
}
48+
}
49+
50+
}

xabber/src/main/java/com/xabber/android/data/roster/PresenceManager.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import com.xabber.android.data.account.StatusMode;
2828
import com.xabber.android.data.connection.ConnectionItem;
2929
import com.xabber.android.data.connection.ConnectionManager;
30+
import com.xabber.android.data.connection.OnAuthorizedListener;
3031
import com.xabber.android.data.connection.OnDisconnectListener;
3132
import com.xabber.android.data.connection.OnPacketListener;
3233
import com.xabber.android.data.extension.archive.OnArchiveModificationsReceivedListener;
@@ -53,7 +54,7 @@
5354
* @author alexander.ivanov
5455
*/
5556
public class PresenceManager implements OnArchiveModificationsReceivedListener,
56-
OnLoadListener, OnAccountDisabledListener, OnDisconnectListener, OnPacketListener {
57+
OnLoadListener, OnAccountDisabledListener, OnDisconnectListener, OnPacketListener, OnAuthorizedListener {
5758

5859
private final static PresenceManager instance;
5960

@@ -257,8 +258,6 @@ public void resendPresence(String account) throws NetworkException {
257258
}
258259

259260
public void sendVCardUpdatePresence(String account, String hash) throws NetworkException {
260-
if (!readyAccounts.contains(account))
261-
throw new NetworkException(R.string.NOT_CONNECTED);
262261
final Presence presence = AccountManager.getInstance().getAccount(account).getPresence();
263262

264263
final VCardUpdate vCardUpdate = new VCardUpdate();
@@ -295,4 +294,17 @@ public void onPacket(ConnectionItem connection, String bareAddress, Stanza stanz
295294
}
296295
}
297296
}
297+
298+
@Override
299+
public void onAuthorized(ConnectionItem connection) {
300+
if (!(connection instanceof AccountItem)) {
301+
return;
302+
}
303+
304+
try {
305+
resendPresence(((AccountItem) connection).getAccount());
306+
} catch (NetworkException e) {
307+
e.printStackTrace();
308+
}
309+
}
298310
}

xabber/src/main/res/layout/fragment_conference_info.xml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
>
1313

1414

15-
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
15+
<LinearLayout
1616
android:orientation="horizontal"
1717
android:layout_width="match_parent"
1818
android:layout_height="wrap_content"
@@ -65,7 +65,7 @@
6565
</LinearLayout>
6666
</LinearLayout>
6767

68-
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
68+
<LinearLayout
6969
android:orientation="horizontal"
7070
android:layout_width="match_parent"
7171
android:layout_height="wrap_content"
@@ -117,7 +117,7 @@
117117
</LinearLayout>
118118
</LinearLayout>
119119

120-
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
120+
<LinearLayout
121121
android:orientation="horizontal"
122122
android:layout_width="match_parent"
123123
android:layout_height="wrap_content"
@@ -171,7 +171,7 @@
171171
</LinearLayout>
172172
</LinearLayout>
173173

174-
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
174+
<LinearLayout
175175
android:orientation="horizontal"
176176
android:layout_width="match_parent"
177177
android:layout_height="wrap_content"
@@ -225,7 +225,7 @@
225225
</LinearLayout>
226226
</LinearLayout>
227227

228-
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
228+
<LinearLayout
229229
android:orientation="horizontal"
230230
android:layout_width="match_parent"
231231
android:layout_height="wrap_content"

xabber/src/main/res/values-cs-rCZ/contact_list.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
<string name="show_offline_never">Nikdy nezobrazovat</string>
5656
<string name="show_offline_normal">Obecné nastavení</string>
5757
<string name="show_offline_settings">Zobrazovat odpojené kontakty</string>
58+
<string name="start_at_boot">Spustit při startu</string>
5859
<string name="start_at_boot_suggest">Přejete si spustit při startu Xabber? \nLze změnit v \"Nastavení\" → \"Nastavení připojení\" → \"Start při spouštění Android\"</string>
5960
<string name="contact_search_hint">Prohledávat kontakty</string>
6061
<string name="sender_is_you">Vy</string>
@@ -69,4 +70,8 @@
6970
<string name="unblock_all_contacts_confirm">Opravdu chcete odblokovat všechny kontakty z účtu %1$s?</string>
7071
<string name="unblock_all">Odblokovat vše</string>
7172
<string name="unblock_selected">Odblokovat vybrané</string>
73+
<string name="dark_theme_suggest_dialog_title">Vyber si svůj úděl</string>
74+
<string name="dark_theme_suggest_dialog_message">Nové tmavé téma je nyní k dispozici pro Xabber. Dokážete odolat pokušení ji používat?</string>
75+
<string name="dark_theme_suggest_dialog_join_dark_side">Připojte se k Temné straně</string>
76+
<string name="dark_theme_suggest_dialog_stay_on_light_side">"Zůstat na Světlé straně"</string>
7277
</resources>

xabber/src/main/res/values-de-rDE/contact_list.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
<string name="show_offline_never">Niemals anzeigen</string>
5656
<string name="show_offline_normal">Globale Einstellungen benutzen</string>
5757
<string name="show_offline_settings">Offline Kontakte anzeigen</string>
58+
<string name="start_at_boot">Beim Start ausführen</string>
5859
<string name="start_at_boot_suggest">Xabber beim Start von Android starten?\nDies kann unter \"Einstellungen\" → \"Verbindungseinstellungen\" → \"Mit Android starten\" geändert werden.</string>
5960
<string name="contact_search_hint">Kontakte suchen</string>
6061
<string name="sender_is_you">Ich</string>
@@ -69,4 +70,8 @@
6970
<string name="unblock_all_contacts_confirm">Wollen Sie wirklich alle Kontakte von %1$s Konto entsperren?</string>
7071
<string name="unblock_all">Alle entsperren</string>
7172
<string name="unblock_selected">Ausgewählte entsperren</string>
73+
<string name="dark_theme_suggest_dialog_title">Wählen Sie Ihr Schicksal</string>
74+
<string name="dark_theme_suggest_dialog_message">Das neue Dark-Theme ist jetzt verfügbar für Jabber. Können Sie der Versuchung widerstehen es zu benutzen?</string>
75+
<string name="dark_theme_suggest_dialog_join_dark_side">Der dunklen Seite anschließen</string>
76+
<string name="dark_theme_suggest_dialog_stay_on_light_side">"Auf der hellen Seite bleiben"</string>
7277
</resources>

0 commit comments

Comments
 (0)