Skip to content

Commit cc73798

Browse files
committed
HT 21 firebase-crashlytics
1 parent ceb80a4 commit cc73798

15 files changed

+78
-78
lines changed

app/build.gradle

+6
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ apply plugin: 'kotlin-android'
33
apply plugin: 'kotlin-android-extensions'
44
apply plugin: "androidx.navigation.safeargs.kotlin"
55
apply plugin: 'kotlin-kapt'
6+
apply plugin: 'com.google.gms.google-services'
7+
apply plugin: 'com.google.firebase.crashlytics'
68

79
android {
810
compileSdkVersion 29
@@ -76,6 +78,10 @@ dependencies {
7678
kapt "androidx.room:room-compiler:$room_version"
7779
implementation "androidx.room:room-ktx:$room_version"
7880

81+
82+
implementation 'com.google.firebase:firebase-analytics:17.4.1'
83+
implementation 'com.google.firebase:firebase-crashlytics:17.0.0'
84+
7985
testImplementation 'junit:junit:4.13'
8086
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
8187
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

app/google-services.json

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
{
2+
"project_info": {
3+
"project_number": "822678127026",
4+
"firebase_url": "https://twitter-app-by-andrey.firebaseio.com",
5+
"project_id": "twitter-app-by-andrey",
6+
"storage_bucket": "twitter-app-by-andrey.appspot.com"
7+
},
8+
"client": [
9+
{
10+
"client_info": {
11+
"mobilesdk_app_id": "1:822678127026:android:6b882af2e914412886a4ab",
12+
"android_client_info": {
13+
"package_name": "by.twitter"
14+
}
15+
},
16+
"oauth_client": [
17+
{
18+
"client_id": "822678127026-qo9ema4ocnahfhlimvio0okjqnkpbjnp.apps.googleusercontent.com",
19+
"client_type": 3
20+
}
21+
],
22+
"api_key": [
23+
{
24+
"current_key": "AIzaSyCd_pwx20BV4GzOryxvoUzY9OR4jP17GJY"
25+
}
26+
],
27+
"services": {
28+
"appinvite_service": {
29+
"other_platform_oauth_client": [
30+
{
31+
"client_id": "822678127026-qo9ema4ocnahfhlimvio0okjqnkpbjnp.apps.googleusercontent.com",
32+
"client_type": 3
33+
}
34+
]
35+
}
36+
}
37+
}
38+
],
39+
"configuration_version": "1"
40+
}

app/src/main/java/by/twitter/ui/dm/DirectMassageFragment.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import androidx.fragment.app.Fragment
77
import by.twitter.R
88
import com.google.android.material.dialog.MaterialAlertDialogBuilder
99
import kotlinx.android.synthetic.main.dialog_direct.view.*
10-
import kotlinx.android.synthetic.main.fragment_search.*
10+
import kotlinx.android.synthetic.main.fragment_direct_massage.*
1111

1212
class DirectMassageFragment : Fragment(R.layout.fragment_direct_massage) {
1313

app/src/main/java/by/twitter/ui/search/SearchFragment.kt renamed to app/src/main/java/by/twitter/ui/error/ErrorFragment.kt

+8-6
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
1-
package by.twitter.ui.search
1+
package by.twitter.ui.error
22

33
import android.os.Bundle
44
import android.view.LayoutInflater
55
import android.view.View
66
import androidx.fragment.app.Fragment
77
import by.twitter.R
88
import com.google.android.material.dialog.MaterialAlertDialogBuilder
9-
import kotlinx.android.synthetic.main.dialog_search.view.*
10-
import kotlinx.android.synthetic.main.fragment_search.*
9+
import kotlinx.android.synthetic.main.dialog_error.view.*
10+
import kotlinx.android.synthetic.main.fragment_error.*
11+
import java.lang.RuntimeException
1112

12-
class SearchFragment : Fragment(R.layout.fragment_search) {
13+
class ErrorFragment : Fragment(R.layout.fragment_error) {
1314

1415
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
1516
super.onViewCreated(view, savedInstanceState)
@@ -20,12 +21,13 @@ class SearchFragment : Fragment(R.layout.fragment_search) {
2021
}
2122

2223
private fun displayDialog() {
23-
val dialogView = LayoutInflater.from(requireContext()).inflate(R.layout.dialog_search, null)
24+
val dialogView = LayoutInflater.from(requireContext()).inflate(R.layout.dialog_error, null)
2425
val builder = MaterialAlertDialogBuilder(requireContext()).setView(dialogView)
2526
val alertDialog = builder.show()
2627

2728
dialogView.okButton.setOnClickListener {
2829
alertDialog.dismiss()
30+
throw RuntimeException("Run Error")
2931
}
3032

3133
dialogView.exitButton.setOnClickListener {
@@ -35,7 +37,7 @@ class SearchFragment : Fragment(R.layout.fragment_search) {
3537

3638
companion object {
3739

38-
fun newInstance(): Fragment = SearchFragment()
40+
fun newInstance(): Fragment = ErrorFragment()
3941

4042
}
4143

app/src/main/java/by/twitter/ui/main/MainFragment.kt

+1-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package by.twitter.ui.main
33
import android.content.Context
44
import android.os.Bundle
55
import android.view.View
6-
import androidx.core.app.NotificationCompat
76
import androidx.fragment.app.Fragment
87
import androidx.navigation.fragment.findNavController
98
import by.twitter.R
@@ -22,7 +21,7 @@ class MainFragment : Fragment(R.layout.fragment_main) {
2221
TabLayoutMediator(tab, viewPager) { tab, position ->
2322
tab.text = when (position) {
2423
0 -> "HOME"
25-
1 -> "Direct Massage"
24+
1 -> "Error"
2625
else -> throw IllegalArgumentException("position not found")
2726
}
2827
}.attach()

app/src/main/java/by/twitter/ui/main/MainPageAdapter.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package by.twitter.ui.main
22

33
import androidx.fragment.app.Fragment
44
import androidx.viewpager2.adapter.FragmentStateAdapter
5-
import by.twitter.ui.dm.DirectMassageFragment
5+
import by.twitter.ui.error.ErrorFragment
66
import by.twitter.ui.timeline.TimelineFragment
77

88
class MainPageAdapter(fragment: Fragment) : FragmentStateAdapter(fragment) {
@@ -13,7 +13,7 @@ class MainPageAdapter(fragment: Fragment) : FragmentStateAdapter(fragment) {
1313
TimelineFragment.newInstance()
1414
}
1515
1 -> {
16-
DirectMassageFragment.newInstance()
16+
ErrorFragment.newInstance()
1717
}
1818
else -> throw IllegalArgumentException("no required position")
1919
}

app/src/main/java/by/twitter/ui/timeline/TimelineFragment.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import by.twitter.R
1313
import by.twitter.TwitterApplication
1414
import by.twitter.databinding.FragmentTimelineBinding
1515
import by.twitter.ui.main.MainFragment
16-
import by.twitter.ui.timeline.adapter.AllTweetsAdapterBinding
16+
import by.twitter.ui.timeline.adapter.AllTweetsBindingAdapter
1717
import javax.inject.Inject
1818

1919
class TimelineFragment : Fragment() {
@@ -34,7 +34,7 @@ class TimelineFragment : Fragment() {
3434
timelineViewModel = ViewModelProvider(this, viewModelProviderFactory).get(TimelineViewModel::class.java)
3535
timelineViewModel.mainFragment = parentFragment as MainFragment
3636

37-
val adapter = AllTweetsAdapterBinding(listOf(), timelineViewModel)
37+
val adapter = AllTweetsBindingAdapter(listOf(), timelineViewModel)
3838
fragmentTimelineBinding.apply {
3939
viewModel = timelineViewModel
4040
lifecycleOwner = this@TimelineFragment

app/src/main/java/by/twitter/ui/timeline/adapter/AllTweetsAdapterBinding.kt renamed to app/src/main/java/by/twitter/ui/timeline/adapter/AllTweetsBindingAdapter.kt

+2-3
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ import by.twitter.databinding.ItemTweetBinding
77
import by.twitter.storage.entity.TweetWithUser
88
import by.twitter.ui.timeline.TimelineViewModel
99

10-
class AllTweetsAdapterBinding(private var tweetsList: List<TweetWithUser>,
10+
class AllTweetsBindingAdapter(private var tweetsList: List<TweetWithUser>,
1111
private val timelineViewModel: TimelineViewModel) :
12-
RecyclerView.Adapter<AllTweetsAdapterBinding.ViewHolder>(), BindableListAdapter<List<TweetWithUser>> {
12+
RecyclerView.Adapter<AllTweetsBindingAdapter.ViewHolder>(), DataAdapterBindable<List<TweetWithUser>> {
1313

1414
override fun setData(data: List<TweetWithUser>) {
1515
tweetsList = data
@@ -39,7 +39,6 @@ class AllTweetsAdapterBinding(private var tweetsList: List<TweetWithUser>,
3939
class ViewHolder(private val itemTweetBinding: ItemTweetBinding) : RecyclerView.ViewHolder(itemTweetBinding.root) {
4040

4141
fun bind(tweetUser: TweetWithUser, timelineViewModel: TimelineViewModel) {
42-
4342
itemTweetBinding.apply {
4443
tweetWithUser = tweetUser
4544
itemTweetBinding.executePendingBindings()

app/src/main/java/by/twitter/ui/timeline/adapter/BindingAdapters.kt

+2-9
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@ import android.widget.TextView
66
import androidx.databinding.BindingAdapter
77
import androidx.recyclerview.widget.RecyclerView
88
import by.twitter.R
9-
import by.twitter.storage.entity.Tweet
10-
import by.twitter.storage.entity.TweetWithUser
11-
import by.twitter.ui.timeline.adapter.AllTweetsAdapterBinding
129
import by.twitter.util.DateUtil
1310
import com.bumptech.glide.Glide
1411
import java.time.OffsetDateTime
@@ -53,11 +50,7 @@ fun setRetweetTweet(imageButton: ImageButton, retweeted: Boolean) {
5350

5451
@BindingAdapter("app:listData")
5552
fun <T> setRecyclerViewList (recyclerView: RecyclerView, data: T) {
56-
if (recyclerView.adapter is BindableListAdapter<*>) {
57-
(recyclerView.adapter as BindableListAdapter<T>).setData(data)
53+
if (recyclerView.adapter is DataAdapterBindable<*>) {
54+
(recyclerView.adapter as DataAdapterBindable<T>).setData(data)
5855
}
59-
}
60-
61-
interface BindableListAdapter<T> {
62-
fun setData(data: T)
6356
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package by.twitter.ui.timeline.adapter
2+
3+
interface DataAdapterBindable<T> {
4+
fun setData(data: T)
5+
}
1.46 KB
Loading

app/src/main/res/layout/activity_first_old.xml

-44
This file was deleted.

app/src/main/res/layout/dialog_search.xml renamed to app/src/main/res/layout/dialog_error.xml

+6-5
Original file line numberDiff line numberDiff line change
@@ -27,21 +27,22 @@
2727
<ImageView
2828
android:layout_width="wrap_content"
2929
android:layout_height="match_parent"
30-
android:layout_marginStart="50dp"
31-
android:layout_marginEnd="30dp"
30+
android:layout_marginStart="20dp"
31+
android:layout_marginEnd="10dp"
3232
android:scaleX="2"
3333
android:scaleY="2"
3434
android:src="@drawable/ic_error" />
3535

3636
<com.google.android.material.textview.MaterialTextView
3737
android:id="@+id/errorTextView"
38-
android:layout_width="wrap_content"
38+
android:layout_width="match_parent"
3939
android:layout_height="wrap_content"
4040
android:layout_margin="10dp"
41-
android:text="ERROR"
41+
android:gravity="center"
42+
android:text="RUN ERROR?"
4243
android:textAppearance="@style/TextAppearance.MaterialComponents.Subtitle2"
4344
android:textColor="@color/black"
44-
android:textSize="40sp" />
45+
android:textSize="37sp" />
4546

4647
</LinearLayout>
4748

app/src/main/res/layout/fragment_search.xml renamed to app/src/main/res/layout/fragment_error.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@
1010
android:layout_width="wrap_content"
1111
android:layout_height="wrap_content"
1212
android:layout_gravity="center"
13-
android:text="Download latest data" />
13+
android:text="get error" />
1414

1515
</FrameLayout>

build.gradle

+2-3
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,8 @@ buildscript {
1111
classpath 'com.android.tools.build:gradle:3.6.3'
1212
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
1313
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.2.2"
14-
15-
// NOTE: Do not place your application dependencies here; they belong
16-
// in the individual module build.gradle files
14+
classpath 'com.google.gms:google-services:4.3.3'
15+
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.1.0'
1716
}
1817
}
1918

0 commit comments

Comments
 (0)