Skip to content

Commit 67df29a

Browse files
committed
merge upstream
2 parents cda71bc + 365c2e0 commit 67df29a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+613
-213
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@
55
/app/signing.properties
66
*.iml
77
*.jks
8-
*.keystore
8+
*.keystore
9+
androidSign

README.md

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,9 @@
77
[![Downloads](https://img.shields.io/github/downloads/aistra0528/Hail/total.svg)](https://github.com/aistra0528/Hail/releases)
88
[![License](https://img.shields.io/github/license/aistra0528/Hail)](LICENSE)
99

10-
雹是一款用于冻结 Android 应用的自由软件,您可自由享用所有功能。
10+
雹是一款用于冻结 Android 应用的自由软件[GitHub Releases](https://github.com/aistra0528/Hail/releases)
1111

12-
[<img src="coolapk-badge.png" alt="Get it on CoolApk" height="80">](https://www.coolapk.com/apk/com.aistra.hail)
1312
[<img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png" alt="Get it on F-Droid" height="80">](https://f-droid.org/packages/com.aistra.hail/)
14-
[<img src="https://play.google.com/intl/en_us/badges/images/generic/en-play-badge.png" alt="Get it on Google Play" height="80">](https://play.google.com/store/apps/details?id=com.aistra.hail)
15-
16-
酷安版签名与 [GitHub Releases](https://github.com/aistra0528/Hail/releases) 一致,F-Droid 版由 F-Droid 签名。
17-
18-
Google Play 版为 [@purofle](https://github.com/purofle)[Fork](https://github.com/purofle/Hail),由
19-
Google 签名。
2013

2114
<img src="fastlane/metadata/android/zh-CN/images/phoneScreenshots/1.png" width="32%" /> <img src="fastlane/metadata/android/zh-CN/images/phoneScreenshots/2.png" width="32%" /> <img src="fastlane/metadata/android/zh-CN/images/phoneScreenshots/3.png" width="32%" />
2215

@@ -45,15 +38,15 @@ Google 签名。
4538
4639
## 工作模式
4740

48-
雹支持以`设备所有者``超级用户` (Root) 和`Shizuku` (含 Sui) 模式工作。
41+
雹支持以`设备所有者``Dhizuku``超级用户` (Root) 和`Shizuku` (含 Sui) 模式工作。
4942

5043
**冻结的应用需要通过相同工作模式解冻。**
5144

52-
1. 如果您的设备支持无线调试或已 root,推荐选择`Shizuku`[关于 Shizuku](https://github.com/RikkaApps/Shizuku)
45+
1. 如果您的设备支持无线调试或已 root,推荐选择`Shizuku`
5346

5447
2. 如果您的设备已 root,可选择`超级用户`**此模式速度相对较慢。**
5548

56-
3. 如果您的设备不支持无线调试且未 root,可选择`设备所有者`**此模式设置较为繁琐**
49+
3. 如果您的设备不支持无线调试且未 root,可选择`设备所有者``Dhizuku`**这些模式设置较为繁琐**
5750

5851
### 设备所有者 - 隐藏 / 暂停
5952

@@ -88,37 +81,47 @@ Active admin set to component {com.aistra.hail/com.aistra.hail.receiver.DeviceAd
8881

8982
#### 移除雹的设备所有者
9083

91-
在雹的应用界面长按雹,在弹出的选项中选择卸载。
84+
设置 > 移除设备所有者
85+
86+
### Dhizuku - 隐藏 / 暂停
9287

93-
### 超级用户 - 停用 / 暂停
88+
此模式通过将 [Dhizuku](https://github.com/iamr0s/Dhizuku) 设置为设备所有者 (Device Owner),调用:
89+
90+
- `DevicePolicyManager.setApplicationHidden`方法隐藏应用。
91+
92+
- `DevicePolicyManager.setPackagesSuspended`方法暂停应用。
93+
94+
### 超级用户 - 停用 / 隐藏 / 暂停
9495

9596
此模式通过授予雹超级用户 (Superuser) 权限,执行:
9697

9798
- `pm disable`命令停用应用。
9899

100+
- `pm hide`命令隐藏应用。
101+
99102
- `pm suspend`命令暂停应用。
100103

101104
### Shizuku - 停用 / 隐藏 / 暂停
102105

103-
此模式通过 Shizuku 调用非 SDK 接口:
106+
此模式通过 [Shizuku](https://github.com/RikkaApps/Shizuku) 调用非 SDK 接口:
104107

105108
- `IPackageManager.setApplicationEnabledSetting`方法停用应用。
106109

107-
- `IPackageManager.setApplicationHiddenSettingAsUser`方法隐藏应用。 (可能需要 root)
110+
- `IPackageManager.setApplicationHiddenSettingAsUser`方法隐藏应用。 (需要 root)
108111

109112
- `IPackageManager.setPackagesSuspendedAsUser`方法暂停应用。
110113

111114
## 恢复
112115

113-
### 通过 adb (可能需要 root)
116+
### 通过 adb
114117

115118
替换 com.package.name 为目标应用的包名。
116119

117120
```shell
118121
# 启用应用
119122
adb shell pm enable com.package.name
120-
# 取消隐藏应用
121-
adb shell pm unhide com.package.name
123+
# 取消隐藏应用 (需要 root)
124+
adb shell su -c pm unhide com.package.name
122125
# 取消暂停应用
123126
adb shell pm unsuspend com.package.name
124127
```

README_EN.md

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,9 @@
99
[![Downloads](https://img.shields.io/github/downloads/aistra0528/Hail/total.svg)](https://github.com/aistra0528/Hail/releases)
1010
[![License](https://img.shields.io/github/license/aistra0528/Hail)](LICENSE)
1111

12-
Hail is a free-as-in-freedom software to freeze Android apps. Enjoy all features freely!
12+
Hail is a free-as-in-freedom software to freeze Android apps. [GitHub Releases](https://github.com/aistra0528/Hail/releases)
1313

14-
[<img src="coolapk-badge.png" alt="Get it on CoolApk" height="80">](https://www.coolapk.com/apk/com.aistra.hail)
1514
[<img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png" alt="Get it on F-Droid" height="80">](https://f-droid.org/packages/com.aistra.hail/)
16-
[<img src="https://play.google.com/intl/en_us/badges/images/generic/en-play-badge.png" alt="Get it on Google Play" height="80">](https://play.google.com/store/apps/details?id=com.aistra.hail)
17-
18-
CoolApk releases are signed the same
19-
as [GitHub Releases](https://github.com/aistra0528/Hail/releases), and F-Droid releases are signed
20-
by F-Droid.
21-
22-
Google Play releases are the [Fork](https://github.com/purofle/Hail)
23-
by [@purofle](https://github.com/purofle), signed by Google.
2415

2516
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/1.png" width="32%" /> <img src="fastlane/metadata/android/en-US/images/phoneScreenshots/2.png" width="32%" /> <img src="fastlane/metadata/android/en-US/images/phoneScreenshots/3.png" width="32%" />
2617

@@ -55,16 +46,15 @@ Suspended apps will be shown as grayscale icons in the launcher. Unsuspend them
5546
5647
## Working mode
5748

58-
Hail can work with `Device Owner`, `Superuser` (Root) and `Shizuku` (including Sui).
49+
Hail can work with `Device Owner`, `Dhizuku`, `Superuser` (Root) and `Shizuku` (including Sui).
5950

6051
**Frozen app need to be unfrozen by the same working mode.**
6152

62-
1. For devices support wifi adb or rooted, `Shizuku` is
63-
recommend. [About Shizuku](https://github.com/RikkaApps/Shizuku)
53+
1. For devices support wifi adb or rooted, `Shizuku` is recommend.
6454

6555
2. For rooted devices, `Superuser` is alternative. **It is slower.**
6656

67-
3. Select `Device Owner` otherwise. **It's a pain to set up.**
57+
3. Select `Device Owner` or `Dhizuku` otherwise. **These are a pain to set up.**
6858

6959
### Device Owner - Hide / Suspend
7060

@@ -99,37 +89,47 @@ Search the message by search engine otherwise.
9989

10090
#### Remove device owner
10191

102-
Long press Hail at Apps, then select Uninstall in options.
92+
Settings > Remove Device Owner
93+
94+
### [Dhizuku](https://github.com/iamr0s/Dhizuku) - Hide / Suspend
95+
96+
This mode invoke:
97+
98+
- `DevicePolicyManager.setApplicationHidden` to hide apps.
10399

104-
### Superuser - Disable / Suspend
100+
- `DevicePolicyManager.setPackagesSuspended` to suspend apps.
101+
102+
### Superuser - Disable / Hide / Suspend
105103

106104
This mode execute:
107105

108106
- `pm disable` to disable apps.
109107

108+
- `pm hide` to hide apps.
109+
110110
- `pm suspend` to suspend apps.
111111

112-
### Shizuku - Disable / Hide / Suspend
112+
### [Shizuku](https://github.com/RikkaApps/Shizuku) - Disable / Hide / Suspend
113113

114114
This mode invoke non-SDK interface:
115115

116116
- `IPackageManager.setApplicationEnabledSetting` to disable apps.
117117

118-
- `IPackageManager.setApplicationHiddenSettingAsUser` to hide apps. (root may be required)
118+
- `IPackageManager.setApplicationHiddenSettingAsUser` to hide apps. (root required)
119119

120120
- `IPackageManager.setPackagesSuspendedAsUser` to suspend apps.
121121

122122
## Revert
123123

124-
### By adb (root may be required)
124+
### By adb
125125

126126
Replace com.package.name to the package name of target app.
127127

128128
```shell
129129
# Enable app
130130
adb shell pm enable com.package.name
131-
# Unhide app
132-
adb shell pm unhide com.package.name
131+
# Unhide app (root required)
132+
adb shell su -c pm unhide com.package.name
133133
# Unsuspend app
134134
adb shell pm unsuspend com.package.name
135135
```

androidSign

Submodule androidSign deleted from 886223d

app/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ android {
6666
}
6767

6868
dependencies {
69-
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.2")
69+
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3")
7070
implementation("androidx.core:core-ktx:1.9.0")
7171
implementation("androidx.appcompat:appcompat:1.6.1")
7272
implementation("androidx.biometric:biometric:1.1.0")

app/src/main/kotlin/com/aistra/hail/HailApp.kt

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import com.aistra.hail.app.AppManager
99
import com.aistra.hail.app.HailData
1010
import com.aistra.hail.services.AutoFreezeService
1111
import com.aistra.hail.utils.HDhizuku
12-
import com.google.android.material.color.DynamicColors
1312

1413
class HailApp : Application() {
1514
override fun onCreate() {
@@ -22,23 +21,30 @@ class HailApp : Application() {
2221

2322
fun setAutoFreezeService(enabled: Boolean? = null) {
2423
if (HailData.autoFreezeAfterLock.not()) return
25-
val start = enabled
26-
?: HailData.checkedList.any { !AppManager.isAppFrozen(it.packageName) && !it.whitelisted }
24+
val start = enabled ?: HailData.checkedList.any {
25+
it.packageName != packageName
26+
&& it.applicationInfo != null
27+
&& !AppManager.isAppFrozen(it.packageName)
28+
&& !it.whitelisted
29+
}
2730
val intent = Intent(app, AutoFreezeService::class.java)
28-
val name = ComponentName(app, AutoFreezeService::class.java)
2931
if (start) {
30-
packageManager.setComponentEnabledSetting(
31-
name, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP
32-
)
32+
setAutoFreezeServiceEnabled(true)
3333
ContextCompat.startForegroundService(app, intent)
3434
} else {
3535
stopService(intent)
36-
packageManager.setComponentEnabledSetting(
37-
name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP
38-
)
36+
setAutoFreezeServiceEnabled(false)
3937
}
4038
}
4139

40+
fun setAutoFreezeServiceEnabled(enabled: Boolean) {
41+
packageManager.setComponentEnabledSetting(
42+
ComponentName(app, AutoFreezeService::class.java),
43+
if (enabled) PackageManager.COMPONENT_ENABLED_STATE_ENABLED else PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
44+
PackageManager.DONT_KILL_APP
45+
)
46+
}
47+
4248
companion object {
4349
lateinit var app: HailApp private set
4450
}

app/src/main/kotlin/com/aistra/hail/app/AppManager.kt

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,12 @@ object AppManager {
2222
}
2323

2424
fun isAppFrozen(packageName: String): Boolean = when {
25-
HailData.workingMode == HailData.MODE_OWNER_HIDE -> HPolicy.isAppHidden(packageName)
26-
HailData.workingMode == HailData.MODE_DHIZUKU_HIDE -> HDhizuku.isAppHidden(packageName)
27-
HailData.workingMode == HailData.MODE_SHIZUKU_HIDE -> HShizuku.isAppHidden(packageName)
25+
HailData.workingMode.endsWith(HailData.DISABLE) -> HPackages.isAppDisabled(packageName)
26+
HailData.workingMode.endsWith(HailData.HIDE) -> HPackages.isAppHidden(packageName)
2827
HailData.workingMode.endsWith(HailData.SUSPEND) -> HPackages.isAppSuspended(packageName)
2928
else -> HPackages.isAppDisabled(packageName)
29+
|| HPackages.isAppHidden(packageName)
30+
|| HPackages.isAppSuspended(packageName)
3031
}
3132

3233
fun setAppFrozen(packageName: String, frozen: Boolean): Boolean =
@@ -36,6 +37,7 @@ object AppManager {
3637
HailData.MODE_DHIZUKU_HIDE -> HDhizuku.setAppHidden(packageName, frozen)
3738
HailData.MODE_DHIZUKU_SUSPEND -> HDhizuku.setAppSuspended(packageName, frozen)
3839
HailData.MODE_SU_DISABLE -> HShell.setAppDisabled(packageName, frozen)
40+
HailData.MODE_SU_HIDE -> HShell.setAppHidden(packageName, frozen)
3941
HailData.MODE_SU_SUSPEND -> HShell.setAppSuspended(packageName, frozen)
4042
HailData.MODE_SHIZUKU_DISABLE -> HShizuku.setAppDisabled(packageName, frozen)
4143
HailData.MODE_SHIZUKU_HIDE -> HShizuku.setAppHidden(packageName, frozen)
@@ -45,25 +47,17 @@ object AppManager {
4547

4648
fun uninstallApp(packageName: String): Boolean {
4749
when {
48-
HailData.workingMode.startsWith(HailData.OWNER) -> if (HPolicy.uninstallApp(
49-
packageName
50-
)
51-
) return true
50+
HailData.workingMode.startsWith(HailData.OWNER) ->
51+
if (HPolicy.uninstallApp(packageName)) return true
5252

53-
HailData.workingMode.startsWith(HailData.DHIZUKU) -> if (HDhizuku.uninstallApp(
54-
packageName
55-
)
56-
) return true
53+
HailData.workingMode.startsWith(HailData.DHIZUKU) ->
54+
if (HDhizuku.uninstallApp(packageName)) return true
5755

58-
HailData.workingMode.startsWith(HailData.SU) -> if (HShell.uninstallApp(
59-
packageName
60-
)
61-
) return true
56+
HailData.workingMode.startsWith(HailData.SU) ->
57+
if (HShell.uninstallApp(packageName)) return true
6258

63-
HailData.workingMode.startsWith(HailData.SHIZUKU) -> if (HShizuku.uninstallApp(
64-
packageName
65-
)
66-
) return true
59+
HailData.workingMode.startsWith(HailData.SHIZUKU) ->
60+
if (HShizuku.uninstallApp(packageName)) return true
6761
}
6862
HUI.startActivity(Intent.ACTION_DELETE, HPackages.packageUri(packageName))
6963
return false

app/src/main/kotlin/com/aistra/hail/app/HailData.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ object HailData {
1717
const val URL_RELEASES = "$URL_GITHUB/releases"
1818
const val URL_TELEGRAM = "https://t.me/+yvRXYTounDIxODFl"
1919
const val URL_QQ = "http://qm.qq.com/cgi-bin/qm/qr?k=I2g_Ymanc6bQMo4cVKTG0knARE0twtSG"
20-
const val URL_COOLAPK = "https://www.coolapk.com/apk/${BuildConfig.APPLICATION_ID}"
20+
const val URL_FDROID = "https://f-droid.org/packages/${BuildConfig.APPLICATION_ID}"
2121
const val URL_ALIPAY = "https://qr.alipay.com/tsx02922ajwj6xekqyd1rbf"
2222
const val URL_ALIPAY_API = "alipays://platformapi/startapp?saId=10000007&qrcode=$URL_ALIPAY"
2323
const val URL_BILIBILI = "https://space.bilibili.com/9261272"
@@ -34,14 +34,15 @@ object HailData {
3434
const val DHIZUKU = "dhizuku_"
3535
const val SU = "su_"
3636
const val SHIZUKU = "shizuku_"
37-
private const val DISABLE = "disable"
38-
private const val HIDE = "hide"
37+
const val DISABLE = "disable"
38+
const val HIDE = "hide"
3939
const val SUSPEND = "suspend"
4040
const val MODE_OWNER_HIDE = OWNER + HIDE
4141
const val MODE_OWNER_SUSPEND = OWNER + SUSPEND
4242
const val MODE_DHIZUKU_HIDE = DHIZUKU + HIDE
4343
const val MODE_DHIZUKU_SUSPEND = DHIZUKU + SUSPEND
4444
const val MODE_SU_DISABLE = SU + DISABLE
45+
const val MODE_SU_HIDE = SU + HIDE
4546
const val MODE_SU_SUSPEND = SU + SUSPEND
4647
const val MODE_SHIZUKU_DISABLE = SHIZUKU + DISABLE
4748
const val MODE_SHIZUKU_HIDE = SHIZUKU + HIDE

app/src/main/kotlin/com/aistra/hail/ui/about/AboutFragment.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ class AboutFragment : MainFragment(), View.OnClickListener {
2929
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
3030
): View {
3131
_binding = FragmentAboutBinding.inflate(inflater, container, false)
32+
activity.appbar.setLiftOnScrollTargetView(binding.root)
33+
3234
binding.descVersion.text = HailData.VERSION
3335
aboutViewModel = ViewModelProvider(this)[AboutViewModel::class.java]
3436
aboutViewModel.time.observe(viewLifecycleOwner) {
@@ -45,7 +47,7 @@ class AboutFragment : MainFragment(), View.OnClickListener {
4547
binding.actionTime.setOnClickListener(this)
4648
binding.actionTelegram.setOnClickListener(this)
4749
binding.actionQq.setOnClickListener(this)
48-
binding.actionCoolapk.setOnClickListener(this)
50+
binding.actionFdroid.setOnClickListener(this)
4951
binding.actionDonate.setOnClickListener(this)
5052
binding.actionGithub.setOnClickListener(this)
5153
binding.actionTranslate.setOnClickListener(this)
@@ -60,7 +62,7 @@ class AboutFragment : MainFragment(), View.OnClickListener {
6062
binding.actionTime -> onRedeem()
6163
binding.actionTelegram -> HUI.openLink(HailData.URL_TELEGRAM)
6264
binding.actionQq -> HUI.openLink(HailData.URL_QQ)
63-
binding.actionCoolapk -> HUI.openLink(HailData.URL_COOLAPK)
65+
binding.actionFdroid -> HUI.openLink(HailData.URL_FDROID)
6466
binding.actionDonate -> onDonate()
6567
binding.actionGithub -> HUI.openLink(HailData.URL_GITHUB)
6668
binding.actionTranslate -> HUI.openLink(HailData.URL_TRANSLATE)

app/src/main/kotlin/com/aistra/hail/ui/about/AboutViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import java.text.SimpleDateFormat
1717
class AboutViewModel(val app: Application) : AndroidViewModel(app) {
1818
val time = MutableLiveData<String>().apply {
1919
value = SimpleDateFormat.getDateInstance()
20-
.format(HPackages.getPackageInfoOrNull(app.packageName)!!.firstInstallTime)
20+
.format(HPackages.getUnhiddenPackageInfoOrNull(app.packageName)!!.firstInstallTime)
2121
}
2222

2323
val snack = MutableLiveData<Int>()

0 commit comments

Comments
 (0)