diff --git a/androidApp/src/main/AndroidManifest.xml b/androidApp/src/main/AndroidManifest.xml
index 08d01dd..3779918 100644
--- a/androidApp/src/main/AndroidManifest.xml
+++ b/androidApp/src/main/AndroidManifest.xml
@@ -20,6 +20,8 @@
+
\ No newline at end of file
diff --git a/androidApp/src/main/java/dev/haroldjose/familysharedlist/android/app/MainActivity.kt b/androidApp/src/main/java/dev/haroldjose/familysharedlist/android/app/MainActivity.kt
index 3247d93..6a62b66 100644
--- a/androidApp/src/main/java/dev/haroldjose/familysharedlist/android/app/MainActivity.kt
+++ b/androidApp/src/main/java/dev/haroldjose/familysharedlist/android/app/MainActivity.kt
@@ -13,6 +13,7 @@ import com.google.firebase.analytics.ktx.analytics
import com.google.firebase.ktx.Firebase
import dev.haroldjose.familysharedlist.AndroidPlatform
import dev.haroldjose.familysharedlist.android.presentationLayer.pages.navigator.views.NavigatorPage
+import dev.haroldjose.familysharedlist.android.presentationLayer.pages.navigator.views.Router
import org.koin.androidx.compose.KoinAndroidContext
import org.koin.core.annotation.KoinExperimentalAPI
@@ -26,6 +27,8 @@ class MainActivity : ComponentActivity() {
AndroidPlatform.androidContextForKmm = this
AndroidPlatform.isDebuggable = (0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE)
+
+ var initialRoute = handleInitialRoute()
setContent {
MyApplicationTheme {
Surface(
@@ -33,10 +36,28 @@ class MainActivity : ComponentActivity() {
color = MaterialTheme.colorScheme.background
) {
KoinAndroidContext() {
- NavigatorPage()
+ NavigatorPage(
+ initialRoute = initialRoute
+ )
}
}
}
}
}
+
+ private fun handleInitialRoute(): Router {
+
+ //handle shortcuts
+ val shortcutValue = intent.getStringExtra("shortcut_key")
+ when (shortcutValue) {
+
+ Router.QUICK_INSERT.value -> {
+ return Router.QUICK_INSERT
+ }
+
+ else -> {
+ return Router.FAMILY_LIST
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/androidApp/src/main/java/dev/haroldjose/familysharedlist/android/presentationLayer/pages/navigator/viewmodels/INavigatorViewModel.kt b/androidApp/src/main/java/dev/haroldjose/familysharedlist/android/presentationLayer/pages/navigator/viewmodels/INavigatorViewModel.kt
index 4adb0c9..58b0e7f 100644
--- a/androidApp/src/main/java/dev/haroldjose/familysharedlist/android/presentationLayer/pages/navigator/viewmodels/INavigatorViewModel.kt
+++ b/androidApp/src/main/java/dev/haroldjose/familysharedlist/android/presentationLayer/pages/navigator/viewmodels/INavigatorViewModel.kt
@@ -1,9 +1,10 @@
package dev.haroldjose.familysharedlist.android.presentationLayer.pages.navigator.viewmodels
import androidx.navigation.NavHostController
+import dev.haroldjose.familysharedlist.android.presentationLayer.pages.navigator.views.Router
interface INavigatorViewModel {
var viewState: NavigatorViewState
- suspend fun checkIfNeedToCreateNewAccount(navController: NavHostController)
+ suspend fun checkIfNeedToCreateNewAccount(navController: NavHostController, initialRoute: Router)
}
\ No newline at end of file
diff --git a/androidApp/src/main/java/dev/haroldjose/familysharedlist/android/presentationLayer/pages/navigator/viewmodels/NavigatorViewModel.kt b/androidApp/src/main/java/dev/haroldjose/familysharedlist/android/presentationLayer/pages/navigator/viewmodels/NavigatorViewModel.kt
index 0b124fd..7f4d39e 100644
--- a/androidApp/src/main/java/dev/haroldjose/familysharedlist/android/presentationLayer/pages/navigator/viewmodels/NavigatorViewModel.kt
+++ b/androidApp/src/main/java/dev/haroldjose/familysharedlist/android/presentationLayer/pages/navigator/viewmodels/NavigatorViewModel.kt
@@ -5,7 +5,7 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.lifecycle.ViewModel
import androidx.navigation.NavHostController
-import dev.haroldjose.familysharedlist.android.presentationLayer.pages.navigator.views.NavigatorRouter
+import dev.haroldjose.familysharedlist.android.presentationLayer.pages.navigator.views.Router
import dev.haroldjose.familysharedlist.domainLayer.usecases.account.GetOrCreateAccountFromLocalUuidUseCase
import dev.haroldjose.familysharedlist.services.firebase.IFirebaseCrashlytics
@@ -15,12 +15,12 @@ class NavigatorViewModel(
): ViewModel(), INavigatorViewModel {
override var viewState: NavigatorViewState by mutableStateOf(NavigatorViewState.Initial)
- override suspend fun checkIfNeedToCreateNewAccount(navController: NavHostController) {
+ override suspend fun checkIfNeedToCreateNewAccount(navController: NavHostController, initialRoute: Router) {
viewState = NavigatorViewState.Loading
try {
getOrCreateAccountFromLocalUuidUseCase.execute()
viewState = NavigatorViewState.Success
- navController.navigate(NavigatorRouter.FAMILY_LIST.value)
+ navController.navigate(initialRoute.value)
} catch (e: Throwable) {
crashlytics.record(e)
viewState = NavigatorViewState.Error(e.message ?: "Ocorreu um erro inesperado. Tente novamente.")
diff --git a/androidApp/src/main/java/dev/haroldjose/familysharedlist/android/presentationLayer/pages/navigator/viewmodels/NavigatorViewModelMock.kt b/androidApp/src/main/java/dev/haroldjose/familysharedlist/android/presentationLayer/pages/navigator/viewmodels/NavigatorViewModelMock.kt
index b881033..9d4ef7c 100644
--- a/androidApp/src/main/java/dev/haroldjose/familysharedlist/android/presentationLayer/pages/navigator/viewmodels/NavigatorViewModelMock.kt
+++ b/androidApp/src/main/java/dev/haroldjose/familysharedlist/android/presentationLayer/pages/navigator/viewmodels/NavigatorViewModelMock.kt
@@ -2,8 +2,9 @@ package dev.haroldjose.familysharedlist.android.presentationLayer.pages.navigato
import androidx.lifecycle.ViewModel
import androidx.navigation.NavHostController
+import dev.haroldjose.familysharedlist.android.presentationLayer.pages.navigator.views.Router
class NavigatorViewModelMock(): ViewModel(), INavigatorViewModel {
override var viewState: NavigatorViewState = NavigatorViewState.Initial
- override suspend fun checkIfNeedToCreateNewAccount(navController: NavHostController) {}
+ override suspend fun checkIfNeedToCreateNewAccount(navController: NavHostController,initialRoute: Router) {}
}
\ No newline at end of file
diff --git a/androidApp/src/main/java/dev/haroldjose/familysharedlist/android/presentationLayer/pages/navigator/views/NavigatorPage.kt b/androidApp/src/main/java/dev/haroldjose/familysharedlist/android/presentationLayer/pages/navigator/views/NavigatorPage.kt
index 31e981e..2898e65 100644
--- a/androidApp/src/main/java/dev/haroldjose/familysharedlist/android/presentationLayer/pages/navigator/views/NavigatorPage.kt
+++ b/androidApp/src/main/java/dev/haroldjose/familysharedlist/android/presentationLayer/pages/navigator/views/NavigatorPage.kt
@@ -40,32 +40,33 @@ fun NavigatorPage(
navigatorViewModel: INavigatorViewModel = koinViewModel(),
quickInsertListViewModel: IQuickInsertListViewModel = koinViewModel(),
settingsViewModel: ISettingsViewModel = koinViewModel(),
- familyListViewModel: IFamilyListViewModel = koinViewModel()
+ familyListViewModel: IFamilyListViewModel = koinViewModel(),
+ initialRoute: Router
) {
val coroutineScope: CoroutineScope = rememberCoroutineScope()
val navController: NavHostController = rememberNavController()
- quickInsertListViewModel.goToFamilyListPage = { navController.navigate(NavigatorRouter.FAMILY_LIST.value) }
- settingsViewModel.goBack = { navController.navigate(NavigatorRouter.FAMILY_LIST.value) }
- familyListViewModel.goToSetting = { navController.navigate(NavigatorRouter.SETTINGS.value) }
- familyListViewModel.goToQuickInsert = { navController.navigate(NavigatorRouter.QUICK_INSERT.value) }
+ quickInsertListViewModel.goToFamilyListPage = { navController.navigate(Router.FAMILY_LIST.value) }
+ settingsViewModel.goBack = { navController.navigate(Router.FAMILY_LIST.value) }
+ familyListViewModel.goToSetting = { navController.navigate(Router.SETTINGS.value) }
+ familyListViewModel.goToQuickInsert = { navController.navigate(Router.QUICK_INSERT.value) }
LaunchedEffect(key1 = "NavigatorView") {
- navigatorViewModel.checkIfNeedToCreateNewAccount(navController)
+ navigatorViewModel.checkIfNeedToCreateNewAccount(navController, initialRoute)
}
- NavHost(navController = navController, startDestination = NavigatorRouter.NAVIGATOR.value) {
- composable(NavigatorRouter.FAMILY_LIST.value) {
+ NavHost(navController = navController, startDestination = Router.NAVIGATOR.value) {
+ composable(Router.FAMILY_LIST.value) {
FamilyListPage(familyListViewModel)
}
- composable(NavigatorRouter.SETTINGS.value) {
+ composable(Router.SETTINGS.value) {
SettingsPage(settingsViewModel)
}
- composable(NavigatorRouter.QUICK_INSERT.value) {
+ composable(Router.QUICK_INSERT.value) {
QuickInsertListPage(quickInsertListViewModel)
}
- composable(NavigatorRouter.NAVIGATOR.value) {
- LoadingOrErrorPage(navController, coroutineScope, navigatorViewModel)
+ composable(Router.NAVIGATOR.value) {
+ LoadingOrErrorPage(navController, coroutineScope, navigatorViewModel, initialRoute)
}
}
}
@@ -74,7 +75,8 @@ fun NavigatorPage(
private fun LoadingOrErrorPage(
navController: NavHostController,
coroutineScope: CoroutineScope,
- navigatorViewModel: INavigatorViewModel
+ navigatorViewModel: INavigatorViewModel,
+ initialRoute: Router
) {
when (navigatorViewModel.viewState) {
is NavigatorViewState.Initial, NavigatorViewState.Loading, NavigatorViewState.Success -> CircularProgressIndicator(
@@ -85,7 +87,8 @@ private fun LoadingOrErrorPage(
is NavigatorViewState.Error -> ErrorPage((navigatorViewModel.viewState as NavigatorViewState.Error).message) {
coroutineScope.launch {
navigatorViewModel.checkIfNeedToCreateNewAccount(
- navController
+ navController,
+ initialRoute
)
}
}
@@ -100,7 +103,8 @@ fun FamilyListPage_Preview() {
navigatorViewModel = NavigatorViewModelMock(),
quickInsertListViewModel = QuickInsertListViewModelMocked(),
settingsViewModel = SettingsViewModelMocked(),
- familyListViewModel= FamilyListViewModelMocked()
+ familyListViewModel= FamilyListViewModelMocked(),
+ initialRoute = Router.NAVIGATOR
)
}
}
diff --git a/androidApp/src/main/java/dev/haroldjose/familysharedlist/android/presentationLayer/pages/navigator/views/NavigatorRouter.kt b/androidApp/src/main/java/dev/haroldjose/familysharedlist/android/presentationLayer/pages/navigator/views/Router.kt
similarity index 81%
rename from androidApp/src/main/java/dev/haroldjose/familysharedlist/android/presentationLayer/pages/navigator/views/NavigatorRouter.kt
rename to androidApp/src/main/java/dev/haroldjose/familysharedlist/android/presentationLayer/pages/navigator/views/Router.kt
index 609b282..b3b2fac 100644
--- a/androidApp/src/main/java/dev/haroldjose/familysharedlist/android/presentationLayer/pages/navigator/views/NavigatorRouter.kt
+++ b/androidApp/src/main/java/dev/haroldjose/familysharedlist/android/presentationLayer/pages/navigator/views/Router.kt
@@ -1,6 +1,6 @@
package dev.haroldjose.familysharedlist.android.presentationLayer.pages.navigator.views
-enum class NavigatorRouter(val value: String) {
+enum class Router(val value: String) {
FAMILY_LIST("family_list"),
SETTINGS("setting"),
QUICK_INSERT("quick_insert"),
diff --git a/androidApp/src/main/res/values/strings.xml b/androidApp/src/main/res/values/strings.xml
index d10ccb4..d05f20e 100644
--- a/androidApp/src/main/res/values/strings.xml
+++ b/androidApp/src/main/res/values/strings.xml
@@ -1,4 +1,7 @@
Family List
+ Inclusão rápida
+ crie vários itens de uma só vez
+ indisponível no momento
\ No newline at end of file
diff --git a/androidApp/src/main/res/xml/shortcuts.xml b/androidApp/src/main/res/xml/shortcuts.xml
new file mode 100644
index 0000000..147ec60
--- /dev/null
+++ b/androidApp/src/main/res/xml/shortcuts.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/iosApp/iosApp.xcodeproj/project.pbxproj b/iosApp/iosApp.xcodeproj/project.pbxproj
index 1fc1392..7857969 100644
--- a/iosApp/iosApp.xcodeproj/project.pbxproj
+++ b/iosApp/iosApp.xcodeproj/project.pbxproj
@@ -44,6 +44,9 @@
527A6A102BE5C0EE000C565D /* NavigatorViewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 527A6A0F2BE5C0EE000C565D /* NavigatorViewState.swift */; };
527A6A122BE5C3C7000C565D /* FamilyListViewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 527A6A112BE5C3C7000C565D /* FamilyListViewState.swift */; };
527A6A142BE6DC0F000C565D /* FirebaseCrashlytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 527A6A132BE6DC0F000C565D /* FirebaseCrashlytics.swift */; };
+ 5296515B2BED7F9B005F5E19 /* RouterType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5296515A2BED7F9B005F5E19 /* RouterType.swift */; };
+ 5296515D2BED8C14005F5E19 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5296515C2BED8C14005F5E19 /* SceneDelegate.swift */; };
+ 5296515F2BED8C79005F5E19 /* RouterService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5296515E2BED8C79005F5E19 /* RouterService.swift */; };
52B326972BDD689A00D12B05 /* FirebaseAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52B326962BDD689A00D12B05 /* FirebaseAnalytics.swift */; };
52B326992BDD736A00D12B05 /* nativeModule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52B326982BDD736A00D12B05 /* nativeModule.swift */; };
52BD908C2BC0B6DE00C88B84 /* FamilyListPageTabEnum.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52BD908B2BC0B6DE00C88B84 /* FamilyListPageTabEnum.swift */; };
@@ -127,6 +130,9 @@
527A6A0F2BE5C0EE000C565D /* NavigatorViewState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigatorViewState.swift; sourceTree = ""; };
527A6A112BE5C3C7000C565D /* FamilyListViewState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FamilyListViewState.swift; sourceTree = ""; };
527A6A132BE6DC0F000C565D /* FirebaseCrashlytics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirebaseCrashlytics.swift; sourceTree = ""; };
+ 5296515A2BED7F9B005F5E19 /* RouterType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RouterType.swift; sourceTree = ""; };
+ 5296515C2BED8C14005F5E19 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; };
+ 5296515E2BED8C79005F5E19 /* RouterService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RouterService.swift; sourceTree = ""; };
52B326962BDD689A00D12B05 /* FirebaseAnalytics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirebaseAnalytics.swift; sourceTree = ""; };
52B326982BDD736A00D12B05 /* nativeModule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = nativeModule.swift; sourceTree = ""; };
52BD908B2BC0B6DE00C88B84 /* FamilyListPageTabEnum.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FamilyListPageTabEnum.swift; sourceTree = ""; };
@@ -310,6 +316,15 @@
path = error;
sourceTree = "";
};
+ 529651602BED8D8E005F5E19 /* router */ = {
+ isa = PBXGroup;
+ children = (
+ 5296515E2BED8C79005F5E19 /* RouterService.swift */,
+ 5296515A2BED7F9B005F5E19 /* RouterType.swift */,
+ );
+ path = router;
+ sourceTree = "";
+ };
52B326952BDD688900D12B05 /* services */ = {
isa = PBXGroup;
children = (
@@ -531,6 +546,7 @@
52FD81A02BBDD72500D6FEE3 /* iOSApp+configureIsRunningUITests.swift */,
52385F362BC1C7E4009E46F4 /* AppConstants.swift */,
523509F82BD3273100BC2F51 /* AppDelegate.swift */,
+ 5296515C2BED8C14005F5E19 /* SceneDelegate.swift */,
);
path = app;
sourceTree = "";
@@ -538,6 +554,7 @@
52FD81B22BBDD87300D6FEE3 /* presentationLayer */ = {
isa = PBXGroup;
children = (
+ 529651602BED8D8E005F5E19 /* router */,
52FD81B32BBDD8E500D6FEE3 /* components */,
52FD818D2BBDD72500D6FEE3 /* pages */,
);
@@ -771,9 +788,11 @@
523E95EE2BE9B76300ECEBBF /* year+month+day.swift in Sources */,
52FD81A52BBDD72500D6FEE3 /* LazyKoin.swift in Sources */,
52FD81B52BBDDA9E00D6FEE3 /* QuantitySelectionView.swift in Sources */,
+ 5296515D2BED8C14005F5E19 /* SceneDelegate.swift in Sources */,
524120D22BEAF86F00C1E1D3 /* CurrencyField.swift in Sources */,
52FD81B82BBDE1B100D6FEE3 /* QuickInsertListPage.swift in Sources */,
523D9BD72BE81C010014A86F /* toCurrencyFormat.swift in Sources */,
+ 5296515F2BED8C79005F5E19 /* RouterService.swift in Sources */,
52D7B6D12BC7433E00037A17 /* isDigitsOnly.swift in Sources */,
523D9BD02BE7D5B40014A86F /* ColumnRigthEditingName.swift in Sources */,
52385F372BC1C7E4009E46F4 /* AppConstants.swift in Sources */,
@@ -804,6 +823,7 @@
52385F2F2BC1B2BD009E46F4 /* ListBackgroundClearModifier.swift in Sources */,
52DE60A32BBF522000C12669 /* SettingsItemWithInputTextView.swift in Sources */,
524120D02BEAE43200C1E1D3 /* FamilyListBottomSheetOpenImage.swift in Sources */,
+ 5296515B2BED7F9B005F5E19 /* RouterType.swift in Sources */,
52FD81BA2BBDE23F00D6FEE3 /* QuickInsertListViewModelProtocol.swift in Sources */,
52FD81AC2BBDD72600D6FEE3 /* toInt32.swift in Sources */,
);
diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/100.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/100.png
new file mode 100644
index 0000000..5d6f1e1
Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/100.png differ
diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/1024.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/1024.png
new file mode 100644
index 0000000..f2590de
Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/1024.png differ
diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/114.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/114.png
new file mode 100644
index 0000000..5565f86
Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/114.png differ
diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/120.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/120.png
new file mode 100644
index 0000000..dd42ce4
Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/120.png differ
diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/128.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/128.png
new file mode 100644
index 0000000..0a5dd9a
Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/128.png differ
diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/144.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/144.png
new file mode 100644
index 0000000..9bbf622
Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/144.png differ
diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/152.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/152.png
new file mode 100644
index 0000000..930a560
Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/152.png differ
diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/16.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/16.png
new file mode 100644
index 0000000..7e92046
Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/16.png differ
diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/167.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/167.png
new file mode 100644
index 0000000..df8ad30
Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/167.png differ
diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/180.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/180.png
new file mode 100644
index 0000000..9acc945
Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/180.png differ
diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/20.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/20.png
new file mode 100644
index 0000000..83f4106
Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/20.png differ
diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/256.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/256.png
new file mode 100644
index 0000000..79b085c
Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/256.png differ
diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/29.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/29.png
new file mode 100644
index 0000000..eab5962
Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/29.png differ
diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/32.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/32.png
new file mode 100644
index 0000000..144df85
Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/32.png differ
diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/40.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/40.png
new file mode 100644
index 0000000..d9d522f
Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/40.png differ
diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/50.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/50.png
new file mode 100644
index 0000000..82d24b8
Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/50.png differ
diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/512.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/512.png
new file mode 100644
index 0000000..8063225
Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/512.png differ
diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/57.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/57.png
new file mode 100644
index 0000000..46ed0a3
Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/57.png differ
diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/58.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/58.png
new file mode 100644
index 0000000..5d1646c
Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/58.png differ
diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/60.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/60.png
new file mode 100644
index 0000000..48e8388
Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/60.png differ
diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/64.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/64.png
new file mode 100644
index 0000000..c929197
Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/64.png differ
diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/72.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/72.png
new file mode 100644
index 0000000..bcf9066
Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/72.png differ
diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/76.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/76.png
new file mode 100644
index 0000000..d935151
Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/76.png differ
diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/80.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/80.png
new file mode 100644
index 0000000..bcd972a
Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/80.png differ
diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/87.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/87.png
new file mode 100644
index 0000000..e6a7feb
Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/87.png differ
diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Contents.json b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Contents.json
index fb88a39..5c82812 100644
--- a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Contents.json
+++ b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -1,98 +1 @@
-{
- "images" : [
- {
- "idiom" : "iphone",
- "scale" : "2x",
- "size" : "20x20"
- },
- {
- "idiom" : "iphone",
- "scale" : "3x",
- "size" : "20x20"
- },
- {
- "idiom" : "iphone",
- "scale" : "2x",
- "size" : "29x29"
- },
- {
- "idiom" : "iphone",
- "scale" : "3x",
- "size" : "29x29"
- },
- {
- "idiom" : "iphone",
- "scale" : "2x",
- "size" : "40x40"
- },
- {
- "idiom" : "iphone",
- "scale" : "3x",
- "size" : "40x40"
- },
- {
- "idiom" : "iphone",
- "scale" : "2x",
- "size" : "60x60"
- },
- {
- "idiom" : "iphone",
- "scale" : "3x",
- "size" : "60x60"
- },
- {
- "idiom" : "ipad",
- "scale" : "1x",
- "size" : "20x20"
- },
- {
- "idiom" : "ipad",
- "scale" : "2x",
- "size" : "20x20"
- },
- {
- "idiom" : "ipad",
- "scale" : "1x",
- "size" : "29x29"
- },
- {
- "idiom" : "ipad",
- "scale" : "2x",
- "size" : "29x29"
- },
- {
- "idiom" : "ipad",
- "scale" : "1x",
- "size" : "40x40"
- },
- {
- "idiom" : "ipad",
- "scale" : "2x",
- "size" : "40x40"
- },
- {
- "idiom" : "ipad",
- "scale" : "1x",
- "size" : "76x76"
- },
- {
- "idiom" : "ipad",
- "scale" : "2x",
- "size" : "76x76"
- },
- {
- "idiom" : "ipad",
- "scale" : "2x",
- "size" : "83.5x83.5"
- },
- {
- "idiom" : "ios-marketing",
- "scale" : "1x",
- "size" : "1024x1024"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
\ No newline at end of file
+{"images":[{"size":"60x60","expected-size":"180","filename":"180.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"40x40","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"60x60","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"57x57","expected-size":"57","filename":"57.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"87","filename":"87.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"57x57","expected-size":"114","filename":"114.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"60","filename":"60.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"1024x1024","filename":"1024.png","expected-size":"1024","idiom":"ios-marketing","folder":"Assets.xcassets/AppIcon.appiconset/","scale":"1x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"72x72","expected-size":"72","filename":"72.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"76x76","expected-size":"152","filename":"152.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"50x50","expected-size":"100","filename":"100.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"76x76","expected-size":"76","filename":"76.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"50x50","expected-size":"50","filename":"50.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"72x72","expected-size":"144","filename":"144.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"40x40","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"83.5x83.5","expected-size":"167","filename":"167.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"20x20","expected-size":"20","filename":"20.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"128x128","expected-size":"128","filename":"128.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"256x256","expected-size":"256","filename":"256.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"128x128","expected-size":"256","filename":"256.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"},{"size":"256x256","expected-size":"512","filename":"512.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"},{"size":"32x32","expected-size":"32","filename":"32.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"512x512","expected-size":"512","filename":"512.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"16x16","expected-size":"16","filename":"16.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"1x"},{"size":"16x16","expected-size":"32","filename":"32.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"},{"size":"32x32","expected-size":"64","filename":"64.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"},{"size":"512x512","expected-size":"1024","filename":"1024.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"mac","scale":"2x"}]}
\ No newline at end of file
diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/app-icon-1024.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/app-icon-1024.png
deleted file mode 100644
index 53fc536..0000000
Binary files a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/app-icon-1024.png and /dev/null differ
diff --git a/iosApp/iosApp/Info.plist b/iosApp/iosApp/Info.plist
index fa910fd..279e78a 100644
--- a/iosApp/iosApp/Info.plist
+++ b/iosApp/iosApp/Info.plist
@@ -39,6 +39,17 @@
UIInterfaceOrientationLandscapeLeft
UIInterfaceOrientationLandscapeRight
+ UIApplicationShortcutItems
+
+
+ UIApplicationShortcutItemType
+ dev.haroldjose.familysharedlist.ios.quick_insert
+ UIApplicationShortcutItemTitle
+ Inclusão rápida
+ UIApplicationShortcutItemSubtitle
+ crie vários itens de uma só vez
+
+
UISupportedInterfaceOrientations~ipad
UIInterfaceOrientationPortrait
diff --git a/iosApp/iosApp/app/AppDelegate.swift b/iosApp/iosApp/app/AppDelegate.swift
index 72510fa..5035003 100644
--- a/iosApp/iosApp/app/AppDelegate.swift
+++ b/iosApp/iosApp/app/AppDelegate.swift
@@ -5,6 +5,9 @@ import FirebaseCore
import shared
class AppDelegate: NSObject, UIApplicationDelegate {
+
+ private let routerService = RouterService.shared
+
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
FirebaseApp.configure()
@@ -14,6 +17,25 @@ class AppDelegate: NSObject, UIApplicationDelegate {
nativeModules: [nativeModule],
appDeclaration: { _ in }
)
+
+ if let shortcutItem = launchOptions?[UIApplication.LaunchOptionsKey.shortcutItem] as? UIApplicationShortcutItem {
+ _ = routerService.handleShortCutItem(shortcutItem)
+ }
+
return true
}
+
+ func application(_ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) {
+ let handled = routerService.handleShortCutItem(shortcutItem)
+ completionHandler(handled)
+ }
+
+ func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
+ if let shortcutItem = options.shortcutItem {
+ _ = routerService.handleShortCutItem(shortcutItem)
+ }
+ let configuration = UISceneConfiguration(name: connectingSceneSession.configuration.name, sessionRole: connectingSceneSession.role)
+ configuration.delegateClass = SceneDelegate.self
+ return configuration
+ }
}
diff --git a/iosApp/iosApp/app/SceneDelegate.swift b/iosApp/iosApp/app/SceneDelegate.swift
new file mode 100644
index 0000000..4523eb2
--- /dev/null
+++ b/iosApp/iosApp/app/SceneDelegate.swift
@@ -0,0 +1,20 @@
+import Foundation
+import UIKit
+
+class SceneDelegate: NSObject, UIWindowSceneDelegate {
+
+ private let routerService = RouterService.shared
+
+ func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
+
+ if let shortcutItem = connectionOptions.shortcutItem {
+ _ = routerService.handleShortCutItem(shortcutItem)
+ }
+ }
+
+ func windowScene(_ windowScene: UIWindowScene, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) {
+
+ _ = routerService.handleShortCutItem(shortcutItem)
+ completionHandler(true)
+ }
+}
diff --git a/iosApp/iosApp/app/iOSApp.swift b/iosApp/iosApp/app/iOSApp.swift
index 4d880a0..e798471 100644
--- a/iosApp/iosApp/app/iOSApp.swift
+++ b/iosApp/iosApp/app/iOSApp.swift
@@ -1,18 +1,19 @@
import SwiftUI
import shared
-
@main
struct iOSApp: App {
@UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
@Environment(\.scenePhase) private var scenePhase
-
+ private let routerService = RouterService.shared
+
var body: some Scene {
WindowGroup {
NavigatorPage(viewModel: ResolverApp().resolve())
+ .environmentObject(routerService)
}.onChange(of: scenePhase) { phase in
switch phase {
diff --git a/iosApp/iosApp/presentationLayer/pages/navigator/views/NavigatorPage.swift b/iosApp/iosApp/presentationLayer/pages/navigator/views/NavigatorPage.swift
index 7186d5a..e898420 100644
--- a/iosApp/iosApp/presentationLayer/pages/navigator/views/NavigatorPage.swift
+++ b/iosApp/iosApp/presentationLayer/pages/navigator/views/NavigatorPage.swift
@@ -3,8 +3,7 @@ import SwiftUI
struct NavigatorPage: View where NavViewModel: NavigatorViewModelProtocol {
@StateObject var viewModel: NavViewModel
-
- @State private var router: ViewRouter = ViewRouter.familyList
+ @EnvironmentObject var routerService: RouterService
var body: some View {
NavigationView {
@@ -24,46 +23,39 @@ struct NavigatorPage: View where NavViewModel: NavigatorViewModelP
private func NavigatorView() -> some View {
Group {
- switch router {
+ switch routerService.router {
case .familyList:
- FamilyListPage(router: router)
+ FamilyListPage()
case .settings:
- SettingsPage(router: router)
+ SettingsPage()
case .quickInsert:
- QuickInsertListPage(router: router)
+ QuickInsertListPage()
case .debug:
Text("onDebug")
}
}
}
- private func QuickInsertListPage(router: ViewRouter) -> some View {
+ private func QuickInsertListPage() -> some View {
let viewModel: QuickInsertListViewModel = ResolverApp().resolve()
- viewModel.goToFamilyListPage = { self.router = .familyList }
+ viewModel.goToFamilyListPage = { self.routerService.router = .familyList }
return Family_List.QuickInsertListPage(viewModel: viewModel)
}
- private func SettingsPage(router: ViewRouter) -> some View {
+ private func SettingsPage() -> some View {
let viewModel: SettingsViewModel = ResolverApp().resolve()
- viewModel.goBack = { self.router = .familyList }
+ viewModel.goBack = { self.routerService.router = .familyList }
return Family_List.SettingsPage(viewModel: viewModel)
}
- private func FamilyListPage(router: ViewRouter) -> some View {
+ private func FamilyListPage() -> some View {
let viewModel: FamilyListViewModel = ResolverApp().resolve()
- viewModel.goToSetting = { self.router = .settings }
- viewModel.goToQuickInsert = { self.router = .quickInsert }
+ viewModel.goToSetting = { self.routerService.router = .settings }
+ viewModel.goToQuickInsert = { self.routerService.router = .quickInsert }
return Family_List.FamilyListPage(viewModel: viewModel)
}
}
-enum ViewRouter {
- case familyList
- case settings
- case quickInsert
- case debug
-}
-
#Preview {
NavigationView {
NavigatorPage(
diff --git a/iosApp/iosApp/presentationLayer/router/RouterService.swift b/iosApp/iosApp/presentationLayer/router/RouterService.swift
new file mode 100644
index 0000000..1b42478
--- /dev/null
+++ b/iosApp/iosApp/presentationLayer/router/RouterService.swift
@@ -0,0 +1,20 @@
+import Foundation
+import UIKit
+
+class RouterService: ObservableObject {
+ private init() {}
+ static let shared = RouterService()
+ @Published var router: RouterType = .familyList
+
+ func handleShortCutItem(_ shortcutItem: UIApplicationShortcutItem) -> Bool {
+ if shortcutItem.type == RouterType.quickInsert.rawValue {
+ router = .quickInsert
+ return true
+ }
+ return false
+ }
+}
+
+
+
+
diff --git a/iosApp/iosApp/presentationLayer/router/RouterType.swift b/iosApp/iosApp/presentationLayer/router/RouterType.swift
new file mode 100644
index 0000000..55bea9c
--- /dev/null
+++ b/iosApp/iosApp/presentationLayer/router/RouterType.swift
@@ -0,0 +1,6 @@
+enum RouterType: String {
+ case familyList = "dev.haroldjose.familysharedlist.ios.family_list"
+ case settings = "dev.haroldjose.familysharedlist.ios.settings"
+ case quickInsert = "dev.haroldjose.familysharedlist.ios.quick_insert"
+ case debug
+}