diff --git a/.editorconfig b/.editorconfig index 6e889956..4f9503c7 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,7 +1,21 @@ -# https://editorconfig.org/ -# This configuration is used by ktlint when spotless invokes it +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = unset +indent_style = space +trim_trailing_whitespace = true +insert_final_newline = true +max_line_length = 120 +tab_width = unset + +[*.{yaml,yml}] +tab_width = 2 +indent_size = 2 [*.{kt,kts}] -ij_kotlin_allow_trailing_comma=true -ij_kotlin_allow_trailing_comma_on_call_site=true +indent_size = 4 +tab_width = 4 +ktlint_code_style = android_studio ktlint_function_naming_ignore_when_annotated_with=Composable, Test \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/issue-template.md b/.github/ISSUE_TEMPLATE/issue-template.md new file mode 100644 index 00000000..0db631f9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/issue-template.md @@ -0,0 +1,14 @@ +--- +name: Issue Template +about: 이슈 템플릿 +title: "[Type] 이슈 내용" +labels: '' +assignees: '' + +--- + +## ISSUE +- + +## To-Do +- [ ] 작업할 내용 diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 00000000..a3340d77 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,10 @@ +## 관련 이슈 +- closed #이슈넘버 + +## 작업한 내용 +- + +## PR 포인트 +- + +## 🚀Next Feature diff --git a/.github/workflows/PR_Builder.yml b/.github/workflows/PR_Builder.yml new file mode 100644 index 00000000..834a6091 --- /dev/null +++ b/.github/workflows/PR_Builder.yml @@ -0,0 +1,72 @@ +name: Hous PR Builder + +on: + pull_request: + branches: [ develop, master ] + +jobs: + build: + name: PR Checker + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Gradle cache + uses: actions/cache@v3 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }} + restore-keys: | + ${{ runner.os }}-gradle- + + - name: set up JDK 17 + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: 17 + + # - name: Create Google-Services.json + # env: + # GOOGLE_SERVICES: ${{ secrets.GOOGLE_SERVICES }} + # run: | + # touch ./app/google-services.json + # echo $GOOGLE_SERVICES >> ./app/google-services.json + # cat ./app/google-services.json + # + - name: Create Local Properties + run: touch local.properties + + - name: Access Local Properties + env: + FUNCH_DEBUG_BASE_URL: ${{ secrets.FUNCH_DEBUG_BASE_URL }} + STORE_PASSWORD: ${{ secrets.STORE_PASSWORD }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + STORE_FILE: ${{ secrets.STORE_FILE }} + run: | + echo FUNCH_DEBUG_BASE_URL=\"FUNCH_DEBUG_BASE_URL\" >> local.properties + echo STORE_PASSWORD= $STORE_PASSWORD >> local.properties + echo KEY_PASSWORD= $KEY_PASSWORD >> local.properties + echo KEY_ALIAS= $KEY_ALIAS >> local.properties + echo STORE_FILE= $STORE_FILE >> local.properties + + - name: Create Key Store + env: + KEY_STORE_BASE_64: ${{secrets.KEY_STORE_BASE_64}} + run: | + echo "$KEY_STORE_BASE_64" | base64 -d > ./funch_key_store.jks + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: Lint Check + run: ./gradlew ktlintCheck + + - name: run rest + run: ./gradlew test + + - name: Build with Gradle + run: ./gradlew build diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 44d96aeb..e691c560 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,21 +1,37 @@ -@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed +import java.io.FileInputStream +import org.jetbrains.kotlin.konan.properties.Properties + plugins { - alias(libs.plugins.androidApplication) - alias(libs.plugins.kotlinAndroid) + alias(libs.plugins.funch.application) + alias(libs.plugins.funch.compose) +// alias(libs.plugins.google.services) +// alias(libs.plugins.app.distribution) +// alias(libs.plugins.crashlytics) } android { - namespace = "com.moya.punch" - compileSdk = 34 + namespace = "com.moya.funch" + + packaging { + resources.excludes.add("META-INF/LICENSE*") + } defaultConfig { - applicationId = "com.moya.punch" - minSdk = 28 - targetSdk = 34 - versionCode = 1 - versionName = "1.0" + applicationId = "com.moya.funch" + versionCode = libs.versions.versionCode.get().toInt() + versionName = libs.versions.appVersion.get() + } - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + signingConfigs { + create("release") { + Properties().apply { + load(FileInputStream(rootProject.file("local.properties"))) + storeFile = rootProject.file(this["STORE_FILE"] as String) + keyAlias = this["KEY_ALIAS"] as String + keyPassword = this["KEY_PASSWORD"] as String + storePassword = this["STORE_PASSWORD"] as String + } + } } buildTypes { @@ -25,23 +41,48 @@ android { getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) + signingConfig = signingConfigs.getByName("release") } } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - kotlinOptions { - jvmTarget = "1.8" - } } dependencies { + // core + implementation(projects.core.designsystem) + implementation(projects.core.domain) + implementation(projects.core.data) + implementation(projects.core.datastore) + // feature + implementation(projects.feature.profile) + implementation(projects.feature.home) + implementation(projects.feature.match) + implementation(projects.feature.onboarding) +// implementation(libs.coil.core) + implementation(libs.startup) +// implementation(libs.security) + implementation(libs.splash.screen) + + // Google +// implementation(libs.google.android.gms) - implementation(libs.core.ktx) - implementation(libs.appcompat) - implementation(libs.material) - testImplementation(libs.junit) - androidTestImplementation(libs.androidx.test.ext.junit) - androidTestImplementation(libs.espresso.core) -} \ No newline at end of file + // Third Party + implementation(libs.compose.lottie) + implementation(libs.coil.core) +// implementation(libs.kakao.login) + implementation(libs.bundles.retrofit) + implementation(libs.lifecycle) + implementation(libs.activity.compose) + implementation(platform(libs.compose.bom)) + implementation(libs.ui) + implementation(libs.ui.graphics) + implementation(libs.ui.tooling.preview) + implementation(libs.material3.compose) + androidTestImplementation(platform(libs.compose.bom)) + androidTestImplementation(libs.ui.test.junit4) + debugImplementation(libs.ui.tooling) + debugImplementation(libs.ui.test.manifest) + + // Firebase +// implementation(platform(libs.firebase)) +// implementation(libs.bundles.firebase) +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1b94fcee..4aee9d90 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,15 +2,31 @@ + + + + android:theme="@style/Theme.FunchAOS.Splash" + android:usesCleartextTraffic="true" + tools:targetApi="34"> + + + + + + + - \ No newline at end of file + diff --git a/app/src/main/ic_funch_logo-playstore.png b/app/src/main/ic_funch_logo-playstore.png new file mode 100644 index 00000000..0518c993 Binary files /dev/null and b/app/src/main/ic_funch_logo-playstore.png differ diff --git a/app/src/main/java/com/moya/funch/FunchApplication.kt b/app/src/main/java/com/moya/funch/FunchApplication.kt new file mode 100644 index 00000000..97931a1f --- /dev/null +++ b/app/src/main/java/com/moya/funch/FunchApplication.kt @@ -0,0 +1,25 @@ +package com.moya.funch + +import android.app.Application +import dagger.hilt.android.HiltAndroidApp +import timber.log.Timber + +@HiltAndroidApp +class FunchApplication : Application() { + override fun onCreate() { + super.onCreate() + initTimber() + } + + private fun initTimber() { + if (BuildConfig.DEBUG) { + Timber.plant( + object : Timber.DebugTree() { + override fun createStackElementTag(element: StackTraceElement): String { + return "${element.fileName} : ${element.lineNumber} - ${element.methodName}" + } + } + ) + } + } +} diff --git a/app/src/main/java/com/moya/funch/MainActivity.kt b/app/src/main/java/com/moya/funch/MainActivity.kt new file mode 100644 index 00000000..7867ebe2 --- /dev/null +++ b/app/src/main/java/com/moya/funch/MainActivity.kt @@ -0,0 +1,46 @@ +package com.moya.funch + +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen +import com.moya.funch.datastore.UserDataStore +import com.moya.funch.splash.LoadingScreen +import com.moya.funch.theme.FunchTheme +import com.moya.funch.ui.FunchApp +import dagger.hilt.android.AndroidEntryPoint +import javax.inject.Inject +import kotlinx.coroutines.delay + +@AndroidEntryPoint +class MainActivity : ComponentActivity() { + + @Inject + lateinit var dataStore: UserDataStore + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + installSplashScreen() + setContent { + FunchTheme { + var showLoading by remember { mutableStateOf(true) } + + LaunchedEffect(Unit) { + delay(1500) + showLoading = false + } + + if (showLoading) { + LoadingScreen() + } else { + FunchApp(dataStore = dataStore) + } + } + } + } +} diff --git a/app/src/main/java/com/moya/funch/di/MatchModule.kt b/app/src/main/java/com/moya/funch/di/MatchModule.kt new file mode 100644 index 00000000..9f4239bc --- /dev/null +++ b/app/src/main/java/com/moya/funch/di/MatchModule.kt @@ -0,0 +1,38 @@ +package com.moya.funch.di + +import com.moya.funch.repository.MatchingRepository +import com.moya.funch.repository.MatchingRepositoryImpl +import com.moya.funch.usecase.CanMatchProfileUseCase +import com.moya.funch.usecase.CanMatchProfileUseCaseImpl +import com.moya.funch.usecase.MatchProfileUseCase +import com.moya.funch.usecase.MatchProfileUseCaseImpl +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +object MatchModule { + + @Module + @InstallIn(SingletonComponent::class) + interface UseCaseBinder { + @Binds + @Singleton + fun bindCanMatchUseCase(useCase: CanMatchProfileUseCaseImpl): CanMatchProfileUseCase + + @Binds + @Singleton + fun bindMatchProfileUseCase(useCase: MatchProfileUseCaseImpl): MatchProfileUseCase + } + + @Module + @InstallIn(SingletonComponent::class) + interface RepositoryBinder { + @Binds + @Singleton + fun bindMatchingRepository(repository: MatchingRepositoryImpl): MatchingRepository + } +} diff --git a/app/src/main/java/com/moya/funch/di/MemberModule.kt b/app/src/main/java/com/moya/funch/di/MemberModule.kt new file mode 100644 index 00000000..5e17b5f2 --- /dev/null +++ b/app/src/main/java/com/moya/funch/di/MemberModule.kt @@ -0,0 +1,44 @@ +package com.moya.funch.di + +import com.moya.funch.repository.MemberRepository +import com.moya.funch.repository.MemberRepositoryImpl +import com.moya.funch.usecase.CreateUserProfileUseCase +import com.moya.funch.usecase.CreateUserProfileUseCaseImpl +import com.moya.funch.usecase.LoadUserProfileUseCase +import com.moya.funch.usecase.LoadUserProfileUseCaseImpl +import com.moya.funch.usecase.LoadViewCountUseCase +import com.moya.funch.usecase.LoadViewCountUseCaseImpl +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +object MemberModule { + + @Module + @InstallIn(SingletonComponent::class) + interface UseCaseBinder { + @Binds + @Singleton + fun bindLoadUserProfileUseCase(useCase: LoadUserProfileUseCaseImpl): LoadUserProfileUseCase + + @Binds + @Singleton + fun bindLoadViewCountUseCase(useCase: LoadViewCountUseCaseImpl): LoadViewCountUseCase + + @Binds + @Singleton + fun bindCreateUserProfileUseCase(useCase: CreateUserProfileUseCaseImpl): CreateUserProfileUseCase + } + + @Module + @InstallIn(SingletonComponent::class) + interface RepositoryBinder { + @Binds + @Singleton + fun bindMemberRepository(repository: MemberRepositoryImpl): MemberRepository + } +} diff --git a/app/src/main/java/com/moya/funch/di/SubwayModule.kt b/app/src/main/java/com/moya/funch/di/SubwayModule.kt new file mode 100644 index 00000000..66ba5b26 --- /dev/null +++ b/app/src/main/java/com/moya/funch/di/SubwayModule.kt @@ -0,0 +1,32 @@ +package com.moya.funch.di + +import com.moya.funch.repository.SubwayRepository +import com.moya.funch.repository.SubwayRepositoryImpl +import com.moya.funch.usecase.LoadSubwayStationsUseCase +import com.moya.funch.usecase.LoadSubwayStationsUseCaseImpl +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +object SubwayModule { + + @Module + @InstallIn(SingletonComponent::class) + interface UseCaseBinder { + @Binds + @Singleton + fun bindLoadSubwayUseCase(useCase: LoadSubwayStationsUseCaseImpl): LoadSubwayStationsUseCase + } + + @Module + @InstallIn(SingletonComponent::class) + interface RepositoryBinder { + @Binds + @Singleton + fun bindSubwayRepository(repository: SubwayRepositoryImpl): SubwayRepository + } +} diff --git a/app/src/main/java/com/moya/funch/navigation/FunchNavHost.kt b/app/src/main/java/com/moya/funch/navigation/FunchNavHost.kt new file mode 100644 index 00000000..0e0355ba --- /dev/null +++ b/app/src/main/java/com/moya/funch/navigation/FunchNavHost.kt @@ -0,0 +1,46 @@ +package com.moya.funch.navigation + +import androidx.compose.runtime.Composable +import androidx.navigation.NavController +import androidx.navigation.NavHostController +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.rememberNavController +import androidx.navigation.navOptions +import com.moya.funch.match.navigation.matchingScreen +import com.moya.funch.match.navigation.navigateToMatching +import com.moya.funch.onboarding.navigation.ON_BOARDING_ROUTE +import com.moya.funch.onboarding.navigation.onBoardingScreen + +@Composable +fun FunchNavHost(hasProfile: Boolean, navController: NavHostController = rememberNavController()) { + NavHost( + navController = navController, + startDestination = determineStartDestination(hasProfile) + ) { + with(navController) { + profileGraph( + onNavigateToHome = ::onNavigateToHome, + onCloseMyProfile = ::onCloseMyProfile + ) + homeScreen( + onNavigateToMatching = ::onNavigateToMatching, + onNavigateToMyProfile = ::onNavigateToMyProfile + ) + matchingScreen(onClose = { popBackStack(HOME_ROUTE, false) }) + onBoardingScreen(onNavigateToCreateProfile = ::navigateToCreateProfile) + } + } +} + +private fun NavController.onNavigateToMyProfile() = navigateToMyProfile(singleTopNavOptions) + +private fun NavController.onNavigateToMatching(route: String) = navigateToMatching(route, singleTopNavOptions) + +private val singleTopNavOptions = navOptions { + launchSingleTop = true + popUpTo(HOME_ROUTE) +} + +private fun determineStartDestination(hasProfile: Boolean): String { + return if (hasProfile) HOME_ROUTE else ON_BOARDING_ROUTE +} diff --git a/app/src/main/java/com/moya/funch/splash/SplashScreen.kt b/app/src/main/java/com/moya/funch/splash/SplashScreen.kt new file mode 100644 index 00000000..4b096ce9 --- /dev/null +++ b/app/src/main/java/com/moya/funch/splash/SplashScreen.kt @@ -0,0 +1,119 @@ +package com.moya.funch.splash + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.aspectRatio +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.offset +import androidx.compose.material3.Surface +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalConfiguration +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.airbnb.lottie.compose.LottieAnimation +import com.airbnb.lottie.compose.LottieCompositionSpec +import com.airbnb.lottie.compose.LottieConstants +import com.airbnb.lottie.compose.rememberLottieComposition +import com.moya.funch.R +import com.moya.funch.theme.FunchTheme + +// TODO : 나중에 splash 모듈로 분리 + +@Composable +fun LoadingScreen() { + val splashIcon by rememberLottieComposition( + LottieCompositionSpec.RawRes( + R.raw.funch_splash_icon_lottie + ) + ) + + val splashBackground by rememberLottieComposition( + LottieCompositionSpec.RawRes( + R.raw.funch_splash_background + ) + ) + Surface( + color = FunchTheme.colors.background + ) { + Column( + modifier = Modifier + .fillMaxSize() + ) { + LottieAnimation( + composition = splashIcon, + iterations = LottieConstants.IterateForever + ) + LottieAnimation( + composition = splashBackground, + iterations = LottieConstants.IterateForever + ) + } + + Box( + modifier = Modifier + .fillMaxSize(), + contentAlignment = Alignment.Center + ) { + Image(painter = painterResource(id = R.drawable.ic_splash_logo), contentDescription = "Splash Logo") + } + + Box( + modifier = Modifier + .fillMaxSize(), + contentAlignment = Alignment.TopStart + ) { + val configuration = LocalConfiguration.current + val screenWidthPx = configuration.screenWidthDp + + val xOffset = with(LocalDensity.current) { -screenWidthPx / 2 } + + val aspectRatio = 115f / 99f + Image( + modifier = Modifier + .fillMaxWidth() + .aspectRatio(aspectRatio) + .offset(x = xOffset.dp, y = 0.dp), + painter = painterResource(id = R.drawable.ic_splash_bg_top), + contentDescription = "Splash Top icon" + ) + } + + Box( + modifier = Modifier + .fillMaxSize(), + contentAlignment = Alignment.BottomEnd + ) { + val configuration = LocalConfiguration.current + val screenWidthPx = configuration.screenWidthDp + val xOffset = with(LocalDensity.current) { screenWidthPx / 2 } + val aspectRatio = 108f / 93f + Image( + modifier = Modifier + .fillMaxWidth() + .aspectRatio(aspectRatio) + .offset(x = xOffset.dp, y = 0.dp), + painter = painterResource(id = R.drawable.ic_splash_bg_bottom), + contentDescription = "Splash Bottom icon" + ) + } + } +} + +@Preview +@Composable +private fun Preview() { + FunchTheme { + Surface( + color = FunchTheme.colors.background + ) { + LoadingScreen() + } + } +} diff --git a/app/src/main/java/com/moya/funch/ui/FunchApp.kt b/app/src/main/java/com/moya/funch/ui/FunchApp.kt new file mode 100644 index 00000000..c6bc4f95 --- /dev/null +++ b/app/src/main/java/com/moya/funch/ui/FunchApp.kt @@ -0,0 +1,23 @@ +package com.moya.funch.ui + +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.Surface +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import com.moya.funch.datastore.UserDataStore +import com.moya.funch.navigation.FunchNavHost +import com.moya.funch.theme.LocalBackgroundTheme + +@Composable +fun FunchApp(dataStore: UserDataStore) { + val backgroundColor = LocalBackgroundTheme.current.color + + Surface( + modifier = Modifier.fillMaxSize(), + color = backgroundColor + ) { + FunchNavHost( + hasProfile = dataStore.hasUserId() + ) + } +} diff --git a/app/src/main/res/drawable/ic_app_icon.xml b/app/src/main/res/drawable/ic_app_icon.xml new file mode 100644 index 00000000..5bd045d5 --- /dev/null +++ b/app/src/main/res/drawable/ic_app_icon.xml @@ -0,0 +1,21 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_funch_logo_foreground.xml b/app/src/main/res/drawable/ic_funch_logo_foreground.xml new file mode 100644 index 00000000..70f31720 --- /dev/null +++ b/app/src/main/res/drawable/ic_funch_logo_foreground.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_splash_bg_bottom.xml b/app/src/main/res/drawable/ic_splash_bg_bottom.xml new file mode 100644 index 00000000..44a81bf7 --- /dev/null +++ b/app/src/main/res/drawable/ic_splash_bg_bottom.xml @@ -0,0 +1,22 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_splash_bg_top.xml b/app/src/main/res/drawable/ic_splash_bg_top.xml new file mode 100644 index 00000000..02495192 --- /dev/null +++ b/app/src/main/res/drawable/ic_splash_bg_top.xml @@ -0,0 +1,22 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_splash_logo.xml b/app/src/main/res/drawable/ic_splash_logo.xml new file mode 100644 index 00000000..76bf5e2e --- /dev/null +++ b/app/src/main/res/drawable/ic_splash_logo.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_funch_logo.xml b/app/src/main/res/mipmap-anydpi-v26/ic_funch_logo.xml new file mode 100644 index 00000000..e7cb1ecb --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_funch_logo.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_funch_logo_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_funch_logo_round.xml new file mode 100644 index 00000000..e7cb1ecb --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_funch_logo_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_funch_logo.webp b/app/src/main/res/mipmap-hdpi/ic_funch_logo.webp new file mode 100644 index 00000000..e17e53c4 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_funch_logo.webp differ diff --git a/app/src/main/res/mipmap-hdpi/ic_funch_logo_round.webp b/app/src/main/res/mipmap-hdpi/ic_funch_logo_round.webp new file mode 100644 index 00000000..7100c4d4 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_funch_logo_round.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_funch_logo.webp b/app/src/main/res/mipmap-mdpi/ic_funch_logo.webp new file mode 100644 index 00000000..0a31bc41 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_funch_logo.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_funch_logo_round.webp b/app/src/main/res/mipmap-mdpi/ic_funch_logo_round.webp new file mode 100644 index 00000000..e2880fee Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_funch_logo_round.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_funch_logo.webp b/app/src/main/res/mipmap-xhdpi/ic_funch_logo.webp new file mode 100644 index 00000000..8190f7c9 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_funch_logo.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_funch_logo_round.webp b/app/src/main/res/mipmap-xhdpi/ic_funch_logo_round.webp new file mode 100644 index 00000000..ca96bc21 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_funch_logo_round.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_funch_logo.webp b/app/src/main/res/mipmap-xxhdpi/ic_funch_logo.webp new file mode 100644 index 00000000..aa72e3a2 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_funch_logo.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_funch_logo_round.webp b/app/src/main/res/mipmap-xxhdpi/ic_funch_logo_round.webp new file mode 100644 index 00000000..351b7bea Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_funch_logo_round.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_funch_logo.webp b/app/src/main/res/mipmap-xxxhdpi/ic_funch_logo.webp new file mode 100644 index 00000000..ef6d6fd0 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_funch_logo.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_funch_logo_round.webp b/app/src/main/res/mipmap-xxxhdpi/ic_funch_logo_round.webp new file mode 100644 index 00000000..b2ca648c Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_funch_logo_round.webp differ diff --git a/app/src/main/res/raw/funch_splash_background.json b/app/src/main/res/raw/funch_splash_background.json new file mode 100644 index 00000000..a24e0315 --- /dev/null +++ b/app/src/main/res/raw/funch_splash_background.json @@ -0,0 +1 @@ +{"nm":"Flow 2","ddd":0,"h":350,"w":350,"meta":{"g":"LottieFiles Figma v51"},"layers":[{"ty":4,"nm":"boom","sr":1,"st":0,"op":46.06,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":1,"k":[{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[0.63,0.5],"t":0},{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[0.63,0.5],"t":9},{"o":{"x":0,"y":0.88},"i":{"x":0,"y":0.95},"s":[80.36,67.99],"t":27},{"s":[65.66,55.56],"t":45}]},"s":{"a":1,"k":[{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[100,100],"t":0},{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[100,100],"t":9},{"o":{"x":0,"y":0.88},"i":{"x":0,"y":0.95},"s":[100,100],"t":27},{"s":[100,100],"t":45}]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[204.63,175.5],"t":0},{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[204.63,175.5],"t":9},{"o":{"x":0,"y":0.88},"i":{"x":0,"y":0.95},"s":[207.19,174.5],"t":27},{"s":[207.19,174.5],"t":45}]},"r":{"a":1,"k":[{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[0],"t":0},{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[0],"t":9},{"o":{"x":0,"y":0.88},"i":{"x":0,"y":0.95},"s":[-5.14],"t":27},{"s":[-5.14],"t":45}]},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[0],"t":0},{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[0],"t":9},{"o":{"x":0,"y":0.88},"i":{"x":0,"y":0.95},"s":[100],"t":27},{"s":[100],"t":45}]}},"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[-0.04,-0.02],[0,0],[0,0],[-0.03,-0.03],[0,0],[0,0],[0,-0.04],[0,0],[0,0],[0.04,-0.03],[0,0],[0,0],[0.05,0.01],[0,0],[0,0],[0.03,0.02],[0,0],[0,0],[0.01,0.04],[0,0],[0,0],[-0.03,0.03]],"o":[[0,0],[0,0],[0,0],[-0.03,-0.04],[0,0],[0,0],[0,-0.04],[0,0],[0,0],[0.03,-0.02],[0,0],[0,0],[0.05,0],[0,0],[0,0],[0.04,0.03],[0,0],[0,0],[0,0.03],[0,0],[0,0],[-0.02,0.03],[0,0],[0,0],[-0.04,0],[0,0]],"v":[[0.18,0.52],[0.18,0.52],[0,0.49],[0.22,0.47],[0.22,0.36],[0.31,0.33],[0.31,0.27],[0.43,0.17],[0.59,0],[0.85,0.1],[1.05,0.17],[1.12,0.21],[1.15,0.23],[1.09,0.49],[1.25,0.52],[1.12,0.58],[1.11,0.73],[1.15,0.87],[1.05,0.76],[0.94,0.83],[0.77,0.87],[0.59,0.83],[0.59,0.99],[0.22,0.88],[0.09,0.49],[0.18,0.52]]}],"t":0},{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[-0.04,-0.02],[0,0],[0,0],[-0.03,-0.03],[0,0],[0,0],[0,-0.04],[0,0],[0,0],[0.04,-0.03],[0,0],[0,0],[0.05,0.01],[0,0],[0,0],[0.03,0.02],[0,0],[0,0],[0.01,0.04],[0,0],[0,0],[-0.03,0.03]],"o":[[0,0],[0,0],[0,0],[-0.03,-0.04],[0,0],[0,0],[0,-0.04],[0,0],[0,0],[0.03,-0.02],[0,0],[0,0],[0.05,0],[0,0],[0,0],[0.04,0.03],[0,0],[0,0],[0,0.03],[0,0],[0,0],[-0.02,0.03],[0,0],[0,0],[-0.04,0],[0,0]],"v":[[0.18,0.52],[0.18,0.52],[0,0.49],[0.22,0.47],[0.22,0.36],[0.31,0.33],[0.31,0.27],[0.43,0.17],[0.59,0],[0.85,0.1],[1.05,0.17],[1.12,0.21],[1.15,0.23],[1.09,0.49],[1.25,0.52],[1.12,0.58],[1.11,0.73],[1.15,0.87],[1.05,0.76],[0.94,0.83],[0.77,0.87],[0.59,0.83],[0.59,0.99],[0.22,0.88],[0.09,0.49],[0.18,0.52]]}],"t":9},{"o":{"x":0,"y":0.88},"i":{"x":0,"y":0.95},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[-3.04,-1],[0,0],[0,0],[-2.12,-2.13],[0,0],[0,0],[0.33,-2.68],[0,0],[0,0],[2.58,-1.94],[0,0],[0,0],[3.53,0.36],[0,0],[0,0],[2.03,1.16],[0,0],[0,0],[0.52,2.65],[0,0],[0,0],[-2.48,1.97],[0,0]],"o":[[0,0],[0,0],[-1.96,-2.52],[0,0],[0,0],[-0.2,-2.98],[0,0],[0,0],[2.35,-1.36],[0,0],[0,0],[3.24,-0.19],[0,0],[0,0],[3.1,1.71],[0,0],[0,0],[-0.29,2.3],[0,0],[0,0],[-1.76,2.07],[0,0],[0,0],[-3.17,0.13],[0,0],[0,0]],"v":[[1.18,88.89],[29.27,66.47],[12.9,45.22],[16.53,40.18],[35.87,46.55],[33.16,3.43],[38.74,0.98],[71.35,33.77],[108.36,12.13],[113.26,15.34],[109.15,47.58],[138.55,45.87],[140.7,51.69],[118.36,68.28],[159.03,90.57],[157.1,96.62],[111.04,91.83],[108.39,112.89],[103.53,115.28],[84.91,104.74],[58.97,134.85],[53.28,133.36],[45.21,92.64],[3.43,94.55],[1.24,88.79],[1.18,88.89]]}],"t":27},{"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[-2.48,-0.82],[0,0],[0,0],[-1.74,-1.74],[0,0],[0,0],[0.27,-2.19],[0,0],[0,0],[2.11,-1.59],[0,0],[0,0],[2.88,0.29],[0,0],[0,0],[1.66,0.95],[0,0],[0,0],[0.43,2.17],[0,0],[0,0],[-2.03,1.61],[0,0]],"o":[[0,0],[0,0],[-1.6,-2.06],[0,0],[0,0],[-0.16,-2.43],[0,0],[0,0],[1.92,-1.11],[0,0],[0,0],[2.64,-0.16],[0,0],[0,0],[2.54,1.4],[0,0],[0,0],[-0.24,1.88],[0,0],[0,0],[-1.44,1.69],[0,0],[0,0],[-2.59,0.11],[0,0],[0,0]],"v":[[0.96,72.63],[23.92,54.32],[10.54,36.95],[13.51,32.83],[29.31,38.04],[27.09,2.81],[31.66,0.8],[58.3,27.6],[88.54,9.92],[92.55,12.53],[89.19,38.88],[113.21,37.48],[114.97,42.24],[96.71,55.8],[129.95,74.01],[128.37,78.95],[90.73,75.04],[88.57,92.24],[84.59,94.2],[69.38,85.58],[48.18,110.19],[43.54,108.97],[36.94,75.7],[2.8,77.26],[1.01,72.55],[0.96,72.63]]}],"t":45}]}},{"ty":"gf","bm":0,"hd":false,"nm":"","e":{"a":1,"k":[{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[-1.13,2.04],"t":0},{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[-1.13,2.04],"t":9},{"o":{"x":0,"y":0.88},"i":{"x":0,"y":0.95},"s":[80.35679626464844,135.98800659179688],"t":27},{"s":[65.6614990234375,111.11900329589844],"t":45}]},"g":{"p":2,"k":{"a":1,"k":[{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[0,1,0.9375764685892591,0.3721242803358564,1,0.9686666685366163,0.8314117747568617,0.3686666744970808],"t":0},{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[0,1,0.9375764685892591,0.3721242803358564,1,0.9686666685366163,0.8314117747568617,0.3686666744970808],"t":9},{"o":{"x":0,"y":0.88},"i":{"x":0,"y":0.95},"s":[0,1,0.9372941213869581,0.37258824289078807,1,0.9686666685366163,0.8314117747568617,0.3686666744970808],"t":27},{"s":[0,1,0.9372941213869581,0.37258824289078807,1,0.9686666685366163,0.8314117747568617,0.3686666744970808],"t":45}]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"s":{"a":1,"k":[{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[-1.13,0],"t":0},{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[-1.13,0],"t":9},{"o":{"x":0,"y":0.88},"i":{"x":0,"y":0.95},"s":[80.35679626464844,0],"t":27},{"s":[65.6614990234375,0],"t":45}]},"r":1,"o":{"a":1,"k":[{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[100],"t":0},{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[100],"t":9},{"o":{"x":0,"y":0.88},"i":{"x":0,"y":0.95},"s":[100],"t":27},{"s":[100],"t":45}]}}],"ind":1}],"v":"5.7.0","fr":60,"op":45.06,"ip":0,"assets":[]} diff --git a/app/src/main/res/raw/funch_splash_icon_lottie.json b/app/src/main/res/raw/funch_splash_icon_lottie.json new file mode 100644 index 00000000..a24e0315 --- /dev/null +++ b/app/src/main/res/raw/funch_splash_icon_lottie.json @@ -0,0 +1 @@ +{"nm":"Flow 2","ddd":0,"h":350,"w":350,"meta":{"g":"LottieFiles Figma v51"},"layers":[{"ty":4,"nm":"boom","sr":1,"st":0,"op":46.06,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":1,"k":[{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[0.63,0.5],"t":0},{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[0.63,0.5],"t":9},{"o":{"x":0,"y":0.88},"i":{"x":0,"y":0.95},"s":[80.36,67.99],"t":27},{"s":[65.66,55.56],"t":45}]},"s":{"a":1,"k":[{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[100,100],"t":0},{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[100,100],"t":9},{"o":{"x":0,"y":0.88},"i":{"x":0,"y":0.95},"s":[100,100],"t":27},{"s":[100,100],"t":45}]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[204.63,175.5],"t":0},{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[204.63,175.5],"t":9},{"o":{"x":0,"y":0.88},"i":{"x":0,"y":0.95},"s":[207.19,174.5],"t":27},{"s":[207.19,174.5],"t":45}]},"r":{"a":1,"k":[{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[0],"t":0},{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[0],"t":9},{"o":{"x":0,"y":0.88},"i":{"x":0,"y":0.95},"s":[-5.14],"t":27},{"s":[-5.14],"t":45}]},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[0],"t":0},{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[0],"t":9},{"o":{"x":0,"y":0.88},"i":{"x":0,"y":0.95},"s":[100],"t":27},{"s":[100],"t":45}]}},"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":1,"k":[{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[-0.04,-0.02],[0,0],[0,0],[-0.03,-0.03],[0,0],[0,0],[0,-0.04],[0,0],[0,0],[0.04,-0.03],[0,0],[0,0],[0.05,0.01],[0,0],[0,0],[0.03,0.02],[0,0],[0,0],[0.01,0.04],[0,0],[0,0],[-0.03,0.03]],"o":[[0,0],[0,0],[0,0],[-0.03,-0.04],[0,0],[0,0],[0,-0.04],[0,0],[0,0],[0.03,-0.02],[0,0],[0,0],[0.05,0],[0,0],[0,0],[0.04,0.03],[0,0],[0,0],[0,0.03],[0,0],[0,0],[-0.02,0.03],[0,0],[0,0],[-0.04,0],[0,0]],"v":[[0.18,0.52],[0.18,0.52],[0,0.49],[0.22,0.47],[0.22,0.36],[0.31,0.33],[0.31,0.27],[0.43,0.17],[0.59,0],[0.85,0.1],[1.05,0.17],[1.12,0.21],[1.15,0.23],[1.09,0.49],[1.25,0.52],[1.12,0.58],[1.11,0.73],[1.15,0.87],[1.05,0.76],[0.94,0.83],[0.77,0.87],[0.59,0.83],[0.59,0.99],[0.22,0.88],[0.09,0.49],[0.18,0.52]]}],"t":0},{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[-0.04,-0.02],[0,0],[0,0],[-0.03,-0.03],[0,0],[0,0],[0,-0.04],[0,0],[0,0],[0.04,-0.03],[0,0],[0,0],[0.05,0.01],[0,0],[0,0],[0.03,0.02],[0,0],[0,0],[0.01,0.04],[0,0],[0,0],[-0.03,0.03]],"o":[[0,0],[0,0],[0,0],[-0.03,-0.04],[0,0],[0,0],[0,-0.04],[0,0],[0,0],[0.03,-0.02],[0,0],[0,0],[0.05,0],[0,0],[0,0],[0.04,0.03],[0,0],[0,0],[0,0.03],[0,0],[0,0],[-0.02,0.03],[0,0],[0,0],[-0.04,0],[0,0]],"v":[[0.18,0.52],[0.18,0.52],[0,0.49],[0.22,0.47],[0.22,0.36],[0.31,0.33],[0.31,0.27],[0.43,0.17],[0.59,0],[0.85,0.1],[1.05,0.17],[1.12,0.21],[1.15,0.23],[1.09,0.49],[1.25,0.52],[1.12,0.58],[1.11,0.73],[1.15,0.87],[1.05,0.76],[0.94,0.83],[0.77,0.87],[0.59,0.83],[0.59,0.99],[0.22,0.88],[0.09,0.49],[0.18,0.52]]}],"t":9},{"o":{"x":0,"y":0.88},"i":{"x":0,"y":0.95},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[-3.04,-1],[0,0],[0,0],[-2.12,-2.13],[0,0],[0,0],[0.33,-2.68],[0,0],[0,0],[2.58,-1.94],[0,0],[0,0],[3.53,0.36],[0,0],[0,0],[2.03,1.16],[0,0],[0,0],[0.52,2.65],[0,0],[0,0],[-2.48,1.97],[0,0]],"o":[[0,0],[0,0],[-1.96,-2.52],[0,0],[0,0],[-0.2,-2.98],[0,0],[0,0],[2.35,-1.36],[0,0],[0,0],[3.24,-0.19],[0,0],[0,0],[3.1,1.71],[0,0],[0,0],[-0.29,2.3],[0,0],[0,0],[-1.76,2.07],[0,0],[0,0],[-3.17,0.13],[0,0],[0,0]],"v":[[1.18,88.89],[29.27,66.47],[12.9,45.22],[16.53,40.18],[35.87,46.55],[33.16,3.43],[38.74,0.98],[71.35,33.77],[108.36,12.13],[113.26,15.34],[109.15,47.58],[138.55,45.87],[140.7,51.69],[118.36,68.28],[159.03,90.57],[157.1,96.62],[111.04,91.83],[108.39,112.89],[103.53,115.28],[84.91,104.74],[58.97,134.85],[53.28,133.36],[45.21,92.64],[3.43,94.55],[1.24,88.79],[1.18,88.89]]}],"t":27},{"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[-2.48,-0.82],[0,0],[0,0],[-1.74,-1.74],[0,0],[0,0],[0.27,-2.19],[0,0],[0,0],[2.11,-1.59],[0,0],[0,0],[2.88,0.29],[0,0],[0,0],[1.66,0.95],[0,0],[0,0],[0.43,2.17],[0,0],[0,0],[-2.03,1.61],[0,0]],"o":[[0,0],[0,0],[-1.6,-2.06],[0,0],[0,0],[-0.16,-2.43],[0,0],[0,0],[1.92,-1.11],[0,0],[0,0],[2.64,-0.16],[0,0],[0,0],[2.54,1.4],[0,0],[0,0],[-0.24,1.88],[0,0],[0,0],[-1.44,1.69],[0,0],[0,0],[-2.59,0.11],[0,0],[0,0]],"v":[[0.96,72.63],[23.92,54.32],[10.54,36.95],[13.51,32.83],[29.31,38.04],[27.09,2.81],[31.66,0.8],[58.3,27.6],[88.54,9.92],[92.55,12.53],[89.19,38.88],[113.21,37.48],[114.97,42.24],[96.71,55.8],[129.95,74.01],[128.37,78.95],[90.73,75.04],[88.57,92.24],[84.59,94.2],[69.38,85.58],[48.18,110.19],[43.54,108.97],[36.94,75.7],[2.8,77.26],[1.01,72.55],[0.96,72.63]]}],"t":45}]}},{"ty":"gf","bm":0,"hd":false,"nm":"","e":{"a":1,"k":[{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[-1.13,2.04],"t":0},{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[-1.13,2.04],"t":9},{"o":{"x":0,"y":0.88},"i":{"x":0,"y":0.95},"s":[80.35679626464844,135.98800659179688],"t":27},{"s":[65.6614990234375,111.11900329589844],"t":45}]},"g":{"p":2,"k":{"a":1,"k":[{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[0,1,0.9375764685892591,0.3721242803358564,1,0.9686666685366163,0.8314117747568617,0.3686666744970808],"t":0},{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[0,1,0.9375764685892591,0.3721242803358564,1,0.9686666685366163,0.8314117747568617,0.3686666744970808],"t":9},{"o":{"x":0,"y":0.88},"i":{"x":0,"y":0.95},"s":[0,1,0.9372941213869581,0.37258824289078807,1,0.9686666685366163,0.8314117747568617,0.3686666744970808],"t":27},{"s":[0,1,0.9372941213869581,0.37258824289078807,1,0.9686666685366163,0.8314117747568617,0.3686666744970808],"t":45}]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"s":{"a":1,"k":[{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[-1.13,0],"t":0},{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[-1.13,0],"t":9},{"o":{"x":0,"y":0.88},"i":{"x":0,"y":0.95},"s":[80.35679626464844,0],"t":27},{"s":[65.6614990234375,0],"t":45}]},"r":1,"o":{"a":1,"k":[{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[100],"t":0},{"o":{"x":0.65,"y":0},"i":{"x":0.35,"y":0},"s":[100],"t":9},{"o":{"x":0,"y":0.88},"i":{"x":0,"y":0.95},"s":[100],"t":27},{"s":[100],"t":45}]}}],"ind":1}],"v":"5.7.0","fr":60,"op":45.06,"ip":0,"assets":[]} diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml deleted file mode 100644 index 52ed88e8..00000000 --- a/app/src/main/res/values-night/themes.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/values/ic_funch_logo_background.xml b/app/src/main/res/values/ic_funch_logo_background.xml new file mode 100644 index 00000000..eb149bdf --- /dev/null +++ b/app/src/main/res/values/ic_funch_logo_background.xml @@ -0,0 +1,4 @@ + + + #151515 + diff --git a/app/src/main/res/values/splash.xml b/app/src/main/res/values/splash.xml new file mode 100644 index 00000000..02380b4a --- /dev/null +++ b/app/src/main/res/values/splash.xml @@ -0,0 +1,10 @@ + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f52a3e67..3689feb5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,4 @@ + - Punch-AOS - \ No newline at end of file + Funch + diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 201deacc..29506206 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -1,16 +1,3 @@ - - - - \ No newline at end of file + +