Commit 6602a2f8 by sikang

first commit

parents
/build
######################
# Builds
######################
*.apk
*.ap_
/*/build/
*.class
bin/
gen/
out/
######################
# Gradle & Gradle Wrapper
######################
.gradle/
build/
!gradle/wrapper/gradle-wrapper.jar
# Local configuration file (sdk path, etc)
local.properties
######################
# Proguard folder generated by Eclipse
######################
proguard/
######################
# Logs
######################
*.log
*.log.gz
######################
# Android Studio
######################
.navigation/
captures/
######################
# Crash
######################
com_crashlytics_export_strings.xml
######################
# Signing
######################
.signing/
######################
# Intellij
######################
.idea/
*.iml
*.iws
*.ipr
*.ids
*.orig
######################
# OS Specified Files
######################
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
\ No newline at end of file
apply plugin: 'com.android.library'
android {
compileSdkVersion 26
buildToolsVersion '27.0.3'
defaultConfig {
minSdkVersion 16
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
ndk {
abiFilters 'armeabi' //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'
}
}
buildTypes {
debug {
// 显示Log
debuggable true
versionNameSuffix "-debug"
minifyEnabled false
zipAlignEnabled false
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
release {
// 不显示Log
debuggable false
//混淆
minifyEnabled true
//Zipalign优化
zipAlignEnabled true
// 移除无用的resource文件
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
testImplementation 'junit:junit:4.12'
//noinspection GradleCompatible
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation "com.android.support:appcompat-v7:26.1.0"
implementation "com.android.support:support-v4:26.1.0"
implementation "com.android.support:recyclerview-v7:26.1.0"
//QMUI
implementation 'com.qmuiteam:qmui:1.1.3'
//Eventbus
implementation 'org.greenrobot:eventbus:3.0.0'
//SmartRefresh
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-14'
// compile 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-alpha-14'//没有使用特殊Header,可以不加这行
//Gson
implementation 'com.google.code.gson:gson:2.8.2'
//rxjava
implementation "io.reactivex.rxjava2:rxjava:2.2.1"
implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
//rxpermissions
implementation 'com.github.tbruyelle:rxpermissions:0.10.2'
//rxLifrCycle
implementation 'com.trello.rxlifecycle2:rxlifecycle-components:2.1.0'
// glide
implementation "com.github.bumptech.glide:glide:3.7.0"
//retrofit
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'
//camerakit
implementation 'com.wonderkiln:camerakit:0.13.1'
//facebook accountKit
implementation 'com.facebook.android:account-kit-sdk:4.37.0'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}
package tech.starwin;
import android.content.Context;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
assertEquals("tech.starwin.test", appContext.getPackageName());
}
}
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="tech.starwin" />
package tech.starwin.base;
import android.os.Bundle;
import android.support.annotation.CheckResult;
import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.qmuiteam.qmui.widget.QMUITopBar;
import com.trello.rxlifecycle2.LifecycleTransformer;
import com.trello.rxlifecycle2.RxLifecycle;
import com.trello.rxlifecycle2.android.ActivityEvent;
import com.trello.rxlifecycle2.android.RxLifecycleAndroid;
import io.reactivex.Observable;
import io.reactivex.subjects.BehaviorSubject;
import tech.starwin.R;
import tech.starwin.mvp.IView;
import tech.starwin.utils.PresenterHoler;
import tech.starwin.utils.activity_utils.FragmentLauncher;
import tech.starwin.utils.ui_utils.ProgressHolder;
/**
* Created by SiKang on 2018/9/14.
*/
public abstract class BaseActivity extends AppCompatActivity implements IView {
public String TAG;
/**
* 根布局
*/
public ViewGroup rootLayout;
/**
* TopBar
*/
private QMUITopBar mTopBar;
/**
* 创建和缓存Presenter实例
*/
private PresenterHoler presenterHelper;
/**
* loading、error 提示
*/
protected ProgressHolder progressHolder;
private final BehaviorSubject<ActivityEvent> lifecycleSubject = BehaviorSubject.create();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TAG = getClass().getSimpleName();
lifecycleSubject.onNext(ActivityEvent.CREATE);
progressHolder = new ProgressHolder(this);
presenterHelper = new PresenterHoler(this);
//初始化根布局
initRootLayout();
}
@Override
protected void onStart() {
super.onStart();
lifecycleSubject.onNext(ActivityEvent.START);
}
@Override
protected void onResume() {
super.onResume();
lifecycleSubject.onNext(ActivityEvent.RESUME);
}
@Override
protected void onPause() {
super.onPause();
lifecycleSubject.onNext(ActivityEvent.PAUSE);
progressHolder.dissmissLoading();
}
@Override
protected void onStop() {
super.onStop();
lifecycleSubject.onNext(ActivityEvent.STOP);
}
@Override
protected void onDestroy() {
super.onDestroy();
lifecycleSubject.onNext(ActivityEvent.DESTROY);
presenterHelper.onDestory();
}
@Override
@NonNull
@CheckResult
public final Observable<ActivityEvent> lifecycle() {
return lifecycleSubject.hide();
}
@Override
@NonNull
@CheckResult
public final <T> LifecycleTransformer<T> bindUntilEvent(@NonNull ActivityEvent event) {
return RxLifecycle.bindUntilEvent(lifecycleSubject, event);
}
@Override
@NonNull
@CheckResult
public final <T> LifecycleTransformer<T> bindToLifecycle() {
return RxLifecycleAndroid.bindActivity(lifecycleSubject);
}
//----------------------------------- IView ----------------------------------------
@Override
public void onHttpStart(String action, boolean isShowLoading) {
if (isShowLoading) {
progressHolder.showLoading();
}
}
@Override
public void onHttpFinish(String action) {
progressHolder.dissmissLoading();
}
//----------------------------------- Layout ----------------------------------------
private void initRootLayout() {
setContentView(R.layout.base_activity_root);
rootLayout = findViewById(R.id.activity_base_layout);
//判断是否要显示TopBar
if (useTopBar()) {
mTopBar = LayoutInflater.from(this).inflate(R.layout.base_topbar, rootLayout, true).findViewById(R.id.layout_topbar);
if (mTopBar != null)
initTopBar(mTopBar);
}
//填充Activity -> bindLayout();
if (bindLayout() != 0) {
LayoutInflater.from(this).inflate(bindLayout(), rootLayout, true);
initView();
} else {
throw new RuntimeException("找不到布局文件 bindLayout() -> " + bindLayout());
}
}
/**
* 绑定布局文件
*/
@LayoutRes
public abstract int bindLayout();
/**
* Activity初始化
*/
public abstract void initView();
/**
* 是否使用TopBar,默认使用
*/
public boolean useTopBar() {
return true;
}
/**
* 初始化TopBar,需要自定义TopBar样式时重写
* 默认TopBar只包含一个BackButton 和 Titile
*/
protected void initTopBar(QMUITopBar topBar) {
mTopBar.addLeftBackImageButton().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
public FragmentLauncher getFragmentLauncher() {
return null;
}
//----------------------------------- Presenter ----------------------------------------
/**
* 获取Presenter
*/
public <T extends BasePresenter> T getPresenter(Class<T> clz) {
return presenterHelper.getPresenter(clz);
}
//----------------------------------- Fragment ----------------------------------------
/**
* 打开一个Fragment
*/
public void startFragment(Fragment fragment, boolean isAddToBackStack) {
if (getFragmentLauncher() != null)
getFragmentLauncher().startFragment(fragment, isAddToBackStack);
}
/**
* 打开一个Fragment,且替换BackStack栈顶Fragment
*/
public void startFragmentAndDestroyCurrent(final Fragment fragment) {
if (getFragmentLauncher() != null)
getFragmentLauncher().startFragmentAndDestroyCurrent(fragment);
}
}
package tech.starwin.base;
import android.os.Bundle;
import android.support.annotation.CheckResult;
import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.qmuiteam.qmui.widget.QMUITopBar;
import com.trello.rxlifecycle2.LifecycleTransformer;
import com.trello.rxlifecycle2.RxLifecycle;
import com.trello.rxlifecycle2.android.ActivityEvent;
import com.trello.rxlifecycle2.android.RxLifecycleAndroid;
import io.reactivex.Observable;
import io.reactivex.subjects.BehaviorSubject;
import tech.starwin.R;
import tech.starwin.mvp.IView;
import tech.starwin.utils.PresenterHoler;
import tech.starwin.utils.ui_utils.ProgressHolder;
import tech.starwin.utils.ui_utils.UIHelper;
/**
* Created by SiKang on 2018/9/16.
*/
public abstract class BaseFragment extends Fragment implements IView {
protected String TAG;
protected ViewGroup mContentView;
/**
* TopBar
*/
private QMUITopBar mTopBar;
/**
* 创建和缓存Presenter实例
*/
protected PresenterHoler presenterHelper;
/**
* loading、error 提示
*/
protected ProgressHolder progressHolder;
private final BehaviorSubject<ActivityEvent> lifecycleSubject = BehaviorSubject.create();
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
TAG = getClass().getName();
lifecycleSubject.onNext(ActivityEvent.CREATE);
presenterHelper = new PresenterHoler(this);
progressHolder = new ProgressHolder(getActivity());
mContentView = (ViewGroup) LayoutInflater.from(getActivity()).inflate(R.layout.base_activity_root, null);
if (useTopBar()) {
mTopBar = LayoutInflater.from(getActivity()).inflate(R.layout.base_topbar, mContentView, true).findViewById(R.id.layout_topbar);
if (mTopBar != null)
initTopBar(mTopBar);
}
mContentView = (ViewGroup) LayoutInflater.from(getActivity()).inflate(bindLayout(), mContentView);
initView();
return mContentView;
}
@LayoutRes
public abstract int bindLayout();
public abstract void initView();
/**
* 是否使用TopBar,默认不使用
*/
public boolean useTopBar() {
return false;
}
/**
* 初始化TopBar,需要自定义TopBar样式时重写
* 默认TopBar只包含一个BackButton 和 Titile
*/
protected void initTopBar(QMUITopBar topBar) {
mTopBar.addLeftBackImageButton().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
UIHelper.doBack();
}
});
}
//------------------------------------------- IView -------------------------------------------
@Override
public void onHttpStart(String action, boolean isShowLoading) {
if (isShowLoading) {
progressHolder.showLoading();
}
}
@Override
public void onHttpFinish(String action) {
progressHolder.dissmissLoading();
}
//------------------------------------------- Lifecycle -------------------------------------------
@Override
public void onStart() {
super.onStart();
lifecycleSubject.onNext(ActivityEvent.START);
}
@Override
public void onResume() {
super.onResume();
lifecycleSubject.onNext(ActivityEvent.RESUME);
}
@Override
public void onPause() {
super.onPause();
lifecycleSubject.onNext(ActivityEvent.PAUSE);
progressHolder.dissmissLoading();
}
@Override
public void onStop() {
super.onStop();
lifecycleSubject.onNext(ActivityEvent.STOP);
}
@Override
public void onDestroyView() {
super.onDestroyView();
lifecycleSubject.onNext(ActivityEvent.DESTROY);
presenterHelper.onDestory();
}
@Override
@NonNull
@CheckResult
public final Observable<ActivityEvent> lifecycle() {
return lifecycleSubject.hide();
}
@Override
@NonNull
@CheckResult
public final <T> LifecycleTransformer<T> bindUntilEvent(@NonNull ActivityEvent event) {
return RxLifecycle.bindUntilEvent(lifecycleSubject, event);
}
@Override
@NonNull
@CheckResult
public final <T> LifecycleTransformer<T> bindToLifecycle() {
return RxLifecycleAndroid.bindActivity(lifecycleSubject);
}
//------------------------------------------- Presenter -------------------------------------------
public <T extends BasePresenter> T getPresenter(Class<T> clz) {
return presenterHelper.getPresenter(clz);
}
public void startFragment(Fragment fragment) {
if (getActivity() instanceof BaseActivity)
((BaseActivity) getActivity()).startFragment(fragment, true);
}
public void startFragmentAndDestroyCurrent(Fragment fragment) {
if (getActivity() instanceof BaseActivity)
((BaseActivity) getActivity()).startFragmentAndDestroyCurrent(fragment);
}
}
package tech.starwin.base;
import android.annotation.SuppressLint;
import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import tech.starwin.common.impl.HttpObserver;
import tech.starwin.mvp.IView;
import tech.starwin.network.ServiceGenerator;
/**
* Created by SiKang on 2018/9/14.
*/
public class BasePresenter<T> {
protected String TAG;
protected IView view;
protected T apiService;
/**
* 使用默认的HttpClient
*/
public BasePresenter(Class<T> service) {
TAG = getClass().getSimpleName();
apiService = ServiceGenerator.getService(service);
}
@SuppressLint("CheckResult")
public void bindIView(IView view) {
this.view = view;
}
/**
* 处理请求
*/
protected <T> void handleRequest(Observable<T> observable, Observer<T> observer) {
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.compose(view.<T>bindToLifecycle())
.subscribe(observer);
}
protected <T> void handleRequest(final String action, Observable<T> observable) {
handleRequest(action, observable, true);
}
protected <T> void handleRequest(final String action, Observable<T> observable, final boolean isShowLoading) {
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.compose(view.<T>bindToLifecycle())
.subscribe(new HttpObserver<T>() {
@Override
public void onStart() {
view.onHttpStart(action, isShowLoading);
}
@Override
public void onSuccess(T data) {
view.onHttpSuccess(action, data);
}
@Override
public void onError(int code, String msg) {
view.onHttpError(action, msg);
}
@Override
public void onFinish() {
view.onHttpFinish(action);
}
});
}
@SuppressLint("CheckResult")
protected <T> void handleRequest(Call<T> call, final Observer<T> observer) {
observer.onSubscribe(null);
call.enqueue(new Callback<T>() {
@Override
public void onResponse(Call<T> call, final Response<T> response) {
bindLifecycle(new Consumer<Boolean>() {
@Override
public void accept(Boolean aBoolean) throws Exception {
}
});
}
@Override
public void onFailure(Call<T> call, final Throwable t) {
bindLifecycle(new Consumer() {
@Override
public void accept(Object o) throws Exception {
observer.onError(t);
}
});
}
});
}
@SuppressLint("CheckResult")
private void bindLifecycle(Consumer consumer) {
Observable.just(true)
.observeOn(AndroidSchedulers.mainThread())
.compose(view.<Boolean>bindToLifecycle())
.subscribe(consumer);
}
public void onDestory() {
view = null;
apiService = null;
}
}
package tech.starwin.base;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.List;
/**
* Created by SiKang on 2018/9/16.
*/
public abstract class BaseRecyclerAdapter<T> extends RecyclerView.Adapter<RecyclerViewHolder> {
private final List<T> mData;
private final Context context;
private OnItemClickListener<T> mClickListener;
private OnItemLongClickListener<T> mLongClickListener;
public BaseRecyclerAdapter(Context ctx, List<T> list) {
mData = (list != null) ? list : new ArrayList<T>();
context = ctx;
}
@Override
public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = null;
if (setItemLayout() instanceof Integer) {
view = LayoutInflater.from(context).inflate((Integer) setItemLayout(), parent, false);
} else if (setItemLayout() instanceof View) {
view = (View) setItemLayout();
}
if (view == null) {
throw new RuntimeException("setItemLayout() invalid");
}
final RecyclerViewHolder holder = new RecyclerViewHolder(view);
if (mClickListener != null) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mClickListener.onItemClick(holder.itemView, holder.getLayoutPosition(), mData.get(holder.getLayoutPosition()));
}
});
}
if (mLongClickListener != null) {
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
mLongClickListener.onItemLongClick(holder.itemView, holder.getLayoutPosition(), mData.get(holder.getLayoutPosition()));
return true;
}
});
}
return holder;
}
@Override
public void onBindViewHolder(RecyclerViewHolder holder, int position) {
bindData(holder, position, mData.get(position));
}
@Override
public int getItemCount() {
return mData.size();
}
/**
* item布局
*/
public abstract Object setItemLayout();
/**
* item更新
*/
public abstract void bindData(RecyclerViewHolder holder, int position, T item);
public T getItem(int pos) {
return mData.get(pos);
}
public void setOnItemClickListener(OnItemClickListener listener) {
mClickListener = listener;
}
public void setOnItemLongClickListener(OnItemLongClickListener listener) {
mLongClickListener = listener;
}
public interface OnItemClickListener<T> {
void onItemClick(View itemView, int pos, T t);
}
public interface OnItemLongClickListener<T> {
void onItemLongClick(View itemView, int pos, T t);
}
public Context getContext() {
return context;
}
}
package tech.starwin.base;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import java.util.List;
/**
* Created by SiKang on 2018/9/20.
*/
public class FragmentPageAdapter extends FragmentPagerAdapter {
List<Fragment> fragmentList;
public FragmentPageAdapter(FragmentManager fm, List<Fragment> fragmentList) {
super(fm);
this.fragmentList = fragmentList;
}
@Override
public Fragment getItem(int position) {
return fragmentList.get(position);
}
@Override
public int getCount() {
return fragmentList.size();
}
}
package tech.starwin.base;
import android.app.Application;
import android.content.Context;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.scwang.smartrefresh.layout.api.DefaultRefreshFooterCreator;
import com.scwang.smartrefresh.layout.api.DefaultRefreshHeaderCreator;
import com.scwang.smartrefresh.layout.api.RefreshFooter;
import com.scwang.smartrefresh.layout.api.RefreshHeader;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.footer.ClassicsFooter;
import com.scwang.smartrefresh.layout.header.ClassicsHeader;
import tech.starwin.R;
/**
* Created by SiKang on 2018/9/30.
*/
public class LibConfig {
private static Context CONTEXT;
public static boolean DEBUG;
public static String APPLICATION_ID;
public static String BUILD_TYPE;
public static String FLAVOR;
public static int VERSION_CODE;
public static String VERSION_NAME;
public static String FLAVOR_default;
public static String FLAVOR_server;
public static String AGREEMENT_URL;
public static String APP_URL;
public static String BUGLY_APP_ID;
public static String CONTRACT_URL;
public static String HOTLINE;
public static String LOAN_AGREEMENT;
public static String LOGIN_ACTIVITY_ACTION;
public static String ROOT_DIR;
public static String ADMIN_HOST;
public static String API_BASE_URL;
public static String GATEWAY_HOST_G0;
public static String GATEWAY_HOST_G1;
public static String HARVESTER_IP;
public static int HARVESTER_PORT;
public static Context getContext() {
if (CONTEXT == null)
throw new RuntimeException("context is null ! you must execute LibConfig.bindApplication(application) in your Appliaction");
return CONTEXT;
}
public static void bindApplication(Application application) {
CONTEXT = application;
}
static {
//设置全局的Header构建器
SmartRefreshLayout.setDefaultRefreshHeaderCreator(new DefaultRefreshHeaderCreator() {
@Override
public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) {
layout.setPrimaryColorsId(R.color.color_main, android.R.color.white);//全局设置主题颜色
return new ClassicsHeader(context);//.setTimeFormat(new DynamicTimeFormat("更新于 %s"));//指定为经典Header,默认是 贝塞尔雷达Header
}
});
//设置全局的Footer构建器
SmartRefreshLayout.setDefaultRefreshFooterCreator(new DefaultRefreshFooterCreator() {
@Override
public RefreshFooter createRefreshFooter(Context context, RefreshLayout layout) {
//指定为经典Footer,默认是 BallPulseFooter
return new ClassicsFooter(context).setDrawableSize(20);
}
});
}
}
package tech.starwin.base;
import android.support.v7.widget.RecyclerView;
import android.util.SparseArray;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
/**
* Created by SiKang on 2018/9/16.
*/
public class RecyclerViewHolder extends RecyclerView.ViewHolder {
private SparseArray<View> mViews;
public View itemView;
public RecyclerViewHolder(View itemView) {
super(itemView);
this.itemView = itemView;
mViews = new SparseArray<>();
}
@SuppressWarnings("unchecked")
private <T extends View> T findViewById(int viewId) {
View view = mViews.get(viewId);
if (view == null) {
view = itemView.findViewById(viewId);
mViews.put(viewId, view);
}
return (T) view;
}
public View getView(int viewId) {
return findViewById(viewId);
}
public TextView getTextView(int viewId) {
return (TextView) getView(viewId);
}
public Button getButton(int viewId) {
return (Button) getView(viewId);
}
public ImageView getImageView(int viewId) {
return (ImageView) getView(viewId);
}
public ImageButton getImageButton(int viewId) {
return (ImageButton) getView(viewId);
}
public EditText getEditText(int viewId) {
return (EditText) getView(viewId);
}
}
package tech.starwin.common.impl;
import java.io.EOFException;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import retrofit2.HttpException;
import tech.starwin.R;
import tech.starwin.base.LibConfig;
import tech.starwin.network.Error;
import tech.starwin.utils.LoginManager;
/**
* Created by SiKang on 2018/9/14.
*/
public abstract class HttpObserver<T> implements Observer<T> {
private Disposable disposable;
public abstract void onStart();
public abstract void onSuccess(T data);
public abstract void onError(int code, String msg);
public abstract void onFinish();
@Override
public void onSubscribe(Disposable d) {
this.disposable = d;
onStart();
}
@Override
public void onNext(T tResult) {
onSuccess(tResult);
}
@Override
public void onError(Throwable throwable) {
onFinish();
try {
if (throwable != null) {
String msg = throwable.getMessage();
if (isHttpError(msg)) {
onError(Error.HTTP_ERROR, LibConfig.getContext().getString(R.string.text_net_error));
} else if (throwable instanceof HttpException) {
if (!isCanHandle((HttpException) throwable)) {
onError(Error.SERVER_ERROR, msg);
}
} else if (msg.contains("java.lang.IllegalStateException")) {
onError(Error.APP_ERROR, LibConfig.getContext().getString(R.string.text_app_error));
}
}
} catch (Throwable e) {
onError(Error.APP_ERROR, LibConfig.getContext().getString(R.string.text_app_error));
}
if (disposable != null)
disposable.dispose();
}
@Override
public void onComplete() {
onFinish();
if (disposable != null)
disposable.dispose();
}
/**
* 可预处理的错误
*/
private boolean isCanHandle(HttpException exception) {
switch (exception.code()) {
case 401://Token失效
LoginManager.get().tokenInvalid();
return true;
case 403:
return true;
case 409:
return true;
case 412:
return true;
}
return false;
}
/**
* 链路错误
*/
private boolean isHttpError(String msg) {
String[] errorArray = new String[]{
"timeout",
"java.net.ConnectException",
"java.net.SocketTimeoutException",
"failed",
"Failed to connect to",
"stream was reset",
"Unable to resolve host",
"SSL handshake time out",
"time out"
};
for (String error : errorArray) {
if (msg.contains(error))
return true;
}
return false;
}
}
package tech.starwin.common.impl;
import android.view.View;
/**
* Created by SiKang on 2018/9/18.
*/
public abstract class OnNoShakeClickListener implements View.OnClickListener {
public abstract void onNoShakeClick(View view);
public int lockTime = 1500;
public OnNoShakeClickListener(int milliSencons) {
this.lockTime = milliSencons;
}
public OnNoShakeClickListener() {
}
@Override
public void onClick(final View view) {
view.setClickable(false);
view.postDelayed(new Runnable() {
@Override
public void run() {
view.setClickable(true);
}
}, lockTime);
onNoShakeClick(view);
}
}
package tech.starwin.common.impl;
import com.qmuiteam.qmui.widget.QMUITabSegment;
/**
* Created by SiKang on 2018/9/20.
*/
public abstract class SimpleTabSelectedListener implements QMUITabSegment.OnTabSelectedListener {
@Override
public void onTabUnselected(int index) {
}
@Override
public void onTabReselected(int index) {
}
@Override
public void onDoubleTap(int index) {
}
}
package tech.starwin.common.receiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
/**
* Created by SiKang on 2018/9/28.
*/
public class DownloadReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
}
}
package tech.starwin.mvp;
import com.trello.rxlifecycle2.LifecycleProvider;
import com.trello.rxlifecycle2.android.ActivityEvent;
/**
* Created by SiKang on 2018/9/14.
*/
public interface IView extends LifecycleProvider<ActivityEvent> {
void onHttpStart(String action, boolean isShowLoading);
void onHttpSuccess(String action, Object result);
void onHttpError(String action, String msg);
void onHttpFinish(String action);
}
package tech.starwin.mvp.api;
import io.reactivex.Observable;
import retrofit2.http.GET;
import retrofit2.http.Header;
import tech.starwin.mvp.beans.LatestLoanAppBean;
import tech.starwin.mvp.beans.LoanRange;
import tech.starwin.mvp.beans.ProgressBean;
import tech.starwin.mvp.beans.ResponseErrorBody;
/**
* Created by SiKang on 2018/9/20.
*/
public interface LoanApi {
/**
* 获取贷款额度、期限 范围
*/
@GET("loanapp/range")
Observable<LoanRange> getLoanRange();
/**
* 验证贷款资格
*/
@GET("loanapp/qualification")
Observable<ResponseErrorBody> isQualification(@Header("X-AUTH-TOKEN") String token);
/**
* 贷款进度
*/
@GET("record/progress")
Observable<ProgressBean> getLoanProgress(@Header("X-AUTH-TOKEN") String token);
/**
* 获取最新的贷款申请信息
*/
@GET("loanapp/latest/v2")
Observable<LatestLoanAppBean> getLatestLoanApp(@Header("X-AUTH-TOKEN") String token);
}
package tech.starwin.mvp.api;
import java.util.List;
import io.reactivex.Observable;
import okhttp3.MultipartBody;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.Multipart;
import retrofit2.http.PUT;
import retrofit2.http.Part;
import retrofit2.http.Query;
import tech.starwin.mvp.beans.BasicAck;
import tech.starwin.mvp.beans.OcrResultBean;
import tech.starwin.mvp.beans.RecordFilesResponse;
public interface UploadApi {
@Multipart
@PUT("record/files")
Call<ResponseBody> uploadPhoto(
@Part MultipartBody.Part photoFile,
@Query("fileType") String fileType,
@Header("X-AUTH-TOKEN") String token
);
@Multipart
@PUT("loanapp/contract/video")
Call<ResponseBody> uploadVideo(@Part MultipartBody.Part videoFile,
@Query("loanAppId") String loanAppId,
@Query("fileType") String fileType,
@Header("X-AUTH-TOKEN") String token);
@GET("record/files")
Observable<RecordFilesResponse> recordFiles(@Header("X-AUTH-TOKEN") String token);
@Multipart
@PUT("/loanapp/verify/face")
Observable<BasicAck> faceVerify(@Query("loanType") String loanType,
@Query("amount") double amount,
@Query("period") int period,
@Query("periodUnit") String periodUnit,
@Part MultipartBody.Part imageBest,
@Part MultipartBody.Part imageEnv,
@Part MultipartBody.Part delta,
@Query("imei") String imei,
@Header("X-AUTH-TOKEN") String token);
/**
* 身份证ocr识别
* */
@Multipart
@PUT("/record/ocr")
Call<OcrResultBean> identityOcr(@Part List<MultipartBody.Part> parts, @Header("X-AUTH-TOKEN") String token);
}
\ No newline at end of file
package tech.starwin.mvp.beans;
import java.io.Serializable;
public class AccountInfo implements Serializable {
private String account;
private String token;
private String refreshToken;
private String salt;
private String loginType;
private UserInfo userInfo;
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public String getRefreshToken() {
return refreshToken;
}
public void setRefreshToken(String refreshToken) {
this.refreshToken = refreshToken;
}
public String getSalt() {
return salt;
}
public void setSalt(String salt) {
this.salt = salt;
}
public String getLoginType() {
return loginType;
}
public void setLoginType(String loginType) {
this.loginType = loginType;
}
public UserInfo getUserInfo() {
return userInfo;
}
public void setUserInfo(UserInfo userInfo) {
this.userInfo = userInfo;
}
}
\ No newline at end of file
package tech.starwin.mvp.beans;
import java.io.Serializable;
/**
* Created by SiKang on 2018/9/30.
*/
public class ActivityCenterBean implements Serializable {
private String detailUrl;
private String iconPath;
private String content;
private String time;
public String getDetailUrl() {
return detailUrl;
}
public void setDetailUrl(String detailUrl) {
this.detailUrl = detailUrl;
}
public String getIconPath() {
return iconPath;
}
public void setIconPath(String iconPath) {
this.iconPath = iconPath;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
}
package tech.starwin.mvp.beans;
import java.io.Serializable;
/**
* Created by SiKang on 2018/9/30.
*/
public class ActivityInfoBean implements Serializable{
private String url;
private String detailUrl;
}
package tech.starwin.mvp.beans;
import java.io.Serializable;
public class ApplyLoanInfo implements Serializable {
private String loanAppId;
private String loanType;
private double amount;
private int peroid;
private String periodUnit;
private String bankCode;
private String cardNo;
private String applyFor;
private String applyChannel;
private String applyPlatform;
public String getLoanAppId() {
return loanAppId;
}
public void setLoanAppId(String loanAppId) {
this.loanAppId = loanAppId;
}
public String getLoanType() {
return loanType;
}
public void setLoanType(String loanType) {
this.loanType = loanType;
}
public double getAmount() {
return amount;
}
public void setAmount(double amount) {
this.amount = amount;
}
public int getPeroid() {
return peroid;
}
public void setPeroid(int peroid) {
this.peroid = peroid;
}
public String getPeriodUnit() {
return periodUnit;
}
public void setPeriodUnit(String periodUnit) {
this.periodUnit = periodUnit;
}
public String getBankCode() {
return bankCode;
}
public void setBankCode(String bankCode) {
this.bankCode = bankCode;
}
public String getCardNo() {
return cardNo;
}
public void setCardNo(String cardNo) {
this.cardNo = cardNo;
}
public String getApplyFor() {
return applyFor;
}
public void setApplyFor(String applyFor) {
this.applyFor = applyFor;
}
public String getApplyChannel() {
return applyChannel;
}
public void setApplyChannel(String applyChannel) {
this.applyChannel = applyChannel;
}
public String getApplyPlatform() {
return applyPlatform;
}
public void setApplyPlatform(String applyPlatform) {
this.applyPlatform = applyPlatform;
}
}
\ No newline at end of file
package tech.starwin.mvp.beans;
import java.io.Serializable;
/**
* Created by SiKang on 2018/9/30.
*/
public class BankBean implements Serializable {
private int id;
private String bankName;
private String bankCode;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getBankName() {
return bankName;
}
public void setBankName(String bankName) {
this.bankName = bankName;
}
public String getBankCode() {
return bankCode;
}
public void setBankCode(String bankCode) {
this.bankCode = bankCode;
}
}
package tech.starwin.mvp.beans;
public class BannerMessageDto {
public long id;
public String content;
public void setId(long id) {
this.id = id;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
package tech.starwin.mvp.beans;
/**
* Created by SiKang on 2018/9/30.
*/
public class BasicAck {
private String code;
private String message;
private String data;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}
package tech.starwin.mvp.beans;
/**
* Created by SiKang on 2018/9/20.
*/
public class CertBean {
public boolean isComplete;
}
package tech.starwin.mvp.beans;
/**
* Created by Miaoke on 2017/3/1.
*/
public class ContactInfoBean {
/**
* friendMobile : string
* friendName : string
* parentMobile : string
* parentName : string
*/
private String friendMobile;
private String friendName;
private String parentMobile;
private String parentName;
public String getFriendMobile() {
return friendMobile;
}
public void setFriendMobile(String friendMobile) {
this.friendMobile = friendMobile;
}
public String getFriendName() {
return friendName;
}
public void setFriendName(String friendName) {
this.friendName = friendName;
}
public String getParentMobile() {
return parentMobile;
}
public void setParentMobile(String parentMobile) {
this.parentMobile = parentMobile;
}
public String getParentName() {
return parentName;
}
public void setParentName(String parentName) {
this.parentName = parentName;
}
}
package tech.starwin.mvp.beans;
import java.io.Serializable;
/**
* Created by SiKang on 2018/9/30.
*/
public class CouponBean implements Serializable {
private String type;
private String description;
private String dischargeInterestDay;
private long id;
private boolean used;
private String validBeginTime;
private String validEndTime;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getDischargeInterestDay() {
return dischargeInterestDay;
}
public void setDischargeInterestDay(String dischargeInterestDay) {
this.dischargeInterestDay = dischargeInterestDay;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public boolean isUsed() {
return used;
}
public void setUsed(boolean used) {
this.used = used;
}
public String getValidBeginTime() {
return validBeginTime;
}
public void setValidBeginTime(String validBeginTime) {
this.validBeginTime = validBeginTime;
}
public String getValidEndTime() {
return validEndTime;
}
public void setValidEndTime(String validEndTime) {
this.validEndTime = validEndTime;
}
}
package tech.starwin.mvp.beans;
import java.util.List;
/**
* Created by Miaoke on 2017/3/13.
*/
public class DepositMethodsBean {
private List<String> depositMethods;
public List<String> getDepositMethods() {
return depositMethods;
}
public void setDepositMethods(List<String> depositMethods) {
this.depositMethods = depositMethods;
}
}
package tech.starwin.mvp.beans;
/**
* Created by Miaoke on 2017/3/13.
*/
public class DepositResponseBean {
/**
* currency : IDR
* depositChannel : BLUEPAY
* depositId : 0
* depositMethod : ALFAMART
* operatorId : string
* paymentCode : string
* price : 0
* productId : string
*/
private String currency;
private String depositChannel;
private String depositId;
private String depositMethod;
private String operatorId;
private String paymentCode;
private int price;
private String productId;
public String getCurrency() {
return currency;
}
public void setCurrency(String currency) {
this.currency = currency;
}
public String getDepositChannel() {
return depositChannel;
}
public void setDepositChannel(String depositChannel) {
this.depositChannel = depositChannel;
}
public String getDepositId() {
return depositId;
}
public void setDepositId(String depositId) {
this.depositId = depositId;
}
public String getDepositMethod() {
return depositMethod;
}
public void setDepositMethod(String depositMethod) {
this.depositMethod = depositMethod;
}
public String getOperatorId() {
return operatorId;
}
public void setOperatorId(String operatorId) {
this.operatorId = operatorId;
}
public String getPaymentCode() {
return paymentCode;
}
public void setPaymentCode(String paymentCode) {
this.paymentCode = paymentCode;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getProductId() {
return productId;
}
public void setProductId(String productId) {
this.productId = productId;
}
}
package tech.starwin.mvp.beans;
import java.io.Serializable;
/**
* Created by SiKang on 2018/9/30.
*/
public class DisplayBean implements Serializable {
private String description;
private String customerMobile;
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getCustomerMobile() {
return customerMobile;
}
public void setCustomerMobile(String customerMobile) {
this.customerMobile = customerMobile;
}
}
package tech.starwin.mvp.beans;
import java.io.Serializable;
/**
* Created by SiKang on 2018/9/30.
*/
public class EmojiLocationBean implements Serializable {
private int resourid;
private int startIndex;
private int endIndex;
public int getResourid() {
return resourid;
}
public void setResourid(int resourid) {
this.resourid = resourid;
}
public int getStartIndex() {
return startIndex;
}
public void setStartIndex(int startIndex) {
this.startIndex = startIndex;
}
public int getEndIndex() {
return endIndex;
}
public void setEndIndex(int endIndex) {
this.endIndex = endIndex;
}
}
package tech.starwin.mvp.beans;
/**
* Created by Miaoke on 2017/3/1.
*/
public class EmploymentBean {
/**
* companyName : string
* companyProvince : string
* companyCity : string
* companyDistrict : string
* companyArea : string
* companyAddress : string
* companyPhone : string
* profession : PROGRAMMER
* salary : BELOW_2B
* workEmail : string
*/
public String companyName;
public RegionBean.RegionsBean companyProvince ;
public RegionBean.RegionsBean companyCity;
public RegionBean.RegionsBean companyDistrict;
public RegionBean.RegionsBean companyArea;
public String companyAddress;
public String companyPhone;
public String salary;
public String mJobType;
public EmploymentBean() {
}
public EmploymentBean(EmploymentServerBean employmentServerBean) {
companyProvince = new RegionBean.RegionsBean();
companyCity = new RegionBean.RegionsBean();
companyDistrict = new RegionBean.RegionsBean();
companyArea = new RegionBean.RegionsBean();
this.setCompanyName(employmentServerBean.getCompanyName());
companyProvince.setName(employmentServerBean.getCompanyProvince());
companyCity.setName(employmentServerBean.getCompanyCity());
companyDistrict.setName(employmentServerBean.getCompanyDistrict());
companyArea.setName(employmentServerBean.getCompanyArea());
this.setCompanyAddress(employmentServerBean.getCompanyAddress());
this.setCompanyPhone(employmentServerBean.getCompanyPhone());
this.setJobType(employmentServerBean.getProfession());
this.setSalary(employmentServerBean.getSalary());
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
public void setCompanyAddress(String companyAddress) {
this.companyAddress = companyAddress;
}
public void setCompanyPhone(String companyPhone) {
this.companyPhone = companyPhone;
}
public void setSalary(String salary) {
this.salary = salary;
}
public void setJobType(String jobType) {
mJobType = jobType;
}
}
package tech.starwin.mvp.beans;
/**
* Created by Miaoke on 31/03/2017.
*/
public class EmploymentServerBean {
/**
* companyAddress : string
* companyArea : string
* companyCity : string
* companyDistrict : string
* companyName : string
* companyPhone : string
* companyProvince : string
* profession : PROGRAMMER
* salary : BELOW_2B
* workEmail : string
*/
private String companyAddress;
private String companyArea;
private String companyCity;
private String companyDistrict;
private String companyName;
private String companyPhone;
private String companyProvince;
private String profession;
private String salary;
public String getCompanyAddress() {
return companyAddress;
}
public void setCompanyAddress(String companyAddress) {
this.companyAddress = companyAddress;
}
public String getCompanyArea() {
return companyArea;
}
public void setCompanyArea(String companyArea) {
this.companyArea = companyArea;
}
public String getCompanyCity() {
return companyCity;
}
public void setCompanyCity(String companyCity) {
this.companyCity = companyCity;
}
public String getCompanyDistrict() {
return companyDistrict;
}
public void setCompanyDistrict(String companyDistrict) {
this.companyDistrict = companyDistrict;
}
public String getCompanyName() {
return companyName;
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
public String getCompanyPhone() {
return companyPhone;
}
public void setCompanyPhone(String companyPhone) {
this.companyPhone = companyPhone;
}
public String getCompanyProvince() {
return companyProvince;
}
public void setCompanyProvince(String companyProvince) {
this.companyProvince = companyProvince;
}
public String getProfession() {
return profession;
}
public void setProfession(String profession) {
this.profession = profession;
}
public String getSalary() {
return salary;
}
public void setSalary(String salary) {
this.salary = salary;
}
}
package tech.starwin.mvp.beans
/**
* @作者:My
* @创建日期: 2017/7/12 14:34
* @描述:${TODO}
*
* @更新者:${Author}$
* @更新时间:${Date}$
* @更新描述:${TODO}
*/
enum class RequestLevel{
IMMEDIATELY,LATEST,WAITNEXT
}
enum class LockViewMode{
SETTING,LOGGING
}
enum class PolicyType{
PRIVACY,LOAN_AGREEMENT
}
class SysDict {
enum class Type {
EDUCATION // 教育
}
}
\ No newline at end of file
package tech.starwin.mvp.beans;
import com.google.gson.annotations.SerializedName;
import java.io.Serializable;
import java.util.List;
public class GatewayInfoBean implements Serializable {
private static final long serialVersionUID = -6527836006943252482L;
@SerializedName("gateway")
public List<String> gateway;
@SerializedName("rest")
public List<String> rest;
@SerializedName("harvester")
public List<String> harvester;
@SerializedName("admin")
public List<String> admin;
@SerializedName("privacy")
public List<String> privacy;
@Override
public String toString() {
return "GatewayInfoBean{" +
"gateway=" + gateway +
", rest=" + rest +
", harvester=" + harvester +
", admin=" + admin +
", privacy=" + privacy +
'}';
}
public void notifyWith(GatewayInfoBean gatewayInfo) {
if (gatewayInfo == null) {
return;
}
if (gatewayInfo.gateway != null && gatewayInfo.gateway.size() > 0) {
gateway = gatewayInfo.gateway;
}
if (gatewayInfo.rest != null && gatewayInfo.rest.size() > 0) {
rest = gatewayInfo.rest;
}
if (gatewayInfo.harvester != null && gatewayInfo.harvester.size() > 0) {
harvester = gatewayInfo.harvester;
}
if (gatewayInfo.admin != null && gatewayInfo.admin.size() > 0) {
admin = gatewayInfo.admin;
}
if (gatewayInfo.privacy != null && gatewayInfo.privacy.size() > 0) {
privacy = gatewayInfo.privacy;
}
}
}
package tech.starwin.mvp.beans;
/**
* @作者:XJY
* @创建日期: 2017/3/15 14:58
* @描述:${TODO}
* @更新者:${Author}$
* @更新时间:${Date}$
* @更新描述:${TODO}
*/
public class HistoryLoanAppInfoBean extends LoanAppBeanFather {
/**
* amount : 0
*
* bankCode : BCA
*
* cardNo : string
*
*
* cost : 0
* createTime : 2017-03-23T01:56:23.652Z
* credentialNo : string
* dueDate : 2017-03-23T01:56:23.652Z
* loanAppId : 0
* paidAmount : 0
* period : 0
* periodUnit : D
* remainAmount : 0
* status : string
* statusLogs : [{"createTime":"2017-03-23T01:56:23.652Z","status":"string"}]
* totalAmount : 0
*/
/**
* loanAppId : 110013
* createTime : 2017-03-23T09:27:48Z
* credentialNo : hhskkjfn-&5$(+-%$+!#!778385999
* amount : 1000000.0
* period : 7
* periodUnit : D
* cost : 70000.0
* totalAmount : 1070000.0
* paidAmount : null
* remainAmount : null
* dueDate : null
* bankCode : CIMB
* cardNo : hhdjjj
* status : SUBMITTED
* statusLogs : [{"status":"SUBMITTED","createTime":"2017-03-23T09:27:48Z"}]
*/
}
package tech.starwin.mvp.beans;
/**
* Created by SiKang on 2018/9/30.
*/
public class IdentifyBean {
private String name;
private String ktp;
private String gender;
private String url;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getKtp() {
return ktp;
}
public void setKtp(String ktp) {
this.ktp = ktp;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
package tech.starwin.mvp.beans;
/**
* Created by SiKang on 2018/9/30.
*/
public class InviteResult {
private InviteePersonBean list;
private InviteeBean bean;
private String code;
public InviteePersonBean getList() {
return list;
}
public void setList(InviteePersonBean list) {
this.list = list;
}
public InviteeBean getBean() {
return bean;
}
public void setBean(InviteeBean bean) {
this.bean = bean;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}
package tech.starwin.mvp.beans;
/**
* Created by SiKang on 2018/9/30.
*/
public class InviteeBean {
private int completeLoanApplyCount;
private int inviteeCount;
public int getCompleteLoanApplyCount() {
return completeLoanApplyCount;
}
public void setCompleteLoanApplyCount(int completeLoanApplyCount) {
this.completeLoanApplyCount = completeLoanApplyCount;
}
public int getInviteeCount() {
return inviteeCount;
}
public void setInviteeCount(int inviteeCount) {
this.inviteeCount = inviteeCount;
}
}
package tech.starwin.mvp.beans;
/**
* Created by SiKang on 2018/9/30.
*/
public class InviteePersonBean {
private String mobile;
private String realName;
private String registerTime;
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
public String getRegisterTime() {
return registerTime;
}
public void setRegisterTime(String registerTime) {
this.registerTime = registerTime;
}
}
package tech.starwin.mvp.beans;
/**
* Created by Miaoke on 2017/3/6.
*/
public class LatestLoanAppBean extends LoanAppBeanFather {
/**
* amount ; 0
* bankCode ; BCA
* cardNo ; string
* cost ; 0
* createTime ; 2017-03-23T01;56;23.652Z
* credentialNo ; string
* dueDate ; 2017-03-23T01;56;23.652Z
* loanAppId ; 0
* paidAmount ; 0
* period ; 0
* periodUnit ; D
* remainAmount ; 0
* status ; string
* statusLogs ; [{"createTime";"2017-03-23T01;56;23.652Z","status";"string"}]
* totalAmount ; 0
*/
public static final String OVERDUE = "OVERDUE";//逾期
public static final String CURRENT = "CURRENT";//已放款
public static final String SUBMITTED = "SUBMITTED";//已经提交
public static final String IN_REVIEW = "IN_REVIEW";//审核中
public static final String APPROVED = "APPROVED";//已批准放款
public static final String READY_TO_ISSUE = "READY_TO_ISSUE";//准备放款
public static final String ISSUE_FAILED = "ISSUE_FAILED";//放款失败
public static final String ISSUING = "ISSUING";//放款中
public static final String NOLOANAPP = "NOLOANAPP";//无贷款信息
public static final String CANCELED = "CANCELED";//已取消
public static final String PAID_OFF = "PAID_OFF";//已结清
public static final String REJECTED = "REJECTED";//贷款被拒绝
public static final String CLOSED = "CLOSED";//贷款申请已关闭
}
package tech.starwin.mvp.beans;
import android.os.Parcel;
import android.os.Parcelable;
public class LoanAppBeanFatherStatusLogs implements Parcelable {
public static final Creator<LoanAppBeanFatherStatusLogs> CREATOR = new Creator<LoanAppBeanFatherStatusLogs>() {
@Override
public LoanAppBeanFatherStatusLogs createFromParcel(Parcel source) {
LoanAppBeanFatherStatusLogs var = new LoanAppBeanFatherStatusLogs();
var.createTime = source.readString();
var.status = source.readString();
return var;
}
@Override
public LoanAppBeanFatherStatusLogs[] newArray(int size) {
return new LoanAppBeanFatherStatusLogs[size];
}
};
private String createTime;
private String status;
public String getCreateTime() {
return this.createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public String getStatus() {
return this.status;
}
public void setStatus(String status) {
this.status = status;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.createTime);
dest.writeString(this.status);
}
@Override
public int describeContents() {
return 0;
}
}
package tech.starwin.mvp.beans;
/**
* @作者:My
* @创建日期: 2017/3/20 11:35
* @描述:${TODO}
* @更新者:${Author}$
* @更新时间:${Date}$
* @更新描述:${TODO}
*/
public class LoanAppHelpCenterTipsBean {
public String mTitle;
public String mDetail;
}
package tech.starwin.mvp.beans;
/**
* @作者:My
* @创建日期: 2017/7/19 17:47
* @描述:${TODO}
* @更新者:${Author}$
* @更新时间:${Date}$
* @更新描述:${TODO}
*/
public class LoanRange {
private Double amountStep;
private Double interestRate;
private Double maxAmount;
private Double maxPeriod;
private Double minAmount;
private Double minPeriod;
private Double periodStep;
private String periodUnit;
private Double serviceFee;
public Double getAmountStep() {
return amountStep;
}
public void setAmountStep(Double amountStep) {
this.amountStep = amountStep;
}
public Double getInterestRate() {
return interestRate;
}
public void setInterestRate(Double interestRate) {
this.interestRate = interestRate;
}
public Double getMaxAmount() {
return maxAmount;
}
public void setMaxAmount(Double maxAmount) {
this.maxAmount = maxAmount;
}
public Double getMaxPeriod() {
return maxPeriod;
}
public void setMaxPeriod(Double maxPeriod) {
this.maxPeriod = maxPeriod;
}
public Double getMinAmount() {
return minAmount;
}
public void setMinAmount(Double minAmount) {
this.minAmount = minAmount;
}
public Double getMinPeriod() {
return minPeriod;
}
public void setMinPeriod(Double minPeriod) {
this.minPeriod = minPeriod;
}
public Double getPeriodStep() {
return periodStep;
}
public void setPeriodStep(Double periodStep) {
this.periodStep = periodStep;
}
public String getPeriodUnit() {
return periodUnit;
}
public void setPeriodUnit(String periodUnit) {
this.periodUnit = periodUnit;
}
public Double getServiceFee() {
return serviceFee;
}
public void setServiceFee(Double serviceFee) {
this.serviceFee = serviceFee;
}
}
package tech.starwin.mvp.beans;
/**
* Created by SiKang on 2018/9/30.
*/
public class LoaningAmoutBean {
private double dueAmount;
private double interest;
private double serviceFee;
private double totalAmount;
private double issueAmount;
public double getDueAmount() {
return dueAmount;
}
public void setDueAmount(double dueAmount) {
this.dueAmount = dueAmount;
}
public double getInterest() {
return interest;
}
public void setInterest(double interest) {
this.interest = interest;
}
public double getServiceFee() {
return serviceFee;
}
public void setServiceFee(double serviceFee) {
this.serviceFee = serviceFee;
}
public double getTotalAmount() {
return totalAmount;
}
public void setTotalAmount(double totalAmount) {
this.totalAmount = totalAmount;
}
public double getIssueAmount() {
return issueAmount;
}
public void setIssueAmount(double issueAmount) {
this.issueAmount = issueAmount;
}
}
package tech.starwin.mvp.beans;
/**
* Created by localuser on 2017/2/27.
*/
public class LoginRequestBean {
public Mobile mobile;
public SMSCode smsCode;
public CaptchaSID captchaSid;
public Captcha captcha;
public String inviteCode;
public static class SMSCode{
String smsCode;
public SMSCode(String str){
this.smsCode = str;
}
public String toString(){
return smsCode;
}
}
public static class CaptchaSID{
String captchaSid;
public CaptchaSID(String str){
this.captchaSid = str;
}
public String toString(){
return captchaSid;
}
}
public static class Captcha{
String captcha;
public Captcha(String str){
this.captcha = str;
}
public String toString(){
return captcha;
}
}
public static class Mobile{
String mobile;
public Mobile(String str){
this.mobile = str;
}
public String toString(){
return mobile;
}
}
}
package tech.starwin.mvp.beans;
/**
* @作者:My
* @创建日期: 2017/4/5 17:17
* @描述:${TODO}
* @更新者:${Author}$
* @更新时间:${Date}$
* @更新描述:${TODO}
*/
public class LoginStatusBean {
public long mChangTime = 1L;
}
package tech.starwin.mvp.beans;
/**
* Created by SiKang on 2018/9/30.
*/
public class MessageBean {
private boolean fromMe;
private String time;
private String message;
private int type;
public boolean isFromMe() {
return fromMe;
}
public void setFromMe(boolean fromMe) {
this.fromMe = fromMe;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
}
package tech.starwin.mvp.beans;
/**
* Created by Miaoke on 2017/3/24.
*/
public class MsgInboxBean {
/**
* createTime : 2017-03-24T09:56:37.757Z
* msgBody : string
* msgId : 0
* msgTitle : string
* msgType : NOTIFICATION
* read : true
*/
private String createTime;
private String msgBody;
private int msgId;
private String msgTitle;
private String msgType;
private boolean read;
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public String getMsgBody() {
return msgBody;
}
public void setMsgBody(String msgBody) {
this.msgBody = msgBody;
}
public int getMsgId() {
return msgId;
}
public void setMsgId(int msgId) {
this.msgId = msgId;
}
public String getMsgTitle() {
return msgTitle;
}
public void setMsgTitle(String msgTitle) {
this.msgTitle = msgTitle;
}
public String getMsgType() {
return msgType;
}
public void setMsgType(String msgType) {
this.msgType = msgType;
}
public boolean isRead() {
return read;
}
public void setRead(boolean read) {
this.read = read;
}
}
package tech.starwin.mvp.beans;
import java.io.Serializable;
/**
* Created by SiKang on 2018/9/26.
*/
public class OcrResultBean implements Serializable {
private String code;
private String data;
private String message;
private KTP ktp;
public static class KTP implements Serializable {
private String result;
private String imgUrl;
private String message;
private String name;
private String idNumber;
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getImgUrl() {
return imgUrl;
}
public void setImgUrl(String imgUrl) {
this.imgUrl = imgUrl;
}
public String getIdNumber() {
return idNumber;
}
public void setIdNumber(String idNumber) {
this.idNumber = idNumber;
}
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
package tech.starwin.mvp.beans;
import java.io.Serializable;
/**
* Created by SiKang on 2018/9/27.
*/
public class PersonalInfo implements Serializable {
private String ktpImgUrl = "";
private String fullName = "";
private String idNumber = "";
private String gender = "";
public String getKtpImgUrl() {
return ktpImgUrl;
}
public void setKtpImgUrl(String ktpImgUrl) {
this.ktpImgUrl = ktpImgUrl;
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
public String getIdNumber() {
return idNumber;
}
public void setIdNumber(String idNumber) {
this.idNumber = idNumber;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
package tech.starwin.mvp.beans;
import android.support.annotation.Nullable;
/**
* Created by Miaoke on 2017/3/1.
*/
public class PersonalInfoBean {
/**
* fullName : timbo
* credentialNo : 987654321
* gender: MALE
* province : Shanghai
* city : Shanghai
* district : Pudong
* area : Huamu
* address : East Jin'an Road
* lastEducation : SD
* maritalStatus : SINGLE
* childrenNumber : ZERO
* residenceDuration : ONE_YEAR
*/
private String fullName;
private String credentialNo;
private String gender;
private RegionBean.RegionsBean province;
private RegionBean.RegionsBean city;
private RegionBean.RegionsBean district;
private RegionBean.RegionsBean area;
private String address;
private String lastEducation;
private String maritalStatus;
private String childrenNumber;
private String residenceDuration;
public String getFamilyNameInLaw() {
return familyNameInLaw;
}
public void setFamilyNameInLaw(String familyNameInLaw) {
this.familyNameInLaw = familyNameInLaw;
}
private String familyNameInLaw;
@Nullable
private String facebookId;
@Nullable
public String getFacebookId() {
return facebookId;
}
public void setFacebookId(@Nullable String facebookId) {
this.facebookId = facebookId;
}
public PersonalInfoBean() {
}
public PersonalInfoBean(PersonalInfoServerBean personalInfoServerBean){
province = new RegionBean.RegionsBean();
province.setName(personalInfoServerBean.getProvince());
city = new RegionBean.RegionsBean();
city.setName(personalInfoServerBean.getCity());
district = new RegionBean.RegionsBean();
district.setName(personalInfoServerBean.getDistrict());
area = new RegionBean.RegionsBean();
area.setName(personalInfoServerBean.getArea());
this.setFamilyNameInLaw(personalInfoServerBean.getFamilyNameInLaw());
this.setFullName(personalInfoServerBean.getFullName());
this.setCredentialNo(personalInfoServerBean.getCredentialNo());
this.setGender(personalInfoServerBean.getGender());
this.setFacebookId(personalInfoServerBean.getFacebookId());
this.setAddress(personalInfoServerBean.getAddress());
this.setLastEducation(personalInfoServerBean.getLastEducation());
this.setMaritalStatus(personalInfoServerBean.getMaritalStatus());
this.setChildrenNumber(personalInfoServerBean.getChildrenNumber());
this.setResidenceDuration(personalInfoServerBean.getResidenceDuration());
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
public String getCredentialNo() {
return credentialNo;
}
public void setCredentialNo(String credentialNo) {
this.credentialNo = credentialNo;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public RegionBean.RegionsBean getProvince() {
return province;
}
public void setProvince(RegionBean.RegionsBean province) {
this.province = province;
}
public void setDistrict(RegionBean.RegionsBean district) {
this.district = district;
}
public void setAddress(String address) {
this.address = address;
}
public void setLastEducation(String lastEducation) {
this.lastEducation = lastEducation;
}
public void setMaritalStatus(String maritalStatus) {
this.maritalStatus = maritalStatus;
}
public void setChildrenNumber(String childrenNumber) {
this.childrenNumber = childrenNumber;
}
public void setResidenceDuration(String residenceDuration) {
this.residenceDuration = residenceDuration;
}
}
package tech.starwin.mvp.beans;
import android.support.annotation.Nullable;
/**
* Created by Miaoke on 31/03/2017.
*/
public class PersonalInfoServerBean {
/**
* address : string
* area : string
* childrenNumber : ZERO
* city : string
* credentialNo : string
* credentialType : KTP
* district : string
* fullName : string
* gender : MALE
* lastEducation : DIPLOMA_I
* maritalStatus : MARRIED
* province : string
* residenceDuration : THREE_MONTH
*/
private String address;
private String area;
private String childrenNumber;
private String city;
private String credentialNo;
private String credentialType;
private String district;
private String fullName;
private String gender;
private String lastEducation;
private String maritalStatus;
private String province;
private String residenceDuration;
private String familyNameInLaw;
@Nullable
private String facebookId;
public void setFacebookId(@Nullable String facebookId) {
this.facebookId = facebookId;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getArea() {
return area;
}
public void setArea(String area) {
this.area = area;
}
public String getChildrenNumber() {
return childrenNumber;
}
public void setChildrenNumber(String childrenNumber) {
this.childrenNumber = childrenNumber;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getCredentialNo() {
return credentialNo;
}
public void setCredentialNo(String credentialNo) {
this.credentialNo = credentialNo;
}
public String getCredentialType() {
return credentialType;
}
public void setCredentialType(String credentialType) {
this.credentialType = credentialType;
}
public String getDistrict() {
return district;
}
public void setDistrict(String district) {
this.district = district;
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getLastEducation() {
return lastEducation;
}
public void setLastEducation(String lastEducation) {
this.lastEducation = lastEducation;
}
public String getMaritalStatus() {
return maritalStatus;
}
public void setMaritalStatus(String maritalStatus) {
this.maritalStatus = maritalStatus;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getResidenceDuration() {
return residenceDuration;
}
public void setResidenceDuration(String residenceDuration) {
this.residenceDuration = residenceDuration;
}
public String getFamilyNameInLaw() {
return familyNameInLaw;
}
public void setFamilyNameInLaw(String familyNameInLaw) {
this.familyNameInLaw = familyNameInLaw;
}
public String getFacebookId() {
return facebookId;
}
}
package tech.starwin.mvp.beans;
import java.io.File;
/**
* @作者:My
* @创建日期: 2017/3/22 13:39
* @描述:${TODO}
* @更新者:${Author}$
* @更新时间:${Date}$
* @更新描述:${TODO}
*/
public class PhotoInfo {
public File mFile;
public boolean isKTP;
}
package tech.starwin.mvp.beans;
/**
* Created by Miaoke on 2017/3/20.
*/
public class ProgressBean {
/**
* personalInfoPart : false
* employmentPart : false
* contactPart : false
* filePart : true
* completed : false
*/
private boolean personalInfoPart;
private boolean employmentPart;
private boolean contactPart;
private boolean filePart;
private boolean completed;
public boolean isPersonalInfoPart() {
return personalInfoPart;
}
public void setPersonalInfoPart(boolean personalInfoPart) {
this.personalInfoPart = personalInfoPart;
}
public boolean isEmploymentPart() {
return employmentPart;
}
public void setEmploymentPart(boolean employmentPart) {
this.employmentPart = employmentPart;
}
public boolean isContactPart() {
return contactPart;
}
public void setContactPart(boolean contactPart) {
this.contactPart = contactPart;
}
public boolean isFilePart() {
return filePart;
}
public void setFilePart(boolean filePart) {
this.filePart = filePart;
}
public boolean isCompleted() {
return completed;
}
public void setCompleted(boolean completed) {
this.completed = completed;
}
}
package tech.starwin.mvp.beans;
import java.util.List;
/**
* Created by localuser on 2017/3/1.
*/
public class RecordFilesResponse {
private List<FilesBean> files;
public List<FilesBean> getFiles() {
return files;
}
public void setFiles(List<FilesBean> files) {
this.files = files;
}
public static class FilesBean {
/**
* fileType : KTP_PHOTO
* url : string
*/
private String fileType;
private String url;
public String getFileType() {
return fileType;
}
public void setFileType(String fileType) {
this.fileType = fileType;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
}
package tech.starwin.mvp.beans;
import java.util.List;
/**
* Created by Miaoke on 2017/3/10.
*/
public class RegionBean {
private List<RegionsBean> regions;
public List<RegionsBean> getRegions() {
return regions;
}
public void setRegions(List<RegionsBean> regions) {
this.regions = regions;
}
public static class RegionsBean {
/**
* id : 88021
* level : city
* name : Kab. Badung
*/
private int id;
private String level;
private String name;
public RegionsBean() {
}
public RegionsBean(int id, String level, String name) {
this.id = id;
this.level = level;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
package tech.starwin.mvp.beans;
/**
* Created by Miaoke on 30/03/2017.
*/
public class ResponseErrorBody {
/**
* error : err.auth.access.denied
* message : 验证失败
*/
private String error;
private String message;
public String getError() {
return error;
}
public void setError(String error) {
this.error = error;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
package tech.starwin.mvp.beans;
/**
* Created by SiKang on 2018/9/14.
*/
public class Result<T> {
public int code;
public String msg;
public T data;
}
package tech.starwin.mvp.beans;
import java.io.Serializable;
/**
* Created by SiKang on 2018/9/30.
*/
public class SysDictBean implements Serializable {
private String code;
private String value;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
package tech.starwin.mvp.beans;
import java.io.Serializable;
/**
* Created by localuser on 2017/2/27.
*/
public class TokenInfoBean implements Serializable {
/**
* token : eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxNTAyNjU2MTM4NyIsImV4cCI6MTQ4ODE5NTc3MX0.HBjRY3XZxgr2fdnCpGt3zjClWAz-gyLYC7kSZAm7WT6yp3klllVEwmyDdAMJSQZp5VDh1D0mJOdtm3ainjOfBQ
* tokenInvalid : eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxNTAyNjU2MTM4NyIsImV4cCI6MTQ4ODgwMDU3MX0.Rz5kr57TD82LAkr7b1ALKjcDVgboO6G29KjjiuyFQ7EkuTsmYoZI4iJ4PR0dv7kkSW6U2JCGcBt_S_8i4TE_ow
*/
private String token;
private String refreshToken;
private String mobile;
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public String getRefreshToken() {
return refreshToken;
}
public void setRefreshToken(String refreshToken) {
this.refreshToken = refreshToken;
}
}
package tech.starwin.mvp.beans;
/**
* @作者:My
* @创建日期: 2017/7/13 15:43
* @描述:${TODO}
* @更新者:${Author}$
* @更新时间:${Date}$
* @更新描述:${TODO}
*/
public class TotalAmount {
private double amount = 600000;
private int day = 7;
private double rate = 1;
private double totalRepayment;
private String periodUnit;
public void setRate(double rate) {
this.rate = rate;
}
public void setTotalRepayment(double totalRepayment) {
this.totalRepayment = totalRepayment;
}
public String getPeriodUnit() {
return periodUnit;
}
public void setPeriodUnit(String periodUnit) {
this.periodUnit = periodUnit;
}
public double getAmount() {
return amount;
}
public void setAmount(double amount) {
this.amount = amount;
}
public double getRate() {
return rate;
}
public void setRate(int rate) {
this.rate = rate;
}
public int getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}
public double getTotalRepayment() {
return totalRepayment = amount + amount * day * rate / 100;
}
}
package tech.starwin.mvp.beans;
/**
* Created by SiKang on 2018/9/30.
*/
public class UserBankInfo {
private String bankCode;
private String branch;
private String cardNo;
private String city;
private String createTime;
private int customerId;
private int id;
private int loanAppId;
private String updateTime;
private String verifyAccountHolderName;
private String verifyStatus;
private String province;
public String getBankCode() {
return bankCode;
}
public void setBankCode(String bankCode) {
this.bankCode = bankCode;
}
public String getBranch() {
return branch;
}
public void setBranch(String branch) {
this.branch = branch;
}
public String getCardNo() {
return cardNo;
}
public void setCardNo(String cardNo) {
this.cardNo = cardNo;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public int getCustomerId() {
return customerId;
}
public void setCustomerId(int customerId) {
this.customerId = customerId;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getLoanAppId() {
return loanAppId;
}
public void setLoanAppId(int loanAppId) {
this.loanAppId = loanAppId;
}
public String getUpdateTime() {
return updateTime;
}
public void setUpdateTime(String updateTime) {
this.updateTime = updateTime;
}
public String getVerifyAccountHolderName() {
return verifyAccountHolderName;
}
public void setVerifyAccountHolderName(String verifyAccountHolderName) {
this.verifyAccountHolderName = verifyAccountHolderName;
}
public String getVerifyStatus() {
return verifyStatus;
}
public void setVerifyStatus(String verifyStatus) {
this.verifyStatus = verifyStatus;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
}
package tech.starwin.mvp.beans;
import java.io.Serializable;
/**
* Created by SiKang on 2018/9/14.
*/
public class UserBean implements Serializable {
public int user_id;
public String user_name;
public int user_age;
public String user_sex;
public UserBean(int user_id, String user_name) {
this.user_id = user_id;
this.user_name = user_name;
}
@Override
public String toString() {
return "user_id : " + user_id + ",user_name : " + user_name + ",user_age : " + user_age + "\n";
}
}
package tech.starwin.mvp.beans;
public class UserInfo {
public String headIcon;
public String nicky;
}
\ No newline at end of file
package tech.starwin.mvp.beans;
import android.os.Parcel;
import android.os.Parcelable;
import java.util.ArrayList;
import java.util.List;
/**
* @作者:My
* @创建日期: 2017/4/25 11:44
* @描述:${TODO}
* @更新者:${Author}$
* @更新时间:${Date}$
* @更新描述:${TODO}
*/
public class VersionBean implements Parcelable {
/**
* latestVersionCode : 12345
* latestVersion : 2.1.1
* releaseNotes : ["First desc","Second desc","Third desc"]
* url : https://www.pgyer.com/example
*/
private int latestVersionCode;
private String latestVersion;
private String url;
private List<String> releaseNotes;
public int getLatestVersionCode() {
return latestVersionCode;
}
public void setLatestVersionCode(int latestVersionCode) {
this.latestVersionCode = latestVersionCode;
}
public String getLatestVersion() {
return latestVersion;
}
public void setLatestVersion(String latestVersion) {
this.latestVersion = latestVersion;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public List<String> getReleaseNotes() {
return releaseNotes;
}
public void setReleaseNotes(List<String> releaseNotes) {
this.releaseNotes = releaseNotes;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(this.latestVersionCode);
dest.writeString(this.latestVersion);
dest.writeString(this.url);
dest.writeList(this.releaseNotes);
}
public VersionBean() {
}
private VersionBean(Parcel in) {
this.latestVersionCode = in.readInt();
this.latestVersion = in.readString();
this.url = in.readString();
this.releaseNotes = new ArrayList<String>();
in.readList(this.releaseNotes, ArrayList.class.getClassLoader());
}
public static final Creator<VersionBean> CREATOR = new Creator<VersionBean>() {
public VersionBean createFromParcel(Parcel source) {
return new VersionBean(source);
}
public VersionBean[] newArray(int size) {
return new VersionBean[size];
}
};
}
package tech.starwin.mvp.beans;
/**
* @作者:My
* @创建日期: 2017/3/31 16:55
* @描述:${TODO}
* @更新者:${Author}$
* @更新时间:${Date}$
* @更新描述:${TODO}
*/
public class YWUser {
/**
* userid : 59523e9f4736c2cab70a470f088b53dd
* password : 012c05e84b2d34635dff3abc8dd36640
*/
private String userid;
private String password;
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
package tech.starwin.mvp.presenter;
import tech.starwin.base.BasePresenter;
import tech.starwin.mvp.api.LoanApi;
import tech.starwin.utils.LoginManager;
/**
* Created by SiKang on 2018/9/20.
*/
public class LoanPresenter extends BasePresenter<LoanApi> {
public LoanPresenter() {
super(LoanApi.class);
}
/**
* 获取贷款额度、贷款周期 可选范围
*/
public void getLoanRange(String action) {
handleRequest(action, apiService.getLoanRange());
}
/**
* 验证贷款资格
*/
public void checkQualification(String action) {
handleRequest(action, apiService.isQualification(LoginManager.get().getToken()));
}
/**
* 获取贷款进度
*/
public void getLoanProgress(String action) {
handleRequest(action, apiService.getLoanProgress(LoginManager.get().getToken()));
}
/**
* 获取最新的贷款申请信息
*/
public void getLatestLoanApp(String action) {
handleRequest(action, apiService.getLatestLoanApp(LoginManager.get().getToken()));
}
}
package tech.starwin.mvp.presenter;
import com.google.gson.Gson;
import org.jetbrains.annotations.Nullable;
import java.io.File;
import java.util.List;
import okhttp3.MultipartBody;
import tech.starwin.base.BasePresenter;
import tech.starwin.common.impl.HttpObserver;
import tech.starwin.mvp.api.UploadApi;
import tech.starwin.mvp.beans.OcrResultBean;
import tech.starwin.utils.LoginManager;
import tech.starwin.utils.MultipartBodyMaker;
/**
* Created by SiKang on 2018/9/25.
*/
public class UploadPresenter extends BasePresenter<UploadApi> {
public UploadPresenter() {
super(UploadApi.class);
}
/**
* 身份证ocr识别
*/
public void identityOcr(final String action, @Nullable File file) {
List<MultipartBody.Part> parts = new MultipartBodyMaker.Builder()
.addDataPart("file", file)
.build().makeParts();
handleRequest(apiService.identityOcr(parts, LoginManager.get().getToken()), new HttpObserver<OcrResultBean>() {
@Override
public void onStart() {
view.onHttpStart(action, true);
}
@Override
public void onSuccess(OcrResultBean data) {
OcrResultBean.KTP ktp = new Gson().fromJson(data.getData(), OcrResultBean.KTP.class);
if (ktp.getResult().equals("PASS"))
view.onHttpSuccess(action, ktp);
else
view.onHttpError(action, ktp.getMessage());
}
@Override
public void onError(int code, String msg) {
view.onHttpError(action, msg);
}
@Override
public void onFinish() {
view.onHttpFinish(action);
}
});
}
}
package tech.starwin.mvp.presenter;
import android.annotation.SuppressLint;
import io.reactivex.Observable;
import io.reactivex.ObservableSource;
import io.reactivex.functions.Consumer;
import io.reactivex.functions.Function;
import io.reactivex.functions.Predicate;
import tech.starwin.base.BasePresenter;
import tech.starwin.common.impl.HttpObserver;
import tech.starwin.mvp.api.UserApi;
import tech.starwin.mvp.beans.GatewayInfoBean;
import tech.starwin.mvp.beans.TokenInfoBean;
import tech.starwin.network.Gateway;
import tech.starwin.utils.LoginManager;
/**
* Created by SiKang on 2018/9/14.
*/
public class UserPresenter extends BasePresenter<UserApi> {
public UserPresenter() {
super(UserApi.class);
}
@SuppressLint("CheckResult")
public void notifyGateway() {
Observable.fromIterable(Gateway.getGatewayUrl())
.concatMap(new Function<String, ObservableSource<GatewayInfoBean>>() {
@Override
public ObservableSource<GatewayInfoBean> apply(String s) throws Exception {
return apiService.getGateway(s);
}
})
.onErrorReturn(new Function<Throwable, GatewayInfoBean>() {
@Override
public GatewayInfoBean apply(Throwable throwable) throws Exception {
return new GatewayInfoBean();
}
})
.filter(new Predicate<GatewayInfoBean>() {
@Override
public boolean test(GatewayInfoBean gatewayInfoBean) throws Exception {
return gatewayInfoBean != null && gatewayInfoBean.gateway != null;
}
})
.take(1)
.subscribe(new Consumer<GatewayInfoBean>() {
@Override
public void accept(GatewayInfoBean gatewayInfoBean) throws Exception {
Gateway.notify(gatewayInfoBean);
}
});
}
/**
* 登录
* (登录失败超过两次需要生成图像验证码)
*
* @param mobile 手机号
* @param smsCode 短信验证码
* @param captchaSid 生成的图像验证码
* @param captcha 输入的图像验证码
* @param inviteCode 邀请码
*/
public void login(final String action, String mobile, String smsCode, String captchaSid, String captcha, String inviteCode) {
handleRequest(apiService.login(smsCode, captchaSid, captcha, mobile, inviteCode),
new HttpObserver<TokenInfoBean>() {
@Override
public void onStart() {
view.onHttpStart(action, true);
}
@Override
public void onSuccess(TokenInfoBean tokenInfoBean) {
//刷新Token信息
LoginManager.get().notifyTokenInfo(tokenInfoBean);
view.onHttpSuccess(action, tokenInfoBean);
}
@Override
public void onError(int code, String msg) {
view.onHttpError(action, msg);
}
@Override
public void onFinish() {
view.onHttpFinish(action);
}
});
}
/**
* FaceBook AccountKit 登录
*
* @param auth_code Facebook 授权码
*/
public void accountKotLogin(final String action, String auth_code) {
handleRequest(apiService.accountKitLogin(null, auth_code), new HttpObserver<TokenInfoBean>() {
@Override
public void onStart() {
view.onHttpStart(action, true);
}
@Override
public void onSuccess(TokenInfoBean tokenInfoBean) {
//刷新Token信息
LoginManager.get().notifyTokenInfo(tokenInfoBean);
view.onHttpSuccess(action, tokenInfoBean);
}
@Override
public void onError(int code, String msg) {
view.onHttpError(action, msg);
}
@Override
public void onFinish() {
view.onHttpFinish(action);
}
});
}
/**
* 获取身份证图片地址
*/
public void getKtpImg(String action) {
handleRequest(action, apiService.getKtpImg(LoginManager.get().getToken()));
}
/**
* 获取用户身份信息
*/
public void getPersonalInfo(String action) {
handleRequest(action, apiService.getPersonalInfo(LoginManager.get().getToken()));
}
/**
* 查询学历类型列表
*/
public void getEducationList(String action) {
handleRequest(action, apiService.sysDict("EDUCATION"));
}
/**
* 查询区域列表
*/
public void getRegion(String action, String level, int id) {
handleRequest(action, apiService.getRegion(level, id));
}
// /**
// * 获取身份证图片 + 获取用户个人信息
// */
// @SuppressLint("CheckResult")
// public void getKTPInfo(String action) {
// Observable<OcrResultBean.KTP> observable = Observable.zip(
// apiService.getKtpImg(LoginManager.get().getToken()).onErrorReturn(new Function<Throwable, RecordFilesResponse>() {
// @Override
// public RecordFilesResponse apply(Throwable throwable) throws Exception {
// return new RecordFilesResponse();
// }
// }),
// apiService.getPersonalInfo(LoginManager.get().getToken()).onErrorReturn(new Function<Throwable, PersonalInfoServerBean>() {
// @Override
// public PersonalInfoServerBean apply(Throwable throwable) throws Exception {
// return new PersonalInfoServerBean();
// }
// }),
// new BiFunction<RecordFilesResponse, PersonalInfoServerBean, OcrResultBean.KTP>() {
// @Override
// public OcrResultBean.KTP apply(RecordFilesResponse recordFilesResponse, PersonalInfoServerBean personalInfoServerBean) throws Exception {
// OcrResultBean.KTP ktp = new OcrResultBean.KTP();
// String url;
// try {
// url = recordFilesResponse.getFiles().get(0).getUrl();
// } catch (NullPointerException e) {
// url = "";
// }
// //将两个请求结果拼装
// ktp.setImgUrl(url);
// ktp.setIdNumber(personalInfoServerBean.getCredentialNo());
// ktp.setName(personalInfoServerBean.getFullName());
// return ktp;
// }
// });
// //处理请求
// handleRequest(action, observable);
// }
}
package tech.starwin.network;
/**
* Created by SiKang on 2018/9/14.
*/
public class Error {
public static final int HTTP_ERROR = 1001;//链路错误
public static final int SERVER_ERROR = 1002;//Server响应数据错误
public static final int APP_ERROR = 1003;//程序异常
}
package tech.starwin.network;
import java.util.Arrays;
import java.util.List;
import tech.starwin.BuildConfig;
import tech.starwin.base.LibConfig;
import tech.starwin.mvp.beans.GatewayInfoBean;
import tech.starwin.utils.PreferencesManager;
/**
* Created by SiKang on 2018/9/28.
*/
public class Gateway {
private static GatewayInfoBean gatewayInfo;
static {
gatewayInfo = PreferencesManager.get().getGatewayInfo();
if (gatewayInfo == null) {
gatewayInfo = new GatewayInfoBean();
gatewayInfo.gateway = Arrays.asList(LibConfig.GATEWAY_HOST_G0,
LibConfig.GATEWAY_HOST_G1);
gatewayInfo.rest = Arrays.asList(LibConfig.API_BASE_URL);
gatewayInfo.privacy = Arrays.asList(LibConfig.AGREEMENT_URL);
gatewayInfo.admin = Arrays.asList(LibConfig.ADMIN_HOST);
gatewayInfo.harvester = Arrays.asList(LibConfig.HARVESTER_IP + ":" + LibConfig.HARVESTER_PORT);
}
}
/**
* 更新gateway
*/
public static void notify(GatewayInfoBean info) {
gatewayInfo.notifyWith(info);
}
public static List<String> getGatewayUrl() {
return gatewayInfo.gateway;
}
public static String getPrivacyUrl() {
return gatewayInfo.privacy.get(0);
}
public static String getHarvesterUrl() {
return gatewayInfo.harvester.get(0);
}
public static String getAdminUrl() {
return gatewayInfo.admin.get(0);
}
public static String getRestUrl() {
return gatewayInfo.rest.get(0);
}
}
package tech.starwin.network;
import java.io.IOException;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import okhttp3.ResponseBody;
import retrofit2.Converter;
import retrofit2.Retrofit;
public class NullOnEmptyConverterFactory extends Converter.Factory {
@Override
public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) {
final Converter<ResponseBody, ?> delegate = retrofit.nextResponseBodyConverter(this, type, annotations);
return new Converter<ResponseBody, Object>() {
@Override
public Object convert(ResponseBody body) throws IOException {
if (body.contentLength() == 0) return null;
return delegate.convert(body);
}
};
}
}
\ No newline at end of file
package tech.starwin.network;
/**
* Created by SiKang on 2018/9/14.
*/
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
/**
* Created by SiKang on 2018/8/2.
*/
public class ServiceGenerator {
private static final int TIME_OUT = 3;
private static Retrofit retrofit;
private static OkHttpClient okHttpClient;
private static Map<String, Object> serviceMap;
static {
okHttpClient = new OkHttpClient.Builder()
.connectTimeout(TIME_OUT, TimeUnit.SECONDS)
.writeTimeout(TIME_OUT, TimeUnit.SECONDS)
.readTimeout(TIME_OUT, TimeUnit.SECONDS)
.build();
serviceMap = new HashMap<>();
}
/**
* 创建 apiService
*/
public static <T> T getService(Class<T> serviceClz) {
//如果 restUrl 改变,刷新Retrofit、清空Service缓存
if (retrofit == null || !Gateway.getRestUrl().equals(retrofit.baseUrl())) {
retrofit = new Retrofit.Builder()
.baseUrl(Gateway.getRestUrl())
.client(okHttpClient)
.addConverterFactory(new NullOnEmptyConverterFactory())
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
serviceMap.clear();
}
//如果map中已有 service 实例直接取出返回,否则新建
if (serviceMap.containsKey(serviceClz.getName())) {
return (T) serviceMap.get(serviceClz.getName());
} else {
return retrofit.create(serviceClz);
}
}
}
package tech.starwin.utils;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.media.ExifInterface;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.ref.SoftReference;
/**
* Created by Sikang on 2017/7/11.
*/
public class BitmapUtils {
/**
* Bitmap裁剪
*/
public static Bitmap cropBitmap(Bitmap bitmap, int left, int top, int width, int height) {
if (null == bitmap || width <= 0 || height < 0) {
return null;
}
int widthOrg = bitmap.getWidth();
int heightOrg = bitmap.getHeight();
if (widthOrg >= width && heightOrg >= height) {
try {
bitmap = Bitmap.createBitmap(bitmap, left, top, width, height);
} catch (Exception e) {
return null;
}
}
return bitmap;
}
/**
* 缩放图片到指定大小(保持比例)
*/
public static Bitmap scaleBitmap(Bitmap bitmap, int w, int h) {
if (w == 0 || h == 0)
return bitmap;
Bitmap BitmapOrg = bitmap;
int width = BitmapOrg.getWidth();
int height = BitmapOrg.getHeight();
if (w == width && h == height)
return bitmap;
float scaleWidth = ((float) w) / width;
float scaleHeight = ((float) h) / height;
float scale = scaleWidth > scaleHeight ? scaleWidth : scaleHeight;
Matrix matrix = new Matrix();
matrix.postScale(scale, scale);
Bitmap resizedBitmap = Bitmap.createBitmap(BitmapOrg, 0, 0, width,
height, matrix, true);
return resizedBitmap;
}
/**
* 从SD卡中加载图片中心区域
*/
public static Bitmap loadBitmapCenterByPath(String path, int width, int height) {
Bitmap bitmap = loadBitmapByPath(path, width, height);//先按比例缩小到最小倍数,然后加载图片到内存
bitmap = scaleBitmap(bitmap, width, height);//再将加载好的图片缩放到指定大小
return cropBitmapCenter(bitmap, width, height);
}
/**
* 按指定尺寸加载SD卡 中的图片(指定宽高保持比例缩放)
*/
public static Bitmap loadBitmapByPath(String path, float width, float height) {
int degree = readPictureDegree(path);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;//不加载bitmap到内存中
BitmapFactory.decodeFile(path, options);
float outWidth = options.outWidth;
float outHeight = options.outHeight;
options.inDither = false;
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
options.inSampleSize = 1;
if (outWidth != 0 && outHeight != 0 && width != 0 && height != 0) {
int scaleX = (int) (outWidth / width);
int scaleY = (int) (outHeight / height);
options.inSampleSize = scaleX < scaleY ? scaleX : scaleY;
}
options.inJustDecodeBounds = false;
Bitmap bitmap = BitmapFactory.decodeFile(path, options);
//把图片旋转为正的方向
return rotateBitmap(bitmap, degree);
}
/**
* 取中间区域
*/
public static Bitmap cropBitmapCenter(Bitmap bitmap, int width, int height) {
if (bitmap == null || width <= 0 || height <= 0) {
return null;
}
int w = bitmap.getWidth();
int h = bitmap.getHeight();
if (w <= width && h <= height)
return bitmap;
if (width > w)
width = w;
if (height > h)
height = h;
int top, left;
if (w <= width)
left = 0;
else
left = (w - width) / 2;
if (h <= height)
top = 0;
else
top = (h - height) / 2;
return cropBitmap(bitmap, left, top, width, height);
}
/**
* 读取图片属性:旋转的角度
*
* @param path 图片绝对路径
* @return degree旋转的角度
*/
public static int readPictureDegree(String path) {
int degree = 0;
try {
ExifInterface exifInterface = new ExifInterface(path);
int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
degree = 90;
break;
case ExifInterface.ORIENTATION_ROTATE_180:
degree = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_270:
degree = 270;
break;
}
} catch (IOException e) {
e.printStackTrace();
}
return degree;
}
/**
* 保存图片到本地
*
* @param quality 质量压缩比例
*/
public static File saveBitmapToSDCard(Bitmap mBitmap, File file, int quality) {
if (mBitmap == null)
return null;
try {
if (file.exists())
file.delete();
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
FileOutputStream fOut = null;
try {
fOut = new FileOutputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
mBitmap.compress(Bitmap.CompressFormat.JPEG, quality, fOut);
try {
fOut.flush();
} catch (IOException e) {
e.printStackTrace();
}
try {
fOut.close();
} catch (IOException e) {
e.printStackTrace();
}
if (file.exists())
return file;
return null;
}
/**
* 将相机图片转为横向
*/
public static Bitmap getHorizontalPhoto(Bitmap bitmap) {
if (bitmap.getWidth() < bitmap.getHeight()) {
return rotateBitmap(bitmap, -90);
}
return bitmap;
}
/**
* 图片旋转
*/
public static Bitmap rotateBitmap(Bitmap bitmap, float degrees) {
Matrix matrix = new Matrix();
matrix.reset();
matrix.setRotate(degrees);
return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix,
true);
}
/**
* 将图片数据压缩,并转为bitmap
*/
public static Bitmap getBitmapWithMaxLimit(byte[] data, final int maxSquerSize, final int maxFileSize) {
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inPreferredConfig = Bitmap.Config.RGB_565;
opts.inPurgeable = true;
opts.inInputShareable = true;
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(data);
SoftReference<Bitmap> temp = new SoftReference<>(BitmapFactory.decodeStream(byteArrayInputStream, null, opts));
SoftReference<Bitmap> result = temp;
final float BITMAP_MAX_SQUARE_SIZE_FLOAT = maxSquerSize * 1.0f;
if (temp.get().getWidth() > maxSquerSize || temp.get().getHeight() > maxSquerSize) {
//缩小到框内
float proportion = BITMAP_MAX_SQUARE_SIZE_FLOAT / Math.max(temp.get().getWidth(), temp.get().getHeight());
int outWidth = ((int) (temp.get().getWidth() * proportion));
int outHeight = ((int) (temp.get().getHeight() * proportion));
result = new SoftReference<>(Bitmap.createScaledBitmap(temp.get(), outWidth, outHeight, true));
temp.clear();
}
if (data.length > maxFileSize) {
float proportion = 1.0f * maxFileSize / data.length;
int width = (int) (result.get().getWidth() * proportion);
int height = (int) (result.get().getHeight() * proportion);
SoftReference<Bitmap> scaled = new SoftReference<>(Bitmap.createScaledBitmap(result.get(), width, height, false));
result.clear();
return scaled.get();
}
return result.get();
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment