Skip to content
This repository was archived by the owner on Oct 16, 2022. It is now read-only.

Commit 5e26d72

Browse files
committed
added shadow to thumbnail texts
return to own client id, leave twitch only for stream and vods playlists, clips urls reduce glide cache usage migrate to new crashlytics fixed downloaded clip durations and positions from vod always reload streams playlists
1 parent 40055d4 commit 5e26d72

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+265
-269
lines changed

app/build.gradle

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ apply plugin: 'com.android.application'
22
apply plugin: 'kotlin-android'
33
apply plugin: 'kotlin-android-extensions'
44
apply plugin: 'kotlin-kapt'
5-
apply plugin: 'io.fabric'
5+
apply plugin: 'com.google.firebase.crashlytics'
66

77
def keystoreProperties = new Properties()
88
keystoreProperties.load(new FileInputStream(project.file("keystore.properties")))
@@ -26,8 +26,8 @@ android {
2626
defaultConfig {
2727
applicationId "com.github.exact7.xtra"
2828
minSdkVersion 16
29-
versionCode 87
30-
versionName "1.5.5"
29+
versionCode 88
30+
versionName "1.5.6"
3131
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
3232
targetSdkVersion 29
3333
javaCompileOptions {
@@ -112,10 +112,10 @@ dependencies {
112112
implementation "androidx.fragment:fragment-ktx:1.2.0"
113113

114114
//Firebase
115-
implementation 'com.google.firebase:firebase-core:17.2.1'
116-
implementation('com.crashlytics.sdk.android:crashlytics:2.10.1@aar') { //TODO
117-
transitive = true
118-
}
115+
// implementation 'com.google.firebase:firebase-crashlytics:17.2.2'
116+
implementation platform('com.google.firebase:firebase-bom:25.12.0')
117+
implementation 'com.google.firebase:firebase-crashlytics-ktx'
118+
implementation 'com.google.firebase:firebase-analytics-ktx'
119119

120120
//Misc
121121
implementation 'com.google.code.gson:gson:2.8.6'

app/src/main/AndroidManifest.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
<service android:name=".ui.player.AudioPlayerService" />
4545

4646
<meta-data android:name="android.max_aspect" android:value="ratio_float" />
47-
<meta-data android:name="io.fabric.ApiKey" android:value="c369e4413442968597c972a9b9116e4b458b163a" />
4847
<meta-data android:name="google_analytics_adid_collection_enabled" android:value="false" />
4948
<meta-data android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
5049
android:value="com.google.android.exoplayer2.ext.cast.DefaultCastOptionsProvider" />

app/src/main/java/com/github/exact7/xtra/XtraApp.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,12 @@ import android.app.Application
44
import android.content.Context
55
import androidx.lifecycle.ProcessLifecycleOwner
66
import androidx.multidex.MultiDex
7-
import com.crashlytics.android.Crashlytics
87
import com.github.exact7.xtra.di.AppInjector
98
import com.github.exact7.xtra.util.AppLifecycleObserver
109
import com.github.exact7.xtra.util.LifecycleListener
1110
import dagger.android.AndroidInjector
1211
import dagger.android.DispatchingAndroidInjector
1312
import dagger.android.HasAndroidInjector
14-
import io.fabric.sdk.android.Fabric
1513
import javax.inject.Inject
1614

1715

@@ -28,7 +26,6 @@ class XtraApp : Application(), HasAndroidInjector {
2826
super.onCreate()
2927
INSTANCE = this
3028
AppInjector.init(this)
31-
Fabric.with(this, Crashlytics())
3229
// RxJavaPlugins.setErrorHandler { //TODO
3330
// if (it !is UnknownHostException) {
3431
// Crashlytics.logException(it)

app/src/main/java/com/github/exact7/xtra/di/XtraModule.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class XtraModule {
5858
.baseUrl("https://api.twitch.tv/kraken/")
5959
.client(client.newBuilder().addInterceptor { chain ->
6060
val request = chain.request().newBuilder()
61-
.addHeader("Client-ID", TwitchApiHelper.TWITCH_CLIENT_ID)
61+
.addHeader("Client-ID", TwitchApiHelper.CLIENT_ID)
6262
.addHeader("Accept", "application/vnd.twitchtv.v5+json")
6363
.build()
6464
chain.proceed(request)

app/src/main/java/com/github/exact7/xtra/model/User.kt

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@ import com.github.exact7.xtra.util.prefs
88

99
sealed class User(val id: String,
1010
val name: String,
11-
val token: String,
12-
val newToken: Boolean) {
11+
val token: String) {
1312

1413
companion object {
1514
private var user: User? = null
@@ -20,11 +19,10 @@ sealed class User(val id: String,
2019
if (id != null) {
2120
val name = getString(C.USERNAME, null)!!
2221
val token = getString(C.TOKEN, null)!!
23-
val newToken = getBoolean(C.NEW_TOKEN, false)
2422
if (TwitchApiHelper.checkedValidation) {
25-
LoggedIn(id, name, token, newToken)
23+
LoggedIn(id, name, token)
2624
} else {
27-
NotValidated(id, name, token, newToken)
25+
NotValidated(id, name, token)
2826
}
2927
} else {
3028
NotLoggedIn()
@@ -39,12 +37,10 @@ sealed class User(val id: String,
3937
putString(C.USER_ID, user.id)
4038
putString(C.USERNAME, user.name)
4139
putString(C.TOKEN, user.token)
42-
putBoolean(C.NEW_TOKEN, user.newToken)
4340
} else {
4441
putString(C.USER_ID, null)
4542
putString(C.USERNAME, null)
4643
putString(C.TOKEN, null)
47-
putBoolean(C.NEW_TOKEN, true)
4844
}
4945
}
5046
}
@@ -75,8 +71,8 @@ sealed class User(val id: String,
7571
}
7672
}
7773

78-
class LoggedIn(id: String, name: String, token: String, newToken: Boolean) : User(id, name, token, newToken) {
79-
constructor(user: NotValidated) : this(user.id, user.name, user.token, user.newToken)
74+
class LoggedIn(id: String, name: String, token: String) : User(id, name, token) {
75+
constructor(user: NotValidated) : this(user.id, user.name, user.token)
8076
}
81-
class NotValidated(id: String, name: String, token: String, newToken: Boolean) : User(id, name, token, newToken)
82-
class NotLoggedIn : User("", "", "", false)
77+
class NotValidated(id: String, name: String, token: String) : User(id, name, token)
78+
class NotLoggedIn : User("", "", "")

app/src/main/java/com/github/exact7/xtra/repository/KrakenRepository.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ class KrakenRepository @Inject constructor(
214214
api.getUserFollows(userId, channelId).body()?.let { it.string().length > 300 } == true
215215
}
216216

217-
override suspend fun followChannel(userToken: String, userId: String, channelId: String): Boolean = withContext(Dispatchers.IO) {
217+
override suspend fun followChannel(userToken: String, userId: String, channelId: String): Boolean = withContext(Dispatchers.IO) {
218218
Log.d(TAG, "Following channel $channelId")
219219
api.followChannel(TwitchApiHelper.addTokenPrefix(userToken), userId, channelId).body() != null
220220
}

app/src/main/java/com/github/exact7/xtra/repository/PlayerRepository.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,12 @@ import android.util.Log
55
import androidx.core.net.toUri
66
import androidx.lifecycle.LiveData
77
import androidx.lifecycle.Transformations
8-
import com.github.exact7.xtra.XtraApp
98
import com.github.exact7.xtra.api.ApiService
109
import com.github.exact7.xtra.api.MiscApi
1110
import com.github.exact7.xtra.api.UsherApi
1211
import com.github.exact7.xtra.db.EmotesDao
1312
import com.github.exact7.xtra.db.RecentEmotesDao
1413
import com.github.exact7.xtra.db.VideoPositionsDao
15-
import com.github.exact7.xtra.model.LoggedIn
16-
import com.github.exact7.xtra.model.User
1714
import com.github.exact7.xtra.model.VideoPosition
1815
import com.github.exact7.xtra.model.chat.BttvEmotesResponse
1916
import com.github.exact7.xtra.model.chat.FfzEmotesResponse
@@ -53,7 +50,7 @@ class PlayerRepository @Inject constructor(
5350
val serverSessionId = UUID.randomUUID().toString().replace("-", "").substring(0, 32)
5451
val cookie = "unique_id=$uniqueId; unique_id_durable=$uniqueId; twitch.lohp.countryCode=BY; api_token=twilight.$apiToken; server_session_id=$serverSessionId"
5552

56-
val accessToken = api.getStreamAccessToken(TWITCH_CLIENT_ID, cookie, channelName, User.get(XtraApp.INSTANCE).let { if (it is LoggedIn && it.newToken) it.token else UNDEFINED })
53+
val accessToken = api.getStreamAccessToken(TWITCH_CLIENT_ID, cookie, channelName, UNDEFINED)
5754
val options = HashMap<String, String>()
5855
options["token"] = accessToken.token
5956
options["sig"] = accessToken.sig
@@ -73,7 +70,7 @@ class PlayerRepository @Inject constructor(
7370
suspend fun loadVideoPlaylist(videoId: String): Response<ResponseBody> = withContext(Dispatchers.IO) {
7471
val id = videoId.substring(1) //substring 1 to remove v, should be removed when upgraded to new api
7572
Log.d(TAG, "Getting video playlist for video $id")
76-
val accessToken = api.getVideoAccessToken(TWITCH_CLIENT_ID, id, User.get(XtraApp.INSTANCE).let { if (it is LoggedIn && it.newToken) it.token else UNDEFINED })
73+
val accessToken = api.getVideoAccessToken(TWITCH_CLIENT_ID, id, UNDEFINED)
7774
val options = HashMap<String, String>()
7875
options["token"] = accessToken.token
7976
options["sig"] = accessToken.sig

app/src/main/java/com/github/exact7/xtra/ui/channel/ChannelPagerViewModel.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,13 @@ import androidx.lifecycle.viewModelScope
77
import com.github.exact7.xtra.model.LoggedIn
88
import com.github.exact7.xtra.model.kraken.Channel
99
import com.github.exact7.xtra.model.kraken.stream.StreamWrapper
10-
import com.github.exact7.xtra.repository.GraphQLRepositoy
1110
import com.github.exact7.xtra.repository.TwitchService
1211
import com.github.exact7.xtra.ui.common.follow.FollowLiveData
1312
import com.github.exact7.xtra.ui.common.follow.FollowViewModel
1413
import kotlinx.coroutines.launch
1514
import javax.inject.Inject
1615

17-
class ChannelPagerViewModel @Inject constructor(
18-
private val repository: TwitchService,
19-
private val graphQLRepositoy: GraphQLRepositoy) : ViewModel(), FollowViewModel {
16+
class ChannelPagerViewModel @Inject constructor(private val repository: TwitchService) : ViewModel(), FollowViewModel {
2017

2118
private val _channel = MutableLiveData<Channel>()
2219
val channel: LiveData<Channel>
@@ -35,7 +32,7 @@ class ChannelPagerViewModel @Inject constructor(
3532

3633
override fun setUser(user: LoggedIn) {
3734
if (!this::follow.isInitialized) {
38-
follow = FollowLiveData(repository, graphQLRepositoy, user, channelInfo.first, viewModelScope)
35+
follow = FollowLiveData(repository, user, channelInfo.first, viewModelScope)
3936
}
4037
}
4138

app/src/main/java/com/github/exact7/xtra/ui/channel/info/ChannelInfoViewModel.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,13 @@ import androidx.lifecycle.viewModelScope
77
import com.github.exact7.xtra.model.LoggedIn
88
import com.github.exact7.xtra.model.kraken.Channel
99
import com.github.exact7.xtra.model.kraken.stream.StreamWrapper
10-
import com.github.exact7.xtra.repository.GraphQLRepositoy
1110
import com.github.exact7.xtra.repository.TwitchService
1211
import com.github.exact7.xtra.ui.common.follow.FollowLiveData
1312
import com.github.exact7.xtra.ui.common.follow.FollowViewModel
1413
import kotlinx.coroutines.launch
1514
import javax.inject.Inject
1615

17-
class ChannelInfoViewModel @Inject constructor(
18-
private val repository: TwitchService,
19-
private val graphQLRepositoy: GraphQLRepositoy) : ViewModel(), FollowViewModel {
16+
class ChannelInfoViewModel @Inject constructor(private val repository: TwitchService) : ViewModel(), FollowViewModel {
2017

2118
private val _channel = MutableLiveData<Channel>()
2219
val channel: LiveData<Channel>
@@ -35,7 +32,7 @@ class ChannelInfoViewModel @Inject constructor(
3532

3633
override fun setUser(user: LoggedIn) {
3734
if (!this::follow.isInitialized) {
38-
follow = FollowLiveData(repository, graphQLRepositoy, user, channelInfo.first, viewModelScope)
35+
follow = FollowLiveData(repository, user, channelInfo.first, viewModelScope)
3936
}
4037
}
4138

app/src/main/java/com/github/exact7/xtra/ui/clips/ClipsAdapter.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import android.view.View
55
import androidx.appcompat.widget.PopupMenu
66
import androidx.fragment.app.Fragment
77
import androidx.recyclerview.widget.DiffUtil
8+
import com.bumptech.glide.load.engine.DiskCacheStrategy
89
import com.github.exact7.xtra.R
910
import com.github.exact7.xtra.model.kraken.clip.Clip
1011
import com.github.exact7.xtra.ui.common.BasePagedListAdapter
@@ -35,7 +36,7 @@ class ClipsAdapter(
3536
with(view) {
3637
setOnClickListener { clickListener.startClip(item) }
3738
setOnLongClickListener { showDownloadDialog(item); true }
38-
thumbnail.loadImage(fragment, item.thumbnails.medium)
39+
thumbnail.loadImage(fragment, item.thumbnails.medium, diskCacheStrategy = DiskCacheStrategy.NONE)
3940
date.text = TwitchApiHelper.formatTime(context, item.createdAt)
4041
views.text = TwitchApiHelper.formatViewsCount(context, item.views)
4142
duration.text = DateUtils.formatElapsedTime(item.duration.toLong())

app/src/main/java/com/github/exact7/xtra/ui/clips/common/ChannelClipsAdapter.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import android.view.View
55
import androidx.appcompat.widget.PopupMenu
66
import androidx.fragment.app.Fragment
77
import androidx.recyclerview.widget.DiffUtil
8+
import com.bumptech.glide.load.engine.DiskCacheStrategy
89
import com.github.exact7.xtra.R
910
import com.github.exact7.xtra.model.kraken.clip.Clip
1011
import com.github.exact7.xtra.ui.clips.BaseClipsFragment
@@ -33,7 +34,7 @@ class ChannelClipsAdapter(
3334
with(view) {
3435
setOnClickListener { clickListener.startClip(item) }
3536
setOnLongClickListener { showDownloadDialog(item); true }
36-
thumbnail.loadImage(fragment, item.thumbnails.medium)
37+
thumbnail.loadImage(fragment, item.thumbnails.medium, diskCacheStrategy = DiskCacheStrategy.NONE)
3738
date.text = TwitchApiHelper.formatTime(context, item.createdAt)
3839
views.text = TwitchApiHelper.formatViewsCount(context, item.views)
3940
duration.text = DateUtils.formatElapsedTime(item.duration.toLong())

app/src/main/java/com/github/exact7/xtra/ui/common/ChatAdapter.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ class ChatAdapter(
9494
"partner" -> "https://static-cdn.jtvnw.net/badges/v1/d12a2e27-16f6-41d0-ab77-b780518f00a3/2"
9595
"clip-champ" -> "https://static-cdn.jtvnw.net/badges/v1/f38976e0-ffc9-11e7-86d6-7f98b26a9d79/2"
9696
"vip" -> "https://static-cdn.jtvnw.net/badges/v1/b817aba4-fad8-49e2-b88a-7cc744dfa6ec/2"
97+
"glhf-pledge" -> "https://static-cdn.jtvnw.net/badges/v1/3158e758-3cb4-43c5-94b3-7639810451c5/2"
9798
else -> null
9899
}
99100
url?.let {
@@ -217,6 +218,7 @@ class ChatAdapter(
217218
if (isPng || !animateGifs) {
218219
GlideApp.with(fragment)
219220
.load(url)
221+
.diskCacheStrategy(DiskCacheStrategy.DATA)
220222
.into(object : CustomTarget<Drawable>() {
221223
override fun onResourceReady(resource: Drawable, transition: Transition<in Drawable>?) {
222224
val width: Int

app/src/main/java/com/github/exact7/xtra/ui/common/PagedListFragment.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ import android.view.View
55
import androidx.core.view.isVisible
66
import androidx.lifecycle.Observer
77
import androidx.recyclerview.widget.RecyclerView
8-
import com.crashlytics.android.Crashlytics
98
import com.github.exact7.xtra.repository.LoadingState
109
import com.github.exact7.xtra.util.gone
10+
import com.google.firebase.crashlytics.FirebaseCrashlytics
1111
import kotlinx.android.synthetic.main.common_recycler_view_layout.*
1212

1313
abstract class PagedListFragment<T, VM : PagedListViewModel<T>, Adapter : BasePagedListAdapter<T>> : BaseNetworkFragment() {
@@ -28,7 +28,7 @@ abstract class PagedListFragment<T, VM : PagedListViewModel<T>, Adapter : BasePa
2828
recyclerView?.scrollToPosition(0)
2929
}
3030
} catch (e: Exception) {
31-
Crashlytics.logException(e)
31+
FirebaseCrashlytics.getInstance().recordException(e)
3232
}
3333
}
3434
})

app/src/main/java/com/github/exact7/xtra/ui/common/follow/FollowLiveData.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,12 @@ package com.github.exact7.xtra.ui.common.follow
22

33
import androidx.lifecycle.MutableLiveData
44
import com.github.exact7.xtra.model.LoggedIn
5-
import com.github.exact7.xtra.repository.GraphQLRepositoy
65
import com.github.exact7.xtra.repository.TwitchService
76
import kotlinx.coroutines.CoroutineScope
87
import kotlinx.coroutines.launch
98

109
class FollowLiveData(
1110
private val repository: TwitchService,
12-
private val graphQLRepositoy: GraphQLRepositoy,
1311
private val user: LoggedIn,
1412
private val channelId: String,
1513
private val viewModelScope: CoroutineScope) : MutableLiveData<Boolean>() {
@@ -29,7 +27,7 @@ class FollowLiveData(
2927
viewModelScope.launch {
3028
try {
3129
if (value) {
32-
val followed = graphQLRepositoy.followChannel(user.token, channelId)
30+
val followed = repository.followChannel(user.token, user.id, channelId)
3331
super.setValue(followed)
3432
} else {
3533
val unfollowed = repository.unfollowChannel(user.token, user.id, channelId)

app/src/main/java/com/github/exact7/xtra/ui/download/ClipDownloadViewModel.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,9 @@ class ClipDownloadViewModel @Inject constructor(
5151
val context = getApplication<Application>()
5252

5353
val filePath = "$path${File.separator}${clip.slug}$quality"
54-
val startPosition = clip.vod?.let { TwitchApiHelper.parseClipOffset(it.url) }?.toLong()
54+
val startPosition = clip.vod?.let { TwitchApiHelper.parseClipOffset(it.url) }?.let { (it * 1000.0).toLong() }
5555

56-
val offlineVideo = DownloadUtils.prepareDownload(context, clip, url, filePath, clip.duration.toLong(), startPosition)
56+
val offlineVideo = DownloadUtils.prepareDownload(context, clip, url, filePath, clip.duration.toLong() * 1000L, startPosition)
5757
val videoId = offlineRepository.saveVideo(offlineVideo).toInt()
5858
val request = Request(videoId, url, offlineVideo.url)
5959
offlineRepository.saveRequest(request)

app/src/main/java/com/github/exact7/xtra/ui/download/DownloadService.kt

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@ import android.util.Log
1515
import androidx.annotation.StringRes
1616
import androidx.core.app.NotificationCompat
1717
import androidx.core.app.NotificationManagerCompat
18-
import com.crashlytics.android.Crashlytics
1918
import com.github.exact7.xtra.R
2019
import com.github.exact7.xtra.model.offline.OfflineVideo
2120
import com.github.exact7.xtra.model.offline.Request
2221
import com.github.exact7.xtra.repository.OfflineRepository
2322
import com.github.exact7.xtra.repository.PlayerRepository
2423
import com.github.exact7.xtra.ui.main.MainActivity
2524
import com.github.exact7.xtra.util.FetchProvider
25+
import com.google.firebase.crashlytics.FirebaseCrashlytics
2626
import com.iheartradio.m3u8.Encoding
2727
import com.iheartradio.m3u8.Format
2828
import com.iheartradio.m3u8.ParsingMode
@@ -241,8 +241,9 @@ class DownloadService : IntentService(TAG) {
241241
requests.add(FetchRequest(url + track.uri, path + track.uri).apply { groupId = offlineVideoId })
242242
}
243243
} catch (e: IndexOutOfBoundsException) {
244-
Crashlytics.log("DownloadService.enqueueNext: Playlist tracks size: ${playlist.tracks.size}. Segment to: $segmentTo. Current + ENQUEUE_SIZE: ${current + ENQUEUE_SIZE}.")
245-
Crashlytics.logException(e)
244+
val instance = FirebaseCrashlytics.getInstance()
245+
instance.log("DownloadService.enqueueNext: Playlist tracks size: ${playlist.tracks.size}. Segment to: $segmentTo. Current + ENQUEUE_SIZE: ${current + ENQUEUE_SIZE}.")
246+
instance.recordException(e)
246247
offlineRepository.updateVideo(offlineVideo.apply { segmentTo = tracks.lastIndex })
247248
}
248249
}
@@ -278,8 +279,9 @@ class DownloadService : IntentService(TAG) {
278279
}
279280
return
280281
} catch (e: IndexOutOfBoundsException) {
281-
Crashlytics.log("DownloadService.onDownloadCompleted: Playlist tracks size: ${playlist.tracks.size}. Segment from $segmentFrom. Segment to: $segmentTo.")
282-
Crashlytics.logException(e)
282+
val instance = FirebaseCrashlytics.getInstance()
283+
instance.log("DownloadService.onDownloadCompleted: Playlist tracks size: ${playlist.tracks.size}. Segment from $segmentFrom. Segment to: $segmentTo.")
284+
instance.recordException(e)
283285
}
284286
val mediaPlaylist = MediaPlaylist.Builder()
285287
.withTargetDuration(playlist.targetDuration)
@@ -334,7 +336,7 @@ class DownloadService : IntentService(TAG) {
334336
activeRequests.remove(offlineVideo.id)
335337
fetch.deleteAll()
336338
} catch (e: Exception) {
337-
Crashlytics.logException(e)
339+
FirebaseCrashlytics.getInstance().recordException(e)
338340
}
339341
}
340342
}

0 commit comments

Comments
 (0)