package com.ckkj.water.mine; import static com.ckkj.water.ConstantUtil.POST_NOTIFICATIONS_PERMISSION_CODE; import static com.ckkj.water.ConstantUtil.WRITE_FILE_PERMISSON_CPDE; import android.Manifest; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Bundle; import android.os.Handler; import android.view.View; import androidx.annotation.NonNull; import com.ckkj.water.main.MainContract; import com.ckkj.water.main.entity.CheckVersionEntity; import com.ckkj.water.mine.entity.MineUserInfoBean; import com.ckkj.water.utils.AppInfoUtil; import com.ckkj.water.utils.manager.ThemeManager; import com.gyf.immersionbar.ImmersionBar; import com.ckkj.water.AppConfig; import com.ckkj.water.EventMessage; import com.ckkj.water.R; import com.ckkj.water.base.BaseActivity; import com.ckkj.water.base.BaseFragment; import com.ckkj.water.databinding.ActivitySettingsLayoutBinding; import com.ckkj.water.dialog.DialogAppUpdate; import com.ckkj.water.login.LoginActivity; import com.ckkj.water.mine.mvp.MineContract; import com.ckkj.water.mine.mvp.MineImpl; import com.ckkj.water.mine.mvp.MinePresenter; import com.ckkj.water.network.BaseBean; import com.ckkj.water.utils.manager.ActivityManager; import com.ckkj.water.utils.manager.WaterUserInfoManager; import com.ckkj.water.utils.show.ToastUtil; import org.jetbrains.annotations.NotNull; import java.io.File; import java.util.List; import de.greenrobot.event.EventBus; import pub.devrel.easypermissions.EasyPermissions; /** * @author fengxiaoyang * @date 2025/8/18 * @description TODO: 设置页面 */ public class SettingsActivity extends BaseActivity implements MineContract.MineView, MainContract.MainView, EasyPermissions.PermissionCallbacks{ @Override public void initData(Bundle savedInstanceState) { super.initData(savedInstanceState); ImmersionBar.with(this) .statusBarDarkFont(ThemeManager.isAppThemeLight(mContext)) // 白色状态栏图标 .navigationBarColor(R.color.color_gray_theme) .titleBar(viewBinding.rlTitle) .init(); viewBinding.includeTitle.tvTitle.setText(R.string.settings_title); viewBinding.includeTitle.imgBack.setOnClickListener(c -> finish()); if(AppConfig.USER_LOGIN){ // viewBinding.tvUserPhone.setText(WaterUserInfoManager.getInstance().getUserInfo().getMobile()); // viewBinding.tvLogOut.setVisibility(View.VISIBLE); } //获取本应用所占用的缓存 displayCacheSize(); try { // 获取 PackageManager 实例 PackageManager packageManager = mContext.getPackageManager(); // 获取应用信息 PackageInfo packageInfo = packageManager.getPackageInfo(mContext.getPackageName(), 0); // 获取版本名称 String versionName = packageInfo.versionName; viewBinding.tvVersionName.setText(versionName); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } initListener(); } private void initListener() { setClick(viewBinding.rlCheckVersion); setClick(viewBinding.rlSetCache); setClick(viewBinding.rlUserAgreement); setClick(viewBinding.rlUserPrivacy); setClick(viewBinding.rlLogOff); } private void setClick(View view) { view.setOnClickListener(this::onClick); } @Override public MinePresenter createPresenter() { return new MinePresenter(new MineImpl()); } @Override public int getLayoutResId(Bundle savedInstanceState) { return 0; } public void onClick(View v) { switch (v.getId()){ case R.id.rl_check_version://版本检测 //版本检测更新 mPresenter.checkNewVersion(); break; case R.id.rl_set_cache: showLoadingDialog(); clearCache(); new Handler().postDelayed(new Runnable() { @Override public void run() { hideDialogLoading(); ToastUtil.showShort(mContext,getString(R.string.cache_cleared_success)); displayCacheSize(); } },800); break; case R.id.rl_user_agreement://用户协议 Bundle bundle = new Bundle(); bundle.putInt("from_requse_code",WebviewUserAgreement.AGREEMENT_CODE); goToWihoutNoPresent(mContext, WebviewUserAgreement.class,bundle); break; case R.id.rl_user_privacy://隐私政策 Bundle bundleYS = new Bundle(); bundleYS.putInt("from_requse_code",WebviewUserAgreement.PRIVACY_CODE); goToWihoutNoPresent(mContext, WebviewUserAgreement.class,bundleYS); break; case R.id.rl_log_off://注销账号 goTo(mContext, UserLogOffAccountActivity.class,null); break; } } private boolean isForceUpdate; private DialogAppUpdate mUpdateDialog; @Override public void showError(String message) { } @Override public void logOut(BaseBean bean) { } private void displayCacheSize() { long cacheSize = getCacheSize(); String sizeString; if (cacheSize >= 1024 * 1024) { sizeString = String.format("%.2f MB", cacheSize / (1024.0 * 1024.0)); } else { sizeString = String.format("%d KB", cacheSize / 1024); } viewBinding.tvCacheSize.setText(sizeString); } private long getCacheSize() { File cacheDir = mContext.getCacheDir(); return getFolderSize(cacheDir); } private long getFolderSize(File dir) { long size = 0; if (dir != null && dir.isDirectory()) { for (File file : dir.listFiles()) { if (file.isFile()) { size += file.length(); } else { size += getFolderSize(file); } } } return size; } private void clearCache() { File cacheDir = getCacheDir(); deleteDir(cacheDir); } private boolean deleteDir(File dir) { if (dir != null && dir.isDirectory()) { String[] children = dir.list(); if (children != null) { for (String child : children) { deleteDir(new File(dir, child)); } } } return dir.delete(); } @Override public void getUserInfoSuccess(MineUserInfoBean bean) { } @Override public void updateUserInfoSuccess(BaseBean bean) { } @Override public void updateUserPasswordSuccess(BaseBean bean) { } @Override public void logOutSuccess(BaseBean bean) { } @Override public void uploadImageSuccess(MineUserInfoBean bean) { } @Override public void getAppVersionSuccess(CheckVersionEntity bean) { int versionCode = (int) AppInfoUtil.getAppVersionCode(mContext); if(bean == null){ return; } if(!bean.isForceUpdate()){//不强制 isForceUpdate = false; }else{ isForceUpdate = true; } //前期强制更新 // isForceUpdate = true; if(bean.getVersionCode() > versionCode){ //App更新dialog mUpdateDialog = new DialogAppUpdate(mContext,R.layout.dialog_app_update_water,isForceUpdate,bean); mUpdateDialog.show(); mUpdateDialog.setOnDialogListener(new DialogAppUpdate.DialogListener() { @Override public void callBackGetPermisson(String permission) { if (!hasRecordPermission(permission)) { if (Manifest.permission.POST_NOTIFICATIONS.equals(permission)) { getPermissionRequst(permission, getString(R.string.notification_permission_request), getString(R.string.notification_permission_desc), POST_NOTIFICATIONS_PERMISSION_CODE); return; } // 没有权限,只在ACTION_DOWN时去申请 getPermissionRequst(permission, getString(R.string.storage_permission_request), getString(R.string.storage_permission_desc), WRITE_FILE_PERMISSON_CPDE); }else{ } } @Override public void downLoadFinish() { runOnUiThread(new Runnable() { @Override public void run() { ToastUtil.showShort(mContext,getString(R.string.download_complete_installing)); } }); } }); }else{ ToastUtil.showShort(mContext,"当前已是最新版本"); } } @Override public void getAccountLogoffCodeSuccess(BaseBean bean) { } @Override public void confirmAccountLogoffCodeSuccess(BaseBean bean) { } @Override public void activationVipSuccess(BaseBean bean) { } @Override public void getVersionCheck(CheckVersionEntity bean) { } @Override public void getYunshiDataSuccess(BaseBean bean) { } @Override public void onPermissionsGranted(int requestCode, @NonNull List perms) { } @Override public void onPermissionsDenied(int requestCode, @NonNull List perms) { } @Override public void onRequestPermissionsResult(int requestCode, @NonNull @NotNull String[] permissions, @NonNull @NotNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this); hidePermissionDialog(); if(requestCode == WRITE_FILE_PERMISSON_CPDE){ if(mUpdateDialog != null && grantResults.length > 0 && grantResults[0] == android.content.pm.PackageManager.PERMISSION_GRANTED){ mUpdateDialog.startUpdateApp(); } }else if(requestCode == POST_NOTIFICATIONS_PERMISSION_CODE){ if(mUpdateDialog != null && grantResults.length > 0 && grantResults[0] == android.content.pm.PackageManager.PERMISSION_GRANTED){ mUpdateDialog.startUpdateApp(); } } } }