diff --git a/app/src/main/java/com/gh/base/BaseActivity.java b/app/src/main/java/com/gh/base/BaseActivity.java index 41e932b1e2..62ddfc2ebc 100644 --- a/app/src/main/java/com/gh/base/BaseActivity.java +++ b/app/src/main/java/com/gh/base/BaseActivity.java @@ -15,6 +15,7 @@ import android.os.TransactionTooLargeException; import android.text.TextUtils; import android.util.TypedValue; import android.view.Gravity; +import android.view.MotionEvent; import android.view.View; import android.view.Window; import android.view.WindowManager; @@ -50,6 +51,7 @@ import com.gh.gamecenter.eventbus.EBShowDialog; import com.lightgame.BaseAppCompatActivity; import com.lightgame.download.DownloadEntity; import com.lightgame.download.FileUtils; +import com.lightgame.utils.Util_System_Keyboard; import com.lightgame.utils.Utils; import com.tencent.tauth.Tencent; @@ -89,6 +91,7 @@ public abstract class BaseActivity extends BaseAppCompatActivity implements Easy private boolean mHasAddTaskFloat = false; private View mTaskBackView; private WindowManager mWM; + private WindowManager.LayoutParams mWmParams; protected final Handler mBaseHandler = new BaseHandler(this); @@ -314,22 +317,75 @@ public abstract class BaseActivity extends BaseAppCompatActivity implements Easy private void addTaskBackView() { mWM = (WindowManager) getSystemService(Context.WINDOW_SERVICE); - WindowManager.LayoutParams wmParams = new WindowManager.LayoutParams(); - wmParams.type = WindowManager.LayoutParams.TYPE_APPLICATION; - wmParams.format = PixelFormat.RGBA_8888; - wmParams.gravity = Gravity.LEFT | Gravity.BOTTOM; - wmParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; - wmParams.width = DisplayUtils.dip2px(76F); - wmParams.height = DisplayUtils.dip2px(36F); - wmParams.y = DisplayUtils.dip2px(114F); + mWmParams = new WindowManager.LayoutParams(); + mWmParams.type = WindowManager.LayoutParams.TYPE_APPLICATION; + mWmParams.format = PixelFormat.RGBA_8888; + mWmParams.gravity = Gravity.LEFT | Gravity.BOTTOM; + mWmParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; + mWmParams.width = DisplayUtils.dip2px(76F); + mWmParams.height = DisplayUtils.dip2px(36F); + mWmParams.y = SPUtils.getInt(Constants.SP_TASK_FLOAT_LAST_Y, DisplayUtils.dip2px(114F)); mTaskBackView = View.inflate(this, R.layout.layout_task_back, null); mTaskBackView.setOnClickListener(v -> { + // 如果当前是在键盘输入时,点击"返回任务"要先收起键盘 + Util_System_Keyboard.hideSoftKeyboard(this); startActivity(EnergyCenterActivity.Companion.getIntent(this)); SPUtils.setBoolean(Constants.SP_SHOW_TASK_FLOAT, false); mWM.removeView(mTaskBackView); mHasAddTaskFloat = false; }); - mWM.addView(mTaskBackView, wmParams); + setFloatTouchListener(); + mWM.addView(mTaskBackView, mWmParams); + } + + private void setFloatTouchListener() { + int screenHeight = getResources().getDisplayMetrics().heightPixels; + + mTaskBackView.setOnTouchListener(new View.OnTouchListener() { + + private int intervalY; + private int startY; + + @Override + public boolean onTouch(View v, MotionEvent event) { + final int y = (int) event.getRawY(); + + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + intervalY = y; + startY = y; + break; + + case MotionEvent.ACTION_MOVE: + mWmParams.y -= (y - intervalY); + if (mWmParams.y < 0) { + mWmParams.y = 0; + } + + if (mWmParams.y > screenHeight) { + mWmParams.y = screenHeight; + } + + if (mWM != null && mTaskBackView != null && mHasAddTaskFloat) { + mWM.updateViewLayout(mTaskBackView, mWmParams); + } + + intervalY = y; + return true; + + case MotionEvent.ACTION_UP: + // 滑动距离少于10视为点击,返回false,否则视为拖动,返回true + if (Math.abs(y - startY) <= 10) { + return false; + } else { + // 记录位置 + SPUtils.setInt(Constants.SP_TASK_FLOAT_LAST_Y, mWmParams.y); + return true; + } + } + return false; + } + }); } diff --git a/app/src/main/java/com/gh/common/constant/Constants.java b/app/src/main/java/com/gh/common/constant/Constants.java index 72a5ae96d0..4183b9d7cf 100644 --- a/app/src/main/java/com/gh/common/constant/Constants.java +++ b/app/src/main/java/com/gh/common/constant/Constants.java @@ -180,8 +180,10 @@ public class Constants { // 头像挂件ID public static final String SP_CHOOSE_AVATAR_ID = "choose_avatar_id"; - //是否显示返回任务悬浮图标 + // 是否显示返回任务悬浮图标 public static final String SP_SHOW_TASK_FLOAT = "show_task_float"; + // 悬浮图标Y值 + public static final String SP_TASK_FLOAT_LAST_Y = "task_float_last_y"; //手机号码匹配规则 public static final String REGEX_MOBILE = "^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$"; diff --git a/app/src/main/java/com/gh/download/server/BrowserInstallHelper.kt b/app/src/main/java/com/gh/download/server/BrowserInstallHelper.kt index a11eee5087..6f181f37f0 100644 --- a/app/src/main/java/com/gh/download/server/BrowserInstallHelper.kt +++ b/app/src/main/java/com/gh/download/server/BrowserInstallHelper.kt @@ -23,10 +23,25 @@ object BrowserInstallHelper { private const val PORT = 32321 - private val mServer by lazy { DownloadServer(PORT) } + private val mServer by lazy { getServer() } private val mFileNameSet by lazy { hashSetOf() } private val mContext by lazy { HaloApp.getInstance().application } + private val mAllInstalledPackageList: ArrayList by lazy { + PackageUtils.getAllPackageNameIncludeSystemApps(HaloApp.getInstance().applicationContext) + } + + private fun getServer(): DownloadServer { + val server = DownloadServer(PORT) + for (packageName in mAllInstalledPackageList) { + if (packageName.contains("com.freeme") || packageName.contains("com.zhuoyi")) { + server.isBuggyDevice = true + break + } + } + return server + } + fun downloadFile(filePath: String) { var fileName = filePath.substringAfterLast(File.separator) // 山寨机没有 .apk 后缀但有 Content-Type 管用,还是给它补上 .apk 后缀 @@ -72,7 +87,7 @@ object BrowserInstallHelper { // if (SPUtils.getBoolean(Constants.SP_USE_BROWSER_TO_INSTALL)) { // false // } else { - SPUtils.getBoolean(Constants.SP_SHOULD_SHOW_GAMEDETAIL_USE_BROWSER_TO_INSTALL_HINT, true) + SPUtils.getBoolean(Constants.SP_SHOULD_SHOW_GAMEDETAIL_USE_BROWSER_TO_INSTALL_HINT, true) // } } else { false @@ -123,11 +138,6 @@ object BrowserInstallHelper { */ @JvmStatic fun isUseBrowserToInstallEnabled(): Boolean { - // 如果已经手动设置了使用浏览器安装,那么后台开关强制为开,直到用户关闭才走下面的逻辑 - if (SPUtils.getBoolean(Constants.SP_USE_BROWSER_TO_INSTALL)) { - return true - } - val settingsEntity = Config.getNewSettingsEntity() if (settingsEntity == null) { @@ -139,7 +149,7 @@ object BrowserInstallHelper { settingsEntity.installModel.packages?.let { for (packageName in it) { - if (mServer.allInstalledPackageList.contains(packageName)) { + if (mAllInstalledPackageList.contains(packageName)) { return true } } diff --git a/app/src/main/java/com/gh/download/server/DownloadServer.kt b/app/src/main/java/com/gh/download/server/DownloadServer.kt index a7e2dd9f56..616c698227 100644 --- a/app/src/main/java/com/gh/download/server/DownloadServer.kt +++ b/app/src/main/java/com/gh/download/server/DownloadServer.kt @@ -2,7 +2,6 @@ package com.gh.download.server import com.gh.common.constant.Constants import com.gh.common.exposure.ExposureEvent -import com.gh.common.util.PackageUtils import com.gh.common.util.getMetaExtra import com.gh.common.util.toObject import com.gh.download.DownloadManager @@ -20,7 +19,6 @@ class DownloadServer(port: Int) : NanoHTTPD(port) { private val mPublishSubject: PublishSubject = PublishSubject.create() private val mCompositeDisposable: CompositeDisposable = CompositeDisposable() - val allInstalledPackageList by lazy { PackageUtils.getAllPackageNameIncludeSystemApps(HaloApp.getInstance().applicationContext) } // 是否是山寨机 var isBuggyDevice: Boolean = false @@ -35,13 +33,6 @@ class DownloadServer(port: Int) : NanoHTTPD(port) { logBrowserDownload(it, false) }, {}) - for (packageName in allInstalledPackageList) { - if (packageName.contains("com.freeme") || packageName.contains("com.zhuoyi")) { - isBuggyDevice = true - break - } - } - mCompositeDisposable.add(disposable) } diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeViewModel.kt b/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeViewModel.kt index a6d54074b6..1ca5825b43 100644 --- a/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeViewModel.kt @@ -12,7 +12,6 @@ import com.gh.common.util.createRequestBody import com.gh.gamecenter.R import com.gh.gamecenter.entity.* import com.gh.gamecenter.eventbus.EBUserFollow -import com.gh.gamecenter.manager.UserManager import com.gh.gamecenter.retrofit.BiResponse import com.gh.gamecenter.retrofit.Response import com.gh.gamecenter.retrofit.RetrofitManager diff --git a/app/src/main/res/drawable-xxxhdpi/ic_install_method_select.png b/app/src/main/res/drawable-xxxhdpi/ic_install_method_select.png new file mode 100644 index 0000000000..178a020923 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_install_method_select.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_install_method_select.webp b/app/src/main/res/drawable-xxxhdpi/ic_install_method_select.webp deleted file mode 100644 index 487c49b80d..0000000000 Binary files a/app/src/main/res/drawable-xxxhdpi/ic_install_method_select.webp and /dev/null differ diff --git a/app/src/main/res/layout/fragment_energy_center.xml b/app/src/main/res/layout/fragment_energy_center.xml index 3cd942428e..32c4defde9 100644 --- a/app/src/main/res/layout/fragment_energy_center.xml +++ b/app/src/main/res/layout/fragment_energy_center.xml @@ -145,12 +145,15 @@ 签到规则 1、每日可领取2个光能、1个成长值,最多领取连续7天签到奖励,中断或签满7天则重新计算 2、连续签满7天可额外奖励1次免费抽奖机会 - 又有光能可以收了 - 收能量兑大奖 + 【光环助手】又有光能可以收了!收能量兑大奖! + 每日10点连续签到领能量,赶紧行动吧! 开启成功 系统日历将准时提醒您签到