From 9559d8d7b3796247246526625570b0c13496735c Mon Sep 17 00:00:00 2001 From: Ximin Luo Date: Tue, 29 Aug 2023 13:31:37 +0100 Subject: [PATCH 1/7] Full support for multi-user systems --- app/build.gradle | 2 + app/src/main/AndroidManifest.xml | 3 +- .../main/java/dev/ukanth/ufirewall/Api.java | 92 +++++----- .../dev/ukanth/ufirewall/MainActivity.java | 2 + .../java/dev/ukanth/ufirewall/MultiUser.java | 163 ++++++++++++++++++ .../ufirewall/util/AppListArrayAdapter.java | 4 +- app/src/main/res/values/strings.xml | 2 +- hiddenapi/stubs/.gitignore | 1 + hiddenapi/stubs/README.md | 1 + hiddenapi/stubs/build.gradle.kts | 27 +++ .../main/java/android/annotation/NonNull.java | 38 ++++ .../java/android/annotation/Nullable.java | 44 +++++ .../java/android/app/ActivityManager.java | 9 + .../main/java/android/app/ActivityThread.java | 54 ++++++ .../main/java/android/app/Application.java | 4 + .../android/app/ContentProviderHolder.java | 7 + .../main/java/android/app/ContextImpl.java | 6 + .../java/android/app/IActivityController.java | 66 +++++++ .../java/android/app/IActivityManager.java | 138 +++++++++++++++ .../java/android/app/IApplicationThread.java | 32 ++++ .../android/app/INotificationManager.java | 34 ++++ .../java/android/app/IServiceConnection.java | 22 +++ .../main/java/android/app/IUidObserver.java | 17 ++ .../src/main/java/android/app/LoadedApk.java | 23 +++ .../main/java/android/app/Notification.java | 4 + .../java/android/app/NotificationChannel.java | 4 + .../main/java/android/app/ProfilerInfo.java | 23 +++ .../java/android/app/ResourcesManager.java | 4 + .../android/content/AttributionSource.java | 4 + .../android/content/BroadcastReceiver.java | 5 + .../java/android/content/ComponentName.java | 4 + .../main/java/android/content/Context.java | 15 ++ .../android/content/IContentProvider.java | 21 +++ .../java/android/content/IIntentReceiver.java | 40 +++++ .../java/android/content/IIntentSender.java | 34 ++++ .../src/main/java/android/content/Intent.java | 23 +++ .../java/android/content/IntentFilter.java | 5 + .../java/android/content/IntentSender.java | 4 + .../android/content/pm/ApplicationInfo.java | 12 ++ .../content/pm/BaseParceledListSlice.java | 10 ++ .../android/content/pm/IPackageInstaller.java | 16 ++ .../android/content/pm/IPackageManager.java | 104 +++++++++++ .../java/android/content/pm/PackageInfo.java | 6 + .../android/content/pm/PackageInstaller.java | 7 + .../android/content/pm/PackageManager.java | 10 ++ .../android/content/pm/PackageParser.java | 32 ++++ .../android/content/pm/ParceledListSlice.java | 10 ++ .../java/android/content/pm/ResolveInfo.java | 4 + .../java/android/content/pm/UserInfo.java | 6 + .../android/content/pm/VersionedPackage.java | 4 + .../android/content/res/AssetManager.java | 18 ++ .../content/res/CompatibilityInfo.java | 4 + .../android/content/res/Configuration.java | 4 + .../java/android/content/res/Resources.java | 21 +++ .../android/content/res/ResourcesImpl.java | 4 + .../android/content/res/ResourcesKey.java | 4 + .../java/android/content/res/TypedArray.java | 7 + .../java/android/ddm/DdmHandleAppName.java | 7 + .../src/main/java/android/graphics/Movie.java | 4 + .../android/graphics/drawable/Drawable.java | 4 + .../src/main/java/android/os/Binder.java | 62 +++++++ .../stubs/src/main/java/android/os/Build.java | 15 ++ .../src/main/java/android/os/Bundle.java | 23 +++ .../src/main/java/android/os/Environment.java | 9 + .../src/main/java/android/os/Handler.java | 4 + .../src/main/java/android/os/IBinder.java | 33 ++++ .../src/main/java/android/os/IInterface.java | 6 + .../main/java/android/os/IPowerManager.java | 12 ++ .../java/android/os/IServiceCallback.java | 13 ++ .../main/java/android/os/IServiceManager.java | 16 ++ .../main/java/android/os/IUserManager.java | 32 ++++ .../src/main/java/android/os/Parcel.java | 4 + .../src/main/java/android/os/Parcelable.java | 10 ++ .../java/android/os/PersistableBundle.java | 4 + .../main/java/android/os/RemoteException.java | 8 + .../main/java/android/os/ResultReceiver.java | 4 + .../src/main/java/android/os/SELinux.java | 15 ++ .../main/java/android/os/ServiceManager.java | 28 +++ .../main/java/android/os/ShellCallback.java | 25 +++ .../main/java/android/os/ShellCommand.java | 33 ++++ .../java/android/os/SystemProperties.java | 26 +++ .../src/main/java/android/os/UserHandle.java | 17 ++ .../src/main/java/android/os/UserManager.java | 11 ++ .../permission/IPermissionManager.java | 8 + .../java/android/system/ErrnoException.java | 5 + .../main/java/android/system/Int32Ref.java | 15 ++ .../src/main/java/android/system/Os.java | 23 +++ .../java/android/util/DisplayMetrics.java | 4 + .../main/java/android/util/MutableInt.java | 9 + .../main/java/android/util/TypedValue.java | 4 + .../java/android/view/IWindowManager.java | 17 ++ .../java/android/webkit/WebViewDelegate.java | 4 + .../java/android/webkit/WebViewFactory.java | 4 + .../webkit/WebViewFactoryProvider.java | 4 + .../java/androidx/annotation/IntRange.java | 51 ++++++ .../java/androidx/annotation/RequiresApi.java | 51 ++++++ .../android/internal/os/BinderInternal.java | 7 + .../com/android/internal/os/ZygoteInit.java | 4 + .../com/android/internal/util/XmlUtils.java | 14 ++ .../com/android/server/LocalServices.java | 8 + .../com/android/server/SystemService.java | 4 + .../android/server/SystemServiceManager.java | 7 + .../server/am/ActivityManagerService.java | 14 ++ .../com/android/server/am/ProcessRecord.java | 5 + .../dalvik/system/BaseDexClassLoader.java | 17 ++ .../main/java/dalvik/system/VMRuntime.java | 15 ++ .../xmlpull/v1/XmlPullParserException.java | 4 + .../java/sun/misc/CompoundEnumeration.java | 34 ++++ .../src/main/java/sun/net/www/ParseUtil.java | 7 + .../sun/net/www/protocol/jar/Handler.java | 4 + .../xposed/dummy/XResourcesSuperClass.java | 24 +++ .../xposed/dummy/XTypedArraySuperClass.java | 20 +++ settings.gradle | 1 + 113 files changed, 2033 insertions(+), 44 deletions(-) create mode 100644 app/src/main/java/dev/ukanth/ufirewall/MultiUser.java create mode 100644 hiddenapi/stubs/.gitignore create mode 100644 hiddenapi/stubs/README.md create mode 100644 hiddenapi/stubs/build.gradle.kts create mode 100644 hiddenapi/stubs/src/main/java/android/annotation/NonNull.java create mode 100644 hiddenapi/stubs/src/main/java/android/annotation/Nullable.java create mode 100644 hiddenapi/stubs/src/main/java/android/app/ActivityManager.java create mode 100644 hiddenapi/stubs/src/main/java/android/app/ActivityThread.java create mode 100644 hiddenapi/stubs/src/main/java/android/app/Application.java create mode 100644 hiddenapi/stubs/src/main/java/android/app/ContentProviderHolder.java create mode 100644 hiddenapi/stubs/src/main/java/android/app/ContextImpl.java create mode 100644 hiddenapi/stubs/src/main/java/android/app/IActivityController.java create mode 100644 hiddenapi/stubs/src/main/java/android/app/IActivityManager.java create mode 100644 hiddenapi/stubs/src/main/java/android/app/IApplicationThread.java create mode 100644 hiddenapi/stubs/src/main/java/android/app/INotificationManager.java create mode 100644 hiddenapi/stubs/src/main/java/android/app/IServiceConnection.java create mode 100644 hiddenapi/stubs/src/main/java/android/app/IUidObserver.java create mode 100644 hiddenapi/stubs/src/main/java/android/app/LoadedApk.java create mode 100644 hiddenapi/stubs/src/main/java/android/app/Notification.java create mode 100644 hiddenapi/stubs/src/main/java/android/app/NotificationChannel.java create mode 100644 hiddenapi/stubs/src/main/java/android/app/ProfilerInfo.java create mode 100644 hiddenapi/stubs/src/main/java/android/app/ResourcesManager.java create mode 100644 hiddenapi/stubs/src/main/java/android/content/AttributionSource.java create mode 100644 hiddenapi/stubs/src/main/java/android/content/BroadcastReceiver.java create mode 100644 hiddenapi/stubs/src/main/java/android/content/ComponentName.java create mode 100644 hiddenapi/stubs/src/main/java/android/content/Context.java create mode 100644 hiddenapi/stubs/src/main/java/android/content/IContentProvider.java create mode 100644 hiddenapi/stubs/src/main/java/android/content/IIntentReceiver.java create mode 100644 hiddenapi/stubs/src/main/java/android/content/IIntentSender.java create mode 100644 hiddenapi/stubs/src/main/java/android/content/Intent.java create mode 100644 hiddenapi/stubs/src/main/java/android/content/IntentFilter.java create mode 100644 hiddenapi/stubs/src/main/java/android/content/IntentSender.java create mode 100644 hiddenapi/stubs/src/main/java/android/content/pm/ApplicationInfo.java create mode 100644 hiddenapi/stubs/src/main/java/android/content/pm/BaseParceledListSlice.java create mode 100644 hiddenapi/stubs/src/main/java/android/content/pm/IPackageInstaller.java create mode 100644 hiddenapi/stubs/src/main/java/android/content/pm/IPackageManager.java create mode 100644 hiddenapi/stubs/src/main/java/android/content/pm/PackageInfo.java create mode 100644 hiddenapi/stubs/src/main/java/android/content/pm/PackageInstaller.java create mode 100644 hiddenapi/stubs/src/main/java/android/content/pm/PackageManager.java create mode 100644 hiddenapi/stubs/src/main/java/android/content/pm/PackageParser.java create mode 100644 hiddenapi/stubs/src/main/java/android/content/pm/ParceledListSlice.java create mode 100644 hiddenapi/stubs/src/main/java/android/content/pm/ResolveInfo.java create mode 100644 hiddenapi/stubs/src/main/java/android/content/pm/UserInfo.java create mode 100644 hiddenapi/stubs/src/main/java/android/content/pm/VersionedPackage.java create mode 100644 hiddenapi/stubs/src/main/java/android/content/res/AssetManager.java create mode 100644 hiddenapi/stubs/src/main/java/android/content/res/CompatibilityInfo.java create mode 100644 hiddenapi/stubs/src/main/java/android/content/res/Configuration.java create mode 100644 hiddenapi/stubs/src/main/java/android/content/res/Resources.java create mode 100644 hiddenapi/stubs/src/main/java/android/content/res/ResourcesImpl.java create mode 100644 hiddenapi/stubs/src/main/java/android/content/res/ResourcesKey.java create mode 100644 hiddenapi/stubs/src/main/java/android/content/res/TypedArray.java create mode 100644 hiddenapi/stubs/src/main/java/android/ddm/DdmHandleAppName.java create mode 100644 hiddenapi/stubs/src/main/java/android/graphics/Movie.java create mode 100644 hiddenapi/stubs/src/main/java/android/graphics/drawable/Drawable.java create mode 100644 hiddenapi/stubs/src/main/java/android/os/Binder.java create mode 100644 hiddenapi/stubs/src/main/java/android/os/Build.java create mode 100644 hiddenapi/stubs/src/main/java/android/os/Bundle.java create mode 100644 hiddenapi/stubs/src/main/java/android/os/Environment.java create mode 100644 hiddenapi/stubs/src/main/java/android/os/Handler.java create mode 100644 hiddenapi/stubs/src/main/java/android/os/IBinder.java create mode 100644 hiddenapi/stubs/src/main/java/android/os/IInterface.java create mode 100644 hiddenapi/stubs/src/main/java/android/os/IPowerManager.java create mode 100644 hiddenapi/stubs/src/main/java/android/os/IServiceCallback.java create mode 100644 hiddenapi/stubs/src/main/java/android/os/IServiceManager.java create mode 100644 hiddenapi/stubs/src/main/java/android/os/IUserManager.java create mode 100644 hiddenapi/stubs/src/main/java/android/os/Parcel.java create mode 100644 hiddenapi/stubs/src/main/java/android/os/Parcelable.java create mode 100644 hiddenapi/stubs/src/main/java/android/os/PersistableBundle.java create mode 100644 hiddenapi/stubs/src/main/java/android/os/RemoteException.java create mode 100644 hiddenapi/stubs/src/main/java/android/os/ResultReceiver.java create mode 100644 hiddenapi/stubs/src/main/java/android/os/SELinux.java create mode 100644 hiddenapi/stubs/src/main/java/android/os/ServiceManager.java create mode 100644 hiddenapi/stubs/src/main/java/android/os/ShellCallback.java create mode 100644 hiddenapi/stubs/src/main/java/android/os/ShellCommand.java create mode 100644 hiddenapi/stubs/src/main/java/android/os/SystemProperties.java create mode 100644 hiddenapi/stubs/src/main/java/android/os/UserHandle.java create mode 100644 hiddenapi/stubs/src/main/java/android/os/UserManager.java create mode 100644 hiddenapi/stubs/src/main/java/android/permission/IPermissionManager.java create mode 100644 hiddenapi/stubs/src/main/java/android/system/ErrnoException.java create mode 100644 hiddenapi/stubs/src/main/java/android/system/Int32Ref.java create mode 100644 hiddenapi/stubs/src/main/java/android/system/Os.java create mode 100644 hiddenapi/stubs/src/main/java/android/util/DisplayMetrics.java create mode 100644 hiddenapi/stubs/src/main/java/android/util/MutableInt.java create mode 100644 hiddenapi/stubs/src/main/java/android/util/TypedValue.java create mode 100644 hiddenapi/stubs/src/main/java/android/view/IWindowManager.java create mode 100644 hiddenapi/stubs/src/main/java/android/webkit/WebViewDelegate.java create mode 100644 hiddenapi/stubs/src/main/java/android/webkit/WebViewFactory.java create mode 100644 hiddenapi/stubs/src/main/java/android/webkit/WebViewFactoryProvider.java create mode 100644 hiddenapi/stubs/src/main/java/androidx/annotation/IntRange.java create mode 100644 hiddenapi/stubs/src/main/java/androidx/annotation/RequiresApi.java create mode 100644 hiddenapi/stubs/src/main/java/com/android/internal/os/BinderInternal.java create mode 100644 hiddenapi/stubs/src/main/java/com/android/internal/os/ZygoteInit.java create mode 100644 hiddenapi/stubs/src/main/java/com/android/internal/util/XmlUtils.java create mode 100644 hiddenapi/stubs/src/main/java/com/android/server/LocalServices.java create mode 100644 hiddenapi/stubs/src/main/java/com/android/server/SystemService.java create mode 100644 hiddenapi/stubs/src/main/java/com/android/server/SystemServiceManager.java create mode 100644 hiddenapi/stubs/src/main/java/com/android/server/am/ActivityManagerService.java create mode 100644 hiddenapi/stubs/src/main/java/com/android/server/am/ProcessRecord.java create mode 100644 hiddenapi/stubs/src/main/java/dalvik/system/BaseDexClassLoader.java create mode 100644 hiddenapi/stubs/src/main/java/dalvik/system/VMRuntime.java create mode 100644 hiddenapi/stubs/src/main/java/org/xmlpull/v1/XmlPullParserException.java create mode 100644 hiddenapi/stubs/src/main/java/sun/misc/CompoundEnumeration.java create mode 100644 hiddenapi/stubs/src/main/java/sun/net/www/ParseUtil.java create mode 100644 hiddenapi/stubs/src/main/java/sun/net/www/protocol/jar/Handler.java create mode 100644 hiddenapi/stubs/src/main/java/xposed/dummy/XResourcesSuperClass.java create mode 100644 hiddenapi/stubs/src/main/java/xposed/dummy/XTypedArraySuperClass.java diff --git a/app/build.gradle b/app/build.gradle index 01f6a61c8..365d7f4aa 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -62,6 +62,8 @@ dependencies { implementation "com.github.topjohnwu.libsu:core:${libsuVersion}" implementation "com.github.topjohnwu.libsu:service:${libsuVersion}" implementation "com.github.topjohnwu.libsu:nio:${libsuVersion}" + implementation "org.lsposed.hiddenapibypass:hiddenapibypass:4.3" + compileOnly project(":hiddenapi:stubs") implementation "eu.chainfire:libsuperuser:1.1.0" implementation "com.github.ukanth:android-lockpattern:8.0.4" implementation "com.afollestad.material-dialogs:core:0.9.6.0" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f12256dfb..c40498d0c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -51,6 +51,7 @@ + @@ -363,4 +364,4 @@ - \ No newline at end of file + diff --git a/app/src/main/java/dev/ukanth/ufirewall/Api.java b/app/src/main/java/dev/ukanth/ufirewall/Api.java index bc2994680..811fb228d 100644 --- a/app/src/main/java/dev/ukanth/ufirewall/Api.java +++ b/app/src/main/java/dev/ukanth/ufirewall/Api.java @@ -125,6 +125,7 @@ import javax.crypto.spec.DESKeySpec; import dev.ukanth.ufirewall.MainActivity.GetAppList; +import dev.ukanth.ufirewall.MultiUser; import dev.ukanth.ufirewall.log.Log; import dev.ukanth.ufirewall.log.LogData; import dev.ukanth.ufirewall.log.LogData_Table; @@ -1841,28 +1842,34 @@ public static List getApps(Context ctx, GetAppList appList) { int count = 0; try { - listOfUids = new ArrayList<>(); - //this code will be executed on devices running ICS or later - final UserManager um = (UserManager) ctx.getSystemService(Context.USER_SERVICE); - List list = um.getUserProfiles(); - - for (UserHandle user : list) { - Matcher m = p.matcher(user.toString()); - if (m.find() && m.groupCount() > 0) { - int id = Integer.parseInt(m.group(1)); - if (id > 0) { - listOfUids.add(id); + /*if(G.supportDual()) { + listOfUids = new ArrayList<>(); + //this code will be executed on devices running ICS or later + final UserManager um = (UserManager) ctx.getSystemService(Context.USER_SERVICE); + List list = um.getUserProfiles(); + + for (UserHandle user : list) { + Matcher m = p.matcher(user.toString()); + if (m.find() && m.groupCount() > 0) { + int id = Integer.parseInt(m.group(1)); + if (id > 0) { + listOfUids.add(id); + } } } - } - //use pm list packages -f -U --user 10 - int pkgManagerFlags = PackageManager.GET_META_DATA; - // it's useless to iterate over uninstalled packages if we don't support multi-profile apps - if (G.supportDual()) { - pkgManagerFlags |= PackageManager.GET_UNINSTALLED_PACKAGES; - } + }*/ PackageManager pkgmanager = ctx.getPackageManager(); - List installed = pkgmanager.getInstalledApplications(pkgManagerFlags); + List installed; + if (G.isMultiUser()) { + installed = MultiUser.getInstalledPackagesFromAllUsers(MultiUser.MATCH_ALL_METADATA); + } else { + int pkgManagerFlags = PackageManager.GET_META_DATA; + // it's useless to iterate over uninstalled packages if we don't support multi-profile apps + if (G.supportDual()) { + pkgManagerFlags |= PackageManager.GET_UNINSTALLED_PACKAGES; + } + installed = pkgmanager.getInstalledPackages(pkgManagerFlags); + } SparseArray syncMap = new SparseArray<>(); Editor edit = cachePrefs.edit(); boolean changed = false; @@ -1870,21 +1877,24 @@ public static List getApps(Context ctx, GetAppList appList) { String cachekey; String cacheLabel = "cache.label."; PackageInfoData app; - ApplicationInfo apinfo; Date install = new Date(); install.setTime(System.currentTimeMillis() - (180000)); SparseArray multiUserAppsMap = new SparseArray<>(); HashMap packagesForUser = new HashMap<>(); - if(G.supportDual()) { + /*if(G.supportDual()) { packagesForUser = getPackagesForUser(listOfUids); - } + }*/ + - for (int i = 0; i < installed.size(); i++) { - //for (ApplicationInfo apinfo : installed) { + for (PackageInfo pkginfo : installed) { + ApplicationInfo apinfo = pkginfo.applicationInfo; + if (apinfo == null) continue; + + int user_id = MultiUser.applicationUserId(apinfo); + Log.d(TAG, "Processing app info: " + apinfo.packageName + " / user " + user_id + " / uid " + apinfo.uid); count = count + 1; - apinfo = installed.get(i); if (appList != null) { appList.doProgress(count); @@ -1897,11 +1907,15 @@ public static List getApps(Context ctx, GetAppList appList) { continue; } // try to get the application label from our cache - getApplicationLabel() is horribly slow!!!! - cachekey = cacheLabel + apinfo.packageName; + cachekey = cacheLabel + apinfo.packageName + Integer.toString(user_id); name = prefs.getString(cachekey, ""); if (name.length() == 0 || isRecentlyInstalled(apinfo.packageName)) { // get label and put on cache - name = pkgmanager.getApplicationLabel(apinfo).toString(); + if (G.isMultiUser()) { + name = pkgmanager.getApplicationLabel(apinfo).toString() + " / user " + Integer.toString(user_id); + } else { + name = pkgmanager.getApplicationLabel(apinfo).toString(); + } edit.putString(cachekey, name); changed = true; firstseen = true; @@ -1921,8 +1935,7 @@ public static List getApps(Context ctx, GetAppList appList) { app.appType = 0; } app.pkgName = apinfo.packageName; - if ((apinfo.flags & ApplicationInfo.FLAG_INSTALLED) != 0) - syncMap.put(apinfo.uid, app); + syncMap.put(app.uid, app); } else { app.names.add(name); } @@ -1950,12 +1963,12 @@ public static List getApps(Context ctx, GetAppList appList) { if (G.enableTor() && !app.selected_tor && Collections.binarySearch(selected_tor, app.uid) >= 0) { app.selected_tor = true; } - if (G.supportDual()) { + /*if (G.supportDual()) { checkPartOfMultiUser(apinfo, name, listOfUids, packagesForUser, multiUserAppsMap); - } + }*/ } - if (G.supportDual()) { + /*if (G.supportDual()) { //run through multi user map for (int i = 0; i < multiUserAppsMap.size(); i++) { app = multiUserAppsMap.valueAt(i); @@ -1982,7 +1995,7 @@ public static List getApps(Context ctx, GetAppList appList) { } syncMap.put(app.uid, app); } - } + }*/ List specialData = getSpecialData(); @@ -2077,7 +2090,7 @@ public static List getSpecialData() { return specialData; } - private static void checkPartOfMultiUser(ApplicationInfo apinfo, String name, List uid1, HashMap pkgs, SparseArray syncMap) { + /*private static void checkPartOfMultiUser(ApplicationInfo apinfo, String name, List uid1, HashMap pkgs, SparseArray syncMap) { try { for (Integer integer : uid1) { int appUid = Integer.parseInt(integer + "" + apinfo.uid + ""); @@ -2107,7 +2120,7 @@ private static void checkPartOfMultiUser(ApplicationInfo apinfo, String name, Li } catch (Exception e) { Log.e(TAG, e.getMessage(), e); } - } + }*/ private static boolean packagesExistForUserUid(HashMap pkgs, int appUid) { if(pkgs.containsKey(appUid)){ @@ -3623,7 +3636,7 @@ public static boolean loadSharedPreferencesFromFile(Context ctx, StringBuilder b public static void probeLogTarget(final Context ctx) { } - + @SuppressLint("InlinedApi") public static void showInstalledAppDetails(Context context, String packageName) { final String SCHEME = "package"; @@ -4282,7 +4295,7 @@ public static final class PackageInfoData { public String pkgName; /** - * Application Type + * Application Type. 0 for system, 1 for user, 2 for core. */ public int appType; @@ -4398,13 +4411,12 @@ public String toString() { public String toStringWithUID() { if (tostr == null) { StringBuilder s = new StringBuilder(); - s.append("[ "); - s.append(uid); - s.append(" ] "); for (int i = 0; i < names.size(); i++) { if (i != 0) s.append(", "); s.append(names.get(i)); } + s.append(" / "); + s.append(uid); s.append("\n"); tostr = s.toString(); } diff --git a/app/src/main/java/dev/ukanth/ufirewall/MainActivity.java b/app/src/main/java/dev/ukanth/ufirewall/MainActivity.java index 166fff0e6..60ceedd4e 100644 --- a/app/src/main/java/dev/ukanth/ufirewall/MainActivity.java +++ b/app/src/main/java/dev/ukanth/ufirewall/MainActivity.java @@ -102,6 +102,7 @@ import dev.ukanth.ufirewall.activity.OldLogActivity; import dev.ukanth.ufirewall.activity.RulesActivity; import dev.ukanth.ufirewall.log.Log; +import dev.ukanth.ufirewall.MultiUser; import dev.ukanth.ufirewall.preferences.PreferencesActivity; import dev.ukanth.ufirewall.profiles.ProfileData; import dev.ukanth.ufirewall.profiles.ProfileHelper; @@ -234,6 +235,7 @@ public void onCreate(Bundle savedInstanceState) { startRootShell(); new SecurityUtil(MainActivity.this).passCheck(); registerNetworkObserver(); + MultiUser.setup(); // Ensure FirewallService is started if firewall is enabled if (Api.isEnabled(this)) { Api.setEnabled(this, true, false); diff --git a/app/src/main/java/dev/ukanth/ufirewall/MultiUser.java b/app/src/main/java/dev/ukanth/ufirewall/MultiUser.java new file mode 100644 index 000000000..2df7cc97f --- /dev/null +++ b/app/src/main/java/dev/ukanth/ufirewall/MultiUser.java @@ -0,0 +1,163 @@ +package dev.ukanth.ufirewall; + +import android.content.pm.ApplicationInfo; +import android.content.pm.IPackageManager; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.content.pm.ParceledListSlice; +import android.content.pm.UserInfo; +import android.os.Build; +import android.os.IBinder; +import android.os.RemoteException; +import android.os.ServiceManager; + +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +import com.topjohnwu.superuser.Shell; + +import org.lsposed.hiddenapibypass.HiddenApiBypass; + +import dev.ukanth.ufirewall.log.Log; + + +public class MultiUser { + public static final String TAG = "AFWall"; + + private static final Pattern list_users = Pattern.compile("\\s*UserInfo\\{(.*?):(.*):(.*?)\\}.*", Pattern.MULTILINE); + + // just call `pm list users` directly - the HiddenApi IUserManager dance still + // requires MANAGE_USERS which has android:protectionLevel="signature|privileged" + // so there is no way for us to get it even with root su shell. + public static List getUsers() { + Shell.Result result = Shell.cmd("pm list users").exec(); + List res = new ArrayList(); + if (!result.isSuccess()) { + Log.w(TAG, "pm list users failed; further errors likely"); + return res; + } + List out = result.getOut(); + Matcher matcher; + for (String item : out) { + matcher = list_users.matcher(item); + if (matcher.find() && matcher.groupCount() > 0) { + int user_id = Integer.parseInt(matcher.group(1)); + String username = matcher.group(2); + int flag = Integer.parseInt(matcher.group(3), 16); + UserInfo ui = new UserInfo(); + ui.id = user_id; + ui.name = username; + //ui.flags = flag; // hiddenapi-stub doesn't yet expose this, we don't need it anyway + res.add(ui); + } + } + return res; + } + + public static void setup() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + HiddenApiBypass.addHiddenApiExemptions(""); + } + + Shell.Result result = Shell.cmd("pm grant dev.ukanth.ufirewall android.permission.INTERACT_ACROSS_USERS").exec(); + if (!result.isSuccess()) { + Log.w(TAG, "pm grant INTERACT_ACROSS_USERS failed; further errors likely"); + } + } + + // Copied from LSPosed daemon/**/PackageService.java + private static IBinder pbinder = null; + private static IPackageManager pm = null; + public static final int PER_USER_RANGE = 100000; + + // Copied from LSPosed daemon/**/PackageService.java + // We drop MATCH_ANY_USER as we don't need it, and it requires MANAGE_USERS which we can't get, as explained above + public static final int MATCH_ALL_FLAGS = PackageManager.MATCH_DISABLED_COMPONENTS | PackageManager.MATCH_DIRECT_BOOT_AWARE | PackageManager.MATCH_DIRECT_BOOT_UNAWARE | PackageManager.MATCH_UNINSTALLED_PACKAGES; // | MATCH_ANY_USER; + + public static final int MATCH_ALL_METADATA = PackageManager.GET_META_DATA | MATCH_ALL_FLAGS; + + // Copied from LSPosed daemon/**/PackageService.java + private static final IBinder.DeathRecipient precipient = new IBinder.DeathRecipient() { + @Override + public void binderDied() { + Log.w(TAG, "pm is dead"); + pbinder.unlinkToDeath(this, 0); + pbinder = null; + pm = null; + } + }; + + // Copied from LSPosed daemon/**/PackageService.java + private static IPackageManager getPackageManager() { + if (pbinder == null || pm == null) { + pbinder = ServiceManager.getService("package"); + if (pbinder == null) return null; + try { + pbinder.linkToDeath(precipient, 0); + } catch (RemoteException e) { + Log.e(TAG, android.util.Log.getStackTraceString(e)); + } + pm = IPackageManager.Stub.asInterface(pbinder); + } + return pm; + } + + // Copied from LSPosed daemon/**/PackageService.java + public static boolean isPackageAvailable(String packageName, int userId, boolean ignoreHidden) throws RemoteException { + return pm.isPackageAvailable(packageName, userId) || (ignoreHidden && pm.getApplicationHiddenSettingAsUser(packageName, userId)); + } + + public static int packageUserId(PackageInfo info) { + return applicationUserId(info.applicationInfo); + } + + public static int applicationUserId(ApplicationInfo info) { + return (info == null)? -1: info.uid / PER_USER_RANGE; + } + + // Copied from LSPosed daemon/**/PackageService.java + // This requires INTERACT_ACROSS_USERS permission. LSPosed already has it, but + // we need to grant it at runtime - make sure you call setup() in app.onCreate(_) + // We use this instead of `pm list packages` so that we have ApplicationInfo + // objects, which allows us to get the icons and labels in a convenient manner. + public static List getInstalledPackagesFromAllUsers(int flags/*, boolean filterNoProcess*/) throws RemoteException { + List res = new ArrayList<>(); + IPackageManager pm = getPackageManager(); + if (pm == null) return res; + for (UserInfo user : getUsers()) { + // in case pkginfo of other users in primary user + ParceledListSlice infos; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + infos = pm.getInstalledPackages((long) flags, user.id); + } else { + infos = pm.getInstalledPackages(flags, user.id); + } + res.addAll(infos + .getList().parallelStream() + .filter(info -> info.applicationInfo != null && packageUserId(info) == user.id) + .filter(info -> { + try { + return isPackageAvailable(info.packageName, user.id, true); + } catch (RemoteException e) { + return false; + } + }) + .collect(Collectors.toList())); + } + /*if (filterNoProcess) { + return new ParcelableListSlice<>(res.parallelStream().filter(packageInfo -> { + try { + PackageInfo pkgInfo = getPackageInfoWithComponents(packageInfo.packageName, MATCH_ALL_FLAGS, packageInfo.applicationInfo.uid / PER_USER_RANGE); + return !fetchProcesses(pkgInfo).isEmpty(); + } catch (RemoteException e) { + Log.w(TAG, "filter failed", e); + return true; + } + }).collect(Collectors.toList())); + }*/ + return res; + } +} diff --git a/app/src/main/java/dev/ukanth/ufirewall/util/AppListArrayAdapter.java b/app/src/main/java/dev/ukanth/ufirewall/util/AppListArrayAdapter.java index 2859bcfe0..d84aa9509 100644 --- a/app/src/main/java/dev/ukanth/ufirewall/util/AppListArrayAdapter.java +++ b/app/src/main/java/dev/ukanth/ufirewall/util/AppListArrayAdapter.java @@ -166,11 +166,11 @@ public View getView(final int position, View convertView, ViewGroup parent) { ApplicationInfo info = holder.app.appinfo; - if (info != null && (info.flags & ApplicationInfo.FLAG_SYSTEM) == 0) { + if (holder.app.appType == 1) { //user app holder.text.setTextColor(G.userColor()); } else { - //system app + //system or core app holder.text.setTextColor(G.sysColor()); } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 636d729ba..fae6e5e8b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -328,7 +328,7 @@ Load and apply rules when switching profiles Enable multi-user support - Support Android multi-user (only works in mode where selected items are blocked) + Support Android multi-user Additional Security - Prevent uninstalling AFWall+ diff --git a/hiddenapi/stubs/.gitignore b/hiddenapi/stubs/.gitignore new file mode 100644 index 000000000..796b96d1c --- /dev/null +++ b/hiddenapi/stubs/.gitignore @@ -0,0 +1 @@ +/build diff --git a/hiddenapi/stubs/README.md b/hiddenapi/stubs/README.md new file mode 100644 index 000000000..82612a3cc --- /dev/null +++ b/hiddenapi/stubs/README.md @@ -0,0 +1 @@ +copied from https://github.com/LSPosed/LSPosed/tree/master/hiddenapi/stubs diff --git a/hiddenapi/stubs/build.gradle.kts b/hiddenapi/stubs/build.gradle.kts new file mode 100644 index 000000000..384caffcf --- /dev/null +++ b/hiddenapi/stubs/build.gradle.kts @@ -0,0 +1,27 @@ +/* + * This file is part of LSPosed. + * + * LSPosed is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * LSPosed is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with LSPosed. If not, see . + * + * Copyright (C) 2021 LSPosed Contributors + */ + +plugins { + `java-library` +} + +java { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 +} diff --git a/hiddenapi/stubs/src/main/java/android/annotation/NonNull.java b/hiddenapi/stubs/src/main/java/android/annotation/NonNull.java new file mode 100644 index 000000000..927f9975b --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/annotation/NonNull.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.annotation; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.RetentionPolicy.SOURCE; + +/** + * Denotes that a parameter, field or method return value can never be null. + *

+ * This is a marker annotation and it has no specific attributes. + * + * @paramDoc This value must never be {@code null}. + * @returnDoc This value will never be {@code null}. + * @hide + */ +@Retention(SOURCE) +@Target({METHOD, PARAMETER, FIELD}) +public @interface NonNull { +} diff --git a/hiddenapi/stubs/src/main/java/android/annotation/Nullable.java b/hiddenapi/stubs/src/main/java/android/annotation/Nullable.java new file mode 100644 index 000000000..daea2b800 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/annotation/Nullable.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.annotation; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.RetentionPolicy.SOURCE; + +/** + * Denotes that a parameter, field or method return value can be null. + *

+ * When decorating a method call parameter, this denotes that the parameter can + * legitimately be null and the method will gracefully deal with it. Typically + * used on optional parameters. + *

+ * When decorating a method, this denotes the method might legitimately return + * null. + *

+ * This is a marker annotation and it has no specific attributes. + * + * @paramDoc This value may be {@code null}. + * @returnDoc This value may be {@code null}. + */ +@Retention(SOURCE) +@Target({METHOD, PARAMETER, FIELD}) +public @interface Nullable { +} diff --git a/hiddenapi/stubs/src/main/java/android/app/ActivityManager.java b/hiddenapi/stubs/src/main/java/android/app/ActivityManager.java new file mode 100644 index 000000000..b38f5714d --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/app/ActivityManager.java @@ -0,0 +1,9 @@ +package android.app; + +public class ActivityManager { + public static int UID_OBSERVER_GONE; + public static int UID_OBSERVER_ACTIVE; + public static int UID_OBSERVER_IDLE; + public static int UID_OBSERVER_CACHED; + public static int PROCESS_STATE_UNKNOWN; +} diff --git a/hiddenapi/stubs/src/main/java/android/app/ActivityThread.java b/hiddenapi/stubs/src/main/java/android/app/ActivityThread.java new file mode 100644 index 000000000..7e5a861b6 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/app/ActivityThread.java @@ -0,0 +1,54 @@ +package android.app; + +import android.content.pm.ApplicationInfo; +import android.content.res.CompatibilityInfo; +import android.os.Bundle; +import android.os.IBinder; +import android.os.PersistableBundle; + +public final class ActivityThread { + public static ActivityThread currentActivityThread() { + throw new UnsupportedOperationException("STUB"); + } + + public ApplicationThread getApplicationThread() { + throw new UnsupportedOperationException("STUB"); + } + + + public static Application currentApplication() { + throw new UnsupportedOperationException("STUB"); + } + + public static String currentPackageName() { + throw new UnsupportedOperationException("STUB"); + } + + public final LoadedApk getPackageInfoNoCheck(ApplicationInfo ai, CompatibilityInfo compatInfo) { + throw new UnsupportedOperationException("STUB"); + } + + public static String currentProcessName() { + throw new UnsupportedOperationException("STUB"); + } + + public ContextImpl getSystemContext() { + throw new UnsupportedOperationException("STUB"); + } + + public static ActivityThread systemMain() { + throw new UnsupportedOperationException("STUB"); + } + + private class ApplicationThread extends IApplicationThread.Stub { + @Override + public IBinder asBinder() { + return null; + } + } + + public static final class ActivityClientRecord { + Bundle state; + PersistableBundle persistentState; + } +} diff --git a/hiddenapi/stubs/src/main/java/android/app/Application.java b/hiddenapi/stubs/src/main/java/android/app/Application.java new file mode 100644 index 000000000..a7fe902ef --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/app/Application.java @@ -0,0 +1,4 @@ +package android.app; + +public class Application { +} diff --git a/hiddenapi/stubs/src/main/java/android/app/ContentProviderHolder.java b/hiddenapi/stubs/src/main/java/android/app/ContentProviderHolder.java new file mode 100644 index 000000000..9b390bd3d --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/app/ContentProviderHolder.java @@ -0,0 +1,7 @@ +package android.app; + +import android.content.IContentProvider; + +public class ContentProviderHolder { + public IContentProvider provider; +} diff --git a/hiddenapi/stubs/src/main/java/android/app/ContextImpl.java b/hiddenapi/stubs/src/main/java/android/app/ContextImpl.java new file mode 100644 index 000000000..12c44eaa1 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/app/ContextImpl.java @@ -0,0 +1,6 @@ +package android.app; + +import android.content.Context; + +public class ContextImpl extends Context { +} diff --git a/hiddenapi/stubs/src/main/java/android/app/IActivityController.java b/hiddenapi/stubs/src/main/java/android/app/IActivityController.java new file mode 100644 index 000000000..a88ac8fa4 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/app/IActivityController.java @@ -0,0 +1,66 @@ +package android.app; + +import android.content.Intent; +import android.os.Binder; +import android.os.Bundle; +import android.os.IBinder; +import android.os.IInterface; + +public interface IActivityController extends IInterface { + /** + * The system is trying to start an activity. Return true to allow + * it to be started as normal, or false to cancel/reject this activity. + */ + boolean activityStarting(Intent intent, String pkg); + + /** + * The system is trying to return to an activity. Return true to allow + * it to be resumed as normal, or false to cancel/reject this activity. + */ + boolean activityResuming(String pkg); + + /** + * An application process has crashed (in Java). Return true for the + * normal error recovery (app crash dialog) to occur, false to kill + * it immediately. + */ + boolean appCrashed(String processName, int pid, + String shortMsg, String longMsg, + long timeMillis, String stackTrace); + + /** + * Early call as soon as an ANR is detected. + */ + int appEarlyNotResponding(String processName, int pid, String annotation); + + /** + * An application process is not responding. Return 0 to show the "app + * not responding" dialog, 1 to continue waiting, or -1 to kill it + * immediately. + */ + int appNotResponding(String processName, int pid, String processStats); + + /** + * The system process watchdog has detected that the system seems to be + * hung. Return 1 to continue waiting, or -1 to let it continue with its + * normal kill. + */ + int systemNotResponding(String msg); + + /** + * 360 phones + */ + boolean moveTaskToFront(String pkg, int task, int flags, Bundle options); + + abstract class Stub extends Binder implements IActivityController { + + public static IActivityController asInterface(IBinder obj) { + throw new UnsupportedOperationException(); + } + + @Override + public IBinder asBinder() { + throw new UnsupportedOperationException(); + } + } +} diff --git a/hiddenapi/stubs/src/main/java/android/app/IActivityManager.java b/hiddenapi/stubs/src/main/java/android/app/IActivityManager.java new file mode 100644 index 000000000..0a70a72c4 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/app/IActivityManager.java @@ -0,0 +1,138 @@ +/* + * This file is part of LSPosed. + * + * LSPosed is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * LSPosed is distributed the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with LSPosed. If not, see . + * + * Copyright (C) 2021 LSPosed Contributors + */ + +package android.app; + +import android.content.IIntentReceiver; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.pm.UserInfo; +import android.content.res.Configuration; +import android.os.Binder; +import android.os.Bundle; +import android.os.IBinder; +import android.os.IInterface; +import android.os.RemoteException; + +import androidx.annotation.RequiresApi; + +public interface IActivityManager extends IInterface { + @RequiresApi(31) + int broadcastIntentWithFeature(IApplicationThread caller, String callingFeatureId, + Intent intent, String resolvedType, IIntentReceiver resultTo, + int resultCode, String resultData, Bundle resultExtras, + String[] requiredPermissions, String[] excludedPermissions, + String[] excludePackages, int appOp, Bundle bOptions, + boolean serialized, boolean sticky, int userId) throws RemoteException; + + @RequiresApi(31) + int broadcastIntentWithFeature(IApplicationThread caller, String callingFeatureId, + Intent intent, String resolvedType, IIntentReceiver resultTo, + int resultCode, String resultData, Bundle resultExtras, + String[] requiredPermissions, String[] excludedPermissions, + int appOp, Bundle bOptions, + boolean serialized, boolean sticky, int userId) throws RemoteException; + + @RequiresApi(30) + int broadcastIntentWithFeature(IApplicationThread caller, String callingFeatureId, + Intent intent, String resolvedType, IIntentReceiver resultTo, int resultCode, + String resultData, Bundle map, String[] requiredPermissions, + int appOp, Bundle options, boolean serialized, boolean sticky, int userId) throws RemoteException; + + int broadcastIntent(IApplicationThread caller, Intent intent, + String resolvedType, IIntentReceiver resultTo, int resultCode, + String resultData, Bundle map, String[] requiredPermissions, + int appOp, Bundle options, boolean serialized, boolean sticky, int userId) throws RemoteException; + + int startActivity(IApplicationThread caller, String callingPackage, Intent intent, + String resolvedType, IBinder resultTo, String resultWho, int requestCode, + int flags, ProfilerInfo profilerInfo, Bundle options) throws RemoteException; + + @RequiresApi(30) + int startActivityWithFeature(IApplicationThread caller, String callingPackage, + String callingFeatureId, Intent intent, String resolvedType, + IBinder resultTo, String resultWho, int requestCode, int flags, + ProfilerInfo profilerInfo, Bundle options) throws RemoteException; + + int startActivityAsUser(IApplicationThread caller, String callingPackage, + Intent intent, String resolvedType, IBinder resultTo, String resultWho, + int requestCode, int flags, ProfilerInfo profilerInfo, + Bundle options, int userId) throws RemoteException; + + @RequiresApi(30) + int startActivityAsUserWithFeature(IApplicationThread caller, String callingPackage, + String callingFeatureId, Intent intent, String resolvedType, + IBinder resultTo, String resultWho, int requestCode, int flags, + ProfilerInfo profilerInfo, Bundle options, int userId) throws RemoteException; + + void forceStopPackage(String packageName, int userId) throws RemoteException; + + boolean startUserInBackground(int userid) throws RemoteException; + + Intent registerReceiver(IApplicationThread caller, String callerPackage, + IIntentReceiver receiver, IntentFilter filter, + String requiredPermission, int userId, int flags) throws RemoteException; + + void finishReceiver(IBinder caller, int resultCode, String resultData, + Bundle resultExtras, boolean resultAbort, int flags) throws RemoteException; + + @RequiresApi(30) + Intent registerReceiverWithFeature(IApplicationThread caller, String callerPackage, + String callingFeatureId, IIntentReceiver receiver, IntentFilter filter, + String requiredPermission, int userId, int flags) throws RemoteException; + + @RequiresApi(31) + Intent registerReceiverWithFeature(IApplicationThread caller, String callerPackage, String callingFeatureId, + String receiverId, IIntentReceiver receiver, IntentFilter filter, + String requiredPermission, int userId, int flags) throws RemoteException; + + int bindService(IApplicationThread caller, IBinder token, Intent service, + String resolvedType, IServiceConnection connection, int flags, + String callingPackage, int userId) throws RemoteException; + + @RequiresApi(34) + int bindService(IApplicationThread caller, IBinder token, Intent service, + String resolvedType, IServiceConnection connection, long flags, + String callingPackage, int userId) throws RemoteException; + + boolean unbindService(IServiceConnection connection) throws RemoteException; + + boolean switchUser(int userid) throws RemoteException; + + UserInfo getCurrentUser() throws RemoteException; + + void setActivityController(IActivityController watcher, boolean imAMonkey) throws RemoteException; + + @RequiresApi(29) + ContentProviderHolder getContentProviderExternal(String name, int userId, IBinder token, String tag) throws RemoteException; + + ContentProviderHolder getContentProviderExternal(String name, int userId, IBinder token) throws RemoteException; + + Configuration getConfiguration() throws RemoteException; + + void registerUidObserver(IUidObserver observer, int which, int cutpoint, String callingPackage) throws RemoteException; + + abstract class Stub extends Binder implements IActivityManager { + public static int TRANSACTION_setActivityController; + + public static IActivityManager asInterface(IBinder obj) { + throw new UnsupportedOperationException(); + } + } +} diff --git a/hiddenapi/stubs/src/main/java/android/app/IApplicationThread.java b/hiddenapi/stubs/src/main/java/android/app/IApplicationThread.java new file mode 100644 index 000000000..0b0146fab --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/app/IApplicationThread.java @@ -0,0 +1,32 @@ +/* + * This file is part of LSPosed. + * + * LSPosed is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * LSPosed is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with LSPosed. If not, see . + * + * Copyright (C) 2021 LSPosed Contributors + */ + +package android.app; + +import android.os.Binder; +import android.os.IBinder; +import android.os.IInterface; + +public interface IApplicationThread extends IInterface { + abstract class Stub extends Binder implements IApplicationThread { + public static IApplicationThread asInterface(IBinder obj) { + throw new UnsupportedOperationException(); + } + } +} diff --git a/hiddenapi/stubs/src/main/java/android/app/INotificationManager.java b/hiddenapi/stubs/src/main/java/android/app/INotificationManager.java new file mode 100644 index 000000000..8a73e0e91 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/app/INotificationManager.java @@ -0,0 +1,34 @@ +package android.app; + +import android.content.pm.ParceledListSlice; +import android.os.Binder; +import android.os.IBinder; +import android.os.IInterface; +import android.os.RemoteException; + +import androidx.annotation.RequiresApi; + +public interface INotificationManager extends IInterface { + void enqueueNotificationWithTag(String pkg, String opPkg, String tag, int id, + Notification notification, int userId) throws RemoteException; + + void cancelNotificationWithTag(String pkg, String tag, int id, int userId) throws RemoteException; + + @RequiresApi(30) + void cancelNotificationWithTag(String pkg, String opPkg, String tag, int id, int userId) throws RemoteException; + + void createNotificationChannelsForPackage(String pkg, int uid, ParceledListSlice channelsList) throws RemoteException; + + void updateNotificationChannelForPackage(String pkg, int uid, NotificationChannel channel); + + @RequiresApi(30) + NotificationChannel getNotificationChannelForPackage(String pkg, int uid, String channelId, String conversationId, boolean includeDeleted) throws RemoteException; + + NotificationChannel getNotificationChannelForPackage(String pkg, int uid, String channelId, boolean includeDeleted) throws RemoteException; + + abstract class Stub extends Binder implements INotificationManager { + public static INotificationManager asInterface(IBinder obj) { + throw new UnsupportedOperationException(); + } + } +} diff --git a/hiddenapi/stubs/src/main/java/android/app/IServiceConnection.java b/hiddenapi/stubs/src/main/java/android/app/IServiceConnection.java new file mode 100644 index 000000000..a531e1bc1 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/app/IServiceConnection.java @@ -0,0 +1,22 @@ +package android.app; + +import android.content.ComponentName; +import android.os.Binder; +import android.os.IBinder; +import android.os.IInterface; + +public interface IServiceConnection extends IInterface { + void connected(ComponentName name, IBinder service, boolean dead); + + abstract class Stub extends Binder implements IServiceConnection { + + public static IServiceConnection asInterface(IBinder obj) { + throw new UnsupportedOperationException(); + } + + @Override + public IBinder asBinder() { + throw new UnsupportedOperationException(); + } + } +} diff --git a/hiddenapi/stubs/src/main/java/android/app/IUidObserver.java b/hiddenapi/stubs/src/main/java/android/app/IUidObserver.java new file mode 100644 index 000000000..676e509a6 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/app/IUidObserver.java @@ -0,0 +1,17 @@ +package android.app; + +import android.os.Binder; + +public interface IUidObserver { + + void onUidGone(int uid, boolean disabled); + + void onUidActive(int uid); + + void onUidIdle(int uid, boolean disabled); + + void onUidCachedChanged(int uid, boolean cached); + + abstract class Stub extends Binder implements IUidObserver { + } +} diff --git a/hiddenapi/stubs/src/main/java/android/app/LoadedApk.java b/hiddenapi/stubs/src/main/java/android/app/LoadedApk.java new file mode 100644 index 000000000..32f294c1e --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/app/LoadedApk.java @@ -0,0 +1,23 @@ +package android.app; + +import android.content.pm.ApplicationInfo; + +public final class LoadedApk { + private ClassLoader mDefaultClassLoader; + + public ApplicationInfo getApplicationInfo() { + throw new UnsupportedOperationException("STUB"); + } + + public ClassLoader getClassLoader() { + throw new UnsupportedOperationException("STUB"); + } + + public String getPackageName() { + throw new UnsupportedOperationException("STUB"); + } + + public String getResDir() { + throw new UnsupportedOperationException("STUB"); + } +} diff --git a/hiddenapi/stubs/src/main/java/android/app/Notification.java b/hiddenapi/stubs/src/main/java/android/app/Notification.java new file mode 100644 index 000000000..147786911 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/app/Notification.java @@ -0,0 +1,4 @@ +package android.app; + +public class Notification { +} diff --git a/hiddenapi/stubs/src/main/java/android/app/NotificationChannel.java b/hiddenapi/stubs/src/main/java/android/app/NotificationChannel.java new file mode 100644 index 000000000..dbd15704b --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/app/NotificationChannel.java @@ -0,0 +1,4 @@ +package android.app; + +public class NotificationChannel { +} diff --git a/hiddenapi/stubs/src/main/java/android/app/ProfilerInfo.java b/hiddenapi/stubs/src/main/java/android/app/ProfilerInfo.java new file mode 100644 index 000000000..6b5056f07 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/app/ProfilerInfo.java @@ -0,0 +1,23 @@ +/* + * This file is part of LSPosed. + * + * LSPosed is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * LSPosed is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with LSPosed. If not, see . + * + * Copyright (C) 2021 LSPosed Contributors + */ + +package android.app; + +public class ProfilerInfo { +} diff --git a/hiddenapi/stubs/src/main/java/android/app/ResourcesManager.java b/hiddenapi/stubs/src/main/java/android/app/ResourcesManager.java new file mode 100644 index 000000000..3132dff50 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/app/ResourcesManager.java @@ -0,0 +1,4 @@ +package android.app; + +public class ResourcesManager { +} diff --git a/hiddenapi/stubs/src/main/java/android/content/AttributionSource.java b/hiddenapi/stubs/src/main/java/android/content/AttributionSource.java new file mode 100644 index 000000000..f54c432ff --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/content/AttributionSource.java @@ -0,0 +1,4 @@ +package android.content; + +public class AttributionSource { +} diff --git a/hiddenapi/stubs/src/main/java/android/content/BroadcastReceiver.java b/hiddenapi/stubs/src/main/java/android/content/BroadcastReceiver.java new file mode 100644 index 000000000..d70f080aa --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/content/BroadcastReceiver.java @@ -0,0 +1,5 @@ +package android.content; + +public abstract class BroadcastReceiver { + public abstract void onReceive(Context context, Intent intent); +} diff --git a/hiddenapi/stubs/src/main/java/android/content/ComponentName.java b/hiddenapi/stubs/src/main/java/android/content/ComponentName.java new file mode 100644 index 000000000..47ef5a706 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/content/ComponentName.java @@ -0,0 +1,4 @@ +package android.content; + +public final class ComponentName { +} diff --git a/hiddenapi/stubs/src/main/java/android/content/Context.java b/hiddenapi/stubs/src/main/java/android/content/Context.java new file mode 100644 index 000000000..fc22c4492 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/content/Context.java @@ -0,0 +1,15 @@ +package android.content; + +import android.os.Handler; +import android.os.IBinder; +import android.os.UserHandle; + +public class Context { + public IBinder getActivityToken() { + throw new UnsupportedOperationException("STUB"); + } + public Intent registerReceiverAsUser(BroadcastReceiver receiver, UserHandle user, + IntentFilter filter, String broadcastPermission, Handler scheduler) { + throw new UnsupportedOperationException("STUB"); + } +} diff --git a/hiddenapi/stubs/src/main/java/android/content/IContentProvider.java b/hiddenapi/stubs/src/main/java/android/content/IContentProvider.java new file mode 100644 index 000000000..f3aba6382 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/content/IContentProvider.java @@ -0,0 +1,21 @@ +package android.content; + +import android.os.Bundle; +import android.os.IInterface; +import android.os.RemoteException; + +import androidx.annotation.RequiresApi; + +public interface IContentProvider extends IInterface { + @RequiresApi(29) + Bundle call(String callingPkg, String authority, String method, + String arg, Bundle extras) throws RemoteException; + + @RequiresApi(30) + Bundle call(String callingPkg, String attributionTag, String authority, + String method, String arg, Bundle extras) throws RemoteException; + + @RequiresApi(31) + Bundle call(AttributionSource attributionSource, String authority, + String method, String arg, Bundle extras) throws RemoteException; +} diff --git a/hiddenapi/stubs/src/main/java/android/content/IIntentReceiver.java b/hiddenapi/stubs/src/main/java/android/content/IIntentReceiver.java new file mode 100644 index 000000000..233fce190 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/content/IIntentReceiver.java @@ -0,0 +1,40 @@ +/* + * This file is part of LSPosed. + * + * LSPosed is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * LSPosed is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with LSPosed. If not, see . + * + * Copyright (C) 2021 LSPosed Contributors + */ + +package android.content; + +import android.os.Binder; +import android.os.Bundle; +import android.os.IBinder; +import android.os.IInterface; + +public interface IIntentReceiver extends IInterface { + void performReceive(Intent intent, int resultCode, String data, + Bundle extras, boolean ordered, boolean sticky, int sendingUser); + abstract class Stub extends Binder implements IIntentReceiver { + public static IIntentReceiver asInterface(IBinder obj) { + throw new UnsupportedOperationException(); + } + + @Override + public IBinder asBinder() { + return this; + } + } +} diff --git a/hiddenapi/stubs/src/main/java/android/content/IIntentSender.java b/hiddenapi/stubs/src/main/java/android/content/IIntentSender.java new file mode 100644 index 000000000..842d8a741 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/content/IIntentSender.java @@ -0,0 +1,34 @@ +package android.content; + +import android.os.Binder; +import android.os.Bundle; +import android.os.IBinder; +import android.os.IInterface; + +import androidx.annotation.RequiresApi; + +public interface IIntentSender extends IInterface { + + int send(int code, Intent intent, String resolvedType, + IIntentReceiver finishedReceiver, String requiredPermission, Bundle options); + + @RequiresApi(26) + void send(int code, Intent intent, String resolvedType, IBinder whitelistToken, + IIntentReceiver finishedReceiver, String requiredPermission, Bundle options); + + abstract class Stub extends Binder implements IIntentSender { + + public Stub() { + throw new UnsupportedOperationException(); + } + + @Override + public android.os.IBinder asBinder() { + throw new UnsupportedOperationException(); + } + + public static IIntentSender asInterface(IBinder binder) { + throw new UnsupportedOperationException(); + } + } +} diff --git a/hiddenapi/stubs/src/main/java/android/content/Intent.java b/hiddenapi/stubs/src/main/java/android/content/Intent.java new file mode 100644 index 000000000..48c55e8f0 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/content/Intent.java @@ -0,0 +1,23 @@ +/* + * This file is part of LSPosed. + * + * LSPosed is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * LSPosed is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with LSPosed. If not, see . + * + * Copyright (C) 2021 LSPosed Contributors + */ + +package android.content; + +public class Intent { +} diff --git a/hiddenapi/stubs/src/main/java/android/content/IntentFilter.java b/hiddenapi/stubs/src/main/java/android/content/IntentFilter.java new file mode 100644 index 000000000..347a714cd --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/content/IntentFilter.java @@ -0,0 +1,5 @@ +package android.content; + +public class IntentFilter { + +} diff --git a/hiddenapi/stubs/src/main/java/android/content/IntentSender.java b/hiddenapi/stubs/src/main/java/android/content/IntentSender.java new file mode 100644 index 000000000..1279e06dd --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/content/IntentSender.java @@ -0,0 +1,4 @@ +package android.content; + +public class IntentSender { +} diff --git a/hiddenapi/stubs/src/main/java/android/content/pm/ApplicationInfo.java b/hiddenapi/stubs/src/main/java/android/content/pm/ApplicationInfo.java new file mode 100644 index 000000000..a6e62a6cc --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/content/pm/ApplicationInfo.java @@ -0,0 +1,12 @@ +package android.content.pm; + +import androidx.annotation.RequiresApi; + +public class ApplicationInfo { + public String credentialProtectedDataDir; + + public String[] resourceDirs; + + @RequiresApi(31) + public String[] overlayPaths; +} diff --git a/hiddenapi/stubs/src/main/java/android/content/pm/BaseParceledListSlice.java b/hiddenapi/stubs/src/main/java/android/content/pm/BaseParceledListSlice.java new file mode 100644 index 000000000..d9af8b528 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/content/pm/BaseParceledListSlice.java @@ -0,0 +1,10 @@ +package android.content.pm; + +import java.util.List; + +abstract class BaseParceledListSlice { + + public List getList() { + throw new RuntimeException("STUB"); + } +} diff --git a/hiddenapi/stubs/src/main/java/android/content/pm/IPackageInstaller.java b/hiddenapi/stubs/src/main/java/android/content/pm/IPackageInstaller.java new file mode 100644 index 000000000..c77a01349 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/content/pm/IPackageInstaller.java @@ -0,0 +1,16 @@ +package android.content.pm; + +import android.os.Binder; +import android.os.IBinder; +import android.os.IInterface; + +public interface IPackageInstaller extends IInterface { + + void uninstall(android.content.pm.VersionedPackage versionedPackage, java.lang.String callerPackageName, int flags, android.content.IntentSender statusReceiver, int userId) throws android.os.RemoteException; + + abstract class Stub extends Binder implements IPackageInstaller { + public static IPackageInstaller asInterface(IBinder obj) { + throw new UnsupportedOperationException(); + } + } +} diff --git a/hiddenapi/stubs/src/main/java/android/content/pm/IPackageManager.java b/hiddenapi/stubs/src/main/java/android/content/pm/IPackageManager.java new file mode 100644 index 000000000..279e89754 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/content/pm/IPackageManager.java @@ -0,0 +1,104 @@ +package android.content.pm; + +import android.content.Intent; +import android.os.Binder; +import android.os.IBinder; +import android.os.IInterface; +import android.os.RemoteException; + +import androidx.annotation.RequiresApi; + +import java.util.List; + +public interface IPackageManager extends IInterface { + + boolean isPackageAvailable(String packageName, int userId) throws RemoteException; + + boolean getApplicationHiddenSettingAsUser(String packageName, int userId) throws RemoteException; + + ApplicationInfo getApplicationInfo(String packageName, int flags, int userId) + throws RemoteException; + + @RequiresApi(33) + ApplicationInfo getApplicationInfo(String packageName, long flags, int userId) + throws RemoteException; + + PackageInfo getPackageInfo(String packageName, int flags, int userId) + throws RemoteException; + + @RequiresApi(33) + PackageInfo getPackageInfo(String packageName, long flags, int userId) + throws RemoteException; + + int getPackageUid(String packageName, int flags, int userId) throws RemoteException; + + @RequiresApi(33) + int getPackageUid(String packageName, long flags, int userId) throws RemoteException; + + String[] getPackagesForUid(int uid) + throws RemoteException; + + ParceledListSlice getInstalledPackages(int flags, int userId) + throws RemoteException; + + @RequiresApi(33) + ParceledListSlice getInstalledPackages(long flags, int userId) + throws RemoteException; + + ParceledListSlice getInstalledApplications(int flags, int userId) + throws RemoteException; + + @RequiresApi(33) + ParceledListSlice getInstalledApplications(long flags, int userId) + throws RemoteException; + + int getUidForSharedUser(String sharedUserName) + throws RemoteException; + + void grantRuntimePermission(String packageName, String permissionName, int userId) + throws RemoteException; + + void revokeRuntimePermission(String packageName, String permissionName, int userId) + throws RemoteException; + + int getPermissionFlags(String permissionName, String packageName, int userId) + throws RemoteException; + + void updatePermissionFlags(String permissionName, String packageName, int flagMask, int flagValues, int userId) + throws RemoteException; + + int checkPermission(String permName, String pkgName, int userId) + throws RemoteException; + + int checkUidPermission(String permName, int uid) + throws RemoteException; + + IPackageInstaller getPackageInstaller() throws RemoteException; + + int installExistingPackageAsUser(String packageName, int userId, int installFlags, + int installReason) throws RemoteException; + + @RequiresApi(29) + int installExistingPackageAsUser(String packageName, int userId, int installFlags, + int installReason, List whiteListedPermissions) throws RemoteException; + + ParceledListSlice queryIntentActivities(Intent intent, + String resolvedType, int flags, int userId) throws RemoteException; + + @RequiresApi(33) + ParceledListSlice queryIntentActivities(Intent intent, + String resolvedType, long flags, int userId) throws RemoteException; + + boolean performDexOptMode(String packageName, boolean checkProfiles, + String targetCompilerFilter, boolean force, boolean bootComplete, String splitName) + throws RemoteException; + + void clearApplicationProfileData(String packageName) throws RemoteException; + + abstract class Stub extends Binder implements IPackageManager { + + public static IPackageManager asInterface(IBinder obj) { + throw new UnsupportedOperationException(); + } + } +} diff --git a/hiddenapi/stubs/src/main/java/android/content/pm/PackageInfo.java b/hiddenapi/stubs/src/main/java/android/content/pm/PackageInfo.java new file mode 100644 index 000000000..f087c27c9 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/content/pm/PackageInfo.java @@ -0,0 +1,6 @@ +package android.content.pm; + +public class PackageInfo { + + public String overlayTarget; +} diff --git a/hiddenapi/stubs/src/main/java/android/content/pm/PackageInstaller.java b/hiddenapi/stubs/src/main/java/android/content/pm/PackageInstaller.java new file mode 100644 index 000000000..ab6b0de4d --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/content/pm/PackageInstaller.java @@ -0,0 +1,7 @@ +package android.content.pm; + +public class PackageInstaller { + public static class SessionParams { + public int installFlags = 0; + } +} diff --git a/hiddenapi/stubs/src/main/java/android/content/pm/PackageManager.java b/hiddenapi/stubs/src/main/java/android/content/pm/PackageManager.java new file mode 100644 index 000000000..3d7e3a087 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/content/pm/PackageManager.java @@ -0,0 +1,10 @@ +package android.content.pm; + +import java.util.List; + +public class PackageManager { + public List getInstalledPackagesAsUser(int flags, int userId) { + throw new UnsupportedOperationException("STUB"); + } + +} diff --git a/hiddenapi/stubs/src/main/java/android/content/pm/PackageParser.java b/hiddenapi/stubs/src/main/java/android/content/pm/PackageParser.java new file mode 100644 index 000000000..bbdeb54b1 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/content/pm/PackageParser.java @@ -0,0 +1,32 @@ +package android.content.pm; + +import java.io.File; + +public class PackageParser { + public static class PackageLite { + public final String packageName = null; + } + + public final static class Package { + public ApplicationInfo applicationInfo; + } + + /** Before SDK21 */ + public static PackageLite parsePackageLite(String packageFile, int flags) { + throw new UnsupportedOperationException("STUB"); + } + + /** Since SDK21 */ + public static PackageLite parsePackageLite(File packageFile, int flags) throws PackageParserException { + throw new UnsupportedOperationException("STUB"); + } + + public Package parsePackage(File packageFile, int flags, boolean useCaches) + throws PackageParserException { + throw new UnsupportedOperationException("STUB"); + } + + /** Since SDK21 */ + public static class PackageParserException extends Exception { + } +} diff --git a/hiddenapi/stubs/src/main/java/android/content/pm/ParceledListSlice.java b/hiddenapi/stubs/src/main/java/android/content/pm/ParceledListSlice.java new file mode 100644 index 000000000..6b98d7bde --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/content/pm/ParceledListSlice.java @@ -0,0 +1,10 @@ +package android.content.pm; + +import java.util.List; + +public class ParceledListSlice extends BaseParceledListSlice { + public ParceledListSlice(List list) { + throw new IllegalArgumentException("STUB"); + } + +} diff --git a/hiddenapi/stubs/src/main/java/android/content/pm/ResolveInfo.java b/hiddenapi/stubs/src/main/java/android/content/pm/ResolveInfo.java new file mode 100644 index 000000000..e00de1350 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/content/pm/ResolveInfo.java @@ -0,0 +1,4 @@ +package android.content.pm; + +public class ResolveInfo { +} diff --git a/hiddenapi/stubs/src/main/java/android/content/pm/UserInfo.java b/hiddenapi/stubs/src/main/java/android/content/pm/UserInfo.java new file mode 100644 index 000000000..2e73eec68 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/content/pm/UserInfo.java @@ -0,0 +1,6 @@ +package android.content.pm; + +public class UserInfo { + public int id; + public String name; +} diff --git a/hiddenapi/stubs/src/main/java/android/content/pm/VersionedPackage.java b/hiddenapi/stubs/src/main/java/android/content/pm/VersionedPackage.java new file mode 100644 index 000000000..0d1bf99db --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/content/pm/VersionedPackage.java @@ -0,0 +1,4 @@ +package android.content.pm; + +public class VersionedPackage { +} diff --git a/hiddenapi/stubs/src/main/java/android/content/res/AssetManager.java b/hiddenapi/stubs/src/main/java/android/content/res/AssetManager.java new file mode 100644 index 000000000..68caa70f2 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/content/res/AssetManager.java @@ -0,0 +1,18 @@ +package android.content.res; + +import java.io.IOException; +import java.io.InputStream; + +public final class AssetManager { + public final int addAssetPath(String path) { + throw new UnsupportedOperationException("STUB"); + } + + public void close() { + throw new UnsupportedOperationException("STUB"); + } + + public final InputStream open(String fileName) throws IOException { + throw new UnsupportedOperationException("STUB"); + } +} diff --git a/hiddenapi/stubs/src/main/java/android/content/res/CompatibilityInfo.java b/hiddenapi/stubs/src/main/java/android/content/res/CompatibilityInfo.java new file mode 100644 index 000000000..c63acedec --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/content/res/CompatibilityInfo.java @@ -0,0 +1,4 @@ +package android.content.res; + +public class CompatibilityInfo { +} diff --git a/hiddenapi/stubs/src/main/java/android/content/res/Configuration.java b/hiddenapi/stubs/src/main/java/android/content/res/Configuration.java new file mode 100644 index 000000000..80e4df10b --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/content/res/Configuration.java @@ -0,0 +1,4 @@ +package android.content.res; + +public class Configuration { +} diff --git a/hiddenapi/stubs/src/main/java/android/content/res/Resources.java b/hiddenapi/stubs/src/main/java/android/content/res/Resources.java new file mode 100644 index 000000000..cb5ba815a --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/content/res/Resources.java @@ -0,0 +1,21 @@ +package android.content.res; + +import android.util.DisplayMetrics; + +public class Resources { + public Resources(AssetManager assets, DisplayMetrics metrics, Configuration config) { + throw new UnsupportedOperationException("STUB"); + } + + public Resources(ClassLoader classLoader) { + throw new UnsupportedOperationException("STUB"); + } + + public void setImpl(ResourcesImpl impl) { + throw new UnsupportedOperationException("STUB"); + } + + public CompatibilityInfo getCompatibilityInfo() { + throw new UnsupportedOperationException("STUB"); + } +} diff --git a/hiddenapi/stubs/src/main/java/android/content/res/ResourcesImpl.java b/hiddenapi/stubs/src/main/java/android/content/res/ResourcesImpl.java new file mode 100644 index 000000000..3f29d11d9 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/content/res/ResourcesImpl.java @@ -0,0 +1,4 @@ +package android.content.res; + +public class ResourcesImpl { +} diff --git a/hiddenapi/stubs/src/main/java/android/content/res/ResourcesKey.java b/hiddenapi/stubs/src/main/java/android/content/res/ResourcesKey.java new file mode 100644 index 000000000..f82c90a39 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/content/res/ResourcesKey.java @@ -0,0 +1,4 @@ +package android.content.res; + +public class ResourcesKey { +} diff --git a/hiddenapi/stubs/src/main/java/android/content/res/TypedArray.java b/hiddenapi/stubs/src/main/java/android/content/res/TypedArray.java new file mode 100644 index 000000000..f067e0fbe --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/content/res/TypedArray.java @@ -0,0 +1,7 @@ +package android.content.res; + +public class TypedArray { + protected TypedArray(Resources resources) { + throw new UnsupportedOperationException("STUB"); + } +} diff --git a/hiddenapi/stubs/src/main/java/android/ddm/DdmHandleAppName.java b/hiddenapi/stubs/src/main/java/android/ddm/DdmHandleAppName.java new file mode 100644 index 000000000..1ed326b7a --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/ddm/DdmHandleAppName.java @@ -0,0 +1,7 @@ +package android.ddm; + +public class DdmHandleAppName { + public static void setAppName(String name, int userId) { + throw new RuntimeException("STUB"); + } +} diff --git a/hiddenapi/stubs/src/main/java/android/graphics/Movie.java b/hiddenapi/stubs/src/main/java/android/graphics/Movie.java new file mode 100644 index 000000000..22b2384d1 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/graphics/Movie.java @@ -0,0 +1,4 @@ +package android.graphics; + +public class Movie { +} diff --git a/hiddenapi/stubs/src/main/java/android/graphics/drawable/Drawable.java b/hiddenapi/stubs/src/main/java/android/graphics/drawable/Drawable.java new file mode 100644 index 000000000..789035d95 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/graphics/drawable/Drawable.java @@ -0,0 +1,4 @@ +package android.graphics.drawable; + +public class Drawable { +} diff --git a/hiddenapi/stubs/src/main/java/android/os/Binder.java b/hiddenapi/stubs/src/main/java/android/os/Binder.java new file mode 100644 index 000000000..967f0c5c0 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/os/Binder.java @@ -0,0 +1,62 @@ +package android.os; + +import android.annotation.NonNull; +import android.annotation.Nullable; + +import java.io.FileDescriptor; + +public class Binder implements IBinder { + + @Override + public boolean transact(int code, @NonNull Parcel data, Parcel reply, int flags) { + throw new RuntimeException("STUB"); + } + + @Override + public String getInterfaceDescriptor() { + throw new RuntimeException("STUB"); + } + + public boolean pingBinder() { + throw new RuntimeException("STUB"); + } + + @Override + public boolean isBinderAlive() { + throw new RuntimeException("STUB"); + } + + @Override + public IInterface queryLocalInterface(@NonNull String descriptor) { + throw new RuntimeException("STUB"); + } + + @Override + public void dump(@NonNull FileDescriptor fd, String[] args) { + throw new RuntimeException("STUB"); + } + + @Override + public void dumpAsync(@NonNull FileDescriptor fd, String[] args) { + throw new RuntimeException("STUB"); + } + + @Override + public void linkToDeath(@NonNull DeathRecipient recipient, int flags) { + throw new RuntimeException("STUB"); + } + + @Override + public boolean unlinkToDeath(@NonNull DeathRecipient recipient, int flags) { + throw new RuntimeException("STUB"); + } + + protected boolean onTransact(int code, @NonNull Parcel data, @Nullable Parcel reply, + int flags) throws RemoteException { + throw new RuntimeException("STUB"); + } + + public static IBinder allowBlocking(IBinder binder){ + throw new RuntimeException("STUB"); + } +} diff --git a/hiddenapi/stubs/src/main/java/android/os/Build.java b/hiddenapi/stubs/src/main/java/android/os/Build.java new file mode 100644 index 000000000..e0b70fc32 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/os/Build.java @@ -0,0 +1,15 @@ +package android.os; + +public class Build { + public static class VERSION { + public final static int SDK_INT = SystemProperties.getInt( + "ro.build.version.sdk", 0); + } + public static class VERSION_CODES { + public static final int O_MR1 = 27; + public static final int P = 28; + public static final int Q = 29; + public static final int R = 30; + public static final int S = 31; + } +} diff --git a/hiddenapi/stubs/src/main/java/android/os/Bundle.java b/hiddenapi/stubs/src/main/java/android/os/Bundle.java new file mode 100644 index 000000000..24323c6aa --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/os/Bundle.java @@ -0,0 +1,23 @@ +/* + * This file is part of LSPosed. + * + * LSPosed is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * LSPosed is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with LSPosed. If not, see . + * + * Copyright (C) 2021 LSPosed Contributors + */ + +package android.os; + +public class Bundle { +} diff --git a/hiddenapi/stubs/src/main/java/android/os/Environment.java b/hiddenapi/stubs/src/main/java/android/os/Environment.java new file mode 100644 index 000000000..f769f46d0 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/os/Environment.java @@ -0,0 +1,9 @@ +package android.os; + +import java.io.File; + +public class Environment { + public static File getDataProfilesDePackageDirectory(int userId, String packageName) { + throw new IllegalArgumentException("STUB"); + } +} diff --git a/hiddenapi/stubs/src/main/java/android/os/Handler.java b/hiddenapi/stubs/src/main/java/android/os/Handler.java new file mode 100644 index 000000000..dd6327221 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/os/Handler.java @@ -0,0 +1,4 @@ +package android.os; + +public class Handler { +} diff --git a/hiddenapi/stubs/src/main/java/android/os/IBinder.java b/hiddenapi/stubs/src/main/java/android/os/IBinder.java new file mode 100644 index 000000000..81ad36c9f --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/os/IBinder.java @@ -0,0 +1,33 @@ +package android.os; + +import android.annotation.NonNull; +import android.annotation.Nullable; + +import java.io.FileDescriptor; + +public interface IBinder { + + boolean transact(int code, @NonNull Parcel data, @Nullable Parcel reply, int flags); + + @Nullable + String getInterfaceDescriptor(); + + boolean pingBinder(); + + boolean isBinderAlive(); + + @Nullable + IInterface queryLocalInterface(@NonNull String descriptor); + + void dump(@NonNull FileDescriptor fd, @Nullable String[] args); + + void dumpAsync(@NonNull FileDescriptor fd, @Nullable String[] args); + + void linkToDeath(@NonNull DeathRecipient recipient, int flags); + + boolean unlinkToDeath(@NonNull DeathRecipient recipient, int flags); + + interface DeathRecipient { + void binderDied(); + } +} diff --git a/hiddenapi/stubs/src/main/java/android/os/IInterface.java b/hiddenapi/stubs/src/main/java/android/os/IInterface.java new file mode 100644 index 000000000..997e330fa --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/os/IInterface.java @@ -0,0 +1,6 @@ +package android.os; + +public interface IInterface { + + IBinder asBinder(); +} diff --git a/hiddenapi/stubs/src/main/java/android/os/IPowerManager.java b/hiddenapi/stubs/src/main/java/android/os/IPowerManager.java new file mode 100644 index 000000000..dd82db6db --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/os/IPowerManager.java @@ -0,0 +1,12 @@ +package android.os; + +public interface IPowerManager extends IInterface { + void reboot(boolean confirm, String reason, boolean wait) throws RemoteException; + + abstract class Stub extends Binder implements IPowerManager { + + public static IPowerManager asInterface(IBinder obj) { + throw new UnsupportedOperationException(); + } + } +} diff --git a/hiddenapi/stubs/src/main/java/android/os/IServiceCallback.java b/hiddenapi/stubs/src/main/java/android/os/IServiceCallback.java new file mode 100644 index 000000000..d35430249 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/os/IServiceCallback.java @@ -0,0 +1,13 @@ +package android.os; +public interface IServiceCallback extends IInterface +{ + public static abstract class Stub extends android.os.Binder implements android.os.IServiceCallback { + } + /** + * Called when a service is registered. + * + * @param name the service name that has been registered with + * @param binder the binder that is registered + */ + public void onRegistration(java.lang.String name, android.os.IBinder binder) throws android.os.RemoteException; +} diff --git a/hiddenapi/stubs/src/main/java/android/os/IServiceManager.java b/hiddenapi/stubs/src/main/java/android/os/IServiceManager.java new file mode 100644 index 000000000..7a1b19617 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/os/IServiceManager.java @@ -0,0 +1,16 @@ +package android.os; + +public interface IServiceManager extends IInterface { + + void tryUnregisterService(java.lang.String name, android.os.IBinder service); + + IBinder getService(String name); + + public void registerForNotifications(String name, IServiceCallback cb); + + abstract class Stub extends Binder implements IServiceManager { + public static IServiceManager asInterface(IBinder obj) { + throw new UnsupportedOperationException(); + } + } +} diff --git a/hiddenapi/stubs/src/main/java/android/os/IUserManager.java b/hiddenapi/stubs/src/main/java/android/os/IUserManager.java new file mode 100644 index 000000000..f2295d0b7 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/os/IUserManager.java @@ -0,0 +1,32 @@ +package android.os; + +import android.content.pm.UserInfo; + +import androidx.annotation.RequiresApi; + +import java.util.List; + +public interface IUserManager extends IInterface { + @RequiresApi(26) + boolean isUserUnlocked(int userId) + throws RemoteException; + + List getUsers(boolean excludeDying) + throws RemoteException; + + List getUsers(boolean excludePartial, boolean excludeDying, boolean excludePreCreated) + throws RemoteException; + + UserInfo getUserInfo(int userHandle) throws RemoteException; + + UserInfo getProfileParent(int userId) throws RemoteException; + + boolean isUserUnlockingOrUnlocked(int userId) throws RemoteException; + + abstract class Stub extends Binder implements IUserManager { + + public static IUserManager asInterface(IBinder obj) { + throw new RuntimeException("STUB"); + } + } +} diff --git a/hiddenapi/stubs/src/main/java/android/os/Parcel.java b/hiddenapi/stubs/src/main/java/android/os/Parcel.java new file mode 100644 index 000000000..f506a6387 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/os/Parcel.java @@ -0,0 +1,4 @@ +package android.os; + +public class Parcel { +} diff --git a/hiddenapi/stubs/src/main/java/android/os/Parcelable.java b/hiddenapi/stubs/src/main/java/android/os/Parcelable.java new file mode 100644 index 000000000..5c716ee51 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/os/Parcelable.java @@ -0,0 +1,10 @@ +package android.os; + +public interface Parcelable { + interface Creator{ + public T createFromParcel(Parcel source); + public T[] newArray(int size); + } + void writeToParcel(Parcel dest, int flags); + int describeContents(); +} diff --git a/hiddenapi/stubs/src/main/java/android/os/PersistableBundle.java b/hiddenapi/stubs/src/main/java/android/os/PersistableBundle.java new file mode 100644 index 000000000..e06f6f0ce --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/os/PersistableBundle.java @@ -0,0 +1,4 @@ +package android.os; + +public class PersistableBundle { +} diff --git a/hiddenapi/stubs/src/main/java/android/os/RemoteException.java b/hiddenapi/stubs/src/main/java/android/os/RemoteException.java new file mode 100644 index 000000000..9b24d72b1 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/os/RemoteException.java @@ -0,0 +1,8 @@ +package android.os; + +public class RemoteException extends Exception { + + public RemoteException(String message) { + throw new RuntimeException("STUB"); + } +} diff --git a/hiddenapi/stubs/src/main/java/android/os/ResultReceiver.java b/hiddenapi/stubs/src/main/java/android/os/ResultReceiver.java new file mode 100644 index 000000000..358ae780f --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/os/ResultReceiver.java @@ -0,0 +1,4 @@ +package android.os; + +public class ResultReceiver { +} diff --git a/hiddenapi/stubs/src/main/java/android/os/SELinux.java b/hiddenapi/stubs/src/main/java/android/os/SELinux.java new file mode 100644 index 000000000..991a84fe0 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/os/SELinux.java @@ -0,0 +1,15 @@ +package android.os; + +public class SELinux { + public static boolean checkSELinuxAccess(String scon, String tcon, String tclass, String perm) { + throw new UnsupportedOperationException("Stub"); + } + + public static boolean setFileContext(String path, String context) { + throw new UnsupportedOperationException("Stub"); + } + + public static boolean setFSCreateContext(String context){ + throw new UnsupportedOperationException("Stub"); + } +} diff --git a/hiddenapi/stubs/src/main/java/android/os/ServiceManager.java b/hiddenapi/stubs/src/main/java/android/os/ServiceManager.java new file mode 100644 index 000000000..bf1a9f21a --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/os/ServiceManager.java @@ -0,0 +1,28 @@ +package android.os; + +import android.annotation.Nullable; + +public class ServiceManager { + + /** + * Returns a reference to a service with the given name. + * + * @param name the name of the service to get + * @return a reference to the service, or null if the service doesn't exist + */ + @Nullable + public static IBinder getService(String name) { + throw new RuntimeException("STUB"); + } + + /** + * Place a new @a service called @a name into the service + * manager. + * + * @param name the name of the new service + * @param service the service object + */ + public static void addService(String name, IBinder service) { + throw new RuntimeException("STUB"); + } +} diff --git a/hiddenapi/stubs/src/main/java/android/os/ShellCallback.java b/hiddenapi/stubs/src/main/java/android/os/ShellCallback.java new file mode 100644 index 000000000..fe342213a --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/os/ShellCallback.java @@ -0,0 +1,25 @@ +package android.os; + +public class ShellCallback implements Parcelable { + public static final Parcelable.Creator CREATOR = new Creator() { + @Override + public ShellCallback createFromParcel(Parcel source) { + throw new IllegalArgumentException("STUB"); + } + + @Override + public ShellCallback[] newArray(int size) { + throw new IllegalArgumentException("STUB"); + } + }; + + @Override + public void writeToParcel(Parcel dest, int flags) { + throw new IllegalArgumentException("STUB"); + } + + @Override + public int describeContents() { + throw new IllegalArgumentException("STUB"); + } +} diff --git a/hiddenapi/stubs/src/main/java/android/os/ShellCommand.java b/hiddenapi/stubs/src/main/java/android/os/ShellCommand.java new file mode 100644 index 000000000..56dac90c2 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/os/ShellCommand.java @@ -0,0 +1,33 @@ +package android.os; + +import java.io.FileDescriptor; +import java.io.InputStream; +import java.io.PrintWriter; + +public abstract class ShellCommand { + public int exec(Binder target, FileDescriptor in, FileDescriptor out, FileDescriptor err, + String[] args, ShellCallback callback, ResultReceiver resultReceiver) { + throw new IllegalArgumentException("STUB!"); + } + + public abstract int onCommand(String cmd); + public abstract void onHelp(); + + public String getNextOption(){ + throw new IllegalArgumentException("STUB!"); + } + + public String getNextArgRequired() { + throw new IllegalArgumentException("STUB!"); + } + + public PrintWriter getErrPrintWriter() { + throw new IllegalArgumentException("STUB!"); + } + public PrintWriter getOutPrintWriter() { + throw new IllegalArgumentException("STUB!"); + } + public InputStream getRawInputStream() { + throw new IllegalArgumentException("STUB!"); + } +} diff --git a/hiddenapi/stubs/src/main/java/android/os/SystemProperties.java b/hiddenapi/stubs/src/main/java/android/os/SystemProperties.java new file mode 100644 index 000000000..240fa36cd --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/os/SystemProperties.java @@ -0,0 +1,26 @@ +package android.os; + +import android.annotation.NonNull; +import android.annotation.Nullable; + +public class SystemProperties { + public static String get(@NonNull String key) { + throw new UnsupportedOperationException("Stub"); + } + + public static String get(@NonNull String key, @Nullable String def) { + throw new UnsupportedOperationException("Stub"); + } + + public static void set(@NonNull String key, @Nullable String val) { + throw new UnsupportedOperationException("Stub"); + } + + public static boolean getBoolean(@NonNull String key, boolean def) { + throw new UnsupportedOperationException("Stub"); + } + + public static int getInt(@NonNull String key, int def) { + throw new UnsupportedOperationException("Stub"); + } +} diff --git a/hiddenapi/stubs/src/main/java/android/os/UserHandle.java b/hiddenapi/stubs/src/main/java/android/os/UserHandle.java new file mode 100644 index 000000000..310fe2463 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/os/UserHandle.java @@ -0,0 +1,17 @@ +package android.os; + +import android.annotation.NonNull; + +public class UserHandle { + + public UserHandle(int h) { + throw new RuntimeException("STUB"); + } + + public int getIdentifier() { + throw new RuntimeException("STUB"); + } + + public static final @NonNull + UserHandle ALL = null; +} diff --git a/hiddenapi/stubs/src/main/java/android/os/UserManager.java b/hiddenapi/stubs/src/main/java/android/os/UserManager.java new file mode 100644 index 000000000..1dda5b631 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/os/UserManager.java @@ -0,0 +1,11 @@ +package android.os; + +import android.content.pm.UserInfo; + +import java.util.List; + +public class UserManager { + public List getUsers() { + throw new UnsupportedOperationException("STUB"); + } +} diff --git a/hiddenapi/stubs/src/main/java/android/permission/IPermissionManager.java b/hiddenapi/stubs/src/main/java/android/permission/IPermissionManager.java new file mode 100644 index 000000000..595f4756e --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/permission/IPermissionManager.java @@ -0,0 +1,8 @@ +package android.permission; + +import java.util.List; + +public interface IPermissionManager { + + List getSplitPermissions(); +} diff --git a/hiddenapi/stubs/src/main/java/android/system/ErrnoException.java b/hiddenapi/stubs/src/main/java/android/system/ErrnoException.java new file mode 100644 index 000000000..014857bc0 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/system/ErrnoException.java @@ -0,0 +1,5 @@ +package android.system; + +public final class ErrnoException extends Exception { + +} diff --git a/hiddenapi/stubs/src/main/java/android/system/Int32Ref.java b/hiddenapi/stubs/src/main/java/android/system/Int32Ref.java new file mode 100644 index 000000000..e44e01b07 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/system/Int32Ref.java @@ -0,0 +1,15 @@ +package android.system; + +import java.util.Objects; + +public class Int32Ref { + public int value; + + public Int32Ref(int value) { + this.value = value; + } + + @Override public String toString() { + return Objects.toString(this); + } +} diff --git a/hiddenapi/stubs/src/main/java/android/system/Os.java b/hiddenapi/stubs/src/main/java/android/system/Os.java new file mode 100644 index 000000000..04f0ec2b5 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/system/Os.java @@ -0,0 +1,23 @@ +package android.system; + +import android.util.MutableInt; + +import androidx.annotation.RequiresApi; + +import java.io.FileDescriptor; + +public class Os { + public static int ioctlInt(FileDescriptor fd, int cmd, MutableInt arg) throws ErrnoException { + throw new ErrnoException(); + } + + @RequiresApi(27) + public static int ioctlInt(FileDescriptor fd, int cmd, Int32Ref arg) throws ErrnoException { + throw new ErrnoException(); + } + + @RequiresApi(31) + public static int ioctlInt(FileDescriptor fd, int cmd) throws ErrnoException { + throw new ErrnoException(); + } +} diff --git a/hiddenapi/stubs/src/main/java/android/util/DisplayMetrics.java b/hiddenapi/stubs/src/main/java/android/util/DisplayMetrics.java new file mode 100644 index 000000000..35c44ff06 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/util/DisplayMetrics.java @@ -0,0 +1,4 @@ +package android.util; + +public class DisplayMetrics { +} diff --git a/hiddenapi/stubs/src/main/java/android/util/MutableInt.java b/hiddenapi/stubs/src/main/java/android/util/MutableInt.java new file mode 100644 index 000000000..177f52ee3 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/util/MutableInt.java @@ -0,0 +1,9 @@ +package android.util; + +public final class MutableInt { + public int value; + + public MutableInt(int value) { + this.value = value; + } +} diff --git a/hiddenapi/stubs/src/main/java/android/util/TypedValue.java b/hiddenapi/stubs/src/main/java/android/util/TypedValue.java new file mode 100644 index 000000000..dd6c9a34f --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/util/TypedValue.java @@ -0,0 +1,4 @@ +package android.util; + +public class TypedValue { +} diff --git a/hiddenapi/stubs/src/main/java/android/view/IWindowManager.java b/hiddenapi/stubs/src/main/java/android/view/IWindowManager.java new file mode 100644 index 000000000..9ad26bc18 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/view/IWindowManager.java @@ -0,0 +1,17 @@ +package android.view; + +import android.app.IActivityManager; +import android.os.Binder; +import android.os.Bundle; +import android.os.IBinder; +import android.os.IInterface; + +public interface IWindowManager extends IInterface { + void lockNow(Bundle options); + + abstract class Stub extends Binder implements IWindowManager { + public static IWindowManager asInterface(IBinder obj) { + throw new UnsupportedOperationException(); + } + } +} diff --git a/hiddenapi/stubs/src/main/java/android/webkit/WebViewDelegate.java b/hiddenapi/stubs/src/main/java/android/webkit/WebViewDelegate.java new file mode 100644 index 000000000..3ad7cd29a --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/webkit/WebViewDelegate.java @@ -0,0 +1,4 @@ +package android.webkit; + +public class WebViewDelegate { +} diff --git a/hiddenapi/stubs/src/main/java/android/webkit/WebViewFactory.java b/hiddenapi/stubs/src/main/java/android/webkit/WebViewFactory.java new file mode 100644 index 000000000..e266da667 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/webkit/WebViewFactory.java @@ -0,0 +1,4 @@ +package android.webkit; + +public class WebViewFactory { +} diff --git a/hiddenapi/stubs/src/main/java/android/webkit/WebViewFactoryProvider.java b/hiddenapi/stubs/src/main/java/android/webkit/WebViewFactoryProvider.java new file mode 100644 index 000000000..43b5fd5e3 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/android/webkit/WebViewFactoryProvider.java @@ -0,0 +1,4 @@ +package android.webkit; + +public class WebViewFactoryProvider { +} diff --git a/hiddenapi/stubs/src/main/java/androidx/annotation/IntRange.java b/hiddenapi/stubs/src/main/java/androidx/annotation/IntRange.java new file mode 100644 index 000000000..80691fd3c --- /dev/null +++ b/hiddenapi/stubs/src/main/java/androidx/annotation/IntRange.java @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package androidx.annotation; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.ANNOTATION_TYPE; +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.LOCAL_VARIABLE; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.RetentionPolicy.CLASS; + +/** + * Denotes that the annotated element should be an int or long in the given range + *

+ * Example: + *


+ *  @IntRange(from=0,to=255)
+ *  public int getAlpha() {
+ *      ...
+ *  }
+ * 
+ */ +@Retention(CLASS) +@Target({METHOD, PARAMETER, FIELD, LOCAL_VARIABLE, ANNOTATION_TYPE}) +public @interface IntRange { + /** + * Smallest value, inclusive + */ + long from() default Long.MIN_VALUE; + + /** + * Largest value, inclusive + */ + long to() default Long.MAX_VALUE; +} \ No newline at end of file diff --git a/hiddenapi/stubs/src/main/java/androidx/annotation/RequiresApi.java b/hiddenapi/stubs/src/main/java/androidx/annotation/RequiresApi.java new file mode 100644 index 000000000..cb1d4624e --- /dev/null +++ b/hiddenapi/stubs/src/main/java/androidx/annotation/RequiresApi.java @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package androidx.annotation; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.CONSTRUCTOR; +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.SOURCE; + +/** + * Denotes that the annotated element should only be called on the given API level + * or higher. + *

+ * This is similar in purpose to the older {@code @TargetApi} annotation, but more + * clearly expresses that this is a requirement on the caller, rather than being + * used to "suppress" warnings within the method that exceed the {@code minSdkVersion}. + */ +@Retention(SOURCE) +@Target({TYPE, METHOD, CONSTRUCTOR, FIELD}) +public @interface RequiresApi { + + /** + * The API level to require. Alias for {@link #api} which allows you to leave out the + * {@code api=} part. + */ + @IntRange(from = 1) + int value() default 1; + + /** + * The API level to require + */ + @IntRange(from = 1) + int api() default 1; +} \ No newline at end of file diff --git a/hiddenapi/stubs/src/main/java/com/android/internal/os/BinderInternal.java b/hiddenapi/stubs/src/main/java/com/android/internal/os/BinderInternal.java new file mode 100644 index 000000000..728c2ab58 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/com/android/internal/os/BinderInternal.java @@ -0,0 +1,7 @@ +package com.android.internal.os; + +import android.os.IBinder; + +public class BinderInternal { + public static final native IBinder getContextObject(); +} diff --git a/hiddenapi/stubs/src/main/java/com/android/internal/os/ZygoteInit.java b/hiddenapi/stubs/src/main/java/com/android/internal/os/ZygoteInit.java new file mode 100644 index 000000000..243b350a5 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/com/android/internal/os/ZygoteInit.java @@ -0,0 +1,4 @@ +package com.android.internal.os; + +public class ZygoteInit { +} diff --git a/hiddenapi/stubs/src/main/java/com/android/internal/util/XmlUtils.java b/hiddenapi/stubs/src/main/java/com/android/internal/util/XmlUtils.java new file mode 100644 index 000000000..3e35527e6 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/com/android/internal/util/XmlUtils.java @@ -0,0 +1,14 @@ +package com.android.internal.util; + +import org.xmlpull.v1.XmlPullParserException; + +import java.io.IOException; +import java.io.InputStream; +import java.util.HashMap; + +public class XmlUtils { + @SuppressWarnings("rawtypes") + public static final HashMap readMapXml(InputStream in) throws XmlPullParserException, IOException { + throw new UnsupportedOperationException("STUB"); + } +} diff --git a/hiddenapi/stubs/src/main/java/com/android/server/LocalServices.java b/hiddenapi/stubs/src/main/java/com/android/server/LocalServices.java new file mode 100644 index 000000000..06717abf4 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/com/android/server/LocalServices.java @@ -0,0 +1,8 @@ +package com.android.server; + +public class LocalServices { + + public static T getService(Class type) { + throw new UnsupportedOperationException("STUB"); + } +} diff --git a/hiddenapi/stubs/src/main/java/com/android/server/SystemService.java b/hiddenapi/stubs/src/main/java/com/android/server/SystemService.java new file mode 100644 index 000000000..2f678e8a2 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/com/android/server/SystemService.java @@ -0,0 +1,4 @@ +package com.android.server; + +public abstract class SystemService { +} diff --git a/hiddenapi/stubs/src/main/java/com/android/server/SystemServiceManager.java b/hiddenapi/stubs/src/main/java/com/android/server/SystemServiceManager.java new file mode 100644 index 000000000..d9e2a920e --- /dev/null +++ b/hiddenapi/stubs/src/main/java/com/android/server/SystemServiceManager.java @@ -0,0 +1,7 @@ +package com.android.server; + +import java.util.ArrayList; + +public class SystemServiceManager { + private final ArrayList mServices = new ArrayList<>(); +} diff --git a/hiddenapi/stubs/src/main/java/com/android/server/am/ActivityManagerService.java b/hiddenapi/stubs/src/main/java/com/android/server/am/ActivityManagerService.java new file mode 100644 index 000000000..2d51101f2 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/com/android/server/am/ActivityManagerService.java @@ -0,0 +1,14 @@ +package com.android.server.am; + +import com.android.server.SystemService; + +public class ActivityManagerService { + public static final class Lifecycle extends SystemService { + public ActivityManagerService getService() { + throw new UnsupportedOperationException("STUB"); + } + private ProcessRecord findProcessLocked(String process, int userId, String callName) { + throw new UnsupportedOperationException("STUB"); + } + } +} diff --git a/hiddenapi/stubs/src/main/java/com/android/server/am/ProcessRecord.java b/hiddenapi/stubs/src/main/java/com/android/server/am/ProcessRecord.java new file mode 100644 index 000000000..8947ce02f --- /dev/null +++ b/hiddenapi/stubs/src/main/java/com/android/server/am/ProcessRecord.java @@ -0,0 +1,5 @@ +package com.android.server.am; + +public class ProcessRecord { + String processName = null; +} diff --git a/hiddenapi/stubs/src/main/java/dalvik/system/BaseDexClassLoader.java b/hiddenapi/stubs/src/main/java/dalvik/system/BaseDexClassLoader.java new file mode 100644 index 000000000..4979dc44f --- /dev/null +++ b/hiddenapi/stubs/src/main/java/dalvik/system/BaseDexClassLoader.java @@ -0,0 +1,17 @@ +package dalvik.system; + +import java.nio.ByteBuffer; + +public class BaseDexClassLoader extends ClassLoader { + public BaseDexClassLoader(ByteBuffer[] dexFiles, ClassLoader parent) { + throw new RuntimeException("Stub!"); + } + + public BaseDexClassLoader(ByteBuffer[] dexFiles, String librarySearchPath, ClassLoader parent) { + throw new RuntimeException("Stub!"); + } + + public String getLdLibraryPath() { + throw new RuntimeException("Stub!"); + } +} diff --git a/hiddenapi/stubs/src/main/java/dalvik/system/VMRuntime.java b/hiddenapi/stubs/src/main/java/dalvik/system/VMRuntime.java new file mode 100644 index 000000000..692b45694 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/dalvik/system/VMRuntime.java @@ -0,0 +1,15 @@ +package dalvik.system; + +public class VMRuntime { + + public static VMRuntime getRuntime() { + throw new RuntimeException("Stub!"); + } + + // Use `Process.is64Bit()` instead + public native boolean is64Bit(); + + public native String vmInstructionSet(); + + public native boolean isJavaDebuggable(); +} diff --git a/hiddenapi/stubs/src/main/java/org/xmlpull/v1/XmlPullParserException.java b/hiddenapi/stubs/src/main/java/org/xmlpull/v1/XmlPullParserException.java new file mode 100644 index 000000000..220847ba0 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/org/xmlpull/v1/XmlPullParserException.java @@ -0,0 +1,4 @@ +package org.xmlpull.v1; + +public class XmlPullParserException extends Throwable { +} diff --git a/hiddenapi/stubs/src/main/java/sun/misc/CompoundEnumeration.java b/hiddenapi/stubs/src/main/java/sun/misc/CompoundEnumeration.java new file mode 100644 index 000000000..26eeedc10 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/sun/misc/CompoundEnumeration.java @@ -0,0 +1,34 @@ +package sun.misc; + +import java.util.Enumeration; +import java.util.NoSuchElementException; + +public class CompoundEnumeration implements Enumeration { + private final Enumeration[] enums; + private int index = 0; + + public CompoundEnumeration(Enumeration[] enums) { + this.enums = enums; + } + + private boolean next() { + while (index < enums.length) { + if (enums[index] != null && enums[index].hasMoreElements()) { + return true; + } + index++; + } + return false; + } + + public boolean hasMoreElements() { + return next(); + } + + public E nextElement() { + if (!next()) { + throw new NoSuchElementException(); + } + return enums[index].nextElement(); + } +} diff --git a/hiddenapi/stubs/src/main/java/sun/net/www/ParseUtil.java b/hiddenapi/stubs/src/main/java/sun/net/www/ParseUtil.java new file mode 100644 index 000000000..a3755eeca --- /dev/null +++ b/hiddenapi/stubs/src/main/java/sun/net/www/ParseUtil.java @@ -0,0 +1,7 @@ +package sun.net.www; + +public class ParseUtil { + public static String encodePath(String path, boolean flag) { + throw new RuntimeException("Stub!"); + } +} diff --git a/hiddenapi/stubs/src/main/java/sun/net/www/protocol/jar/Handler.java b/hiddenapi/stubs/src/main/java/sun/net/www/protocol/jar/Handler.java new file mode 100644 index 000000000..838a47e55 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/sun/net/www/protocol/jar/Handler.java @@ -0,0 +1,4 @@ +package sun.net.www.protocol.jar; + +public abstract class Handler extends java.net.URLStreamHandler { +} diff --git a/hiddenapi/stubs/src/main/java/xposed/dummy/XResourcesSuperClass.java b/hiddenapi/stubs/src/main/java/xposed/dummy/XResourcesSuperClass.java new file mode 100644 index 000000000..16f38f301 --- /dev/null +++ b/hiddenapi/stubs/src/main/java/xposed/dummy/XResourcesSuperClass.java @@ -0,0 +1,24 @@ +package xposed.dummy; + +import android.content.res.Resources; + +/** + * This class is used as super class of XResources. + * + * This implementation isn't included in the .dex file. Instead, it's created on the device. + * Usually, it will extend Resources, but some ROMs use their own Resources subclass. + * In that case, XResourcesSuperClass will extend the ROM's subclass in an attempt to increase + * compatibility. + */ +public class XResourcesSuperClass extends Resources { + /** Dummy, will never be called (objects are transferred to this class only). */ + protected XResourcesSuperClass() { + super(null, null, null); + throw new UnsupportedOperationException(); + } + + protected XResourcesSuperClass(ClassLoader classLoader) { + super(classLoader); + throw new UnsupportedOperationException(); + } +} diff --git a/hiddenapi/stubs/src/main/java/xposed/dummy/XTypedArraySuperClass.java b/hiddenapi/stubs/src/main/java/xposed/dummy/XTypedArraySuperClass.java new file mode 100644 index 000000000..cefd760bd --- /dev/null +++ b/hiddenapi/stubs/src/main/java/xposed/dummy/XTypedArraySuperClass.java @@ -0,0 +1,20 @@ +package xposed.dummy; + +import android.content.res.Resources; +import android.content.res.TypedArray; + +/** + * This class is used as super class of XResources.XTypedArray. + * + * This implementation isn't included in the .dex file. Instead, it's created on the device. + * Usually, it will extend TypedArray, but some ROMs use their own TypedArray subclass. + * In that case, XTypedArraySuperClass will extend the ROM's subclass in an attempt to increase + * compatibility. + */ +public class XTypedArraySuperClass extends TypedArray { + /** Dummy, will never be called (objects are transferred to this class only). */ + protected XTypedArraySuperClass(Resources resources) { + super(resources); + throw new UnsupportedOperationException(); + } +} diff --git a/settings.gradle b/settings.gradle index e7b4def49..2ce1c6d20 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1,2 @@ include ':app' +include ':hiddenapi:stubs' From 9688ce98b6d8081d245d5ca148e8bf8cd4661067 Mon Sep 17 00:00:00 2001 From: Ximin Luo Date: Tue, 29 Aug 2023 13:52:24 +0100 Subject: [PATCH 2/7] Properly clear the label cache when changing isMultiUser setting --- app/src/main/java/dev/ukanth/ufirewall/Api.java | 4 ++-- .../ukanth/ufirewall/preferences/ExpPreferenceFragment.java | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/dev/ukanth/ufirewall/Api.java b/app/src/main/java/dev/ukanth/ufirewall/Api.java index 811fb228d..17beee798 100644 --- a/app/src/main/java/dev/ukanth/ufirewall/Api.java +++ b/app/src/main/java/dev/ukanth/ufirewall/Api.java @@ -171,6 +171,7 @@ public final class Api { public static final int NOTIFICATION_ID = 1; public static final String PREF_FIREWALL_STATUS = "AFWallStatus"; public static final String DEFAULT_PREFS_NAME = "AFWallPrefs"; + public static final String CACHE_PREFS_NAME = "AFWallCache"; //for import/export rules //revertback to old approach for performance public static final String PREF_3G_PKG_UIDS = "AllowedPKG3G_UIDS"; @@ -1837,8 +1838,7 @@ public static List getApps(Context ctx, GetAppList appList) { } //revert back to old approach - //always use the defaul preferences to store cache value - reduces the application usage size - SharedPreferences cachePrefs = ctx.getSharedPreferences(DEFAULT_PREFS_NAME, Context.MODE_PRIVATE); + SharedPreferences cachePrefs = ctx.getSharedPreferences(CACHE_PREFS_NAME, Context.MODE_PRIVATE); int count = 0; try { diff --git a/app/src/main/java/dev/ukanth/ufirewall/preferences/ExpPreferenceFragment.java b/app/src/main/java/dev/ukanth/ufirewall/preferences/ExpPreferenceFragment.java index f7e7e1706..84ef288fc 100644 --- a/app/src/main/java/dev/ukanth/ufirewall/preferences/ExpPreferenceFragment.java +++ b/app/src/main/java/dev/ukanth/ufirewall/preferences/ExpPreferenceFragment.java @@ -7,6 +7,7 @@ import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; +import android.content.SharedPreferences.Editor; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; @@ -149,6 +150,11 @@ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, } else { Api.setUserOwner(this.getActivity().getApplicationContext()); } + final Context ctx = getActivity().getApplicationContext(); + SharedPreferences cachePrefs = ctx.getSharedPreferences(Api.CACHE_PREFS_NAME, Context.MODE_PRIVATE); + Editor edit = cachePrefs.edit(); + edit.clear(); + edit.apply(); } } From 328c8d865f7584f10621975807e17db3598e4d30 Mon Sep 17 00:00:00 2001 From: Ximin Luo Date: Mon, 4 Sep 2023 13:40:09 +0100 Subject: [PATCH 3/7] Don't check for hidden apps, since it is pointless and needs MANAGE_USERS --- .../main/java/dev/ukanth/ufirewall/MultiUser.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/dev/ukanth/ufirewall/MultiUser.java b/app/src/main/java/dev/ukanth/ufirewall/MultiUser.java index 2df7cc97f..46837edb1 100644 --- a/app/src/main/java/dev/ukanth/ufirewall/MultiUser.java +++ b/app/src/main/java/dev/ukanth/ufirewall/MultiUser.java @@ -107,7 +107,18 @@ private static IPackageManager getPackageManager() { // Copied from LSPosed daemon/**/PackageService.java public static boolean isPackageAvailable(String packageName, int userId, boolean ignoreHidden) throws RemoteException { - return pm.isPackageAvailable(packageName, userId) || (ignoreHidden && pm.getApplicationHiddenSettingAsUser(packageName, userId)); + // Unlike LSPosed, we do not check getApplicationHiddenSettingAsUser + // because this requires MANAGE_USERS permission (on some versions of + // Android) which we cannot get, as explained above. + // + // Normally, it would return whether the user manually hid their app in + // their list of apps. This is used by the system home app to hide the + // app in the home screen only - but the app still shows up in the + // system "all apps" settings. Likewise, hiding these apps within + // AFWall seems a bit pointless. It is unclear why LSPosed themselves + // do it. Their original PR is here: + // https://github.com/LSPosed/LSPosed/pull/852 + return pm.isPackageAvailable(packageName, userId); // || (ignoreHidden && pm.getApplicationHiddenSettingAsUser(packageName, userId)); } public static int packageUserId(PackageInfo info) { From 9ad74b368de9e35cea820e1cb6e56f9aecd702e7 Mon Sep 17 00:00:00 2001 From: Ximin Luo Date: Mon, 4 Sep 2023 13:49:06 +0100 Subject: [PATCH 4/7] filter: fix uniqueness logic --- app/src/main/java/dev/ukanth/ufirewall/MainActivity.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/dev/ukanth/ufirewall/MainActivity.java b/app/src/main/java/dev/ukanth/ufirewall/MainActivity.java index 60ceedd4e..bc97db345 100644 --- a/app/src/main/java/dev/ukanth/ufirewall/MainActivity.java +++ b/app/src/main/java/dev/ukanth/ufirewall/MainActivity.java @@ -1017,8 +1017,11 @@ private void showApplications(final String searchStr) { for (PackageInfoData app : apps) { for (String str : app.names) { if (str != null && searchStr != null) { + if (unique.contains(app.uid)) { + continue; + } if (str.contains(searchStr.toLowerCase()) || str.toLowerCase().contains(searchStr.toLowerCase()) - && !searchApp.contains(app) || (G.showUid() && (str + " " + app.uid).contains(searchStr) && !unique.contains(app.uid))) { + && !searchApp.contains(app) || (G.showUid() && (str + " " + app.uid).contains(searchStr))) { searchApp.add(app); unique.add(app.uid); isResultsFound = true; From 5cd56c96a501e7658bdb57fbfd624e1bc5d33ef3 Mon Sep 17 00:00:00 2001 From: Ximin Luo Date: Wed, 17 Apr 2024 17:35:59 +0100 Subject: [PATCH 5/7] Make import-export work for multi-user too --- .../main/java/dev/ukanth/ufirewall/Api.java | 58 +++++++++++++++---- 1 file changed, 47 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/dev/ukanth/ufirewall/Api.java b/app/src/main/java/dev/ukanth/ufirewall/Api.java index 17beee798..054be7ca7 100644 --- a/app/src/main/java/dev/ukanth/ufirewall/Api.java +++ b/app/src/main/java/dev/ukanth/ufirewall/Api.java @@ -3161,13 +3161,20 @@ private static Map getCurrentRulesAsMap(Context ctx) { try { for (PackageInfoData app : apps) { - updateExportPackage(exportMap, app.pkgName, app.selected_wifi, WIFI_EXPORT); - updateExportPackage(exportMap, app.pkgName, app.selected_3g, DATA_EXPORT); - updateExportPackage(exportMap, app.pkgName, app.selected_roam, ROAM_EXPORT); - updateExportPackage(exportMap, app.pkgName, app.selected_vpn, VPN_EXPORT); - updateExportPackage(exportMap, app.pkgName, app.selected_tether, TETHER_EXPORT); - updateExportPackage(exportMap, app.pkgName, app.selected_lan, LAN_EXPORT); - updateExportPackage(exportMap, app.pkgName, app.selected_tor, TOR_EXPORT); + String packageName = app.pkgName; + if (G.isMultiUser()) { + int user_id = MultiUser.applicationUserId(app.appinfo); + if (user_id > 0) { + packageName = packageName + "/" + String.valueOf(user_id); + } + } + updateExportPackage(exportMap, packageName, app.selected_wifi, WIFI_EXPORT); + updateExportPackage(exportMap, packageName, app.selected_3g, DATA_EXPORT); + updateExportPackage(exportMap, packageName, app.selected_roam, ROAM_EXPORT); + updateExportPackage(exportMap, packageName, app.selected_vpn, VPN_EXPORT); + updateExportPackage(exportMap, packageName, app.selected_tether, TETHER_EXPORT); + updateExportPackage(exportMap, packageName, app.selected_lan, LAN_EXPORT); + updateExportPackage(exportMap, packageName, app.selected_tor, TOR_EXPORT); } } catch (JSONException e) { Log.e(TAG, e.getLocalizedMessage()); @@ -3417,10 +3424,19 @@ private static void updateRulesFromJson(Context ctx, JSONObject object, String p uidBuilders[TOR_EXPORT] = new StringBuilder(); Map json = JsonHelper.toMap(object); + Map muPackages = null; final PackageManager pm = ctx.getPackageManager(); for (Map.Entry entry : json.entrySet()) { String pkgName = entry.getKey(); + int user_id = 0; + if (G.isMultiUser()) { + if (pkgName.contains("/")) { + String[] parts = pkgName.split("/"); + pkgName = parts[0]; + user_id = Integer.parseInt(parts[1]); + } + } if (pkgName.contains(":")) { pkgName = pkgName.split(":")[0]; } @@ -3439,10 +3455,30 @@ private static void updateRulesFromJson(Context ctx, JSONObject object, String p if (pkgName.startsWith("dev.afwall.special")) { uidBuilder.append(specialApps.get(pkgName)); } else { - try { - uidBuilder.append(pm.getApplicationInfo(pkgName, 0).uid); - } catch (NameNotFoundException e) { - // Handle exception if needed + if (user_id > 0) { + if (muPackages == null) { + // build cache of all installed packages + muPackages = new HashMap(); + List apps = getApps(ctx, null); + for (PackageInfoData pkginfo : apps) { + int user_id_ = MultiUser.applicationUserId(pkginfo.appinfo); + if (user_id_ > 0) { + muPackages.put(pkginfo.pkgName + "/" + String.valueOf(user_id_), pkginfo); + } + } + } + PackageInfoData pkginfo = muPackages.get(pkgName + "/" + String.valueOf(user_id)); + if (pkginfo != null) { + uidBuilder.append(pkginfo.uid); + } else { + // Handle not found if needed + } + } else { + try { + uidBuilder.append(pm.getApplicationInfo(pkgName, 0).uid); + } catch (NameNotFoundException e) { + // Handle exception if needed + } } } } From 8a0d1c42104bc023c63ec78d131df72ec08c92ac Mon Sep 17 00:00:00 2001 From: Ximin Luo Date: Tue, 29 Aug 2023 20:35:36 +0100 Subject: [PATCH 6/7] OPTIONAL: Delete unnecessary hiddenapi files --- .../java/android/app/ActivityManager.java | 9 -- .../main/java/android/app/ActivityThread.java | 54 ------- .../main/java/android/app/Application.java | 4 - .../android/app/ContentProviderHolder.java | 7 - .../main/java/android/app/ContextImpl.java | 6 - .../java/android/app/IActivityController.java | 66 --------- .../java/android/app/IActivityManager.java | 138 ------------------ .../java/android/app/IApplicationThread.java | 32 ---- .../android/app/INotificationManager.java | 34 ----- .../java/android/app/IServiceConnection.java | 22 --- .../main/java/android/app/IUidObserver.java | 17 --- .../src/main/java/android/app/LoadedApk.java | 23 --- .../main/java/android/app/Notification.java | 4 - .../java/android/app/NotificationChannel.java | 4 - .../main/java/android/app/ProfilerInfo.java | 23 --- .../java/android/app/ResourcesManager.java | 4 - .../android/content/AttributionSource.java | 4 - .../android/content/BroadcastReceiver.java | 5 - .../java/android/content/ComponentName.java | 4 - .../main/java/android/content/Context.java | 15 -- .../android/content/IContentProvider.java | 21 --- .../java/android/content/IIntentReceiver.java | 40 ----- .../java/android/content/IIntentSender.java | 34 ----- .../java/android/content/IntentFilter.java | 5 - .../android/content/pm/PackageInstaller.java | 7 - .../android/content/pm/PackageManager.java | 10 -- .../android/content/pm/PackageParser.java | 32 ---- .../android/content/res/AssetManager.java | 18 --- .../content/res/CompatibilityInfo.java | 4 - .../android/content/res/Configuration.java | 4 - .../java/android/content/res/Resources.java | 21 --- .../android/content/res/ResourcesImpl.java | 4 - .../android/content/res/ResourcesKey.java | 4 - .../java/android/content/res/TypedArray.java | 7 - .../java/android/ddm/DdmHandleAppName.java | 7 - .../src/main/java/android/graphics/Movie.java | 4 - .../android/graphics/drawable/Drawable.java | 4 - .../stubs/src/main/java/android/os/Build.java | 15 -- .../src/main/java/android/os/Bundle.java | 23 --- .../src/main/java/android/os/Environment.java | 9 -- .../src/main/java/android/os/Handler.java | 4 - .../main/java/android/os/IPowerManager.java | 12 -- .../java/android/os/IServiceCallback.java | 13 -- .../main/java/android/os/IServiceManager.java | 16 -- .../main/java/android/os/IUserManager.java | 32 ---- .../src/main/java/android/os/Parcelable.java | 10 -- .../java/android/os/PersistableBundle.java | 4 - .../main/java/android/os/ResultReceiver.java | 4 - .../src/main/java/android/os/SELinux.java | 15 -- .../main/java/android/os/ShellCallback.java | 25 ---- .../main/java/android/os/ShellCommand.java | 33 ----- .../java/android/os/SystemProperties.java | 26 ---- .../src/main/java/android/os/UserHandle.java | 17 --- .../src/main/java/android/os/UserManager.java | 11 -- .../permission/IPermissionManager.java | 8 - .../java/android/system/ErrnoException.java | 5 - .../main/java/android/system/Int32Ref.java | 15 -- .../src/main/java/android/system/Os.java | 23 --- .../java/android/util/DisplayMetrics.java | 4 - .../main/java/android/util/MutableInt.java | 9 -- .../main/java/android/util/TypedValue.java | 4 - .../java/android/view/IWindowManager.java | 17 --- .../java/android/webkit/WebViewDelegate.java | 4 - .../java/android/webkit/WebViewFactory.java | 4 - .../webkit/WebViewFactoryProvider.java | 4 - .../android/internal/os/BinderInternal.java | 7 - .../com/android/internal/os/ZygoteInit.java | 4 - .../com/android/internal/util/XmlUtils.java | 14 -- .../com/android/server/LocalServices.java | 8 - .../com/android/server/SystemService.java | 4 - .../android/server/SystemServiceManager.java | 7 - .../server/am/ActivityManagerService.java | 14 -- .../com/android/server/am/ProcessRecord.java | 5 - .../dalvik/system/BaseDexClassLoader.java | 17 --- .../main/java/dalvik/system/VMRuntime.java | 15 -- .../xmlpull/v1/XmlPullParserException.java | 4 - .../java/sun/misc/CompoundEnumeration.java | 34 ----- .../src/main/java/sun/net/www/ParseUtil.java | 7 - .../sun/net/www/protocol/jar/Handler.java | 4 - .../xposed/dummy/XResourcesSuperClass.java | 24 --- .../xposed/dummy/XTypedArraySuperClass.java | 20 --- 81 files changed, 1255 deletions(-) delete mode 100644 hiddenapi/stubs/src/main/java/android/app/ActivityManager.java delete mode 100644 hiddenapi/stubs/src/main/java/android/app/ActivityThread.java delete mode 100644 hiddenapi/stubs/src/main/java/android/app/Application.java delete mode 100644 hiddenapi/stubs/src/main/java/android/app/ContentProviderHolder.java delete mode 100644 hiddenapi/stubs/src/main/java/android/app/ContextImpl.java delete mode 100644 hiddenapi/stubs/src/main/java/android/app/IActivityController.java delete mode 100644 hiddenapi/stubs/src/main/java/android/app/IActivityManager.java delete mode 100644 hiddenapi/stubs/src/main/java/android/app/IApplicationThread.java delete mode 100644 hiddenapi/stubs/src/main/java/android/app/INotificationManager.java delete mode 100644 hiddenapi/stubs/src/main/java/android/app/IServiceConnection.java delete mode 100644 hiddenapi/stubs/src/main/java/android/app/IUidObserver.java delete mode 100644 hiddenapi/stubs/src/main/java/android/app/LoadedApk.java delete mode 100644 hiddenapi/stubs/src/main/java/android/app/Notification.java delete mode 100644 hiddenapi/stubs/src/main/java/android/app/NotificationChannel.java delete mode 100644 hiddenapi/stubs/src/main/java/android/app/ProfilerInfo.java delete mode 100644 hiddenapi/stubs/src/main/java/android/app/ResourcesManager.java delete mode 100644 hiddenapi/stubs/src/main/java/android/content/AttributionSource.java delete mode 100644 hiddenapi/stubs/src/main/java/android/content/BroadcastReceiver.java delete mode 100644 hiddenapi/stubs/src/main/java/android/content/ComponentName.java delete mode 100644 hiddenapi/stubs/src/main/java/android/content/Context.java delete mode 100644 hiddenapi/stubs/src/main/java/android/content/IContentProvider.java delete mode 100644 hiddenapi/stubs/src/main/java/android/content/IIntentReceiver.java delete mode 100644 hiddenapi/stubs/src/main/java/android/content/IIntentSender.java delete mode 100644 hiddenapi/stubs/src/main/java/android/content/IntentFilter.java delete mode 100644 hiddenapi/stubs/src/main/java/android/content/pm/PackageInstaller.java delete mode 100644 hiddenapi/stubs/src/main/java/android/content/pm/PackageManager.java delete mode 100644 hiddenapi/stubs/src/main/java/android/content/pm/PackageParser.java delete mode 100644 hiddenapi/stubs/src/main/java/android/content/res/AssetManager.java delete mode 100644 hiddenapi/stubs/src/main/java/android/content/res/CompatibilityInfo.java delete mode 100644 hiddenapi/stubs/src/main/java/android/content/res/Configuration.java delete mode 100644 hiddenapi/stubs/src/main/java/android/content/res/Resources.java delete mode 100644 hiddenapi/stubs/src/main/java/android/content/res/ResourcesImpl.java delete mode 100644 hiddenapi/stubs/src/main/java/android/content/res/ResourcesKey.java delete mode 100644 hiddenapi/stubs/src/main/java/android/content/res/TypedArray.java delete mode 100644 hiddenapi/stubs/src/main/java/android/ddm/DdmHandleAppName.java delete mode 100644 hiddenapi/stubs/src/main/java/android/graphics/Movie.java delete mode 100644 hiddenapi/stubs/src/main/java/android/graphics/drawable/Drawable.java delete mode 100644 hiddenapi/stubs/src/main/java/android/os/Build.java delete mode 100644 hiddenapi/stubs/src/main/java/android/os/Bundle.java delete mode 100644 hiddenapi/stubs/src/main/java/android/os/Environment.java delete mode 100644 hiddenapi/stubs/src/main/java/android/os/Handler.java delete mode 100644 hiddenapi/stubs/src/main/java/android/os/IPowerManager.java delete mode 100644 hiddenapi/stubs/src/main/java/android/os/IServiceCallback.java delete mode 100644 hiddenapi/stubs/src/main/java/android/os/IServiceManager.java delete mode 100644 hiddenapi/stubs/src/main/java/android/os/IUserManager.java delete mode 100644 hiddenapi/stubs/src/main/java/android/os/Parcelable.java delete mode 100644 hiddenapi/stubs/src/main/java/android/os/PersistableBundle.java delete mode 100644 hiddenapi/stubs/src/main/java/android/os/ResultReceiver.java delete mode 100644 hiddenapi/stubs/src/main/java/android/os/SELinux.java delete mode 100644 hiddenapi/stubs/src/main/java/android/os/ShellCallback.java delete mode 100644 hiddenapi/stubs/src/main/java/android/os/ShellCommand.java delete mode 100644 hiddenapi/stubs/src/main/java/android/os/SystemProperties.java delete mode 100644 hiddenapi/stubs/src/main/java/android/os/UserHandle.java delete mode 100644 hiddenapi/stubs/src/main/java/android/os/UserManager.java delete mode 100644 hiddenapi/stubs/src/main/java/android/permission/IPermissionManager.java delete mode 100644 hiddenapi/stubs/src/main/java/android/system/ErrnoException.java delete mode 100644 hiddenapi/stubs/src/main/java/android/system/Int32Ref.java delete mode 100644 hiddenapi/stubs/src/main/java/android/system/Os.java delete mode 100644 hiddenapi/stubs/src/main/java/android/util/DisplayMetrics.java delete mode 100644 hiddenapi/stubs/src/main/java/android/util/MutableInt.java delete mode 100644 hiddenapi/stubs/src/main/java/android/util/TypedValue.java delete mode 100644 hiddenapi/stubs/src/main/java/android/view/IWindowManager.java delete mode 100644 hiddenapi/stubs/src/main/java/android/webkit/WebViewDelegate.java delete mode 100644 hiddenapi/stubs/src/main/java/android/webkit/WebViewFactory.java delete mode 100644 hiddenapi/stubs/src/main/java/android/webkit/WebViewFactoryProvider.java delete mode 100644 hiddenapi/stubs/src/main/java/com/android/internal/os/BinderInternal.java delete mode 100644 hiddenapi/stubs/src/main/java/com/android/internal/os/ZygoteInit.java delete mode 100644 hiddenapi/stubs/src/main/java/com/android/internal/util/XmlUtils.java delete mode 100644 hiddenapi/stubs/src/main/java/com/android/server/LocalServices.java delete mode 100644 hiddenapi/stubs/src/main/java/com/android/server/SystemService.java delete mode 100644 hiddenapi/stubs/src/main/java/com/android/server/SystemServiceManager.java delete mode 100644 hiddenapi/stubs/src/main/java/com/android/server/am/ActivityManagerService.java delete mode 100644 hiddenapi/stubs/src/main/java/com/android/server/am/ProcessRecord.java delete mode 100644 hiddenapi/stubs/src/main/java/dalvik/system/BaseDexClassLoader.java delete mode 100644 hiddenapi/stubs/src/main/java/dalvik/system/VMRuntime.java delete mode 100644 hiddenapi/stubs/src/main/java/org/xmlpull/v1/XmlPullParserException.java delete mode 100644 hiddenapi/stubs/src/main/java/sun/misc/CompoundEnumeration.java delete mode 100644 hiddenapi/stubs/src/main/java/sun/net/www/ParseUtil.java delete mode 100644 hiddenapi/stubs/src/main/java/sun/net/www/protocol/jar/Handler.java delete mode 100644 hiddenapi/stubs/src/main/java/xposed/dummy/XResourcesSuperClass.java delete mode 100644 hiddenapi/stubs/src/main/java/xposed/dummy/XTypedArraySuperClass.java diff --git a/hiddenapi/stubs/src/main/java/android/app/ActivityManager.java b/hiddenapi/stubs/src/main/java/android/app/ActivityManager.java deleted file mode 100644 index b38f5714d..000000000 --- a/hiddenapi/stubs/src/main/java/android/app/ActivityManager.java +++ /dev/null @@ -1,9 +0,0 @@ -package android.app; - -public class ActivityManager { - public static int UID_OBSERVER_GONE; - public static int UID_OBSERVER_ACTIVE; - public static int UID_OBSERVER_IDLE; - public static int UID_OBSERVER_CACHED; - public static int PROCESS_STATE_UNKNOWN; -} diff --git a/hiddenapi/stubs/src/main/java/android/app/ActivityThread.java b/hiddenapi/stubs/src/main/java/android/app/ActivityThread.java deleted file mode 100644 index 7e5a861b6..000000000 --- a/hiddenapi/stubs/src/main/java/android/app/ActivityThread.java +++ /dev/null @@ -1,54 +0,0 @@ -package android.app; - -import android.content.pm.ApplicationInfo; -import android.content.res.CompatibilityInfo; -import android.os.Bundle; -import android.os.IBinder; -import android.os.PersistableBundle; - -public final class ActivityThread { - public static ActivityThread currentActivityThread() { - throw new UnsupportedOperationException("STUB"); - } - - public ApplicationThread getApplicationThread() { - throw new UnsupportedOperationException("STUB"); - } - - - public static Application currentApplication() { - throw new UnsupportedOperationException("STUB"); - } - - public static String currentPackageName() { - throw new UnsupportedOperationException("STUB"); - } - - public final LoadedApk getPackageInfoNoCheck(ApplicationInfo ai, CompatibilityInfo compatInfo) { - throw new UnsupportedOperationException("STUB"); - } - - public static String currentProcessName() { - throw new UnsupportedOperationException("STUB"); - } - - public ContextImpl getSystemContext() { - throw new UnsupportedOperationException("STUB"); - } - - public static ActivityThread systemMain() { - throw new UnsupportedOperationException("STUB"); - } - - private class ApplicationThread extends IApplicationThread.Stub { - @Override - public IBinder asBinder() { - return null; - } - } - - public static final class ActivityClientRecord { - Bundle state; - PersistableBundle persistentState; - } -} diff --git a/hiddenapi/stubs/src/main/java/android/app/Application.java b/hiddenapi/stubs/src/main/java/android/app/Application.java deleted file mode 100644 index a7fe902ef..000000000 --- a/hiddenapi/stubs/src/main/java/android/app/Application.java +++ /dev/null @@ -1,4 +0,0 @@ -package android.app; - -public class Application { -} diff --git a/hiddenapi/stubs/src/main/java/android/app/ContentProviderHolder.java b/hiddenapi/stubs/src/main/java/android/app/ContentProviderHolder.java deleted file mode 100644 index 9b390bd3d..000000000 --- a/hiddenapi/stubs/src/main/java/android/app/ContentProviderHolder.java +++ /dev/null @@ -1,7 +0,0 @@ -package android.app; - -import android.content.IContentProvider; - -public class ContentProviderHolder { - public IContentProvider provider; -} diff --git a/hiddenapi/stubs/src/main/java/android/app/ContextImpl.java b/hiddenapi/stubs/src/main/java/android/app/ContextImpl.java deleted file mode 100644 index 12c44eaa1..000000000 --- a/hiddenapi/stubs/src/main/java/android/app/ContextImpl.java +++ /dev/null @@ -1,6 +0,0 @@ -package android.app; - -import android.content.Context; - -public class ContextImpl extends Context { -} diff --git a/hiddenapi/stubs/src/main/java/android/app/IActivityController.java b/hiddenapi/stubs/src/main/java/android/app/IActivityController.java deleted file mode 100644 index a88ac8fa4..000000000 --- a/hiddenapi/stubs/src/main/java/android/app/IActivityController.java +++ /dev/null @@ -1,66 +0,0 @@ -package android.app; - -import android.content.Intent; -import android.os.Binder; -import android.os.Bundle; -import android.os.IBinder; -import android.os.IInterface; - -public interface IActivityController extends IInterface { - /** - * The system is trying to start an activity. Return true to allow - * it to be started as normal, or false to cancel/reject this activity. - */ - boolean activityStarting(Intent intent, String pkg); - - /** - * The system is trying to return to an activity. Return true to allow - * it to be resumed as normal, or false to cancel/reject this activity. - */ - boolean activityResuming(String pkg); - - /** - * An application process has crashed (in Java). Return true for the - * normal error recovery (app crash dialog) to occur, false to kill - * it immediately. - */ - boolean appCrashed(String processName, int pid, - String shortMsg, String longMsg, - long timeMillis, String stackTrace); - - /** - * Early call as soon as an ANR is detected. - */ - int appEarlyNotResponding(String processName, int pid, String annotation); - - /** - * An application process is not responding. Return 0 to show the "app - * not responding" dialog, 1 to continue waiting, or -1 to kill it - * immediately. - */ - int appNotResponding(String processName, int pid, String processStats); - - /** - * The system process watchdog has detected that the system seems to be - * hung. Return 1 to continue waiting, or -1 to let it continue with its - * normal kill. - */ - int systemNotResponding(String msg); - - /** - * 360 phones - */ - boolean moveTaskToFront(String pkg, int task, int flags, Bundle options); - - abstract class Stub extends Binder implements IActivityController { - - public static IActivityController asInterface(IBinder obj) { - throw new UnsupportedOperationException(); - } - - @Override - public IBinder asBinder() { - throw new UnsupportedOperationException(); - } - } -} diff --git a/hiddenapi/stubs/src/main/java/android/app/IActivityManager.java b/hiddenapi/stubs/src/main/java/android/app/IActivityManager.java deleted file mode 100644 index 0a70a72c4..000000000 --- a/hiddenapi/stubs/src/main/java/android/app/IActivityManager.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * This file is part of LSPosed. - * - * LSPosed is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LSPosed is distributed the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with LSPosed. If not, see . - * - * Copyright (C) 2021 LSPosed Contributors - */ - -package android.app; - -import android.content.IIntentReceiver; -import android.content.Intent; -import android.content.IntentFilter; -import android.content.pm.UserInfo; -import android.content.res.Configuration; -import android.os.Binder; -import android.os.Bundle; -import android.os.IBinder; -import android.os.IInterface; -import android.os.RemoteException; - -import androidx.annotation.RequiresApi; - -public interface IActivityManager extends IInterface { - @RequiresApi(31) - int broadcastIntentWithFeature(IApplicationThread caller, String callingFeatureId, - Intent intent, String resolvedType, IIntentReceiver resultTo, - int resultCode, String resultData, Bundle resultExtras, - String[] requiredPermissions, String[] excludedPermissions, - String[] excludePackages, int appOp, Bundle bOptions, - boolean serialized, boolean sticky, int userId) throws RemoteException; - - @RequiresApi(31) - int broadcastIntentWithFeature(IApplicationThread caller, String callingFeatureId, - Intent intent, String resolvedType, IIntentReceiver resultTo, - int resultCode, String resultData, Bundle resultExtras, - String[] requiredPermissions, String[] excludedPermissions, - int appOp, Bundle bOptions, - boolean serialized, boolean sticky, int userId) throws RemoteException; - - @RequiresApi(30) - int broadcastIntentWithFeature(IApplicationThread caller, String callingFeatureId, - Intent intent, String resolvedType, IIntentReceiver resultTo, int resultCode, - String resultData, Bundle map, String[] requiredPermissions, - int appOp, Bundle options, boolean serialized, boolean sticky, int userId) throws RemoteException; - - int broadcastIntent(IApplicationThread caller, Intent intent, - String resolvedType, IIntentReceiver resultTo, int resultCode, - String resultData, Bundle map, String[] requiredPermissions, - int appOp, Bundle options, boolean serialized, boolean sticky, int userId) throws RemoteException; - - int startActivity(IApplicationThread caller, String callingPackage, Intent intent, - String resolvedType, IBinder resultTo, String resultWho, int requestCode, - int flags, ProfilerInfo profilerInfo, Bundle options) throws RemoteException; - - @RequiresApi(30) - int startActivityWithFeature(IApplicationThread caller, String callingPackage, - String callingFeatureId, Intent intent, String resolvedType, - IBinder resultTo, String resultWho, int requestCode, int flags, - ProfilerInfo profilerInfo, Bundle options) throws RemoteException; - - int startActivityAsUser(IApplicationThread caller, String callingPackage, - Intent intent, String resolvedType, IBinder resultTo, String resultWho, - int requestCode, int flags, ProfilerInfo profilerInfo, - Bundle options, int userId) throws RemoteException; - - @RequiresApi(30) - int startActivityAsUserWithFeature(IApplicationThread caller, String callingPackage, - String callingFeatureId, Intent intent, String resolvedType, - IBinder resultTo, String resultWho, int requestCode, int flags, - ProfilerInfo profilerInfo, Bundle options, int userId) throws RemoteException; - - void forceStopPackage(String packageName, int userId) throws RemoteException; - - boolean startUserInBackground(int userid) throws RemoteException; - - Intent registerReceiver(IApplicationThread caller, String callerPackage, - IIntentReceiver receiver, IntentFilter filter, - String requiredPermission, int userId, int flags) throws RemoteException; - - void finishReceiver(IBinder caller, int resultCode, String resultData, - Bundle resultExtras, boolean resultAbort, int flags) throws RemoteException; - - @RequiresApi(30) - Intent registerReceiverWithFeature(IApplicationThread caller, String callerPackage, - String callingFeatureId, IIntentReceiver receiver, IntentFilter filter, - String requiredPermission, int userId, int flags) throws RemoteException; - - @RequiresApi(31) - Intent registerReceiverWithFeature(IApplicationThread caller, String callerPackage, String callingFeatureId, - String receiverId, IIntentReceiver receiver, IntentFilter filter, - String requiredPermission, int userId, int flags) throws RemoteException; - - int bindService(IApplicationThread caller, IBinder token, Intent service, - String resolvedType, IServiceConnection connection, int flags, - String callingPackage, int userId) throws RemoteException; - - @RequiresApi(34) - int bindService(IApplicationThread caller, IBinder token, Intent service, - String resolvedType, IServiceConnection connection, long flags, - String callingPackage, int userId) throws RemoteException; - - boolean unbindService(IServiceConnection connection) throws RemoteException; - - boolean switchUser(int userid) throws RemoteException; - - UserInfo getCurrentUser() throws RemoteException; - - void setActivityController(IActivityController watcher, boolean imAMonkey) throws RemoteException; - - @RequiresApi(29) - ContentProviderHolder getContentProviderExternal(String name, int userId, IBinder token, String tag) throws RemoteException; - - ContentProviderHolder getContentProviderExternal(String name, int userId, IBinder token) throws RemoteException; - - Configuration getConfiguration() throws RemoteException; - - void registerUidObserver(IUidObserver observer, int which, int cutpoint, String callingPackage) throws RemoteException; - - abstract class Stub extends Binder implements IActivityManager { - public static int TRANSACTION_setActivityController; - - public static IActivityManager asInterface(IBinder obj) { - throw new UnsupportedOperationException(); - } - } -} diff --git a/hiddenapi/stubs/src/main/java/android/app/IApplicationThread.java b/hiddenapi/stubs/src/main/java/android/app/IApplicationThread.java deleted file mode 100644 index 0b0146fab..000000000 --- a/hiddenapi/stubs/src/main/java/android/app/IApplicationThread.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * This file is part of LSPosed. - * - * LSPosed is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LSPosed is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with LSPosed. If not, see . - * - * Copyright (C) 2021 LSPosed Contributors - */ - -package android.app; - -import android.os.Binder; -import android.os.IBinder; -import android.os.IInterface; - -public interface IApplicationThread extends IInterface { - abstract class Stub extends Binder implements IApplicationThread { - public static IApplicationThread asInterface(IBinder obj) { - throw new UnsupportedOperationException(); - } - } -} diff --git a/hiddenapi/stubs/src/main/java/android/app/INotificationManager.java b/hiddenapi/stubs/src/main/java/android/app/INotificationManager.java deleted file mode 100644 index 8a73e0e91..000000000 --- a/hiddenapi/stubs/src/main/java/android/app/INotificationManager.java +++ /dev/null @@ -1,34 +0,0 @@ -package android.app; - -import android.content.pm.ParceledListSlice; -import android.os.Binder; -import android.os.IBinder; -import android.os.IInterface; -import android.os.RemoteException; - -import androidx.annotation.RequiresApi; - -public interface INotificationManager extends IInterface { - void enqueueNotificationWithTag(String pkg, String opPkg, String tag, int id, - Notification notification, int userId) throws RemoteException; - - void cancelNotificationWithTag(String pkg, String tag, int id, int userId) throws RemoteException; - - @RequiresApi(30) - void cancelNotificationWithTag(String pkg, String opPkg, String tag, int id, int userId) throws RemoteException; - - void createNotificationChannelsForPackage(String pkg, int uid, ParceledListSlice channelsList) throws RemoteException; - - void updateNotificationChannelForPackage(String pkg, int uid, NotificationChannel channel); - - @RequiresApi(30) - NotificationChannel getNotificationChannelForPackage(String pkg, int uid, String channelId, String conversationId, boolean includeDeleted) throws RemoteException; - - NotificationChannel getNotificationChannelForPackage(String pkg, int uid, String channelId, boolean includeDeleted) throws RemoteException; - - abstract class Stub extends Binder implements INotificationManager { - public static INotificationManager asInterface(IBinder obj) { - throw new UnsupportedOperationException(); - } - } -} diff --git a/hiddenapi/stubs/src/main/java/android/app/IServiceConnection.java b/hiddenapi/stubs/src/main/java/android/app/IServiceConnection.java deleted file mode 100644 index a531e1bc1..000000000 --- a/hiddenapi/stubs/src/main/java/android/app/IServiceConnection.java +++ /dev/null @@ -1,22 +0,0 @@ -package android.app; - -import android.content.ComponentName; -import android.os.Binder; -import android.os.IBinder; -import android.os.IInterface; - -public interface IServiceConnection extends IInterface { - void connected(ComponentName name, IBinder service, boolean dead); - - abstract class Stub extends Binder implements IServiceConnection { - - public static IServiceConnection asInterface(IBinder obj) { - throw new UnsupportedOperationException(); - } - - @Override - public IBinder asBinder() { - throw new UnsupportedOperationException(); - } - } -} diff --git a/hiddenapi/stubs/src/main/java/android/app/IUidObserver.java b/hiddenapi/stubs/src/main/java/android/app/IUidObserver.java deleted file mode 100644 index 676e509a6..000000000 --- a/hiddenapi/stubs/src/main/java/android/app/IUidObserver.java +++ /dev/null @@ -1,17 +0,0 @@ -package android.app; - -import android.os.Binder; - -public interface IUidObserver { - - void onUidGone(int uid, boolean disabled); - - void onUidActive(int uid); - - void onUidIdle(int uid, boolean disabled); - - void onUidCachedChanged(int uid, boolean cached); - - abstract class Stub extends Binder implements IUidObserver { - } -} diff --git a/hiddenapi/stubs/src/main/java/android/app/LoadedApk.java b/hiddenapi/stubs/src/main/java/android/app/LoadedApk.java deleted file mode 100644 index 32f294c1e..000000000 --- a/hiddenapi/stubs/src/main/java/android/app/LoadedApk.java +++ /dev/null @@ -1,23 +0,0 @@ -package android.app; - -import android.content.pm.ApplicationInfo; - -public final class LoadedApk { - private ClassLoader mDefaultClassLoader; - - public ApplicationInfo getApplicationInfo() { - throw new UnsupportedOperationException("STUB"); - } - - public ClassLoader getClassLoader() { - throw new UnsupportedOperationException("STUB"); - } - - public String getPackageName() { - throw new UnsupportedOperationException("STUB"); - } - - public String getResDir() { - throw new UnsupportedOperationException("STUB"); - } -} diff --git a/hiddenapi/stubs/src/main/java/android/app/Notification.java b/hiddenapi/stubs/src/main/java/android/app/Notification.java deleted file mode 100644 index 147786911..000000000 --- a/hiddenapi/stubs/src/main/java/android/app/Notification.java +++ /dev/null @@ -1,4 +0,0 @@ -package android.app; - -public class Notification { -} diff --git a/hiddenapi/stubs/src/main/java/android/app/NotificationChannel.java b/hiddenapi/stubs/src/main/java/android/app/NotificationChannel.java deleted file mode 100644 index dbd15704b..000000000 --- a/hiddenapi/stubs/src/main/java/android/app/NotificationChannel.java +++ /dev/null @@ -1,4 +0,0 @@ -package android.app; - -public class NotificationChannel { -} diff --git a/hiddenapi/stubs/src/main/java/android/app/ProfilerInfo.java b/hiddenapi/stubs/src/main/java/android/app/ProfilerInfo.java deleted file mode 100644 index 6b5056f07..000000000 --- a/hiddenapi/stubs/src/main/java/android/app/ProfilerInfo.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of LSPosed. - * - * LSPosed is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LSPosed is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with LSPosed. If not, see . - * - * Copyright (C) 2021 LSPosed Contributors - */ - -package android.app; - -public class ProfilerInfo { -} diff --git a/hiddenapi/stubs/src/main/java/android/app/ResourcesManager.java b/hiddenapi/stubs/src/main/java/android/app/ResourcesManager.java deleted file mode 100644 index 3132dff50..000000000 --- a/hiddenapi/stubs/src/main/java/android/app/ResourcesManager.java +++ /dev/null @@ -1,4 +0,0 @@ -package android.app; - -public class ResourcesManager { -} diff --git a/hiddenapi/stubs/src/main/java/android/content/AttributionSource.java b/hiddenapi/stubs/src/main/java/android/content/AttributionSource.java deleted file mode 100644 index f54c432ff..000000000 --- a/hiddenapi/stubs/src/main/java/android/content/AttributionSource.java +++ /dev/null @@ -1,4 +0,0 @@ -package android.content; - -public class AttributionSource { -} diff --git a/hiddenapi/stubs/src/main/java/android/content/BroadcastReceiver.java b/hiddenapi/stubs/src/main/java/android/content/BroadcastReceiver.java deleted file mode 100644 index d70f080aa..000000000 --- a/hiddenapi/stubs/src/main/java/android/content/BroadcastReceiver.java +++ /dev/null @@ -1,5 +0,0 @@ -package android.content; - -public abstract class BroadcastReceiver { - public abstract void onReceive(Context context, Intent intent); -} diff --git a/hiddenapi/stubs/src/main/java/android/content/ComponentName.java b/hiddenapi/stubs/src/main/java/android/content/ComponentName.java deleted file mode 100644 index 47ef5a706..000000000 --- a/hiddenapi/stubs/src/main/java/android/content/ComponentName.java +++ /dev/null @@ -1,4 +0,0 @@ -package android.content; - -public final class ComponentName { -} diff --git a/hiddenapi/stubs/src/main/java/android/content/Context.java b/hiddenapi/stubs/src/main/java/android/content/Context.java deleted file mode 100644 index fc22c4492..000000000 --- a/hiddenapi/stubs/src/main/java/android/content/Context.java +++ /dev/null @@ -1,15 +0,0 @@ -package android.content; - -import android.os.Handler; -import android.os.IBinder; -import android.os.UserHandle; - -public class Context { - public IBinder getActivityToken() { - throw new UnsupportedOperationException("STUB"); - } - public Intent registerReceiverAsUser(BroadcastReceiver receiver, UserHandle user, - IntentFilter filter, String broadcastPermission, Handler scheduler) { - throw new UnsupportedOperationException("STUB"); - } -} diff --git a/hiddenapi/stubs/src/main/java/android/content/IContentProvider.java b/hiddenapi/stubs/src/main/java/android/content/IContentProvider.java deleted file mode 100644 index f3aba6382..000000000 --- a/hiddenapi/stubs/src/main/java/android/content/IContentProvider.java +++ /dev/null @@ -1,21 +0,0 @@ -package android.content; - -import android.os.Bundle; -import android.os.IInterface; -import android.os.RemoteException; - -import androidx.annotation.RequiresApi; - -public interface IContentProvider extends IInterface { - @RequiresApi(29) - Bundle call(String callingPkg, String authority, String method, - String arg, Bundle extras) throws RemoteException; - - @RequiresApi(30) - Bundle call(String callingPkg, String attributionTag, String authority, - String method, String arg, Bundle extras) throws RemoteException; - - @RequiresApi(31) - Bundle call(AttributionSource attributionSource, String authority, - String method, String arg, Bundle extras) throws RemoteException; -} diff --git a/hiddenapi/stubs/src/main/java/android/content/IIntentReceiver.java b/hiddenapi/stubs/src/main/java/android/content/IIntentReceiver.java deleted file mode 100644 index 233fce190..000000000 --- a/hiddenapi/stubs/src/main/java/android/content/IIntentReceiver.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * This file is part of LSPosed. - * - * LSPosed is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LSPosed is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with LSPosed. If not, see . - * - * Copyright (C) 2021 LSPosed Contributors - */ - -package android.content; - -import android.os.Binder; -import android.os.Bundle; -import android.os.IBinder; -import android.os.IInterface; - -public interface IIntentReceiver extends IInterface { - void performReceive(Intent intent, int resultCode, String data, - Bundle extras, boolean ordered, boolean sticky, int sendingUser); - abstract class Stub extends Binder implements IIntentReceiver { - public static IIntentReceiver asInterface(IBinder obj) { - throw new UnsupportedOperationException(); - } - - @Override - public IBinder asBinder() { - return this; - } - } -} diff --git a/hiddenapi/stubs/src/main/java/android/content/IIntentSender.java b/hiddenapi/stubs/src/main/java/android/content/IIntentSender.java deleted file mode 100644 index 842d8a741..000000000 --- a/hiddenapi/stubs/src/main/java/android/content/IIntentSender.java +++ /dev/null @@ -1,34 +0,0 @@ -package android.content; - -import android.os.Binder; -import android.os.Bundle; -import android.os.IBinder; -import android.os.IInterface; - -import androidx.annotation.RequiresApi; - -public interface IIntentSender extends IInterface { - - int send(int code, Intent intent, String resolvedType, - IIntentReceiver finishedReceiver, String requiredPermission, Bundle options); - - @RequiresApi(26) - void send(int code, Intent intent, String resolvedType, IBinder whitelistToken, - IIntentReceiver finishedReceiver, String requiredPermission, Bundle options); - - abstract class Stub extends Binder implements IIntentSender { - - public Stub() { - throw new UnsupportedOperationException(); - } - - @Override - public android.os.IBinder asBinder() { - throw new UnsupportedOperationException(); - } - - public static IIntentSender asInterface(IBinder binder) { - throw new UnsupportedOperationException(); - } - } -} diff --git a/hiddenapi/stubs/src/main/java/android/content/IntentFilter.java b/hiddenapi/stubs/src/main/java/android/content/IntentFilter.java deleted file mode 100644 index 347a714cd..000000000 --- a/hiddenapi/stubs/src/main/java/android/content/IntentFilter.java +++ /dev/null @@ -1,5 +0,0 @@ -package android.content; - -public class IntentFilter { - -} diff --git a/hiddenapi/stubs/src/main/java/android/content/pm/PackageInstaller.java b/hiddenapi/stubs/src/main/java/android/content/pm/PackageInstaller.java deleted file mode 100644 index ab6b0de4d..000000000 --- a/hiddenapi/stubs/src/main/java/android/content/pm/PackageInstaller.java +++ /dev/null @@ -1,7 +0,0 @@ -package android.content.pm; - -public class PackageInstaller { - public static class SessionParams { - public int installFlags = 0; - } -} diff --git a/hiddenapi/stubs/src/main/java/android/content/pm/PackageManager.java b/hiddenapi/stubs/src/main/java/android/content/pm/PackageManager.java deleted file mode 100644 index 3d7e3a087..000000000 --- a/hiddenapi/stubs/src/main/java/android/content/pm/PackageManager.java +++ /dev/null @@ -1,10 +0,0 @@ -package android.content.pm; - -import java.util.List; - -public class PackageManager { - public List getInstalledPackagesAsUser(int flags, int userId) { - throw new UnsupportedOperationException("STUB"); - } - -} diff --git a/hiddenapi/stubs/src/main/java/android/content/pm/PackageParser.java b/hiddenapi/stubs/src/main/java/android/content/pm/PackageParser.java deleted file mode 100644 index bbdeb54b1..000000000 --- a/hiddenapi/stubs/src/main/java/android/content/pm/PackageParser.java +++ /dev/null @@ -1,32 +0,0 @@ -package android.content.pm; - -import java.io.File; - -public class PackageParser { - public static class PackageLite { - public final String packageName = null; - } - - public final static class Package { - public ApplicationInfo applicationInfo; - } - - /** Before SDK21 */ - public static PackageLite parsePackageLite(String packageFile, int flags) { - throw new UnsupportedOperationException("STUB"); - } - - /** Since SDK21 */ - public static PackageLite parsePackageLite(File packageFile, int flags) throws PackageParserException { - throw new UnsupportedOperationException("STUB"); - } - - public Package parsePackage(File packageFile, int flags, boolean useCaches) - throws PackageParserException { - throw new UnsupportedOperationException("STUB"); - } - - /** Since SDK21 */ - public static class PackageParserException extends Exception { - } -} diff --git a/hiddenapi/stubs/src/main/java/android/content/res/AssetManager.java b/hiddenapi/stubs/src/main/java/android/content/res/AssetManager.java deleted file mode 100644 index 68caa70f2..000000000 --- a/hiddenapi/stubs/src/main/java/android/content/res/AssetManager.java +++ /dev/null @@ -1,18 +0,0 @@ -package android.content.res; - -import java.io.IOException; -import java.io.InputStream; - -public final class AssetManager { - public final int addAssetPath(String path) { - throw new UnsupportedOperationException("STUB"); - } - - public void close() { - throw new UnsupportedOperationException("STUB"); - } - - public final InputStream open(String fileName) throws IOException { - throw new UnsupportedOperationException("STUB"); - } -} diff --git a/hiddenapi/stubs/src/main/java/android/content/res/CompatibilityInfo.java b/hiddenapi/stubs/src/main/java/android/content/res/CompatibilityInfo.java deleted file mode 100644 index c63acedec..000000000 --- a/hiddenapi/stubs/src/main/java/android/content/res/CompatibilityInfo.java +++ /dev/null @@ -1,4 +0,0 @@ -package android.content.res; - -public class CompatibilityInfo { -} diff --git a/hiddenapi/stubs/src/main/java/android/content/res/Configuration.java b/hiddenapi/stubs/src/main/java/android/content/res/Configuration.java deleted file mode 100644 index 80e4df10b..000000000 --- a/hiddenapi/stubs/src/main/java/android/content/res/Configuration.java +++ /dev/null @@ -1,4 +0,0 @@ -package android.content.res; - -public class Configuration { -} diff --git a/hiddenapi/stubs/src/main/java/android/content/res/Resources.java b/hiddenapi/stubs/src/main/java/android/content/res/Resources.java deleted file mode 100644 index cb5ba815a..000000000 --- a/hiddenapi/stubs/src/main/java/android/content/res/Resources.java +++ /dev/null @@ -1,21 +0,0 @@ -package android.content.res; - -import android.util.DisplayMetrics; - -public class Resources { - public Resources(AssetManager assets, DisplayMetrics metrics, Configuration config) { - throw new UnsupportedOperationException("STUB"); - } - - public Resources(ClassLoader classLoader) { - throw new UnsupportedOperationException("STUB"); - } - - public void setImpl(ResourcesImpl impl) { - throw new UnsupportedOperationException("STUB"); - } - - public CompatibilityInfo getCompatibilityInfo() { - throw new UnsupportedOperationException("STUB"); - } -} diff --git a/hiddenapi/stubs/src/main/java/android/content/res/ResourcesImpl.java b/hiddenapi/stubs/src/main/java/android/content/res/ResourcesImpl.java deleted file mode 100644 index 3f29d11d9..000000000 --- a/hiddenapi/stubs/src/main/java/android/content/res/ResourcesImpl.java +++ /dev/null @@ -1,4 +0,0 @@ -package android.content.res; - -public class ResourcesImpl { -} diff --git a/hiddenapi/stubs/src/main/java/android/content/res/ResourcesKey.java b/hiddenapi/stubs/src/main/java/android/content/res/ResourcesKey.java deleted file mode 100644 index f82c90a39..000000000 --- a/hiddenapi/stubs/src/main/java/android/content/res/ResourcesKey.java +++ /dev/null @@ -1,4 +0,0 @@ -package android.content.res; - -public class ResourcesKey { -} diff --git a/hiddenapi/stubs/src/main/java/android/content/res/TypedArray.java b/hiddenapi/stubs/src/main/java/android/content/res/TypedArray.java deleted file mode 100644 index f067e0fbe..000000000 --- a/hiddenapi/stubs/src/main/java/android/content/res/TypedArray.java +++ /dev/null @@ -1,7 +0,0 @@ -package android.content.res; - -public class TypedArray { - protected TypedArray(Resources resources) { - throw new UnsupportedOperationException("STUB"); - } -} diff --git a/hiddenapi/stubs/src/main/java/android/ddm/DdmHandleAppName.java b/hiddenapi/stubs/src/main/java/android/ddm/DdmHandleAppName.java deleted file mode 100644 index 1ed326b7a..000000000 --- a/hiddenapi/stubs/src/main/java/android/ddm/DdmHandleAppName.java +++ /dev/null @@ -1,7 +0,0 @@ -package android.ddm; - -public class DdmHandleAppName { - public static void setAppName(String name, int userId) { - throw new RuntimeException("STUB"); - } -} diff --git a/hiddenapi/stubs/src/main/java/android/graphics/Movie.java b/hiddenapi/stubs/src/main/java/android/graphics/Movie.java deleted file mode 100644 index 22b2384d1..000000000 --- a/hiddenapi/stubs/src/main/java/android/graphics/Movie.java +++ /dev/null @@ -1,4 +0,0 @@ -package android.graphics; - -public class Movie { -} diff --git a/hiddenapi/stubs/src/main/java/android/graphics/drawable/Drawable.java b/hiddenapi/stubs/src/main/java/android/graphics/drawable/Drawable.java deleted file mode 100644 index 789035d95..000000000 --- a/hiddenapi/stubs/src/main/java/android/graphics/drawable/Drawable.java +++ /dev/null @@ -1,4 +0,0 @@ -package android.graphics.drawable; - -public class Drawable { -} diff --git a/hiddenapi/stubs/src/main/java/android/os/Build.java b/hiddenapi/stubs/src/main/java/android/os/Build.java deleted file mode 100644 index e0b70fc32..000000000 --- a/hiddenapi/stubs/src/main/java/android/os/Build.java +++ /dev/null @@ -1,15 +0,0 @@ -package android.os; - -public class Build { - public static class VERSION { - public final static int SDK_INT = SystemProperties.getInt( - "ro.build.version.sdk", 0); - } - public static class VERSION_CODES { - public static final int O_MR1 = 27; - public static final int P = 28; - public static final int Q = 29; - public static final int R = 30; - public static final int S = 31; - } -} diff --git a/hiddenapi/stubs/src/main/java/android/os/Bundle.java b/hiddenapi/stubs/src/main/java/android/os/Bundle.java deleted file mode 100644 index 24323c6aa..000000000 --- a/hiddenapi/stubs/src/main/java/android/os/Bundle.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of LSPosed. - * - * LSPosed is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LSPosed is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with LSPosed. If not, see . - * - * Copyright (C) 2021 LSPosed Contributors - */ - -package android.os; - -public class Bundle { -} diff --git a/hiddenapi/stubs/src/main/java/android/os/Environment.java b/hiddenapi/stubs/src/main/java/android/os/Environment.java deleted file mode 100644 index f769f46d0..000000000 --- a/hiddenapi/stubs/src/main/java/android/os/Environment.java +++ /dev/null @@ -1,9 +0,0 @@ -package android.os; - -import java.io.File; - -public class Environment { - public static File getDataProfilesDePackageDirectory(int userId, String packageName) { - throw new IllegalArgumentException("STUB"); - } -} diff --git a/hiddenapi/stubs/src/main/java/android/os/Handler.java b/hiddenapi/stubs/src/main/java/android/os/Handler.java deleted file mode 100644 index dd6327221..000000000 --- a/hiddenapi/stubs/src/main/java/android/os/Handler.java +++ /dev/null @@ -1,4 +0,0 @@ -package android.os; - -public class Handler { -} diff --git a/hiddenapi/stubs/src/main/java/android/os/IPowerManager.java b/hiddenapi/stubs/src/main/java/android/os/IPowerManager.java deleted file mode 100644 index dd82db6db..000000000 --- a/hiddenapi/stubs/src/main/java/android/os/IPowerManager.java +++ /dev/null @@ -1,12 +0,0 @@ -package android.os; - -public interface IPowerManager extends IInterface { - void reboot(boolean confirm, String reason, boolean wait) throws RemoteException; - - abstract class Stub extends Binder implements IPowerManager { - - public static IPowerManager asInterface(IBinder obj) { - throw new UnsupportedOperationException(); - } - } -} diff --git a/hiddenapi/stubs/src/main/java/android/os/IServiceCallback.java b/hiddenapi/stubs/src/main/java/android/os/IServiceCallback.java deleted file mode 100644 index d35430249..000000000 --- a/hiddenapi/stubs/src/main/java/android/os/IServiceCallback.java +++ /dev/null @@ -1,13 +0,0 @@ -package android.os; -public interface IServiceCallback extends IInterface -{ - public static abstract class Stub extends android.os.Binder implements android.os.IServiceCallback { - } - /** - * Called when a service is registered. - * - * @param name the service name that has been registered with - * @param binder the binder that is registered - */ - public void onRegistration(java.lang.String name, android.os.IBinder binder) throws android.os.RemoteException; -} diff --git a/hiddenapi/stubs/src/main/java/android/os/IServiceManager.java b/hiddenapi/stubs/src/main/java/android/os/IServiceManager.java deleted file mode 100644 index 7a1b19617..000000000 --- a/hiddenapi/stubs/src/main/java/android/os/IServiceManager.java +++ /dev/null @@ -1,16 +0,0 @@ -package android.os; - -public interface IServiceManager extends IInterface { - - void tryUnregisterService(java.lang.String name, android.os.IBinder service); - - IBinder getService(String name); - - public void registerForNotifications(String name, IServiceCallback cb); - - abstract class Stub extends Binder implements IServiceManager { - public static IServiceManager asInterface(IBinder obj) { - throw new UnsupportedOperationException(); - } - } -} diff --git a/hiddenapi/stubs/src/main/java/android/os/IUserManager.java b/hiddenapi/stubs/src/main/java/android/os/IUserManager.java deleted file mode 100644 index f2295d0b7..000000000 --- a/hiddenapi/stubs/src/main/java/android/os/IUserManager.java +++ /dev/null @@ -1,32 +0,0 @@ -package android.os; - -import android.content.pm.UserInfo; - -import androidx.annotation.RequiresApi; - -import java.util.List; - -public interface IUserManager extends IInterface { - @RequiresApi(26) - boolean isUserUnlocked(int userId) - throws RemoteException; - - List getUsers(boolean excludeDying) - throws RemoteException; - - List getUsers(boolean excludePartial, boolean excludeDying, boolean excludePreCreated) - throws RemoteException; - - UserInfo getUserInfo(int userHandle) throws RemoteException; - - UserInfo getProfileParent(int userId) throws RemoteException; - - boolean isUserUnlockingOrUnlocked(int userId) throws RemoteException; - - abstract class Stub extends Binder implements IUserManager { - - public static IUserManager asInterface(IBinder obj) { - throw new RuntimeException("STUB"); - } - } -} diff --git a/hiddenapi/stubs/src/main/java/android/os/Parcelable.java b/hiddenapi/stubs/src/main/java/android/os/Parcelable.java deleted file mode 100644 index 5c716ee51..000000000 --- a/hiddenapi/stubs/src/main/java/android/os/Parcelable.java +++ /dev/null @@ -1,10 +0,0 @@ -package android.os; - -public interface Parcelable { - interface Creator{ - public T createFromParcel(Parcel source); - public T[] newArray(int size); - } - void writeToParcel(Parcel dest, int flags); - int describeContents(); -} diff --git a/hiddenapi/stubs/src/main/java/android/os/PersistableBundle.java b/hiddenapi/stubs/src/main/java/android/os/PersistableBundle.java deleted file mode 100644 index e06f6f0ce..000000000 --- a/hiddenapi/stubs/src/main/java/android/os/PersistableBundle.java +++ /dev/null @@ -1,4 +0,0 @@ -package android.os; - -public class PersistableBundle { -} diff --git a/hiddenapi/stubs/src/main/java/android/os/ResultReceiver.java b/hiddenapi/stubs/src/main/java/android/os/ResultReceiver.java deleted file mode 100644 index 358ae780f..000000000 --- a/hiddenapi/stubs/src/main/java/android/os/ResultReceiver.java +++ /dev/null @@ -1,4 +0,0 @@ -package android.os; - -public class ResultReceiver { -} diff --git a/hiddenapi/stubs/src/main/java/android/os/SELinux.java b/hiddenapi/stubs/src/main/java/android/os/SELinux.java deleted file mode 100644 index 991a84fe0..000000000 --- a/hiddenapi/stubs/src/main/java/android/os/SELinux.java +++ /dev/null @@ -1,15 +0,0 @@ -package android.os; - -public class SELinux { - public static boolean checkSELinuxAccess(String scon, String tcon, String tclass, String perm) { - throw new UnsupportedOperationException("Stub"); - } - - public static boolean setFileContext(String path, String context) { - throw new UnsupportedOperationException("Stub"); - } - - public static boolean setFSCreateContext(String context){ - throw new UnsupportedOperationException("Stub"); - } -} diff --git a/hiddenapi/stubs/src/main/java/android/os/ShellCallback.java b/hiddenapi/stubs/src/main/java/android/os/ShellCallback.java deleted file mode 100644 index fe342213a..000000000 --- a/hiddenapi/stubs/src/main/java/android/os/ShellCallback.java +++ /dev/null @@ -1,25 +0,0 @@ -package android.os; - -public class ShellCallback implements Parcelable { - public static final Parcelable.Creator CREATOR = new Creator() { - @Override - public ShellCallback createFromParcel(Parcel source) { - throw new IllegalArgumentException("STUB"); - } - - @Override - public ShellCallback[] newArray(int size) { - throw new IllegalArgumentException("STUB"); - } - }; - - @Override - public void writeToParcel(Parcel dest, int flags) { - throw new IllegalArgumentException("STUB"); - } - - @Override - public int describeContents() { - throw new IllegalArgumentException("STUB"); - } -} diff --git a/hiddenapi/stubs/src/main/java/android/os/ShellCommand.java b/hiddenapi/stubs/src/main/java/android/os/ShellCommand.java deleted file mode 100644 index 56dac90c2..000000000 --- a/hiddenapi/stubs/src/main/java/android/os/ShellCommand.java +++ /dev/null @@ -1,33 +0,0 @@ -package android.os; - -import java.io.FileDescriptor; -import java.io.InputStream; -import java.io.PrintWriter; - -public abstract class ShellCommand { - public int exec(Binder target, FileDescriptor in, FileDescriptor out, FileDescriptor err, - String[] args, ShellCallback callback, ResultReceiver resultReceiver) { - throw new IllegalArgumentException("STUB!"); - } - - public abstract int onCommand(String cmd); - public abstract void onHelp(); - - public String getNextOption(){ - throw new IllegalArgumentException("STUB!"); - } - - public String getNextArgRequired() { - throw new IllegalArgumentException("STUB!"); - } - - public PrintWriter getErrPrintWriter() { - throw new IllegalArgumentException("STUB!"); - } - public PrintWriter getOutPrintWriter() { - throw new IllegalArgumentException("STUB!"); - } - public InputStream getRawInputStream() { - throw new IllegalArgumentException("STUB!"); - } -} diff --git a/hiddenapi/stubs/src/main/java/android/os/SystemProperties.java b/hiddenapi/stubs/src/main/java/android/os/SystemProperties.java deleted file mode 100644 index 240fa36cd..000000000 --- a/hiddenapi/stubs/src/main/java/android/os/SystemProperties.java +++ /dev/null @@ -1,26 +0,0 @@ -package android.os; - -import android.annotation.NonNull; -import android.annotation.Nullable; - -public class SystemProperties { - public static String get(@NonNull String key) { - throw new UnsupportedOperationException("Stub"); - } - - public static String get(@NonNull String key, @Nullable String def) { - throw new UnsupportedOperationException("Stub"); - } - - public static void set(@NonNull String key, @Nullable String val) { - throw new UnsupportedOperationException("Stub"); - } - - public static boolean getBoolean(@NonNull String key, boolean def) { - throw new UnsupportedOperationException("Stub"); - } - - public static int getInt(@NonNull String key, int def) { - throw new UnsupportedOperationException("Stub"); - } -} diff --git a/hiddenapi/stubs/src/main/java/android/os/UserHandle.java b/hiddenapi/stubs/src/main/java/android/os/UserHandle.java deleted file mode 100644 index 310fe2463..000000000 --- a/hiddenapi/stubs/src/main/java/android/os/UserHandle.java +++ /dev/null @@ -1,17 +0,0 @@ -package android.os; - -import android.annotation.NonNull; - -public class UserHandle { - - public UserHandle(int h) { - throw new RuntimeException("STUB"); - } - - public int getIdentifier() { - throw new RuntimeException("STUB"); - } - - public static final @NonNull - UserHandle ALL = null; -} diff --git a/hiddenapi/stubs/src/main/java/android/os/UserManager.java b/hiddenapi/stubs/src/main/java/android/os/UserManager.java deleted file mode 100644 index 1dda5b631..000000000 --- a/hiddenapi/stubs/src/main/java/android/os/UserManager.java +++ /dev/null @@ -1,11 +0,0 @@ -package android.os; - -import android.content.pm.UserInfo; - -import java.util.List; - -public class UserManager { - public List getUsers() { - throw new UnsupportedOperationException("STUB"); - } -} diff --git a/hiddenapi/stubs/src/main/java/android/permission/IPermissionManager.java b/hiddenapi/stubs/src/main/java/android/permission/IPermissionManager.java deleted file mode 100644 index 595f4756e..000000000 --- a/hiddenapi/stubs/src/main/java/android/permission/IPermissionManager.java +++ /dev/null @@ -1,8 +0,0 @@ -package android.permission; - -import java.util.List; - -public interface IPermissionManager { - - List getSplitPermissions(); -} diff --git a/hiddenapi/stubs/src/main/java/android/system/ErrnoException.java b/hiddenapi/stubs/src/main/java/android/system/ErrnoException.java deleted file mode 100644 index 014857bc0..000000000 --- a/hiddenapi/stubs/src/main/java/android/system/ErrnoException.java +++ /dev/null @@ -1,5 +0,0 @@ -package android.system; - -public final class ErrnoException extends Exception { - -} diff --git a/hiddenapi/stubs/src/main/java/android/system/Int32Ref.java b/hiddenapi/stubs/src/main/java/android/system/Int32Ref.java deleted file mode 100644 index e44e01b07..000000000 --- a/hiddenapi/stubs/src/main/java/android/system/Int32Ref.java +++ /dev/null @@ -1,15 +0,0 @@ -package android.system; - -import java.util.Objects; - -public class Int32Ref { - public int value; - - public Int32Ref(int value) { - this.value = value; - } - - @Override public String toString() { - return Objects.toString(this); - } -} diff --git a/hiddenapi/stubs/src/main/java/android/system/Os.java b/hiddenapi/stubs/src/main/java/android/system/Os.java deleted file mode 100644 index 04f0ec2b5..000000000 --- a/hiddenapi/stubs/src/main/java/android/system/Os.java +++ /dev/null @@ -1,23 +0,0 @@ -package android.system; - -import android.util.MutableInt; - -import androidx.annotation.RequiresApi; - -import java.io.FileDescriptor; - -public class Os { - public static int ioctlInt(FileDescriptor fd, int cmd, MutableInt arg) throws ErrnoException { - throw new ErrnoException(); - } - - @RequiresApi(27) - public static int ioctlInt(FileDescriptor fd, int cmd, Int32Ref arg) throws ErrnoException { - throw new ErrnoException(); - } - - @RequiresApi(31) - public static int ioctlInt(FileDescriptor fd, int cmd) throws ErrnoException { - throw new ErrnoException(); - } -} diff --git a/hiddenapi/stubs/src/main/java/android/util/DisplayMetrics.java b/hiddenapi/stubs/src/main/java/android/util/DisplayMetrics.java deleted file mode 100644 index 35c44ff06..000000000 --- a/hiddenapi/stubs/src/main/java/android/util/DisplayMetrics.java +++ /dev/null @@ -1,4 +0,0 @@ -package android.util; - -public class DisplayMetrics { -} diff --git a/hiddenapi/stubs/src/main/java/android/util/MutableInt.java b/hiddenapi/stubs/src/main/java/android/util/MutableInt.java deleted file mode 100644 index 177f52ee3..000000000 --- a/hiddenapi/stubs/src/main/java/android/util/MutableInt.java +++ /dev/null @@ -1,9 +0,0 @@ -package android.util; - -public final class MutableInt { - public int value; - - public MutableInt(int value) { - this.value = value; - } -} diff --git a/hiddenapi/stubs/src/main/java/android/util/TypedValue.java b/hiddenapi/stubs/src/main/java/android/util/TypedValue.java deleted file mode 100644 index dd6c9a34f..000000000 --- a/hiddenapi/stubs/src/main/java/android/util/TypedValue.java +++ /dev/null @@ -1,4 +0,0 @@ -package android.util; - -public class TypedValue { -} diff --git a/hiddenapi/stubs/src/main/java/android/view/IWindowManager.java b/hiddenapi/stubs/src/main/java/android/view/IWindowManager.java deleted file mode 100644 index 9ad26bc18..000000000 --- a/hiddenapi/stubs/src/main/java/android/view/IWindowManager.java +++ /dev/null @@ -1,17 +0,0 @@ -package android.view; - -import android.app.IActivityManager; -import android.os.Binder; -import android.os.Bundle; -import android.os.IBinder; -import android.os.IInterface; - -public interface IWindowManager extends IInterface { - void lockNow(Bundle options); - - abstract class Stub extends Binder implements IWindowManager { - public static IWindowManager asInterface(IBinder obj) { - throw new UnsupportedOperationException(); - } - } -} diff --git a/hiddenapi/stubs/src/main/java/android/webkit/WebViewDelegate.java b/hiddenapi/stubs/src/main/java/android/webkit/WebViewDelegate.java deleted file mode 100644 index 3ad7cd29a..000000000 --- a/hiddenapi/stubs/src/main/java/android/webkit/WebViewDelegate.java +++ /dev/null @@ -1,4 +0,0 @@ -package android.webkit; - -public class WebViewDelegate { -} diff --git a/hiddenapi/stubs/src/main/java/android/webkit/WebViewFactory.java b/hiddenapi/stubs/src/main/java/android/webkit/WebViewFactory.java deleted file mode 100644 index e266da667..000000000 --- a/hiddenapi/stubs/src/main/java/android/webkit/WebViewFactory.java +++ /dev/null @@ -1,4 +0,0 @@ -package android.webkit; - -public class WebViewFactory { -} diff --git a/hiddenapi/stubs/src/main/java/android/webkit/WebViewFactoryProvider.java b/hiddenapi/stubs/src/main/java/android/webkit/WebViewFactoryProvider.java deleted file mode 100644 index 43b5fd5e3..000000000 --- a/hiddenapi/stubs/src/main/java/android/webkit/WebViewFactoryProvider.java +++ /dev/null @@ -1,4 +0,0 @@ -package android.webkit; - -public class WebViewFactoryProvider { -} diff --git a/hiddenapi/stubs/src/main/java/com/android/internal/os/BinderInternal.java b/hiddenapi/stubs/src/main/java/com/android/internal/os/BinderInternal.java deleted file mode 100644 index 728c2ab58..000000000 --- a/hiddenapi/stubs/src/main/java/com/android/internal/os/BinderInternal.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.android.internal.os; - -import android.os.IBinder; - -public class BinderInternal { - public static final native IBinder getContextObject(); -} diff --git a/hiddenapi/stubs/src/main/java/com/android/internal/os/ZygoteInit.java b/hiddenapi/stubs/src/main/java/com/android/internal/os/ZygoteInit.java deleted file mode 100644 index 243b350a5..000000000 --- a/hiddenapi/stubs/src/main/java/com/android/internal/os/ZygoteInit.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.android.internal.os; - -public class ZygoteInit { -} diff --git a/hiddenapi/stubs/src/main/java/com/android/internal/util/XmlUtils.java b/hiddenapi/stubs/src/main/java/com/android/internal/util/XmlUtils.java deleted file mode 100644 index 3e35527e6..000000000 --- a/hiddenapi/stubs/src/main/java/com/android/internal/util/XmlUtils.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.android.internal.util; - -import org.xmlpull.v1.XmlPullParserException; - -import java.io.IOException; -import java.io.InputStream; -import java.util.HashMap; - -public class XmlUtils { - @SuppressWarnings("rawtypes") - public static final HashMap readMapXml(InputStream in) throws XmlPullParserException, IOException { - throw new UnsupportedOperationException("STUB"); - } -} diff --git a/hiddenapi/stubs/src/main/java/com/android/server/LocalServices.java b/hiddenapi/stubs/src/main/java/com/android/server/LocalServices.java deleted file mode 100644 index 06717abf4..000000000 --- a/hiddenapi/stubs/src/main/java/com/android/server/LocalServices.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.android.server; - -public class LocalServices { - - public static T getService(Class type) { - throw new UnsupportedOperationException("STUB"); - } -} diff --git a/hiddenapi/stubs/src/main/java/com/android/server/SystemService.java b/hiddenapi/stubs/src/main/java/com/android/server/SystemService.java deleted file mode 100644 index 2f678e8a2..000000000 --- a/hiddenapi/stubs/src/main/java/com/android/server/SystemService.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.android.server; - -public abstract class SystemService { -} diff --git a/hiddenapi/stubs/src/main/java/com/android/server/SystemServiceManager.java b/hiddenapi/stubs/src/main/java/com/android/server/SystemServiceManager.java deleted file mode 100644 index d9e2a920e..000000000 --- a/hiddenapi/stubs/src/main/java/com/android/server/SystemServiceManager.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.android.server; - -import java.util.ArrayList; - -public class SystemServiceManager { - private final ArrayList mServices = new ArrayList<>(); -} diff --git a/hiddenapi/stubs/src/main/java/com/android/server/am/ActivityManagerService.java b/hiddenapi/stubs/src/main/java/com/android/server/am/ActivityManagerService.java deleted file mode 100644 index 2d51101f2..000000000 --- a/hiddenapi/stubs/src/main/java/com/android/server/am/ActivityManagerService.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.android.server.am; - -import com.android.server.SystemService; - -public class ActivityManagerService { - public static final class Lifecycle extends SystemService { - public ActivityManagerService getService() { - throw new UnsupportedOperationException("STUB"); - } - private ProcessRecord findProcessLocked(String process, int userId, String callName) { - throw new UnsupportedOperationException("STUB"); - } - } -} diff --git a/hiddenapi/stubs/src/main/java/com/android/server/am/ProcessRecord.java b/hiddenapi/stubs/src/main/java/com/android/server/am/ProcessRecord.java deleted file mode 100644 index 8947ce02f..000000000 --- a/hiddenapi/stubs/src/main/java/com/android/server/am/ProcessRecord.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.android.server.am; - -public class ProcessRecord { - String processName = null; -} diff --git a/hiddenapi/stubs/src/main/java/dalvik/system/BaseDexClassLoader.java b/hiddenapi/stubs/src/main/java/dalvik/system/BaseDexClassLoader.java deleted file mode 100644 index 4979dc44f..000000000 --- a/hiddenapi/stubs/src/main/java/dalvik/system/BaseDexClassLoader.java +++ /dev/null @@ -1,17 +0,0 @@ -package dalvik.system; - -import java.nio.ByteBuffer; - -public class BaseDexClassLoader extends ClassLoader { - public BaseDexClassLoader(ByteBuffer[] dexFiles, ClassLoader parent) { - throw new RuntimeException("Stub!"); - } - - public BaseDexClassLoader(ByteBuffer[] dexFiles, String librarySearchPath, ClassLoader parent) { - throw new RuntimeException("Stub!"); - } - - public String getLdLibraryPath() { - throw new RuntimeException("Stub!"); - } -} diff --git a/hiddenapi/stubs/src/main/java/dalvik/system/VMRuntime.java b/hiddenapi/stubs/src/main/java/dalvik/system/VMRuntime.java deleted file mode 100644 index 692b45694..000000000 --- a/hiddenapi/stubs/src/main/java/dalvik/system/VMRuntime.java +++ /dev/null @@ -1,15 +0,0 @@ -package dalvik.system; - -public class VMRuntime { - - public static VMRuntime getRuntime() { - throw new RuntimeException("Stub!"); - } - - // Use `Process.is64Bit()` instead - public native boolean is64Bit(); - - public native String vmInstructionSet(); - - public native boolean isJavaDebuggable(); -} diff --git a/hiddenapi/stubs/src/main/java/org/xmlpull/v1/XmlPullParserException.java b/hiddenapi/stubs/src/main/java/org/xmlpull/v1/XmlPullParserException.java deleted file mode 100644 index 220847ba0..000000000 --- a/hiddenapi/stubs/src/main/java/org/xmlpull/v1/XmlPullParserException.java +++ /dev/null @@ -1,4 +0,0 @@ -package org.xmlpull.v1; - -public class XmlPullParserException extends Throwable { -} diff --git a/hiddenapi/stubs/src/main/java/sun/misc/CompoundEnumeration.java b/hiddenapi/stubs/src/main/java/sun/misc/CompoundEnumeration.java deleted file mode 100644 index 26eeedc10..000000000 --- a/hiddenapi/stubs/src/main/java/sun/misc/CompoundEnumeration.java +++ /dev/null @@ -1,34 +0,0 @@ -package sun.misc; - -import java.util.Enumeration; -import java.util.NoSuchElementException; - -public class CompoundEnumeration implements Enumeration { - private final Enumeration[] enums; - private int index = 0; - - public CompoundEnumeration(Enumeration[] enums) { - this.enums = enums; - } - - private boolean next() { - while (index < enums.length) { - if (enums[index] != null && enums[index].hasMoreElements()) { - return true; - } - index++; - } - return false; - } - - public boolean hasMoreElements() { - return next(); - } - - public E nextElement() { - if (!next()) { - throw new NoSuchElementException(); - } - return enums[index].nextElement(); - } -} diff --git a/hiddenapi/stubs/src/main/java/sun/net/www/ParseUtil.java b/hiddenapi/stubs/src/main/java/sun/net/www/ParseUtil.java deleted file mode 100644 index a3755eeca..000000000 --- a/hiddenapi/stubs/src/main/java/sun/net/www/ParseUtil.java +++ /dev/null @@ -1,7 +0,0 @@ -package sun.net.www; - -public class ParseUtil { - public static String encodePath(String path, boolean flag) { - throw new RuntimeException("Stub!"); - } -} diff --git a/hiddenapi/stubs/src/main/java/sun/net/www/protocol/jar/Handler.java b/hiddenapi/stubs/src/main/java/sun/net/www/protocol/jar/Handler.java deleted file mode 100644 index 838a47e55..000000000 --- a/hiddenapi/stubs/src/main/java/sun/net/www/protocol/jar/Handler.java +++ /dev/null @@ -1,4 +0,0 @@ -package sun.net.www.protocol.jar; - -public abstract class Handler extends java.net.URLStreamHandler { -} diff --git a/hiddenapi/stubs/src/main/java/xposed/dummy/XResourcesSuperClass.java b/hiddenapi/stubs/src/main/java/xposed/dummy/XResourcesSuperClass.java deleted file mode 100644 index 16f38f301..000000000 --- a/hiddenapi/stubs/src/main/java/xposed/dummy/XResourcesSuperClass.java +++ /dev/null @@ -1,24 +0,0 @@ -package xposed.dummy; - -import android.content.res.Resources; - -/** - * This class is used as super class of XResources. - * - * This implementation isn't included in the .dex file. Instead, it's created on the device. - * Usually, it will extend Resources, but some ROMs use their own Resources subclass. - * In that case, XResourcesSuperClass will extend the ROM's subclass in an attempt to increase - * compatibility. - */ -public class XResourcesSuperClass extends Resources { - /** Dummy, will never be called (objects are transferred to this class only). */ - protected XResourcesSuperClass() { - super(null, null, null); - throw new UnsupportedOperationException(); - } - - protected XResourcesSuperClass(ClassLoader classLoader) { - super(classLoader); - throw new UnsupportedOperationException(); - } -} diff --git a/hiddenapi/stubs/src/main/java/xposed/dummy/XTypedArraySuperClass.java b/hiddenapi/stubs/src/main/java/xposed/dummy/XTypedArraySuperClass.java deleted file mode 100644 index cefd760bd..000000000 --- a/hiddenapi/stubs/src/main/java/xposed/dummy/XTypedArraySuperClass.java +++ /dev/null @@ -1,20 +0,0 @@ -package xposed.dummy; - -import android.content.res.Resources; -import android.content.res.TypedArray; - -/** - * This class is used as super class of XResources.XTypedArray. - * - * This implementation isn't included in the .dex file. Instead, it's created on the device. - * Usually, it will extend TypedArray, but some ROMs use their own TypedArray subclass. - * In that case, XTypedArraySuperClass will extend the ROM's subclass in an attempt to increase - * compatibility. - */ -public class XTypedArraySuperClass extends TypedArray { - /** Dummy, will never be called (objects are transferred to this class only). */ - protected XTypedArraySuperClass(Resources resources) { - super(resources); - throw new UnsupportedOperationException(); - } -} From 125ef66d3d25f063edc670c6617665453b4630ed Mon Sep 17 00:00:00 2001 From: Ximin Luo Date: Tue, 29 Aug 2023 13:31:59 +0100 Subject: [PATCH 7/7] OPTIONAL: Update UI strings for multi-user --- app/src/main/res/values-ar/strings.xml | 2 +- app/src/main/res/values-ast-rES/strings.xml | 2 +- app/src/main/res/values-az/strings.xml | 2 +- app/src/main/res/values-bg/strings.xml | 2 +- app/src/main/res/values-bi/strings.xml | 2 +- app/src/main/res/values-bn/strings.xml | 2 +- app/src/main/res/values-bs/strings.xml | 2 +- app/src/main/res/values-ca/strings.xml | 2 +- app/src/main/res/values-cs/strings.xml | 2 +- app/src/main/res/values-da/strings.xml | 2 +- app/src/main/res/values-de/strings.xml | 2 +- app/src/main/res/values-el/strings.xml | 2 +- app/src/main/res/values-es/strings.xml | 2 +- app/src/main/res/values-eu/strings.xml | 2 +- app/src/main/res/values-fa/strings.xml | 2 +- app/src/main/res/values-fi/strings.xml | 2 +- app/src/main/res/values-fr/strings.xml | 2 +- app/src/main/res/values-he/strings.xml | 2 +- app/src/main/res/values-hi/strings.xml | 2 +- app/src/main/res/values-hr/strings.xml | 2 +- app/src/main/res/values-hu/strings.xml | 2 +- app/src/main/res/values-in/strings.xml | 2 +- app/src/main/res/values-it/strings.xml | 2 +- app/src/main/res/values-ja/strings.xml | 2 +- app/src/main/res/values-kn/strings.xml | 2 +- app/src/main/res/values-ko/strings.xml | 2 +- app/src/main/res/values-ku/strings.xml | 2 +- app/src/main/res/values-ky/strings.xml | 2 +- app/src/main/res/values-ml-rIN/strings.xml | 2 +- app/src/main/res/values-ms/strings.xml | 2 +- app/src/main/res/values-nb/strings.xml | 2 +- app/src/main/res/values-nl/strings.xml | 2 +- app/src/main/res/values-pl/strings.xml | 2 +- app/src/main/res/values-pt-rBR/strings.xml | 2 +- app/src/main/res/values-pt/strings.xml | 2 +- app/src/main/res/values-ro/strings.xml | 2 +- app/src/main/res/values-ru/strings.xml | 2 +- app/src/main/res/values-sk/strings.xml | 2 +- app/src/main/res/values-sl/strings.xml | 2 +- app/src/main/res/values-sr-rCS/strings.xml | 2 +- app/src/main/res/values-sr/strings.xml | 2 +- app/src/main/res/values-sv/strings.xml | 2 +- app/src/main/res/values-ta/strings.xml | 2 +- app/src/main/res/values-th/strings.xml | 2 +- app/src/main/res/values-tr/strings.xml | 2 +- app/src/main/res/values-uk/strings.xml | 2 +- app/src/main/res/values-ur-rPK/strings.xml | 2 +- app/src/main/res/values-vi/strings.xml | 2 +- app/src/main/res/values-zh-rCN/strings.xml | 2 +- app/src/main/res/values-zh-rTW/strings.xml | 2 +- app/src/main/res/values-zh/strings.xml | 2 +- 51 files changed, 51 insertions(+), 51 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 7ec006447..1bfb56492 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -293,7 +293,7 @@ تطبيق القواعد على تبديل الأوضاع تحميل وتطبيق القواعد عند التبديل بين ملفات التعريف تفعيل دعم تعدد المستخدمين - دعم تعدد المستخدمين للنظام (يعمل فقط في الوضع حيث يتم حظر العناصر المحددة) + دعم تعدد المستخدمين للنظام حماية إضافية - منع إلغاء تثبيت AFWall+ تفاصيل حركة البيانات diff --git a/app/src/main/res/values-ast-rES/strings.xml b/app/src/main/res/values-ast-rES/strings.xml index 1e1fc1557..f22f04e95 100644 --- a/app/src/main/res/values-ast-rES/strings.xml +++ b/app/src/main/res/values-ast-rES/strings.xml @@ -293,7 +293,7 @@ Aplicar regles na conmutación de perfiles Carga y aplica les regles al camudar de perfiles Habilitar sofitu multi-usuariu - Sofita la carauterística de multi-usuariu d\'Android (namái furrula nel mou u se bloquien los elementos bloquiaos) + Sofita la carauterística de multi-usuariu d\'Android Seguranza adicional - Evita la desinstalación d\'AFWall+ Detalles de tráficu diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index b53801b11..f3a927ff2 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -293,7 +293,7 @@ Apply rules on profile switch Load and apply rules when switching profiles Enable multi-user support - Support Android multi-user (only works in mode where selected items are blocked) + Support Android multi-user Additional Security - Prevent uninstalling AFWall+ Trafik təfsilatları diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index ddba86d6c..dec691180 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -293,7 +293,7 @@ Прилагай при смяна Зареждане и прилагане правила при превключване между профили Разреши многопотребителски режим - Поддръжка на Андроид многопотребителски режим (работи само в режим, където избраните елементи са блокирани) + Поддръжка на Андроид многопотребителски режим Допълнителна защита - предотвратява деинсталирането на AFWall + Трафик детайли diff --git a/app/src/main/res/values-bi/strings.xml b/app/src/main/res/values-bi/strings.xml index cd871ef48..cf8451bb7 100644 --- a/app/src/main/res/values-bi/strings.xml +++ b/app/src/main/res/values-bi/strings.xml @@ -293,7 +293,7 @@ Apply rules on profile switch Load and apply rules when switching profiles Enable multi-user support - Support Android multi-user (only works in mode where selected items are blocked) + Support Android multi-user Additional Security - Prevent uninstalling AFWall+ Traffic details diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index bdddf8660..87362eb61 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -293,7 +293,7 @@ নিয়ম প্রয়োগ করুন প্রোফাইল পরিবর্তনের সময় এটি লোড এবং প্রয়োগ করবে প্রোফাইল পরিবর্তনের সময় একাধিক-ব্যবহারকারী সমর্থন সক্রিয় করুন - অ্যান্ড্রয়েড মাল্টি-ইউজার (শুধুমাত্র কাজ যেখানে নির্বাচিত বিষয়োপকরণসমূহ আবদ্ধ পরিমণ্ডলে) সমর্থন + অ্যান্ড্রয়েড মাল্টি-ইউজার সমর্থন বাড়তি নিরাপত্তা - AFWall + আনইনস্টল প্রতিরোধ বিস্তারিত ট্রাফিক diff --git a/app/src/main/res/values-bs/strings.xml b/app/src/main/res/values-bs/strings.xml index c3e95369f..be1fb099b 100644 --- a/app/src/main/res/values-bs/strings.xml +++ b/app/src/main/res/values-bs/strings.xml @@ -293,7 +293,7 @@ Primjeni pravila kod zamjene profila Učitaj i primjeni pravila kod zamjene profila Uključi podršku za više korisnika - Podrška za Android opciju više korisnika (samo radi u modu gdje su označene stvari blokirane) + Podrška za Android opciju više korisnika Dodatna sigurnost - Spriječi brisanje AFWall+ Detalji prometa diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 97e5648a4..7bf754a41 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -293,7 +293,7 @@ Aplica les regles al canviar de perfil Load and apply rules when switching profiles Enable multi-user support - Support Android multi-user (only works in mode where selected items are blocked) + Support Android multi-user Additional Security - Prevent uninstalling AFWall+ Traffic details diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index b4c244cb9..dd5318310 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -294,7 +294,7 @@ Aplikovat pravidla na přepínač profilů Načíst a aplikovat pravidla při přepínání profilů Povolit podporu více uživatelů - Podpora více uživatelů Androidu (pouze v módu kde vybrané položky jsou blokované) + Podpora více uživatelů Androidu Dodatečné zabezpečení - zabránit odinstalaci AFWall+ Podrobnosti o provozu diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 06e700262..4572b86f0 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -293,7 +293,7 @@ Anvende regler på profil switch Indlæse og anvende regler, når du skifter profiler Aktivere understøttelse af flere brugere - Understøtter Android multi bruger (virker kun i tilstanden hvor markerede elementer er blokeret) + Understøtter Android multi bruger Ekstra sikkerhed - undgå afinstallere AFWall + Trafik detaljer diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index e632c1506..0c28bf628 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -293,7 +293,7 @@ Regeln bei Profilwechsel anwenden Regeln beim Profilwechsel laden und anwenden Multi-User-Unterstützung - Multi-User-Unterstützung aktivieren (nur im Modus möglich, in dem ausgewählte Elemente blockiert werden) + Multi-User-Unterstützung aktivieren Erweiterte Sicherheit - Deinstallation von AFWall+ verhindern Traffic-Details diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 57049266b..d26895ce7 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -293,7 +293,7 @@ Εφαρμογή κανόνων κατά την αλλαγή προφίλ Φόρτωση και εφαρμογή κανόνων κατά την εναλλαγή προφίλ Ενεργοποίηση υποστήριξης πολλαπλών χρηστών - Υποστήριξη πολλαπλών χρηστών Android (μόνο στην λειτουργία όπου τα επιλεγμένα αντικείμενα είναι αποκλεισμένα) + Υποστήριξη πολλαπλών χρηστών Android Πρόσθετη Ασφάλεια - Αποτροπή απεγκατάστασης του AFWall+ Στατιστικά κίνησης δεδομένων diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 26c627abe..4c88c9e2a 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -293,7 +293,7 @@ Aplicar las reglas al cambiar de perfil Cargar y aplicar reglas al intercambiar perfiles Activar soporte multiusuario - Soporte multiusuario en Android (sólo funciona en modo dónde los elementos seleccionados están bloqueados) + Soporte multiusuario en Android Seguridad Adicional - Prevenir desinstalación de AFWall+ Detalles de tráfico diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 90aedce3d..2da16dab6 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -293,7 +293,7 @@ Aplikatu arauak profila aldatzean Kargatu eta aplikatu arauak profilak aldatzean Gaitu hainbat erabiltzailerentzako euskarria - Onartu hainbat Android erabiltzaile (Hautatutako elementuak blokeatuta dauden moduan besterik ez dabil) + Onartu hainbat Android erabiltzaile Segurtasun gehigarria - Eragotzi AFWall+ desinstalatzea Trafikoaren xehetasunak diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 2757a0f41..6926a2e3b 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -299,7 +299,7 @@ S-OFF پیکربندی شوند. اعمال قوانین در تعویض نمایه قوانین را در هر تعویض نمایه بارگذاری و اعمال کن فعال کردن پشتیبانی چند کاربره - از اندروید چند-کاربره پشتیبانی کن (تنها در حالتی کار می‌کند که موارد انتخاب شده مسدود هستند) + از اندروید چند-کاربره پشتیبانی کن امنیت اضافی - از لغو نصب +AFWall جلوگیری می کند جزئیات ترافیک diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index cd871ef48..cf8451bb7 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -293,7 +293,7 @@ Apply rules on profile switch Load and apply rules when switching profiles Enable multi-user support - Support Android multi-user (only works in mode where selected items are blocked) + Support Android multi-user Additional Security - Prevent uninstalling AFWall+ Traffic details diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 794327f2a..e8b9ee827 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -293,7 +293,7 @@ Appliquer les règles lors du changement de profil Chargement et application des règles lors du changement de profil Activer le mode multi-utilisateur - Mode multi-utilisateur Android (fonctionne uniquement si les éléments sélectionnés sont bloqués) + Mode multi-utilisateur Android Sécurité supplémentaire - Empêcher la désinstallation de AFWall+ Détails du trafic diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index 77cb371aa..1bc8d60d8 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -294,7 +294,7 @@ iptables.\nייתכן כי +AFWall לא יפעל כצפוי בשל מגבלה ז החל חוקים בהחלפת פרופיל טען והחל חוקים בעת החלפת פרופילים אפשר תמיכה במשתמשים מרובים - תמיכה בריבוי משתמשים של אנדרואיד (עובד רק במצב חסימת אפליקציות שנבחרו) + תמיכה בריבוי משתמשים של אנדרואיד אבטחה נוספת - מנע הסרת האפליקציה AFWall+ פרטי תעבורה diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 647e5d79e..047f98694 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -294,7 +294,7 @@ Apply rules on profile switch Load and apply rules when switching profiles Enable multi-user support - Support Android multi-user (only works in mode where selected items are blocked) + Support Android multi-user Additional Security - Prevent uninstalling AFWall+ Traffic details diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 13ea1b6e4..5da4eee3c 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -293,7 +293,7 @@ Primjeni pravila kod promjene profila Učitaj i primjeni pravila kod promjene profila Omogući podršku za više korisnika - Podrška za Android opciju s više korisnika (samo radi u načinu rada gdje su označene stvari blokirane) + Podrška za Android opciju s više korisnika Dodatna sigurnost - Spriječi deinstaliranje AFWall+ Detalji o prometu diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 46d91e306..438725126 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -293,7 +293,7 @@ Alkalmazza a szabályokat profil váltás esetén Szabályok betöltése és alkalmazása amikor profilt vált Több felhasználó támogatás engedélyezése - Android többfelhasználós mód támogatása (csak abban a módban működik, amiben a kiválasztott elemek le vannak tiltva) + Android többfelhasználós mód támogatása Kiegészítő biztonság - az AFWall+ eltávolításának megelőzése Forgalmi adatok diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 8faa37370..9b3f53d1d 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -293,7 +293,7 @@ terapkan aturan pd pergantian profil Muat dan terapkan aturan saat berganti profil Akfitkan multi-pengguna - Dukungan multi-pengguna Android (hanya bekerja pada mode dimana item terpilih diblokir) + Dukungan multi-pengguna Android Pengamanan Tambahan - Cegah uninstall AFWall+ Detail trafik diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 386c8f6a3..71a23006e 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -293,7 +293,7 @@ Applicare le regole quando si cambia profilo Carica e applica le regole al cambio dei profili Abilita il supporto multi-utente - Supporto multi-utenti di Android (funziona solo nella modalità in cui gli elementi selezionati sono bloccati) + Supporto multi-utenti di Android Protezione aggiuntiva - Impedisce la disinstallazione di AFWall + Dettagli del traffico diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 3c9e15f86..c76171463 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -296,7 +296,7 @@ プロファイル切り替え時にルールを適用 プロファイルの切り替え時にルールを読み込んで適用します マルチ ユーザーのサポートを有効にする - Android マルチ ユーザーをサポートします (選択した項目がブロックされるモードでのみ動作) + Android マルチ ユーザーをサポートします 追加のセキュリティ - AFWall+ のアンインストールを防止します トラフィック詳細 diff --git a/app/src/main/res/values-kn/strings.xml b/app/src/main/res/values-kn/strings.xml index cd871ef48..cf8451bb7 100644 --- a/app/src/main/res/values-kn/strings.xml +++ b/app/src/main/res/values-kn/strings.xml @@ -293,7 +293,7 @@ Apply rules on profile switch Load and apply rules when switching profiles Enable multi-user support - Support Android multi-user (only works in mode where selected items are blocked) + Support Android multi-user Additional Security - Prevent uninstalling AFWall+ Traffic details diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 3d34b8e2f..bdd9133a2 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -293,7 +293,7 @@ 프로필 교체시 규칙 적용 프로필 교체시 규칙을 재적용합니다. 다중사용자기능 허용 - 안드로이드 멀티유저 지원 (다만, 선택된 앱이 차단될 때만 사용가능) + 안드로이드 멀티유저 지원 기타보호기능 - AFWall+ 삭제 금지하기 트래픽 통계 diff --git a/app/src/main/res/values-ku/strings.xml b/app/src/main/res/values-ku/strings.xml index 2518d870c..51f2c63c9 100644 --- a/app/src/main/res/values-ku/strings.xml +++ b/app/src/main/res/values-ku/strings.xml @@ -293,7 +293,7 @@ Apply rules on profile switch Load and apply rules when switching profiles Enable multi-user support - Support Android multi-user (only works in mode where selected items are blocked) + Support Android multi-user Additional Security - Prevent uninstalling AFWall+ Traffic details diff --git a/app/src/main/res/values-ky/strings.xml b/app/src/main/res/values-ky/strings.xml index 5e95b030c..e807d86fd 100644 --- a/app/src/main/res/values-ky/strings.xml +++ b/app/src/main/res/values-ky/strings.xml @@ -293,7 +293,7 @@ Apply rules on profile switch Load and apply rules when switching profiles Enable multi-user support - Support Android multi-user (only works in mode where selected items are blocked) + Support Android multi-user Additional Security - Prevent uninstalling AFWall+ Traffic details diff --git a/app/src/main/res/values-ml-rIN/strings.xml b/app/src/main/res/values-ml-rIN/strings.xml index cd871ef48..cf8451bb7 100644 --- a/app/src/main/res/values-ml-rIN/strings.xml +++ b/app/src/main/res/values-ml-rIN/strings.xml @@ -293,7 +293,7 @@ Apply rules on profile switch Load and apply rules when switching profiles Enable multi-user support - Support Android multi-user (only works in mode where selected items are blocked) + Support Android multi-user Additional Security - Prevent uninstalling AFWall+ Traffic details diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml index 04366df84..4b64ae8f4 100644 --- a/app/src/main/res/values-ms/strings.xml +++ b/app/src/main/res/values-ms/strings.xml @@ -293,7 +293,7 @@ Aktifkan arahan pertukaran profil Memuatkan dan mengaktifkan arahan apabila menukar profil Aktifkan sokongan multi pengguna - Sokong pengguna multi Android (hanya berfungsi di mod terpilih yang telah disekat) + Sokong pengguna multi Android Keselamatan Tambahan - Mengelakkan AFWall+ dinyahpasang Maklumat trafik diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index e9a7ed03b..6b0b81675 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -293,7 +293,7 @@ Bruk regler ved profilbytte Last og bruk regler ved profilbytte Aktiver flerbrukerstøtte - Support Android multi-user (only works in mode where selected items are blocked) + Support Android multi-user Additional Security - Prevent uninstalling AFWall+ Trafikkdetaljer diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 6dab1fc04..cd4b1e76a 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -296,7 +296,7 @@ Regels toepassen bij wisselen profiel Regels laden en toepassen bij het wisselen van profiel Multi-user ondersteuning - Ondersteuning van Android multi-user (werkt alleen in de modus waar de geselecteerde items worden geblokkeerd) + Ondersteuning van Android multi-user Extra beveiliging - Voorkom verwijderen AFWall+ Details netwerkverkeer diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 6b1130014..f15974f22 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -293,7 +293,7 @@ Zastosuj reguły przy zmianie profilu Załaduj i zastosuj reguły podczas przełączania profili Włącz obsługę wielu użytkowników - Wsparcie dla wielu użytkowników (działa tylko w trybie, w którym wybrane elementy są blokowane) + Wsparcie dla wielu użytkowników Dodatkowe zabezpieczenie - Zapobiegaj odinstalowaniu AFWall+ Szczegóły ruchu diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index d7452e951..f72585ad0 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -293,7 +293,7 @@ Aplicar regras na mudança de perfil Carregar e aplicar regras ao trocar de perfil Ativar suporte multi-usuário - Suporte multi-usuário Android (só funciona no modo onde os itens selecionados são bloqueados) + Suporte multi-usuário Android Segurança adicional - evitar desinstalar AFWall + Detalhes de tráfego diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index aa4cc07bb..06b87e88d 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -293,7 +293,7 @@ Aplicar regras na mudança de perfil Carregar e aplicar regras ao trocar de prfil Ativar suporte a vários utilizadores - Support Android multi-user (only works in mode where selected items are blocked) + Support Android multi-user Segurança adicional - Impedir a desinstalação do AFWall+ Detalhes de tráfego diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 289beca22..14da1fe83 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -293,7 +293,7 @@ Aplică regulile la schimbarea profilului Încarcă și aplică regulile la comutarea profilurilor Activează suportul multi-utilizator - Suportă multi-user Android (funcţionează numai în modul în care elementele selectate sunt blocate) + Suportă multi-user Android Securitate suplimentară - Previne dezinstalarea AFWall+ Detalii trafic diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index d49928947..d45cb3c90 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -294,7 +294,7 @@ Применять правила при смене профиля Загрузить и применить правила при переключении профилей Включить многопользовательскую поддержку - Поддержка нескольких пользователей Android (работает только в режиме, блокирующем выбранные элементы) + Поддержка нескольких пользователей Android Дополнительная безопасность - предотвратить удаление AFWall+ Подробности траффика diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index e6ba80094..c41790068 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -293,7 +293,7 @@ Aplikovať pravidlá pri prepnutí profilov Načítať a aplikovať pravidlá pri prepínaní profilov Povoliť podporu viacerých užívateľov - Podpora viacerých užívateľov systému Android (funguje iba v režime, kde sú blokované vybrané položky) + Podpora viacerých užívateľov systému Android Dodatočné zabezpečenie - zabráni odinštalácii AFWall + Detaily komunikácie diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index 039c7d031..a92e04169 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -293,7 +293,7 @@ Uveljavi pravila Uveljavi pravila Iptables ob vsaki zamenjavi profila Vklopi večuporabniški način - Podpora za androidni večuporabniški način (deluje le v načinu, kjer so izbrane aplikacije blokirane) + Podpora za androidni večuporabniški način Varnostna nastavitev - Prepreči odstranitev AFWall+ Podatki o prometu diff --git a/app/src/main/res/values-sr-rCS/strings.xml b/app/src/main/res/values-sr-rCS/strings.xml index db76b90c3..193d668d0 100644 --- a/app/src/main/res/values-sr-rCS/strings.xml +++ b/app/src/main/res/values-sr-rCS/strings.xml @@ -293,7 +293,7 @@ Primeni pravila pri promeni profila Učitaj i primeni pravila kod zamene profila Uključi podršku za više korisnika - Podrška za Android opciju više korisnika (samo radi u modu gde su označene stvari blokirane) + Podrška za Android opciju više korisnika Dodatna sigurnost - Spreči brisanje AFWall+ aplikacije Detalji saobraćaja diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index 0776a9487..8398ee790 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -293,7 +293,7 @@ Примени правила при промени профила Учитај и примени правила када се мења профил Укључи вишекорисничку подршку - Подршка за више корисника (ради само када се блокирају изабране ставке) + Подршка за више корисника Додатна сигурност — Заштити AFWall+ од деинсталације Детаљи саобраћаја diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 7a53ec5f3..33a4d9152 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -293,7 +293,7 @@ Tillämpa regler vid profilbyte Läs in och tillämpa regler vid byte av profil Aktivera stöd för flera användare - Android fleranvändarstöd (fungerar bara i läge där markerade objekt blockeras) + Android fleranvändarstöd Extra säkerhet - förhindra att AFWall+ avinstalleras Detaljerad trafikinformation diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index ae1cc2249..cce53f8a4 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -293,7 +293,7 @@ Apply rules on profile switch Load and apply rules when switching profiles Enable multi-user support - Support Android multi-user (only works in mode where selected items are blocked) + Support Android multi-user Additional Security - Prevent uninstalling AFWall+ Traffic details diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index 328bef045..6fd5c28cf 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -293,7 +293,7 @@ Apply rules on profile switch Load and apply rules when switching profiles Enable multi-user support - Support Android multi-user (only works in mode where selected items are blocked) + Support Android multi-user Additional Security - Prevent uninstalling AFWall+ Traffic details diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 922ceceae..a7bd0b39e 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -293,7 +293,7 @@ Profil geçişinde kuralları uygula Profiller değiştirildiğinde kuralları yükle ve uygula Çoklu kullanıcı desteğini etkinleştir - Android çoklu kullanıcı desteği (sadece seçilenlerin engellendiği modda çalışır) + Android çoklu kullanıcı desteği Ek Güvenlik - AFWall+ kaldırılmasını önle Trafik detayları diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index d136a2135..d4e0e9215 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -293,7 +293,7 @@ Застосувати правила при перемиканні профілю Завантажити і застосувати правила при перемиканні профілю Увімкнути підтримку декількох користувачів - Підтримка декількох користувачів Android (працює тільки в режимі, який блокує вибрані елементи) + Підтримка декількох користувачів Android Додатковий захист - запобігання видаленню AFWall+ Подробиці трафіку diff --git a/app/src/main/res/values-ur-rPK/strings.xml b/app/src/main/res/values-ur-rPK/strings.xml index c73959a11..97272ad2e 100644 --- a/app/src/main/res/values-ur-rPK/strings.xml +++ b/app/src/main/res/values-ur-rPK/strings.xml @@ -293,7 +293,7 @@ Apply rules on profile switch Load and apply rules when switching profiles Enable multi-user support - Support Android multi-user (only works in mode where selected items are blocked) + Support Android multi-user Additional Security - Prevent uninstalling AFWall+ Traffic details diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 0a774b7a2..582255470 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -293,7 +293,7 @@ Áp dụng quy tắc khi đổi cấu hình Tải và áp dụng quy tắc khi đổi cấu hình Bật hỗ trợ nhiều người dùng - Hỗ trợ nhiều người dùng trên Android (chỉ hoạt động trong chế độ đánh dấu chặn) + Hỗ trợ nhiều người dùng trên Android Tăng cường bảo mật - Ngăn gỡ cài đặt AFWall+ Chi tiết lưu lượng diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 8ba48ca1e..8d5b37277 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -294,7 +294,7 @@ 切换配置时应用规则 切换配置文件时加载和应用规则 启用多用户支持 - 支持 Android 多用户 (仅适用于黑名单模式) + 支持 Android 多用户 额外安全措施 - 防止卸载 AFWall+ 流量详情 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index f02b4777a..a443990ce 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -293,7 +293,7 @@ 設定檔案切換時套用規則 切換設定檔案時將載入並套用規則 啟用多使用者支援 - 支援 Android 多使用者 (僅適用黑名單模式) + 支援 Android 多使用者 加強安全 - 防止移除 AFWall+ 流量狀況 diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index c1f83b15f..a9f24bf95 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -293,7 +293,7 @@ 設定檔案切換時套用規則 切換設定檔案時將載入並套用規則 啟用多使用者支援 - 支援 Android 多使用者 (僅適用黑名單模式) + 支援 Android 多使用者 加強安全 - 防止移除 AFWall+ 流量狀況