diff --git a/.drone.yml b/.drone.yml index 37631c3e0..6fcfa226e 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,6 +1,6 @@ pipeline: compile: - image: nextcloudci/android:android-35 + image: nextcloudci/android:android-44 commands: # build app and assemble APK - sh -c "if [ '${FLAVOR}' != 'Analysis' ]; then ./gradlew assemble${FLAVOR}; fi" @@ -9,7 +9,7 @@ pipeline: FLAVOR: [Generic, Gplay] analysis: - image: nextcloudci/android:android-37 + image: nextcloudci/android:android-44 commands: - export BRANCH=$(scripts/analysis/getBranchName.sh $GIT_USERNAME $GIT_TOKEN $DRONE_PULL_REQUEST) - scripts/analysis/analysis-wrapper.sh $GIT_USERNAME $GIT_TOKEN $BRANCH $LOG_USERNAME $LOG_PASSWORD $DRONE_BUILD_NUMBER $DRONE_PULL_REQUEST diff --git a/app/build.gradle b/app/build.gradle index 8e5c15368..140e9e606 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,7 +17,7 @@ android { targetSdkVersion 28 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - versionCode 82 + versionCode 120 versionName "3.2.3" flavorDimensions "default" @@ -39,8 +39,8 @@ android { lintOptions { disable 'InvalidPackage' disable 'MissingTranslation' - disable "ValidController", - "ValidControllerChangeHandler" + disable "ValidController" + disable "ValidControllerChangeHandler" } } @@ -122,7 +122,7 @@ dependencies { implementation "android.arch.work:work-rxjava2:${workVersion}" androidTestImplementation "android.arch.work:work-testing:${workVersion}" - + implementation 'androidx.biometric:biometric:1.0.0-alpha03' implementation "androidx.lifecycle:lifecycle-extensions:2.0.0" implementation 'androidx.multidex:multidex:2.0.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 31e9392d2..78dbc8c2c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -34,6 +34,10 @@ + + + + = Build.VERSION_CODES.M) { + SecurityUtils.createKey(appPreferences.getScreenLockTimeout()); + } + } + } + + @Override + public void onResume() { + super.onResume(); + if (appPreferences.getIsScreenSecured()) { + getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE); + } else { + getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE); + } } public void showCertificateDialog(X509Certificate cert, MagicTrustManager magicTrustManager, diff --git a/app/src/main/java/com/nextcloud/talk/activities/MagicCallActivity.java b/app/src/main/java/com/nextcloud/talk/activities/MagicCallActivity.java index b350d4d10..51d52a877 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/MagicCallActivity.java +++ b/app/src/main/java/com/nextcloud/talk/activities/MagicCallActivity.java @@ -26,7 +26,9 @@ import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; - +import autodagger.AutoInjector; +import butterknife.BindView; +import butterknife.ButterKnife; import com.bluelinelabs.conductor.Conductor; import com.bluelinelabs.conductor.Router; import com.bluelinelabs.conductor.RouterTransaction; @@ -37,15 +39,10 @@ import com.nextcloud.talk.controllers.CallController; import com.nextcloud.talk.controllers.CallNotificationController; import com.nextcloud.talk.events.ConfigurationChangeEvent; import com.nextcloud.talk.utils.bundle.BundleKeys; - import org.greenrobot.eventbus.EventBus; import javax.inject.Inject; -import autodagger.AutoInjector; -import butterknife.BindView; -import butterknife.ButterKnife; - @AutoInjector(NextcloudTalkApplication.class) public class MagicCallActivity extends BaseActivity { private static final String TAG = "MagicCallActivity"; diff --git a/app/src/main/java/com/nextcloud/talk/activities/MainActivity.java b/app/src/main/java/com/nextcloud/talk/activities/MainActivity.java index 47498f002..4797a0ed9 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/MainActivity.java +++ b/app/src/main/java/com/nextcloud/talk/activities/MainActivity.java @@ -20,37 +20,37 @@ */ package com.nextcloud.talk.activities; +import android.app.KeyguardManager; +import android.content.Context; import android.content.Intent; +import android.os.Build; import android.os.Bundle; import android.view.ViewGroup; - -import com.bluelinelabs.conductor.Conductor; -import com.bluelinelabs.conductor.Router; -import com.bluelinelabs.conductor.RouterTransaction; -import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler; -import com.nextcloud.talk.R; -import com.nextcloud.talk.application.NextcloudTalkApplication; -import com.nextcloud.talk.controllers.CallNotificationController; -import com.nextcloud.talk.controllers.ChatController; -import com.nextcloud.talk.controllers.ConversationsListController; -import com.nextcloud.talk.controllers.ServerSelectionController; -import com.nextcloud.talk.controllers.base.providers.ActionBarProvider; -import com.nextcloud.talk.utils.bundle.BundleKeys; -import com.nextcloud.talk.utils.database.user.UserUtils; - -import javax.inject.Inject; - +import androidx.annotation.RequiresApi; import androidx.appcompat.widget.Toolbar; import autodagger.AutoInjector; import butterknife.BindView; import butterknife.ButterKnife; +import com.bluelinelabs.conductor.Conductor; +import com.bluelinelabs.conductor.Router; +import com.bluelinelabs.conductor.RouterTransaction; +import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler; +import com.bluelinelabs.conductor.changehandler.VerticalChangeHandler; +import com.nextcloud.talk.R; +import com.nextcloud.talk.application.NextcloudTalkApplication; +import com.nextcloud.talk.controllers.*; +import com.nextcloud.talk.controllers.base.providers.ActionBarProvider; +import com.nextcloud.talk.utils.SecurityUtils; +import com.nextcloud.talk.utils.bundle.BundleKeys; +import com.nextcloud.talk.utils.database.user.UserUtils; import io.requery.Persistable; import io.requery.android.sqlcipher.SqlCipherDatabaseSource; import io.requery.reactivex.ReactiveEntityStore; +import javax.inject.Inject; + @AutoInjector(NextcloudTalkApplication.class) public final class MainActivity extends BaseActivity implements ActionBarProvider { - private static final String TAG = "MainActivity"; @BindView(R.id.toolbar) @@ -115,6 +115,30 @@ public final class MainActivity extends BaseActivity implements ActionBarProvide } } + @Override + public void onResume() { + super.onResume(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + checkIfWeAreSecure(); + } + } + + + @RequiresApi(api = Build.VERSION_CODES.M) + public void checkIfWeAreSecure() { + KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); + if (keyguardManager != null && keyguardManager.isKeyguardSecure() && appPreferences.getIsScreenLocked()) { + if (!SecurityUtils.checkIfWeAreAuthenticated(appPreferences.getScreenLockTimeout())) { + if (router != null && router.getControllerWithTag(LockedController.TAG) == null) { + router.pushController(RouterTransaction.with(new LockedController()) + .pushChangeHandler(new VerticalChangeHandler()) + .popChangeHandler(new VerticalChangeHandler()) + .tag(LockedController.TAG)); + } + } + } + } + @Override protected void onNewIntent(Intent intent) { @@ -135,6 +159,10 @@ public final class MainActivity extends BaseActivity implements ActionBarProvide @Override public void onBackPressed() { + if (router.getControllerWithTag(LockedController.TAG) != null) { + return; + } + if (!router.handleBack()) { super.onBackPressed(); } 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 a1fac6322..848a3602f 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 @@ -22,12 +22,10 @@ package com.nextcloud.talk.adapters.items; import android.accounts.Account; import android.view.View; -import android.widget.ImageButton; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.RelativeLayout; -import android.widget.TextView; - +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; @@ -39,20 +37,15 @@ 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 org.apache.commons.lang3.StringUtils; - -import java.util.List; - -import androidx.annotation.Nullable; -import butterknife.BindView; -import butterknife.ButterKnife; 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; public class AdvancedUserItem extends AbstractFlexibleItem implements IFilterable { diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/AppItem.java b/app/src/main/java/com/nextcloud/talk/adapters/items/AppItem.java index 1fb6d1717..55c18aebf 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/items/AppItem.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/items/AppItem.java @@ -27,20 +27,18 @@ import android.text.style.ForegroundColorSpan; import android.view.View; import android.widget.ImageView; import android.widget.TextView; - -import com.nextcloud.talk.R; -import com.nextcloud.talk.application.NextcloudTalkApplication; - -import java.util.List; - import androidx.annotation.Nullable; import butterknife.BindView; import butterknife.ButterKnife; +import com.nextcloud.talk.R; +import com.nextcloud.talk.application.NextcloudTalkApplication; import eu.davidea.flexibleadapter.FlexibleAdapter; import eu.davidea.flexibleadapter.items.AbstractFlexibleItem; import eu.davidea.flexibleadapter.items.IFlexible; import eu.davidea.viewholders.FlexibleViewHolder; +import java.util.List; + public class AppItem extends AbstractFlexibleItem { private String title; private String packageName; diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/CallItem.java b/app/src/main/java/com/nextcloud/talk/adapters/items/CallItem.java index c0547095e..638d3541a 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/items/CallItem.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/items/CallItem.java @@ -27,7 +27,8 @@ import android.view.View; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; - +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; @@ -41,20 +42,16 @@ 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 org.apache.commons.lang3.StringUtils; -import org.greenrobot.eventbus.EventBus; - -import java.util.List; - -import butterknife.BindView; -import butterknife.ButterKnife; 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 org.greenrobot.eventbus.EventBus; + +import java.util.List; public class CallItem extends AbstractFlexibleItem implements IFilterable { 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 09a8b4bb1..1f0433c50 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 @@ -26,7 +26,8 @@ import android.text.format.DateUtils; import android.view.View; import android.widget.ImageView; 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; @@ -42,19 +43,15 @@ 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 org.apache.commons.lang3.StringUtils; - -import java.util.List; - -import butterknife.BindView; -import butterknife.ButterKnife; import eu.davidea.flexibleadapter.FlexibleAdapter; import eu.davidea.flexibleadapter.items.AbstractFlexibleItem; 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; public class ConversationItem extends AbstractFlexibleItem implements IFilterable { diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/GenericTextHeaderItem.java b/app/src/main/java/com/nextcloud/talk/adapters/items/GenericTextHeaderItem.java index a722efd76..a78ab5faf 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/items/GenericTextHeaderItem.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/items/GenericTextHeaderItem.java @@ -23,20 +23,17 @@ package com.nextcloud.talk.adapters.items; import android.util.Log; import android.view.View; import android.widget.TextView; - -import com.nextcloud.talk.R; - -import org.apache.commons.lang3.StringUtils; - -import java.util.List; - import butterknife.BindView; import butterknife.ButterKnife; +import com.nextcloud.talk.R; import eu.davidea.flexibleadapter.FlexibleAdapter; import eu.davidea.flexibleadapter.items.AbstractHeaderItem; import eu.davidea.flexibleadapter.items.IFilterable; import eu.davidea.flexibleadapter.items.IFlexible; import eu.davidea.viewholders.FlexibleViewHolder; +import org.apache.commons.lang3.StringUtils; + +import java.util.List; public class GenericTextHeaderItem extends AbstractHeaderItem implements IFilterable { private static final String TAG = "GenericTextHeaderItem"; diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/MentionAutocompleteItem.java b/app/src/main/java/com/nextcloud/talk/adapters/items/MentionAutocompleteItem.java index 1519e9ef0..df49f5293 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/items/MentionAutocompleteItem.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/items/MentionAutocompleteItem.java @@ -21,7 +21,6 @@ package com.nextcloud.talk.adapters.items; import android.view.View; - import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.model.GlideUrl; import com.bumptech.glide.load.model.LazyHeaders; @@ -32,16 +31,14 @@ import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.models.database.UserEntity; import com.nextcloud.talk.utils.ApiUtils; import com.nextcloud.talk.utils.glide.GlideApp; - -import org.apache.commons.lang3.StringUtils; - -import java.util.List; - import eu.davidea.flexibleadapter.FlexibleAdapter; import eu.davidea.flexibleadapter.items.AbstractFlexibleItem; import eu.davidea.flexibleadapter.items.IFilterable; import eu.davidea.flexibleadapter.items.IFlexible; import eu.davidea.flexibleadapter.utils.FlexibleUtils; +import org.apache.commons.lang3.StringUtils; + +import java.util.List; public class MentionAutocompleteItem extends AbstractFlexibleItem implements IFilterable { diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/MenuItem.java b/app/src/main/java/com/nextcloud/talk/adapters/items/MenuItem.java index c264fd8aa..6868ccbe6 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/items/MenuItem.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/items/MenuItem.java @@ -29,19 +29,17 @@ import android.text.SpannableString; import android.text.style.ForegroundColorSpan; import android.view.View; import android.widget.TextView; - +import butterknife.BindView; +import butterknife.ButterKnife; import com.nextcloud.talk.R; import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.utils.DisplayUtils; - -import java.util.List; - -import butterknife.BindView; -import butterknife.ButterKnife; import eu.davidea.flexibleadapter.FlexibleAdapter; import eu.davidea.flexibleadapter.items.AbstractFlexibleItem; import eu.davidea.viewholders.FlexibleViewHolder; +import java.util.List; + public class MenuItem extends AbstractFlexibleItem { private String title; private Drawable icon; diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/NotificationSoundItem.java b/app/src/main/java/com/nextcloud/talk/adapters/items/NotificationSoundItem.java index d8119893a..3c7070997 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/items/NotificationSoundItem.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/items/NotificationSoundItem.java @@ -22,19 +22,17 @@ package com.nextcloud.talk.adapters.items; import android.view.View; import android.widget.TextView; - -import com.nextcloud.talk.R; -import com.nextcloud.talk.utils.MagicFlipView; - -import java.util.List; - import butterknife.BindView; import butterknife.ButterKnife; +import com.nextcloud.talk.R; +import com.nextcloud.talk.utils.MagicFlipView; import eu.davidea.flexibleadapter.FlexibleAdapter; import eu.davidea.flexibleadapter.items.AbstractFlexibleItem; import eu.davidea.flexibleadapter.items.IFlexible; import eu.davidea.viewholders.FlexibleViewHolder; +import java.util.List; + public class NotificationSoundItem extends AbstractFlexibleItem { private String notificationSoundName; diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/ProgressItem.java b/app/src/main/java/com/nextcloud/talk/adapters/items/ProgressItem.java index 56c954f7d..6af2fb468 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/items/ProgressItem.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/items/ProgressItem.java @@ -29,14 +29,10 @@ import android.content.Context; import android.view.View; import android.widget.ProgressBar; import android.widget.TextView; - -import com.nextcloud.talk.R; - -import java.util.List; - import androidx.annotation.NonNull; import butterknife.BindView; import butterknife.ButterKnife; +import com.nextcloud.talk.R; import eu.davidea.flexibleadapter.FlexibleAdapter; import eu.davidea.flexibleadapter.Payload; import eu.davidea.flexibleadapter.helpers.AnimatorHelper; @@ -44,6 +40,8 @@ import eu.davidea.flexibleadapter.items.AbstractFlexibleItem; import eu.davidea.flexibleadapter.items.IFlexible; import eu.davidea.viewholders.FlexibleViewHolder; +import java.util.List; + /** * @author Davide Steduto * @since 22/04/2016 @@ -115,6 +113,14 @@ public class ProgressItem extends AbstractFlexibleItem implements ISectionable, IFilterable { diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.java b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.java index bc4e545b3..c891571fa 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.java @@ -30,7 +30,10 @@ import android.text.SpannableString; import android.text.TextUtils; import android.view.View; import android.widget.TextView; - +import androidx.core.view.ViewCompat; +import autodagger.AutoInjector; +import butterknife.BindView; +import butterknife.ButterKnife; import com.amulyakhare.textdrawable.TextDrawable; import com.facebook.drawee.view.SimpleDraweeView; import com.google.android.flexbox.FlexboxLayout; @@ -43,16 +46,10 @@ import com.nextcloud.talk.utils.database.user.UserUtils; import com.stfalcon.chatkit.messages.MessageHolders; import com.vanniktech.emoji.EmojiTextView; +import javax.inject.Inject; import java.util.HashMap; import java.util.Map; -import javax.inject.Inject; - -import androidx.core.view.ViewCompat; -import autodagger.AutoInjector; -import butterknife.BindView; -import butterknife.ButterKnife; - @AutoInjector(NextcloudTalkApplication.class) public class MagicIncomingTextMessageViewHolder extends MessageHolders.IncomingTextMessageViewHolder { diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicOutcomingTextMessageViewHolder.java b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicOutcomingTextMessageViewHolder.java index 818c88803..d7a725a39 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicOutcomingTextMessageViewHolder.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicOutcomingTextMessageViewHolder.java @@ -29,7 +29,10 @@ import android.text.Spannable; import android.text.SpannableString; import android.view.View; import android.widget.TextView; - +import androidx.core.view.ViewCompat; +import autodagger.AutoInjector; +import butterknife.BindView; +import butterknife.ButterKnife; import com.google.android.flexbox.FlexboxLayout; import com.nextcloud.talk.R; import com.nextcloud.talk.application.NextcloudTalkApplication; @@ -40,16 +43,10 @@ import com.nextcloud.talk.utils.database.user.UserUtils; import com.stfalcon.chatkit.messages.MessageHolders; import com.vanniktech.emoji.EmojiTextView; +import javax.inject.Inject; import java.util.HashMap; import java.util.Map; -import javax.inject.Inject; - -import androidx.core.view.ViewCompat; -import autodagger.AutoInjector; -import butterknife.BindView; -import butterknife.ButterKnife; - @AutoInjector(NextcloudTalkApplication.class) public class MagicOutcomingTextMessageViewHolder extends MessageHolders.OutcomingTextMessageViewHolder { @BindView(R.id.messageText) diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicPreviewMessageViewHolder.java b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicPreviewMessageViewHolder.java index 285713171..5c3a370a6 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicPreviewMessageViewHolder.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicPreviewMessageViewHolder.java @@ -24,7 +24,8 @@ import android.annotation.SuppressLint; import android.content.Intent; import android.net.Uri; import android.view.View; - +import butterknife.BindView; +import butterknife.ButterKnife; import com.nextcloud.talk.R; import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.models.json.chat.ChatMessage; @@ -32,9 +33,6 @@ import com.nextcloud.talk.utils.DisplayUtils; import com.stfalcon.chatkit.messages.MessageHolders; import com.vanniktech.emoji.EmojiTextView; -import butterknife.BindView; -import butterknife.ButterKnife; - public class MagicPreviewMessageViewHolder extends MessageHolders.IncomingImageMessageViewHolder { @BindView(R.id.messageText) @@ -67,7 +65,7 @@ public class MagicPreviewMessageViewHolder extends MessageHolders.IncomingImageM browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); NextcloudTalkApplication.getSharedApplication().getApplicationContext().startActivity(browserIntent); }); - } else if (message.getMessageType() == ChatMessage.MessageType.SINGLE_LINK_GIPHY_MESSAGE){ + } else if (message.getMessageType() == ChatMessage.MessageType.SINGLE_LINK_GIPHY_MESSAGE) { messageText.setText("GIPHY"); DisplayUtils.setClickableString("GIPHY", "https://giphy.com", messageText); } else if (message.getMessageType() == ChatMessage.MessageType.SINGLE_LINK_TENOR_MESSAGE) { diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicSystemMessageViewHolder.java b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicSystemMessageViewHolder.java index acda3e14e..30ca90f47 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicSystemMessageViewHolder.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicSystemMessageViewHolder.java @@ -26,7 +26,7 @@ import android.graphics.drawable.Drawable; import android.text.Spannable; import android.text.SpannableString; import android.view.View; - +import androidx.core.view.ViewCompat; import com.nextcloud.talk.R; import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.models.json.chat.ChatMessage; @@ -35,8 +35,6 @@ import com.stfalcon.chatkit.messages.MessageHolders; import java.util.Map; -import androidx.core.view.ViewCompat; - public class MagicSystemMessageViewHolder extends MessageHolders.IncomingTextMessageViewHolder { public MagicSystemMessageViewHolder(View itemView) { diff --git a/app/src/main/java/com/nextcloud/talk/api/NcApi.java b/app/src/main/java/com/nextcloud/talk/api/NcApi.java index 40d6c8a67..cc3eac224 100644 --- a/app/src/main/java/com/nextcloud/talk/api/NcApi.java +++ b/app/src/main/java/com/nextcloud/talk/api/NcApi.java @@ -20,6 +20,7 @@ */ package com.nextcloud.talk.api; +import androidx.annotation.Nullable; import com.nextcloud.talk.models.json.call.CallOverall; import com.nextcloud.talk.models.json.capabilities.CapabilitiesOverall; import com.nextcloud.talk.models.json.chat.ChatOverall; @@ -35,25 +36,13 @@ import com.nextcloud.talk.models.json.rooms.RoomsOverall; import com.nextcloud.talk.models.json.signaling.SignalingOverall; import com.nextcloud.talk.models.json.signaling.settings.SignalingSettingsOverall; import com.nextcloud.talk.models.json.userprofile.UserProfileOverall; - -import java.util.List; -import java.util.Map; - -import androidx.annotation.Nullable; import io.reactivex.Observable; import okhttp3.ResponseBody; import retrofit2.Response; -import retrofit2.http.DELETE; -import retrofit2.http.Field; -import retrofit2.http.FieldMap; -import retrofit2.http.FormUrlEncoded; -import retrofit2.http.GET; -import retrofit2.http.Header; -import retrofit2.http.POST; -import retrofit2.http.PUT; -import retrofit2.http.Query; -import retrofit2.http.QueryMap; -import retrofit2.http.Url; +import retrofit2.http.*; + +import java.util.List; +import java.util.Map; public interface NcApi { diff --git a/app/src/main/java/com/nextcloud/talk/application/NextcloudTalkApplication.java b/app/src/main/java/com/nextcloud/talk/application/NextcloudTalkApplication.java index e5185c22f..a26dabf82 100644 --- a/app/src/main/java/com/nextcloud/talk/application/NextcloudTalkApplication.java +++ b/app/src/main/java/com/nextcloud/talk/application/NextcloudTalkApplication.java @@ -23,7 +23,14 @@ package com.nextcloud.talk.application; import android.content.Context; import android.os.Build; import android.util.Log; - +import androidx.lifecycle.LifecycleObserver; +import androidx.multidex.MultiDex; +import androidx.multidex.MultiDexApplication; +import androidx.work.OneTimeWorkRequest; +import androidx.work.PeriodicWorkRequest; +import androidx.work.WorkManager; +import autodagger.AutoComponent; +import autodagger.AutoInjector; import com.facebook.cache.disk.DiskCacheConfig; import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.imagepipeline.core.ImagePipelineConfig; @@ -44,25 +51,14 @@ import com.nextcloud.talk.utils.database.user.UserModule; import com.nextcloud.talk.webrtc.MagicWebRTCUtils; import com.vanniktech.emoji.EmojiManager; import com.vanniktech.emoji.twitter.TwitterEmojiProvider; - +import okhttp3.OkHttpClient; import org.webrtc.PeerConnectionFactory; import org.webrtc.voiceengine.WebRtcAudioManager; import org.webrtc.voiceengine.WebRtcAudioUtils; -import java.util.concurrent.TimeUnit; - import javax.inject.Inject; import javax.inject.Singleton; - -import androidx.lifecycle.LifecycleObserver; -import androidx.multidex.MultiDex; -import androidx.multidex.MultiDexApplication; -import androidx.work.OneTimeWorkRequest; -import androidx.work.PeriodicWorkRequest; -import androidx.work.WorkManager; -import autodagger.AutoComponent; -import autodagger.AutoInjector; -import okhttp3.OkHttpClient; +import java.util.concurrent.TimeUnit; @AutoComponent( modules = { @@ -78,15 +74,13 @@ import okhttp3.OkHttpClient; @Singleton @AutoInjector(NextcloudTalkApplication.class) public class NextcloudTalkApplication extends MultiDexApplication implements LifecycleObserver { - @Inject - OkHttpClient okHttpClient; - private static final String TAG = NextcloudTalkApplication.class.getSimpleName(); - //region Singleton protected static NextcloudTalkApplication sharedApplication; //region Fields (components) protected NextcloudTalkApplicationComponent componentApplication; + @Inject + OkHttpClient okHttpClient; //endregion public static NextcloudTalkApplication getSharedApplication() { diff --git a/app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.java b/app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.java index e4da8a204..bfd45c736 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.java @@ -28,7 +28,12 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; - +import androidx.annotation.NonNull; +import androidx.work.Data; +import androidx.work.OneTimeWorkRequest; +import androidx.work.WorkManager; +import autodagger.AutoInjector; +import butterknife.BindView; import com.bluelinelabs.conductor.RouterTransaction; import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler; import com.nextcloud.talk.R; @@ -49,29 +54,20 @@ import com.nextcloud.talk.utils.bundle.BundleKeys; import com.nextcloud.talk.utils.database.user.UserUtils; import com.nextcloud.talk.utils.preferences.AppPreferences; import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder; - +import io.reactivex.CompletableObserver; +import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; +import io.reactivex.schedulers.Schedulers; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; +import javax.inject.Inject; import java.net.CookieManager; import java.util.ArrayList; import java.util.List; -import javax.inject.Inject; - -import androidx.annotation.NonNull; -import androidx.work.Data; -import androidx.work.OneTimeWorkRequest; -import androidx.work.WorkManager; -import autodagger.AutoInjector; -import butterknife.BindView; -import io.reactivex.CompletableObserver; -import io.reactivex.Observer; -import io.reactivex.disposables.Disposable; -import io.reactivex.schedulers.Schedulers; - @AutoInjector(NextcloudTalkApplication.class) public class AccountVerificationController extends BaseController { @@ -157,7 +153,6 @@ public class AccountVerificationController extends BaseController { } else { checkEverything(); } - } private void checkEverything() { diff --git a/app/src/main/java/com/nextcloud/talk/controllers/CallController.java b/app/src/main/java/com/nextcloud/talk/controllers/CallController.java index fcbdf2d14..0283d246d 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/CallController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/CallController.java @@ -39,7 +39,13 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; - +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import autodagger.AutoInjector; +import butterknife.BindView; +import butterknife.OnClick; +import butterknife.OnLongClick; import com.bluelinelabs.logansquare.LoganSquare; import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.resource.bitmap.CircleCrop; @@ -48,11 +54,7 @@ import com.nextcloud.talk.R; import com.nextcloud.talk.api.NcApi; import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.controllers.base.BaseController; -import com.nextcloud.talk.events.ConfigurationChangeEvent; -import com.nextcloud.talk.events.MediaStreamEvent; -import com.nextcloud.talk.events.PeerConnectionEvent; -import com.nextcloud.talk.events.SessionDescriptionSendEvent; -import com.nextcloud.talk.events.WebSocketCommunicationEvent; +import com.nextcloud.talk.events.*; import com.nextcloud.talk.models.ExternalSignalingServer; import com.nextcloud.talk.models.database.UserEntity; import com.nextcloud.talk.models.json.call.CallOverall; @@ -62,13 +64,7 @@ import com.nextcloud.talk.models.json.participants.Participant; import com.nextcloud.talk.models.json.participants.ParticipantsOverall; import com.nextcloud.talk.models.json.rooms.Conversation; import com.nextcloud.talk.models.json.rooms.RoomsOverall; -import com.nextcloud.talk.models.json.signaling.DataChannelMessage; -import com.nextcloud.talk.models.json.signaling.NCIceCandidate; -import com.nextcloud.talk.models.json.signaling.NCMessagePayload; -import com.nextcloud.talk.models.json.signaling.NCMessageWrapper; -import com.nextcloud.talk.models.json.signaling.NCSignalingMessage; -import com.nextcloud.talk.models.json.signaling.Signaling; -import com.nextcloud.talk.models.json.signaling.SignalingOverall; +import com.nextcloud.talk.models.json.signaling.*; import com.nextcloud.talk.models.json.signaling.settings.IceServer; import com.nextcloud.talk.models.json.signaling.settings.SignalingSettingsOverall; import com.nextcloud.talk.utils.ApiUtils; @@ -80,56 +76,8 @@ import com.nextcloud.talk.utils.database.user.UserUtils; import com.nextcloud.talk.utils.glide.GlideApp; import com.nextcloud.talk.utils.preferences.AppPreferences; import com.nextcloud.talk.utils.singletons.ApplicationWideCurrentRoomHolder; -import com.nextcloud.talk.webrtc.MagicAudioManager; -import com.nextcloud.talk.webrtc.MagicPeerConnectionWrapper; -import com.nextcloud.talk.webrtc.MagicWebRTCUtils; -import com.nextcloud.talk.webrtc.MagicWebSocketInstance; -import com.nextcloud.talk.webrtc.WebSocketConnectionHelper; +import com.nextcloud.talk.webrtc.*; import com.wooplr.spotlight.SpotlightView; - -import org.apache.commons.lang3.StringEscapeUtils; -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; -import org.parceler.Parcels; -import org.webrtc.AudioSource; -import org.webrtc.AudioTrack; -import org.webrtc.Camera1Enumerator; -import org.webrtc.Camera2Enumerator; -import org.webrtc.CameraEnumerator; -import org.webrtc.CameraVideoCapturer; -import org.webrtc.EglBase; -import org.webrtc.IceCandidate; -import org.webrtc.Logging; -import org.webrtc.MediaConstraints; -import org.webrtc.MediaStream; -import org.webrtc.PeerConnection; -import org.webrtc.PeerConnectionFactory; -import org.webrtc.RendererCommon; -import org.webrtc.SessionDescription; -import org.webrtc.SurfaceViewRenderer; -import org.webrtc.VideoCapturer; -import org.webrtc.VideoSource; -import org.webrtc.VideoTrack; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.TimeUnit; - -import javax.inject.Inject; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; -import autodagger.AutoInjector; -import butterknife.BindView; -import butterknife.OnClick; -import butterknife.OnLongClick; import eu.davidea.flipview.FlipView; import io.reactivex.Observable; import io.reactivex.Observer; @@ -140,8 +88,19 @@ import me.zhanghai.android.effortlesspermissions.AfterPermissionDenied; import me.zhanghai.android.effortlesspermissions.EffortlessPermissions; import me.zhanghai.android.effortlesspermissions.OpenAppDetailsDialogFragment; import okhttp3.Cache; +import org.apache.commons.lang3.StringEscapeUtils; +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; +import org.parceler.Parcels; +import org.webrtc.*; import pub.devrel.easypermissions.AfterPermissionGranted; +import javax.inject.Inject; +import java.io.IOException; +import java.util.*; +import java.util.concurrent.TimeUnit; + @AutoInjector(NextcloudTalkApplication.class) public class CallController extends BaseController { diff --git a/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java b/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java index 8dd6f18a6..d1abe243f 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java @@ -29,11 +29,7 @@ import android.graphics.drawable.ColorDrawable; import android.media.AudioAttributes; import android.media.MediaPlayer; import android.net.Uri; -import android.os.Build; -import android.os.Bundle; -import android.os.Handler; -import android.os.VibrationEffect; -import android.os.Vibrator; +import android.os.*; import android.renderscript.Allocation; import android.renderscript.Element; import android.renderscript.RenderScript; @@ -46,7 +42,11 @@ import android.view.ViewGroup; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; - +import androidx.annotation.NonNull; +import androidx.constraintlayout.widget.ConstraintLayout; +import autodagger.AutoInjector; +import butterknife.BindView; +import butterknife.OnClick; import com.bluelinelabs.conductor.RouterTransaction; import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler; import com.bluelinelabs.logansquare.LoganSquare; @@ -76,30 +76,22 @@ import com.nextcloud.talk.utils.bundle.BundleKeys; import com.nextcloud.talk.utils.glide.GlideApp; import com.nextcloud.talk.utils.preferences.AppPreferences; import com.nextcloud.talk.utils.singletons.AvatarStatusCodeHolder; - +import io.reactivex.Observer; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; +import io.reactivex.schedulers.Schedulers; +import okhttp3.Cache; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import org.michaelevans.colorart.library.ColorArt; import org.parceler.Parcels; +import javax.inject.Inject; import java.io.IOException; import java.util.ArrayList; import java.util.List; -import javax.inject.Inject; - -import androidx.annotation.NonNull; -import androidx.constraintlayout.widget.ConstraintLayout; -import autodagger.AutoInjector; -import butterknife.BindView; -import butterknife.OnClick; -import io.reactivex.Observer; -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.disposables.Disposable; -import io.reactivex.schedulers.Schedulers; -import okhttp3.Cache; - @AutoInjector(NextcloudTalkApplication.class) public class CallNotificationController extends BaseController { diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.java b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.java index 029d57e06..953365f2d 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.java @@ -73,6 +73,7 @@ import com.nextcloud.talk.presenters.MentionAutocompletePresenter; import com.nextcloud.talk.utils.*; import com.nextcloud.talk.utils.bundle.BundleKeys; import com.nextcloud.talk.utils.database.user.UserUtils; +import com.nextcloud.talk.utils.preferences.AppPreferences; import com.nextcloud.talk.utils.singletons.ApplicationWideCurrentRoomHolder; import com.otaliastudios.autocomplete.Autocomplete; import com.otaliastudios.autocomplete.AutocompleteCallback; @@ -109,10 +110,13 @@ import java.util.concurrent.TimeUnit; public class ChatController extends BaseController implements MessagesListAdapter.OnLoadMoreListener, MessagesListAdapter.Formatter, MessagesListAdapter.OnMessageLongClickListener, MessageHolders.ContentChecker { private static final String TAG = "ChatController"; + private static final byte CONTENT_TYPE_SYSTEM_MESSAGE = 1; @Inject NcApi ncApi; @Inject UserUtils userUtils; + @Inject + AppPreferences appPreferences; @BindView(R.id.messagesListView) MessagesList messagesListView; @BindView(R.id.messageInputView) @@ -151,9 +155,7 @@ public class ChatController extends BaseController implements MessagesListAdapte private boolean isFirstMessagesProcessing = true; private boolean isHelloClicked; private boolean isLeavingForConversation; - - private static final byte CONTENT_TYPE_SYSTEM_MESSAGE = 1; - + private boolean isLinkPreviewAllowed; private boolean wasDetached; private EmojiPopup emojiPopup; @@ -443,6 +445,7 @@ public class ChatController extends BaseController implements MessagesListAdapte ApplicationWideCurrentRoomHolder.getInstance().setInCall(false); ApplicationWideCurrentRoomHolder.getInstance().setUserInRoom(conversationUser); + isLinkPreviewAllowed = appPreferences.getAreLinkPreviewsAllowed(); emojiPopup = EmojiPopup.Builder.fromRootView(view).setOnEmojiPopupShownListener(new OnEmojiPopupShownListener() { @Override @@ -621,7 +624,7 @@ public class ChatController extends BaseController implements MessagesListAdapte private void leaveRoom() { ncApi.leaveRoom(credentials, ApiUtils.getUrlForSettingMyselfAsActiveParticipant(conversationUser.getBaseUrl(), - roomToken)) + roomToken)) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer() { @@ -666,7 +669,7 @@ public class ChatController extends BaseController implements MessagesListAdapte ncApi.sendChatMessage(credentials, ApiUtils.getUrlForChat(conversationUser.getBaseUrl(), roomToken), message, conversationUser - .getDisplayName()) + .getDisplayName()) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer() { @@ -856,8 +859,11 @@ public class ChatController extends BaseController implements MessagesListAdapte countGroupedMessages = 0; } } - chatMessageList.get(i).setBaseUrl(conversationUser.getBaseUrl()); - chatMessageList.get(i).setActiveUserId(conversationUser.getUserId()); + + ChatMessage chatMessage = chatMessageList.get(i); + chatMessage.setLinkPreviewAllowed(isLinkPreviewAllowed); + chatMessage.setBaseUrl(conversationUser.getBaseUrl()); + chatMessage.setActiveUserId(conversationUser.getUserId()); if (globalLastKnownPastMessageId == -1 || chatMessageList.get(i).getJsonMessageId() < globalLastKnownPastMessageId) { globalLastKnownPastMessageId = chatMessageList.get(i).getJsonMessageId(); @@ -882,7 +888,8 @@ public class ChatController extends BaseController implements MessagesListAdapte chatMessage = chatMessageList.get(i); chatMessage.setBaseUrl(conversationUser.getBaseUrl()); - chatMessageList.get(i).setActiveUserId(conversationUser.getUserId()); + chatMessage.setActiveUserId(conversationUser.getUserId()); + chatMessage.setLinkPreviewAllowed(isLinkPreviewAllowed); // if credentials are empty, we're acting as a guest if (TextUtils.isEmpty(credentials) && !TextUtils.isEmpty(myFirstMessage.toString())) { diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.java b/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.java index d78285a38..90f4f6052 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.java @@ -23,21 +23,27 @@ package com.nextcloud.talk.controllers; import android.app.SearchManager; import android.content.Context; import android.content.Intent; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.text.InputType; import android.text.TextUtils; import android.util.Log; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; +import android.view.*; import android.view.inputmethod.EditorInfo; import android.widget.ProgressBar; import android.widget.RelativeLayout; - +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.widget.SearchView; +import androidx.coordinatorlayout.widget.CoordinatorLayout; +import androidx.core.view.MenuItemCompat; +import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; +import autodagger.AutoInjector; +import butterknife.BindView; +import butterknife.OnClick; +import butterknife.Optional; import com.bluelinelabs.conductor.RouterTransaction; import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler; import com.bluelinelabs.conductor.changehandler.VerticalChangeHandler; @@ -67,33 +73,7 @@ import com.nextcloud.talk.utils.ApiUtils; import com.nextcloud.talk.utils.KeyboardUtils; import com.nextcloud.talk.utils.bundle.BundleKeys; import com.nextcloud.talk.utils.database.user.UserUtils; - -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; -import org.parceler.Parcels; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.inject.Inject; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.widget.SearchView; -import androidx.coordinatorlayout.widget.CoordinatorLayout; -import androidx.core.view.MenuItemCompat; -import androidx.recyclerview.widget.RecyclerView; -import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; -import autodagger.AutoInjector; -import butterknife.BindView; -import butterknife.OnClick; -import butterknife.Optional; +import com.nextcloud.talk.utils.preferences.AppPreferences; import eu.davidea.fastscroller.FastScroller; import eu.davidea.flexibleadapter.FlexibleAdapter; import eu.davidea.flexibleadapter.SelectableAdapter; @@ -106,8 +86,15 @@ import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; import okhttp3.ResponseBody; +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; +import org.parceler.Parcels; import retrofit2.HttpException; +import javax.inject.Inject; +import java.util.*; + @AutoInjector(NextcloudTalkApplication.class) public class ContactsController extends BaseController implements SearchView.OnQueryTextListener, FlexibleAdapter.OnItemClickListener, FastScroller.OnScrollStateChangeListener, FlexibleAdapter.EndlessScrollListener { @@ -125,6 +112,8 @@ public class ContactsController extends BaseController implements SearchView.OnQ UserUtils userUtils; @Inject EventBus eventBus; + @Inject + AppPreferences appPreferences; @BindView(R.id.progressBar) ProgressBar progressBar; @BindView(R.id.recycler_view) @@ -355,7 +344,11 @@ public class ContactsController extends BaseController implements SearchView.OnQ searchView = (SearchView) MenuItemCompat.getActionView(searchItem); searchView.setMaxWidth(Integer.MAX_VALUE); searchView.setInputType(InputType.TYPE_TEXT_VARIATION_FILTER); - searchView.setImeOptions(EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_FULLSCREEN); + int imeOptions = EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_FULLSCREEN; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && appPreferences.getIsKeyboardIncognito()) { + imeOptions |= EditorInfo.IME_FLAG_NO_PERSONALIZED_LEARNING; + } + searchView.setImeOptions(imeOptions); searchView.setQueryHint(getResources().getString(R.string.nc_search)); if (searchManager != null) { searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName())); diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.java b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.java index 2d8825524..7c7da2e17 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.java @@ -28,7 +28,10 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ProgressBar; - +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; +import autodagger.AutoInjector; +import butterknife.BindView; import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.drawee.interfaces.DraweeController; import com.facebook.drawee.view.SimpleDraweeView; @@ -51,18 +54,6 @@ import com.vanniktech.emoji.EmojiTextView; import com.yarolegovich.mp.MaterialChoicePreference; import com.yarolegovich.mp.MaterialPreferenceCategory; import com.yarolegovich.mp.MaterialPreferenceScreen; - -import org.parceler.Parcels; - -import java.util.ArrayList; -import java.util.List; - -import javax.inject.Inject; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; -import autodagger.AutoInjector; -import butterknife.BindView; import eu.davidea.flexibleadapter.FlexibleAdapter; import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager; import eu.davidea.flexibleadapter.items.AbstractFlexibleItem; @@ -70,43 +61,38 @@ import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; +import org.parceler.Parcels; + +import javax.inject.Inject; +import java.util.ArrayList; +import java.util.List; @AutoInjector(NextcloudTalkApplication.class) public class ConversationInfoController extends BaseController { + @BindView(R.id.notification_settings) + MaterialPreferenceScreen materialPreferenceScreen; + @BindView(R.id.progressBar) + ProgressBar progressBar; + @BindView(R.id.conversation_info_message_notifications) + MaterialChoicePreference messageNotificationLevel; + @BindView(R.id.conversation_info_name) + MaterialPreferenceCategory nameCategoryView; + @BindView(R.id.avatar_image) + SimpleDraweeView conversationAvatarImageView; + @BindView(R.id.display_name_text) + EmojiTextView conversationDisplayName; + @BindView(R.id.participants_list_category) + MaterialPreferenceCategory participantsListCategory; + @BindView(R.id.recycler_view) + RecyclerView recyclerView; + @Inject + NcApi ncApi; private String baseUrl; private String conversationToken; private UserEntity conversationUser; private String credentials; - - @BindView(R.id.notification_settings) - MaterialPreferenceScreen materialPreferenceScreen; - - @BindView(R.id.progressBar) - ProgressBar progressBar; - - @BindView(R.id.conversation_info_message_notifications) - MaterialChoicePreference messageNotificationLevel; - - @BindView(R.id.conversation_info_name) - MaterialPreferenceCategory nameCategoryView; - - @BindView(R.id.avatar_image) - SimpleDraweeView conversationAvatarImageView; - - @BindView(R.id.display_name_text) - EmojiTextView conversationDisplayName; - - @BindView(R.id.participants_list_category) - MaterialPreferenceCategory participantsListCategory; - - @BindView(R.id.recycler_view) - RecyclerView recyclerView; - - @Inject - NcApi ncApi; - private Disposable roomDisposable; private Disposable participantsDisposable; diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java index ae762afbb..c273a4790 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationsListController.java @@ -25,20 +25,24 @@ import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.text.InputType; import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; +import android.view.*; import android.view.inputmethod.EditorInfo; import android.widget.ProgressBar; import android.widget.RelativeLayout; - +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.widget.SearchView; +import androidx.core.view.MenuItemCompat; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; +import autodagger.AutoInjector; +import butterknife.BindView; import com.bluelinelabs.conductor.RouterTransaction; import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler; import com.bluelinelabs.conductor.changehandler.TransitionChangeHandlerCompat; @@ -73,28 +77,7 @@ import com.nextcloud.talk.utils.animations.SharedElementTransition; import com.nextcloud.talk.utils.bundle.BundleKeys; import com.nextcloud.talk.utils.database.user.UserUtils; import com.nextcloud.talk.utils.glide.GlideApp; - -import org.apache.commons.lang3.builder.CompareToBuilder; -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; -import org.parceler.Parcels; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import javax.inject.Inject; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.widget.SearchView; -import androidx.core.view.MenuItemCompat; -import androidx.recyclerview.widget.DividerItemDecoration; -import androidx.recyclerview.widget.RecyclerView; -import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; -import autodagger.AutoInjector; -import butterknife.BindView; +import com.nextcloud.talk.utils.preferences.AppPreferences; import eu.davidea.fastscroller.FastScroller; import eu.davidea.flexibleadapter.FlexibleAdapter; import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager; @@ -102,8 +85,18 @@ import eu.davidea.flexibleadapter.items.AbstractFlexibleItem; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; +import org.apache.commons.lang3.builder.CompareToBuilder; +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; +import org.parceler.Parcels; import retrofit2.HttpException; +import javax.inject.Inject; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + @AutoInjector(NextcloudTalkApplication.class) public class ConversationsListController extends BaseController implements SearchView.OnQueryTextListener, FlexibleAdapter.OnItemClickListener, FlexibleAdapter.OnItemLongClickListener, FastScroller @@ -122,6 +115,9 @@ public class ConversationsListController extends BaseController implements Searc @Inject NcApi ncApi; + @Inject + AppPreferences appPreferences; + @BindView(R.id.recycler_view) RecyclerView recyclerView; @@ -240,7 +236,11 @@ public class ConversationsListController extends BaseController implements Searc searchView = (SearchView) MenuItemCompat.getActionView(searchItem); searchView.setMaxWidth(Integer.MAX_VALUE); searchView.setInputType(InputType.TYPE_TEXT_VARIATION_FILTER); - searchView.setImeOptions(EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_FULLSCREEN); + int imeOptions = EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_FULLSCREEN; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && appPreferences.getIsKeyboardIncognito()) { + imeOptions |= EditorInfo.IME_FLAG_NO_PERSONALIZED_LEARNING; + } + searchView.setImeOptions(imeOptions); searchView.setQueryHint(getResources().getString(R.string.nc_search)); if (searchManager != null) { searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName())); diff --git a/app/src/main/java/com/nextcloud/talk/controllers/LockedController.java b/app/src/main/java/com/nextcloud/talk/controllers/LockedController.java new file mode 100644 index 000000000..903fb3810 --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/controllers/LockedController.java @@ -0,0 +1,157 @@ +/* + * Nextcloud Talk application + * + * @author Mario Danic + * Copyright (C) 2017-2018 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 . + */ + +package com.nextcloud.talk.controllers; + +import android.app.Activity; +import android.app.KeyguardManager; +import android.content.Context; +import android.content.Intent; +import android.os.Build; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import androidx.annotation.NonNull; +import androidx.annotation.RequiresApi; +import androidx.biometric.BiometricPrompt; +import autodagger.AutoInjector; +import butterknife.OnClick; +import com.nextcloud.talk.R; +import com.nextcloud.talk.activities.MainActivity; +import com.nextcloud.talk.application.NextcloudTalkApplication; +import com.nextcloud.talk.controllers.base.BaseController; +import com.nextcloud.talk.utils.SecurityUtils; +import com.nextcloud.talk.utils.preferences.AppPreferences; + +import javax.inject.Inject; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; + +@AutoInjector(NextcloudTalkApplication.class) +public class LockedController extends BaseController { + public static final String TAG = "LockedController"; + private static final int REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS = 112; + + @Inject + AppPreferences appPreferences; + + @Override + protected View inflateView(@NonNull LayoutInflater inflater, @NonNull ViewGroup container) { + return inflater.inflate(R.layout.controller_locked, container, false); + } + + @RequiresApi(api = Build.VERSION_CODES.M) + @Override + protected void onViewBound(@NonNull View view) { + super.onViewBound(view); + NextcloudTalkApplication.getSharedApplication().getComponentApplication().inject(this); + if (getActionBar() != null) { + getActionBar().hide(); + } + + showBiometricDialog(); + } + + @RequiresApi(api = Build.VERSION_CODES.M) + @OnClick(R.id.unlockTextView) + void unlock() { + checkIfWeAreSecure(); + } + + @RequiresApi(api = Build.VERSION_CODES.M) + private void showBiometricDialog() { + Context context = getActivity(); + + if (context != null) { + final BiometricPrompt.PromptInfo promptInfo = new BiometricPrompt.PromptInfo.Builder() + .setTitle(String.format(context.getString(R.string.nc_biometric_unlock), context.getString(R.string.nc_app_name))) + .setNegativeButtonText(context.getString(R.string.nc_cancel)) + .build(); + + Executor executor = Executors.newSingleThreadExecutor(); + + final BiometricPrompt biometricPrompt = new BiometricPrompt((MainActivity) context, executor, + new BiometricPrompt.AuthenticationCallback() { + @Override + public void onAuthenticationSucceeded(@NonNull BiometricPrompt.AuthenticationResult result) { + super.onAuthenticationSucceeded(result); + Log.d(TAG, "Fingerprint recognised successfully"); + getRouter().popCurrentController(); + } + + @Override + public void onAuthenticationFailed() { + super.onAuthenticationFailed(); + Log.d(TAG, "Fingerprint not recognised"); + } + + @Override + public void onAuthenticationError(int errorCode, @NonNull CharSequence errString) { + super.onAuthenticationError(errorCode, errString); + showAuthenticationScreen(); + } + } + ); + + biometricPrompt.authenticate(promptInfo, SecurityUtils.getCryptoObject()); + } + } + + @RequiresApi(api = Build.VERSION_CODES.M) + private void checkIfWeAreSecure() { + if (getActivity() != null) { + KeyguardManager keyguardManager = (KeyguardManager) getActivity().getSystemService(Context.KEYGUARD_SERVICE); + if (keyguardManager != null && keyguardManager.isKeyguardSecure() && appPreferences.getIsScreenLocked()) { + if (!SecurityUtils.checkIfWeAreAuthenticated(appPreferences.getScreenLockTimeout())) { + showBiometricDialog(); + } + } + } + } + + private void showAuthenticationScreen() { + if (getActivity() != null) { + KeyguardManager keyguardManager = (KeyguardManager) getActivity().getSystemService(Context.KEYGUARD_SERVICE); + Intent intent = keyguardManager.createConfirmDeviceCredentialIntent(null, null); + if (intent != null) { + startActivityForResult(intent, REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS); + } + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + if (requestCode == REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS ) { + if (resultCode == Activity.RESULT_OK) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (SecurityUtils.checkIfWeAreAuthenticated(appPreferences.getScreenLockTimeout())) { + Log.d(TAG, "All went well, dismiss locked controller"); + getRouter().popCurrentController(); + } + } + } else { + Log.d(TAG, "Authorization failed"); + } + } + } +} diff --git a/app/src/main/java/com/nextcloud/talk/controllers/RingtoneSelectionController.java b/app/src/main/java/com/nextcloud/talk/controllers/RingtoneSelectionController.java index 6af994121..2dedbcc2e 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/RingtoneSelectionController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/RingtoneSelectionController.java @@ -33,7 +33,11 @@ import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; - +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; +import autodagger.AutoInjector; +import butterknife.BindView; import com.bluelinelabs.logansquare.LoganSquare; import com.nextcloud.talk.R; import com.nextcloud.talk.adapters.items.NotificationSoundItem; @@ -42,23 +46,16 @@ import com.nextcloud.talk.controllers.base.BaseController; import com.nextcloud.talk.models.RingtoneSettings; import com.nextcloud.talk.utils.bundle.BundleKeys; import com.nextcloud.talk.utils.preferences.AppPreferences; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import javax.inject.Inject; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; -import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; -import autodagger.AutoInjector; -import butterknife.BindView; import eu.davidea.flexibleadapter.FlexibleAdapter; import eu.davidea.flexibleadapter.SelectableAdapter; import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager; import eu.davidea.flexibleadapter.items.AbstractFlexibleItem; +import javax.inject.Inject; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + @AutoInjector(NextcloudTalkApplication.class) public class RingtoneSelectionController extends BaseController implements FlexibleAdapter.OnItemClickListener { diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ServerSelectionController.java b/app/src/main/java/com/nextcloud/talk/controllers/ServerSelectionController.java index 50384456b..6f1833dad 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ServerSelectionController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ServerSelectionController.java @@ -35,7 +35,10 @@ import android.view.ViewGroup; import android.view.inputmethod.EditorInfo; import android.widget.ProgressBar; import android.widget.TextView; - +import androidx.annotation.NonNull; +import autodagger.AutoInjector; +import butterknife.BindView; +import butterknife.OnClick; import com.bluelinelabs.conductor.RouterTransaction; import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler; import com.nextcloud.talk.R; @@ -48,21 +51,15 @@ import com.nextcloud.talk.utils.bundle.BundleKeys; import com.nextcloud.talk.utils.database.user.UserUtils; import com.nextcloud.talk.utils.preferences.AppPreferences; import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder; - -import java.security.cert.CertificateException; - -import javax.inject.Inject; - -import androidx.annotation.NonNull; -import autodagger.AutoInjector; -import butterknife.BindView; -import butterknife.OnClick; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; import studio.carbonylgroup.textfieldboxes.ExtendedEditText; import studio.carbonylgroup.textfieldboxes.TextFieldBoxes; +import javax.inject.Inject; +import java.security.cert.CertificateException; + @AutoInjector(NextcloudTalkApplication.class) public class ServerSelectionController extends BaseController { diff --git a/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.java b/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.java index 9a1aa4d66..b8ac8b14f 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.java @@ -22,8 +22,11 @@ package com.nextcloud.talk.controllers; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; +import android.app.KeyguardManager; +import android.content.Context; import android.content.Intent; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.security.KeyChain; import android.text.TextUtils; @@ -31,10 +34,17 @@ import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.WindowManager; import android.widget.Checkable; import android.widget.ImageView; import android.widget.TextView; - +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.view.ViewCompat; +import androidx.work.OneTimeWorkRequest; +import androidx.work.WorkManager; +import autodagger.AutoInjector; +import butterknife.BindView; import com.bluelinelabs.conductor.RouterTransaction; import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler; import com.bluelinelabs.conductor.changehandler.VerticalChangeHandler; @@ -53,43 +63,25 @@ import com.nextcloud.talk.models.RingtoneSettings; import com.nextcloud.talk.models.database.UserEntity; import com.nextcloud.talk.utils.ApiUtils; import com.nextcloud.talk.utils.DoNotDisturbUtils; +import com.nextcloud.talk.utils.SecurityUtils; import com.nextcloud.talk.utils.bundle.BundleKeys; import com.nextcloud.talk.utils.database.user.UserUtils; import com.nextcloud.talk.utils.glide.GlideApp; import com.nextcloud.talk.utils.preferences.AppPreferences; import com.nextcloud.talk.utils.preferences.MagicUserInputModule; import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder; -import com.yarolegovich.mp.MaterialChoicePreference; -import com.yarolegovich.mp.MaterialEditTextPreference; -import com.yarolegovich.mp.MaterialPreferenceCategory; -import com.yarolegovich.mp.MaterialPreferenceScreen; -import com.yarolegovich.mp.MaterialStandardPreference; -import com.yarolegovich.mp.MaterialSwitchPreference; - -import net.orange_box.storebox.listeners.OnPreferenceValueChangedListener; - -import org.greenrobot.eventbus.EventBus; - -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; - -import javax.inject.Inject; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.view.ViewCompat; -import androidx.work.OneTimeWorkRequest; -import androidx.work.WorkManager; -import autodagger.AutoInjector; -import butterknife.BindView; +import com.yarolegovich.mp.*; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; +import net.orange_box.storebox.listeners.OnPreferenceValueChangedListener; +import org.greenrobot.eventbus.EventBus; + +import javax.inject.Inject; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.*; @AutoInjector(NextcloudTalkApplication.class) public class SettingsController extends BaseController { @@ -153,6 +145,21 @@ public class SettingsController extends BaseController { @BindView(R.id.settings_always_vibrate) MaterialSwitchPreference shouldVibrateSwitchPreference; + @BindView(R.id.settings_incognito_keyboard) + MaterialSwitchPreference incognitoKeyboardSwitchPreference; + + @BindView(R.id.settings_screen_security) + MaterialSwitchPreference screenSecuritySwitchPreference; + + @BindView(R.id.settings_link_previews) + MaterialSwitchPreference linkPreviewsSwitchPreference; + + @BindView(R.id.settings_screen_lock) + MaterialSwitchPreference screenLockSwitchPreference; + + @BindView(R.id.settings_screen_lock_timeout) + MaterialChoicePreference screenLockTimeoutChoicePreference; + @BindView(R.id.message_text) TextView messageText; @@ -168,11 +175,17 @@ public class SettingsController extends BaseController { @Inject UserUtils userUtils; + @Inject + Context context; + private UserEntity currentUser; private String credentials; private OnPreferenceValueChangedListener proxyTypeChangeListener; private OnPreferenceValueChangedListener proxyCredentialsChangeListener; + private OnPreferenceValueChangedListener screenSecurityChangeListener; + private OnPreferenceValueChangedListener screenLockChangeListener; + private OnPreferenceValueChangedListener screenLockTimeoutChangeListener; private Disposable profileQueryDisposable; private Disposable dbQueryDisposable; @@ -198,8 +211,10 @@ public class SettingsController extends BaseController { getCurrentUser(); appPreferences.registerProxyTypeListener(proxyTypeChangeListener = new ProxyTypeChangeListener()); - appPreferences.registerProxyCredentialsListener(proxyCredentialsChangeListener = new - ProxyCredentialsChangeListener()); + appPreferences.registerProxyCredentialsListener(proxyCredentialsChangeListener = new ProxyCredentialsChangeListener()); + appPreferences.registerScreenSecurityListener(screenSecurityChangeListener = new ScreenSecurityChangeListener()); + appPreferences.registerScreenLockListener(screenLockChangeListener = new ScreenLockListener()); + appPreferences.registerScreenLockTimeoutListener(screenLockTimeoutChangeListener = new ScreenLockTimeoutListener()); List listWithIntFields = new ArrayList<>(); listWithIntFields.add("proxy_port"); @@ -223,6 +238,20 @@ public class SettingsController extends BaseController { shouldVibrateSwitchPreference.setVisibility(View.GONE); } + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { + incognitoKeyboardSwitchPreference.setVisibility(View.GONE); + } + + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { + screenLockSwitchPreference.setVisibility(View.GONE); + screenLockTimeoutChoicePreference.setVisibility(View.GONE); + } else { + screenLockSwitchPreference.setSummary(String.format(Locale.getDefault(), + getResources().getString(R.string.nc_settings_screen_lock_desc), + getResources().getString(R.string.nc_app_name))); + } + + if (!TextUtils.isEmpty(getResources().getString(R.string.nc_privacy_url))) { privacyButton.addPreferenceClickListener(view12 -> { Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(getResources(). @@ -327,7 +356,46 @@ public class SettingsController extends BaseController { } if (shouldVibrateSwitchPreference.getVisibility() == View.VISIBLE) { - ((Checkable)shouldVibrateSwitchPreference.findViewById(R.id.mp_checkable)).setChecked(appPreferences.getShouldVibrateSetting()); + ((Checkable) shouldVibrateSwitchPreference.findViewById(R.id.mp_checkable)).setChecked(appPreferences.getShouldVibrateSetting()); + } + + ((Checkable) screenSecuritySwitchPreference.findViewById(R.id.mp_checkable)).setChecked(appPreferences.getIsScreenSecured()); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + ((Checkable) incognitoKeyboardSwitchPreference.findViewById(R.id.mp_checkable)).setChecked(appPreferences.getIsKeyboardIncognito()); + } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + ((Checkable) incognitoKeyboardSwitchPreference.findViewById(R.id.mp_checkable)).setChecked(appPreferences.getIsKeyboardIncognito()); + } + + ((Checkable) linkPreviewsSwitchPreference.findViewById(R.id.mp_checkable)).setChecked(appPreferences.getAreLinkPreviewsAllowed()); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE); + + if (keyguardManager.isKeyguardSecure()) { + screenLockSwitchPreference.setEnabled(true); + screenLockTimeoutChoicePreference.setEnabled(true); + ((Checkable) screenLockSwitchPreference.findViewById(R.id.mp_checkable)).setChecked(appPreferences.getIsScreenLocked()); + + screenLockTimeoutChoicePreference.setEnabled(appPreferences.getIsScreenLocked()); + + if (appPreferences.getIsScreenLocked()) { + screenLockTimeoutChoicePreference.setAlpha(1.0f); + } else { + screenLockTimeoutChoicePreference.setAlpha(0.38f); + } + + screenLockSwitchPreference.setAlpha(1.0f); + } else { + screenLockSwitchPreference.setEnabled(false); + screenLockTimeoutChoicePreference.setEnabled(false); + appPreferences.removeScreenLock(); + appPreferences.removeScreenLockTimeout(); + ((Checkable) screenLockSwitchPreference.findViewById(R.id.mp_checkable)).setChecked(false); + screenLockSwitchPreference.setAlpha(0.38f); + screenLockTimeoutChoicePreference.setAlpha(0.38f); + } } String ringtoneName = ""; @@ -532,6 +600,9 @@ public class SettingsController extends BaseController { if (appPreferences != null) { appPreferences.unregisterProxyTypeListener(proxyTypeChangeListener); appPreferences.unregisterProxyCredentialsListener(proxyCredentialsChangeListener); + appPreferences.unregisterScreenSecurityListener(screenSecurityChangeListener); + appPreferences.unregisterScreenLockListener(screenLockChangeListener); + appPreferences.unregisterScreenLockTimeoutListener(screenLockTimeoutChangeListener); } super.onDestroy(); } @@ -594,6 +665,46 @@ public class SettingsController extends BaseController { return getResources().getString(R.string.nc_app_name); } + private class ScreenLockTimeoutListener implements OnPreferenceValueChangedListener { + + @Override + public void onChanged(String newValue) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + SecurityUtils.createKey(appPreferences.getScreenLockTimeout()); + } + } + } + + private class ScreenLockListener implements OnPreferenceValueChangedListener { + + @Override + public void onChanged(Boolean newValue) { + screenLockTimeoutChoicePreference.setEnabled(newValue); + + if (newValue) { + screenLockTimeoutChoicePreference.setAlpha(1.0f); + } else { + screenLockTimeoutChoicePreference.setAlpha(0.38f); + } + } + } + + private class ScreenSecurityChangeListener implements OnPreferenceValueChangedListener { + + @Override + public void onChanged(Boolean newValue) { + if (newValue) { + if (getActivity() != null) { + getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE); + } + } else { + if (getActivity() != null) { + getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE); + } + } + } + } + private class ProxyCredentialsChangeListener implements OnPreferenceValueChangedListener { @Override diff --git a/app/src/main/java/com/nextcloud/talk/controllers/SwitchAccountController.java b/app/src/main/java/com/nextcloud/talk/controllers/SwitchAccountController.java index a3be161fc..7837bfa01 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/SwitchAccountController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/SwitchAccountController.java @@ -29,7 +29,13 @@ import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; - +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; +import autodagger.AutoInjector; +import butterknife.BindView; import com.bluelinelabs.conductor.RouterTransaction; import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler; import com.nextcloud.talk.R; @@ -42,26 +48,17 @@ import com.nextcloud.talk.models.json.participants.Participant; import com.nextcloud.talk.utils.AccountUtils; import com.nextcloud.talk.utils.bundle.BundleKeys; import com.nextcloud.talk.utils.database.user.UserUtils; - -import java.net.CookieManager; -import java.util.ArrayList; -import java.util.List; - -import javax.inject.Inject; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.DividerItemDecoration; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; -import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; -import autodagger.AutoInjector; -import butterknife.BindView; import eu.davidea.flexibleadapter.FlexibleAdapter; import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager; import eu.davidea.flexibleadapter.items.AbstractFlexibleItem; import io.reactivex.Observer; import io.reactivex.disposables.Disposable; +import javax.inject.Inject; +import java.net.CookieManager; +import java.util.ArrayList; +import java.util.List; + @AutoInjector(NextcloudTalkApplication.class) public class SwitchAccountController extends BaseController { diff --git a/app/src/main/java/com/nextcloud/talk/controllers/WebViewLoginController.java b/app/src/main/java/com/nextcloud/talk/controllers/WebViewLoginController.java index e986d7349..0870adfc4 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/WebViewLoginController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/WebViewLoginController.java @@ -32,14 +32,11 @@ import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.webkit.ClientCertRequest; -import android.webkit.CookieSyncManager; -import android.webkit.SslErrorHandler; -import android.webkit.WebSettings; -import android.webkit.WebView; -import android.webkit.WebViewClient; +import android.webkit.*; import android.widget.ProgressBar; - +import androidx.annotation.NonNull; +import autodagger.AutoInjector; +import butterknife.BindView; import com.bluelinelabs.conductor.RouterTransaction; import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler; import com.nextcloud.talk.R; @@ -53,9 +50,14 @@ import com.nextcloud.talk.utils.database.user.UserUtils; import com.nextcloud.talk.utils.preferences.AppPreferences; import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder; import com.nextcloud.talk.utils.ssl.MagicTrustManager; - +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; +import io.reactivex.schedulers.Schedulers; +import io.requery.Persistable; +import io.requery.reactivex.ReactiveEntityStore; import org.greenrobot.eventbus.EventBus; +import javax.inject.Inject; import java.lang.reflect.Field; import java.net.CookieManager; import java.net.URLDecoder; @@ -66,17 +68,6 @@ import java.util.HashMap; import java.util.Locale; import java.util.Map; -import javax.inject.Inject; - -import androidx.annotation.NonNull; -import autodagger.AutoInjector; -import butterknife.BindView; -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.disposables.Disposable; -import io.reactivex.schedulers.Schedulers; -import io.requery.Persistable; -import io.requery.reactivex.ReactiveEntityStore; - @AutoInjector(NextcloudTalkApplication.class) public class WebViewLoginController extends BaseController { diff --git a/app/src/main/java/com/nextcloud/talk/controllers/base/BaseController.java b/app/src/main/java/com/nextcloud/talk/controllers/base/BaseController.java index 36a995fa4..c2504590c 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/base/BaseController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/base/BaseController.java @@ -19,12 +19,19 @@ package com.nextcloud.talk.controllers.base; import android.content.Context; +import android.os.Build; import android.os.Bundle; import android.util.Log; import android.view.MenuItem; import android.view.View; - +import android.view.ViewGroup; +import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; +import android.widget.EditText; +import androidx.annotation.NonNull; +import androidx.annotation.RequiresApi; +import androidx.appcompat.app.ActionBar; +import autodagger.AutoInjector; import com.bluelinelabs.conductor.Controller; import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.controllers.AccountVerificationController; @@ -34,15 +41,10 @@ import com.nextcloud.talk.controllers.WebViewLoginController; import com.nextcloud.talk.controllers.base.providers.ActionBarProvider; import com.nextcloud.talk.utils.preferences.AppPreferences; +import javax.inject.Inject; import java.util.ArrayList; import java.util.List; -import javax.inject.Inject; - -import androidx.annotation.NonNull; -import androidx.appcompat.app.ActionBar; -import autodagger.AutoInjector; - @AutoInjector(NextcloudTalkApplication.class) public abstract class BaseController extends ButterKnifeController { @@ -90,6 +92,10 @@ public abstract class BaseController extends ButterKnifeController { @Override protected void onViewBound(@NonNull View view) { super.onViewBound(view); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && appPreferences.getIsKeyboardIncognito()) { + disableKeyboardPersonalisedLearning((ViewGroup) view); + } } // Note: This is just a quick demo of how an ActionBar *can* be accessed, not necessarily how it *should* @@ -106,11 +112,12 @@ public abstract class BaseController extends ButterKnifeController { @Override protected void onAttach(@NonNull View view) { + super.onAttach(view); + setTitle(); if (getActionBar() != null) { getActionBar().setDisplayHomeAsUpEnabled(getParentController() != null || getRouter().getBackstackSize() > 1); } - super.onAttach(view); } @Override @@ -141,4 +148,20 @@ public abstract class BaseController extends ButterKnifeController { protected String getTitle() { return null; } + + @RequiresApi(api = Build.VERSION_CODES.O) + private void disableKeyboardPersonalisedLearning(final ViewGroup viewGroup) { + View view; + EditText editText; + + for (int i = 0; i < viewGroup.getChildCount(); i++) { + view = viewGroup.getChildAt(i); + if (view instanceof EditText) { + editText = (EditText) view; + editText.setImeOptions(editText.getImeOptions() | EditorInfo.IME_FLAG_NO_PERSONALIZED_LEARNING); + } else if (view instanceof ViewGroup) { + disableKeyboardPersonalisedLearning((ViewGroup) view); + } + } + } } diff --git a/app/src/main/java/com/nextcloud/talk/controllers/base/ButterKnifeController.java b/app/src/main/java/com/nextcloud/talk/controllers/base/ButterKnifeController.java index 738b4cdbd..54ee017f8 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/base/ButterKnifeController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/base/ButterKnifeController.java @@ -22,12 +22,10 @@ import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; - -import com.bluelinelabs.conductor.Controller; - import androidx.annotation.NonNull; import butterknife.ButterKnife; import butterknife.Unbinder; +import com.bluelinelabs.conductor.Controller; public abstract class ButterKnifeController extends Controller { diff --git a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/CallMenuController.java b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/CallMenuController.java index 92fb228e2..a62477be9 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/CallMenuController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/CallMenuController.java @@ -27,7 +27,11 @@ import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; - +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import autodagger.AutoInjector; +import butterknife.BindView; import com.bluelinelabs.conductor.RouterTransaction; import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler; import com.kennyc.bottomsheet.adapters.AppAdapter; @@ -42,25 +46,17 @@ import com.nextcloud.talk.models.json.rooms.Conversation; import com.nextcloud.talk.utils.ShareUtils; import com.nextcloud.talk.utils.bundle.BundleKeys; import com.nextcloud.talk.utils.database.user.UserUtils; - +import eu.davidea.flexibleadapter.FlexibleAdapter; +import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager; +import eu.davidea.flexibleadapter.items.AbstractFlexibleItem; import org.greenrobot.eventbus.EventBus; import org.parceler.Parcel; import org.parceler.Parcels; +import javax.inject.Inject; import java.util.ArrayList; import java.util.List; -import javax.inject.Inject; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; -import autodagger.AutoInjector; -import butterknife.BindView; -import eu.davidea.flexibleadapter.FlexibleAdapter; -import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager; -import eu.davidea.flexibleadapter.items.AbstractFlexibleItem; - @AutoInjector(NextcloudTalkApplication.class) public class CallMenuController extends BaseController implements FlexibleAdapter.OnItemClickListener { @BindView(R.id.recycler_view) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/EntryMenuController.java b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/EntryMenuController.java index 06d680623..c7feafe2b 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/EntryMenuController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/EntryMenuController.java @@ -32,7 +32,10 @@ import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.EditorInfo; import android.widget.Button; - +import androidx.annotation.NonNull; +import autodagger.AutoInjector; +import butterknife.BindView; +import butterknife.OnClick; import com.bluelinelabs.conductor.RouterTransaction; import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler; import com.nextcloud.talk.R; @@ -44,19 +47,13 @@ import com.nextcloud.talk.utils.ShareUtils; import com.nextcloud.talk.utils.bundle.BundleKeys; import com.nextcloud.talk.utils.database.user.UserUtils; import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder; - import org.greenrobot.eventbus.EventBus; import org.parceler.Parcels; - -import javax.inject.Inject; - -import androidx.annotation.NonNull; -import autodagger.AutoInjector; -import butterknife.BindView; -import butterknife.OnClick; import studio.carbonylgroup.textfieldboxes.ExtendedEditText; import studio.carbonylgroup.textfieldboxes.TextFieldBoxes; +import javax.inject.Inject; + @AutoInjector(NextcloudTalkApplication.class) public class EntryMenuController extends BaseController { @@ -131,7 +128,8 @@ public class EntryMenuController extends BaseController { bundle.putString(BundleKeys.KEY_CALL_URL, callUrl); bundle.putString(BundleKeys.KEY_CONVERSATION_PASSWORD, editText.getText().toString()); bundle.putInt(BundleKeys.KEY_OPERATION_CODE, operationCode); - if (originalBundle.containsKey(BundleKeys.KEY_SERVER_CAPABILITIES)) { bundle.putParcelable(BundleKeys.KEY_SERVER_CAPABILITIES, originalBundle.getParcelable(BundleKeys.KEY_SERVER_CAPABILITIES)); + if (originalBundle.containsKey(BundleKeys.KEY_SERVER_CAPABILITIES)) { + bundle.putParcelable(BundleKeys.KEY_SERVER_CAPABILITIES, originalBundle.getParcelable(BundleKeys.KEY_SERVER_CAPABILITIES)); } getRouter().pushController(RouterTransaction.with(new OperationsMenuController(bundle)) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java index ac7a97eb4..8077f0584 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java @@ -35,7 +35,10 @@ import android.widget.Button; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; - +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import autodagger.AutoInjector; +import butterknife.BindView; import com.bluelinelabs.conductor.RouterTransaction; import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler; import com.bluelinelabs.logansquare.LoganSquare; @@ -61,25 +64,18 @@ import com.nextcloud.talk.utils.DisplayUtils; import com.nextcloud.talk.utils.bundle.BundleKeys; import com.nextcloud.talk.utils.database.user.UserUtils; import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder; - -import org.greenrobot.eventbus.EventBus; -import org.parceler.Parcels; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.inject.Inject; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import autodagger.AutoInjector; -import butterknife.BindView; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; +import org.greenrobot.eventbus.EventBus; +import org.parceler.Parcels; import retrofit2.HttpException; +import javax.inject.Inject; +import java.io.IOException; +import java.util.ArrayList; + @AutoInjector(NextcloudTalkApplication.class) public class OperationsMenuController extends BaseController { @@ -614,7 +610,7 @@ public class OperationsMenuController extends BaseController { if (baseUrl != null && !baseUrl.equals(currentUser.getBaseUrl())) { isGuestUser = true; - hasChatCapability = capabilities != null && capabilities.getSpreedCapability() != null && capabilities.getSpreedCapability().getFeatures() != null && capabilities.getSpreedCapability().getFeatures().contains("chat-v2"); + hasChatCapability = capabilities != null && capabilities.getSpreedCapability() != null && capabilities.getSpreedCapability().getFeatures() != null && capabilities.getSpreedCapability().getFeatures().contains("chat-v2"); } else { hasChatCapability = currentUser.hasSpreedCapabilityWithName("chat-v2"); } diff --git a/app/src/main/java/com/nextcloud/talk/dagger/modules/BusModule.java b/app/src/main/java/com/nextcloud/talk/dagger/modules/BusModule.java index bf4c22964..a8817229a 100644 --- a/app/src/main/java/com/nextcloud/talk/dagger/modules/BusModule.java +++ b/app/src/main/java/com/nextcloud/talk/dagger/modules/BusModule.java @@ -20,13 +20,12 @@ */ package com.nextcloud.talk.dagger.modules; +import dagger.Module; +import dagger.Provides; import org.greenrobot.eventbus.EventBus; import javax.inject.Singleton; -import dagger.Module; -import dagger.Provides; - @Module public class BusModule { diff --git a/app/src/main/java/com/nextcloud/talk/dagger/modules/ContextModule.java b/app/src/main/java/com/nextcloud/talk/dagger/modules/ContextModule.java index 56663c057..94e61603c 100644 --- a/app/src/main/java/com/nextcloud/talk/dagger/modules/ContextModule.java +++ b/app/src/main/java/com/nextcloud/talk/dagger/modules/ContextModule.java @@ -21,7 +21,6 @@ package com.nextcloud.talk.dagger.modules; import android.content.Context; - import androidx.annotation.NonNull; import dagger.Module; import dagger.Provides; diff --git a/app/src/main/java/com/nextcloud/talk/dagger/modules/DatabaseModule.java b/app/src/main/java/com/nextcloud/talk/dagger/modules/DatabaseModule.java index 1f723893b..3ff5643a5 100644 --- a/app/src/main/java/com/nextcloud/talk/dagger/modules/DatabaseModule.java +++ b/app/src/main/java/com/nextcloud/talk/dagger/modules/DatabaseModule.java @@ -21,16 +21,10 @@ package com.nextcloud.talk.dagger.modules; import android.content.Context; - +import androidx.annotation.NonNull; import com.nextcloud.talk.R; import com.nextcloud.talk.models.database.Models; import com.nextcloud.talk.utils.preferences.AppPreferences; - -import net.orange_box.storebox.StoreBox; - -import javax.inject.Singleton; - -import androidx.annotation.NonNull; import dagger.Module; import dagger.Provides; import io.requery.Persistable; @@ -39,6 +33,9 @@ import io.requery.reactivex.ReactiveEntityStore; import io.requery.reactivex.ReactiveSupport; import io.requery.sql.Configuration; import io.requery.sql.EntityDataStore; +import net.orange_box.storebox.StoreBox; + +import javax.inject.Singleton; @Module public class DatabaseModule { diff --git a/app/src/main/java/com/nextcloud/talk/dagger/modules/RestModule.java b/app/src/main/java/com/nextcloud/talk/dagger/modules/RestModule.java index 595a20fae..d7f69ce79 100644 --- a/app/src/main/java/com/nextcloud/talk/dagger/modules/RestModule.java +++ b/app/src/main/java/com/nextcloud/talk/dagger/modules/RestModule.java @@ -22,7 +22,8 @@ package com.nextcloud.talk.dagger.modules; import android.text.TextUtils; import android.util.Log; - +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.github.aurae.retrofit2.LoganSquareConverterFactory; import com.nextcloud.talk.BuildConfig; import com.nextcloud.talk.api.NcApi; @@ -34,7 +35,18 @@ import com.nextcloud.talk.utils.singletons.AvatarStatusCodeHolder; import com.nextcloud.talk.utils.ssl.MagicKeyManager; import com.nextcloud.talk.utils.ssl.MagicTrustManager; import com.nextcloud.talk.utils.ssl.SSLSocketFactoryCompat; +import dagger.Module; +import dagger.Provides; +import io.reactivex.schedulers.Schedulers; +import okhttp3.*; +import okhttp3.internal.tls.OkHostnameVerifier; +import okhttp3.logging.HttpLoggingInterceptor; +import retrofit2.Retrofit; +import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; +import javax.inject.Singleton; +import javax.net.ssl.KeyManagerFactory; +import javax.net.ssl.X509KeyManager; import java.io.IOException; import java.net.CookieManager; import java.net.InetSocketAddress; @@ -46,30 +58,6 @@ import java.security.UnrecoverableKeyException; import java.security.cert.CertificateException; import java.util.concurrent.TimeUnit; -import javax.inject.Singleton; -import javax.net.ssl.KeyManagerFactory; -import javax.net.ssl.X509KeyManager; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import dagger.Module; -import dagger.Provides; -import io.reactivex.schedulers.Schedulers; -import okhttp3.Authenticator; -import okhttp3.Cache; -import okhttp3.Credentials; -import okhttp3.Dispatcher; -import okhttp3.Interceptor; -import okhttp3.JavaNetCookieJar; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import okhttp3.Route; -import okhttp3.internal.tls.OkHostnameVerifier; -import okhttp3.logging.HttpLoggingInterceptor; -import retrofit2.Retrofit; -import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; - @Module(includes = DatabaseModule.class) public class RestModule { @@ -220,6 +208,29 @@ public class RestModule { return httpClient.build(); } + public static class HeadersInterceptor implements Interceptor { + + @Override + public Response intercept(@NonNull Chain chain) throws IOException { + Request original = chain.request(); + + Request request = original.newBuilder() + .header("User-Agent", ApiUtils.getUserAgent()) + .header("Accept", "application/json") + .header("OCS-APIRequest", "true") + .method(original.method(), original.body()) + .build(); + + Response response = chain.proceed(request); + + if (request.url().encodedPath().contains("/avatar/")) { + AvatarStatusCodeHolder.getInstance().setStatusCode(response.code()); + } + + return response; + } + } + private class ProxyAuthenticator implements Authenticator { private String credentials; @@ -251,29 +262,6 @@ public class RestModule { } } - public static class HeadersInterceptor implements Interceptor { - - @Override - public Response intercept(@NonNull Chain chain) throws IOException { - Request original = chain.request(); - - Request request = original.newBuilder() - .header("User-Agent", ApiUtils.getUserAgent()) - .header("Accept", "application/json") - .header("OCS-APIRequest", "true") - .method(original.method(), original.body()) - .build(); - - Response response = chain.proceed(request); - - if (request.url().encodedPath().contains("/avatar/")) { - AvatarStatusCodeHolder.getInstance().setStatusCode(response.code()); - } - - return response; - } - } - private class GetProxyRunnable implements Runnable { private volatile Proxy proxy; private AppPreferences appPreferences; diff --git a/app/src/main/java/com/nextcloud/talk/events/CertificateEvent.java b/app/src/main/java/com/nextcloud/talk/events/CertificateEvent.java index 08d9bc43b..f23f63c55 100644 --- a/app/src/main/java/com/nextcloud/talk/events/CertificateEvent.java +++ b/app/src/main/java/com/nextcloud/talk/events/CertificateEvent.java @@ -21,13 +21,11 @@ package com.nextcloud.talk.events; import android.webkit.SslErrorHandler; - +import androidx.annotation.Nullable; import com.nextcloud.talk.utils.ssl.MagicTrustManager; import java.security.cert.X509Certificate; -import androidx.annotation.Nullable; - public class CertificateEvent { private final X509Certificate x509Certificate; private final MagicTrustManager magicTrustManager; diff --git a/app/src/main/java/com/nextcloud/talk/events/MediaStreamEvent.java b/app/src/main/java/com/nextcloud/talk/events/MediaStreamEvent.java index e5a2ba67e..3b9afaad7 100644 --- a/app/src/main/java/com/nextcloud/talk/events/MediaStreamEvent.java +++ b/app/src/main/java/com/nextcloud/talk/events/MediaStreamEvent.java @@ -20,10 +20,9 @@ package com.nextcloud.talk.events; -import org.webrtc.MediaStream; - import androidx.annotation.Nullable; import lombok.Data; +import org.webrtc.MediaStream; @Data public class MediaStreamEvent { diff --git a/app/src/main/java/com/nextcloud/talk/events/MoreMenuClickEvent.java b/app/src/main/java/com/nextcloud/talk/events/MoreMenuClickEvent.java index 04b51bc45..28c2b0dc9 100644 --- a/app/src/main/java/com/nextcloud/talk/events/MoreMenuClickEvent.java +++ b/app/src/main/java/com/nextcloud/talk/events/MoreMenuClickEvent.java @@ -21,7 +21,6 @@ package com.nextcloud.talk.events; import com.nextcloud.talk.models.json.rooms.Conversation; - import lombok.Data; @Data diff --git a/app/src/main/java/com/nextcloud/talk/events/SessionDescriptionSendEvent.java b/app/src/main/java/com/nextcloud/talk/events/SessionDescriptionSendEvent.java index 5925b47ba..4fd81563f 100644 --- a/app/src/main/java/com/nextcloud/talk/events/SessionDescriptionSendEvent.java +++ b/app/src/main/java/com/nextcloud/talk/events/SessionDescriptionSendEvent.java @@ -20,12 +20,10 @@ package com.nextcloud.talk.events; -import com.nextcloud.talk.models.json.signaling.NCIceCandidate; - -import org.webrtc.SessionDescription; - import androidx.annotation.Nullable; +import com.nextcloud.talk.models.json.signaling.NCIceCandidate; import lombok.Data; +import org.webrtc.SessionDescription; @Data public class SessionDescriptionSendEvent { diff --git a/app/src/main/java/com/nextcloud/talk/events/WebSocketCommunicationEvent.java b/app/src/main/java/com/nextcloud/talk/events/WebSocketCommunicationEvent.java index 7ffdd56a1..b6190c6c2 100644 --- a/app/src/main/java/com/nextcloud/talk/events/WebSocketCommunicationEvent.java +++ b/app/src/main/java/com/nextcloud/talk/events/WebSocketCommunicationEvent.java @@ -20,11 +20,11 @@ package com.nextcloud.talk.events; -import java.util.HashMap; - import androidx.annotation.Nullable; import lombok.Data; +import java.util.HashMap; + @Data public class WebSocketCommunicationEvent { public final String type; diff --git a/app/src/main/java/com/nextcloud/talk/jobs/AccountRemovalWorker.java b/app/src/main/java/com/nextcloud/talk/jobs/AccountRemovalWorker.java index 424682bc3..a70128029 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/AccountRemovalWorker.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/AccountRemovalWorker.java @@ -26,7 +26,10 @@ import android.content.Context; import android.os.Build; import android.text.TextUtils; import android.util.Log; - +import androidx.annotation.NonNull; +import androidx.work.Worker; +import androidx.work.WorkerParameters; +import autodagger.AutoInjector; import com.bluelinelabs.logansquare.LoganSquare; import com.nextcloud.talk.R; import com.nextcloud.talk.api.NcApi; @@ -38,18 +41,6 @@ import com.nextcloud.talk.utils.ApiUtils; import com.nextcloud.talk.utils.database.arbitrarystorage.ArbitraryStorageUtils; import com.nextcloud.talk.utils.database.user.UserUtils; import com.nextcloud.talk.webrtc.WebSocketConnectionHelper; - -import java.io.IOException; -import java.net.CookieManager; -import java.util.HashMap; -import java.util.zip.CRC32; - -import javax.inject.Inject; - -import androidx.annotation.NonNull; -import androidx.work.Worker; -import androidx.work.WorkerParameters; -import autodagger.AutoInjector; import io.reactivex.CompletableObserver; import io.reactivex.Observer; import io.reactivex.disposables.Disposable; @@ -57,6 +48,12 @@ import okhttp3.JavaNetCookieJar; import okhttp3.OkHttpClient; import retrofit2.Retrofit; +import javax.inject.Inject; +import java.io.IOException; +import java.net.CookieManager; +import java.util.HashMap; +import java.util.zip.CRC32; + @AutoInjector(NextcloudTalkApplication.class) public class AccountRemovalWorker extends Worker { public static final String TAG = "AccountRemovalWorker"; diff --git a/app/src/main/java/com/nextcloud/talk/jobs/CapabilitiesWorker.java b/app/src/main/java/com/nextcloud/talk/jobs/CapabilitiesWorker.java index c6698f69a..3c0dc8675 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/CapabilitiesWorker.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/CapabilitiesWorker.java @@ -22,7 +22,11 @@ package com.nextcloud.talk.jobs; import android.content.Context; import android.util.Log; - +import androidx.annotation.NonNull; +import androidx.work.Data; +import androidx.work.Worker; +import androidx.work.WorkerParameters; +import autodagger.AutoInjector; import com.bluelinelabs.logansquare.LoganSquare; import com.nextcloud.talk.api.NcApi; import com.nextcloud.talk.application.NextcloudTalkApplication; @@ -32,27 +36,19 @@ import com.nextcloud.talk.models.json.capabilities.CapabilitiesOverall; import com.nextcloud.talk.utils.ApiUtils; import com.nextcloud.talk.utils.bundle.BundleKeys; import com.nextcloud.talk.utils.database.user.UserUtils; - -import org.greenrobot.eventbus.EventBus; - -import java.io.IOException; -import java.net.CookieManager; -import java.util.ArrayList; -import java.util.List; - -import javax.inject.Inject; - -import androidx.annotation.NonNull; -import androidx.work.Data; -import androidx.work.Worker; -import androidx.work.WorkerParameters; -import autodagger.AutoInjector; import io.reactivex.Observer; import io.reactivex.disposables.Disposable; import okhttp3.JavaNetCookieJar; import okhttp3.OkHttpClient; +import org.greenrobot.eventbus.EventBus; import retrofit2.Retrofit; +import javax.inject.Inject; +import java.io.IOException; +import java.net.CookieManager; +import java.util.ArrayList; +import java.util.List; + @AutoInjector(NextcloudTalkApplication.class) public class CapabilitiesWorker extends Worker { public static final String TAG = "CapabilitiesWorker"; diff --git a/app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.java b/app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.java index 46512a884..a64140f2f 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.java @@ -37,7 +37,13 @@ import android.os.Vibrator; import android.text.TextUtils; import android.util.Base64; import android.util.Log; - +import androidx.annotation.NonNull; +import androidx.core.app.NotificationCompat; +import androidx.core.app.NotificationManagerCompat; +import androidx.work.Data; +import androidx.work.Worker; +import androidx.work.WorkerParameters; +import autodagger.AutoInjector; import com.bluelinelabs.logansquare.LoganSquare; import com.nextcloud.talk.R; import com.nextcloud.talk.activities.MagicCallActivity; @@ -61,9 +67,16 @@ import com.nextcloud.talk.utils.bundle.BundleKeys; import com.nextcloud.talk.utils.database.arbitrarystorage.ArbitraryStorageUtils; import com.nextcloud.talk.utils.preferences.AppPreferences; import com.nextcloud.talk.utils.singletons.ApplicationWideCurrentRoomHolder; - +import io.reactivex.Observer; +import io.reactivex.disposables.Disposable; +import okhttp3.JavaNetCookieJar; +import okhttp3.OkHttpClient; import org.parceler.Parcels; +import retrofit2.Retrofit; +import javax.crypto.Cipher; +import javax.crypto.NoSuchPaddingException; +import javax.inject.Inject; import java.io.IOException; import java.net.CookieManager; import java.security.InvalidKeyException; @@ -73,23 +86,6 @@ import java.util.Calendar; import java.util.HashMap; import java.util.zip.CRC32; -import javax.crypto.Cipher; -import javax.crypto.NoSuchPaddingException; -import javax.inject.Inject; - -import androidx.annotation.NonNull; -import androidx.core.app.NotificationCompat; -import androidx.core.app.NotificationManagerCompat; -import androidx.work.Data; -import androidx.work.Worker; -import androidx.work.WorkerParameters; -import autodagger.AutoInjector; -import io.reactivex.Observer; -import io.reactivex.disposables.Disposable; -import okhttp3.JavaNetCookieJar; -import okhttp3.OkHttpClient; -import retrofit2.Retrofit; - @AutoInjector(NextcloudTalkApplication.class) public class NotificationWorker extends Worker { public static final String TAG = "NotificationWorker"; diff --git a/app/src/main/java/com/nextcloud/talk/jobs/PushRegistrationWorker.java b/app/src/main/java/com/nextcloud/talk/jobs/PushRegistrationWorker.java index 6a908ed21..ae6ccc3af 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/PushRegistrationWorker.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/PushRegistrationWorker.java @@ -21,12 +21,10 @@ package com.nextcloud.talk.jobs; import android.content.Context; - -import com.nextcloud.talk.utils.PushUtils; - import androidx.annotation.NonNull; import androidx.work.Worker; import androidx.work.WorkerParameters; +import com.nextcloud.talk.utils.PushUtils; public class PushRegistrationWorker extends Worker { public static final String TAG = "PushRegistrationWorker"; diff --git a/app/src/main/java/com/nextcloud/talk/jobs/SignalingSettingsJob.java b/app/src/main/java/com/nextcloud/talk/jobs/SignalingSettingsJob.java index 74719c72c..04acf328b 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/SignalingSettingsJob.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/SignalingSettingsJob.java @@ -23,7 +23,9 @@ package com.nextcloud.talk.jobs; import android.content.Context; import android.text.TextUtils; import android.util.Log; - +import androidx.annotation.NonNull; +import androidx.work.*; +import autodagger.AutoInjector; import com.bluelinelabs.logansquare.LoganSquare; import com.nextcloud.talk.api.NcApi; import com.nextcloud.talk.application.NextcloudTalkApplication; @@ -34,25 +36,15 @@ import com.nextcloud.talk.models.json.signaling.settings.SignalingSettingsOveral import com.nextcloud.talk.utils.ApiUtils; import com.nextcloud.talk.utils.bundle.BundleKeys; import com.nextcloud.talk.utils.database.user.UserUtils; - +import io.reactivex.Observer; +import io.reactivex.disposables.Disposable; import org.greenrobot.eventbus.EventBus; +import javax.inject.Inject; import java.io.IOException; import java.util.ArrayList; import java.util.List; -import javax.inject.Inject; - -import androidx.annotation.NonNull; -import androidx.work.Data; -import androidx.work.OneTimeWorkRequest; -import androidx.work.WorkManager; -import androidx.work.Worker; -import androidx.work.WorkerParameters; -import autodagger.AutoInjector; -import io.reactivex.Observer; -import io.reactivex.disposables.Disposable; - @AutoInjector(NextcloudTalkApplication.class) public class SignalingSettingsJob extends Worker { private static final String TAG = "SignalingSettingsJob"; diff --git a/app/src/main/java/com/nextcloud/talk/jobs/WebsocketConnectionsWorker.java b/app/src/main/java/com/nextcloud/talk/jobs/WebsocketConnectionsWorker.java index 529f85257..31a84f805 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/WebsocketConnectionsWorker.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/WebsocketConnectionsWorker.java @@ -24,7 +24,10 @@ import android.annotation.SuppressLint; import android.content.Context; import android.text.TextUtils; import android.util.Log; - +import androidx.annotation.NonNull; +import androidx.work.Worker; +import androidx.work.WorkerParameters; +import autodagger.AutoInjector; import com.bluelinelabs.logansquare.LoganSquare; import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.models.ExternalSignalingServer; @@ -32,16 +35,10 @@ import com.nextcloud.talk.models.database.UserEntity; import com.nextcloud.talk.utils.database.user.UserUtils; import com.nextcloud.talk.webrtc.WebSocketConnectionHelper; +import javax.inject.Inject; import java.io.IOException; import java.util.List; -import javax.inject.Inject; - -import androidx.annotation.NonNull; -import androidx.work.Worker; -import androidx.work.WorkerParameters; -import autodagger.AutoInjector; - @AutoInjector(NextcloudTalkApplication.class) public class WebsocketConnectionsWorker extends Worker { diff --git a/app/src/main/java/com/nextcloud/talk/models/ExternalSignalingServer.java b/app/src/main/java/com/nextcloud/talk/models/ExternalSignalingServer.java index 8aeb1c17b..4871421b2 100644 --- a/app/src/main/java/com/nextcloud/talk/models/ExternalSignalingServer.java +++ b/app/src/main/java/com/nextcloud/talk/models/ExternalSignalingServer.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @Parcel diff --git a/app/src/main/java/com/nextcloud/talk/models/LoginData.java b/app/src/main/java/com/nextcloud/talk/models/LoginData.java index 01b1da931..74b4b56e9 100644 --- a/app/src/main/java/com/nextcloud/talk/models/LoginData.java +++ b/app/src/main/java/com/nextcloud/talk/models/LoginData.java @@ -20,9 +20,8 @@ */ package com.nextcloud.talk.models; -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Parcel @Data diff --git a/app/src/main/java/com/nextcloud/talk/models/RetrofitBucket.java b/app/src/main/java/com/nextcloud/talk/models/RetrofitBucket.java index 2b53ed61c..63c3c6659 100644 --- a/app/src/main/java/com/nextcloud/talk/models/RetrofitBucket.java +++ b/app/src/main/java/com/nextcloud/talk/models/RetrofitBucket.java @@ -19,12 +19,11 @@ */ package com.nextcloud.talk.models; +import lombok.Data; import org.parceler.Parcel; import java.util.Map; -import lombok.Data; - @Parcel @Data public class RetrofitBucket { diff --git a/app/src/main/java/com/nextcloud/talk/models/RingtoneSettings.java b/app/src/main/java/com/nextcloud/talk/models/RingtoneSettings.java index 1be6a9ead..029948ef2 100644 --- a/app/src/main/java/com/nextcloud/talk/models/RingtoneSettings.java +++ b/app/src/main/java/com/nextcloud/talk/models/RingtoneSettings.java @@ -21,15 +21,12 @@ package com.nextcloud.talk.models; import android.net.Uri; - +import androidx.annotation.Nullable; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; import com.nextcloud.talk.models.json.converters.UriTypeConverter; - -import org.parceler.Parcel; - -import androidx.annotation.Nullable; import lombok.Data; +import org.parceler.Parcel; @Parcel @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/models/SignatureVerification.java b/app/src/main/java/com/nextcloud/talk/models/SignatureVerification.java index 9ed6f28c1..8a979c604 100644 --- a/app/src/main/java/com/nextcloud/talk/models/SignatureVerification.java +++ b/app/src/main/java/com/nextcloud/talk/models/SignatureVerification.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models; import com.nextcloud.talk.models.database.UserEntity; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @Parcel diff --git a/app/src/main/java/com/nextcloud/talk/models/database/ArbitraryStorage.java b/app/src/main/java/com/nextcloud/talk/models/database/ArbitraryStorage.java index c095f0e53..4927c2986 100644 --- a/app/src/main/java/com/nextcloud/talk/models/database/ArbitraryStorage.java +++ b/app/src/main/java/com/nextcloud/talk/models/database/ArbitraryStorage.java @@ -21,13 +21,12 @@ package com.nextcloud.talk.models.database; import android.os.Parcelable; - -import java.io.Serializable; - import io.requery.Entity; import io.requery.Key; import io.requery.Persistable; +import java.io.Serializable; + @Entity public interface ArbitraryStorage extends Parcelable, Persistable, Serializable { @Key diff --git a/app/src/main/java/com/nextcloud/talk/models/database/User.java b/app/src/main/java/com/nextcloud/talk/models/database/User.java index 44003c64f..b3de7024e 100644 --- a/app/src/main/java/com/nextcloud/talk/models/database/User.java +++ b/app/src/main/java/com/nextcloud/talk/models/database/User.java @@ -21,18 +21,16 @@ package com.nextcloud.talk.models.database; import android.os.Parcelable; import android.util.Log; - import com.bluelinelabs.logansquare.LoganSquare; import com.nextcloud.talk.models.json.capabilities.Capabilities; - -import java.io.IOException; -import java.io.Serializable; - import io.requery.Entity; import io.requery.Generated; import io.requery.Key; import io.requery.Persistable; +import java.io.IOException; +import java.io.Serializable; + @Entity public interface User extends Parcelable, Persistable, Serializable { static final String TAG = "UserEntity"; diff --git a/app/src/main/java/com/nextcloud/talk/models/json/autocomplete/AutocompleteOCS.java b/app/src/main/java/com/nextcloud/talk/models/json/autocomplete/AutocompleteOCS.java index 5a44616d7..934911627 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/autocomplete/AutocompleteOCS.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/autocomplete/AutocompleteOCS.java @@ -23,13 +23,11 @@ package com.nextcloud.talk.models.json.autocomplete; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; import com.nextcloud.talk.models.json.generic.GenericOCS; - +import lombok.Data; import org.parceler.Parcel; import java.util.List; -import lombok.Data; - @Parcel @Data @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/models/json/autocomplete/AutocompleteOverall.java b/app/src/main/java/com/nextcloud/talk/models/json/autocomplete/AutocompleteOverall.java index 99ff016b1..eaeb87aca 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/autocomplete/AutocompleteOverall.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/autocomplete/AutocompleteOverall.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.autocomplete; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Parcel @Data diff --git a/app/src/main/java/com/nextcloud/talk/models/json/autocomplete/AutocompleteUser.java b/app/src/main/java/com/nextcloud/talk/models/json/autocomplete/AutocompleteUser.java index 525ff0223..271563233 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/autocomplete/AutocompleteUser.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/autocomplete/AutocompleteUser.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.autocomplete; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Parcel @Data diff --git a/app/src/main/java/com/nextcloud/talk/models/json/call/Call.java b/app/src/main/java/com/nextcloud/talk/models/json/call/Call.java index 97c5b3223..c80dc2e20 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/call/Call.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/call/Call.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.call; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Parcel @Data diff --git a/app/src/main/java/com/nextcloud/talk/models/json/call/CallOCS.java b/app/src/main/java/com/nextcloud/talk/models/json/call/CallOCS.java index 92e23aaeb..9c6dd6678 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/call/CallOCS.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/call/CallOCS.java @@ -23,10 +23,8 @@ package com.nextcloud.talk.models.json.call; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; import com.nextcloud.talk.models.json.generic.GenericOCS; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @Parcel diff --git a/app/src/main/java/com/nextcloud/talk/models/json/call/CallOverall.java b/app/src/main/java/com/nextcloud/talk/models/json/call/CallOverall.java index 29f80e1b2..05693563e 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/call/CallOverall.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/call/CallOverall.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.call; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @Parcel diff --git a/app/src/main/java/com/nextcloud/talk/models/json/capabilities/Capabilities.java b/app/src/main/java/com/nextcloud/talk/models/json/capabilities/Capabilities.java index 8db91189f..d7256e1b5 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/capabilities/Capabilities.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/capabilities/Capabilities.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.capabilities; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Parcel @Data diff --git a/app/src/main/java/com/nextcloud/talk/models/json/capabilities/CapabilitiesList.java b/app/src/main/java/com/nextcloud/talk/models/json/capabilities/CapabilitiesList.java index 02332aae5..056610225 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/capabilities/CapabilitiesList.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/capabilities/CapabilitiesList.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.capabilities; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Parcel @Data diff --git a/app/src/main/java/com/nextcloud/talk/models/json/capabilities/CapabilitiesOCS.java b/app/src/main/java/com/nextcloud/talk/models/json/capabilities/CapabilitiesOCS.java index dad460433..c2a43fd0a 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/capabilities/CapabilitiesOCS.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/capabilities/CapabilitiesOCS.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.capabilities; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; import com.nextcloud.talk.models.json.generic.GenericOCS; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @Parcel diff --git a/app/src/main/java/com/nextcloud/talk/models/json/capabilities/CapabilitiesOverall.java b/app/src/main/java/com/nextcloud/talk/models/json/capabilities/CapabilitiesOverall.java index 68e5ae789..673aebbdf 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/capabilities/CapabilitiesOverall.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/capabilities/CapabilitiesOverall.java @@ -21,10 +21,8 @@ package com.nextcloud.talk.models.json.capabilities; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @Parcel diff --git a/app/src/main/java/com/nextcloud/talk/models/json/capabilities/NotificationsCapability.java b/app/src/main/java/com/nextcloud/talk/models/json/capabilities/NotificationsCapability.java index bb22d988c..1e413cfee 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/capabilities/NotificationsCapability.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/capabilities/NotificationsCapability.java @@ -22,13 +22,11 @@ package com.nextcloud.talk.models.json.capabilities; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - +import lombok.Data; import org.parceler.Parcel; import java.util.List; -import lombok.Data; - @Parcel @Data @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/models/json/capabilities/SpreedCapability.java b/app/src/main/java/com/nextcloud/talk/models/json/capabilities/SpreedCapability.java index 30d12aea8..b1d548d00 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/capabilities/SpreedCapability.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/capabilities/SpreedCapability.java @@ -22,13 +22,11 @@ package com.nextcloud.talk.models.json.capabilities; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - +import lombok.Data; import org.parceler.Parcel; import java.util.List; -import lombok.Data; - @Parcel @Data @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatMessage.java index 8a618c045..9c2fef0ea 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatMessage.java @@ -20,8 +20,7 @@ package com.nextcloud.talk.models.json.chat; import android.text.TextUtils; -import android.util.Log; - +import androidx.annotation.Nullable; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonIgnore; import com.bluelinelabs.logansquare.annotation.JsonObject; @@ -33,26 +32,48 @@ import com.nextcloud.talk.utils.TextMatchers; import com.stfalcon.chatkit.commons.models.IMessage; import com.stfalcon.chatkit.commons.models.IUser; import com.stfalcon.chatkit.commons.models.MessageContentType; - +import lombok.Data; import org.parceler.Parcel; -import java.util.Arrays; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; - -import androidx.annotation.Nullable; -import lombok.Data; +import java.util.*; @Parcel @Data @JsonObject public class ChatMessage implements IMessage, MessageContentType, MessageContentType.Image { + @JsonIgnore + public boolean isGrouped; + @JsonIgnore + public String activeUserId; + @JsonIgnore + public Map selectedIndividualHashMap; + @JsonIgnore + public boolean isLinkPreviewAllowed; List messageTypesToIgnore = Arrays.asList(MessageType.REGULAR_TEXT_MESSAGE, MessageType.SYSTEM_MESSAGE, MessageType.SINGLE_LINK_VIDEO_MESSAGE, MessageType.SINGLE_LINK_AUDIO_MESSAGE, MessageType.SINGLE_LINK_MESSAGE); + String baseUrl; + @JsonField(name = "id") + int jsonMessageId; + @JsonField(name = "token") + String token; + // guests or users + @JsonField(name = "actorType") + String actorType; + @JsonField(name = "actorId") + String actorId; + // send when crafting a message + @JsonField(name = "actorDisplayName") + String actorDisplayName; + @JsonField(name = "timestamp") + long timestamp; + // send when crafting a message, max 1000 lines + @JsonField(name = "message") + String message; + @JsonField(name = "messageParameters") + HashMap> messageParameters; + @JsonField(name = "systemMessage", typeConverter = EnumSystemMessageTypeConverter.class) + SystemMessageType systemMessageType; private boolean hasFileAttachment() { if (messageParameters != null && messageParameters.size() > 0) { @@ -82,7 +103,7 @@ public class ChatMessage implements IMessage, MessageContentType, MessageContent } } - if (!messageTypesToIgnore.contains(getMessageType())) { + if (!messageTypesToIgnore.contains(getMessageType()) && isLinkPreviewAllowed) { return getMessage().trim(); } @@ -101,70 +122,6 @@ public class ChatMessage implements IMessage, MessageContentType, MessageContent return TextMatchers.getMessageTypeFromString(getText()); } - public enum MessageType { - REGULAR_TEXT_MESSAGE, - SYSTEM_MESSAGE, - SINGLE_LINK_GIPHY_MESSAGE, - SINGLE_LINK_TENOR_MESSAGE, - SINGLE_LINK_GIF_MESSAGE, - SINGLE_LINK_MESSAGE, - SINGLE_LINK_VIDEO_MESSAGE, - SINGLE_LINK_IMAGE_MESSAGE, - SINGLE_LINK_AUDIO_MESSAGE, - SINGLE_NC_ATTACHMENT_MESSAGE, - } - - public enum SystemMessageType { - DUMMY, - CONVERSATION_CREATED, - CONVERSATION_RENAMED, - CALL_STARTED, - CALL_JOINED, - CALL_LEFT, - CALL_ENDED, - GUESTS_ALLOWED, - GUESTS_DISALLOWED, - PASSWORD_SET, - PASSWORD_REMOVED, - USER_ADDED, - USER_REMOVED, - MODERATOR_PROMOTED, - MODERATOR_DEMOTED, - FILE_SHARED, - } - - String baseUrl; - @JsonField(name = "id") - int jsonMessageId; - @JsonField(name = "token") - String token; - // guests or users - @JsonField(name = "actorType") - String actorType; - @JsonField(name = "actorId") - String actorId; - // send when crafting a message - @JsonField(name = "actorDisplayName") - String actorDisplayName; - @JsonField(name = "timestamp") - long timestamp; - // send when crafting a message, max 1000 lines - @JsonField(name = "message") - String message; - @JsonField(name = "messageParameters") - HashMap> messageParameters; - - @JsonField(name = "systemMessage", typeConverter = EnumSystemMessageTypeConverter.class) - SystemMessageType systemMessageType; - - @JsonIgnore - public boolean isGrouped; - @JsonIgnore - public String activeUserId; - @JsonIgnore - public Map selectedIndividualHashMap; - - public Map getSelectedIndividualHashMap() { return selectedIndividualHashMap; } @@ -278,4 +235,36 @@ public class ChatMessage implements IMessage, MessageContentType, MessageContent public String getSystemMessage() { return new EnumSystemMessageTypeConverter().convertToString(getSystemMessageType()); } + + public enum MessageType { + REGULAR_TEXT_MESSAGE, + SYSTEM_MESSAGE, + SINGLE_LINK_GIPHY_MESSAGE, + SINGLE_LINK_TENOR_MESSAGE, + SINGLE_LINK_GIF_MESSAGE, + SINGLE_LINK_MESSAGE, + SINGLE_LINK_VIDEO_MESSAGE, + SINGLE_LINK_IMAGE_MESSAGE, + SINGLE_LINK_AUDIO_MESSAGE, + SINGLE_NC_ATTACHMENT_MESSAGE, + } + + public enum SystemMessageType { + DUMMY, + CONVERSATION_CREATED, + CONVERSATION_RENAMED, + CALL_STARTED, + CALL_JOINED, + CALL_LEFT, + CALL_ENDED, + GUESTS_ALLOWED, + GUESTS_DISALLOWED, + PASSWORD_SET, + PASSWORD_REMOVED, + USER_ADDED, + USER_REMOVED, + MODERATOR_PROMOTED, + MODERATOR_DEMOTED, + FILE_SHARED, + } } diff --git a/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatOCS.java b/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatOCS.java index b39952570..7945e3e4d 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatOCS.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatOCS.java @@ -22,13 +22,11 @@ package com.nextcloud.talk.models.json.chat; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; import com.nextcloud.talk.models.json.generic.GenericOCS; - +import lombok.Data; import org.parceler.Parcel; import java.util.List; -import lombok.Data; - @Data @Parcel @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatOverall.java b/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatOverall.java index ea348d49d..a8c088245 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatOverall.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatOverall.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.chat; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @Parcel diff --git a/app/src/main/java/com/nextcloud/talk/models/json/converters/EnumSystemMessageTypeConverter.java b/app/src/main/java/com/nextcloud/talk/models/json/converters/EnumSystemMessageTypeConverter.java index 0e8b5349c..59e1855f7 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/converters/EnumSystemMessageTypeConverter.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/converters/EnumSystemMessageTypeConverter.java @@ -23,22 +23,7 @@ package com.nextcloud.talk.models.json.converters; import com.bluelinelabs.logansquare.typeconverters.StringBasedTypeConverter; import com.nextcloud.talk.models.json.chat.ChatMessage; -import static com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.CALL_ENDED; -import static com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.CALL_JOINED; -import static com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.CALL_LEFT; -import static com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.CALL_STARTED; -import static com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.CONVERSATION_CREATED; -import static com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.CONVERSATION_RENAMED; -import static com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.DUMMY; -import static com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.FILE_SHARED; -import static com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.GUESTS_ALLOWED; -import static com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.GUESTS_DISALLOWED; -import static com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.MODERATOR_DEMOTED; -import static com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.MODERATOR_PROMOTED; -import static com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.PASSWORD_REMOVED; -import static com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.PASSWORD_SET; -import static com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.USER_ADDED; -import static com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.USER_REMOVED; +import static com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.*; /* diff --git a/app/src/main/java/com/nextcloud/talk/models/json/converters/ObjectParcelConverter.java b/app/src/main/java/com/nextcloud/talk/models/json/converters/ObjectParcelConverter.java index d536d8816..99f42075b 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/converters/ObjectParcelConverter.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/converters/ObjectParcelConverter.java @@ -21,7 +21,6 @@ package com.nextcloud.talk.models.json.converters; import android.os.Parcel; - import org.parceler.ParcelConverter; import org.parceler.Parcels; diff --git a/app/src/main/java/com/nextcloud/talk/models/json/converters/UriTypeConverter.java b/app/src/main/java/com/nextcloud/talk/models/json/converters/UriTypeConverter.java index d3d738887..7bfd2e962 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/converters/UriTypeConverter.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/converters/UriTypeConverter.java @@ -22,7 +22,6 @@ package com.nextcloud.talk.models.json.converters; import android.net.Uri; import android.text.TextUtils; - import com.bluelinelabs.logansquare.typeconverters.StringBasedTypeConverter; public class UriTypeConverter extends StringBasedTypeConverter { diff --git a/app/src/main/java/com/nextcloud/talk/models/json/generic/GenericMeta.java b/app/src/main/java/com/nextcloud/talk/models/json/generic/GenericMeta.java index ef375d3c9..d977c9edc 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/generic/GenericMeta.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/generic/GenericMeta.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.generic; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Parcel @Data diff --git a/app/src/main/java/com/nextcloud/talk/models/json/generic/GenericOCS.java b/app/src/main/java/com/nextcloud/talk/models/json/generic/GenericOCS.java index 7725735c1..920a1bae1 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/generic/GenericOCS.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/generic/GenericOCS.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.generic; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Parcel @Data diff --git a/app/src/main/java/com/nextcloud/talk/models/json/generic/GenericOverall.java b/app/src/main/java/com/nextcloud/talk/models/json/generic/GenericOverall.java index e6c8959ac..e8b9043c9 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/generic/GenericOverall.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/generic/GenericOverall.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.generic; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Parcel @Data diff --git a/app/src/main/java/com/nextcloud/talk/models/json/generic/Status.java b/app/src/main/java/com/nextcloud/talk/models/json/generic/Status.java index 58958aa51..11904b76d 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/generic/Status.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/generic/Status.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.generic; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Parcel @Data diff --git a/app/src/main/java/com/nextcloud/talk/models/json/mention/Mention.java b/app/src/main/java/com/nextcloud/talk/models/json/mention/Mention.java index a5b264aa0..4d02460ea 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/mention/Mention.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/mention/Mention.java @@ -21,10 +21,8 @@ package com.nextcloud.talk.models.json.mention; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Parcel @Data diff --git a/app/src/main/java/com/nextcloud/talk/models/json/mention/MentionOCS.java b/app/src/main/java/com/nextcloud/talk/models/json/mention/MentionOCS.java index 2d5faf7bf..5180635c1 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/mention/MentionOCS.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/mention/MentionOCS.java @@ -22,13 +22,11 @@ package com.nextcloud.talk.models.json.mention; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; import com.nextcloud.talk.models.json.generic.GenericOCS; - +import lombok.Data; import org.parceler.Parcel; import java.util.List; -import lombok.Data; - @Data @Parcel @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/models/json/mention/MentionOverall.java b/app/src/main/java/com/nextcloud/talk/models/json/mention/MentionOverall.java index b8b4e8afa..beecb50d3 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/mention/MentionOverall.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/mention/MentionOverall.java @@ -21,10 +21,8 @@ package com.nextcloud.talk.models.json.mention; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @Parcel diff --git a/app/src/main/java/com/nextcloud/talk/models/json/notifications/Notification.java b/app/src/main/java/com/nextcloud/talk/models/json/notifications/Notification.java index 6a425679c..5adcacdad 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/notifications/Notification.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/notifications/Notification.java @@ -22,61 +22,45 @@ package com.nextcloud.talk.models.json.notifications; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - +import lombok.Data; import org.parceler.Parcel; import java.util.Date; import java.util.HashMap; import java.util.List; -import lombok.Data; - @Data @Parcel @JsonObject public class Notification { - @JsonField(name = "notification_id") - int notificationId; - - @JsonField(name = "app") - String app; - - @JsonField(name = "user") - String user; - - @JsonField(name = "datetime") - Date datetime; - - @JsonField(name = "object_type") - String objectType; - - @JsonField(name = "object_id") - String objectId; - - @JsonField(name = "subject") - String subject; - - @JsonField(name = "subjectRich") - String subjectRich; - - @JsonField(name = "subjectRichParameters") - HashMap> subjectRichParameters; - - @JsonField(name = "message") - String message; - - @JsonField(name = "messageRich") - String messageRich; - - @JsonField(name = "messageRichParameters") - HashMap> messageRichParameters; - - @JsonField(name = "link") - String link; - @JsonField(name = "icon") public String icon; - + @JsonField(name = "notification_id") + int notificationId; + @JsonField(name = "app") + String app; + @JsonField(name = "user") + String user; + @JsonField(name = "datetime") + Date datetime; + @JsonField(name = "object_type") + String objectType; + @JsonField(name = "object_id") + String objectId; + @JsonField(name = "subject") + String subject; + @JsonField(name = "subjectRich") + String subjectRich; + @JsonField(name = "subjectRichParameters") + HashMap> subjectRichParameters; + @JsonField(name = "message") + String message; + @JsonField(name = "messageRich") + String messageRich; + @JsonField(name = "messageRichParameters") + HashMap> messageRichParameters; + @JsonField(name = "link") + String link; @JsonField(name = "actions") List actions; } diff --git a/app/src/main/java/com/nextcloud/talk/models/json/notifications/NotificationAction.java b/app/src/main/java/com/nextcloud/talk/models/json/notifications/NotificationAction.java index 0bad1cfb3..dcca6db0a 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/notifications/NotificationAction.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/notifications/NotificationAction.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.notifications; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @Parcel diff --git a/app/src/main/java/com/nextcloud/talk/models/json/notifications/NotificationOCS.java b/app/src/main/java/com/nextcloud/talk/models/json/notifications/NotificationOCS.java index 261021a50..1a20d2f72 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/notifications/NotificationOCS.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/notifications/NotificationOCS.java @@ -23,10 +23,8 @@ package com.nextcloud.talk.models.json.notifications; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; import com.nextcloud.talk.models.json.generic.GenericOCS; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @Parcel diff --git a/app/src/main/java/com/nextcloud/talk/models/json/notifications/NotificationOverall.java b/app/src/main/java/com/nextcloud/talk/models/json/notifications/NotificationOverall.java index b96961aa0..46bcd828d 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/notifications/NotificationOverall.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/notifications/NotificationOverall.java @@ -21,7 +21,6 @@ package com.nextcloud.talk.models.json.notifications; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - import lombok.Data; @Data diff --git a/app/src/main/java/com/nextcloud/talk/models/json/notifications/NotificationRichObject.java b/app/src/main/java/com/nextcloud/talk/models/json/notifications/NotificationRichObject.java index b341ee79b..6c42ece1b 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/notifications/NotificationRichObject.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/notifications/NotificationRichObject.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.notifications; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @Parcel diff --git a/app/src/main/java/com/nextcloud/talk/models/json/notifications/NotificationsOCS.java b/app/src/main/java/com/nextcloud/talk/models/json/notifications/NotificationsOCS.java index b400ca5a6..f2e792326 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/notifications/NotificationsOCS.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/notifications/NotificationsOCS.java @@ -23,13 +23,11 @@ package com.nextcloud.talk.models.json.notifications; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; import com.nextcloud.talk.models.json.generic.GenericOCS; - +import lombok.Data; import org.parceler.Parcel; import java.util.List; -import lombok.Data; - @Data @Parcel @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/models/json/notifications/NotificationsOverall.java b/app/src/main/java/com/nextcloud/talk/models/json/notifications/NotificationsOverall.java index 934ee1ed9..88a77c51d 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/notifications/NotificationsOverall.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/notifications/NotificationsOverall.java @@ -21,7 +21,6 @@ package com.nextcloud.talk.models.json.notifications; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - import lombok.Data; @Data diff --git a/app/src/main/java/com/nextcloud/talk/models/json/participants/AddParticipantOverall.java b/app/src/main/java/com/nextcloud/talk/models/json/participants/AddParticipantOverall.java index b61f7eeb9..696d31422 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/participants/AddParticipantOverall.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/participants/AddParticipantOverall.java @@ -23,7 +23,6 @@ package com.nextcloud.talk.models.json.participants; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; import com.nextcloud.talk.models.json.rooms.RoomsOCS; - import lombok.Data; @Data diff --git a/app/src/main/java/com/nextcloud/talk/models/json/participants/Participant.java b/app/src/main/java/com/nextcloud/talk/models/json/participants/Participant.java index 07bbec190..069f9b721 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/participants/Participant.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/participants/Participant.java @@ -24,12 +24,10 @@ import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; import com.nextcloud.talk.models.json.converters.EnumParticipantTypeConverter; import com.nextcloud.talk.models.json.converters.ObjectParcelConverter; - +import lombok.Data; import org.parceler.Parcel; import org.parceler.ParcelPropertyConverter; -import lombok.Data; - @Parcel @Data @JsonObject @@ -58,6 +56,7 @@ public class Participant { @ParcelPropertyConverter(ObjectParcelConverter.class) @JsonField(name = "inCall") Object inCall; + String source; public ParticipantFlags getParticipantFlags() { ParticipantFlags participantFlags = ParticipantFlags.NOT_IN_CALL; @@ -75,7 +74,6 @@ public class Participant { return participantFlags; } - String source; public enum ParticipantType { DUMMY, @@ -87,11 +85,11 @@ public class Participant { } public enum ParticipantFlags { - NOT_IN_CALL (0), - IN_CALL (1), - IN_CALL_WITH_AUDIO (3), - IN_CALL_WITH_VIDEO (5), - IN_CALL_WITH_AUDIO_AND_VIDEO (7); + NOT_IN_CALL(0), + IN_CALL(1), + IN_CALL_WITH_AUDIO(3), + IN_CALL_WITH_VIDEO(5), + IN_CALL_WITH_AUDIO_AND_VIDEO(7); private long value; @@ -99,10 +97,6 @@ public class Participant { this.value = value; } - public long getValue() { - return value; - } - public static ParticipantFlags fromValue(long value) { if (value == 0) { return NOT_IN_CALL; @@ -119,5 +113,9 @@ public class Participant { } } + public long getValue() { + return value; + } + } } diff --git a/app/src/main/java/com/nextcloud/talk/models/json/participants/ParticipantsOCS.java b/app/src/main/java/com/nextcloud/talk/models/json/participants/ParticipantsOCS.java index 7d82e9f12..26c336a9f 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/participants/ParticipantsOCS.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/participants/ParticipantsOCS.java @@ -23,13 +23,11 @@ package com.nextcloud.talk.models.json.participants; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; import com.nextcloud.talk.models.json.generic.GenericOCS; - +import lombok.Data; import org.parceler.Parcel; import java.util.List; -import lombok.Data; - @Parcel @Data @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/models/json/participants/ParticipantsOverall.java b/app/src/main/java/com/nextcloud/talk/models/json/participants/ParticipantsOverall.java index 86bc51b48..6a0bcc1d3 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/participants/ParticipantsOverall.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/participants/ParticipantsOverall.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.participants; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Parcel @Data diff --git a/app/src/main/java/com/nextcloud/talk/models/json/push/DecryptedPushMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/push/DecryptedPushMessage.java index 3b077d8bd..de79d261e 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/push/DecryptedPushMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/push/DecryptedPushMessage.java @@ -23,10 +23,8 @@ package com.nextcloud.talk.models.json.push; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonIgnore; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @Parcel diff --git a/app/src/main/java/com/nextcloud/talk/models/json/push/PushConfigurationState.java b/app/src/main/java/com/nextcloud/talk/models/json/push/PushConfigurationState.java index c8038dc60..5b78951b0 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/push/PushConfigurationState.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/push/PushConfigurationState.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.push; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Parcel @Data diff --git a/app/src/main/java/com/nextcloud/talk/models/json/push/PushRegistration.java b/app/src/main/java/com/nextcloud/talk/models/json/push/PushRegistration.java index 0e9d5b65b..0d494ebff 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/push/PushRegistration.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/push/PushRegistration.java @@ -23,10 +23,8 @@ package com.nextcloud.talk.models.json.push; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @Parcel diff --git a/app/src/main/java/com/nextcloud/talk/models/json/push/PushRegistrationOCS.java b/app/src/main/java/com/nextcloud/talk/models/json/push/PushRegistrationOCS.java index e52d5e3c6..e16eae402 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/push/PushRegistrationOCS.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/push/PushRegistrationOCS.java @@ -23,10 +23,8 @@ package com.nextcloud.talk.models.json.push; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; import com.nextcloud.talk.models.json.generic.GenericOCS; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @Parcel diff --git a/app/src/main/java/com/nextcloud/talk/models/json/push/PushRegistrationOverall.java b/app/src/main/java/com/nextcloud/talk/models/json/push/PushRegistrationOverall.java index 572daaafc..6e33d175c 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/push/PushRegistrationOverall.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/push/PushRegistrationOverall.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.push; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @Parcel diff --git a/app/src/main/java/com/nextcloud/talk/models/json/rooms/Conversation.java b/app/src/main/java/com/nextcloud/talk/models/json/rooms/Conversation.java index 39806c67e..e2603814a 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/rooms/Conversation.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/rooms/Conversation.java @@ -27,13 +27,11 @@ import com.nextcloud.talk.models.json.converters.EnumNotificationLevelConverter; import com.nextcloud.talk.models.json.converters.EnumParticipantTypeConverter; import com.nextcloud.talk.models.json.converters.EnumRoomTypeConverter; import com.nextcloud.talk.models.json.participants.Participant; - +import lombok.Data; import org.parceler.Parcel; import java.util.HashMap; -import lombok.Data; - @Parcel @Data @JsonObject @@ -80,13 +78,6 @@ public class Conversation { @JsonField(name = "notificationLevel", typeConverter = EnumNotificationLevelConverter.class) NotificationLevel notificationLevel; - public enum NotificationLevel { - DEFAULT, - ALWAYS, - MENTION, - NEVER - } - public boolean isPublic() { return (RoomType.ROOM_PUBLIC_CALL.equals(type)); } @@ -109,6 +100,13 @@ public class Conversation { return (canModerate() && ((participants != null && participants.size() > 2) || numberOfGuests > 0)); } + public enum NotificationLevel { + DEFAULT, + ALWAYS, + MENTION, + NEVER + } + @Parcel public enum RoomType { DUMMY, diff --git a/app/src/main/java/com/nextcloud/talk/models/json/rooms/RoomOCS.java b/app/src/main/java/com/nextcloud/talk/models/json/rooms/RoomOCS.java index e6d3d6255..ee6741c04 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/rooms/RoomOCS.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/rooms/RoomOCS.java @@ -23,7 +23,6 @@ package com.nextcloud.talk.models.json.rooms; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; import com.nextcloud.talk.models.json.generic.GenericOCS; - import lombok.Data; @Data diff --git a/app/src/main/java/com/nextcloud/talk/models/json/rooms/RoomOverall.java b/app/src/main/java/com/nextcloud/talk/models/json/rooms/RoomOverall.java index 5030262b1..0a158cb15 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/rooms/RoomOverall.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/rooms/RoomOverall.java @@ -22,7 +22,6 @@ package com.nextcloud.talk.models.json.rooms; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - import lombok.Data; @Data diff --git a/app/src/main/java/com/nextcloud/talk/models/json/rooms/RoomsOCS.java b/app/src/main/java/com/nextcloud/talk/models/json/rooms/RoomsOCS.java index a2ee7a38d..f8d5aa291 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/rooms/RoomsOCS.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/rooms/RoomsOCS.java @@ -23,13 +23,11 @@ package com.nextcloud.talk.models.json.rooms; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; import com.nextcloud.talk.models.json.generic.GenericOCS; - +import lombok.Data; import org.parceler.Parcel; import java.util.List; -import lombok.Data; - @Data @Parcel @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/models/json/rooms/RoomsOverall.java b/app/src/main/java/com/nextcloud/talk/models/json/rooms/RoomsOverall.java index ff63df4b1..0ef326f14 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/rooms/RoomsOverall.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/rooms/RoomsOverall.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.rooms; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @Parcel diff --git a/app/src/main/java/com/nextcloud/talk/models/json/sharees/ExactSharees.java b/app/src/main/java/com/nextcloud/talk/models/json/sharees/ExactSharees.java index f1a453309..eae480402 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/sharees/ExactSharees.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/sharees/ExactSharees.java @@ -22,13 +22,11 @@ package com.nextcloud.talk.models.json.sharees; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - +import lombok.Data; import org.parceler.Parcel; import java.util.List; -import lombok.Data; - @Parcel @Data @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/models/json/sharees/Sharee.java b/app/src/main/java/com/nextcloud/talk/models/json/sharees/Sharee.java index 81c519566..550117f5c 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/sharees/Sharee.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/sharees/Sharee.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.sharees; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Parcel @Data diff --git a/app/src/main/java/com/nextcloud/talk/models/json/sharees/ShareesOCS.java b/app/src/main/java/com/nextcloud/talk/models/json/sharees/ShareesOCS.java index e79a18584..f20bcc6b9 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/sharees/ShareesOCS.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/sharees/ShareesOCS.java @@ -23,10 +23,8 @@ package com.nextcloud.talk.models.json.sharees; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; import com.nextcloud.talk.models.json.generic.GenericOCS; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @Parcel diff --git a/app/src/main/java/com/nextcloud/talk/models/json/sharees/ShareesOverall.java b/app/src/main/java/com/nextcloud/talk/models/json/sharees/ShareesOverall.java index eccf496a9..59f0c3a02 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/sharees/ShareesOverall.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/sharees/ShareesOverall.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.sharees; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Parcel @Data diff --git a/app/src/main/java/com/nextcloud/talk/models/json/sharees/SharesData.java b/app/src/main/java/com/nextcloud/talk/models/json/sharees/SharesData.java index acdd5102d..37dd23821 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/sharees/SharesData.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/sharees/SharesData.java @@ -22,13 +22,11 @@ package com.nextcloud.talk.models.json.sharees; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - +import lombok.Data; import org.parceler.Parcel; import java.util.List; -import lombok.Data; - @Parcel @Data @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/models/json/sharees/Value.java b/app/src/main/java/com/nextcloud/talk/models/json/sharees/Value.java index 6eac35196..25a5f933d 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/sharees/Value.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/sharees/Value.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.sharees; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Parcel @Data diff --git a/app/src/main/java/com/nextcloud/talk/models/json/signaling/DataChannelMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/signaling/DataChannelMessage.java index ca1e88c19..97c4594f4 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/signaling/DataChannelMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/signaling/DataChannelMessage.java @@ -22,7 +22,6 @@ package com.nextcloud.talk.models.json.signaling; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - import lombok.Data; @Data diff --git a/app/src/main/java/com/nextcloud/talk/models/json/signaling/NCIceCandidate.java b/app/src/main/java/com/nextcloud/talk/models/json/signaling/NCIceCandidate.java index 2085cce9d..c92e8ebc8 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/signaling/NCIceCandidate.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/signaling/NCIceCandidate.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.signaling; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/models/json/signaling/NCMessagePayload.java b/app/src/main/java/com/nextcloud/talk/models/json/signaling/NCMessagePayload.java index b940d261e..7db2e7ccd 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/signaling/NCMessagePayload.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/signaling/NCMessagePayload.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.signaling; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/models/json/signaling/NCMessageWrapper.java b/app/src/main/java/com/nextcloud/talk/models/json/signaling/NCMessageWrapper.java index b2f9a5245..b40093bf6 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/signaling/NCMessageWrapper.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/signaling/NCMessageWrapper.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.signaling; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/models/json/signaling/NCSignalingMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/signaling/NCSignalingMessage.java index 2aed2a6d1..d4e92503b 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/signaling/NCSignalingMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/signaling/NCSignalingMessage.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.signaling; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/models/json/signaling/Signaling.java b/app/src/main/java/com/nextcloud/talk/models/json/signaling/Signaling.java index c62e76dc8..82f19549d 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/signaling/Signaling.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/signaling/Signaling.java @@ -22,7 +22,6 @@ package com.nextcloud.talk.models.json.signaling; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - import lombok.Data; /** diff --git a/app/src/main/java/com/nextcloud/talk/models/json/signaling/SignalingOCS.java b/app/src/main/java/com/nextcloud/talk/models/json/signaling/SignalingOCS.java index 495314972..a8c44dfe2 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/signaling/SignalingOCS.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/signaling/SignalingOCS.java @@ -23,11 +23,10 @@ package com.nextcloud.talk.models.json.signaling; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; import com.nextcloud.talk.models.json.generic.GenericOCS; +import lombok.Data; import java.util.List; -import lombok.Data; - @Data @JsonObject public class SignalingOCS extends GenericOCS { diff --git a/app/src/main/java/com/nextcloud/talk/models/json/signaling/SignalingOverall.java b/app/src/main/java/com/nextcloud/talk/models/json/signaling/SignalingOverall.java index 25fa42fe5..fc9bfc916 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/signaling/SignalingOverall.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/signaling/SignalingOverall.java @@ -22,7 +22,6 @@ package com.nextcloud.talk.models.json.signaling; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - import lombok.Data; @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/models/json/signaling/settings/IceServer.java b/app/src/main/java/com/nextcloud/talk/models/json/signaling/settings/IceServer.java index 412e8d998..1bad04a55 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/signaling/settings/IceServer.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/signaling/settings/IceServer.java @@ -22,11 +22,10 @@ package com.nextcloud.talk.models.json.signaling.settings; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; +import lombok.Data; import java.util.List; -import lombok.Data; - @Data @JsonObject public class IceServer { diff --git a/app/src/main/java/com/nextcloud/talk/models/json/signaling/settings/Settings.java b/app/src/main/java/com/nextcloud/talk/models/json/signaling/settings/Settings.java index 23a387846..c07e1a365 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/signaling/settings/Settings.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/signaling/settings/Settings.java @@ -22,11 +22,10 @@ package com.nextcloud.talk.models.json.signaling.settings; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; +import lombok.Data; import java.util.List; -import lombok.Data; - @Data @JsonObject public class Settings { diff --git a/app/src/main/java/com/nextcloud/talk/models/json/signaling/settings/SignalingSettingsOcs.java b/app/src/main/java/com/nextcloud/talk/models/json/signaling/settings/SignalingSettingsOcs.java index 258295466..d2db1314f 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/signaling/settings/SignalingSettingsOcs.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/signaling/settings/SignalingSettingsOcs.java @@ -23,7 +23,6 @@ package com.nextcloud.talk.models.json.signaling.settings; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; import com.nextcloud.talk.models.json.generic.GenericOCS; - import lombok.Data; @Data diff --git a/app/src/main/java/com/nextcloud/talk/models/json/signaling/settings/SignalingSettingsOverall.java b/app/src/main/java/com/nextcloud/talk/models/json/signaling/settings/SignalingSettingsOverall.java index fbe7c5098..10d680c4e 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/signaling/settings/SignalingSettingsOverall.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/signaling/settings/SignalingSettingsOverall.java @@ -22,7 +22,6 @@ package com.nextcloud.talk.models.json.signaling.settings; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - import lombok.Data; @Data diff --git a/app/src/main/java/com/nextcloud/talk/models/json/userprofile/UserProfileData.java b/app/src/main/java/com/nextcloud/talk/models/json/userprofile/UserProfileData.java index 9b62f093c..fa2978617 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/userprofile/UserProfileData.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/userprofile/UserProfileData.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.userprofile; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Parcel @Data diff --git a/app/src/main/java/com/nextcloud/talk/models/json/userprofile/UserProfileOCS.java b/app/src/main/java/com/nextcloud/talk/models/json/userprofile/UserProfileOCS.java index 132f12442..ca58bcd09 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/userprofile/UserProfileOCS.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/userprofile/UserProfileOCS.java @@ -23,10 +23,8 @@ package com.nextcloud.talk.models.json.userprofile; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; import com.nextcloud.talk.models.json.generic.GenericOCS; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Parcel @Data diff --git a/app/src/main/java/com/nextcloud/talk/models/json/userprofile/UserProfileOverall.java b/app/src/main/java/com/nextcloud/talk/models/json/userprofile/UserProfileOverall.java index 4ced43f8c..4edd9c531 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/userprofile/UserProfileOverall.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/userprofile/UserProfileOverall.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.userprofile; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Parcel @Data diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/ActorWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/ActorWebSocketMessage.java index b8c931e72..2784f98fb 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/ActorWebSocketMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/ActorWebSocketMessage.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.websocket; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/AuthParametersWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/AuthParametersWebSocketMessage.java index 129b387f0..cdf53b8c5 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/AuthParametersWebSocketMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/AuthParametersWebSocketMessage.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.websocket; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/AuthWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/AuthWebSocketMessage.java index 7a17273ca..578e68d38 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/AuthWebSocketMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/AuthWebSocketMessage.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.websocket; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/BaseWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/BaseWebSocketMessage.java index 2b2c06b39..b950d6cba 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/BaseWebSocketMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/BaseWebSocketMessage.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.websocket; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/ByeWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/ByeWebSocketMessage.java index 368f6aed3..57f5ccee5 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/ByeWebSocketMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/ByeWebSocketMessage.java @@ -22,13 +22,11 @@ package com.nextcloud.talk.models.json.websocket; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - +import lombok.Data; import org.parceler.Parcel; import java.util.HashMap; -import lombok.Data; - @JsonObject @Parcel @Data diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/CallOverallWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/CallOverallWebSocketMessage.java index d7c27b617..39b887b80 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/CallOverallWebSocketMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/CallOverallWebSocketMessage.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.websocket; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/CallWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/CallWebSocketMessage.java index fff246477..7ff5d9880 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/CallWebSocketMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/CallWebSocketMessage.java @@ -23,10 +23,8 @@ package com.nextcloud.talk.models.json.websocket; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; import com.nextcloud.talk.models.json.signaling.NCSignalingMessage; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/ErrorOverallWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/ErrorOverallWebSocketMessage.java index 587e55466..0d8fee0ad 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/ErrorOverallWebSocketMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/ErrorOverallWebSocketMessage.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.websocket; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @Parcel diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/ErrorWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/ErrorWebSocketMessage.java index 253c85688..14c11b9e8 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/ErrorWebSocketMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/ErrorWebSocketMessage.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.websocket; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @Parcel diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/EventOverallWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/EventOverallWebSocketMessage.java index 05dec7750..c131fce6c 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/EventOverallWebSocketMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/EventOverallWebSocketMessage.java @@ -22,13 +22,11 @@ package com.nextcloud.talk.models.json.websocket; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - +import lombok.Data; import org.parceler.Parcel; import java.util.HashMap; -import lombok.Data; - @Data @Parcel @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/HelloOverallWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/HelloOverallWebSocketMessage.java index a39af616a..f5d9a40fb 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/HelloOverallWebSocketMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/HelloOverallWebSocketMessage.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.websocket; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/HelloResponseOverallWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/HelloResponseOverallWebSocketMessage.java index 870c75f1a..aabf0aab7 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/HelloResponseOverallWebSocketMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/HelloResponseOverallWebSocketMessage.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.websocket; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/HelloResponseWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/HelloResponseWebSocketMessage.java index 2368780a9..2ea35db88 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/HelloResponseWebSocketMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/HelloResponseWebSocketMessage.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.websocket; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/HelloWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/HelloWebSocketMessage.java index af2ff3831..1d4f2ebca 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/HelloWebSocketMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/HelloWebSocketMessage.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.websocket; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/JoinedRoomOverallWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/JoinedRoomOverallWebSocketMessage.java index 64cdc790d..cebdc2af7 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/JoinedRoomOverallWebSocketMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/JoinedRoomOverallWebSocketMessage.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.websocket; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/RequestOfferOverallWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/RequestOfferOverallWebSocketMessage.java index 983624b60..aed7d2a95 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/RequestOfferOverallWebSocketMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/RequestOfferOverallWebSocketMessage.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.websocket; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/RequestOfferSignalingMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/RequestOfferSignalingMessage.java index 3395f64eb..2aeddb94e 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/RequestOfferSignalingMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/RequestOfferSignalingMessage.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.websocket; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/RoomOverallWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/RoomOverallWebSocketMessage.java index 36950c6b3..0a076ecfb 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/RoomOverallWebSocketMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/RoomOverallWebSocketMessage.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.websocket; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/RoomPropertiesWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/RoomPropertiesWebSocketMessage.java index 48b4c76f4..2e3fe77f3 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/RoomPropertiesWebSocketMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/RoomPropertiesWebSocketMessage.java @@ -24,10 +24,8 @@ import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; import com.nextcloud.talk.models.json.converters.EnumRoomTypeConverter; import com.nextcloud.talk.models.json.rooms.Conversation; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @Parcel diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/RoomWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/RoomWebSocketMessage.java index 7bc3ce454..e2b499038 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/RoomWebSocketMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/RoomWebSocketMessage.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.websocket; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/ServerHelloResponseFeaturesWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/ServerHelloResponseFeaturesWebSocketMessage.java index c4406211d..7c5927c71 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/ServerHelloResponseFeaturesWebSocketMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/ServerHelloResponseFeaturesWebSocketMessage.java @@ -22,13 +22,11 @@ package com.nextcloud.talk.models.json.websocket; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - +import lombok.Data; import org.parceler.Parcel; import java.util.List; -import lombok.Data; - @JsonObject @Parcel @Data diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/SignalingDataWebSocketMessageForOffer.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/SignalingDataWebSocketMessageForOffer.java index 50118ee2c..4553ef5c6 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/SignalingDataWebSocketMessageForOffer.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/SignalingDataWebSocketMessageForOffer.java @@ -22,10 +22,8 @@ package com.nextcloud.talk.models.json.websocket; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.parceler.Parcel; - import lombok.Data; +import org.parceler.Parcel; @Data @JsonObject diff --git a/app/src/main/java/com/nextcloud/talk/presenters/MentionAutocompletePresenter.java b/app/src/main/java/com/nextcloud/talk/presenters/MentionAutocompletePresenter.java index 3993e6a32..7d1d2204a 100644 --- a/app/src/main/java/com/nextcloud/talk/presenters/MentionAutocompletePresenter.java +++ b/app/src/main/java/com/nextcloud/talk/presenters/MentionAutocompletePresenter.java @@ -49,12 +49,9 @@ import java.util.List; public class MentionAutocompletePresenter extends RecyclerViewPresenter implements FlexibleAdapter.OnItemClickListener { @Inject NcApi ncApi; - - private UserEntity currentUser; - @Inject UserUtils userUtils; - + private UserEntity currentUser; private FlexibleAdapter adapter; private Context context; diff --git a/app/src/main/java/com/nextcloud/talk/receivers/PackageReplacedReceiver.java b/app/src/main/java/com/nextcloud/talk/receivers/PackageReplacedReceiver.java index 46e1deb00..93c89b1d8 100644 --- a/app/src/main/java/com/nextcloud/talk/receivers/PackageReplacedReceiver.java +++ b/app/src/main/java/com/nextcloud/talk/receivers/PackageReplacedReceiver.java @@ -29,7 +29,7 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Build; import android.util.Log; - +import autodagger.AutoInjector; import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.utils.NotificationUtils; import com.nextcloud.talk.utils.database.user.UserUtils; @@ -37,8 +37,6 @@ import com.nextcloud.talk.utils.preferences.AppPreferences; import javax.inject.Inject; -import autodagger.AutoInjector; - @AutoInjector(NextcloudTalkApplication.class) public class PackageReplacedReceiver extends BroadcastReceiver { private static final String TAG = "PackageReplacedReceiver"; diff --git a/app/src/main/java/com/nextcloud/talk/utils/AccountUtils.java b/app/src/main/java/com/nextcloud/talk/utils/AccountUtils.java index d1885aa14..0c39041f2 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/AccountUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/AccountUtils.java @@ -28,7 +28,6 @@ import android.accounts.AccountManager; import android.content.Context; import android.content.pm.PackageManager; import android.util.Log; - import com.nextcloud.talk.R; import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.models.ImportAccount; diff --git a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java index 2a71a2bcc..dc96530f4 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java @@ -20,19 +20,17 @@ package com.nextcloud.talk.utils; import android.net.Uri; - +import androidx.annotation.DimenRes; +import androidx.annotation.Nullable; import com.nextcloud.talk.BuildConfig; import com.nextcloud.talk.R; import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.models.RetrofitBucket; +import okhttp3.Credentials; import java.util.HashMap; import java.util.Map; -import androidx.annotation.DimenRes; -import androidx.annotation.Nullable; -import okhttp3.Credentials; - public class ApiUtils { private static String ocsApiVersion = "/ocs/v2.php"; private static String spreedApiVersion = "/apps/spreed/api/v1"; diff --git a/app/src/main/java/com/nextcloud/talk/utils/DeviceUtils.java b/app/src/main/java/com/nextcloud/talk/utils/DeviceUtils.java index a4c6dce13..8d56bd091 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/DeviceUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/DeviceUtils.java @@ -24,7 +24,6 @@ import android.annotation.SuppressLint; import android.content.Context; import android.os.Build; import android.util.Log; - import com.nextcloud.talk.application.NextcloudTalkApplication; import java.lang.reflect.InvocationTargetException; diff --git a/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.java b/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.java index 5d905a79b..97e05b267 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.java @@ -35,23 +35,21 @@ import android.graphics.drawable.Drawable; import android.graphics.drawable.VectorDrawable; import android.net.Uri; import android.os.Build; -import android.text.Spannable; -import android.text.SpannableString; -import android.text.Spanned; -import android.text.TextPaint; -import android.text.TextUtils; +import android.text.*; import android.text.method.LinkMovementMethod; import android.text.style.AbsoluteSizeSpan; import android.text.style.ClickableSpan; import android.text.style.ForegroundColorSpan; import android.text.style.StyleSpan; -import android.util.DisplayMetrics; import android.util.Log; import android.util.TypedValue; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; - +import androidx.annotation.*; +import androidx.appcompat.widget.AppCompatDrawableManager; +import androidx.core.content.ContextCompat; +import androidx.core.graphics.drawable.DrawableCompat; import com.facebook.drawee.controller.ControllerListener; import com.facebook.drawee.view.SimpleDraweeView; import com.facebook.imagepipeline.common.RotationOptions; @@ -69,20 +67,11 @@ import java.lang.reflect.Method; import java.util.regex.Matcher; import java.util.regex.Pattern; -import androidx.annotation.ColorInt; -import androidx.annotation.ColorRes; -import androidx.annotation.DrawableRes; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.widget.AppCompatDrawableManager; -import androidx.core.content.ContextCompat; -import androidx.core.graphics.drawable.DrawableCompat; - public class DisplayUtils { private static final String TAG = "DisplayUtils"; - public static void setClickableString(String string, String url, TextView textView){ + public static void setClickableString(String string, String url, TextView textView) { SpannableString spannableString = new SpannableString(string); spannableString.setSpan(new ClickableSpan() { @Override @@ -153,7 +142,7 @@ public class DisplayUtils { @Override public void onFinalImageSet(String id, @javax.annotation.Nullable Object imageInfo, @javax.annotation.Nullable Animatable animatable) { - updateViewSize((ImageInfo)imageInfo, draweeView); + updateViewSize((ImageInfo) imageInfo, draweeView); } @Override diff --git a/app/src/main/java/com/nextcloud/talk/utils/DoNotDisturbUtils.java b/app/src/main/java/com/nextcloud/talk/utils/DoNotDisturbUtils.java index 6d875e0d1..1cd6bcae8 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/DoNotDisturbUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/DoNotDisturbUtils.java @@ -25,7 +25,6 @@ import android.content.Context; import android.media.AudioManager; import android.os.Build; import android.os.Vibrator; - import com.nextcloud.talk.application.NextcloudTalkApplication; public class DoNotDisturbUtils { diff --git a/app/src/main/java/com/nextcloud/talk/utils/EmojiToolbar.java b/app/src/main/java/com/nextcloud/talk/utils/EmojiToolbar.java index ddbbbc822..0c435ed40 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/EmojiToolbar.java +++ b/app/src/main/java/com/nextcloud/talk/utils/EmojiToolbar.java @@ -23,12 +23,10 @@ package com.nextcloud.talk.utils; import android.content.Context; import android.text.TextUtils; import android.util.AttributeSet; - -import com.nextcloud.talk.R; -import com.vanniktech.emoji.EmojiTextView; - import androidx.annotation.Nullable; import androidx.appcompat.widget.Toolbar; +import com.nextcloud.talk.R; +import com.vanniktech.emoji.EmojiTextView; public class EmojiToolbar extends Toolbar { private EmojiTextView emojiTitleTextView; diff --git a/app/src/main/java/com/nextcloud/talk/utils/FABAwareScrollingViewBehavior.java b/app/src/main/java/com/nextcloud/talk/utils/FABAwareScrollingViewBehavior.java index 77841302c..da66c2707 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/FABAwareScrollingViewBehavior.java +++ b/app/src/main/java/com/nextcloud/talk/utils/FABAwareScrollingViewBehavior.java @@ -18,15 +18,13 @@ package com.nextcloud.talk.utils; import android.content.Context; import android.util.AttributeSet; import android.view.View; - +import androidx.coordinatorlayout.widget.CoordinatorLayout; +import androidx.core.view.ViewCompat; import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.floatingactionbutton.FloatingActionButton; import java.util.List; -import androidx.coordinatorlayout.widget.CoordinatorLayout; -import androidx.core.view.ViewCompat; - public class FABAwareScrollingViewBehavior extends AppBarLayout.ScrollingViewBehavior { public FABAwareScrollingViewBehavior(Context context, AttributeSet attrs) { diff --git a/app/src/main/java/com/nextcloud/talk/utils/MagicCharPolicy.java b/app/src/main/java/com/nextcloud/talk/utils/MagicCharPolicy.java index de64d4781..e63d58184 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/MagicCharPolicy.java +++ b/app/src/main/java/com/nextcloud/talk/utils/MagicCharPolicy.java @@ -36,6 +36,17 @@ public class MagicCharPolicy implements AutocompletePolicy { this.character = character; } + @Nullable + public static int[] getQueryRange(Spannable text) { + QuerySpan[] span = text.getSpans(0, text.length(), QuerySpan.class); + if (span == null || span.length == 0) return null; + if (span.length > 1) { + // Do absolutely nothing + } + QuerySpan sp = span[0]; + return new int[]{text.getSpanStart(sp), text.getSpanEnd(sp)}; + } + private int[] checkText(Spannable text, int cursorPos) { if (text.length() == 0) { return null; @@ -84,7 +95,6 @@ public class MagicCharPolicy implements AutocompletePolicy { return text.subSequence(text.getSpanStart(sp), text.getSpanEnd(sp)); } - @Override public void onDismiss(Spannable text) { // Remove any span added by shouldShow. Should be useless, but anyway. @@ -96,15 +106,4 @@ public class MagicCharPolicy implements AutocompletePolicy { private static class QuerySpan { } - - @Nullable - public static int[] getQueryRange(Spannable text) { - QuerySpan[] span = text.getSpans(0, text.length(), QuerySpan.class); - if (span == null || span.length == 0) return null; - if (span.length > 1) { - // Do absolutely nothing - } - QuerySpan sp = span[0]; - return new int[]{text.getSpanStart(sp), text.getSpanEnd(sp)}; - } } \ No newline at end of file diff --git a/app/src/main/java/com/nextcloud/talk/utils/MagicFlipView.java b/app/src/main/java/com/nextcloud/talk/utils/MagicFlipView.java index 547c924d5..b86637bce 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/MagicFlipView.java +++ b/app/src/main/java/com/nextcloud/talk/utils/MagicFlipView.java @@ -22,7 +22,6 @@ package com.nextcloud.talk.utils; import android.content.Context; import android.util.AttributeSet; - import eu.davidea.flipview.FlipView; public class MagicFlipView extends FlipView { diff --git a/app/src/main/java/com/nextcloud/talk/utils/NotificationUtils.java b/app/src/main/java/com/nextcloud/talk/utils/NotificationUtils.java index a5852b260..178d16ba7 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/NotificationUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/NotificationUtils.java @@ -29,7 +29,6 @@ import android.graphics.Color; import android.os.Build; import android.service.notification.StatusBarNotification; import android.text.TextUtils; - import com.nextcloud.talk.R; import com.nextcloud.talk.models.database.UserEntity; diff --git a/app/src/main/java/com/nextcloud/talk/utils/OkHttpNetworkFetcherWithCache.java b/app/src/main/java/com/nextcloud/talk/utils/OkHttpNetworkFetcherWithCache.java index 0f923f92f..82e483cf0 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/OkHttpNetworkFetcherWithCache.java +++ b/app/src/main/java/com/nextcloud/talk/utils/OkHttpNetworkFetcherWithCache.java @@ -21,12 +21,11 @@ package com.nextcloud.talk.utils; import com.facebook.imagepipeline.backends.okhttp3.OkHttpNetworkFetcher; - -import java.util.concurrent.Executor; - import okhttp3.Call; import okhttp3.OkHttpClient; +import java.util.concurrent.Executor; + public class OkHttpNetworkFetcherWithCache extends OkHttpNetworkFetcher { public OkHttpNetworkFetcherWithCache(OkHttpClient okHttpClient) { super(okHttpClient); diff --git a/app/src/main/java/com/nextcloud/talk/utils/PushUtils.java b/app/src/main/java/com/nextcloud/talk/utils/PushUtils.java index 4d7302cfe..576599c3d 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/PushUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/PushUtils.java @@ -24,7 +24,7 @@ import android.content.Context; import android.text.TextUtils; import android.util.Base64; import android.util.Log; - +import autodagger.AutoInjector; import com.bluelinelabs.logansquare.LoganSquare; import com.nextcloud.talk.R; import com.nextcloud.talk.api.NcApi; @@ -36,24 +36,14 @@ import com.nextcloud.talk.models.json.push.PushConfigurationState; import com.nextcloud.talk.models.json.push.PushRegistrationOverall; import com.nextcloud.talk.utils.database.user.UserUtils; import com.nextcloud.talk.utils.preferences.AppPreferences; - +import io.reactivex.Observer; +import io.reactivex.disposables.Disposable; +import io.reactivex.schedulers.Schedulers; import org.greenrobot.eventbus.EventBus; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.security.InvalidKeyException; -import java.security.Key; -import java.security.KeyFactory; -import java.security.KeyPair; -import java.security.KeyPairGenerator; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.security.PublicKey; -import java.security.Signature; -import java.security.SignatureException; +import javax.inject.Inject; +import java.io.*; +import java.security.*; import java.security.spec.InvalidKeySpecException; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; @@ -61,13 +51,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.inject.Inject; - -import autodagger.AutoInjector; -import io.reactivex.Observer; -import io.reactivex.disposables.Disposable; -import io.reactivex.schedulers.Schedulers; - @AutoInjector(NextcloudTalkApplication.class) public class PushUtils { private static final String TAG = "PushUtils"; diff --git a/app/src/main/java/com/nextcloud/talk/utils/SecurityUtils.java b/app/src/main/java/com/nextcloud/talk/utils/SecurityUtils.java new file mode 100644 index 000000000..87cb3c03e --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/utils/SecurityUtils.java @@ -0,0 +1,131 @@ +/* + * Nextcloud Talk application + * + * @author Mario Danic + * Copyright (C) 2017-2018 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 . + */ + +package com.nextcloud.talk.utils; + +import android.content.res.Resources; +import android.os.Build; +import android.security.keystore.KeyGenParameterSpec; +import android.security.keystore.KeyPermanentlyInvalidatedException; +import android.security.keystore.KeyProperties; +import android.security.keystore.UserNotAuthenticatedException; +import android.util.Log; +import androidx.annotation.RequiresApi; +import androidx.biometric.BiometricPrompt; +import com.nextcloud.talk.R; +import com.nextcloud.talk.application.NextcloudTalkApplication; + +import javax.crypto.*; +import java.io.IOException; +import java.security.*; +import java.security.cert.CertificateException; +import java.util.Arrays; +import java.util.List; + +public class SecurityUtils { + private static final String TAG = "SecurityUtils"; + private static final String CREDENTIALS_KEY = "KEY_CREDENTIALS"; + private static final byte[] SECRET_BYTE_ARRAY = new byte[]{1, 2, 3, 4, 5, 6}; + + @RequiresApi(api = Build.VERSION_CODES.M) + public static boolean checkIfWeAreAuthenticated(String screenLockTimeout) { + try { + KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore"); + keyStore.load(null); + SecretKey secretKey = (SecretKey) keyStore.getKey(CREDENTIALS_KEY, null); + Cipher cipher = + Cipher.getInstance(KeyProperties.KEY_ALGORITHM_AES + "/" + KeyProperties.BLOCK_MODE_GCM + "/" + KeyProperties.ENCRYPTION_PADDING_NONE); + + // Try encrypting something, it will only work if the user authenticated within + // the last AUTHENTICATION_DURATION_SECONDS seconds. + cipher.init(Cipher.ENCRYPT_MODE, secretKey); + cipher.doFinal(SECRET_BYTE_ARRAY); + + // If the user has recently authenticated, we will reach here + return true; + } catch (UserNotAuthenticatedException e) { + // User is not authenticated, let's authenticate with device credentials. + return false; + } catch (KeyPermanentlyInvalidatedException e) { + // This happens if the lock screen has been disabled or reset after the key was + // generated after the key was generated. + // Shouldnt really happen because we regenerate the key every time an activity + // is created, but oh well + // Create key, and attempt again + createKey(screenLockTimeout); + return false; + } catch (BadPaddingException | IllegalBlockSizeException | KeyStoreException | + CertificateException | UnrecoverableKeyException | IOException + | NoSuchPaddingException | NoSuchAlgorithmException | InvalidKeyException e) { + return false; + } + } + + @RequiresApi(api = Build.VERSION_CODES.M) + public static BiometricPrompt.CryptoObject getCryptoObject() { + Cipher cipher = null; + try { + cipher = Cipher.getInstance(KeyProperties.KEY_ALGORITHM_AES + "/" + KeyProperties.BLOCK_MODE_GCM + "/" + KeyProperties.ENCRYPTION_PADDING_NONE); + } catch (NoSuchAlgorithmException e) { + Log.w(TAG, e.getLocalizedMessage()); + } catch (NoSuchPaddingException e) { + Log.w(TAG, e.getLocalizedMessage()); + } + + BiometricPrompt.CryptoObject cryptoObject = null; + if (cipher != null) { + cryptoObject = new BiometricPrompt.CryptoObject(cipher); + } + + return cryptoObject; + } + @RequiresApi(api = Build.VERSION_CODES.M) + public static void createKey(String validity) { + try { + KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore"); + keyStore.load(null); + KeyGenerator keyGenerator = KeyGenerator.getInstance( + KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore"); + + keyGenerator.init(new KeyGenParameterSpec.Builder(CREDENTIALS_KEY, + KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT) + .setRandomizedEncryptionRequired(true) + .setBlockModes(KeyProperties.BLOCK_MODE_GCM) + .setUserAuthenticationRequired(true) + .setUserAuthenticationValidityDurationSeconds(getIntegerFromStringTimeout(validity)) + .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE) + .build()); + + keyGenerator.generateKey(); + } catch (NoSuchAlgorithmException | NoSuchProviderException + | InvalidAlgorithmParameterException | KeyStoreException + | CertificateException | IOException e) { + Log.e(TAG, "Failed to create a symmetric key"); + } + } + + private static int getIntegerFromStringTimeout(String validity) { + Resources resources = NextcloudTalkApplication.getSharedApplication().getResources(); + List entryValues = Arrays.asList(resources.getStringArray(R.array.screen_lock_timeout_entry_values)); + int[] entryIntValues = resources.getIntArray(R.array.screen_lock_timeout_entry_int_values); + int indexOfValidity = entryValues.indexOf(validity); + return entryIntValues[indexOfValidity]; + } +} diff --git a/app/src/main/java/com/nextcloud/talk/utils/ShareUtils.java b/app/src/main/java/com/nextcloud/talk/utils/ShareUtils.java index 2b1416422..1eabb54fe 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/ShareUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/ShareUtils.java @@ -29,7 +29,7 @@ import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.graphics.drawable.Drawable; import android.text.TextUtils; - +import androidx.annotation.Nullable; import com.kennyc.bottomsheet.adapters.AppAdapter; import com.nextcloud.talk.R; import com.nextcloud.talk.models.database.UserEntity; @@ -40,8 +40,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; -import androidx.annotation.Nullable; - public class ShareUtils { public static String getStringForIntent(Context context, @Nullable String password, UserUtils userUtils, Conversation diff --git a/app/src/main/java/com/nextcloud/talk/utils/TextMatchers.java b/app/src/main/java/com/nextcloud/talk/utils/TextMatchers.java index 583f42c63..7c9126e43 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/TextMatchers.java +++ b/app/src/main/java/com/nextcloud/talk/utils/TextMatchers.java @@ -23,23 +23,21 @@ package com.nextcloud.talk.utils; import android.util.Patterns; - +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.nextcloud.talk.models.json.chat.ChatMessage; import com.vanniktech.emoji.EmojiInformation; import com.vanniktech.emoji.EmojiUtils; +import eu.medsea.mimeutil.MimeUtil; +import eu.medsea.mimeutil.detector.ExtensionMimeDetector; +import eu.medsea.mimeutil.detector.MagicMimeMimeDetector; +import eu.medsea.mimeutil.detector.OpendesktopMimeDetector; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import eu.medsea.mimeutil.MimeUtil; -import eu.medsea.mimeutil.detector.ExtensionMimeDetector; -import eu.medsea.mimeutil.detector.MagicMimeMimeDetector; -import eu.medsea.mimeutil.detector.OpendesktopMimeDetector; - public final class TextMatchers { private static final String TAG = "TextMatchers"; diff --git a/app/src/main/java/com/nextcloud/talk/utils/animations/PulseAnimation.java b/app/src/main/java/com/nextcloud/talk/utils/animations/PulseAnimation.java index d068f2fad..d0538d77e 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/animations/PulseAnimation.java +++ b/app/src/main/java/com/nextcloud/talk/utils/animations/PulseAnimation.java @@ -27,7 +27,6 @@ import android.animation.ObjectAnimator; import android.animation.PropertyValuesHolder; import android.animation.ValueAnimator; import android.view.View; - import androidx.annotation.NonNull; public class PulseAnimation { diff --git a/app/src/main/java/com/nextcloud/talk/utils/animations/SharedElementTransition.java b/app/src/main/java/com/nextcloud/talk/utils/animations/SharedElementTransition.java index 0e4fdea03..351adaafa 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/animations/SharedElementTransition.java +++ b/app/src/main/java/com/nextcloud/talk/utils/animations/SharedElementTransition.java @@ -21,23 +21,16 @@ package com.nextcloud.talk.utils.animations; import android.os.Bundle; -import android.transition.ChangeBounds; -import android.transition.ChangeClipBounds; -import android.transition.ChangeTransform; -import android.transition.Fade; -import android.transition.Transition; -import android.transition.TransitionSet; +import android.transition.*; import android.view.View; import android.view.ViewGroup; - +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.bluelinelabs.conductor.changehandler.SharedElementTransitionChangeHandler; import java.util.ArrayList; import java.util.List; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - public class SharedElementTransition extends SharedElementTransitionChangeHandler { private static final String KEY_WAIT_FOR_TRANSITION_NAMES = "SharedElementTransition.names"; diff --git a/app/src/main/java/com/nextcloud/talk/utils/animations/ViewHidingBehaviourAnimation.java b/app/src/main/java/com/nextcloud/talk/utils/animations/ViewHidingBehaviourAnimation.java index beffd3419..caa0ad04e 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/animations/ViewHidingBehaviourAnimation.java +++ b/app/src/main/java/com/nextcloud/talk/utils/animations/ViewHidingBehaviourAnimation.java @@ -25,7 +25,6 @@ package com.nextcloud.talk.utils.animations; import android.view.View; - import androidx.annotation.NonNull; import androidx.coordinatorlayout.widget.CoordinatorLayout; import androidx.core.view.ViewCompat; diff --git a/app/src/main/java/com/nextcloud/talk/utils/database/arbitrarystorage/ArbitraryStorageModule.java b/app/src/main/java/com/nextcloud/talk/utils/database/arbitrarystorage/ArbitraryStorageModule.java index c239b197d..b54c358b4 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/database/arbitrarystorage/ArbitraryStorageModule.java +++ b/app/src/main/java/com/nextcloud/talk/utils/database/arbitrarystorage/ArbitraryStorageModule.java @@ -19,17 +19,16 @@ */ package com.nextcloud.talk.utils.database.arbitrarystorage; +import autodagger.AutoInjector; import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.dagger.modules.DatabaseModule; - -import javax.inject.Inject; - -import autodagger.AutoInjector; import dagger.Module; import dagger.Provides; import io.requery.Persistable; import io.requery.reactivex.ReactiveEntityStore; +import javax.inject.Inject; + @Module(includes = DatabaseModule.class) @AutoInjector(NextcloudTalkApplication.class) public class ArbitraryStorageModule { diff --git a/app/src/main/java/com/nextcloud/talk/utils/database/arbitrarystorage/ArbitraryStorageUtils.java b/app/src/main/java/com/nextcloud/talk/utils/database/arbitrarystorage/ArbitraryStorageUtils.java index 94ead9dab..afb33a331 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/database/arbitrarystorage/ArbitraryStorageUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/database/arbitrarystorage/ArbitraryStorageUtils.java @@ -19,10 +19,9 @@ */ package com.nextcloud.talk.utils.database.arbitrarystorage; +import androidx.annotation.Nullable; import com.nextcloud.talk.models.database.ArbitraryStorage; import com.nextcloud.talk.models.database.ArbitraryStorageEntity; - -import androidx.annotation.Nullable; import io.reactivex.Observable; import io.reactivex.schedulers.Schedulers; import io.requery.Persistable; diff --git a/app/src/main/java/com/nextcloud/talk/utils/database/user/UserModule.java b/app/src/main/java/com/nextcloud/talk/utils/database/user/UserModule.java index 00d90fd4c..a2bfee62c 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/database/user/UserModule.java +++ b/app/src/main/java/com/nextcloud/talk/utils/database/user/UserModule.java @@ -19,17 +19,16 @@ */ package com.nextcloud.talk.utils.database.user; +import autodagger.AutoInjector; import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.dagger.modules.DatabaseModule; - -import javax.inject.Inject; - -import autodagger.AutoInjector; import dagger.Module; import dagger.Provides; import io.requery.Persistable; import io.requery.reactivex.ReactiveEntityStore; +import javax.inject.Inject; + @Module(includes = DatabaseModule.class) @AutoInjector(NextcloudTalkApplication.class) public class UserModule { diff --git a/app/src/main/java/com/nextcloud/talk/utils/database/user/UserUtils.java b/app/src/main/java/com/nextcloud/talk/utils/database/user/UserUtils.java index 4c9f28ddb..531351e17 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/database/user/UserUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/database/user/UserUtils.java @@ -21,13 +21,9 @@ package com.nextcloud.talk.utils.database.user; import android.text.TextUtils; - +import androidx.annotation.Nullable; import com.nextcloud.talk.models.database.User; import com.nextcloud.talk.models.database.UserEntity; - -import java.util.List; - -import androidx.annotation.Nullable; import io.reactivex.Completable; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -36,6 +32,8 @@ import io.requery.Persistable; import io.requery.query.Result; import io.requery.reactivex.ReactiveEntityStore; +import java.util.List; + public class UserUtils { private ReactiveEntityStore dataStore; diff --git a/app/src/main/java/com/nextcloud/talk/utils/glide/CachingGlideModule.java b/app/src/main/java/com/nextcloud/talk/utils/glide/CachingGlideModule.java index 5ff5133f9..59deda82e 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/glide/CachingGlideModule.java +++ b/app/src/main/java/com/nextcloud/talk/utils/glide/CachingGlideModule.java @@ -22,7 +22,7 @@ package com.nextcloud.talk.utils.glide; import android.content.Context; - +import autodagger.AutoInjector; import com.bumptech.glide.Glide; import com.bumptech.glide.GlideBuilder; import com.bumptech.glide.Registry; @@ -31,13 +31,10 @@ import com.bumptech.glide.integration.okhttp3.OkHttpUrlLoader; import com.bumptech.glide.load.model.GlideUrl; import com.bumptech.glide.module.AppGlideModule; import com.nextcloud.talk.application.NextcloudTalkApplication; - -import java.io.InputStream; +import okhttp3.OkHttpClient; import javax.inject.Inject; - -import autodagger.AutoInjector; -import okhttp3.OkHttpClient; +import java.io.InputStream; @AutoInjector(NextcloudTalkApplication.class) @GlideModule diff --git a/app/src/main/java/com/nextcloud/talk/utils/preferences/AppPreferences.java b/app/src/main/java/com/nextcloud/talk/utils/preferences/AppPreferences.java index 078160dbb..b141ba523 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/preferences/AppPreferences.java +++ b/app/src/main/java/com/nextcloud/talk/utils/preferences/AppPreferences.java @@ -21,13 +21,7 @@ package com.nextcloud.talk.utils.preferences; import com.nextcloud.talk.R; - -import net.orange_box.storebox.annotations.method.ClearMethod; -import net.orange_box.storebox.annotations.method.DefaultValue; -import net.orange_box.storebox.annotations.method.KeyByString; -import net.orange_box.storebox.annotations.method.RegisterChangeListenerMethod; -import net.orange_box.storebox.annotations.method.RemoveMethod; -import net.orange_box.storebox.annotations.method.UnregisterChangeListenerMethod; +import net.orange_box.storebox.annotations.method.*; import net.orange_box.storebox.annotations.option.SaveOption; import net.orange_box.storebox.enums.SaveMode; import net.orange_box.storebox.listeners.OnPreferenceValueChangedListener; @@ -192,6 +186,86 @@ public interface AppPreferences { @RemoveMethod void removeVibrateSetting(); + @KeyByString("screen_security") + @DefaultValue(R.bool.value_false) + boolean getIsScreenSecured(); + + @KeyByString("screen_security") + void setScreenSecurity(boolean value); + + @KeyByString("screen_security") + @RemoveMethod + void removeScreenSecurity(); + + @KeyByString("screen_security") + @RegisterChangeListenerMethod + void registerScreenSecurityListener(OnPreferenceValueChangedListener listener); + + @KeyByString("screen_security") + @UnregisterChangeListenerMethod + void unregisterScreenSecurityListener(OnPreferenceValueChangedListener listener); + + @KeyByString("screen_lock") + @DefaultValue(R.bool.value_false) + boolean getIsScreenLocked(); + + @KeyByString("screen_lock") + void setScreenLock(boolean value); + + @KeyByString("screen_lock") + @RemoveMethod + void removeScreenLock(); + + @KeyByString("screen_lock") + @RegisterChangeListenerMethod + void registerScreenLockListener(OnPreferenceValueChangedListener listener); + + @KeyByString("screen_lock") + @UnregisterChangeListenerMethod + void unregisterScreenLockListener(OnPreferenceValueChangedListener listener); + + @KeyByString("incognito_keyboard") + @DefaultValue(R.bool.value_true) + boolean getIsKeyboardIncognito(); + + @KeyByString("incognito_keyboard") + void setIncognitoKeyboard(boolean value); + + @KeyByString("incognito_keyboard") + @RemoveMethod + void removeIncognitoKeyboard(); + + @KeyByString("link_previews") + @DefaultValue(R.bool.value_true) + boolean getAreLinkPreviewsAllowed(); + + @KeyByString("link_previews") + void setLinkPreviewsAllowed(boolean value); + + @KeyByString("link_previews") + @RemoveMethod + void removeLinkPreviews(); + + @KeyByString("screen_lock_timeout") + @DefaultValue(R.string.nc_screen_lock_timeout_sixty) + String getScreenLockTimeout(); + + @KeyByString("screen_lock_timeout") + void setScreenLockTimeout(int value); + + @KeyByString("screen_lock_timeout") + @RemoveMethod + void removeScreenLockTimeout(); + + @KeyByString("screen_lock_timeout") + @RegisterChangeListenerMethod + void registerScreenLockTimeoutListener(OnPreferenceValueChangedListener listener); + + @KeyByString("screen_lock_timeout") + @UnregisterChangeListenerMethod + void unregisterScreenLockTimeoutListener(OnPreferenceValueChangedListener listener); + + @ClearMethod void clear(); } diff --git a/app/src/main/java/com/nextcloud/talk/utils/preferences/MagicUserInputModule.java b/app/src/main/java/com/nextcloud/talk/utils/preferences/MagicUserInputModule.java index 9c48c9afd..292c9ab02 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/preferences/MagicUserInputModule.java +++ b/app/src/main/java/com/nextcloud/talk/utils/preferences/MagicUserInputModule.java @@ -22,29 +22,38 @@ package com.nextcloud.talk.utils.preferences; import android.app.Dialog; import android.content.Context; +import android.os.Build; import android.text.InputType; import android.view.LayoutInflater; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.EditText; - +import androidx.appcompat.app.AlertDialog; +import autodagger.AutoInjector; import com.nextcloud.talk.R; +import com.nextcloud.talk.application.NextcloudTalkApplication; import com.yarolegovich.mp.io.StandardUserInputModule; +import javax.inject.Inject; import java.util.ArrayList; import java.util.List; -import androidx.appcompat.app.AlertDialog; - +@AutoInjector(NextcloudTalkApplication.class) public class MagicUserInputModule extends StandardUserInputModule { + @Inject + AppPreferences appPreferences; + private List keysWithIntegerInput = new ArrayList<>(); public MagicUserInputModule(Context context) { super(context); + NextcloudTalkApplication.getSharedApplication().getComponentApplication().inject(this); } public MagicUserInputModule(Context context, List keysWithIntegerInput) { super(context); + NextcloudTalkApplication.getSharedApplication().getComponentApplication().inject(this); this.keysWithIntegerInput = keysWithIntegerInput; } @@ -55,7 +64,11 @@ public class MagicUserInputModule extends StandardUserInputModule { CharSequence defaultValue, final Listener listener) { final View view = LayoutInflater.from(context).inflate(R.layout.dialog_edittext, null); - final EditText inputField = (EditText) view.findViewById(R.id.mp_text_input); + final EditText inputField = view.findViewById(R.id.mp_text_input); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && appPreferences.getIsKeyboardIncognito()) { + inputField.setImeOptions(inputField.getImeOptions() | EditorInfo.IME_FLAG_NO_PERSONALIZED_LEARNING); + } if (defaultValue != null) { inputField.setText(defaultValue); diff --git a/app/src/main/java/com/nextcloud/talk/utils/preferencestorage/DatabaseStorageFactory.java b/app/src/main/java/com/nextcloud/talk/utils/preferencestorage/DatabaseStorageFactory.java index c0f6e26d0..54bf7ee02 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/preferencestorage/DatabaseStorageFactory.java +++ b/app/src/main/java/com/nextcloud/talk/utils/preferencestorage/DatabaseStorageFactory.java @@ -21,7 +21,6 @@ package com.nextcloud.talk.utils.preferencestorage; import android.content.Context; - import com.nextcloud.talk.models.database.UserEntity; import com.yarolegovich.mp.io.StorageModule; diff --git a/app/src/main/java/com/nextcloud/talk/utils/preferencestorage/DatabaseStorageModule.java b/app/src/main/java/com/nextcloud/talk/utils/preferencestorage/DatabaseStorageModule.java index 88ed85611..87d0bf8be 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/preferencestorage/DatabaseStorageModule.java +++ b/app/src/main/java/com/nextcloud/talk/utils/preferencestorage/DatabaseStorageModule.java @@ -21,7 +21,7 @@ package com.nextcloud.talk.utils.preferencestorage; import android.os.Bundle; - +import autodagger.AutoInjector; import com.nextcloud.talk.api.NcApi; import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.models.database.ArbitraryStorageEntity; @@ -30,16 +30,13 @@ import com.nextcloud.talk.models.json.generic.GenericOverall; import com.nextcloud.talk.utils.ApiUtils; import com.nextcloud.talk.utils.database.arbitrarystorage.ArbitraryStorageUtils; import com.yarolegovich.mp.io.StorageModule; - -import java.util.Set; - -import javax.inject.Inject; - -import autodagger.AutoInjector; import io.reactivex.Observer; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; +import javax.inject.Inject; +import java.util.Set; + @AutoInjector(NextcloudTalkApplication.class) public class DatabaseStorageModule implements StorageModule { @Inject diff --git a/app/src/main/java/com/nextcloud/talk/utils/singletons/ApplicationWideCurrentRoomHolder.java b/app/src/main/java/com/nextcloud/talk/utils/singletons/ApplicationWideCurrentRoomHolder.java index 4676b183c..6ce60d386 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/singletons/ApplicationWideCurrentRoomHolder.java +++ b/app/src/main/java/com/nextcloud/talk/utils/singletons/ApplicationWideCurrentRoomHolder.java @@ -23,14 +23,13 @@ package com.nextcloud.talk.utils.singletons; import com.nextcloud.talk.models.database.UserEntity; public class ApplicationWideCurrentRoomHolder { + private static final ApplicationWideCurrentRoomHolder holder = new ApplicationWideCurrentRoomHolder(); private String currentRoomId = ""; private String currentRoomToken = ""; private UserEntity userInRoom = new UserEntity(); private boolean inCall = false; private String session = ""; - private static final ApplicationWideCurrentRoomHolder holder = new ApplicationWideCurrentRoomHolder(); - public static ApplicationWideCurrentRoomHolder getInstance() { return holder; } diff --git a/app/src/main/java/com/nextcloud/talk/utils/singletons/AvatarStatusCodeHolder.java b/app/src/main/java/com/nextcloud/talk/utils/singletons/AvatarStatusCodeHolder.java index 50db4f971..25729f79f 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/singletons/AvatarStatusCodeHolder.java +++ b/app/src/main/java/com/nextcloud/talk/utils/singletons/AvatarStatusCodeHolder.java @@ -21,9 +21,8 @@ package com.nextcloud.talk.utils.singletons; public class AvatarStatusCodeHolder { - private int statusCode; - private static final AvatarStatusCodeHolder holder = new AvatarStatusCodeHolder(); + private int statusCode; public static AvatarStatusCodeHolder getInstance() { return holder; diff --git a/app/src/main/java/com/nextcloud/talk/utils/ssl/MagicKeyManager.java b/app/src/main/java/com/nextcloud/talk/utils/ssl/MagicKeyManager.java index 5b36f5c34..488338a28 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/ssl/MagicKeyManager.java +++ b/app/src/main/java/com/nextcloud/talk/utils/ssl/MagicKeyManager.java @@ -25,25 +25,18 @@ import android.security.KeyChain; import android.security.KeyChainException; import android.text.TextUtils; import android.util.Log; - +import androidx.annotation.Nullable; import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.models.database.UserEntity; import com.nextcloud.talk.utils.database.user.UserUtils; import com.nextcloud.talk.utils.preferences.AppPreferences; +import javax.net.ssl.X509KeyManager; import java.net.Socket; import java.security.Principal; import java.security.PrivateKey; import java.security.cert.X509Certificate; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import javax.net.ssl.X509KeyManager; - -import androidx.annotation.Nullable; +import java.util.*; public class MagicKeyManager implements X509KeyManager { private static final String TAG = "MagicKeyManager"; diff --git a/app/src/main/java/com/nextcloud/talk/utils/ssl/MagicTrustManager.java b/app/src/main/java/com/nextcloud/talk/utils/ssl/MagicTrustManager.java index fd158a561..c24c4049c 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/ssl/MagicTrustManager.java +++ b/app/src/main/java/com/nextcloud/talk/utils/ssl/MagicTrustManager.java @@ -24,12 +24,11 @@ package com.nextcloud.talk.utils.ssl; import android.content.Context; import android.util.Log; - import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.events.CertificateEvent; - import org.greenrobot.eventbus.EventBus; +import javax.net.ssl.*; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -38,13 +37,6 @@ import java.security.KeyStoreException; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; -import javax.net.ssl.HostnameVerifier; -import javax.net.ssl.SSLPeerUnverifiedException; -import javax.net.ssl.SSLSession; -import javax.net.ssl.TrustManager; -import javax.net.ssl.TrustManagerFactory; -import javax.net.ssl.X509TrustManager; - public class MagicTrustManager implements X509TrustManager { private static final String TAG = "MagicTrustManager"; diff --git a/app/src/main/java/com/nextcloud/talk/webrtc/MagicAudioManager.java b/app/src/main/java/com/nextcloud/talk/webrtc/MagicAudioManager.java index 3fe9fed5b..6dcfd06ef 100644 --- a/app/src/main/java/com/nextcloud/talk/webrtc/MagicAudioManager.java +++ b/app/src/main/java/com/nextcloud/talk/webrtc/MagicAudioManager.java @@ -40,9 +40,7 @@ import android.media.AudioDeviceInfo; import android.media.AudioManager; import android.os.Build; import android.util.Log; - import com.nextcloud.talk.events.PeerConnectionEvent; - import org.greenrobot.eventbus.EventBus; import org.webrtc.ThreadUtils; @@ -58,10 +56,10 @@ public class MagicAudioManager { private static final String SPEAKERPHONE_AUTO = "auto"; private static final String SPEAKERPHONE_FALSE = "false"; private final Context magicContext; - // Contains speakerphone setting: auto, true or false - private String useSpeakerphone; // Handles all tasks related to Bluetooth headset devices. private final MagicBluetoothManager bluetoothManager; + // Contains speakerphone setting: auto, true or false + private String useSpeakerphone; private AudioManager audioManager; private AudioManagerEvents audioManagerEvents; private AudioManagerState amState; @@ -96,22 +94,6 @@ public class MagicAudioManager { // Callback method for changes in audio focus. private AudioManager.OnAudioFocusChangeListener audioFocusChangeListener; - public void toggleUseSpeakerphone() { - if (useSpeakerphone.equals(SPEAKERPHONE_FALSE)) { - useSpeakerphone = SPEAKERPHONE_AUTO; - setDefaultAudioDevice(AudioDevice.SPEAKER_PHONE); - } else { - useSpeakerphone = SPEAKERPHONE_FALSE; - setDefaultAudioDevice(AudioDevice.EARPIECE); - } - - updateAudioDeviceState(); - } - - public boolean isSpeakerphoneAutoOn() { - return (useSpeakerphone.equals(SPEAKERPHONE_AUTO)); - } - private MagicAudioManager(Context context, boolean useProximitySensor) { Log.d(TAG, "ctor"); ThreadUtils.checkIsOnMainThread(); @@ -156,6 +138,22 @@ public class MagicAudioManager { return new MagicAudioManager(context, useProximitySensor); } + public void toggleUseSpeakerphone() { + if (useSpeakerphone.equals(SPEAKERPHONE_FALSE)) { + useSpeakerphone = SPEAKERPHONE_AUTO; + setDefaultAudioDevice(AudioDevice.SPEAKER_PHONE); + } else { + useSpeakerphone = SPEAKERPHONE_FALSE; + setDefaultAudioDevice(AudioDevice.EARPIECE); + } + + updateAudioDeviceState(); + } + + public boolean isSpeakerphoneAutoOn() { + return (useSpeakerphone.equals(SPEAKERPHONE_AUTO)); + } + /** * This method is called when the proximity sensor reports a state change, * e.g. from "NEAR to FAR" or from "FAR to NEAR". diff --git a/app/src/main/java/com/nextcloud/talk/webrtc/MagicBluetoothManager.java b/app/src/main/java/com/nextcloud/talk/webrtc/MagicBluetoothManager.java index 4ca6c0678..8820457df 100644 --- a/app/src/main/java/com/nextcloud/talk/webrtc/MagicBluetoothManager.java +++ b/app/src/main/java/com/nextcloud/talk/webrtc/MagicBluetoothManager.java @@ -46,7 +46,6 @@ import android.os.Handler; import android.os.Looper; import android.os.Process; import android.util.Log; - import org.webrtc.ThreadUtils; import java.util.List; diff --git a/app/src/main/java/com/nextcloud/talk/webrtc/MagicPeerConnectionWrapper.java b/app/src/main/java/com/nextcloud/talk/webrtc/MagicPeerConnectionWrapper.java index 38ca9efe0..dca7e940e 100644 --- a/app/src/main/java/com/nextcloud/talk/webrtc/MagicPeerConnectionWrapper.java +++ b/app/src/main/java/com/nextcloud/talk/webrtc/MagicPeerConnectionWrapper.java @@ -23,7 +23,7 @@ package com.nextcloud.talk.webrtc; import android.text.TextUtils; import android.util.Log; - +import androidx.annotation.Nullable; import com.bluelinelabs.logansquare.LoganSquare; import com.nextcloud.talk.R; import com.nextcloud.talk.application.NextcloudTalkApplication; @@ -33,17 +33,8 @@ import com.nextcloud.talk.events.SessionDescriptionSendEvent; import com.nextcloud.talk.events.WebSocketCommunicationEvent; import com.nextcloud.talk.models.json.signaling.DataChannelMessage; import com.nextcloud.talk.models.json.signaling.NCIceCandidate; - import org.greenrobot.eventbus.EventBus; -import org.webrtc.DataChannel; -import org.webrtc.IceCandidate; -import org.webrtc.MediaConstraints; -import org.webrtc.MediaStream; -import org.webrtc.PeerConnection; -import org.webrtc.PeerConnectionFactory; -import org.webrtc.RtpReceiver; -import org.webrtc.SdpObserver; -import org.webrtc.SessionDescription; +import org.webrtc.*; import java.io.IOException; import java.nio.ByteBuffer; @@ -51,8 +42,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import androidx.annotation.Nullable; - public class MagicPeerConnectionWrapper { private static String TAG = "MagicPeerConnectionWrapper"; private List iceCandidates = new ArrayList<>(); @@ -211,6 +200,10 @@ public class MagicPeerConnectionWrapper { } } + public boolean isMCUPublisher() { + return isMCUPublisher; + } + private class MagicDataChannelObserver implements DataChannel.Observer { @Override @@ -409,8 +402,4 @@ public class MagicPeerConnectionWrapper { } } } - - public boolean isMCUPublisher() { - return isMCUPublisher; - } } \ No newline at end of file diff --git a/app/src/main/java/com/nextcloud/talk/webrtc/MagicProximitySensor.java b/app/src/main/java/com/nextcloud/talk/webrtc/MagicProximitySensor.java index 27e167d08..364820e06 100644 --- a/app/src/main/java/com/nextcloud/talk/webrtc/MagicProximitySensor.java +++ b/app/src/main/java/com/nextcloud/talk/webrtc/MagicProximitySensor.java @@ -38,7 +38,6 @@ import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Build; import android.util.Log; - import org.webrtc.ThreadUtils; /** diff --git a/app/src/main/java/com/nextcloud/talk/webrtc/MagicWebRTCUtils.java b/app/src/main/java/com/nextcloud/talk/webrtc/MagicWebRTCUtils.java index e0e866a82..a9f029106 100644 --- a/app/src/main/java/com/nextcloud/talk/webrtc/MagicWebRTCUtils.java +++ b/app/src/main/java/com/nextcloud/talk/webrtc/MagicWebRTCUtils.java @@ -34,12 +34,7 @@ package com.nextcloud.talk.webrtc; import android.os.Build; import android.util.Log; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Set; +import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/app/src/main/java/com/nextcloud/talk/webrtc/MagicWebSocketInstance.java b/app/src/main/java/com/nextcloud/talk/webrtc/MagicWebSocketInstance.java index 83f2eaf43..dee3ce695 100644 --- a/app/src/main/java/com/nextcloud/talk/webrtc/MagicWebSocketInstance.java +++ b/app/src/main/java/com/nextcloud/talk/webrtc/MagicWebSocketInstance.java @@ -22,7 +22,7 @@ package com.nextcloud.talk.webrtc; import android.text.TextUtils; import android.util.Log; - +import autodagger.AutoInjector; import com.bluelinelabs.logansquare.LoganSquare; import com.nextcloud.talk.R; import com.nextcloud.talk.application.NextcloudTalkApplication; @@ -30,32 +30,18 @@ import com.nextcloud.talk.events.WebSocketCommunicationEvent; import com.nextcloud.talk.models.database.UserEntity; import com.nextcloud.talk.models.json.signaling.NCMessageWrapper; import com.nextcloud.talk.models.json.signaling.NCSignalingMessage; -import com.nextcloud.talk.models.json.websocket.BaseWebSocketMessage; -import com.nextcloud.talk.models.json.websocket.ByeWebSocketMessage; -import com.nextcloud.talk.models.json.websocket.CallOverallWebSocketMessage; -import com.nextcloud.talk.models.json.websocket.ErrorOverallWebSocketMessage; -import com.nextcloud.talk.models.json.websocket.EventOverallWebSocketMessage; -import com.nextcloud.talk.models.json.websocket.HelloResponseOverallWebSocketMessage; -import com.nextcloud.talk.models.json.websocket.JoinedRoomOverallWebSocketMessage; +import com.nextcloud.talk.models.json.websocket.*; import com.nextcloud.talk.utils.MagicMap; - +import okhttp3.*; +import okio.ByteString; import org.greenrobot.eventbus.EventBus; +import javax.inject.Inject; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.inject.Inject; - -import autodagger.AutoInjector; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import okhttp3.WebSocket; -import okhttp3.WebSocketListener; -import okio.ByteString; - @AutoInjector(NextcloudTalkApplication.class) public class MagicWebSocketInstance extends WebSocketListener { private static final String TAG = "MagicWebSocketInstance"; diff --git a/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java b/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java index 73f4d4f98..3fdc35f89 100644 --- a/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java +++ b/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java @@ -20,30 +20,17 @@ package com.nextcloud.talk.webrtc; +import autodagger.AutoInjector; import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.models.database.UserEntity; import com.nextcloud.talk.models.json.signaling.NCMessageWrapper; -import com.nextcloud.talk.models.json.websocket.ActorWebSocketMessage; -import com.nextcloud.talk.models.json.websocket.AuthParametersWebSocketMessage; -import com.nextcloud.talk.models.json.websocket.AuthWebSocketMessage; -import com.nextcloud.talk.models.json.websocket.CallOverallWebSocketMessage; -import com.nextcloud.talk.models.json.websocket.CallWebSocketMessage; -import com.nextcloud.talk.models.json.websocket.HelloOverallWebSocketMessage; -import com.nextcloud.talk.models.json.websocket.HelloWebSocketMessage; -import com.nextcloud.talk.models.json.websocket.RequestOfferOverallWebSocketMessage; -import com.nextcloud.talk.models.json.websocket.RequestOfferSignalingMessage; -import com.nextcloud.talk.models.json.websocket.RoomOverallWebSocketMessage; -import com.nextcloud.talk.models.json.websocket.RoomWebSocketMessage; -import com.nextcloud.talk.models.json.websocket.SignalingDataWebSocketMessageForOffer; +import com.nextcloud.talk.models.json.websocket.*; import com.nextcloud.talk.utils.ApiUtils; - -import java.util.HashMap; -import java.util.Map; +import okhttp3.OkHttpClient; import javax.inject.Inject; - -import autodagger.AutoInjector; -import okhttp3.OkHttpClient; +import java.util.HashMap; +import java.util.Map; @AutoInjector(NextcloudTalkApplication.class) public class WebSocketConnectionHelper { diff --git a/app/src/main/res/layout/controller_locked.xml b/app/src/main/res/layout/controller_locked.xml new file mode 100644 index 000000000..5df9f7ea1 --- /dev/null +++ b/app/src/main/res/layout/controller_locked.xml @@ -0,0 +1,53 @@ + + + + + + + + + + diff --git a/app/src/main/res/layout/controller_settings.xml b/app/src/main/res/layout/controller_settings.xml index cb0fb571b..ea75eb8e4 100644 --- a/app/src/main/res/layout/controller_settings.xml +++ b/app/src/main/res/layout/controller_settings.xml @@ -142,6 +142,59 @@ + + + + + + + + + + + + - always - \ No newline at end of file + + @string/nc_screen_lock_timeout_30 + @string/nc_screen_lock_timeout_60 + @string/nc_screen_lock_timeout_300 + @string/nc_screen_lock_timeout_600 + + + + @string/nc_screen_lock_timeout_thirty + @string/nc_screen_lock_timeout_sixty + @string/nc_screen_lock_timeout_three_hundred + @string/nc_screen_lock_timeout_six_hundred + + + + 30 + 60 + 300 + 600 + + + diff --git a/app/src/main/res/values/bool.xml b/app/src/main/res/values/bool.xml index 12ba02096..b623a68b5 100644 --- a/app/src/main/res/values/bool.xml +++ b/app/src/main/res/values/bool.xml @@ -21,4 +21,5 @@ true - \ No newline at end of file + false + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c4f8d1a17..61b1cb9c5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -83,9 +83,38 @@ Librem by feandesign No sound Vibrate - Your phone will vibrate unless it\'s silenced + Phone will unless it\'s silenced notifications_vibrate + Privacy + Screen lock + Lock %1$s with Android screen lock or fingerprint + screen_lock + Screen lock inactivity timeout + None + screen_lock_timeout + Screen security + Prevents screenshots in the recent list and inside the app + screen_security + Incognito keyboard + Instructs keyboard to disable personalized learning (without guarantees) + incognito_keyboard + Show link previews + Allows previews of content from received links for supported services + link_previews + Tap to unlock + + 30 seconds + 1 minute + 5 minutes + 10 minutes + 30 + 60 + 300 + 600 + + Unlock %1$s + Cancel No proxy Username