Skip to content
This repository has been archived by the owner on Mar 1, 2021. It is now read-only.

Commit

Permalink
Created TriadActionBarActivity, using TriadManager
Browse files Browse the repository at this point in the history
  • Loading branch information
nhaarman committed Apr 5, 2015
1 parent 23a9587 commit c29bfad
Show file tree
Hide file tree
Showing 12 changed files with 301 additions and 87 deletions.
6 changes: 4 additions & 2 deletions .travis.yml
Expand Up @@ -3,8 +3,10 @@ jdk: oraclejdk7

android:
components:
- android-21
- build-tools-21.1.2
- android-22
- build-tools-22.0.1
- extra-android-support
- extra-android-m2repository

before_install:
- git fetch --tags
Expand Down
6 changes: 3 additions & 3 deletions build.gradle
Expand Up @@ -20,10 +20,10 @@ allprojects {
afterEvaluate { project ->
if(project.hasProperty('android')) {

project.android.compileSdkVersion 21;
project.android.buildToolsVersion "21.1.2"
project.android.compileSdkVersion 22;
project.android.buildToolsVersion "22.0.1"
project.android.defaultConfig.minSdkVersion 14;
project.android.defaultConfig.targetSdkVersion 21;
project.android.defaultConfig.targetSdkVersion 22;
}
}
}
Expand Down
12 changes: 11 additions & 1 deletion gradle.properties
@@ -1 +1,11 @@
isRelease = false
isRelease = false

group=com.nhaarman

POM_DESCRIPTION=A Model-View-Presenter library for Android
POM_URL=https://github.com/nhaarman/Triad
POM_SCM_URL=https://github.com/nhaarman/Triad
POM_SCM_CONNECTION=scm:git@github.com:nhaarman/Triad.git
POM_SCM_DEV_CONNECTION=scm:git@github.com:nhaarman/Triad.git
POM_DEVELOPER_ID=nhaarman
POM_DEVELOPER_NAME=Niek Haarman
1 change: 1 addition & 0 deletions settings.gradle
@@ -1,4 +1,5 @@
include ':triad'
include ':triad-appcompat-v7'
include ':triad-tests'

include ':triad-sample:business'
Expand Down
28 changes: 28 additions & 0 deletions triad-appcompat-v7/build.gradle
@@ -0,0 +1,28 @@
apply plugin: 'com.android.library'

android {
testOptions {
unitTests.returnDefaultValues = true
}
}


apply from: rootProject.projectDir.absolutePath + '/gradle/compile.gradle';
apply from: rootProject.projectDir.absolutePath + '/gradle/publishing.gradle'
apply from: rootProject.projectDir.absolutePath + '/gradle/bintray.gradle'
apply from: rootProject.projectDir.absolutePath + '/gradle/artifactory.gradle'

dependencies {
compile project(':triad')

/* AppCompat v7 */
compile 'com.android.support:appcompat-v7:22.0.0'

/* Annotations library */
provided 'org.jetbrains:annotations:13.0'

/* Tests */
testCompile 'junit:junit:4.12'
testCompile 'org.hamcrest:hamcrest-core:1.3'
testCompile 'org.mockito:mockito-core:1.9.5'
}
3 changes: 3 additions & 0 deletions triad-appcompat-v7/gradle.properties
@@ -0,0 +1,3 @@
POM_NAME=Triad AppCompat v7
POM_ARTIFACT_ID=triad-appcompat-v7
POM_PACKAGING=aar
6 changes: 6 additions & 0 deletions triad-appcompat-v7/src/main/AndroidManifest.xml
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.nhaarman.triad_appcompat_v7">

<application />

</manifest>
@@ -0,0 +1,80 @@
package com.nhaarman.triad;

import android.app.Activity;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import com.nhaarman.triad.presenter.Presenter;
import com.nhaarman.triad.screen.Screen;
import flow.Flow;
import org.jetbrains.annotations.NotNull;

/**
* An {@link Activity} which is the root of an application that uses Triad.
*
* @param <M> The {@code main component} to use for {@link Presenter} creation.
*/
public abstract class TriadActionBarActivity<M> extends ActionBarActivity {

@NotNull
private final TriadManager<M> mTriadManager;

public TriadActionBarActivity() {
mTriadManager = new TriadManager<>(this);
}

@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

mTriadManager.onCreate(createInitialScreen(), createMainComponent());
}

/**
* Creates the main component which is used to retrieve dependencies from that are needed to create {@link Presenter}s.
*
* @return The created main component.
*/
@NotNull
protected abstract M createMainComponent();

/**
* Creates the {@link Screen} that is to be shown when the application starts.
*
* @return The created {@link Screen}.
*/
@NotNull
protected abstract Screen<?, ?, M> createInitialScreen();

@Override
protected void onStart() {
super.onStart();
mTriadManager.onStart();
}

@Override
protected void onPostCreate(final Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
mTriadManager.onPostCreate();
}

@Override
protected void onStop() {
super.onStop();
mTriadManager.onStop();
}

@Override
public void onBackPressed() {
if (!mTriadManager.onBackPressed()) {
super.onBackPressed();
}
}

/**
* Returns the {@link Flow} instance to be used to navigate between {@link Screen}s.
*/
@NotNull
protected Flow getFlow() {
return mTriadManager.getFlow();
}
}
2 changes: 1 addition & 1 deletion triad-sample/app/build.gradle
Expand Up @@ -49,5 +49,5 @@ dependencies {

androidTestCompile 'com.android.support.test.espresso:espresso-core:2.0'
androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
androidTestCompile 'com.squareup.assertj:assertj-android:1.0.0'
androidTestCompile ('com.squareup.assertj:assertj-android:1.0.0') {exclude group: 'com.android.support'}
}
2 changes: 1 addition & 1 deletion triad-tests/build.gradle
Expand Up @@ -19,5 +19,5 @@ dependencies {
/* Tests */
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.0'
androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
androidTestCompile 'com.squareup.assertj:assertj-android:1.0.0'
androidTestCompile ('com.squareup.assertj:assertj-android:1.0.0') {exclude group: 'com.android.support'}
}
89 changes: 10 additions & 79 deletions triad/src/main/java/com/nhaarman/triad/TriadActivity.java
Expand Up @@ -2,15 +2,9 @@

import android.app.Activity;
import android.os.Bundle;
import com.nhaarman.triad.container.ScreenContainer;
import com.nhaarman.triad.presenter.Presenter;
import com.nhaarman.triad.presenter.ScreenPresenter;
import com.nhaarman.triad.screen.Screen;
import flow.Backstack;
import flow.Flow;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.Iterator;
import org.jetbrains.annotations.NotNull;

/**
Expand All @@ -20,51 +14,18 @@
*/
public abstract class TriadActivity<M> extends Activity {

/**
* The {@link Flow} instance that is used to navigate between {@link Screen}s.
*/
@NotNull
private Flow mFlow;
private final TriadManager<M> mTriadManager;

/**
* The {@link TriadPresenter} that handles {@link Screen} navigation.
*/
@NotNull
private TriadPresenter<M> mTriadPresenter;
public TriadActivity() {
mTriadManager = new TriadManager<>(this);
}

@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

initializeFlow();
initializePresenter();
initializeView();
}

/**
* Retrieves the {@link Flow} instance, and registers this {@code TriadActivity} to be notified of screen transitions.
*/
private void initializeFlow() {
FlowManager flowManager = FlowManager.getInstance(Backstack.single(createInitialScreen()));
flowManager.setFlowListener(new MyFlowListener());
mFlow = flowManager.getFlow();
}

/**
* Creates the {@link TriadPresenter}.
*/
private void initializePresenter() {
mTriadPresenter = new TriadPresenter(createMainComponent(), mFlow);
}

/**
* Initializes the {@link TriadView}.
*/
private void initializeView() {
setContentView(R.layout.view_triad);
TriadView<M> triadView = (TriadView<M>) findViewById(R.id.view_triad);
triadView.setPresenter(mTriadPresenter);
setContentView(triadView);
mTriadManager.onCreate(createInitialScreen(), createMainComponent());
}

/**
Expand All @@ -86,39 +47,24 @@ private void initializeView() {
@Override
protected void onStart() {
super.onStart();
mTriadPresenter.onStart();
mTriadManager.onStart();
}

@Override
protected void onPostCreate(final Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
Backstack backstack = mFlow.getBackstack();
AbstractList<Screen<?, ?, M>> screens = new ArrayList<>();

for (Iterator<Backstack.Entry> iterator1 = backstack.reverseIterator(); iterator1.hasNext(); ) {
Screen<?, ?, M> screen = (Screen<?, ?, M>) iterator1.next().getScreen();
if (!screen.isDialog()) {
screens.clear();
}

screens.add(screen);
}

//noinspection rawtypes
for (Screen screen : screens) {
mTriadPresenter.showScreen(screen, Flow.Direction.FORWARD);
}
mTriadManager.onPostCreate();
}

@Override
protected void onStop() {
super.onStop();
mTriadPresenter.onStop();
mTriadManager.onStop();
}

@Override
public void onBackPressed() {
if (!mTriadPresenter.onBackPressed()) {
if (!mTriadManager.onBackPressed()) {
super.onBackPressed();
}
}
Expand All @@ -128,21 +74,6 @@ public void onBackPressed() {
*/
@NotNull
protected Flow getFlow() {
return mFlow;
}

/**
* A {@link Flow.Listener} that delegates {@link Screen} transitions to the {@link TriadPresenter}.
*/
private class MyFlowListener implements Flow.Listener {

@Override
public void go(final Backstack nextBackstack, final Flow.Direction direction, final Flow.Callback callback) {
//noinspection rawtypes
Screen<? extends ScreenPresenter, ? extends ScreenContainer, M> screen =
(Screen<? extends ScreenPresenter, ? extends ScreenContainer, M>) nextBackstack.current().getScreen();
mTriadPresenter.showScreen(screen, direction);
callback.onComplete();
}
return mTriadManager.getFlow();
}
}

0 comments on commit c29bfad

Please sign in to comment.