Merge pull request #1003 from nextcloud/bumpWebRtcLib
bump google-webrtc to 1.0.32006
@ -202,7 +202,7 @@ dependencies {
|
|||||||
implementation 'com.github.HITGIF:TextFieldBoxes:1.4.5'
|
implementation 'com.github.HITGIF:TextFieldBoxes:1.4.5'
|
||||||
implementation 'eu.davidea:flexible-adapter:5.1.0'
|
implementation 'eu.davidea:flexible-adapter:5.1.0'
|
||||||
implementation 'eu.davidea:flexible-adapter-ui:1.0.0'
|
implementation 'eu.davidea:flexible-adapter-ui:1.0.0'
|
||||||
implementation 'org.webrtc:google-webrtc:1.0.23295'
|
implementation 'org.webrtc:google-webrtc:1.0.32006'
|
||||||
implementation "org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}"
|
implementation "org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}"
|
||||||
implementation 'com.yarolegovich:lovely-dialog:1.1.0'
|
implementation 'com.yarolegovich:lovely-dialog:1.1.0'
|
||||||
implementation 'com.yarolegovich:lovelyinput:1.0.9'
|
implementation 'com.yarolegovich:lovelyinput:1.0.9'
|
||||||
@ -210,6 +210,7 @@ dependencies {
|
|||||||
implementation 'me.zhanghai.android.effortlesspermissions:library:1.1.0'
|
implementation 'me.zhanghai.android.effortlesspermissions:library:1.1.0'
|
||||||
implementation 'org.apache.commons:commons-lang3:3.9'
|
implementation 'org.apache.commons:commons-lang3:3.9'
|
||||||
implementation 'com.github.wooplr:Spotlight:1.3'
|
implementation 'com.github.wooplr:Spotlight:1.3'
|
||||||
|
implementation 'com.google.code.findbugs:jsr305:2.0.1'
|
||||||
implementation('com.github.mario:chatkit:c6a61767291ddb212a2f4f792a2b6aaf295e69a5', {
|
implementation('com.github.mario:chatkit:c6a61767291ddb212a2f4f792a2b6aaf295e69a5', {
|
||||||
exclude group: 'com.facebook.fresco'
|
exclude group: 'com.facebook.fresco'
|
||||||
})
|
})
|
||||||
|
@ -40,7 +40,7 @@ import com.nextcloud.talk.utils.DisplayUtils;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
import androidx.emoji.widget.EmojiTextView;
|
import androidx.emoji.widget.EmojiTextView;
|
||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
|
@ -160,7 +160,7 @@ class MagicIncomingTextMessageViewHolder(incomingView: View) : MessageHolders
|
|||||||
|
|
||||||
val resources = itemView.resources
|
val resources = itemView.resources
|
||||||
|
|
||||||
val bg_bubble_color = if (message.isDeleted) {
|
val bgBubbleColor = if (message.isDeleted) {
|
||||||
resources.getColor(R.color.bg_message_list_incoming_bubble_deleted)
|
resources.getColor(R.color.bg_message_list_incoming_bubble_deleted)
|
||||||
} else {
|
} else {
|
||||||
resources.getColor(R.color.bg_message_list_incoming_bubble)
|
resources.getColor(R.color.bg_message_list_incoming_bubble)
|
||||||
@ -173,9 +173,9 @@ class MagicIncomingTextMessageViewHolder(incomingView: View) : MessageHolders
|
|||||||
}
|
}
|
||||||
|
|
||||||
val bubbleDrawable = DisplayUtils.getMessageSelector(
|
val bubbleDrawable = DisplayUtils.getMessageSelector(
|
||||||
bg_bubble_color,
|
bgBubbleColor,
|
||||||
resources.getColor(R.color.transparent),
|
resources.getColor(R.color.transparent),
|
||||||
bg_bubble_color, bubbleResource
|
bgBubbleColor, bubbleResource
|
||||||
)
|
)
|
||||||
ViewCompat.setBackground(bubble, bubbleDrawable)
|
ViewCompat.setBackground(bubble, bubbleDrawable)
|
||||||
|
|
||||||
|
@ -136,23 +136,23 @@ class MagicOutcomingTextMessageViewHolder(itemView: View) : OutcomingTextMessage
|
|||||||
realView.isSelected = true
|
realView.isSelected = true
|
||||||
}
|
}
|
||||||
val resources = sharedApplication!!.resources
|
val resources = sharedApplication!!.resources
|
||||||
val bg_bubble_color = if (message.isDeleted) {
|
val bgBubbleColor = if (message.isDeleted) {
|
||||||
resources.getColor(R.color.bg_message_list_outcoming_bubble_deleted)
|
resources.getColor(R.color.bg_message_list_outcoming_bubble_deleted)
|
||||||
} else {
|
} else {
|
||||||
resources.getColor(R.color.bg_message_list_outcoming_bubble)
|
resources.getColor(R.color.bg_message_list_outcoming_bubble)
|
||||||
}
|
}
|
||||||
if (message.isGrouped) {
|
if (message.isGrouped) {
|
||||||
val bubbleDrawable = getMessageSelector(
|
val bubbleDrawable = getMessageSelector(
|
||||||
bg_bubble_color,
|
bgBubbleColor,
|
||||||
resources.getColor(R.color.transparent),
|
resources.getColor(R.color.transparent),
|
||||||
bg_bubble_color,
|
bgBubbleColor,
|
||||||
R.drawable.shape_grouped_outcoming_message)
|
R.drawable.shape_grouped_outcoming_message)
|
||||||
ViewCompat.setBackground(bubble, bubbleDrawable)
|
ViewCompat.setBackground(bubble, bubbleDrawable)
|
||||||
} else {
|
} else {
|
||||||
val bubbleDrawable = getMessageSelector(
|
val bubbleDrawable = getMessageSelector(
|
||||||
bg_bubble_color,
|
bgBubbleColor,
|
||||||
resources.getColor(R.color.transparent),
|
resources.getColor(R.color.transparent),
|
||||||
bg_bubble_color,
|
bgBubbleColor,
|
||||||
R.drawable.shape_outcoming_message)
|
R.drawable.shape_outcoming_message)
|
||||||
ViewCompat.setBackground(bubble, bubbleDrawable)
|
ViewCompat.setBackground(bubble, bubbleDrawable)
|
||||||
}
|
}
|
||||||
|
@ -25,10 +25,9 @@ import android.os.Build
|
|||||||
import android.os.Build.VERSION.SDK_INT
|
import android.os.Build.VERSION.SDK_INT
|
||||||
import android.os.Build.VERSION_CODES.P
|
import android.os.Build.VERSION_CODES.P
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
|
import androidx.appcompat.app.AppCompatDelegate
|
||||||
import androidx.emoji.bundled.BundledEmojiCompatConfig
|
import androidx.emoji.bundled.BundledEmojiCompatConfig
|
||||||
import androidx.emoji.text.EmojiCompat
|
import androidx.emoji.text.EmojiCompat
|
||||||
|
|
||||||
import androidx.appcompat.app.AppCompatDelegate
|
|
||||||
import androidx.lifecycle.LifecycleObserver
|
import androidx.lifecycle.LifecycleObserver
|
||||||
import androidx.multidex.MultiDex
|
import androidx.multidex.MultiDex
|
||||||
import androidx.multidex.MultiDexApplication
|
import androidx.multidex.MultiDexApplication
|
||||||
@ -66,7 +65,6 @@ import com.nextcloud.talk.utils.preferences.AppPreferences
|
|||||||
import com.nextcloud.talk.webrtc.MagicWebRTCUtils
|
import com.nextcloud.talk.webrtc.MagicWebRTCUtils
|
||||||
import com.vanniktech.emoji.EmojiManager
|
import com.vanniktech.emoji.EmojiManager
|
||||||
import com.vanniktech.emoji.googlecompat.GoogleCompatEmojiProvider
|
import com.vanniktech.emoji.googlecompat.GoogleCompatEmojiProvider
|
||||||
|
|
||||||
import de.cotech.hw.SecurityKeyManager
|
import de.cotech.hw.SecurityKeyManager
|
||||||
import de.cotech.hw.SecurityKeyManagerConfig
|
import de.cotech.hw.SecurityKeyManagerConfig
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
@ -74,11 +72,10 @@ import org.conscrypt.Conscrypt
|
|||||||
import org.webrtc.PeerConnectionFactory
|
import org.webrtc.PeerConnectionFactory
|
||||||
import org.webrtc.voiceengine.WebRtcAudioManager
|
import org.webrtc.voiceengine.WebRtcAudioManager
|
||||||
import org.webrtc.voiceengine.WebRtcAudioUtils
|
import org.webrtc.voiceengine.WebRtcAudioUtils
|
||||||
|
|
||||||
import javax.inject.Inject
|
|
||||||
import javax.inject.Singleton
|
|
||||||
import java.security.Security
|
import java.security.Security
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
|
import javax.inject.Inject
|
||||||
|
import javax.inject.Singleton
|
||||||
|
|
||||||
@AutoComponent(modules = [BusModule::class, ContextModule::class, DatabaseModule::class, RestModule::class, UserModule::class, ArbitraryStorageModule::class])
|
@AutoComponent(modules = [BusModule::class, ContextModule::class, DatabaseModule::class, RestModule::class, UserModule::class, ArbitraryStorageModule::class])
|
||||||
@Singleton
|
@Singleton
|
||||||
@ -108,9 +105,7 @@ class NextcloudTalkApplication : MultiDexApplication(), LifecycleObserver {
|
|||||||
WebRtcAudioManager.setBlacklistDeviceForOpenSLESUsage(true)
|
WebRtcAudioManager.setBlacklistDeviceForOpenSLESUsage(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions.builder(this)
|
PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions.builder(this)
|
||||||
.setEnableVideoHwAcceleration(MagicWebRTCUtils.shouldEnableVideoHardwareAcceleration())
|
|
||||||
.createInitializationOptions())
|
.createInitializationOptions())
|
||||||
} catch (e: UnsatisfiedLinkError) {
|
} catch (e: UnsatisfiedLinkError) {
|
||||||
Log.w(TAG, e)
|
Log.w(TAG, e)
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
|
|
||||||
package com.nextcloud.talk.controllers;
|
package com.nextcloud.talk.controllers;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
import android.content.pm.ActivityInfo;
|
import android.content.pm.ActivityInfo;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
@ -265,6 +266,7 @@ public class AccountVerificationController extends BaseController {
|
|||||||
disposables.add(d);
|
disposables.add(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressLint("SetTextI18n")
|
||||||
@Override
|
@Override
|
||||||
public void onNext(UserEntity userEntity) {
|
public void onNext(UserEntity userEntity) {
|
||||||
internalAccountId = userEntity.getId();
|
internalAccountId = userEntity.getId();
|
||||||
@ -278,6 +280,7 @@ public class AccountVerificationController extends BaseController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressLint("SetTextI18n")
|
||||||
@Override
|
@Override
|
||||||
public void onError(Throwable e) {
|
public void onError(Throwable e) {
|
||||||
progressText.setText(progressText.getText().toString() +
|
progressText.setText(progressText.getText().toString() +
|
||||||
@ -305,6 +308,7 @@ public class AccountVerificationController extends BaseController {
|
|||||||
disposables.add(d);
|
disposables.add(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressLint("SetTextI18n")
|
||||||
@Override
|
@Override
|
||||||
public void onNext(UserProfileOverall userProfileOverall) {
|
public void onNext(UserProfileOverall userProfileOverall) {
|
||||||
String displayName = null;
|
String displayName = null;
|
||||||
@ -329,6 +333,7 @@ public class AccountVerificationController extends BaseController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressLint("SetTextI18n")
|
||||||
@Override
|
@Override
|
||||||
public void onError(Throwable e) {
|
public void onError(Throwable e) {
|
||||||
if (getActivity() != null) {
|
if (getActivity() != null) {
|
||||||
@ -351,6 +356,7 @@ public class AccountVerificationController extends BaseController {
|
|||||||
WorkManager.getInstance().enqueue(pushRegistrationWork);
|
WorkManager.getInstance().enqueue(pushRegistrationWork);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressLint("SetTextI18n")
|
||||||
@Subscribe(threadMode = ThreadMode.BACKGROUND)
|
@Subscribe(threadMode = ThreadMode.BACKGROUND)
|
||||||
public void onMessageEvent(EventStatus eventStatus) {
|
public void onMessageEvent(EventStatus eventStatus) {
|
||||||
if (eventStatus.getEventType().equals(EventStatus.EventType.PUSH_REGISTRATION)) {
|
if (eventStatus.getEventType().equals(EventStatus.EventType.PUSH_REGISTRATION)) {
|
||||||
|
@ -107,6 +107,8 @@ import org.webrtc.Camera1Enumerator;
|
|||||||
import org.webrtc.Camera2Enumerator;
|
import org.webrtc.Camera2Enumerator;
|
||||||
import org.webrtc.CameraEnumerator;
|
import org.webrtc.CameraEnumerator;
|
||||||
import org.webrtc.CameraVideoCapturer;
|
import org.webrtc.CameraVideoCapturer;
|
||||||
|
import org.webrtc.DefaultVideoDecoderFactory;
|
||||||
|
import org.webrtc.DefaultVideoEncoderFactory;
|
||||||
import org.webrtc.EglBase;
|
import org.webrtc.EglBase;
|
||||||
import org.webrtc.IceCandidate;
|
import org.webrtc.IceCandidate;
|
||||||
import org.webrtc.Logging;
|
import org.webrtc.Logging;
|
||||||
@ -116,6 +118,7 @@ import org.webrtc.PeerConnection;
|
|||||||
import org.webrtc.PeerConnectionFactory;
|
import org.webrtc.PeerConnectionFactory;
|
||||||
import org.webrtc.RendererCommon;
|
import org.webrtc.RendererCommon;
|
||||||
import org.webrtc.SessionDescription;
|
import org.webrtc.SessionDescription;
|
||||||
|
import org.webrtc.SurfaceTextureHelper;
|
||||||
import org.webrtc.SurfaceViewRenderer;
|
import org.webrtc.SurfaceViewRenderer;
|
||||||
import org.webrtc.VideoCapturer;
|
import org.webrtc.VideoCapturer;
|
||||||
import org.webrtc.VideoSource;
|
import org.webrtc.VideoSource;
|
||||||
@ -358,10 +361,15 @@ public class CallController extends BaseController {
|
|||||||
|
|
||||||
//Create a new PeerConnectionFactory instance.
|
//Create a new PeerConnectionFactory instance.
|
||||||
PeerConnectionFactory.Options options = new PeerConnectionFactory.Options();
|
PeerConnectionFactory.Options options = new PeerConnectionFactory.Options();
|
||||||
peerConnectionFactory = PeerConnectionFactory.builder().createPeerConnectionFactory();
|
DefaultVideoEncoderFactory defaultVideoEncoderFactory = new DefaultVideoEncoderFactory(
|
||||||
|
rootEglBase.getEglBaseContext(),true,true);
|
||||||
|
DefaultVideoDecoderFactory defaultVideoDecoderFactory = new DefaultVideoDecoderFactory(rootEglBase.getEglBaseContext());
|
||||||
|
|
||||||
peerConnectionFactory.setVideoHwAccelerationOptions(rootEglBase.getEglBaseContext(),
|
peerConnectionFactory = PeerConnectionFactory.builder()
|
||||||
rootEglBase.getEglBaseContext());
|
.setOptions(options)
|
||||||
|
.setVideoEncoderFactory(defaultVideoEncoderFactory)
|
||||||
|
.setVideoDecoderFactory(defaultVideoDecoderFactory)
|
||||||
|
.createPeerConnectionFactory();
|
||||||
|
|
||||||
//Create MediaConstraints - Will be useful for specifying video and audio constraints.
|
//Create MediaConstraints - Will be useful for specifying video and audio constraints.
|
||||||
audioConstraints = new MediaConstraints();
|
audioConstraints = new MediaConstraints();
|
||||||
@ -584,15 +592,16 @@ public class CallController extends BaseController {
|
|||||||
|
|
||||||
//Create a VideoSource instance
|
//Create a VideoSource instance
|
||||||
if (videoCapturer != null) {
|
if (videoCapturer != null) {
|
||||||
videoSource = peerConnectionFactory.createVideoSource(videoCapturer);
|
SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.create("CaptureThread", rootEglBase.getEglBaseContext());
|
||||||
|
videoSource = peerConnectionFactory.createVideoSource(false);
|
||||||
|
videoCapturer.initialize(surfaceTextureHelper, getApplicationContext(), videoSource.getCapturerObserver());
|
||||||
|
}
|
||||||
localVideoTrack = peerConnectionFactory.createVideoTrack("NCv0", videoSource);
|
localVideoTrack = peerConnectionFactory.createVideoTrack("NCv0", videoSource);
|
||||||
localMediaStream.addTrack(localVideoTrack);
|
localMediaStream.addTrack(localVideoTrack);
|
||||||
localVideoTrack.setEnabled(false);
|
localVideoTrack.setEnabled(false);
|
||||||
localVideoTrack.addSink(pipVideoView);
|
localVideoTrack.addSink(pipVideoView);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void microphoneInitialization() {
|
private void microphoneInitialization() {
|
||||||
//create an AudioSource instance
|
//create an AudioSource instance
|
||||||
audioSource = peerConnectionFactory.createAudioSource(audioConstraints);
|
audioSource = peerConnectionFactory.createAudioSource(audioConstraints);
|
||||||
|
@ -45,6 +45,7 @@ import android.widget.RelativeLayout;
|
|||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||||
|
|
||||||
import com.bluelinelabs.conductor.RouterTransaction;
|
import com.bluelinelabs.conductor.RouterTransaction;
|
||||||
@ -89,7 +90,6 @@ import java.io.IOException;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
import autodagger.AutoInjector;
|
import autodagger.AutoInjector;
|
||||||
|
@ -747,7 +747,7 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getTitle(): String? {
|
override fun getTitle(): String {
|
||||||
currentConversation?.displayName?.let {
|
currentConversation?.displayName?.let {
|
||||||
return EmojiCompat.get().process(it as CharSequence).toString()
|
return EmojiCompat.get().process(it as CharSequence).toString()
|
||||||
}
|
}
|
||||||
|
@ -33,9 +33,9 @@ abstract class ButterKnifeController : Controller {
|
|||||||
|
|
||||||
private var unbinder: Unbinder? = null
|
private var unbinder: Unbinder? = null
|
||||||
|
|
||||||
constructor() {}
|
constructor()
|
||||||
|
|
||||||
constructor(args: Bundle) : super(args) {}
|
constructor(args: Bundle) : super(args)
|
||||||
|
|
||||||
protected abstract fun inflateView(inflater: LayoutInflater, container: ViewGroup): View
|
protected abstract fun inflateView(inflater: LayoutInflater, container: ViewGroup): View
|
||||||
|
|
||||||
|
@ -146,7 +146,7 @@ class UploadAndShareFilesWorker(val context: Context, workerParameters: WorkerPa
|
|||||||
WorkManager.getInstance().enqueue(shareWorker)
|
WorkManager.getInstance().enqueue(shareWorker)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getFileName(uri: Uri): String? {
|
private fun getFileName(uri: Uri): String {
|
||||||
var filename: String? = null
|
var filename: String? = null
|
||||||
if (uri.scheme == "content") {
|
if (uri.scheme == "content") {
|
||||||
val cursor: Cursor? = context.contentResolver.query(uri, null, null, null, null)
|
val cursor: Cursor? = context.contentResolver.query(uri, null, null, null, null)
|
||||||
|
@ -46,16 +46,16 @@ class AttachmentDialog(val activity: Activity, var chatController :ChatControlle
|
|||||||
private var unbinder: Unbinder? = null
|
private var unbinder: Unbinder? = null
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState)
|
||||||
val view = layoutInflater.inflate(R.layout.dialog_attachment, null);
|
val view = layoutInflater.inflate(R.layout.dialog_attachment, null)
|
||||||
setContentView(view);
|
setContentView(view)
|
||||||
|
|
||||||
window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
|
window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
|
||||||
|
|
||||||
unbinder = ButterKnife.bind(this, view);
|
unbinder = ButterKnife.bind(this, view)
|
||||||
|
|
||||||
attachFromLocal?.setOnClickListener {
|
attachFromLocal?.setOnClickListener {
|
||||||
chatController.sendSelectLocalFileIntent();
|
chatController.sendSelectLocalFileIntent()
|
||||||
dismiss()
|
dismiss()
|
||||||
}
|
}
|
||||||
attachFromCloud?.setOnClickListener {
|
attachFromCloud?.setOnClickListener {
|
||||||
|
@ -23,6 +23,7 @@ import android.net.Uri;
|
|||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
|
||||||
import androidx.annotation.DimenRes;
|
import androidx.annotation.DimenRes;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
import com.nextcloud.talk.BuildConfig;
|
import com.nextcloud.talk.BuildConfig;
|
||||||
import com.nextcloud.talk.R;
|
import com.nextcloud.talk.R;
|
||||||
@ -32,8 +33,6 @@ import com.nextcloud.talk.models.RetrofitBucket;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
|
|
||||||
import okhttp3.Credentials;
|
import okhttp3.Credentials;
|
||||||
|
|
||||||
public class ApiUtils {
|
public class ApiUtils {
|
||||||
|
@ -56,6 +56,7 @@ import androidx.annotation.ColorInt;
|
|||||||
import androidx.annotation.ColorRes;
|
import androidx.annotation.ColorRes;
|
||||||
import androidx.annotation.DrawableRes;
|
import androidx.annotation.DrawableRes;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
import androidx.annotation.XmlRes;
|
import androidx.annotation.XmlRes;
|
||||||
import androidx.appcompat.widget.AppCompatDrawableManager;
|
import androidx.appcompat.widget.AppCompatDrawableManager;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
@ -96,9 +97,6 @@ import java.util.Map;
|
|||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
|
|
||||||
public class DisplayUtils {
|
public class DisplayUtils {
|
||||||
|
|
||||||
private static final String TAG = "DisplayUtils";
|
private static final String TAG = "DisplayUtils";
|
||||||
@ -107,7 +105,7 @@ public class DisplayUtils {
|
|||||||
SpannableString spannableString = new SpannableString(string);
|
SpannableString spannableString = new SpannableString(string);
|
||||||
spannableString.setSpan(new ClickableSpan() {
|
spannableString.setSpan(new ClickableSpan() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(@Nonnull View widget) {
|
public void onClick(@NonNull View widget) {
|
||||||
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
|
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
|
||||||
browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
NextcloudTalkApplication.Companion.getSharedApplication().getApplicationContext().startActivity(browserIntent);
|
NextcloudTalkApplication.Companion.getSharedApplication().getApplicationContext().startActivity(browserIntent);
|
||||||
@ -181,12 +179,12 @@ public class DisplayUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFinalImageSet(String id, @javax.annotation.Nullable Object imageInfo, @javax.annotation.Nullable Animatable animatable) {
|
public void onFinalImageSet(String id, @androidx.annotation.Nullable Object imageInfo, @androidx.annotation.Nullable Animatable animatable) {
|
||||||
updateViewSize((ImageInfo) imageInfo, draweeView);
|
updateViewSize((ImageInfo) imageInfo, draweeView);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onIntermediateImageSet(String id, @javax.annotation.Nullable Object imageInfo) {
|
public void onIntermediateImageSet(String id, @androidx.annotation.Nullable Object imageInfo) {
|
||||||
updateViewSize((ImageInfo) imageInfo, draweeView);
|
updateViewSize((ImageInfo) imageInfo, draweeView);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ object NotificationUtils {
|
|||||||
val NOTIFICATION_CHANNEL_MESSAGES_V3 = "NOTIFICATION_CHANNEL_MESSAGES_V3"
|
val NOTIFICATION_CHANNEL_MESSAGES_V3 = "NOTIFICATION_CHANNEL_MESSAGES_V3"
|
||||||
val NOTIFICATION_CHANNEL_CALLS_V3 = "NOTIFICATION_CHANNEL_CALLS_V3"
|
val NOTIFICATION_CHANNEL_CALLS_V3 = "NOTIFICATION_CHANNEL_CALLS_V3"
|
||||||
|
|
||||||
fun getVibrationEffectForCalls(): LongArray? {
|
fun getVibrationEffectForCalls(): LongArray {
|
||||||
return longArrayOf(0L, 400L, 800L, 600L, 800L, 800L, 800L, 1000L)
|
return longArrayOf(0L, 400L, 800L, 600L, 800L, 800L, 800L, 1000L)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -82,7 +82,6 @@
|
|||||||
android:textSize="12sp"
|
android:textSize="12sp"
|
||||||
app:layout_alignSelf="center"
|
app:layout_alignSelf="center"
|
||||||
tools:text="16:08" />
|
tools:text="16:08" />
|
||||||
/>
|
|
||||||
|
|
||||||
</com.google.android.flexbox.FlexboxLayout>
|
</com.google.android.flexbox.FlexboxLayout>
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<svg width="100%" height="100%" viewBox="0 0 1344 1344" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;">
|
<svg width="100%" height="100%" viewBox="0 0 1344 1344" version="1.1" xmlns="http://www.w3.org/2000/svg" xml:space="preserve"
|
||||||
|
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;">
|
||||||
<rect x="-30.496" y="-19.169" width="1488.2" height="1362.73" style="fill:rgb(0,130,201);"/>
|
<rect x="-30.496" y="-19.169" width="1488.2" height="1362.73" style="fill:rgb(0,130,201);"/>
|
||||||
<g id="g13338" transform="matrix(5.13054,0,0,5.13054,-5362.99,82.5409)">
|
<g id="g13338" transform="matrix(5.13054,0,0,5.13054,-5362.99,82.5409)">
|
||||||
<path id="path256" d="M1298,54.1C1299.6,54.1 1300.9,52.8 1300.9,51.2C1300.9,49.6 1299.6,48.3 1298,48.3C1296.4,48.3 1295.1,49.6 1295.1,51.2C1295.1,52.8 1296.4,54.1 1298,54.1Z" style="fill:rgb(76,167,217);fill-rule:nonzero;"/>
|
<path id="path256" d="M1298,54.1C1299.6,54.1 1300.9,52.8 1300.9,51.2C1300.9,49.6 1299.6,48.3 1298,48.3C1296.4,48.3 1295.1,49.6 1295.1,51.2C1295.1,52.8 1296.4,54.1 1298,54.1Z" style="fill:rgb(76,167,217);fill-rule:nonzero;"/>
|
||||||
|
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 71 KiB |
@ -1,5 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<svg width="100%" height="100%" viewBox="0 0 1344 1344" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;">
|
<svg width="100%" height="100%" viewBox="0 0 1344 1344" version="1.1" xmlns="http://www.w3.org/2000/svg" xml:space="preserve"
|
||||||
|
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;">
|
||||||
<path id="path2" d="M671.959,347C493.701,347.003 347.017,493.69 347.017,671.951C347.017,671.954 347.017,671.957 347.017,671.96C347.017,850.222 493.701,996.909 671.959,996.912C731.433,996.791 789.748,980.344 840.521,949.372C880.458,965.242 969.914,1012.33 991.205,991.988C1013.45,970.741 965.085,870.743 953.49,833.584C981.82,784.426 996.787,728.695 996.898,671.958C996.895,493.7 850.215,347.016 671.96,347.011L671.959,347ZM671.997,470.543C782.529,470.543 873.483,561.5 873.483,672.035C873.476,782.565 782.524,873.512 671.996,873.512C561.469,873.512 470.517,782.565 470.509,672.035C470.509,672.035 470.509,672.035 470.509,672.035C470.509,561.5 561.464,470.543 671.996,470.543L671.997,470.543Z" style="fill:white;fill-rule:nonzero;"/>
|
<path id="path2" d="M671.959,347C493.701,347.003 347.017,493.69 347.017,671.951C347.017,671.954 347.017,671.957 347.017,671.96C347.017,850.222 493.701,996.909 671.959,996.912C731.433,996.791 789.748,980.344 840.521,949.372C880.458,965.242 969.914,1012.33 991.205,991.988C1013.45,970.741 965.085,870.743 953.49,833.584C981.82,784.426 996.787,728.695 996.898,671.958C996.895,493.7 850.215,347.016 671.96,347.011L671.959,347ZM671.997,470.543C782.529,470.543 873.483,561.5 873.483,672.035C873.476,782.565 782.524,873.512 671.996,873.512C561.469,873.512 470.517,782.565 470.509,672.035C470.509,672.035 470.509,672.035 470.509,672.035C470.509,561.5 561.464,470.543 671.996,470.543L671.997,470.543Z" style="fill:white;fill-rule:nonzero;"/>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.1 KiB |
@ -1,5 +1,4 @@
|
|||||||
|
<svg width="21px" height="24px" viewBox="0 0 21 24" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
<svg width="21px" height="24px" viewBox="0 0 21 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
||||||
<defs></defs>
|
<defs></defs>
|
||||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
<g id="file-icon" fill-rule="nonzero" fill="#000000">
|
<g id="file-icon" fill-rule="nonzero" fill="#000000">
|
||||||
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
@ -1,5 +1,4 @@
|
|||||||
|
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
||||||
<defs></defs>
|
<defs></defs>
|
||||||
<g id="icon" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
<g id="icon" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
<g id="vector" fill-rule="nonzero">
|
<g id="vector" fill-rule="nonzero">
|
||||||
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.1 KiB |
@ -1,5 +1,4 @@
|
|||||||
|
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
||||||
<defs></defs>
|
<defs></defs>
|
||||||
<g id="Picon" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
<g id="Picon" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
<g id="file_password_request" fill-rule="nonzero">
|
<g id="file_password_request" fill-rule="nonzero">
|
||||||
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
@ -1,2 +1,2 @@
|
|||||||
DO NOT TOUCH; GENERATED BY DRONE
|
DO NOT TOUCH; GENERATED BY DRONE
|
||||||
<span class="mdl-layout-title">Lint Report: 3 errors and 240 warnings</span>
|
<span class="mdl-layout-title">Lint Report: 3 errors and 239 warnings</span>
|
||||||
|