Skip to content

Commit

Permalink
Merge pull request #35 from Wolox/development
Browse files Browse the repository at this point in the history
Release 2.0.1
  • Loading branch information
Fabian Alvarez authored Apr 3, 2018
2 parents 25d4881 + 1bcfb1e commit b00e8ac
Show file tree
Hide file tree
Showing 14 changed files with 141 additions and 401 deletions.
3 changes: 2 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ buildscript {
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
classpath 'com.android.tools.build:gradle:3.1.0'
classpath 'com.jakewharton:butterknife-gradle-plugin:8.5.1'
classpath 'com.dicedmelon.gradle:jacoco-android:0.1.2'
classpath 'org.kt3k.gradle.plugin:coveralls-gradle-plugin:2.8.2'
Expand All @@ -19,6 +19,7 @@ allprojects {
repositories {
jcenter()
google()
maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
}
}

Expand Down
6 changes: 3 additions & 3 deletions core/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ apply plugin: 'com.github.kt3k.coveralls'

android {
compileSdkVersion 27
buildToolsVersion "26.0.2"
buildToolsVersion "27.0.3"

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
Expand Down Expand Up @@ -36,8 +36,8 @@ coveralls {
}

buildscript {
ext.support_library_version = '27.0.2'
ext.butterknife_version = '8.8.1'
ext.support_library_version = '27.1.0'
ext.butterknife_version = '9.0.0-SNAPSHOT'
ext.dagger_version = '2.13'
ext.powermock_version = '1.7.0'
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,11 @@

import android.util.SparseArray;

import ar.com.wolox.wolmo.core.fragment.WolmoFragmentHandler;
import ar.com.wolox.wolmo.core.permission.PermissionListener;
import ar.com.wolox.wolmo.core.presenter.BasePresenter;
import ar.com.wolox.wolmo.core.util.Logger;
import ar.com.wolox.wolmo.core.util.ToastFactory;

import dagger.Component;
import dagger.Module;
Expand All @@ -43,7 +46,15 @@ static SparseArray<PermissionListener> providesPermissionManagerArray() {
}

@Provides
static BasePresenter providesBasePresenter() {
static BasePresenter providesDefaultBasePresenter() {
return new BasePresenter();
}

/**
* Provides a default {@link WolmoFragmentHandler} with no presenter for fragments that don't need it.
*/
@Provides
static WolmoFragmentHandler providesDefaultWolmoFragmentHandler(ToastFactory toastFactory, Logger logger) {
return new WolmoFragmentHandler(toastFactory, logger);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,17 @@ protected T getPresenter() {
return mFragmentHandler.getPresenter();
}

/**
* Tries to return a non null instance of the presenter {@link T} for this fragment.
* If the presenter is null this will throw a NullPointerException.
*
* @return presenter
*/
@NonNull
T requirePresenter() {
return mFragmentHandler.requirePresenter();
}

/**
* Shows the {@link WolmoDialogFragment} using the fragment.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,17 @@ protected T getPresenter() {
return mFragmentHandler.getPresenter();
}

/**
* Tries to return a non null instance of the presenter {@link T} for this fragment.
* If the presenter is null this will throw a NullPointerException.
*
* @return presenter
*/
@NonNull
T requirePresenter() {
return mFragmentHandler.requirePresenter();
}

/**
* @see IWolmoFragment#onBackPressed()
* <p>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,19 +25,15 @@
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import ar.com.wolox.wolmo.core.R;
import ar.com.wolox.wolmo.core.presenter.BasePresenter;
import ar.com.wolox.wolmo.core.util.Logger;
import ar.com.wolox.wolmo.core.util.ReflectionUtils;
import ar.com.wolox.wolmo.core.util.ToastFactory;

import java.lang.reflect.Type;

import javax.inject.Inject;

import butterknife.ButterKnife;
Expand All @@ -57,12 +53,20 @@ public final class WolmoFragmentHandler<T extends BasePresenter> {
private boolean mVisible;
private Unbinder mUnbinder;

@Inject T mPresenter;
@Inject ToastFactory mToastFactory;
@Inject Logger mLogger;
private @Nullable T mPresenter;
private ToastFactory mToastFactory;
private Logger mLogger;

@Inject
WolmoFragmentHandler() {}
WolmoFragmentHandler(@Nullable T presenter, @NonNull ToastFactory toastFactory, @NonNull Logger logger) {
mPresenter = presenter;
mToastFactory = toastFactory;
mLogger = logger;
}

public WolmoFragmentHandler(@NonNull ToastFactory toastFactory, @NonNull Logger logger) {
this(null, toastFactory, logger);
}

/**
* Sets the fragment for this fragment handler.
Expand Down Expand Up @@ -118,34 +122,19 @@ View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
* fragment to the {@link BasePresenter} calling {@link BasePresenter#onViewAttached()}.
*/
@SuppressWarnings("unchecked")
void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
mCreated = true;
// We check if the fragment implements or extends the required type for the presenter's view.
// If it does, we try to assign it as a view, otherwise we fail and no view will be available for the presenter
if (getPresenter() != null) {
try {
Type[] viewTypes = ReflectionUtils.getParameterizedTypes(getPresenter());
if (ReflectionUtils.getClass(viewTypes[0]).isAssignableFrom(mWolmoFragment.getClass())) {
mPresenter.attachView(mWolmoFragment);
} else {
throw new ClassNotFoundException();
}
} catch (ClassNotFoundException | NullPointerException e) {
mLogger.e(mFragment.getClass().getSimpleName() +
" - The fragment should implement the presenter type argument.");
mToastFactory.show(R.string.unknown_error);
mFragment.getActivity().finish();
}
if (mPresenter != null) {
mPresenter.attachView(mWolmoFragment);
}

mWolmoFragment.setUi(view);
mWolmoFragment.init();
mWolmoFragment.populate();
mWolmoFragment.setListeners();
}

/**
* Returns the presenter {@link T} for this fragment
* Returns the presenter {@link T} for the fragment
*
* @return presenter
*/
Expand All @@ -154,6 +143,18 @@ T getPresenter() {
return mPresenter;
}

/**
* Tries to return a non null instance of the presenter {@link T} for the fragment.
* If the presenter is null this will throw a NullPointerException.
*
* @return presenter
*/
@NonNull
T requirePresenter() {
if (mPresenter == null) throw new NullPointerException("The Presenter is null");
return mPresenter;
}

private void onVisibilityChanged() {
if (!mCreated) return;
if (mFragment.isResumed() && mMenuVisible && !mVisible) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
*/
package ar.com.wolox.wolmo.core.presenter;

import android.support.annotation.NonNull;

import javax.inject.Inject;

/**
Expand Down Expand Up @@ -61,7 +63,7 @@ public final boolean isViewAttached() {
*
* @param viewInstance Instance of the view to attach
*/
public final void attachView(V viewInstance) {
public final void attachView(@NonNull V viewInstance) {
mViewInstance = viewInstance;
onViewAttached();
}
Expand Down Expand Up @@ -93,7 +95,7 @@ public void onViewDetached() {}
*
* @param method Expression to run if the view is created.
*/
protected void runIfViewAttached(Consumer<V> method) {
protected void runIfViewAttached(@NonNull Consumer<V> method) {
if (isViewAttached()) {
method.accept(mViewInstance);
}
Expand All @@ -106,7 +108,7 @@ protected void runIfViewAttached(Consumer<V> method) {
*
* @param method Expression to run if the view is created.
*/
protected void runIfViewAttached(Runnable method) {
protected void runIfViewAttached(@NonNull Runnable method) {
if (isViewAttached()) {
method.run();
}
Expand Down
Loading

0 comments on commit b00e8ac

Please sign in to comment.