diff --git a/app/src/main/java/com/mirkowu/mvm/mvvm/ImageAdapter.java b/app/src/main/java/com/mirkowu/mvm/mvvm/ImageAdapter.java index 2493ae4..6aaeeae 100644 --- a/app/src/main/java/com/mirkowu/mvm/mvvm/ImageAdapter.java +++ b/app/src/main/java/com/mirkowu/mvm/mvvm/ImageAdapter.java @@ -1,6 +1,5 @@ package com.mirkowu.mvm.mvvm; -import android.view.LayoutInflater; import android.view.ViewGroup; import androidx.annotation.NonNull; @@ -8,8 +7,8 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.request.RequestOptions; -import com.mirkowu.lib_widget.adapter.BaseRVAdapter; import com.mirkowu.lib_image.ImageLoader; +import com.mirkowu.lib_widget.adapter.BaseRVAdapter; import com.mirkowu.mvm.R; import com.mirkowu.mvm.bean.GankImageBean; import com.mirkowu.mvm.databinding.ItemGankImageBinding; @@ -28,8 +27,8 @@ public void onBindHolder(@NonNull Holder holder, GankImageBean item, int positio @NonNull @Override - public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new Holder(ItemGankImageBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); + public Holder onCreateHolder(@NonNull ViewGroup parent, int viewType) { + return new Holder(ItemGankImageBinding.inflate(mLayoutInflater, parent, false)); } class Holder extends RecyclerView.ViewHolder { diff --git a/app/src/main/java/com/mirkowu/mvm/recycelerview/GridAdapter.kt b/app/src/main/java/com/mirkowu/mvm/recycelerview/GridAdapter.kt index d2f3a99..f57ccf0 100644 --- a/app/src/main/java/com/mirkowu/mvm/recycelerview/GridAdapter.kt +++ b/app/src/main/java/com/mirkowu/mvm/recycelerview/GridAdapter.kt @@ -1,6 +1,5 @@ package com.mirkowu.mvm.recycelerview -import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.mirkowu.lib_widget.adapter.BaseRVAdapter @@ -11,8 +10,8 @@ class GridAdapter : BaseRVAdapter() { } - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder { - return Holder(ItemBindingListBinding.inflate(LayoutInflater.from(parent.context), parent, false)) + override fun onCreateHolder(parent: ViewGroup, viewType: Int): Holder { + return Holder(ItemBindingListBinding.inflate(mLayoutInflater, parent, false)) } override fun onBindHolder(holder: Holder, item: String?, position: Int) { diff --git a/lib_bugly/src/main/java/com/mirkowu/lib_bugly/UpgradeDialog.java b/lib_bugly/src/main/java/com/mirkowu/lib_bugly/UpgradeDialog.java index 07e0cf5..a656806 100644 --- a/lib_bugly/src/main/java/com/mirkowu/lib_bugly/UpgradeDialog.java +++ b/lib_bugly/src/main/java/com/mirkowu/lib_bugly/UpgradeDialog.java @@ -8,16 +8,22 @@ import androidx.fragment.app.FragmentManager; +import com.mirkowu.lib_util.LogUtil; +import com.mirkowu.lib_util.PermissionsUtil; +import com.mirkowu.lib_util.utilcode.util.ToastUtils; import com.mirkowu.lib_widget.dialog.BaseDialog; import com.tencent.bugly.beta.UpgradeInfo; import com.tencent.bugly.beta.download.DownloadListener; import com.tencent.bugly.beta.download.DownloadTask; import com.tencent.bugly.beta.upgrade.UpgradeStateListener; +import static android.view.View.GONE; +import static android.view.View.VISIBLE; + /** * Bugly 升级版本SDK */ -public class UpgradeDialog extends BaseDialog implements DownloadListener, UpgradeStateListener { +public class UpgradeDialog extends BaseDialog implements DownloadListener, UpgradeStateListener, View.OnClickListener { protected static final int DEFAULT_WIDTH = 280; //默认宽度 dp TextView tvTitle; @@ -29,6 +35,7 @@ public class UpgradeDialog extends BaseDialog implements DownloadListener, Upgra RelativeLayout llProgress; LinearLayout llButton; + protected OnButtonClickListener listener; private UpgradeInfo upgradeInfo; private boolean isForceUpgrade; @@ -60,12 +67,7 @@ protected void convertView(ViewHolder viewHolder, BaseDialog baseDialog) { tvPositive = viewHolder.getView(R.id.tvPositive); llButton = viewHolder.getView(R.id.llButton); - tvPositive.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - startTask(); - } - }); + tvPositive.setOnClickListener(this); if (upgradeInfo == null) { dismissAllowingStateLoss(); @@ -74,35 +76,29 @@ public void onClick(View v) { tvTitle.setText(upgradeInfo.title); tvContent.setText(upgradeInfo.newFeature); + isForceUpgrade = upgradeInfo.upgradeType == 2; + + initButtonText(); + + UpgradeManager.registerDownloadListener(this); + UpgradeManager.setUpgradeStateListener(this); + } + + private void initButtonText() { if (isForceUpgrade = upgradeInfo.upgradeType == 2) { //强制 tvNegative.setVisibility(View.GONE); } else { tvNegative.setVisibility(View.VISIBLE); - tvNegative.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - dismissAllowingStateLoss(); - } - }); + tvNegative.setOnClickListener(this); } - UpgradeManager.registerDownloadListener(this); - UpgradeManager.setUpgradeStateListener(this); - } + tvNegative.setVisibility(isForceUpgrade ? GONE : VISIBLE); + tvNegative.setText(com.mirkowu.lib_upgrade.R.string.up_next_time); + tvPositive.setVisibility(VISIBLE); + tvPositive.setText(com.mirkowu.lib_upgrade.R.string.up_upgrade); - private void startTask() { - llButton.setVisibility(View.GONE); - llProgress.setVisibility(View.VISIBLE); -// tvNegative.setText(R.string.up_cancel); -// tvNegative.setOnClickListener(new View.OnClickListener() { -// @Override -// public void onClick(View v) { -// BuglyManager.cancelDownload(); -// dismissAllowingStateLoss(); -// } -// }); - UpgradeManager.startDownloadTask(); + llProgress.setVisibility(View.GONE); } @Override @@ -117,39 +113,99 @@ public void onStart() { // } } + @Override + public void onResume() { + super.onResume(); + initButtonText(); + } + + @Override + public void onClick(View v) { + int i = v.getId(); + if (i == R.id.tvPositive) { + if (listener != null) { + listener.onButtonClick(this, true); + } + if (PermissionsUtil.hasPermissions(getContext(), PermissionsUtil.GROUP_STORAGE)) { + startDownloadTask(); + } else { + LogUtil.e("没有存储权限"); + if (listener != null) { + listener.onNeedPermission(this); + } else { + LogUtil.e("下载到默认路径"); + startDownloadTask(); + } + } + } else if (i == R.id.tvNegative) { + if (listener != null) { + listener.onButtonClick(this, true); + } + UpgradeManager.cancelDownload(); + dismissAllowingStateLoss(); + } + } + + + private void startDownloadTask() { + llProgress.setVisibility(VISIBLE); + tvPositive.setVisibility(GONE); + tvNegative.setVisibility(VISIBLE); + + if (isForceUpgrade) { + tvNegative.setText(com.mirkowu.lib_upgrade.R.string.up_downloading); + tvNegative.setEnabled(false); + } else { + tvNegative.setText(com.mirkowu.lib_upgrade.R.string.up_cancel); + tvNegative.setEnabled(true); + } + + UpgradeManager.startDownloadTask(); + } + + @Override public void onReceive(DownloadTask downloadTask) { + if (!isAdded() || isDetached()) return; int progress = (int) (downloadTask.getSavedLength() * 100f / downloadTask.getTotalLength()); + llProgress.setVisibility(VISIBLE); tvProgress.setText(String.format("%d%%", progress)); mProgressBar.setProgress(progress); } @Override public void onCompleted(DownloadTask downloadTask) { - if (!isForceUpgrade) { - dismissAllowingStateLoss(); - } else { + if (!isAdded() || isDetached()) return; + if (isForceUpgrade) { llButton.setVisibility(View.VISIBLE); tvNegative.setVisibility(View.GONE); tvPositive.setVisibility(View.VISIBLE); llProgress.setVisibility(View.GONE); + + tvNegative.setVisibility(GONE); + tvNegative.setEnabled(true); + tvPositive.setVisibility(VISIBLE); + tvPositive.setText(com.mirkowu.lib_upgrade.R.string.up_click_install); + } else { + dismissAllowingStateLoss(); } } @Override public void onFailed(DownloadTask downloadTask, int i, String s) { + ToastUtils.showShort(R.string.strNotificationDownloadError); + dismissAllowingStateLoss(); } @Override public void onDestroyView() { - super.onDestroyView(); UpgradeManager.unregisterDownloadListener(); UpgradeManager.cancelDownload(); + super.onDestroyView(); } @Override public void onUpgradeFailed(boolean b) { - } @Override @@ -158,15 +214,34 @@ public void onUpgradeSuccess(boolean b) { @Override public void onUpgradeNoVersion(boolean b) { - } @Override public void onUpgrading(boolean b) { - } @Override public void onDownloadCompleted(boolean b) { } + + + public UpgradeDialog setOnButtonClickListener(UpgradeDialog.OnButtonClickListener listener) { + this.listener = listener; + return this; + } + + public interface OnButtonClickListener { + + void onNeedPermission(UpgradeDialog dialog); + + /** + * 当窗口按钮被点击 + * + * @param dialog + * @param isPositiveClick true :PositiveButton点击, false :NegativeButton点击 + * @return 是否 + */ + default void onButtonClick(UpgradeDialog dialog, boolean isPositiveClick) { + } + } } diff --git a/lib_upgrade/src/main/java/com/mirkowu/lib_upgrade/UpgradeDialog.java b/lib_upgrade/src/main/java/com/mirkowu/lib_upgrade/UpgradeDialog.java index a419a12..f1973b6 100644 --- a/lib_upgrade/src/main/java/com/mirkowu/lib_upgrade/UpgradeDialog.java +++ b/lib_upgrade/src/main/java/com/mirkowu/lib_upgrade/UpgradeDialog.java @@ -87,7 +87,6 @@ protected void convertView(ViewHolder viewHolder, BaseDialog baseDialog) { tvNegative.setOnClickListener(this); ivIcon.setVisibility(GONE); - if (TextUtils.isEmpty(upgradeInfo.getTitle())) { tvTitle.setText(R.string.up_check_new_version); } else { @@ -96,9 +95,9 @@ protected void convertView(ViewHolder viewHolder, BaseDialog baseDialog) { HtmlUtil.setTextViewHtml(tvContent, upgradeInfo.getContent()); //支持html tvNegative.setVisibility(upgradeInfo.isForceUpgrade() == 1 ? GONE : VISIBLE); + tvNegative.setText(R.string.up_next_time); tvPositive.setVisibility(VISIBLE); tvPositive.setText(R.string.up_upgrade); - tvNegative.setText(R.string.up_next_time); } @Override @@ -124,14 +123,14 @@ public void onClick(View v) { IntentUtil.startInstall(getContext(), apkFile); } else { if (PermissionsUtil.hasPermissions(getContext(), PermissionsUtil.GROUP_STORAGE)) { - downloadApk(); + startDownloadTask(); } else { LogUtil.e("没有存储权限"); if (listener != null) { listener.onNeedPermission(this); } else { LogUtil.e("下载到默认路径"); - downloadApk(); + startDownloadTask(); } } } @@ -168,16 +167,16 @@ default void onButtonClick(UpgradeDialog dialog, boolean isPositiveClick) { } } - public void downloadApk() { + public void startDownloadTask() { llProgress.setVisibility(VISIBLE); tvPositive.setVisibility(GONE); tvNegative.setVisibility(VISIBLE); - if (upgradeInfo.isForceUpgrade() != 1) { - tvNegative.setText(R.string.up_cancel); - tvNegative.setEnabled(true); - } else { + if (upgradeInfo.isForceUpgrade() == 1) { tvNegative.setText(R.string.up_downloading); tvNegative.setEnabled(false); + } else { + tvNegative.setText(R.string.up_cancel); + tvNegative.setEnabled(true); } if (TextUtils.isEmpty(upgradeInfo.getApkUrl())) { @@ -205,6 +204,7 @@ protected void startTask(String path) { .setListener(new FileDownloadSampleListener() { @Override protected void progress(BaseDownloadTask task, int soFarBytes, int totalBytes) { + if (!isAdded() || isDetached()) return; int progress = (int) ((soFarBytes * 100.0) / totalBytes); tvProgress.setText(String.format("%d%%", progress)); mProgressBar.setProgress(progress); diff --git a/lib_widget/src/main/java/com/mirkowu/lib_widget/adapter/BaseRVAdapter.java b/lib_widget/src/main/java/com/mirkowu/lib_widget/adapter/BaseRVAdapter.java index e4e80c5..74b1b02 100644 --- a/lib_widget/src/main/java/com/mirkowu/lib_widget/adapter/BaseRVAdapter.java +++ b/lib_widget/src/main/java/com/mirkowu/lib_widget/adapter/BaseRVAdapter.java @@ -1,6 +1,9 @@ package com.mirkowu.lib_widget.adapter; +import android.content.Context; +import android.view.LayoutInflater; import android.view.View; +import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; @@ -14,6 +17,8 @@ public abstract class BaseRVAdapter extends RecyclerView.Adapter { private List mData = new ArrayList<>(); + protected Context mContext; + protected LayoutInflater mLayoutInflater; public BaseRVAdapter() { } @@ -173,6 +178,16 @@ public int getItemCount() { return this.mData.size(); } + @NonNull + @Override + public VH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + mContext = parent.getContext(); + mLayoutInflater = LayoutInflater.from(mContext); + return onCreateHolder(parent, viewType); + } + + @NonNull + public abstract VH onCreateHolder(@NonNull ViewGroup parent, int viewType); @Override public void onBindViewHolder(@NonNull VH holder, int position) { diff --git a/lib_widget/src/main/java/com/mirkowu/lib_widget/adapter/SimpleRVAdapter.java b/lib_widget/src/main/java/com/mirkowu/lib_widget/adapter/SimpleRVAdapter.java index 5b2fd72..38d1453 100644 --- a/lib_widget/src/main/java/com/mirkowu/lib_widget/adapter/SimpleRVAdapter.java +++ b/lib_widget/src/main/java/com/mirkowu/lib_widget/adapter/SimpleRVAdapter.java @@ -1,6 +1,5 @@ package com.mirkowu.lib_widget.adapter; -import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -11,16 +10,25 @@ public abstract class SimpleRVAdapter extends BaseRVAdapter { private int mLayoutResId; - public SimpleRVAdapter(@LayoutRes int layoutResId) { mLayoutResId = layoutResId; } - @NonNull @Override - public BaseRVHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new BaseRVHolder(LayoutInflater.from(parent.getContext()).inflate(mLayoutResId, parent, false)); + public BaseRVHolder onCreateHolder(@NonNull ViewGroup parent, int viewType) { + return onCreateBaseRVHolder(parent, viewType); + } + + /** + * 创建默认的holder + * + * @param parent + * @param viewType + * @return + */ + protected BaseRVHolder onCreateBaseRVHolder(@NonNull ViewGroup parent, int viewType) { + return new BaseRVHolder(mLayoutInflater.inflate(mLayoutResId, parent, false)); } /** diff --git a/lib_widget/src/main/java/com/mirkowu/lib_widget/dialog/BottomListDialog.java b/lib_widget/src/main/java/com/mirkowu/lib_widget/dialog/BottomListDialog.java index eb2285a..3bc5052 100644 --- a/lib_widget/src/main/java/com/mirkowu/lib_widget/dialog/BottomListDialog.java +++ b/lib_widget/src/main/java/com/mirkowu/lib_widget/dialog/BottomListDialog.java @@ -1,7 +1,6 @@ package com.mirkowu.lib_widget.dialog; import android.text.TextUtils; -import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; @@ -17,8 +16,6 @@ import com.mirkowu.lib_widget.adapter.BaseRVHolder; import com.mirkowu.lib_widget.decoration.LinearDecoration; -import org.jetbrains.annotations.NotNull; - import java.util.List; /** @@ -160,17 +157,16 @@ public interface OnItemClickListener { } public static class ListAdapter extends BaseRVAdapter { - + @NonNull @Override - public void onBindHolder(@NonNull @NotNull BaseRVHolder holder, String item, int position) { - TextView tvContent = holder.getView(R.id.tvContent); - tvContent.setText(item); + public BaseRVHolder onCreateHolder(@NonNull ViewGroup parent, int viewType) { + return new BaseRVHolder(mLayoutInflater.inflate(R.layout.widget_item_bottom_list, parent, false)); } - @NonNull @Override - public BaseRVHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new BaseRVHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.widget_item_bottom_list, parent, false)); + public void onBindHolder(@NonNull BaseRVHolder holder, String item, int position) { + TextView tvContent = holder.getView(R.id.tvContent); + tvContent.setText(item); } }