first
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
package com.ckkj.water.dialog;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.view.Gravity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
import android.view.WindowManager;
|
||||
import android.view.animation.Animation;
|
||||
import android.view.animation.AnimationUtils;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.ckkj.water.R;
|
||||
|
||||
|
||||
/**
|
||||
* @author messi.mo
|
||||
* @date 2017/11/22
|
||||
* 底部选择框
|
||||
*/
|
||||
|
||||
public class A_custom_base_Dialog {
|
||||
|
||||
public static View layoutView;
|
||||
private Dialog mDialog;
|
||||
private Context mContext;
|
||||
private TextView tvOneMonth,tvThreeMonth,tvSixMonth,tvStartTime,tvEndTime,tvClear,tvConfirm;
|
||||
private ImageView imgClose,imgClear;
|
||||
private String startTime = "";
|
||||
private String endTime = "";
|
||||
private DialogListener mListener;
|
||||
private Animation animUp;
|
||||
private Animation animDown;
|
||||
|
||||
|
||||
|
||||
|
||||
public void setOnDialogListener(DialogListener listener){
|
||||
this.mListener = listener;
|
||||
}
|
||||
|
||||
public interface DialogListener{
|
||||
void callBackDatas(String startTime,String endTime);
|
||||
}
|
||||
|
||||
|
||||
public A_custom_base_Dialog(Activity context, int layoutId) {
|
||||
this.mContext = context;
|
||||
mDialog = new Dialog(context, R.style.ActionSheetDialogStyle);
|
||||
//填充对话框的布局
|
||||
layoutView = LayoutInflater.from(context).inflate(layoutId, null);
|
||||
//将布局设置给Dialog
|
||||
mDialog.setContentView(layoutView);
|
||||
// 为弹出和关闭设置动画
|
||||
animUp = AnimationUtils.loadAnimation(mContext, R.anim.popup_anim_up);
|
||||
animDown = AnimationUtils.loadAnimation(mContext, R.anim.popup_anim_down);
|
||||
try {
|
||||
//设置滑出动画
|
||||
layoutView.startAnimation(animUp);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
//获取当前Activity所在的窗体
|
||||
Window dialogWindow = mDialog.getWindow();
|
||||
mDialog.setCanceledOnTouchOutside(true);
|
||||
//设置Dialog从窗体底部弹出
|
||||
if (dialogWindow != null) {
|
||||
dialogWindow.setGravity(Gravity.BOTTOM);
|
||||
//获得窗体的属性
|
||||
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
|
||||
lp.width = context.getWindowManager().getDefaultDisplay().getWidth();
|
||||
//设置Dialog距离底部的距离
|
||||
//lp.y = 30;
|
||||
// 将属性设置给窗体
|
||||
dialogWindow.setAttributes(lp);
|
||||
}
|
||||
imgClose = layoutView.findViewById(R.id.img_close);
|
||||
imgClose.setOnClickListener(onclick);
|
||||
}
|
||||
|
||||
View.OnClickListener onclick = new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
switch (v.getId()){
|
||||
case R.id.img_close:
|
||||
mDialog.dismiss();
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
public void show() {
|
||||
if(mDialog != null){
|
||||
mDialog.show();
|
||||
}
|
||||
}
|
||||
|
||||
public void dismiss() {
|
||||
if(mDialog != null){
|
||||
mDialog.dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
95
app/src/main/java/com/ckkj/water/dialog/CenterTipDialog.java
Normal file
95
app/src/main/java/com/ckkj/water/dialog/CenterTipDialog.java
Normal file
@@ -0,0 +1,95 @@
|
||||
package com.ckkj.water.dialog;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.view.Gravity;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.ckkj.water.R;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 居中提示弹窗
|
||||
*/
|
||||
public class CenterTipDialog extends Dialog {
|
||||
|
||||
private int imageRes = 0;
|
||||
private String title = "";
|
||||
private ImageView imageView;
|
||||
private TextView textView;
|
||||
private Handler handler = new Handler();
|
||||
private Runnable dismissRunnable;
|
||||
|
||||
public CenterTipDialog(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
public CenterTipDialog(Context context, int imageRes, String title) {
|
||||
super(context);
|
||||
this.imageRes = imageRes;
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public CenterTipDialog(Context context, int theme, int imageRes, String title) {
|
||||
super(context, theme);
|
||||
this.imageRes = imageRes;
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
init();
|
||||
}
|
||||
|
||||
@SuppressLint("ResourceAsColor")
|
||||
private void init() {
|
||||
getWindow().setBackgroundDrawableResource(R.color.translucent_black_95);
|
||||
getWindow().setDimAmount(0.5f);
|
||||
getWindow().setGravity(Gravity.CENTER);
|
||||
setCancelable(true);
|
||||
setCanceledOnTouchOutside(true);
|
||||
setContentView(R.layout.center_tip_dialog);
|
||||
|
||||
imageView = findViewById(R.id.image);
|
||||
textView = findViewById(R.id.tv_title);
|
||||
|
||||
if (imageRes != 0) {
|
||||
imageView.setImageResource(imageRes);
|
||||
}
|
||||
textView.setText(title);
|
||||
|
||||
WindowManager.LayoutParams params = Objects.requireNonNull(getWindow()).getAttributes();
|
||||
params.width = WindowManager.LayoutParams.MATCH_PARENT;
|
||||
params.height = WindowManager.LayoutParams.MATCH_PARENT;
|
||||
getWindow().setAttributes(params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void show() {
|
||||
super.show();
|
||||
if (dismissRunnable != null) {
|
||||
handler.postDelayed(dismissRunnable, 800);
|
||||
}
|
||||
}
|
||||
|
||||
public void setDismissDelay(long delayMillis, Runnable onDismiss) {
|
||||
this.dismissRunnable = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (isShowing()) {
|
||||
dismiss();
|
||||
}
|
||||
if (onDismiss != null) {
|
||||
onDismiss.run();
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
201
app/src/main/java/com/ckkj/water/dialog/ContentReportDialog.java
Normal file
201
app/src/main/java/com/ckkj/water/dialog/ContentReportDialog.java
Normal file
@@ -0,0 +1,201 @@
|
||||
package com.ckkj.water.dialog;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.view.Gravity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
import android.view.WindowManager;
|
||||
import android.view.animation.Animation;
|
||||
import android.view.animation.AnimationUtils;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.RadioButton;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter;
|
||||
import com.chad.library.adapter.base.BaseViewHolder;
|
||||
import com.ckkj.water.R;
|
||||
import com.ckkj.water.mine.entity.ReportEntity;
|
||||
import com.ckkj.water.utils.show.ToastUtil;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* @author messi.mo
|
||||
* @date 2017/11/22
|
||||
* 底部选择框
|
||||
*/
|
||||
|
||||
public class ContentReportDialog {
|
||||
|
||||
public static View layoutView;
|
||||
private Dialog mDialog;
|
||||
private Context mContext;
|
||||
private TextView tvCommit,tvThreeMonth,tvSixMonth,tvStartTime,tvEndTime,tvClear,tvConfirm;
|
||||
private ImageView imgClose,imgClear;
|
||||
private String startTime = "";
|
||||
private String endTime = "";
|
||||
private DialogListener mListener;
|
||||
private Animation animUp;
|
||||
private Animation animDown;
|
||||
//////////////////////////////////////////////
|
||||
private RecyclerView rvDatas;
|
||||
private String mReason;
|
||||
private List<ReportEntity> reportList = new ArrayList<>();
|
||||
|
||||
|
||||
|
||||
public void setOnDialogListener(DialogListener listener){
|
||||
this.mListener = listener;
|
||||
}
|
||||
|
||||
public interface DialogListener{
|
||||
void callBackDatas(String reason);
|
||||
}
|
||||
|
||||
|
||||
public ContentReportDialog(Activity context, int layoutId, String reason) {
|
||||
this.mContext = context;
|
||||
this.mReason = reason;
|
||||
mDialog = new Dialog(context, R.style.ActionSheetDialogStyle);
|
||||
//填充对话框的布局
|
||||
layoutView = LayoutInflater.from(context).inflate(layoutId, null);
|
||||
//将布局设置给Dialog
|
||||
mDialog.setContentView(layoutView);
|
||||
// 为弹出和关闭设置动画
|
||||
animUp = AnimationUtils.loadAnimation(mContext, R.anim.popup_anim_up);
|
||||
animDown = AnimationUtils.loadAnimation(mContext, R.anim.popup_anim_down);
|
||||
try {
|
||||
//设置滑出动画
|
||||
layoutView.startAnimation(animUp);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
//获取当前Activity所在的窗体
|
||||
Window dialogWindow = mDialog.getWindow();
|
||||
mDialog.setCanceledOnTouchOutside(true);
|
||||
//设置Dialog从窗体底部弹出
|
||||
if (dialogWindow != null) {
|
||||
dialogWindow.setGravity(Gravity.BOTTOM);
|
||||
//获得窗体的属性
|
||||
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
|
||||
lp.width = context.getWindowManager().getDefaultDisplay().getWidth();
|
||||
//设置Dialog距离底部的距离
|
||||
//lp.y = 30;
|
||||
// 将属性设置给窗体
|
||||
dialogWindow.setAttributes(lp);
|
||||
}
|
||||
List<String> reasonList = new ArrayList<>();
|
||||
reasonList.add("有害/不安全");
|
||||
reasonList.add("涉嫌广告");
|
||||
reasonList.add("虚假信息");
|
||||
reasonList.add("不准确");
|
||||
reasonList.add("毫无作用");
|
||||
reasonList.add("其他原因");
|
||||
for(String content : reasonList){
|
||||
ReportEntity entity = new ReportEntity(content,false);
|
||||
reportList.add(entity);
|
||||
}
|
||||
imgClose = layoutView.findViewById(R.id.img_close);
|
||||
rvDatas = layoutView.findViewById(R.id.rv_reasons);
|
||||
tvCommit = layoutView.findViewById(R.id.tv_commit);
|
||||
imgClose.setOnClickListener(onclick);
|
||||
tvCommit.setOnClickListener(onclick);
|
||||
ReasonAdapter adapter = new ReasonAdapter(R.layout.order_cancel_item_layout,reportList,mReason);
|
||||
rvDatas.setAdapter(adapter);
|
||||
adapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
|
||||
@Override
|
||||
public void onItemClick(BaseQuickAdapter ada, View view, int position) {
|
||||
if(mListener != null){
|
||||
adapter.setSelectPos(position);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
View.OnClickListener onclick = new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
switch (v.getId()){
|
||||
case R.id.img_close:
|
||||
mDialog.dismiss();
|
||||
break;
|
||||
|
||||
case R.id.tv_commit:
|
||||
boolean hasSel = false;
|
||||
ReportEntity selEntity = null;
|
||||
for(ReportEntity entity : reportList){
|
||||
if(entity.isCheck()){
|
||||
hasSel = true;
|
||||
selEntity = entity;
|
||||
}
|
||||
}
|
||||
if(!hasSel){
|
||||
ToastUtil.showShort(mContext,"请选择举报/反馈理由");
|
||||
return;
|
||||
}
|
||||
if(mListener != null){
|
||||
mListener.callBackDatas(selEntity.getReportReason());
|
||||
dismiss();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
public void show() {
|
||||
if(mDialog != null){
|
||||
mDialog.show();
|
||||
}
|
||||
}
|
||||
|
||||
public void dismiss() {
|
||||
if(mDialog != null){
|
||||
mDialog.dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
class ReasonAdapter extends BaseQuickAdapter<ReportEntity, BaseViewHolder>{
|
||||
private String mReason = "";
|
||||
private int mPos = -1;
|
||||
public ReasonAdapter(int layoutResId, @Nullable List<ReportEntity> data,String reason) {
|
||||
super(layoutResId, data);
|
||||
mReason = reason;
|
||||
}
|
||||
|
||||
public void setSelectPos(int position){
|
||||
mPos = position;
|
||||
List<ReportEntity> list = getData();
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
list.get(i).setCheck(i == position);
|
||||
}
|
||||
notifyDataSetChanged();
|
||||
};
|
||||
|
||||
@Override
|
||||
protected void convert(BaseViewHolder helper, ReportEntity item) {
|
||||
RadioButton radioButton = helper.getView(R.id.radio6);
|
||||
helper.setText(R.id.tv_reason, item.getReportReason());
|
||||
|
||||
int adapterPosition = helper.getAdapterPosition();
|
||||
radioButton.setChecked(mPos == adapterPosition);
|
||||
|
||||
// 添加点击事件
|
||||
helper.itemView.setOnClickListener(v -> {
|
||||
if (mPos != adapterPosition) { // 不允许取消选中,只能换选项
|
||||
setSelectPos(adapterPosition);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
227
app/src/main/java/com/ckkj/water/dialog/DialogAppUpdate.java
Normal file
227
app/src/main/java/com/ckkj/water/dialog/DialogAppUpdate.java
Normal file
@@ -0,0 +1,227 @@
|
||||
package com.ckkj.water.dialog;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.Activity;
|
||||
import android.app.Dialog;
|
||||
import android.app.DownloadManager;
|
||||
import android.app.NotificationManager;
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.Build;
|
||||
import android.os.Environment;
|
||||
import android.text.Html;
|
||||
import android.view.Gravity;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
import android.view.WindowManager;
|
||||
import android.view.animation.Animation;
|
||||
import android.view.animation.AnimationUtils;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.core.app.NotificationCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import com.chiclaim.android.downloader.DownloadRequest;
|
||||
import com.ckkj.water.AppConfig;
|
||||
import com.ckkj.water.R;
|
||||
import com.ckkj.water.main.entity.CheckVersionEntity;
|
||||
import com.ckkj.water.utils.DownLoadApk;
|
||||
import com.ckkj.water.utils.FileNameHelper;
|
||||
import com.ckkj.water.utils.show.ToastUtil;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
|
||||
/**
|
||||
* @author messi.mo
|
||||
* @date 2017/11/22
|
||||
* 底部选择框
|
||||
*/
|
||||
|
||||
public class DialogAppUpdate {
|
||||
|
||||
public static View layoutView;
|
||||
private Dialog mDialog;
|
||||
private Activity mContext;
|
||||
private TextView tvTitle,tvContent,tvConfirm,tvCancel;
|
||||
private RelativeLayout rlUpdateContent;
|
||||
private ImageView imgClose,imgClear;
|
||||
private String startTime = "";
|
||||
private String endTime = "";
|
||||
private DialogListener mListener;
|
||||
private Animation animUp;
|
||||
private Animation animDown;
|
||||
private ProgressBar progressBar;
|
||||
private String mDwonLoadUrl = "";
|
||||
// private String mDwonLoadUrl = "https://jsjk-private.oss-cn-hangzhou.aliyuncs.com/invoice/2024-11-26/3a9c5e76b4bb4ae297a219a663e9e82a.png";
|
||||
private DownloadManager downloadManager;
|
||||
private long downloadId;
|
||||
private NotificationManager notificationManager;
|
||||
private NotificationCompat.Builder notificationBuilder;
|
||||
private final String CHANNEL_ID = "download_channel"; // 通知渠道ID
|
||||
private boolean mIsForceUpdate;
|
||||
private CheckVersionEntity mVersionBean;
|
||||
|
||||
|
||||
|
||||
public void setOnDialogListener(DialogListener listener){
|
||||
this.mListener = listener;
|
||||
}
|
||||
|
||||
|
||||
public interface DialogListener{
|
||||
void callBackGetPermisson(String permission);
|
||||
void downLoadFinish();
|
||||
}
|
||||
|
||||
|
||||
public DialogAppUpdate(Activity context, int layoutId, boolean isForceUpdate, CheckVersionEntity bean) {
|
||||
this.mContext = context;
|
||||
this.mIsForceUpdate = isForceUpdate;
|
||||
this.mVersionBean = bean;
|
||||
mDwonLoadUrl = bean.getVersionUrl();
|
||||
mDialog = new Dialog(context, R.style.ActionSheetDialogStyle);
|
||||
//填充对话框的布局
|
||||
layoutView = LayoutInflater.from(context).inflate(layoutId, null);
|
||||
//将布局设置给Dialog
|
||||
mDialog.setContentView(layoutView);
|
||||
// 为弹出和关闭设置动画
|
||||
animUp = AnimationUtils.loadAnimation(mContext, R.anim.popup_anim_up);
|
||||
animDown = AnimationUtils.loadAnimation(mContext, R.anim.popup_anim_down);
|
||||
try {
|
||||
//设置滑出动画
|
||||
// layoutView.startAnimation(animUp);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
//获取当前Activity所在的窗体
|
||||
Window dialogWindow = mDialog.getWindow();
|
||||
mDialog.setOnKeyListener((dialog1, keyCode, event) -> {
|
||||
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
|
||||
// 如果需要拦截返回键,返回 true
|
||||
return true;
|
||||
}
|
||||
return false; // 不拦截其他按键
|
||||
});
|
||||
|
||||
mDialog.setCanceledOnTouchOutside(false);
|
||||
//设置Dialog从窗体底部弹出
|
||||
if (dialogWindow != null) {
|
||||
dialogWindow.setGravity(Gravity.CENTER_VERTICAL);
|
||||
//获得窗体的属性
|
||||
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
|
||||
lp.width = context.getWindowManager().getDefaultDisplay().getWidth();
|
||||
//设置Dialog距离底部的距离
|
||||
//lp.y = 30;
|
||||
// 将属性设置给窗体
|
||||
dialogWindow.setAttributes(lp);
|
||||
}
|
||||
tvTitle = layoutView.findViewById(R.id.tv_title);
|
||||
tvContent = layoutView.findViewById(R.id.tv_update_content);
|
||||
tvConfirm = layoutView.findViewById(R.id.tv_update);
|
||||
tvCancel = layoutView.findViewById(R.id.tv_cencel);
|
||||
progressBar = layoutView.findViewById(R.id.progress_bar);
|
||||
rlUpdateContent = layoutView.findViewById(R.id.rel_file_content);
|
||||
tvConfirm.setOnClickListener(onclick);
|
||||
tvCancel.setOnClickListener(onclick);
|
||||
if(isForceUpdate){
|
||||
tvCancel.setVisibility(View.GONE);
|
||||
}
|
||||
// 初始化 DownloadManager
|
||||
downloadManager = (DownloadManager) mContext.getSystemService(Context.DOWNLOAD_SERVICE);
|
||||
notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
tvContent.setText(Html.fromHtml(bean.getVersionDescription(), Html.FROM_HTML_MODE_LEGACY));
|
||||
} else {
|
||||
}
|
||||
String [] desStr = bean.getVersionDescription().split("#");
|
||||
String desLine = "";
|
||||
for(String str : desStr){
|
||||
desLine = desLine + str + "\n";
|
||||
}
|
||||
tvContent.setText(desLine);
|
||||
tvContent.setLineSpacing(0, 1.2f);
|
||||
}
|
||||
|
||||
private DownloadRequest request;
|
||||
View.OnClickListener onclick = new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
switch (v.getId()){
|
||||
case R.id.tv_update:
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
if (ContextCompat.checkSelfPermission(mContext, Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
||||
!= PackageManager.PERMISSION_GRANTED) {
|
||||
if(mListener != null){
|
||||
mListener.callBackGetPermisson(Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
startUpdateApp();
|
||||
break;
|
||||
case R.id.tv_cencel:
|
||||
dismiss();
|
||||
AppConfig.USER_CONFIRM_UPDATE_APP = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
public void startUpdateApp() {
|
||||
//强制更新,不需要隐藏dialog
|
||||
if(mIsForceUpdate){
|
||||
progressBar.setVisibility(View.VISIBLE);
|
||||
rlUpdateContent.setVisibility(View.GONE);
|
||||
progressBar.setMax(100);
|
||||
}else{
|
||||
ToastUtil.showShort(mContext,"可在任务栏查看下载进度");
|
||||
dismiss();
|
||||
}
|
||||
String fileName = FileNameHelper.getFileNameFromUrl(mDwonLoadUrl);
|
||||
File downloadDir = Environment.getExternalStorageDirectory();
|
||||
File apkFile = new File(downloadDir, fileName);
|
||||
String apkPath = apkFile.getAbsolutePath();
|
||||
DownLoadApk downloadTask = new DownLoadApk(mContext,mIsForceUpdate);
|
||||
downloadTask.startDownload(mDwonLoadUrl, fileName,apkPath);
|
||||
downloadTask.setDownLoadCallback(new DownLoadApk.DownLoadCallback() {
|
||||
@Override
|
||||
public void updateProgress(long currentProgress, long total) {
|
||||
int progress = (int) ((currentProgress * 100) / total);
|
||||
progressBar.setProgress(progress);
|
||||
mContext.runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
tvTitle.setText("正在下载 " + progress + "%");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void downLoadFinish() {
|
||||
if(mListener != null){
|
||||
mListener.downLoadFinish();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void show() {
|
||||
if(mDialog != null){
|
||||
mDialog.show();
|
||||
}
|
||||
}
|
||||
|
||||
public void dismiss() {
|
||||
if(mDialog != null){
|
||||
mDialog.dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
115
app/src/main/java/com/ckkj/water/dialog/LoadingDialog.java
Normal file
115
app/src/main/java/com/ckkj/water/dialog/LoadingDialog.java
Normal file
@@ -0,0 +1,115 @@
|
||||
package com.ckkj.water.dialog;
|
||||
|
||||
import android.animation.ObjectAnimator;
|
||||
import android.animation.ValueAnimator;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.view.WindowManager;
|
||||
import android.view.animation.LinearInterpolator;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
|
||||
import com.ckkj.water.R;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
|
||||
/**
|
||||
* author:
|
||||
* time: 2019/9/18 9:34
|
||||
* desc:
|
||||
* version: 1.0.0
|
||||
*/
|
||||
public class LoadingDialog extends Dialog {
|
||||
private String string="";
|
||||
private TextView textView;
|
||||
private Context context;
|
||||
private String [] strLoadContent = {"加载中.","加载中..","加载中..."};
|
||||
private int mIndex = 0;
|
||||
private TextView tvLoading;
|
||||
private Handler handler = new Handler();
|
||||
|
||||
// 创建一个Runnable对象,用于定时执行任务
|
||||
Runnable runnable = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
// 在这里编写需要定时执行的操作
|
||||
// 比如更新UI、发送网络请求等
|
||||
if(tvLoading != null){
|
||||
tvLoading.setText(strLoadContent[mIndex]);
|
||||
mIndex ++;
|
||||
if(mIndex == strLoadContent.length){
|
||||
mIndex = 0;
|
||||
}
|
||||
}
|
||||
handler.postDelayed(this, 300);
|
||||
}
|
||||
};
|
||||
|
||||
public LoadingDialog(Context context) {
|
||||
super(context); // 应用透明背景样式
|
||||
this.context=context;
|
||||
}
|
||||
public LoadingDialog(Context context, String s) {
|
||||
super(context);
|
||||
this.string=s;
|
||||
this.context=context;
|
||||
}
|
||||
|
||||
public LoadingDialog(Context context, int theme) {
|
||||
super(context, theme);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
init();
|
||||
}
|
||||
|
||||
@SuppressLint("ResourceAsColor")
|
||||
private void init() {
|
||||
// 设置对话框背景为透明
|
||||
getWindow().setBackgroundDrawable(context.getResources().getDrawable(R.color.translucent_black_95));
|
||||
getWindow().setDimAmount(0.2f);
|
||||
setCancelable(true);
|
||||
setCanceledOnTouchOutside(false);
|
||||
setContentView(R.layout.dialog_loading_my);//loading的xml文件
|
||||
tvLoading = findViewById(R.id.tv_load_dialog);
|
||||
ImageView imgLoading = findViewById(R.id.img_loading);
|
||||
// 初始化 ObjectAnimator
|
||||
ObjectAnimator rotateAnimator = ObjectAnimator.ofFloat(imgLoading, "rotation", 0f, 360f);
|
||||
rotateAnimator.setDuration(1500);
|
||||
rotateAnimator.setRepeatCount(ValueAnimator.INFINITE);
|
||||
rotateAnimator.setInterpolator(new LinearInterpolator()); // 匀速旋转
|
||||
rotateAnimator.start();
|
||||
//加载动画资源
|
||||
// Drawable animation = (AnimationDrawable) imgLoading.getDrawable();
|
||||
// ((AnimationDrawable) animation).start();
|
||||
WindowManager.LayoutParams params = Objects.requireNonNull(getWindow()).getAttributes();
|
||||
params.width = WindowManager.LayoutParams.MATCH_PARENT;
|
||||
params.height = WindowManager.LayoutParams.MATCH_PARENT;
|
||||
getWindow().setAttributes(params);
|
||||
// 可选: 设置窗口大小
|
||||
getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void show() {//开启
|
||||
// if (context==null){
|
||||
// return;
|
||||
// }
|
||||
super.show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dismiss() {//关闭
|
||||
// if (context==null){
|
||||
// return;
|
||||
// }
|
||||
super.dismiss();
|
||||
}
|
||||
}
|
||||
141
app/src/main/java/com/ckkj/water/dialog/PayTypeDialog.java
Normal file
141
app/src/main/java/com/ckkj/water/dialog/PayTypeDialog.java
Normal file
@@ -0,0 +1,141 @@
|
||||
package com.ckkj.water.dialog;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.view.Gravity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
import android.view.WindowManager;
|
||||
import android.view.animation.Animation;
|
||||
import android.view.animation.AnimationUtils;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.RadioButton;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.ckkj.water.R;
|
||||
|
||||
|
||||
/**
|
||||
* @author messi.mo
|
||||
* @date 2017/11/22
|
||||
* 底部选择框
|
||||
*/
|
||||
|
||||
public class PayTypeDialog {
|
||||
|
||||
public static View layoutView;
|
||||
private Dialog mDialog;
|
||||
private Context mContext;
|
||||
private ImageView imgClose,imgClear;
|
||||
private DialogListener mListener;
|
||||
private Animation animUp;
|
||||
private Animation animDown;
|
||||
private RelativeLayout rlAliPay,rlWxPay;
|
||||
private TextView tvPay;
|
||||
private RadioButton mRdBtnAlipay,mRdBtnWxpay;
|
||||
private int mPayCode = 100;//100支付宝 200微信
|
||||
|
||||
|
||||
public void setOnDialogListener(DialogListener listener){
|
||||
this.mListener = listener;
|
||||
}
|
||||
|
||||
public interface DialogListener{
|
||||
void goToPay(int payCode);
|
||||
}
|
||||
|
||||
|
||||
public PayTypeDialog(Activity context, String payInfo, String payPriceInfo) {
|
||||
this.mContext = context;
|
||||
mDialog = new Dialog(context, R.style.ActionSheetDialogStyle);
|
||||
//填充对话框的布局
|
||||
layoutView = LayoutInflater.from(context).inflate(R.layout.dialog_pay_option_layout, null);
|
||||
//将布局设置给Dialog
|
||||
mDialog.setContentView(layoutView);
|
||||
// 为弹出和关闭设置动画
|
||||
animUp = AnimationUtils.loadAnimation(mContext, R.anim.popup_anim_up);
|
||||
animDown = AnimationUtils.loadAnimation(mContext, R.anim.popup_anim_down);
|
||||
try {
|
||||
//设置滑出动画
|
||||
layoutView.startAnimation(animUp);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
//获取当前Activity所在的窗体
|
||||
Window dialogWindow = mDialog.getWindow();
|
||||
mDialog.setCanceledOnTouchOutside(true);
|
||||
//设置Dialog从窗体底部弹出
|
||||
if (dialogWindow != null) {
|
||||
dialogWindow.setGravity(Gravity.BOTTOM);
|
||||
//获得窗体的属性
|
||||
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
|
||||
lp.width = context.getWindowManager().getDefaultDisplay().getWidth();
|
||||
//设置Dialog距离底部的距离
|
||||
//lp.y = 30;
|
||||
// 将属性设置给窗体
|
||||
dialogWindow.setAttributes(lp);
|
||||
}
|
||||
imgClose = layoutView.findViewById(R.id.img_close);
|
||||
rlAliPay = layoutView.findViewById(R.id.rl_zfb);
|
||||
rlWxPay = layoutView.findViewById(R.id.rl_wx);
|
||||
tvPay = layoutView.findViewById(R.id.tv_go_pay);
|
||||
mRdBtnAlipay = layoutView.findViewById(R.id.radio_zdb);
|
||||
mRdBtnWxpay = layoutView.findViewById(R.id.radio_wx);
|
||||
TextView tvPayInfo = layoutView.findViewById(R.id.tv_pay_info);
|
||||
TextView tvPayPriceInfo = layoutView.findViewById(R.id.tv_pay_price);
|
||||
imgClose.setOnClickListener(onclick);
|
||||
tvPay.setOnClickListener(onclick);
|
||||
rlAliPay.setOnClickListener(onclick);
|
||||
rlWxPay.setOnClickListener(onclick);
|
||||
tvPayInfo.setText("支付账单信息:" + payInfo);
|
||||
tvPayPriceInfo.setText("实付金额: ¥" + payPriceInfo);
|
||||
}
|
||||
|
||||
View.OnClickListener onclick = new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
switch (v.getId()){
|
||||
case R.id.img_close:
|
||||
mDialog.dismiss();
|
||||
break;
|
||||
|
||||
case R.id.rl_zfb:
|
||||
mPayCode = 100;
|
||||
mRdBtnAlipay.setChecked(true);
|
||||
mRdBtnWxpay.setChecked(false);
|
||||
break;
|
||||
|
||||
case R.id.rl_wx:
|
||||
mPayCode = 200;
|
||||
mRdBtnAlipay.setChecked(false);
|
||||
mRdBtnWxpay.setChecked(true);
|
||||
break;
|
||||
|
||||
case R.id.tv_go_pay:
|
||||
if(mListener != null){
|
||||
mListener.goToPay(mPayCode);
|
||||
dismiss();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
public void show() {
|
||||
if(mDialog != null){
|
||||
mDialog.show();
|
||||
}
|
||||
}
|
||||
|
||||
public void dismiss() {
|
||||
if(mDialog != null){
|
||||
mDialog.dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
197
app/src/main/java/com/ckkj/water/dialog/ShareQrcodeDialog.java
Normal file
197
app/src/main/java/com/ckkj/water/dialog/ShareQrcodeDialog.java
Normal file
@@ -0,0 +1,197 @@
|
||||
package com.ckkj.water.dialog;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Dialog;
|
||||
import android.content.ClipData;
|
||||
import android.content.ClipboardManager;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.net.Uri;
|
||||
import android.os.Environment;
|
||||
import android.provider.MediaStore;
|
||||
import android.view.Gravity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
import android.view.WindowManager;
|
||||
import android.view.animation.Animation;
|
||||
import android.view.animation.AnimationUtils;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.google.zxing.client.android.utils.ZXingUtils;
|
||||
import com.ckkj.water.AppConfig;
|
||||
import com.ckkj.water.R;
|
||||
import com.ckkj.water.utils.show.ToastUtil;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* @author messi.mo
|
||||
* @date 2017/11/22
|
||||
* 底部选择框
|
||||
*/
|
||||
|
||||
public class ShareQrcodeDialog {
|
||||
|
||||
public static View layoutView;
|
||||
private Dialog mDialog;
|
||||
private Context mContext;
|
||||
private TextView tvOneMonth,tvThreeMonth,tvSixMonth,tvStartTime,tvEndTime,tvClear,tvConfirm;
|
||||
private ImageView imgDown,imgCopy,imgHb,imgQrcode;
|
||||
private String startTime = "";
|
||||
private RelativeLayout rlHaibao;
|
||||
private String endTime = "";
|
||||
private DialogListener mListener;
|
||||
private Animation animUp;
|
||||
private Animation animDown;
|
||||
private List<Drawable> mImgUrls = new ArrayList<>();
|
||||
private String mInviteeCode = "";
|
||||
|
||||
|
||||
|
||||
public void setOnDialogListener(DialogListener listener){
|
||||
this.mListener = listener;
|
||||
}
|
||||
|
||||
public interface DialogListener{
|
||||
void downShape();
|
||||
void copyLink(String url);
|
||||
}
|
||||
|
||||
|
||||
public ShareQrcodeDialog(Activity context, int layoutId,String shareCode) {
|
||||
this.mContext = context;
|
||||
this.mInviteeCode = shareCode;
|
||||
mDialog = new Dialog(context, R.style.ActionShareDialogStyle);
|
||||
//填充对话框的布局
|
||||
layoutView = LayoutInflater.from(context).inflate(layoutId, null);
|
||||
//将布局设置给Dialog
|
||||
mDialog.setContentView(layoutView);
|
||||
// 为弹出和关闭设置动画
|
||||
animUp = AnimationUtils.loadAnimation(mContext, R.anim.popup_anim_up);
|
||||
animDown = AnimationUtils.loadAnimation(mContext, R.anim.popup_anim_down);
|
||||
try {
|
||||
//设置滑出动画
|
||||
layoutView.startAnimation(animUp);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
//获取当前Activity所在的窗体
|
||||
Window dialogWindow = mDialog.getWindow();
|
||||
mDialog.setCanceledOnTouchOutside(true);
|
||||
//设置Dialog在屏幕中间显示
|
||||
if (dialogWindow != null) {
|
||||
dialogWindow.setGravity(Gravity.CENTER);
|
||||
//获得窗体的属性
|
||||
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
|
||||
// 设置Dialog宽度为屏幕宽度的85%(可根据需要调整)
|
||||
int screenWidth = context.getWindowManager().getDefaultDisplay().getWidth();
|
||||
lp.width = (int) (screenWidth * 0.85);
|
||||
int screenHeight = context.getWindowManager().getDefaultDisplay().getHeight();
|
||||
lp.height = (int) (screenHeight * 0.85);
|
||||
//将属性设置给窗体
|
||||
dialogWindow.setAttributes(lp);
|
||||
}
|
||||
//添加图片集合
|
||||
mImgUrls.add(mContext.getResources().getDrawable(R.mipmap.img_share_bg));
|
||||
imgDown = layoutView.findViewById(R.id.img_down);
|
||||
imgCopy = layoutView.findViewById(R.id.img_copy);
|
||||
imgHb = layoutView.findViewById(R.id.img_haibao);
|
||||
imgQrcode = layoutView.findViewById(R.id.img_qr_code);
|
||||
rlHaibao = layoutView.findViewById(R.id.relative_hb);
|
||||
imgDown.setOnClickListener(onclick);
|
||||
imgCopy.setOnClickListener(onclick);
|
||||
authUrlToQrcode(shareCode);
|
||||
|
||||
}
|
||||
|
||||
View.OnClickListener onclick = new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
switch (v.getId()){
|
||||
case R.id.img_down:
|
||||
saveLayoutAsImage();
|
||||
break;
|
||||
|
||||
case R.id.img_copy:
|
||||
ClipboardManager clipboard = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE);
|
||||
ClipData clip = ClipData.newPlainText("label", AppConfig.USER_SHARE_URL + mInviteeCode);
|
||||
clipboard.setPrimaryClip(clip);
|
||||
ToastUtil.showShort(mContext,"已复制邀请链接");
|
||||
mDialog.dismiss();
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 保存名片的 bitmap 到手机相册中
|
||||
*/
|
||||
private void saveLayoutAsImage() {
|
||||
// 1. 创建 Bitmap
|
||||
Bitmap bitmap = Bitmap.createBitmap(rlHaibao.getWidth(), rlHaibao.getHeight(), Bitmap.Config.ARGB_8888);
|
||||
Canvas canvas = new Canvas(bitmap);
|
||||
rlHaibao.draw(canvas);
|
||||
|
||||
// 2. 保存到 MediaStore(Android 10+ 适用)
|
||||
String filename = "layout_" + System.currentTimeMillis() + ".png";
|
||||
ContentValues values = new ContentValues();
|
||||
values.put(MediaStore.Images.Media.DISPLAY_NAME, filename);
|
||||
values.put(MediaStore.Images.Media.MIME_TYPE, "image/png");
|
||||
values.put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_PICTURES + "/MyLayouts");
|
||||
|
||||
ContentResolver resolver = mContext.getContentResolver();
|
||||
Uri uri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
|
||||
|
||||
if (uri != null) {
|
||||
try (OutputStream out = resolver.openOutputStream(uri)) {
|
||||
bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
|
||||
ToastUtil.showShort(mContext,"保存成功");
|
||||
mDialog.dismiss();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
ToastUtil.showShort(mContext,"保存失败:" + e.getMessage());
|
||||
mDialog.dismiss();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* url转为二维码显示
|
||||
* @param data
|
||||
*/
|
||||
private void authUrlToQrcode(String data) {
|
||||
try {
|
||||
Bitmap qrImage = ZXingUtils.createQRCodeImage(AppConfig.USER_SHARE_URL + data);
|
||||
imgQrcode.setImageBitmap(qrImage);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void show() {
|
||||
if(mDialog != null){
|
||||
mDialog.show();
|
||||
}
|
||||
}
|
||||
|
||||
public void dismiss() {
|
||||
if(mDialog != null){
|
||||
mDialog.dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user