diff --git a/.idea/copyright/GPL3.xml b/.idea/copyright/GPL3.xml
index 8a6afea9b..421c5b53b 100644
--- a/.idea/copyright/GPL3.xml
+++ b/.idea/copyright/GPL3.xml
@@ -1,6 +1,7 @@
-
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 7cf5d455e..b67a39049 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,6 +1,27 @@
+/*
+ * Nextcloud Talk application
+ *
+ * @author Mario Danic
+ * Copyright (C) 2017-2019 Mario Danic
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'findbugs'
+apply plugin: 'kotlin-kapt'
def taskRequest = getGradle().getStartParameter().getTaskRequests().toString()
if (taskRequest.contains("Gplay") || taskRequest.contains("findbugs") || taskRequest.contains("lint")) {
@@ -17,8 +38,8 @@ android {
targetSdkVersion 28
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
- versionCode 92
- versionName "6.0.0beta4"
+ versionCode 93
+ versionName "6.0.0"
flavorDimensions "default"
renderscriptTargetApi 19
@@ -110,8 +131,9 @@ configurations.all {
exclude group: 'com.google.firebase', module: 'firebase-measurement-connector'
}
+
dependencies {
- implementation fileTree(dir: 'libs', include: ['*.jar'])
+ implementation fileTree(include: ['*'], dir: 'libs')
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'com.google.android.material:material:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha4'
@@ -121,6 +143,13 @@ dependencies {
implementation "android.arch.work:work-rxjava2:${workVersion}"
implementation 'com.google.android:flexbox:1.1.0'
androidTestImplementation "android.arch.work:work-testing:${workVersion}"
+ implementation ('com.gitlab.bitfireAT:dav4jvm:f2078bc846', {
+ exclude group: 'org.ogce', module: 'xpp3' // Android comes with its own XmlPullParser
+ })
+ compile 'org.conscrypt:conscrypt-android:2.0.0'
+
+
+ implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0'
implementation 'androidx.biometric:biometric:1.0.0-alpha04'
implementation "androidx.lifecycle:lifecycle-extensions:2.0.0"
@@ -139,76 +168,57 @@ dependencies {
implementation 'com.bluelinelabs:logansquare:1.3.7'
implementation group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.9.8'
- annotationProcessor 'com.bluelinelabs:logansquare-compiler:1.3.7'
+ kapt 'com.bluelinelabs:logansquare-compiler:1.3.7'
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.5.0'
implementation 'com.github.aurae.retrofit2:converter-logansquare:1.4.1'
implementation 'com.google.dagger:dagger:2.21'
- annotationProcessor 'com.google.dagger:dagger-compiler:2.21'
+ kapt 'com.google.dagger:dagger-compiler:2.21'
implementation 'com.github.lukaspili.autodagger2:autodagger2:1.1'
- annotationProcessor 'com.github.lukaspili.autodagger2:autodagger2-compiler:1.1'
-
- compileOnly 'javax.annotation:jsr250-api:1.0' // Android only
-
+ kapt 'com.github.lukaspili.autodagger2:autodagger2-compiler:1.1'
+ compileOnly 'javax.annotation:jsr250-api:1.0'
+ // Android only
implementation 'org.greenrobot:eventbus:3.1.1'
-
implementation 'io.requery:requery:1.5.1'
implementation 'io.requery:requery-android:1.5.1'
implementation 'net.zetetic:android-database-sqlcipher:3.5.9'
- annotationProcessor 'io.requery:requery-processor:1.5.1'
-
+ kapt 'io.requery:requery-processor:1.5.1'
implementation 'org.parceler:parceler-api:1.1.12'
- annotationProcessor 'org.parceler:parceler:1.1.12'
-
+ kapt 'org.parceler:parceler:1.1.12'
implementation 'net.orange-box.storebox:storebox-lib:1.4.0'
-
- compileOnly "org.projectlombok:lombok:1.18.6"
+ compileOnly 'org.projectlombok:lombok:1.18.6'
annotationProcessor "org.projectlombok:lombok:1.18.6"
-
implementation 'com.jakewharton:butterknife:10.1.0'
- annotationProcessor 'com.jakewharton:butterknife-compiler:10.1.0'
-
+ kapt 'com.jakewharton:butterknife-compiler:10.1.0'
implementation 'com.github.HITGIF:TextFieldBoxes:1.4.3'
-
implementation 'eu.davidea:flexible-adapter:5.1.0'
implementation 'eu.davidea:flexible-adapter-ui:1.0.0'
-
- implementation 'com.github.bumptech.glide:glide:4.9.0'
- annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
- implementation 'com.github.bumptech.glide:okhttp3-integration:4.9.0@aar'
- implementation 'com.facebook.fresco:fresco:1.13.0'
- implementation 'com.facebook.fresco:animated-webp:1.13.0'
- implementation 'com.facebook.fresco:webpsupport:1.13.0'
- implementation 'com.facebook.fresco:animated-gif:1.13.0'
- implementation "com.facebook.fresco:imagepipeline-okhttp3:1.13.0"
implementation 'org.webrtc:google-webrtc:1.0.23295'
implementation "org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}"
-
implementation 'com.yarolegovich:lovely-dialog:1.1.0'
implementation 'com.yarolegovich:lovelyinput:1.0.9'
implementation 'com.yarolegovich:mp:1.0.9'
-
implementation 'me.zhanghai.android.effortlesspermissions:library:1.1.0'
-
- implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.8.1'
-
+ implementation 'org.apache.commons:commons-lang3:3.8.1'
implementation 'com.github.wooplr:Spotlight:1.3'
+ implementation('com.github.mario:chatkit:d63d61db95', {
+ exclude group: 'com.facebook.fresco'
+ })
- implementation 'com.github.mario:chatkit:d63d61db95'
+ implementation 'com.mario.fresco:fresco:1.11.1-headers'
+ implementation 'com.mario.fresco:animated-webp:1.11.1-headers'
+ implementation 'com.mario.fresco:webpsupport:1.11.1-headers'
+ implementation 'com.mario.fresco:animated-gif:1.11.1-headers'
+ implementation "com.mario.fresco:imagepipeline-okhttp3:1.11.1-headers"
implementation 'com.github.natario1:Autocomplete:v1.1.0'
implementation 'com.github.Kennyc1012:BottomSheet:2.4.1'
- implementation 'eu.davidea:flipview:1.2.0'
implementation 'com.github.mario:PopupBubble:a365177d96'
-
implementation 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1'
- implementation 'com.kevalpatel2106:emoticongifkeyboard:1.1'
-
- implementation group: 'eu.medsea.mimeutil', name: 'mime-util', version: '2.1.3'
-
+ implementation 'eu.medsea.mimeutil:mime-util:2.1.3'
testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-core:2.26.0'
testImplementation 'org.powermock:powermock-core:2.0.0'
@@ -218,7 +228,14 @@ dependencies {
androidTestImplementation ('androidx.test.espresso:espresso-core:3.1.0-alpha4', {
exclude group: 'com.android.support', module: 'support-annotations'
})
-
findbugsPlugins 'com.h3xstream.findsecbugs:findsecbugs-plugin:1.8.0'
findbugsPlugins 'com.mebigfatguy.fb-contrib:fb-contrib:7.4.3'
}
+
+gradle.projectsEvaluated {
+ tasks.withType(JavaCompile) {
+ options.compilerArgs +=
+ ['-Adagger.floatingBindsMethods=enabled',
+ '-AparcelerStacktrace',]
+ }
+}
diff --git a/app/gplay.gradle b/app/gplay.gradle
index 32b727920..e22deaf3a 100644
--- a/app/gplay.gradle
+++ b/app/gplay.gradle
@@ -1,3 +1,23 @@
+/*
+ * Nextcloud Talk application
+ *
+ * @author Mario Danic
+ * Copyright (C) 2017-2019 Mario Danic
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
dependencies {
implementation "com.google.firebase:firebase-messaging:17.3.4"
}
diff --git a/app/src/gplay/AndroidManifest.xml b/app/src/gplay/AndroidManifest.xml
index 2f388c5f5..d01c10ff7 100644
--- a/app/src/gplay/AndroidManifest.xml
+++ b/app/src/gplay/AndroidManifest.xml
@@ -1,3 +1,23 @@
+
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78dbc8c2c..22facacdf 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,3 +1,23 @@
+
+
diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/AdvancedUserItem.java b/app/src/main/java/com/nextcloud/talk/adapters/items/AdvancedUserItem.java
index 40a502e53..529b98bcb 100644
--- a/app/src/main/java/com/nextcloud/talk/adapters/items/AdvancedUserItem.java
+++ b/app/src/main/java/com/nextcloud/talk/adapters/items/AdvancedUserItem.java
@@ -26,26 +26,23 @@ import android.widget.*;
import androidx.annotation.Nullable;
import butterknife.BindView;
import butterknife.ButterKnife;
-import com.bumptech.glide.load.engine.DiskCacheStrategy;
-import com.bumptech.glide.load.model.GlideUrl;
-import com.bumptech.glide.load.model.LazyHeaders;
-import com.bumptech.glide.load.resource.bitmap.CircleCrop;
-import com.bumptech.glide.request.RequestOptions;
+import com.facebook.drawee.backends.pipeline.Fresco;
+import com.facebook.drawee.interfaces.DraweeController;
+import com.facebook.drawee.view.SimpleDraweeView;
import com.nextcloud.talk.R;
import com.nextcloud.talk.application.NextcloudTalkApplication;
import com.nextcloud.talk.models.database.UserEntity;
import com.nextcloud.talk.models.json.participants.Participant;
import com.nextcloud.talk.utils.ApiUtils;
-import com.nextcloud.talk.utils.glide.GlideApp;
+import com.nextcloud.talk.utils.DisplayUtils;
import eu.davidea.flexibleadapter.FlexibleAdapter;
import eu.davidea.flexibleadapter.items.AbstractFlexibleItem;
import eu.davidea.flexibleadapter.items.IFilterable;
import eu.davidea.flexibleadapter.utils.FlexibleUtils;
-import eu.davidea.flipview.FlipView;
import eu.davidea.viewholders.FlexibleViewHolder;
-import org.apache.commons.lang3.StringUtils;
import java.util.List;
+import java.util.regex.Pattern;
public class AdvancedUserItem extends AbstractFlexibleItem implements
IFilterable {
@@ -116,23 +113,15 @@ public class AdvancedUserItem extends AbstractFlexibleItem implements IFilterable {
@@ -134,21 +130,14 @@ public class CallItem extends AbstractFlexibleItem
.nc_description_more_menu_one_to_one), conversation.getDisplayName()));
if (!TextUtils.isEmpty(conversation.getName())) {
- GlideUrl glideUrl = new GlideUrl(ApiUtils.getUrlForAvatarWithName(userEntity.getBaseUrl(),
- conversation.getName(), R.dimen.avatar_size), new LazyHeaders.Builder()
- .setHeader("Accept", "image/*")
- .setHeader("User-Agent", ApiUtils.getUserAgent())
- .build());
-
- GlideApp.with(NextcloudTalkApplication.getSharedApplication().getApplicationContext())
- .asBitmap()
- .diskCacheStrategy(DiskCacheStrategy.NONE)
- .load(glideUrl)
- .centerInside()
- .override(avatarSize, avatarSize)
- .apply(RequestOptions.bitmapTransform(new CircleCrop()))
- .into(holder.avatarImageView.getFrontImageView());
-
+ DraweeController draweeController = Fresco.newDraweeControllerBuilder()
+ .setOldController(holder.avatarImageView.getController())
+ .setAutoPlayAnimations(true)
+ .setImageRequest(DisplayUtils.getImageRequestForUrl(ApiUtils.getUrlForAvatarWithName(userEntity.getBaseUrl(),
+ conversation.getLastMessage().getActorId(),
+ R.dimen.avatar_size), null))
+ .build();
+ holder.avatarImageView.setController(draweeController);
} else {
holder.avatarImageView.setVisibility(View.GONE);
}
@@ -156,19 +145,13 @@ public class CallItem extends AbstractFlexibleItem
case ROOM_GROUP_CALL:
holder.moreMenuButton.setContentDescription(String.format(resources.getString(R.string
.nc_description_more_menu_group), conversation.getDisplayName()));
-
- holder.avatarImageView.setFrontImageBitmap(DisplayUtils
- .getRoundedBitmapFromVectorDrawableResource(resources,
- R.drawable.ic_people_group_white_24px));
+ holder.avatarImageView.setActualImageResource(R.drawable.ic_people_group_white_24px);
holder.avatarImageView.setVisibility(View.VISIBLE);
break;
case ROOM_PUBLIC_CALL:
holder.moreMenuButton.setContentDescription(String.format(resources.getString(R.string
.nc_description_more_menu_public), conversation.getDisplayName()));
-
- holder.avatarImageView.setFrontImageBitmap(DisplayUtils
- .getRoundedBitmapFromVectorDrawableResource(resources,
- R.drawable.ic_link_white_24px));
+ holder.avatarImageView.setActualImageResource(R.drawable.ic_link_white_24px);
holder.avatarImageView.setVisibility(View.VISIBLE);
break;
default:
@@ -182,8 +165,7 @@ public class CallItem extends AbstractFlexibleItem
@Override
public boolean filter(String constraint) {
return conversation.getDisplayName() != null &&
- StringUtils.containsIgnoreCase(conversation.getDisplayName().trim(), constraint);
-
+ Pattern.compile(constraint, Pattern.CASE_INSENSITIVE | Pattern.LITERAL).matcher(conversation.getDisplayName().trim()).find();
}
static class RoomItemViewHolder extends FlexibleViewHolder {
@@ -193,7 +175,7 @@ public class CallItem extends AbstractFlexibleItem
@BindView(R.id.secondary_text)
public TextView roomLastPing;
@BindView(R.id.avatar_image)
- public FlipView avatarImageView;
+ public SimpleDraweeView avatarImageView;
@BindView(R.id.more_menu)
public ImageButton moreMenuButton;
@BindView(R.id.password_protected_image_view)
diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.java b/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.java
index 7eae2be1c..28febe848 100644
--- a/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.java
+++ b/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.java
@@ -21,6 +21,7 @@
package com.nextcloud.talk.adapters.items;
import android.content.Context;
+import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.text.TextUtils;
@@ -31,11 +32,9 @@ import android.widget.TextView;
import butterknife.BindView;
import butterknife.ButterKnife;
import com.amulyakhare.textdrawable.TextDrawable;
-import com.bumptech.glide.load.engine.DiskCacheStrategy;
-import com.bumptech.glide.load.model.GlideUrl;
-import com.bumptech.glide.load.model.LazyHeaders;
-import com.bumptech.glide.load.resource.bitmap.CircleCrop;
-import com.bumptech.glide.request.RequestOptions;
+import com.facebook.drawee.backends.pipeline.Fresco;
+import com.facebook.drawee.interfaces.DraweeController;
+import com.facebook.drawee.view.SimpleDraweeView;
import com.nextcloud.talk.R;
import com.nextcloud.talk.application.NextcloudTalkApplication;
import com.nextcloud.talk.models.database.UserEntity;
@@ -43,7 +42,6 @@ import com.nextcloud.talk.models.json.chat.ChatMessage;
import com.nextcloud.talk.models.json.rooms.Conversation;
import com.nextcloud.talk.utils.ApiUtils;
import com.nextcloud.talk.utils.DisplayUtils;
-import com.nextcloud.talk.utils.glide.GlideApp;
import com.vanniktech.emoji.EmojiTextView;
import eu.davidea.flexibleadapter.FlexibleAdapter;
import eu.davidea.flexibleadapter.items.AbstractFlexibleItem;
@@ -51,9 +49,9 @@ import eu.davidea.flexibleadapter.items.IFilterable;
import eu.davidea.flexibleadapter.items.IFlexible;
import eu.davidea.flexibleadapter.utils.FlexibleUtils;
import eu.davidea.viewholders.FlexibleViewHolder;
-import org.apache.commons.lang3.StringUtils;
import java.util.List;
+import java.util.regex.Pattern;
public class ConversationItem extends AbstractFlexibleItem implements
IFilterable {
@@ -146,10 +144,10 @@ public class ConversationItem extends AbstractFlexibleItem", context.getResources().getColor(R.color.black));
@@ -213,8 +201,6 @@ public class ConversationItem extends AbstractFlexibleItem implements IFilterable {
+public class GenericTextHeaderItem extends AbstractHeaderItem {
private static final String TAG = "GenericTextHeaderItem";
private String title;
@@ -47,11 +45,6 @@ public class GenericTextHeaderItem extends AbstractHeaderItem
implements IFilterable {
@@ -115,32 +111,23 @@ public class MentionAutocompleteItem extends AbstractFlexibleItem adapter, NotificationSoundItemViewHolder holder, int position, List