d4rken-org / permission-pilot Goto Github PK
View Code? Open in Web Editor NEWAndroid permission explorer ๐งโโ๏ธ
License: GNU General Public License v3.0
Android permission explorer ๐งโโ๏ธ
License: GNU General Public License v3.0
In the attached screenshot, you'll see that the File Manager+ app is showing up along with details of its Twin underneath. The problem here is the install source shown for the app installed in the Main Profile. In this case, it should be SAI, and not Shelter, because Shelter is the install source for the app installed in the Work Profile.
The refresh button seem doesn't work, i even tried tapping it then doing nothing for a full 2 minutes, waiting if it refreshes and if the modification i did to a app's permission shows up but nothing really happened.
This is a bug I discovered during our discussion here:
The app Fx is installed only in the Work Profile. But it shows up in the Apps Tab along with other apps in the Main Profile.
The App Details page further shows the twin app as being installed in the Work Profile. The fact is there is no twin app in this case. There is only one installation, and it is in the Work Profile.
Please look into this.
If an app is installed in both the Main Profile and the Work Profile, only one of them is shown in the Apps tab.
In the attached screenshot, you'll see that the File Manager is showing up only once, as being installed by Shelter app. So this app is from the Work Profile.
I have the same app installed in the main profile too using SAI. It is not showing up.
Screenshot_2022-07-17-20-15-12-95_ce34de6323cfaeb7a2880d42987990b1
It works now, it doesn't crash at start (Issue #8).
But when i do this:
Wait for apps to load>tap any app>tap a permission, it crashes, it supposed to open the app's permission settings page
On Permissions tab, when i tap a permission on Permissions tab, it supposed to list apps that uses that perm, but it just crashes
(I'll upload a log tomorrow or the day after)
Please add the briefcase icon used by Android for apps installed in Work Profile.
Originally posted by @TheMysticS in #1 (comment)
In the Apps tab, can we show the System Apps with some sort of an indicator?
Some suggestions:
The whole row for System apps will have a very light (very faint) orange background.
There will be a small circular orange coloured dot on the top right corner of the app icon.
'System' text would be written underneath the app icon.
In the Sort categories (in Apps tab), can we have an additional sort category called 'Install Source'?
This will sort all apps by their install sources.
Screenshot_2022-07-18-10-49-16-56_ce34de6323cfaeb7a2880d42987990b1
It will basically list all the sources in collapsed form:
User can expand each category to view apps installed using each source. Sideloaded apps will be further sorted by the Installer Source, i.e. all apps installed using SAI will be sorted together alphabetically, those installed using Chrome will appear together, those installed using PC/ ADB will appear together, etc.
In fact, a sub-filter by source in this section would be great too.
When clicking on an app in the Apps tab, the new page shows all the permissions for the app.
Is it possible to provide a summary of those 30 odd permissions in a very simplified way, something like this:
This will be followed by all the permissions in detail, as it exists now.
The idea is to give the user a quick glance of the status of all permissions that is available for modification within System Settings.
Each of the item above is a link to the corresponding page in System Settings for the app, useful if the user wants to make any change. Links would work only in the PRO version.
It is more apt to use 'Clones' in place of 'Twins'. This is because users can have multiple profiles (Work Profile as well as Multi-Users). So if an app is installed in 3 or more profiles, then 'Twins' becomes an incorrect term.
Originally posted by @TheMysticS in #1 (comment)
There is this bug that shows wrong app icon for installer.
As you can see in the attached recording, most of the apps on top show the icon for SAI as the installer icon. However, if I click on any and return, the icon changes to the 'human' icon, which is what shows up for all pre-installed apps.
Can you create a new filter for apps that are NOT installed in the Main Profile?
And if there is a way to sort/ club them per profile, that would be great.
Yup it crashes on my device
This refers to the following ticket:
The Siblings are not showing up under SharedUserID.
App version v.0.2.4
I'm using Android 12 (Oxygen OS).
By @TheMysticS from d4rken-org/sdmaid#5609
The idea I spoke about earlier is about an app that will list all app permissions in one place. Currently, Android shows app permissions in 3 different places:
App Info page
Special Access
Permissions Manager
In order to control or just see what permissions an app has access to, the user has to go to 3 different places now.This new app I'm suggesting will basically list every single permission an app has requested in one place, giving the user a bird's eye view of app permissions.
It will have two tabs at the bottom (or top):
Apps: This will list all the apps installed. Clicking on any app will list every single permission that the app has requested, including those that show up under Permissions Manager and Special Access, along with their status (ON/ OFF, Allowed/ Disallowed, etc.)
Permissions: This will list every single permission such as Contacts, Microphone, Camera, etc., including those that show up under Permissions Manager and Special Access. Clicking on each will show all the apps that currently has access to that permission.
This will also include internet permissions, SharedUserID status!
In both the above cases, it will be nice to segregate the output in two sections: One where apps have been allowed a permission or permissions that an app currently has access to, and another section where the same is denied.
Due to limitations of Android, this app will not allow for controlling permissions from within the app, atleast not without root. Instead, it will provide a bird's eye view of the entire permission set available to each app, and also provide a shortcut to the appropriate System Settings page, if the user wants to change any.
Currently, there is not a single app that can do this. So you may consider making one.
Thanks.
Under App Details, if I click on any permission, it opens a new page listing all apps having that permission. Clicking on any app opens the app details page showing all permissions for that app. So it keeps going back and forth within the app.
Instead of doing this, if user clicks on a permission that can be modified, he should instead be taken to the System Settings page for that app, so he can make any change, as required.
In this context, it would be nice if clicking on the back button would take the user directly back to this app, to the same place from where he launched the System Settings page. It would be inconvenient if the back button starts going one level up in System Settings with each click, until the user is on the home screen, and then he has to launch this app.
I'm not sure if this is something under developer control, but this is something very convenient to have.
On the Apps tab, apps are sorted by 'Last Updated'. If the user chooses a different sort type, clicks on any app to see details, and then returns to the main screen, apps are again sorted by 'Last Updated'.
Can you make the app keep the sort order chosen by the user? It should change only when the user changes it.
Can you add two more labels here:
โข Google Play Store
โข OEM Store (better than using actual names to save space, unless you can program it to display the correct name of the Store based on the brand of the phone)
Originally posted by @TheMysticS in #1 (comment)
I'm not sure what your plans for the Permissions tab is.
For those 30 or so permissions that user can control via System Settings: Will you be displaying those with the same names as they appear in System Settings? And club all the others under Additional Permissions?
If you intend keeping the Permissions tab as it is now, then can you implement a Filter Bar like this:
Here, the icons will all be of the same colour (green is fine). Tapping on any of them will list all apps which have that permission enabled. This bar will be scrollable horizontally to accomodate the remaining permissions not visible currently.
Originally posted by @TheMysticS in #1 (comment)
On the Apps tab, when clicking on a permission icon that is enabled, we see a short explanation of the permission at the bottom with the 'Show' button:
But this doesn't show up for permissions that are disabled (grey icons).
Can you make this standard for all icons?
The only difference will be that the explanation at the bottom will NOT display the 'Show' button when user clicks a disabled permission (grey icon), because the purpose of 'Show' is to list all apps which have that permission ENABLED.
EDIT
Thinking about it again, you might as well keep the SHOW button for all icons. There is nothing wrong in showing it for all icons.
What do you think?
The permission status indicator icons can be improved in the following ways:
Make them slightly bigger or more sensitive. Currently, tapping on them often simply opens the App Details page if there is slight mismatch in accuracy. There is already a message that gets displayed at the bottom, explaining what that permission is all about. Clicking on 'Show' launches that permission screen, listing all apps that have access to that permission.
You can consider implementing a scrollable bar (show a small indicator for the same) to accommodate more permissions there.
If a long-press action can be implemented, that would be great. Long-pressing on any icon would open the corresponding System Settings permissions page for that app.
This isn't a bug, but the average user is most likely to use these terms when searching for permissions:
Unfortunately, the system uses a different set of terms for these permissions, and as a result a search for these (and others) terms yields a blank result.
Can something be done about it to 'intelligently' show permissions that the user is trying to search:
Screenshot_2022-07-17-20-36-38-75_ce34de6323cfaeb7a2880d42987990b1
Screenshot_2022-07-17-20-37-03-24_ce34de6323cfaeb7a2880d42987990b1
Screenshot_2022-07-17-20-39-10-19_ce34de6323cfaeb7a2880d42987990b1
Hi @d4rken, I just wonder as my library scanner reports Bugsnag: is it opt-in, so I can override the Tracking
marker for your app?
Under the new filter 'Multiple Profiles', apps installed in just one profile other than Main Profile also show up.
Ideally, apps installed in more than one profile only must show up in this filter (going by what the name suggests), i.e. only apps with TWINS must show up here.
If an app is installed only in one profile (Main Profile or Work Profile or Multi-User), it must NOT show up in this filter.
Under App Details, the name of the installer source is duplicated in v0.2.2:
Screenshot_2022-07-18-20-07-50-80_ce34de6323cfaeb7a2880d42987990b1
Screenshot_2022-07-18-20-08-30-42_ce34de6323cfaeb7a2880d42987990b1
On the Apps Tab, can you show all apps installed in other profiles (like Work Profile or Multi-Users) with a briefcase badge on them?
And a filter for the same? As you said, these apps will not show the permissions status indicators under them, but only show up there to inform the user about having been installed in a different profile.
This is only possible in the main profile, and that is completely fine.
In the Apps tab, if I click on the app icon, it opens the App Info page under System Settings. This is a nice feature.
Likewise, can you make this a universal setting?
By that I mean clicking on the App Icon in Permissions Details too will launch the App Info page within System Settings. The current behaviour of showing all permissions for that app will remain if the user taps anywhere else in the app row.
I think it might be time...
Make debugging a bit easier ๐
Do we? Do I? want this?
vivo app store:
com.vivo.appstore
oppo app store:com.oppo.market
Huawei app store:com.huawei.appmarket
Samsung app store:com.sec.android.app.samsungapps
Xiaomi app store:com.xiaomi.mipicks
I've added these, see:
https://github.com/d4rken/mystic-permissions/blob/c5551253f7b35b572e9a2975f901fd6c025ad9ca/app/src/main/java/eu/darken/myperm/apps/core/known/ZKnownPkgs.kt#L14-L40
Originally posted by @d4rken in #5 (comment)
Can you use the official names for the Stores like this:
The name for Store from Huawei is likely correct, but I'm not sure.
Originally posted by @TheMysticS in #1 (comment)
@d4rken I'm not sure if this is the exact issue they're talking about, but I get this crash at runtime (version 0.2.0).
My device is a Samsung Note 9 running Android 10.
FATAL EXCEPTION: DefaultDispatcher-worker-6
Process: eu.darken.myperm, PID: 16028
java.lang.NoSuchMethodError: No virtual method getInstallSourceInfo(Ljava/lang/String;)Landroid/content/pm/InstallSourceInfo; in class Landroid/content/pm/PackageManager; or its super classes (declaration of 'android.content.pm.PackageManager' appears in /system/framework/framework.jar)
at eu.darken.myperm.apps.core.installer.InstallerInfoKt.getInstallerInfoLegacy(InstallerInfo.kt:69)
at eu.darken.myperm.apps.core.installer.InstallerInfoKt.getInstallerInfo(InstallerInfo.kt:54)
at eu.darken.myperm.apps.core.AppRepo.toDefaultApp(AppRepo.kt:82)
at eu.darken.myperm.apps.core.AppRepo.access$toDefaultApp(AppRepo.kt:26)
at eu.darken.myperm.apps.core.AppRepo$apps$1.invokeSuspend(AppRepo.kt:43)
at eu.darken.myperm.apps.core.AppRepo$apps$1.invoke(Unknown Source:8)
at eu.darken.myperm.apps.core.AppRepo$apps$1.invoke(Unknown Source:4)
at kotlinx.coroutines.flow.FlowKt__MergeKt$mapLatest$1.invokeSuspend(Merge.kt:214)
at kotlinx.coroutines.flow.FlowKt__MergeKt$mapLatest$1.invoke(Unknown Source:13)
at kotlinx.coroutines.flow.FlowKt__MergeKt$mapLatest$1.invoke(Unknown Source:4)
at kotlinx.coroutines.flow.internal.ChannelFlowTransformLatest$flowCollect$3$1$2.invokeSuspend(Merge.kt:34)
at kotlinx.coroutines.flow.internal.ChannelFlowTransformLatest$flowCollect$3$1$2.invoke(Unknown Source:8)
at kotlinx.coroutines.flow.internal.ChannelFlowTransformLatest$flowCollect$3$1$2.invoke(Unknown Source:4)
at kotlinx.coroutines.intrinsics.UndispatchedKt.startCoroutineUndispatched(Undispatched.kt:55)
at kotlinx.coroutines.CoroutineStart.invoke(CoroutineStart.kt:112)
at kotlinx.coroutines.AbstractCoroutine.start(AbstractCoroutine.kt:126)
at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch(Builders.common.kt:56)
at kotlinx.coroutines.BuildersKt.launch(Unknown Source:1)
at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch$default(Builders.common.kt:47)
at kotlinx.coroutines.BuildersKt.launch$default(Unknown Source:1)
at kotlinx.coroutines.flow.internal.ChannelFlowTransformLatest$flowCollect$3$1.emit(Merge.kt:33)
at kotlinx.coroutines.flow.StateFlowImpl.collect(StateFlow.kt:398)
at kotlinx.coroutines.flow.internal.ChannelFlowTransformLatest$flowCollect$3.invokeSuspend(Merge.kt:27)
at kotlinx.coroutines.flow.internal.ChannelFlowTransformLatest$flowCollect$3.invoke(Unknown Source:8)
at kotlinx.coroutines.flow.internal.ChannelFlowTransformLatest$flowCollect$3.invoke(Unknown Source:4)
at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:89)
at kotlinx.coroutines.CoroutineScopeKt.coroutineScope(CoroutineScope.kt:264)
at kotlinx.coroutines.flow.internal.ChannelFlowTransformLatest.flowCollect(Merge.kt:25)
at kotlinx.coroutines.flow.internal.ChannelFlowOperator.collectTo$suspendImpl(ChannelFlow.kt:157)
at kotlinx.coroutines.flow.internal.ChannelFlowOperator.collectTo(Unknown Source:0)
at kotlinx.coroutines.flow.internal.ChannelFlow$collectToFun$1.invokeSuspend(ChannelFlow.kt:60)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:570)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:749)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:677)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:664)
Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@6b0b2cc, Dispatchers.Default]
Originally posted by @TacoTheDank in #25 (comment)
Apps that came pre-installed, show the installer source as 'Manual Install' with the human icon. And they are being included with Sideloaded Apps.
They are not sideloaded by the user. Apps sideloaded by the user will have a definitive source, even if installed via ADB, isn't it?
Sideloaded apps are strictly those that the user himself has installed. Can you make this filter work like this?
Gladly โ and thanks to you! I just triggered the updater manually โ fetched the update fine, so all seems set. Just an icon is not there (ah, yes, issue is already open for that I see).
As for metadata in general: would you like a PR shipping you initial fastlane structures? I could offer to send you what I've set up with my repo currently โ so you could take over from there and adjust whenever needed. And build upon โ e.g. adding screenshots, icon, featureGraphic ๐
Originally posted by @IzzySoft in #4 (comment)
Please allow for switching between tabs with a simple swipe.
The app search should not be CasE sEnsitive
Also add a label like this
To let the user know that it is a stable/beta/dev build and what variant (foss/gplay)
Originally posted by @dragonGod97677 in #8 (comment)
Please add a 'Rescan' or 'Refresh' button to force the app to rescan all packages and permissions.
I installed a new app and it was not showing up no matter how many different sort/ filter options I tried. I had to Force Stop this app and relaunch it. The new app then showed up.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.