Skip to content

Latest commit

 

History

History
314 lines (308 loc) · 106 KB

eventual-feature-and-behavior-list.md

File metadata and controls

314 lines (308 loc) · 106 KB

Eventual feature and behavior list

These are things that Windows Phone and other platforms have that Retiled will eventually have as well, plus a few possibly more-original ideas. Moved from the readme because it was taking up too much space.

Please note that some things need to be removed as they're outdated, such as the Avalonia part as I don't use it for this anymore.

Maybe this should be split into multiple files so it's easier to read. All I know is that it needs to be updated to reflect how things currently are (at least as of October 24, 2022).

  • Start screen
    • This is just tiles minus the "live" part at the moment because that would be a little complicated, though maybe in the future some people or I could figure out a good way to integrate Python scripts (maybe I could also support Wren scripting, to have multiple options; perhaps adding Lua support as well would be a good idea) to display "live" data
    • Probably should look at the MahApps Metro Tile control, to see if there's anything I can learn from it: https://mahapps.com/docs/controls/tile
    • In addition to the MahApps Tile control, I should look at this one as well to see if there's anything useful even though it's for Silverlight: https://github.com/saurabhrajguru/HubTileX
    • Actually, maybe I should look a lot more at MahApps and what I can bring over to Avalonia as it has very Windows Phone-style controls and control appearances.
    • In addition to simple app shortcuts for the tiles, there will have to be a way to pin things like webpages, files, and contacts to the Start screen. Maybe this will be implemented with an app that can be shared to named "RetiledShortcutMaker", or something. The app would allow a user to share anything to it to pin it to Start, as long as support for that item is implemented in the Retiled share target app, rather than requiring the other app to support Retiled. Due to the number of things that can be pinned, there will have to be a dropdown box to allow the user to specify what they're pinning in case the app guesses wrongly. There should be a textbox to allow people to type in what they want the tile to say, and they should be able to edit it later. Webpages and files could be stored as .desktop file shortcuts, and maybe contacts could too, but I'm not sure if it would work for contacts. Contacts probably won't be supported right away because it's kinda complicated, unless apps would be smart enough to not try to re-import a contact's file if it already exists on the phone and instead shows the contact that's already there. Anyway, with different types of things that can be pinned, I'd have to have the pinning app take the path or whatever from the arguments I think and put that into a property, which is used to show in the UI. It would be useful to have it also be a stand-alone app that people can just type in a URL or whatever they want to pin, so maybe it could be called "RetiledShortcutMaker". With regard to the resulting .desktop files, there should be an option in the Settings app under start named "Preserve .desktop files for websites and other non-app shortcuts when unpinning their tiles", with the default being off. To ensure this works as expected, there should be a field in the Start screen config file that stores pinned tiles that says something like, IsAppShortcut, which is a boolean that defaults to True. To ensure that value is respected when re-pinning a non-app shortcut, I'll have to add a custom key (libdotdesktop_standard has support for custom keys now, just have to pass in the key and set the argument "IsCustomKey" to True) to .desktop files named X-Retiled-IsAppShortcut. If it doesn't exist, it's assumed to be True, which is the default. Otherwise, if it does exist and is False, the setting that says whether shortcut .desktop files should be deleted when unpinned as well as that particular .desktop file's location will be checked when unpinning it to ensure it's not in /usr/share/applications or other places that need root permissions to modify. These .desktop files would be stored under Retiled's own "shortcuts" folder (or maybe ~/.local/share is a better idea, because then they can show up in other UIs), and it would be a good idea to allow the user to decide whether they show up in the All Apps list (iOS 14 actually shows pinned webpages in its version of the All Apps list). Maybe when creating a shortcut, there should be two checkboxes: "Show in All Apps list" and "Pin to Start". At least one needs to be checked, or it'll refuse to do anything. Showing it in the All Apps list would have the option to not have it show up in lists set to false (I think it's the NeverShow key), while pinning it to start will have the code ignore that key when the tiles are loaded.
    • Basic Live Tiles for apps like the dialer or text message app could be handled by somehow checking to see if there's a notification for that app, and if there is, the number of notifications are put onto the tile. Somehow this number will have to be synced with the notifications so it updates in real-time with new notifications and the user clearing them (this will probably have to be done with D-Bus to make it simple and allow apps to say, "hey, I want to clear/force-update my Live Tile"). Dismissing all the notifications will have to clear the number on the tile if an app says that dismissing notifications clears the tile (notably, the Store kept the number of updates count even when dismissing its notification; I think the best way to do this is to send a signal to the app that sent the notification to tell it that the notification was cleared).
      • In addition to simply showing content on Live Tiles via D-Bus when an update request arrives, each message will be cached until the next successful (as defined by the app; "successful" can include "we can't connect" like for weather apps, because that can be important) Live Tile update.
        • Caching will operate like this to save the user's storage from wearing out as quickly: first, it'll be placed into /tmp; then a global timer set at 5 seconds will start after the most-recent message is received over D-Bus (and probably the stdin idea I have to support an alternative way of auto-updating Live Tiles, if I can figure it out) and resetting to 5 seconds after each message is received; then finally after 5 seconds with no messages, we'll move the Live Tile cache files from /tmp into permanent storage. Perhaps it would be a good idea for the user to say not to cache Live Tile data, as well as provide a way for apps to specify that something shouldn't be cached if it's media playback or something that will stop after a reboot and be invalid anyway.
        • There also needs to be a way to allow an app to store the last 5 notifications so they cycle on the Live Tile, which is described in this StackOverflow answer: https://stackoverflow.com/a/13708350
      • Would it be a good idea to allow apps to specify a QML file in their LiveTile section of their .desktop file so that layouts can be more modular? Or would that be a bad idea and there should just be a set of templates as QML files that ship with RetiledStart and apps just say what layout they want to use and we grab the requested file when loading the Live Tile? I just want it to be easy for both developers and users to add Live Tile support to programs that don't have them. My "separate QML files" idea was based on a possible way to implement interactive tiles easily.
      • Live Tiles will be able to be force-updated by their app/daemon at any time if their app/daemon is running, but if it's not running, RetiledStart will only automatically update it using the Live Tile's associated script as specified in its .desktop file every 30 minutes (that script can do just about anything and can even be a CLI app [scripts just seem simpler for this], only thing is the data has to be retuned via either the script's stdout so RetiledStart can get it via stdin, or via D-Bus). Automatic Live Tile updates will have RetiledStart cache the results on a per-app basis (also notifications that show up in RetiledActionCenter will be cached too, also on a per-app bases, thus allowing notifications to stay on reboot until cleared; it would be useful to have a "notification history" like on Android, but for both banners and on Live Tiles), just like when force-updated. This ensures content will be displayed upon the user restarting their phone, but then it should automatically update shortly after because it's been more than 30 minutes for everything.
        • Each app's .desktop file (including ones that are for its secondary tiles) will be able to specify whether they want to use D-Bus or not for the auto update (X-Retiled-LiveTileAutoUpdateUseDbus, where the default is False) so it's simpler to write scripts to update tiles, plus it should be able to work in environments without D-Bus to some extent.
      • I'll write a page that specifies the stuff I'll use for updating and clearing Live Tiles via D-Bus, similar to what Microsoft has for Windows Phone (well, this is page for Windows 10, but it's the same idea of updating and clearing tiles, but also with scheduling, though I'm uncertain of how that could be implemented if an app wanted to do something like that [maybe the app could just have a D-Bus daemon that watched the time and date? But it would be useful to allow an easy way to implement scheduling much like my ideas for doing updates and clearing]: https://learn.microsoft.com/en-us/uwp/api/Windows.UI.Notifications.TileUpdater). Of course, things will be different, but it should be similar, and will include a timestamp (in Unix time) for when it was sent which will be used to determine how old the message is as RetiledStart will also grab the time when caching it, so it knows when to automatically refresh the Live Tile. Pretty much all the keys/fields/whatever will be in a format similar to X-Retiled-LiveTileUpdatedBadgeNumber (for the number on the tile) and X-Retiled-LiveTileUpdatedBackText (names are subject to change). Also, there will have to be a way to specify which secondary tile to update (and whether or not we need to update a secondary tile; actually, maybe specifying 0 would be a way to say the primary tile, and other positive numbers would mean other tiles, but what should the name be to ensure it's not confusing and doesn't imply only secondary tiles can be updated? Perhaps X-Retiled-LiveTileSecondaryTileIndex could work. Maybe there needs to be another field that says something like X-Retiled-LiveTileToUpdateIsSecondary and if it's True, then check the other number, and don't do anything if the requested secondary Live Tile cannot be found, or if possible, tell the calling app that the tile doesn't exist), now that I realized that just editing a file won't work very well compared to proper IPC like D-Bus.
      • There will also be a way to clear Live Tiles via D-Bus, something like X-Retiled-LiveTileClearDataAndCache.
      • To know which Live Tile to update, apps/daemons will have to specify the .desktop file as used by the application, perhaps as X-Retiled-LiveTileDotDesktopFileToUpdate.
      • I'm only using D-Bus because it currently seems to be the simplest way to implement what I'm thinking about for this; would prefer to also support alternate IPC methods if someone doesn't like D-Bus/their OS doesn't support it/their device isn't fast enough for D-Bus and Qt at the same time and they still want Live Tiles and notifications. Would be difficult, though.
      • There should be a way to allow pinned websites to have live tiles where the page can be loaded in the background and after a little while (once the page is finished loading) a screenshot of the page is taken and saved for that tile. Only potential issue is that websites that don't like adblockers might complain or stuff might appear in front of the requested screenshot item, so I'll have to figure out how to deal with that.
      • Hypothetically, a compatibility daemon could be written that grabs the D-Bus messages sent to the Freedesktop Notifications thing and re-emits them to update the Live Tile for the app it came from, so that there's at least some form of data on tiles that don't otherwise support it even without the auto-update scripts. This would be an extra component that's not activated by default, and right now I probably won't write it, but someone else can if they wanted to (actually, if I'm really bored/want that feature really bad I might end up writing it eventually, but it's not likely something I'll do). .desktop files would have to have another key in them, something like X-Retiled-LiveTileIgnoredByCompatibilityDaemon so that apps that do handle their own Live Tiles won't have to fight with the compatibility daemon. There could probably be multiple ones written, so there has to be a way to say to start a specific one in the Settings app. Clearing notifications would have to be grabbed by this daemon too so it can clear tiles, I guess. Probably would also be a good idea to have a "Live Tile management" UI so that Live Tiles managed by this daemon can be cleared manually if there's a problem, also in general having a thing for users to clear Live Tile caches would be a good idea to just have. The daemon's UI should also have a way for the user to tell it not to update a particular tile in case they have issues with it/they want to test stuff/just don't want it doing anything, and there would be an "ignore list" file that this would be stored in and can be shipped with it with a list of tiles to ignore by default in case there are any that are known to have issues/don't properly specify that they handle their own Live Tiles and the daemon should therefore ignore their notifications.
        • This compatibility daemon will have to handle all the notifications because you can only have one running at once, so I will need to allow the Action Center and its notifications to be told to listen to an alternate but still compatible (same paths, methods, and stuff) D-Bus service, one that (in the case of the compatibility daemon) would take notification data from org.freedesktop.Notifications and re-emit the data over D-Bus to both update Live Tiles that it's in control of updating and show notification banners and/or in the notification list and stuff for apps that the user wants to have show them. It would only change what's intended for the Live Tile data and otherwise pass through the original notification stuff.
        • It would also have to handle passing through data from the Action Center to the notification, for obvious reasons so things don't break.
        • In addition to updating Live Tiles for otherwise-unsupported apps, I'd like to recommend to have it update lockscreen notifications if possible (the one with details and the five short ones at the bottom that I think are numbers-only) for apps that don't have support for them. There would have to be the same thing to ignore apps that handle it themselves (in this case, probably X-Retiled-LockscreenNotificationsIgnoredByCompatibilityDaemon), but I don't know how to ensure that only apps that are shown on the lockscreen have their notifications/indicators updated (an idea I have is to check if an app is selected by the user to appear on the lockscreen and update its notification if it gets sent a message, but if it's not there, reply with something that says it's not displayed; I wrote something similar in the lockscreen section way below).
        • As a result of handling lockscreen notifications for unsupported apps, the compatibility daemon would have to have a way to let the user pick only the apps that it can and is supposed to handle in addition to the ones that natively support lockscreen notifications. Maybe there can just be .desktop files (or if we need something purpose-built, manifest files a bit like the Windows ones may be necessary, but I'd prefer both to have things mostly in a .desktop file for organization and to not have things be too close to Microsoft's stuff on a technical level because that may cause issues, but if it's what needs to be done, it's what needs to be done, and maybe it would even help developers that are used to Windows if they want to still do stuff for apps here, but XML isn't very good and I probably should try using yaml at most) that the compatibility daemon ships with that tell it how to handle notifications from unsupported apps that get sent to it, but it needs to first check the app's real .desktop files and the user's configuration for the daemon to know if it should handle a particular Live Tile and/or lockscreen notification update.
    • There's also the app list to the right of the tiles, and the search box there along with the letter categorization are both essential to Windows Phone and Windows Phone-like environments
    • Tiles by default will use the user's Accent Color (also applies if the .desktop file for an app specifies it should use "transparent" for the tile; this is an idea I got from MSDN: https://docs.microsoft.com/en-us/previous-versions/windows/apps/hh779724(v=win.10)), but there needs to be options to either use a custom color for a tile, get the color from the icon, or get the color from the app's .desktop file in an X-Retiled-DefaultTileColor key. If that key is empty or invalid, it'll fall back in a few ways: whatever color the user set will be used first, but if it's not set, then the user's accent color will be used; in the event a wallpaper is set and no custom color is set, the tile will instead be transparent to let the image show through. The custom color is a thing in case people don't like the auto-color feature or the default tile color, or they're using monochrome icons. Users must have the option to override the default color to instead have the tile show their Accent Color, a custom color, or a color from the icon, though using their Accent Color with a background will make the tile's background transparent.
      • Tiles will also be able to show full-tile images, so there needs to be a thing in the .desktop file that specifies the image to use for each tile size as well as whether the image should be displayed as a full-tile image instead of just an icon. Additionally, tiles need to support high contrast images for use in the high contrast themes: https://learn.microsoft.com/en-us/previous-versions/windows/apps/hh831183(v=win.10)
    • Medium tiles look good at 150x150 and wide tiles look good at 310x150, but small tiles at 70x70, aside from being decently sized and having correct margins, don't properly fill the wide tile's empty space if there are four of them that should go in a box together. This doesn't even include the fact that small tiles need to have their labels hidden, as that's what WP did. Forcing four small tiles onto the same row looks good, though.
    • Microsoft has this page, which describes tile sizes: https://docs.microsoft.com/en-us/previous-versions/windows/apps/hh781198(v=win.10)?redirectedfrom=MSDN
      • Turns out the actual tile sizes at least for the 720p WP8.1 Update 1 emulator image at 100% scale when divided by 2 are different to even what Microsoft says here. Probably this is due to scaling stuff up or down (this SO answer mentioned that it does scale images down by 1.6, so that's where I'm getting this idea from: https://stackoverflow.com/a/12958512 ), so Microsoft just says the other values so it's simpler for developers to deal with.
      • These values are:
        • Small: 74x74
        • Medium: 157x157
        • Wide: 323x157
      • These are the values I'm using now, as the size appears to be more accurate to the emulator and thus the tiles get centered properly with the correct margins on the left and right sides of the tile area.
      • Turns out these values aren't a good idea to use, as they'll cause a misalignment on the PinePhone when rotated into horizontal mode. I'll use the documented values and just add more of a spacer on the left I guess.
    • Not sure how tiles will be added to the Start screen. Maybe they'll all be in a grid with rows and columns set to be the smallest size, and just have each tile's RowSpan and ColumnSpan be what they need? There will have to be a system to determine whether a grid cell should be empty or not. Maybe this page will help a bit with adding the tiles dynamically: https://social.msdn.microsoft.com/Forums/vstudio/en-US/25fb2c46-8298-4f4f-a653-c3abc405b1a8/dynamically-adding-controls-to-grid
      • TilesGrid will help with this, probably.
    • Tiles need to allow drag-and-drop to reposition them. Not sure how to save the repositioned tiles, but this could help with implementing the basic parts: https://doc.qt.io/qtforpython/overviews/qtquick-draganddrop-example.html?highlight=gridview
    • 8.1 added three-column view for more devices than it was previously available for. Experimentation with changing tile sizes shows that 100x100 medium tiles, 210x100 wide tiles, and 45x45 small tiles looks almost perfect (aside from small tiles not going into a box together). There would have to be a way to ensure tiles stay where the user originally put them when going into three-tile mode. Additionally, tile fonts and icon sizes need to be adjusted to look right when they're smaller. NB: The designer has three-column view incorrect, so three-column view works even when tile sizes are meant for two-column view.
    • Start screen wallpapers will be handled like WP8.1, where the tiles were fully transparent and the wallpaper was visible behind them. Scrolling would have a parallax effect, so that's required to be added, but there should be a way to turn it off so the image doesn't move as you scroll since I'm sure not everyone would want that. The Windows Community Toolkit Sample App has parallax scrolling on the homepage with the image in the background, so I should look into how that would be done in Avalonia. Maybe some people would want blurred or not-fully-transparent tiles, so that would be something to look into allowing at a much later date. Blurred tiles wouldn't be the default, and the blur intensity would be configurable like KDE. Any other blurring would be handled by third-party themes as I personally don't like blurring, but it might look cool on tiles.
      • I found a (probably inefficient) way to do this here: https://forum.qt.io/post/111906 Basically, it would need to load in an image into a hidden Image element (we can't show this directly), then we use the parallax scrolling thing to determine which part of the image should be shown for each tile by using each tile's size to "puch out" a hole in the scrolling image. There has to be a better way to do this.
      • sourceRect could be used to determine which part of the image should be shown based on the tile's x-value and y-value, as well as height and width, and that would be the sourceRect for a ShaderEffectSource applied to the tile background (icons and stuff will need to be moved back out of the background for this; we also need to have a way to switch between a rectangle with an accent color if not using a tile background image and an item if using a tile background image and the tile's requested background color is the same as the user's Accent color): https://doc.qt.io/qt-6/qml-qtquick-shadereffectsource.html#sourceRect-prop
    • Qt has a parallax scrolling sample here, though it's for Qt4: https://doc.qt.io/archives/qt-4.8/qt-declarative-modelviews-parallax-example.html
    • Because some apps had tiles that were opaque even with a background, users should be able to specify which tiles are opaque and which are transparent.
    • Some Live Tiles should have a way to say they work when the tile is small, like the calendar to show the day. This would be a variable in the file that stores tile location, size, color, etc. Actually, maybe it should be a part of the app's .desktop file as an X-Retiled-LiveTileWorksWhenSmall key, unless that would conflict with the possibility to allow deep-linking, which it shouldn't because new .desktop files would be made for shortcuts. This should also be something the user can easily configure.
    • As one of the few planned features that originated in Windows 10 (I really hope desktop 8.x had this as it'll make me feel better about adding a 10 feature), Live Tiles should have a way to turn them off in case they update too much or the user doesn't like them and prefers to have a static icon.
    • Perhaps tiles should be able to have stuff defined in a file separate from the associated app's .desktop file, so that apps can be given Live Tiles without having to modify their .desktop file? The way we'd do this is by first checking in, say, /usr/share/retiled-tiles (or the user's home folder path like for .desktop files, if it exists in there) for the .desktop file associated to a given pinned tile, and that file will say what should be displayed on the tile (such as icons and the name, if it needs to differ from the app's main .desktop file), how it should update (if at all), and anything else that can vary. Of course, .desktop files in these directories won't have Exec keys, as that'll be pulled from the main one and this is just basically an extracted version of the X-Retiled-LiveTile section to make it easier to add Live Tiles to apps without modifying their main .desktop files. Thus, these will be auxilliary files, and they will only be used if the relevant section doesn't exist in the app's main .desktop file.
  • Search app
    • Something like the old Bing search app from WP8.0 rather than Cortana
      • Would be cool if someone built something similar to Cortana that used an open-source backend, though
      • Settings, files, and apps would have to be included in the search results and suggestions, but this would be a separate Pivot from the web search (just to the left of the web search Pivot, for ease of reach). Suggestions would have the name of the result with the Accent color filling the matched characters, and with at least settings suggestions (but it would be a good idea to do this for apps and files), it would write what the result is (when not using High Contrast) in a grey-er font color next to the name of the suggestion, as if to say quiet hours (grey)settings(/grey). This is how Windows Phone did it when not using Cortana. I don't know if it showed icons in suggestions, but it should do so, as well as in search results. Tapping the suggestion would go right to that app or setting instead of searching for it.
      • It would be cool to add support for additional search suggestions and results in the Pivot on the left of "web" results, like contacts, emails, and anything else. I don't remember if Windows Phone had this, but it would fit in well considering the People Hub allowed stuff like that. Additional search result sources would display the app they were returned from so that the user knows what gave them the result.
      • Almond Stanford Genie (apparently Almond was renamed to Genie at some point) has stuff like Cortana where you can ask it the weather and stuff, and would probably work well for this: https://flathub.org/apps/details/edu.stanford.Almond
      • Those that prefer Google Now's assistant could use the unofficial desktop client as linked below.
      • There needs to be a setting for people to choose the default app that runs when you hit the Search button. At the moment, the options would be:
        • RetiledSearch (I should add a button to let people use the microphone to enter a search term, both for accessibility and because I think the Bing Search app had it and a major goal of this project is to try to re-implement as much of the WP experience as possible, plus other apps allow people to use the microphone)
        • Stanford Genie (https://dev.genie.stanford.edu/)
        • Google Assistant Unofficial Desktop Client (https://github.com/melvin-abraham/google-assistant-unofficial-desktop-client)
        • Carola (So far only understands German, but may as well add it: https://marius.bloggt-in-braunschweig.de/2021/08/06/carola-personal-voice-assistent/)
          • Another page for Carola/PVA: https://fedoramagazine.org/your-personal-voice-assistant-on-fedora-linux/
          • This would probably need a UI built for it, if it doesn't have a useable one already. If it becomes useable for a wide variety of languages, it could become integrated as an optional feature for RetiledSearch, but off by default. Or maybe it should be its own thing, considering I'm planning on adding a microphone input thing for RetiledSearch and I want it to remain as light as possible.
        • something that can use Rhasspy, though it's rather large by default and uses Docker, so there will have to be a way to allow people to separate the UI client from most of the server if people want to have the server on another device, so that phone-related commands still work when offline (https://rhasspy.readthedocs.io/en/latest/)
        • Custom command (textbox where the user can type a command to run when pressing Search; it'll be run the same way anything else is started from the navigation bar; there should also be a box for people to enter a command to run if they press and hold the search button, though as a fallback will just be the command that runs when they tap the button if they don't put anything in the box) There will also be an option to give the commands a command-line argument, so a browser can be opened to a search engine's homepage, for example. This will require checking a box, that way it'll be easy to determine whether to use the argument or not.
    • Currently this is just a textbox and a button that opens Bing with the search term in the default browser
      • Ideally you would get a list of search results right in the app instead of having to go to Bing (or your preferred search engine, when switching them is supported), just like the old Bing Search app would do. That would involve using APIs for search engines though, and while it shouldn't be that bad to support APIs for Bing, Google, and DDG, it may be difficult or impossible to support APIs if the user just types in a search URL for a custom search engine that's not already listed. Adding support for APIs will mean I'll have to also add settings to configure how the search engines function, such as for safe search. Some settings could affect multiple search engines, but some may be specific to certain ones.
      • The only problem with the idea of using search engine APIs is that they tend to seem to require paying money if you have too many requests per day, which is clearly shown in the Bing Search API page. In some cases like DDG, they only have a portion of their results available via an API. Might have to display results in a Qt WebEngine (actually we'll be using the WebView for simplicity) page, which is Chromium-based and might not even work on phones (unless it will?), unless someone chooses to have it open the default browser instead. Not sure how to have opening links go to the default browser instead of staying in the search app while also allowing new searches to be done in the same search app window. In any case, guess it'll need a reload button, an "open in default browser" button, and a button that goes back to the main page of the app.
        • We can probably optionally load in CSS to make it match the user's theme better. There's an example using JS on this SO answer: https://stackoverflow.com/a/60761233
          • What I've just realized is we may be able to hide the search bar via injected CSS (kinda like I do with no-downvote-display, actually, now that I think about it, but slightly different) and display the user's current search term in the QML textbox at the top. We'll have to handle interpreting spaces and other HTML symbols, both to send to the webview, as well as to retrieve from the webview if the user clicks a "did you mean" thing.
          • We could probably also hide the tabs at the top of the webpage and just have the Pivots for a few of them (web, images, and videos like the Bing Search app on 8.0 as of August 2013) so that when the user swipes between the Pivots, we take the current search term and change the address for it to like /images?q=; this will require having a list of expected search subpages that we'll have to load as Pivots (up to the recommended limit Microsoft says, because I don't want anyone to be confused).
            • Bing uses /search?q= for the main search and /images?q= for images, but /videos/search?q= for videos.
            • Google uses /search?q= for the main search as expected, but images requires /search?q=(whatever)&tbm=isch and videos requires /search?q=(whatever)&tbm=vid.
            • Important: Remember to reserve a Pivot for the on-device search, such as for files, contacts, installed apps, and settings. Each will have a "view more" button to show more results so we don't display a giant list. If possible, I'd like to also somehow return the top few results from the user's package manager as I think that was a feature in WP and would be nice.
            • Funny enough, the Bing Search app appears to actually be doing what I decided to do, at least for the "images" and "videos" Pivots, as going over to them now presents broken styling and just shows the respective page's results with no search box from the website visible, and if you haven't opened IE Mobile yet, you'll be asked to set up Internet Explorer and either use the recommended or default settings. I do however need to figure out how it knows to just display images in a swipeview when tapping on them so users don't get taken to the destination website if they don't want to be. Videos just have a popup page that shows up with another IE webview embed, but I wonder if that's not how it's supposed to be and instead it's just supposed to open the video in the player, or maybe not. One thing's for certain at least now, starting a different search doesn't let you use the Back button to go back to the previous search, so that's another feature I would have that the Bing app apparently didn't, or at least doesn't now.
          • Custom search engines can also have a list of these subpages added into them by the user when they're set up, so that the Pivots and QML textbox can be displayed (but this should be optional so the user can turn it off if it doesn't work well). We should also store each custom search engine in its own file similar to Firefox having each in a list, both to make it easier to add new default ones, as well as allowing users to add more than one. This will also make it possible to easily use custom CSS files, as we'll just look for "$USER/.config/Retiled/RetiledSearch/CustomSearchEngines/" + searchEngineId + "/" + ".css", where searchEngineId will be loaded from the file that defines a search engine. If we can't find the CSS file, we'll turn off the enhanced UI features like using Pivots in place of the smaller buttons and the QML textbox in place of the in-page textbox. If we can't find a requested search engine, we'll fall back to Bing.
          • Remember to not hide the search engine's logo though, as some like DuckDuckGo require displaying their logo next to the search results I think if I remember correctly. This will also help the user identify which search engine they're using at any given moment.
          • The scrollbar will need to be modified to not be like Chrome as much: https://stackoverflow.com/a/47983380 If that answer goes away (since it's not accepted as the answer and I hope it'll work), it's this: ::-webkit-scrollbar { width: 40px; } but on three lines; this answer was written by Sz. David and it's apparently for the WebEngine, not WebEngineView.
        • The user changing their Accent color and theme will require us to reload the CSS I assume, but we'll have to also grab the current colors from settings and slipstream them into a copy of the CSS file before loading it into the page. This may take more memory, though.
        • We should be able to handle element tilting, right?
        • An option to turn off JavaScript for this WebView/WebEngine would be a good idea, but it might not work with everything so some search engines might work better with the custom CSS injection when not using JS (I know Bing doesn't display the other tabs anymore if you're not using JS last I checked). This would be neat and possibly reduce CPU usage and improve privacy. Sometimes JS might be needed to press a button in the results, so we'll need a thing in the appbar drawer to turn it on and off (will refresh the page, though; should this just be for this session, or should we save it to the config file?). Wait, I just realized this may prevent us from injecting the CSS into the page. How else can this be handled? Genuine question.
        • This still doesn't solve the issue of making sure the search results that get clicked open another browser, unless maybe we check if the destination is contained in the root URL? Then we'd need to store the address (https://bing.com/, for example) separately from the query string (?q= as an example). That genuinely sounds like it might work. We'll also have to store the current URL in a variable to compare it, and only if they match enough will we update the stored URL. Alternatively, we could see if the destination starts with the root URL, which would be better. I don't know a good way to do this and handle stuff like allowing the user to, say, sign into Bing Rewards inside the search app (but actually, that would probably go to a different address, so it still wouldn't work with my idea).
        • Back navigation can be done by checking the canGoBack or whatever property, and going back if that's possible. If we can't go back, then we close the search area and return to the Search app's main page.
        • There should be an option in the settings to clear the cache for the webview/webengine, but I don't entirely know how to do that yet.
        • I need to hide the WebEngine/WebView/WebEngineView until it's fully loaded so the CSS can be injected and avoid a white flash or other visual disturbances.
      • Eventually it'll support choosing the default search engine
    • What would be really neat is if it had support for daily images if the user wants to show them, including but not limited to the Bing Image of the Day
      • Found this SO answer describing the ways you can get the image. I'll go with the JSON one because that would probably be easiest in Python: https://stackoverflow.com/a/18096210
        • What's nice is that the JSON response has copyright details in it, so I can just have that go in the "i" popup as described below. Of course, there needs to be some way to go to the Bing search page for that image, too.
        • In case the answer gets taken down, this is the URL: http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-US
        • mkt is optional and its value can be replaced with any other language-Region pair.
      • This would just be the US at the beginning because that's what's easiest for me to test, but eventually it would have the option to use any region that has Bing Image of the Day stuff
      • Not sure if Microsoft would be ok with someone's project having built-in displaying of their images (should be fine as there are Linux programs that change your wallpaper to the Bing Image of the Day). Probably should have something that either goes to the Bing homepage (or the page of the daily wallpaper source that has image copyright info) or get the image's copyright info from Bing to display it in a popup that shows up when you press the i button in the Command Bar. Probably should just have an i button that goes to the page with image copyright info.
        • Actually, the copyright/info thing is handled by a small, mostly-transparent (I think) copyright (C) button in the lower-left corner of the background image area (but the background image goes behind the appbar, so it's above the top of the appbar a little). Tapping it dims the background image and the text kinda does a "whoop-ooh" thing where it overshoots the final scale and goes back to it like an elastic band. All the other UI controls (excluding the image) stay at the same opacity/brightness when the info text is displayed.
        • The area of this button is square and relatively large, but it's transparent and the only way you'd know it was there is by the copyright icon, which disappears when displaying the info text. I think maybe it could be an i in a circle instead, just in case not all image sources that are used are copyrighted, then still display any available copyrights in the info text? Image source providers (remember, these are basically plugins or something; I talk about them somewhere else here) would have to specify where to get the image info anyway.
      • I'll probably have to include a default image like WP8.0 (and 8.1 without Cortana) in the source files so that something can show up when there's no Internet connection or the image can't be downloaded for some reason. This image will have to be royalty-free, probably something under a Creative Commons license. Could also use one of my pictures I've taken, as there must be one that gives Bing vibes. The copyright info on this one will be the same format as the rest of them on Bing, but copywritten to me, and I'll probably put it under CC-BY and the latest version.
    • Not sure how it would be implemented, but it would be cool if people could hold the Search button and have their chosen search app open in a listening state, just like Cortana. Not sure if the Bing Search app had that too or not, so I'd have to check the emulator.
      • I think this can be done if the app has a command-line argument to launch and listen automatically.
    • I'll probably have to allow this app to be installed separately from the rest of Retiled, as it may eventually become useful enough on its own that people would want to download only it and nothing else. As a result, I'll probably have two packages: RetiledSession and RetiledSearch. People installing from GitHub will be recommended to download the RetiledSession package as that'll allow everything to be available, while the RetiledSearch package will only have the search app. This'll also be how I'll probably have it set up in the AUR if I can figure out how to make packages for it. I was wondering if I should leave the search app out of the session package (and just have a "full" package that pulls both the session and the search packages in), as it may be considered an "extra" even though the Bing Search app launched from the Search navigation bar button was a somewhat important part of the Windows Phone experience.
    • One thing in particular to keep in mind about this app is that the appbar goes from partially transparent to opaque as soon as you open the appbar drawer. This is also the case with some other apps, but it's easiest to notice here. I need to figure out a way to recreate that effect. I do know that QML lets you set the drawer to visible, which opens it all the way. Not sure if it counts any of its pixels being on screen as "visible", but if it does, that may be useful. Otherwise, I may be able to have it turn opaque when the ellipsis button is in the "down" state. Only problem with that is that there's almost nowhere to open the appbar drawer by tapping the ellipsis button on the PinePhone, so the easiest way to open it is by dragging it up. There may be a way to add something that will listen for a tap, but ignore everything if the user begins dragging. That may help out with ensuring that the appbar can only be dragged from the left and right sides (or in some cases like IE Mobile, only the right side) so that appbar buttons can still work. Now that I say this, I remembered that the "right-click" key on the keyboard also opens the appbar drawer, so it needs to be included in making the appbar opaque.
  • Navigation bar
    • Navigation bar always stays on the physical bottom of the phone, unlike what Android does with its software buttons.
    • Software WP navigation bars rotate the icons to the left or the right when the screen is rotated, but some people might not like that so there needs to be a way to lock them in the vertical rotation.
    • There should be a way to allow people to use their accent color for the navigation bar background color, as that's a feature in a version of 8.1.
    • The buttons make the phone vibrate on contact, but there should be a way to allow people to turn off the vibration if they don't like it.
    • Not sure what Windows Phone officially used, but the emulator used the Escape key as a keyboard shortcut for the Back button as I found in #4.
    • Long-pressing the Escape key when using the emulator opens the multitasking area, but that may conflict with apps listening for Escape to go back, so I may need to send Alt+Tab instead. Whatever I'm using to do multitasking will have to handle Alt+Tab to open a view where the user can select the window they want, or close ones they want to close.
    • I may use the Maliit framework to send the Escape key to apps, which is also described in #4.
    • Perhaps there may be a way to use D-Bus so apps can say whether they can currently go back or not, and handle the Back button in a way consistent with their own navigation (like in browsers) rather than just using Escape. Of course, sending Escape will be the default unless an app says they can use enhanced Back button functionality, in which case they'll have to handle whatever I decide on (likely X-Retiled-BackButtonPressed; there will also have to be a way for it to be sent when pressing the Escape key on the keyboard for any apps that have enhanced Back button support).
      • Nah, using D-Bus for the Back button instead of Escape would be too complicated to ensure it only goes to the intended app, though I do need to ensure the compositor focuses windows when the user switches to them, because otherwise Qt can rightly complain that it can't send keypresses to nothing. Plus Escape is actually what the real Back button sends anyway, according to this thread on the Unity forums: https://forum.unity.com/threads/exit-button-for-windows-8-phone-app.195476/ It's really funny that despite generally being accessed through an event handler-friendly method (OnBackKeyPress), it's just a fancy Escape key. Thought that was just some compatibility thing for the emulator or something. It's fine though, because it can also close some popups and menus by default, so it would make adding support for it easy if an app already has keyboard shortcut-based page navigation.
      • As mentioned in the part about allowing alternate launchers, handling the Start button will probably ideally be done with D-Bus (or another IPC method, if possible) so that it's simple to communicate with the current launcher (by default, RetiledStart) to tell it that it was activated so it can show itself, go back to the top/main page if it has that functionality, or run if it's not detected as running and available to take a message from D-Bus. There would have to be a way to ensure only one launcher is active at once, but that's an issue for another time, hence it being a wishlist feature.
    • Hopefully the Maliit keyboard dismisses itself when pressing Escape and prevents the app from getting the signal.
    • Something else I might use is evscript, which is a scripting environment for keyboard shortcuts basically: https://github.com/unrelentingtech/evscript
    • What's cool about evscript is you can just have it run your "key presses" as a command, plus it seems really light. I'd prefer not having to run something when pressing the Back button and just have a library, but hopefully this'll work well enough.
  • Action Center
    • Long-pressing the quick action buttons at the top will open the relevant page in Settings, which is something I forgot 8.1 lacked. (Thanks to TheMobilizer for the suggestion!)
      • Some Quick Actions won't have a long-press command as it won't make sense for everything.
      • Brightness will display a slider on long-pressing it, along with a button to go to brightness settings to ensure people can still get more than just a basic slider on long-press. Additionally, sliding this slider won't hide most of the Action Center, unlike how Andoid does it (I want to know what it'll look like based on what I'm already looking at, so sometimes I have to change it multiple times to get it just right. This wastes my time).
    • The Quick Action button panel will be able to scroll horizontally to hold more buttons. (issue #10)
    • There will be a button to enter edit mode, which will allow Quick Action buttons to be rearranged and hidden directly from the Action Center without having to open Settings (Windows 10 has something similar, but I want to ensure editing only happens if the user says to, because we're going to allow horizontal scrolling).
      • This is a bit like Plasma's panel edit button, I guess.
      • Even the edit button should be able to be hidden from the Quick Action panel, though there should be a warning to let the user know that removing the edit button will require them to go into Settings to turn it back on and/or edit the Quick Actions panel. There still needs to be an easy way to leave edit mode even without the button. Maybe the edit mode button should only be removable from Settings, and removing it leaves edit mode automatically.
    • Custom Quick Actions will be allowed, which will make it easy for more things to be added without Retiled having to add support for them.
      • All the built-in Quick Action buttons will be implemented this way once it's available, to provide examples.
      • Maybe there should be a way for apps to add and remove Quick Action buttons at runtime, which would present the ability for essentially a system tray button to exist in "phone mode" for stuff like instant messaging clients (long-pressing on them would simply present the expected list of options).
        • Obviously, phone screens are usually too small to have a proper system tray with notification icons, so apps (or a compatibility daemon) could listen to D-Bus messages when switching between "phone/tablet mode" and "Continuum/full desktop mode", so that they can have their system tray icons on the taskbar. Or, you know what, we could just move them ourselves because we (or possibly a third-party daemon that handles system tray icons, but there would have to be a way to allow plugins/extensions more like GNOME Shell or Plasma I guess; maybe that could work here, because I'm thinking the time, date, and stuff in "Continuum/full desktop mode" could be implemented as loadable items like the Quick Action buttons) would've already given the system tray icons in the Quick Actions panel a category like system-tray, so we or a third-party daemon would already know they're supposed to be displayed in the taskbar and not in the Quick Actions at the time. There should be a way to let the user know it's a system tray icon and not a regular Quick Action, too.
          • I think it would be cool if we could allow them to simply show up in the system tray (in this case, stuff like volume, battery, and clock, unless a system tray notification icon compatibility daemon is active) on the desktop modes automatically and display their long-press menu as the context menu and have the single-tap function be used as the single-click function, unless it specifies otherwise (single-clicking could instead bring up the same as the long-press menu, and right-clicking brings up a short menu like the Windows volume control applet). Obviously, not every Quick Action button will translate 1-to-1 and make sense with this (flashlight, because it's on a desktop; and edit, because there will just be drag-and-drop [also there needs to be a way to drag items into an overflow menu in the system tray like Windows 7 and above, because there could be a lot of items] but we'd still need a way to add or remove stuff from the list like Plasma), and not every system tray icon will make sense as a Quick Action (time and date, because that's duplicated functionality), so there will be a way to have a thing (haven't figured out what to call them yet; mini-Plasmoids? Tray Widgets [or maybe even Tray Applets, to reduce potential confusion someone that's used to Android might have], because the Quick Action panel and the system tray are both trays in a sense and both have similar functionality to each other?) only show up in one and not the other, or have different functionality in one compared to the other. System tray-only items will only appear on the Continuum or full desktop modes, because they don't have functionality/don't make sense for their intended use to work with phone or tablet modes. But one thing's for certain, they'll appear differently in the system tray compared to the Quick Action panel (I'm thinking toggle buttons will still use the user's Accent color for their background though, so Airplane Mode for example will appear on in the system tray when toggled from the Action Center and vice-versa). There probably should be a little popup that contains the rest of the Quick Action toggles that say they don't support the system tray mode, just in case someone really needs one (this can be titled "Quick Action-only items" so it doesn't sound too mean, while also being clear it's for stuff that only works as Quick Actions). It would be a good idea to allow users to say whether they want to Display compatible Quick Action buttons as system tray items in Continuum or full desktop modes (text underneath it will say Incompatible Quick Action buttons will be available under Quick Action-only items; turning this off will require using the Action Center like in phone or tablet modes.), because it's very possible that someone will want the Quick Actions to all stay in the Action Center, which in Continuum and full desktop modes will probably move to be easier for mouse users (maybe it could be like desktop Windows 10? Or maybe like early Insider Preview builds, with the small Action Center? I rather liked that one, but it would need to be a little bigger, and with Quick Actions added [but should they only be added if displaying compatible Quick Actions as system tray items is off? Maybe they should, because incompatible ones will get their own pop-up menu.]. In any case, I want the Quick Action buttons at the top for consistency, but an option to move them to the bottom like current Windows 10 could be helpful. Only problem is it may be difficult to scroll the Quick Action list without touch input, so maybe offering an expander in desktop mode or a way to show a number of rows the user specified would be a good idea). Should dragging around items here affect the Quick Action panel, though? I think they should be kept separate, unless a setting to synchronize displayed items and their positions is checked; only potential issue is I don't know how to handle the hidden items (in the popup drawer like on Windows 7) and Quick Action-only items, so maybe it won't be synced after the first time going into desktop mode, as that'll copy the layout config file from the Action Center's configuration, but we should use the Action Center's config directly if displaying compatible Quick Action buttons as system tray items is off, because if someone doesn't want something to show up on their phone, they probably want it hidden on their desktop UI, too. After copying the config file, we should tell the user that changes to system tray layout when displaying compatible Quick Actions as system tray items will not be synced back to the Action Center, but changes to the Action Center on desktop when not displaying compatible Quick Actions as system tray items will; provide a way to let the user choose which option to use, with a message saying they can go to Settings (add the path, too) to change it later. We should still hide items from apps added at runtime if the user added that app to a blocklist, because it would be annoying and confusing to add it to a blocklist again after they did so.
        • Users will be able to prevent Quick Actions from being added at runtime if they don't want apps just putting stuff in there randomly. They should also have the option to show them on a case-by-case basis and have block and allow lists.
        • When in edit mode, removing one of these buttons will blocklist it, and it can be removed from the blocklist by re-adding it from the list.
        • The block and allow list system will be like Windows, where you can click the slider next to an app in the Windows Settings app to turn it off.
        • Moving them in edit mode will require remembering them, like what Windows does.
        • There also needs to be an option to "forget" an app, just in case it was uninstalled or updated and changed its name/id.
    • Dismissing notifications
      • Dismissing a single notification from an app when that app has multiple notifications should only dismiss that one notification. (Again thanks to TheMobilizer for suggesting this!)
      • When an app only has one notification, the line for the app's name and icon gets dragged slightly behind the notification. This will allow the 8.1-style notification dismissal effect to partially continue to exist unless the app has multiple notifications.
      • Dragging an app's notifications with two fingers will dismiss all notifications from that app with the same effect as WP8.1 where the two notifications around the first-selected notification take a bit to slide, then the next two, and so on. Pretty sure that gesture dismissed all of them at once in 10, but not having an easy way to dismiss only one app's notifications without sliding over the name and icon row was painful.
      • Dragging with three fingers will dismiss all notifications, since it could be useful.
    • Opening Action Center first shows the date, battery percentage, and other details along with the Quick Action buttons before showing the Notifications part, and you can just have the window stop partway down to only show the Quick Actions.
    • See Status bar for how the Action Center opens in landscape mode.
    • Opening Action Center closes the volume control UI.
  • Status bar
    • Status bar always stays on the physical top of the phone, unlike iOS. This means the Action Center is opened horizontally when the phone is in landscape mode.
    • Stuff in the status bar rotates according to the phone's rotation and takes up more horizontal space when it's on the side.
    • Any unread notifications show a single icon that resembles a newspaper in a slightly-rounded rectangle in the status bar to let you know there's something to look at. This is useful when you miss a notification (possibly by switching apps when it shows up, as happens in iOS for some reason) or you have Quiet Hours turned on. The icon only shows up once (unlike Android where there's an icon for each notification) and goes away when you open the Action Center's Notifications part.
    • Just after the clock updates, it moves over slightly with a nice animation to stay right-aligned to the right edge of its area. This is easy to notice if switching between 24- and 12-hour time in the afternoon. I'd like to also add an option to show AM and PM in the status bar, so it needs to work with that.
    • Some apps like the tiles part of the Start screen have their content go behind the status bar but it's still visible, while the All Apps list area has what I'm going to call a "reserved area" that nothing shows behind and it treats like a LayerShell exclusive zone. As a result, there needs to be some way to specify that an app wants to handle spacing on its own so it can do things like show stuff behind the status bar with or without a spacer in another view. Whether the app wants manual or automatic spacing though, there needs to be a thing that will let it hide the status bar for a while (for fullscreen/immersion; this would be using whatever standard other environments use) or temporarily (for the "Loading..." message with the dots, but I think the dots could show up without "Loading..." as well). By default, the status bar has an exclusive zone for compatibility with apps that don't support manually handling the spacing. This is discussed in that long issue regarding things to keep in mind while designing the UI.
  • Settings that are relevant to a Windows Phone-style UI.
    • Probably will do a Settings app that looks at settings-related .desktop files (like how the Control Panel works) and add a few of my own menus for Retiled-related settings.
    • I think the "settings-related .desktop files" thing is meant to be able to display additional stuff that's not an integrated setting page, so stuff installed with other apps that isn't properly integrated and will open a window that doesn't look like the Retiled Settings app; would also like to figure out how to do settings pages like WCM (Wayfire Config Manager) does it so that new settings pages can be easily integrated by both RetiledSettings and any third-party apps that want to show their stuff in it similar to the Control Panel, if I haven't mentioned this already. This is similar to what postmarketos-tweaks does, as it allows pages to be added that give controls to change settings for things, but I think I'd have to do things a little differently, mainly in that it doesn't have .ini-style support for config files, and I also need to have a qml UI for it, anyway. Here's the link to the page for it: https://git.sr.ht/~martijnbraam/postmarketos-tweaks
    • There needs to be a way to ensure each Settings page can be directly opened in its own window, as I liked Windows Phone doing that as opposed to what Android does, plus there needs to be an easy way to tell the Settings app that it needs to open a specific page instead of the home page so that apps like RetiledSearch can deep-link into its own page in Settings (like how it was handled in Windows Phone, naturally). The only potential issue is how long apps take to load on the PinePhone. Deep-linking would also allow pages to be pinned as secondary tiles, which is a feature on 8.1 Update 2, as much as I dislike that version. There should be an option to hide the "pin to start" button in Settings pages for anyone that doesn't like or want them and thinks they look messy, such as myself. Or, there can be minimized, possibly semi-transparent appbars that only become opaque when opened. Yeah, that sounds better. Maybe that can be an option in addition to regular-size appbars and no appbars. Maybe there should just also always be a way to pin the secondary tiles for pages by long-pressing on their entry in the list of pages (like you're on the main page and want to pin Bluetooth, so you scroll to where it is in the list and long-press on its name). That should make more people happy, so that way anyone who doesn't want appbars in Settings can have them hidden while still having the option to pin a setting at least from the list (this doesn't offer a way to do it from the page, though; don't want things to get too messy).
    • Unless it's been mentioned somewhere else, there needs to be a way to search Settings. This would likely at first be a "search" Pivot in addition to the other two ("system" and "apps" I think), but that becomes really messy eventually, so what I want to do as I think I mentioned elsewhere is I want to have options to display it as the two main lists ("Classic view"; 7.0-8.1 Update 1), the two main lists but with the jumplists like in 8.1 Update 2 ("Jumplist view"), and a properly-organized layout similar to but not exactly the same as the Windows 10 Settings app ("Category view"). May have to enforce the appbar for the "Category view" so it's easy to get to Search from anywhere, but there can still be the "search" Pivot to the left.
    • When updating settings, a D-Bus signal will be sent out telling apps to reload their settings alongside the config files being changed. To reduce unnecessary disk access, this should specify which settings were altered, so that apps that don't need those settings won't have to reload environment settings, as well as ensuring apps that do use those settings aren't reloading everything. Actually, I should send out the new value and what variable it's for, so like it's accentColor with the value of "red".
    • I don't know where this is supposed to be, but I want some way to let users pick a set of accent colors and them save them as a set and go through them on a timer chosen by the user, like a Windows 7 wallpaper slideshow. We'll have options to either fade between the colors or just instantly change them, and the time will have to be a reasonable minimum so it can't accidentally/on purpose easily be set to almost nothing and cause issues for someone. I feel like I wrote about a slider to configure this or something (actually, maybe that was in #137 ). There should also be an option to either pick randomly, or go through all the Accent colors in a row, in addition to going through just one set or all sets (randomly or in order would also apply to this, so a color from set 1 may be applied, then it'll pick from set 5, and so on, in the random configuration).
    • There can be several pre-defined sets of Accent colors, but the default one will be the expected colors, including extras like "Light Cobalt".
    • I also want to allow distros to specify both a custom Accent color (so they can add an extra one and have it be the default; I imagine Manjaro would want to do that) that will be in the default set like manufacturer/carrier ones on WP, as well as extra Accent color sets. I don't know if I should let distros set a specific Accent color set as the default. Would that be a good idea? Maybe. I think I should.
  • Multitasking view complete with the WP8 GDR 3 "close" button in the top-right corner and 8.1's support for swiping down to close apps.
  • WP8.1-style animations (8.1's animations were the best in any version I've used; 8.0's animations made me sick to my stomach after not using it for a long time)
    • Found a page describing Silverlight animations on WP7, which isn't that useful to me except that it describes how to do the sweep-in transition, that being to animate the y-axis from -90 to 0 (may need to change the axis it uses): https://www.c-sharpcorner.com/uploadfile/8c85cf/animating-perspective-transforms-in-windows-phone-7/
      • Messageboxes used the same kind of a sweep, except from the top, and they would fold back out the top when closed.
      • Popups that are meant to have a long list of items would have a few different parts of the popup unfold pretty much all at once, almost like an unfolding curtain or maybe origami or something, forming into the final popup UI. This is also used for image choosers like in the Settings app when you pick to choose a wallpaper.
    • Some page transitions like when tapping an "edit" button on the appbar will slide up to show the page and slide down when dismissed, like the Search app.
    • Important: the "subtext" below the main text for items in a list view inside a Pivot move into their final place below the main text a lot slower than the main text does, like they're lagging behind a bit, but not really because that makes it sound bad. It's more like a parallax effect like when you're watching trees way further away from you go by at a different rate to trees closer to you when you're driving somewhere.
  • A window manager/Wayland compositor may need to be built to hold the navigation bar and status bar and to display the multitasking menu. Hopefully it won't be needed and just a session file and a pre-existing window manager that opens stuff fullscreen will work, but I doubt it because the status bar and navigation bar need to be in a specific place. Not sure exactly where the "Loading..." and "Resuming..." messages would go, but they should be in this project somewhere if it makes sense.
    • For now, Wayfire may work for a lightweight Wayland compositor as it's highly customizable, extensible, and is under the MIT license. This page has the config file options: https://github.com/WayfireWM/wayfire/wiki/Configuration One thing that's really interesting in the example config file is that you can set the launcher, which may help to get things off the ground for me and I may have to fork Wayfire and learn C++ if it ends up working well enough for me to add/change things in its code: https://github.com/WayfireWM/wayfire/blob/master/wayfire.ini
    • Wayfire allows for creating animation plugins. I've described what would need to be done to make the animations feel like WP here: #5
    • Yeah, I think I'll have to learn C++ to create Wayfire plugins, unless there's a way to do it with Python.
  • The screen never goes upside down, unlike Android. A way for the user to allow it may be useful if they like that feature.

There are also some "wishlist" features that I really want but might be too complicated to do.

  • Tile folders
    • Not exactly sure how they'd be implemented, but they're useful
    • They kinda flow out of the small preview grid into their area
    • Folder labels can be changed.
    • Actually, maybe Avalonia's Expander control would be useful for this. I'll have to figure out a way to eventually show what items are in there from the preview, but before that I'd have to be able to add items to the expander contents. Having the expander control go up could be an early way to handle the ellipsis menu for apps, too.
  • Lock screen
    • Tapping it made the entire thing go up and bounce a few times before landing. If you had a PIN code active, it showed the unlock area, otherwise it just showed what's active.
      • I think a good easing type for the bouncing would be Qt's Easing.OutBounce, and there's an animation for the graph here: https://easings.net/#easeOutBounce (might need to retype this, because clicking the link made the site not work at all).
    • You didn't have to press a button after typing in your pin, as it just automatically unlocked if the combination was correct (will be more difficult than the bounce animation, and not even sure if it'll work or be secure and fast)
      • I might have to dig through Android 14's (I think it's that version) code for this, as that's going to be a feature in the next version (for pin codes of length 6 or more), and it's probably stored relatively securely.
    • Wallpapers get darkened slightly on WP, so there should be a way to turn that off if people don't like it. The exact way Microsoft apparently did it was a 20% black layered on top for legibility, and that also applies to the Hub backgrounds like in the Photos Hub. For authenticity, I'll do the same so people know what to expect and so that things don't feel too off, considering my recreation is imperfect, and a perfect recreation is impossible, both legally and practically. Source: https://youtu.be/Jyv-apglS5s
      • There should be options to adjust the percent visibility of the layer on top, as well as its color. An option to use the user's Accent color would be nice, but I don't know how popular it would be.
      • If possible, it would be cool to also support arbitrary images and gradients instead of just solid colors.
    • Not exactly sure how this would work in a way that's like the other mobile Linux lockscreens like the one in Plasma Mobile. That's the main thing preventing it from existing besides the fact that .NET/Avalonia apps take a while to start on the PinePhone, so that'll be not fun. Hopefully it'll run stuff faster soon.
      • As of October 1st, 2021, I'm working on rewriting the current parts of Retiled into Python/QML, which is way faster and lighter in memory usage than Avalonia, so performance and stuff should probably be fine. I'll just have to learn how to make a lockscreen and stuff.
    • Probably should allow people to blur the background behind the lock screen text in case they want consistency with their blurred tiles as mentioned above. Blurred backgrounds are not the current focus, though.
    • Just remembered that WP8.x allowed people to use the Bing Image of the Day as their lockscreen, so I should offer that as an option. Since not everyone likes their devices contacting Bing or Microsoft (or maybe they just want to use something other than Bing Image of the Day), I'll have to allow people to use other sources for daily images, such as NASA, if they offer daily images. Because there may be many sources someone would want to use that I wouldn't even know of, there should be a way to allow apps to add their own sources into the list. They would probably be just simple CLI apps/scripts with .desktop files (they should probably specify that they shouldn't show up in app lists, because they're not intended to be launched by the user from, say, the All Apps list) that have a section like [X-Retiled-ImageOfTheDayProvider] and they'll automatically be run as soon as it's midnight in a user's timezone (but actually that presents an issue with Bing, because it refreshes at 3 AM my time, so I don't know what to do there), and we'll keep track of the last time it was run (both for these and for built-in ones like Bing) so that the image changes automatically if the phone was off when it became midnight/if the phone was offline (there needs to be something to ensure things will be fine without Internet, maybe this'll also need D-Bus and the third-party image providers will be daemons for things to be smooth). These third-party image providers should also be available as options for RetiledSearch and (if the tile background is active) RetiledStart, where these will also listen to the image provider daemon that the user selected (multiple ones should be able to be active at once). There will be a fallback image that gets used if the image can't get updated (either by the first-party [I've decided all Image of the Day providers we'll use will function as daemons] or third-party daemons) for any reason, like being offline. Image providers should store the new image as current.(format) and move the previous one to previous.(format), and there should be a file that specifies the format; this ensures apps know what the filename is. There also needs to be some way to tell apps via that file with the filename extension when the last update was so they can fade to the new one like Bing Search did on Windows Phone (I really liked that effect, hence why I'm adding it), but maybe that can be handled by the apps just copying the new image to their own folder and then fading to it, so I guess they can handle the previous image themselves, or something. In particular, RetiledStart will listen to the D-Bus signal that says to change its image, and it'll check that file when it starts, so that'll be handled. Additionally, (I really need to break this into sub-points) the Image of the Day daemons should specify what to run to allow the user to configure any settings they may have, but if the key (maybe X-Retiled-ImageOfTheDayProviderConfigCommand? That's a bit long, though) saying what to run is missing, there will be no "configure" button below the dropdown. There should, however, be buttons to add or remove the daemon to or from Autostart, with a note stating that it won't be added automatically and another button to open the Autostart settings page. Maybe if it ends up being too much to handle multiple daemons being used for the lockscreen, tile background, and search homepage background, I should just have a specific D-Bus interface thing that daemons can connect to and apps that are set to use the image of the day will listen to. In that case, this may need to be a specific page in Settings that can be linked to via a configure image of the day button from the lockscreen, search app, and start+theme pages, and they'll just have a dropdown that has stuff like (for the lockscreen) choices for picking an image from your library or using the image of the day, (search app) blank background or image of the day, (start+theme) Accent color, image from gallery, image of the day, etc. With only one daemon, we can automatically update the Autostart when the selected one is changed, as well as starting and stopping them when the selection changes. There should be a note that states that changing the Image of the Day backend daemon will automatically change the Autostart settings to include that daemon, again with a link to edit Autostart. There should also be an option to randomly pick from a set of sources the user chooses, which is an idea I got from this article: https://www.omgubuntu.co.uk/2023/01/damask-gtk-wallpaper-app-for-linux I also got the idea from that article to have options to refresh more often than at midnight, like in Windows 7 slideshows.
    • I think the lockscreen was supposed to fade in from black, but it only did that a few times for me over the years. I'd like to have an option to show a fade-in animation.
    • Lockscreen notifications can be handled by D-Bus, and apps would update their own notifications in a similar way to how they'll update their Live Tiles. Not sure how to handle apps that the user doesn't have there and they later put the app there. Should we just send a signal to the app upon choosing it in the Settings dropdown that it should update its lockscreen notification? That might not fully work for apps that have support provided by the compatibility daemon, but should be fine if an app updates its own stuff. I'm already pretty sure it should just tell the app that it's not being displayed on the lockscreen if it tries to update it otherwise, which is what should be done with Live Tiles (in that case, it could be like "default/specified secondary tile not pinned", depending on the Live Tile it wants to update).
    • As mentioned in the part about the compatibility daemon way above, apps that don't support lockscreen notifications would have their regular notifications filtered and re-emitted to be compatible with lockscreen notifications. Additionally, that daemon would provide a list of apps it has support for so the user can choose them in the Settings dropdown. It would be a good idea to append "(compatibility)" to the end of the names of the apps when displayed in that list, so users know they don't necessarily have native support for lockscreen notifications, in case they don't quite work right.
  • Keyboard since that keyboard was the best in 8.x
    • Probably will end up using the Maliit keyboard at least at first, but I need to figure out how to create fully-custom themes. These items below may need to be implemented as plugins for the Maliit keyboard somehow.
    • Basic typing shouldn't be that bad, but having it not interfere too much with what's on screen may be tough (maybe LayerShell can help here if there's an offset to be above the navigation bar as well as ensuring it shows up on top and the exclusive zone can be updated at runtime when showing and hiding so it pushes stuff out of the way?), plus it needs multiple language support
    • Swiping to type would be helpful but may be difficult to implement. If it is implemented, it should display the current result in the suggestion bar as you swipe.
    • The suggestions would be difficult to do when it comes to actually predicting text, but showing the text should be fine. It's important to remember that there are a whole bunch of suggestions (at least 10 usually), and that the list scrolls sideways.
    • Words that aren't recognized can be added to the dictionary by selecting them and pressing "+word".
    • The keyboard had a paste button at the very left part of the suggestion bar, so that needs to be added as well. If there's something on the keyboard and you activate a text box of some kind, it'll hide at the left edge showing a small amount of it, then if you tap it, it slides into view by pulling the suggestion bar to the side. If you have nothing on the clipboard, it's greyed out and hides completely, though you can still show it by dragging over.
    • Selecting a word/group of words then pressing Shift will cause their capitalization change. I need to check this, but I think it was for lowercase: capital, all caps, lowercase; capital: all caps, lowercase, capital; and for all caps: lowercase, capital, all caps.
    • Text-based emoticons are another thing it needs besides multi-language support (this whole thing needs multi-language support, but I don't really know how to do localization even if I did know multiple languages, so hopefully someone who knows how to do that can help with it)
    • May as well add the text navigation "stick" that Windows 10 Mobile had, since it's one of the few good things that version did. This will be one of the few features from W10M aside from Continuum (possibly in a slightly different layout if there's one that makes more sense, but definitely floating windows if possible, though I don't know how titlebars would be added to apps without them when switching to "Continuum/full desktop mode"; maybe there would be titlebars added to windows by default just hidden so that they're shown in "Continuum/full desktop mode"; GTK apps would probably usually have them anyway, so I don't know how to handle that case, or anything else with CSD, but there needs to be a way to let apps be grabbed with a mouse even on a phone screen in "phone mode").
  • Battery Saver app
    • The only thing that would work for sure would be to get battery status like charge percentage. Maybe TLP has command-line options that can make it conserve more power for Battery Saver.
  • Typing dictionary
    • There was no way to remove individual words, so there should be a menu that allows selecting user-added words to remove.
  • Text selection that looks and behaves like WP
    • Tap a word once to select it, and drag the corners to change the selection
    • Surprisingly enough, Plasma Mobile has floating cut/copy/paste buttons that go above the selection, but they aren't quite enough, so I think a hybrid of iOS, Plasma Mobile, and Windows Phone would be the best thing. It would look like the WP buttons where icons are in circles, but there's a button for cut like Plasma Mobile and another button for select all like iOS because it's useful.
  • Firefox theme and customizations to make it look like IE Mobile
    • Some things probably won't be easy/possible, such as a button to show tabs, so it might be more like Windows 8.x's IE when opened from the Start screen. That version just had a tab bar above the address bar and below the controls.
    • This might be the easiest of the wishlist to do, depending on if Mozilla changes stuff in Firefox to not allow something like this.
    • Probably will require making a Windows Phone 8.x GTK theme to make it simple. That in turn may require this project to become GPL'd, which I don't want to have happen but will if it means it'll be successful and work.
    • Wait, a Firefox Adwaita theme does exist, maybe I could fork that?
    • If all else fails, maybe I should make a browser that uses the latest Qt browser features and just has a UI that looks, works, and feels like IE Mobile, to minimize chrome as much as possible and increase usability on a phone as much as possible (Angelfish is alright, but a bit too much UI and doesn't really work the way I want, and postmarketOS-modified desktop Firefox is cool, but it feels a little too bulky).
  • Volume control UI
    • Not sure how it would behave like WP, but there it would open Ringer + Notifications when on the Start screen, and default to Media + Apps in apps like Bing Search. Changing different volume settings separately like this would probably take a lot of modifications to system-level stuff.
    • There's a volume slider when it's expanded.
    • Maybe it could be part of the status bar and Action Center program so it pops up quickly and can dismiss the Action Center when it's shown (see the Action Center part on how it gets dismissed when opening the volume controls). Or maybe, it shouldn't dismiss the Action Center, with an option that's on by default (to not confuse anyone) to let it do that if anyone wants it to do so (no sense in making literally everything work like 8.x when there can be options to let everyone choose how things behave).
    • At least there should be a toggle button for vibrate if the volume settings are all together, if there's a way to implement that. Not a fan of having to go into Settings just to turn off vibrate.
  • If this ever becomes a part of a Linux distro, the shutdown thing will say "goodbye" in lowercase, just like WP. I'd assume this text was translated, so that'll have to be done as well. Maybe it can just be images of text translated for each language.
  • Share sheet
    • This was a full-screen list of apps (with their icons to the left of their names) that could be shared to, with an entry at the top to go to the Store to get more apps. Since I want Retiled to be package manager/distro-agnostic, this will have to be a setting in the default apps page in Settings.
  • Email client that allows each inbox to be individually pinned.
    • As each inbox is listed in the All Apps list, I may need to create .desktop files with a custom field that basically extends the functionality of the FreeDesktop Type field (perhaps X-Retiled-LinkType, which is only used when the standard Type field is set to Link), which would help my code know what to do with the contents of another field or something. Maybe for email it would read from the X-Retiled-EmailAccount field and tell the email client to open that account. The custom EmailAccount field could also be used for Python scripts or other code that can run to display the number of notifications (or unread emails? I don't remember how Windows Phone handled that anymore. Maybe it did unread emails, not sure.) for that email account. Adding a custom Type field will also allow each inbox to reside in the All Apps list, in case the user doesn't want to pin an inbox. Actually, that may also be useful for webapps that the user wants to have in the All Apps list but not pinned. I need to change that for the part regarding pinning webpages above.
    • Besides each inbox being pinned, there can be a way to access all the inboxes from one app. It may be useful to have this app basically be a list of accounts with the number of unread emails being next to the name, or probably the opposide side of the name. Actually, maybe it should be on the second line below that account's name that the user typed in. Not sure if showing the actual email address would be a good idea. Maybe I could have that as an option and only display the name the user typed by default, with the email address being next to it in parentheses if the option is on. Clicking/tapping one of these accounts lets the user read the emails as if they used the tile, and they can even pin the account from this list if they wanted to. There should be a search button on the appbar that lets people find a specific account if they have too many, as well as a way to search emails in either all of or a select amount of inboxes. Email search results would include have the inbox name. Maybe grouping by inbox names would be cool. Actually, yeah, let's do that, as that's very Windows Phone-like. The user can also select multiple accounts (either by tapping/clicking the "select" button on the appbar or by using the small area in the left margin of the items) and pin their tiles using the "pin" button in the appbar that appears when going into select mode, with the "search" and "select" buttons disappearing at the same time. Additionally, the appbar drawer will have a link to email account settings in the Settings app.
    • Each email account will have notifications grouped to it in the Action Center. This is just a generic thing that most apps will have (some apps didn't do this, like the Store's number of updates on the tile), but clearing the notifications in the Action Center for an account will also clear the number on the tile.
  • Glance screen would be really cool.
  • Screenshot shortcut with the power and volume up buttons.
    • There has to be a way to prevent the screen from locking if you're pressing the volume up key at the same time as the power button.
    • This would probably need a daemon running in the background listening for the key combination, and maybe it'll also handle individual volume up/down and lock presses.
    • Actually taking the screenshot could be handled by something like grim or another program that takes screenshots.
  • Options to allow the user to choose their default launcher if they don't want to use RetiledStart.
    • Basically the same as allowing them to change their default Search app, but more unique, I guess, because neither Phosh nor Plasma Mobile support the feature, even though Android does.
    • Maybe someone could make one that looks more like Zune or Windows Mobile 6.x (or older) if they wanted to use those UIs. Perhaps there are some that would prefer even a Windows Phone 7.x or Windows 10 Mobile Start screen or a fork of RetiledStart that has different features.
    • I'd have to figure out an API for custom launchers/Start replacements to plug into the Start button on the navigation bar so that they can do whatever they want when they're open. For example, they can go back to the top of the tiles list when the user is in the All Apps list, or they can just do nothing.
      • Actually, I think a simple way would be to implement the navigation bar as its own application using LayerShell (might need to create my own bindings for layer-shell-qt to use it from Python likely using Shiboken, as C++ is way too annoying for me to understand and I don't want to have issues with building and distributing) and have it communicate with the compositor via D-Bus for stuff like going to Multitasking and having the current launcher (by default RetiledStart) show itself again (X-Retiled-LauncherActivated sounds good) (unless the launcher is currently visible, then there would have to be a way to instead go back to the top and stuff, but I think that would be something the launcher itself would handle, along with knowing what to do with the X-Retiled-LauncherActivated message in the first place).
      • When implementing LayerShell support, RetiledStart would be in the "top" layer so it shows on top of other program windows. Watched this video again that showed how that worked: https://m.youtube.com/watch?v=VuRXHJu5Kmg
      • For now I can just probably have the navigation bar implemented as a footer as shown in this video with a tab bar as a header, and it doesn't cover up apps so hopefully it still doesn't in new code with XdgShell: https://youtu.be/9vWMUTvFgdU
      • This video also looks useful for another way of implementing app switching in a way similar to the side area with Windows 8, which will be a good idea to have as an option if someone wants to use it on a tablet (see the Ivi part): https://youtu.be/mIg1P3i2ZfI
  • Some sort of a way to deep-link information between apps without just being a pinned tile.
    • For example, this Mix11 video shows a movie's IMDb page being opened from Bing search results: https://youtu.be/NImj-m2y724
    • Another easier example would be to display apps of a specific category, such as music or video-related in a hypothetical reimplementation of the music+videos Hub. This is shown in the same video as the IMDb example.
    • Most of this functionality would rely on app developers implementing the features required (might have to use custom fields in .desktop files) so everything works well together, as it would be impossible for me to tell other people what I want to have happen, particularly at such a large scale.
  • Tapping the status bar to send a "Return to Top" signal to the currently-active window/surface, like iOS
    • I use this feature almost all the time on my phone, and I want other people to be able to use it without needing to use iOS
    • Likely will require a new Wayland protocol unless one already exists (I doubt it)
    • Apps probably have to opt-in by supporting the Wayland protocol, otherwise things would break
    • Wait, no, this would be a D-Bus thing that the app would handle.
    • Or maybe it would have to be a specific component that can be easily integrated in the area of the status bar, as applications would need to be able to handle it their own way. Only issue is, some apps might have a titlebar, like GTK apps. Might only work well with Qt/QML apps.
    • There needs to be some way for an app to know if it can return to top on a specific page or window, as pages without scrollbars can't scroll; some pages may be able to scroll too, but doing so could cause undefined behavior, so apps need to direct the signal to a specific scrollbar on a case-by-case basis
    • I think what should have the best compatibility and be the easiest to implement is just having a tap on the status bar send Ctrl+Home, that way even browsers and text editors that don't know about it can use the feature. Only thing is some text editors and word processors move the insertion point, so ideally it would be something better. Maybe support can be specified via a .desktop file, then somehow we'd read it (phosh can do this) and we'd know if an app supports returning to top and how to do so (apps that handle the status bar spacing manually could just put a MouseArea in there that detects taps).
  • Continuum-like mode, as well as "tablet mode" and "full desktop" mode in addition to "phone mode"
    • It might not be exactly like the Continuum desktop, but it should be similar enough (this is described in the line about the keyboard stick that W10M had, but it needs its own section)
    • "Continuum desktop mode" would be the default for external displays, but there should be options to pick the others (phone/tablet/full desktop) in case another one works better
    • There should be options to both switch the mode on-the-fly, perhaps from the Action Center, as well as saving defaults both for the main display (beneficial for tablet users [and anyone that liked Windows 8.x] in "tablet mode", which will be similar to Windows 8.1 including with the left-side slide-in app switcher that I was reminded of when I watched a presentation on QtWayland; laptop and desktop users in "full desktop mode"; and anyone that prefers more simplicity in "Continuum mode"; "phone mode" could also be useful for small tablets, as shown off with Windows Phone on that large tablet around the time Windows 10 Mobile was announced), as well as any additional displays (someone could have a tablet-sized touchscreen and full desktop monitor hooked up, in theory).
    • Wrote a whole bunch on the "running the compositor" page, so I'll put that here in case I forgot anything, though I'm not sure how helpful it is and it might be more confusing:
      • Eventually it could be used on desktops and laptops, but that's a ways off and would require a "desktop mode" that might be something between Windows 8.1 (maybe? maybe not, as the left-side switcher is more for tablets), Continuum, and full Windows 10. Would also have to add a way to switch between "phone mode", "tablet mode", "Continuum desktop mode", and "full desktop mode", and also have a setting that allows choosing between the "tablet" (because the external/secondary/tertiary/etc display could be a touchscreen and work better that way, or maybe the user prefers the tablet-first experience of Windows 8.x), "Continuum desktop" and "full desktop" modes when connecting a monitor, ideally storing configurations on a per-monitor basis so it's possible to have "phone mode" on the phone, "tablet mode" on an external touchscreen, and "Continuum desktop mode" on another screen. For obvious reasons, there should also be a setting to choose the default mode for the primary monitor when starting the device.
  • Driving Mode, so that the user can have their phone not distract them while driving and whatever else it would support, including turning it on manually.
  • Package manager GUI like the Windows Phone Store app
    • Could be nice to figure out a way to have it be like the 8.0 version with (I think) the Hub/Panorama, but also with features from the 8.1 version, like displaying the count of updates on the main page.
    • Probably will have the app pages be like the 8.1 version though, as it's way more compact than the 8.0 version due to showing screenshots on the main page for the app instead of a separate Pivot.
    • This will need to include support for regular packages and Flatpaks. Don't particularly want to deal with PackageKit, though, but unfortunately it may be the easiest way to create a full package manager GUI.
      • Need to find out how Discover works on postmarketOS, as I didn't see a PackageKit backend for APK.
    • Might not be able to reasonably do the thing where apps display a progress bar in the All Apps list while installing, but it would be a cool touch. I do know that would need D-Bus to tell the All Apps list to open to the specific part of it, but then again, we need the .desktop file unless there's a way to do a placeholder that's swapped out immediately as soon as possible. Gotta display the icon, too. Maybe the placeholder would be in /tmp and it would be a .desktop file with only the name and icon, with the icon also stored in the same directory and some flag in the file to say it's a placeholder, like X-Retiled-IsPlaceholder=true. That flag will tell us to look for the icon in the same directory, and we'll get the image from the D-Bus signal when installing a package and it'll be downloaded there. Placeholders won't be able to be pinned, only uninstalled if there's a way to cancel an installation via D-Bus and undo any changes made during it. We'll also know to look in that folder via that D-Bus signal, and that would work as an override to the usual places we check for .desktop files in.
  • Interactive Live Tiles as demonstrated by Microsoft Research a long time ago, just to save the idea from dying?
    • They were never implemented into Windows, but they could be neat as an option
    • It's important to ensure the way they're implemented won't be obnoxious on phones, and a way to turn them off and not show interactivity will be important
    • Now I don't know how they would be implemented, but maybe they'd be basically Plasmoids somehow being loaded into the tile area on-demand when tapping the expand button?
    • There would be a field to specify the main QML file that would be shown as the interactive part of the tile in the LiveTile section of the app's .desktop file
    • Actually, maybe it could end up working now that I think about it, we'll just need to have a way to expand tiles on-demand and also load in that other QML file. It'll have to probably be handled like installing a Plasmoid from KNewStuff, though, unless a QML file has its own C++ module it imports (we won't handle this so hopefully it doesn't break on different versions of Qt and stuff)

Besides features that were in WP, some additional features may need to be added for ease of use on a Linux (or perhaps even FreeBSD?) phone:

  • .desktop files editor
    • Just like the ones available on MATE and Xfce, except with added support for Retiled-specific entries like X-Retiled-OpaqueTileWithBackgroundSet, X-Retiled-NoLiveTileUpdates, and X-Retiled-LiveTileWorksWhenSmall. These names may change.
    • Ensure .desktop files that are symlinks get resolved properly. KDE had this bug with Discord as described here: https://bugs.kde.org/show_bug.cgi?id=450727
  • Autostart scripts support, like KDE
    • Allows users to easily have stuff run when logging in.
    • KDE also supports scripts on logout, so I should probably support that, too, but that isn't likely to be used if there's no way to logout.
    • Scripts have to be marked as executable, and there should be a message that says they aren't with a button to mark them as executable. This is a bug KDE fixed recently here: https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/878 and also with a screenshot here: https://pointieststick.com/2022/07/01/this-week-in-kde-and-now-time-for-for-some-ui-polishing/
    • By default, this will have three items:
      • GNOME Apps Compatibility
        • Supports GNOME apps so they work as expected under a Qt environment
      • KDE and Maui Apps Compatibility
        • Supports KDE and Maui apps so they work under a non-Plasma/Maui Qt environment
      • Retiled Environment Variables Configuration
        • Environment variables that Retiled and apps built for it need to function properly at runtime
        • (this one needs to be hidden and require a hidden checkbox to be checked to allow it to be turned off, but this checkbox will be likely on a subpage or something out of the way; it can be called something like, "Allow important Autorun scripts to be turned off", with a messagebox that warns people doing so will likely cause problems, and asking if they want to allow that anyway; also add a label that says leaving the option on may be dangerous and that turning off important scripts will cause issues and that bug reports resulting from doing this won't be treated as valid unless it results in an unrecoverable state or similar)
    • The first two can each be turned off if anyone doesn't want to have support for GNOME and/or KDE and Maui apps, and this may increase startup speed slightly if I end up having to do a lot of processing in each script.
    • The third one shouldn't be turned off because bad things will happen and Retiled will break, but there should be a messagebox warning that it's important for Retiled and its components and apps to function properly, and turning it off will break it. There should still be a button that lets people turn it off anyway, along with a checkbox that says, "Yes, I understand this will cause problems". I need to figure out how to do password popups so that turning off important scripts requires root permissions, as should turning on the option to turn off important scripts.
    • In general, scripts can be run at anytime if users click the "Run now" button.
      • This is useful if someone doesn't want certain scripts to run at startup, but they do want them to run before opening a specific app. Maybe there are compatibility scripts for Waydroid that different people will want to have run at startup and others want it before they run Waydroid, and both may change their minds about whether to have it run at startup or not?
    • Easily viewing and editing scripts should be allowed
      • An edited script will have to be placed somewhere in the HOME directory to save changes, and thus that directory must be checked on startup before checking the main Autostart script dir (any scripts with the same name in the local directory as in the default Autostart directory will only be run from the local directory and get ignored in the Autostart directory; maybe we should check the Autostart directory first and then check the local directory instead and replace the path in the list with the local one? Not sure).
      • Important scripts can't be edited like this and must be edited manually, for security reasons. They will never be loaded from anywhere outside their default directory.
    • All scripts also have a button to display info from their .desktop file in another page.
    • There needs to be a way to delete scripts (safety and/or maybe people don't need or want something), including important ones. A message asking if they're sure they want to delete it will be necessary, along with an option to not ask when deleting scripts. Deleting will require a password if it's not an edited one, and people should be asked if they want to delete the unedited script as well. There should be a way to mark a script as "edited", maybe with a SHA256 sum in their .desktop files and a check to see if there's a script with the same name in the place in HOME.
    • Important scripts have a special flag in their .desktop file that specified them to be important, and thus third-party important scripts can be made. Please be careful when installing packages, as they may install malicious important scripts.
    • Scripts not using .desktop files need to be supported so that it's easier for anyone to add a script or program to Autostart.
    • The idea for Autostart is directly from KDE. Plasma Mobile seems to have it too, but it doesn't load for me inside Plasma Mobile.
    • Loading the scripts list will have to be done after the page mostly loads, so that it doesn't slow down initial display of the page. May take a bit to get everything though, so there needs to be a message stating that somewhere and it needs to go away after loading all the scripts.
    • There should be a way to autorun a script via D-Bus if it's only needed for a specific application and isn't necessary otherwise, so that it can be told to run that script on startup then when the program exits stop it and possibly undo its changes if it needs specific environment variables set temporarily or something. Or maybe that should be handled by the app's .desktop file (otherwise I'm just reimplementing Windows services).
    • Stopping scripts like LXQt would be a good idea too, but those are modules so unless they're handled by having a "start" and "stop" function that gets called or whatever, it might be difficult. Still, there should be support for stoppable scripts, in addition to run-once scripts.