Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
e3818a0
Refactor search results and its viewmodel. mostly untested
apex2504 Apr 13, 2026
5bbc8a1
update M3, remove redundant optins
apex2504 Apr 13, 2026
7a1da91
Merge pull request #54 from flazepe/dev
flazepe May 9, 2026
8428307
Merge remote-tracking branch 'origin/dev' into dev
apex2504 May 9, 2026
bdab2fa
Add warning in sheet when a post is AI
apex2504 May 9, 2026
993dd8a
Begin to make the search screen composable less unwieldy
apex2504 May 9, 2026
1b80881
Space in recommendations query instead of +, fixes #56
apex2504 May 17, 2026
df9ff2b
I guess that's needed after all
apex2504 May 17, 2026
4dfd54c
gelbooru preview URLs need the referer header now too
apex2504 Jun 12, 2026
7afb3ff
Overhaul recommendations, ensure picked tags are good matches
apex2504 Jun 13, 2026
b49fbc8
Update version
apex2504 Jun 13, 2026
d1b56bb
Update deps and apparently the optins are needed again lol?
apex2504 Jun 13, 2026
9b160fb
move selected ratings to search result view model
apex2504 Jun 15, 2026
837157c
rename initialPage
apex2504 Jun 15, 2026
eff6127
Switch out deprecated modal bottom sheet state
apex2504 Jun 15, 2026
1d0377e
Tweak info sheet title
apex2504 Jun 15, 2026
78c429d
Add MD5 fallback for fetching grouped tags for very old favourites
apex2504 Jun 16, 2026
d90bb9e
More simple and robust fix for gelbooru thumbnails
apex2504 Jun 16, 2026
2ba34f4
Imports
apex2504 Jun 16, 2026
d819f74
Account for an additional hash in pixiv image URLs (#57)
flazepe Jun 16, 2026
15174c0
Merge remote-tracking branch 'origin/dev' into dev
apex2504 Jun 16, 2026
faf3579
Move blocked tags func to fix first search load
apex2504 Jun 19, 2026
8059f20
Unify all AI blocking under the EXCLUDE_AI pref
apex2504 Jun 19, 2026
4b93934
update version
apex2504 Jun 19, 2026
4e47a97
Expressive loading indicators
apex2504 Jun 19, 2026
cb2d745
Remove note about discontinued legacy builds
apex2504 Jun 19, 2026
3341f56
compose and m3 update
apex2504 Jun 19, 2026
d09b66c
Adjust horizontal window insets
apex2504 Jun 19, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,11 +67,6 @@ Powered by multiple image boards and boorus, Breadboard makes finding your favou

Alternatively, download [the latest GitHub release](https://github.com/breadboardapp/breadboard/releases/latest), allow unknown sources in your device settings, and then install manually. This method will not provide automatic/notifications for updates.

> [!WARNING]
> Legacy builds (with the `-legacy` suffix) are deprecated we will cease publishing them in the near future.
>
> Make sure you download a standard release (with no suffix).

## Contributing

Feedback and code contributions are welcome!
Expand Down
6 changes: 3 additions & 3 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,14 @@ if (rootProject.file("local.properties").exists()) {

android {
namespace 'moe.apex.breadboard'
compileSdk 36
compileSdk 37

defaultConfig {
applicationId "moe.apex.breadboard"
minSdk 26
targetSdk 36
versionCode 321
versionName "3.2.1"
versionCode 323
versionName "3.2.3"

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
Expand Down
6 changes: 6 additions & 0 deletions app/src/main/java/moe/apex/breadboard/DeepLinkActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ import android.view.KeyEvent
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.material3.ComposeMaterial3Flags
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.collectAsState
Expand Down Expand Up @@ -58,10 +60,14 @@ class DeepLinkActivity : SingletonImageLoader.Factory, ComponentActivity(), Volu
}


@OptIn(ExperimentalMaterial3Api::class)
override fun onCreate(savedInstanceState: Bundle?) {
enableEdgeToEdge()
super.onCreate(savedInstanceState)

// https://issuetracker.google.com/issues/521534697 TODO
ComposeMaterial3Flags.isBottomSheetPartiallyExpandedDeterministicEnabled = false

applicationContext.preferencesDataStoreFile("preferences")
runBlocking { prefs.handleMigration(applicationContext) }
val initialPrefs = runBlocking { prefs.getPreferences.first() }
Expand Down
7 changes: 4 additions & 3 deletions app/src/main/java/moe/apex/breadboard/MainActivity.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
@file:OptIn(ExperimentalMaterial3Api::class)

package moe.apex.breadboard

import android.content.Context
Expand All @@ -13,6 +11,7 @@ import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.ComposeFoundationFlags
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.material3.ComposeMaterial3Flags
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.DisposableEffect
Expand Down Expand Up @@ -80,12 +79,14 @@ class MainActivity : SingletonImageLoader.Factory, ComponentActivity(), VolumeBu
}


@OptIn(ExperimentalFoundationApi::class)
@OptIn(ExperimentalFoundationApi::class, ExperimentalMaterial3Api::class)
override fun onCreate(savedInstanceState: Bundle?) {
enableEdgeToEdge()
super.onCreate(savedInstanceState)
// Having this enabled seems to result in some items becoming invisible when animating lazy lists
ComposeFoundationFlags.isSkipItemPlacementAnimationFixEnabled = false
// https://issuetracker.google.com/issues/521534697 TODO
ComposeMaterial3Flags.isBottomSheetPartiallyExpandedDeterministicEnabled = false

applicationContext.preferencesDataStoreFile("preferences")
runBlocking { prefs.handleMigration(applicationContext) }
Expand Down
18 changes: 10 additions & 8 deletions app/src/main/java/moe/apex/breadboard/detailview/ImageGrid.kt
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,6 @@ import androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridItemSpan
import androidx.compose.foundation.lazy.staggeredgrid.itemsIndexed
import androidx.compose.foundation.lazy.staggeredgrid.rememberLazyStaggeredGridState
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.LinearProgressIndicator
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.pulltorefresh.PullToRefreshBox
Expand All @@ -49,6 +47,8 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import coil3.compose.AsyncImage
import coil3.network.NetworkHeaders
import coil3.network.httpHeaders
import coil3.request.ImageRequest
import coil3.request.crossfade
import kotlinx.coroutines.launch
Expand All @@ -57,6 +57,7 @@ import moe.apex.breadboard.preferences.LocalPreferences
import moe.apex.breadboard.util.NavBarHeightVerticalSpacer
import moe.apex.breadboard.util.PullToRefreshController
import moe.apex.breadboard.util.SMALL_SPACER
import moe.apex.breadboard.util.WideLinearWavyProgressIndicator
import moe.apex.breadboard.util.largerShape


Expand All @@ -66,7 +67,6 @@ private const val MIN_CELL_WIDTH = 120
private const val MAX_CELL_WIDTH = 144


@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun ImageGrid(
modifier: Modifier = Modifier,
Expand Down Expand Up @@ -138,10 +138,7 @@ fun ImageGrid(
.padding(contentPadding)
.background(MaterialTheme.colorScheme.background)
) {
LinearProgressIndicator(
modifier = modifier
.fillMaxWidth()
)
WideLinearWavyProgressIndicator(modifier = modifier.fillMaxWidth())
}

LaunchedEffect(doneInitialLoad) {
Expand All @@ -154,7 +151,6 @@ fun ImageGrid(
}


@OptIn(ExperimentalMaterial3Api::class)
@Composable
private fun StaggeredImageGrid(
modifier: Modifier = Modifier,
Expand Down Expand Up @@ -313,8 +309,14 @@ private fun ImagePreview(
onImageClick: (Int, Image) -> Unit
) {
val context = LocalContext.current

val headersBuilder = remember {
NetworkHeaders.Builder()
.set("Referer", image.imageSource.imageBoard.baseUrl)
}
val model = remember { ImageRequest.Builder(context)
.data(image.previewUrl)
.httpHeaders(headersBuilder.build())
.crossfade(true)
.build()
}
Expand Down
Loading
Loading