Giter Club home page Giter Club logo

hamza417 / inure Goto Github PK

View Code? Open in Web Editor NEW
865.0 14.0 50.0 85.53 MB

An elegant and beautiful premium Android app manager for both rooted and non-rooted devices with a built-in terminal, analytics, debloat, stats and various other panels with an independent custom theme engine, developed with purely custom APIs created for this app.

License: GNU General Public License v3.0

Kotlin 66.58% AIDL 0.12% CSS 0.32% HTML 4.62% Java 26.82% JavaScript 0.83% CMake 0.02% C++ 0.28% C 0.07% Shell 0.06% PowerShell 0.03% Python 0.25%
app manager tool android android-application android-app utilities ui interface animations

inure's Introduction

Banner

Inure App Manager

An elegant Android app manager.

Stats

Hits Release Crowdin Telegram Channel Telegram Group

Download

Buy (Full Version)

Featured

About

Inure is an Android application package manager irrespective of whether they're installed or not, it can scan through any app's internal components and modify them on the go. It also packs a nice looking Terminal Emulator, Usage Stats, Split/APK Installer and various other tools and many of them are waiting to be implemented as well. On top of that, Inure's all functionalities been made to work with both Root and Shizuku modes.

Inure's development was started as an independent learning project which later has become one of the most ambitious and intuitive Android apps developed by a single person and is based 100% on custom UI APIs developed to be used only in this app with its own native theme engine, crash handler, image renderer and a beautiful animation framework.

Along with it own UI perks, Inure also supports dynamic Material You colors with dedicated accent and theme color modes.

The app is in stable testing stage. You can join app's Telegram Group and get development related updates or you can submit your feedbacks about the app.

Features

See the concise list of features of the app here.

Screenshots

App's Interface

01 02 03
0x01 0x02 0x03
04 15 01
0x04 0x05 0x06
01 01 01
0x07 0x08 0x09
01 01 01
0x00 0x0A 0x0B
01 01 01
0x0C 0x0D 0x0E
01 01 01
0x0F 0x11 0x12
01 01 01
0x13 0x14 0x15
01 01 01
0x16 0x17 0x18
01 01 01
0x19 0x1A 0x1B
01 01 01
0x1C 0x1D 0x1E
01 01 01
0x1F 0x20 0x21

Accessibility

Various accessibility features to make the app more accessible to users. Inure also supports an option to add more colors to interface of various types including Pastel, Coffee (soothing) and Retro (color blocked) for users who don't prefer monochromatic interface or have difficulty using it.

Including that, Inure also supports highlighting clickable elements and divider for users who have difficulty in differentiating spaces between interface elements.

Further more, it's also possible to disable all animations to reduce excessive motion in the app. Inure has options to adjust animation requirements over multiple levels from all animations to no animations with fine granularity.

01 01 01
0x00 0x01 0x02

Menus and Dialogs

Inure has 3 different styles of Menu and Dialogs type depending on how they're required, the popup type used for quick actions follows the user thumb on the screen, the modal dialog is used to adjust panel level preferences and chip style dialog for managing filter flags and tags. These three work together to refine a good level of UX and UI without overloading the user with a lot of options.

01 01 01
0x00 0x01 0x02

If you've any questions or suggestions for design, please initiate a discussion or an issue.

Include your app in Inure's FOSS panel

If you are a developer and want your app to be listed in the FOSS panel of Inure and show a FOSS indicator alongside your app, there are two ways this can be done.

  1. You can publish your app on F-Droid. Inure automatically marks the app as FOSS if it's available on F-Droid.
  2. You can add open_source and open_source_license tag in your app's manifest file and Inure will fetch this info during the runtime and will include your app based on the flag.
<application
   .....
   >
   
   <!-- Set to true to indicate the app is open source -->
   <meta-data
      android:name="open_source"
      android:value="true" />
   
   <!-- License of your app -->
   <meta-data
      android:name="open_source_license"
      android:value="GNU GENERAL PUBLIC LICENSE Version 3" />

</application>

Contribute

Developers

Inure's repo doesn't require any special setup, clone/fork the repo and run in Android Studio and let the initial setup finish automatically and you'll be good to go.

Not a developer?

You can take participation in app's translation on Crowdin and watch Inure work in your language and make the app more user friendly to everyone speaking your tongue.

Alternatively, you can also edit/upload your locale's strings from app/src/main/res/values-locale-code directory.

Want to show you were here?

You cannot do the above still wanna show your support? hit the star and let me know you were here and appreciate the project.

License

Inure App Manager Copyright ยฉ 2023 - Hamza Rizwan

Inure App Manager is released as open source software under the GPL v3 license, see the LICENSE file in the project root for the full license text.

Behind The Scenes

01
Designing of interface skeletons for Inure
01
Audio Player interface design (later removed)
01
Presentation design for Batch interface

inure's People

Contributors

ab-mr avatar actions-user avatar github-actions[bot] avatar hamza417 avatar huntr-helper avatar imgbotapp avatar ratabb avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

inure's Issues

Option to "Force Stop" apps in the Batch section.

Is your feature request related to a problem? Please describe.
No. Except if a currently missing feature counts as a problem.

Describe the solution you'd like
Have Force Stop option like in the individual app menus as a Batch option as well.

Describe alternatives you've considered
none

Additional context
none

Execute command with adb support

Hi developer i have idea pls consider allow user using all adb shell command
With root or ADB privilege

Dev pls move this issues on discussion tab it's supposed to be there instead
Thanks ๐Ÿ™๐Ÿ˜Š

Found a possible security concern

Hello ๐Ÿ‘‹

I run a security community that finds and fixes vulnerabilities in OSS. A researcher (@blackbeard666) has found a potential issue, which I would be eager to share with you.

Could you add a SECURITY.md file with an e-mail address for me to send further details to? GitHub recommends a security policy to ensure issues are responsibly disclosed, and it would help direct researchers in the future.

Looking forward to hearing from you ๐Ÿ‘

(cc @huntr-helper)

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState

724-724/app.simple.inure E/AndroidRuntime: FATAL EXCEPTION: main
    Process: app.simple.inure, PID: 724
    java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
        at androidx.fragment.app.FragmentManager.checkStateLoss(FragmentManager.java:1610)
        at androidx.fragment.app.FragmentManager.enqueueAction(FragmentManager.java:1650)
        at androidx.fragment.app.BackStackRecord.commitInternal(BackStackRecord.java:341)
        at androidx.fragment.app.BackStackRecord.commit(BackStackRecord.java:306)
        at app.simple.inure.extensions.fragments.ScopedFragment.openFragmentSlide(ScopedFragment.kt:389)
        at app.simple.inure.extensions.fragments.ScopedFragment.openFragmentSlide$default(ScopedFragment.kt:379)
        at app.simple.inure.ui.launcher.SplashScreen$onViewCreated$1.invokeSuspend(SplashScreen.kt:107)
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
        at kotlinx.coroutines.DispatchedTaskKt.resume(DispatchedTask.kt:234)
        at kotlinx.coroutines.DispatchedTaskKt.dispatch(DispatchedTask.kt:166)
        at kotlinx.coroutines.CancellableContinuationImpl.dispatchResume(CancellableContinuationImpl.kt:397)
        at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl(CancellableContinuationImpl.kt:431)
        at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl$default(CancellableContinuationImpl.kt:420)
        at kotlinx.coroutines.CancellableContinuationImpl.resumeUndispatched(CancellableContinuationImpl.kt:518)
        at kotlinx.coroutines.android.HandlerContext$scheduleResumeAfterDelay$$inlined$Runnable$1.run(Runnable.kt:19)
        at android.os.Handler.handleCallback(Handler.java:942)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loopOnce(Looper.java:201)
        at android.os.Looper.loop(Looper.java:288)
        at android.app.ActivityThread.main(ActivityThread.java:7894)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:550)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
    	Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@3841fe4, Dispatchers.Main.immediate]

Issue: APK Installation Affects Both Main and Secondary Accounts in Devices with Dual Messenger Functionality

Describe the bug
Some mobile devices support functionalities similar to Android's "work profile", such as Samsung's dual messenger. I've noticed that when using Inure's install APK feature, the APK gets installed on both the main and secondary accounts. However, I only want to install it on the main account.

To specify a particular user with the APK command, you can try the following:

adb install -r --user 12 app_name.apk

To Reproduce
Steps to reproduce the behavior:

  1. Open a device with multiple account functionality (e.g., Samsung's Dual Messenger).
  2. Download the APK file you wish to install
  3. Install the APK file using Inure's install APK feature. (i enabled Shizuku)
  4. Check both the main and secondary accounts, and you will find the APK has been installed on both.

Expected behavior
only want to install it on the main account (current account)

Smartphone (please complete the following information):

  • Device: Samsung Fold 4
  • OS: AOSP Android 13 (One UI 5.1)
  • Version: build99-full (Play Store)

Crash

BUG
image

Crashes once we go Inside the Apps and click on any app

per-release changelogs in Fastlane metadata

The current changelogs just tell the user to look inside the app โ€“ which can only be done after it was updated. Could you please have the changelogs instead at least state the major changes? As they are now they're rather useless, as they are not "per release" but all identical.

Shared Preferences, error message

I use Build49 and want to see the item Shared Preferences. An error message appears. Probably this can be handled a little more elegant.

My system is CrDroid 8.1 with microG 0.2.25.223616 and Magisk 25.2.

Screenshot_20221124-095910_Inure

Apps button

java.lang.NoSuchFieldError: No field category of type I in class Landroid/content/pm/ApplicationInfo; or its superclasses (declaration of 'android.content.pm.ApplicationInfo' appears in /system/framework/framework.jar)
at app.simple.inure.util.PackageListUtils.setAppInfo(PackageListUtils.kt:31)
at app.simple.inure.adapters.ui.AdapterAppsDetailed.onBindViewHolder(AdapterAppsDetailed.kt:55)
at app.simple.inure.adapters.ui.AdapterAppsDetailed.onBindViewHolder(AdapterAppsDetailed.kt:23)
at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:7254)
at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7337)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6194)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6460)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6300)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6296)
at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2330)
at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1631)
at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1591)
at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:668)
at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4309)
at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:4012)
at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4578)
at android.view.View.layout(View.java:17666)
at android.view.ViewGroup.layout(ViewGroup.java:5577)
at androidx.coordinatorlayout.widget.CoordinatorLayout.layoutChild(CoordinatorLayout.java:1213)
at androidx.coordinatorlayout.widget.CoordinatorLayout.onLayoutChild(CoordinatorLayout.java:899)
at androidx.coordinatorlayout.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:919)
at android.view.View.layout(View.java:17666)
at android.view.ViewGroup.layout(ViewGroup.java:5577)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:17666)
at android.view.ViewGroup.layout(ViewGroup.java:5577)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
at android.view.View.layout(View.java:17666)
at android.view.ViewGroup.layout(ViewGroup.java:5577)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:17666)
at android.view.ViewGroup.layout(ViewGroup.java:5577)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
at android.view.View.layout(View.java:17666)
at android.view.ViewGroup.layout(ViewGroup.java:5577)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at com.android.internal.policy.DecorView.onLayout(DecorView.java:730)
at android.view.View.layout(View.java:17666)
at android.view.ViewGroup.layout(ViewGroup.java:5577)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2390)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2112)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1298)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6437)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:876)
at android.view.Choreographer.doCallbacks(Choreographer.java:688)
at android.view.Choreographer.doFrame(Choreographer.java:623)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:862)
at android.os.Handler.handleCallback(Handler.java:754)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:163)
at android.app.ActivityThread.main(ActivityThread.java:6238)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:933)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)

Thanks

Hi sir thank you for such a beautiful app and your hard work waited for long for the first apk release am the first to download it ๐Ÿ‘‹ soon will give you feedback

h

Describe the bug
A clear and concise description of what the bug is.

To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

Smartphone (please complete the following information):

  • Device: [e.g. Pixel 6]
  • OS: [e.g. AOSP Android 13]
  • Version [e.g. Build60]

Additional context
Add any other context about the problem here.

Scudo ERROR: invalid chunk state when deallocating address 0x<sanitized>

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
pid: 0, tid: 24499 >>> app.simple.inure <<<

backtrace:
  #00  pc 0x000000000004f064  /apex/com.android.runtime/lib64/bionic/libc.so (abort+164)
  #01  pc 0x0000000000042b00  /apex/com.android.runtime/lib64/bionic/libc.so (scudo::die()+8)
  #02  pc 0x000000000004318c  /apex/com.android.runtime/lib64/bionic/libc.so (scudo::ScopedErrorReport::~ScopedErrorReport()+32)
  #03  pc 0x00000000000433c0  /apex/com.android.runtime/lib64/bionic/libc.so (scudo::reportInvalidChunkState(scudo::AllocatorAction, void*)+76)
  #04  pc 0x00000000000448d0  /apex/com.android.runtime/lib64/bionic/libc.so (scudo::Allocator<scudo::AndroidConfig, &(scudo_malloc_postinit)>::deallocate(void*, scudo::Chunk::Origin, unsigned long, unsigned long)+340)
  #05  pc 0x00000000003f03d0  /system/lib64/libhwui.so (SkBitmap::~SkBitmap()+112)
  #06  pc 0x000000000038d768  /system/lib64/libhwui.so (android::uirenderer::VectorDrawable::Tree::updateBitmapCache(android::Bitmap&, bool)+256)
  #07  pc 0x000000000038d3f0  /system/lib64/libhwui.so (android::uirenderer::VectorDrawable::Tree::drawStaging(android::Canvas*)+104)
  #08  pc 0x000000000038d2a4  /system/lib64/libhwui.so (android::uirenderer::VectorDrawable::Tree::draw(android::Canvas*, SkColorFilter*, SkRect const&, bool, bool)+552)
  #09  pc 0x000000000032ac08  /system/lib64/libhwui.so (android::draw(_JNIEnv*, _jobject*, long, long, long, _jobject*, unsigned char, unsigned char)+104)
  #10  pc 0x000000000024b304  /system/framework/arm64/boot-framework.oat (art_jni_trampoline+212)
  #11  pc 0x00000000005541b4  /system/framework/arm64/boot-framework.oat (android.graphics.drawable.VectorDrawable.draw+420)
  #12  pc 0x0000000000523988  /system/framework/arm64/boot-framework.oat (android.graphics.drawable.AdaptiveIconDrawable.draw+280)
  #13  pc 0x0000000000134564  /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+548)
  #14  pc 0x0000000000198e94  /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+204)
  #15  pc 0x000000000030c218  /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+376)
  #16  pc 0x0000000000307330  /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+884)
  #17  pc 0x000000000063b038  /apex/com.android.art/lib64/libart.so (MterpInvokeVirtual+868)
  #18  pc 0x000000000012e814  /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual+20)
  #19  pc 0x0000000000276a1a  /system/framework/framework.jar (android.app.SemAppIconSolution.getThemeIconWithBG+794)
  #20  pc 0x000000000063e974  /apex/com.android.art/lib64/libart.so (MterpInvokeVirtualRange+1204)
  #21  pc 0x000000000012eb14  /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual_range+20)
  #22  pc 0x00000000002766e6  /system/framework/framework.jar (android.app.SemAppIconSolution.getThemeIconWithBG+18)
  #23  pc 0x000000000063e974  /apex/com.android.art/lib64/libart.so (MterpInvokeVirtualRange+1204)
  #24  pc 0x000000000012eb14  /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual_range+20)
  #25  pc 0x00000000002766b8  /system/framework/framework.jar (android.app.SemAppIconSolution.getThemeIconWithBG+20)
  #26  pc 0x000000000063b274  /apex/com.android.art/lib64/libart.so (MterpInvokeVirtual+1440)
  #27  pc 0x000000000012e814  /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual+20)
  #28  pc 0x000000000027668a  /system/framework/framework.jar (android.app.SemAppIconSolution.getThemeIconWithBG+10)
  #29  pc 0x00000000002fed0c  /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.2255279045661746555)+268)
  #30  pc 0x00000000006299e8  /apex/com.android.art/lib64/libart.so (artQuickToInterpreterBridge+796)
  #31  pc 0x000000000013dff8  /apex/com.android.art/lib64/libart.so (art_quick_to_interpreter_bridge+88)
  #32  pc 0x000000000047c888  /system/framework/arm64/boot-framework.oat (android.app.ApplicationPackageManager.loadUnbadgedItemIcon+4024)
  #33  pc 0x000000000047b47c  /system/framework/arm64/boot-framework.oat (android.app.ApplicationPackageManager.loadItemIcon+60)
  #34  pc 0x00000000003b4f14  /system/framework/arm64/boot-framework.oat (android.content.pm.PackageItemInfo.loadIcon+100)
  #35  pc 0x00000000003b4e88  /system/framework/arm64/boot-framework.oat (android.content.pm.PackageItemInfo.loadIcon+56)
  #36  pc 0x0000000000476d3c  /system/framework/arm64/boot-framework.oat (android.app.ApplicationPackageManager.getApplicationIcon+60)
  #37  pc 0x0000000000476db0  /system/framework/arm64/boot-framework.oat (android.app.ApplicationPackageManager.getApplicationIcon+80)
  #38  pc 0x0000000000134564  /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+548)
  #39  pc 0x0000000000198e94  /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+204)
  #40  pc 0x000000000030c218  /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+376)
  #41  pc 0x0000000000307330  /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+884)
  #42  pc 0x0000000000641874  /apex/com.android.art/lib64/libart.so (MterpInvokeVirtualQuick+708)
  #43  pc 0x0000000000132594  /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual_quick+20)
  #44  pc 0x0000000000472c2e  /data/app/~~tPpG076KhaxAl7lYtPf3rQ==/app.simple.inure-Ke2UZqeWE1CIG68caaK2VA==/oat/arm64/base.vdex (app.simple.inure.glide.icon.AppIconFetcher.loadData+324)
  #45  pc 0x000000000063cc08  /apex/com.android.art/lib64/libart.so (MterpInvokeInterface+1840)
  #46  pc 0x000000000012ea14  /apex/com.android.art/lib64/libart.so (mterp_op_invoke_interface+20)
  #47  pc 0x00000000005067d4  /data/app/~~tPpG076KhaxAl7lYtPf3rQ==/app.simple.inure-Ke2UZqeWE1CIG68caaK2VA==/oat/arm64/base.vdex (com.bumptech.glide.load.engine.SourceGenerator.startNextLoad+30)
  #48  pc 0x000000000063d79c  /apex/com.android.art/lib64/libart.so (MterpInvokeDirect+1164)
  #49  pc 0x000000000012e914  /apex/com.android.art/lib64/libart.so (mterp_op_invoke_direct+20)
  #50  pc 0x000000000050657e  /data/app/~~tPpG076KhaxAl7lYtPf3rQ==/app.simple.inure-Ke2UZqeWE1CIG68caaK2VA==/oat/arm64/base.vdex (com.bumptech.glide.load.engine.SourceGenerator.startNext+194)
  #51  pc 0x000000000063cc08  /apex/com.android.art/lib64/libart.so (MterpInvokeInterface+1840)
  #52  pc 0x000000000012ea14  /apex/com.android.art/lib64/libart.so (mterp_op_invoke_interface+20)
  #53  pc 0x0000000000503a3e  /data/app/~~tPpG076KhaxAl7lYtPf3rQ==/app.simple.inure-Ke2UZqeWE1CIG68caaK2VA==/oat/arm64/base.vdex (com.bumptech.glide.load.engine.DecodeJob.runGenerators+46)
  #54  pc 0x000000000063d79c  /apex/com.android.art/lib64/libart.so (MterpInvokeDirect+1164)
  #55  pc 0x000000000012e914  /apex/com.android.art/lib64/libart.so (mterp_op_invoke_direct+20)
  #56  pc 0x0000000000503afe  /data/app/~~tPpG076KhaxAl7lYtPf3rQ==/app.simple.inure-Ke2UZqeWE1CIG68caaK2VA==/oat/arm64/base.vdex (com.bumptech.glide.load.engine.DecodeJob.runWrapped+96)
  #57  pc 0x000000000063d79c  /apex/com.android.art/lib64/libart.so (MterpInvokeDirect+1164)
  #58  pc 0x000000000012e914  /apex/com.android.art/lib64/libart.so (mterp_op_invoke_direct+20)
  #59  pc 0x0000000000503942  /data/app/~~tPpG076KhaxAl7lYtPf3rQ==/app.simple.inure-Ke2UZqeWE1CIG68caaK2VA==/oat/arm64/base.vdex (com.bumptech.glide.load.engine.DecodeJob.run+54)
  #60  pc 0x00000000002fed0c  /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.2255279045661746555)+268)
  #61  pc 0x00000000006299e8  /apex/com.android.art/lib64/libart.so (artQuickToInterpreterBridge+796)
  #62  pc 0x000000000013dff8  /apex/com.android.art/lib64/libart.so (art_quick_to_interpreter_bridge+88)
  #63  pc 0x00000000002a2d38  /apex/com.android.art/javalib/arm64/boot.oat (java.util.concurrent.ThreadPoolExecutor.runWorker+984)
  #64  pc 0x000000000029ff30  /apex/com.android.art/javalib/arm64/boot.oat (java.util.concurrent.ThreadPoolExecutor$Worker.run+64)
  #65  pc 0x000000000015ced8  /apex/com.android.art/javalib/arm64/boot.oat (java.lang.Thread.run+72)
  #66  pc 0x0000000000134564  /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+548)
  #67  pc 0x0000000000198e94  /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+204)
  #68  pc 0x000000000030c218  /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+376)
  #69  pc 0x0000000000307330  /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+884)
  #70  pc 0x000000000063bd5c  /apex/com.android.art/lib64/libart.so (MterpInvokeSuper+1768)
  #71  pc 0x000000000012e894  /apex/com.android.art/lib64/libart.so (mterp_op_invoke_super+20)
  #72  pc 0x00000000005096ee  /data/app/~~tPpG076KhaxAl7lYtPf3rQ==/app.simple.inure-Ke2UZqeWE1CIG68caaK2VA==/oat/arm64/base.vdex (com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run+62)
  #73  pc 0x00000000002fed0c  /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.2255279045661746555)+268)
  #74  pc 0x00000000006299e8  /apex/com.android.art/lib64/libart.so (artQuickToInterpreterBridge+796)
  #75  pc 0x000000000013dff8  /apex/com.android.art/lib64/libart.so (art_quick_to_interpreter_bridge+88)
  #76  pc 0x0000000000134564  /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+548)
  #77  pc 0x0000000000198e94  /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+204)
  #78  pc 0x00000000005320fc  /apex/com.android.art/lib64/libart.so (art::(anonymous namespace)::InvokeWithArgArray(art::ScopedObjectAccessAlreadyRunnable const&, art::ArtMethod*, art::(anonymous namespace)::ArgArray*, art::JValue*, char const*)+104)
  #79  pc 0x00000000005332fc  /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeVirtualOrInterfaceWithJValues<art::ArtMethod*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, art::ArtMethod*, jvalue const*)+440)
  #80  pc 0x000000000058081c  /apex/com.android.art/lib64/libart.so (art::Thread::CreateCallback(void*)+1272)
  #81  pc 0x00000000000b6374  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+64)
  #82  pc 0x0000000000050fa4  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64)

FragmentManager is already executing transactions

Exception java.lang.IllegalStateException: FragmentManager is already executing transactions
  at androidx.fragment.app.FragmentManager.ensureExecReady (FragmentManager.java:1695)
  at androidx.fragment.app.FragmentManager.execPendingActions (FragmentManager.java:1754)
  at androidx.fragment.app.FragmentManager.popBackStackImmediate (FragmentManager.java:854)
  at androidx.fragment.app.FragmentManager.popBackStackImmediate (FragmentManager.java:778)
  at app.simple.inure.ui.panels.AppInfo$onViewCreated$2$1$onAppInfoMenuClicked$1$onSure$1.invoke (AppInfo.kt:227)
  at app.simple.inure.ui.panels.AppInfo$onViewCreated$2$1$onAppInfoMenuClicked$1$onSure$1.invoke (AppInfo.kt:226)
  at app.simple.inure.dialogs.action.Uninstaller.onViewCreated$lambda$5$lambda$4 (Uninstaller.kt:93)
  at app.simple.inure.dialogs.action.Uninstaller.$r8$lambda$k_RhheHTQQbS-O65URL-stwAnyA
  at app.simple.inure.dialogs.action.Uninstaller$$ExternalSyntheticLambda9.onActivityResult
  at androidx.activity.result.ActivityResultRegistry$1.onStateChanged (ActivityResultRegistry.java:149)
  at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent (LifecycleRegistry.java:360)
  at androidx.lifecycle.LifecycleRegistry.forwardPass (LifecycleRegistry.java:271)
  at androidx.lifecycle.LifecycleRegistry.sync (LifecycleRegistry.java:313)
  at androidx.lifecycle.LifecycleRegistry.moveToState (LifecycleRegistry.java:151)
  at androidx.lifecycle.LifecycleRegistry.handleLifecycleEvent (LifecycleRegistry.java:134)
  at androidx.fragment.app.Fragment.performStart (Fragment.java:3167)
  at androidx.fragment.app.FragmentStateManager.start (FragmentStateManager.java:588)
  at androidx.fragment.app.FragmentStateManager.moveToExpectedState (FragmentStateManager.java:279)
  at androidx.fragment.app.FragmentStore.moveToExpectedState (FragmentStore.java:113)
  at androidx.fragment.app.FragmentManager.moveToState (FragmentManager.java:1433)
  at androidx.fragment.app.FragmentManager.dispatchStateChange (FragmentManager.java:2977)
  at androidx.fragment.app.FragmentManager.dispatchStart (FragmentManager.java:2902)
  at androidx.fragment.app.Fragment.performStart (Fragment.java:3171)
  at androidx.fragment.app.FragmentStateManager.start (FragmentStateManager.java:588)
  at androidx.fragment.app.FragmentStateManager.moveToExpectedState (FragmentStateManager.java:279)
  at androidx.fragment.app.FragmentStore.moveToExpectedState (FragmentStore.java:113)
  at androidx.fragment.app.FragmentManager.moveToState (FragmentManager.java:1433)
  at androidx.fragment.app.FragmentManager.dispatchStateChange (FragmentManager.java:2977)
  at androidx.fragment.app.FragmentManager.dispatchStart (FragmentManager.java:2902)
  at androidx.fragment.app.FragmentController.dispatchStart (FragmentController.java:274)
  at androidx.fragment.app.FragmentActivity.onStart (FragmentActivity.java:359)
  at androidx.appcompat.app.AppCompatActivity.onStart (AppCompatActivity.java:251)
  at android.app.Instrumentation.callActivityOnStart (Instrumentation.java:1455)
  at android.app.Activity.performStart (Activity.java:8315)
  at android.app.ActivityThread.handleStartActivity (ActivityThread.java:4060)
  at android.app.servertransaction.TransactionExecutor.performLifecycleSequence (TransactionExecutor.java:221)
  at android.app.servertransaction.TransactionExecutor.cycleToPath (TransactionExecutor.java:201)
  at android.app.servertransaction.TransactionExecutor.executeLifecycleState (TransactionExecutor.java:173)
  at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:97)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2438)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loopOnce (Looper.java:226)
  at android.os.Looper.loop (Looper.java:313)
  at android.app.ActivityThread.main (ActivityThread.java:8663)
  at java.lang.reflect.Method.invoke
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:567)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1135)

Permission tab crash

java.lang.NullPointerException: Attempt to get length of null array
at app.simple.inure.viewmodels.viewers.PermissionsViewModel$loadPermissionData$1.invokeSuspend(PermissionsViewModel.kt:36)
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)

Inure > apps > choose framework system app > permission > crashes with logs

Devices: Realme 5i (RMX2030)
Android 10 Realme UI 1.0
Non Root mode
(Since ADB and shizuku isn't added yet)
#Bug #Crash

it's looks like only some system framework will crash bcs in experience are like this.
Apk file provided to help developer investigate the inure app:
apks.zip

Developer you are right only app with no permission crashes

terminating with uncaught exception of type St9bad_alloc: std::bad_alloc

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
pid: 0, tid: 21303 >>> app.simple.inure <<<

backtrace:
  #00  pc 0x0000000000064f9c  /apex/com.android.runtime/lib/bionic/libc.so (abort+172)
  #01  pc 0x00000000000338ff  /system/lib/libc++.so (abort_message+90)
  #02  pc 0x0000000000033a5b  /system/lib/libc++.so (demangling_terminate_handler()+142)
  #03  pc 0x00000000000343bf  /system/lib/libc++.so (std::__terminate(void (*)())+2)
  #04  pc 0x0000000000033c2f  /system/lib/libc++.so (__cxxabiv1::failed_throw(__cxxabiv1::__cxa_exception*)+12)
  #05  pc 0x0000000000033bc5  /system/lib/libc++.so (__cxa_throw+72)
  #06  pc 0x0000000000036139  /system/lib/libc++.so (operator new(unsigned int)+52)
  #07  pc 0x0000000000147577  /system/lib/libandroid_runtime.so (MapCentralDirectory(char const*, ZipArchive*)+90)
  #08  pc 0x000000000014531b  /system/lib/libandroid_runtime.so (OpenArchive(char const*, ZipArchive**)+94)
  #09  pc 0x0000000000038dd5  /system/lib/libandroidfw.so (android::ZipAssetsProvider::Create(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, unsigned int)+40)
  #10  pc 0x000000000012a9bb  /system/lib/libandroid_runtime.so (android::NativeLoad(_JNIEnv*, _jclass*, int, _jstring*, int, _jobject*)+866)
  #11  pc 0x00000000003ef563  /data/misc/apexdata/com.android.art/dalvik-cache/arm/boot.oat (art_jni_trampoline+98)
  #12  pc 0x000000000089ff35  /data/misc/apexdata/com.android.art/dalvik-cache/arm/boot.oat (android.app.ResourcesManager.loadApkAssets+1076)
  #13  pc 0x000000000089a9ed  /data/misc/apexdata/com.android.art/dalvik-cache/arm/boot.oat (android.app.ResourcesManager.createApkAssetsSupplierNotLocked+700)
  #14  pc 0x00000000008a3fe1  /data/misc/apexdata/com.android.art/dalvik-cache/arm/boot.oat (android.app.ResourcesManager.getResources+368)
  #15  pc 0x00000000008a3e61  /data/misc/apexdata/com.android.art/dalvik-cache/arm/boot.oat (android.app.ResourcesManager.getResources+128)
  #16  pc 0x00000000009e7507  /data/misc/apexdata/com.android.art/dalvik-cache/arm/boot.oat (android.app.ApplicationPackageManager.getResourcesForApplication+526)
  #17  pc 0x00000000009e82d1  /data/misc/apexdata/com.android.art/dalvik-cache/arm/boot.oat (android.app.ApplicationPackageManager.getText+384)
  #18  pc 0x00000000008d98f3  /data/misc/apexdata/com.android.art/dalvik-cache/arm/boot.oat (android.content.pm.PackageItemInfo.loadUnsafeLabel+762)
  #19  pc 0x00000000008d948f  /data/misc/apexdata/com.android.art/dalvik-cache/arm/boot.oat (android.content.pm.PackageItemInfo.loadLabel+1134)
  #20  pc 0x00000000009e46c5  /data/misc/apexdata/com.android.art/dalvik-cache/arm/boot.oat (android.app.ApplicationPackageManager.getApplicationLabel+44)
  #21  pc 0x00000000000ebdec  /apex/com.android.art/lib/libart.so (nterp_helper+2908)
  #22  pc 0x00000000003a47b4  /data/app/~~-Y5cne1Kvx5R0r4Oy85KNw==/app.simple.inure-X13shB5ubrzA7wXbB0GEkg==/oat/arm/base.vdex
  #23  pc 0x00000000000ebd80  /apex/com.android.art/lib/libart.so (nterp_helper+2800)
  #24  pc 0x00000000004680ae  /data/app/~~-Y5cne1Kvx5R0r4Oy85KNw==/app.simple.inure-X13shB5ubrzA7wXbB0GEkg==/oat/arm/base.vdex
  #25  pc 0x00000000000ebd80  /apex/com.android.art/lib/libart.so (nterp_helper+2800)
  #26  pc 0x0000000000467d64  /data/app/~~-Y5cne1Kvx5R0r4Oy85KNw==/app.simple.inure-X13shB5ubrzA7wXbB0GEkg==/oat/arm/base.vdex
  #27  pc 0x00000000000eb2c8  /apex/com.android.art/lib/libart.so (nterp_helper+56)
  #28  pc 0x000000000046733a  /data/app/~~-Y5cne1Kvx5R0r4Oy85KNw==/app.simple.inure-X13shB5ubrzA7wXbB0GEkg==/oat/arm/base.vdex
  #29  pc 0x00000000000ebd80  /apex/com.android.art/lib/libart.so (nterp_helper+2800)
  #30  pc 0x0000000000ad0e54  /data/app/~~-Y5cne1Kvx5R0r4Oy85KNw==/app.simple.inure-X13shB5ubrzA7wXbB0GEkg==/oat/arm/base.vdex
  #31  pc 0x00000000000ec7e8  /apex/com.android.art/lib/libart.so (nterp_helper+5464)
  #32  pc 0x0000000000b11394  /data/app/~~-Y5cne1Kvx5R0r4Oy85KNw==/app.simple.inure-X13shB5ubrzA7wXbB0GEkg==/oat/arm/base.vdex
  #33  pc 0x00000000000ec72c  /apex/com.android.art/lib/libart.so (nterp_helper+5276)
  #34  pc 0x0000000000b42844  /data/app/~~-Y5cne1Kvx5R0r4Oy85KNw==/app.simple.inure-X13shB5ubrzA7wXbB0GEkg==/oat/arm/base.vdex
  #35  pc 0x00000000000ec7e8  /apex/com.android.art/lib/libart.so (nterp_helper+5464)
  #36  pc 0x0000000000b49998  /data/app/~~-Y5cne1Kvx5R0r4Oy85KNw==/app.simple.inure-X13shB5ubrzA7wXbB0GEkg==/oat/arm/base.vdex
  #37  pc 0x00000000000ebd80  /apex/com.android.art/lib/libart.so (nterp_helper+2800)
  #38  pc 0x0000000000b48b54  /data/app/~~-Y5cne1Kvx5R0r4Oy85KNw==/app.simple.inure-X13shB5ubrzA7wXbB0GEkg==/oat/arm/base.vdex
  #39  pc 0x00000000000ebd80  /apex/com.android.art/lib/libart.so (nterp_helper+2800)
  #40  pc 0x0000000000b47a5c  /data/app/~~-Y5cne1Kvx5R0r4Oy85KNw==/app.simple.inure-X13shB5ubrzA7wXbB0GEkg==/oat/arm/base.vdex
  #41  pc 0x00000000000ebd80  /apex/com.android.art/lib/libart.so (nterp_helper+2800)
  #42  pc 0x0000000000b47b8c  /data/app/~~-Y5cne1Kvx5R0r4Oy85KNw==/app.simple.inure-X13shB5ubrzA7wXbB0GEkg==/oat/arm/base.vdex
  #43  pc 0x00000000000ebd80  /apex/com.android.art/lib/libart.so (nterp_helper+2800)
  #44  pc 0x0000000000b47b3c  /data/app/~~-Y5cne1Kvx5R0r4Oy85KNw==/app.simple.inure-X13shB5ubrzA7wXbB0GEkg==/oat/arm/base.vdex
  #45  pc 0x00000000003af7d5  /apex/com.android.art/lib/libart.so (art_quick_invoke_stub_internal+68)
  #46  pc 0x00000000003af263  /apex/com.android.art/lib/libart.so (void art::quick_invoke_reg_setup<false>(art::ArtMethod*, unsigned int*, unsigned int, art::Thread*, art::JValue*, char const*) (.__uniq.192663596067446536341070919852553954320.llvm.1260006661547204787)+158)
  #47  pc 0x0000000000279f55  /apex/com.android.art/lib/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+136)
  #48  pc 0x00000000002fddf1  /apex/com.android.art/lib/libart.so (art::(anonymous namespace)::InvokeWithArgArray(art::ScopedObjectAccessAlreadyRunnable const&, art::ArtMethod*, art::(anonymous namespace)::ArgArray*, art::JValue*, char const*) (.__uniq.245181933781456475607640333933569312899.llvm.14854189631316110570)+40)
  #49  pc 0x00000000002fdd21  /apex/com.android.art/lib/libart.so (art::JValue art::InvokeVirtualOrInterfaceWithJValues<art::ArtMethod*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, art::ArtMethod*, jvalue const*)+164)
  #50  pc 0x000000000034047b  /apex/com.android.art/lib/libart.so (art::JValue art::InvokeVirtualOrInterfaceWithJValues<_jmethodID*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jmethodID*, jvalue const*)+42)
  #51  pc 0x00000000002de945  /apex/com.android.art/lib/libart.so (art::Thread::CreateCallback(void*)+416)
  #52  pc 0x00000000000afc3f  /apex/com.android.runtime/lib/bionic/libc.so (__pthread_start(void*)+40)
  #53  pc 0x0000000000065ed1  /apex/com.android.runtime/lib/bionic/libc.so (__start_thread+30)

Inure TODO List

Note: Not all tasks has to be worked on.

  • Improve analytics panel
  • Add sub analytics panel
  • Add galaxy store option in app info
  • Add my email in about section
  • Option for feedbacks right from the app
  • Word on app documentation
  • Fix media notification buttons.
  • Add Shizuku support.
  • Add proper trial info screen.
  • Patch trial vulnerability.
  • Encrypted Shared Preferences.
  • Add proper permission status dialog.
  • Add more info in batter optimization dialog.
  • Add option to skip setup panel permanently.
  • Remove device admin permissions and related elements.
  • Fix Add Shortcut in Terminal.
  • Fix Initial Command not working on Shortcut.
  • Fix Terminal windows' manager issues and crashes.
  • Add terminal command manager.
  • Add better apps data generator.
  • Fix Music bugs.
  • Fix Usage Stats data inconsistency issues.
  • Add more context to each panel?
  • Put themes under premium.
  • Fix seekbar glitches (smoothen their animations).
  • Put accent colors under premium.
  • Put transitions and arc type under premium.
  • Put shortcuts under premium.
  • Put accessibility dividers under premium.
  • Put terminal and shell preferences under premium.
  • Put trackers preferences under premium.
  • Put accessibility context menu under premium.
  • Put development preferences under premium.
  • Put uninstalled apps under premium.
  • Hide tracker dialog on non premium.
  • Put image viewer under premium.
  • Put notes editor under premium.
  • Put deep search under premium.
  • Fix corner radius going back bug.
  • Reset settings after trial period.
  • Add High Contrast theme for Light mode.
  • Add Unlocker dev signature verification.
  • Implement a valid global popup position framework and rid of view anchors.
  • Add Play Store installer detection.
  • Add notes not saved warning.
  • Fix unlocker detection issues.
  • Add option to disable tracker activities.
  • Add graph based Usage Stats panel.
  • Add app categories panel.
  • Fix app disable global state.
  • Create a local database for uninstalled apps.
  • Fix audio player issues.
  • Add dynamic buttons resizer.
  • Add option to upload apps on APKMirror.
  • Add support for xAPK files.
  • Add option to hide apps
  • Add an Inure level Audio Player.
  • Fix bottom bar not getting clipped issue.
  • Add auto unlocker detection.
  • Add global data re-fetch framework upon any runtime data mutation.
  • Make some animations smoother (app's framework needs more optimization).
  • Add sort and filter in boot manager.
  • Find source of cannot connect to main shell error.
  • Fix disabled apps indicator color on different themes.
  • Add more context in Batch
  • Add market redirect to Inure?
  • Fix missing TTF files from Extras.
  • Add application flags in App Info panel.
  • Better warning system in Preferences.
  • Fix Russian locale and app layout issues.
  • Add component manager in Boot Manager
  • Multiple item selection in various panels.
  • Add better interface for Battery Optimization.
  • Add repeat button.
  • Add option to enable context in bottom menu
  • Fix empty trackers' panel in installer section
  • Remove Inure from batch
  • Fix searched item missing bug
  • Check marshmallow Russian issue
  • Added no trackers found warning
  • Fix Marshmallow errors
  • Fix root denied loader block
  • Fix crash handler missing error report
  • Make home screen refresh after the settings has changed.
  • Add battery optimization.
  • Add DUMP permission.
  • Open HTML in XML Viewer panel.

Close button doesn't work

Describe the bug
In the boot manager sub menu when you tap on an app and then press close nothing happens

To Reproduce
Steps to reproduce the behavior:

  1. Go to boot manager
  2. Filter to enabled (unselect disabled)
  3. Click on any app (might only be for apps with 1 enabled boot action, might be for any app)
  4. Click close
  5. Nothing happens

Expected behavior
The button should work as advertised and close the menu for enabling and disabling boot actions.

Screenshots
If applicable, add screenshots to help explain your problem.

Smartphone (please complete the following information):

  • Device: OnePlus Nord 2T 5G
  • OS: OxygenOS 13.0
  • Version: CPH2399_11_C.27

Additional context
Add any other context about the problem here.

Trial

What means "10 days left in trial period", I have to pay for have it after that days?

Adb

Hi sir first of all thank you for your hard work I'll like to ask can you add adb root method for those who are not rooted ๐Ÿ‘

ERR: kotlin.collections.EmptyList Cannot be cast to java.util.Arraylist

Describe the bug
Opening the app at all has the error message appear at the bottom
"ERR: kotlin.collections.EmptyList Cannot be cast to java.util.Arraylist"

Clicking away makes the app work as intended, The error has always been there since I've installed the app.

To Reproduce

  1. Open App
  2. Error appears at bottom

Expected behavior
No Error

Screenshots
N/a

Smartphone (please complete the following information):

  • Pixel 7 Pro
  • Android 13 AOSP
  • Build92

Additional context
Using Shizuku method

Small UI Animation Glitch

Describe the bug
When clicking a UI element that has an animated icon, it will overlay other UI elements when scrolling and take a position its not supposed to. I'll attach a video of the glitch.

To Reproduce
Click on any app in the viewer.
Scroll down immediately.
The icon takes unusual position then disappears.

Expected behavior
The app or menu icons should slide up mid animation with the the text its supposed to be next to.

Screenshots
https://github.com/Hamza417/Inure/assets/112318871/e79e9960-4459-4d17-8d25-c2ab8706855c

Smartphone (please complete the following information):

  • Device: Irrelevant
  • OS: 12 AOSP
  • Version: Build86

Additional context
none

Battery optimization

Hi developer can you add feature to allow user control battery optimization directly from inure app?

Realme have problem on me where all list app disappeared without any trace
I was thinking such idea are possible since similar project have same feature

Thanks ๐Ÿ™๐Ÿ˜Š

The app was crashed!

java.lang.UnsupportedOperationException: File type not supported
	at app.simple.inure.viewmodels.installer.InstallerViewModel.prepareInstallation(InstallerViewModel.kt:77)
	at app.simple.inure.viewmodels.installer.InstallerViewModel.access$prepareInstallation(InstallerViewModel.kt:27)
	at app.simple.inure.viewmodels.installer.InstallerViewModel$packageInfo$2$1$1.invokeSuspend(InstallerViewModel.kt:34)
	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)

Crash hmm.

My device is a motorola edge 20 lite.

java.lang.RuntimeException: Unable to stop service app.simple.inure.terminal.TermService@1a8fc9: java.lang.NullPointerException: Attempt to invoke virtual method 'void app.simple.inure.decorations.emulatorview.TerminalEmulator.finish()' on a null object reference
	at android.app.ActivityThread.handleStopService(ActivityThread.java:4830)
	at android.app.ActivityThread.access$2200(ActivityThread.java:261)
	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2197)
	at android.os.Handler.dispatchMessage(Handler.java:111)
	at android.os.Looper.loopOnce(Looper.java:238)
	at android.os.Looper.loop(Looper.java:357)
	at android.app.ActivityThread.main(ActivityThread.java:8090)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1026)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void app.simple.inure.decorations.emulatorview.TerminalEmulator.finish()' on a null object reference
	at app.simple.inure.decorations.emulatorview.TermSession.finish(TermSession.java:610)
	at app.simple.inure.terminal.GenericTermSession.finish(GenericTermSession.java:125)
	at app.simple.inure.terminal.ShellTermSession.finish(ShellTermSession.java:215)
	at app.simple.inure.terminal.TermService.onDestroy(TermService.java:121)
	at android.app.ActivityThread.handleStopService(ActivityThread.java:4810)
	... 9 more

Kindly small request

Screenshot_20221029-154940_Inure_1

ADD feature putting more icon like 4 , 5 or 6 instead of 3 each row thank you sir๐Ÿ™

gradlew script error

Hey I wanted to build the project myself, but without using Android Studio, just manually running Gradle.
The gradlew script is used to manually run Gradle from the command line.
The linux version of the script (just the gradlew file) is very broken, probably some of the line breaks.
To re-create it, gradle wrapper has to be run

Availability outside of Play?

Will the app be available outside the walled gardens of Play Store? Seeing it deems to depend on Firebase, it's unlikely to show up at F-Droid โ€“ but maybe the APK could be made available here, e.g. attached to the corresponding tagged release? Thanks in advance!

"Error: Unexpected end of document" when blocking trackers

Describe the bug
When blocking trackers, either by going to Apps -> Selecting an App -> Trackers -> Selecting the "batch select" button in the top left -> Selecting block
OR
Using the new batch tracker block feature

Sometimes I will get an error popup at the bottom that says "Error: Unexpected end of document". When I used the batch tracker block for the first time, the message actually popped up like 20 times layered one over the other. But when I did them manually one by one, it would only happen once. It's inconsistent, and not easy to replicate. After the 20 messages popped up the first time with the batch block, I did the block a second time, and it did not pop up that time.
To Reproduce
Steps to reproduce the behavior:

  1. Go to Apps
  2. Select an App
  3. Click Trackers
  4. Select the "batch selection" icon in the top left
  5. Select block
  6. Error pops up in the bottom sometimes

OR

  1. Go to Batch
  2. Select all apps
  3. Click the nuclear "tracker" icon
  4. Select all trackers
  5. Block
  6. Error pops up in the bottom sometimes, potentially several times

Reproducing is, unfortunately, inconsistent. I think I sometimes noticed it with the play store app "AppSales" and a few others. It seems after the first time, it doesn't happen as often. I was able to get it to happen again by re-enable the trackers, clearing the app data for Inure, then trying again. Though I then tried to do that a second time, and it didn't happen that time.

Expected behavior
Error should not pop up, and all selected trackers should be blocked

Screenshots

image

Smartphone:

  • Device: Moto Edge 2021
  • OS: LineageOS 20 Android 13
  • Version: Build 65

Scroll position of WebView lost after device rotation

Describe the bug
Scroll position of WebView in WebPage lost after device rotation

To Reproduce

  1. Go to Privacy Policy
  2. Scroll
  3. Rotate

Expected behavior
Scroll positive does not change

Screenshots
Before rotation

Screen Shot 2023-09-10 at 10 07 24 PM

After rotation
Screen Shot 2023-09-10 at 10 07 32 PM

A million times over on every device I own. Recreate the issue by launching the app Android 10/11/13 magisk rooted. Build 76 The app was crashed!

java.lang.RuntimeException: android.os.DeadSystemException
at android.app.ApplicationPackageManager.getInstalledPackagesAsUser(ApplicationPackageManager.java:1031)
at android.app.ApplicationPackageManager.getInstalledPackages(ApplicationPackageManager.java:1016)
at app.simple.inure.extensions.viewmodels.PackageUtilsViewModel.loadInstalledApps(PackageUtilsViewModel.kt:85)
at app.simple.inure.extensions.viewmodels.PackageUtilsViewModel.getInstalledApps(PackageUtilsViewModel.kt:35)
at app.simple.inure.viewmodels.panels.UsageStatsViewModel.getUsageStats(UsageStatsViewModel.kt:94)
at app.simple.inure.viewmodels.panels.UsageStatsViewModel.access$getUsageStats(UsageStatsViewModel.kt:22)
at app.simple.inure.viewmodels.panels.UsageStatsViewModel$loadAppStats$1.invokeSuspend(UsageStatsViewModel.kt:37)
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:750)
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}@dbb1ae7, Dispatchers.Default]
Caused by: android.os.DeadSystemException
... 13 more

WebDav Apps Backup

My phone doesn't have enough storage, I have 600 apps, how to export directly to PC?

export to WebDAV, may be the only way to solve this problem.
PC run WebDAV server, Android Mount server

SVG Support?

IP_0.jpg

I am getting this error when I try to view a SVG image.
I have the image saved in Downloads, I clicked on the file, selected Inure Image Viewer, and the error appears.

Use system font.

Is your feature request related to a problem? Please describe.
The font currently hard-coded is difficult to read, and causes the application to appear inconsistent. However, this would also be a significant problem if any of my dyslexic friends were to need to use it, since some have already rooted their devices to be able to change the system font to a dyslexia-friendly version.

Describe the solution you'd like
Use the system font.

Describe alternatives you've considered
Allow the user to be able to choose to use the system font app-wide, but keep the current ones as the hard-coded default. Would make it instantly difficult for dyslexic people to navigate, though.

Additional context
https://github.com/Hamza417/Inure#apps-interface

java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object kotlin.Lazy.getValue()' on a null object reference

Process: app.simple.inure, PID: 18705
    java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object kotlin.Lazy.getValue()' on a null object reference
        at app.simple.inure.viewmodels.panels.HomeViewModel.getRecentlyInstalledAppData(HomeViewModel.kt:40)
        at app.simple.inure.viewmodels.panels.HomeViewModel.access$getRecentlyInstalledAppData(HomeViewModel.kt:28)
        at app.simple.inure.viewmodels.panels.HomeViewModel$loadRecentlyInstalledAppData$1.invokeSuspend(HomeViewModel.kt:104)
        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}@6845302, Dispatchers.Default]

Dedicated section for batch trackers with graphics

Is your feature request related to a problem?
The current batch tracker block is difficult to find and access, and isn't easy/possible to see an overview of the trackers.

Describe the solution you'd like
On the main page, create a "Trackers" section. It would have some charts similar to those in the Analytics section that shows how many trackers there are, how many apps do/don't have trackers, what trackers there are. Additionally, it would act as the source for bulk blocking trackers, instead of going into the batch section and clicking the tiny hidden icon.

Describe alternatives you've considered
You could also just add the data to the analytics section, and keep them separate. Though I still think the batch trackers is quite hidden.

Additional context
I also think something for blocking trackers for newly installed apps would be nice. It could be included in the trackers section if added, or it could just be a toggle in the settings.

Net Policy

Hi developer please consider to add Net policy control ex: allow net in background or deny it etcยฒ

Thanks ๐Ÿ™๐Ÿ˜Š

The app was crashed!

java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.widget.FrameLayout$LayoutParams
at app.simple.inure.decorations.views.BottomMenuRecyclerView.lambda$initBottomMenu$0$app-simple-inure-decorations-views-BottomMenuRecyclerView(BottomMenuRecyclerView.java:76)
at app.simple.inure.decorations.views.BottomMenuRecyclerView$$ExternalSyntheticLambda0.run(Unknown Source:2)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8663)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:567)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)

Detecting Trackers Issue

When I click on the option to check for trackers it just keeps spinning now endlessly. I think this used to work in a previous version but now it doesn't work anymore.

Great app! Questions and feature requests

Hi @Hamza417, nice and useful app! I see that you've put a lot of work into the visual experience too.

I have been looking for an app to replace MyAndroidTools. I use it (still, albeit not as reliable as before) to cut off receivers, services, trackers, start up on boot, etc. One of its best features is that it can backup all the cut off receivers, etc. configuration and restore them later. This is important because when an app gets updated, sometimes those changes I make gets reverted.

Another useful feature of MyAndroidTools is that it can present a list of all of the same services or receivers (e.g., boot receiver) so I can quickly disable them for the apps I want in batch.

So far, with what I see from Inure, I already know that I will be buying the premium version. I see a lot of potential for the app and I would like to see it continue to mature and be maintained for a long time to come. For people with root, this is an indispensable tool. Aside from the two examples I cite about MyAndroidTools, Inure does so much more and provides a lot more information, so I appreciate that.

Questions and feature requests:

  1. In Inure's batch action, I see that I can select multiple apps and highlight them or move them to the top. Is there anything else I can do with batch? I would LOVE batch actions to, for example, set boot receivers (boot manger), set trackers, receivers, services, etc. Doing it one-by-one and long-pressing to make changes is time consuming and hard to track. Being able to see a list of all apps with specific receivers, etc. would be very helpful too.

  2. Can Inure backup and restore the receiver, tracker, etc. settings for the apps? I do this with MyAndroidTools every so often so that updated apps with their settings changed can be restored as I want them. Facebook is one example where it sets some of the receivers each time it updates. It's very useful to be able to restore the settings and change the receivers back.

  3. This one seems outside of Inure's scope, but I'll ask anyway. Current Android's app "optimization" is lackluster at times. For example, when I launch the Alexa app, it throws up a notification and remains running even when I exit the app. I have to force close the app to get it to stop running. It would be nice to have a Greenify/Servicely-ish feature where specified apps are stopped when I am no longer using them. Obviously, I am rooted.

Based on what I have seen so far, I would recommend Inure to those who have root and want to tweak. It has so many features! I see below that there is a sponsor option. In addition to buying the premium from Play Store, I would be willing to make donations if you can make some of these features happen.

Anyway, thank you @Hamza417, for this wonderful and beautiful app--and very useful too! Very good work! I hope you find much success!

Parameter specified as non-null is null

time: 1672438817635
msg: java.lang.NullPointerException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkNotNullParameter, parameter adapterWindows
stacktrace: java.lang.NullPointerException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkNotNullParameter, parameter adapterWindows
	at app.simple.inure.popups.terminal.PopupTerminalWindows.<init>(Unknown Source:7)
	at app.simple.inure.terminal.Term.lambda$onCreate$4$app-simple-inure-terminal-Term(Term.java:405)
	at app.simple.inure.terminal.Term$$ExternalSyntheticLambda7.onClick(Unknown Source:2)
	at android.view.View.performClick(View.java:7506)
	at android.view.View.performClickInternal(View.java:7483)
	at android.view.View.-$$Nest$mperformClickInternal(Unknown Source:0)
	at android.view.View$PerformClick.run(View.java:29335)
	at android.os.Handler.handleCallback(Handler.java:942)
	at android.os.Handler.dispatchMessage(Handler.java:99)
	at android.os.Looper.loopOnce(Looper.java:201)
	at android.os.Looper.loop(Looper.java:288)
	at android.app.ActivityThread.main(ActivityThread.java:7894)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:550)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)

App can't be launched

Screenshot_20230627-152619_Inure
The app can't be launched. Endless loading screen. The entire system is not properly responding while this process until I kill Inure app.

  • Device: [Poco X3 NFC]
  • OS: [Crdroid ROM Android 13]
  • Version [Build80]

Visibility issues

I have visibility issues with the dark theme on some information sections of the settings:
Screenshot_20230112-225856_Inure
Screenshot_20230112-225902_Inure
Screenshot_20230112-225908_Inure

VirusTotal support

It would be nice to have a VirusTotal status when installing APKs. Either as a link (using the hash) or using the API (we can provide our own key). If the functionality is there already, maybe you can make it more obvious where to find it.

Setting in "create app list": izzyondroid link

The izzyondroid f-droid repo is hugely popular, containing hundreds and hundreds of applications,

is the second most popular app store after f-droid. Half of my apps are downloaded from there. It is a privacy-friendly repository. This should be added

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.