Android Open Source - u2020 Gallery Database






From Project

Back to project page u2020.

License

The source code is released under:

Apache License

If you think the Android project u2020 listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.jakewharton.u2020.data;
//from  w  w  w  .  ja  v  a 2s  .  c o m
import com.jakewharton.u2020.data.api.GalleryService;
import com.jakewharton.u2020.data.api.Section;
import com.jakewharton.u2020.data.api.Sort;
import com.jakewharton.u2020.data.api.model.Image;
import com.jakewharton.u2020.data.api.transforms.GalleryToImageList;
import com.jakewharton.u2020.data.rx.EndObserver;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import javax.inject.Singleton;
import rx.Observable;
import rx.Observer;
import rx.Subscription;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Func1;
import rx.schedulers.Schedulers;
import rx.subjects.PublishSubject;

/** Poor-man's in-memory cache of responses. Must be accessed on the main thread. */
@Singleton
public class GalleryDatabase {
  private final GalleryService galleryService;

  private final Map<Section, List<Image>> galleryCache = new LinkedHashMap<>();
  private final Map<Section, PublishSubject<List<Image>>> galleryRequests = new LinkedHashMap<>();

  @Inject public GalleryDatabase(GalleryService galleryService) {
    this.galleryService = galleryService;
  }

  // TODO pull underlying logic into a re-usable component for debouncing and caching last value.
  public Subscription loadGallery(final Section section, Observer<List<Image>> observer) {
    List<Image> images = galleryCache.get(section);
    if (images != null) {
      // We have a cached value. Emit it immediately.
      observer.onNext(images);
    }

    PublishSubject<List<Image>> galleryRequest = galleryRequests.get(section);
    if (galleryRequest != null) {
      // There's an in-flight network request for this section already. Join it.
      return galleryRequest.subscribe(observer);
    }

    galleryRequest = PublishSubject.create();
    galleryRequests.put(section, galleryRequest);

    Subscription subscription = galleryRequest.subscribe(observer);

    galleryRequest.subscribe(new EndObserver<List<Image>>() {
      @Override public void onEnd() {
        galleryRequests.remove(section);
      }

      @Override public void onNext(List<Image> images) {
        galleryCache.put(section, images);
      }
    });

    // Warning: Gross shit follows! Where you at Java 8?
    galleryService.listGallery(section, Sort.VIRAL, 1)
        .map(new GalleryToImageList())
        .flatMap(new Func1<List<Image>, Observable<Image>>() {
          @Override public Observable<Image> call(List<Image> images) {
            return Observable.from(images);
          }
        })
        .filter(new Func1<Image, Boolean>() {
          @Override public Boolean call(Image image) {
            return !image.is_album; // No albums.
          }
        })
        .toList()
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(galleryRequest);

    return subscription;
  }
}




Java Source Code List

com.jakewharton.u2020.DebugU2020Module.java
com.jakewharton.u2020.Modules.java
com.jakewharton.u2020.Modules.java
com.jakewharton.u2020.U2020App.java
com.jakewharton.u2020.U2020Module.java
com.jakewharton.u2020.data.AnimationSpeed.java
com.jakewharton.u2020.data.ApiEndpoint.java
com.jakewharton.u2020.data.ApiEndpoints.java
com.jakewharton.u2020.data.DataModule.java
com.jakewharton.u2020.data.DebugDataModule.java
com.jakewharton.u2020.data.GalleryDatabase.java
com.jakewharton.u2020.data.IsMockMode.java
com.jakewharton.u2020.data.MockRequestHandler.java
com.jakewharton.u2020.data.NetworkProxy.java
com.jakewharton.u2020.data.PicassoDebugging.java
com.jakewharton.u2020.data.PixelGridEnabled.java
com.jakewharton.u2020.data.PixelRatioEnabled.java
com.jakewharton.u2020.data.ScalpelEnabled.java
com.jakewharton.u2020.data.ScalpelWireframeEnabled.java
com.jakewharton.u2020.data.SeenDebugDrawer.java
com.jakewharton.u2020.data.api.ApiHeaders.java
com.jakewharton.u2020.data.api.ApiModule.java
com.jakewharton.u2020.data.api.ClientId.java
com.jakewharton.u2020.data.api.DebugApiModule.java
com.jakewharton.u2020.data.api.GalleryService.java
com.jakewharton.u2020.data.api.MockGalleryService.java
com.jakewharton.u2020.data.api.Section.java
com.jakewharton.u2020.data.api.ServerDatabase.java
com.jakewharton.u2020.data.api.SortUtil.java
com.jakewharton.u2020.data.api.Sort.java
com.jakewharton.u2020.data.api.model.Gallery.java
com.jakewharton.u2020.data.api.model.Image.java
com.jakewharton.u2020.data.api.model.ImgurResponse.java
com.jakewharton.u2020.data.api.model.MockImageLoader.java
com.jakewharton.u2020.data.api.transforms.GalleryToImageList.java
com.jakewharton.u2020.data.prefs.BooleanPreference.java
com.jakewharton.u2020.data.prefs.IntPreference.java
com.jakewharton.u2020.data.prefs.StringPreference.java
com.jakewharton.u2020.data.rx.EndObserver.java
com.jakewharton.u2020.data.rx.EndlessObserver.java
com.jakewharton.u2020.ui.ActivityHierarchyServer.java
com.jakewharton.u2020.ui.AppContainer.java
com.jakewharton.u2020.ui.DebugUiModule.java
com.jakewharton.u2020.ui.MainActivity.java
com.jakewharton.u2020.ui.UiModule.java
com.jakewharton.u2020.ui.debug.AnimationSpeedAdapter.java
com.jakewharton.u2020.ui.debug.ContextualDebugActions.java
com.jakewharton.u2020.ui.debug.DebugAppContainer.java
com.jakewharton.u2020.ui.debug.EnumAdapter.java
com.jakewharton.u2020.ui.debug.HierarchyTreeChangeListener.java
com.jakewharton.u2020.ui.debug.NetworkDelayAdapter.java
com.jakewharton.u2020.ui.debug.NetworkErrorAdapter.java
com.jakewharton.u2020.ui.debug.NetworkVarianceAdapter.java
com.jakewharton.u2020.ui.debug.ProxyAdapter.java
com.jakewharton.u2020.ui.debug.SocketActivityHierarchyServer.java
com.jakewharton.u2020.ui.gallery.GalleryAdapter.java
com.jakewharton.u2020.ui.gallery.GalleryItemView.java
com.jakewharton.u2020.ui.gallery.GalleryView.java
com.jakewharton.u2020.ui.misc.BetterViewAnimator.java
com.jakewharton.u2020.ui.misc.BindableAdapter.java
com.jakewharton.u2020.ui.misc.ForegroundImageView.java
com.jakewharton.u2020.util.Strings.java