mirror of
https://github.com/Universal-Debloater-Alliance/universal-android-debloater-next-generation.git
synced 2026-08-09 15:19:11 +02:00
refactor(sync): const pm {list packages | clear}
This commit is contained in:
parent
e595973cb4
commit
8ddbe68ebe
1 changed files with 15 additions and 11 deletions
|
|
@ -13,8 +13,11 @@ use std::process::Command;
|
|||
#[cfg(target_os = "windows")]
|
||||
use std::os::windows::process::CommandExt;
|
||||
|
||||
const PM_LS_PKG: &str = "pm list packages";
|
||||
const PM_C: &str = "pm clear";
|
||||
|
||||
#[dynamic]
|
||||
static RE: Regex = Regex::new(r"\n(\S+)\s+device").unwrap();
|
||||
static RE: Regex = Regex::new(r"\n(\S+)\s+device").unwrap_or_else(|_| unreachable!());
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub struct Phone {
|
||||
|
|
@ -140,6 +143,7 @@ pub async fn perform_adb_commands(
|
|||
}
|
||||
}
|
||||
|
||||
/// If `None`, returns an empty String, not " --user 0"
|
||||
pub fn user_flag(user_id: Option<&User>) -> String {
|
||||
user_id
|
||||
.map(|user| format!(" --user {}", user.id))
|
||||
|
|
@ -147,7 +151,7 @@ pub fn user_flag(user_id: Option<&User>) -> String {
|
|||
}
|
||||
|
||||
pub fn list_all_system_packages(user_id: Option<&User>) -> String {
|
||||
let action = format!("pm list packages -s -u{}", user_flag(user_id));
|
||||
let action = format!("{PM_LS_PKG} -s -u{}", user_flag(user_id));
|
||||
|
||||
adb_shell_command(true, &action)
|
||||
.unwrap_or_default()
|
||||
|
|
@ -157,8 +161,8 @@ pub fn list_all_system_packages(user_id: Option<&User>) -> String {
|
|||
pub fn hashset_system_packages(state: PackageState, user_id: Option<&User>) -> HashSet<String> {
|
||||
let user = user_flag(user_id);
|
||||
let action = match state {
|
||||
PackageState::Enabled => format!("pm list packages -s -e{user}"),
|
||||
PackageState::Disabled => format!("pm list package -s -d{user}"),
|
||||
PackageState::Enabled => format!("{PM_LS_PKG} -s -e{user}"),
|
||||
PackageState::Disabled => format!("{PM_LS_PKG} -s -d{user}"),
|
||||
_ => String::default(), // You probably don't need to use this function for anything else
|
||||
};
|
||||
|
||||
|
|
@ -221,7 +225,7 @@ pub fn apply_pkg_state_commands(
|
|||
PackageState::Uninstalled => match phone.android_sdk {
|
||||
i if i >= 23 => vec!["cmd package install-existing"],
|
||||
21 | 22 => vec!["pm unhide"],
|
||||
19 | 20 => vec!["pm unblock", "pm clear"],
|
||||
19 | 20 => vec!["pm unblock", PM_C],
|
||||
_ => vec![], // Impossible action already prevented by the GUI
|
||||
},
|
||||
_ => vec![],
|
||||
|
|
@ -229,7 +233,7 @@ pub fn apply_pkg_state_commands(
|
|||
}
|
||||
PackageState::Disabled => match package.state {
|
||||
PackageState::Uninstalled | PackageState::Enabled => match phone.android_sdk {
|
||||
sdk if sdk >= 23 => vec!["pm disable-user", "am force-stop", "pm clear"],
|
||||
sdk if sdk >= 23 => vec!["pm disable-user", "am force-stop", PM_C],
|
||||
_ => vec![],
|
||||
},
|
||||
_ => vec![],
|
||||
|
|
@ -237,9 +241,9 @@ pub fn apply_pkg_state_commands(
|
|||
PackageState::Uninstalled => match package.state {
|
||||
PackageState::Enabled | PackageState::Disabled => match phone.android_sdk {
|
||||
sdk if sdk >= 23 => vec!["pm uninstall"], // > Android Marshmallow (6.0)
|
||||
21 | 22 => vec!["pm hide", "pm clear"], // Android Lollipop (5.x)
|
||||
19 | 20 => vec!["pm block", "pm clear"], // Android KitKat (4.4/4.4W)
|
||||
_ => vec!["pm block", "pm clear"], // Disable mode is unavailable on older devices because the specific ADB commands need root
|
||||
21 | 22 => vec!["pm hide", PM_C], // Android Lollipop (5.x)
|
||||
19 | 20 => vec!["pm block", PM_C], // Android KitKat (4.4/4.4W)
|
||||
_ => vec!["pm block", PM_C], // Disable mode is unavailable on older devices because the specific ADB commands need root
|
||||
},
|
||||
_ => vec![],
|
||||
},
|
||||
|
|
@ -292,12 +296,12 @@ pub fn get_phone_brand() -> String {
|
|||
/// Check if a `user_id` is protected on a device by trying
|
||||
/// to list associated packages.
|
||||
pub fn is_protected_user(user_id: &str) -> bool {
|
||||
adb_shell_command(true, &format!("pm list packages -s --user {user_id}")).is_err()
|
||||
adb_shell_command(true, &format!("{PM_LS_PKG} -s --user {user_id}")).is_err()
|
||||
}
|
||||
|
||||
pub fn get_user_list() -> Vec<User> {
|
||||
#[dynamic]
|
||||
static RE: Regex = Regex::new(r"\{([0-9]+)").unwrap();
|
||||
static RE: Regex = Regex::new(r"\{([0-9]+)").unwrap_or_else(|_| unreachable!());
|
||||
adb_shell_command(true, "pm list users")
|
||||
.map(|users| {
|
||||
RE.find_iter(&users)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue