Skip to content
This repository has been archived by the owner on Apr 30, 2024. It is now read-only.

Commit

Permalink
add scree scoop factory
Browse files Browse the repository at this point in the history
  • Loading branch information
lexer committed Apr 1, 2016
1 parent af89633 commit 8a001b6
Show file tree
Hide file tree
Showing 39 changed files with 1,243 additions and 447 deletions.
1 change: 1 addition & 0 deletions scoop-basics/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ dependencies {
compile 'com.android.support:multidex:1.0.0'
compile 'com.jakewharton:butterknife:7.0.1'
compile 'com.jakewharton.timber:timber:3.1.0'
compile 'com.jakewharton.rxrelay:rxrelay:1.0.0'
compile 'com.google.android.gms:play-services-location:8.1.0'
compile project(':scoop')
compile project(':scoop-dagger')
Expand Down
19 changes: 14 additions & 5 deletions scoop-basics/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest
package="com.example.scoop.basics"
xmlns:android="http://schemas.android.com/apk/res/android">
xmlns:android="http://schemas.android.com/apk/res/android"
>

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<uses-feature
android:glEsVersion="0x00020000"
android:required="true"/>
android:required="true"
/>

<application
android:name=".App"
Expand All @@ -20,11 +22,13 @@

<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
android:value="@integer/google_play_services_version"
/>

<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="AIzaSyAgTvwvsXZpBZrEGSKEUSDS_v1b5dtGEfg"/>
android:value="AIzaSyAgTvwvsXZpBZrEGSKEUSDS_v1b5dtGEfg"
/>

<activity
android:name=".MainActivity"
Expand All @@ -39,6 +43,11 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<service
android:name=".androidservices.SampleIntentService"
android:exported="false"
/>
</application>

</manifest>
2 changes: 2 additions & 0 deletions scoop-basics/src/main/java/com/example/scoop/basics/App.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ public void onCreate() {
Stetho.initializeWithDefaults(this);
Timber.plant(new Timber.DebugTree());

Timber.d("onCreate");

Scoop.setViewBinder(new ButterKnifeViewBinder());

applicationGraph = ObjectGraph.create(new AppModule(this));
Expand Down
31 changes: 23 additions & 8 deletions scoop-basics/src/main/java/com/example/scoop/basics/AppModule.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,22 @@
package com.example.scoop.basics;

import android.app.Application;
import android.app.NotificationManager;
import android.content.Context;
import com.example.scoop.basics.androidservices.SampleIntentService;
import com.example.scoop.basics.scoop.AppRouter;
import com.example.scoop.basics.scoop.DialogRouter;
import com.lyft.scoop.dagger.DaggerScreenScooper;
import com.lyft.scoop.ScreenScoopFactory;
import com.lyft.scoop.ScreenScooper;
import com.lyft.scoop.dagger.DaggerScreenScoopFactory;
import dagger.Module;
import dagger.Provides;
import javax.inject.Singleton;

@Module(
injects = {
App.class,
SampleIntentService.class
},
includes = {
},
Expand All @@ -24,22 +30,26 @@ public AppModule(App app) {
this.app = app;
}

@Singleton
@Provides
DaggerScreenScooper provideDaggerScreenScooper() {
return new DaggerScreenScooper();
ScreenScoopFactory provideDaggerScreenScooper() {
return new DaggerScreenScoopFactory();
}

@Provides
ScreenScooper provideScreenFactory(ScreenScoopFactory screenScoopFactory) {
return new ScreenScooper(screenScoopFactory);
}

@Singleton
@Provides
AppRouter provideAppRouter(DaggerScreenScooper daggerScreenScooper) {
return new AppRouter(daggerScreenScooper, false);
AppRouter provideAppRouter() {
return new AppRouter(false);
}

@Singleton
@Provides
DialogRouter provideDialogRouter(DaggerScreenScooper daggerScreenScooper) {
return new DialogRouter(new AppRouter(daggerScreenScooper, true));
DialogRouter provideDialogRouter() {
return new DialogRouter(new AppRouter(true));
}

@Singleton
Expand All @@ -48,4 +58,9 @@ Application provideApplication() {
return app;
}

@Singleton
@Provides
NotificationManager provideNotificationManager() {
return (NotificationManager) app.getSystemService(Context.NOTIFICATION_SERVICE);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,34 +32,35 @@ public class MainActivity extends AppCompatActivity {
DialogRouter dialogRouter;

private CompositeSubscription subscriptions = new CompositeSubscription();
private Scoop rootScoop;
private Scoop activityScoop;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Timber.d("onCreate");
setContentView(R.layout.activity_main);

getRootScoop().inflate(R.layout.root, (ViewGroup) findViewById(R.id.root), true);
getActivityScoop().inflate(R.layout.root, (ViewGroup) findViewById(R.id.root), true);

ButterKnife.bind(this);

DaggerInjector.fromScoop(getRootScoop()).inject(this);

appRouter.onCreate(rootScoop);
dialogRouter.onCreate(rootScoop);
appRouter.goTo(new DemoScreen());

Timber.d("onCreate");
DaggerInjector.fromScoop(getActivityScoop()).inject(this);
}

@Override
protected void onResume() {
super.onResume();
Timber.d("onResume");

if (!appRouter.hasActiveScreen()) {
appRouter.goTo(new DemoScreen());
}
}

@Override
protected void onPause() {
super.onPause();
Timber.d("onPause");
}

@Override
Expand All @@ -70,10 +71,9 @@ protected void onSaveInstanceState(Bundle outState) {

@Override
protected void onDestroy() {

Timber.d("onDestroy");
subscriptions.clear();

getActivityScoop().destroy();
super.onDestroy();
}

Expand Down Expand Up @@ -104,18 +104,19 @@ public void onBackPressed() {
super.onBackPressed();
}

private Scoop getRootScoop() {
if (rootScoop == null) {
private Scoop getActivityScoop() {
if (activityScoop == null) {
Timber.d("getActivityScoop");
ObjectGraph activityGraph = getApp().getApplicationGraph().plus(new MainActivityModule(this));

DaggerInjector activityInjector = new DaggerInjector(activityGraph);

rootScoop = new Scoop.Builder("root")
activityScoop = new Scoop.Builder("activity_scoop")
.service(DaggerInjector.SERVICE_NAME, activityInjector)
.build();
}

return rootScoop;
return activityScoop;
}

private App getApp() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.example.scoop.basics;

import android.app.Activity;
import com.example.scoop.basics.scoop.DialogUiContainer;
import com.example.scoop.basics.scoop.MainUiContainer;
import dagger.Provides;
Expand All @@ -25,7 +24,7 @@ public MainActivityModule(MainActivity mainActivity) {
}

@Provides
Activity provideActivity() {
MainActivity provideActivity() {
return mainActivity;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package com.example.scoop.basics.androidservices;

import android.app.IntentService;
import android.content.Intent;
import com.example.scoop.basics.App;
import com.example.scoop.basics.MainActivity;
import com.example.scoop.basics.scoop.AppRouter;
import com.example.scoop.basics.ui.DemoScreen;
import com.example.scoop.basics.ui.navigationsample.screen.AScreen;
import javax.inject.Inject;
import timber.log.Timber;

public class SampleIntentService extends IntentService {

@Inject
AppRouter appRouter;

public SampleIntentService() {
super(SampleIntentService.class.getSimpleName());
}

@Override
public void onCreate() {
super.onCreate();

Timber.d("onCreate");
getApp().getApplicationGraph().inject(this);
}

private App getApp() {return (App) this.getApplicationContext();}

@Override
protected void onHandleIntent(Intent intent) {
appRouter.replaceAllWith(new DemoScreen(), new AScreen());
Intent mainActivityIntent = new Intent(this, MainActivity.class);
mainActivityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(mainActivityIntent);
}
}
Original file line number Diff line number Diff line change
@@ -1,25 +1,24 @@
package com.example.scoop.basics.scoop;

import com.lyft.scoop.Router;
import com.jakewharton.rxrelay.BehaviorRelay;
import com.lyft.scoop.RouteChange;
import com.lyft.scoop.ScreenScooper;
import com.lyft.scoop.Router;
import rx.Observable;
import rx.subjects.BehaviorSubject;

public class AppRouter extends Router {

private final BehaviorSubject<RouteChange> screenChangeSubject = BehaviorSubject.create();
private final BehaviorRelay<RouteChange> routeChangeRelay = BehaviorRelay.create();

public AppRouter(ScreenScooper screenScooper, boolean hasEmptyStack) {
super(screenScooper, hasEmptyStack);
public AppRouter(boolean hasEmptyStack) {
super(hasEmptyStack);
}

public Observable<RouteChange> observeScreenChange() {
return screenChangeSubject.asObservable();
@Override
protected void onRouteChanged(RouteChange routeChange) {
routeChangeRelay.call(routeChange);
}

@Override
protected void onScoopChanged(RouteChange change) {
screenChangeSubject.onNext(change);
public Observable<RouteChange> observeRouteChange() {
return routeChangeRelay.asObservable();
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.example.scoop.basics.scoop;

import com.lyft.scoop.RouteChange;
import com.lyft.scoop.Scoop;
import com.lyft.scoop.Screen;
import rx.Observable;

Expand All @@ -21,11 +20,7 @@ public void show(Screen screen) {
dialogRouter.replaceAllWith(screen);
}

public void onCreate(Scoop rootScoop) {
dialogRouter.onCreate(rootScoop);
}

public Observable<RouteChange> observeDialogChange() {
return dialogRouter.observeScreenChange();
return dialogRouter.observeRouteChange();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,24 @@
import com.example.scoop.basics.ui.Keyboard;
import com.lyft.scoop.LayoutInflater;
import com.lyft.scoop.RouteChange;
import com.lyft.scoop.Scoop;
import com.lyft.scoop.ScreenScooper;
import com.lyft.scoop.UiContainer;
import com.lyft.scoop.ViewControllerInflater;
import com.lyft.scoop.dagger.DaggerInjector;
import com.lyft.scoop.dagger.DaggerLayoutInflater;
import com.lyft.scoop.dagger.DaggerViewControllerInflater;
import javax.inject.Inject;
import rx.functions.Action1;
import timber.log.Timber;

public class DialogUiContainer extends UiContainer {

@Inject
DialogRouter dialogRouter;

@Inject
ScreenScooper screenScooper;

private ViewSubscriptions subscriptions = new ViewSubscriptions();

public DialogUiContainer(Context context, AttributeSet attrs) {
Expand Down Expand Up @@ -62,12 +66,17 @@ protected void onDetachedFromWindow() {

private Action1<RouteChange> onDialogChanged = new Action1<RouteChange>() {
@Override
public void call(RouteChange screenChange) {
if (screenChange.next != null) {
Timber.d("Scoop changed:" + screenChange.next.getClass().getSimpleName());
}
DialogUiContainer.this.goTo(screenChange);
public void call(RouteChange routeChange) {

Scoop rootScoop = Scoop.fromView(DialogUiContainer.this);

Scoop currentScreenScoop = Scoop.fromView(getActiveView());

Scoop scoop = screenScooper.create(rootScoop, currentScreenScoop, routeChange.fromPath, routeChange.toPath);

goTo(routeChange.toScreenSwap(scoop));

Keyboard.hideKeyboard(DialogUiContainer.this);
}
};
}
}
Loading

0 comments on commit 8a001b6

Please sign in to comment.