An Android imageboard client with the focus on maximum performance, fully written with Jetpack Compose

Overview

This project is an experimental playground to try implementing an application entirely with Jetpack Compose without using the old Android UI framework. This application will only have the minimal feature support (Catalog/Thread viewing, posting, bookmarks, album, media viewer, some other stuff). No advansed stuff like composite catalogs, archives (maybe?), sound posts, thirdeye, anti-captcha services etc.

This is a 100% Jetpack Compose project with the goal to try to implement as many UI/UX elements from scratch as possible (There are exceptions like HorizontalPager/Coil). Here are examples of custom compose elements implemented in this project.

  • Compose navigation (Normal screens/dialog screen/screen transitions).
  • PullToRefresh.
  • Toolbar (with ability to switch between different toolbar types like normal toolbar -> search toolbar). Toolbar auto hides/reveals itself depending on a number of factors (like when scroll lazyColumn down).
  • Drawer.
  • Snackbars (toasts show up as snackbars too).
  • LazyColumn with scrollbar and fast scroller (drag the scrollbar thumb to scroll).
  • Custom insert/update animations for LazyColumn.
  • Two main layout types: normal (for phones) and split (mostly for tablets). Can be locked into either of them or set to be determined automatically (when using tablet or when switching to album orientation on phones).
  • A lot of custom gesture handling (swipe bottom left corner to right to pull the drawer on any pager screen, pull left when on the 0th screen to pull the drawer).

If you are interested in advanced compose then you may find it interesting.

One of the main goals of the app is to make catalog/thread loading as fast as possible by utilizing asynchronous post parsing. In KurobaEx (As well as Kuroba/Clover and, I think, pretty much any other client) all posts are fully parsed before being displayed (reply chains/filters/etc are processed before the posts are displayed as well) which makes catalog/thread loading very slow. In KurobaExLite, however, we only initially parse a very small window of posts (16-32) and the rest is parsed asynchronously while you navigate the catalog/thread. This makes catalog/thread loading instantaneous (Threads with ~1k posts are displayed in less than a second).

There is not much to see yet, but if you are really interested you will have to build the project yourself (You will need to generate the keys to sign a release build. Then run gradlew assembleStableRelease). Expect bugs, obviously.

Right now you can:

  • Visit any 4chan board.
  • Navigate reply chains.
  • Use search.
  • Thread scroll position is stored/restored.

What you can't do which will be implemented in the future:

  • Media viewer (Tachiyomi's image decoder for images/gifs, mpv for videos (no exoplayer)).
  • Reply to posts.
  • Navigate other sites (maybe?).
  • Albums.
  • Bookmarks.
  • Navigation history.

The Main work is currently being done on the general UI/UX which is going to be different from KurobaEx.

Comments
  • App isn't responding in split mode

    App isn't responding in split mode

    Can't open anything on the 1.08 update when in split mode, for example tapping "select a catalog" does nothing. It works in phone mode though.

    bug 
    opened by clutzygamers 2
  • Application does not reserve apace for Android 12L taskbar

    Application does not reserve apace for Android 12L taskbar

    As seen in the screenshot I posted in #1, the app does not seem to reserve space at the bottom of the display and the taskbar and navigation bar just overlap over whatever is being displayed at the bottom of the interface.

    image

    bug 
    opened by starcraft66 2
  • Split

    Split "Auto" layout not woking on Galaxy Z Fold

    Decided to give this app a shot after our previous discussion here. It seems that despite my phone being wide enough, selecting the "auto" layout produces an error with conflicting information about my phone not being wide enough but being wide enough at the same time.

    Screenshot_20221105_114714_KurobaExLite.jpg

    bug 
    opened by starcraft66 1
  • Status Bar Color Does Not Match Theme

    Status Bar Color Does Not Match Theme

    On Z Fold 4, the status bar color does not match the color of the theme. This only happens on the cover display.

    It looks like this Screenshot_20221213_175532_KurobaExLite (2)

    When it should look like this (inner display) Screenshot_20221213_175518_KurobaExLite (2)

    This happens on KurobaEx too.

    bug help wanted 
    opened by clutzygamers 1
  • Add APK or Installation guide

    Add APK or Installation guide

    I think it would be useful to give either the apk ready to install or a guide. Because as it is there might be users that what to try the app out but doesn't know how to install it in the first place.

    question 
    opened by Aleeeh 2
Releases(v1.0.10-beta)
  • v1.0.10-beta(Dec 18, 2022)

    • Add scrollbar.
    • Use different color for post selection background (selectedOnBackColor).
    • Disallow scrolling while performing screenshots, disallow closing the PostScreenshotScreen by clicking outside of it.
    • Add ability to take screenshots of catalog/thread posts.
    • Add ability to copy full post image url.
    • Prefer using x86_64 over x86.
    • Fix back press handling in some places.
    • Some fixes and improvements.
    • Add parsing for some other html color types (like rgb(255, 255, 255) and #COLOR_HEX) + some other minor stuff.
    • Fix parsing huge threads getting interrupted by thread auto-updater. Add support for "User has been warned" messages.
    • Fix crashes caused by Dvach stickers (When the same sticker is posted multiple times in one thread).
    • Add "Heading" tag parsing.
    • Add ul/li + "style=color:XXX" support for Dvach.
    • Add flag selector for Dvach.
    • Display catalog search results for all currently enabled sites to make catalog search easier.
    • Make currentSiteDomain a part of any site.
    • Fix threads not being loaded fully when switching from one Dvach thread to another multiple times.
    • Fix currently opened thread sometimes not being marked in the catalog.
    • Remember lambdas passed into PostImageThumbnail in AlbumScreen.
    • Correctly parse 2ch.hk/s/ OS/browser info.
    • Use Pager from Compose instead of the one copied from accompanist.
    • Update Pager from accompanist. Update compose to the latest alpha version.
    • Fix catalog/thread FAB not passing clicks through when using local search.
    • Remove PostFollowStack.
    • Fix incorrect post original order calculation when doing incremental thread updates.
    • Make stickers work.
    • Fix thread refreshing not working + some other minor improvements.
    • Parse more html tags that are used by Dvach.
    • Fix displaying of endless thread icon.
    • Dvach global search support.
    • Rename this icon.
    • Bookmarks support.
    • Add reply formatting buttons.
    • Fix incorrect parsing of some thread info (total thread replies/images/posters count).
    • Add passcode support for Dvach.
    • Initial implementation of posting on Dvach.
    • Add ability to copy any post url.
    • Add content description.
    • Add support for displaying "#OP" and SAGE indicators.
    • Add flag support for Dvach.
    • Add ability to copy Dvach post/thread links and also parse those links to navigate to Dvach catalogs/threads/posts.
    • Add thread page support for Dvach.
    • Initial dvach (2ch.hk) support (can load catalogs/threads/some other minor stuff)
    • Remember and restore scroll position in reply chains.
    • Some minor refactoring.
    • Always show the toolbar/fab when scrolling to a post after clicking the "GoToPostButton".
    • Add ability to go back to replies popup.
    • Do not hold a persistent reference to an activity inside of ComposeScreens.
    • Make this shorter.
    • Another round of optimizations.
    • More optimizations.
    • Some low-level compose performance optimization based on finding from finally fixed Layout Inspector.
    Source code(tar.gz)
    Source code(zip)
    KurobaExLite-production-arm64-v8a-release.apk(6.78 MB)
    KurobaExLite-production-armeabi-v7a-release.apk(6.66 MB)
    KurobaExLite-production-x86-release.apk(6.84 MB)
    KurobaExLite-production-x86_64-release.apk(6.83 MB)
  • v1.0.8-beta(Nov 13, 2022)

    • Use widthSizeClass to detect when Split UI layout mode is used on phones instead of hardcoded boolean flag.
    • Fix posts not being updated when reparsing posts after processing reply chains in threads with very few posts (32 for tablets and 16 for phones).
    • Fix going from thread back to catalog would sometimes incorrectly restore the previous scroll position (by 1-2 elements back from it's original position).
    • Fix not working longtap + drag gesture which allows opening the drawer when viewing threads.
    • Fix a crash when formatting notification text.
    • Do not subtract drawerPhoneVisibleWindowWidthPx from drawerWidth here because that would make it a second time (we already subtract it in onSizeChanged {  } callback.
    • Add ability to toggle "watching" state for individual bookmarks. When there are 0 bookmarks with "watching" state, the bookmark watcher won't be invoked. Click the bookmark thumbnail to toggle it's state.
    • Implement post blink animation.
    • Add text colorization for reply input text.
    • Add support for spoiler thumbnails.
    • Fix some posts not being displayed in Grid layout mode.
    • Downgrade to Compose 1.3.0 to avoid internal crashes when using local/global search.
    Source code(tar.gz)
    Source code(zip)
    KurobaExLite-production-arm64-v8a-release.apk(6.62 MB)
    KurobaExLite-production-armeabi-v7a-release.apk(6.49 MB)
    KurobaExLite-production-x86-release.apk(6.67 MB)
    KurobaExLite-production-x86_64-release.apk(6.67 MB)
  • v1.0.7-beta(Nov 3, 2022)

    • Fix ConcurrentModificationException when loading catalogs/threads
    • Fix album new image toasts not showing up.
    • Slightly update visuals of the right part of the ReplyLayout.
    • Fix reply message input overriding the "new line" keyboard button with "done" button which makes it impossible to add a new line.
    • Mark all search queries with length 1 and greater.
    • Fix list not being scrolled to top when search query changes on CatalogSelectionScreen.
    • CloudFlare handling improvements. Store CloudFlare bypass cookies separate for each site by their domains domain (since it actually matters for CloudFlare). Automatically reload captcha after CloudFlare successfully bypassed.
    Source code(tar.gz)
    Source code(zip)
    KurobaExLite-production-arm64-v8a-release.apk(6.54 MB)
    KurobaExLite-production-armeabi-v7a-release.apk(6.41 MB)
    KurobaExLite-production-x86-release.apk(6.59 MB)
    KurobaExLite-production-x86_64-release.apk(6.59 MB)
  • v1.0.6-beta(Oct 26, 2022)

    • Fix update checks.
    • New reply layout container with swipe up/down animations.
    • Merge bookmarks and history in the drawer with ability to switch between them by clicking the special button.
    • Fix Modifier.verticalScrollbar() (which is used with ScrollState) not drawing the scrollbar.
    • MiniDrawer implementation for Split UI mode.
    • Change MainUiLayoutMode dynamically depending on WindowSizeClass. (Support for foldable phones)
    • Add flag selector.
    • Other minor changes/fixes/improvements.
    Source code(tar.gz)
    Source code(zip)
    KurobaExLite-production-arm64-v8a-release.apk(6.52 MB)
    KurobaExLite-production-armeabi-v7a-release.apk(6.40 MB)
    KurobaExLite-production-x86-release.apk(6.58 MB)
    KurobaExLite-production-x86_64-release.apk(6.57 MB)
  • v1.0.5-beta(Sep 17, 2022)

    • Optimize rest of the screens to make most of the composable methods skippable.
    • More robust logic to determine whether the app is in foreground or background.
    • Add support for cross-board dead thread links (>>>/g/1234567890).
    • When clicking "global" search, copy the current entered search query and start searching for it right away when opening the global search screen.
    • Fix catalog/thread toolbar search results not getting updated when there are no entries matching the query.
    • Do not show the scroll to next/previous search entry when there are no entries matching the query.
    • Mark search query inside of post comment/subject when doing global search.
    • Add FadeIn animation to some screens.
    • Fix navbar back button presses triggering incorrect handlers on ThreadScreen when switching from portrait orientation to album.
    • Finally fix a bug where sometimes it's impossible to dismiss text selection by clicking any other part of text.
    • Mark search query in ThreadBookmarkUi title text.
    • Mark search query in ChanBoardUiData title and subtitle text.
    • Add ability to scroll to post when clicking "Go to post" button when viewing post replies in the popup window.
    • Can now open all found catalog/thread search results as list.
    • Add ability to view post with replies when viewing media in the media viewer by clicking the "comment" icon.
    • Catalog grid view mode implementation.
    • Fix 4chan posting.
    • Fix a bug where an image in the media viewer would be loaded only partially (some part of it would be gray).
    • New Snackbar/Toast appear/disappear animations.
    • Add option to change catalog grid mode column count.
    • Add option to change album grid mode column count.
    • Remove special draggable zone. Use longtap + drag gesture to open the drawer instead (default Android drawer gesture).
    • Fix toolbars losing their states upon phone rotation.
    • Slightly update the UI for Catalog/Thread toolbars.
    • Only update lastViewedPDForNewPosts with lastVisiblePost if it's greater. This fixes the "N new posts" notifications showing up for posts you have already scrolled past.
    • Fix scrollbar jump around like crazy when there is few items in the LazyList/LazyGrid.
    • Always check for the latest version (even if it's beta) when clicking the app version cell.
    • Use lastViewedPDForNewPosts instead of lastViewedPDForScroll because we only update lastViewedPDForNewPosts when the user scrolls to a post which is greater than lastViewedPDForNewPosts (by comparing postNo and postSubNo). lastViewedPDForScroll always is updated with the top currently visible top since that post is then used to restore previous scroll position.
    • When clicking checkable items, invoke the FloatingMenuScreen.onMenuItemClicked() callback right away instead of accumulating them and then applying all at once when the FloatingMenuScreen is closed.
    Source code(tar.gz)
    Source code(zip)
    KurobaExLite-production-arm64-v8a-release.apk(6.44 MB)
    KurobaExLite-production-armeabi-v7a-release.apk(6.32 MB)
    KurobaExLite-production-x86-release.apk(6.50 MB)
    KurobaExLite-production-x86_64-release.apk(6.49 MB)
  • v1.0.4-beta(Sep 3, 2022)

    • Optimize MediaViewerScreen and make some composable functions "skippable".
    • Fix text selection some being impossible to hide by clicking the text anywhere.
    • Snackbars + bookmarks fixes and improvements.
    • Screen animation adjustments and improvements.
    • Change unpresent screen animation for PopupRepliesScreen when doing left or right swipe gestures to make it faster.
    • Draw FloatingComposeScreen's background in ScreenTransition before applying scaling because otherwise it makes the scaleIn/scaleOut animations look weird.
    • Fix MediaViewerVideoControls icons changing their positions and bounds when going from disabled to enabled state (caused by hardcoded Jetpack Compose min touch bounds).
    • Hopefully, fix "java.lang.IllegalStateException: Cannot modify a state object in a read-only snapshot".
    • Fix not reading the latest updated postState when doing catalog search which causes search to scroll to incorrect post indexes.
    • Optimize ReplyLayoutContainer and make some composable functions "skippable".
    • Fix CatalogScreen/ThreadScreen Content composables capturing outdated replyLayoutStates.
    • Some minor compose optimizations.
    • Optimize CatalogScreen and ThreadScreen and make some composable functions "skippable". Also optimize PostListContent and some internal composables.
    • Optimize MainScreen and make some composable functions "skippable".
    • Optimize HomeScreen and make some composable functions "skippable".
    • Optimize HistoryScreen and make some composable functions "skippable".
    • Optimize BookmarksScreen and make some composable functions "skippable".
    • Optimize CatalogSelectionScreen and make some composable functions "skippable". Also some fixes in the AlbumScreen.
    • Optimize AlbumScreen and make some composable functions "skippable" part 2 (Forgot about the Toolbar).
    • Optimize AlbumScreen and make some composable functions "skippable".
    • When the system is using gesture navigation, add a new button to the reply layout to close it.
    • Some adjustments for DisplayMpvLibrariesAreNotLoadedError on tablets and phones.
    • This should probably fix a memory leak when we are trying to remove an incorrect onBackPressHandler callback.
    • Make ChanTheme.behindGradientColor a little bit darker + some GradientBackground optimizations.
    • Change the color of SelectableTextContainer controls (handles and the selection itself).
    • Resolve some small TODOs, remove some other TODOs that I don't plan to resolve.
    • Fix regular and search toolbar's left icon inconsistencies due to horizontal padding not being used in some places.
    • Add leak canary dependency.
    • MediaViewerScreen now listens for new images and updates them automatically.
    • Remove FloatingComposeBackgroundScreen. Just apply the FloatingComposeScreen's bgColor in the screen itself without complicating everything tenfold.
    • Update snapper.
    • Do not show the "X new images" toast if AlbumScreen is not the topmost screen.
    • Update cross-thread link postfix to make it more easily searchable.
    • Remove minimizable floating media player.
    • Some small fixes + update album screen title when new images are received from the server.
    • AlbumScreen now listens for new album images and updates them automatically.
    • Fix WebView showing some weird glitches. Fix not being possible to dismiss text selection by clicking the post comment.
    • Can now select thread posts' text by double-tapping it.
    • Add ability to send regular reports (to github repo where all the issues are stored)
    • Display system animations state in the report footer.
    • When auto-bookmarking a thread upon reply, don't forget to update that bookmark's title and thumbnail upon next successful bookmark into fetch from the server since that info won't be available to us right away. While a bookmark has no thumbnail/title show shimmer effect.
    • Show "Album" icon in the thread Toolbar instead of it being an overflow menu item. Shrink selected images on AlbumScreen.
    • Update CloudFlare detection patterns.
    • Add ability to send crash reports.
    • Disable mini media player for now.
    • Add ability to pass CloudFlare checks.
    • Add 4chan passcode support.
    • Add bottom paddings.
    • Update compose to the latest version.
    • Remote image search.
    • compileSdk 33, targetSdk 32
    • Decode attached videos' frame to display in ReplyLayout.
    • Update dependencies. Add coil-video dependency to request video frames.
    • Reply layout comment formatting buttons.
    • Add captcha solver support.
    • Update dependencies.
    • Show your replies/(You)s on the catalog/thread scrollbars.
    • Remove this animation because it makes many other things look ugly/incorrect.
    • Can now download catalog/thread albums fully or partially.
    • Display thread title/image info in albums.
    • Remove these rules because everything works without them.
    • Fix a bug where it's impossible to close the reply layout by pressing the back button after rotating the phone a couple of times (configuration change) because of mainUiLayoutMode that we capture inside of the HandleBackPresses lambda getting outdated.
    Source code(tar.gz)
    Source code(zip)
    KurobaExLite-production-arm64-v8a-release.apk(6.34 MB)
    KurobaExLite-production-armeabi-v7a-release.apk(6.22 MB)
    KurobaExLite-production-x86-release.apk(6.40 MB)
    KurobaExLite-production-x86_64-release.apk(6.39 MB)
  • v1.0.3-beta(Jul 15, 2022)

    • Fix crashes caused by proguard.
    • Fix a bug where it was impossible to open a media from reply chain when the media player was already minimized.
    • Auto-hide mini player's controls after 3 seconds of inactivity.
    • Do not show the mute/unmute button in mini player if there is no audio.
    • It's now possible to open other media when media scroller is minimized thus scroll to that media.
    • Fix FloatingComposeBackgroundScreen not being removed from the screen stack, thus blocking all the content underneath it, when closing reply chain after opening minimized media viewer.
    • Rewrite screen animations.
    • Some renaming.
    • Pass all screen arguments with Bundles + add savedStateHandles for each screen.
    • Fix sound always being muted in videos.
    • Fix image/video scaling problems when minimizing/maximizing the player (hacky).
    • Update pager code.
    • Implement seeking/play/pause/mute/unmute for mini player.
    • Fix the issue with thread scroll restoration.
    • Fix trying to serialize the whole throwable to pass into CrashReportActivity which failed most of the time.
    • Remember last viewed media and restore it upon minimizing/maximizing the media viewer.
    • Remember last viewed media and restore it upon config change.
    • Fix video player controls not showing up sometimes.
    • Remember last position of the mini player.
    • Fix thread bookmarking not working as expected when clicking the Bookmark icon.
    • Further work on implementing mini media player.
    • Initial work on adding ability to minimize/maximize back media viewer. Make the default navigation screen to be added into the routing system.
    • Hide some stuff inside of MediaViewerScreenState.
    • Update ComposeSubsamplingScaleImage.
    • Implement kurobaAnimateContentSize() with one new parameter - areEqual function that allows comparing the initial and target composable sizes to avoid invoking the animation when only width or only height changed (not both).
    • Fix processTapToSeekGesture sometimes not calling the code in the finally {} block.
    • Remove unused colors.
    • Gradient background.
    Source code(tar.gz)
    Source code(zip)
    KurobaExLite-production-arm64-v8a-release.apk(6.08 MB)
    KurobaExLite-production-armeabi-v7a-release.apk(5.96 MB)
    KurobaExLite-production-x86-release.apk(6.14 MB)
    KurobaExLite-production-x86_64-release.apk(6.13 MB)
  • v1.0.2-beta(Jun 8, 2022)

    • Use the other issue url that doesn't require an account.
    • Add options to attach verbose and mpv logs.
    • Simple UI for crash reporting.
    • Show helper hint when dragging the mpv seekbar.
    • Update indicator text for cases when the search is used and when it's not used.
    • Push/Pop/Fade (In/Out) screen animations now also animate toolbars.
    • Add toolbar transition animation between two top toolbars when swiping the topmost swipeable screen away.
    • Extract some stuff, change the max alpha for the swipeable screen background color.
    • Fix toolbars flickering for split second when new screens are pushed into the navigation.
    • Fix catalog posts not being reparsed when refreshing the catalog (without fully reloading it).
    • Swipe left to go back to previous reply chain, swipe right to close them all.
    • Do not use fadeIn animation for toolbars because it doesn't look good.
    • Slightly adjust the "Close" text alpha animation so that it becomes fully visible faster.
    • Update Compose to v1.2.0-beta03
    • Add content size animation for PopupRepliesScreen.
    • Add content size animation for PostCellFooter.
    • Decide whether to close or open the drawer after the drag animation depending on what is the currentValue of the drawerSwipeState after the fling animation.
    • Fix the damn bug with a hack.
    • Fix FAB not showing up when using SPLIT layout mode.
    • Hack around the bug that causes nothing to be drawn on screen after toggling the history setting on and off.
    • Fix a bug where we would push new screens into a wrong Pager's AbstractPage because of the incorrect screenKey being used in _currentPageMapFlow when using SPLIT layout.
    • Fix iterateScreens function using incorrect indexes for Split page's child screens which resulted in crashes and other bugs.
    • Swipeable reply chains.
    • Implement UI for site settings.
    • Fix processPostListScrollEvent() receiving outdated postListAsync state which breaks stuff like last scrolled post position, bookmarks unread posts counter, etc.
    • Fix the size of this error message item.
    • Scale the full image to always take the whole screen size even if it's smaller (Kuroba/KurobaEx behavior).
    • Fix for "last seen post" indicator not getting hidden right away when reopening very short threads.
    • Remove some TODOs.
    • Do not show the "open previous catalog/thread" upon app start if the navigation history is disabled.
    • Auto-bookmark thread when posting in them or when creating new threads.
    • Add the cookie to replies and captcha requests (for easy captcha).
    • Add confirmation dialog when pruning inactive bookmarks.
    Source code(tar.gz)
    Source code(zip)
    KurobaExLite-production-arm64-v8a-release.apk(6.00 MB)
    KurobaExLite-production-armeabi-v7a-release.apk(5.88 MB)
    KurobaExLite-production-x86-release.apk(6.06 MB)
    KurobaExLite-production-x86_64-release.apk(6.05 MB)
  • v1.0.1-beta(May 31, 2022)

    • Do not show the "catalog dev menu" on non-dev builds.
    • Use current version code if lastCheckedVersionCode is 0.
    • Add more settings to AppSettingsScreen.
    • Fix crash in PopupRepliesScreenViewModel caused by posts not being sorted.
    • Fix post getting out of sort order in sticky rolling threads.
    • Fix thread status cell showing "Loading..." text every time we scroll from and then back to it.
    • Fix floating screens changing their positions when opening other floating screens.
    • Use radio buttons in floating menu item groups.
    • Implement application settings.
    • Fix search input disappearing completely from the Bookmarks list when there we no bookmarks found by a search query.
    • Some work on BookmarksScreen.
    • Fix some sorting issues in rolling sticky threads.
    • Pause the auto-updater when the app goes to background.
    • Show reply button if there was a error while refreshing thread.
    • Handle rolling sticky threads.
    • Fix drag drawer gesture getting stuck when releasing the pointer without doing the fling gesture while on the 0th page of the pager
    • Some optimizations for BookmarksScreen.
    • Add quantization with 1f / 16f precision for hideable toolbar/fab transition to make them more performant since we don't need to handle any subpixel changes.
    • Optimize access to PagerState public variables that are accessed inside the composition.
    • Make sure the drawer is not recomposed when it's closed.
    • Fix incorrect calculate of dragDeltaX which results in not being able to easily "pull" the drawer when on 0th page without doing the fling gesture.
    • Do not use the special gesture exclusion zone when on the 0th page of the pager.
    • Show more of reply attachment thumbnail when the reply layout is in opened state. Also show the "delete" icon.
    • Remove Beta flavor, rename Stable to Production.
    • Decrease the default height of reply layout.
    • Update manager.
    Source code(tar.gz)
    Source code(zip)
    KurobaExLite-production-arm64-v8a-release.apk(5.94 MB)
    KurobaExLite-production-armeabi-v7a-release.apk(5.81 MB)
    KurobaExLite-production-x86-release.apk(5.99 MB)
    KurobaExLite-production-x86_64-release.apk(5.99 MB)
Owner
Dmitry
Dmitry
A fully functional Android app built entirely with Kotlin and Jetpack Compose

Now in Android App [Work in progress ?? ] Learn how this app was designed and built in the design case study, architecture learning journey and modula

Android 9.1k Dec 30, 2022
🧱 A tetris game fully built using Jetpack Compose

A tetris game fully built using Jetpack Compose, almost all UI elements are created by code, including the following app icon, which is also generated by Composable with @Preview.

fundroid 590 Jan 5, 2023
ComposePrefs3 is a fully featured library of preference composables for Jetpack Compose.

ComposePrefs3 This is the M3 version of ComposePrefs. The M2 version can be found here. ComposePrefs3 is a preferences library for Jetpack Compose whi

Jamal Mulla 21 Dec 2, 2022
Jetpack Compose performance testing

Jetpack Compose performance testing ( ?? WIP) ?? Disclaimer This project is not official, and the information is provided as-is. All test cases descri

Sergey Yaremych 16 Jun 17, 2022
Jetpack Compose performance testing

Jetpack Compose performance testing

Sergey Yaremych 16 Jun 17, 2022
ComposeImageBlurhash is a Jetpack Compose component with the necessary implementation to display a blurred image while the real image is loaded from the internet. Use blurhash and coil to ensure good performance.

compose-image-blurhash ComposeImageBlurhash is a Jetpack Compose component with the necessary implementation to display a blurred image while the real

Orlando Novas Rodriguez 24 Nov 18, 2022
A LibrePhotos android client written using Jetpack Compose and all the latest Android technologies

UhuruPhotos. A LibrePhotos client UhuruPhotos is an Android client for LibrePhotos written using the latest Android technologies, like Jetpack Compose

Savvas Dalkitsis 190 Jan 3, 2023
Pokedex Compose is an independent re-write of a demo application by the name of Pokedex, but written in jetpack compose.

Pokedex Compose Pokedex Compose is an independent re-write of a similar project by the name of Pokedex. I am recreating the UI but I am doing it using

Jose Patino 4 May 1, 2022
Fully customizable implementation of Snowfall View on Android

Android-Snowfall Fully customizable implementation of "Snowfall View" on Android. That's how we use it in our app Hotellook Compatibility This library

Daniel Jette 0 Dec 4, 2021
A high-performance Android system parasitic container.

Mizuki A high-performance Android system parasitic container. This is a project idea that will be realized in a few years time. License GPL-3.0 Copyri

Fankesyooni 1 Jan 10, 2022
A simple 'Slide to Unlock' Material widget for Android, written in Jetpack Compose

SlideTodo A simple 'Slide to Unlock' Material widget for Android, written in Jetpack Compose you can find source code here Getting Started allprojects

Nthily 7 Aug 8, 2022
A Sudoku game for Android & Desktop written with Jetpack Compose Multiplatform

?? Compose Arcade A sample Kotlin Multiplatform Compose Sudoku app for Android & Desktop. Most code is shared between Android & Desktop using Kotlin M

Aaron Oertel 42 Dec 30, 2022
Android browser written by jetpack compose

TS Browser Top secret Browser! Download Features ■ Secret Mode Secret mode is a unique mode in TS browser. The secret mode is designed for browsing se

hinnka 28 Dec 31, 2022
Morph is an Android library, written in Kotlin, built to work together with Jetpack Compose.

Morph Morph is an Android library, written in Kotlin, built to work together with Jetpack Compose. It allows you to transition any view to another vie

Menno Vogel 12 Jul 10, 2022
FirebaseSignInWithGoogle app it's written in Kotlin and shows a simple solution for implementing Firebase Authentication with Google, using Jetpack Compose on Android.

FirebaseSignInWithGoogle It's an app built with Kotlin that shows how to authenticate users with Firebase using Android Architecture Components and th

Alex 28 Dec 25, 2022
Yet another ToDo app, but the UI completely written in Jetpack Compose!

Yet another ToDo app, but the UI completely written in Jetpack Compose!

Wisnu Kurniawan 134 Dec 31, 2022
A library that you can use in 4 different types toast written with Jetpack Compose

Composable Sweet Toast A library that you can use in 4 different types(Success, Error, Warning, Info) written with Jetpack Compose. You can use this t

Talha Fakıoğlu 67 Dec 19, 2022
Dynamic Badge with customizable features as max number before displaying with +, color, shadow, border, corner radius, font properties and more written with Jetpack Compose

✏️?? Dynamic Badge with customizable features as max number before displaying with +, color, shadow, border, corner radius, font properties and more written with Jetpack Compose. Displays numbers either in circle or rounded rectangle shape based on badge count and selected threshold to transform from circle to rounded rectangle.

Smart Tool Factory 4 Jul 27, 2022
SpotifyCompose - Spotify UI written on Jetpack Compose

SpotifyCompose - Spotify UI written on Jetpack Compose

Ivan Gospodarik 36 Dec 28, 2022