Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
门心叼龙
MVPArms
提交
8aeb6066
M
MVPArms
项目概览
门心叼龙
/
MVPArms
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
MVPArms
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
8aeb6066
编写于
12月 15, 2016
作者:
J
jessyan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add AppManager
上级
0f559893
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
103 addition
and
128 deletion
+103
-128
MVP_generator_solution
MVP_generator_solution
+7
-4
app/src/main/AndroidManifest.xml
app/src/main/AndroidManifest.xml
+4
-5
app/src/main/java/me/jessyan/mvparms/demo/mvp/presenter/UserPresenter.java
.../me/jessyan/mvparms/demo/mvp/presenter/UserPresenter.java
+8
-2
app/src/main/java/me/jessyan/mvparms/demo/mvp/ui/activity/UserActivity.java
...me/jessyan/mvparms/demo/mvp/ui/activity/UserActivity.java
+1
-1
arms/src/main/java/com/jess/arms/base/AppManager.java
arms/src/main/java/com/jess/arms/base/AppManager.java
+49
-10
arms/src/main/java/com/jess/arms/base/BaseActivity.java
arms/src/main/java/com/jess/arms/base/BaseActivity.java
+2
-40
arms/src/main/java/com/jess/arms/base/BaseApplication.java
arms/src/main/java/com/jess/arms/base/BaseApplication.java
+0
-11
arms/src/main/java/com/jess/arms/base/BaseFragment.java
arms/src/main/java/com/jess/arms/base/BaseFragment.java
+1
-1
arms/src/main/java/com/jess/arms/utils/UiUtils.java
arms/src/main/java/com/jess/arms/utils/UiUtils.java
+31
-54
未找到文件。
MVP_generator_solution
浏览文件 @
8aeb6066
...
...
@@ -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;
}
...
...
app/src/main/AndroidManifest.xml
浏览文件 @
8aeb6066
<?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控件使用,在设计图尺寸以外的其它尺寸手机上,也能达到和设计图一样的效果
-->
...
...
app/src/main/java/me/jessyan/mvparms/demo/mvp/presenter/UserPresenter.java
浏览文件 @
8aeb6066
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
...
...
app/src/main/java/me/jessyan/mvparms/demo/mvp/ui/activity/UserActivity.java
浏览文件 @
8aeb6066
...
...
@@ -119,7 +119,7 @@ public class UserActivity extends WEActivity<UserPresenter> implements UserContr
@Override
public
void
launchActivity
(
Intent
intent
)
{
UiUtils
.
startActivity
(
intent
);
}
@Override
...
...
arms/src/main/java/com/jess/arms/base/AppManager.java
浏览文件 @
8aeb6066
...
...
@@ -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
()
{
...
...
arms/src/main/java/com/jess/arms/base/BaseActivity.java
浏览文件 @
8aeb6066
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
fals
e
;
return
tru
e
;
}
...
...
@@ -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
;
}
}
}
}
}
arms/src/main/java/com/jess/arms/base/BaseApplication.java
浏览文件 @
8aeb6066
...
...
@@ -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
);
}
}
arms/src/main/java/com/jess/arms/base/BaseFragment.java
浏览文件 @
8aeb6066
...
...
@@ -76,7 +76,7 @@ public abstract class BaseFragment<P extends BasePresenter> extends RxFragment {
* @return
*/
protected
boolean
useEventBus
()
{
return
fals
e
;
return
tru
e
;
}
...
...
arms/src/main/java/com/jess/arms/utils/UiUtils.java
浏览文件 @
8aeb6066
...
...
@@ -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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录