Skip to content

Instantly share code, notes, and snippets.

View iammert's full-sized avatar
🎧
Focusing

Mert Şimşek iammert

🎧
Focusing
View GitHub Profile
@iammert
iammert / User.kt
Created September 19, 2017 19:21
User kt
data class User(var id: Int = 0, var age: Int = 0, var score: Int = 0, var name: String? = null)
@iammert
iammert / genresfragment.java
Last active July 11, 2017 11:27
genresfragment.java
viewModel.getGenres().observe(this, listResource -> {
refreshLayout.setRefreshing(listResource.status == Status.LOADING);
genresAdapter.setGenres(listResource.data);
});
@iammert
iammert / GenresViewModel.java
Last active July 11, 2017 11:26
GenresViewModel.java
public class GenresViewModel extends ViewModel {
private LiveData<Resource<List<GenreEntity>>> genreLiveData;
@Inject
public GenresViewModel(RadioRepository radioRepository) {
genreLiveData = LiveDataReactiveStreams.fromPublisher(radioRepository.getGenres()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread()));
}
@iammert
iammert / RadioRepository.java
Created July 11, 2017 08:33
RadioRepository.java
public class RadioRepository {
//...
public Flowable<Resource<List<GenreEntity>>> getGenres() {
return Flowable.create(emitter -> new NetworkBoundSource<List<GenreEntity>, List<Genre>>(emitter) {
@Override
public Single<List<Genre>> getRemote() {
return firebaseService.getGenres();
}
@iammert
iammert / NetworkBoundSource.java
Created July 11, 2017 08:31
NetworkBoundSource.java
public abstract class NetworkBoundSource<LocalType, RemoteType> {
public NetworkBoundSource(FlowableEmitter<Resource<LocalType>> emitter) {
Disposable firstDataDisposable = getLocal()
.map(Resource::loading)
.subscribe(emitter::onNext);
getRemote().map(mapper())
.subscribeOn(Schedulers.newThread())
.observeOn(Schedulers.newThread())
@iammert
iammert / FirebaseService.java
Last active July 11, 2017 08:25
FirebaseService.java
public class FirebaseService {
// ...
public Single<List<Genre>> getGenres() {
return Single.create(e ->
firebaseDatabase.getReference().child("genres")
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<Genre> genreList = new ArrayList<>();
for (DataSnapshot child : dataSnapshot.getChildren()) {
@iammert
iammert / GenresDao.java
Created July 11, 2017 08:23
GenresDao.java
@Dao
public abstract class GenresDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
public abstract void insert(List<GenreEntity> genreEntities);
@Query("SELECT * FROM genreentity")
public abstract Flowable<List<GenreEntity>> getAll();
}
@iammert
iammert / dependency.gradle
Last active August 27, 2019 06:46
dependency.gradle
//Room
archComponentVersion = "1.0.0-alpha3"
archRoom = "android.arch.persistence.room:runtime:$archComponentVersion"
archRoomCompiler = "android.arch.persistence.room:compiler:$archComponentVersion"
archRoomRx = "android.arch.persistence.room:rxjava2:$archComponentVersion"
archLifeCycleReactiveStreams = "android.arch.lifecycle:reactivestreams:$archComponentVersion"
//RxJava & RxAndroid
@iammert
iammert / ActivityBuilder.java
Created June 28, 2017 11:44
Activity Builder with Map
@Module
public abstract class ActivityBuilder {
@Binds
@IntoMap
@ActivityKey(MainActivity.class)
abstract AndroidInjector.Factory<? extends Activity> bindMainActivity(MainActivityComponent.Builder builder);
}
@iammert
iammert / DetailActivity.java
Created June 15, 2017 13:19
DetailActivity.java
public class DetailActivity extends AppCompatActivity implements HasSupportFragmentInjector {
@Inject
DispatchingAndroidInjector<Fragment> fragmentDispatchingAndroidInjector;
//simplified
@Override
public AndroidInjector<Fragment> supportFragmentInjector() {
return fragmentDispatchingAndroidInjector;