Skip to content

Commit

Permalink
Fix another critical bug, log schedule name to crashlytics
Browse files Browse the repository at this point in the history
  • Loading branch information
tonykolomeytsev committed Feb 20, 2021
1 parent 613409d commit 5483744
Show file tree
Hide file tree
Showing 13 changed files with 63 additions and 69 deletions.
6 changes: 4 additions & 2 deletions modules/app/src/main/java/kekmech/ru/mpeiapp/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import androidx.appcompat.app.AppCompatActivity
import com.google.android.gms.common.GooglePlayServicesNotAvailableException
import com.google.android.gms.maps.MapsInitializer
import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.crashlytics.FirebaseCrashlytics
import kekmech.ru.common_android.onActivityResult
import kekmech.ru.common_navigation.BackButtonListener
import kekmech.ru.common_navigation.NavigationHolder
Expand Down Expand Up @@ -49,9 +50,10 @@ class MainActivity : AppCompatActivity() {
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
enableEdgeToEdge()


if (savedInstanceState == null) {
if (!sharedPreferences.getString("selected_group", "").isNullOrEmpty()) {
val selectedGroup = sharedPreferences.getString("selected_group", "")
if (!selectedGroup.isNullOrEmpty()) {
FirebaseCrashlytics.getInstance().setCustomKey("schedule_name", selectedGroup)
mainScreenLauncher.launch()
} else {
onboardingFeatureLauncher.launchWelcomePage(true)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,9 @@ internal class DBHelper(

companion object {
val setOfMigrations by fastLazy { setOf<Migration>(
/*Migration(1, 2, R.raw.migration_v1_to_v2),
Migration(1, 2, R.raw.migration_v1_to_v2),
Migration(2, 3, R.raw.migration_v2_to_v3),
Migration(3, 4, R.raw.migration_v3_to_v4)*/
Migration(3, 4, R.raw.migration_v3_to_v4)
) }
}
}
2 changes: 0 additions & 2 deletions modules/coreui/src/main/res/values-en/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -153,8 +153,6 @@
<string name="dashboard_day_status_semester">The academic week #%d is in progress</string>
<string name="dashboard_day_status_not_semester">Non-academic week</string>
<string name="dashboard_item_time_prediction_prefix">The class will start in</string>
<string name="dashboard_banner_favorites_title">Featured Schedules!</string>
<string name="dashboard_banner_favorites_description">Now you can switch between groups with one tap, without typing their numbers in the search! Click to try.</string>

<string name="map_tab_name_eat">Food</string>
<string name="map_section_name_eat">Food</string>
Expand Down
2 changes: 0 additions & 2 deletions modules/coreui/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -155,8 +155,6 @@
<string name="dashboard_day_status_semester">Идет %d учебная неделя</string>
<string name="dashboard_day_status_not_semester">Неучебная неделя</string>
<string name="dashboard_item_time_prediction_prefix">Пара начнется через</string>
<string name="dashboard_banner_favorites_title">Избранные расписания!</string>
<string name="dashboard_banner_favorites_description">Теперь вы можете переключаться между группами одним нажатием, не набирая их номера в поиске!\nНажмите, чтобы попробовать.</string>

<string name="map_tab_name_eat">Еда</string>
<string name="map_section_name_eat">Еда</string>
Expand Down
1 change: 1 addition & 0 deletions modules/domain_schedule/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ dependencies {
implementation squareup.retrofit
implementation squareup.retrofit_rxJava2
implementation google.gson
implementation firebase.crashlytics

implementation project(path: ":common_app_database")
implementation project(path: ":common_annotations")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package kekmech.ru.domain_schedule

import android.content.SharedPreferences
import androidx.annotation.RestrictTo
import com.google.firebase.crashlytics.FirebaseCrashlytics
import io.reactivex.Completable
import io.reactivex.Single
import kekmech.ru.common_persistent_cache.orFromPersistentCache
Expand Down Expand Up @@ -31,6 +31,7 @@ class ScheduleRepository(

fun selectSchedule(name: String): Completable = Completable.fromAction {
selectedScheduleName = name
FirebaseCrashlytics.getInstance().setCustomKey("schedule_name", name)
}

fun getSelectedScheduleName() = Single.just(selectedScheduleName)
Expand Down
7 changes: 4 additions & 3 deletions modules/feature_dashboard/build.gradle
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
apply from: "$gradleDir/feature-android-module.gradle"

dependencies {
implementation squareup.okhttp
implementation squareup.okhttpLogger

testImplementation kotest.runner
testImplementation kotest.assertions
testImplementation kotest.property

implementation koin.core
implementation koin.android
implementation timber
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,18 +132,6 @@ class DashboardFragment :
analytics.sendClick("FavoriteSchedule")
feature.accept(Wish.Action.SelectFavoriteSchedule(it.value))
},
BannerAdapterItem(
onClickListener = {
analytics.sendClick("DashboardFeatureBannerOpen")
closeFeatureBanner()
dependencies.bottomTabsSwitcher.changeTab(BottomTab.PROFILE)
dependencies.appSettingsFeatureLauncher.launch(FAVORITES)
},
onCloseListener = {
analytics.sendClick("DashboardFeatureBannerClose")
closeFeatureBanner()
}
),
NotePreviewAdapterItem(::clickOnClasses, R.layout.item_note_preview_padding_horisontal_8dp),
TextAdapterItem(R.layout.item_time_prediction),
SessionAdapterItem(requireContext())
Expand All @@ -154,10 +142,6 @@ class DashboardFragment :
feature.accept(Wish.Click.OnClasses(it))
}

private fun closeFeatureBanner() {
feature.accept(Wish.Action.CloseFeatureBanner)
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == REQUEST_CODE_UPDATE_DATA) {
feature.accept(Wish.Action.OnSwipeRefresh)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@ import kekmech.ru.common_kotlin.fastLazy
import kekmech.ru.coreui.PrettyDateFormatter
import kekmech.ru.coreui.items.*
import kekmech.ru.domain_schedule.dto.Classes
import kekmech.ru.feature_dashboard.elm.DashboardState
import kekmech.ru.feature_dashboard.elm.NextClassesCondition.NOT_STARTED
import kekmech.ru.feature_dashboard.elm.NextClassesCondition.STARTED
import kekmech.ru.feature_dashboard.helpers.TimeDeclensionHelper
import kekmech.ru.feature_dashboard.helpers.getActualScheduleDayForView
import kekmech.ru.feature_dashboard.helpers.getNextClassesTimeStatus
import kekmech.ru.feature_dashboard.items.*
import kekmech.ru.feature_dashboard.elm.DashboardState
import kekmech.ru.feature_dashboard.elm.NextClassesCondition.NOT_STARTED
import kekmech.ru.feature_dashboard.elm.NextClassesCondition.STARTED
import java.time.DayOfWeek
import java.time.LocalTime

Expand Down Expand Up @@ -74,8 +74,6 @@ class DashboardListConverter(
}
}

addFeatureBanner(state)

// ближайшие события
createClassesEventsItems(state)?.let { (header, classes) ->
add(header)
Expand Down Expand Up @@ -221,17 +219,6 @@ class DashboardListConverter(
}
}

private fun MutableList<Any>.addFeatureBanner(state: DashboardState) {
if (state.isFeatureBannerEnabled) {
add(BannerItem(
titleRes = R.string.dashboard_banner_favorites_title,
descriptionRes = R.string.dashboard_banner_favorites_description,
iconRes = R.drawable.ic_favorites_banner
))
add(SpaceItem.VERTICAL_16)
}
}

private fun MutableList<Any>.addSession(state: DashboardState) {
if (state.sessionScheduleItems.isNullOrEmpty()) return
add(sessionHeader)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@ import kekmech.ru.feature_dashboard.elm.DashboardReducer
object DashboardModule : ModuleProvider({
single { DashboardDependencies(get(), get(), get(), get(), get(), get()) } // он не просто так single!!!
factory { DashboardFeatureFactory(get(), get()) }
factory { DashboardReducer(get()) }
factory { DashboardReducer() }
factory { DashboardActor(get(), get(), get()) }
})
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ data class DashboardState(
val selectedScheduleName: String = "",
val notes: List<Note>? = null,
val favoriteSchedules: List<FavoriteScheduleItem>? = null,
val isFeatureBannerEnabled: Boolean = false,
val sessionScheduleItems: List<SessionItem>? = null
) {
val weekOfSemester get() = currentWeekSchedule?.weeks?.first()?.weekOfSemester
Expand Down Expand Up @@ -58,7 +57,6 @@ sealed class DashboardEvent {
object OnSwipeRefresh : Wish()
object SilentUpdate : Wish()
data class SelectFavoriteSchedule(val favoriteSchedule: FavoriteSchedule) : Wish()
object CloseFeatureBanner : Wish()
}

object Click {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,23 +1,16 @@
package kekmech.ru.feature_dashboard.elm

import android.content.SharedPreferences
import kekmech.ru.common_android.moscowLocalDate
import kekmech.ru.common_shared_preferences.boolean
import kekmech.ru.coreui.items.FavoriteScheduleItem
import kekmech.ru.domain_notes.dto.Note
import kekmech.ru.feature_dashboard.helpers.getActualScheduleDayForView
import kekmech.ru.feature_dashboard.elm.DashboardEvent.News
import kekmech.ru.feature_dashboard.elm.DashboardEvent.Wish
import vivid.money.elmslie.core.store.StateReducer
import kekmech.ru.feature_dashboard.helpers.getActualScheduleDayForView
import vivid.money.elmslie.core.store.Result
import java.time.DayOfWeek
import vivid.money.elmslie.core.store.StateReducer
import java.time.temporal.ChronoUnit

class DashboardReducer(
sharedPreferences: SharedPreferences
) : StateReducer<DashboardEvent, DashboardState, DashboardEffect, DashboardAction> {

private var isFeatureBannerEnabled by sharedPreferences.boolean("banner_favorites", true)
class DashboardReducer : StateReducer<DashboardEvent, DashboardState, DashboardEffect, DashboardAction> {

override fun reduce(
event: DashboardEvent,
Expand Down Expand Up @@ -75,10 +68,7 @@ class DashboardReducer(
state: DashboardState
): Result<DashboardState, DashboardEffect, DashboardAction> = when (event) {
is Wish.Init -> Result(
state = state.copy(
isLoading = true,
isFeatureBannerEnabled = isFeatureBannerEnabled
),
state = state.copy(isLoading = true),
commands = refreshActions()
)
is Wish.Action.OnSwipeRefresh -> Result(
Expand All @@ -103,21 +93,14 @@ class DashboardReducer(
commands = listOf(DashboardAction.SelectGroup(newGroupNumber))
)
}
is Wish.Action.CloseFeatureBanner -> {
isFeatureBannerEnabled = false
Result(
state = state.copy(isFeatureBannerEnabled = false)
)
}
}

private fun refreshActions(): List<DashboardAction> {
return listOfNotNull(
DashboardAction.GetSelectedGroupName,
DashboardAction.LoadNotes,
DashboardAction.LoadSchedule(0),
DashboardAction.LoadSchedule(1)
.takeIf { moscowLocalDate().dayOfWeek == DayOfWeek.SUNDAY },
DashboardAction.LoadSchedule(1),
DashboardAction.LoadFavoriteSchedules,
DashboardAction.LoadSession
)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package kekmech.ru.feature_dashboard

import io.kotest.core.spec.style.BehaviorSpec
import io.kotest.matchers.booleans.shouldBeTrue
import io.kotest.matchers.collections.shouldBeEmpty
import io.kotest.matchers.collections.shouldContainExactly
import kekmech.ru.feature_dashboard.elm.DashboardAction
import kekmech.ru.feature_dashboard.elm.DashboardEvent.Wish
import kekmech.ru.feature_dashboard.elm.DashboardReducer
import kekmech.ru.feature_dashboard.elm.DashboardState

class DashboardReducerTest : BehaviorSpec({
val reducer = DashboardReducer()

Given("Initial state") {
val givenState = STATE
When("Wish.Init") {
val (state, effects, actions) = reducer.reduce(Wish.Init, givenState)
Then("Check state") {
state.isLoading.shouldBeTrue()
}
Then("Check effects") {
effects.shouldBeEmpty()
}
Then("Check actions") {
actions.shouldContainExactly(
DashboardAction.GetSelectedGroupName,
DashboardAction.LoadNotes,
DashboardAction.LoadSchedule(0),
DashboardAction.LoadSchedule(1),
DashboardAction.LoadFavoriteSchedules,
DashboardAction.LoadSession
)
}
}
}
}) {
private companion object {
private val STATE = DashboardState()
}
}

0 comments on commit 5483744

Please sign in to comment.