Skip to content

Commit 72fb9e0

Browse files
authored
Merge pull request #20 from tmaxxdd/feature/correct-navigation-back
Correct navigation back
2 parents 42578e4 + e77d28d commit 72fb9e0

File tree

8 files changed

+38
-31
lines changed

8 files changed

+38
-31
lines changed

app/src/main/java/pl/tkadziolka/snipmeandroid/bridge/detail/DetailModel.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -110,13 +110,10 @@ class DetailModel(
110110
deleteSnippet(it.uuid)
111111
.subscribeOn(Schedulers.io())
112112
.subscribeBy(
113-
onComplete = {
114-
mutableEvent.value = Deleted
115-
},
113+
onComplete = { mutableEvent.value = Deleted },
116114
onError = { error ->
117-
Timber.e("Couldn't save snippet, error = $error")
115+
Timber.e("Couldn't delete snippet, error = $error")
118116
parseError(error)
119-
mutableEvent.value = Deleted
120117
}
121118
).also { disposables += it }
122119
}

app/src/main/java/pl/tkadziolka/snipmeandroid/bridge/main/MainModel.kt

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import pl.tkadziolka.snipmeandroid.bridge.session.SessionModel
99
import pl.tkadziolka.snipmeandroid.domain.error.exception.*
1010
import pl.tkadziolka.snipmeandroid.domain.filter.*
1111
import pl.tkadziolka.snipmeandroid.domain.message.ErrorMessages
12+
import pl.tkadziolka.snipmeandroid.domain.snippet.ObserveSnippetUpdatesUseCase
1213
import pl.tkadziolka.snipmeandroid.domain.snippet.ObserveUpdatedSnippetPageUseCase
1314
import pl.tkadziolka.snipmeandroid.domain.snippet.ResetUpdatedSnippetPageUseCase
1415
import pl.tkadziolka.snipmeandroid.domain.snippets.*
@@ -24,7 +25,7 @@ class MainModel(
2425
private val errorMessages: ErrorMessages,
2526
private val getUser: GetSingleUserUseCase,
2627
private val getSnippets: GetSnippetsUseCase,
27-
private val observeUpdatedPage: ObserveUpdatedSnippetPageUseCase,
28+
private val observeUpdates: ObserveSnippetUpdatesUseCase,
2829
private val hasMore: HasMoreSnippetPagesUseCase,
2930
private val getLanguageFilters: GetLanguageFiltersUseCase,
3031
private val filterSnippetsByLanguage: FilterSnippetsByLanguageUseCase,
@@ -42,7 +43,6 @@ class MainModel(
4243

4344
private var cachedSnippets = emptyList<Snippet>()
4445
private var scopedSnippets = emptyList<Snippet>()
45-
private var shouldRefresh = false
4646
private lateinit var filterState: SnippetFilters;
4747

4848
override fun parseError(throwable: Throwable) {
@@ -62,12 +62,10 @@ class MainModel(
6262
}
6363

6464
init {
65-
observeUpdatedPage(getScope())
65+
observeUpdates()
6666
.subscribeOn(Schedulers.io())
6767
.subscribeBy(
68-
onNext = { updatedPage ->
69-
initState()
70-
},
68+
onNext = { initState() },
7169
onError = { Timber.e("Couldn't refresh snippet updates, error = $it") }
7270
).also { disposables += it }
7371
}
@@ -155,10 +153,6 @@ class MainModel(
155153
filterState
156154
)
157155
loadNextPage()
158-
if (shouldRefresh) {
159-
mutableEvent.value = ListRefreshed
160-
shouldRefresh = false
161-
}
162156
},
163157
onError = {
164158
Timber.e("Couldn't load snippets, error = $it")

app/src/main/java/pl/tkadziolka/snipmeandroid/di/ModelModule.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@ import pl.tkadziolka.snipmeandroid.bridge.session.SessionModel
99
internal val modelModule = module {
1010
single { SessionModel(get()) }
1111
single { LoginModel(get(), get(), get()) }
12-
single { MainModel(get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get()) }
12+
single { MainModel(get(), get(), get(), get(), get(), get(), get(), get(), get(), get()) }
1313
single { DetailModel(get(), get(), get(), get(), get(), get(), get(), get(), get()) }
1414
}

app/src/main/java/pl/tkadziolka/snipmeandroid/di/UseCaseModule.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ internal val useCaseModule = module {
4141
factory { CreateSnippetUseCase(get(), get(), get()) }
4242
factory { UpdateSnippetUseCase(get(), get(), get()) }
4343
factory { ObserveUpdatedSnippetPageUseCase(get()) }
44+
factory { ObserveSnippetUpdatesUseCase(get()) }
4445
factory { ResetUpdatedSnippetPageUseCase(get()) }
4546
factory { GetTargetUserReactionUseCase() }
4647
factory { SetUserReactionUseCase(get(), get(), get()) }
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
package pl.tkadziolka.snipmeandroid.domain.snippet
22

3+
import io.reactivex.Completable
34
import pl.tkadziolka.snipmeandroid.domain.repository.snippet.SnippetRepository
45
import pl.tkadziolka.snipmeandroid.domain.snippets.Snippet
56

67
class DeleteSnippetUseCase(private val repository: SnippetRepository) {
78

8-
operator fun invoke(uuid: String) =
9+
operator fun invoke(uuid: String): Completable =
910
repository
1011
.delete(uuid)
11-
.andThen { repository.updateListener.onNext(Snippet.EMPTY) }
12+
.doOnComplete { repository.updateListener.onNext(Snippet.EMPTY.copy(uuid)) }
1213
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package pl.tkadziolka.snipmeandroid.domain.snippet
2+
3+
import io.reactivex.Observable
4+
import pl.tkadziolka.snipmeandroid.domain.repository.snippet.SnippetRepository
5+
import pl.tkadziolka.snipmeandroid.domain.snippets.Snippet
6+
7+
class ObserveSnippetUpdatesUseCase(private val repository: SnippetRepository) {
8+
operator fun invoke(): Observable<Snippet> = repository.updateListener.share()
9+
}

flutter_module/lib/presentation/navigation/details/details_navigator.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,5 @@ class DetailsNavigator extends ScreenNavigator {
1313
void goToDetails(BuildContext context, String snippetId) {
1414
_snippetId = snippetId;
1515
router.push(DetailsScreen.name.route);
16-
print("Navigated to $_snippetId");
1716
}
1817
}

flutter_module/lib/presentation/screens/details_screen.dart

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -62,20 +62,26 @@ class _DetailsPage extends HookWidget {
6262
(current, newState) => (current as DetailModelEventData).equals(newState),
6363
).value;
6464

65-
if (event.event == DetailModelEvent.saved) {
66-
final snippetId = event.value;
67-
if (snippetId == null) {
65+
WidgetsBinding.instance.addPostFrameCallback((_) {
66+
if (event.event == DetailModelEvent.saved) {
67+
final snippetId = event.value;
68+
if (snippetId == null) {
69+
_exit();
70+
return;
71+
}
72+
6873
_exit();
69-
return const SizedBox();
74+
WidgetsBinding.instance.addPostFrameCallback((_) {
75+
navigator.goToDetails(context, snippetId);
76+
});
7077
}
78+
});
7179

72-
_exit();
73-
navigator.goToDetails(context, snippetId);
74-
}
75-
76-
if (event.event == DetailModelEvent.deleted) {
77-
_exit();
78-
}
80+
WidgetsBinding.instance.addPostFrameCallback((_) {
81+
if (event.event == DetailModelEvent.deleted) {
82+
_exit();
83+
}
84+
});
7985

8086
useEffect(() {
8187
model.load(navigator.snippetId ?? '');
@@ -111,8 +117,8 @@ class _DetailsPage extends HookWidget {
111117
}
112118

113119
void _exit() {
114-
navigator.back();
115120
model.resetEvent();
121+
navigator.back();
116122
}
117123
}
118124

0 commit comments

Comments
 (0)