Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
门心叼龙
MVPArms
提交
567d00ec
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,发现更多精彩内容 >>
提交
567d00ec
编写于
10月 17, 2016
作者:
J
jessyan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add PermissionUtil
上级
375e31fa
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
224 addition
and
14 deletion
+224
-14
.idea/libraries/rxpermissions_0_7_0.xml
.idea/libraries/rxpermissions_0_7_0.xml
+12
-0
app/src/main/java/me/jessyan/mvparms/demo/di/component/AppComponent.java
...va/me/jessyan/mvparms/demo/di/component/AppComponent.java
+4
-0
app/src/main/java/me/jessyan/mvparms/demo/mvp/presenter/UserPresenter.java
.../me/jessyan/mvparms/demo/mvp/presenter/UserPresenter.java
+28
-13
arms/build.gradle
arms/build.gradle
+1
-0
arms/src/main/java/com/jess/arms/di/module/ClientModule.java
arms/src/main/java/com/jess/arms/di/module/ClientModule.java
+14
-1
arms/src/main/java/com/jess/arms/utils/PermissionUtil.java
arms/src/main/java/com/jess/arms/utils/PermissionUtil.java
+165
-0
未找到文件。
.idea/libraries/rxpermissions_0_7_0.xml
0 → 100644
浏览文件 @
567d00ec
<component
name=
"libraryTable"
>
<library
name=
"rxpermissions-0.7.0"
>
<CLASSES>
<root
url=
"jar://$PROJECT_DIR$/arms/build/intermediates/exploded-aar/com.tbruyelle.rxpermissions/rxpermissions/0.7.0/jars/classes.jar!/"
/>
<root
url=
"file://$PROJECT_DIR$/arms/build/intermediates/exploded-aar/com.tbruyelle.rxpermissions/rxpermissions/0.7.0/res"
/>
</CLASSES>
<JAVADOC
/>
<SOURCES>
<root
url=
"jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.tbruyelle.rxpermissions/rxpermissions/0.7.0/79f6c683535a4ac4fabd9a32b1caa0dbbde82953/rxpermissions-0.7.0-sources.jar!/"
/>
</SOURCES>
</library>
</component>
\ No newline at end of file
app/src/main/java/me/jessyan/mvparms/demo/di/component/AppComponent.java
浏览文件 @
567d00ec
...
...
@@ -7,6 +7,7 @@ import com.jess.arms.di.module.AppModule;
import
com.jess.arms.di.module.ClientModule
;
import
com.jess.arms.di.module.ImageModule
;
import
com.jess.arms.widget.imageloader.ImageLoader
;
import
com.tbruyelle.rxpermissions.RxPermissions
;
import
javax.inject.Singleton
;
...
...
@@ -35,6 +36,9 @@ public interface AppComponent {
//Rxjava错误处理管理类
RxErrorHandler
rxErrorHandler
();
//用于请求权限,适配6.0的权限管理
RxPermissions
rxPermissions
();
OkHttpClient
okHttpClient
();
//图片管理器,用于加载图片的管理类,默认使用glide,使用策略模式,可替换框架
...
...
app/src/main/java/me/jessyan/mvparms/demo/mvp/presenter/UserPresenter.java
浏览文件 @
567d00ec
...
...
@@ -4,6 +4,8 @@ import com.jess.arms.base.BaseActivity;
import
com.jess.arms.base.DefaultAdapter
;
import
com.jess.arms.di.scope.ActivityScope
;
import
com.jess.arms.mvp.BasePresenter
;
import
com.jess.arms.utils.PermissionUtil
;
import
com.tbruyelle.rxpermissions.RxPermissions
;
import
java.util.ArrayList
;
import
java.util.List
;
...
...
@@ -27,25 +29,38 @@ import rx.schedulers.Schedulers;
@ActivityScope
public
class
UserPresenter
extends
BasePresenter
<
UserContract
.
Model
,
UserContract
.
View
>
{
private
RxErrorHandler
mErrorHandler
;
private
RxPermissions
mRxPermissions
;
private
List
<
User
>
mUsers
=
new
ArrayList
<>();
private
DefaultAdapter
mAdapter
;
private
int
lastUserId
=
1
;
@Inject
public
UserPresenter
(
UserContract
.
Model
model
,
UserContract
.
View
rootView
,
RxErrorHandler
handler
)
{
public
UserPresenter
(
UserContract
.
Model
model
,
UserContract
.
View
rootView
,
RxErrorHandler
handler
,
RxPermissions
rxPermissions
)
{
super
(
model
,
rootView
);
this
.
mErrorHandler
=
handler
;
this
.
mRxPermissions
=
rxPermissions
;
mAdapter
=
new
UserAdapter
(
mUsers
);
mRootView
.
setAdapter
(
mAdapter
);
//设置Adapter
}
public
void
requestUsers
(
final
boolean
pullToRefresh
)
{
//请求外部存储权限用于适配android6.0的权限管理机制
PermissionUtil
.
externalStorage
(
new
PermissionUtil
.
RequestPermission
()
{
@Override
public
void
onRequestPermissionSuccess
()
{
//request permission success, do something.
}
},
mRxPermissions
,
mRootView
,
mErrorHandler
);
if
(
pullToRefresh
)
lastUserId
=
1
;
mModel
.
getUsers
(
lastUserId
,
pullToRefresh
)
.
subscribeOn
(
Schedulers
.
io
())
.
retryWhen
(
new
RetryWithDelay
(
3
,
2
))
//遇到错误时重试,第一个参数为重试几次,第二个参数为重试的间隔
.
retryWhen
(
new
RetryWithDelay
(
3
,
2
))
//遇到错误时重试,第一个参数为重试几次,第二个参数为重试的间隔
.
doOnSubscribe
(
new
Action0
()
{
@Override
public
void
call
()
{
...
...
@@ -65,17 +80,17 @@ public class UserPresenter extends BasePresenter<UserContract.Model, UserContrac
mRootView
.
endLoadMore
();
}
})
.
compose
(((
BaseActivity
)
mRootView
).<
List
<
User
>>
bindToLifecycle
())
//使用RXlifecycle,使subscription和activity一起销毁
.
compose
(((
BaseActivity
)
mRootView
).<
List
<
User
>>
bindToLifecycle
())
//使用RXlifecycle,使subscription和activity一起销毁
.
subscribe
(
new
ErrorHandleSubscriber
<
List
<
User
>>(
mErrorHandler
)
{
@Override
public
void
onNext
(
List
<
User
>
users
)
{
lastUserId
=
users
.
get
(
users
.
size
()
-
1
).
getId
();
//记录最后一个id,用于下一次请求
if
(
pullToRefresh
)
mUsers
.
clear
();
//如果是上拉刷新则晴空列表
for
(
User
user
:
users
)
{
mUsers
.
add
(
user
);
}
mAdapter
.
notifyDataSetChanged
();
//通知更新数据
}
});
@Override
public
void
onNext
(
List
<
User
>
users
)
{
lastUserId
=
users
.
get
(
users
.
size
()
-
1
).
getId
();
//记录最后一个id,用于下一次请求
if
(
pullToRefresh
)
mUsers
.
clear
();
//如果是上拉刷新则晴空列表
for
(
User
user
:
users
)
{
mUsers
.
add
(
user
);
}
mAdapter
.
notifyDataSetChanged
();
//通知更新数据
}
});
}
}
arms/build.gradle
浏览文件 @
567d00ec
...
...
@@ -49,6 +49,7 @@ dependencies {
provided
rootProject
.
ext
.
dependencies
[
"rxbinding-recyclerview-v7"
]
compile
rootProject
.
ext
.
dependencies
[
"rxcache"
]
compile
rootProject
.
ext
.
dependencies
[
"rxcache-jolyglot-gson"
]
compile
rootProject
.
ext
.
dependencies
[
"rxpermissions"
]
compile
rootProject
.
ext
.
dependencies
[
"retrofit"
]
compile
rootProject
.
ext
.
dependencies
[
"retrofit-converter-gson"
]
compile
rootProject
.
ext
.
dependencies
[
"retrofit-adapter-rxjava"
]
...
...
arms/src/main/java/com/jess/arms/di/module/ClientModule.java
浏览文件 @
567d00ec
...
...
@@ -5,6 +5,7 @@ import android.app.Application;
import
com.jess.arms.http.GlobeHttpHandler
;
import
com.jess.arms.http.RequestIntercept
;
import
com.jess.arms.utils.DataHelper
;
import
com.tbruyelle.rxpermissions.RxPermissions
;
import
java.io.File
;
import
java.util.concurrent.TimeUnit
;
...
...
@@ -130,7 +131,7 @@ public class ClientModule {
/**
* 提供处理Rxjava
处理
的管理器
* 提供处理Rxjava
错误
的管理器
*
* @return
*/
...
...
@@ -144,6 +145,18 @@ public class ClientModule {
.
build
();
}
/**
* 提供权限管理类,用于请求权限,适配6.0的权限管理
* @param application
* @return
*/
@Singleton
@Provides
RxPermissions
provideRxPermissions
(
Application
application
)
{
return
RxPermissions
.
getInstance
(
application
);
}
/**
* @param builder
* @param client
...
...
arms/src/main/java/com/jess/arms/utils/PermissionUtil.java
0 → 100644
浏览文件 @
567d00ec
package
com.jess.arms.utils
;
import
android.Manifest
;
import
com.jess.arms.base.BaseActivity
;
import
com.jess.arms.base.BaseFragment
;
import
com.jess.arms.mvp.BaseView
;
import
com.tbruyelle.rxpermissions.RxPermissions
;
import
com.trello.rxlifecycle.LifecycleTransformer
;
import
me.jessyan.rxerrorhandler.core.RxErrorHandler
;
import
me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber
;
import
timber.log.Timber
;
/**
* Created by jess on 17/10/2016 10:09
* Contact with jess.yan.effort@gmail.com
*/
public
class
PermissionUtil
{
public
static
final
String
TAG
=
"Permission"
;
public
interface
RequestPermission
{
void
onRequestPermissionSuccess
();
}
public
static
<
T
>
LifecycleTransformer
<
T
>
bindToLifecycle
(
BaseView
view
)
{
if
(
view
instanceof
BaseActivity
)
{
return
((
BaseActivity
)
view
).<
T
>
bindToLifecycle
();
}
else
if
(
view
instanceof
BaseFragment
)
{
return
((
BaseFragment
)
view
).<
T
>
bindToLifecycle
();
}
else
{
throw
new
IllegalArgumentException
(
"view isn't activity or fragment"
);
}
}
/**
* 请求摄像头权限
*/
public
static
void
launchCamera
(
final
RequestPermission
requestPermission
,
RxPermissions
rxPermissions
,
final
BaseView
view
,
RxErrorHandler
errorHandler
)
{
//先确保是否已经申请过摄像头,和写入外部存储的权限
boolean
isPermissionsGranted
=
rxPermissions
.
isGranted
(
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
)
&&
rxPermissions
.
isGranted
(
Manifest
.
permission
.
CAMERA
);
if
(
isPermissionsGranted
)
{
//已经申请过,直接执行操作
requestPermission
.
onRequestPermissionSuccess
();
}
else
{
//没有申请过,则申请
rxPermissions
.
request
(
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
,
Manifest
.
permission
.
CAMERA
)
.
compose
(
PermissionUtil
.<
Boolean
>
bindToLifecycle
(
view
))
//使用RXlifecycle,使subscription和activity一起销毁
.
subscribe
(
new
ErrorHandleSubscriber
<
Boolean
>(
errorHandler
)
{
@Override
public
void
onNext
(
Boolean
granted
)
{
if
(
granted
)
{
Timber
.
tag
(
TAG
).
d
(
"request WRITE_EXTERNAL_STORAGE and CAMERA success"
);
requestPermission
.
onRequestPermissionSuccess
();
}
else
{
view
.
showMessage
(
"request permissons failure"
);
}
}
});
}
}
/**
* 请求外部存储的权限
*/
public
static
void
externalStorage
(
final
RequestPermission
requestPermission
,
RxPermissions
rxPermissions
,
final
BaseView
view
,
RxErrorHandler
errorHandler
)
{
//先确保是否已经申请过摄像头,和写入外部存储的权限
boolean
isPermissionsGranted
=
rxPermissions
.
isGranted
(
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
);
if
(
isPermissionsGranted
)
{
//已经申请过,直接执行操作
requestPermission
.
onRequestPermissionSuccess
();
}
else
{
//没有申请过,则申请
rxPermissions
.
request
(
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
)
.
compose
(
PermissionUtil
.<
Boolean
>
bindToLifecycle
(
view
))
//使用RXlifecycle,使subscription和activity一起销毁
.
subscribe
(
new
ErrorHandleSubscriber
<
Boolean
>(
errorHandler
)
{
@Override
public
void
onNext
(
Boolean
granted
)
{
if
(
granted
)
{
Timber
.
tag
(
TAG
).
d
(
"request WRITE_EXTERNAL_STORAGE and CAMERA success"
);
requestPermission
.
onRequestPermissionSuccess
();
}
else
{
view
.
showMessage
(
"request permissons failure"
);
}
}
});
}
}
/**
* 请求发送短信权限
*/
public
static
void
sendSms
(
final
RequestPermission
requestPermission
,
RxPermissions
rxPermissions
,
final
BaseView
view
,
RxErrorHandler
errorHandler
)
{
//先确保是否已经申请过权限
boolean
isPermissionsGranted
=
rxPermissions
.
isGranted
(
Manifest
.
permission
.
SEND_SMS
);
if
(
isPermissionsGranted
)
{
//已经申请过,直接执行操作
requestPermission
.
onRequestPermissionSuccess
();
}
else
{
//没有申请过,则申请
rxPermissions
.
request
(
Manifest
.
permission
.
SEND_SMS
)
.
compose
(
PermissionUtil
.<
Boolean
>
bindToLifecycle
(
view
))
//使用RXlifecycle,使subscription和activity一起销毁
.
subscribe
(
new
ErrorHandleSubscriber
<
Boolean
>(
errorHandler
)
{
@Override
public
void
onNext
(
Boolean
granted
)
{
if
(
granted
)
{
Timber
.
tag
(
TAG
).
d
(
"request SEND_SMS success"
);
requestPermission
.
onRequestPermissionSuccess
();
}
else
{
view
.
showMessage
(
"request permissons failure"
);
}
}
});
}
}
/**
* 请求打电话权限
*/
public
static
void
callPhone
(
final
RequestPermission
requestPermission
,
RxPermissions
rxPermissions
,
final
BaseView
view
,
RxErrorHandler
errorHandler
)
{
//先确保是否已经申请过权限
boolean
isPermissionsGranted
=
rxPermissions
.
isGranted
(
Manifest
.
permission
.
CALL_PHONE
);
if
(
isPermissionsGranted
)
{
//已经申请过,直接执行操作
requestPermission
.
onRequestPermissionSuccess
();
}
else
{
//没有申请过,则申请
rxPermissions
.
request
(
Manifest
.
permission
.
CALL_PHONE
)
.
compose
(
PermissionUtil
.<
Boolean
>
bindToLifecycle
(
view
))
//使用RXlifecycle,使subscription和activity一起销毁
.
subscribe
(
new
ErrorHandleSubscriber
<
Boolean
>(
errorHandler
)
{
@Override
public
void
onNext
(
Boolean
granted
)
{
if
(
granted
)
{
Timber
.
tag
(
TAG
).
d
(
"request SEND_SMS success"
);
requestPermission
.
onRequestPermissionSuccess
();
}
else
{
view
.
showMessage
(
"request permissons failure"
);
}
}
});
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录