提交 8aeb6066 编写于 作者: J jessyan

add AppManager

上级 0f559893
......@@ -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;
}
......
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="me.jessyan.mvparms.demo">
package="me.jessyan.mvparms.demo">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
......@@ -11,8 +11,8 @@
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<application
android:allowBackup="true"
android:name=".app.WEApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
......@@ -20,12 +20,11 @@
<activity android:name=".mvp.ui.activity.UserActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!-- autolayout meta
将设计图的宽高配置后,配合AutoLauout控件使用,在设计图尺寸以外的其它尺寸手机上,也能达到和设计图一样的效果
-->
......
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<UserContract.Model, UserContract.View> {
private RxErrorHandler mErrorHandler;
private RxPermissions mRxPermissions;
private AppManager mAppManager;
private Application mApplication;
private List<User> mUsers = new ArrayList<>();
private DefaultAdapter mAdapter;
private int lastUserId = 1;
......@@ -37,16 +42,17 @@ public class UserPresenter extends BasePresenter<UserContract.Model, UserContrac
@Inject
public UserPresenter(UserContract.Model model, UserContract.View rootView, RxErrorHandler handler
, RxPermissions rxPermissions) {
, RxPermissions rxPermissions, AppManager appManager, Application application) {
super(model, rootView);
this.mApplication = application;
this.mErrorHandler = handler;
this.mRxPermissions = rxPermissions;
this.mAppManager = appManager;
mAdapter = new UserAdapter(mUsers);
mRootView.setAdapter(mAdapter);//设置Adapter
}
public void requestUsers(final boolean pullToRefresh) {
//请求外部存储权限用于适配android6.0的权限管理机制
PermissionUtil.externalStorage(new PermissionUtil.RequestPermission() {
@Override
......
......@@ -119,7 +119,7 @@ public class UserActivity extends WEActivity<UserPresenter> implements UserContr
@Override
public void launchActivity(Intent intent) {
UiUtils.startActivity(intent);
}
@Override
......
......@@ -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() {
......
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<P extends BasePresenter> 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<P extends BasePresenter> 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<P extends BasePresenter> extends RxAppCompatA
* @return
*/
protected boolean useEventBus() {
return false;
return true;
}
......@@ -148,37 +143,4 @@ public abstract class BaseActivity<P extends BasePresenter> 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<BaseActivity> copy;
// synchronized (BaseActivity.class) {
// copy = new LinkedList<BaseActivity>(mApplication.getActivityList());
// }
// for (BaseActivity baseActivity : copy) {
// baseActivity.finish();
// }
// android.os.Process.killProcess(android.os.Process.myPid());
break;
}
}
}
}
}
......@@ -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);
}
}
......@@ -76,7 +76,7 @@ public abstract class BaseFragment<P extends BasePresenter> extends RxFragment {
* @return
*/
protected boolean useEventBus() {
return false;
return true;
}
......
......@@ -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);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册