diff --git a/MVP_generator_solution b/MVP_generator_solution index cea20d17dfbc42d6f0fc3d86fee1e33672982735..931203757548a874c954795c13bfac9698c1aa5c 100644 --- a/MVP_generator_solution +++ b/MVP_generator_solution @@ -364,11 +364,14 @@ Name: Presenter #if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end import android.app.Application; - +import com.jess.arms.base.AppManager; import com.jess.arms.di.scope.ActivityScope; import com.jess.arms.mvp.BasePresenter; import com.jess.arms.widget.imageloader.ImageLoader; import com.tbruyelle.rxpermissions.RxPermissions; +import me.jessyan.rxerrorhandler.core.RxErrorHandler; +import javax.inject.Inject; + /** * 通过Template生成对应页面的MVP和Dagger代码,请注意输入框中输入的名字必须相同 @@ -379,9 +382,7 @@ import com.tbruyelle.rxpermissions.RxPermissions; * 如果想生成Fragment的相关文件,则将上面构建顺序中的Activity换为Fragment,并将Component中inject方法的参数改为此Fragment */ -import javax.inject.Inject; -import me.jessyan.rxerrorhandler.core.RxErrorHandler; #parse("File Header.java") @@ -391,16 +392,18 @@ public class ${NAME}Presenter extends BasePresenter<${NAME}Contract.Model, ${NAM private Application mApplication; private RxPermissions mRxPermissions; private ImageLoader mImageLoader; + private AppManager mAppManager; @Inject public ${NAME}Presenter (${NAME}Contract.Model model, ${NAME}Contract.View rootView , RxErrorHandler handler, Application application, RxPermissions rxPermissions - , ImageLoader imageLoader) { + , ImageLoader imageLoader, AppManager appManager) { super(model, rootView); this.mErrorHandler = handler; this.mApplication = application; this.mRxPermissions = rxPermissions; this.mImageLoader = imageLoader; + this.mAppManager = appManager; } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1071f7208e50f52c1a99a4fe717abaf74410b267..157a3ab7eea0f38a33fd6d1228e3d1307d16ddcd 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ + package="me.jessyan.mvparms.demo"> @@ -11,8 +11,8 @@ - + - + - diff --git a/app/src/main/java/me/jessyan/mvparms/demo/mvp/presenter/UserPresenter.java b/app/src/main/java/me/jessyan/mvparms/demo/mvp/presenter/UserPresenter.java index d03d879a532a523dc6c3458e779bcd2272af71eb..d9d23d6c046ef3395108eca957138054c0e23214 100644 --- a/app/src/main/java/me/jessyan/mvparms/demo/mvp/presenter/UserPresenter.java +++ b/app/src/main/java/me/jessyan/mvparms/demo/mvp/presenter/UserPresenter.java @@ -1,5 +1,8 @@ package me.jessyan.mvparms.demo.mvp.presenter; +import android.app.Application; + +import com.jess.arms.base.AppManager; import com.jess.arms.base.BaseActivity; import com.jess.arms.base.DefaultAdapter; import com.jess.arms.di.scope.ActivityScope; @@ -30,6 +33,8 @@ import rx.schedulers.Schedulers; public class UserPresenter extends BasePresenter { private RxErrorHandler mErrorHandler; private RxPermissions mRxPermissions; + private AppManager mAppManager; + private Application mApplication; private List mUsers = new ArrayList<>(); private DefaultAdapter mAdapter; private int lastUserId = 1; @@ -37,16 +42,17 @@ public class UserPresenter extends BasePresenter implements UserContr @Override public void launchActivity(Intent intent) { - + UiUtils.startActivity(intent); } @Override diff --git a/arms/src/main/java/com/jess/arms/base/AppManager.java b/arms/src/main/java/com/jess/arms/base/AppManager.java index 3260afe0364914a60f5acac013576feaa28cff52..8cf52b362f322a18adcec2a6652d433cba3a1c8c 100644 --- a/arms/src/main/java/com/jess/arms/base/AppManager.java +++ b/arms/src/main/java/com/jess/arms/base/AppManager.java @@ -5,9 +5,12 @@ import android.app.Application; import android.content.Context; import android.content.Intent; import android.os.Message; +import android.support.design.widget.Snackbar; +import android.view.View; import org.simple.eventbus.EventBus; import org.simple.eventbus.Subscriber; +import org.simple.eventbus.ThreadMode; import java.util.LinkedList; import java.util.List; @@ -15,7 +18,7 @@ import java.util.List; import timber.log.Timber; /** - * 用于管理所有activity + * 用于管理所有activity,和在前台的 activity * 可以通过直接持有AppManager对象执行对应方法 * 也可以通过eventbus post事件,远程遥控执行对应方法 * Created by jess on 14/12/2016 13:50 @@ -45,13 +48,18 @@ public class AppManager { /** * 通过eventbus post事件,远程遥控执行对应方法 */ - @Subscriber(tag = APPMANAGER_MESSAGE) - public void onReceive(Message message){ - switch (message.what){ + @Subscriber(tag = APPMANAGER_MESSAGE, mode = ThreadMode.MAIN) + public void onReceive(Message message) { + switch (message.what) { case START_ACTIVITY: - startActivity((Intent) message.obj); + if (message.obj == null) + break; + dispatchStart(message); break; case SHOW_SNACKBAR: + if (message.obj == null) + break; + showSnackbar((String) message.obj, message.arg1 == 0 ? false : true); break; case KILL_ALL: killAll(); @@ -62,24 +70,54 @@ public class AppManager { } } + private void dispatchStart(Message message) { + if (message.obj instanceof Intent) + startActivity((Intent) message.obj); + else if (message.obj instanceof Class) + startActivity((Class) message.obj); + return; + } + + + /** + * 使用snackbar显示内容 + * + * @param message + * @param isLong + */ + public void showSnackbar(String message, boolean isLong) { + if (getCurrentActivity() == null) { + Timber.tag(TAG).w("mCurrentActivity == null when showSnackbar(String,boolean)"); + return; + } + View view = getCurrentActivity().getWindow().getDecorView().findViewById(android.R.id.content); + Snackbar.make(view, message, isLong ? Snackbar.LENGTH_LONG : Snackbar.LENGTH_SHORT).show(); + } + + /** * 让在前台的activity,打开下一个activity + * * @param intent */ public void startActivity(Intent intent) { - if (getCurrentActivity()!=null){ - getCurrentActivity().startActivity(intent); + if (getCurrentActivity() == null) { + Timber.tag(TAG).w("mCurrentActivity == null when startActivity(Intent)"); + //如果没有前台的activity就使用new_task模式启动activity + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + mApplication.startActivity(intent); + return; } + getCurrentActivity().startActivity(intent); } /** * 让在前台的activity,打开下一个activity + * * @param activityClass */ public void startActivity(Class activityClass) { - if (getCurrentActivity()!=null){ - getCurrentActivity().startActivity(new Intent(mApplication,activityClass)); - } + startActivity(new Intent(mApplication, activityClass)); } /** @@ -104,6 +142,7 @@ public class AppManager { /** * 获得当前在前台的activity + * * @return */ public BaseActivity getCurrentActivity() { diff --git a/arms/src/main/java/com/jess/arms/base/BaseActivity.java b/arms/src/main/java/com/jess/arms/base/BaseActivity.java index 3434acb5d70595ace0c627f31d6204abea8ecff9..8d6fde9184bb8b5c0c64cfdb17fdcc4c5f13cdd7 100644 --- a/arms/src/main/java/com/jess/arms/base/BaseActivity.java +++ b/arms/src/main/java/com/jess/arms/base/BaseActivity.java @@ -1,12 +1,9 @@ package com.jess.arms.base; -import android.content.BroadcastReceiver; import android.content.Context; -import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.support.annotation.Nullable; -import android.support.design.widget.Snackbar; import android.util.AttributeSet; import android.view.View; @@ -25,9 +22,8 @@ import butterknife.Unbinder; public abstract class BaseActivity

extends RxAppCompatActivity { protected final String TAG = this.getClass().getSimpleName(); - private BroadcastReceiver mBroadcastReceiver; - public static final String ACTION_RECEIVER_ACTIVITY = "com.jess.activity"; protected BaseApplication mApplication; + private Unbinder mUnbinder; @Inject protected P mPresenter; @@ -35,7 +31,6 @@ public abstract class BaseActivity

extends RxAppCompatA private static final String LAYOUT_FRAMELAYOUT = "FrameLayout"; private static final String LAYOUT_RELATIVELAYOUT = "RelativeLayout"; public static final String IS_NOT_ADD_ACTIVITY_LIST = "is_add_activity_list";//是否加入到activity的list,管理 - private Unbinder mUnbinder; @Override @@ -134,7 +129,7 @@ public abstract class BaseActivity

extends RxAppCompatA * @return */ protected boolean useEventBus() { - return false; + return true; } @@ -148,37 +143,4 @@ public abstract class BaseActivity

extends RxAppCompatA protected abstract void initData(); - /** - * 用于处理当前activity需要 - */ - class ActivityReceriver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - if (intent != null) { - switch (intent.getStringExtra("type")) { - case "startActivity"://启动activity - Intent content = intent.getExtras().getParcelable("content"); - startActivity(content); - break; - case "showSnackbar"://显示snackbar - String text = intent.getStringExtra("content"); - boolean isLong = intent.getBooleanExtra("long", false); - View view = BaseActivity.this.getWindow().getDecorView().findViewById(android.R.id.content); - Snackbar.make(view, text, isLong ? Snackbar.LENGTH_LONG : Snackbar.LENGTH_SHORT).show(); - break; - case "killAll": -// LinkedList copy; -// synchronized (BaseActivity.class) { -// copy = new LinkedList(mApplication.getActivityList()); -// } -// for (BaseActivity baseActivity : copy) { -// baseActivity.finish(); -// } - // android.os.Process.killProcess(android.os.Process.myPid()); - break; - } - } - } - } - } diff --git a/arms/src/main/java/com/jess/arms/base/BaseApplication.java b/arms/src/main/java/com/jess/arms/base/BaseApplication.java index d6bd3d9e7b136d36a4f592f10728f44a2cd5e450..551ba6771f17bce67f55a3c7ddfa979d69134631 100644 --- a/arms/src/main/java/com/jess/arms/base/BaseApplication.java +++ b/arms/src/main/java/com/jess/arms/base/BaseApplication.java @@ -2,7 +2,6 @@ package com.jess.arms.base; import android.app.Application; import android.content.Context; -import android.content.Intent; import com.jess.arms.di.component.DaggerBaseComponent; import com.jess.arms.di.module.AppModule; @@ -147,14 +146,4 @@ public abstract class BaseApplication extends Application { return mApplication; } - - /** - * 退出所有activity - */ - public static void killAll() { - Intent intent = new Intent(BaseActivity.ACTION_RECEIVER_ACTIVITY); - intent.putExtra("type", "killAll"); - getContext().sendBroadcast(intent); - } - } diff --git a/arms/src/main/java/com/jess/arms/base/BaseFragment.java b/arms/src/main/java/com/jess/arms/base/BaseFragment.java index 51ef9b80ca9f922768b4bf58ac116f54829585a3..1b71d37898cf44d212c24ad38261fefd0f3dc07c 100644 --- a/arms/src/main/java/com/jess/arms/base/BaseFragment.java +++ b/arms/src/main/java/com/jess/arms/base/BaseFragment.java @@ -76,7 +76,7 @@ public abstract class BaseFragment

extends RxFragment { * @return */ protected boolean useEventBus() { - return false; + return true; } diff --git a/arms/src/main/java/com/jess/arms/utils/UiUtils.java b/arms/src/main/java/com/jess/arms/utils/UiUtils.java index 0ebe090818f2a8ec064200e3b6eb14234b4ca887..f16c43e28a65518cf4c3e656c8f7d4df4deaab41 100644 --- a/arms/src/main/java/com/jess/arms/utils/UiUtils.java +++ b/arms/src/main/java/com/jess/arms/utils/UiUtils.java @@ -2,12 +2,10 @@ package com.jess.arms.utils; import android.app.Activity; import android.content.Context; -import android.content.DialogInterface; import android.content.Intent; import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.os.Message; -import android.support.v7.app.AlertDialog; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.RecyclerView; import android.text.SpannableString; @@ -21,7 +19,6 @@ import android.view.WindowManager; import android.widget.TextView; import android.widget.Toast; -import com.jess.arms.base.BaseActivity; import com.jess.arms.base.BaseApplication; import org.simple.eventbus.EventBus; @@ -29,6 +26,9 @@ import org.simple.eventbus.EventBus; import java.security.MessageDigest; import static com.jess.arms.base.AppManager.APPMANAGER_MESSAGE; +import static com.jess.arms.base.AppManager.APP_EXIT; +import static com.jess.arms.base.AppManager.KILL_ALL; +import static com.jess.arms.base.AppManager.SHOW_SNACKBAR; import static com.jess.arms.base.AppManager.START_ACTIVITY; /** @@ -211,11 +211,11 @@ public class UiUtils { * @param text */ public static void SnackbarText(String text) { - Intent intent = new Intent(BaseActivity.ACTION_RECEIVER_ACTIVITY); - intent.putExtra("type", "showSnackbar"); - intent.putExtra("content", text); - intent.putExtra("long", false); - getContext().sendBroadcast(intent); + Message message = new Message(); + message.what = SHOW_SNACKBAR; + message.obj = text; + message.arg1 = 0; + EventBus.getDefault().post(message, APPMANAGER_MESSAGE); } /** @@ -224,11 +224,11 @@ public class UiUtils { * @param text */ public static void SnackbarTextWithLong(String text) { - Intent intent = new Intent(BaseActivity.ACTION_RECEIVER_ACTIVITY); - intent.putExtra("type", "showSnackbar"); - intent.putExtra("content", text); - intent.putExtra("long", true); - getContext().sendBroadcast(intent); + Message message = new Message(); + message.what = SHOW_SNACKBAR; + message.obj = text; + message.arg1 = 1; + EventBus.getDefault().post(message, APPMANAGER_MESSAGE); } @@ -260,8 +260,10 @@ public class UiUtils { * @param homeActivityClass */ public static void startActivity(Class homeActivityClass) { - Intent intent = new Intent(getContext(), homeActivityClass); - startActivity(intent); + Message message = new Message(); + message.what = START_ACTIVITY; + message.obj = homeActivityClass; + EventBus.getDefault().post(message, APPMANAGER_MESSAGE); } /** @@ -270,18 +272,10 @@ public class UiUtils { * @param */ public static void startActivity(Intent content) { -// Intent intent = new Intent(BaseActivity.ACTION_RECEIVER_ACTIVITY); -// intent.putExtra("type", "startActivity"); -// Bundle bundle = new Bundle(); -// bundle.putParcelable("content", content); -// intent.putExtras(bundle); -// getContext().sendBroadcast(intent); - - Message message = new Message(); message.what = START_ACTIVITY; message.obj = content; - EventBus.getDefault().post(message,APPMANAGER_MESSAGE); + EventBus.getDefault().post(message, APPMANAGER_MESSAGE); } /** @@ -316,34 +310,6 @@ public class UiUtils { } - /** - * 显示对话框提示 - * - * @param text - */ - - public static void showDialog(String text, Activity activity) { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle("提示"); - builder.setNegativeButton("确定", null); - builder.setMessage(text); - builder.show(); - } - - /** - * 显示对话框提示 - * - * @param text - */ - - public static void showDialogWithMethod(String text, Activity activity, DialogInterface.OnClickListener listener) { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle("提示"); - builder.setNegativeButton("确定", listener); - builder.setMessage(text); - builder.show(); - } - /** * 获得颜色 */ @@ -378,8 +344,6 @@ public class UiUtils { return false; } - private static int mCount; - /** * MD5 @@ -435,4 +399,17 @@ public class UiUtils { recyclerView.setItemAnimator(new DefaultItemAnimator()); } + + public static void killAll(){ + Message message = new Message(); + message.what = KILL_ALL; + EventBus.getDefault().post(message, APPMANAGER_MESSAGE); + } + + public static void exitApp(){ + Message message = new Message(); + message.what = APP_EXIT; + EventBus.getDefault().post(message, APPMANAGER_MESSAGE); + } + }