<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: ErZicky</title>
    <description>The latest articles on DEV Community by ErZicky (@erzicky).</description>
    <link>https://dev.to/erzicky</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1821402%2F3e658afa-c032-457c-8dba-269d8d9d4638.jpeg</url>
      <title>DEV Community: ErZicky</title>
      <link>https://dev.to/erzicky</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/erzicky"/>
    <language>en</language>
    <item>
      <title>Android notifications might become useful for productivity with this shortcuts tool</title>
      <dc:creator>ErZicky</dc:creator>
      <pubDate>Tue, 15 Apr 2025 12:05:16 +0000</pubDate>
      <link>https://dev.to/erzicky/android-notifications-might-become-useful-for-productivity-with-this-shortcuts-tool-567k</link>
      <guid>https://dev.to/erzicky/android-notifications-might-become-useful-for-productivity-with-this-shortcuts-tool-567k</guid>
      <description>&lt;p&gt;Like many fellow tinkerers and power users, I’m always on the lookout for new ways to get the most out of my phone, both in terms of functionality and customization. A while back, I started a new job that required me to constantly jump between a couple of apps and regularly call a few contacts. Naturally, I added those apps to my home screen for quicker access.&lt;/p&gt;

&lt;p&gt;The result? My clean setup quickly turned into a mess. And even with those shortcuts on the home screen, I still found myself going through multiple taps just to perform the same few actions over and over.&lt;/p&gt;

&lt;p&gt;That’s when I thoght about Messaging apps and how we launch them mostly through the notification so why not do the same with everything else I use frequently?&lt;/p&gt;

&lt;p&gt;What if I could pin what I use most into my notification shade for quick access?&lt;/p&gt;

&lt;p&gt;That idea turned into a weekend experiment, which eventually became NOOTI, the app I want to share with you today.&lt;/p&gt;

&lt;h2&gt;
  
  
  The current situation on shortcuts for android
&lt;/h2&gt;

&lt;p&gt;Now, I’m not the first person to think of building a shortcut app. Before creating mine I tried quite a few existing options, but I kept running into the same set of issues.&lt;/p&gt;

&lt;p&gt;Most of them either created icons or folders directly on my home screen, which completely defeated the purpose of keeping things clean and minimal. Others relied on gesture-based navigation, which sounds great in theory but many times apps accidentally launched just because my phone detected a gesture while going into my pocket. Or worse, the gesture didn’t register at all when I actually needed it.&lt;/p&gt;

&lt;p&gt;And then there were the apps that looked promising but were either completely overrun with ads or had free tiers so limited they were basically unusable without paying upfront (which I don't mind if is a small one time fee but nowdays everything is an expensive subscription).&lt;/p&gt;

&lt;p&gt;So I create my spin on shortcuts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing Nooti a simple yet surprisingly powerful tool
&lt;/h2&gt;

&lt;p&gt;NOOTI is a free (with some limitation I will touch later on) shortcuts creator that puts the shortcuts in your notification shade instead that on your homepage or side of the screen.&lt;/p&gt;

&lt;p&gt;With NOOTI you can create shortcuts to:&lt;/p&gt;

&lt;p&gt;📱 Apps&lt;/p&gt;

&lt;p&gt;📞 Contacts&lt;/p&gt;

&lt;p&gt;🌐 Websites&lt;/p&gt;

&lt;p&gt;here's an example of such shortcut on my pixel phone:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgmv7fn4lnycadq9qcrfk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgmv7fn4lnycadq9qcrfk.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see there are multiple icon the first 4 are shortcuts to apps while the 5th is of a contact and the 6th of a website.&lt;/p&gt;

&lt;p&gt;It wasn't easy but I even managed to retrieve the contact photo if it has one and the website favicon (through &lt;a href="//duckduckgo.com"&gt;duckduckgo&lt;/a&gt; api) unfortunately some websites have low quality favicons, nothing I can do there &lt;/p&gt;

&lt;h2&gt;
  
  
  Easy to use was important
&lt;/h2&gt;

&lt;p&gt;Another major issue I noticed with many shortcut apps is that they’re often way more complicated than they need to be. Some require you to install companion apps just to get the basic features working. Others ask for a lot of invasive permissions. And in some cases, just creating a single shortcut involves navigating through multiple steps.&lt;/p&gt;

&lt;p&gt;From day one, I knew Nooti had to be simple to use. Something you could pick up and start using right away. Just install it, create your shortcuts, and go.&lt;/p&gt;

&lt;p&gt;I think to have achieved that goal here's the process of creating a shorcut notification in NOOTI:&lt;/p&gt;

&lt;p&gt;first click the '+' button on the home page:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv7duprssmsb71mwv2fv8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv7duprssmsb71mwv2fv8.png" alt="NOOTI HOME SCREEN"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then select the destinations of the shortcuts you want (each category is expandable and collapsible)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcbufrhpvb4e6381rwii7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcbufrhpvb4e6381rwii7.png" alt="NOOTI notification creation screen"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you're done just tap the "Create notification" button, if all goes correctly a toast will appear to inform you that your request has been you recorded and in a couple of seconds you will return to the home scree&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb66rty29u4dwe35dey6x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb66rty29u4dwe35dey6x.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And that's it! you'll have your persistent notification with the shortcuts you created.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fighting against android
&lt;/h2&gt;

&lt;p&gt;Now, Android notifications weren’t exactly designed for this kind of use so building the app sometimes felt like I was working against the system, not with it.&lt;/p&gt;

&lt;p&gt;For instance, Android doesn’t provide a straightforward way to read active notifications, which made it tricky to manage the persistent shortcut notification the way I wanted. I needed a way to show the user their current shortcuts, allow them to delete the current notification or replace it, and — crucially — bring it back automatically after a device reboot.&lt;/p&gt;

&lt;p&gt;Since the system didn’t offer a native solution, I had to build my own.&lt;/p&gt;

&lt;p&gt;Basically everytime a new notification is created I save in the app internal storage a JSON files with written on it what the user selected, here's an example of such file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"apps"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"activityInfo"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"colorMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"configChanges"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"documentLaunchMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"flags"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;66048&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"launchMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"maxRecents"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"permission"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"com.android.vending.setup.PLAY_SETUP_SERVICE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"persistableMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"resizeMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"screenOrientation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"softInputMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"taskAffinity"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"com.android.vending"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"theme"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;2132083860&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uiOptions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"applicationInfo"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"appComponentFactory"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"com.google.android.finsky.appcomponentfactory.PhoneskyAppComponentFactory"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"backupAgentName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"com.google.android.finsky.setup.VendingBackupAgent"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"category"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;-1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"className"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"com.google.android.finsky.application.classic.ClassicApplication"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"compatibleWidthLimitDp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"compileSdkVersion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;36&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"compileSdkVersionCodename"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Baklava"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"credentialProtectedDataDir"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"/data/user/0/com.android.vending"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"dataDir"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"/data/user/0/com.android.vending"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"descriptionRes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"deviceProtectedDataDir"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"/data/user_de/0/com.android.vending"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"enabledSetting"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"flags"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;684375749&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"installLocation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;-1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"largestWidthLimitDp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"minSdkVersion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;31&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"nativeLibraryDir"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"/data/app/~~NAV70WIu2dwjKXapjQXa0Q&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d/com.android.vending-FAkE9hlUUmDuUdam1hO5KQ&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d/lib/arm64"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"nativeLibraryRootDir"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"/data/app/~~NAV70WIu2dwjKXapjQXa0Q&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d/com.android.vending-FAkE9hlUUmDuUdam1hO5KQ&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d/lib"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"primaryCpuAbi"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"arm64-v8a"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"privateFlags"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;-1408757480&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"processName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"com.android.vending"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"publicSourceDir"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"/data/app/~~NAV70WIu2dwjKXapjQXa0Q&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d/com.android.vending-FAkE9hlUUmDuUdam1hO5KQ&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d/base.apk"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"requiresSmallestWidthDp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"resourceDirs"&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="s2"&gt;"/product/overlay/NavigationBarMode3Button/NavigationBarMode3ButtonOverlay.apk"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="nl"&gt;"scanPublicSourceDir"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"/data/app/~~NAV70WIu2dwjKXapjQXa0Q&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d/com.android.vending-FAkE9hlUUmDuUdam1hO5KQ&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"scanSourceDir"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"/data/app/~~NAV70WIu2dwjKXapjQXa0Q&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d/com.android.vending-FAkE9hlUUmDuUdam1hO5KQ&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"sharedLibraryFiles"&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="s2"&gt;"/system/framework/org.apache.http.legacy.jar"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="nl"&gt;"sourceDir"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"/data/app/~~NAV70WIu2dwjKXapjQXa0Q&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d/com.android.vending-FAkE9hlUUmDuUdam1hO5KQ&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d/base.apk"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"splitNames"&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="s2"&gt;"config.arm64_v8a"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"config.en"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"config.it"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"phonesky_data_loader"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"phonesky_data_loader.config.arm64_v8a"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="nl"&gt;"splitPublicSourceDirs"&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="s2"&gt;"/data/app/~~NAV70WIu2dwjKXapjQXa0Q&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d/com.android.vending-FAkE9hlUUmDuUdam1hO5KQ&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d/split_config.arm64_v8a.apk"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"/data/app/~~NAV70WIu2dwjKXapjQXa0Q&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d/com.android.vending-FAkE9hlUUmDuUdam1hO5KQ&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d/split_config.en.apk"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"/data/app/~~NAV70WIu2dwjKXapjQXa0Q&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d/com.android.vending-FAkE9hlUUmDuUdam1hO5KQ&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d/split_config.it.apk"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"/data/app/~~NAV70WIu2dwjKXapjQXa0Q&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d/com.android.vending-FAkE9hlUUmDuUdam1hO5KQ&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d/split_phonesky_data_loader.apk"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"/data/app/~~NAV70WIu2dwjKXapjQXa0Q&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d/com.android.vending-FAkE9hlUUmDuUdam1hO5KQ&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d/split_phonesky_data_loader.config.arm64_v8a.apk"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="nl"&gt;"splitSourceDirs"&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="s2"&gt;"/data/app/~~NAV70WIu2dwjKXapjQXa0Q&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d/com.android.vending-FAkE9hlUUmDuUdam1hO5KQ&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d/split_config.arm64_v8a.apk"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"/data/app/~~NAV70WIu2dwjKXapjQXa0Q&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d/com.android.vending-FAkE9hlUUmDuUdam1hO5KQ&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d/split_config.en.apk"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"/data/app/~~NAV70WIu2dwjKXapjQXa0Q&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d/com.android.vending-FAkE9hlUUmDuUdam1hO5KQ&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d/split_config.it.apk"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"/data/app/~~NAV70WIu2dwjKXapjQXa0Q&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d/com.android.vending-FAkE9hlUUmDuUdam1hO5KQ&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d/split_phonesky_data_loader.apk"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"/data/app/~~NAV70WIu2dwjKXapjQXa0Q&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d/com.android.vending-FAkE9hlUUmDuUdam1hO5KQ&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d&lt;/span&gt;&lt;span class="se"&gt;\u&lt;/span&gt;&lt;span class="s2"&gt;003d/split_phonesky_data_loader.config.arm64_v8a.apk"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="nl"&gt;"storageUuid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"41217664-9172-527a-b3d5-edabb50a7d69"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"targetSandboxVersion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"targetSdkVersion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;35&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"taskAffinity"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"com.android.vending"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"theme"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uiOptions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"uid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;10169&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"versionCode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;84571730&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"banner"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"icon"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;2131820550&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"labelRes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;2132017467&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"logo"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"com.google.android.finsky.application.classic.ClassicApplication"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"packageName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"com.android.vending"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"attributionTags"&lt;/span&gt;&lt;span class="p"&gt;:[],&lt;/span&gt;&lt;span class="nl"&gt;"descriptionRes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"directBootAware"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"exported"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"processName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"com.android.vending"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"banner"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"icon"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;2131231759&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"labelRes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"logo"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"com.google.android.finsky.setupui.VpaSelectionOptionalStepActivity"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"packageName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"com.android.vending"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"handleAllWebDataURI"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"icon"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"isDefault"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"isInstantAppAvailable"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"labelRes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"match"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1081344&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"preferredOrder"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"priority"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"specificIndex"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;-1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"system"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"targetUserId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;-2&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"contacts"&lt;/span&gt;&lt;span class="p"&gt;:[{&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Ava"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"phoneNumber"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"+39123456789"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"photoUri"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"content://com.android.contacts/display_photo/8"&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"websites"&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="s2"&gt;"wikipedia.org"&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;&lt;span class="w"&gt;


&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's not the most elegant solution probably, but it works reliably which is the most important thing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Customization &amp;amp; Accessibility
&lt;/h2&gt;

&lt;p&gt;Even though Nooti is functionally simple, I wanted to give users as much customization as possible. The goal was to make sure the app could blend into any setup. whether you're rocking a heavily customized home screen or sticking with stock Android.&lt;/p&gt;

&lt;p&gt;So I built multiple customization features:&lt;/p&gt;

&lt;p&gt;First thing the app supports third party icon packs for the icons of the shortcuts, as you can see in this screen taken from the app PlayStore page:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhpbja9wgqr6iuarn8nnb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhpbja9wgqr6iuarn8nnb.png" alt="Third party icons showcase"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Other important thing to have to make the app integrate well into any setup was supporting android material theme and colors, let me recycle again one of the store screen to showcase it:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpbmui0duyepdqurgxv5l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpbmui0duyepdqurgxv5l.png" alt="NOOTI material"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally I've also added a few settings to manage the notification appearance:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhdwdhe05bdjpc7rgcj0i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhdwdhe05bdjpc7rgcj0i.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;and don't worry there's a light theme as well, be prepared to end up like this tho:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5gxvab25ba59i2d13zwr.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5gxvab25ba59i2d13zwr.gif" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing
&lt;/h2&gt;

&lt;p&gt;As I mentioned earlier, Nooti is &lt;strong&gt;completely free to use&lt;/strong&gt;. All the core features are &lt;strong&gt;accessible, with no ads&lt;/strong&gt; and no annoying pop-ups.&lt;/p&gt;

&lt;p&gt;That said, there is one limitation in the free version: you're capped at 4 shortcuts per notification. For many users, that's more than enough. But if you want to unlock up to 15 shortcuts, you can support the project by purchasing the Premium version for just $2. One-time, no subscriptions. I’m not a fan of subscription, so this is a simple lifetime unlock that also support me.&lt;/p&gt;

&lt;p&gt;And this app also marks a small new experiment for me: I’m introducing a second option — a $5 "All Access" pack. With that, you not only unlock Nooti Premium, but also get the premium versions of all my current and apps that have a premium tier so:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://play.google.com/store/apps/details?id=com.ZetaDev.PocketMark" rel="noopener noreferrer"&gt;PocketMark&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://play.google.com/store/apps/details?id=com.ZetaDev.WolfSnap" rel="noopener noreferrer"&gt;WolfSnap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://play.google.com/store/apps/details?id=com.ZetaDev.Nooti" rel="noopener noreferrer"&gt;Nooti&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Unfortunately, Google doesn’t currently offer a built-in way to handle this kind of multi-app unlock directly within the Play Store. So if you decide to go for the $5 All Access pack, just shoot me an email at &lt;a href="mailto:devszeta@gmail.com"&gt;devszeta@gmail.com&lt;/a&gt; after your purchase.&lt;/p&gt;

&lt;p&gt;Attach the receipt Google sends you, and I’ll personally reply with the unlock codes for the premium versions of my other apps.&lt;/p&gt;

&lt;p&gt;It’s a bit manual for now — but it works, and I really appreciate the support, It’s a small way to support indie development.&lt;/p&gt;

&lt;p&gt;I create this apps while also having a full time job and frequenting university so it's not easy. &lt;/p&gt;

&lt;h2&gt;
  
  
  Future Plans
&lt;/h2&gt;

&lt;p&gt;At the time of writing this, Nooti has been live for just three days, and I’m honestly really happy with how things are going. The response has been way better than I expected with a solid number of downloads and in-app purchases, all from just a couple of posts on Reddit.&lt;/p&gt;


&lt;blockquote class="bluesky-embed"&gt;
&lt;p&gt;NOOTI launch went well, solid downloads &amp;amp; some in-app purchases. 
But it highlighted that post purchase UI is confusing, atm the crown stops pulsating w/ premium but most users expected the menu to disappear &amp;amp; led to a lot of mail in my inbox😅

Next update will address this

#indiedev #buildinpublic&lt;/p&gt;— &lt;a href="https://bsky.app/profile/did:plc:36w4sjjutpzomwpqrurxkoay?ref_src=embed" rel="noopener noreferrer"&gt;Zicky (@erzicky.bsky.social)&lt;/a&gt; &lt;a href="https://bsky.app/profile/did:plc:36w4sjjutpzomwpqrurxkoay/post/3lmnd2kmhjs2j?ref_src=embed" rel="noopener noreferrer"&gt;2025-04-12T19:59:17.735Z&lt;/a&gt;
&lt;/blockquote&gt;


&lt;p&gt;That said, this is just the beginning. I’ve still got plenty of ideas I want to bring to Nooti.&lt;/p&gt;

&lt;p&gt;Top priority right now is adding a search bar to the shortcut creation screen. If you’ve got a lot of apps or contacts, scrolling through everything manually gets old real fast, so that’s coming soon.&lt;/p&gt;

&lt;p&gt;After that, I’d love to expand Nooti’s capabilities by letting users create shortcuts to files alongside the apps, contacts, and websites it already supports as I think that would elevate it at the next level.&lt;/p&gt;

&lt;p&gt;I also want to work on the labelling for screen reading software, making it accessible to low vision users, a good portion of the app is already labelled but it can be improved.&lt;/p&gt;

&lt;p&gt;I’m realizing this article is ending up up way longer than I originally planned, I could go on about features and ideas for a while. But I think this is a good place to stop (for now).&lt;/p&gt;

&lt;p&gt;Just like my last &lt;a href="https://dev.to/erzicky/finally-a-good-looking-markdown-editor-for-android-138g"&gt;post&lt;/a&gt;, this one turned into a mix between an app announcement and a bit of a devblog… but, I don't know, I kinda like that vibe.&lt;/p&gt;

&lt;p&gt;If I’ve managed to make you even a little curious about the app, you can check it out&lt;br&gt;
👉 &lt;a href="https://play.google.com/store/apps/details?id=com.ZetaDev.Nooti" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;you can also find a full list of feature &lt;a href="https://github.com/ErZicky/Nooti-Shorcuts-Notification" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Thanks for reading — and as always, feel free to reach out with thoughts, feedback, or just to say hi!&lt;/p&gt;

&lt;p&gt;You can follow me on &lt;a href="https://x.com/Zckyyyy1" rel="noopener noreferrer"&gt;X&lt;/a&gt;, &lt;a href="https://bsky.app/profile/erzicky.bsky.social" rel="noopener noreferrer"&gt;BlueSky&lt;/a&gt;, &lt;a href="https://github.com/ErZicky" rel="noopener noreferrer"&gt;Github&lt;/a&gt; and I also just opened a &lt;a href="https://t.me/+KVFswAdR3YhlNjM0" rel="noopener noreferrer"&gt;telegram channel&lt;/a&gt; where I post any updates about my projects &lt;/p&gt;

</description>
      <category>android</category>
      <category>productivity</category>
      <category>mobile</category>
      <category>customization</category>
    </item>
    <item>
      <title>Finally a good looking Markdown editor for Android</title>
      <dc:creator>ErZicky</dc:creator>
      <pubDate>Mon, 22 Jul 2024 18:05:50 +0000</pubDate>
      <link>https://dev.to/erzicky/finally-a-good-looking-markdown-editor-for-android-138g</link>
      <guid>https://dev.to/erzicky/finally-a-good-looking-markdown-editor-for-android-138g</guid>
      <description>&lt;p&gt;Have you ever found yourself struggling to find a decent Markdown editor for your Android device? One that doesn’t make you squint at a cluttered interface, fumble through convoluted menus or that make you go “Yes it works but…it’s ugly”? If so, you’re not alone. As a writer and heavy note-taker, I’ve been on a quest for the perfect Markdown editor, one that was: functional, good looking, without premium features and not full of extra (to me) useless ones. I couldn’t find one so I put my Java knowledge to work and I created it! And I’m excited to share my creation with the world, so meet: PocketMark.&lt;/p&gt;

&lt;p&gt;(yes I know, I can already hear you type that I should have used Kotlin and that Java is something of the past. But I decided that this project wasn't the one to make me dive into Kotlin...yet) &lt;/p&gt;

&lt;h3&gt;
  
  
  The Markdown Dilemma on Android
&lt;/h3&gt;

&lt;p&gt;Most Markdown editors available at the moment are either too basic, lacking essential features, so overcomplicated that they defeated the purpose of Markdown’s simplicity or just plain ugly to look at even when they have all the features. The result? A frustrating writing experience that hampered my productivity. (I know i'm being a bit overdrammatic here maybe)&lt;/p&gt;

&lt;h3&gt;
  
  
  Enter PocketMark: A Breath of Fresh Air
&lt;/h3&gt;

&lt;p&gt;PocketMark is a completely free Markdown editor Designed with the user in mind, it combines a sleek, minimalist interface with powerful features that cater to both beginners and Markdown veterans alike.&lt;/p&gt;

&lt;h4&gt;
  
  
  The home page
&lt;/h4&gt;

&lt;p&gt;The improvements start already from the home page, instead of a long list of files you have to scroll and open one by one, in PocketMark all your files and notes are organized in a dynamic grid resembling the one Google Keep has, making searching and identifying the file you’re searching for much easier. For example here’s a comparison between a typical MarkDown editor (on the left) and PocketMark (on the right)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuskpioao6jml58s7sfva.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuskpioao6jml58s7sfva.jpg" alt="A comparison between a typical markdown android app's home page and PocketMark's one" width="540" height="579"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  The editor
&lt;/h4&gt;

&lt;p&gt;Another big goal of mine was making the editor activity as spacious as possible, since a lot of apps tend to have big toolbar always opened so with the goal of giving you as much pixels as possible here's my take: The dynamic toolbar maximizes your screen real estate, you can open and close it at your discretion (either with the icon on the top right or by sliding the finger). The animations are subtle enough to be nice but not distracting, and if you really don’t like them you can just turn them off in the settings.&lt;/p&gt;

&lt;p&gt;For example in this tweet where I'm showcasing that tables are supported you can see the toolbar opening and closing (I suggest to see the video at full screen...thanks X compression)&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1740777511469158897-863" src="https://platform.twitter.com/embed/Tweet.html?id=1740777511469158897"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1740777511469158897-863');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1740777511469158897&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;And in this one you can see how switching between formatted text and editing looks with and without animations&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1808765438655860996-493" src="https://platform.twitter.com/embed/Tweet.html?id=1808765438655860996"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1808765438655860996-493');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1808765438655860996&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h4&gt;
  
  
  The tagging system
&lt;/h4&gt;

&lt;p&gt;The next big thing I needed was a simple tagging system to find even quicker notes that I might not remember the name, so I implemented in PocketMark a color tagging system: you can assign a color to your files and immediatly find them on the home page with the filters.&lt;/p&gt;

&lt;p&gt;Here's an old tweet where I showcase this feature (this was a bit early in development so it looks a little different now but you get the idea)&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1739352284721475683-632" src="https://platform.twitter.com/embed/Tweet.html?id=1739352284721475683"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1739352284721475683-632');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1739352284721475683&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;the colors association are managed by a json file created in the app folder, here's an example on how it looks behind the scenes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"SchoolprojectToDolis.md"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Storytelling.md"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Bluenoteexample.md"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Historynotes.md"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Programmingnotes.md"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"MytriptoItaly.md"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;nothing fancy...but it works!&lt;/p&gt;

&lt;p&gt;PocketMark support the whole Markdown package. Need to insert an image or create a table? It’s just a tap away. Want to share your work? Choose from various formats, including exporting as an image.&lt;/p&gt;

&lt;p&gt;The app’s work perfectly offline. Write, edit, and create wherever inspiration strikes you. And while it doesn’t offer sync functionality PocketMark’s files folder is freely accessible by the user or third party apps so you can use it with other services if you want.&lt;/p&gt;

&lt;p&gt;With the new update I made you can also change PocketMark folder's path should you wish for it &lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1812611685447790876-153" src="https://platform.twitter.com/embed/Tweet.html?id=1812611685447790876"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1812611685447790876-153');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1812611685447790876&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h4&gt;
  
  
  Customization and Accessibility
&lt;/h4&gt;

&lt;p&gt;While I’m personally a die-hard dark theme user I understands that every writer has unique preferences, PocketMark offer some custumization like the possibility to change the syntax highlight color and of course a light theme. Just don’t blame me if you end up like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs9bleocx2zemq2ol7rlj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs9bleocx2zemq2ol7rlj.jpg" alt="Image description" width="620" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;here's an example of dark and light theme at work:&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1747323947203313948-797" src="https://platform.twitter.com/embed/Tweet.html?id=1747323947203313948"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1747323947203313948-797');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1747323947203313948&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;The app is also fully labeled and compatible with screen reading software, making it accessible to low vision users.&lt;/p&gt;

&lt;p&gt;I can go on with features and (bad) jokes but I don’t want to reach the characters limit so I’ll leave you with this:&lt;/p&gt;

&lt;p&gt;PocketMark was created by me alone between a full time job and university and while isn’t perfect I’m very proud of it and I hope you’ll like it as well.&lt;/p&gt;

&lt;p&gt;Whether you’re a seasoned writer, a student, or someone who just loves to jot down ideas, PocketMark offers a optimal blend of simplicity, eye candy and functionality. All completely free.&lt;/p&gt;

&lt;p&gt;You can find a full lists of feature &lt;a href="https://github.com/ErZicky/PocketMark-android-markdown-editor/blob/main/README.md" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And if I managed to convince you and you’re ready to transform your Markdown editing you can download PocketMark from the Play Store using &lt;a href="https://play.google.com/store/apps/details?id=com.ZetaDev.PocketMark" rel="noopener noreferrer"&gt;this link!&lt;/a&gt;&lt;/p&gt;

</description>
      <category>android</category>
      <category>markdown</category>
      <category>productivity</category>
      <category>mobile</category>
    </item>
  </channel>
</rss>
