Commit 47c7f575 authored by linfeng's avatar linfeng

Merge branch 'dev_im' of http://113.105.137.151:22280/lify/rvapp into master-price

# Conflicts:
#	module_mine/src/dev/res/layout/activity_mine.xml
parents 86217d72 56b007ae
......@@ -115,8 +115,7 @@ dependencies {
api 'com.jakewharton:butterknife:9.0.0-rc1'
annotationProcessor 'com.jakewharton:butterknife-compiler:9.0.0-rc1'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
// 进程保护
implementation 'com.fanjun:keeplive:1.1.10'
debugApi 'com.squareup.leakcanary:leakcanary-android:1.6.1'
releaseApi 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.1'
api 'cn.jiguang.sdk:jpush:3.3.4'
......
......@@ -224,9 +224,6 @@
<activity
android:name="com.rv.home.rv.module.ui.main.home.CarRentalListActivity"
android:screenOrientation="portrait" />
<activity
android:name="com.rv.home.rv.module.ui.main.home.CarRentalActivity"
android:screenOrientation="portrait" />
<activity
android:name="com.rv.home.rv.module.ui.main.home.CityListActivity"
android:screenOrientation="portrait" />
......
......@@ -78,6 +78,7 @@ dependencies {
annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'
api 'com.github.bumptech.glide:okhttp3-integration:4.3.1'
api 'com.davemorrissey.labs:subsampling-scale-image-view:3.9.0'
api 'pub.devrel:easypermissions:1.3.0'
implementation 'com.alibaba:fastjson:1.2.21'
api project(':component_utils')
// implementation files('libs/tbs_sdk_thirdapp_v3.6.0.1310_43612_sharewithdownload_withoutGame_obfs_20180706_163319.jar')
......
......@@ -38,6 +38,7 @@ import java.util.Map;
import butterknife.BindView;
import butterknife.OnClick;
import io.reactivex.functions.Consumer;
import pub.devrel.easypermissions.AppSettingsDialog;
/**
* 营地
......@@ -259,7 +260,7 @@ public class CampFragment extends BaseFragment<CampPresenter> implements BaseQui
/**
* 6.0以上手机做权限处理
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
new RxPermission(getActivity()).request(
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION
......@@ -268,8 +269,6 @@ public class CampFragment extends BaseFragment<CampPresenter> implements BaseQui
public void accept(Boolean aBoolean) throws Exception {
if (aBoolean == true) {
initGps();
} else {
getActivity().finish();
}
}
});
......
......@@ -57,6 +57,7 @@ import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import io.reactivex.functions.Consumer;
import pub.devrel.easypermissions.AppSettingsDialog;
import static com.ruiwenliu.wrapper.weight.webview.SafeWebView.hasKitkat;
......@@ -393,7 +394,7 @@ public class CampDetailActivity extends BaseStatusActivity<CampPresenter> {
/**
* 6.0以上手机做权限处理
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
new RxPermission(mActivity).request(
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION
......@@ -403,7 +404,10 @@ public class CampDetailActivity extends BaseStatusActivity<CampPresenter> {
if (aBoolean == true) {
initGps();
} else {
finish();
new AppSettingsDialog.Builder(mActivity).
setTitle("需要定位权限")
.setRationale("如果没有此权限,此应用程序可能无法正常工作,是否打开设置修改该应用权限")
.build().show();
}
}
});
......
......@@ -54,6 +54,7 @@ import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import io.reactivex.functions.Consumer;
import pub.devrel.easypermissions.AppSettingsDialog;
/**
* 拍拍生成海报
......@@ -218,7 +219,7 @@ public class PatGeneratePosterActivity extends BaseStatusActivity<PickerPresente
/**
* 6.0以上手机做权限处理
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
new RxPermission(mActivity).request(
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CAMERA).subscribe(new Consumer<Boolean>() {
......@@ -233,7 +234,11 @@ public class PatGeneratePosterActivity extends BaseStatusActivity<PickerPresente
mPresenter.openAlbum(false);
break;
}
}else{
new AppSettingsDialog.Builder(PatGeneratePosterActivity.this).
setTitle("需要获取相机权限、存储权限")
.setRationale("如果没有此权限,此应用程序可能无法正常工作,是否打开设置修改该应用权限")
.build().show();
}
}
});
......
......@@ -70,6 +70,7 @@ import butterknife.ButterKnife;
import butterknife.OnClick;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
import pub.devrel.easypermissions.AppSettingsDialog;
import top.zibin.luban.Luban;
import top.zibin.luban.OnCompressListener;
......@@ -531,7 +532,7 @@ public class PostPatActivity extends BaseStatusActivity<DiscoveryPresenter> {
/**
* 6.0以上手机做权限处理
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
new RxPermission(mActivity).request(
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CAMERA).subscribe(new Consumer<Boolean>() {
......@@ -546,7 +547,11 @@ public class PostPatActivity extends BaseStatusActivity<DiscoveryPresenter> {
selectPhoto();
break;
}
} else {
new AppSettingsDialog.Builder(PostPatActivity.this).
setTitle("需要获取相机权限、存储权限")
.setRationale("如果没有此权限,此应用程序可能无法正常工作,是否打开设置修改该应用权限")
.build().show();
}
}
});
......@@ -578,7 +583,7 @@ public class PostPatActivity extends BaseStatusActivity<DiscoveryPresenter> {
/**
* 6.0以上手机做权限处理
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
new RxPermission(this).request(
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION
......@@ -588,7 +593,10 @@ public class PostPatActivity extends BaseStatusActivity<DiscoveryPresenter> {
if (aBoolean == true) {
initGps();
} else {
finish();
new AppSettingsDialog.Builder(PostPatActivity.this).
setTitle("需要定位权限")
.setRationale("如果没有此权限,此应用程序可能无法正常工作,是否打开设置修改该应用权限")
.build().show();
}
}
});
......
......@@ -40,6 +40,7 @@ import java.util.Map;
import butterknife.BindView;
import butterknife.OnClick;
import io.reactivex.functions.Consumer;
import pub.devrel.easypermissions.AppSettingsDialog;
/**
* 问答 发布问题
......@@ -155,7 +156,7 @@ public class PublishingProblemActivity extends BaseStatusActivity<DiscoveryPrese
/**
* 6.0以上手机做权限处理
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
new RxPermission(this).request(
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION
......@@ -165,7 +166,10 @@ public class PublishingProblemActivity extends BaseStatusActivity<DiscoveryPrese
if (aBoolean == true) {
initGps();
} else {
finish();
new AppSettingsDialog.Builder(PublishingProblemActivity.this).
setTitle("需要定位权限")
.setRationale("如果没有此权限,此应用程序可能无法正常工作,是否打开设置修改该应用权限")
.build().show();
}
}
});
......
......@@ -62,6 +62,7 @@ import io.reactivex.functions.Consumer;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import pub.devrel.easypermissions.AppSettingsDialog;
/**
* 发短视频
......@@ -255,7 +256,7 @@ public class SendVideoActivity extends BaseStatusActivity<DiscoveryPresenter> {
/**
* 6.0以上手机做权限处理
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
new RxPermission(this).request(
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION
......@@ -265,7 +266,10 @@ public class SendVideoActivity extends BaseStatusActivity<DiscoveryPresenter> {
if (aBoolean == true) {
initGps();
} else {
finish();
new AppSettingsDialog.Builder(SendVideoActivity.this).
setTitle("需要定位权限")
.setRationale("如果没有此权限,此应用程序可能无法正常工作,是否打开设置修改该应用权限")
.build().show();
}
}
});
......
......@@ -40,6 +40,7 @@ import io.reactivex.functions.Consumer;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import pub.devrel.easypermissions.AppSettingsDialog;
import top.zibin.luban.Luban;
import top.zibin.luban.OnCompressListener;
......@@ -245,7 +246,7 @@ public class DrivingUploadActivity extends BaseStatusActivity<PickerPresenter> {
/**
* 6.0以上手机做权限处理
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
new RxPermission(mActivity).request(
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
......@@ -262,6 +263,11 @@ public class DrivingUploadActivity extends BaseStatusActivity<PickerPresenter> {
break;
}
}else {
new AppSettingsDialog.Builder(DrivingUploadActivity.this).
setTitle("需要获取相机权限、存储权限")
.setRationale("如果没有此权限,此应用程序可能无法正常工作,是否打开设置修改该应用权限")
.build().show();
}
}
});
......
......@@ -90,6 +90,7 @@ import butterknife.BindView;
import butterknife.OnClick;
import butterknife.Unbinder;
import io.reactivex.functions.Consumer;
import pub.devrel.easypermissions.AppSettingsDialog;
/**
* 首页
......@@ -1275,7 +1276,7 @@ public class HomeFragment extends BaseFragment<HomePresenter> implements Observa
/**
* 6.0以上手机做权限处理
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
new RxPermission(getActivity()).request(
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION
......@@ -1286,7 +1287,10 @@ public class HomeFragment extends BaseFragment<HomePresenter> implements Observa
initGps();
initCity();
} else {
getActivity().finish();
new AppSettingsDialog.Builder(getActivity()).
setTitle("需要定位权限")
.setRationale("如果没有此权限,此应用程序可能无法正常工作,是否打开设置修改该应用权限")
.build().show();
}
}
});
......
......@@ -50,6 +50,7 @@ import io.reactivex.functions.Consumer;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import pub.devrel.easypermissions.AppSettingsDialog;
/**
* Created :Auser
......@@ -90,7 +91,7 @@ public class EvaluationActivity extends BaseStatusActivity<PickerPresenter> {
private String mark2;
private String mark3;
private String no;
private String no;
public static Intent getIntent(Context context, String no) {
return new Intent(context, EvaluationActivity.class)
......@@ -121,7 +122,7 @@ public class EvaluationActivity extends BaseStatusActivity<PickerPresenter> {
protected void initView(Bundle savedInstanceState, TitleView titleView, Intent intent) {
titleView.setTitle(getString(R.string.rv_to_appointment_evaluation));
// dataBean = (OrderListBean.DataBeanX.DataBean) intent.getSerializableExtra("dataBean");
no = intent.getStringExtra("no");
no = intent.getStringExtra("no");
intiEt();
listImg = new ArrayList<>();
......@@ -204,14 +205,14 @@ public class EvaluationActivity extends BaseStatusActivity<PickerPresenter> {
}
private void setOrderDetail(OrderDetailBean result) {
dataBean = result.getData();
dataBean = result.getData();
if (dataBean != null) {
tvName.setText(dataBean.getName());
String icon ="";
if (!TextUtils.isEmpty(dataBean.getCoverPic())){
String icon = "";
if (!TextUtils.isEmpty(dataBean.getCoverPic())) {
icon = dataBean.getCoverPic();
}else {
} else {
icon = dataBean.getIcon();
}
GlideManager.getInstance(mActivity).loadImage(icon, ivCar);
......@@ -373,7 +374,7 @@ public class EvaluationActivity extends BaseStatusActivity<PickerPresenter> {
/**
* 6.0以上手机做权限处理
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
new RxPermission(mActivity).request(
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CAMERA).subscribe(new Consumer<Boolean>() {
......@@ -388,7 +389,11 @@ public class EvaluationActivity extends BaseStatusActivity<PickerPresenter> {
mPresenter.openAlbum(false);
break;
}
} else {
new AppSettingsDialog.Builder(EvaluationActivity.this).
setTitle("需要获取相机权限、存储权限")
.setRationale("如果没有此权限,此应用程序可能无法正常工作,是否打开设置修改该应用权限")
.build().show();
}
}
});
......
......@@ -17,7 +17,7 @@
<string name="rv_login_rest">重新获取</string>
<string name="rv_login_authorization_failure">第三方登录失败</string>
<string name="rv_login_success">登录成功</string>
<string name="rv_pwd_hint">请输入密码</string>
<string name="rv_pwd_hint">请输入密码,至少8位数字或字母</string>
<string name="rv_pwd_again_hint">请再次输入密码</string>
<string name="rv_registered">注册</string>
<string name="rv_registered_annotations">注册即表示同意滴房车</string>
......
......@@ -93,8 +93,8 @@ public class MineFragment extends BaseFragment<CommonPresenter> implements Simpl
TextView tvLogin;
@BindView(R2.id.tv_verified)
TextView tvVerified;
@BindView(R2.id.tv_membership_level)
TextView tvMembershipLevel;
// @BindView(R2.id.tv_membership_level)
// TextView tvMembershipLevel;
@BindView(R2.id.tv_member_hint)
TextView tvMemberHint;
@BindView(R2.id.tv_item_view_privileges)
......@@ -388,7 +388,7 @@ public class MineFragment extends BaseFragment<CommonPresenter> implements Simpl
tvVerified.setVisibility(View.GONE);
tvUserIdentity.setVisibility(View.GONE);
tvViewPrivileges.setText("查看会员特权");
tvMembershipLevel.setText("会员特权");
// tvMembershipLevel.setText("会员中心");
tvMemberHint.setText("免费用车- -天");
tvIntegral.setText("0");
tvWallet.setText("0");
......@@ -576,18 +576,18 @@ public class MineFragment extends BaseFragment<CommonPresenter> implements Simpl
private void setMember(UserInfoBean.UserInfo infos) {
if (0 == infos.getIsMember()) {
tvMembershipLevel.setText("会员特权");
// tvMembershipLevel.setText("会员中心");
tvMemberHint.setText("免费用车- -天");
tvMember.setText("普通用户");
} else if (1 == infos.getIsMember()) {
if (1 == infos.getMemberLevel()) { //1 普通会员 2 黄金会员 3 钻石会员
tvMembershipLevel.setText(" 普通会员特权");
// tvMembershipLevel.setText(" 会员中心");
tvMember.setText("普通会员");
} else if (2 == infos.getMemberLevel()) {
tvMembershipLevel.setText("黄金会员特权");
// tvMembershipLevel.setText("黄金会员特权");
tvMember.setText("黄金会员");
} else if (3 == infos.getMemberLevel()) {
tvMembershipLevel.setText("钻石会员特权");
// tvMembershipLevel.setText("钻石会员特权");
tvMember.setText("钻石会员");
}
tvMemberHint.setText("免费用车" + infos.getRentFreeDays() + "天");
......
......@@ -47,6 +47,7 @@ import io.reactivex.functions.Consumer;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import pub.devrel.easypermissions.AppSettingsDialog;
import top.zibin.luban.Luban;
import top.zibin.luban.OnCompressListener;
......@@ -242,7 +243,7 @@ public class IDCardCertificationActivity extends BaseStatusActivity<PickerPresen
/**
* 6.0以上手机做权限处理
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
new RxPermission(mActivity).request(
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CAMERA).subscribe(new Consumer<Boolean>() {
......@@ -258,7 +259,10 @@ public class IDCardCertificationActivity extends BaseStatusActivity<PickerPresen
break;
}
} else {
Toast.makeText(getApplicationContext(), "用户授权失败", Toast.LENGTH_SHORT).show();
new AppSettingsDialog.Builder(IDCardCertificationActivity.this).
setTitle("需要获取相机权限、存储权限")
.setRationale("如果没有此权限,此应用程序可能无法正常工作,是否打开设置修改该应用权限")
.build().show();
}
}
});
......
......@@ -56,6 +56,7 @@ import io.reactivex.functions.Consumer;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import pub.devrel.easypermissions.AppSettingsDialog;
/**
* 个人资料
......@@ -325,7 +326,7 @@ public class PersonalInformationActivity extends BaseStatusActivity<PickerPresen
/**
* 6.0以上手机做权限处理
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
new RxPermission(mActivity).request(
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CAMERA).subscribe(new Consumer<Boolean>() {
......@@ -341,6 +342,11 @@ public class PersonalInformationActivity extends BaseStatusActivity<PickerPresen
break;
}
}else{
new AppSettingsDialog.Builder(PersonalInformationActivity.this).
setTitle("需要获取相机权限、存储权限")
.setRationale("如果没有此权限,此应用程序可能无法正常工作,是否打开设置修改该应用权限")
.build().show();
}
}
});
......
......@@ -25,6 +25,7 @@ import com.rv.home.rv.module.ui.login.LoginRvActivity;
import com.rv.home.rv.module.ui.login.RegisteredActivity;
import com.rv.rvmine.R;
import com.rv.rvmine.R2;
import com.rv.version.DownListenerManager;
import com.rv.version.bean.VersionCheckBean;
import com.rv.version.util.UpdateAppUtils;
import com.yuyife.okgo.OkGoUtil;
......@@ -46,7 +47,7 @@ import static com.ruiwenliu.wrapper.other.TagAliasOperatorHelper.sequence;
* 设置
*/
public class SettingActivity extends BaseStatusActivity<CommonPresenter> {
public class SettingActivity extends BaseStatusActivity<CommonPresenter> implements DownListenerManager.DownListener {
@BindView(R2.id.tv_version)
TextView tvVersion;
......@@ -55,6 +56,8 @@ public class SettingActivity extends BaseStatusActivity<CommonPresenter> {
private UpdateAppUtils updateAppUtils;
private VersionCheckBean versionCheckBean = null;
private String versionName;
@Override
protected int setLayout() {
return R.layout.activity_setting;
......@@ -78,6 +81,15 @@ public class SettingActivity extends BaseStatusActivity<CommonPresenter> {
tvOutSign.setText("退出登录");
tvOutSign.setBackgroundResource(R.drawable.shape_rv_button_light_gray);
}
DownListenerManager.getInstance().addDownListener(this);
versionName = UpdateAppUtils.getAppVersionName(this);
if (DownListenerManager.getInstance().isDown()) {
tvVersion.setText("下载中_" + DownListenerManager.getInstance().getProgress() + "%");
} else {
tvVersion.setText("当前版本 V" + versionName);
}
}
private void initRxBus() {
......@@ -92,7 +104,6 @@ public class SettingActivity extends BaseStatusActivity<CommonPresenter> {
});
}
@Override
protected void loadData(Bundle savedInstanceState, Intent intent) {
super.loadData(savedInstanceState, intent);
......@@ -125,6 +136,12 @@ public class SettingActivity extends BaseStatusActivity<CommonPresenter> {
}
}
@Override
public void onDestroy() {
super.onDestroy();
DownListenerManager.getInstance().removeDownListener(this);
}
@OnClick({R2.id.rl_item_change_password, R2.id.ll_item_app_push, R2.id.rl_item_clear_cache, R2.id.rl_item_check_for_updates, R2.id.rl_item_about_us, R2.id.tv_out_sign})
public void onViewClicked(View view) {
......@@ -149,22 +166,24 @@ public class SettingActivity extends BaseStatusActivity<CommonPresenter> {
} else if (id == R.id.rl_item_check_for_updates) {
//检查更新
if (versionCheckBean != null && versionCheckBean.isRel() == false) {
if (versionCheckBean != null && !TextUtils.isEmpty(versionCheckBean.getData().getDownloadUrl())) {
updateAppUtils.serverVersionCode(versionCheckBean.getData().getWeigh())
.serverVersionName(versionCheckBean.getData().getVersionName())
.apkPath(versionCheckBean.getData().getDownloadUrl())
.updateInfo(versionCheckBean.getData().getContent())
.apkSize(versionCheckBean.getData().getPackagesize())
.isForce(versionCheckBean.getData().getIsCompel() == 0 ? false : true)
.isShowToast(true)
.update();
if (!DownListenerManager.getInstance().isDown())
//检查更新
if (versionCheckBean != null && versionCheckBean.isRel() == false) {
if (versionCheckBean != null && !TextUtils.isEmpty(versionCheckBean.getData().getDownloadUrl())) {
updateAppUtils.serverVersionCode(versionCheckBean.getData().getWeigh())
.serverVersionName(versionCheckBean.getData().getVersionName())
.apkPath(versionCheckBean.getData().getDownloadUrl())
.updateInfo(versionCheckBean.getData().getContent())
.apkSize(versionCheckBean.getData().getPackagesize())
.isForce(versionCheckBean.getData().getIsCompel() == 0 ? false : true)
.isShowToast(true)
.update();
}
} else {
Toast.makeText(getApplicationContext(), "当前已是最新版本", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(getApplicationContext(), "当前已是最新版本", Toast.LENGTH_SHORT).show();
}
} else if (id == R.id.rl_item_about_us) {
//关于我们
......@@ -204,8 +223,6 @@ public class SettingActivity extends BaseStatusActivity<CommonPresenter> {
private void checkVersion() {
Map<String, Object> headMap = new LinkedHashMap<>();
String versionName = UpdateAppUtils.getAppVersionName(this);
tvVersion.setText("当前版本 V" + versionName);
if (!TextUtils.isEmpty(versionName)) {
mPresenter.getData(0, String.format(ApiConfig.HTTP_URL_VERSION_CHECK, versionName), VersionCheckBean.class, headMap, false);
}
......@@ -233,16 +250,45 @@ public class SettingActivity extends BaseStatusActivity<CommonPresenter> {
}
String[] content = file.list();//取得当前目录下所有文件和文件夹
for (String name : content) {
File temp = new File(path, name);
if (temp.isDirectory()) {//判断是否是目录
deleteDir(temp.getAbsolutePath());//递归调用,删除目录里的内容
temp.delete();//删除空目录
} else {
if (!temp.delete()) {//直接删除文件
if (content != null && content.length > 0) {
for (String name : content) {
File temp = new File(path, name);
if (temp.isDirectory()) {//判断是否是目录
if (temp != null && temp.exists() && temp.getAbsolutePath() != null && !temp.getAbsolutePath().isEmpty()) {
deleteDir(temp.getAbsolutePath());//递归调用,删除目录里的内容
temp.delete();//删除空目录
}
} else {
if (!temp.delete()) {//直接删除文件
}
}
}
}
return true;
}
@Override
public void pending() {
tvVersion.setText("下载准备中...");
}
@Override
public void paused() {
tvVersion.setText("下载暂停");
}
@Override
public void progress(int progerss) {
tvVersion.setText("下载中_" + progerss + "%");
}
@Override
public void completed() {
tvVersion.setText("下载完成");
}
@Override
public void error() {
tvVersion.setText("下载异常");
}
}
......@@ -321,7 +321,7 @@
android:id="@+id/tv_membership_level"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="会员特权"
android:text="会员中心"
android:textColor="@color/colorMain"
android:textSize="@dimen/text_14"
android:textStyle="bold" />
......
......@@ -119,7 +119,6 @@
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:drawableRight="@drawable/common_icon_rig_black"
android:drawablePadding="@dimen/size_3"
android:textColor="#999999"
android:textSize="@dimen/sp_12" />
......
This diff is collapsed.
......@@ -67,6 +67,7 @@ import java.util.List;
import butterknife.BindView;
import butterknife.OnClick;
import io.reactivex.functions.Consumer;
import pub.devrel.easypermissions.AppSettingsDialog;
/**
* 旅游
......@@ -565,7 +566,7 @@ public class TourismFragment extends BaseFragment<TourismPresenter> implements S
/**
* 6.0以上手机做权限处理
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
new RxPermission(getActivity()).request(
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION
......@@ -575,8 +576,6 @@ public class TourismFragment extends BaseFragment<TourismPresenter> implements S
if (aBoolean == true) {
initGps();
initCity();
} else {
getActivity().finish();
}
}
});
......
......@@ -51,6 +51,7 @@ import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import io.reactivex.functions.Consumer;
import pub.devrel.easypermissions.AppSettingsDialog;
/**
* 预约信息
......@@ -290,7 +291,7 @@ public class ReservationInformationActivity extends BaseStatusActivity<CarPurcha
/**
* 6.0以上手机做权限处理
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
new RxPermission(mActivity).request(
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION
......@@ -300,7 +301,10 @@ public class ReservationInformationActivity extends BaseStatusActivity<CarPurcha
if (aBoolean == true) {
initGps();
} else {
finish();
new AppSettingsDialog.Builder(ReservationInformationActivity.this).
setTitle("需要定位权限")
.setRationale("如果没有此权限,此应用程序可能无法正常工作,是否打开设置修改该应用权限")
.build().show();
}
}
});
......
......@@ -9,6 +9,7 @@ import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.Editable;
......@@ -57,6 +58,8 @@ import java.io.File;
import java.util.ArrayList;
import java.util.List;
import pub.devrel.easypermissions.AppSettingsDialog;
public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements IChatView, ChatMessageListener, View.OnClickListener, RecordListener {
private ImageButton voiceImgBtn;
......@@ -204,6 +207,12 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
public void call(boolean isVoice) {
presenter.realDial(isVoice ? 1 : 2, null);
}
@Override
public void sendCancel(ChatMessage message) {
message.setMessageType(MessageTypeEnum.CANCEL);
presenter.readySend(message);
}
};
public static Intent getIntent(Context context, String targetUserId, String targetName) {
......@@ -263,6 +272,7 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
mChatFaceViewStub = findViewById(R.id.chat_face_view_stub);
recycleContent = findViewById(R.id.recycle_content);
recycleContent.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
recycleContent.setItemAnimator(new DefaultItemAnimator());
adapter = new ChatContentAdapter(getApplicationContext(), mLoginUserId, messages, clickItemListener);
recycleContent.setAdapter(adapter);
recycleContent.addOnScrollListener(new RecyclerView.OnScrollListener() {
......@@ -333,7 +343,10 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
voiceImgBtn.setVisibility(View.GONE);
closeKeyboard();
} else {
Toast.makeText(getApplicationContext(), "用户授权失败", Toast.LENGTH_SHORT).show();
new AppSettingsDialog.Builder(ChatActivity.this).
setTitle("需要获取麦克风权限、存储权限")
.setRationale("如果没有此权限,此应用程序可能无法正常工作,是否打开设置修改该应用权限")
.build().show();
}
});
} else {
......@@ -364,7 +377,10 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
if (aBoolean == true) {
presenter.realDial(callType, null);
} else {
Toast.makeText(getApplicationContext(), "用户授权失败", Toast.LENGTH_SHORT).show();
new AppSettingsDialog.Builder(ChatActivity.this).
setTitle("需要录音权限")
.setRationale("如果没有此权限,此应用程序可能无法正常工作,是否打开设置修改该应用权限")
.build().show();
}
});
} else {
......@@ -380,7 +396,10 @@ public class ChatActivity extends BaseStatusActivity<CommonPresenter> implements
if (aBoolean == true) {
presenter.realDial(callType, null);
} else {
Toast.makeText(getApplicationContext(), "用户授权失败", Toast.LENGTH_SHORT).show();
new AppSettingsDialog.Builder(ChatActivity.this).
setTitle("需要视频权限")
.setRationale("如果没有此权限,此应用程序可能无法正常工作,是否打开设置修改该应用权限")
.build().show();
}
});
} else {
......
......@@ -4,11 +4,13 @@ import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.ProgressBar;
import android.widget.TextView;
......@@ -17,12 +19,14 @@ import com.bumptech.glide.request.RequestOptions;
import com.ruiwenliu.wrapper.bean.UserInfoBean;
import com.ruiwenliu.wrapper.util.glide.GlideManager;
import com.rv.component.utils.CacheEnum;
import com.rv.component.utils.DisplayUtil;
import com.rv.component.utils.RvCache;
import com.rv.im.ChatHolderFactory;
import com.rv.im.R;
import com.rv.im.audio_x.VoiceAnimView;
import com.rv.im.audio_x.VoicePlayer;
import com.rv.im.db.service.ChatMessageServiceImp;
import com.rv.im.db.service.IChatMessageService;
import com.rv.im.db.table.ChatMessage;
import com.rv.im.glide.GlideOptions;
import com.rv.im.glide.TransformationUtils;
......@@ -52,6 +56,12 @@ public class ChatContentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
void voicePlay(ChatMessage message);
void call(boolean isVoice);
/******
* 撤销
* @param message
*/
void sendCancel(ChatMessage message);
}
public ChatContentAdapter(Context context, String mLoginUserId, List<ChatMessage> list, OnClickItemListener listener) {
......@@ -205,11 +215,57 @@ public class ChatContentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
holder.tvRead.setVisibility(View.GONE);
}
holder.ivFailed.setOnClickListener(v -> listener.reSend(bean));
// holder.chatText.setOnLongClickListener(v -> {
// if (System.currentTimeMillis() - bean.getTimeSend() > 60 * 5 * 1000) {
// // 删除
// showPopwindow(0, holder.itemView, bean);
// } else {
// // 撤销
// showPopwindow(1, holder.itemView, bean);
// }
// return false;
// });
if (!TextUtils.isEmpty(myHeaderUrl)) {
GlideManager.getInstance(mContext).loadImage(myHeaderUrl, holder.ivHeader);
}
}
private void showPopwindow(int type, View view, ChatMessage message) {
View contentView = LayoutInflater.from(mContext).inflate(R.layout.view_chat_content_del, null);
final PopupWindow popupWindow = new PopupWindow(contentView, DisplayUtil.dip2px(mContext, 200f), DisplayUtil.dip2px(mContext, 40f));
popupWindow.setOutsideTouchable(true);
popupWindow.setTouchable(true);
TextView tvDel = contentView.findViewById(R.id.tv_del);
if (type == 0) {
tvDel.setText("删除");
} else {
tvDel.setText("撤销");
}
tvDel.setOnClickListener(v -> {
if (type == 0) { /// 删除
getDbService().deleteMessage(message);
notifyItemRemoved(messageList.indexOf(message));
messageList.remove(message);
} else { // 撤销
if (listener != null) {
listener.sendCancel(message);
notifyItemRemoved(messageList.indexOf(message));
messageList.remove(message);
}
}
popupWindow.dismiss();
});
popupWindow.showAtLocation(view, Gravity.CENTER_HORIZONTAL, 0, 0);
}
public IChatMessageService getDbService() {
return ChatMessageServiceImp.getInstance(mContext);
}
private void setFromTextContentView(ChatMessage bean, MsgFromTextHolder holder) {
showTime(holder.tvSendTime, bean);
......
......@@ -98,6 +98,26 @@ public class MessageDao {
}
}
/*****
* 删除消息
* @param message
*/
public void deleteMessage(ChatMessage message){
if (dao == null) {
LogUtil.e(TAG, "dao is null");
return;
}
if (message == null) {
LogUtil.e(TAG, "message is null");
return;
}
try {
dao.delete(message);
} catch (SQLException e) {
e.printStackTrace();
}
}
/*******
* 判断是否存在该消息
* @param message
......
......@@ -95,6 +95,11 @@ public class ChatMessageServiceImp implements IChatMessageService {
return dao.getPages(userId);
}
@Override
public void deleteMessage(ChatMessage message) {
dao.deleteMessage(message);
}
public void release() {
instance = null;
}
......
......@@ -30,4 +30,6 @@ public interface IChatMessageService {
int getPages(String userId);
void deleteMessage(ChatMessage message) ;
}
......@@ -9,7 +9,9 @@ public enum MessageTypeEnum {
PIC(2, "图片"),
VOICE(3, "语音"),
VOLTE_CALL(5, "语音通话"),
VIDEO_CALL(6, "视频通话");
VIDEO_CALL(6, "视频通话"),
CANCEL(7,"撤销") ;
private int type;
private String name;
......
......@@ -15,6 +15,7 @@ import android.util.Log;
import android.widget.Toast;
import com.ruiwenliu.wrapper.util.permission.RxPermission;
import com.rv.im.ChatActivity;
import com.rv.im.Constants;
import com.rv.im.ImSetting;
import com.rv.im.call.Jitsi_pre;
......@@ -37,6 +38,7 @@ import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import pub.devrel.easypermissions.AppSettingsDialog;
import top.zibin.luban.Luban;
import top.zibin.luban.OnCompressListener;
......@@ -97,7 +99,10 @@ public class ChatPresenterImp implements IChatPresenter {
openAlbum();
}
} else {
Toast.makeText(weakReference.get(), "用户授权失败", Toast.LENGTH_SHORT).show();
new AppSettingsDialog.Builder((Activity) weakReference.get()).
setTitle("需要获取相机权限、存储权限")
.setRationale("如果没有此权限,此应用程序可能无法正常工作,是否打开设置修改该应用权限")
.build().show();
}
});
} else {
......@@ -334,7 +339,10 @@ public class ChatPresenterImp implements IChatPresenter {
if (aBoolean == true) {
showFileChoiceDialog();
} else {
Toast.makeText(weakReference.get(), "用户授权失败", Toast.LENGTH_SHORT).show();
new AppSettingsDialog.Builder((Activity) weakReference.get()).
setTitle("需要获取存储权限")
.setRationale("如果没有此权限,此应用程序可能无法正常工作,是否打开设置修改该应用权限")
.build().show();
}
});
} else {
......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_marginRight="@dimen/size_20"
android:layout_marginLeft="@dimen/size_20"
android:layout_height="@dimen/size_50"
android:gravity="center"
android:background="@color/white">
<TextView
android:id="@+id/tv_del"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:textColor="@color/colorMain"
android:textSize="@dimen/sp_12" />
</LinearLayout>
......@@ -234,7 +234,7 @@ public class MemberCenterActivity extends BaseStatusActivity<MemberPresenter> {
for (MemberListBean.MemberCard card : listBean.getData()) {
MemberItemView view = new MemberItemView(this);
view.setData(card);
view.setHasAgree(hasAgree);
// view.setHasAgree(hasAgree);
view.setListener(payListener);
if (listBean.getData().indexOf(card) == listBean.getData().size() - 1)
view.hiddenLine();
......@@ -295,15 +295,15 @@ public class MemberCenterActivity extends BaseStatusActivity<MemberPresenter> {
@Override
public void checkAgreement(boolean b) {
hasAgree = b;
int count = ll_cardview_content.getChildCount();
if (count > 0) {
for (int i = 0; i < count; i++) {
View view = ll_cardview_content.getChildAt(i);
if (view instanceof MemberItemView) {
((MemberItemView) view).setHasAgree(hasAgree);
}
}
}
// int count = ll_cardview_content.getChildCount();
// if (count > 0) {
// for (int i = 0; i < count; i++) {
// View view = ll_cardview_content.getChildAt(i);
// if (view instanceof MemberItemView) {
// ((MemberItemView) view).setHasAgree(hasAgree);
// }
// }
// }
}
};
......
......@@ -18,6 +18,7 @@ import android.widget.TextView;
import com.rv.member.R;
import com.rv.member.bean.MemberListBean;
import java.math.BigDecimal;
import java.util.List;
public class GridMemerAdapter extends BaseAdapter {
......@@ -74,7 +75,9 @@ public class GridMemerAdapter extends BaseAdapter {
holder = (ViewHolder) view.getTag();
}
SpannableString s = new SpannableString("¥ " + memberCard.getPrice());
String price = dealPrice(memberCard.getPrice());
SpannableString s = new SpannableString("¥ " + price);
s.setSpan(new AbsoluteSizeSpan(10, true), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
s.setSpan(new AbsoluteSizeSpan(20, true), 1, s.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
......@@ -119,6 +122,11 @@ public class GridMemerAdapter extends BaseAdapter {
return view;
}
private String dealPrice(BigDecimal value){
BigDecimal noZeros = value.stripTrailingZeros();
return noZeros.toPlainString();
}
private class ViewHolder {
LinearLayout rl_content;
TextView tv_type;
......
......@@ -56,7 +56,7 @@ public class LoginView extends LinearLayout {
if (info != null) {
if (info.getIsMember() == 0) {
llLogin.setBackgroundResource(R.drawable.bg_normal_user);
ivMemberLevel.setVisibility(GONE);
ivMemberLevel.setVisibility(INVISIBLE);
} else {
switch (info.getMemberLevel()) {
case 1:
......
......@@ -19,10 +19,10 @@ public class MemberItemView extends LinearLayout {
private TextView tv_member_type;
private MemberCardView mcv_discount, mcv_free_day, mcv_free_outdoors;
private TextView tv_describe;
private Button btn_buy;
// private Button btn_buy;
private View viewLine;
private boolean hasAgree = false;
// private boolean hasAgree = false;
private MemberCenterActivity.PayListener listener;
private MemberListBean.MemberCard memberCard = null;
......@@ -37,9 +37,9 @@ public class MemberItemView extends LinearLayout {
initView();
}
public void setHasAgree(boolean hasAgree) {
this.hasAgree = hasAgree;
}
// public void setHasAgree(boolean hasAgree) {
// this.hasAgree = hasAgree;
// }
public void setData(MemberListBean.MemberCard card) {
this.memberCard = card;
......@@ -61,7 +61,7 @@ public class MemberItemView extends LinearLayout {
mcv_free_day = view.findViewById(R.id.mcv_free_day);
mcv_free_outdoors = view.findViewById(R.id.mcv_free_outdoors);
tv_describe = view.findViewById(R.id.tv_describe);
btn_buy = view.findViewById(R.id.btn_buy);
// btn_buy = view.findViewById(R.id.btn_buy);
viewLine = view.findViewById(R.id.view_line);
addView(view);
}
......@@ -69,28 +69,28 @@ public class MemberItemView extends LinearLayout {
private void setData() {
if (!TextUtils.isEmpty(memberCard.getName())) {
tv_member_type.setText(memberCard.getName());
btn_buy.setText("立即开通" + memberCard.getName());
if (memberCard.getLevel() == 1) {
btn_buy.setBackgroundResource(R.drawable.shape_rv_bg_open_normal_member);
} else if (memberCard.getLevel() == 2) {
btn_buy.setBackgroundResource(R.drawable.shape_rv_bg_open_gold_member);
} else {
btn_buy.setBackgroundResource(R.drawable.shape_rv_bg_open_diamond_member);
}
// btn_buy.setText("立即开通" + memberCard.getName());
// if (memberCard.getLevel() == 1) {
// btn_buy.setBackgroundResource(R.drawable.shape_rv_bg_open_normal_member);
// } else if (memberCard.getLevel() == 2) {
// btn_buy.setBackgroundResource(R.drawable.shape_rv_bg_open_gold_member);
// } else {
// btn_buy.setBackgroundResource(R.drawable.shape_rv_bg_open_diamond_member);
// }
}
btn_buy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (!hasAgree) {
Toast.makeText(getContext(), "需同意服务协议", Toast.LENGTH_SHORT).show();
return;
}
if (listener != null) {
listener.pay(memberCard);
}
}
});
// btn_buy.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View view) {
// if (!hasAgree) {
// Toast.makeText(getContext(), "需同意服务协议", Toast.LENGTH_SHORT).show();
// return;
// }
// if (listener != null) {
// listener.pay(memberCard);
// }
// }
// });
if (!TextUtils.isEmpty(memberCard.getDescribe())) {
tv_describe.setText(memberCard.getDescribe());
}
......
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="30dp" />
<solid android:color="#464546" />
<solid android:color="#4F4F50" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="30dp" />
<solid android:color="#E7C48B" />
<solid android:color="#DDBA78" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="30dp" />
<solid android:color="#AAAEBA" />
<solid android:color="#9698A3" />
</shape>
\ No newline at end of file
......@@ -75,18 +75,18 @@
android:layout_marginBottom="13dp"
android:textSize="@dimen/dp_10" />
<Button
android:visibility="gone"
android:id="@+id/btn_buy"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_40"
android:layout_marginLeft="@dimen/size_20"
android:layout_marginTop="13dp"
android:layout_marginRight="@dimen/size_20"
android:background="@drawable/shape_rv_bg_dark_yellow"
android:gravity="center"
android:textColor="@color/white"
android:textSize="@dimen/text_16" />
<!--<Button-->
<!--android:visibility="gone"-->
<!--android:id="@+id/btn_buy"-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="@dimen/dp_40"-->
<!--android:layout_marginLeft="@dimen/size_20"-->
<!--android:layout_marginTop="13dp"-->
<!--android:layout_marginRight="@dimen/size_20"-->
<!--android:background="@drawable/shape_rv_bg_dark_yellow"-->
<!--android:gravity="center"-->
<!--android:textColor="@color/white"-->
<!--android:textSize="@dimen/text_16" />-->
<View
android:id="@+id/view_line"
......
......@@ -147,13 +147,14 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="7dp"
android:gravity="center_vertical|right"
android:layout_marginLeft="@dimen/size_5"
android:gravity="center_vertical|left"
android:orientation="horizontal">
<ImageView
android:id="@+id/img_agree"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_width="34dp"
android:layout_height="34dp"
android:paddingLeft="@dimen/dp_10"
android:paddingTop="@dimen/dp_10"
android:paddingRight="@dimen/size_5"
......
......@@ -31,6 +31,10 @@ android {
pro {
}
}
compileOptions {
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
}
}
......
......@@ -10,12 +10,6 @@
<application>
<receiver android:name="com.rv.version.receiver.UpdateAppReceiver">
<intent-filter>
<action android:name="teprinciple.update" />
</intent-filter>
</receiver>
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
......
package com.rv.version;
import android.os.Handler;
import android.os.Looper;
import java.util.ArrayList;
import java.util.List;
public class DownListenerManager {
private static DownListenerManager instance = null;
private boolean isDown = false; // 是否正在下载
private List<DownListener> listeners;
private int progress = 0;
private Handler mHandler = new Handler(Looper.getMainLooper());
private DownListenerManager() {
listeners = new ArrayList<>();
}
public static DownListenerManager getInstance() {
if (instance == null) {
instance = new DownListenerManager();
}
return instance;
}
public boolean isDown() {
return isDown;
}
public void setDown(boolean down) {
isDown = down;
}
public int getProgress() {
return progress;
}
public void setProgress(int progress) {
this.progress = progress;
}
public void addDownListener(DownListener listener) {
listeners.add(listener);
}
public void removeDownListener(DownListener listener) {
listeners.remove(listener);
}
public void notifyPendChange() {
setProgress(progress);
if (listeners.size() <= 0) {
return;
}
mHandler.post(() -> {
for (DownListener listener : listeners) {
listener.pending();
}
});
}
public void notifyProgressChange(final int progress) {
setProgress(progress);
if (listeners.size() <= 0) {
return;
}
mHandler.post(() -> {
for (DownListener listener : listeners) {
listener.progress(progress);
}
});
}
public void notifyCompletedChange() {
if (listeners.size() <= 0) {
return;
}
mHandler.post(() -> {
for (DownListener listener : listeners) {
listener.completed();
}
});
}
public void notifyPausedChange() {
if (listeners.size() <= 0) {
return;
}
mHandler.post(() -> {
for (DownListener listener : listeners) {
listener.paused();
}
});
}
public void notifyErrorChange() {
if (listeners.size() <= 0) {
return;
}
mHandler.post(() -> {
for (DownListener listener : listeners) {
listener.error();
}
});
}
public interface DownListener {
void pending();
void paused();
void progress(int progress);
void completed();
void error();
}
}
package com.rv.version;
import android.content.Context;
import android.support.annotation.NonNull;
import android.view.Gravity;
import android.view.ViewGroup;
import android.widget.TextView;
import com.ruiwenliu.wrapper.dialog.BaseDialog;
/**********
* 强制升级界面
*/
public class UpdateForceDialog extends BaseDialog implements DownListenerManager.DownListener {
private TextView tvDownloadInfo;
public UpdateForceDialog(Context context, int themeResId) {
super(context, themeResId);
DownListenerManager.getInstance().addDownListener(this);
setDialogParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER);
setCancelable(false);
tvDownloadInfo = findViewById(R.id.tv_download_info);
}
public UpdateForceDialog(@NonNull Context context) {
this(context, 0);
}
@Override
public int getViewLayout() {
return R.layout.dialog_update_force_view;
}
@Override
public void pending() {
tvDownloadInfo.setText("下载准备中...");
}
@Override
public void paused() {
tvDownloadInfo.setText("下载暂停中...");
}
@Override
public void progress(int progress) {
tvDownloadInfo.setText("下载中..." + progress + "%");
}
@Override
public void completed() {
tvDownloadInfo.setText("下载完成");
dismiss();
}
@Override
public void error() {
tvDownloadInfo.setText("下载失败");
setCancelable(true);
}
@Override
public void dismiss() {
super.dismiss();
DownListenerManager.getInstance().removeDownListener(this);
}
}
package com.rv.version;
import android.content.Context;
import android.support.annotation.NonNull;
import android.view.Gravity;
import android.view.ViewGroup;
import android.widget.Button;
import com.ruiwenliu.wrapper.dialog.BaseDialog;
/**********
* 升级界面
*/
public class UpdateUnforceDialog extends BaseDialog implements DownListenerManager.DownListener {
private Button btnKnow;
public UpdateUnforceDialog(Context context, int themeResId) {
super(context, themeResId);
DownListenerManager.getInstance().addDownListener(this);
setDialogParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER);
setCancelable(false);
btnKnow = findViewById(R.id.btn_know);
btnKnow.setOnClickListener(v -> dismiss());
}
public UpdateUnforceDialog(@NonNull Context context) {
this(context, 0);
}
@Override
public int getViewLayout() {
return R.layout.dialog_update_unforce_view;
}
@Override
public void pending() {
}
@Override
public void paused() {
}
@Override
public void progress(int progress) {
}
@Override
public void completed() {
dismiss();
}
@Override
public void error() {
setCancelable(true);
}
@Override
public void dismiss() {
super.dismiss();
DownListenerManager.getInstance().removeDownListener(this);
}
}
package com.rv.version;
import android.app.Dialog;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.annotation.NonNull;
import android.text.Html;
import android.text.TextUtils;
......@@ -18,9 +16,8 @@ import android.widget.TextView;
import com.ruiwenliu.wrapper.dialog.BaseDialog;
import com.rv.version.bean.UpdateBean;
import com.rv.version.receiver.UpdateAppReceiver;
public class VersionUpdateDialog extends BaseDialog {
public class VersionUpdateDialog extends BaseDialog {
public VersionUpdateDialog(@NonNull Context context) {
super(context);
......@@ -29,7 +26,7 @@ public class VersionUpdateDialog extends BaseDialog {
public VersionUpdateDialog(Context context, int themeResId) {
super(context, themeResId);
setDialogParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER);
setDialogParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER);
}
@Override
......@@ -45,8 +42,13 @@ public class VersionUpdateDialog extends BaseDialog {
private TextView txtContent;
private TextView tv_version_name;
private ImageView imgClose;
// private ImageView ivHeader ;
private DownloadListener mListener;
private UpdateForceDialog forceDialog;
private UpdateUnforceDialog updateUnforceDialog;
public Builder(Context context, DownloadListener listener) {
mContext = context;
this.mListener = listener;
......@@ -81,22 +83,38 @@ public class VersionUpdateDialog extends BaseDialog {
this.txtContent = layout.findViewById(R.id.txt_content);
this.btn_update = layout.findViewById(R.id.btn_update);
this.imgClose = layout.findViewById(R.id.img_close);
this.btn_update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mListener != null) {
mListener.download();
}
dialog.dismiss();
// ivHeader = layout.findViewById(R.id.iv_header) ;
// TransformationUtils utils = new TransformationUtils(ivHeader);
//
// GlideApp.with(mContext)
// .asBitmap()
// .diskCacheStrategy(DiskCacheStrategy.RESOURCE)
// .load(R.drawable.icon_member_dialog_top)
// .apply(RequestOptions
// .bitmapTransform(new RoundedCorners(12)).override(ivHeader.getWidth(), ivHeader.getHeight()))
// .into(utils);
this.btn_update.setOnClickListener(view -> {
if (mListener != null) {
mListener.download();
if (mContext instanceof Activity && "MainActivity".equals(((Activity) mContext).getClass().getSimpleName()))
if (updateBean.getForce()) { // 强制更新
if (forceDialog == null)
forceDialog = new UpdateForceDialog(mContext, R.style.DialogActivityTheme);
forceDialog.show();
} else {
if (updateUnforceDialog == null)
updateUnforceDialog = new UpdateUnforceDialog(mContext, R.style.DialogActivityTheme);
updateUnforceDialog.show();
}
DownListenerManager.getInstance().notifyPendChange();
}
dialog.dismiss();
});
this.imgClose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
}
});
this.imgClose.setOnClickListener(view -> dialog.dismiss());
if (this.updateBean != null) {
if (!TextUtils.isEmpty(this.updateBean.getUpdateInfo())) {
......
package com.rv.version.receiver;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.support.v4.content.FileProvider;
import android.text.TextUtils;
import com.rv.version.R;
import com.rv.version.util.DownloadAppUtils;
import com.rv.version.util.UpdateAppUtils;
import java.io.File;
/**
* Created by Teprinciple on 2017/11/3.
*/
public class UpdateAppReceiver extends BroadcastReceiver {
private String notificationChannel = "1001";
@Override
public void onReceive(Context context, Intent intent) {
int progress = intent.getIntExtra("progress", 0);
String title = intent.getStringExtra("title");
NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
// 显示通知栏
int notifyId = 1;
if (UpdateAppUtils.showNotification) {
showNotification(context, notifyId, progress, title, notificationChannel, nm);
}
// 下载完成
if (progress == 100) {
handleDownloadComplete(context, notifyId, nm);
}
}
/**
* 下载完成后的逻辑
*/
private void handleDownloadComplete(Context context, int notifyId, NotificationManager nm) {
// 关闭通知栏
if (nm != null) {
nm.cancel(notifyId);
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O) {
nm.deleteNotificationChannel(notificationChannel);
}
}
// 安装apk
if (!TextUtils.isEmpty(DownloadAppUtils.downloadUpdateApkFilePath)) {
toInstall(context);
}
}
/**
* 通知栏显示
*/
private void showNotification(Context context, int notifyId, int progress, String title, String notificationChannel, NotificationManager nm) {
String notificationName = "notification";
// 适配8.0
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// 通知渠道
NotificationChannel channel = new NotificationChannel(notificationChannel, notificationName, NotificationManager.IMPORTANCE_MIN);
channel.enableLights(false); // 是否在桌面icon右上角展示小红点
channel.setShowBadge(false); // 是否在久按桌面图标时显示此渠道的通知
channel.enableVibration(false);
channel.setVibrationPattern(new long[]{0});
channel.setSound(null, null);
// 最后在notificationmanager中创建该通知渠道
nm.createNotificationChannel(channel);
}
Notification.Builder builder = new Notification.Builder(context);
builder.setVibrate(null);
builder.setVibrate(new long[]{0l});
//NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
builder.setChannelId(notificationChannel);
}
if (progress == -1) {
builder.setContentTitle("下载准备中 " + title);
builder.setSmallIcon(R.drawable.logo);
// builder.setProgress(100, progress, false);
} else {
builder.setContentTitle("正在下载 " + title);
builder.setSmallIcon(R.drawable.logo);
builder.setProgress(100, progress, false);
}
Notification notification = null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
notification = builder.build();
} else {
notification = builder.getNotification();
}
nm.notify(notifyId, notification);
}
/**
* 跳转安装
*/
private void toInstall(Context context) {
Intent i = new Intent(Intent.ACTION_VIEW);
File apkFile = new File(DownloadAppUtils.downloadUpdateApkFilePath);
if (!apkFile.exists() || !apkFile.isFile()) {
return;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
i.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Uri contentUri = FileProvider.getUriForFile(
context, context.getPackageName() + ".fileprovider", apkFile);
i.setDataAndType(contentUri, "application/vnd.android.package-archive");
} else {
i.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");
}
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
\ No newline at end of file
......@@ -2,15 +2,13 @@ package com.rv.version.util;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast;
import com.liulishuo.filedownloader.BaseDownloadTask;
import com.liulishuo.filedownloader.FileDownloadLargeFileListener;
import com.liulishuo.filedownloader.FileDownloader;
import com.rv.version.receiver.UpdateAppReceiver;
import com.rv.version.DownListenerManager;
import java.io.File;
......@@ -20,7 +18,7 @@ public class DownloadAppUtils {
public static String downloadUpdateApkFilePath;//下载更新Apk 文件路径
public static void download(final Context context, String url, final String serverVersionName) {
DownListenerManager.getInstance().setDown(true);
String rootPath = null;
rootPath = getCachePath(context) + File.separator + Environment.DIRECTORY_DOWNLOADS + File.separator;
send(context, -1, serverVersionName);
......@@ -41,22 +39,29 @@ public class DownloadAppUtils {
@Override
protected void progress(BaseDownloadTask task, long soFarBytes, long totalBytes) {
DownListenerManager.getInstance().notifyProgressChange((int) (soFarBytes * 100.0 / totalBytes));
send(context, (int) (soFarBytes * 100.0 / totalBytes), serverVersionName);
}
@Override
protected void paused(BaseDownloadTask task, long soFarBytes, long totalBytes) {
Log.e(TAG, "paused");
DownListenerManager.getInstance().notifyPausedChange();
}
@Override
protected void completed(BaseDownloadTask task) {
send(context, 100, serverVersionName);
DownListenerManager.getInstance().notifyCompletedChange();
DownListenerManager.getInstance().setDown(false);
}
@Override
protected void error(BaseDownloadTask task, Throwable e) {
Toast.makeText(context, "下载出错", Toast.LENGTH_SHORT).show();
DownListenerManager.getInstance().notifyErrorChange();
DownListenerManager.getInstance().setDown(false);
// Toast.makeText(context, "下载出错", Toast.LENGTH_SHORT).show();
}
@Override
......
package com.rv.version.util;
import android.graphics.Bitmap;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.bumptech.glide.request.target.ImageViewTarget;
public class TransformationUtils extends ImageViewTarget<Bitmap> {
private ImageView target;
public TransformationUtils(ImageView target) {
super(target);
this.target = target;
}
@Override
protected void setResource(Bitmap resource) {
target.setImageBitmap(resource);
if (resource == null) return;
//获取原图的宽高
int width = resource.getWidth();
int height = resource.getHeight();
//获取imageView的宽
int imageViewWidth = target.getWidth();
//计算缩放比例
float sy = (float) (imageViewWidth * 0.1) / (float) (width * 0.1);
//计算图片等比例放大后的高
int imageViewHeight = (int) (height * sy);
ViewGroup.LayoutParams params = target.getLayoutParams();
params.height = imageViewHeight;
target.setLayoutParams(params);
}
}
\ No newline at end of file
......@@ -157,12 +157,7 @@ public class UpdateAppUtils {
.show();
}
private VersionUpdateDialog.Builder.DownloadListener listener = new VersionUpdateDialog.Builder.DownloadListener() {
@Override
public void download() {
preDownLoad();
}
};
private VersionUpdateDialog.Builder.DownloadListener listener = () -> preDownLoad();
private static final int PERMISSION_CODE = 1001;
......
......@@ -2,4 +2,9 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="30dp" />
<solid android:color="@color/gray_FFB74B" />
<gradient
android:angle="0"
android:endColor="#FF9730"
android:startColor="#FBB554" />
</shape>
\ No newline at end of file
......@@ -3,5 +3,5 @@
<!--背景颜色-->
<solid android:color="#ffffff" />
<!--设置圆角的角度-->
<corners android:radius="15dp" />
<corners android:radius="5dp" />
</shape>
<?xml version="1.0" encoding="utf-8"?>
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/icon_version_loading"
android:fromDegrees="0.0"
android:pivotX="50.0%"
android:pivotY="50.0%"
android:toDegrees="360.0" />
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/size_25"
android:layout_marginRight="@dimen/size_25"
android:background="@drawable/dialog_content_bg"
android:gravity="center_horizontal"
android:orientation="vertical">
<ProgressBar
android:id="@+id/loading"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="38dp"
android:indeterminateBehavior="repeat"
android:indeterminateDrawable="@drawable/down_anim" />
<TextView
android:id="@+id/tv_download_info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="25dp"
android:layout_marginBottom="38dp"
android:gravity="center"
android:text="下载详情"
android:textColor="#333333"
android:textSize="@dimen/sp_16" />
</LinearLayout>
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/size_25"
android:layout_marginRight="@dimen/size_25"
android:background="@drawable/dialog_content_bg"
android:gravity="center_horizontal"
android:orientation="vertical">
<ProgressBar
android:id="@+id/loading"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="38dp"
android:indeterminateBehavior="repeat"
android:indeterminateDrawable="@drawable/down_anim" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="17dp"
android:gravity="center"
android:text="下载中..."
android:textColor="#171413"
android:textSize="@dimen/sp_16"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:gravity="center"
android:text="可在【个人中心-设置】中查看进度"
android:textColor="#666666"
android:textSize="@dimen/sp_12" />
<Button
android:id="@+id/btn_know"
android:layout_width="match_parent"
android:layout_height="@dimen/size_40"
android:layout_marginLeft="13sp"
android:layout_marginTop="@dimen/size_25"
android:layout_marginRight="13sp"
android:layout_marginBottom="13sp"
android:background="@drawable/bg_version_btn"
android:gravity="center"
android:text="知道了"
android:textColor="@color/white"
android:textSize="@dimen/sp_16" />
</LinearLayout>
</LinearLayout>
\ No newline at end of file
......@@ -10,55 +10,54 @@
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/size_30"
android:layout_marginRight="@dimen/size_30"
android:background="@drawable/dialog_content_bg"
android:background="@drawable/bg_version"
android:gravity="center_horizontal"
android:orientation="vertical">
<ImageView
android:scaleType="centerCrop"
android:layout_width="match_parent"
android:layout_height="@dimen/dialog_img_height"
android:src="@drawable/icon_dialog_top" />
<TextView
android:layout_marginTop="@dimen/dialog_img_height"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="更新提示"
android:textColor="#ff5e5e5e"
android:textSize="18sp" />
android:textColor="#171413"
android:textSize="@dimen/sp_16"
android:textStyle="bold" />
<TextView
android:layout_marginTop="@dimen/size_5"
android:id="@+id/tv_version_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/size_3"
android:gravity="center"
android:textColor="#ff5e5e5e"
android:textColor="#171413"
android:textSize="@dimen/sp_14" />
<TextView
android:id="@+id/txt_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_height="0dp"
android:layout_marginTop="5dp"
android:gravity="left"
android:paddingLeft="13dp"
android:paddingRight="13dp"
android:textColor="#ff5e5e5e"
android:textSize="16sp" />
android:paddingLeft="33dp"
android:paddingRight="33dp"
android:singleLine="false"
android:textColor="#666666"
android:textSize="@dimen/sp_12" />
<Button
android:id="@+id/btn_update"
android:layout_width="match_parent"
android:layout_height="@dimen/size_40"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10"
android:layout_marginBottom="@dimen/size_15"
android:layout_marginLeft="13dp"
android:layout_marginRight="13dp"
android:layout_marginTop="13dp"
android:layout_marginBottom="13dp"
android:background="@drawable/bg_version_btn"
android:gravity="center"
android:layout_gravity="bottom"
android:text="立即更新"
android:textColor="@color/white"
android:textSize="@dimen/sp_16" />
......@@ -69,7 +68,7 @@
android:id="@+id/img_close"
android:layout_width="@dimen/size_30"
android:layout_height="@dimen/size_30"
android:layout_marginTop="10dp"
android:layout_marginTop="20dp"
android:src="@drawable/home_icon_close" />
......
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="dialog_width">160dp</dimen>
<dimen name="dialog_img_height">55dp</dimen>
<dimen name="dialog_img_height">90dp</dimen>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="dialog_width">213.33dp</dimen>
<dimen name="dialog_img_height">73.33dp</dimen>
<!--<dimen name="dialog_img_height">73.33dp</dimen>-->
<dimen name="dialog_img_height">120dp</dimen>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="dialog_width">320dp</dimen>
<dimen name="dialog_img_height">110dp</dimen>
<dimen name="dialog_img_height">150dp</dimen>
</resources>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment