[app] Show user name (#688)

This commit is contained in:
LoveSy 2021-05-28 15:42:52 +08:00 committed by GitHub
parent de98686532
commit 4035493602
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 96 additions and 79 deletions

View File

@ -29,6 +29,7 @@ import android.util.Log;
import org.lsposed.lspd.Application; import org.lsposed.lspd.Application;
import org.lsposed.lspd.utils.ParceledListSlice; import org.lsposed.lspd.utils.ParceledListSlice;
import org.lsposed.lspd.utils.UserInfo;
import org.lsposed.manager.adapters.ScopeAdapter; import org.lsposed.manager.adapters.ScopeAdapter;
import org.lsposed.manager.receivers.LSPManagerServiceClient; import org.lsposed.manager.receivers.LSPManagerServiceClient;
@ -232,7 +233,7 @@ public class ConfigManager {
} }
} }
public static int[] getUsers() { public static List<UserInfo> getUsers() {
try { try {
return LSPManagerServiceClient.getUsers(); return LSPManagerServiceClient.getUsers();
} catch (RemoteException | NullPointerException e) { } catch (RemoteException | NullPointerException e) {

View File

@ -29,6 +29,7 @@ import android.os.RemoteException;
import org.lsposed.lspd.Application; import org.lsposed.lspd.Application;
import org.lsposed.lspd.ILSPManagerService; import org.lsposed.lspd.ILSPManagerService;
import org.lsposed.lspd.utils.ParceledListSlice; import org.lsposed.lspd.utils.ParceledListSlice;
import org.lsposed.lspd.utils.UserInfo;
import java.util.List; import java.util.List;
@ -156,7 +157,7 @@ public class LSPManagerServiceClient {
return service.isSepolicyLoaded(); return service.isSepolicyLoaded();
} }
public static int[] getUsers() throws RemoteException, NullPointerException { public static List<UserInfo> getUsers() throws RemoteException, NullPointerException {
ensureService(); ensureService();
return service.getUsers(); return service.getUsers();
} }

View File

@ -66,6 +66,7 @@ import com.google.android.material.checkbox.MaterialCheckBox;
import com.google.android.material.snackbar.Snackbar; import com.google.android.material.snackbar.Snackbar;
import com.google.android.material.tabs.TabLayoutMediator; import com.google.android.material.tabs.TabLayoutMediator;
import org.lsposed.lspd.utils.UserInfo;
import org.lsposed.manager.ConfigManager; import org.lsposed.manager.ConfigManager;
import org.lsposed.manager.R; import org.lsposed.manager.R;
import org.lsposed.manager.adapters.AppHelper; import org.lsposed.manager.adapters.AppHelper;
@ -138,23 +139,23 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi
}); });
binding.fab.setOnClickListener(view -> { binding.fab.setOnClickListener(view -> {
var pickAdaptor = new ModuleAdapter(0, true); var pickAdaptor = new ModuleAdapter(null, true);
var position = binding.viewPager.getCurrentItem(); var position = binding.viewPager.getCurrentItem();
var snapshot = adapters.get(position).snapshot().stream().map(m -> m.packageName).collect(Collectors.toSet()); var snapshot = adapters.get(position).snapshot().stream().map(m -> m.packageName).collect(Collectors.toSet());
var userId = adapters.get(position).getUserId(); var user = adapters.get(position).getUser();
pickAdaptor.setFilter(m -> !snapshot.contains(m.packageName)); pickAdaptor.setFilter(m -> !snapshot.contains(m.packageName));
pickAdaptor.refresh(); pickAdaptor.refresh();
var v = DialogRecyclerviewBinding.inflate(getLayoutInflater()).getRoot(); var v = DialogRecyclerviewBinding.inflate(getLayoutInflater()).getRoot();
v.setAdapter(pickAdaptor); v.setAdapter(pickAdaptor);
v.setLayoutManager(new LinearLayoutManagerFix(ModulesActivity.this)); v.setLayoutManager(new LinearLayoutManagerFix(ModulesActivity.this));
var dialog = new AlertDialog.Builder(ModulesActivity.this) var dialog = new AlertDialog.Builder(ModulesActivity.this)
.setTitle(getString(R.string.install_to_user, userId)) .setTitle(getString(R.string.install_to_user, user.name))
.setView(v) .setView(v)
.setNegativeButton(android.R.string.cancel, null) .setNegativeButton(android.R.string.cancel, null)
.show(); .show();
pickAdaptor.setOnPickListener(picked -> { pickAdaptor.setOnPickListener(picked -> {
var module = (ModuleUtil.InstalledModule) picked.getTag(); var module = (ModuleUtil.InstalledModule) picked.getTag();
installModuleToUser(module, userId); installModuleToUser(module, user);
dialog.dismiss(); dialog.dismiss();
}); });
}); });
@ -197,24 +198,24 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi
@Override @Override
protected void onResume() { protected void onResume() {
super.onResume(); super.onResume();
int[] userIds = ConfigManager.getUsers(); var users = ConfigManager.getUsers();
if (userIds != null) { if (users != null) {
if (userIds.length != adapters.size()) { if (users.size() != adapters.size()) {
adapters.clear(); adapters.clear();
if (userIds.length != 1) { if (users.size() != 1) {
binding.viewPager.setUserInputEnabled(true); binding.viewPager.setUserInputEnabled(true);
ArrayList<String> titles = new ArrayList<>(); ArrayList<String> titles = new ArrayList<>();
for (int userId : userIds) { for (var user : users) {
var adapter = new ModuleAdapter(userId); var adapter = new ModuleAdapter(user);
adapter.setHasStableIds(true); adapter.setHasStableIds(true);
adapters.add(adapter); adapters.add(adapter);
titles.add(getString(R.string.user_title, userId)); titles.add(user.name);
} }
new TabLayoutMediator(binding.tabLayout, binding.viewPager, (tab, position) -> tab.setText(titles.get(position))).attach(); new TabLayoutMediator(binding.tabLayout, binding.viewPager, (tab, position) -> tab.setText(titles.get(position))).attach();
binding.tabLayout.setVisibility(View.VISIBLE); binding.tabLayout.setVisibility(View.VISIBLE);
} else { } else {
binding.viewPager.setUserInputEnabled(false); binding.viewPager.setUserInputEnabled(false);
var adapter = new ModuleAdapter(0); var adapter = new ModuleAdapter(null);
adapter.setHasStableIds(true); adapter.setHasStableIds(true);
adapters.add(adapter); adapters.add(adapter);
binding.tabLayout.setVisibility(View.GONE); binding.tabLayout.setVisibility(View.GONE);
@ -251,15 +252,15 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
} }
private void installModuleToUser(ModuleUtil.InstalledModule module, int userId) { private void installModuleToUser(ModuleUtil.InstalledModule module, UserInfo user) {
new AlertDialog.Builder(this) new AlertDialog.Builder(this)
.setTitle(getString(R.string.install_to_user, userId)) .setTitle(getString(R.string.install_to_user, user.name))
.setMessage(getString(R.string.install_to_user_message, module.getAppName(), userId)) .setMessage(getString(R.string.install_to_user_message, module.getAppName(), user.name))
.setPositiveButton(android.R.string.ok, (dialog, which) -> .setPositiveButton(android.R.string.ok, (dialog, which) ->
workHandler.post(() -> { workHandler.post(() -> {
var success = ConfigManager.installExistingPackageAsUser(module.packageName, userId); var success = ConfigManager.installExistingPackageAsUser(module.packageName, user.id);
runOnUiThread(() -> { runOnUiThread(() -> {
String text = success ? getString(R.string.module_installed, module.getAppName(), userId) : getString(R.string.module_install_failed); String text = success ? getString(R.string.module_installed, module.getAppName(), user.name) : getString(R.string.module_install_failed);
if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) { if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) {
Snackbar.make(binding.snackbar, text, Snackbar.LENGTH_SHORT).show(); Snackbar.make(binding.snackbar, text, Snackbar.LENGTH_SHORT).show();
} else { } else {
@ -267,7 +268,7 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi
} }
}); });
if (success) if (success)
moduleUtil.reloadSingleModule(module.packageName, userId); moduleUtil.reloadSingleModule(module.packageName, user.id);
})) }))
.setNegativeButton(android.R.string.cancel, null) .setNegativeButton(android.R.string.cancel, null)
.show(); .show();
@ -328,9 +329,6 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi
intent.putExtra("moduleName", selectedModule.getAppName()); intent.putExtra("moduleName", selectedModule.getAppName());
startActivity(intent); startActivity(intent);
return true; return true;
} else if (item.getGroupId() == 1) {
installModuleToUser(selectedModule, itemId);
return true;
} }
return super.onContextItemSelected(item); return super.onContextItemSelected(item);
} }
@ -383,24 +381,24 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi
private class ModuleAdapter extends EmptyStateRecyclerView.EmptyStateAdapter<ModuleAdapter.ViewHolder> implements Filterable { private class ModuleAdapter extends EmptyStateRecyclerView.EmptyStateAdapter<ModuleAdapter.ViewHolder> implements Filterable {
private final ConcurrentLinkedQueue<ModuleUtil.InstalledModule> searchList = new ConcurrentLinkedQueue<>(); private final ConcurrentLinkedQueue<ModuleUtil.InstalledModule> searchList = new ConcurrentLinkedQueue<>();
private final List<ModuleUtil.InstalledModule> showList = new ArrayList<>(); private final List<ModuleUtil.InstalledModule> showList = new ArrayList<>();
private final int userId; private final UserInfo user;
private final boolean isPick; private final boolean isPick;
private boolean isLoaded; private boolean isLoaded;
private View.OnClickListener onPickListener; private View.OnClickListener onPickListener;
private Predicate<ModuleUtil.InstalledModule> customFilter = m -> true; private Predicate<ModuleUtil.InstalledModule> customFilter = m -> true;
ModuleAdapter(int userId) { ModuleAdapter(UserInfo user) {
this(userId, false); this(user, false);
} }
ModuleAdapter(int userId, boolean isPick) { ModuleAdapter(UserInfo user, boolean isPick) {
this.userId = userId; this.user = user;
this.isPick = isPick; this.isPick = isPick;
} }
public int getUserId() { public UserInfo getUser() {
return userId; return user;
} }
@NonNull @NonNull
@ -488,11 +486,14 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi
menu.removeItem(R.id.menu_repo); menu.removeItem(R.id.menu_repo);
} }
if (item.userId == 0) { if (item.userId == 0) {
int[] users = ConfigManager.getUsers(); var users = ConfigManager.getUsers();
if (users != null) { if (users != null) {
for (int profile : users) { for (var user : users) {
if (ModuleUtil.getInstance().getModule(item.packageName, profile) == null) { if (ModuleUtil.getInstance().getModule(item.packageName, user.id) == null) {
menu.add(1, profile, 0, getString(R.string.install_to_user, profile)); menu.add(1, user.id, 0, getString(R.string.install_to_user, user.name)).setOnMenuItemClickListener(i -> {
installModuleToUser(selectedModule, user);
return true;
});
} }
} }
} }
@ -548,7 +549,7 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi
private final Runnable reloadModules = new Runnable() { private final Runnable reloadModules = new Runnable() {
public void run() { public void run() {
var tmpList = moduleUtil.getModules().values().stream().filter(module -> module.userId == userId).filter(customFilter).collect(Collectors.toCollection(ArrayList::new)); var tmpList = moduleUtil.getModules().values().stream().filter(module -> user == null || module.userId == user.id).filter(customFilter).collect(Collectors.toCollection(ArrayList::new));
Comparator<PackageInfo> cmp = AppHelper.getAppListComparator(0, pm); Comparator<PackageInfo> cmp = AppHelper.getAppListComparator(0, pm);
tmpList.sort((a, b) -> { tmpList.sort((a, b) -> {
boolean aChecked = moduleUtil.isModuleEnabled(a.packageName); boolean aChecked = moduleUtil.isModuleEnabled(a.packageName);

View File

@ -85,9 +85,9 @@
<string name="module_uninstalled">Desinstalado %1$s</string> <string name="module_uninstalled">Desinstalado %1$s</string>
<string name="module_uninstall_failed">Fallo en la desinstalación</string> <string name="module_uninstall_failed">Fallo en la desinstalación</string>
<string name="user_title">Usuario %d</string> <string name="user_title">Usuario %d</string>
<string name="install_to_user">Instalar al usuario %d</string> <string name="install_to_user">Instalar al usuario %s</string>
<string name="install_to_user_message">¿Quieres instalar %1$s al usuario %2$d? Se recomienda que lo instales manualmente; forzar la instalación a través de LSPosed puede causar problemas.</string> <string name="install_to_user_message">¿Quieres instalar %1$s al usuario %2$s? Se recomienda que lo instales manualmente; forzar la instalación a través de LSPosed puede causar problemas.</string>
<string name="module_installed">%1$s instalado %2$d</string> <string name="module_installed">%1$s instalado %2$s</string>
<string name="module_install_failed">Fallo en la instalación</string> <string name="module_install_failed">Fallo en la instalación</string>
<!-- AppListActivity --> <!-- AppListActivity -->

View File

@ -86,11 +86,11 @@
<string name="module_uninstall_message">Voulez-vous installer ce module?</string> <string name="module_uninstall_message">Voulez-vous installer ce module?</string>
<string name="module_uninstalled">Désinstallation de %1$s</string> <string name="module_uninstalled">Désinstallation de %1$s</string>
<string name="module_uninstall_failed">Échec de la désinstallation</string> <string name="module_uninstall_failed">Échec de la désinstallation</string>
<string name="module_installed">Ajout de %1$s à lutilisateur %2$d</string> <string name="module_installed">Ajout de %1$s à lutilisateur %2$s</string>
<string name="module_install_failed">Échec de l\ajout du module</string> <string name="module_install_failed">Échec de l\ajout du module</string>
<string name="user_title">Utilisateur %d</string> <string name="user_title">Utilisateur %d</string>
<string name="install_to_user">Installation dans utilisateur %d</string> <string name="install_to_user">Installation dans utilisateur %s</string>
<string name="install_to_user_message">Vous voulez installer %1$s dans lutilisateur %2$d? Il est recommandé de linstaller manuellement, fercer linstallation via LSPosed pourrait causer des problèmes.</string> <string name="install_to_user_message">Vous voulez installer %1$s dans lutilisateur %2$s? Il est recommandé de linstaller manuellement, fercer linstallation via LSPosed pourrait causer des problèmes.</string>
<!-- AppListActivity --> <!-- AppListActivity -->
<string name="compile_speed">Ré-optimiser</string> <string name="compile_speed">Ré-optimiser</string>

View File

@ -87,11 +87,11 @@
<string name="module_uninstalled">%1$s 제거됨</string> <string name="module_uninstalled">%1$s 제거됨</string>
<string name="module_uninstall_failed">제거 실패</string> <string name="module_uninstall_failed">제거 실패</string>
<string name="module_installed">%2$d 사용자에 %1$s 추가</string> <string name="module_installed">%2$s 사용자에 %1$s 추가</string>
<string name="module_install_failed">모듈 추가 실패</string> <string name="module_install_failed">모듈 추가 실패</string>
<string name="user_title">사용자 %d</string> <string name="user_title">사용자 %d</string>
<string name="install_to_user">%d 사용자에게 설치</string> <string name="install_to_user">%s 사용자에게 설치</string>
<string name="install_to_user_message">%2$d 사용자에게 %1$s을(를) 설치하시겠습니까? 수동으로 설치하는 것이 좋습니다. LSPosed를 통해 강제로 설치하면 문제가 발생할 수 있습니다.</string> <string name="install_to_user_message">%2$s 사용자에게 %1$s을(를) 설치하시겠습니까? 수동으로 설치하는 것이 좋습니다. LSPosed를 통해 강제로 설치하면 문제가 발생할 수 있습니다.</string>
<!-- AppListActivity --> <!-- AppListActivity -->
<string name="compile_speed">다시 최적화</string> <string name="compile_speed">다시 최적화</string>

View File

@ -178,10 +178,10 @@
<string name="copy_toast_msg">Gekopieerd</string> <string name="copy_toast_msg">Gekopieerd</string>
<string name="list_empty">¯\\\\_(ツ)_\/¯\nNiets hier</string> <string name="list_empty">¯\\\\_(ツ)_\/¯\nNiets hier</string>
<string name="add_module_to_user">Module toevoegen aan gebruiker</string> <string name="add_module_to_user">Module toevoegen aan gebruiker</string>
<string name="module_installed">Toegevoegd %1$s naar gebruiker %2$d</string> <string name="module_installed">Toegevoegd %1$s naar gebruiker %2$s</string>
<string name="module_install_failed">Het toevoegen van de module is mislukt</string> <string name="module_install_failed">Het toevoegen van de module is mislukt</string>
<string name="user_title">Gebruiker %d</string> <string name="user_title">Gebruiker %d</string>
<string name="install_to_user">Installeer naar gebruiker %d</string> <string name="install_to_user">Installeer naar gebruiker %s</string>
<string name="install_to_user_message">Wil je installeren %1$s naar gebruiker %2$d? Het wordt aanbevolen om handmatig te installeren, het forceren van installatie via LSPosed kan problemen veroorzaken.</string> <string name="install_to_user_message">Wil je installeren %1$s naar gebruiker %2$s? Het wordt aanbevolen om handmatig te installeren, het forceren van installatie via LSPosed kan problemen veroorzaken.</string>
<string name="translators"><![CDATA[<a href="https://github.com/Pandemic-XDA">Pandemic-XDA</a>]]></string> <string name="translators"><![CDATA[<a href="https://github.com/Pandemic-XDA">Pandemic-XDA</a>]]></string>
</resources> </resources>

View File

@ -86,11 +86,11 @@
<string name="module_uninstall_message">Você quer desinstalar este módulo?</string> <string name="module_uninstall_message">Você quer desinstalar este módulo?</string>
<string name="module_uninstalled">Desinstalado %1$s</string> <string name="module_uninstalled">Desinstalado %1$s</string>
<string name="module_uninstall_failed">Falha ao desinstalar</string> <string name="module_uninstall_failed">Falha ao desinstalar</string>
<string name="module_installed">Adicionado %1$s ao usuário %2$d</string> <string name="module_installed">Adicionado %1$s ao usuário %2$s</string>
<string name="module_install_failed">Falha ao adicinar módulo</string> <string name="module_install_failed">Falha ao adicinar módulo</string>
<string name="user_title">Usuário %d</string> <string name="user_title">Usuário %d</string>
<string name="install_to_user">Instalar ao usuário %d</string> <string name="install_to_user">Instalar ao usuário %s</string>
<string name="install_to_user_message">Deseja instalar %1$s ao usuário %2$d? Recomenda-se instalar manualmente, forçar a instalação via LSPosed pode causar problemas.</string> <string name="install_to_user_message">Deseja instalar %1$s ao usuário %2$s? Recomenda-se instalar manualmente, forçar a instalação via LSPosed pode causar problemas.</string>
<!-- AppListActivity --> <!-- AppListActivity -->
<string name="compile_speed">Re-otimizar</string> <string name="compile_speed">Re-otimizar</string>

View File

@ -87,9 +87,9 @@
<string name="module_uninstalled">已卸载%1$s</string> <string name="module_uninstalled">已卸载%1$s</string>
<string name="module_uninstall_failed">卸载失败</string> <string name="module_uninstall_failed">卸载失败</string>
<string name="user_title">用户 %d</string> <string name="user_title">用户 %d</string>
<string name="install_to_user">安装到用户 %d</string> <string name="install_to_user">安装到用户 %s</string>
<string name="install_to_user_message">要安装 %1$s 到用户 %2$d 吗?建议手动安装或多开,通过 LSPosed 强制安装可能会出现问题。</string> <string name="install_to_user_message">要安装 %1$s 到用户 %2$s 吗?建议手动安装或多开,通过 LSPosed 强制安装可能会出现问题。</string>
<string name="module_installed">已安装 %1$s 到用户 %2$d</string> <string name="module_installed">已安装 %1$s 到用户 %2$s</string>
<string name="module_install_failed">安装失败</string> <string name="module_install_failed">安装失败</string>
<!-- AppListActivity --> <!-- AppListActivity -->

View File

@ -86,11 +86,11 @@
<string name="module_uninstall_message">您確定要移除此模組嗎?</string> <string name="module_uninstall_message">您確定要移除此模組嗎?</string>
<string name="module_uninstalled">已移除 %1$s</string> <string name="module_uninstalled">已移除 %1$s</string>
<string name="module_uninstall_failed">移除失敗</string> <string name="module_uninstall_failed">移除失敗</string>
<string name="module_installed">已安裝 %1$s 到使用者 %2$d</string> <string name="module_installed">已安裝 %1$s 到使用者 %2$s</string>
<string name="module_install_failed">安裝模組失敗</string> <string name="module_install_failed">安裝模組失敗</string>
<string name="user_title">使用者 %d</string> <string name="user_title">使用者 %d</string>
<string name="install_to_user">安裝到使用者 %d</string> <string name="install_to_user">安裝到使用者 %s</string>
<string name="install_to_user_message">要安裝 %1$s 到使用者 %2$d 嗎?建議手動安裝或多開,透過 LSPosed 強制安裝可能會出現問題。</string> <string name="install_to_user_message">要安裝 %1$s 到使用者 %2$s 嗎?建議手動安裝或多開,透過 LSPosed 強制安裝可能會出現問題。</string>
<!-- AppListActivity --> <!-- AppListActivity -->
<string name="compile_speed">重新最佳化</string> <string name="compile_speed">重新最佳化</string>

View File

@ -86,11 +86,11 @@
<string name="module_uninstall_message">Do you want to uninstall this module?</string> <string name="module_uninstall_message">Do you want to uninstall this module?</string>
<string name="module_uninstalled">Uninstalled %1$s</string> <string name="module_uninstalled">Uninstalled %1$s</string>
<string name="module_uninstall_failed">Uninstall unsuccessful</string> <string name="module_uninstall_failed">Uninstall unsuccessful</string>
<string name="module_installed">Added %1$s to user %2$d</string> <string name="module_installed">Added %1$s to user %2$s</string>
<string name="module_install_failed">Adding module failed</string> <string name="module_install_failed">Adding module failed</string>
<string name="user_title">User %d</string> <string name="user_title">User %d</string>
<string name="install_to_user">Install to user %d</string> <string name="install_to_user">Install to user %s</string>
<string name="install_to_user_message">Want to install %1$s to user %2$d? It is recommended to install manually, forcing installation via LSPosed may cause problems.</string> <string name="install_to_user_message">Want to install %1$s to user %2$s? It is recommended to install manually, forcing installation via LSPosed may cause problems.</string>
<!-- AppListActivity --> <!-- AppListActivity -->
<string name="compile_speed">Re-optimize</string> <string name="compile_speed">Re-optimize</string>

View File

@ -25,7 +25,7 @@ buildscript {
mavenCentral() mavenCentral()
} }
dependencies { dependencies {
classpath("com.android.tools.build:gradle:7.0.0-beta02") classpath("com.android.tools.build:gradle:7.0.0-beta03")
classpath("org.eclipse.jgit:org.eclipse.jgit:5.10.0.202012080955-r") classpath("org.eclipse.jgit:org.eclipse.jgit:5.10.0.202012080955-r")
classpath(kotlin("gradle-plugin", version = "1.4.32")) classpath(kotlin("gradle-plugin", version = "1.4.32"))
} }
@ -37,7 +37,7 @@ val commitCount = Git(repo).log().add(refId).call().count()
val defaultManagerPackageName by extra("org.lsposed.manager") val defaultManagerPackageName by extra("org.lsposed.manager")
val verCode by extra(commitCount + 4200) val verCode by extra(commitCount + 4200)
val verName by extra("v1.4.2") val verName by extra("v1.4.3")
val androidTargetSdkVersion by extra(30) val androidTargetSdkVersion by extra(30)
val androidMinSdkVersion by extra(27) val androidMinSdkVersion by extra(27)
val androidBuildToolsVersion by extra("30.0.3") val androidBuildToolsVersion by extra("30.0.3")

View File

@ -420,7 +420,7 @@ public class ConfigManager {
if (module_pkg.equals(app.packageName)) { if (module_pkg.equals(app.packageName)) {
var appId = processScope.uid % PER_USER_RANGE; var appId = processScope.uid % PER_USER_RANGE;
for (var user : UserService.getUsers()) { for (var user : UserService.getUsers()) {
cachedScope.computeIfAbsent(new ProcessScope(processScope.processName, user * PER_USER_RANGE + appId), cachedScope.computeIfAbsent(new ProcessScope(processScope.processName, user.id * PER_USER_RANGE + appId),
ignored -> new HashMap<>()).put(module_pkg, apk_path); ignored -> new HashMap<>()).put(module_pkg, apk_path);
} }
} }

View File

@ -38,8 +38,10 @@ import org.lsposed.lspd.Application;
import org.lsposed.lspd.BuildConfig; import org.lsposed.lspd.BuildConfig;
import org.lsposed.lspd.ILSPManagerService; import org.lsposed.lspd.ILSPManagerService;
import org.lsposed.lspd.utils.ParceledListSlice; import org.lsposed.lspd.utils.ParceledListSlice;
import org.lsposed.lspd.utils.UserInfo;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.XposedBridge;
@ -206,8 +208,15 @@ public class LSPManagerService extends ILSPManagerService.Stub {
} }
@Override @Override
public int[] getUsers() throws RemoteException { public List<UserInfo> getUsers() throws RemoteException {
return UserService.getUsers(); var users = new LinkedList<UserInfo>();
for(var user: UserService.getUsers()){
var info = new UserInfo();
info.id = user.id;
info.name = user.name;
users.add(info);
}
return users;
} }
@Override @Override

View File

@ -112,9 +112,9 @@ public class PackageService {
IPackageManager pm = getPackageManager(); IPackageManager pm = getPackageManager();
Map<Integer, PackageInfo> res = new HashMap<>(); Map<Integer, PackageInfo> res = new HashMap<>();
if (pm == null) return res; if (pm == null) return res;
for (int userId : UserService.getUsers()) { for (var user : UserService.getUsers()) {
var info = pm.getPackageInfo(packageName, flags, userId); var info = pm.getPackageInfo(packageName, flags, user.id);
if (info != null && info.applicationInfo != null) res.put(userId, info); if (info != null && info.applicationInfo != null) res.put(user.id, info);
} }
return res; return res;
} }
@ -135,8 +135,8 @@ public class PackageService {
List<PackageInfo> res = new ArrayList<>(); List<PackageInfo> res = new ArrayList<>();
IPackageManager pm = getPackageManager(); IPackageManager pm = getPackageManager();
if (pm == null) return ParceledListSlice.emptyList(); if (pm == null) return ParceledListSlice.emptyList();
for (int userId : UserService.getUsers()) { for (var user : UserService.getUsers()) {
res.addAll(pm.getInstalledPackages(flags, userId).getList()); res.addAll(pm.getInstalledPackages(flags, user.id).getList());
} }
if (filterNoProcess) { if (filterNoProcess) {
res = res.stream().filter(packageInfo -> { res = res.stream().filter(packageInfo -> {

View File

@ -29,6 +29,8 @@ import android.os.RemoteException;
import android.os.ServiceManager; import android.os.ServiceManager;
import android.util.Log; import android.util.Log;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List; import java.util.List;
public class UserService { public class UserService {
@ -58,10 +60,10 @@ public class UserService {
return um; return um;
} }
public static int[] getUsers() throws RemoteException { public static List<UserInfo> getUsers() throws RemoteException {
IUserManager um = getUserManager(); IUserManager um = getUserManager();
if (um == null) return new int[0]; List<UserInfo> users = new LinkedList<>();
List<UserInfo> users; if (um == null) return users;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
users = um.getUsers(true, true, true); users = um.getUsers(true, true, true);
} else { } else {
@ -71,12 +73,7 @@ public class UserService {
users = um.getUsers(true, true, true); users = um.getUsers(true, true, true);
} }
} }
int[] userArray = new int[users.size()]; return users;
for (int i = 0; i < users.size(); i++) {
UserInfo uh = users.get(i);
userArray[i] = uh.id;
}
return userArray;
} }
public static int getProfileParent(int userId) throws RemoteException { public static int getProfileParent(int userId) throws RemoteException {

View File

@ -2,4 +2,5 @@ package android.content.pm;
public class UserInfo { public class UserInfo {
public int id; public int id;
public String name;
} }

View File

@ -1,6 +1,7 @@
package org.lsposed.lspd; package org.lsposed.lspd;
import org.lsposed.lspd.utils.ParceledListSlice; import org.lsposed.lspd.utils.ParceledListSlice;
import org.lsposed.lspd.utils.UserInfo;
import org.lsposed.lspd.Application; import org.lsposed.lspd.Application;
@ -47,7 +48,7 @@ interface ILSPManagerService {
boolean isSepolicyLoaded() = 26; boolean isSepolicyLoaded() = 26;
int[] getUsers() = 27; List<UserInfo> getUsers() = 27;
int installExistingPackageAsUser(String packageName, int userId) = 28; int installExistingPackageAsUser(String packageName, int userId) = 28;

View File

@ -0,0 +1,6 @@
package org.lsposed.lspd.utils;
parcelable UserInfo {
int id;
String name;
}