Skip to content

Commit

Permalink
重新设计mvvm结构
Browse files Browse the repository at this point in the history
  • Loading branch information
jeffery committed Sep 4, 2023
1 parent fea54cf commit ca51327
Show file tree
Hide file tree
Showing 15 changed files with 97 additions and 2,644 deletions.
4 changes: 0 additions & 4 deletions app/src/main/java/xyz/mxlei/app/app/AppApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,15 @@

import com.squareup.leakcanary.LeakCanary;

import xyz.mxlei.app.BuildConfig;
import xyz.mxlei.app.R;
import xyz.mxlei.app.ui.MainActivity;
import xyz.mxlei.mvvmx.crash.CaocConfig;
import xyz.mxlei.mvvmx.utils.KLog;

public class AppApplication extends Application {

@Override
public void onCreate() {
super.onCreate();
//是否开启打印日志
KLog.init(BuildConfig.DEBUG);
//初始化全局异常崩溃
initCrash();
//内存泄漏检测
Expand Down
3 changes: 1 addition & 2 deletions app/src/main/java/xyz/mxlei/app/data/DataRepository.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package xyz.mxlei.app.data;

import xyz.mxlei.app.app.AppApplication;
import xyz.mxlei.app.data.source.db.DbDataSource;
import xyz.mxlei.app.data.source.file.FileDataSource;
import xyz.mxlei.app.data.source.http.HttpDataSource;
Expand All @@ -18,7 +17,7 @@ private DataRepository() {
}

public static HttpDataSource http() {
return HttpDataSource.getInstance(AppApplication.getInstance());
return HttpDataSource.getInstance();
}

public static SpDataSource sp() {
Expand Down
19 changes: 12 additions & 7 deletions app/src/main/java/xyz/mxlei/app/data/source/sp/SpDataSource.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package xyz.mxlei.app.data.source.sp;

import android.content.Context;
import android.content.SharedPreferences;

import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;

import xyz.mxlei.app.data.model.User;
import xyz.mxlei.mvvmx.utils.SPUtils;
import xyz.mxlei.mvvmx.utils.Mvvm;

/**
* SharePreference数据源
Expand All @@ -14,11 +17,11 @@
*/
public class SpDataSource {
private volatile static SpDataSource INSTANCE = null;
private SPUtils sp;
private Gson gson;
private final SharedPreferences sp;
private final Gson gson;

private SpDataSource() {
sp = SPUtils.getInstance();
sp = Mvvm.getContext().getSharedPreferences("SharedPreferencesDefault.db", Context.MODE_PRIVATE);
gson = new Gson();
}

Expand All @@ -34,7 +37,7 @@ public static SpDataSource getInstance() {
}

public User getLoginUser() {
String str = sp.getString("LoginUser");
String str = sp.getString("LoginUser", null);
User user = null;
try {
if (str != null && str.length() > 0) {
Expand All @@ -43,12 +46,14 @@ public User getLoginUser() {
} catch (JsonSyntaxException e) {
e.printStackTrace();
} finally {
if (user == null) user = new User();
if (user == null) {
user = new User();
}
}
return user;
}

public void setLoginUser(User user) {
sp.putRealTime("LoginUser", gson.toJson(user));
sp.edit().putString("LoginUser", gson.toJson(user)).apply();
}
}
12 changes: 6 additions & 6 deletions app/src/main/java/xyz/mxlei/app/ui/MainViewModel.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

import android.annotation.SuppressLint;
import android.app.Application;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

import androidx.databinding.ObservableField;
import androidx.lifecycle.MutableLiveData;
Expand All @@ -13,8 +15,6 @@
import xyz.mxlei.app.data.DataRepository;
import xyz.mxlei.app.data.model.User;
import xyz.mxlei.mvvmx.base.BaseViewModel;
import xyz.mxlei.mvvmx.utils.KLog;
import xyz.mxlei.mvvmx.utils.ToastUtils;

/**
* @author mxlei
Expand All @@ -36,7 +36,7 @@ public MainViewModel(Application app) {

@SuppressLint("CheckResult")
public void login() {
KLog.d("login " + user.getValue().getName() + "\t" + user.getValue().getPassword());
Log.d("demo", "login " + user.getValue().getName() + "\t" + user.getValue().getPassword());
DataRepository.sp().setLoginUser(user.getValue());
DataRepository.http()
.login(user.getValue().getName(), user.getValue().getPassword())
Expand All @@ -45,16 +45,16 @@ public void login() {
.subscribe(new Consumer<Boolean>() {
@Override
public void accept(Boolean aBoolean) throws Exception {
ToastUtils.showShort(aBoolean ? "登录成功" : "登录失败");
Toast.makeText(getApplication(), aBoolean ? "登录成功" : "登录失败", Toast.LENGTH_SHORT).show();
}
});
}

public void clickLogin(View v) {
KLog.d("clickLogin");
Log.d("demo", "clickLogin");
}

public void clickImage(View v) {
KLog.d("clickImage");
Log.d("demo", "clickImage");
}
}
8 changes: 0 additions & 8 deletions mvvmx/proguard-rules.pro
Original file line number Diff line number Diff line change
@@ -1,8 +0,0 @@

# ----------------------------DialogX-------------------------------
-keep class com.kongzue.dialogx.** { *; }
-dontwarn com.kongzue.dialogx.**
# 若启用模糊效果,请增加如下配置:
# -dontwarn androidx.renderscript.**
# -keep public class androidx.renderscript.** { *; }

4 changes: 2 additions & 2 deletions mvvmx/src/main/java/xyz/mxlei/mvvmx/StartUpProvider.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@

import xyz.mxlei.mvvmx.base.AppManager;
import xyz.mxlei.mvvmx.crash.CustomActivityOnCrash;
import xyz.mxlei.mvvmx.utils.Utils;
import xyz.mxlei.mvvmx.utils.Mvvm;


/**
Expand All @@ -41,7 +41,7 @@ public class StartUpProvider extends ContentProvider {
public boolean onCreate() {
Context context = getContext().getApplicationContext();
// 初始化工具类
Utils.init(context);
Mvvm.init(context);
// 崩溃捕获
CustomActivityOnCrash.install(context);
//注册监听每个activity的生命周期,便于堆栈式管理
Expand Down
81 changes: 34 additions & 47 deletions mvvmx/src/main/java/xyz/mxlei/mvvmx/base/BaseDialog.java
Original file line number Diff line number Diff line change
@@ -1,25 +1,27 @@
package xyz.mxlei.mvvmx.base;

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ViewDataBinding;
import androidx.fragment.app.DialogFragment;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;

import com.kongzue.dialogx.dialogs.WaitDialog;

import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Map;

import xyz.mxlei.mvvmx.R;

/**
* @author mxlei
* @date 2021/10/7
Expand All @@ -28,6 +30,7 @@ public abstract class BaseDialog<VB extends ViewDataBinding, VM extends BaseView

protected VB binding;
protected VM viewModel;
private Dialog dialog;

public BaseDialog() {

Expand All @@ -36,7 +39,6 @@ public BaseDialog() {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
initParam(getArguments());
initViewDataBinding(inflater, container, savedInstanceState);
registorUIChangeLiveDataCallBack();
initData();
Expand All @@ -56,10 +58,6 @@ public void onDestroyView() {
}
}

protected void initParam(Bundle arg) {

}

protected void initData() {

}
Expand All @@ -68,41 +66,42 @@ protected void initViewObservable() {

}

protected abstract int initContentView();

protected abstract int initVariableId();

protected VM initViewModel() {
return null;
}

private void initViewDataBinding(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
this.binding = DataBindingUtil.inflate(inflater, initContentView(), container, true);
ParameterizedType type = (ParameterizedType) getClass().getGenericSuperclass();
Class bindingClass = (Class) type.getActualTypeArguments()[0];
Class viewModelClass = (Class) type.getActualTypeArguments()[1];
try {
Method inflateMethod = bindingClass.getMethod("inflate", LayoutInflater.class);
this.binding = (VB) inflateMethod.invoke(null, inflater);
} catch (Throwable e) {
throw new RuntimeException(e);
}
this.viewModel = this.initViewModel();
if (this.viewModel == null) {
Type type = this.getClass().getGenericSuperclass();
Class modelClass;
if (type instanceof ParameterizedType) {
modelClass = (Class) ((ParameterizedType) type).getActualTypeArguments()[1];
} else {
modelClass = BaseViewModel.class;
if (viewModelClass == null) {
viewModelClass = BaseViewModel.class;
}
viewModel = (VM) new ViewModelProvider(this).get(modelClass);
viewModel = (VM) new ViewModelProvider(this).get(viewModelClass);
}
this.binding.setVariable(initVariableId(), this.viewModel);
this.binding.setLifecycleOwner(this);
this.getLifecycle().addObserver(this.viewModel);
this.viewModel.injectLifecycleOwner(this);
}

private void registorUIChangeLiveDataCallBack() {
this.viewModel.getUC().getShowDialogEvent().observe(this, new Observer<String>() {
this.viewModel.getUC().getShowLoadingDialogEvent().observe(this, new Observer<String>() {
@Override
public void onChanged(@Nullable String title) {
BaseDialog.this.showDialog(title);
}
});
this.viewModel.getUC().getDismissDialogEvent().observe(this, new Observer<Void>() {
this.viewModel.getUC().getDismissLoadingDialogEvent().observe(this, new Observer<Void>() {
@Override
public void onChanged(@Nullable Void v) {
BaseDialog.this.dismissDialog();
Expand All @@ -116,7 +115,7 @@ public void onChanged(@Nullable Map<String, Object> params) {
BaseDialog.this.startActivity(clz, bundle);
}
});
this.viewModel.getUc().getstartActivityForResultEvent().observe(this, new Observer<Map<String, Object>>() {
this.viewModel.getUc().getStartActivityForResultEvent().observe(this, new Observer<Map<String, Object>>() {
@Override
public void onChanged(@Nullable Map<String, Object> params) {
Class<?> clz = (Class) params.get(BaseViewModel.ParameterField.CLASS);
Expand All @@ -130,14 +129,6 @@ public void onChanged(@Nullable Map<String, Object> params) {
BaseDialog.this.startActivityForResult(intent, requestCode);
}
});
this.viewModel.getUC().getStartContainerActivityEvent().observe(this, new Observer<Map<String, Object>>() {
@Override
public void onChanged(@Nullable Map<String, Object> params) {
String canonicalName = (String) params.get(BaseViewModel.ParameterField.CANONICAL_NAME);
Bundle bundle = (Bundle) params.get(BaseViewModel.ParameterField.BUNDLE);
BaseDialog.this.startContainerActivity(canonicalName, bundle);
}
});
this.viewModel.getUC().getFinishEvent().observe(this, new Observer<Void>() {
@Override
public void onChanged(@Nullable Void v) {
Expand All @@ -152,13 +143,22 @@ public void onChanged(@Nullable Void v) {
});
}


protected void showDialog(String title) {
WaitDialog.show(title);
if (dialog == null) {
AlertDialog.Builder builder = new AlertDialog.Builder(getContext())
.setView(R.layout.mvvmx_dialog_loading);
if (TextUtils.isEmpty(title)) {
builder.setTitle(title);
}
dialog = builder.create();
}
dialog.show();
}

protected void dismissDialog() {
WaitDialog.dismiss();
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
}

protected void startActivity(Class<?> clz) {
Expand All @@ -172,17 +172,4 @@ protected void startActivity(Class<?> clz, Bundle bundle) {
}
this.startActivity(intent);
}

protected void startContainerActivity(String canonicalName) {
this.startContainerActivity(canonicalName, null);
}

protected void startContainerActivity(String canonicalName, Bundle bundle) {
Intent intent = new Intent(requireContext(), ContainerActivity.class);
intent.putExtra("fragment", canonicalName);
if (bundle != null) {
intent.putExtra("bundle", bundle);
}
this.startActivity(intent);
}
}
4 changes: 2 additions & 2 deletions mvvmx/src/main/java/xyz/mxlei/mvvmx/base/BaseViewModel.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.functions.Consumer;
import xyz.mxlei.mvvmx.bus.event.SingleLiveEvent;
import xyz.mxlei.mvvmx.utils.Utils;
import xyz.mxlei.mvvmx.utils.Mvvm;

/**
* @author mxlei
Expand All @@ -28,7 +28,7 @@ public class BaseViewModel extends AndroidViewModel implements IBaseViewModel, C
private CompositeDisposable mCompositeDisposable;

public BaseViewModel() {
super((Application) Utils.getContext());
super((Application) Mvvm.getContext());
}

public BaseViewModel(Application app) {
Expand Down
Loading

0 comments on commit ca51327

Please sign in to comment.