Navigation Menu

Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
xiaojinzi123 committed May 10, 2019
2 parents eb2c6bb + 030d47f commit 41337ad
Show file tree
Hide file tree
Showing 32 changed files with 3,113 additions and 2,370 deletions.
6 changes: 4 additions & 2 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

@@ -1,10 +1,11 @@
package com.xiaojinzi.component.impl;
package com.xiaojinzi.component;

import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;

import com.xiaojinzi.component.bean.ActivityResult;
import com.xiaojinzi.component.impl.RouterRequest;
import com.xiaojinzi.component.support.Consumer;

import java.util.HashMap;
Expand Down Expand Up @@ -65,17 +66,13 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {

}

public boolean isContainsSingleEmitter(@NonNull RouterRequest request) {
return singleEmitterMap.containsKey(request);
}

public void setSingleEmitter(@NonNull RouterRequest request,
@NonNull Consumer<ActivityResult> consumer) {
public void setActivityResultConsumer(@NonNull RouterRequest request,
@NonNull Consumer<ActivityResult> consumer) {
// 检测是否重复的在这个方法调用之前被检查掉了
singleEmitterMap.put(request, consumer);
}

public void cancal(@NonNull RouterRequest request) {
public void removeActivityResultConsumer(@NonNull RouterRequest request) {
singleEmitterMap.remove(request);
}

Expand Down
@@ -0,0 +1,46 @@
package com.xiaojinzi.component.bean;

import android.content.Intent;
import android.support.annotation.Nullable;

import com.xiaojinzi.component.error.ignore.ActivityResultException;

/**
* activity result 的返回对象,{@link android.app.Activity#onActivityResult(int, int, Intent)}
* time : 2018/12/04
*
* @author : xiaojinzi 30212
*/
public class ActivityResult {

public final int requestCode;

public final int resultCode;

@Nullable
public final Intent data;

public ActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
this.requestCode = requestCode;
this.resultCode = resultCode;
this.data = data;
}

public Intent intentCheckAndGet() throws ActivityResultException {
if (data == null) {
throw new ActivityResultException("the intent result data is null");
}
return data;
}

public Intent intentWithResultCodeCheckAndGet(int expectedResultCode) {
if (data == null) {
throw new ActivityResultException("the intent result data is null");
}
if (expectedResultCode != resultCode) {
throw new ActivityResultException("the resultCode is not matching " + expectedResultCode);
}
return data;
}

}
@@ -1,4 +1,4 @@
package com.xiaojinzi.component.error;
package com.xiaojinzi.component.error.ignore;

/**
* 表示 Activity result 异常
Expand Down
@@ -0,0 +1,84 @@
package com.xiaojinzi.component.impl;

import android.support.annotation.CallSuper;
import android.support.annotation.MainThread;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;

import com.xiaojinzi.component.support.Function;
import com.xiaojinzi.component.support.Utils;

/**
* 当整个流程完成的时候,回调这个接口
* <p>
* 详细的请查看 {@link Callback}
*
* @author xiaojinzi 30212
*/
public interface BiCallback<T> extends OnRouterCancel, OnRouterError {

/**
* 当路由成功的时候,回调
*
* @param result 路由成功的对象
* @param t 返回的对象
*/
@MainThread
void onSuccess(@NonNull RouterResult result, @NonNull T t);

/**
* 做一个转化
*
* @param <T>
* @param <R>
*/
abstract class Map<T, R> implements BiCallback<T>,Function<T, R> {

@NonNull
private BiCallback targetBiCallback;

public Map(@NonNull BiCallback targetBiCallback) {
this.targetBiCallback = targetBiCallback;
}

@Override
public void onSuccess(@NonNull RouterResult result, @NonNull T t) {
try {
targetBiCallback.onSuccess(result, Utils.checkNullPointer(apply(t), "apply(t)"));
} catch (Exception e) {
targetBiCallback.onError(new RouterErrorResult(e));
}
}

@Override
public void onCancel(@Nullable RouterRequest originalRequest) {
targetBiCallback.onCancel(originalRequest);
}

@Override
public void onError(@NonNull RouterErrorResult errorResult) {
targetBiCallback.onError(errorResult);
}

}

/**
* 空白实现类
*/
class BiCallbackAdapter<T> implements BiCallback<T> {

@Override
public void onSuccess(@NonNull RouterResult result, @NonNull T t) {
}

@Override
public void onError(@NonNull RouterErrorResult errorResult) {
}

@Override
public void onCancel(@NonNull RouterRequest originalRequest) {
}

}

}
@@ -0,0 +1,49 @@
package com.xiaojinzi.component.impl;

import android.support.annotation.NonNull;
import android.support.annotation.Nullable;

/**
* 为了实现 {@link BiCallback} 用户的这个 Callback 的各个方法最多只能执行一次
*
* @param <T>
*/
public class BiCallbackWrap<T> implements BiCallback<T> {

/**
* 标记是否结束
*/
private boolean isEnd;

@NonNull
private BiCallback<T> targetBiCallback;

public BiCallbackWrap(@NonNull BiCallback<T> targetBiCallback) {
this.targetBiCallback = targetBiCallback;
}

@Override
public synchronized void onSuccess(@NonNull RouterResult result, @NonNull T t) {
if (!isEnd) {
targetBiCallback.onSuccess(result, t);
}
isEnd = true;
}

@Override
public synchronized void onCancel(@Nullable RouterRequest originalRequest) {
if (!isEnd) {
targetBiCallback.onCancel(originalRequest);
}
isEnd = true;
}

@Override
public synchronized void onError(@NonNull RouterErrorResult errorResult) {
if (!isEnd) {
targetBiCallback.onError(errorResult);
}
isEnd = true;
}

}
Expand Up @@ -4,8 +4,6 @@
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;

import com.xiaojinzi.component.support.NavigationDisposable;

/**
* 当路由完成的时候,回调这个接口,这时候的完成不一定是成功的,可能是失败的,成功和失败都表示完成
* 所有的调用顺序整理:
Expand All @@ -15,7 +13,7 @@
*
* @author xiaojinzi 30212
*/
public interface Callback {
public interface Callback extends OnRouterError, OnRouterCancel {

/**
* 当路由成功的时候,回调
Expand All @@ -25,14 +23,6 @@ public interface Callback {
@MainThread
void onSuccess(@NonNull RouterResult result);

/**
* 当路由错误的时候回调
*
* @param errorResult 路由失败的对象
*/
@MainThread
void onError(@NonNull RouterErrorResult errorResult);

/**
* 两个参数肯定有一个不会为空
*
Expand All @@ -42,14 +32,4 @@ public interface Callback {
@MainThread
void onEvent(@Nullable RouterResult successResult, @Nullable RouterErrorResult errorResult);

/**
* 当取消{@link NavigationDisposable#cancel()}的时候调用这个方法
*
* @param originalRequest 最原始的请求,当构建 request 的时候发生错误,然后调用 {@link NavigationDisposable#cancel()}
* 的时候不会调用这个方法,因为这时候是不可以取消的,因为压根就没开始,当 request 构建出来了
* 这时候就可以取消了,所以在真正取消的时候,一定会有这个参数的
*/
@MainThread
void onCancel(@NonNull RouterRequest originalRequest);

}

0 comments on commit 41337ad

Please sign in to comment.