diff --git a/CHANGELOG.md b/CHANGELOG.md index a70d6e8..e478c09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +# Version 5.0.0: +- Major : Migrated to same ver +- Reworked the entire project strucutre in jetpack compose for better performance and compatibility +- Reduced the app size +- Now the app is more interactive and resposive +- A new and improved media3 player +- Added a new API and now the app syncronizezs with it, showing new lessons without updating the app. + # Version 4.0_r1: - Added language support for Hungarian. - Reworked language system, making it more accurate and user-friendly. diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 09fe49a..8fe52d2 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -49,7 +49,6 @@ android { isMinifyEnabled = true isShrinkResources = true isDebuggable = false - versionNameSuffix = "-release" proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) @@ -58,7 +57,6 @@ android { debug { multiDexEnabled = true isDebuggable = true - versionNameSuffix = "-debug" proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) @@ -147,15 +145,14 @@ dependencies { // Kotlin implementation(libs.kotlinx.coroutines.android) - - implementation("io.ktor:ktor-client-core:2.3.4") - implementation("io.ktor:ktor-client-cio:2.3.4") - implementation("io.ktor:ktor-client-content-negotiation:2.3.4") - implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.4") + implementation(libs.ktor.client.core) + implementation(libs.ktor.client.cio) + implementation(libs.ktor.client.content.negotiation) + implementation(libs.ktor.serialization.kotlinx.json) // Other implementation(libs.lottie.compose) - implementation("io.coil-kt:coil-compose:2.6.0") + implementation(libs.coil.compose) implementation(libs.glide) // Test diff --git a/app/src/main/kotlin/com/d4rk/englishwithlidia/plus/ui/home/HomeComposable.kt b/app/src/main/kotlin/com/d4rk/englishwithlidia/plus/ui/home/HomeComposable.kt index 80e5127..d7f8238 100644 --- a/app/src/main/kotlin/com/d4rk/englishwithlidia/plus/ui/home/HomeComposable.kt +++ b/app/src/main/kotlin/com/d4rk/englishwithlidia/plus/ui/home/HomeComposable.kt @@ -17,6 +17,7 @@ import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.Card import androidx.compose.material3.CircularProgressIndicator @@ -30,6 +31,7 @@ import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource @@ -171,6 +173,7 @@ fun LessonCard(title: String, imageResource: String, onClick: () -> Unit) { modifier = Modifier .fillMaxWidth() .bounceClick() + .clip(RoundedCornerShape(12.dp)) .clickable(onClick = onClick) .aspectRatio(2.06f / 1f), ) { diff --git a/app/src/main/kotlin/com/d4rk/englishwithlidia/plus/ui/home/repository/LessonRepository.kt b/app/src/main/kotlin/com/d4rk/englishwithlidia/plus/ui/home/repository/LessonRepository.kt index 8269a3d..53d7e47 100644 --- a/app/src/main/kotlin/com/d4rk/englishwithlidia/plus/ui/home/repository/LessonRepository.kt +++ b/app/src/main/kotlin/com/d4rk/englishwithlidia/plus/ui/home/repository/LessonRepository.kt @@ -9,6 +9,8 @@ import io.ktor.client.engine.cio.CIO import io.ktor.client.plugins.contentnegotiation.ContentNegotiation import io.ktor.client.request.get import io.ktor.serialization.kotlinx.json.json +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext class LessonRepository { private val client = HttpClient(CIO) { @@ -17,10 +19,10 @@ class LessonRepository { } } - suspend fun getLessonData(): List { + suspend fun getLessonData(): List = withContext(Dispatchers.IO) { val url = - "https://script.googleusercontent.com/macros/echo?user_content_key=IqfXaaMa5_xVh9PXgCkTSSvJ5oXI2E6ovHb-xZ-9oeDNzYVvgbAQub1KyRTJ8iBLSdRQS9gDeA6vYWII3idMI7fMbNijCwsvm5_BxDlH2jW0nuo2oDemN9CCS2h10ox_1xSncGQajx_ryfhECjZEnJ73NK6pJWSpPRfbuzxijC-yIhItdrlA4B3P1J--f1LjXLtmxSn7AD8ey3pHscewS7Oo7Ec-OFT-mp7LnhIc8L9DWUmcQiBQTNz9Jw9Md8uu&lib=MSUzLTgsn65WMd0y5_jDbxNmCwTyR-I_G" - return try { + "https://script.googleusercontent.com/macros/echo?user_content_key=IqfXaaMa5_xVh9PXgCkTSSvJ5oXI2E6ovHb-xZ-9oeDNzYVvgbAQub1KyRTJ8iBLSdRQS9gDeA6vYWII3idMI7fMbNijCwsvm5_BxDlH2jW0nuo2oDemN9CCS2h10ox_1xSncGQajx_ryfhECjZEnJ73NK6pJWSpPRfbuzxijC-yIhItdrlA4B3P1J--f1LjXLtmxSn7AD8ey3pHscewS7Oo7Ec-OFT-mp7LnhIc8L9DWUmcQiBQTNz9Jw9Md8uu&lib=MSUzLTgsn65WMd0y5_jDbxNmCwTyR-I_G" + return@withContext try { val response: ApiResponse = client.get(url).body() response.data.map { networkLesson -> UiLessonsAsset( diff --git a/app/src/main/res/drawable-hdpi/im_lesson1.webp b/app/src/main/res/drawable-hdpi/im_lesson1.webp deleted file mode 100644 index 83fcd40..0000000 Binary files a/app/src/main/res/drawable-hdpi/im_lesson1.webp and /dev/null differ diff --git a/app/src/main/res/drawable-hdpi/im_lesson2.webp b/app/src/main/res/drawable-hdpi/im_lesson2.webp deleted file mode 100644 index 45b8036..0000000 Binary files a/app/src/main/res/drawable-hdpi/im_lesson2.webp and /dev/null differ diff --git a/app/src/main/res/drawable-ldpi/im_lesson1.webp b/app/src/main/res/drawable-ldpi/im_lesson1.webp deleted file mode 100644 index b0b9365..0000000 Binary files a/app/src/main/res/drawable-ldpi/im_lesson1.webp and /dev/null differ diff --git a/app/src/main/res/drawable-ldpi/im_lesson2.webp b/app/src/main/res/drawable-ldpi/im_lesson2.webp deleted file mode 100644 index 59a5e2a..0000000 Binary files a/app/src/main/res/drawable-ldpi/im_lesson2.webp and /dev/null differ diff --git a/app/src/main/res/drawable-mdpi/im_lesson1.webp b/app/src/main/res/drawable-mdpi/im_lesson1.webp deleted file mode 100644 index 2ac65ab..0000000 Binary files a/app/src/main/res/drawable-mdpi/im_lesson1.webp and /dev/null differ diff --git a/app/src/main/res/drawable-mdpi/im_lesson2.webp b/app/src/main/res/drawable-mdpi/im_lesson2.webp deleted file mode 100644 index 6ff1552..0000000 Binary files a/app/src/main/res/drawable-mdpi/im_lesson2.webp and /dev/null differ diff --git a/app/src/main/res/drawable-xhdpi/im_lesson1.webp b/app/src/main/res/drawable-xhdpi/im_lesson1.webp deleted file mode 100644 index 7f8384c..0000000 Binary files a/app/src/main/res/drawable-xhdpi/im_lesson1.webp and /dev/null differ diff --git a/app/src/main/res/drawable-xhdpi/im_lesson2.webp b/app/src/main/res/drawable-xhdpi/im_lesson2.webp deleted file mode 100644 index 2fbe13c..0000000 Binary files a/app/src/main/res/drawable-xhdpi/im_lesson2.webp and /dev/null differ diff --git a/app/src/main/res/drawable-xxhdpi/im_lesson1.webp b/app/src/main/res/drawable-xxhdpi/im_lesson1.webp deleted file mode 100644 index 7f0a566..0000000 Binary files a/app/src/main/res/drawable-xxhdpi/im_lesson1.webp and /dev/null differ diff --git a/app/src/main/res/drawable-xxhdpi/im_lesson2.webp b/app/src/main/res/drawable-xxhdpi/im_lesson2.webp deleted file mode 100644 index 3fdc0bb..0000000 Binary files a/app/src/main/res/drawable-xxhdpi/im_lesson2.webp and /dev/null differ diff --git a/app/src/main/res/drawable-xxxhdpi/im_lesson1.webp b/app/src/main/res/drawable-xxxhdpi/im_lesson1.webp deleted file mode 100644 index 0bb1455..0000000 Binary files a/app/src/main/res/drawable-xxxhdpi/im_lesson1.webp and /dev/null differ diff --git a/app/src/main/res/drawable-xxxhdpi/im_lesson2.webp b/app/src/main/res/drawable-xxxhdpi/im_lesson2.webp deleted file mode 100644 index 31d8ead..0000000 Binary files a/app/src/main/res/drawable-xxxhdpi/im_lesson2.webp and /dev/null differ diff --git a/app/src/main/res/raw/anim_about.lottie b/app/src/main/res/raw/anim_about.lottie deleted file mode 100644 index 8b305eb..0000000 Binary files a/app/src/main/res/raw/anim_about.lottie and /dev/null differ diff --git a/app/src/main/res/raw/anim_feedback.lottie b/app/src/main/res/raw/anim_feedback.lottie deleted file mode 100644 index 27b7207..0000000 Binary files a/app/src/main/res/raw/anim_feedback.lottie and /dev/null differ diff --git a/app/src/main/res/raw/lesson1.ogg b/app/src/main/res/raw/lesson1.ogg deleted file mode 100644 index c85103e..0000000 Binary files a/app/src/main/res/raw/lesson1.ogg and /dev/null differ diff --git a/app/src/main/res/raw/lesson2.ogg b/app/src/main/res/raw/lesson2.ogg deleted file mode 100644 index 1d5830b..0000000 Binary files a/app/src/main/res/raw/lesson2.ogg and /dev/null differ diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 6a13645..86a7de3 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -1,29 +1,4 @@ - - AUD $ - BRL R$ - CAD $ - CHF - CNY ¥ - EUR € - GBP £ - HKD $ - INR ₹ - JPY ¥ - KRW ₩ - MXN $ - NOK kr - NZD $ - RON - RUB ₽ - SAR ﷼ - SEK kr - SGD $ - TRY ₺ - USD $ - ZAR R - - @string/bulgarian @string/english diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 53d50ea..65eb049 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -10,35 +10,13 @@ Read and agree to our Terms of Service and Privacy Policy to continue. Agree - No carts available - Add new cart - Cart name - Shopping cart - We\'re committed to creating a personalized shopping experience for everyone. To make it easier for you to keep track of your selections and enhance your shopping journey, consider giving your cart a name before adding items. - Created on %1$s - Delete Cart - Are you sure you want to delete this cart? - Deleting this cart will permanently remove all items from \"%s\" and cannot be undone. - Cart deleted successfully! - Error deleting cart. Please try again. + Find us on + Website Close? Are you sure you want to exit? Network error occurred while checking for updates An error occurred while checking for updates - Your shopping cart is empty - Item name - Enter item name - Item price - Enter item price - Quantity - Enter quantity - To ensure a seamless checkout experience, please provide details about the items you\'re adding to your cart - Total - Delete Cart Item - Are you sure you want to delete this item? - You are about to delete "%s" from your cart. - Settings Display @@ -62,14 +40,6 @@ Select your preferred language Personalize your experience with your preferred language. Any language changes you make take effect right away, ensuring a seamless experience in your chosen language - Cart settings - Manage how your cart behaves - - Currency - Set your preferred currency for displaying prices - Select your preferred currency - This currency selection will be utilized across the platform for displaying product prices, processing transactions, and providing a more personalized shopping experience - Notifications Manage app notifications @@ -186,41 +156,6 @@ Learn more - - Tell me about yourself (in a job interview) - Bun găsit dragi prieteni. Azi, la ora de engleză vom învăța cum să avem un interview reușit. - Atunci când vrăbiile cântau minunat prin copaci totul era fericit. Noi eram veseli și jucăuși. Dar… ne-au trimis de acasă. Ne-au trimis… la școală they send me away and they thought me how to be sensible și ne-au învățat să fim rezonabili responsible, logical, practical pentru că așa e lumea în care urma să trăim nu-i așa? Dar astăzi este despre interview și așa este lumea interview-urilor practical, responsible, logical and we have to be sensible și noi chiar trebuie să fim de nădejde.\n\nDe fapt la un interview este despre cum să te vinzi how to sell yourself spun experții în interview-uri. Știu că sună cinic cynical ca și în cântecul nostru. Dar chiar așa și este and we have to be dependable orice angajator are nevoie de oameni în care să aibă încredere dependable, iar noi trebuie să ne descriem cât mai pozitiv putem. Partea bună e că orice CEO AgeO manager, orice director, orice angajator, orice meneger de personal, toți sunt și ei oameni, iar noi trebuie să avem în minte să le oferim cea mai bună versiune a noastră. Nu mai este destul să spui că ești onest, hard working, confident, loyal, team player, responsible, sensible, amyrical, nu… Acum trebuie s-o arăți. You have to show them you are responsible, dependable. But how? Pur și simplu le răspunzi cu ceea ce vor să audă la întrebarea Tell me about yourself\n\nSo, tell me about yourself.\n\nLe spunem povestea vieții noastre? So, you want me to tell you the story of my life? No! He does not want to hear you telling him the story of your life. Nu, pentru că nu suntem Brad Pitt în interview cu un vampir. Nu ne întreabă despre viața noastră.. despre cățel, despre părinți. It\'s not about your life story.\n\nYour parents, your background and your dog\'s name...\n\nNo, it\'s not about this.\n\nWhat kind of cat do you have. It is not about that. So, when people hear that question they think Oh, let me tell you my life story and 20 minutes into... you had not talk about anything important. So, what they actually asking this? What are you bringing to the table. So, from now on when you hear the question \"Tell me about yourself\" I want you to make a mental switch. That equals what value could you bring to the company.\n\nWhat value could you bring to the company. Asta vor să audă. Ce valoare aduci companiei. Ce probleme poți să rezolvi. Problems can you solve to the company. Ce probleme rezolvi pentru companie. Asta este cheia numărul 1 pe care v-o aduc astăzi The key number one.\n\nKey number too… Is to be your best self. Be yourself, of cure, be authentic but be the best version of yourself. Fii cea mai bună versiune a ta la interviu. Probabil și în job, dar mai ales la interview trebuie să arăți asta. De ce te potrivești cu ei? Pentru că la urma urmei toți angajatorii vor să știe două lucruri.\n\n1. Dacă poți să-ți faci treaba bine. Can you do the job well? \n2. Ești tu alegerea corectă în poziția respectivă? Are you the right choice for the position? \n3. Are the 3 S. Sunt cei trei S. Succes, strength, situation. Le aduci povestea ta de succes, de putere și de situație. Dacă ești potrivit în situația respectivă.\n\nPovestea de succes!!!\n\nPovestea de succes, ne putem ajuta de cele 7 cuvinte de putere. Vă voi da acele 7 cuvinte de putere.\n\nSeven power words. Prin aceste cuvinte îi spuneți Yes I can do the job! I am the right choice. Primul cuvânt, I am responsible, or responsibility folosim expresii precum It was my responsibility to do this, când vorbim de un job trecut. Pentru că vom face un mic \"background\", o mică istorie a ceea ce am făcut înainte. Și spui: my responsibility was…, responsabilitatea mea era să… Prin asta arăți ce responsabil ești tu, cât de bine poți colabora, \"Colaborate\", este al doilea cuvânt cheie. In my last job I colaborated with… \"Initiative\", al treilea cuvânt de putere. I took initiative, arătă că făceai ceea ce trebuia să faci, fără ca nimeni să ți-o ceară. Okay, it was my initiative to do this… and that…, la fel, \"initiative\" arătă că de fapt aveai încredere în tine și ești un bun muncitor. You showself confidence and you are a hardworker for self. Alt cuvânt de putere este \"a rezolva\" resolve. I resolve the situation when something happened. Când ceva s-a întâmplat. I resolve the situation that ant that and that and by doing that. Alt cuvânt de putere este \"lead\". Chiar dacă nu veți fi într-o situație de manager sau de leaders, cuvântul \"lead\" I was leading, este un cuvânt de putere. \"Result\" este un alt cuvânt puternic my result was. And example este alt cuvânt. Poate vom detalia data viitoare aceste cuvinte. Dar să nu uităm de unde am pornit, de la a fi responsabil. Responsibility. And they told me how to be responsible, logical, practical, not clinical, right? Asta vor să audă. Nu neapărat să spunem prin cuvinte ca noi suntem responsabili, ci că ne-am achitat și ne achităm bine de job. I always follow trought wet I say and gonna go. I am dependable. I hold myself accountable. I take responsibility and do what need to be done. Este exact ceea ce vor să audă că faci ceea ce trebuie să faci. You do what need to be done. Vor să audă că ești în controlul situației. I show self control. Nu îi judeci pe ceilalți, deci știi să colaborezi ești un good player. Use good judgement. Te gândești la consecințe I think about consecuences of my action. Și responsabilitatea este your duty number 1. Îmi îndeplinesc toate obligațiile morale. Și chiar și atunci când greșești, pentru că întotdeauna vă vor întreba despre weaknesses. Weaknesses is the same subject pentru data viitoare avem \"weaknesses\". If I, dacă greșești, if I mess up, it\'s something I always confess up. I confess, marturisesc. I will keep my head up and neber give up. It is my dudy. And responsibility to follow trought. Așa este datoria mea și responsabilitatea să reușesc în tot ceea ce fac și sunt responsabil de asta. You can come to me, puteți conta pe mine. Acesta ar fi trebuit să fie un cântec pentru copii, ne jucam puțin cu registrele, aceasta e ideea dragii mei, astăzi v-am dat 3 chei despre cum să facem față unui inteview și sper că v-am luat puțin din stresul pe care îl avem cu toții atucni când stăm pe scaun cu CV-ul nostru în fața cuiva care ne pune întrebări și vrea să știe despre noi. Asta vrea să audă despre noi, cât de buni suntem și cum ne îndeplinim datoriile întotdeauna. Cât de minunați regi ai paradisului suntem noi.\n\nVom continua data viitoare cu călătoria noastră în tărâmul interview-urilor și să nu uităm să fim întotdeauna buni cu noi înșine și nu prea clinici într-o lume atât de dură. Pentru că la urma urmei trebuie să știm cine suntem și doar noi singuri ne putem da răspunsul la această întrebare. Pentru că la urma urmei voiam să știm cu toții cine suntem. Who I am? Iar răspunsul la această întrebare nu ni-l poate da niciun interview. Dar, orice interview ne poate ajuta să știm cine suntem noi cu adevărat. Și poate într-o zi chiar vom afla. - - To be or not to be - Bun găsit prieteni la lecția de engleză de la radio, sunt Lidia Melinte ghidul vostru printre cuvinte, expresii și puțină muzică în limba engleză, frumoasa limbă a lui William Shakespeare, dar și a lui Freddy Mercury care spunea că tot ceea ce a trebuit să știu am auzit la radio. - My radio, my only friend to teenage nights de Freddy Mercury, cântă la început. I sit alone and watch your light my only friend to teenage nights. Stau singur și-ți privesc lumina unicul meu prieten al nopților mele de adolescent.\n\nBineînțeles putem asculta cântecul optând și pentru lyrics, versuri și chiar vă rog să faceși astfel, să ascultați muzica împreună cu versurile, astfel ve-ți învăța atât vizual cât și auditiv, dar subiectul de astăzi este to be, I am, you are, he is, she is. Bineînțeles frumos exemplificat într-un cântecel de început în învățarea limbii engleze.\n\nI am here, eu sunt aici, you are there. Și chiar așa se întamplă, I am here, you are there, in England I\'m here, in Romanian you are there, in England. He is happy? Who is happy? Somebody is happy. Cineva este fericit, he is happy. She is sad, altcineva este trist, ea este tristă, she is sad.\n\nIt is burning ceva poate să ardă undeva, nu ne gândim, nu știu, o inimă, o pădure, din păcate. It is burning, it, pentru animale, obiecte, fenomene… It.. It is burning, the world is turing. Toate acestea în timp ce lumea se învârte, the world is turning.\n\nÎn timp ce, we are people, noi suntem oameni, and they are plants, și ele sunt plante.\n\nHe is blue, she is red, acestea două fiind stări de spirit, verbul to be exprimă de asemenea stări de pirit.\n\nDupă cum am văzut verbul to be poate exprima și stări de spirit he is blue, she is red. Sunt aceste expresii folosind culorile din limba engleză, sunt foarte multe expresii care folosesc culorile, care de care mai colorate, flying colors. We like to learning English and finish the leason with flying colors cu succes, nu? White elephant, you know the expression, ceva scump și nefolositor. A golden boy, a golden girl. Vreau începutul la he is blue, she is red, de la stari de spirit, cineva este trist, el este trist, he is blue, she is red, dar ea este furioasa. Blue, de asemenea este un cuvânt care intră în foarte multe expresii. True blue, care înseamnă faithful, loial, credincios, once in a blue moon foarte rar, aproape niciodata… Once in a blue moon, out at the blue, din senin, în mod neasteptat, it\'s rained yesterday in Romania out at the blue. La noi nu ploua, sunt 40 de grade deci ar fi o minune să plouă, chiar și in out at the blue pe neașteptate.\n\nMai există băieții cu ochi albaștrii, blue eyed boy, cu altă semnificație decât cea care stă în România, băieți cu ochii albaștrii. Aici se referă la oameni privilegiați. He\'s such a blue eyed boy. The manager always treats him as if he\'s special, deci cineva care primește un tratament special.\n\nMai există și boys in blue, să nu confundăm… Băieții în albastru, adică în uniforme folosită pentru a descrie poliția britanică datorită culorii albastre a uniformei. I saw boys in blue on the street I think everything is OK. Am văzut poliția pe stradă, cred că totul este OK.\n\nMai există și expresia blue color worker, muncitorii care prestează munca fizică, blue color worker, distinct de white color worker, de cei care prestează munca la birou. Dar mai există și pink color, pentru femeile care, sunt secretare sau au munca de asistente, pink color related to jobs and secretarial work. Cu pink, ar fi pink elephants frumoasă expresie care arată că există o halucinație undeva în creierul nostru sau pink slip, o metaforă folosită pentru atunci când cineva este concendiat, iar fired to received a pinks slip, n-am vrea să se întâmple asta.\n\nUmmm.. cu verde, verde îmi place foarte mult expresia have a green thumb de data aceasta nu am folosit I am, ci am folosit to have, have a green thumb, avea talent pentru grădinărit, I think I have a green thumb. I like flowers and I loved plant and take care of them.\n\nRed, pentru exprimarea stărilor mai puternice. I see red, I become very angry! Văd rosu înaintea ochilor, I see red sau I am in the red. I am in red, I am in depth, în datorii, am datorii. Red herring, o expresie folosită pentru ceva care ne distrage atenția, something unimportant that distract attention from the real issue. A red herring. I have something important to write but there is the red herring that disturbs me. Ceva care ne distrage. Red tape, birocrație, mai ales în România. I had to go to much red tape to open this company. - - Lessons - Home - More - Support me - Check for updates… - Changelog - More apps… - Theme - Find us on - Website - Auto Battery Dark Mode - Music - Info - Notification settings> - Try it now!!! - Share using… - Made with ❤ in Romania! - Copied to clipboard! - Subscribe to beta updates - App updates - Privacy and security - Send us your review on Google Play Store. Visit our official website. Lidia\'s official Facebook profile. - Thanks for rating us! - Music Playback - Channel for displaying music playback notifications. - \ No newline at end of file diff --git a/app/src/main/res/xml/shortcuts.xml b/app/src/main/res/xml/shortcuts.xml index b7db56a..3ae4bdd 100644 --- a/app/src/main/res/xml/shortcuts.xml +++ b/app/src/main/res/xml/shortcuts.xml @@ -1,12 +1,12 @@ + android:targetPackage="com.d4rk.englishwithlidia.plus" + android:targetClass="com.d4rk.englishwithlidia.plus.ui.settings.SettingsActivity"/> \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d16f869..fda29ef 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,12 +2,17 @@ agp = "8.5.1" appcompat = "1.7.0" appUpdateKtx = "2.1.0" +coilCompose = "2.6.0" composeBom = "2024.06.00" coreKtx = "1.13.1" billing = "7.0.0" datastoreCore = "1.1.1" glide = "4.16.0" graphicsShapes = "1.0.0-beta01" +ktorClientContentNegotiation = "2.3.12" +ktorClientCio = "2.3.4" +ktorClientCore = "2.3.12" +ktorSerializationKotlinxJson = "2.3.12" lifecycle = "2.8.3" lottieCompose = "4.0.0" material = "1.12.0" @@ -65,6 +70,7 @@ androidx-room-compiler = { module = "androidx.room:room-compiler", version.ref = androidx-room-ktx = { module = "androidx.room:room-ktx", version.ref = "roomKtx" } androidx-room-runtime = { module = "androidx.room:room-runtime", version.ref = "roomKtx" } androidx-ui = { module = "androidx.compose.ui:ui" } +coil-compose = { module = "io.coil-kt:coil-compose", version.ref = "coilCompose" } glide = { module = "com.github.bumptech.glide:glide", version.ref = "glide" } kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "kotlinxCoroutinesAndroid" } androidx-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" } @@ -78,6 +84,10 @@ firebase-perf = { module = "com.google.firebase:firebase-perf" } junit = { group = "junit", name = "junit", version.ref = "junit" } androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" } androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" } +ktor-client-cio = { module = "io.ktor:ktor-client-cio", version.ref = "ktorClientCio" } +ktor-client-content-negotiation = { module = "io.ktor:ktor-client-content-negotiation", version.ref = "ktorClientContentNegotiation" } +ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktorClientCore" } +ktor-serialization-kotlinx-json = { module = "io.ktor:ktor-serialization-kotlinx-json", version.ref = "ktorSerializationKotlinxJson" } lottie-compose = { module = "com.airbnb.android:lottie-compose", version.ref = "lottieCompose" } material = { module = "com.google.android.material:material", version.ref = "material" } play-services-ads = { module = "com.google.android.gms:play-services-ads", version.ref = "playServicesAds" }