Skip to content

Commit

Permalink
Merge branch 'main' into yamada-ika/run-test-on-mac
Browse files Browse the repository at this point in the history
  • Loading branch information
Yamada-Ika committed Sep 17, 2024
2 parents e259380 + 6a30659 commit 3672acc
Show file tree
Hide file tree
Showing 91 changed files with 1,353 additions and 582 deletions.
4 changes: 2 additions & 2 deletions app-android/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ android {
buildConfig = true
}
defaultConfig {
versionCode = 6
versionName = "1.2.0"
versionCode = 10
versionName = "1.5.1"
}
signingConfigs {
create("dev") {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,7 @@ import androidx.browser.customtabs.CustomTabsIntent
import androidx.compose.animation.ExperimentalSharedTransitionApi
import androidx.compose.animation.SharedTransitionLayout
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.asPaddingValues
import androidx.compose.foundation.layout.calculateEndPadding
import androidx.compose.foundation.layout.calculateStartPadding
import androidx.compose.foundation.layout.displayCutout
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.windowsizeclass.WindowSizeClass
Expand All @@ -31,7 +25,6 @@ import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalLayoutDirection
import androidx.compose.ui.text.font.FontFamily
import androidx.core.content.getSystemService
import androidx.core.net.toUri
Expand Down Expand Up @@ -100,7 +93,6 @@ fun KaigiApp(
fontFamily: FontFamily?,
modifier: Modifier = Modifier,
) {
val layoutDirection = LocalLayoutDirection.current
KaigiTheme(
colorContrast = colorContrast(),
fontFamily = fontFamily,
Expand All @@ -112,14 +104,7 @@ fun KaigiApp(
KaigiNavHost(
windowSize = windowSize,
displayFeatures = displayFeatures,
modifier = Modifier.padding(
start = WindowInsets.displayCutout
.asPaddingValues()
.calculateStartPadding(layoutDirection),
end = WindowInsets.displayCutout
.asPaddingValues()
.calculateEndPadding(layoutDirection),
),
modifier = Modifier.fillMaxSize(),
)
}
}
Expand All @@ -133,6 +118,7 @@ private fun KaigiNavHost(
displayFeatures: PersistentList<DisplayFeature>,
modifier: Modifier = Modifier,
navController: NavHostController = rememberNavController(),
mainNestedNavController: NavHostController = rememberNavController(),
externalNavController: ExternalNavController = rememberExternalNavController(),
) {
SharedTransitionLayout(modifier = modifier) {
Expand All @@ -144,9 +130,10 @@ private fun KaigiNavHost(
startDestination = mainScreenRoute,
) {
mainScreen(
windowSize,
navController,
externalNavController,
windowSize = windowSize,
navController = navController,
mainNestedNavController = mainNestedNavController,
externalNavController = externalNavController,
)
sessionScreens(
onNavigationIconClick = navController::popBackStack,
Expand Down Expand Up @@ -197,12 +184,14 @@ private fun KaigiNavHost(
private fun NavGraphBuilder.mainScreen(
windowSize: WindowSizeClass,
navController: NavHostController,
mainNestedNavController: NavHostController,
@Suppress("UnusedParameter")
externalNavController: ExternalNavController,
) {
mainScreen(
windowSize = windowSize,
mainNestedGraphStateHolder = KaigiAppMainNestedGraphStateHolder(),
mainNestedNavController = mainNestedNavController,
mainNestedGraph = { mainNestedNavController, contentPadding ->
nestedSessionScreens(
modifier = Modifier,
Expand Down Expand Up @@ -405,6 +394,14 @@ private class ExternalNavController(
): Boolean {
val pm = context.packageManager

// Get all apps that resolve the specific Url
val specializedActivityIntent = Intent(Intent.ACTION_VIEW, uri)
.addCategory(Intent.CATEGORY_BROWSABLE)
val resolvedSpecializedList: MutableSet<String> =
pm.queryIntentActivities(specializedActivityIntent, 0)
.map { it.activityInfo.packageName }
.toMutableSet()

// Get all Apps that resolve a generic url
val browserActivityIntent = Intent()
.setAction(Intent.ACTION_VIEW)
Expand All @@ -415,14 +412,6 @@ private class ExternalNavController(
.map { it.activityInfo.packageName }
.toSet()

// Get all apps that resolve the specific Url
val specializedActivityIntent = Intent(Intent.ACTION_VIEW, uri)
.addCategory(Intent.CATEGORY_BROWSABLE)
val resolvedSpecializedList: MutableSet<String> =
pm.queryIntentActivities(specializedActivityIntent, 0)
.map { it.activityInfo.packageName }
.toMutableSet()

// Keep only the Urls that resolve the specific, but not the generic urls.
resolvedSpecializedList.removeAll(genericResolvedList)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import androidx.activity.enableEdgeToEdge
import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi
import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.getValue
import androidx.compose.runtime.produceState
import androidx.compose.runtime.remember
Expand All @@ -21,8 +22,9 @@ import androidx.window.layout.WindowInfoTracker
import dagger.hilt.android.AndroidEntryPoint
import io.github.droidkaigi.confsched.data.di.RepositoryProvider
import io.github.droidkaigi.confsched.designsystem.theme.dotGothic16FontFamily
import io.github.droidkaigi.confsched.droidkaigiui.KaigiAppCompositionLocalProvider
import io.github.droidkaigi.confsched.droidkaigiui.ProvideAndroidContextToComposeResource
import io.github.droidkaigi.confsched.droidkaigiui.compositionlocal.LocalClock
import io.github.droidkaigi.confsched.droidkaigiui.isTest
import io.github.droidkaigi.confsched.model.FontFamily.DotGothic16Regular
import io.github.droidkaigi.confsched.model.FontFamily.SystemDefault
import io.github.droidkaigi.confsched.model.Settings.DoesNotExists
Expand Down Expand Up @@ -90,11 +92,10 @@ class MainActivity : ComponentActivity() {
}
}

KaigiAppCompositionLocalProvider(
locals = arrayOf(
LocalClock provides clockProvider.clock(),
),
) {
CompositionLocalProvider(LocalClock provides clockProvider.clock()) {
if (isTest()) {
ProvideAndroidContextToComposeResource()
}
repositoryProvider.Provide {
KaigiApp(
windowSize = windowSize,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package io.github.droidkaigi.confsched.shared

import androidx.compose.animation.ExperimentalSharedTransitionApi
import androidx.compose.animation.SharedTransitionLayout
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.MaterialTheme
Expand Down Expand Up @@ -36,6 +38,7 @@ import io.github.droidkaigi.confsched.designsystem.theme.dotGothic16FontFamily
import io.github.droidkaigi.confsched.droidkaigiui.NavHostWithSharedAxisX
import io.github.droidkaigi.confsched.droidkaigiui.SnackbarMessageEffect
import io.github.droidkaigi.confsched.droidkaigiui.UserMessageStateHolder
import io.github.droidkaigi.confsched.droidkaigiui.compositionlocal.LocalSharedTransitionScope
import io.github.droidkaigi.confsched.droidkaigiui.compositionlocal.LocalSnackbarHostState
import io.github.droidkaigi.confsched.eventmap.eventMapScreenRoute
import io.github.droidkaigi.confsched.eventmap.eventMapScreens
Expand Down Expand Up @@ -190,79 +193,94 @@ fun KaigiApp(
}
}

@OptIn(ExperimentalSharedTransitionApi::class)
@Composable
private fun KaigiNavHost(
windowSize: WindowSizeClass,
externalNavController: ExternalNavController,
onLicenseScreenRequest: () -> Unit,
onAccessCalendarIsDenied: () -> Unit,
modifier: Modifier = Modifier,
navController: NavHostController = rememberNavController(),
mainNestedNavController: NavHostController = rememberNavController(),
) {
NavHostWithSharedAxisX(navController = navController, startDestination = mainScreenRoute) {
mainScreen(
windowSize = windowSize,
navController = navController,
externalNavController = externalNavController,
onLicenseScreenRequest = onLicenseScreenRequest,
)
sessionScreens(
onNavigationIconClick = navController::popBackStack,
onLinkClick = externalNavController::navigate,
onCalendarRegistrationClick = { timetableItem ->
externalNavController.navigateToCalendarRegistration(
timetableItem = timetableItem,
onAccessCalendarIsDenied = onAccessCalendarIsDenied,
SharedTransitionLayout(modifier = modifier) {
CompositionLocalProvider(
LocalSharedTransitionScope provides this,
) {
NavHostWithSharedAxisX(
navController = navController,
startDestination = mainScreenRoute,
) {
mainScreen(
windowSize = windowSize,
navController = navController,
mainNestedNavController = mainNestedNavController,
externalNavController = externalNavController,
onLicenseScreenRequest = onLicenseScreenRequest,
)
},
onShareClick = externalNavController::onShareClick,
onFavoriteListClick = {
navController.navigate(
favoritesScreenWithNavigationIconRoute
sessionScreens(
onNavigationIconClick = navController::popBackStack,
onLinkClick = externalNavController::navigate,
onCalendarRegistrationClick = { timetableItem ->
externalNavController.navigateToCalendarRegistration(
timetableItem = timetableItem,
onAccessCalendarIsDenied = onAccessCalendarIsDenied,
)
},
onShareClick = externalNavController::onShareClick,
onFavoriteListClick = {
navController.navigate(
favoritesScreenWithNavigationIconRoute
)
},
)
},
)

contributorsScreens(
onNavigationIconClick = navController::popBackStack,
onContributorItemClick = externalNavController::navigate,
)
contributorsScreens(
onNavigationIconClick = navController::popBackStack,
onContributorItemClick = externalNavController::navigate,
)

searchScreens(
onTimetableItemClick = navController::navigateToTimetableItemDetailScreen,
onBackClick = navController::popBackStack,
)
searchScreens(
onTimetableItemClick = navController::navigateToTimetableItemDetailScreen,
onBackClick = navController::popBackStack,
)

staffScreens(
onNavigationIconClick = navController::popBackStack,
onStaffItemClick = externalNavController::navigate,
)
staffScreens(
onNavigationIconClick = navController::popBackStack,
onStaffItemClick = externalNavController::navigate,
)

settingsScreens(
onNavigationIconClick = navController::popBackStack,
)
settingsScreens(
onNavigationIconClick = navController::popBackStack,
)

sponsorsScreens(
onNavigationIconClick = navController::popBackStack,
onSponsorsItemClick = externalNavController::navigate,
)
sponsorsScreens(
onNavigationIconClick = navController::popBackStack,
onSponsorsItemClick = externalNavController::navigate,
)

favoritesScreens(
onNavigationIconClick = navController::popBackStack,
onTimetableItemClick = navController::navigateToTimetableItemDetailScreen,
contentPadding = PaddingValues(),
)
favoritesScreens(
onNavigationIconClick = navController::popBackStack,
onTimetableItemClick = navController::navigateToTimetableItemDetailScreen,
contentPadding = PaddingValues(),
)
}
}
}
}

private fun NavGraphBuilder.mainScreen(
windowSize: WindowSizeClass,
navController: NavHostController,
mainNestedNavController: NavHostController,
externalNavController: ExternalNavController,
onLicenseScreenRequest: () -> Unit,
) {
mainScreen(
windowSize = windowSize,
mainNestedGraphStateHolder = KaigiAppMainNestedGraphStateHolder(),
mainNestedNavController = mainNestedNavController,
mainNestedGraph = { mainNestedNavController, contentPadding ->
nestedSessionScreens(
modifier = Modifier,
Expand Down
2 changes: 2 additions & 0 deletions app-ios/App/DroidKaigi2024App-Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,7 @@
</array>
<key>NSCalendarsUsageDescription</key>
<string>Use for adding events to your calendar</string>
<key>CADisableMinimumFrameDurationOnPhone</key>
<true/>
</dict>
</plist>
Loading

0 comments on commit 3672acc

Please sign in to comment.