Skip to content

Commit b1624a0

Browse files
Tomasz KądziołkaTomasz Kądziołka
authored andcommitted
Corrected reacting on user action
1 parent 7de3ff4 commit b1624a0

File tree

10 files changed

+119
-36
lines changed

10 files changed

+119
-36
lines changed

app/src/main/java/pl/tkadziolka/snipmeandroid/bridge/Bridge.java

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -599,6 +599,18 @@ public void setError(@Nullable String setterArg) {
599599
this.error = setterArg;
600600
}
601601

602+
private @Nullable Long oldHash;
603+
public @Nullable Long getOldHash() { return oldHash; }
604+
public void setOldHash(@Nullable Long setterArg) {
605+
this.oldHash = setterArg;
606+
}
607+
608+
private @Nullable Long newHash;
609+
public @Nullable Long getNewHash() { return newHash; }
610+
public void setNewHash(@Nullable Long setterArg) {
611+
this.newHash = setterArg;
612+
}
613+
602614
public static final class Builder {
603615
private @Nullable ModelState state;
604616
public @NonNull Builder setState(@Nullable ModelState setterArg) {
@@ -620,12 +632,24 @@ public static final class Builder {
620632
this.error = setterArg;
621633
return this;
622634
}
635+
private @Nullable Long oldHash;
636+
public @NonNull Builder setOldHash(@Nullable Long setterArg) {
637+
this.oldHash = setterArg;
638+
return this;
639+
}
640+
private @Nullable Long newHash;
641+
public @NonNull Builder setNewHash(@Nullable Long setterArg) {
642+
this.newHash = setterArg;
643+
return this;
644+
}
623645
public @NonNull MainModelStateData build() {
624646
MainModelStateData pigeonReturn = new MainModelStateData();
625647
pigeonReturn.setState(state);
626648
pigeonReturn.setIs_loading(is_loading);
627649
pigeonReturn.setData(data);
628650
pigeonReturn.setError(error);
651+
pigeonReturn.setOldHash(oldHash);
652+
pigeonReturn.setNewHash(newHash);
629653
return pigeonReturn;
630654
}
631655
}
@@ -635,6 +659,8 @@ public static final class Builder {
635659
toMapResult.put("is_loading", is_loading);
636660
toMapResult.put("data", data);
637661
toMapResult.put("error", error);
662+
toMapResult.put("oldHash", oldHash);
663+
toMapResult.put("newHash", newHash);
638664
return toMapResult;
639665
}
640666
static @NonNull MainModelStateData fromMap(@NonNull Map<String, Object> map) {
@@ -647,6 +673,10 @@ public static final class Builder {
647673
pigeonResult.setData((List<Snippet>)data);
648674
Object error = map.get("error");
649675
pigeonResult.setError((String)error);
676+
Object oldHash = map.get("oldHash");
677+
pigeonResult.setOldHash((oldHash == null) ? null : ((oldHash instanceof Integer) ? (Integer)oldHash : (Long)oldHash));
678+
Object newHash = map.get("newHash");
679+
pigeonResult.setNewHash((newHash == null) ? null : ((newHash instanceof Integer) ? (Integer)newHash : (Long)newHash));
650680
return pigeonResult;
651681
}
652682
}
@@ -725,6 +755,18 @@ public void setError(@Nullable String setterArg) {
725755
this.error = setterArg;
726756
}
727757

758+
private @Nullable Long oldHash;
759+
public @Nullable Long getOldHash() { return oldHash; }
760+
public void setOldHash(@Nullable Long setterArg) {
761+
this.oldHash = setterArg;
762+
}
763+
764+
private @Nullable Long newHash;
765+
public @Nullable Long getNewHash() { return newHash; }
766+
public void setNewHash(@Nullable Long setterArg) {
767+
this.newHash = setterArg;
768+
}
769+
728770
public static final class Builder {
729771
private @Nullable ModelState state;
730772
public @NonNull Builder setState(@Nullable ModelState setterArg) {
@@ -746,12 +788,24 @@ public static final class Builder {
746788
this.error = setterArg;
747789
return this;
748790
}
791+
private @Nullable Long oldHash;
792+
public @NonNull Builder setOldHash(@Nullable Long setterArg) {
793+
this.oldHash = setterArg;
794+
return this;
795+
}
796+
private @Nullable Long newHash;
797+
public @NonNull Builder setNewHash(@Nullable Long setterArg) {
798+
this.newHash = setterArg;
799+
return this;
800+
}
749801
public @NonNull DetailModelStateData build() {
750802
DetailModelStateData pigeonReturn = new DetailModelStateData();
751803
pigeonReturn.setState(state);
752804
pigeonReturn.setIs_loading(is_loading);
753805
pigeonReturn.setData(data);
754806
pigeonReturn.setError(error);
807+
pigeonReturn.setOldHash(oldHash);
808+
pigeonReturn.setNewHash(newHash);
755809
return pigeonReturn;
756810
}
757811
}
@@ -761,6 +815,8 @@ public static final class Builder {
761815
toMapResult.put("is_loading", is_loading);
762816
toMapResult.put("data", (data == null) ? null : data.toMap());
763817
toMapResult.put("error", error);
818+
toMapResult.put("oldHash", oldHash);
819+
toMapResult.put("newHash", newHash);
764820
return toMapResult;
765821
}
766822
static @NonNull DetailModelStateData fromMap(@NonNull Map<String, Object> map) {
@@ -773,6 +829,10 @@ public static final class Builder {
773829
pigeonResult.setData((data == null) ? null : Snippet.fromMap((Map)data));
774830
Object error = map.get("error");
775831
pigeonResult.setError((String)error);
832+
Object oldHash = map.get("oldHash");
833+
pigeonResult.setOldHash((oldHash == null) ? null : ((oldHash instanceof Integer) ? (Integer)oldHash : (Long)oldHash));
834+
Object newHash = map.get("newHash");
835+
pigeonResult.setNewHash((newHash == null) ? null : ((newHash instanceof Integer) ? (Integer)newHash : (Long)newHash));
776836
return pigeonResult;
777837
}
778838
}

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

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import io.reactivex.rxkotlin.plusAssign
66
import io.reactivex.rxkotlin.subscribeBy
77
import io.reactivex.schedulers.Schedulers
88
import kotlinx.coroutines.flow.MutableStateFlow
9+
import pl.tkadziolka.snipmeandroid.bridge.session.SessionModel
910
import pl.tkadziolka.snipmeandroid.domain.clipboard.AddToClipboardUseCase
1011
import pl.tkadziolka.snipmeandroid.domain.error.exception.*
1112
import pl.tkadziolka.snipmeandroid.domain.message.ErrorMessages
@@ -16,16 +17,15 @@ import pl.tkadziolka.snipmeandroid.domain.snippet.GetSingleSnippetUseCase
1617
import pl.tkadziolka.snipmeandroid.domain.snippets.Snippet
1718
import pl.tkadziolka.snipmeandroid.ui.detail.*
1819
import pl.tkadziolka.snipmeandroid.ui.error.ErrorParsable
19-
import pl.tkadziolka.snipmeandroid.ui.session.SessionViewModel
2020
import timber.log.Timber
2121

2222
class DetailModel(
2323
private val errorMessages: ErrorMessages,
2424
private val getSnippet: GetSingleSnippetUseCase,
25-
private val clipboard: AddToClipboardUseCase,
25+
// private val clipboard: AddToClipboardUseCase,
2626
private val getTargetReaction: GetTargetUserReactionUseCase,
2727
private val setUserReaction: SetUserReactionUseCase,
28-
private val session: SessionViewModel
28+
private val session: SessionModel
2929
) : ErrorParsable {
3030
private val disposables = CompositeDisposable()
3131

@@ -52,7 +52,6 @@ class DetailModel(
5252
setState(Loading)
5353
getSnippet(uuid)
5454
.subscribeOn(Schedulers.io())
55-
.observeOn(AndroidSchedulers.mainThread())
5655
.subscribeBy(
5756
onSuccess = { setState(Loaded(it)) },
5857
onError = {
@@ -72,7 +71,7 @@ class DetailModel(
7271

7372
fun copyToClipboard() {
7473
getSnippet()?.let {
75-
clipboard(it.title, it.code.raw)
74+
// clipboard(it.title, it.code.raw)
7675
}
7776
}
7877

@@ -84,7 +83,6 @@ class DetailModel(
8483

8584
setUserReaction(previousState.snippet, newReaction)
8685
.subscribeOn(Schedulers.io())
87-
.observeOn(AndroidSchedulers.mainThread())
8886
.subscribeBy(
8987
onSuccess = { snippet -> mutableState.value = Loaded(snippet) },
9088
onError = {

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

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import pl.tkadziolka.snipmeandroid.ui.detail.Loaded
1010
import pl.tkadziolka.snipmeandroid.ui.detail.Loading
1111

1212
class DetailModelPlugin: ModelPlugin<Bridge.DetailModelBridge>(), Bridge.DetailModelBridge {
13-
1413
private val model: DetailModel by inject()
14+
private var oldState: DetailViewState? = null
1515

1616
override fun getState(): Bridge.DetailModelStateData = getData(model.state.value)
1717

@@ -43,10 +43,15 @@ class DetailModelPlugin: ModelPlugin<Bridge.DetailModelBridge>(), Bridge.DetailM
4343
TODO("Not yet implemented")
4444
}
4545

46-
private fun getData(viewState: DetailViewState) = Bridge.DetailModelStateData().apply {
47-
state = viewState.toModelState()
48-
is_loading = viewState is Loading
49-
data = (viewState as? Loaded)?.snippet?.toModelData()
46+
private fun getData(viewState: DetailViewState): Bridge.DetailModelStateData {
47+
oldState = viewState
48+
return Bridge.DetailModelStateData().apply {
49+
state = viewState.toModelState()
50+
is_loading = viewState is Loading
51+
data = (viewState as? Loaded)?.snippet?.toModelData()
52+
oldHash = oldState?.hashCode()?.toLong()
53+
newHash = viewState.hashCode().toLong()
54+
}
5055
}
5156

5257
private fun DetailViewState.toModelState() =
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package pl.tkadziolka.snipmeandroid.di
2+
3+
import org.koin.dsl.module
4+
import pl.tkadziolka.snipmeandroid.bridge.detail.DetailModel
5+
import pl.tkadziolka.snipmeandroid.bridge.main.MainModel
6+
import pl.tkadziolka.snipmeandroid.bridge.session.SessionModel
7+
8+
internal val modelModule = module {
9+
single { SessionModel(get()) }
10+
single { MainModel(get(), get(), get(), get(), get(), get(), get()) }
11+
single { DetailModel(get(), get(), get(), get(), get()) }
12+
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package pl.tkadziolka.snipmeandroid.di
22

33
import android.content.ClipboardManager
44
import android.content.Context.CLIPBOARD_SERVICE
5+
import org.koin.android.ext.koin.androidApplication
56
import org.koin.android.ext.koin.androidContext
67
import org.koin.dsl.module
78
import pl.tkadziolka.snipmeandroid.BuildConfig
@@ -17,5 +18,5 @@ internal val utilModule = module {
1718
factory { ErrorMessages(get()) }
1819
factory<ValidationMessages> { RealValidationMessages(get()) }
1920
factory { Dialogs(get()) }
20-
factory { androidContext().getSystemService(CLIPBOARD_SERVICE) as ClipboardManager }
21+
factory { androidApplication().getSystemService(CLIPBOARD_SERVICE) as ClipboardManager }
2122
}

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

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,4 @@ internal val viewModelModule = module {
2424
viewModel { EditViewModel(get(), get(), get(), get(), get(), get()) }
2525
viewModel { ShareViewModel(get(), get(), get()) }
2626
viewModel { DonateViewModel(get()) }
27-
}
28-
29-
internal val modelModule = module {
30-
// viewModel { SplashViewModel(get(), get()) }
31-
// viewModel { LoginViewModel(get(), get(), get(), get()) }
32-
single { SessionModel(get()) }
33-
single { MainModel(get(), get(), get(), get(), get(), get(), get()) }
34-
// viewModel { PreviewViewModel(get(), get()) }
35-
// viewModel { DetailViewModel(get(), get(), get(), get(), get(), get(), get()) }
36-
// viewModel { EditViewModel(get(), get(), get(), get(), get(), get()) }
37-
// viewModel { ShareViewModel(get(), get(), get()) }
38-
// viewModel { DonateViewModel(get()) }
3927
}

flutter_module/bridge/main_model.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,8 @@ class MainModelStateData {
110110
bool? is_loading;
111111
List<Snippet?>? data;
112112
String? error;
113+
int? oldHash;
114+
int? newHash;
113115
}
114116

115117
class MainModelEventData {
@@ -122,6 +124,8 @@ class DetailModelStateData {
122124
bool? is_loading;
123125
Snippet? data;
124126
String? error;
127+
double? oldHash;
128+
int? newHash;
125129
}
126130

127131
// Api

flutter_module/lib/model/main_model.dart

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,19 +291,25 @@ class MainModelStateData {
291291
this.is_loading,
292292
this.data,
293293
this.error,
294+
this.oldHash,
295+
this.newHash,
294296
});
295297

296298
ModelState? state;
297299
bool? is_loading;
298300
List<Snippet?>? data;
299301
String? error;
302+
int? oldHash;
303+
int? newHash;
300304

301305
Object encode() {
302306
final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
303307
pigeonMap['state'] = state?.index;
304308
pigeonMap['is_loading'] = is_loading;
305309
pigeonMap['data'] = data;
306310
pigeonMap['error'] = error;
311+
pigeonMap['oldHash'] = oldHash;
312+
pigeonMap['newHash'] = newHash;
307313
return pigeonMap;
308314
}
309315

@@ -316,6 +322,8 @@ class MainModelStateData {
316322
is_loading: pigeonMap['is_loading'] as bool?,
317323
data: (pigeonMap['data'] as List<Object?>?)?.cast<Snippet?>(),
318324
error: pigeonMap['error'] as String?,
325+
oldHash: pigeonMap['oldHash'] as int?,
326+
newHash: pigeonMap['newHash'] as int?,
319327
);
320328
}
321329
}
@@ -353,19 +361,25 @@ class DetailModelStateData {
353361
this.is_loading,
354362
this.data,
355363
this.error,
364+
this.oldHash,
365+
this.newHash,
356366
});
357367

358368
ModelState? state;
359369
bool? is_loading;
360370
Snippet? data;
361371
String? error;
372+
int? oldHash;
373+
int? newHash;
362374

363375
Object encode() {
364376
final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
365377
pigeonMap['state'] = state?.index;
366378
pigeonMap['is_loading'] = is_loading;
367379
pigeonMap['data'] = data?.encode();
368380
pigeonMap['error'] = error;
381+
pigeonMap['oldHash'] = oldHash;
382+
pigeonMap['newHash'] = newHash;
369383
return pigeonMap;
370384
}
371385

@@ -380,6 +394,8 @@ class DetailModelStateData {
380394
? Snippet.decode(pigeonMap['data']!)
381395
: null,
382396
error: pigeonMap['error'] as String?,
397+
oldHash: pigeonMap['oldHash'] as int?,
398+
newHash: pigeonMap['newHash'] as int?,
383399
);
384400
}
385401
}

0 commit comments

Comments
 (0)