Loading app/build.gradle +18 −1 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ plugins { id 'androidx.navigation.safeargs.kotlin' id 'com.google.dagger.hilt.android' id 'kotlin-allopen' id 'org.jetbrains.kotlin.android' } def versionMajor = 2 Loading Loading @@ -42,7 +43,7 @@ def getSentryDsn = { -> } android { compileSdk 33 compileSdk 34 defaultConfig { applicationId "foundation.e.apps" Loading Loading @@ -121,6 +122,12 @@ android { viewBinding true aidl true } buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion "1.4.1" } compileOptions { sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 Loading Loading @@ -218,6 +225,16 @@ dependencies { implementation "androidx.navigation:navigation-fragment-ktx:$navigation_version" implementation "androidx.navigation:navigation-ui-ktx:$navigation_version" // Compose def composeBom = platform('androidx.compose:compose-bom:2023.01.00') implementation(composeBom) androidTestImplementation(composeBom) implementation "androidx.compose.ui:ui" implementation "androidx.compose.ui:ui-tooling-preview" implementation 'androidx.compose.material3:material3' implementation "androidx.compose.material:material-icons-extended" implementation 'androidx.activity:activity-compose:1.8.2' // Hilt def hilt_version = '2.40.5' kapt "com.google.dagger:hilt-compiler:2.44.2" Loading app/src/main/java/foundation/e/apps/ui/setup/signin/SignInFragment.kt +175 −1 Original line number Diff line number Diff line package foundation.e.apps.ui.setup.signin import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedButton import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.ViewCompositionStrategy import androidx.compose.ui.res.colorResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.vectorResource import androidx.compose.ui.text.ExperimentalTextApi import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.DeviceFontFamilyName import androidx.compose.ui.text.font.Font import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.ExperimentalUnitApi import androidx.compose.ui.unit.TextUnit import androidx.compose.ui.unit.TextUnitType import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import androidx.navigation.findNavController Loading @@ -11,6 +49,7 @@ import foundation.e.apps.data.login.LoginViewModel import foundation.e.apps.databinding.FragmentSignInBinding import foundation.e.apps.di.CommonUtilsModule.safeNavigate import foundation.e.apps.utils.showGoogleSignInAlertDialog import timber.log.Timber @AndroidEntryPoint class SignInFragment : Fragment(R.layout.fragment_sign_in) { Loading @@ -21,9 +60,27 @@ class SignInFragment : Fragment(R.layout.fragment_sign_in) { ViewModelProvider(requireActivity())[LoginViewModel::class.java] } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { _binding = FragmentSignInBinding.inflate(inflater, container, false) val view = binding.root _binding!!.composeView.apply { setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed) setContent { MaterialTheme { Login(Modifier.fillMaxSize()) } } } return view } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) _binding = FragmentSignInBinding.bind(view) binding.googleBT.setOnClickListener { context?.showGoogleSignInAlertDialog( Loading @@ -47,6 +104,123 @@ class SignInFragment : Fragment(R.layout.fragment_sign_in) { } } @Composable private fun Login(modifier: Modifier) { Column( modifier = modifier.fillMaxSize(), horizontalAlignment = Alignment.CenterHorizontally ) { Box(modifier = Modifier.Companion.weight(1f).fillMaxWidth()) { Column(modifier = Modifier.align(Alignment.Center)) { Image( imageVector = ImageVector.vectorResource(R.drawable.ic_launcher), contentDescription = "", contentScale = ContentScale.FillBounds, modifier = Modifier.width(108.dp).height(108.dp) ) Text( modifier = Modifier.align(Alignment.CenterHorizontally), text = "App Lounge", fontSize = 16.sp, style = TextStyle(color = Color.DarkGray, fontWeight = FontWeight.Bold) ) } } Column( modifier = Modifier.weight(1f), horizontalAlignment = Alignment.CenterHorizontally ) { WelcomeText() SigninButtons() Text(stringResource(R.string.or), modifier = Modifier.padding(top = 10.dp)) OutlinedButton( modifier = Modifier.padding(start = 40.dp, end = 40.dp, top = 20.dp) .fillMaxWidth(), border = BorderStroke(1.dp, colorResource(R.color.colorAccent)), onClick = { navigateToGoogleSignInFragment() }, shape = RoundedCornerShape(5.dp) ) { SiginInButtonText(stringResource(R.string.pwa_and_open_source_apps)) } } } } @OptIn(ExperimentalTextApi::class, ExperimentalUnitApi::class) @Composable private fun SigninButtons() { OutlinedButton( modifier = Modifier.padding(start = 40.dp, end = 40.dp, top = 20.dp).fillMaxWidth(), border = BorderStroke(1.dp, colorResource(R.color.colorAccent)), onClick = { navigateToGoogleSignInFragment() }, shape = RoundedCornerShape(5.dp) ) { SiginInButtonText("Sign in with Google") } OutlinedButton( modifier = Modifier.padding(horizontal = 40.dp, vertical = 5.dp).fillMaxWidth(), border = BorderStroke(1.dp, colorResource(R.color.colorAccent)), onClick = { viewModel.initialAnonymousLogin { Timber.d("On user saved...") view?.findNavController() ?.safeNavigate( R.id.signInFragment, R.id.action_signInFragment_to_homeFragment ) } }, shape = RoundedCornerShape(5.dp) ) { Row { Image( imageVector = ImageVector.vectorResource(R.drawable.ic_incognito), contentDescription = "", modifier = Modifier.padding(end = 10.dp) ) SiginInButtonText("Anonymous login") } } } @OptIn(ExperimentalTextApi::class, ExperimentalUnitApi::class) @Composable private fun SiginInButtonText(text: String) { Text( text.uppercase(), color = colorResource(R.color.colorAccent), fontFamily = FontFamily( Font(familyName = DeviceFontFamilyName("sans-serif")) ), style = TextStyle(letterSpacing = TextUnit(1.7f, TextUnitType.Sp)), fontWeight = FontWeight.SemiBold ) } @Composable private fun WelcomeText() { Text( "Welcome", style = TextStyle( fontSize = 25.sp, fontWeight = FontWeight.Bold ) ) Text( stringResource(R.string.sign_in_desc), modifier = Modifier.padding(horizontal = 70.dp), style = TextStyle( color = Color.Black, fontSize = 15.sp, textAlign = TextAlign.Center ) ) } override fun onDestroyView() { super.onDestroyView() _binding = null Loading app/src/main/res/drawable/ic_launcher.xml 0 → 100644 +91 −0 Original line number Diff line number Diff line <!-- ~ Apps Quickly and easily install Android apps onto your device! ~ Copyright (C) 2021 E FOUNDATION ~ ~ This program is free software: you can redistribute it and/or modify ~ it under the terms of the GNU General Public License as published by ~ the Free Software Foundation, either version 3 of the License, or ~ (at your option) any later version. ~ ~ This program is distributed in the hope that it will be useful, ~ but WITHOUT ANY WARRANTY; without even the implied warranty of ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ~ GNU General Public License for more details. ~ ~ You should have received a copy of the GNU General Public License ~ along with this program. If not, see <https://www.gnu.org/licenses/>. --> <vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt" android:width="108dp" android:height="108dp" android:viewportWidth="108" android:viewportHeight="108"> <group android:scaleX="0.16913024" android:scaleY="0.17913024" android:translateX="-21.731352" android:translateY="-22.328918"> <group> <clip-path android:pathData="M0,0h933.561v933.561h-933.561z"/> <path android:pathData="M296.81,491.609h298.61v117.272h-298.61z"> <aapt:attr name="android:fillColor"> <gradient android:startY="575.8292" android:startX="482.6315" android:endY="568.4257" android:endX="576.5685" android:type="linear"> <item android:offset="0" android:color="#FFF54057"/> <item android:offset="1" android:color="#FF9C314E"/> </gradient> </aapt:attr> </path> <path android:pathData="M408.23,203.551C397.68,203.551 385.543,211.218 381.019,220.749L374.86,233.707L153.026,701.09C152.46,702.281 152.041,703.434 151.761,704.556C151.76,704.559 151.762,704.568 151.761,704.571C151.504,705.609 151.384,706.616 151.36,707.576C151.357,707.716 151.358,707.854 151.36,707.992C151.368,708.95 151.469,709.859 151.702,710.715C151.951,711.63 152.326,712.482 152.818,713.259C153.309,714.036 153.913,714.74 154.633,715.357C155.353,715.974 156.183,716.5 157.117,716.934C158.051,717.368 159.093,717.717 160.227,717.945C161.36,718.174 162.582,718.287 163.901,718.287L277.846,718.287C279.155,718.287 280.478,718.171 281.818,717.945C281.827,717.944 281.838,717.947 281.848,717.945C281.882,717.94 281.918,717.937 281.952,717.931C283.269,717.703 284.597,717.357 285.909,716.934C287.255,716.5 288.591,715.974 289.896,715.357C291.202,714.74 292.476,714.037 293.705,713.259C294.856,712.532 295.954,711.728 297.008,710.879C297.162,710.755 297.317,710.634 297.469,710.507C298.413,709.719 299.31,708.894 300.147,708.023C300.22,707.947 300.298,707.876 300.37,707.8C300.444,707.721 300.505,707.641 300.578,707.562C301.404,706.666 302.18,705.729 302.869,704.765C302.918,704.696 302.969,704.626 303.018,704.557C303.052,704.508 303.074,704.456 303.107,704.408C303.851,703.33 304.515,702.231 305.056,701.09L466.876,360.134L533.035,220.749C537.559,211.218 532.709,203.551 522.16,203.551L408.23,203.551Z"> <aapt:attr name="android:fillColor"> <gradient android:startY="351.15564" android:startX="333.27975" android:endY="212.06798" android:endX="440.9688" android:type="linear"> <item android:offset="0" android:color="#FF1EC296"/> <item android:offset="1" android:color="#FF22853E"/> </gradient> </aapt:attr> </path> <path android:pathData="M523.478,203.549L407.658,203.549C397.668,203.549 393.036,210.876 397.319,219.901L626.115,701.937C630.398,710.961 641.986,718.288 651.975,718.288L767.795,718.288C777.785,718.288 782.418,710.961 778.134,701.937L549.339,219.901C545.056,210.876 533.468,203.549 523.478,203.549Z" android:strokeColor="#00000000"> <aapt:attr name="android:fillColor"> <gradient android:startY="477.08734" android:startX="694.314" android:endY="326.03583" android:endX="688.7257" android:type="linear"> <item android:offset="0" android:color="#FFF5CA2F"/> <item android:offset="1" android:color="#FFF8D037"/> </gradient> </aapt:attr> </path> <path android:pathData="M408.601,203.549C408.59,203.549 408.58,203.551 408.569,203.551L408.231,203.551C407.901,203.551 407.569,203.558 407.236,203.573C406.904,203.588 406.57,203.609 406.236,203.639C405.901,203.668 405.564,203.705 405.228,203.749C404.891,203.792 404.555,203.842 404.217,203.899C403.879,203.956 403.541,204.019 403.203,204.09C402.865,204.16 402.528,204.238 402.189,204.322C401.851,204.405 401.513,204.495 401.176,204.591C400.838,204.687 400.5,204.789 400.163,204.898C399.827,205.006 399.492,205.121 399.157,205.242C398.822,205.362 398.488,205.488 398.155,205.62C397.823,205.752 397.492,205.889 397.162,206.032C396.832,206.176 396.503,206.325 396.177,206.479C395.85,206.633 395.526,206.794 395.203,206.958C394.881,207.123 394.561,207.292 394.243,207.467C393.925,207.642 393.609,207.823 393.296,208.008C392.983,208.193 392.672,208.382 392.364,208.576C392.256,208.645 392.15,208.717 392.043,208.786C391.845,208.914 391.647,209.04 391.452,209.172C391.15,209.375 390.853,209.584 390.558,209.796C390.264,210.008 389.973,210.224 389.686,210.445C389.399,210.665 389.115,210.891 388.836,211.119C388.557,211.348 388.281,211.579 388.01,211.816C387.739,212.052 387.472,212.293 387.21,212.536C386.948,212.78 386.69,213.029 386.438,213.279C386.185,213.53 385.939,213.784 385.696,214.041C385.454,214.299 385.216,214.559 384.985,214.823C384.753,215.087 384.526,215.353 384.306,215.622C384.085,215.892 383.871,216.165 383.663,216.44C383.454,216.715 383.252,216.993 383.055,217.273C382.859,217.554 382.669,217.837 382.485,218.122C382.302,218.407 382.125,218.696 381.955,218.985C381.785,219.275 381.621,219.567 381.465,219.861C381.31,220.155 381.16,220.452 381.019,220.749L376.252,230.777L376.26,230.82C376.26,230.82 388.455,201.475 403.89,233.869L419.324,266.262L419.324,266.263L465.573,363.701L539.006,208.987C538.802,208.853 538.605,208.707 538.399,208.576C537.784,208.188 537.157,207.817 536.521,207.467C535.885,207.117 535.24,206.787 534.588,206.479C533.935,206.17 533.274,205.884 532.609,205.62C531.944,205.356 531.274,205.114 530.601,204.896C529.928,204.679 529.253,204.487 528.576,204.32C527.9,204.153 527.222,204.012 526.547,203.898C525.872,203.783 525.199,203.696 524.53,203.637C523.86,203.578 523.194,203.549 522.535,203.549L408.601,203.549Z"> <aapt:attr name="android:fillColor"> <gradient android:startY="230.80634" android:startX="459.2523" android:endY="293.8574" android:endX="596.1042" android:type="linear"> <item android:offset="0" android:color="#FF48D0F5"/> <item android:offset="1" android:color="#FF4677C3"/> </gradient> </aapt:attr> </path> </group> </group> </vector> app/src/main/res/layout/fragment_sign_in.xml +6 −1 Original line number Diff line number Diff line Loading @@ -12,7 +12,8 @@ android:layout_height="0dp" android:layout_weight="1" android:gravity="center" android:orientation="vertical"> android:orientation="vertical" android:visibility="visible"> <ImageView android:id="@+id/imageView" Loading Loading @@ -149,5 +150,9 @@ app:strokeColor="@color/colorAccent" /> </androidx.constraintlayout.widget.ConstraintLayout> <androidx.compose.ui.platform.ComposeView android:id="@+id/compose_view" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> No newline at end of file Loading
app/build.gradle +18 −1 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ plugins { id 'androidx.navigation.safeargs.kotlin' id 'com.google.dagger.hilt.android' id 'kotlin-allopen' id 'org.jetbrains.kotlin.android' } def versionMajor = 2 Loading Loading @@ -42,7 +43,7 @@ def getSentryDsn = { -> } android { compileSdk 33 compileSdk 34 defaultConfig { applicationId "foundation.e.apps" Loading Loading @@ -121,6 +122,12 @@ android { viewBinding true aidl true } buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion "1.4.1" } compileOptions { sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 Loading Loading @@ -218,6 +225,16 @@ dependencies { implementation "androidx.navigation:navigation-fragment-ktx:$navigation_version" implementation "androidx.navigation:navigation-ui-ktx:$navigation_version" // Compose def composeBom = platform('androidx.compose:compose-bom:2023.01.00') implementation(composeBom) androidTestImplementation(composeBom) implementation "androidx.compose.ui:ui" implementation "androidx.compose.ui:ui-tooling-preview" implementation 'androidx.compose.material3:material3' implementation "androidx.compose.material:material-icons-extended" implementation 'androidx.activity:activity-compose:1.8.2' // Hilt def hilt_version = '2.40.5' kapt "com.google.dagger:hilt-compiler:2.44.2" Loading
app/src/main/java/foundation/e/apps/ui/setup/signin/SignInFragment.kt +175 −1 Original line number Diff line number Diff line package foundation.e.apps.ui.setup.signin import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedButton import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.ViewCompositionStrategy import androidx.compose.ui.res.colorResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.vectorResource import androidx.compose.ui.text.ExperimentalTextApi import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.DeviceFontFamilyName import androidx.compose.ui.text.font.Font import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.ExperimentalUnitApi import androidx.compose.ui.unit.TextUnit import androidx.compose.ui.unit.TextUnitType import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import androidx.navigation.findNavController Loading @@ -11,6 +49,7 @@ import foundation.e.apps.data.login.LoginViewModel import foundation.e.apps.databinding.FragmentSignInBinding import foundation.e.apps.di.CommonUtilsModule.safeNavigate import foundation.e.apps.utils.showGoogleSignInAlertDialog import timber.log.Timber @AndroidEntryPoint class SignInFragment : Fragment(R.layout.fragment_sign_in) { Loading @@ -21,9 +60,27 @@ class SignInFragment : Fragment(R.layout.fragment_sign_in) { ViewModelProvider(requireActivity())[LoginViewModel::class.java] } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { _binding = FragmentSignInBinding.inflate(inflater, container, false) val view = binding.root _binding!!.composeView.apply { setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed) setContent { MaterialTheme { Login(Modifier.fillMaxSize()) } } } return view } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) _binding = FragmentSignInBinding.bind(view) binding.googleBT.setOnClickListener { context?.showGoogleSignInAlertDialog( Loading @@ -47,6 +104,123 @@ class SignInFragment : Fragment(R.layout.fragment_sign_in) { } } @Composable private fun Login(modifier: Modifier) { Column( modifier = modifier.fillMaxSize(), horizontalAlignment = Alignment.CenterHorizontally ) { Box(modifier = Modifier.Companion.weight(1f).fillMaxWidth()) { Column(modifier = Modifier.align(Alignment.Center)) { Image( imageVector = ImageVector.vectorResource(R.drawable.ic_launcher), contentDescription = "", contentScale = ContentScale.FillBounds, modifier = Modifier.width(108.dp).height(108.dp) ) Text( modifier = Modifier.align(Alignment.CenterHorizontally), text = "App Lounge", fontSize = 16.sp, style = TextStyle(color = Color.DarkGray, fontWeight = FontWeight.Bold) ) } } Column( modifier = Modifier.weight(1f), horizontalAlignment = Alignment.CenterHorizontally ) { WelcomeText() SigninButtons() Text(stringResource(R.string.or), modifier = Modifier.padding(top = 10.dp)) OutlinedButton( modifier = Modifier.padding(start = 40.dp, end = 40.dp, top = 20.dp) .fillMaxWidth(), border = BorderStroke(1.dp, colorResource(R.color.colorAccent)), onClick = { navigateToGoogleSignInFragment() }, shape = RoundedCornerShape(5.dp) ) { SiginInButtonText(stringResource(R.string.pwa_and_open_source_apps)) } } } } @OptIn(ExperimentalTextApi::class, ExperimentalUnitApi::class) @Composable private fun SigninButtons() { OutlinedButton( modifier = Modifier.padding(start = 40.dp, end = 40.dp, top = 20.dp).fillMaxWidth(), border = BorderStroke(1.dp, colorResource(R.color.colorAccent)), onClick = { navigateToGoogleSignInFragment() }, shape = RoundedCornerShape(5.dp) ) { SiginInButtonText("Sign in with Google") } OutlinedButton( modifier = Modifier.padding(horizontal = 40.dp, vertical = 5.dp).fillMaxWidth(), border = BorderStroke(1.dp, colorResource(R.color.colorAccent)), onClick = { viewModel.initialAnonymousLogin { Timber.d("On user saved...") view?.findNavController() ?.safeNavigate( R.id.signInFragment, R.id.action_signInFragment_to_homeFragment ) } }, shape = RoundedCornerShape(5.dp) ) { Row { Image( imageVector = ImageVector.vectorResource(R.drawable.ic_incognito), contentDescription = "", modifier = Modifier.padding(end = 10.dp) ) SiginInButtonText("Anonymous login") } } } @OptIn(ExperimentalTextApi::class, ExperimentalUnitApi::class) @Composable private fun SiginInButtonText(text: String) { Text( text.uppercase(), color = colorResource(R.color.colorAccent), fontFamily = FontFamily( Font(familyName = DeviceFontFamilyName("sans-serif")) ), style = TextStyle(letterSpacing = TextUnit(1.7f, TextUnitType.Sp)), fontWeight = FontWeight.SemiBold ) } @Composable private fun WelcomeText() { Text( "Welcome", style = TextStyle( fontSize = 25.sp, fontWeight = FontWeight.Bold ) ) Text( stringResource(R.string.sign_in_desc), modifier = Modifier.padding(horizontal = 70.dp), style = TextStyle( color = Color.Black, fontSize = 15.sp, textAlign = TextAlign.Center ) ) } override fun onDestroyView() { super.onDestroyView() _binding = null Loading
app/src/main/res/drawable/ic_launcher.xml 0 → 100644 +91 −0 Original line number Diff line number Diff line <!-- ~ Apps Quickly and easily install Android apps onto your device! ~ Copyright (C) 2021 E FOUNDATION ~ ~ This program is free software: you can redistribute it and/or modify ~ it under the terms of the GNU General Public License as published by ~ the Free Software Foundation, either version 3 of the License, or ~ (at your option) any later version. ~ ~ This program is distributed in the hope that it will be useful, ~ but WITHOUT ANY WARRANTY; without even the implied warranty of ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ~ GNU General Public License for more details. ~ ~ You should have received a copy of the GNU General Public License ~ along with this program. If not, see <https://www.gnu.org/licenses/>. --> <vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt" android:width="108dp" android:height="108dp" android:viewportWidth="108" android:viewportHeight="108"> <group android:scaleX="0.16913024" android:scaleY="0.17913024" android:translateX="-21.731352" android:translateY="-22.328918"> <group> <clip-path android:pathData="M0,0h933.561v933.561h-933.561z"/> <path android:pathData="M296.81,491.609h298.61v117.272h-298.61z"> <aapt:attr name="android:fillColor"> <gradient android:startY="575.8292" android:startX="482.6315" android:endY="568.4257" android:endX="576.5685" android:type="linear"> <item android:offset="0" android:color="#FFF54057"/> <item android:offset="1" android:color="#FF9C314E"/> </gradient> </aapt:attr> </path> <path android:pathData="M408.23,203.551C397.68,203.551 385.543,211.218 381.019,220.749L374.86,233.707L153.026,701.09C152.46,702.281 152.041,703.434 151.761,704.556C151.76,704.559 151.762,704.568 151.761,704.571C151.504,705.609 151.384,706.616 151.36,707.576C151.357,707.716 151.358,707.854 151.36,707.992C151.368,708.95 151.469,709.859 151.702,710.715C151.951,711.63 152.326,712.482 152.818,713.259C153.309,714.036 153.913,714.74 154.633,715.357C155.353,715.974 156.183,716.5 157.117,716.934C158.051,717.368 159.093,717.717 160.227,717.945C161.36,718.174 162.582,718.287 163.901,718.287L277.846,718.287C279.155,718.287 280.478,718.171 281.818,717.945C281.827,717.944 281.838,717.947 281.848,717.945C281.882,717.94 281.918,717.937 281.952,717.931C283.269,717.703 284.597,717.357 285.909,716.934C287.255,716.5 288.591,715.974 289.896,715.357C291.202,714.74 292.476,714.037 293.705,713.259C294.856,712.532 295.954,711.728 297.008,710.879C297.162,710.755 297.317,710.634 297.469,710.507C298.413,709.719 299.31,708.894 300.147,708.023C300.22,707.947 300.298,707.876 300.37,707.8C300.444,707.721 300.505,707.641 300.578,707.562C301.404,706.666 302.18,705.729 302.869,704.765C302.918,704.696 302.969,704.626 303.018,704.557C303.052,704.508 303.074,704.456 303.107,704.408C303.851,703.33 304.515,702.231 305.056,701.09L466.876,360.134L533.035,220.749C537.559,211.218 532.709,203.551 522.16,203.551L408.23,203.551Z"> <aapt:attr name="android:fillColor"> <gradient android:startY="351.15564" android:startX="333.27975" android:endY="212.06798" android:endX="440.9688" android:type="linear"> <item android:offset="0" android:color="#FF1EC296"/> <item android:offset="1" android:color="#FF22853E"/> </gradient> </aapt:attr> </path> <path android:pathData="M523.478,203.549L407.658,203.549C397.668,203.549 393.036,210.876 397.319,219.901L626.115,701.937C630.398,710.961 641.986,718.288 651.975,718.288L767.795,718.288C777.785,718.288 782.418,710.961 778.134,701.937L549.339,219.901C545.056,210.876 533.468,203.549 523.478,203.549Z" android:strokeColor="#00000000"> <aapt:attr name="android:fillColor"> <gradient android:startY="477.08734" android:startX="694.314" android:endY="326.03583" android:endX="688.7257" android:type="linear"> <item android:offset="0" android:color="#FFF5CA2F"/> <item android:offset="1" android:color="#FFF8D037"/> </gradient> </aapt:attr> </path> <path android:pathData="M408.601,203.549C408.59,203.549 408.58,203.551 408.569,203.551L408.231,203.551C407.901,203.551 407.569,203.558 407.236,203.573C406.904,203.588 406.57,203.609 406.236,203.639C405.901,203.668 405.564,203.705 405.228,203.749C404.891,203.792 404.555,203.842 404.217,203.899C403.879,203.956 403.541,204.019 403.203,204.09C402.865,204.16 402.528,204.238 402.189,204.322C401.851,204.405 401.513,204.495 401.176,204.591C400.838,204.687 400.5,204.789 400.163,204.898C399.827,205.006 399.492,205.121 399.157,205.242C398.822,205.362 398.488,205.488 398.155,205.62C397.823,205.752 397.492,205.889 397.162,206.032C396.832,206.176 396.503,206.325 396.177,206.479C395.85,206.633 395.526,206.794 395.203,206.958C394.881,207.123 394.561,207.292 394.243,207.467C393.925,207.642 393.609,207.823 393.296,208.008C392.983,208.193 392.672,208.382 392.364,208.576C392.256,208.645 392.15,208.717 392.043,208.786C391.845,208.914 391.647,209.04 391.452,209.172C391.15,209.375 390.853,209.584 390.558,209.796C390.264,210.008 389.973,210.224 389.686,210.445C389.399,210.665 389.115,210.891 388.836,211.119C388.557,211.348 388.281,211.579 388.01,211.816C387.739,212.052 387.472,212.293 387.21,212.536C386.948,212.78 386.69,213.029 386.438,213.279C386.185,213.53 385.939,213.784 385.696,214.041C385.454,214.299 385.216,214.559 384.985,214.823C384.753,215.087 384.526,215.353 384.306,215.622C384.085,215.892 383.871,216.165 383.663,216.44C383.454,216.715 383.252,216.993 383.055,217.273C382.859,217.554 382.669,217.837 382.485,218.122C382.302,218.407 382.125,218.696 381.955,218.985C381.785,219.275 381.621,219.567 381.465,219.861C381.31,220.155 381.16,220.452 381.019,220.749L376.252,230.777L376.26,230.82C376.26,230.82 388.455,201.475 403.89,233.869L419.324,266.262L419.324,266.263L465.573,363.701L539.006,208.987C538.802,208.853 538.605,208.707 538.399,208.576C537.784,208.188 537.157,207.817 536.521,207.467C535.885,207.117 535.24,206.787 534.588,206.479C533.935,206.17 533.274,205.884 532.609,205.62C531.944,205.356 531.274,205.114 530.601,204.896C529.928,204.679 529.253,204.487 528.576,204.32C527.9,204.153 527.222,204.012 526.547,203.898C525.872,203.783 525.199,203.696 524.53,203.637C523.86,203.578 523.194,203.549 522.535,203.549L408.601,203.549Z"> <aapt:attr name="android:fillColor"> <gradient android:startY="230.80634" android:startX="459.2523" android:endY="293.8574" android:endX="596.1042" android:type="linear"> <item android:offset="0" android:color="#FF48D0F5"/> <item android:offset="1" android:color="#FF4677C3"/> </gradient> </aapt:attr> </path> </group> </group> </vector>
app/src/main/res/layout/fragment_sign_in.xml +6 −1 Original line number Diff line number Diff line Loading @@ -12,7 +12,8 @@ android:layout_height="0dp" android:layout_weight="1" android:gravity="center" android:orientation="vertical"> android:orientation="vertical" android:visibility="visible"> <ImageView android:id="@+id/imageView" Loading Loading @@ -149,5 +150,9 @@ app:strokeColor="@color/colorAccent" /> </androidx.constraintlayout.widget.ConstraintLayout> <androidx.compose.ui.platform.ComposeView android:id="@+id/compose_view" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> No newline at end of file