Skip to content

Commit

Permalink
Add reccomendations in details view and recomendation service
Browse files Browse the repository at this point in the history
  • Loading branch information
Filip Zymek (FZY) committed Sep 9, 2015
1 parent d81ab3c commit 94efaff
Show file tree
Hide file tree
Showing 15 changed files with 332 additions and 63 deletions.
22 changes: 17 additions & 5 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="meet.mobile">

<uses-permission android:name="android.permission.INTERNET" />
Expand Down Expand Up @@ -61,7 +60,7 @@
<activity
android:name=".activity.PlayerActivity"
android:screenOrientation="sensorLandscape"
android:theme="@style/PlayerTheme"></activity>
android:theme="@style/PlayerTheme" />

<!-- declare tv activity with LEANBACK_LAUNCHER category -->
<activity
Expand All @@ -87,8 +86,21 @@
android:configChanges="keyboard|keyboardHidden|navigation"
android:label="@string/title_activity_player"
android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen">
>
</activity>
></activity>

<service
android:name=".tv.service.RecommendationsService"
android:enabled="true"
android:exported="true" />

<receiver
android:name=".tv.receiver.BootCompletedReceiver"
android:enabled="true"
android:exported="false">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>

</application>

Expand Down
2 changes: 0 additions & 2 deletions app/src/main/java/meet/mobile/activity/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,6 @@ protected void onCreate(Bundle savedInstanceState) {
getFragmentManager().beginTransaction()
.replace(R.id.content_frame, f, "main")
.commit();
} else {
Log.d("main", "no fragment");
}

}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,7 @@
package meet.mobile.application;

import android.app.Application;
import android.graphics.Bitmap;

import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.display.SimpleBitmapDisplayer;

import meet.mobile.R;
import meet.mobile.dagger.componentes.ApplicationComponent;
import meet.mobile.dagger.componentes.DaggerApplicationComponent;
import meet.mobile.dagger.modules.ApplicationModule;
Expand All @@ -20,27 +14,6 @@ public class MeetMobileTvApplication extends Application {

private ApplicationComponent applicationComponent;

public static DisplayImageOptions.Builder getDefaultImageOptions() {
return new DisplayImageOptions.Builder()
.showImageOnLoading(R.mipmap.ic_launcher)
.resetViewBeforeLoading(false)
.cacheOnDisk(true)
.imageScaleType(ImageScaleType.EXACTLY_STRETCHED)
.bitmapConfig(Bitmap.Config.RGB_565)
.considerExifParams(true)
.displayer(new SimpleBitmapDisplayer());
}

public static DisplayImageOptions.Builder getTVBackgroundImageOptions() {
return new DisplayImageOptions.Builder()
.cacheOnDisk(false)
.cacheInMemory(true)
.considerExifParams(true)
.imageScaleType(ImageScaleType.EXACTLY)
.showImageForEmptyUri(R.mipmap.ic_launcher)
.showImageOnFail(R.mipmap.ic_launcher);
}

@Override
public void onCreate() {
super.onCreate();
Expand Down
35 changes: 20 additions & 15 deletions app/src/main/java/meet/mobile/controller/MainController.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package meet.mobile.controller;

import android.app.Activity;
import android.app.Fragment;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.util.Log;
Expand All @@ -20,14 +21,15 @@
/**
* Created by Filip Zymek on 2015-06-08.
*/
public class MainController extends ActivityController<MainUI> implements Observer<Result> {
public class MainController extends FragmentController<MainUI> implements Observer<Result> {

public static final String TAG = MainController.class.getSimpleName();
protected MainUI ui;
protected RestAdapter restAdapter;
GettyImagesAPI gettyImages;

public MainController(Activity activity) {
super(activity);
public MainController(Fragment fragment) {
super(fragment);
}

@Override
Expand All @@ -50,69 +52,72 @@ public void restoreState(Object savedState) {
}

public void loadData() {
Log.d("controller", "loadData");
Log.d(TAG, "loadData");
ui.onLoadingStarted();
String searchPhrase = getSearchPhrase();
Observable<Result> imagesObservable = buildImagesObservable(searchPhrase);
subscribeWith(imagesObservable
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.filter(result -> true)
.cache()
.subscribe(this)
);
}

@Override
public void onCompleted() {
Log.d("MainController", "onCompleted");
Log.d(TAG, "onCompleted");
ui.onLoadingStopped();
}

@Override
public void onError(Throwable e) {
Log.d("MainController", "onError");
Log.d(TAG, "onError");
ui.onError(e);
}

@Override
public void onNext(Result result) {
Log.d("MainController", "onNext");
Log.d(TAG, "onNext");
ui.onDisplayImages(result.getImages());
}

protected String getSearchPhrase() {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getFragment().getActivity());
int key = Integer.parseInt(sharedPreferences.getString(Config.KEY_PREF_FAV_ANIMAL, Config.PREF_FAV_ANIMAL_DEFAULT));
String animal = getActivity().getResources().getStringArray(R.array.animals_array)[key - 1];
String animal = getFragment().getActivity().getResources().getStringArray(R.array.animals_array)[key - 1];
return animal;
}

private Observable<Result> buildImagesObservable(String searchPhrase) {
Observable<Result> imagesObservable = null;
if (hasCache()) {
Log.d("MainController", "hasCache, fetching cached object");
Log.d(TAG, "hasCache, fetching cached object");
//noinspection unchecked
imagesObservable = (Observable<Result>) getCache().get(searchPhrase);
} else {
Log.d(TAG, "no cache -> will create new entry");
}

if (imagesObservable == null) {
Log.d("MainController", "Cached object is null");
Log.d(TAG, "creating new entry");
imagesObservable = gettyImages.getImages(searchPhrase);
if (hasCache()) {
Log.d("MainController", "putting object into cache");
Log.d(TAG, "has cache -> will save entry");
getCache().put(searchPhrase, imagesObservable);
} else {
Log.d(TAG, "no cache -> will not store entry");
}
}
return imagesObservable;
}

public void refreshData() {
removeCurrentCacheEntry();
removeCurrentCacheEntries();
loadData();
}

private void removeCurrentCacheEntry() {
private void removeCurrentCacheEntries() {
getCache().clear();
}
}
1 change: 1 addition & 0 deletions app/src/main/java/meet/mobile/fragment/CacheFragment.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ public void onCreate(Bundle savedInstanceState) {
cache = new LruCache<>(3);
}


@Override
public void put(Object key, T o) {
cache.put(key, o);
Expand Down
11 changes: 8 additions & 3 deletions app/src/main/java/meet/mobile/fragment/MainFragment.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ public class MainFragment extends Fragment implements MainUI, SwipeRefreshLayout

private final static String TAG = MainFragment.class.getSimpleName();
private final static String CACHE = "cache";
public static final String DETAILS = "details";
public static final String SETTINGS = "settings";

@InjectView(R.id.recycler)
protected RecyclerView recyclerView;
Expand Down Expand Up @@ -173,13 +175,16 @@ private void setupCache() {
//noinspection unchecked
cacheFragment = (CacheFragment<Observable>) getFragmentManager().findFragmentByTag(CACHE);
if (cacheFragment == null) {
Log.d(TAG, "adding cache fragment");
cacheFragment = new CacheFragment<>();
getFragmentManager().beginTransaction().add(cacheFragment, CACHE).commit();
} else {
Log.d(TAG, "cache fragment found");
}
}

private void setupController(Bundle savedState) {
controller = new MainController(getActivity());
controller = new MainController(this);
controller.initialize(this);
controller.restoreState(savedState);
controller.setCache(cacheFragment);
Expand Down Expand Up @@ -228,7 +233,7 @@ private void setupActionBar() {
private void handleSettingsAction() {
getFragmentManager().beginTransaction()
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
.replace(R.id.content_frame, SettingsFragment.newInstance(), "settings")
.replace(R.id.content_frame, SettingsFragment.newInstance(), SETTINGS)
.addToBackStack(null)
.commit();
}
Expand Down Expand Up @@ -260,7 +265,7 @@ private void handleImageClicked(int position, Image image) {
DetailsFragment details = DetailsFragment.newInstance(image);
getFragmentManager().beginTransaction()
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
.replace(R.id.content_frame, details, "details")
.replace(R.id.content_frame, details, DETAILS)
.addToBackStack(null)
.commit();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ public void loadData() {
.concatMap(phrase -> Observable.just(new Pair<>(phrase, gettyImages.getImages(phrase).toBlocking().single())))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.cache()
.subscribe(this)
);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,29 @@
package meet.mobile.tv.controller;

import android.app.Fragment;
import android.widget.ImageView;

import java.util.List;

import meet.mobile.config.API;
import meet.mobile.controller.FragmentController;
import meet.mobile.model.Image;
import meet.mobile.model.Result;
import meet.mobile.network.GettyImagesAPI;
import meet.mobile.tv.ui.TvDetailsUI;
import retrofit.RestAdapter;
import rx.Observer;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;

/**
* Created by Filip on 2015-09-07.
*/
public class TvDetailsController extends FragmentController<TvDetailsUI> {
public class TvDetailsController extends FragmentController<TvDetailsUI> implements Observer<Result> {

TvDetailsUI ui;
protected RestAdapter restAdapter;
GettyImagesAPI gettyImages;

public TvDetailsController(Fragment fragment) {
super(fragment);
Expand All @@ -20,6 +32,10 @@ public TvDetailsController(Fragment fragment) {
@Override
public void initialize(TvDetailsUI tvDetailsUI) {
this.ui = tvDetailsUI;
restAdapter = new RestAdapter.Builder()
.setEndpoint(API.GETTY_IMAGES_SEARCH_ENDPOINT)
.build();
gettyImages = restAdapter.create(GettyImagesAPI.class);
}

@Override
Expand All @@ -35,4 +51,28 @@ public void restoreState(Object savedState) {
public void loadDetails(Image image) {
ui.showDetails(image);
}

public void loadRecomendations(String recomendation) {
subscribeWith(
gettyImages.getImages(recomendation)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this)
);
}

@Override
public void onCompleted() {

}

@Override
public void onError(Throwable e) {
ui.onError(e);
}

@Override
public void onNext(Result result) {
ui.showRecomendations(result.getImages());
}
}
Loading

0 comments on commit 94efaff

Please sign in to comment.