Commit ad91b14b authored by Grigory Fedorov's avatar Grigory Fedorov

Merge branch 'release/1.0.45'

parents 483b58d5 a0a657b7
......@@ -3,4 +3,4 @@
url = https://github.com/otr4j/otr4j.git
[submodule "app/MemorizingTrustManager"]
path = app/MemorizingTrustManager
url = https://github.com/ge0rg/MemorizingTrustManager.git
url = https://github.com/redsolution/MemorizingTrustManager.git
Subproject commit 8b80fb176542fa96c1028c379be8de7e32c730df
Subproject commit a1cea31efeab968683e461e6b4ab1e0b87293103
......@@ -7,8 +7,8 @@ android {
defaultConfig {
minSdkVersion 14
targetSdkVersion 23
versionCode 217
versionName '1.0.44'
versionCode 218
versionName '1.0.45'
}
compileOptions {
......
......@@ -30,6 +30,7 @@ import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.os.Handler;
import android.os.SystemClock;
import android.support.v4.view.PagerAdapter;
......@@ -85,6 +86,7 @@ public class EmojiconsPopup extends PopupWindow implements ViewPager.OnPageChang
//default size
setSize((int) mContext.getResources().getDimension(R.dimen.keyboard_height), LayoutParams.MATCH_PARENT);
setBackgroundDrawable(new BitmapDrawable());
}
/**
......
......@@ -18,8 +18,6 @@
android:id="@+id/Emoji_GridView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"
android:cacheColorHint="@android:color/transparent"
android:columnWidth="40dip"
android:horizontalSpacing="0dip"
android:numColumns="auto_fit"
......
......@@ -16,9 +16,10 @@
-->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:background="@drawable/keyboard_background_holo"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/darker_gray">
<LinearLayout
android:id="@+id/emojis_tab"
android:layout_width="match_parent"
......@@ -105,15 +106,12 @@
android:id="@+id/emojis_backspace"
android:src="@drawable/sym_keyboard_delete_holo_dark"/>
</LinearLayout>
<android.support.v4.view.ViewPager
android:layout_below="@id/emojis_tab"
android:id="@+id/emojis_pager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"/>
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:layout_below="@id/emojis_tab"
android:background="#8f8f8f"/>
</RelativeLayout>
......@@ -46,6 +46,8 @@ import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import de.duenndns.ssl.MemorizingTrustManager;
/**
* Manage certificate exceptions.
* <p/>
......@@ -402,9 +404,9 @@ public class CertificateManager implements OnLoadListener, OnClearListener {
public void removeCertificates() {
pendingCertificateProvider.clearNotifications();
ignoreCertificates.clear();
for (CertificateInvalidReason reason : CertificateInvalidReason
.values())
for (CertificateInvalidReason reason : CertificateInvalidReason.values()) {
keyStores.put(reason, createKeyStore(reason));
}
Application.getInstance().runInBackground(new Runnable() {
@Override
......@@ -414,5 +416,16 @@ public class CertificateManager implements OnLoadListener, OnClearListener {
}
});
MemorizingTrustManager mtm = new MemorizingTrustManager(Application.getInstance());
final Enumeration<String> certificates = mtm.getCertificates();
while (certificates.hasMoreElements()) {
try {
mtm.deleteCertificate(certificates.nextElement());
} catch (KeyStoreException e) {
e.printStackTrace();
}
}
}
}
......@@ -189,6 +189,7 @@ public class ConnectionThread implements
try {
SSLContext sslContext = SSLContext.getInstance("TLS");
MemorizingTrustManager mtm = new MemorizingTrustManager(Application.getInstance());
mtm.setTrustByDefault(!SettingsManager.securityCheckCertificate());
sslContext.init(null, new X509TrustManager[]{mtm}, new java.security.SecureRandom());
builder.setCustomSSLContext(sslContext);
builder.setHostnameVerifier(
......
......@@ -244,8 +244,9 @@ public class ChatStateManager implements OnDisconnectListener,
if (text.length() == 0) {
updateChatState(account, user, ChatState.active);
return;
} else
} else {
updateChatState(account, user, ChatState.composing);
}
Intent intent = ComposingPausedReceiver.createIntent(
Application.getInstance(), account, user);
PendingIntent pendingIntent = PendingIntent.getBroadcast(
......@@ -261,6 +262,10 @@ public class ChatStateManager implements OnDisconnectListener,
public void onPaused(String account, String user) {
if (account == null || user == null)
return;
if (sent.get(account, user) != ChatState.composing) {
return;
}
updateChatState(account, user, ChatState.paused);
pauseIntents.remove(account, user);
}
......
......@@ -172,7 +172,7 @@ public class MessageManager implements OnLoadListener, OnPacketListener, OnDisco
* @return
*/
private RegularChat createChat(String account, String user) {
RegularChat chat = new RegularChat(account, user);
RegularChat chat = new RegularChat(account, Jid.getBareAddress(user));
addChat(chat);
return chat;
}
......
......@@ -56,6 +56,9 @@ import com.xabber.android.ui.helper.AccountPainter;
import com.xabber.android.ui.helper.ContactTitleInflater;
import com.xabber.android.ui.preferences.ChatContactSettings;
import java.util.Timer;
import java.util.TimerTask;
import github.ankushsachdeva.emojicon.EmojiconGridView;
import github.ankushsachdeva.emojicon.EmojiconsPopup;
import github.ankushsachdeva.emojicon.emoji.Emojicon;
......@@ -86,6 +89,9 @@ public class ChatViewerFragment extends Fragment implements PopupMenu.OnMenuItem
private MessageItem clickedMessageItem;
private AccountPainter accountPainter;
private Timer stopTypingTimer = new Timer();
private final long STOP_TYPING_DELAY = 4000; // in ms
public static ChatViewerFragment newInstance(String account, String user) {
ChatViewerFragment fragment = new ChatViewerFragment();
......@@ -150,7 +156,6 @@ public class ChatViewerFragment extends Fragment implements PopupMenu.OnMenuItem
AbstractChat abstractChat = MessageManager.getInstance().getChat(account, user);
securityButton = (ImageButton) view.findViewById(R.id.button_security);
View spacer = view.findViewById(R.id.button_security_spacer);
if (abstractChat instanceof RegularChat) {
securityButton.setOnClickListener(new View.OnClickListener() {
......@@ -161,7 +166,6 @@ public class ChatViewerFragment extends Fragment implements PopupMenu.OnMenuItem
});
} else {
securityButton.setVisibility(View.GONE);
spacer.setVisibility(View.VISIBLE);
}
chatMessageAdapter = new ChatMessageAdapter(getActivity(), account, user, this);
......@@ -202,6 +206,9 @@ public class ChatViewerFragment extends Fragment implements PopupMenu.OnMenuItem
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (!skipOnTextChanges && stopTypingTimer != null) {
stopTypingTimer.cancel();
}
}
@Override
......@@ -212,10 +219,25 @@ public class ChatViewerFragment extends Fragment implements PopupMenu.OnMenuItem
public void afterTextChanged(Editable text) {
setUpInputViewButtons();
if (!skipOnTextChanges) {
ChatStateManager.getInstance().onComposing(account, user, text);
if (skipOnTextChanges) {
return;
}
ChatStateManager.getInstance().onComposing(account, user, text);
stopTypingTimer = new Timer();
stopTypingTimer.schedule(new TimerTask() {
@Override
public void run() {
Application.getInstance().runOnUiThread(new Runnable() {
@Override
public void run() {
ChatStateManager.getInstance().onPaused(account, user);
}
});
}
}, STOP_TYPING_DELAY);
}
});
......@@ -404,6 +426,9 @@ public class ChatViewerFragment extends Fragment implements PopupMenu.OnMenuItem
@Override
public void onPause() {
super.onPause();
ChatStateManager.getInstance().onPaused(account, user);
saveInputState();
listener.unregisterChat(this);
}
......
......@@ -17,6 +17,7 @@ package com.xabber.android.ui;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.NavUtils;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
......@@ -35,7 +36,7 @@ import com.xabber.android.ui.helper.AccountPainter;
import com.xabber.android.ui.helper.BarPainter;
import com.xabber.android.ui.helper.SingleActivity;
public class ContactSubscription extends SingleActivity implements View.OnClickListener {
public class ContactSubscription extends SingleActivity implements View.OnClickListener, ContactVcardViewerFragment.Listener {
private String account;
private String user;
......@@ -71,10 +72,14 @@ public class ContactSubscription extends SingleActivity implements View.OnClickL
setContentView(R.layout.contact_subscription);
Toolbar toolbar = (Toolbar) findViewById(R.id.top_toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
toolbar.setTitle(getString(R.string.subscription_request_message));
toolbar.setNavigationIcon(R.drawable.ic_clear_white_24dp);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
BarPainter barPainter = new BarPainter(this, toolbar);
barPainter.updateWithAccountName(account);
......@@ -142,4 +147,8 @@ public class ContactSubscription extends SingleActivity implements View.OnClickL
finish();
}
@Override
public void onVCardReceived() {
}
}
......@@ -74,13 +74,6 @@
android:alpha="0.5"
/>
<Space
android:id="@+id/button_security_spacer"
android:layout_width="16dp"
android:layout_height="match_parent"
android:visibility="gone"
/>
<github.ankushsachdeva.emojicon.EmojiconEditText
android:id="@+id/chat_input"
android:layout_width="0dp"
......
......@@ -439,7 +439,7 @@
<!-- preference_security -->
<string name="security_check_certificate_key">security_check_certificate</string>
<bool name="security_check_certificate_default">false</bool>
<bool name="security_check_certificate_default">true</bool>
<string name="security_clear_certificate_key">security_clear_certificate</string>
......
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