aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/de/pixart/messenger/entities/Conversation.java45
-rw-r--r--src/main/java/de/pixart/messenger/services/UpdateService.java12
-rw-r--r--src/main/java/de/pixart/messenger/services/XmppConnectionService.java180
-rw-r--r--src/main/java/de/pixart/messenger/ui/ContactDetailsActivity.java21
-rw-r--r--src/main/java/de/pixart/messenger/ui/ConversationsActivity.java17
-rw-r--r--src/main/java/de/pixart/messenger/ui/UpdaterActivity.java24
-rw-r--r--src/main/res/values/strings.xml1
7 files changed, 179 insertions, 121 deletions
diff --git a/src/main/java/de/pixart/messenger/entities/Conversation.java b/src/main/java/de/pixart/messenger/entities/Conversation.java
index fe89009d3..cc995a30b 100644
--- a/src/main/java/de/pixart/messenger/entities/Conversation.java
+++ b/src/main/java/de/pixart/messenger/entities/Conversation.java
@@ -165,47 +165,61 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
}
public void findWaitingMessages(OnMessageFound onMessageFound) {
+ final ArrayList<Message> results = new ArrayList<>();
synchronized (this.messages) {
for (Message message : this.messages) {
if (message.getStatus() == Message.STATUS_WAITING) {
- onMessageFound.onMessageFound(message);
+ results.add(message);
}
}
}
+ for (Message result : results) {
+ onMessageFound.onMessageFound(result);
+ }
}
public void findUnreadMessages(OnMessageFound onMessageFound) {
+ final ArrayList<Message> results = new ArrayList<>();
synchronized (this.messages) {
for (Message message : this.messages) {
if (!message.isRead()) {
- onMessageFound.onMessageFound(message);
+ results.add(message);
}
}
}
+ for (Message result : results) {
+ onMessageFound.onMessageFound(result);
+ }
}
public void findMessagesWithFiles(final OnMessageFound onMessageFound) {
+ final ArrayList<Message> results = new ArrayList<>();
synchronized (this.messages) {
- for (final Message message : this.messages) {
- if ((message.getType() == Message.TYPE_IMAGE || message.getType() == Message.TYPE_FILE)
- && message.getEncryption() != Message.ENCRYPTION_PGP) {
- onMessageFound.onMessageFound(message);
+ for (final Message m : this.messages) {
+ if (m.isFileOrImage() && m.getEncryption() != Message.ENCRYPTION_PGP) {
+ results.add(m);
}
}
}
+ for (Message result : results) {
+ onMessageFound.onMessageFound(result);
+ }
}
public void findFailedMessagesWithFiles(final OnMessageFound onMessageFound) {
+ final ArrayList<Message> results = new ArrayList<>();
synchronized (this.messages) {
- for (final Message message : this.messages) {
- if ((message.getType() == Message.TYPE_IMAGE || message.getType() == Message.TYPE_FILE)
- && message.getEncryption() != Message.ENCRYPTION_PGP) {
- if (message.getStatus() == Message.STATUS_SEND_FAILED && !message.isDeleted() && message.needsUploading()) {
- onMessageFound.onMessageFound(message);
+ for (final Message m : this.messages) {
+ if (m.isFileOrImage() && m.getEncryption() != Message.ENCRYPTION_PGP) {
+ if (m.getStatus() == Message.STATUS_SEND_FAILED && !m.isDeleted() && m.needsUploading()) {
+ results.add(m);
}
}
}
}
+ for(Message result : results) {
+ onMessageFound.onMessageFound(result);
+ }
}
public Message findMessageWithFileAndUuid(final String uuid) {
@@ -281,14 +295,17 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
}
public void findUnsentTextMessages(OnMessageFound onMessageFound) {
+ final ArrayList<Message> results = new ArrayList<>();
synchronized (this.messages) {
for (Message message : this.messages) {
- if (message.getType() != Message.TYPE_IMAGE
- && message.getStatus() == Message.STATUS_UNSEND) {
- onMessageFound.onMessageFound(message);
+ if (message.getType() != Message.TYPE_IMAGE && message.getStatus() == Message.STATUS_UNSEND) {
+ results.add(message);
}
}
}
+ for(Message result : results) {
+ onMessageFound.onMessageFound(result);
+ }
}
public Message findSentMessageWithUuidOrRemoteId(String id) {
diff --git a/src/main/java/de/pixart/messenger/services/UpdateService.java b/src/main/java/de/pixart/messenger/services/UpdateService.java
index 7e636b8e6..3b3829290 100644
--- a/src/main/java/de/pixart/messenger/services/UpdateService.java
+++ b/src/main/java/de/pixart/messenger/services/UpdateService.java
@@ -32,13 +32,13 @@ import static de.pixart.messenger.services.NotificationService.UPDATE_NOTIFICATI
public class UpdateService extends AsyncTask<String, Object, UpdateService.Wrapper> {
private boolean mUseTor;
private Context context;
- private boolean playstore;
+ private String store;
public UpdateService() {
}
- public UpdateService(Context context, boolean PlayStore, XmppConnectionService mXmppConnectionService) {
+ public UpdateService(Context context, String Store, XmppConnectionService mXmppConnectionService) {
this.context = context;
- this.playstore = PlayStore;
+ this.store = Store;
this.mUseTor = mXmppConnectionService.useTorToConnect();
}
@@ -94,7 +94,7 @@ public class UpdateService extends AsyncTask<String, Object, UpdateService.Wrapp
if (checkVersion(version, ownVersion) >= 1) {
Log.d(Config.LOGTAG, "AppUpdater: Version " + ownVersion + " should be updated to " + version);
UpdateAvailable = true;
- showNotification(url, changelog, version, filesize, playstore);
+ showNotification(url, changelog, version, filesize, store);
} else {
Log.d(Config.LOGTAG, "AppUpdater: Version " + ownVersion + " is up to date");
UpdateAvailable = false;
@@ -138,12 +138,12 @@ public class UpdateService extends AsyncTask<String, Object, UpdateService.Wrapp
});
}
- private void showNotification(String url, String changelog, String version, String filesize, boolean playstore) {
+ private void showNotification(String url, String changelog, String version, String filesize, String store) {
Intent intent = new Intent(context, UpdaterActivity.class);
intent.putExtra("update", "PixArtMessenger_UpdateService");
intent.putExtra("url", url);
intent.putExtra("changelog", changelog);
- intent.putExtra("playstore", playstore);
+ intent.putExtra("store", store);
PendingIntent pi = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
final NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context);
diff --git a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
index 7f7d319aa..e50f0d9e2 100644
--- a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
+++ b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
@@ -169,6 +169,9 @@ public class XmppConnectionService extends Service {
public static final String ACTION_FCM_MESSAGE_RECEIVED = "fcm_message_received";
private static final String ACTION_MERGE_PHONE_CONTACTS = "merge_phone_contacts";
private static final String SETTING_LAST_ACTIVITY_TS = "last_activity_timestamp";
+ public static final String FDroid = "org.fdroid.fdroid";
+ public static final String PlayStore = "com.android.vending";
+ public static final String Yalp = "com.github.yeriomin.yalpstore";
static {
URL.setURLStreamHandlerFactory(new CustomURLStreamHandlerFactory());
@@ -1482,13 +1485,7 @@ public class XmppConnectionService extends Service {
}
private void sendUnsentMessages(final Conversation conversation) {
- conversation.findWaitingMessages(new Conversation.OnMessageFound() {
-
- @Override
- public void onMessageFound(Message message) {
- resendMessage(message, true);
- }
- });
+ conversation.findWaitingMessages(message -> resendMessage(message, true));
}
private void resendFailedFileMessages(final Conversation conversation) {
@@ -2146,165 +2143,196 @@ public class XmppConnectionService extends Service {
}
public void setOnConversationListChangedListener(OnConversationUpdate listener) {
+ final boolean remainingListeners;
synchronized (LISTENER_LOCK) {
- if (checkListeners()) {
- switchToForeground();
- }
+ remainingListeners = checkListeners();
if (!this.mOnConversationUpdates.add(listener)) {
- Log.w(Config.LOGTAG, listener.getClass().getName() + " is already registered as ConversationListChangedListener");
+ Log.w(Config.LOGTAG,listener.getClass().getName()+" is already registered as ConversationListChangedListener");
}
this.mNotificationService.setIsInForeground(this.mOnConversationUpdates.size() > 0);
}
+ if (remainingListeners) {
+ switchToForeground();
+ }
}
public void removeOnConversationListChangedListener(OnConversationUpdate listener) {
+ final boolean remainingListeners;
synchronized (LISTENER_LOCK) {
this.mOnConversationUpdates.remove(listener);
- Log.d(Config.LOGTAG, "XmppConnectionService removeOnConversationListChangedListener(): setIsInForeground = " + (this.mOnConversationUpdates.size() > 0));
this.mNotificationService.setIsInForeground(this.mOnConversationUpdates.size() > 0);
- if (checkListeners()) {
- switchToBackground();
- }
+ remainingListeners = checkListeners();
+ }
+ if (remainingListeners) {
+ switchToBackground();
}
}
public void setOnShowErrorToastListener(OnShowErrorToast listener) {
+ final boolean remainingListeners;
synchronized (LISTENER_LOCK) {
- if (checkListeners()) {
- switchToForeground();
- }
+ remainingListeners = checkListeners();
if (!this.mOnShowErrorToasts.add(listener)) {
- Log.w(Config.LOGTAG, listener.getClass().getName() + " is already registered as OnShowErrorToastListener");
+ Log.w(Config.LOGTAG,listener.getClass().getName()+" is already registered as OnShowErrorToastListener");
}
}
+ if (remainingListeners) {
+ switchToForeground();
+ }
}
public void removeOnShowErrorToastListener(OnShowErrorToast onShowErrorToast) {
+ final boolean remainingListeners;
synchronized (LISTENER_LOCK) {
this.mOnShowErrorToasts.remove(onShowErrorToast);
- if (checkListeners()) {
- switchToBackground();
- }
+ remainingListeners = checkListeners();
+ }
+ if (remainingListeners) {
+ switchToBackground();
}
}
public void setOnAccountListChangedListener(OnAccountUpdate listener) {
+ final boolean remainingListeners;
synchronized (LISTENER_LOCK) {
- if (checkListeners()) {
- switchToForeground();
- }
+ remainingListeners = checkListeners();
if (!this.mOnAccountUpdates.add(listener)) {
- Log.w(Config.LOGTAG, listener.getClass().getName() + " is already registered as OnAccountListChangedtListener");
+ Log.w(Config.LOGTAG,listener.getClass().getName()+" is already registered as OnAccountListChangedtListener");
}
}
+ if (remainingListeners) {
+ switchToForeground();
+ }
}
public void removeOnAccountListChangedListener(OnAccountUpdate listener) {
+ final boolean remainingListeners;
synchronized (LISTENER_LOCK) {
this.mOnAccountUpdates.remove(listener);
- if (checkListeners()) {
- switchToBackground();
- }
+ remainingListeners = checkListeners();
+ }
+ if (remainingListeners) {
+ switchToBackground();
}
}
public void setOnCaptchaRequestedListener(OnCaptchaRequested listener) {
+ final boolean remainingListeners;
synchronized (LISTENER_LOCK) {
- if (checkListeners()) {
- switchToForeground();
- }
+ remainingListeners = checkListeners();
if (!this.mOnCaptchaRequested.add(listener)) {
- Log.w(Config.LOGTAG, listener.getClass().getName() + " is already registered as OnCaptchaRequestListener");
+ Log.w(Config.LOGTAG,listener.getClass().getName()+" is already registered as OnCaptchaRequestListener");
}
}
+ if (remainingListeners) {
+ switchToForeground();
+ }
}
public void removeOnCaptchaRequestedListener(OnCaptchaRequested listener) {
+ final boolean remainingListeners;
synchronized (LISTENER_LOCK) {
this.mOnCaptchaRequested.remove(listener);
- if (checkListeners()) {
- switchToBackground();
- }
+ remainingListeners = checkListeners();
+ }
+ if (remainingListeners) {
+ switchToBackground();
}
}
public void setOnRosterUpdateListener(final OnRosterUpdate listener) {
+ final boolean remainingListeners;
synchronized (LISTENER_LOCK) {
- if (checkListeners()) {
- switchToForeground();
- }
+ remainingListeners = checkListeners();
if (!this.mOnRosterUpdates.add(listener)) {
- Log.w(Config.LOGTAG, listener.getClass().getName() + " is already registered as OnRosterUpdateListener");
+ Log.w(Config.LOGTAG,listener.getClass().getName()+" is already registered as OnRosterUpdateListener");
}
}
+ if (remainingListeners) {
+ switchToForeground();
+ }
}
public void removeOnRosterUpdateListener(final OnRosterUpdate listener) {
+ final boolean remainingListeners;
synchronized (LISTENER_LOCK) {
this.mOnRosterUpdates.remove(listener);
- if (checkListeners()) {
- switchToBackground();
- }
+ remainingListeners = checkListeners();
+ }
+ if (remainingListeners) {
+ switchToBackground();
}
}
public void setOnUpdateBlocklistListener(final OnUpdateBlocklist listener) {
+ final boolean remainingListeners;
synchronized (LISTENER_LOCK) {
- if (checkListeners()) {
- switchToForeground();
- }
+ remainingListeners = checkListeners();
if (!this.mOnUpdateBlocklist.add(listener)) {
- Log.w(Config.LOGTAG, listener.getClass().getName() + " is already registered as OnUpdateBlocklistListener");
+ Log.w(Config.LOGTAG,listener.getClass().getName()+" is already registered as OnUpdateBlocklistListener");
}
}
+ if (remainingListeners) {
+ switchToForeground();
+ }
}
public void removeOnUpdateBlocklistListener(final OnUpdateBlocklist listener) {
+ final boolean remainingListeners;
synchronized (LISTENER_LOCK) {
this.mOnUpdateBlocklist.remove(listener);
- if (checkListeners()) {
- switchToBackground();
- }
+ remainingListeners = checkListeners();
+ }
+ if (remainingListeners) {
+ switchToBackground();
}
}
public void setOnKeyStatusUpdatedListener(final OnKeyStatusUpdated listener) {
+ final boolean remainingListeners;
synchronized (LISTENER_LOCK) {
- if (checkListeners()) {
- switchToForeground();
- }
+ remainingListeners = checkListeners();
if (!this.mOnKeyStatusUpdated.add(listener)) {
- Log.w(Config.LOGTAG, listener.getClass().getName() + " is already registered as OnKeyStatusUpdateListener");
+ Log.w(Config.LOGTAG,listener.getClass().getName()+" is already registered as OnKeyStatusUpdateListener");
}
}
+ if (remainingListeners) {
+ switchToForeground();
+ }
}
public void removeOnNewKeysAvailableListener(final OnKeyStatusUpdated listener) {
+ final boolean remainingListeners;
synchronized (LISTENER_LOCK) {
this.mOnKeyStatusUpdated.remove(listener);
- if (checkListeners()) {
- switchToBackground();
- }
+ remainingListeners = checkListeners();
+ }
+ if (remainingListeners) {
+ switchToBackground();
}
}
public void setOnMucRosterUpdateListener(OnMucRosterUpdate listener) {
+ final boolean remainingListeners;
synchronized (LISTENER_LOCK) {
- if (checkListeners()) {
- switchToForeground();
- }
+ remainingListeners = checkListeners();
if (!this.mOnMucRosterUpdate.add(listener)) {
- Log.w(Config.LOGTAG, listener.getClass().getName() + " is already registered as OnMucRosterListener");
+ Log.w(Config.LOGTAG,listener.getClass().getName()+" is already registered as OnMucRosterListener");
}
}
+ if (remainingListeners) {
+ switchToForeground();
+ }
}
public void removeOnMucRosterUpdateListener(final OnMucRosterUpdate listener) {
+ final boolean remainingListeners;
synchronized (LISTENER_LOCK) {
this.mOnMucRosterUpdate.remove(listener);
- if (checkListeners()) {
- switchToBackground();
- }
+ remainingListeners = checkListeners();
+ }
+ if (remainingListeners) {
+ switchToBackground();
}
}
@@ -3439,13 +3467,7 @@ public class XmppConnectionService extends Service {
Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": reset 'sending' messages to 'waiting'");
for (Conversation conversation : getConversations()) {
if (conversation.getAccount() == account) {
- conversation.findUnsentTextMessages(new Conversation.OnMessageFound() {
-
- @Override
- public void onMessageFound(Message message) {
- markMessage(message, Message.STATUS_WAITING);
- }
- });
+ conversation.findUnsentTextMessages(message -> markMessage(message, Message.STATUS_WAITING));
}
}
}
@@ -4288,20 +4310,16 @@ public class XmppConnectionService extends Service {
}
}
- public boolean installedFromFDroid() {
- final PackageManager packageManager = this.getPackageManager();
- final String packageID = BuildConfig.APPLICATION_ID;
- final String installedFrom = packageManager.getInstallerPackageName(packageID);
- Log.d(Config.LOGTAG, "Messenger installed from " + installedFrom);
- return installedFrom != null && installedFrom.contains("org.fdroid.fdroid");
- }
-
- public boolean installedFromPlayStore() {
+ public String installedFrom() {
final PackageManager packageManager = this.getPackageManager();
final String packageID = BuildConfig.APPLICATION_ID;
final String installedFrom = packageManager.getInstallerPackageName(packageID);
Log.d(Config.LOGTAG, "Messenger installed from " + installedFrom);
- return installedFrom != null && (installedFrom.contains("com.android.vending") || installedFrom.contains("com.github.yeriomin.yalpstore"));
+ if (installedFrom != null) {
+ return installedFrom;
+ } else {
+ return null;
+ }
}
public ShortcutService getShortcutService() {
diff --git a/src/main/java/de/pixart/messenger/ui/ContactDetailsActivity.java b/src/main/java/de/pixart/messenger/ui/ContactDetailsActivity.java
index 4919a4251..5dce3fca2 100644
--- a/src/main/java/de/pixart/messenger/ui/ContactDetailsActivity.java
+++ b/src/main/java/de/pixart/messenger/ui/ContactDetailsActivity.java
@@ -1,5 +1,6 @@
package de.pixart.messenger.ui;
+import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
@@ -116,12 +117,14 @@ public class ContactDetailsActivity extends OmemoActivity implements OnAccountUp
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
intent.setType(Contacts.CONTENT_ITEM_TYPE);
- intent.putExtra(Intents.Insert.IM_HANDLE, contact.getJid().toString());
- intent.putExtra(Intents.Insert.IM_PROTOCOL,
- CommonDataKinds.Im.PROTOCOL_JABBER);
+ intent.putExtra(Intents.Insert.IM_HANDLE, contact.getJid().toEscapedString());
+ intent.putExtra(Intents.Insert.IM_PROTOCOL, CommonDataKinds.Im.PROTOCOL_JABBER);
intent.putExtra("finishActivityOnSaveCompleted", true);
- ContactDetailsActivity.this.startActivityForResult(intent, 0);
- overridePendingTransition(R.animator.fade_in, R.animator.fade_out);
+ try {
+ ContactDetailsActivity.this.startActivityForResult(intent, 0);
+ } catch (ActivityNotFoundException e) {
+ Toast.makeText(ContactDetailsActivity.this, R.string.no_application_found_to_view_contact, Toast.LENGTH_SHORT).show();
+ }
}
};
@@ -308,8 +311,12 @@ public class ContactDetailsActivity extends OmemoActivity implements OnAccountUp
Intent intent = new Intent(Intent.ACTION_EDIT);
intent.setDataAndType(systemAccount, Contacts.CONTENT_ITEM_TYPE);
intent.putExtra("finishActivityOnSaveCompleted", true);
- startActivity(intent);
- overridePendingTransition(R.animator.fade_in, R.animator.fade_out);
+ try {
+ startActivity(intent);
+ overridePendingTransition(R.animator.fade_in, R.animator.fade_out);
+ } catch (ActivityNotFoundException e) {
+ Toast.makeText(ContactDetailsActivity.this, R.string.no_application_found_to_view_contact, Toast.LENGTH_SHORT).show();
+ }
}
break;
case R.id.action_block:
diff --git a/src/main/java/de/pixart/messenger/ui/ConversationsActivity.java b/src/main/java/de/pixart/messenger/ui/ConversationsActivity.java
index 67618dc65..f2e4dc2b6 100644
--- a/src/main/java/de/pixart/messenger/ui/ConversationsActivity.java
+++ b/src/main/java/de/pixart/messenger/ui/ConversationsActivity.java
@@ -93,6 +93,7 @@ import de.pixart.messenger.utils.XmppUri;
import de.pixart.messenger.xmpp.OnUpdateBlocklist;
import de.pixart.messenger.xmpp.chatstate.ChatState;
+import static de.pixart.messenger.services.XmppConnectionService.PlayStore;
import static de.pixart.messenger.ui.ConversationFragment.REQUEST_DECRYPT_PGP;
import static de.pixart.messenger.ui.SettingsActivity.USE_BUNDLED_EMOJIS;
@@ -193,9 +194,7 @@ public class ConversationsActivity extends XmppActivity implements OnConversatio
if (xmppConnectionService.getAccounts().size() != 0) {
if (xmppConnectionService.hasInternetConnection()) {
if (xmppConnectionService.isWIFI() || (xmppConnectionService.isMobile() && !xmppConnectionService.isMobileRoaming())) {
- if (!xmppConnectionService.installedFromFDroid()) {
- AppUpdate(xmppConnectionService.installedFromPlayStore());
- }
+ AppUpdate(xmppConnectionService.installedFrom());
}
}
}
@@ -559,10 +558,10 @@ public class ConversationsActivity extends XmppActivity implements OnConversatio
return true;
case R.id.action_check_updates:
if (xmppConnectionService.hasInternetConnection()) {
- if (!installFromUnknownSourceAllowed() && !xmppConnectionService.installedFromPlayStore()) {
+ if (!installFromUnknownSourceAllowed() && !xmppConnectionService.installedFrom().equals(PlayStore)) {
openInstallFromUnknownSourcesDialogIfNeeded();
} else {
- UpdateService task = new UpdateService(this, xmppConnectionService.installedFromPlayStore(), xmppConnectionService);
+ UpdateService task = new UpdateService(this, xmppConnectionService.installedFrom(), xmppConnectionService);
task.executeOnExecutor(UpdateService.THREAD_POOL_EXECUTOR, "true");
Log.d(Config.LOGTAG, "AppUpdater started");
}
@@ -940,8 +939,8 @@ public class ConversationsActivity extends XmppActivity implements OnConversatio
runOnUiThread(() -> Toast.makeText(this, resId, Toast.LENGTH_SHORT).show());
}
- protected void AppUpdate(boolean PlayStore) {
- if (PlayStore) {
+ protected void AppUpdate(String Store) {
+ if (Store == null) {
return;
}
String PREFS_NAME = "UpdateTimeStamp";
@@ -954,10 +953,10 @@ public class ConversationsActivity extends XmppActivity implements OnConversatio
editor.putLong("lastUpdateTime", lastUpdateTime);
editor.apply();
Log.d(Config.LOGTAG, "AppUpdater: CurrentTime: " + lastUpdateTime);
- if (!installFromUnknownSourceAllowed() && !PlayStore) {
+ if (!installFromUnknownSourceAllowed() && !Store.equals(PlayStore)) {
openInstallFromUnknownSourcesDialogIfNeeded();
} else {
- UpdateService task = new UpdateService(this, PlayStore, xmppConnectionService);
+ UpdateService task = new UpdateService(this, Store, xmppConnectionService);
task.executeOnExecutor(UpdateService.THREAD_POOL_EXECUTOR, "false");
Log.d(Config.LOGTAG, "AppUpdater started");
}
diff --git a/src/main/java/de/pixart/messenger/ui/UpdaterActivity.java b/src/main/java/de/pixart/messenger/ui/UpdaterActivity.java
index 4832dc466..0c59b06c6 100644
--- a/src/main/java/de/pixart/messenger/ui/UpdaterActivity.java
+++ b/src/main/java/de/pixart/messenger/ui/UpdaterActivity.java
@@ -37,13 +37,15 @@ import de.pixart.messenger.services.XmppConnectionService;
import de.pixart.messenger.utils.WakeLockHelper;
import static de.pixart.messenger.http.HttpConnectionManager.getProxy;
+import static de.pixart.messenger.services.XmppConnectionService.FDroid;
+import static de.pixart.messenger.services.XmppConnectionService.PlayStore;
public class UpdaterActivity extends XmppActivity {
static final private String FileName = "update.apk";
String appURI = "";
String changelog = "";
Integer filesize = 0;
- boolean playstore = false;
+ String store;
ProgressDialog mProgressDialog;
DownloadTask downloadTask;
XmppConnectionService mXmppConnectionService;
@@ -104,9 +106,9 @@ public class UpdaterActivity extends XmppActivity {
UpdaterActivity.this.finish();
}
try {
- playstore = getIntent().getBooleanExtra("playstore", false);
+ store = getIntent().getStringExtra("store");
} catch (Exception e) {
- playstore = false;
+ store = null;
}
//delete old downloaded localVersion files
File dir = new File(FileBackend.getConversationsDirectory("Update", false));
@@ -129,7 +131,7 @@ public class UpdaterActivity extends XmppActivity {
//ask for permissions on devices >= SDK 23
if (isStoragePermissionGranted() && isNetworkAvailable(getApplicationContext())) {
//start downloading the file using the download manager
- if (playstore) {
+ if (store.equals(PlayStore)) {
Uri uri = Uri.parse("market://details?id=de.pixart.messenger");
Intent marketIntent = new Intent(Intent.ACTION_VIEW, uri);
PackageManager manager = getApplicationContext().getPackageManager();
@@ -143,6 +145,20 @@ public class UpdaterActivity extends XmppActivity {
startActivity(browserIntent);
overridePendingTransition(R.animator.fade_in, R.animator.fade_out);
}
+ } else if (store.equals(FDroid)) {
+ Uri uri = Uri.parse("https://f-droid.org/de/packages/de.pixart.messenger/");
+ Intent marketIntent = new Intent(Intent.ACTION_VIEW, uri);
+ PackageManager manager = getApplicationContext().getPackageManager();
+ List<ResolveInfo> infos = manager.queryIntentActivities(marketIntent, 0);
+ if (infos.size() > 0) {
+ startActivity(marketIntent);
+ overridePendingTransition(R.animator.fade_in, R.animator.fade_out);
+ } else {
+ uri = Uri.parse("https://f-droid.org/de/packages/de.pixart.messenger/");
+ Intent browserIntent = new Intent(Intent.ACTION_VIEW, uri);
+ startActivity(browserIntent);
+ overridePendingTransition(R.animator.fade_in, R.animator.fade_out);
+ }
} else {
Toast.makeText(getApplicationContext(), getText(R.string.download_started), Toast.LENGTH_LONG).show();
downloadTask = new DownloadTask(UpdaterActivity.this) {
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index 89cecf15f..4a5b4e3c6 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -805,4 +805,5 @@
<string name="conference_resource_constraint">Resource constraint</string>
<string name="delete_message">Delete message</string>
<string name="conference_destroyed">This group chat has been destroyed</string>
+ <string name="no_application_found_to_view_contact">No application found to view contact</string>
</resources>