From 810e0a15d2364b251e55c19da3ddbf63cde21b96 Mon Sep 17 00:00:00 2001 From: ryoya ito Date: Thu, 8 Aug 2024 17:32:05 +0900 Subject: [PATCH 01/38] add search ui, transition --- app-ios/Package.swift | 11 ++ app-ios/Sources/App/RootReducer.swift | 6 + app-ios/Sources/App/RootView.swift | 4 + .../arrow_drop_down.imageset/Contents.json | 15 ++ .../arrow_drop_down.svg | 3 + .../CommonComponents/SelectionChips.swift | 71 ++++---- .../FavoriteFeature/FavoriteView.swift | 3 +- app-ios/Sources/Model/Selectable.swift | 3 + .../Resources/Localizable.xcstrings | 15 ++ .../Resources/Media.xcassets/Contents.json | 6 + .../arrow_drop_down.imageset/Contents.json | 15 ++ .../arrow_drop_down.svg | 3 + .../Sources/SearchFeature/SearchReducer.swift | 143 ++++++++++++++++ .../Sources/SearchFeature/SearchView.swift | 152 ++++++++++++++++++ .../TimetableFeature/TimetableListView.swift | 2 +- .../TimetableFeature/TimetableReducer.swift | 3 +- 16 files changed, 425 insertions(+), 30 deletions(-) create mode 100644 app-ios/Sources/CommonComponents/Resources/Media.xcassets/arrow_drop_down.imageset/Contents.json create mode 100644 app-ios/Sources/CommonComponents/Resources/Media.xcassets/arrow_drop_down.imageset/arrow_drop_down.svg create mode 100644 app-ios/Sources/Model/Selectable.swift create mode 100644 app-ios/Sources/SearchFeature/Resources/Localizable.xcstrings create mode 100644 app-ios/Sources/SearchFeature/Resources/Media.xcassets/Contents.json create mode 100644 app-ios/Sources/SearchFeature/Resources/Media.xcassets/arrow_drop_down.imageset/Contents.json create mode 100644 app-ios/Sources/SearchFeature/Resources/Media.xcassets/arrow_drop_down.imageset/arrow_drop_down.svg create mode 100644 app-ios/Sources/SearchFeature/SearchReducer.swift create mode 100644 app-ios/Sources/SearchFeature/SearchView.swift diff --git a/app-ios/Package.swift b/app-ios/Package.swift index f8db16274..eed4cd671 100644 --- a/app-ios/Package.swift +++ b/app-ios/Package.swift @@ -60,6 +60,7 @@ let package = Package( .aboutFeature, .contributorFeature, .favoriteFeature, + .searchFeature, .staffFeature, .sponsorFeature, .timetableFeature, @@ -166,6 +167,15 @@ let package = Package( ], plugins: [.plugin(name: "SwiftGenPlugin", package: "SwiftGenPlugin")] ), + .target( + name: "SearchFeature", + dependencies: [ + .tca, + .kmpClient, + .theme, + .commonComponents + ] + ), .target( name: "StaffFeature", dependencies: [ @@ -238,6 +248,7 @@ extension Target.Dependency { static let timetableFeature: Target.Dependency = "TimetableFeature" static let aboutFeature: Target.Dependency = "AboutFeature" static let favoriteFeature: Target.Dependency = "FavoriteFeature" + static let searchFeature: Target.Dependency = "SearchFeature" static let staffFeature: Target.Dependency = "StaffFeature" static let sponsorFeature: Target.Dependency = "SponsorFeature" static let contributorFeature: Target.Dependency = "ContributorFeature" diff --git a/app-ios/Sources/App/RootReducer.swift b/app-ios/Sources/App/RootReducer.swift index 6b10101f0..96b709a7d 100644 --- a/app-ios/Sources/App/RootReducer.swift +++ b/app-ios/Sources/App/RootReducer.swift @@ -2,6 +2,7 @@ import AboutFeature import ComposableArchitecture import ContributorFeature import FavoriteFeature +import SearchFeature import StaffFeature import SponsorFeature import TimetableFeature @@ -16,6 +17,7 @@ public struct RootReducer { @Reducer(state: .equatable) public enum Timetable { case timetableDetail(TimetableDetailReducer) + case search(SearchReducer) } @Reducer(state: .equatable) @@ -117,6 +119,10 @@ public struct RootReducer { )) return .none + case .timetable(.view(.searchTapped)): + state.paths.timetable.append(.search(.init())) + return .none + case let .favorite(.destination(destination)): switch destination { case let .timetableDetail(timetableItemWithFavorite): diff --git a/app-ios/Sources/App/RootView.swift b/app-ios/Sources/App/RootView.swift index 3d0e7e5ea..25708f7bd 100644 --- a/app-ios/Sources/App/RootView.swift +++ b/app-ios/Sources/App/RootView.swift @@ -3,6 +3,7 @@ import ComposableArchitecture import ContributorFeature import FavoriteFeature import LicenseList +import SearchFeature import SponsorFeature import StaffFeature import SwiftUI @@ -98,6 +99,9 @@ public struct RootView: View { switch store.case { case let .timetableDetail(store): TimetableDetailView(store: store) + + case let .search(store): + SearchView(store: store) } } } diff --git a/app-ios/Sources/CommonComponents/Resources/Media.xcassets/arrow_drop_down.imageset/Contents.json b/app-ios/Sources/CommonComponents/Resources/Media.xcassets/arrow_drop_down.imageset/Contents.json new file mode 100644 index 000000000..4a00e2906 --- /dev/null +++ b/app-ios/Sources/CommonComponents/Resources/Media.xcassets/arrow_drop_down.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "arrow_drop_down.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "template" + } +} diff --git a/app-ios/Sources/CommonComponents/Resources/Media.xcassets/arrow_drop_down.imageset/arrow_drop_down.svg b/app-ios/Sources/CommonComponents/Resources/Media.xcassets/arrow_drop_down.imageset/arrow_drop_down.svg new file mode 100644 index 000000000..7b4743a93 --- /dev/null +++ b/app-ios/Sources/CommonComponents/Resources/Media.xcassets/arrow_drop_down.imageset/arrow_drop_down.svg @@ -0,0 +1,3 @@ + + + diff --git a/app-ios/Sources/CommonComponents/SelectionChips.swift b/app-ios/Sources/CommonComponents/SelectionChips.swift index 64720b6f4..b90cdc90e 100644 --- a/app-ios/Sources/CommonComponents/SelectionChips.swift +++ b/app-ios/Sources/CommonComponents/SelectionChips.swift @@ -1,10 +1,7 @@ +import Model import SwiftUI import Theme -public protocol Selectable: CaseIterable, Equatable, Identifiable { - var title: String { get } -} - public struct SelectionChips: View where SelectableCase.AllCases: RandomAccessCollection { @Binding public var selected: SelectableCase? public var notSelectedTitle: String? @@ -18,13 +15,21 @@ public struct SelectionChips: View where SelectableC ScrollView(.horizontal) { HStack(spacing: 6) { if let notSelectedTitle { - SelectionChip(title: notSelectedTitle, isSelected: selected == nil) { + SelectionChip( + title: notSelectedTitle, + isMultiSelect: false, + isSelected: selected == nil + ) { selected = nil } } - ForEach(SelectableCase.allCases) { selection in - SelectionChip(title: selection.title, isSelected: selected == selection) { + ForEach(SelectableCase.allCases, id: \.id) { selection in + SelectionChip( + title: selection.caseTitle, + isMultiSelect: false, + isSelected: selected == selection + ) { selected = selection } } @@ -38,11 +43,13 @@ public struct SelectionChips: View where SelectableC public struct SelectionChip: View { public let title: String + public let isMultiSelect: Bool public let isSelected: Bool public let onTap: () -> Void - public init(title: String, isSelected: Bool, onTap: @escaping () -> Void) { + public init(title: String, isMultiSelect: Bool, isSelected: Bool, onTap: @escaping () -> Void) { self.title = title + self.isMultiSelect = isMultiSelect self.isSelected = isSelected self.onTap = onTap } @@ -51,31 +58,41 @@ public struct SelectionChip: View { Button { onTap() } label: { - if isSelected { - HStack { + let foregroundColor = isSelected + ? AssetColors.Secondary.onSecondaryContainer.swiftUIColor + : AssetColors.Surface.onSurfaceVariant.swiftUIColor + let backgroundColor = isSelected + ? AssetColors.Secondary.secondaryContainer.swiftUIColor + : Color.clear + let padding = isSelected + ? EdgeInsets(top: 6, leading: 8, bottom: 6, trailing: 16) + : EdgeInsets(top: 6, leading: 16, bottom: 6, trailing: 16) + + HStack { + if isSelected { Image(.icCheck) .renderingMode(.template) .resizable() .frame(width: 18, height: 18) - - Text(title) - .textStyle(.labelLarge) } - .foregroundStyle(AssetColors.Secondary.onSecondaryContainer.swiftUIColor) - .padding(EdgeInsets(top: 6, leading: 8, bottom: 6, trailing: 16)) - .background(AssetColors.Secondary.secondaryContainer.swiftUIColor) - .clipShape(RoundedRectangle(cornerRadius: 8)) - } else { + Text(title) .textStyle(.labelLarge) - .foregroundStyle(AssetColors.Surface.onSurfaceVariant.swiftUIColor) - .padding(.horizontal, 16) - .padding(.vertical, 6) - .background(AssetColors.Surface.surface.swiftUIColor) - .overlay { - RoundedRectangle(cornerRadius: 8) - .stroke(AssetColors.Outline.outline.swiftUIColor, lineWidth: 1) - } + + if isMultiSelect { + Image(.arrowDropDown) + .renderingMode(.template) + } + } + .padding(padding) + .foregroundStyle(foregroundColor) + .background(backgroundColor) + .clipShape(RoundedRectangle(cornerRadius: 8)) + .overlay { + if !isSelected { + RoundedRectangle(cornerRadius: 8) + .stroke(AssetColors.Outline.outline.swiftUIColor, lineWidth: 1) + } } } .animation(.easeInOut, value: isSelected) @@ -83,5 +100,5 @@ public struct SelectionChip: View { } #Preview { - SelectionChip(title: "Title", isSelected: false) {} + SelectionChip(title: "Title", isMultiSelect: false, isSelected: false) {} } diff --git a/app-ios/Sources/FavoriteFeature/FavoriteView.swift b/app-ios/Sources/FavoriteFeature/FavoriteView.swift index edbcef375..9d63e6e6a 100644 --- a/app-ios/Sources/FavoriteFeature/FavoriteView.swift +++ b/app-ios/Sources/FavoriteFeature/FavoriteView.swift @@ -1,5 +1,6 @@ import CommonComponents import ComposableArchitecture +import Model import KMPClient import shared import SwiftUI @@ -84,7 +85,7 @@ extension DroidKaigi2024Day: Selectable { self } - public var title: String { + public var caseTitle: String { switch self { case .workday: String(localized: "9/11", bundle: .module) diff --git a/app-ios/Sources/Model/Selectable.swift b/app-ios/Sources/Model/Selectable.swift new file mode 100644 index 000000000..3d75302e0 --- /dev/null +++ b/app-ios/Sources/Model/Selectable.swift @@ -0,0 +1,3 @@ +public protocol Selectable: CaseIterable, Equatable, Identifiable, Hashable { + var caseTitle: String { get } +} diff --git a/app-ios/Sources/SearchFeature/Resources/Localizable.xcstrings b/app-ios/Sources/SearchFeature/Resources/Localizable.xcstrings new file mode 100644 index 000000000..b9d51e585 --- /dev/null +++ b/app-ios/Sources/SearchFeature/Resources/Localizable.xcstrings @@ -0,0 +1,15 @@ +{ + "sourceLanguage" : "en", + "strings" : { + "9/11" : { + + }, + "9/12" : { + + }, + "9/13" : { + + } + }, + "version" : "1.0" +} \ No newline at end of file diff --git a/app-ios/Sources/SearchFeature/Resources/Media.xcassets/Contents.json b/app-ios/Sources/SearchFeature/Resources/Media.xcassets/Contents.json new file mode 100644 index 000000000..73c00596a --- /dev/null +++ b/app-ios/Sources/SearchFeature/Resources/Media.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/app-ios/Sources/SearchFeature/Resources/Media.xcassets/arrow_drop_down.imageset/Contents.json b/app-ios/Sources/SearchFeature/Resources/Media.xcassets/arrow_drop_down.imageset/Contents.json new file mode 100644 index 000000000..4a00e2906 --- /dev/null +++ b/app-ios/Sources/SearchFeature/Resources/Media.xcassets/arrow_drop_down.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "arrow_drop_down.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "template" + } +} diff --git a/app-ios/Sources/SearchFeature/Resources/Media.xcassets/arrow_drop_down.imageset/arrow_drop_down.svg b/app-ios/Sources/SearchFeature/Resources/Media.xcassets/arrow_drop_down.imageset/arrow_drop_down.svg new file mode 100644 index 000000000..7b4743a93 --- /dev/null +++ b/app-ios/Sources/SearchFeature/Resources/Media.xcassets/arrow_drop_down.imageset/arrow_drop_down.svg @@ -0,0 +1,3 @@ + + + diff --git a/app-ios/Sources/SearchFeature/SearchReducer.swift b/app-ios/Sources/SearchFeature/SearchReducer.swift new file mode 100644 index 000000000..f263e6bf6 --- /dev/null +++ b/app-ios/Sources/SearchFeature/SearchReducer.swift @@ -0,0 +1,143 @@ +import ComposableArchitecture +import KMPClient +@preconcurrency import shared + +@Reducer +public struct SearchReducer { + @Dependency(\.timetableClient) var timetableData + + public init() { } + + @ObservableState + public struct State: Equatable { + public var filters: Filters? + public var timetable: Timetable? + + var selectedDay: DroidKaigi2024Day? { + filters?.days.first + } + + var selectedCategory: TimetableCategory? { + filters?.categories.first + } + + var selectedSessionType: TimetableSessionType? { + filters?.sessionTypes.first + } + + var selectedLanguage: Lang? { + filters?.languages.first + } + + public var timetableItems: [TimetableItemWithFavorite] { + timetable? + .filtered( + filters: filters ?? .init() + ) + .contents ?? [] + } + + public init(timetable: Timetable? = nil) { + self.timetable = timetable + } + } + + public enum Action { + case view(View) + case `internal`(Internal) + case destination(Destination) + + @CasePathable + public enum View { + case onAppear + case timetableItemTapped(TimetableItemWithFavorite) + case toggleFavoriteTapped(TimetableItemId) + case selectedDayChanged(DroidKaigi2024Day?) + case searchWordChanged(String) + } + + public enum Internal { + // TODO: Swift Concurrency + case timetableResponse(Result) + case toggleBookmarkResponse(Result) + } + + // Handled by root navigator + public enum Destination { + case timetableDetail(TimetableItemWithFavorite) + } + } + + public var body: some ReducerOf { + Reduce { state, action in + switch action { + case let .view(viewAction): + switch viewAction { + case .onAppear: + return .run { send in + do { + for try await timetable in try timetableData.streamTimetable() { + await send(.internal(.timetableResponse(.success(timetable)))) + } + } catch { + await send(.internal(.timetableResponse(.failure(error)))) + } + } + + case let .timetableItemTapped(timetableItemWithFavorite): + return .send( .destination(.timetableDetail(timetableItemWithFavorite))) + + case let .toggleFavoriteTapped(id): + return .run { send in + await send(.internal(.toggleBookmarkResponse(Result { + try await timetableData.toggleBookmark(id: id) + }))) + } + + case let .selectedDayChanged(day): +// state.selectedDay = day + return .none + + case let .searchWordChanged(searchWord): + state.filters = .init(searchWord: searchWord) + return .none + } + + case let .internal(internalAction): + switch internalAction { + case let .timetableResponse(.success(timetable)): + state.timetable = timetable + return .none + + case .timetableResponse(.failure): + return .none + + case .toggleBookmarkResponse: + return .none + } + + case .destination: + return .none + } + } + } +} + +private extension Filters { + convenience init( + days: [DroidKaigi2024Day] = [], + categories: [TimetableCategory] = [], + sessionTypes: [TimetableSessionType] = [], + languages: [Lang] = [], + searchWord: String = "" + ) { + self.init( + days: days, + categories: categories, + sessionTypes: sessionTypes, + languages: languages, + filterFavorite: false, + searchWord: searchWord + ) + } +} diff --git a/app-ios/Sources/SearchFeature/SearchView.swift b/app-ios/Sources/SearchFeature/SearchView.swift new file mode 100644 index 000000000..2e56daf16 --- /dev/null +++ b/app-ios/Sources/SearchFeature/SearchView.swift @@ -0,0 +1,152 @@ +import CommonComponents +import ComposableArchitecture +import KMPClient +import Model +import shared +import SwiftUI +import Theme + +public struct SearchView: View { + @Bindable private var store: StoreOf + + public init(store: StoreOf) { + self.store = store + } + + public var body: some View { + let timetableItems = store.timetableItems + VStack { + filters + Group { + if timetableItems.isEmpty { + } else { + ScrollView { + LazyVStack { + ForEach(store.timetableItems, id: \.timetableItem.id) { timetableItemWithFavorite in + let timetableItem = timetableItemWithFavorite.timetableItem + TimetableCard( + timetableItem: timetableItem, + isFavorite: timetableItemWithFavorite.isFavorited + ) { _ in + store.send(.view(.timetableItemTapped(timetableItemWithFavorite))) + } onTapFavorite: { _ in + store.send(.view(.toggleFavoriteTapped(timetableItem.id))) + } + } + } + .padding(.horizontal, 16) + } + } + } + } + .background(AssetColors.Surface.surface.swiftUIColor) + .searchable( + text: .init( + get: { + store.filters?.searchWord ?? "" + }, set: { + store.send(.view(.searchWordChanged($0))) + } + ), + placement: .navigationBarDrawer(displayMode: .always) + ) + .onAppear { + store.send(.view(.onAppear)) + } + } + + private var filters: some View { + ScrollView(.horizontal) { + HStack(spacing: 6) { + searchFilterChip( + selection: store.selectedDay, + defaultTitle: "開催日" + ) + searchFilterChip( + selection: store.selectedCategory, + defaultTitle: "カテゴリ" + ) + searchFilterChip( + selection: store.selectedSessionType, + defaultTitle: "セッション種別" + ) + searchFilterChip( + selection: store.selectedLanguage, + defaultTitle: "対合言語" + ) + } + .padding(.horizontal, 16) + .padding(.top, 8) + .padding(.bottom, 12) + } + } + + private func searchFilterChip(selection: T?, defaultTitle: String) -> some View { + SelectionChip( + title: selection?.caseTitle ?? defaultTitle, + isMultiSelect: true, + isSelected: selection != nil + ) { + // TODO: show menu + } + } +} + +extension DroidKaigi2024Day: Selectable { + public var id: Self { + self + } + + public var caseTitle: String { + switch self { + case .workday: + String(localized: "9/11", bundle: .module) + + case .conferenceDay1: + String(localized: "9/12", bundle: .module) + + case .conferenceDay2: + String(localized: "9/13", bundle: .module) + } + } +} + +extension TimetableCategory: Selectable { + public var caseTitle: String { + title.currentLangTitle + } + + static public var allCases: [TimetableCategory] { + // TODO: use correct + [] + } +} + +extension TimetableSessionType: Selectable { + public var id: Self { + self + } + + public var caseTitle: String { + label.currentLangTitle + } +} + +extension Lang: Selectable { + public var id: Self { + self + } + + public var caseTitle: String { + name + } +} + +#Preview { + SearchView( + store: .init( + initialState: .init(), + reducer: {} + ) + ) +} diff --git a/app-ios/Sources/TimetableFeature/TimetableListView.swift b/app-ios/Sources/TimetableFeature/TimetableListView.swift index 15103917b..a2b03e190 100644 --- a/app-ios/Sources/TimetableFeature/TimetableListView.swift +++ b/app-ios/Sources/TimetableFeature/TimetableListView.swift @@ -49,7 +49,7 @@ public struct TimetableView: View { ToolbarItem(placement:.topBarTrailing) { HStack { Button { - // TODO: Search? + store.send(.view(.searchTapped)) } label: { Group { Image(systemName:"magnifyingglass").foregroundStyle(AssetColors.Surface.onSurface.swiftUIColor) diff --git a/app-ios/Sources/TimetableFeature/TimetableReducer.swift b/app-ios/Sources/TimetableFeature/TimetableReducer.swift index 19b85bc24..9c48fc34c 100644 --- a/app-ios/Sources/TimetableFeature/TimetableReducer.swift +++ b/app-ios/Sources/TimetableFeature/TimetableReducer.swift @@ -23,6 +23,7 @@ public struct TimetableReducer { public enum View { case selectDay(DayTab) case timetableItemTapped + case searchTapped } } @@ -32,7 +33,7 @@ public struct TimetableReducer { case .onAppear: state.timetableItems = sampleData.workdayResults return .none - case .view(.timetableItemTapped): + case .view(.timetableItemTapped), .view(.searchTapped): return .none case .view(.selectDay(let dayTab)): //TODO: Replace with real data From aae9dffbc204e34891f02bf02c1f1224de1d694b Mon Sep 17 00:00:00 2001 From: ryoya ito Date: Fri, 9 Aug 2024 03:27:44 +0900 Subject: [PATCH 02/38] add search view, logic --- .../Resources/Localizable.xcstrings | 15 ++++ .../ic_check.imageset/Contents.json | 16 ++++ .../ic_check.imageset/check.svg | 3 + .../search_empty.imageset/Contents.json | 23 +++++ .../search_empty.imageset/search_empty.png | Bin 0 -> 11758 bytes .../search_empty.imageset/search_empty@2x.png | Bin 0 -> 30258 bytes .../search_empty.imageset/search_empty@3x.png | Bin 0 -> 53748 bytes .../Sources/SearchFeature/SearchReducer.swift | 58 +++++++++++-- .../Sources/SearchFeature/SearchView.swift | 80 +++++++++++++++--- 9 files changed, 175 insertions(+), 20 deletions(-) create mode 100644 app-ios/Sources/SearchFeature/Resources/Media.xcassets/ic_check.imageset/Contents.json create mode 100644 app-ios/Sources/SearchFeature/Resources/Media.xcassets/ic_check.imageset/check.svg create mode 100644 app-ios/Sources/SearchFeature/Resources/Media.xcassets/search_empty.imageset/Contents.json create mode 100644 app-ios/Sources/SearchFeature/Resources/Media.xcassets/search_empty.imageset/search_empty.png create mode 100644 app-ios/Sources/SearchFeature/Resources/Media.xcassets/search_empty.imageset/search_empty@2x.png create mode 100644 app-ios/Sources/SearchFeature/Resources/Media.xcassets/search_empty.imageset/search_empty@3x.png diff --git a/app-ios/Sources/SearchFeature/Resources/Localizable.xcstrings b/app-ios/Sources/SearchFeature/Resources/Localizable.xcstrings index b9d51e585..afb38d571 100644 --- a/app-ios/Sources/SearchFeature/Resources/Localizable.xcstrings +++ b/app-ios/Sources/SearchFeature/Resources/Localizable.xcstrings @@ -1,6 +1,9 @@ { "sourceLanguage" : "en", "strings" : { + "「%@」と一致する検索結果がありません" : { + + }, "9/11" : { }, @@ -9,6 +12,18 @@ }, "9/13" : { + }, + "カテゴリ" : { + + }, + "セッション種別" : { + + }, + "対合言語" : { + + }, + "開催日" : { + } }, "version" : "1.0" diff --git a/app-ios/Sources/SearchFeature/Resources/Media.xcassets/ic_check.imageset/Contents.json b/app-ios/Sources/SearchFeature/Resources/Media.xcassets/ic_check.imageset/Contents.json new file mode 100644 index 000000000..14f9a4074 --- /dev/null +++ b/app-ios/Sources/SearchFeature/Resources/Media.xcassets/ic_check.imageset/Contents.json @@ -0,0 +1,16 @@ +{ + "images" : [ + { + "filename" : "check.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true, + "template-rendering-intent" : "template" + } +} diff --git a/app-ios/Sources/SearchFeature/Resources/Media.xcassets/ic_check.imageset/check.svg b/app-ios/Sources/SearchFeature/Resources/Media.xcassets/ic_check.imageset/check.svg new file mode 100644 index 000000000..6898dd93f --- /dev/null +++ b/app-ios/Sources/SearchFeature/Resources/Media.xcassets/ic_check.imageset/check.svg @@ -0,0 +1,3 @@ + + + diff --git a/app-ios/Sources/SearchFeature/Resources/Media.xcassets/search_empty.imageset/Contents.json b/app-ios/Sources/SearchFeature/Resources/Media.xcassets/search_empty.imageset/Contents.json new file mode 100644 index 000000000..5c52c0e1a --- /dev/null +++ b/app-ios/Sources/SearchFeature/Resources/Media.xcassets/search_empty.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "search_empty.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "search_empty@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "search_empty@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/app-ios/Sources/SearchFeature/Resources/Media.xcassets/search_empty.imageset/search_empty.png b/app-ios/Sources/SearchFeature/Resources/Media.xcassets/search_empty.imageset/search_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..7c5d65c691445f5c40ef8c19d5ba826bc7a30cd4 GIT binary patch literal 11758 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 LDpIu)W`O?zjjJyF literal 0 HcmV?d00001 diff --git a/app-ios/Sources/SearchFeature/Resources/Media.xcassets/search_empty.imageset/search_empty@2x.png b/app-ios/Sources/SearchFeature/Resources/Media.xcassets/search_empty.imageset/search_empty@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..955a2849444f41d64b3ccbb873b3215d294ffa41 GIT binary patch literal 30258 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 bQQgh5{D=782 literal 0 HcmV?d00001 diff --git a/app-ios/Sources/SearchFeature/SearchReducer.swift b/app-ios/Sources/SearchFeature/SearchReducer.swift index f263e6bf6..29dc6b318 100644 --- a/app-ios/Sources/SearchFeature/SearchReducer.swift +++ b/app-ios/Sources/SearchFeature/SearchReducer.swift @@ -10,29 +10,29 @@ public struct SearchReducer { @ObservableState public struct State: Equatable { - public var filters: Filters? + public var filters: Filters = .init() public var timetable: Timetable? var selectedDay: DroidKaigi2024Day? { - filters?.days.first + filters.days.first } var selectedCategory: TimetableCategory? { - filters?.categories.first + filters.categories.first } var selectedSessionType: TimetableSessionType? { - filters?.sessionTypes.first + filters.sessionTypes.first } var selectedLanguage: Lang? { - filters?.languages.first + filters.languages.first } public var timetableItems: [TimetableItemWithFavorite] { timetable? .filtered( - filters: filters ?? .init() + filters: filters ) .contents ?? [] } @@ -53,6 +53,9 @@ public struct SearchReducer { case timetableItemTapped(TimetableItemWithFavorite) case toggleFavoriteTapped(TimetableItemId) case selectedDayChanged(DroidKaigi2024Day?) + case selectedCategoryChanged(TimetableCategory?) + case selectedSessionTypeChanged(TimetableSessionType?) + case selectedLanguageChanged(Lang?) case searchWordChanged(String) } @@ -95,11 +98,33 @@ public struct SearchReducer { } case let .selectedDayChanged(day): -// state.selectedDay = day + state.filters = state.filters.copyWith( + days: day.map { [$0] } ?? [] + ) + return .none + + case let .selectedCategoryChanged(category): + state.filters = state.filters.copyWith( + categories: category.map { [$0] } ?? [] + ) + return .none + + case let .selectedSessionTypeChanged(sessionType): + state.filters = state.filters.copyWith( + sessionTypes: sessionType.map { [$0] } ?? [] + ) + return .none + + case let .selectedLanguageChanged(language): + state.filters = state.filters.copyWith( + languages: language.map { [$0] } ?? [] + ) return .none case let .searchWordChanged(searchWord): - state.filters = .init(searchWord: searchWord) + state.filters = state.filters.copyWith( + searchWord: searchWord + ) return .none } @@ -120,6 +145,7 @@ public struct SearchReducer { return .none } } + ._printChanges() } } @@ -140,4 +166,20 @@ private extension Filters { searchWord: searchWord ) } + + func copyWith( + days: [DroidKaigi2024Day]? = nil, + categories: [TimetableCategory]? = nil, + sessionTypes: [TimetableSessionType]? = nil, + languages: [Lang]? = nil, + searchWord: String? = nil + ) -> Filters { + Filters( + days: days ?? self.days, + categories: categories ?? self.categories, + sessionTypes: sessionTypes ?? self.sessionTypes, + languages: languages ?? self.languages, + searchWord: searchWord ?? self.searchWord + ) + } } diff --git a/app-ios/Sources/SearchFeature/SearchView.swift b/app-ios/Sources/SearchFeature/SearchView.swift index 2e56daf16..29a7bb1ec 100644 --- a/app-ios/Sources/SearchFeature/SearchView.swift +++ b/app-ios/Sources/SearchFeature/SearchView.swift @@ -15,10 +15,12 @@ public struct SearchView: View { public var body: some View { let timetableItems = store.timetableItems + let _ = store.filters VStack { filters Group { if timetableItems.isEmpty { + empty } else { ScrollView { LazyVStack { @@ -43,36 +45,72 @@ public struct SearchView: View { .searchable( text: .init( get: { - store.filters?.searchWord ?? "" + store.filters.searchWord }, set: { store.send(.view(.searchWordChanged($0))) } ), placement: .navigationBarDrawer(displayMode: .always) ) + .foregroundStyle(AssetColors.Surface.onSurface.swiftUIColor) .onAppear { store.send(.view(.onAppear)) } } + @ViewBuilder + private var empty: some View { + let searchWord = store.filters.searchWord + + Group { + if !searchWord.isEmpty { + VStack(spacing: 32) { + Image(.searchEmpty) + .resizable() + .aspectRatio(contentMode: .fit) + .frame(width: 165) + + Text(String(localized: "「\(searchWord)」と一致する検索結果がありません", bundle: .module)) + .textStyle(.titleMedium) + .foregroundStyle(AssetColors.Surface.onSurface.swiftUIColor) + } + } else { + Color.clear + } + } + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .center) + } + private var filters: some View { ScrollView(.horizontal) { HStack(spacing: 6) { searchFilterChip( selection: store.selectedDay, - defaultTitle: "開催日" + defaultTitle: String(localized: "開催日", bundle: .module), + onSelect: { + store.send(.view(.selectedDayChanged($0))) + } ) searchFilterChip( selection: store.selectedCategory, - defaultTitle: "カテゴリ" + defaultTitle: String(localized: "カテゴリ", bundle: .module), + onSelect: { + store.send(.view(.selectedCategoryChanged($0))) + } ) searchFilterChip( selection: store.selectedSessionType, - defaultTitle: "セッション種別" + defaultTitle: String(localized: "セッション種別", bundle: .module), + onSelect: { + store.send(.view(.selectedSessionTypeChanged($0))) + } ) searchFilterChip( selection: store.selectedLanguage, - defaultTitle: "対合言語" + defaultTitle: String(localized: "対合言語", bundle: .module), + onSelect: { + store.send(.view(.selectedLanguageChanged($0))) + } ) } .padding(.horizontal, 16) @@ -81,13 +119,31 @@ public struct SearchView: View { } } - private func searchFilterChip(selection: T?, defaultTitle: String) -> some View { - SelectionChip( - title: selection?.caseTitle ?? defaultTitle, - isMultiSelect: true, - isSelected: selection != nil - ) { - // TODO: show menu + private func searchFilterChip( + selection: T?, + defaultTitle: String, + onSelect: @escaping (T) -> Void + ) -> some View where T.AllCases: RandomAccessCollection { + Menu { + ForEach(T.allCases, id: \.id) { menuSelection in + Button { + onSelect(menuSelection) + } label: { + HStack { + if menuSelection == selection { + Image(.icCheck) + } + Text(menuSelection.caseTitle) + } + } + } + + } label: { + SelectionChip( + title: selection?.caseTitle ?? defaultTitle, + isMultiSelect: true, + isSelected: selection != nil + ) {} } } } From 0d63103e23645d337a9023644d127d5cd62edf55 Mon Sep 17 00:00:00 2001 From: ryoya ito Date: Sat, 10 Aug 2024 01:35:12 +0900 Subject: [PATCH 03/38] specify preserves-vector-representation --- .../arrow_drop_down.imageset/Contents.json | 1 + .../arrow_drop_down.imageset/Contents.json | 15 --------------- .../arrow_drop_down.imageset/arrow_drop_down.svg | 3 --- 3 files changed, 1 insertion(+), 18 deletions(-) delete mode 100644 app-ios/Sources/SearchFeature/Resources/Media.xcassets/arrow_drop_down.imageset/Contents.json delete mode 100644 app-ios/Sources/SearchFeature/Resources/Media.xcassets/arrow_drop_down.imageset/arrow_drop_down.svg diff --git a/app-ios/Sources/CommonComponents/Resources/Media.xcassets/arrow_drop_down.imageset/Contents.json b/app-ios/Sources/CommonComponents/Resources/Media.xcassets/arrow_drop_down.imageset/Contents.json index 4a00e2906..6a3f969da 100644 --- a/app-ios/Sources/CommonComponents/Resources/Media.xcassets/arrow_drop_down.imageset/Contents.json +++ b/app-ios/Sources/CommonComponents/Resources/Media.xcassets/arrow_drop_down.imageset/Contents.json @@ -10,6 +10,7 @@ "version" : 1 }, "properties" : { + "preserves-vector-representation" : true, "template-rendering-intent" : "template" } } diff --git a/app-ios/Sources/SearchFeature/Resources/Media.xcassets/arrow_drop_down.imageset/Contents.json b/app-ios/Sources/SearchFeature/Resources/Media.xcassets/arrow_drop_down.imageset/Contents.json deleted file mode 100644 index 4a00e2906..000000000 --- a/app-ios/Sources/SearchFeature/Resources/Media.xcassets/arrow_drop_down.imageset/Contents.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "images" : [ - { - "filename" : "arrow_drop_down.svg", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - }, - "properties" : { - "template-rendering-intent" : "template" - } -} diff --git a/app-ios/Sources/SearchFeature/Resources/Media.xcassets/arrow_drop_down.imageset/arrow_drop_down.svg b/app-ios/Sources/SearchFeature/Resources/Media.xcassets/arrow_drop_down.imageset/arrow_drop_down.svg deleted file mode 100644 index 7b4743a93..000000000 --- a/app-ios/Sources/SearchFeature/Resources/Media.xcassets/arrow_drop_down.imageset/arrow_drop_down.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - From c2b13260fba851dabbb87c4a64854b51e709699a Mon Sep 17 00:00:00 2001 From: MrSmart00 Date: Sat, 10 Aug 2024 08:03:02 +0900 Subject: [PATCH 04/38] Add: reset state of destination --- app-ios/Sources/AboutFeature/AboutReducer.swift | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app-ios/Sources/AboutFeature/AboutReducer.swift b/app-ios/Sources/AboutFeature/AboutReducer.swift index 575a703a6..9c4b12f9a 100644 --- a/app-ios/Sources/AboutFeature/AboutReducer.swift +++ b/app-ios/Sources/AboutFeature/AboutReducer.swift @@ -58,6 +58,9 @@ public struct AboutReducer { return .none case .view: return .none + case .presentation(.dismiss): + state.destination = nil + return .none case .presentation: return .none } From e18f91ae397c118bc0ea75497ac311bf292f61cd Mon Sep 17 00:00:00 2001 From: takahirom Date: Sat, 10 Aug 2024 14:14:01 +0900 Subject: [PATCH 05/38] Add Step-by-Step Guide to contributing --- CONTRIBUTING.ja.md | 59 ++++++++++++++++++++++++++++++---- CONTRIBUTING.md | 79 ++++++++++++++++++++++++++++++++++++---------- 2 files changed, 115 insertions(+), 23 deletions(-) diff --git a/CONTRIBUTING.ja.md b/CONTRIBUTING.ja.md index a01dbd8c1..d40e16171 100644 --- a/CONTRIBUTING.ja.md +++ b/CONTRIBUTING.ja.md @@ -2,24 +2,61 @@ あなたのコントリビュートをお待ちしております! -## コントリビュート方法 +## ステップバイステップのコントリビュート方法 -### タスクの見つけ方 +### 1. ソースコードをダウンロードする -タスク管理にGitHub Issueを使っています。こちらでコントリビュートしたいIssueをお探しください。[`welcome contribute` または `easy`のラベルがついているIssue](https://github.com/DroidKaigi/conference-app-2024/issues?q=is%3Aopen+is%3Aissue+label%3A%22welcome+contribute%22%2Ceasy+no%3Aassignee)は、初めてのコントリビュートにおすすめです。 +まずリポジトリをローカルにダウンロードしてアプリを試してみてください。アプリの使い方や機能を理解するのに役立ちます。 +リポジトリの右上にある `Fork` ボタンをクリックしてください。これであなたのアカウントにリポジトリがコピーされます。 + +![image](https://github.com/user-attachments/assets/39aa034e-052f-4084-b864-a3214841752c) + +そのあと、以下のコマンドを実行してください。 + +```bash +git clone https://github.com/[あなたのアカウント]/conference-app-2024 +``` + +これでリポジトリがあなたのPCにダウンロードされます。 + +### 2. アプリを実行してみる + +Android Studioを開いて、"Open"からダウンロードしたリポジトリを開いてください。Android Studioは[こちら](https://developer.android.com/studio)からダウンロードできます。最新のバージョンを使ってください。 + +リポジトリを開くと、Syncが始まります。Gradleの同期が終わるまでお待ちください。 + +`app-android` モジュールをビルドして実行します。Android Studio上の実行ボタンをクリックしてください。 + +![image](https://github.com/user-attachments/assets/66f3f0c8-ee18-4961-9c3b-7a808cd2a3b4) + +### 3. タスクを見つける + +タスク管理にGitHub Issueを使っています。こちらでコントリビュートしたいIssueをお探しください。[`contributions welcome` または `easy`のラベルがついているIssue](https://github.com/DroidKaigi/conference-app-2024/issues?q=is%3Aissue+is%3Aopen+label%3A%22difficulty%3Aeasy+%F0%9F%8C%B1%22+label%3A%22contributions+welcome%22+)は、初めてのコントリビュートにおすすめです。 IssueがないPull Requestでも大丈夫です。その場合はPull Requestに理由、原因、解決策などの詳細をご記入ください。 -### コントリビュートの始め方 +### 4. コントリビュートの始める もし取り組みたいタスクを見つけたら、他の人と重複して作業しないようにするためIssueに ":raising_hand:" などのコメントをしてください。 なるべく早くいただいたコメントにリアクションしますが、Issueにコメントを書いたらタスクに着手していただいて構いません! -## 議論や提案の方法 +### 5. 開発する -Issueが望ましいですが、もし実装やリファクタリングのための具体的なアイデアなどがありましたらPull Requestも歓迎です。 +アプリのコードを変更し、開発しましょう! + +今年採用しているUIツールキットのJetpack Composeについて学びたい方は以下が参考になるので、確認してみてください。 +https://developer.android.com/courses/jetpack-compose/course + +コードフォーマットのコマンドは以下の通りです。Android Studioでこのドキュメントを開いて、左側の実行ボタンから実行できます。 -## Issueやコメント、レビューで使う言語 +```bash +./gradlew detekt --auto-correct +``` + +### 6. プルリクエストを作成する + +変更が完了したら、プルリクエストを作成してください。 +gitのコミットとプッシュを行い、GitHubのUI ( https://github.com/[あなたのアカウント]/conference-app-2024 )からプルリクエストを作成します。 私たちはIssue、コメント、レビューでは英語を使います。 @@ -29,6 +66,14 @@ Issueが望ましいですが、もし実装やリファクタリングのため 非英語圏のみなさまへ、DroidKaigiの運営メンバーもみな英語が得意というわけではありません。英語でのコミュニケーションを恐れず挑戦してみてください! :smile: +### 7. コードレビュー、マージ + +プルリクエストの作成が終わるとコードレビューが始まります。修正をお願いすることがあれば、差分にインラインコメントがつきますので適宜確認をしましょう。修正が完了したらマージされます。 👍 + +## 議論や提案の方法 + +Issueが望ましいですが、もし実装やリファクタリングのための具体的なアイデアなどがありましたらPull Requestも歓迎です。 + ## NOTE 分からないことがありましたら何でも聞いてください! diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2726b64f4..366e48b41 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,34 +1,81 @@ # Contributing -We welcome your contribution! +We welcome your contributions! -## How to contribute +## Step-by-Step Guide to Contributing -### Finding tasks +### 1. Download the Source Code -We use GitHub issues to manage the tasks. Please check here for issues you would like to contribute to. [`welcome contribute` or `easy` are good labels](https://github.com/DroidKaigi/conference-app-2024/issues?q=is%3Aopen+is%3Aissue+label%3A%22welcome+contribute%22%2Ceasy+no%3Aassignee) to check for the first contribution. +First, download the repository locally and try out the app. This will help you understand how the app works and its features. +Click the `Fork` button at the top right of the repository. This will create a copy of the repository in your account. -Of course, we also accept Pull Requests which don't have an issue. However, in this case please make sure you explain the motivation, cause, solution, etc in the PR description. +![image](https://github.com/user-attachments/assets/39aa034e-052f-4084-b864-a3214841752c) -### Start contributing +Then, run the following command: -If you find a task you want to work on, please comment on the issue to prevent conflicts. We'll reply as soon as possible, but you don't need to wait for our reaction, you can start working on the task once you have commented on the issue! +```bash +git clone https://github.com/[your-account]/conference-app-2024 +``` -## How to submit a proposal or start a discussion +This will download the repository to your PC. -Issues are preferable, but PRs are also welcome if you have a concrete idea to implement/refactor something. +### 2. Run the App -## Languages +Open Android Studio and select "Open" to open the downloaded repository. You can download Android Studio from [here](https://developer.android.com/studio). Please use the latest version. -We use English for issues, comments, and reviews. +When you open the repository, the sync will start. Please wait for the Gradle sync to complete. -English is preferable however; it would be okay in Japanese if you do not want to use English for some reasons. -Unfortunately, only English and Japanese are acceptable for us because of our language ability. Thank you for your understanding. JFYI, We at DroidKaigi Committee consists of Japanese speakers and English speakers. +Build and run the `app-android` module. Click the run button in Android Studio. -For non-English speakers, some of DroidKaigi Committee members are not fluent English speakers so don't be afraid of communicating in English. :) +![image](https://github.com/user-attachments/assets/66f3f0c8-ee18-4961-9c3b-7a808cd2a3b4) + +### 3. Find a Task + +We use GitHub Issues for task management. Please look for an Issue you'd like to contribute to. [Issues labeled `contributions welcome` or `easy`](https://github.com/DroidKaigi/conference-app-2024/issues?q=is%3Aissue+is%3Aopen+label%3A%22difficulty%3Aeasy+%F0%9F%8C%B1%22+label%3A%22contributions+welcome%22+) are recommended for first-time contributors. + +Pull Requests without an Issue are also welcome. In that case, please include details such as the reason, cause, and solution in your Pull Request. + +### 4. Start Contributing + +If you've found a task you'd like to work on, please comment on the Issue with ":raising_hand:" or similar to avoid duplicate work. +We'll try to respond to your comment as soon as possible, but feel free to start working on the task after commenting on the Issue! + +### 5. Develop + +Make changes to the app's code and start developing! + +If you want to learn about Jetpack Compose, the UI toolkit we're using this year, you might find the following helpful: +https://developer.android.com/courses/jetpack-compose/course + +The command for code formatting is as follows. You can run it by opening this document in Android Studio and clicking the run button on the left: + +```bash +./gradlew detekt --auto-correct +``` + +### 6. Create a Pull Request + +Once you've completed your changes, please create a pull request. +Commit and push your git changes, then create a pull request from the GitHub UI (https://github.com/[your-account]/conference-app-2024). + +We use English for Issues, comments, and reviews. + +If possible, please use English, but Japanese is also fine. +Please note that we only support English and Japanese in this repository. +※For your reference, the DroidKaigi organizing team consists of both Japanese and English speakers. + +To non-native English speakers, not all DroidKaigi organizers are proficient in English either. Don't be afraid to try communicating in English! :smile: + +### 7. Code Review and Merge + +Once you've created your pull request, the code review process will begin. If we need to request changes, we'll add inline comments to the diff, so please check them as needed. Once the changes are complete, your pull request will be merged. 👍 + +## How to Discuss and Propose + +While Issues are preferred, if you have specific ideas for implementation or refactoring, Pull Requests are also welcome. ## NOTE -Please don't hesitate to ask questions. +If you have any questions, please don't hesitate to ask! -We would like you to enjoy contributions, learn many things, share your knowledge and enjoy DroidKaigi. Thanks. +Enjoy contributing, learn a lot, share knowledge, and have fun at DroidKaigi! From a1054935e6f70e1331509f86f8426723163ef9f7 Mon Sep 17 00:00:00 2001 From: takahirom Date: Sat, 10 Aug 2024 14:19:08 +0900 Subject: [PATCH 06/38] Add explanation of step by step guide in README --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ecfd46673..818e9c3bd 100644 --- a/README.md +++ b/README.md @@ -23,9 +23,13 @@ You can try the app on your device by clicking the button below. ## Contributing -We always welcome any and all contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for more information. +We always welcome contributions! -For Japanese speakers, please see [CONTRIBUTING.ja.md](CONTRIBUTING.ja.md). +For a detailed step-by-step guide on how to contribute, please see [CONTRIBUTING.md](CONTRIBUTING.md). This guide will walk you through the process from setting up your environment to submitting your pull request. + +For Japanese speakers, a Japanese version of the contribution guide is available at [CONTRIBUTING.ja.md](CONTRIBUTING.ja.md). + +コントリビューションの詳細な手順については、[CONTRIBUTING.ja.md](CONTRIBUTING.ja.md)をご覧ください。初めての方でも分かりやすいステップバイステップのガイドを用意しています。 ## Requirements Stable Android Studio Koala or higher. You can download it from [this page](https://developer.android.com/studio). From 7ab1ebd170d9d95ea49f58ac4d7ffbfa3575d44c Mon Sep 17 00:00:00 2001 From: takahirom Date: Sat, 10 Aug 2024 14:23:19 +0900 Subject: [PATCH 07/38] Fix some wordings --- CONTRIBUTING.ja.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.ja.md b/CONTRIBUTING.ja.md index d40e16171..bea4a226a 100644 --- a/CONTRIBUTING.ja.md +++ b/CONTRIBUTING.ja.md @@ -6,7 +6,7 @@ ### 1. ソースコードをダウンロードする -まずリポジトリをローカルにダウンロードしてアプリを試してみてください。アプリの使い方や機能を理解するのに役立ちます。 +まずリポジトリをローカルにダウンロードして実行することで、アプリを試してみましょう。アプリの使い方や機能を理解するのに役立ちます。 リポジトリの右上にある `Fork` ボタンをクリックしてください。これであなたのアカウントにリポジトリがコピーされます。 ![image](https://github.com/user-attachments/assets/39aa034e-052f-4084-b864-a3214841752c) From 35535827c3b3df7d61f2c660a9574dc15ca1ab80 Mon Sep 17 00:00:00 2001 From: takahirom Date: Sat, 10 Aug 2024 15:36:46 +0900 Subject: [PATCH 08/38] Apply app icon --- .gitignore | 1 + .../drawable-v24/ic_launcher_background.xml | 21 ------------------ .../res/drawable/ic_launcher_foreground.xml | 17 -------------- .../res/mipmap-anydpi-v26/ic_launcher.xml | 6 ----- .../mipmap-anydpi-v26/ic_launcher_round.xml | 6 ----- .../src/main/res/mipmap-hdpi/ic_launcher.png | 0 .../src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 1842 -> 0 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 2074 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 3554 -> 0 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | 0 .../src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 1402 -> 0 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 1495 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 2316 -> 0 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | 0 .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 2444 -> 0 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 2732 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 4828 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | 0 .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 3366 -> 0 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 4054 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 7236 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | 0 .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 4366 -> 0 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 5285 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 9782 -> 0 bytes 25 files changed, 1 insertion(+), 50 deletions(-) delete mode 100644 app-android/src/main/res/drawable-v24/ic_launcher_background.xml delete mode 100644 app-android/src/main/res/drawable/ic_launcher_foreground.xml delete mode 100644 app-android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml delete mode 100644 app-android/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 app-android/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100644 app-android/src/main/res/mipmap-hdpi/ic_launcher.webp create mode 100644 app-android/src/main/res/mipmap-hdpi/ic_launcher_round.png delete mode 100644 app-android/src/main/res/mipmap-hdpi/ic_launcher_round.webp create mode 100644 app-android/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100644 app-android/src/main/res/mipmap-mdpi/ic_launcher.webp create mode 100644 app-android/src/main/res/mipmap-mdpi/ic_launcher_round.png delete mode 100644 app-android/src/main/res/mipmap-mdpi/ic_launcher_round.webp create mode 100644 app-android/src/main/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 app-android/src/main/res/mipmap-xhdpi/ic_launcher.webp create mode 100644 app-android/src/main/res/mipmap-xhdpi/ic_launcher_round.png delete mode 100644 app-android/src/main/res/mipmap-xhdpi/ic_launcher_round.webp create mode 100644 app-android/src/main/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 app-android/src/main/res/mipmap-xxhdpi/ic_launcher.webp create mode 100644 app-android/src/main/res/mipmap-xxhdpi/ic_launcher_round.png delete mode 100644 app-android/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp create mode 100644 app-android/src/main/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 app-android/src/main/res/mipmap-xxxhdpi/ic_launcher.webp create mode 100644 app-android/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png delete mode 100644 app-android/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp diff --git a/.gitignore b/.gitignore index 386a97305..feef8e6b5 100644 --- a/.gitignore +++ b/.gitignore @@ -69,6 +69,7 @@ app-ios/fastlane/report.xml app-android/src/prod/google-services.json keystore.properties droidkaigi2023.keystore +*.keystore # Kotlin Gradle Plugin cache .kotlin diff --git a/app-android/src/main/res/drawable-v24/ic_launcher_background.xml b/app-android/src/main/res/drawable-v24/ic_launcher_background.xml deleted file mode 100644 index 1b14b1610..000000000 --- a/app-android/src/main/res/drawable-v24/ic_launcher_background.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - diff --git a/app-android/src/main/res/drawable/ic_launcher_foreground.xml b/app-android/src/main/res/drawable/ic_launcher_foreground.xml deleted file mode 100644 index 72b543fb7..000000000 --- a/app-android/src/main/res/drawable/ic_launcher_foreground.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - diff --git a/app-android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app-android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml deleted file mode 100644 index 531c0be71..000000000 --- a/app-android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/app-android/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app-android/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml deleted file mode 100644 index 531c0be71..000000000 --- a/app-android/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/app-android/src/main/res/mipmap-hdpi/ic_launcher.png b/app-android/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 000000000..e69de29bb diff --git a/app-android/src/main/res/mipmap-hdpi/ic_launcher.webp b/app-android/src/main/res/mipmap-hdpi/ic_launcher.webp deleted file mode 100644 index 7261fa01bbe91ebe8f77277a4474ca8d8fdad224..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1842 zcmV-22hI3WNk&F02LJ$9MM6+kP&iB;2LJ#sN5ByfO)zZRHWK`_y*p?Bh3nfPqW=>h zbTf^dGUNn83jb^u0Jw4?+~``kjU?Hr+D4n?9}%X8E27YR83fz5jU+MN=guWu|5aT9 z-(aH+nM9H#DW#l>|NP^XP;k-3!h`)!u<*|ZNs=J3n9MLF)tVehM6A%WI@YPqD~|lI zLs%{01eyZa(THa+>_`X^F*fS^U7Lc65O9It0RY$bQ(&N^ZIdEf`6BCRAG`PBI&_Db zvk&&b!wMYctb>OQFoT&hb9eXSQW+0jl@Zb1=q!_tB-yHMCwrZH?q_C``CH#&lH|$L zG&G3!Z4E;v!vq*jW@hHc=Po+7ZL7AbKKH>LLW{`UDnLvfor+Khch|4kvwQZ0Tidp3 zWuAw-(}WW`#D5T3AJ7VIK<4g}IW$4&c6rx7xB6Cmn;?n?an*?Q5<9&4If}q~k@aUwOtHu=7Hegjy#>Rp|;?#OwvmT_E*T zGmJ@D62JuFOk1^z6jg?|f>~xXr(cz%QB7tGgp)SC8Dgr{)rbmA4?OS&DQk64c#EPz zsdWWq=eO(Ze`H{3JD1!X zu6QU`_fv||HI6>3-Pg$flGl+T($?6#8k5VUt(Z>-5jfr$COSYhi=*F;d;77wetTyc z>DW2Pb&oE#Pi+}TIxq9fvmCxxIx$L~$;GV3F4&FW2(^0#-H=DEzz~ zriHf9Vd9rS(B8=FTY!l)bdhpWH_#DS?ujy3$*`uREB8k3J#K1_2=7{y1cCw-W3^JW zg7uDDXA4wb?2ruZZjh7|_9l^RN`o#0LKO=_L?Agrw{ZkTSW>A&TgkMZ2M6tLu*+KKk|hw?d!A)mhEmkE&3kh6ch& z;)soK$-vQn|N8C6_jFo?KJ^4vK}}2xY69GO%JYsuGg=pA6_=q~)b4NJ^V< z?BpO_YkNe;@SL6IcAy(}?pm+`hJB``DJT zmVTMTj#js&SV82K@j-)k7{1bkN-XBZPv8+jcW=(flCD{Nn$x~+)GQb?olr%6@u?ZirZQJYHCbe7D=l0`l{KuSdp9%g=7STDc|$ zCruLbfBzuyVLU!IyRiiCPY}*u881-x5}nZd-1^VTb$0tE*809jIYdh#017Z27Z?I! zVkCoh30X>UVEO*Qf#*l(=eOYHMQS{kUMB9Q;Z0hh1!^JYUO<*sZq?GWwYF}rd_8#;4dTxqSpCW;J?#V0lg`YApigX diff --git a/app-android/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app-android/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..ecf10f2c902992e144de2b0340ce84c9331cb6bb GIT binary patch literal 2074 zcmV+#2<7*QP)ATz4m;byI$#PyY{ZVURyrNcD>uJ>wWk9 zp69ve_xw&k0r5(bcLE+M0@Wu1Ppg2WLTKTi2~efPbLqHD--80cUp-OaCjCy2BKP@G zKm^zfi*gU{Hu^&wXqUzCB6s}s(GPjx@`vQ>GHk>afs#b=!Cw3S{tF%J7RaD8X zU2AGm4zY6fJLyR0kJ1RV_(m?)<7rxfie+mcRL$1*qay>j-**+^zAMO;`sVqVy=V?< z7B*=6%J>u}hek2f-H*wEQCLTiBM7gAEC;6@O+GD_?{vTdEKJR7JK(CHoAT$8;Q>q> z-;b%@^Dqkwv*`6Ts9Qci?KyYOTtnbUw`HN|x_6TmbtD~oKrZ)K70cJ6_U(?W&i(h~ zVN9GljBIIqW347mHcSrO!|xv+wJK6D0%c*M6-`SNqh2p3gy!#8>K{kVTOUD;4XI49 zrSX3z+HtB!dV31o$IB6+GSv8;VP z7Hn7rtFRSW#7oIzo3WE%LFyJb0E@)_%YemMwdWN)@zOJJil{!>prHxG&KdU4KBQ#w z=O5!yt!nP0c;So9sG%_KFg|0LX#!E?^1%T(l8qlbpuJ{s*m9~GYEcXr!z?z$3O~G9 z91izPv5CVN!^|Dq_o0A{Q?fXDPQR0>S=4~%NE~-{1&WLo9%gQR+NLn5lM@)@O#0$! zZU0Gf#7nld7Na-}MKh1&ri87f5CX9{!7q0}x!terFWC4jmb}x7;zsqkRW0|iy@!E( z&ew5q%x1?P86>q(o7@37gU8$zoN*z>)JMB$9fC1hUr$8Ss3W`zbvSDix6g-3JMN6abE9 z-uFJACepRNCsE8$m7_-tBP`SFAPNABRJUV4DxZH@+vl0ko=;8`ZTRQ8dNDSOXuG3M zgom3k-7|Ed50`cxMQAXWdG-7wXiFSoi6VVFfdZ2_CpH!sDmszqCjJm_W3w7c7aSl_ zB+j&pNu&r|e%|VdqCU+0Z~%Sc@I~#lA<|f25Kf{EuUK1NJd<`}m@z#4Gu8V`eBTgh zr1x*+f-*4$s~E$Ji3=1PW|pE^I9AdyOXA#EB7AX|c7Cr#IjdN=LP1Vkd-kCHB^V63 zy!BPEFh>>{yoJh@zWAMcHl!0L5sq+d@Z3CQhS0z$b?iwZaEDVn`thnvol z_?*$NcE=|UvxP-spH$yGZ^o)5pL6-+A2dH^1iL*7=CstX0 zxQT%p9Jx+Wu2YY4f&}M%6Z@LaB2czQ<-m31NPgQ}$v3&7v{A`&ivt$L!gMN7_RW+T zo5i;NUtV5CCcZ_rId|d$dz9+wQ7#$hQJ94Hw;4U+`SK{1@l-t9L`lScfs)`_6J1=3 zs5h{47+H=&KQQCJw@M}}$Hj9$Tf97BbtgM#j1poj507*qoM6N<$ Ef})Vl9smFU literal 0 HcmV?d00001 diff --git a/app-android/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app-android/src/main/res/mipmap-hdpi/ic_launcher_round.webp deleted file mode 100644 index 85f26b6745d37a0aa54bd07efb32db18d10e01a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3554 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 literal 0 HcmV?d00001 diff --git a/app-android/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/app-android/src/main/res/mipmap-mdpi/ic_launcher_round.webp deleted file mode 100644 index 4bc15b2033f9926784c9db40ae7f092b024bb7c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2316 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 diff --git a/app-android/src/main/res/mipmap-xhdpi/ic_launcher.png b/app-android/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 000000000..e69de29bb diff --git a/app-android/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app-android/src/main/res/mipmap-xhdpi/ic_launcher.webp deleted file mode 100644 index e9d6347b29cb8ac174c018ae7bfff3a891673580..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2444 zcmV;733K*RNk&G52><|BMM6+kP&iC?2><{uU%(d-O(<&H22!*BI{t_+3K9LE0G-JJ zdh1{0QkK*OmwJ({Olt!h;4Pr*!fhl;ij;8%Y^-$Tzft^uB)!C_9@xM(k|ZaMFx7^D z%0D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 KAb~?k1poj)S*{BJ diff --git a/app-android/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app-android/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..f8fda906d68faf67d587b4cdc1f793eb4e0c89e2 GIT binary patch literal 2732 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 CEFPx- diff --git a/app-android/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app-android/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..e69de29bb diff --git a/app-android/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/app-android/src/main/res/mipmap-xxhdpi/ic_launcher.webp deleted file mode 100644 index 467aa00891218b15e24ecffda57095ec2dd5630a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3366 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 diff --git a/app-android/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app-android/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..77a83f9864456cf6dab94e9e28b25c6b9b6f03b1 GIT binary patch literal 4054 zcmV;{4=M18P)+Uj_)8{#7W_Nbx%ql}u3J|W zogN=Itnd0SV>OuK~aditRsh5NCLV9WqLMOJBR zkgQT51QgSHlN3j6M)0joohXA8zirRz!zuV2Ukj-Hgi}F^KA^3B7LqRoB!yD}xwhB_ zKe{$w35a8y46@tkVLv1`D1&~Bk)rSk5v_M~9{E97#XgBWee^qeR8bQ!(xZFe13b4t zmb+4(gHMWn!9mf<8m;x(8hK`cxR!HCz3dnC@EL?IB^QF~2W#Ys1>#sIi|h_Vx+{n9 z&Ke1~KoM=}M*5%gXPDh@i9@h88X#*lLDpzL1R_*G6ew>aledK)c0l4Z9rU|h7gZB# zK0W#h1R=zQNtY!S?*7k0>>d#=&2<4;wVm8?|_e->~FSAuBk2R5t9GFbK=`V5TzhR!z1U5O|?j?7OW z(m5CTbEn~F;$0n>otT69OL~x4aVpUu_CU>Flz-<Oa%)Yvm%T87 zbH`5NfB!s;(}(_xu@h(DA$4bEbqOe{E#-}W1Mq;(Z+;hD>+Y{Anrh@mPhf&Xbm5if z;RRRSafA8Qz2X`)0}JWci~GD3($1Vde9ufb%_tzRtWPv?1?E4nnJmr{v;qt1%*2Iu|a$4UgT`v~bEf_TpZQys!^mP)|TTV+>@dD)&n?2!zG6;77kkY+>sk0=vJ? zHS`~8{5&$pkHAf??Y{{({`5QO`eFi3!9rwFezt!Y9-vW$dV8%KY6^(=twV6Tq9`5? zj-6!IvRh1Zn;CfrZm{IO+p%=u8;Hz`!D;3#?(s@Q8U@sQD4^D>-B43N)Fa`PPJ=+^ z_CI81S8foeKi3Trv3M5WyBco7BFbHyz?mbTKrl6}P*nkWWqsz|y9sXMw1}2Jwhq_c zeG^2mVA)mp`0wu^pUFZXHLXxp0V(PixU4O7Cn;N>R)gkxa6&{})A`CHci>9Ov_!$~ zk;TJlzF?|aA=^r{wNg!d+CF>5?GVKrDh+hqbw8Sc#dGs7zb8~YMXvnTa(F}($TX3qA`GtcFR2~1VmNm0WX$oIGwgPLOmklEXWVyVOYo>phnHp0j6VP zfehF7QTv$=>a|6xSV0!gSA8NLZ!wRSn8q{#6#}Is+KlYSBRKu!L&%SvuXv67SuCDd z*K9~g8)a^6nt&*HPNK~ifAdx9m2D#NR4%9B*2E1|=aJ%>g1YnrrO(S;SbMpzvDaV1 zxfh?b6%SXJum9m%NT!pwj@6oENloC%BnYw6%dV(r1cRl;3 zCo#6Cayz(}t%)FFlo%URK%BmZc?2(uCrz2wgv~l>uUiwrgbK}tILH)G2AR-`CqH_^ ztnqNIryReuCW1&DadU@`DIg`J*%yn4Ef24YE=P)|H4NlUqZ6~9DDEr)^pINODYhnL zfv|asnkg>e4V4S4B_3`~T>s!&DW29TSRgAH3eBXAV!&)C9&Sy@>at^~tesd4u|5Og zf$KbW;*r&5=b=Dai;yqV5E8gCYPY3XipMqjB1(v6{n%BQIp&e#aR-C66B-M|)~DQc zajL%fK5+~6+YQprBB}!!ix2|F-*~O!8e1M&=W!FG+qL7KM8au%W_bGX4{Uv|lD#cg zp#n5pAVovKxinIFc8I9mqU{X1Ff|kwC}-2>a%#Maq&AT-OkB-;d~Ditt}@H+x(Fx> zLkP&14Uh6@-&9)?3IUZ9pDX)Zq6npcB;p9AfHLPNAQ3|-1XR8y+2awpZ3WkXbOfAe z*-$E;xjcUIEF^BD=%KJcv8xwXTsyhXlc}a{2Y2Js2sjuj42=kkx*HnBJ9qr zv&Sk$bne(^B%R`pZ!IOs0nh2Pq{EFkPb&Z z$d00j?2eL>B5E8n{wbX3TrwjuzY8ITMWm95?2eRT5$${AdGpw9$;?pkc{1dQOkK2m zTA1N#_5266V9uJ#)2w+75nG~@`(+n@W~PkIq=0hBrO+mH^*?NTIuDEJ;1j!WeCGj3 zs#B_!sRdMYxOKO;u|t7g4$UVk!hwh_Hos=j{e#ih|G3usa5!6hE~- zyxI4r=sEr9VENTb3q)>=OqFmeR6Za<6!nOwh+nGKxr?6cyiM6%wA~k$MQjj)VGCr~ zoLTB7jfkg+*CHAx>vMKQe8rrC=dE_v?Kc)$fl>;B8GrLNh@u(s6!Eh4G3v=yC1tQY zcrH?PXDYd|tq{z_p}i16E8;1_RcnrkIKUPOmli~$z}Q~xwP>{$^661Mq9&5`P=g?N zSf(;(F5-*647YGXJf(a_y|Y+X2h?R(!fi%g*h_!k2t>lEdsZK=YD}WF-W*jE$LZSu z1d=^|1RblAX5-UooEA@!&kyL}Uv=U}_vSM4E?X~_;*x+iuraCjdQAa&VTF*rgiG)4 z#q1SdcT7Zl0L!_*{?--o6ydGZZi$G+bMT3s$Y*j8$xPOVsVN}y1`n(df8Z=4UI1pd zlCTljEuMMy=g1s+3vRE_+%=CR7B=)g7U9L$U#fb%x7+ZL^CkDKMn_L`13%g7y!Y(C%>t%3D1%fu z+%V%^s0VGC7De`LczCWD3u)H!+cB$mCAqdP+j~sQHGB{gZ@y|yuFunRui<&sJ-79u zn_OG1(Zk#(Id|+7M&J1eAMN@NG8eoZ(?{0lx@xI=DfJ16h-tlB3}7>S0J}DhkN7J> zV&WoXjw;!C58EO25bv6ej)n70_f{N5%x#G=DoT!@@XtgwF5yt@v!%{^>nEx${U8j3 z$tATgdtTSodv`-4?x>(Nqfe9s8){iJbSCJGSy(BY)<@OuZj#b%kc19)U3vZehV}?H zvb+z=1rOcqv!xVE$}4}-^B$n4A; z3IX#`*QW5gDj*Xx#n0`Q>xe`{%~9@eIh1Wx!~G*K=^w!V5F=#M@cj%|m_>-E@OOzL zrY-r60c9g3u2JZ1Jqkg%5=2)cpFaIEb@9)TYPkU`gKKBugHIlBr7_wJLM_lFGA?oy zvnk4bEdeg89HACylJu!GrTR}r)dUMT2}#qKE(^I0(1$%4u;h&eDn(kOCQ)?W zkw6G&5-VfdLXXyjFl)1dW1f)fK|QBgf+e65qT12{N@Ldt-Mz83F{qYf4tOs)1t%y3 zRzQi7P6w@*(MM1f}xGilSN($cM)2S0altD%hvsmo-KZ!F5l1iUJQvd(}07*qo IM6N<$f{aOa2><{9 literal 0 HcmV?d00001 diff --git a/app-android/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/app-android/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp deleted file mode 100644 index b1d0b39e09219de2a6b0910ec8f6aee77dbe1d22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7236 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%0AMskIiOY1QeOagaznbY1N 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 r9hQ+Rc@xG}!yY=*Rj4`}dT{&!jud)`biEIy; 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 QJ5qM3fsGh8n*8^=0Wti@u>b%7 From 64f4a120f6e313225f252b2bb79d5cf89e2119b9 Mon Sep 17 00:00:00 2001 From: takahirom Date: Sat, 10 Aug 2024 16:37:13 +0900 Subject: [PATCH 09/38] Adjust for closed release --- app-android/build.gradle.kts | 5 ++--- app-android/release.sh | 2 +- .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 1457 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1051 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 1889 bytes .../src/main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 2818 bytes .../src/main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 3654 bytes 7 files changed, 3 insertions(+), 4 deletions(-) diff --git a/app-android/build.gradle.kts b/app-android/build.gradle.kts index 3338b9705..431cbbb8d 100644 --- a/app-android/build.gradle.kts +++ b/app-android/build.gradle.kts @@ -18,7 +18,6 @@ val keystorePropertiesFile = file("keystore.properties") val keystoreExits = keystorePropertiesFile.exists() android { - // For firebase we are using 2023 now namespace = "io.github.droidkaigi.confsched2024" flavorDimensions += "network" @@ -26,8 +25,8 @@ android { buildConfig = true } defaultConfig { - versionCode = 11 - versionName = "1.6.0" + versionCode = 1 + versionName = "0.1.0" } signingConfigs { create("dev") { diff --git a/app-android/release.sh b/app-android/release.sh index 2270068e5..96f163491 100644 --- a/app-android/release.sh +++ b/app-android/release.sh @@ -1,7 +1,7 @@ #!/bin/bash cd "$(dirname "$0")" cp $1/keystore.properties . -cp $1/droidkaigi2023.keystore . +cp $1/droidkaigi2024.keystore . mkdir src/prod/ cp $1/google-services.json src/prod/google-services.json diff --git a/app-android/src/main/res/mipmap-hdpi/ic_launcher.png b/app-android/src/main/res/mipmap-hdpi/ic_launcher.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..28795c0bc589ad68fbeb1dc38cc1a38b6bf4f7b0 100644 GIT binary patch literal 1457 zcmV;i1y1^jP)6++BfCb8*+A=P^JHOlBra(*oaN2t>J)ea3oc26$ zKb(8cxxaJxN!S99qIeeJJS7308YD%6reJ3fWB^e@&4l9i@2tV^9^ z#cEU@)$H24nItet!^VdxLDX}Saw-}cZ<(Y8qbKQOP;$)qgB3jx5MdXb&(oMBQ*9M% zXCUOH<4I0ZkdnRUJ_MUsgX)#pOD_Z&al-kL90z(J$Ov0VzCvTrVF4X*>%2h1I~H*e<@dec0Ww7qtic zdR<*!L3DNjvm=v;PA`Brl0#|IzzGsl`$iuezWR*cugy&(a^oUa#_ym|NKC_<9q_j9 z%i3n@=LrO_jBpjjO;Aeh;38-j6I2Y@B+*~L<>PMb?`cP|>^;&19+YGjD+H3HPEDo;Zj#e}?l@}MOl1X3 z7Zm;F`;?rT`aQaw8h;(Ef~kUNCZidRu%aBow3W0SxmunmRc#+9* zx~pJC$|^{UMzBOH>CxMI{i#=MQ6uLS#ld=rbvEOc|#vD7zA<83Y^e6qDW-B|%AxbVN&O#hU9LR2Rh>{CZrvj<6 zzoQX$qx6Cv1od}%!gjjtckHO-f}|QZ>`WO1CF0T)=~E*y*o~44ay1@Gm6w7KVK+)H zh$4*?%qJ$lEj(CnHf31{xx3!h-{;5wWs*i&trCkhBz>fmJYF z5N-dgjQ^Ud8rKWXPGaf)3}!|G?AGEZ#-JpEb`s*8bPj}|90)-< z5Q1_b1m%DUl0pzt+^C5+#!~%I(h5BW3CeO%Y8ZF(i%DWr@00000 LNkvXXu0mjft3j>S literal 0 HcmV?d00001 diff --git a/app-android/src/main/res/mipmap-mdpi/ic_launcher.png b/app-android/src/main/res/mipmap-mdpi/ic_launcher.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..5428b87982a8c2ef86907055b994d210bc005253 100644 GIT binary patch literal 1051 zcmV+$1mydPP)rWOx9ZYwFa`t><}dFz0FSHa9=;cj0%I|NlKc@AFPU5>~BrCmjM& zC>07~8fF18ph~ z({(TbTq98!nt5RCjFL$`zyC#SzyDsXTP6+MeF@WX(Q63 zkoQ8ZDEWzq4TKRS6I>(7u=ov^_oK+aaMJ(HHSzBFUC1ES2j;EWKB;(yo0I$46_arI10&K*19KwC}`C#Er6eE_u7pg;a2r_#i{top>txU)PB~ zQRMfb>_Q-A@j{TJ5He)lK;P3^^gpSEckNP?oexM0k|nDK!u7W?@Tv}rcdf#zlY5a1 zvSuLk;3@{+Kf|($^;mJZ9JwMZ2DsU<_>#(P@E_cYT#|7p5v9(`ZJwJ=uEjGM8yNiZ zMjR)aU2{Rk28{MrG15#oNzD{<;k1=zXQOYB;+QVvgNzN>HtrV3wuX<$2N@gS*k}HZ zeIgugxz~tXla+bEQE?Q}fj)}opNZ>|%G?d7S(}NA4xE9-?jRF&)F&cXaU?ghaaLm? zt_j8Fr2bG#E2|JzpV~u1tPL|s)`!vgd#m8sQ-$t#&G>NcF(O^*t#wmH$^f_XRIqK@ zP0h(EmWVTLLdw8IYu#ixHVWQ4LuSL`nwyf03EBBX$^fTMSm0#D#g8Pt6E`uPxCmt= zx*D4ygKBYmt7SeI`tlZqw7BQ-KM^(;x>G$)d>o#wJ6?ZBp~oSXn#uh6{0pBhHHi0Q zNISX9c_Gd|a4LmG%Otk!#V$CP`(R(>f)O4<&*wIg;7W(N>~y}FGmvk{fTF{s&?a9K z?U6+rU{YeVd(Smc50f$iwMLBwdvw+9@sN=%FcGx7dLyd;cqlrtfstz7zK2QRw$GaR zToreM!AQ*QdZbc-FxzW_OP<6Z8uMe1F=#6_mE6&bWwYn^6N)}M*eLae-uyE0$vz!)A3 zN`z>lz#Ae4$^#{Mfzn_g>DEQW*pkp~3+=YM+x2{BJL4{FySF)WW_Hi-Wp`(1+vNX0 z=R4>7=FA)oSyJco)s4ZsoxR-{M|`CQ_~)eej!<9-vyjXddnfh5<9PoXbjl z(P+UKBCGTr6!9Lw;{IMJEG3EvpWbU= zvEL2PFcel3iXpnx?dV@K()3O-myhpYo%A#bS7?%lYxhy-9?JMsT<97Vh)}Fflj+E79COe;gK2-nIc% z+h2#fVZof|#qJJb{Kq2*UpfslAmNv6Uxg*xR>Mt-Dd# zu{)>VOmrXTModrKL%vijn2*&TKaYy0+MIqDy+4T?ht6^{MB{eVHFQEC`G`+=eNUon z*&0k;?nXR1gX*}xe-pr5eD36 z3EB9mBgSV+u-f0>=6LZ5+Z&Kh{Cu)oyJBktMvrx2GN~q1Y~mBPG$1~4A7jV%r&LC% zv|vVdYd36X0Er(uxQCagb*Qw^`ff+jiBH(d01|(=>os1I)}hjZ+1ag~u$2KLUv{R5 zFDkpW6Sm2ODanfT_Zpu|L43j%229gcu%xLbg`H9mpRk1iQ-NM1^w3nZc~{|OY^Pug z1HzYnGTu}9x0vSnnUHQkoL%!xj{S7;yp)h`z;x2AhvxakP~XV~`35AddeGPEloD!X zoMfaMkbH@eR;iU5@(oB@DMt&UM6biK8`2HXSP!6eqB>TrMza&P7z4`uD~$IyPyEJu zLKvljEexo5W`{8rP#6k)(}PmM76wols@S;0`25$&-%G{>+e||%x9(0E3kHr}CRJdm>@d52{nMi zMZADV4e-B_rT98#mM+4BBRl~ViBJPbe7eIWUvd>+hg$8$H@_~pbaCU*IX>GGiSTDd zL~mZ_&uA}8Dm7Y_ zdP67c4KG2FEj+j4)B9P3*U4;v4$qkR{_~sIA8()82wG*&2|`p@(^ze1nw1w=i$9S( b(9XqwOdyZ&Yueyq00000NkvXXu0mjfas6|e literal 0 HcmV?d00001 diff --git a/app-android/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app-android/src/main/res/mipmap-xxhdpi/ic_launcher.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..230b74120feaa0c990b965f72bd9afc4c347d3a5 100644 GIT binary patch literal 2818 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 literal 0 HcmV?d00001 From aa140206df827771f8387e9efb8ae33865deae90 Mon Sep 17 00:00:00 2001 From: vixer93 Date: Sat, 10 Aug 2024 17:55:27 +0900 Subject: [PATCH 10/38] Add event map feature package --- app-ios/Package.swift | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/app-ios/Package.swift b/app-ios/Package.swift index f8db16274..5142d2416 100644 --- a/app-ios/Package.swift +++ b/app-ios/Package.swift @@ -46,6 +46,10 @@ let package = Package( name: "CommonComponents", targets: ["CommonComponents"] ), + .library( + name: "EventMapFeature", + targets: ["EventMapFeature"] + ), ], dependencies: [ .package(url: "https://github.com/pointfreeco/swift-composable-architecture.git", exact: "1.10.2"), @@ -64,6 +68,7 @@ let package = Package( .sponsorFeature, .timetableFeature, .timetableDetailFeature, + .eventMapFeature, .tca, .kmpClient, .licenseList, @@ -213,6 +218,21 @@ let package = Package( .tca ] ), + .target( + name: "EventMapFeature", + dependencies: [ + .tca, + .theme, + .commonComponents, + ] + ), + .testTarget( + name: "EventMapFeatureTests", + dependencies: [ + .eventMapFeature, + .tca + ] + ), .target(name: "CommonComponents", dependencies: [.theme, .kmpModule, .model]), .target(name: "Model", dependencies: [.kmpModule, .theme]), // Please run ./gradlew app-ios-shared:assembleSharedXCFramework first @@ -241,6 +261,7 @@ extension Target.Dependency { static let staffFeature: Target.Dependency = "StaffFeature" static let sponsorFeature: Target.Dependency = "SponsorFeature" static let contributorFeature: Target.Dependency = "ContributorFeature" + static let eventMapFeature: Target.Dependency = "EventMapFeature" static let kmpModule: Target.Dependency = "KmpModule" static let kmpClient: Target.Dependency = "KMPClient" static let eventKitClient: Target.Dependency = "EventKitClient" From 341bae252e318ad92265def9f3d1490d812caaa6 Mon Sep 17 00:00:00 2001 From: vixer93 Date: Sat, 10 Aug 2024 17:55:46 +0900 Subject: [PATCH 11/38] Add floor map images --- .../Resources/Media.xcassets/Contents.json | 6 +++++ .../map_1F.imageset/Contents.json | 23 ++++++++++++++++++ .../map_1F.imageset/img_floorMap_light_1F.png | Bin 0 -> 7135 bytes .../img_floorMap_light_1F@2x.png | Bin 0 -> 13037 bytes .../img_floorMap_light_1F@3x.png | Bin 0 -> 19606 bytes .../map_B1F.imageset/Contents.json | 23 ++++++++++++++++++ .../img_floorMap_light_B1F.png | Bin 0 -> 12588 bytes .../img_floorMap_light_B1F@2x.png | Bin 0 -> 20923 bytes .../img_floorMap_light_B1F@3x.png | Bin 0 -> 32309 bytes 9 files changed, 52 insertions(+) create mode 100644 app-ios/Sources/EventMapFeature/Resources/Media.xcassets/Contents.json create mode 100644 app-ios/Sources/EventMapFeature/Resources/Media.xcassets/map_1F.imageset/Contents.json create mode 100644 app-ios/Sources/EventMapFeature/Resources/Media.xcassets/map_1F.imageset/img_floorMap_light_1F.png create mode 100644 app-ios/Sources/EventMapFeature/Resources/Media.xcassets/map_1F.imageset/img_floorMap_light_1F@2x.png create mode 100644 app-ios/Sources/EventMapFeature/Resources/Media.xcassets/map_1F.imageset/img_floorMap_light_1F@3x.png create mode 100644 app-ios/Sources/EventMapFeature/Resources/Media.xcassets/map_B1F.imageset/Contents.json create mode 100644 app-ios/Sources/EventMapFeature/Resources/Media.xcassets/map_B1F.imageset/img_floorMap_light_B1F.png create mode 100644 app-ios/Sources/EventMapFeature/Resources/Media.xcassets/map_B1F.imageset/img_floorMap_light_B1F@2x.png create mode 100644 app-ios/Sources/EventMapFeature/Resources/Media.xcassets/map_B1F.imageset/img_floorMap_light_B1F@3x.png diff --git a/app-ios/Sources/EventMapFeature/Resources/Media.xcassets/Contents.json b/app-ios/Sources/EventMapFeature/Resources/Media.xcassets/Contents.json new file mode 100644 index 000000000..73c00596a --- /dev/null +++ b/app-ios/Sources/EventMapFeature/Resources/Media.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/app-ios/Sources/EventMapFeature/Resources/Media.xcassets/map_1F.imageset/Contents.json b/app-ios/Sources/EventMapFeature/Resources/Media.xcassets/map_1F.imageset/Contents.json new file mode 100644 index 000000000..4da3ddc3c --- /dev/null +++ b/app-ios/Sources/EventMapFeature/Resources/Media.xcassets/map_1F.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "img_floorMap_light_1F.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "img_floorMap_light_1F@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "img_floorMap_light_1F@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/app-ios/Sources/EventMapFeature/Resources/Media.xcassets/map_1F.imageset/img_floorMap_light_1F.png b/app-ios/Sources/EventMapFeature/Resources/Media.xcassets/map_1F.imageset/img_floorMap_light_1F.png new file mode 100644 index 0000000000000000000000000000000000000000..a1d344f22ccf03cc9c699aecb060afaf35e3a4c5 GIT binary patch literal 7135 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 literal 0 HcmV?d00001 diff --git a/app-ios/Sources/EventMapFeature/Resources/Media.xcassets/map_1F.imageset/img_floorMap_light_1F@2x.png b/app-ios/Sources/EventMapFeature/Resources/Media.xcassets/map_1F.imageset/img_floorMap_light_1F@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7a7a22d09ba5785a1779295e6d2aeee8239adb96 GIT binary patch literal 13037 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 literal 0 HcmV?d00001 diff --git a/app-ios/Sources/EventMapFeature/Resources/Media.xcassets/map_B1F.imageset/Contents.json b/app-ios/Sources/EventMapFeature/Resources/Media.xcassets/map_B1F.imageset/Contents.json new file mode 100644 index 000000000..729ef802a --- /dev/null +++ b/app-ios/Sources/EventMapFeature/Resources/Media.xcassets/map_B1F.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "img_floorMap_light_B1F.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "img_floorMap_light_B1F@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "img_floorMap_light_B1F@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/app-ios/Sources/EventMapFeature/Resources/Media.xcassets/map_B1F.imageset/img_floorMap_light_B1F.png b/app-ios/Sources/EventMapFeature/Resources/Media.xcassets/map_B1F.imageset/img_floorMap_light_B1F.png new file mode 100644 index 0000000000000000000000000000000000000000..424386928b40ffcaed7a57cfcaf9e52f5b8eaa7a GIT binary patch literal 12588 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 Z`KMScEIl8+X9ZA#!PC{xWt~$(69AruLbU(@ literal 0 HcmV?d00001 diff --git a/app-ios/Sources/EventMapFeature/Resources/Media.xcassets/map_B1F.imageset/img_floorMap_light_B1F@3x.png b/app-ios/Sources/EventMapFeature/Resources/Media.xcassets/map_B1F.imageset/img_floorMap_light_B1F@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..cfb37224b9a6006858baec39663226d09b44ce82 GIT binary patch literal 32309 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 literal 0 HcmV?d00001 From 8bbde387a4bceb9cce05722e0b31e57cf378c61d Mon Sep 17 00:00:00 2001 From: vixer93 Date: Sat, 10 Aug 2024 17:55:57 +0900 Subject: [PATCH 12/38] Add event map view --- .../EventMapFeature/EventMapReducer.swift | 37 +++++++++++++++++ .../EventMapFeature/EventMapView.swift | 41 +++++++++++++++++++ .../EventMapFeature/Model/FloorMap.swift | 28 +++++++++++++ .../Resources/Localizable.xcstrings | 32 +++++++++++++++ .../EventMapFeatureTests/EventMapTests.swift | 1 + 5 files changed, 139 insertions(+) create mode 100644 app-ios/Sources/EventMapFeature/EventMapReducer.swift create mode 100644 app-ios/Sources/EventMapFeature/EventMapView.swift create mode 100644 app-ios/Sources/EventMapFeature/Model/FloorMap.swift create mode 100644 app-ios/Sources/EventMapFeature/Resources/Localizable.xcstrings create mode 100644 app-ios/Tests/EventMapFeatureTests/EventMapTests.swift diff --git a/app-ios/Sources/EventMapFeature/EventMapReducer.swift b/app-ios/Sources/EventMapFeature/EventMapReducer.swift new file mode 100644 index 000000000..8039de246 --- /dev/null +++ b/app-ios/Sources/EventMapFeature/EventMapReducer.swift @@ -0,0 +1,37 @@ +import ComposableArchitecture + +@Reducer +public struct EventMapReducer { + public init() { } + + @ObservableState + public struct State: Equatable { + public var selectedFloorMap: FloorMap = .first + + public init() { } + } + + public enum Action: BindableAction { + case binding(BindingAction) + case view(View) + + @CasePathable + public enum View { + case selectFloorMap(FloorMap) + } + } + + public var body: some ReducerOf { + BindingReducer() + Reduce { state, action in + switch action { + case let .view(.selectFloorMap(floor)): + state.selectedFloorMap = floor + return .none + + case .binding: + return .none + } + } + } +} diff --git a/app-ios/Sources/EventMapFeature/EventMapView.swift b/app-ios/Sources/EventMapFeature/EventMapView.swift new file mode 100644 index 000000000..e3456db5c --- /dev/null +++ b/app-ios/Sources/EventMapFeature/EventMapView.swift @@ -0,0 +1,41 @@ +import SwiftUI +import CommonComponents +import ComposableArchitecture +import Theme + +public struct EventMapView: View { + @Bindable private var store: StoreOf + + public init(store: StoreOf) { + self.store = store + } + + public var body: some View { + ScrollView { + Text("Description", bundle: .module) + .textStyle(.bodyMedium) + .foregroundStyle(AssetColors.Surface.onSurfaceVariant.swiftUIColor) + .padding(.horizontal, 16) + SelectionChips( + selected: Binding( + get: { store.selectedFloorMap }, + set: { store.send(.view(.selectFloorMap($0 ?? .first))) } + ) + ) + Image(store.selectedFloorMap.image) + .resizable() + .frame(maxWidth: .infinity) + .padding(.horizontal, 16) + .scaledToFit() + } + .background(AssetColors.Surface.surface.swiftUIColor) + .navigationBarTitleDisplayMode(.large) + .navigationTitle(String(localized: "NavigationTitle", bundle: .module)) + } +} + +#Preview { + EventMapView(store: .init(initialState: .init(), reducer: { + EventMapReducer() + })) +} diff --git a/app-ios/Sources/EventMapFeature/Model/FloorMap.swift b/app-ios/Sources/EventMapFeature/Model/FloorMap.swift new file mode 100644 index 000000000..541e1d490 --- /dev/null +++ b/app-ios/Sources/EventMapFeature/Model/FloorMap.swift @@ -0,0 +1,28 @@ +import Foundation +import CommonComponents +import SwiftUI + +public enum FloorMap { + case first + case firstBasement +} + +extension FloorMap: Selectable { + public var id: Self { self } + + public var title: String { + switch self { + case .first: "1F" + case .firstBasement: "B1F" + } + } +} + +extension FloorMap { + var image: ImageResource { + switch self { + case .first: .map1F + case .firstBasement: .mapB1F + } + } +} diff --git a/app-ios/Sources/EventMapFeature/Resources/Localizable.xcstrings b/app-ios/Sources/EventMapFeature/Resources/Localizable.xcstrings new file mode 100644 index 000000000..82dfcdc42 --- /dev/null +++ b/app-ios/Sources/EventMapFeature/Resources/Localizable.xcstrings @@ -0,0 +1,32 @@ +{ + "sourceLanguage" : "en", + "strings" : { + "Description" : { + "localizations" : { + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "DroidKaigiでは、セッション以外にも参加者が楽しめるイベントを開催。コミュニケーションや技術交流を通じてカンファレンスを満喫しましょう!" + } + } + } + }, + "NavigationTitle" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Event Map" + } + }, + "ja" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "イベントマップ" + } + } + } + } + }, + "version" : "1.0" +} \ No newline at end of file diff --git a/app-ios/Tests/EventMapFeatureTests/EventMapTests.swift b/app-ios/Tests/EventMapFeatureTests/EventMapTests.swift new file mode 100644 index 000000000..fecc4ab44 --- /dev/null +++ b/app-ios/Tests/EventMapFeatureTests/EventMapTests.swift @@ -0,0 +1 @@ +import Foundation From b7308038ef961d095bf0f387d35679b35d20c2ec Mon Sep 17 00:00:00 2001 From: vixer93 Date: Sat, 10 Aug 2024 17:56:24 +0900 Subject: [PATCH 13/38] Connect root view to event map view --- app-ios/Sources/App/RootView.swift | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/app-ios/Sources/App/RootView.swift b/app-ios/Sources/App/RootView.swift index 3d0e7e5ea..ccd86918c 100644 --- a/app-ios/Sources/App/RootView.swift +++ b/app-ios/Sources/App/RootView.swift @@ -8,6 +8,7 @@ import StaffFeature import SwiftUI import TimetableDetailFeature import TimetableFeature +import EventMapFeature import Theme private enum Tab { @@ -37,7 +38,7 @@ public struct RootView: View { ) } - Text("Map Feature") + eventMapTab .tag(Tab.map) .tabItem { Label( @@ -154,6 +155,15 @@ public struct RootView: View { } } } + + @MainActor + private var eventMapTab: some View { + NavigationStack { + EventMapView(store: Store(initialState: .init(), reducer: { + EventMapReducer() + })) + } + } } #Preview { From 428d026e2ea0f78626c111dd5a6cc333ae87c309 Mon Sep 17 00:00:00 2001 From: vixer93 Date: Sat, 10 Aug 2024 18:00:36 +0900 Subject: [PATCH 14/38] Add todo comment --- app-ios/Tests/EventMapFeatureTests/EventMapTests.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app-ios/Tests/EventMapFeatureTests/EventMapTests.swift b/app-ios/Tests/EventMapFeatureTests/EventMapTests.swift index fecc4ab44..97f967f6e 100644 --- a/app-ios/Tests/EventMapFeatureTests/EventMapTests.swift +++ b/app-ios/Tests/EventMapFeatureTests/EventMapTests.swift @@ -1 +1,3 @@ import Foundation + +// TODO: Implement tests for EventMapView From d9826a5225e81f5fe251f3e5064391312b098a00 Mon Sep 17 00:00:00 2001 From: vixer93 Date: Sat, 10 Aug 2024 18:03:14 +0900 Subject: [PATCH 15/38] Delete binding reducer --- app-ios/Sources/EventMapFeature/EventMapReducer.swift | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/app-ios/Sources/EventMapFeature/EventMapReducer.swift b/app-ios/Sources/EventMapFeature/EventMapReducer.swift index 8039de246..3b45a4a86 100644 --- a/app-ios/Sources/EventMapFeature/EventMapReducer.swift +++ b/app-ios/Sources/EventMapFeature/EventMapReducer.swift @@ -11,8 +11,7 @@ public struct EventMapReducer { public init() { } } - public enum Action: BindableAction { - case binding(BindingAction) + public enum Action { case view(View) @CasePathable @@ -22,15 +21,11 @@ public struct EventMapReducer { } public var body: some ReducerOf { - BindingReducer() Reduce { state, action in switch action { case let .view(.selectFloorMap(floor)): state.selectedFloorMap = floor return .none - - case .binding: - return .none } } } From 6fc4497d1938ad7f0768d001db351baa83e5ae7b Mon Sep 17 00:00:00 2001 From: ryoya ito Date: Sat, 10 Aug 2024 19:45:46 +0900 Subject: [PATCH 16/38] remove debug codes --- app-ios/Sources/SearchFeature/SearchReducer.swift | 1 - app-ios/Sources/SearchFeature/SearchView.swift | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/app-ios/Sources/SearchFeature/SearchReducer.swift b/app-ios/Sources/SearchFeature/SearchReducer.swift index 29dc6b318..b3db4aec8 100644 --- a/app-ios/Sources/SearchFeature/SearchReducer.swift +++ b/app-ios/Sources/SearchFeature/SearchReducer.swift @@ -145,7 +145,6 @@ public struct SearchReducer { return .none } } - ._printChanges() } } diff --git a/app-ios/Sources/SearchFeature/SearchView.swift b/app-ios/Sources/SearchFeature/SearchView.swift index 29a7bb1ec..d716d0aa2 100644 --- a/app-ios/Sources/SearchFeature/SearchView.swift +++ b/app-ios/Sources/SearchFeature/SearchView.swift @@ -15,7 +15,7 @@ public struct SearchView: View { public var body: some View { let timetableItems = store.timetableItems - let _ = store.filters + VStack { filters Group { From 8d40d227a46fbdd5f15f20b1f9c25f57cbd26d79 Mon Sep 17 00:00:00 2001 From: ryoya ito Date: Fri, 9 Aug 2024 09:23:14 +0900 Subject: [PATCH 17/38] wip --- app-ios/Brewfile | 1 + app-ios/Brewfile.lock.json | 52 ++++++++++++++++++++++++++++++++++++++ app-ios/Makefile | 26 +++++++++++++++++++ app-ios/README.md | 39 ++++++++++++++++++++++++++++ 4 files changed, 118 insertions(+) create mode 100644 app-ios/Brewfile create mode 100644 app-ios/Brewfile.lock.json create mode 100644 app-ios/Makefile create mode 100644 app-ios/README.md diff --git a/app-ios/Brewfile b/app-ios/Brewfile new file mode 100644 index 000000000..fe53a9df8 --- /dev/null +++ b/app-ios/Brewfile @@ -0,0 +1 @@ +brew "xcbeautify" diff --git a/app-ios/Brewfile.lock.json b/app-ios/Brewfile.lock.json new file mode 100644 index 000000000..14e9e3e12 --- /dev/null +++ b/app-ios/Brewfile.lock.json @@ -0,0 +1,52 @@ +{ + "entries": { + "brew": { + "xcbeautify": { + "version": "2.4.1", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/xcbeautify/blobs/sha256:69582093b0a06d7ed3b03b82b29be5723ba6e46f8a7546c59ce1fed364f51701", + "sha256": "69582093b0a06d7ed3b03b82b29be5723ba6e46f8a7546c59ce1fed364f51701" + }, + "arm64_ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/xcbeautify/blobs/sha256:72665b9f9c4d515857bd3545eff067fe37b003f8010bcece75e82f11fb71593c", + "sha256": "72665b9f9c4d515857bd3545eff067fe37b003f8010bcece75e82f11fb71593c" + }, + "sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/xcbeautify/blobs/sha256:13e8b932e9b7ad308040b3b124fff8acb772e0ab971b253faa36cf1b28c5aef7", + "sha256": "13e8b932e9b7ad308040b3b124fff8acb772e0ab971b253faa36cf1b28c5aef7" + }, + "ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/xcbeautify/blobs/sha256:f337f20e6a7c7683e26ebdc799423551bc44183283466aecbb7710d5a0c9e673", + "sha256": "f337f20e6a7c7683e26ebdc799423551bc44183283466aecbb7710d5a0c9e673" + }, + "x86_64_linux": { + "cellar": "/home/linuxbrew/.linuxbrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/xcbeautify/blobs/sha256:63cc0e584f5794b0851fb9abefafefc54215812846299f7782ed841809f7ce6b", + "sha256": "63cc0e584f5794b0851fb9abefafefc54215812846299f7782ed841809f7ce6b" + } + } + } + } + } + }, + "system": { + "macos": { + "sonoma": { + "HOMEBREW_VERSION": "4.3.10", + "HOMEBREW_PREFIX": "/opt/homebrew", + "Homebrew/homebrew-core": "api", + "CLT": "15.3.0.0.1.1708646388", + "Xcode": "15.4", + "macOS": "14.5" + } + } + } +} diff --git a/app-ios/Makefile b/app-ios/Makefile new file mode 100644 index 000000000..5b9724050 --- /dev/null +++ b/app-ios/Makefile @@ -0,0 +1,26 @@ +PROJECT_FILE := App/App.xcodeproj +SCHEME_NAME_APP := DroidKaigi2024App + +.PHONY: setup +setup: + brew bundle --no-lock + + +.PHONY: open +open: + open $(PROJECT_FILE) + +.PHONY: build-kmp-module +build-kmp-module: + cd .. && \ + ./gradlew app-ios-shared:assembleSharedXCFramework --no-configuration-cache + +.PHONY: build-app-debug +build-app-debug: build-kmp-module + set -o pipefail && \ + xcodebuild -project $(PROJECT_FILE) \ + -scheme $(SCHEME_NAME_APP) \ + -configuration Debug \ + -destination 'generic/platform=iOS Simulator' \ + clean build + diff --git a/app-ios/README.md b/app-ios/README.md new file mode 100644 index 000000000..1bb4c97bd --- /dev/null +++ b/app-ios/README.md @@ -0,0 +1,39 @@ +# DroidKaigi2024 iOS App + +Official iOS App for DroidKaigi 2024. + +## Getting started + +1. Setup "Requirements > Must" +2. `make open` + +## Requirements + +### Must + +- Xcode 15.4 or higher + - You can install via [Xcodes](https://www.xcodes.app/) (Recommended) + +- JDK 17 + - You can install via [SDKMAN](https://sdkman.io) + +### Option +- Homebrew + - for Build output formatting + +## Project structure + +This iOS app's almost all of source code is located in Swift Package Manager source. This structure is inspired by [isowords](https://github.com/pointfreeco/isowords). +The feature modules in this iOS app are made independent of each other. (e.g. `TimetableFeature` shouldn't depend on `TiemtableDetailFeature`. ) + +### App Module + +```mermaid + +``` + +## For your information + +- Now DroidKaigi 2024 iOS App supports only Xcode. Build and run from Android Studio may not work. + + From 1ce858384c33d31b5365b3e0210a3798f61c3058 Mon Sep 17 00:00:00 2001 From: takahirom Date: Sat, 10 Aug 2024 20:19:09 +0900 Subject: [PATCH 18/38] Update feature image --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0d5742271..e73137be8 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ In addition to the standard features of a conference app, the DroidKaigi 2024 of - **Contributors**: Discover the contributors behind the app. ...and more! -![image](https://github.com/user-attachments/assets/e9c6659e-4667-42d6-b372-742b0246a6d1) +![image](https://github.com/user-attachments/assets/ffed2cb2-455b-4de8-a9d2-be9ca0842b99) ## Try the app From 1d901e3c849498295256676fd5c4b377743fc05d Mon Sep 17 00:00:00 2001 From: takahirom Date: Sat, 10 Aug 2024 20:19:17 +0900 Subject: [PATCH 19/38] Show progress bar when empty --- .../sessions/section/TimetableSheet.kt | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/feature/sessions/src/commonMain/kotlin/io/github/droidkaigi/confsched/sessions/section/TimetableSheet.kt b/feature/sessions/src/commonMain/kotlin/io/github/droidkaigi/confsched/sessions/section/TimetableSheet.kt index efd67f302..9b90b52d0 100644 --- a/feature/sessions/src/commonMain/kotlin/io/github/droidkaigi/confsched/sessions/section/TimetableSheet.kt +++ b/feature/sessions/src/commonMain/kotlin/io/github/droidkaigi/confsched/sessions/section/TimetableSheet.kt @@ -1,5 +1,6 @@ package io.github.droidkaigi.confsched.sessions.section +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.calculateEndPadding @@ -7,25 +8,24 @@ import androidx.compose.foundation.layout.calculateStartPadding import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.rememberLazyListState +import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.Surface -import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalLayoutDirection -import conference_app_2024.feature.sessions.generated.resources.empty +import androidx.compose.ui.unit.dp import io.github.droidkaigi.confsched.model.DroidKaigi2024Day import io.github.droidkaigi.confsched.model.TimetableItem -import io.github.droidkaigi.confsched.sessions.SessionsRes import io.github.droidkaigi.confsched.sessions.component.TimetableDayTab import io.github.droidkaigi.confsched.sessions.section.TimetableSheetUiState.Empty import io.github.droidkaigi.confsched.sessions.section.TimetableSheetUiState.GridTimetable import io.github.droidkaigi.confsched.sessions.section.TimetableSheetUiState.ListTimetable import io.github.droidkaigi.confsched.ui.compositionlocal.LocalClock -import org.jetbrains.compose.resources.stringResource const val TimetableTabTestTag = "TimetableTab" @@ -97,7 +97,15 @@ fun TimetableSheet( } Empty -> { - Text(stringResource(SessionsRes.string.empty)) + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.Center, + ) { + CircularProgressIndicator( + modifier = Modifier + .padding(16.dp), + ) + } } } } From 0c0accc27273799aae77f535f7772ef1e76cbd5d Mon Sep 17 00:00:00 2001 From: ryoya ito Date: Sat, 10 Aug 2024 20:33:57 +0900 Subject: [PATCH 20/38] setup makefile, readme --- app-ios/Makefile | 10 +++++++--- app-ios/Package.swift | 1 + app-ios/README.md | 10 ++-------- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/app-ios/Makefile b/app-ios/Makefile index 5b9724050..32c3134e0 100644 --- a/app-ios/Makefile +++ b/app-ios/Makefile @@ -5,7 +5,6 @@ SCHEME_NAME_APP := DroidKaigi2024App setup: brew bundle --no-lock - .PHONY: open open: open $(PROJECT_FILE) @@ -21,6 +20,11 @@ build-app-debug: build-kmp-module xcodebuild -project $(PROJECT_FILE) \ -scheme $(SCHEME_NAME_APP) \ -configuration Debug \ - -destination 'generic/platform=iOS Simulator' \ - clean build + -destination "platform=iOS Simulator,name=iPhone 15 Pro,OS=17.5" \ + clean build | xcbeautify +# Gradle Utility +.PHONY: gradle-clean +gradle-clean: + cd .. && \ + ./gradlew --stop && ./gradlew clean \ No newline at end of file diff --git a/app-ios/Package.swift b/app-ios/Package.swift index f8db16274..ab315c8e4 100644 --- a/app-ios/Package.swift +++ b/app-ios/Package.swift @@ -94,6 +94,7 @@ let package = Package( .target( name: "TimetableFeature", dependencies: [ + .kmpClient, .kmpModule, .firebaseAuth, .firebaseRemoteConfig, diff --git a/app-ios/README.md b/app-ios/README.md index 1bb4c97bd..290f71ac4 100644 --- a/app-ios/README.md +++ b/app-ios/README.md @@ -12,12 +12,14 @@ Official iOS App for DroidKaigi 2024. ### Must - Xcode 15.4 or higher + - You can install via [Xcodes](https://www.xcodes.app/) (Recommended) - JDK 17 - You can install via [SDKMAN](https://sdkman.io) ### Option + - Homebrew - for Build output formatting @@ -26,14 +28,6 @@ Official iOS App for DroidKaigi 2024. This iOS app's almost all of source code is located in Swift Package Manager source. This structure is inspired by [isowords](https://github.com/pointfreeco/isowords). The feature modules in this iOS app are made independent of each other. (e.g. `TimetableFeature` shouldn't depend on `TiemtableDetailFeature`. ) -### App Module - -```mermaid - -``` - ## For your information - Now DroidKaigi 2024 iOS App supports only Xcode. Build and run from Android Studio may not work. - - From a72cb3de474217f74493aaea8c85b91254d01e14 Mon Sep 17 00:00:00 2001 From: vixer93 Date: Sun, 11 Aug 2024 01:45:16 +0900 Subject: [PATCH 21/38] - Set tab bar color - Set navigation bar color - Add logic to back to root stack when tapping same tab --- app-ios/Sources/App/RootReducer.swift | 18 ++- app-ios/Sources/App/RootView.swift | 107 ++++++++++-------- .../TimetableDetailView.swift | 1 - 3 files changed, 79 insertions(+), 47 deletions(-) diff --git a/app-ios/Sources/App/RootReducer.swift b/app-ios/Sources/App/RootReducer.swift index 6b10101f0..96b585abd 100644 --- a/app-ios/Sources/App/RootReducer.swift +++ b/app-ios/Sources/App/RootReducer.swift @@ -64,6 +64,7 @@ public struct RootReducer { case timetable(TimetableReducer.Action) case favorite(FavoriteReducer.Action) case about(AboutReducer.Action) + case view(View) case paths(Paths) @CasePathable @@ -72,6 +73,10 @@ public struct RootReducer { case favorite(StackActionOf) case about(StackActionOf) } + + public enum View { + case sameTabTapped(Tab) + } } public var body: some ReducerOf { @@ -130,7 +135,18 @@ public struct RootReducer { ) return .none } - + + case let .view(.sameTabTapped(tab)): + switch tab { + case .timetable: state.paths.timetable.removeAll() + case .favorite: state.paths.favorite.removeAll() + case .about: state.paths.about.removeAll() + case .map: break + case .idCard: break + } + + return .none + default: return .none } diff --git a/app-ios/Sources/App/RootView.swift b/app-ios/Sources/App/RootView.swift index ccd86918c..41d12c848 100644 --- a/app-ios/Sources/App/RootView.swift +++ b/app-ios/Sources/App/RootView.swift @@ -11,7 +11,7 @@ import TimetableFeature import EventMapFeature import Theme -private enum Tab { +public enum Tab { case timetable case map case favorite @@ -25,54 +25,71 @@ public struct RootView: View { public init(store: StoreOf) { self.store = store + UINavigationBar.appearance().barTintColor = AssetColors.Surface.surface.color } public var body: some View { - TabView(selection: $selection) { - timetableTab - .tag(Tab.timetable) - .tabItem { - Label( - title: { Text("Timetable") }, - icon: { Image(.icTimetable).renderingMode(.template) } - ) - } - - eventMapTab - .tag(Tab.map) - .tabItem { - Label( - title: { Text("Event Map") }, - icon: { Image(.icMap).renderingMode(.template) } - ) - } - - favoriteTab - .tag(Tab.favorite) - .tabItem { - Label( - title: { Text("Favorite") }, - icon: { Image(.icFav).renderingMode(.template) } - ) - } - - aboutTab - .tag(Tab.about) - .tabItem { - Label( - title: { Text("About") }, - icon: { Image(.icInfo).renderingMode(.template) } - ) - } - - Text("ID Card Feature") - .tag(Tab.idCard) - .tabItem { - Label( - title: { Text("ID Card") }, - icon: { Image(.icProfileCard).renderingMode(.template) } - ) + TabView( + selection: Binding( + get: { selection }, + set: { + if selection != $0 { + selection = $0 + return + } + store.send(.view(.sameTabTapped($0))) } + ) + ) { + Group { + timetableTab + .tag(Tab.timetable) + .tabItem { + Label( + title: { Text("Timetable") }, + icon: { Image(.icTimetable).renderingMode(.template) } + ) + } + + eventMapTab + .tag(Tab.map) + .tabItem { + Label( + title: { Text("Event Map") }, + icon: { Image(.icMap).renderingMode(.template) } + ) + } + + favoriteTab + .tag(Tab.favorite) + .tabItem { + Label( + title: { Text("Favorite") }, + icon: { Image(.icFav).renderingMode(.template) } + ) + } + + aboutTab + .tag(Tab.about) + .tabItem { + Label( + title: { Text("About") }, + icon: { Image(.icInfo).renderingMode(.template) } + ) + } + + Text("ID Card Feature") + .tag(Tab.idCard) + .tabItem { + Label( + title: { Text("ID Card") }, + icon: { Image(.icProfileCard).renderingMode(.template) } + ) + } + } + .toolbarBackground(AssetColors.Surface.surface.swiftUIColor, for: .tabBar) + // If there are not this code, tab bar color is clear when scroll down to edge. + .toolbarBackground(.visible, for: .tabBar) } .navigationBarTitleStyle( color: AssetColors.Surface.onSurface.swiftUIColor, diff --git a/app-ios/Sources/TimetableDetailFeature/TimetableDetailView.swift b/app-ios/Sources/TimetableDetailFeature/TimetableDetailView.swift index ef4eb95a5..c49cca3ce 100644 --- a/app-ios/Sources/TimetableDetailFeature/TimetableDetailView.swift +++ b/app-ios/Sources/TimetableDetailFeature/TimetableDetailView.swift @@ -35,7 +35,6 @@ public struct TimetableDetailView: View { .frame(maxWidth: .infinity) .ignoresSafeArea(edges: [.top]) } - .toolbarBackground(AssetColors.Surface.surface.swiftUIColor, for: .navigationBar) .tint(store.timetableItem.room.roomTheme.primaryColor) .confirmationDialog( $store.scope( From 2aed6634403136c3bf187ef8e08197e8e2423784 Mon Sep 17 00:00:00 2001 From: takahirom Date: Sun, 11 Aug 2024 10:36:00 +0900 Subject: [PATCH 22/38] Adjust README and small point --- README.md | 6 +++++- .../io/github/droidkaigi/confsched/about/AboutScreen.kt | 3 +-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0d5742271..e7e4acba3 100644 --- a/README.md +++ b/README.md @@ -40,10 +40,14 @@ You can check out the design on Figma. [DroidKaigi 2024 App UI](https://www.figma.com/design/XUk8WMbKCeIdWD5cz9P9JC/DroidKaigi-2024-App-UI?node-id=54795-26746&t=DgZuFVd0sduq6vUy-0) -**Designer:**: [nobonobopurin](https://github.com/nobonobopurin) +**Designer**: [nobonobopurin](https://github.com/nobonobopurin) ## Development +### Overview of the architecture + +In addition to general Android practices, we are exploring and implementing various concepts. Details for each are discussed further in this README. + image ### Understanding the App's Data Flow diff --git a/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/AboutScreen.kt b/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/AboutScreen.kt index 7ccecfbd4..bba67b9b4 100644 --- a/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/AboutScreen.kt +++ b/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/AboutScreen.kt @@ -107,8 +107,7 @@ fun AboutScreen( ) item { AboutFooterLinks( - // TODO: Inject the right version name - versionName = "1.6.0", + versionName = "0.1.0", onYouTubeClick = { onAboutItemClick(YouTube) }, From 4e0b3795cf44011c3a37c3169cf6972644e7de35 Mon Sep 17 00:00:00 2001 From: takahirom Date: Sun, 11 Aug 2024 11:06:33 +0900 Subject: [PATCH 23/38] Remove auth call to resolve timeout --- .../io/github/droidkaigi/confsched/data/NetworkService.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/data/src/commonMain/kotlin/io/github/droidkaigi/confsched/data/NetworkService.kt b/core/data/src/commonMain/kotlin/io/github/droidkaigi/confsched/data/NetworkService.kt index 32cb41d96..bd582f59c 100644 --- a/core/data/src/commonMain/kotlin/io/github/droidkaigi/confsched/data/NetworkService.kt +++ b/core/data/src/commonMain/kotlin/io/github/droidkaigi/confsched/data/NetworkService.kt @@ -15,7 +15,7 @@ public class NetworkService(public val httpClient: HttpClient, public val authAp public suspend inline operator fun invoke( block: () -> T, ): T = try { - authApi.authIfNeeded() +// authApi.authIfNeeded() block() } catch (e: Throwable) { throw e.toAppError() From 273e5eb48c94f0146764fcedb907ea3dcd197d29 Mon Sep 17 00:00:00 2001 From: isaac Date: Sun, 11 Aug 2024 12:19:20 +0900 Subject: [PATCH 24/38] add title localization --- .../composeResources/values-ja/strings.xml | 4 ++++ .../commonMain/composeResources/values/strings.xml | 4 ++++ .../component/TimetableItemDetailSummaryCard.kt | 12 ++++++++---- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/feature/sessions/src/commonMain/composeResources/values-ja/strings.xml b/feature/sessions/src/commonMain/composeResources/values-ja/strings.xml index 156886204..c4386e53d 100644 --- a/feature/sessions/src/commonMain/composeResources/values-ja/strings.xml +++ b/feature/sessions/src/commonMain/composeResources/values-ja/strings.xml @@ -26,4 +26,8 @@ 場所 言語 カテゴリ + 日時 + 場所 + 対応言語 + カテゴリ diff --git a/feature/sessions/src/commonMain/composeResources/values/strings.xml b/feature/sessions/src/commonMain/composeResources/values/strings.xml index 0cc8ae0f5..b5e5ce791 100644 --- a/feature/sessions/src/commonMain/composeResources/values/strings.xml +++ b/feature/sessions/src/commonMain/composeResources/values/strings.xml @@ -26,4 +26,8 @@ Location Language Category + Date/Time + Location + Supported Languages + Category diff --git a/feature/sessions/src/commonMain/kotlin/io/github/droidkaigi/confsched/sessions/component/TimetableItemDetailSummaryCard.kt b/feature/sessions/src/commonMain/kotlin/io/github/droidkaigi/confsched/sessions/component/TimetableItemDetailSummaryCard.kt index eb0c9ec77..03cbd686c 100644 --- a/feature/sessions/src/commonMain/kotlin/io/github/droidkaigi/confsched/sessions/component/TimetableItemDetailSummaryCard.kt +++ b/feature/sessions/src/commonMain/kotlin/io/github/droidkaigi/confsched/sessions/component/TimetableItemDetailSummaryCard.kt @@ -25,10 +25,14 @@ import androidx.compose.ui.graphics.PathEffect import androidx.compose.ui.graphics.drawscope.Stroke import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.unit.dp +import conference_app_2024.feature.sessions.generated.resources.category_title import conference_app_2024.feature.sessions.generated.resources.content_description_category import conference_app_2024.feature.sessions.generated.resources.content_description_language import conference_app_2024.feature.sessions.generated.resources.content_description_location import conference_app_2024.feature.sessions.generated.resources.content_description_schedule +import conference_app_2024.feature.sessions.generated.resources.language_title +import conference_app_2024.feature.sessions.generated.resources.location_title +import conference_app_2024.feature.sessions.generated.resources.schedule_title import io.github.droidkaigi.confsched.designsystem.theme.KaigiTheme import io.github.droidkaigi.confsched.designsystem.theme.LocalRoomTheme import io.github.droidkaigi.confsched.model.Locale @@ -70,7 +74,7 @@ fun TimetableItemDetailSummaryCard( modifier = Modifier.fillMaxWidth(), imageVector = Icons.Outlined.Schedule, contentDescription = stringResource(SessionsRes.string.content_description_schedule), - title = "日時", + title = stringResource(SessionsRes.string.schedule_title), description = timetableItem.formattedDateTimeString, ) Spacer(Modifier.height(8.dp)) @@ -78,7 +82,7 @@ fun TimetableItemDetailSummaryCard( modifier = Modifier.fillMaxWidth(), imageVector = Icons.Outlined.LocationOn, contentDescription = stringResource(SessionsRes.string.content_description_location), - title = "場所", + title = stringResource(SessionsRes.string.location_title), description = timetableItem.room.nameAndFloor, ) Spacer(Modifier.height(8.dp)) @@ -86,7 +90,7 @@ fun TimetableItemDetailSummaryCard( modifier = Modifier.fillMaxWidth(), imageVector = Icons.Outlined.Language, contentDescription = stringResource(SessionsRes.string.content_description_language), - title = "対応言語", + title = stringResource(SessionsRes.string.language_title), description = timetableItem.getSupportedLangString( getDefaultLocale() == Locale.JAPAN, ), @@ -96,7 +100,7 @@ fun TimetableItemDetailSummaryCard( modifier = Modifier.fillMaxWidth(), imageVector = Icons.Outlined.Category, contentDescription = stringResource(SessionsRes.string.content_description_category), - title = "カテゴリ", + title = stringResource(SessionsRes.string.category_title), description = timetableItem.category.title.currentLangTitle, ) } From 41ccaa7591f0d018806d0e50f0266fab3d1443d5 Mon Sep 17 00:00:00 2001 From: sanao1006 Date: Sun, 11 Aug 2024 12:26:26 +0900 Subject: [PATCH 25/38] Update text from "Read More" to "More". --- .../sessions/src/commonMain/composeResources/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature/sessions/src/commonMain/composeResources/values/strings.xml b/feature/sessions/src/commonMain/composeResources/values/strings.xml index 0cc8ae0f5..4b902c7fe 100644 --- a/feature/sessions/src/commonMain/composeResources/values/strings.xml +++ b/feature/sessions/src/commonMain/composeResources/values/strings.xml @@ -9,7 +9,7 @@ Not Bookmarked image Special - Read more + More Target Audience Archive Slide From 372ab9271ecde7e95693f8dfae89014d31e7acd1 Mon Sep 17 00:00:00 2001 From: vixer93 Date: Sun, 11 Aug 2024 12:29:35 +0900 Subject: [PATCH 26/38] Fix bug --- app-ios/Sources/EventMapFeature/Model/FloorMap.swift | 4 ++-- app-ios/Sources/TimetableFeature/TimetableReducer.swift | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app-ios/Sources/EventMapFeature/Model/FloorMap.swift b/app-ios/Sources/EventMapFeature/Model/FloorMap.swift index 541e1d490..a5647a2fd 100644 --- a/app-ios/Sources/EventMapFeature/Model/FloorMap.swift +++ b/app-ios/Sources/EventMapFeature/Model/FloorMap.swift @@ -1,5 +1,5 @@ import Foundation -import CommonComponents +import Model import SwiftUI public enum FloorMap { @@ -10,7 +10,7 @@ public enum FloorMap { extension FloorMap: Selectable { public var id: Self { self } - public var title: String { + public var caseTitle: String { switch self { case .first: "1F" case .firstBasement: "B1F" diff --git a/app-ios/Sources/TimetableFeature/TimetableReducer.swift b/app-ios/Sources/TimetableFeature/TimetableReducer.swift index 6fd9f2017..98e8bf3fa 100644 --- a/app-ios/Sources/TimetableFeature/TimetableReducer.swift +++ b/app-ios/Sources/TimetableFeature/TimetableReducer.swift @@ -96,6 +96,9 @@ public struct TimetableReducer : Sendable{ } case .requestDay(.timetableItemTapped): return .none + + case .requestDay(.searchTapped): + return .none } } } From d3a68b738751ad2561f2a9ac1d38cd1c2d15cd8e Mon Sep 17 00:00:00 2001 From: vixer93 Date: Sun, 11 Aug 2024 12:33:39 +0900 Subject: [PATCH 27/38] Add event map tests --- .../EventMapFeatureTests/EventMapTests.swift | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/app-ios/Tests/EventMapFeatureTests/EventMapTests.swift b/app-ios/Tests/EventMapFeatureTests/EventMapTests.swift index 97f967f6e..15867075c 100644 --- a/app-ios/Tests/EventMapFeatureTests/EventMapTests.swift +++ b/app-ios/Tests/EventMapFeatureTests/EventMapTests.swift @@ -1,3 +1,15 @@ -import Foundation +import XCTest +import ComposableArchitecture +@testable import EventMapFeature -// TODO: Implement tests for EventMapView +final class EventMap_iosTests: XCTestCase { + @MainActor func testFloorMapSelected() async throws { + let store = TestStore(initialState: EventMapReducer.State()) { + EventMapReducer() + } + + await store.send(.view(.selectFloorMap(.firstBasement))) { + $0.selectedFloorMap = .firstBasement + } + } +} From 3987aabda50abc2e80c62d0ad71fdfa90a3ecceb Mon Sep 17 00:00:00 2001 From: vixer93 Date: Sun, 11 Aug 2024 12:33:54 +0900 Subject: [PATCH 28/38] Fix build error in favorite feature test --- .../Tests/FavoriteFeatureTests/FavoriteTests.swift | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/app-ios/Tests/FavoriteFeatureTests/FavoriteTests.swift b/app-ios/Tests/FavoriteFeatureTests/FavoriteTests.swift index 4cbde630c..52de537ff 100644 --- a/app-ios/Tests/FavoriteFeatureTests/FavoriteTests.swift +++ b/app-ios/Tests/FavoriteFeatureTests/FavoriteTests.swift @@ -3,14 +3,5 @@ import ComposableArchitecture @testable import FavoriteFeature final class FavoriteTests: XCTestCase { - @MainActor func testExample() async throws { - let store = TestStore( - initialState: FavoriteReducer.State(text: "Test") - ) { - FavoriteReducer() - } - await store.send(.onAppear) { - $0.text = "Favorite Feature" - } - } + // TODO: Add favorite feature tests } From 9f13e58f3abd71abf8ba055499e350c444f1e25f Mon Sep 17 00:00:00 2001 From: takahirom Date: Sun, 11 Aug 2024 12:49:04 +0900 Subject: [PATCH 29/38] Remove concurrency for unit test --- .github/workflows/unit-test.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 9b6aea9ec..96d0cf513 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -10,10 +10,6 @@ on: run-name: "unit-test by ${{ github.actor }}" -concurrency: - group: ${{ github.workflow }}-${{ github.head_ref }} - cancel-in-progress: true - permissions: { } jobs: From 119e9af634e31498de1b6c74f1c5c42918f2f448 Mon Sep 17 00:00:00 2001 From: takahirom Date: Sun, 11 Aug 2024 13:09:53 +0900 Subject: [PATCH 30/38] Add Guide to see Composable Preview --- README.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/README.md b/README.md index 0d5742271..c819642f3 100644 --- a/README.md +++ b/README.md @@ -222,6 +222,23 @@ fun TimetableScreen( uiState = uiState, ``` +### How to Check Composable Preview + + +Currently, Android Studio doesn't support Composable Preview in the commonMain sourceset. Therefore, we are using the Roborazzi IDE Plugin to check Composable Preview. + +When you open a Composable file, you can see the RoborazziPreview on the right side of the file. + +image + +To capture a screenshot of the Composable Preview, run the Roborazzi Gradle task in the RoborazziPreview. + +image + +After running the task, you should see the screenshot in the RoborazziPreview. + +![image](https://github.com/user-attachments/assets/8b38eb69-b737-4c2f-8e86-e3e5805d82e5) + ### Understanding the App's Testing The DroidKaigi 2024 official app utilizes a comprehensive testing strategy that combines: From b6fe810488240e1e0c6d37ee554b765ed7047ddc Mon Sep 17 00:00:00 2001 From: sanao1006 Date: Sun, 11 Aug 2024 13:17:31 +0900 Subject: [PATCH 31/38] Implement the app bar "About DroidKaigi" in the About list screen --- .../src/commonMain/composeResources/values-ja/strings.xml | 1 + .../about/src/commonMain/composeResources/values/strings.xml | 1 + .../io/github/droidkaigi/confsched/about/AboutScreen.kt | 5 +++++ 3 files changed, 7 insertions(+) diff --git a/feature/about/src/commonMain/composeResources/values-ja/strings.xml b/feature/about/src/commonMain/composeResources/values-ja/strings.xml index c3e81b146..3d33ba080 100644 --- a/feature/about/src/commonMain/composeResources/values-ja/strings.xml +++ b/feature/about/src/commonMain/composeResources/values-ja/strings.xml @@ -15,6 +15,7 @@ ライセンス プライバシーポリシー アプリバージョン + Droidkaigiについて YouTube X Medium diff --git a/feature/about/src/commonMain/composeResources/values/strings.xml b/feature/about/src/commonMain/composeResources/values/strings.xml index acf71b163..0d4e6c7b3 100644 --- a/feature/about/src/commonMain/composeResources/values/strings.xml +++ b/feature/about/src/commonMain/composeResources/values/strings.xml @@ -15,6 +15,7 @@ License Privacy Policy App Version + About Droidkaigi YouTube X Medium diff --git a/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/AboutScreen.kt b/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/AboutScreen.kt index bba67b9b4..db33eb09d 100644 --- a/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/AboutScreen.kt +++ b/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/AboutScreen.kt @@ -7,6 +7,8 @@ import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Scaffold import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable import androidx.compose.runtime.remember @@ -18,6 +20,7 @@ import androidx.navigation.NavController import androidx.navigation.NavGraph.Companion.findStartDestination import androidx.navigation.NavGraphBuilder import androidx.navigation.compose.composable +import conference_app_2024.feature.about.generated.resources.about_droidkaigi import io.github.droidkaigi.confsched.about.section.AboutDroidKaigiDetail import io.github.droidkaigi.confsched.about.section.AboutFooterLinks import io.github.droidkaigi.confsched.about.section.aboutCredits @@ -26,6 +29,7 @@ import io.github.droidkaigi.confsched.model.AboutItem import io.github.droidkaigi.confsched.model.AboutItem.Medium import io.github.droidkaigi.confsched.model.AboutItem.X import io.github.droidkaigi.confsched.model.AboutItem.YouTube +import org.jetbrains.compose.resources.stringResource const val aboutScreenRoute = "about" @@ -68,6 +72,7 @@ fun AboutScreen( Scaffold( modifier = modifier.testTag(AboutScreenTestTag.Screen), + topBar = { TopAppBar(title = { Text(stringResource(AboutRes.string.about_droidkaigi)) }) }, snackbarHost = { SnackbarHost(hostState = snackbarHostState) }, contentWindowInsets = WindowInsets( left = contentPadding.calculateLeftPadding(layoutDirection), From 545810c2ce56adfedca7a7c08fb3ffaf9bcffa1b Mon Sep 17 00:00:00 2001 From: NUmeroAndDev Date: Sun, 11 Aug 2024 13:19:48 +0900 Subject: [PATCH 32/38] Added fixed colors --- .../designsystem/theme/FixedAccentColors.kt | 88 +++++++++++++++++++ .../confsched/designsystem/theme/Theme.kt | 26 +++++- 2 files changed, 110 insertions(+), 4 deletions(-) create mode 100644 core/designsystem/src/commonMain/kotlin/io/github/droidkaigi/confsched/designsystem/theme/FixedAccentColors.kt diff --git a/core/designsystem/src/commonMain/kotlin/io/github/droidkaigi/confsched/designsystem/theme/FixedAccentColors.kt b/core/designsystem/src/commonMain/kotlin/io/github/droidkaigi/confsched/designsystem/theme/FixedAccentColors.kt new file mode 100644 index 000000000..fd9f3b44f --- /dev/null +++ b/core/designsystem/src/commonMain/kotlin/io/github/droidkaigi/confsched/designsystem/theme/FixedAccentColors.kt @@ -0,0 +1,88 @@ +package io.github.droidkaigi.confsched.designsystem.theme + +import androidx.compose.material3.ColorScheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.ReadOnlyComposable +import androidx.compose.runtime.compositionLocalOf +import androidx.compose.ui.graphics.Color + +data class FixedAccentColors( + val primaryFixed: Color, + val onPrimaryFixed: Color, + val secondaryFixed: Color, + val onSecondaryFixed: Color, + val tertiaryFixed: Color, + val onTertiaryFixed: Color, + val primaryFixedDim: Color, + val secondaryFixedDim: Color, + val tertiaryFixedDim: Color, +) + +@Suppress("CompositionLocalAllowlist") +internal val LocalFixedAccentColors = compositionLocalOf { + FixedAccentColors( + primaryFixed = darkScheme.primaryContainer, + onPrimaryFixed = darkScheme.onPrimaryContainer, + secondaryFixed = darkScheme.secondaryContainer, + onSecondaryFixed = darkScheme.onSecondaryContainer, + tertiaryFixed = darkScheme.tertiaryContainer, + onTertiaryFixed = darkScheme.onTertiaryContainer, + primaryFixedDim = darkScheme.primary, + secondaryFixedDim = darkScheme.secondary, + tertiaryFixedDim = darkScheme.tertiary, + ) +} + +@Suppress("UnusedReceiverParameter") +val ColorScheme.primaryFixed: Color + @Composable + @ReadOnlyComposable + get() = LocalFixedAccentColors.current.primaryFixed + +@Suppress("UnusedReceiverParameter") +val ColorScheme.onPrimaryFixed: Color + @Composable + @ReadOnlyComposable + get() = LocalFixedAccentColors.current.onPrimaryFixed + +@Suppress("UnusedReceiverParameter") +val ColorScheme.secondaryFixed: Color + @Composable + @ReadOnlyComposable + get() = LocalFixedAccentColors.current.secondaryFixed + +@Suppress("UnusedReceiverParameter") +val ColorScheme.onSecondaryFixed: Color + @Composable + @ReadOnlyComposable + get() = LocalFixedAccentColors.current.onSecondaryFixed + +@Suppress("UnusedReceiverParameter") +val ColorScheme.tertiaryFixed: Color + @Composable + @ReadOnlyComposable + get() = LocalFixedAccentColors.current.tertiaryFixed + +@Suppress("UnusedReceiverParameter") +val ColorScheme.onTertiaryFixed: Color + @Composable + @ReadOnlyComposable + get() = LocalFixedAccentColors.current.onTertiaryFixed + +@Suppress("UnusedReceiverParameter") +val ColorScheme.primaryFixedDim: Color + @Composable + @ReadOnlyComposable + get() = LocalFixedAccentColors.current.primaryFixedDim + +@Suppress("UnusedReceiverParameter") +val ColorScheme.secondaryFixedDim: Color + @Composable + @ReadOnlyComposable + get() = LocalFixedAccentColors.current.secondaryFixedDim + +@Suppress("UnusedReceiverParameter") +val ColorScheme.tertiaryFixedDim: Color + @Composable + @ReadOnlyComposable + get() = LocalFixedAccentColors.current.tertiaryFixedDim diff --git a/core/designsystem/src/commonMain/kotlin/io/github/droidkaigi/confsched/designsystem/theme/Theme.kt b/core/designsystem/src/commonMain/kotlin/io/github/droidkaigi/confsched/designsystem/theme/Theme.kt index ca9f0ad95..b5082f359 100644 --- a/core/designsystem/src/commonMain/kotlin/io/github/droidkaigi/confsched/designsystem/theme/Theme.kt +++ b/core/designsystem/src/commonMain/kotlin/io/github/droidkaigi/confsched/designsystem/theme/Theme.kt @@ -6,6 +6,8 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.darkColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.ui.graphics.Color private val lightScheme = lightColorScheme( primary = primaryLight, @@ -45,7 +47,7 @@ private val lightScheme = lightColorScheme( surfaceContainerHighest = surfaceContainerHighestLight, ) -private val darkScheme = darkColorScheme( +internal val darkScheme = darkColorScheme( primary = primaryDark, onPrimary = onPrimaryDark, primaryContainer = primaryContainerDark, @@ -235,16 +237,32 @@ private val highContrastDarkColorScheme = darkColorScheme( surfaceContainerHighest = surfaceContainerHighestDarkHighContrast, ) +private val fixedAccentColors = FixedAccentColors( + primaryFixed = Color(0xFF67FF8D), + onPrimaryFixed = Color(0xFF002109), + secondaryFixed = Color(0xFFA3F5AD), + onSecondaryFixed = Color(0xFF002109), + tertiaryFixed = Color(0xFFFFD7F0), + onTertiaryFixed = Color(0xFF3A0032), + primaryFixedDim = Color(0xFF1CE46B), + secondaryFixedDim = Color(0xFF88D893), + tertiaryFixedDim = Color(0xFFFFACE7), +) + @Composable fun KaigiTheme( - content: - @Composable () -> Unit, + content: @Composable () -> Unit, ) { val colorScheme = darkScheme MaterialTheme( colorScheme = colorScheme, typography = appTypography(), - content = content, + content = { + CompositionLocalProvider( + value = LocalFixedAccentColors provides fixedAccentColors, + content = content, + ) + }, ) } From 74d459b2c77e2835532de87e3c426a9a157a5628 Mon Sep 17 00:00:00 2001 From: ttanaka330 Date: Sun, 11 Aug 2024 13:48:18 +0900 Subject: [PATCH 33/38] Centered Speaker names in session details --- .../sessions/component/TimetableItemDetailHeadline.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/feature/sessions/src/commonMain/kotlin/io/github/droidkaigi/confsched/sessions/component/TimetableItemDetailHeadline.kt b/feature/sessions/src/commonMain/kotlin/io/github/droidkaigi/confsched/sessions/component/TimetableItemDetailHeadline.kt index a0a606dd7..26547ca82 100644 --- a/feature/sessions/src/commonMain/kotlin/io/github/droidkaigi/confsched/sessions/component/TimetableItemDetailHeadline.kt +++ b/feature/sessions/src/commonMain/kotlin/io/github/droidkaigi/confsched/sessions/component/TimetableItemDetailHeadline.kt @@ -17,6 +17,7 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.unit.dp @@ -60,7 +61,9 @@ fun TimetableItemDetailHeadline( ) Spacer(modifier = Modifier.height(16.dp)) timetableItem.speakers.forEach { speaker -> - Row { + Row( + verticalAlignment = Alignment.CenterVertically, + ) { Image( painter = rememberAsyncImagePainter(speaker.iconUrl), contentDescription = null, From 77261fe507b117f702d65e1a3dd1042528b48cfa Mon Sep 17 00:00:00 2001 From: todayama_r <13657682+Corvus400@users.noreply.github.com> Date: Sun, 11 Aug 2024 14:00:57 +0900 Subject: [PATCH 34/38] :sparkles: Added a 'View Map' text button to the About screen. --- .../github/droidkaigi/confsched/KaigiApp.kt | 3 ++ .../droidkaigi/confsched/model/AboutItem.kt | 1 + .../droidkaigi/confsched/about/AboutScreen.kt | 6 +++- .../AboutDroidKaigiDetailSummaryCard.kt | 30 +++++++++++++++---- .../about/section/AboutDroidKaigiDetail.kt | 6 +++- 5 files changed, 38 insertions(+), 8 deletions(-) diff --git a/app-android/src/main/java/io/github/droidkaigi/confsched/KaigiApp.kt b/app-android/src/main/java/io/github/droidkaigi/confsched/KaigiApp.kt index e82982422..e3bab42f2 100644 --- a/app-android/src/main/java/io/github/droidkaigi/confsched/KaigiApp.kt +++ b/app-android/src/main/java/io/github/droidkaigi/confsched/KaigiApp.kt @@ -148,6 +148,9 @@ private fun NavGraphBuilder.mainScreen( "https://portal.droidkaigi.jp/en" } when (aboutItem) { + AboutItem.Map -> externalNavController.navigate( + url = "https://goo.gl/maps/vv9sE19JvRjYKtSP9" + ) AboutItem.Sponsors -> navController.navigate(sponsorsScreenRoute) AboutItem.CodeOfConduct -> { externalNavController.navigate( diff --git a/core/model/src/commonMain/kotlin/io/github/droidkaigi/confsched/model/AboutItem.kt b/core/model/src/commonMain/kotlin/io/github/droidkaigi/confsched/model/AboutItem.kt index 579ef985d..addd285c0 100644 --- a/core/model/src/commonMain/kotlin/io/github/droidkaigi/confsched/model/AboutItem.kt +++ b/core/model/src/commonMain/kotlin/io/github/droidkaigi/confsched/model/AboutItem.kt @@ -1,6 +1,7 @@ package io.github.droidkaigi.confsched.model sealed class AboutItem { + data object Map : AboutItem() data object Sponsors : AboutItem() data object Contributors : AboutItem() data object Staff : AboutItem() diff --git a/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/AboutScreen.kt b/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/AboutScreen.kt index bba67b9b4..a7414f679 100644 --- a/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/AboutScreen.kt +++ b/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/AboutScreen.kt @@ -81,7 +81,11 @@ fun AboutScreen( contentPadding = padding, ) { item { - AboutDroidKaigiDetail() + AboutDroidKaigiDetail( + onViewMapClick = { + onAboutItemClick(AboutItem.Map) + } + ) } aboutCredits( onSponsorsItemClick = { diff --git a/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/component/AboutDroidKaigiDetailSummaryCard.kt b/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/component/AboutDroidKaigiDetailSummaryCard.kt index 8a33a2b1b..c7615ac56 100644 --- a/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/component/AboutDroidKaigiDetailSummaryCard.kt +++ b/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/component/AboutDroidKaigiDetailSummaryCard.kt @@ -2,8 +2,11 @@ package io.github.droidkaigi.confsched.about.component import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons.Outlined import androidx.compose.material.icons.outlined.Place @@ -19,8 +22,10 @@ import androidx.compose.ui.unit.dp import conference_app_2024.feature.about.generated.resources.date_description import conference_app_2024.feature.about.generated.resources.date_title import conference_app_2024.feature.about.generated.resources.place_description +import conference_app_2024.feature.about.generated.resources.place_link import conference_app_2024.feature.about.generated.resources.place_title import io.github.droidkaigi.confsched.about.AboutRes +import io.github.droidkaigi.confsched.designsystem.component.ClickableLinkText import io.github.droidkaigi.confsched.designsystem.theme.KaigiTheme import org.jetbrains.compose.resources.stringResource import org.jetbrains.compose.ui.tooling.preview.Preview @@ -28,6 +33,7 @@ import org.jetbrains.compose.ui.tooling.preview.Preview @Composable fun AboutDroidKaigiDetailSummaryCard( modifier: Modifier = Modifier, + onViewMapClick: () -> Unit, ) { Card( shape = RoundedCornerShape(12.dp), @@ -49,11 +55,21 @@ fun AboutDroidKaigiDetailSummaryCard( label = stringResource(AboutRes.string.date_title), content = stringResource(AboutRes.string.date_description), ) - AboutDroidKaigiDetailSummaryCardRow( - leadingIcon = Outlined.Place, - label = stringResource(AboutRes.string.place_title), - content = stringResource(AboutRes.string.place_description), - ) + Row { + AboutDroidKaigiDetailSummaryCardRow( + leadingIcon = Outlined.Place, + label = stringResource(AboutRes.string.place_title), + content = stringResource(AboutRes.string.place_description), + ) + Spacer(modifier = Modifier.width(8.dp)) + ClickableLinkText( + style = MaterialTheme.typography.bodyMedium, + content = stringResource(AboutRes.string.place_link), + onLinkClick = { _ -> onViewMapClick() }, + regex = stringResource(AboutRes.string.place_link).toRegex(), + ) + } + } } } @@ -63,7 +79,9 @@ fun AboutDroidKaigiDetailSummaryCard( fun AboutDroidKaigiDetailSummaryCardPreview() { KaigiTheme { Surface { - AboutDroidKaigiDetailSummaryCard() + AboutDroidKaigiDetailSummaryCard( + onViewMapClick = {}, + ) } } } diff --git a/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/section/AboutDroidKaigiDetail.kt b/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/section/AboutDroidKaigiDetail.kt index a38d20821..74f17dec8 100644 --- a/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/section/AboutDroidKaigiDetail.kt +++ b/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/section/AboutDroidKaigiDetail.kt @@ -31,6 +31,7 @@ object AboutDetailSectionTestTag { @Composable fun AboutDroidKaigiDetail( modifier: Modifier = Modifier, + onViewMapClick: () -> Unit, ) { Column( modifier = modifier.testTag(AboutDetailSectionTestTag.Section), @@ -61,6 +62,7 @@ fun AboutDroidKaigiDetail( top = 12.dp, end = 16.dp, ), + onViewMapClick = onViewMapClick, ) } } @@ -70,7 +72,9 @@ fun AboutDroidKaigiDetail( fun AboutDroidKaigiDetailPreview() { KaigiTheme { Surface { - AboutDroidKaigiDetail() + AboutDroidKaigiDetail( + onViewMapClick = {}, + ) } } } From fbefcaf5da92b001921e71f897469e24149b5096 Mon Sep 17 00:00:00 2001 From: todayama_r <13657682+Corvus400@users.noreply.github.com> Date: Sun, 11 Aug 2024 14:02:09 +0900 Subject: [PATCH 35/38] :wrench: ./gradlew detekt --auto-correct --- .../src/main/java/io/github/droidkaigi/confsched/KaigiApp.kt | 2 +- .../kotlin/io/github/droidkaigi/confsched/about/AboutScreen.kt | 2 +- .../about/component/AboutDroidKaigiDetailSummaryCard.kt | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/app-android/src/main/java/io/github/droidkaigi/confsched/KaigiApp.kt b/app-android/src/main/java/io/github/droidkaigi/confsched/KaigiApp.kt index e3bab42f2..110fed851 100644 --- a/app-android/src/main/java/io/github/droidkaigi/confsched/KaigiApp.kt +++ b/app-android/src/main/java/io/github/droidkaigi/confsched/KaigiApp.kt @@ -149,7 +149,7 @@ private fun NavGraphBuilder.mainScreen( } when (aboutItem) { AboutItem.Map -> externalNavController.navigate( - url = "https://goo.gl/maps/vv9sE19JvRjYKtSP9" + url = "https://goo.gl/maps/vv9sE19JvRjYKtSP9", ) AboutItem.Sponsors -> navController.navigate(sponsorsScreenRoute) AboutItem.CodeOfConduct -> { diff --git a/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/AboutScreen.kt b/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/AboutScreen.kt index a7414f679..683757243 100644 --- a/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/AboutScreen.kt +++ b/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/AboutScreen.kt @@ -84,7 +84,7 @@ fun AboutScreen( AboutDroidKaigiDetail( onViewMapClick = { onAboutItemClick(AboutItem.Map) - } + }, ) } aboutCredits( diff --git a/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/component/AboutDroidKaigiDetailSummaryCard.kt b/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/component/AboutDroidKaigiDetailSummaryCard.kt index c7615ac56..965c469ed 100644 --- a/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/component/AboutDroidKaigiDetailSummaryCard.kt +++ b/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/component/AboutDroidKaigiDetailSummaryCard.kt @@ -69,7 +69,6 @@ fun AboutDroidKaigiDetailSummaryCard( regex = stringResource(AboutRes.string.place_link).toRegex(), ) } - } } } From ec8a44ace460fe796a2626058a0915cf2a71636b Mon Sep 17 00:00:00 2001 From: rey <41291352+CookieySun@users.noreply.github.com> Date: Sun, 11 Aug 2024 14:30:35 +0900 Subject: [PATCH 36/38] Fix typo CONTRIBUTING.ja.md --- CONTRIBUTING.ja.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.ja.md b/CONTRIBUTING.ja.md index bea4a226a..0e46acb4c 100644 --- a/CONTRIBUTING.ja.md +++ b/CONTRIBUTING.ja.md @@ -35,7 +35,7 @@ Android Studioを開いて、"Open"からダウンロードしたリポジトリ IssueがないPull Requestでも大丈夫です。その場合はPull Requestに理由、原因、解決策などの詳細をご記入ください。 -### 4. コントリビュートの始める +### 4. コントリビュートの始め方 もし取り組みたいタスクを見つけたら、他の人と重複して作業しないようにするためIssueに ":raising_hand:" などのコメントをしてください。 なるべく早くいただいたコメントにリアクションしますが、Issueにコメントを書いたらタスクに着手していただいて構いません! From b03668bda284b7d2a5e63dccb66441d7edb5b099 Mon Sep 17 00:00:00 2001 From: todayama_r <13657682+Corvus400@users.noreply.github.com> Date: Sun, 11 Aug 2024 14:43:59 +0900 Subject: [PATCH 37/38] :wrench: Fixed the display issue that occurred on devices with small screen sizes. --- .../AboutDroidKaigiDetailSummaryCard.kt | 26 ++++++------------- .../AboutDroidKaigiDetailSummaryCardRow.kt | 12 ++++++--- 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/component/AboutDroidKaigiDetailSummaryCard.kt b/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/component/AboutDroidKaigiDetailSummaryCard.kt index 965c469ed..9cc39e827 100644 --- a/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/component/AboutDroidKaigiDetailSummaryCard.kt +++ b/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/component/AboutDroidKaigiDetailSummaryCard.kt @@ -2,11 +2,8 @@ package io.github.droidkaigi.confsched.about.component import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons.Outlined import androidx.compose.material.icons.outlined.Place @@ -25,7 +22,6 @@ import conference_app_2024.feature.about.generated.resources.place_description import conference_app_2024.feature.about.generated.resources.place_link import conference_app_2024.feature.about.generated.resources.place_title import io.github.droidkaigi.confsched.about.AboutRes -import io.github.droidkaigi.confsched.designsystem.component.ClickableLinkText import io.github.droidkaigi.confsched.designsystem.theme.KaigiTheme import org.jetbrains.compose.resources.stringResource import org.jetbrains.compose.ui.tooling.preview.Preview @@ -55,20 +51,14 @@ fun AboutDroidKaigiDetailSummaryCard( label = stringResource(AboutRes.string.date_title), content = stringResource(AboutRes.string.date_description), ) - Row { - AboutDroidKaigiDetailSummaryCardRow( - leadingIcon = Outlined.Place, - label = stringResource(AboutRes.string.place_title), - content = stringResource(AboutRes.string.place_description), - ) - Spacer(modifier = Modifier.width(8.dp)) - ClickableLinkText( - style = MaterialTheme.typography.bodyMedium, - content = stringResource(AboutRes.string.place_link), - onLinkClick = { _ -> onViewMapClick() }, - regex = stringResource(AboutRes.string.place_link).toRegex(), - ) - } + val placeContent = stringResource(AboutRes.string.place_description) + .plus(" " + stringResource(AboutRes.string.place_link)) + AboutDroidKaigiDetailSummaryCardRow( + leadingIcon = Outlined.Place, + label = stringResource(AboutRes.string.place_title), + content = placeContent, + onLinkClick = { _ -> onViewMapClick() }, + ) } } } diff --git a/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/component/AboutDroidKaigiDetailSummaryCardRow.kt b/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/component/AboutDroidKaigiDetailSummaryCardRow.kt index 84957cd27..030d71c36 100644 --- a/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/component/AboutDroidKaigiDetailSummaryCardRow.kt +++ b/feature/about/src/commonMain/kotlin/io/github/droidkaigi/confsched/about/component/AboutDroidKaigiDetailSummaryCardRow.kt @@ -17,7 +17,11 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp +import conference_app_2024.feature.about.generated.resources.place_link +import io.github.droidkaigi.confsched.about.AboutRes +import io.github.droidkaigi.confsched.designsystem.component.ClickableLinkText import io.github.droidkaigi.confsched.designsystem.theme.KaigiTheme +import org.jetbrains.compose.resources.stringResource import org.jetbrains.compose.ui.tooling.preview.Preview @Composable @@ -27,6 +31,7 @@ fun AboutDroidKaigiDetailSummaryCardRow( content: String, modifier: Modifier = Modifier, leadingIconContentDescription: String? = null, + onLinkClick: (url: String) -> Unit = {}, ) { Row( verticalAlignment = Alignment.CenterVertically, @@ -45,10 +50,11 @@ fun AboutDroidKaigiDetailSummaryCardRow( style = MaterialTheme.typography.labelLarge, ) Spacer(modifier = Modifier.width(12.dp)) - Text( - text = content, - fontWeight = FontWeight.Bold, + ClickableLinkText( style = MaterialTheme.typography.bodyMedium, + content = content, + onLinkClick = onLinkClick, + regex = stringResource(AboutRes.string.place_link).toRegex(), ) } } From de4086348e7ff66bbbfd05c7cd46a72875850166 Mon Sep 17 00:00:00 2001 From: rey <41291352+CookieySun@users.noreply.github.com> Date: Sun, 11 Aug 2024 15:06:35 +0900 Subject: [PATCH 38/38] Changed to end with a verb --- CONTRIBUTING.ja.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.ja.md b/CONTRIBUTING.ja.md index 0e46acb4c..e02e735ae 100644 --- a/CONTRIBUTING.ja.md +++ b/CONTRIBUTING.ja.md @@ -35,7 +35,7 @@ Android Studioを開いて、"Open"からダウンロードしたリポジトリ IssueがないPull Requestでも大丈夫です。その場合はPull Requestに理由、原因、解決策などの詳細をご記入ください。 -### 4. コントリビュートの始め方 +### 4. コントリビュートを始める もし取り組みたいタスクを見つけたら、他の人と重複して作業しないようにするためIssueに ":raising_hand:" などのコメントをしてください。 なるべく早くいただいたコメントにリアクションしますが、Issueにコメントを書いたらタスクに着手していただいて構いません!