From 7881279196652bf79ae83d971689d6ea6731d833 Mon Sep 17 00:00:00 2001 From: Juby210 <31005896+Juby210@users.noreply.github.com> Date: Sat, 17 Jul 2021 00:26:04 +0200 Subject: [PATCH] init --- .gitignore | 11 ++ LICENSE | 172 ++++++++++++++++ README.md | 4 + app/build.gradle.kts | 72 +++++++ app/proguard-rules.pro | 19 ++ app/src/main/AndroidManifest.xml | 41 ++++ .../com/aliucord/manager/models/Commit.kt | 18 ++ .../manager/preferences/Preferences.kt | 66 +++++++ .../manager/preferences/PreferencesHolder.kt | 13 ++ .../com/aliucord/manager/ui/MainActivity.kt | 169 ++++++++++++++++ .../java/com/aliucord/manager/ui/Screen.kt | 35 ++++ .../manager/ui/components/CommitsList.kt | 127 ++++++++++++ .../ui/components/ExposedDropdownMenu.kt | 63 ++++++ .../aliucord/manager/ui/screens/HomeScreen.kt | 44 +++++ .../manager/ui/screens/SettingsScreen.kt | 81 ++++++++ .../com/aliucord/manager/ui/theme/Color.kt | 14 ++ .../com/aliucord/manager/ui/theme/Shape.kt | 16 ++ .../com/aliucord/manager/ui/theme/Theme.kt | 49 +++++ .../com/aliucord/manager/ui/theme/Type.kt | 20 ++ .../java/com/aliucord/manager/utils/Github.kt | 43 ++++ app/src/main/res/drawable/divider.xml | 5 + app/src/main/res/drawable/ic_discord.xml | 13 ++ .../res/drawable/ic_launcher_foreground.xml | 21 ++ app/src/main/res/layout/commit.xml | 20 ++ app/src/main/res/layout/recycler.xml | 8 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2041 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 4030 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1397 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2579 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 2741 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 5728 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 4194 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 8959 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 5859 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 13068 bytes app/src/main/res/values/colors.xml | 4 + .../res/values/ic_launcher_background.xml | 4 + app/src/main/res/values/strings.xml | 14 ++ app/src/main/res/values/themes.xml | 7 + app/src/main/res/xml/provider_paths.xml | 4 + build.gradle.kts | 23 +++ gradle.properties | 21 ++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59203 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 185 ++++++++++++++++++ gradlew.bat | 89 +++++++++ settings.gradle.kts | 14 ++ 49 files changed, 1525 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 app/build.gradle.kts create mode 100644 app/proguard-rules.pro create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/java/com/aliucord/manager/models/Commit.kt create mode 100644 app/src/main/java/com/aliucord/manager/preferences/Preferences.kt create mode 100644 app/src/main/java/com/aliucord/manager/preferences/PreferencesHolder.kt create mode 100644 app/src/main/java/com/aliucord/manager/ui/MainActivity.kt create mode 100644 app/src/main/java/com/aliucord/manager/ui/Screen.kt create mode 100644 app/src/main/java/com/aliucord/manager/ui/components/CommitsList.kt create mode 100644 app/src/main/java/com/aliucord/manager/ui/components/ExposedDropdownMenu.kt create mode 100644 app/src/main/java/com/aliucord/manager/ui/screens/HomeScreen.kt create mode 100644 app/src/main/java/com/aliucord/manager/ui/screens/SettingsScreen.kt create mode 100644 app/src/main/java/com/aliucord/manager/ui/theme/Color.kt create mode 100644 app/src/main/java/com/aliucord/manager/ui/theme/Shape.kt create mode 100644 app/src/main/java/com/aliucord/manager/ui/theme/Theme.kt create mode 100644 app/src/main/java/com/aliucord/manager/ui/theme/Type.kt create mode 100644 app/src/main/java/com/aliucord/manager/utils/Github.kt create mode 100644 app/src/main/res/drawable/divider.xml create mode 100644 app/src/main/res/drawable/ic_discord.xml create mode 100644 app/src/main/res/drawable/ic_launcher_foreground.xml create mode 100644 app/src/main/res/layout/commit.xml create mode 100644 app/src/main/res/layout/recycler.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/values/colors.xml create mode 100644 app/src/main/res/values/ic_launcher_background.xml create mode 100644 app/src/main/res/values/strings.xml create mode 100644 app/src/main/res/values/themes.xml create mode 100644 app/src/main/res/xml/provider_paths.xml create mode 100644 build.gradle.kts create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle.kts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aaf4467 --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +*.iml +.gradle +/local.properties +.idea +.DS_Store +build +release +/captures +.externalNativeBuild +.cxx +local.properties diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..95230e3 --- /dev/null +++ b/LICENSE @@ -0,0 +1,172 @@ +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of +authorship (the "Original Work") whose owner (the "Licensor") has placed the +following licensing notice adjacent to the copyright notice for the Original +Work: + +Licensed under the Open Software License version 3.0 + +1) Grant of Copyright License. Licensor grants You a worldwide, royalty-free, +non-exclusive, sublicensable license, for the duration of the copyright, to do +the following: + + a) to reproduce the Original Work in copies, either alone or as part of a + collective work; + + b) to translate, adapt, alter, transform, modify, or arrange the Original + Work, thereby creating derivative works ("Derivative Works") based upon the + Original Work; + + c) to distribute or communicate copies of the Original Work and Derivative + Works to the public, with the proviso that copies of Original Work or + Derivative Works that You distribute or communicate shall be licensed under + this Open Software License; + + d) to perform the Original Work publicly; and + + e) to display the Original Work publicly. + +2) Grant of Patent License. Licensor grants You a worldwide, royalty-free, +non-exclusive, sublicensable license, under patent claims owned or controlled +by the Licensor that are embodied in the Original Work as furnished by the +Licensor, for the duration of the patents, to make, use, sell, offer for sale, +have made, and import the Original Work and Derivative Works. + +3) Grant of Source Code License. The term "Source Code" means the preferred +form of the Original Work for making modifications to it and all available +documentation describing how to modify the Original Work. Licensor agrees to +provide a machine-readable copy of the Source Code of the Original Work along +with each copy of the Original Work that Licensor distributes. Licensor +reserves the right to satisfy this obligation by placing a machine-readable +copy of the Source Code in an information repository reasonably calculated to +permit inexpensive and convenient access by You for as long as Licensor +continues to distribute the Original Work. + +4) Exclusions From License Grant. Neither the names of Licensor, nor the names +of any contributors to the Original Work, nor any of their trademarks or +service marks, may be used to endorse or promote products derived from this +Original Work without express prior permission of the Licensor. Except as +expressly stated herein, nothing in this License grants any license to +Licensor's trademarks, copyrights, patents, trade secrets or any other +intellectual property. No patent license is granted to make, use, sell, offer +for sale, have made, or import embodiments of any patent claims other than the +licensed claims defined in Section 2. No license is granted to the trademarks +of Licensor even if such marks are included in the Original Work. Nothing in +this License shall be interpreted to prohibit Licensor from licensing under +terms different from this License any Original Work that Licensor otherwise +would have a right to license. + +5) External Deployment. The term "External Deployment" means the use, +distribution, or communication of the Original Work or Derivative Works in any +way such that the Original Work or Derivative Works may be used by anyone +other than You, whether those works are distributed or communicated to those +persons or made available as an application intended for use over a network. +As an express condition for the grants of license hereunder, You must treat +any External Deployment by You of the Original Work or a Derivative Work as a +distribution under section 1(c). + +6) Attribution Rights. You must retain, in the Source Code of any Derivative +Works that You create, all copyright, patent, or trademark notices from the +Source Code of the Original Work, as well as any notices of licensing and any +descriptive text identified therein as an "Attribution Notice." You must cause +the Source Code for any Derivative Works that You create to carry a prominent +Attribution Notice reasonably calculated to inform recipients that You have +modified the Original Work. + +7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that +the copyright in and to the Original Work and the patent rights granted herein +by Licensor are owned by the Licensor or are sublicensed to You under the +terms of this License with the permission of the contributor(s) of those +copyrights and patent rights. Except as expressly stated in the immediately +preceding sentence, the Original Work is provided under this License on an "AS +IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without +limitation, the warranties of non-infringement, merchantability or fitness for +a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK +IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this +License. No license to the Original Work is granted by this License except +under this disclaimer. + +8) Limitation of Liability. Under no circumstances and under no legal theory, +whether in tort (including negligence), contract, or otherwise, shall the +Licensor be liable to anyone for any indirect, special, incidental, or +consequential damages of any character arising as a result of this License or +the use of the Original Work including, without limitation, damages for loss +of goodwill, work stoppage, computer failure or malfunction, or any and all +other commercial damages or losses. This limitation of liability shall not +apply to the extent applicable law prohibits such limitation. + +9) Acceptance and Termination. If, at any time, You expressly assented to this +License, that assent indicates your clear and irrevocable acceptance of this +License and all of its terms and conditions. If You distribute or communicate +copies of the Original Work or a Derivative Work, You must make a reasonable +effort under the circumstances to obtain the express assent of recipients to +the terms of this License. This License conditions your rights to undertake +the activities listed in Section 1, including your right to create Derivative +Works based upon the Original Work, and doing so without honoring these terms +and conditions is prohibited by copyright law and international treaty. +Nothing in this License is intended to affect copyright exceptions and +limitations (including "fair use" or "fair dealing"). This License shall +terminate immediately and You may no longer exercise any of the rights granted +to You by this License upon your failure to honor the conditions in Section +1(c). + +10) Termination for Patent Action. This License shall terminate automatically +and You may no longer exercise any of the rights granted to You by this +License as of the date You commence an action, including a cross-claim or +counterclaim, against Licensor or any licensee alleging that the Original Work +infringes a patent. This termination provision shall not apply for an action +alleging patent infringement by combinations of the Original Work with other +software or hardware. + +11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this +License may be brought only in the courts of a jurisdiction wherein the +Licensor resides or in which Licensor conducts its primary business, and under +the laws of that jurisdiction excluding its conflict-of-law provisions. The +application of the United Nations Convention on Contracts for the +International Sale of Goods is expressly excluded. Any use of the Original +Work outside the scope of this License or after its termination shall be +subject to the requirements and penalties of copyright or patent law in the +appropriate jurisdiction. This section shall survive the termination of this +License. + +12) Attorneys' Fees. In any action to enforce the terms of this License or +seeking damages relating thereto, the prevailing party shall be entitled to +recover its costs and expenses, including, without limitation, reasonable +attorneys' fees and costs incurred in connection with such action, including +any appeal of such action. This section shall survive the termination of this +License. + +13) Miscellaneous. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent necessary +to make it enforceable. + +14) Definition of "You" in This License. "You" throughout this License, +whether in upper or lower case, means an individual or a legal entity +exercising rights under, and complying with all of the terms of, this License. +For legal entities, "You" includes any entity that controls, is controlled by, +or is under common control with you. For purposes of this definition, +"control" means (i) the power, direct or indirect, to cause the direction or +management of such entity, whether by contract or otherwise, or (ii) ownership +of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial +ownership of such entity. + +15) Right to Use. You may use the Original Work in all ways not otherwise +restricted or conditioned by this License or by law, and Licensor promises not +to interfere with or be responsible for such uses by You. + +16) Modification of This License. This License is Copyright © 2005 Lawrence +Rosen. Permission is granted to copy, distribute, or communicate this License +without modification. Nothing in this License permits You to modify this +License as applied to the Original Work or to Derivative Works. However, You +may modify the text of this License and copy, distribute or communicate your +modified version (the "Modified License") and apply it to other original works +of authorship subject to the following conditions: (i) You may not indicate in +any way that your Modified License is the "Open Software License" or "OSL" and +you may not use those names in the name of your Modified License; (ii) You +must replace the notice specified in the first paragraph above with the notice +"Licensed under " or with a notice of your own +that is not confusingly similar to the notice in this License; and (iii) You +may not claim that your original works are open source software unless your +Modified License has been approved by Open Source Initiative (OSI) and You +comply with its license review and certification process. diff --git a/README.md b/README.md new file mode 100644 index 0000000..3c275b6 --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +# Aliucord Manager +Aliucord Manager - Aliucord Installer rewrite in [Kotlin](https://kotlinlang.org) and [Jetpack Compose](https://developer.android.com/jetpack/compose). + +INFO: This app is not functional yet, if you want to install Aliucord - [read this](https://github.com/Aliucord/Aliucord#-installation) diff --git a/app/build.gradle.kts b/app/build.gradle.kts new file mode 100644 index 0000000..af23557 --- /dev/null +++ b/app/build.gradle.kts @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2021 Juby210 + * Licensed under the Open Software License version 3.0 + */ + +val accompanistVersion = "0.14.0" +val composeVersion = "1.0.0-rc02" + +plugins { + id("com.android.application") + id("kotlin-android") +} + +android { + compileSdk = 30 + + defaultConfig { + applicationId = "com.aliucord.manager" + minSdk = 24 + targetSdk = 30 + versionCode = 1 + versionName = "0.0.1" + + vectorDrawables.useSupportLibrary = true + + buildConfigField("String", "TAG", "\"AliucordManager\"") + buildConfigField("String", "SUPPORT_SERVER", "\"EsNDvBaHVU\"") + } + + buildTypes { + release { + isMinifyEnabled = true + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = "1.8" + freeCompilerArgs = freeCompilerArgs + "-Xopt-in=kotlin.RequiresOptIn" + } + buildFeatures { + compose = true + } + composeOptions { + kotlinCompilerExtensionVersion = composeVersion + } +} + +dependencies { + // core dependencies + implementation("androidx.appcompat:appcompat:1.3.0") + implementation("androidx.core:core-ktx:1.6.0") + implementation("com.google.android.material:material:1.4.0") + + // compose dependencies + implementation("androidx.activity:activity-compose:1.3.0-rc02") + implementation("androidx.compose.ui:ui:${composeVersion}") + implementation("androidx.compose.material:material:${composeVersion}") + implementation("androidx.compose.ui:ui-tooling:${composeVersion}") + implementation("androidx.constraintlayout:constraintlayout-compose:1.0.0-alpha08") + implementation("androidx.navigation:navigation-compose:2.4.0-alpha04") + + // accompanist dependencies + implementation("com.google.accompanist:accompanist-systemuicontroller:${accompanistVersion}") + implementation("com.google.accompanist:accompanist-permissions:${accompanistVersion}") + + // other dependencies + implementation("com.google.code.gson:gson:2.8.7") +} diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..9f38a9b --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,19 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +-keepattributes SourceFile,LineNumberTable + +-keep class com.aliucord.manager.models.** { private final *; } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..f73aa81 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/java/com/aliucord/manager/models/Commit.kt b/app/src/main/java/com/aliucord/manager/models/Commit.kt new file mode 100644 index 0000000..9e07eed --- /dev/null +++ b/app/src/main/java/com/aliucord/manager/models/Commit.kt @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2021 Juby210 + * Licensed under the Open Software License version 3.0 + */ + +package com.aliucord.manager.models + +import com.google.gson.annotations.SerializedName + +class Commit( + @SerializedName("html_url") val htmlUrl: String, + val sha: String, + val commit: Commit, + val author: Author +) { + class Author(@SerializedName("login") val name: String) + class Commit(val message: String) +} diff --git a/app/src/main/java/com/aliucord/manager/preferences/Preferences.kt b/app/src/main/java/com/aliucord/manager/preferences/Preferences.kt new file mode 100644 index 0000000..e02b538 --- /dev/null +++ b/app/src/main/java/com/aliucord/manager/preferences/Preferences.kt @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2021 Juby210 + * Licensed under the Open Software License version 3.0 + */ + +package com.aliucord.manager.preferences + +import android.content.SharedPreferences +import androidx.compose.runtime.mutableStateOf +import kotlin.reflect.KProperty + +var sharedPreferences: SharedPreferences? = null + +class Preference( + private val key: String, + defaultValue: T, + getter: SharedPreferences.(key: String, defaultValue: T) -> T?, + private val setter: SharedPreferences.Editor.(key: String, newValue: T) -> Unit +) { + val value = mutableStateOf(sharedPreferences!!.getter(key, defaultValue) ?: defaultValue) + + operator fun getValue(thisRef: Any?, property: KProperty<*>) = value.value + + operator fun setValue(thisRef: Any?, property: KProperty<*>, newValue: T) = set(newValue) + + fun get() = value.value + + fun set(newValue: T) { + if (value.value != newValue) { + value.value = newValue + val editor = sharedPreferences!!.edit() + editor.setter(key, newValue) + editor.apply() + } + } +} + +fun boolPreference( + key: String, + defaultValue: Boolean = false +) = Preference( + key, + defaultValue, + SharedPreferences::getBoolean, + SharedPreferences.Editor::putBoolean +) + +fun intPreference( + key: String, + defaultValue: Int = 0 +) = Preference( + key, + defaultValue, + SharedPreferences::getInt, + SharedPreferences.Editor::putInt +) + +fun stringPreference( + key: String, + defaultValue: String +) = Preference( + key, + defaultValue, + SharedPreferences::getString, + SharedPreferences.Editor::putString +) diff --git a/app/src/main/java/com/aliucord/manager/preferences/PreferencesHolder.kt b/app/src/main/java/com/aliucord/manager/preferences/PreferencesHolder.kt new file mode 100644 index 0000000..bf14bba --- /dev/null +++ b/app/src/main/java/com/aliucord/manager/preferences/PreferencesHolder.kt @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2021 Juby210 + * Licensed under the Open Software License version 3.0 + */ + +package com.aliucord.manager.preferences + +import android.os.Environment + +val themePreference = intPreference("theme") +val replaceBgPreference = boolPreference("replace_bg", true) +val useDexFromStoragePreference = boolPreference("use_dex_from_storage") +val dexLocationPreference = stringPreference("dex_location", Environment.getExternalStorageDirectory().absolutePath + "/Aliucord/Aliucord.dex") diff --git a/app/src/main/java/com/aliucord/manager/ui/MainActivity.kt b/app/src/main/java/com/aliucord/manager/ui/MainActivity.kt new file mode 100644 index 0000000..c412022 --- /dev/null +++ b/app/src/main/java/com/aliucord/manager/ui/MainActivity.kt @@ -0,0 +1,169 @@ +/* + * Copyright (c) 2021 Juby210 + * Licensed under the Open Software License version 3.0 + */ + +package com.aliucord.manager.ui + +import android.Manifest +import android.content.Context +import android.content.Intent +import android.net.Uri +import android.os.Bundle +import android.provider.Settings +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.compose.foundation.layout.* +import androidx.compose.material.* +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.ArrowBack +import androidx.compose.material.icons.filled.MoreVert +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import androidx.navigation.compose.currentBackStackEntryAsState +import androidx.navigation.compose.rememberNavController +import com.aliucord.manager.BuildConfig +import com.aliucord.manager.R +import com.aliucord.manager.preferences.sharedPreferences +import com.aliucord.manager.ui.theme.AliucordManagerTheme +import com.aliucord.manager.ui.theme.primaryColor +import com.aliucord.manager.ui.theme.primaryColorDark +import com.aliucord.manager.utils.Github +import com.google.accompanist.permissions.ExperimentalPermissionsApi +import com.google.accompanist.permissions.PermissionRequired +import com.google.accompanist.permissions.PermissionState +import com.google.accompanist.permissions.rememberPermissionState +import com.google.accompanist.systemuicontroller.rememberSystemUiController + +class MainActivity : ComponentActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + sharedPreferences = getSharedPreferences(BuildConfig.APPLICATION_ID + "_preferences", Context.MODE_PRIVATE) + Github.checkForUpdates() + setContent { + AliucordManagerTheme { + MainActivityLayout() + } + } + } +} + +@OptIn(ExperimentalPermissionsApi::class) +@Composable +fun MainActivityLayout() { + val systemUiController = rememberSystemUiController() + val storagePermissionState = rememberPermissionState(Manifest.permission.WRITE_EXTERNAL_STORAGE) + + SideEffect { + systemUiController.setSystemBarsColor(primaryColorDark) + if (!storagePermissionState.hasPermission) storagePermissionState.launchPermissionRequest() + } + + val navController = rememberNavController() + var isMenuExpanded by remember { mutableStateOf(false) } + + Scaffold( + topBar = { + val route = navController.currentBackStackEntryAsState().value?.destination?.route ?: Screen.Home.route + TopAppBar( + title = { Text(stringResource(Screen.SCREENS.find { it.route == route }!!.displayName)) }, + backgroundColor = primaryColor, + contentColor = MaterialTheme.colors.onPrimary, + navigationIcon = if (route != Screen.Home.route) {{ + IconButton(onClick = { navController.popBackStack() }) { + Icon( + imageVector = Icons.Default.ArrowBack, + contentDescription = null, + tint = MaterialTheme.colors.onPrimary + ) + } + }} else null, + actions = { + if (route != Screen.Home.route) return@TopAppBar + val context = LocalContext.current + IconButton(onClick = { context.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("https://discord.gg/${BuildConfig.SUPPORT_SERVER}"))) }) { + Icon( + painter = painterResource(R.drawable.ic_discord), + contentDescription = null, + tint = MaterialTheme.colors.onPrimary + ) + } + IconButton(onClick = { isMenuExpanded = !isMenuExpanded }) { + Icon( + imageVector = Icons.Default.MoreVert, + contentDescription = stringResource(R.string.show_menu), + tint = MaterialTheme.colors.onPrimary + ) + } + DropdownMenu(expanded = isMenuExpanded, onDismissRequest = { isMenuExpanded = false }) { + DropdownMenuItem(onClick = { + isMenuExpanded = false + navController.navigate(Screen.Settings.route) { + popUpTo(Screen.Home.route) { saveState = true } + } + }) { + Text(stringResource(id = Screen.Settings.displayName)) + } + } + } + ) + } + ) { + PermissionRequired( + permissionState = storagePermissionState, + permissionNotGrantedContent = { GrantPermission(permissionState = storagePermissionState) }, + permissionNotAvailableContent = { GrantPermission(permissionState = storagePermissionState) } + ) { + NavHost( + navController, + startDestination = Screen.Home.route + ) { + for (screen in Screen.SCREENS) { + composable(screen.route) { screen.content() } + } + } + } + } +} + +@OptIn(ExperimentalPermissionsApi::class) +@Composable +fun GrantPermission(permissionState: PermissionState) { + Column( + modifier = Modifier.fillMaxSize(), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text(stringResource(R.string.permission_required), style = MaterialTheme.typography.h6, textAlign = TextAlign.Center) + Spacer(Modifier.height(8.dp)) + Row { + val context = LocalContext.current + + Button(onClick = { permissionState.launchPermissionRequest() }) { + Text(stringResource(R.string.permission_grant)) + } + Spacer(Modifier.width(8.dp)) + Button( + onClick = { + context.startActivity(Intent( + Settings.ACTION_APPLICATION_DETAILS_SETTINGS, + Uri.fromParts("package", BuildConfig.APPLICATION_ID, null) + )) + }, + colors = ButtonDefaults.buttonColors(backgroundColor = Color.LightGray, contentColor = Color.Black) + ) { + Text(stringResource(R.string.open_settings)) + } + } + } +} diff --git a/app/src/main/java/com/aliucord/manager/ui/Screen.kt b/app/src/main/java/com/aliucord/manager/ui/Screen.kt new file mode 100644 index 0000000..73bc708 --- /dev/null +++ b/app/src/main/java/com/aliucord/manager/ui/Screen.kt @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Juby210 + * Licensed under the Open Software License version 3.0 + */ + +package com.aliucord.manager.ui + +import androidx.annotation.StringRes +import androidx.compose.runtime.Composable +import com.aliucord.manager.R +import com.aliucord.manager.ui.screens.HomeScreen +import com.aliucord.manager.ui.screens.SettingsScreen + +sealed class Screen( + val route: String, + @StringRes val displayName: Int, + val content: @Composable () -> Unit +) { + companion object { + // NOTE: without lazy it doesn't work, kotlin moment https://youtrack.jetbrains.com/issue/KT-8970 + val SCREENS by lazy { listOf(Home, Settings) } + } + + object Home : Screen( + "home", + R.string.app_name, + { HomeScreen() } + ) + + object Settings : Screen( + "settings", + R.string.settings, + { SettingsScreen() } + ) +} diff --git a/app/src/main/java/com/aliucord/manager/ui/components/CommitsList.kt b/app/src/main/java/com/aliucord/manager/ui/components/CommitsList.kt new file mode 100644 index 0000000..5a2d245 --- /dev/null +++ b/app/src/main/java/com/aliucord/manager/ui/components/CommitsList.kt @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2021 Juby210 + * Licensed under the Open Software License version 3.0 + */ + +package com.aliucord.manager.ui.components + +import android.annotation.SuppressLint +import android.content.Intent +import android.graphics.Color +import android.net.Uri +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.material.CircularProgressIndicator +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Text +import androidx.compose.runtime.* +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.compose.ui.viewinterop.AndroidView +import androidx.constraintlayout.compose.ConstraintLayout +import androidx.recyclerview.widget.DividerItemDecoration +import androidx.recyclerview.widget.RecyclerView +import com.aliucord.manager.BuildConfig +import com.aliucord.manager.R +import com.aliucord.manager.models.Commit +import com.aliucord.manager.ui.theme.isDark +import com.aliucord.manager.utils.Github +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch + +private class CommitData( + val commit: Commit, + val buildSha: String? +) + +@Composable +fun CommitsList(selectedCommit: MutableState, modifier: Modifier = Modifier) { + val coroutineScope = rememberCoroutineScope { Dispatchers.IO } + var isLoading by remember { mutableStateOf(true) } + val commits = remember { mutableStateListOf() } + + if (isLoading) { + ConstraintLayout(modifier = modifier + .fillMaxSize() + .padding(12.dp)) { + CommitsHeader() + CircularProgressIndicator(modifier = Modifier.constrainAs(createRef()) { + top.linkTo(parent.top) + bottom.linkTo(parent.bottom) + start.linkTo(parent.start) + end.linkTo(parent.end) + }) + } + + LaunchedEffect(null) { + coroutineScope.launch { + try { + val buildCommits = Github.getCommits(mapOf("sha" to "builds", "path" to "Aliucord.dex", "per_page" to "50")) + val commits2 = Github.getCommits(mapOf("per_page" to "50")) + commits.addAll(commits2.map { c -> CommitData(c, buildCommits.find { bc -> bc.commit.message.substring(6) == c.sha }?.sha) }) + isLoading = false + if (commits.size > 0) selectedCommit.value = commits.firstOrNull { it.buildSha != null }?.buildSha + } catch (e: Throwable) { + Log.e(BuildConfig.TAG, "Failed to get commits", e) + } + } + } + } else { + val dark = isDark() + + // LazyColumn causes too much lags, also you can't get scrollbar on it, so I used AndroidView with RecyclerView for now + Column( + modifier = modifier + .fillMaxSize() + .padding(12.dp) + ) { + CommitsHeader() + AndroidView({ context -> View.inflate(context, R.layout.recycler, null).apply { + val rv = this as RecyclerView + rv.adapter = CommitsAdapter(commits, dark) + rv.addItemDecoration(DividerItemDecoration(context, DividerItemDecoration.VERTICAL)) + }}) + } + } +} + +@Composable +private fun CommitsHeader() { + Text(stringResource(R.string.commits), style = MaterialTheme.typography.subtitle1) +} + +private class CommitsAdapter(private val commits: List, private val dark: Boolean) : RecyclerView.Adapter() { + class ViewHolder(view: View, dark: Boolean) : RecyclerView.ViewHolder(view) { + val sha: TextView = view.findViewById(R.id.commit_sha) + val message: TextView = view.findViewById(R.id.commit_message) + + init { + message.setTextColor(if (dark) 0xccffffff.toInt() else 0xcc000000.toInt()) + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = + ViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.commit, parent, false), dark) + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + val data = commits[position] + val commit = data.commit + val color = if (data.buildSha != null) holder.sha.context.getColor(R.color.primary) else Color.GRAY + + holder.sha.text = commit.sha.substring(0, 7) + holder.sha.setTextColor(color) + holder.sha.setOnClickListener { it.context.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(commit.htmlUrl))) } + + holder.message.text = "${commit.commit.message.split("\n")[0]} - ${commit.author.name}" + } + + override fun getItemCount() = commits.size +} diff --git a/app/src/main/java/com/aliucord/manager/ui/components/ExposedDropdownMenu.kt b/app/src/main/java/com/aliucord/manager/ui/components/ExposedDropdownMenu.kt new file mode 100644 index 0000000..11da15e --- /dev/null +++ b/app/src/main/java/com/aliucord/manager/ui/components/ExposedDropdownMenu.kt @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2021 Juby210 + * Licensed under the Open Software License version 3.0 + */ + +package com.aliucord.manager.ui.components + +import androidx.compose.animation.core.FastOutSlowInEasing +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.animation.core.tween +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.width +import androidx.compose.material.* +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.ArrowDropDown +import androidx.compose.runtime.* +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.rotate +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp + +@ExperimentalMaterialApi +@Composable +fun ExposedDropdownMenu( + items: Array, + selectedItem: Int, + selectItem: (item: Int) -> Unit = {}, + width: Dp = 200.dp +) { + var expanded by remember { mutableStateOf(false) } + val rotateAnimation by animateFloatAsState( + targetValue = if (expanded) 180F else 0F, + animationSpec = tween( + durationMillis = 250, + easing = FastOutSlowInEasing + ) + ) + + Column(modifier = Modifier.width(width)) { + ListItem( + text = { Text(items[selectedItem]) }, + trailing = { + Icon(imageVector = Icons.Filled.ArrowDropDown, contentDescription = null, modifier = Modifier.rotate(rotateAnimation)) + }, + modifier = Modifier.clickable { expanded = !expanded } + ) + if (expanded) Divider(color = MaterialTheme.colors.primary) else Divider() + DropdownMenu( + expanded = expanded, + onDismissRequest = { expanded = false }, + modifier = Modifier.width(width) + ) { + items.forEachIndexed { i, item -> + DropdownMenuItem( + onClick = { selectItem(i) } + ) { + Text(item) + } + } + } + } +} diff --git a/app/src/main/java/com/aliucord/manager/ui/screens/HomeScreen.kt b/app/src/main/java/com/aliucord/manager/ui/screens/HomeScreen.kt new file mode 100644 index 0000000..ba41008 --- /dev/null +++ b/app/src/main/java/com/aliucord/manager/ui/screens/HomeScreen.kt @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2021 Juby210 + * Licensed under the Open Software License version 3.0 + */ + +package com.aliucord.manager.ui.screens + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.material.Card +import androidx.compose.material.ExperimentalMaterialApi +import androidx.compose.material.ListItem +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.buildAnnotatedString +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.withStyle +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.aliucord.manager.ui.components.CommitsList + +@OptIn(ExperimentalMaterialApi::class) +@Composable +@Preview +fun HomeScreen() { + val selectedCommit = remember { mutableStateOf(null) } + Column(modifier = Modifier.padding(8.dp)) { + Card(modifier = Modifier.padding(bottom = 8.dp)) { + ListItem( + text = { Text("Aliucord") }, + secondaryText = { Text(buildAnnotatedString { + append("Supported version: ") + withStyle(SpanStyle(fontWeight = FontWeight.Bold)) { append(selectedCommit.value ?: "blah") } + }) }, + modifier = Modifier.padding(vertical = 4.dp) + ) + } + Card { CommitsList(selectedCommit) } + } +} diff --git a/app/src/main/java/com/aliucord/manager/ui/screens/SettingsScreen.kt b/app/src/main/java/com/aliucord/manager/ui/screens/SettingsScreen.kt new file mode 100644 index 0000000..8e19c47 --- /dev/null +++ b/app/src/main/java/com/aliucord/manager/ui/screens/SettingsScreen.kt @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2021 Juby210 + * Licensed under the Open Software License version 3.0 + */ + +package com.aliucord.manager.ui.screens + +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material.* +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import com.aliucord.manager.R +import com.aliucord.manager.preferences.dexLocationPreference +import com.aliucord.manager.preferences.replaceBgPreference +import com.aliucord.manager.preferences.themePreference +import com.aliucord.manager.preferences.useDexFromStoragePreference +import com.aliucord.manager.ui.components.ExposedDropdownMenu + +private val themes = arrayOf("System", "Light", "Dark") + +@OptIn(ExperimentalMaterialApi::class) +@Composable +fun SettingsScreen() { + Column { + val modifier = Modifier.padding(top = 8.dp) + + ListItem( + text = { Text(stringResource(R.string.theme)) }, + trailing = { + ExposedDropdownMenu( + items = themes, + selectedItem = themePreference.get(), + selectItem = themePreference::set + ) + }, + modifier = modifier + ) + ListItem( + text = { Text(stringResource(R.string.replace_bg)) }, + trailing = { + Checkbox( + checked = replaceBgPreference.get(), + onCheckedChange = replaceBgPreference::set + ) + }, + modifier = modifier.clickable { replaceBgPreference.set(!replaceBgPreference.get()) } + ) + val udfs = useDexFromStoragePreference.get() + ListItem( + text = { Text(stringResource(R.string.use_dex_from_storage)) }, + trailing = { + Checkbox( + checked = udfs, + onCheckedChange = useDexFromStoragePreference::set + ) + }, + modifier = modifier.clickable { useDexFromStoragePreference.set(!useDexFromStoragePreference.get()) } + ) + val color = if (udfs) Color.Unspecified else MaterialTheme.colors.onBackground.copy(ContentAlpha.disabled) + ListItem( + text = { Text(stringResource(R.string.dex_location), color = color) }, + secondaryText = { Text(dexLocationPreference.get(), color = color) }, + modifier = if (udfs) modifier.clickable { /*TODO*/ } else modifier + ) + Button( + onClick = { /*TODO*/ }, + Modifier + .fillMaxWidth() + .padding(8.dp) + ) { + Text(stringResource(R.string.clear_files_cache), textAlign = TextAlign.Center) + } + } +} diff --git a/app/src/main/java/com/aliucord/manager/ui/theme/Color.kt b/app/src/main/java/com/aliucord/manager/ui/theme/Color.kt new file mode 100644 index 0000000..ef7d96c --- /dev/null +++ b/app/src/main/java/com/aliucord/manager/ui/theme/Color.kt @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2021 Juby210 + * Licensed under the Open Software License version 3.0 + */ + +package com.aliucord.manager.ui.theme + +import androidx.compose.ui.graphics.Color + +val darkBackground = Color(0xff2e2e2e) + +val primaryColor = Color(0xff00c853) +val primaryColorLight = Color(0xff5efc82) +val primaryColorDark = Color(0xff009624) diff --git a/app/src/main/java/com/aliucord/manager/ui/theme/Shape.kt b/app/src/main/java/com/aliucord/manager/ui/theme/Shape.kt new file mode 100644 index 0000000..de1a2bb --- /dev/null +++ b/app/src/main/java/com/aliucord/manager/ui/theme/Shape.kt @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2021 Juby210 + * Licensed under the Open Software License version 3.0 + */ + +package com.aliucord.manager.ui.theme + +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.Shapes +import androidx.compose.ui.unit.dp + +val Shapes = Shapes( + small = RoundedCornerShape(4.dp), + medium = RoundedCornerShape(4.dp), + large = RoundedCornerShape(0.dp) +) diff --git a/app/src/main/java/com/aliucord/manager/ui/theme/Theme.kt b/app/src/main/java/com/aliucord/manager/ui/theme/Theme.kt new file mode 100644 index 0000000..805a8e7 --- /dev/null +++ b/app/src/main/java/com/aliucord/manager/ui/theme/Theme.kt @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2021 Juby210 + * Licensed under the Open Software License version 3.0 + */ + +package com.aliucord.manager.ui.theme + +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.material.MaterialTheme +import androidx.compose.material.darkColors +import androidx.compose.material.lightColors +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.Color +import com.aliucord.manager.preferences.themePreference + +private val DarkColorPalette = darkColors( + primary = primaryColor, + primaryVariant = primaryColorDark, + secondary = primaryColorLight, + + onPrimary = Color.White, + background = darkBackground, + surface = Color(0xff424242) +) + +private val LightColorPalette = lightColors( + primary = primaryColor, + primaryVariant = primaryColorDark, + secondary = primaryColorLight +) + +@Composable +fun isDark() = when (themePreference.value.value) { + 0 -> isSystemInDarkTheme() + 1 -> false + else -> true +} + +@Composable +fun AliucordManagerTheme(content: @Composable () -> Unit) { + val colors = if (isDark()) DarkColorPalette else LightColorPalette + + MaterialTheme( + colors, + typography = Typography, + shapes = Shapes, + content + ) +} diff --git a/app/src/main/java/com/aliucord/manager/ui/theme/Type.kt b/app/src/main/java/com/aliucord/manager/ui/theme/Type.kt new file mode 100644 index 0000000..ee4418d --- /dev/null +++ b/app/src/main/java/com/aliucord/manager/ui/theme/Type.kt @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2021 Juby210 + * Licensed under the Open Software License version 3.0 + */ + +package com.aliucord.manager.ui.theme + +import androidx.compose.material.Typography +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.sp + +val Typography = Typography( + body1 = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 16.sp + ) +) diff --git a/app/src/main/java/com/aliucord/manager/utils/Github.kt b/app/src/main/java/com/aliucord/manager/utils/Github.kt new file mode 100644 index 0000000..4c290d4 --- /dev/null +++ b/app/src/main/java/com/aliucord/manager/utils/Github.kt @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2021 Juby210 + * Licensed under the Open Software License version 3.0 + */ + +package com.aliucord.manager.utils + +import com.aliucord.manager.models.Commit +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import java.io.InputStreamReader +import java.net.URL + +object Github { + private const val org = "Aliucord" + private const val repo = "Aliucord" + + private const val commitsUrl = "https://api.github.com/repos/${org}/${repo}/commits" + + fun checkForUpdates() { + // TODO + } + + private val commitsCache = HashMap>() + private val commitsType = object : TypeToken>() {}.type + private val gson = Gson() + + fun getCommits(params: Map?): Array { + // return emptyArray() + val query = params?.map { it.key + "=" + it.value }?.joinToString("&", "?") ?: "" + if (commitsCache.containsKey(query)) return commitsCache[query] ?: emptyArray() + val res = gson.fromJson>( + InputStreamReader(URL(commitsUrl + query).openStream()), + commitsType + ) + commitsCache[query] = res + return res + } + + fun getDownloadUrl(ref: String, file: String): String { + return "'https://raw.githubusercontent.com/${org}/${repo}/${ref}/${file}"; + } +} diff --git a/app/src/main/res/drawable/divider.xml b/app/src/main/res/drawable/divider.xml new file mode 100644 index 0000000..c646b35 --- /dev/null +++ b/app/src/main/res/drawable/divider.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_discord.xml b/app/src/main/res/drawable/ic_discord.xml new file mode 100644 index 0000000..7529205 --- /dev/null +++ b/app/src/main/res/drawable/ic_discord.xml @@ -0,0 +1,13 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..f0a6991 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,21 @@ + + + + + + + diff --git a/app/src/main/res/layout/commit.xml b/app/src/main/res/layout/commit.xml new file mode 100644 index 0000000..3ea4837 --- /dev/null +++ b/app/src/main/res/layout/commit.xml @@ -0,0 +1,20 @@ + + + + + diff --git a/app/src/main/res/layout/recycler.xml b/app/src/main/res/layout/recycler.xml new file mode 100644 index 0000000..634b8cd --- /dev/null +++ b/app/src/main/res/layout/recycler.xml @@ -0,0 +1,8 @@ + + diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..7353dbd --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..7353dbd --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..426f6f0d9f0244dcb4e1008a978faad00eaad94a GIT binary patch literal 2041 zcmV8jvMMK)FFV1jK*=f*iuQ4*@qKcYqmO2uv{% z1TPqZY#lqG-NhJevaqoOSXWBdcKz}5{mTAJ`(C^L+fDv$)0ceG(ft3v_y2x)@AZGQ z4H^Vmpaoi>1)6U+L=0kt_!&WbPLCQZ6wJTpFRjkmYzwfz$1*lDb~AP|cKH}|%yjIO zVXUK!ZZ&B~_S%*a|McloBmltYsm>Cw)9KpUW|iI0W`43lm#Cn{VyW^cC=(NOnMITa zg8Vg!Z5%?cMx$|@B!~ZB@O4p@%BEBWa3{_|Za}8Bs5w@vkykF1*c#QFog9qR;u7+Q59>n5o z_yOm`30x1qVhki;IuxRb$>aB}2fR~|nT?Dqkc-RVG=`P0#U^P}Ff?tlLt13a#IVW@ z_yHWiY5O1IKw)@@&hZ8#AQV7WvqK%5Y+pCQsZGI$ZrpvBsDnn_S?>VxlBCdv!C2KhA$ zvMnzcFO@aDBtouzguQfYggV1m?W=G{=vOAn3)%v|389FVS)T|JT+ylEi<HB0IHe@4$7vPE}H>P5^Wh>5MCzEGD&Fa_roJd(g z1@I6fV80-!OW_hByhNkKi5Q&VcJom+SMaT3JCip%~v`(|{M$`|(-~y*@<{ zKtyD-g;>2zc%KMjEXg}6^iv0v6-3uiBj8&>5YbEbHJdWi>;%xr*KQfRo2VvXVnq&~D7}m!Y^w2c2zvkQ!(^c^5Akk6#N@{Z zaZvS?>YOqM4HhHj8j7&F%JCE=X6Ejx>lw6!_X}DFXYu;uJSJ%=PQ1C(x}SxG?~%4h z5F^q0+6>g1^+JCh;2VNy+f01{o_~~Dv+t+5dj&DJ&@|-x^8nuw#B;d#Pi&YtK@cM` z{^ky>w3vkb+{AYUCF^prRnl}pj70OKDR{Ti<1=Up-xZ{1ALXy4E)c}n5?$nYUpMd$ zL39-!X58qIWyUzXZ+zsC_p>$&QfwKO8Hp92{_v;2;Ajq;C+ur_62v=XMFF0A3`_sw`8dkXtL(`m}^wpIiny;|T zR3Y>&6J-V6hEg0-wm}HxE_Ac3ef~mrfjd>W$rj44@c-6k2z|>$SwZ*U5r*X~7XrHr z-MglRet>zC^$}20^)x$CbaBh~EfZx0Wj-mu&Z%>S!0tc`d2jt%;q>6OhbydiB}r7D z>x;3__)zFy2FePGDY=M2PHuj=f`XF(M{*=+RQ0S_gY9zW;m;3LLjN*QPLSDBg=1Zu z#}G6^n%LwbS++r!Kw+^HFZATG29o9!v)F-+FNuUgA<%zY!c1WXId9tKD1nVR;QTvo^VVBTX4W zbo$@s+Dt)+Ewl*J0?P+?1x-I%pQMpvOS|M*n8iLh`QxbtWdv=zciQQr8;KU`892}+ ze|ph_!U62!w!^=lV{nq=`_;jT6ELdqjBq@)@caeQ?b1OvmI?>YGdph|o`huUH_G0G zomK&Zts*2L&!oHo+i@Bk!^3a|C+9^Ab$EtoRtU#b3(sHB9YZmW&Rmbf(^uC@LdDIR zee__&>ri0*&QBbq;1Rfrry)(S z#l^)@{{DkHl}dGpvU(&aAt7OgRE$aDJMdX33;iThr_*6R5i=knX*=AmfudDIz@t7MMOl5&}cO3^73*tnM_E9 zeHofoTCEn7lan=L#*BHJGDb#5%Aa1gZRE(2q3op-V?b0?)T(pm&c$B3bm^xH7cRub z$H)I@%f*Wq?f&NfEq9y$qh|GM934Alpe&S$vJD+Nw26Ic_gYYRcz9Fx+JVuX(TCC3 z$Ds_ArG5YY{hP5@_okMk#w0ajqp1~pZOe+jMZgXWj7kx_6Gtj&;l*ce4_ma X@H#N*q*wFC00000NkvXXu0mjfZeZN7 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..512cb0af5f3f3abaee363d1315e8dcfd1d2c7220 GIT binary patch literal 4030 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..f5f0dcfd8c13c579debb04024015046092950f9f GIT binary patch literal 1397 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..a5b7f6a3c2f3f00bf8e1dce50ad4fbeda750949e GIT binary patch literal 2741 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..b6c752cd474d824fe35c7c2bdcae0da522913c51 GIT binary patch literal 5728 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 Tit72_0gd4;Q{4|bPO<+5RI1wv literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..41d74fed7b2f9dff65be49bb64ec9a4cb926abd8 GIT binary patch literal 8959 zcmVQQZ*Hyu?t0F2*MUmB25O8-@)RpE^L{K`2G%3o`k+KQ| z2qb|3Nk~E}Aw47{q>yrxn_>QWPiEk7&P{UrIZ5vKJnwUFl6%k0eBYa|%*>fntCmY# z;u4p*#3e4NszNDsW2nthrxJ+Ixhb#Xl4>k6l7IwtIq=?UBJgV}uje9Hbr2b0B*QBI zE*JjUrVQ>39T|Es^k;aG1Ml%W{0*PMXDcKLy-O??p{k0&P~31P3B!KhhG8(nc!pUF z8ySu<1T(}l++-+XFftH&SMVOc!{6{3d=}rqcQ?|qYvG!>b{l285PCNRy2zv_fkA|E z6u-xRKD@>o467OZ8PcfItUeU`$U{C6&KkWdreh8y5d z3@aF7C6jUC#uP>tBmoJigCGcYr%e-H3VlRhpP;gT0P6BejuoYHX<0%$lOeRsE@g7N zOax&ZNfvW~K1hV(eUo<=ea9F&%El%AlZc;PVxvHrP^#?bVGLUs@`V++r;);l2?Od4 z5Rge8>M$0JX_#!BE+W|?P@Y_Y?ERk^eiIsp$UKeGNL2;GGs%aAF+NqE9$Zq1(6awL zd2TR-;gC$hf;f5zPxb=Fq9hW=JXEF!owyEb&IBZtP1~22mcGh<&fyBF>EX&;NW}!#Sx#|r@oT1ZTP+3uDYEwq zxDs4m$2#2cMnqL-VS+lrQLtC0S2h%02-19w7NNl8gSR8&-Jxz4M+i2sJ7q9QN$K7x~{#DpST zuni?pEX#=^6B84=$aP<3MGSxqsyBO|>LQQBAxM;(l$6v@Zi6Z(l)F$im|pDt4GfIA zS{Hd74~ay~<7dXj#r2olqRNP1JsU(v_CCc$9;ZVhQ9(gLYG`O^)e2{nmytO+IW5`y za2I(rLkX%gR=7l*K7Cr+=r3%eTcLa+D?B_LrMjrLT;$OR;vY9VJNx{SB}*F0ZKOM) zcc;?bSjTs{$fFN{L`I{Lrl+UxXSR{ZBeRu$gu6#<#rT?&$2GgG6JVamU@*|s)YQeW z5x13ogz_xEw6ydkP9Ahz_mhN$q?pE#bb5}&(L>}iT|-XOx#TeYko-c&k&X04vW7lM zzNi03mPq&$`HsFq*3l{K?@P&X={sR0h2A9js%z^E(wfJuTeoO*bo3ax%`_LmW)^3? z*!wJW^tMhnfRzv<%_apjm?Y6vB|h|B!%y^C!*V*@u!s&Y%%%Meb1cF@!#w&_@pp6r z*+l1Oie4wVw3xM{Y+DDAHmKcX;_K_%O>R5Qgx;I?NLw=CE=_b^QujTi$ zUC=RY#vK9ygIGHw7?Bo{-)I!M&XiKB>YG-8jq>yJ5y}?9cHD-}7w-Pt3JVJ#;p9OF zb&>bLU{^_o6jneSxp9FGY165j|0op^tVQ!H6D6;vYzKsWo~)uU|{mzf3)nrmEVK<6(xsva0SRiI$RiW&fQG*eowEkA{bb&x9?xO&u?^ zY$nq!H8r&ZV=~UlL5Co!PC66Fbw-mPREAUHfz)Yg0@wkKLMEu%GKHtfa(aY>srs)0 zq|-#MU%#Gx@ZiC&uqn5#V}+LGKDA3rOV@)uT8FM8mMHHc7wKTKP-QG7`WMfo&BEVO z8Q)&$b?Zx2o2Gyy`!EUByxfQFSPn}gBO|xLrrfrU6W)MZZf-74;*$Iz(J*l~kP^Cs zoR=o~ltwaz9(iBTI_F?gsDJm0E}Qy!3~D2;AUG`>86_A|^;wObyZVd3loNl=Z=nGnkyQBhGx zm~Ev)LX~#6iwN(Not=$?ktF^oJL61TCdn06T1pHwel1Pq$r0GCe(=`uO-f4;%Y9!VAf~&q1_EG(1)X%LVU~9V%l~gzh;rX8mSlNoJ@136Yd$$@ zq4#0cSMKL3Lpu_!qTe;Sv{4aI+Rr0LXb~Hua@K zTgr+g>hJGA3pT%S;eu^@hG^OP2vFB(G)m|85RJkY){s_{Q!1rb1}t4Ty81E&AG54PtVuueqolaY}zoO>TMq)GCOU4L(o%_@ag25(kY zBQH@J*wJVa@wSwEDf?3%uvUg0kpCqYq-`k5@jD4pGJXB}b$aN~p%JjXk1feGcVTr3 z3kw%(9lo&b)RK800c;#o8rK=98(8@YJxKEuSw_DizfwPPRW)WUfG~!wuYrMqYhZh; z!;!Y(Y`-$lwq)u=PDo}7^st~5eLz}i=RR#q#G>nwOAn_i(GP8QR#WCQ(? zjR{*ku%4$JuZAGVhhk!4qTYGuomSw0Rbfnoue7u@Y37-SFU{~V*`+c>W$1k4pPGa( z0j$u=t1%Gg6S9~7kNrR9ks{R?^#Tayg!b>>{}*t;$C@z4zf_l1U;p9WN3-w+yg*i~ z2vQLqWci0y;Y$G3Sf89PrQ8jZpULE=W(l$-K&pbhLVkXJE5HFCO9>>x7eoD$l9Dr8 z6A07%f3#rH6zEqpht|7bzkScvVtm4Kno^oAE&eLUrB{GJ*s&NE78b}jfIC_(3uBb8 zdj$mrb!8XJ)w22mu-FLquOvxDK=q|Grlsf;^bu_nXxsjw{=w7fjpAI@m~;-Q8jFvQ zzr}Lk0pNl~lZvAHV&&ZHJpUmk8gUw8Nd_HeA%T!Uw~U-*_4d^|{;$xLsYmF9=gnDh)jsYo(1GU$;bM<#;{j6n63JSkUv%3@wU76dIe3TF@>qBap@dV z9>mg^vy2N3!3neSAd&wpUc9(9<4q#Ze;~>RoCd59SxX>6q81VFSQO62v(N>vk!r}2 zav|m4Ex~;OuhH!pr&Qz8Ii$ta=;-LwapT5$f)kt@6^l=qtEv+c5`xEFONSKUS|%EB z8f+yHP!`V2_atl5{wK8!68$A&zUuFm;?<~cRpZh#nDdYl>Ez^On0>5yuuS`P00h;gFpZhYizYp8dr%%0k6}``SEw!Uz&1I^%+ai?A$n-Y{*oN zO|RgI^lc>4yLaz?2b?e~k>&)dpP8BYDbIh1^5V{hy$A$=ME75rBvnUBBMUqf@=qyr ziT2OtMpXEDb5PfRwB*(FaA&GH0D<5;a&mI$@4x>(ADl3YK>R}ua&vQ6>LGy!>`5Tt zHN!gkRKy&WkpD@vzbF514Q2%#{iME7S2-2o~w>{9gg_1ywam_?vj zvt}U&YRJC0zq%6W?_>v!Hl)(mqn6Oxe)lHU@D%IPe!Hjr+>!$NQshDvAuL6Ua}#Lr zt!t|B=@_NO#l`ge`SaLp--vUgVtM@W$MK;?MMXvDkU&?r5C(uiSRP3;+@#N5`TCyl z)F@yKGjiNL?IV%?GGT{`Y}Q~=@;=r0^a|J>p)8mQ<3v-=jq*!*#xRs=b-lg4o0XK5 zL{xVI;o2!I*LfxKn>z;Xbn!itcZ>d-6-XQSzosIDr5GCendH%w*ViLpdvG8uEG)KN zyLLD#xGv|2Y2oV~_)t5e(U_!%IUvB11Oif-CjyD!iQb4_rfMI!UYspeQc6Ntiu=#M zS(TPHq`e(cQBkQACQRtWxlw)?;{>X=YSpUFjD49kg+Ks2(eo^vt-pRu)xN-k!T(SZ z!cw@gF!*WwPpWI{6cT~r;^J;jojSD-xM2=~>Tln^y$Ad5Ej>&k0?r^1kX>?%W)|nE zelIZN+C~*2tU-qhlW9q*wkLC#12LHxA0MCp<(FSRRLfifvDdzgJViB)K$YR=8@{w2 ztJ0K&uoP|#C$d9S*Vh{aff5rF4Rhwq83JxpNFY8{je36oBTuo5K=TOn$H-IYBGA3Se9${FD^+B$26b7*_e+Mastr9s5GWxbq3E;E zK0^p=FnRLi@)uMEf!3^9(~DgouO?Mt=3>M3<0>*(i&2q_RM*!NFb~A5uv;I0{P7@g z!z=>LojbQH`|=GJfz*g9NT&7u?Q_l$@~QCrL{%F)f<&OJSFdKh{r1~<`eDTc5<3wm zPMr8aadELOHj@E*B2Y$g4()B@1~UN=aaHP3J+IJ91iEtNO6rIaBf5hdd^y9k2m&$O zZ!j3H)P$uBOHp7n*u2qRj;F(C(?WJlWjlI+Sjq?q35jK#_yf4XIa03F_VV(=sSK?O z3JU!7OdxDi?NjiTRTx+B1HDub$HGyHRru$%&30K>1sX6f6kVvzkuGL{;Ixjwz`!8J zi8h=Y<*$V?abqqDA8L8?=FNR@U!`RXQeN1pP!b5IUbK$=n{?`!HE0#|7VQxKxV1!S*^Wf%)}F(M598Ro7MvU9Z|7j*HhubZ+{)TKDk^FwClFCy+}ThP z$TP)0NvvLgjbPPFO;qX1>0@V?ZFH!->Skm)}qsp{nDv z_^qmOYY7mD$?eqCRJvltiub_@vj{Y0$`n*#P1mhkH#et>WA7B4xkr#hqt0(Ubm-8IEP=YFhe}L-XKMSz zDHh!zSXIy@U@SeDbzU`gtsqMH;Naloe*OAk4yf@%4?ToQ#0m)nspIbM-k80*XJ=>s z&IzPxA}#KXA5b!nHVLhM;S0bPkN2;xqXyaCAR0qdV7RsU5AEBxNBF964oFDt(W6H< zVXv*PUAwka50zLv$&yazz|(eW>Dc?=JffyyZ(1E$#=Y&}VavM2vBogW7GiJ;fXfztLv|ba#A(TT53#2m#l}gtW zkl@Q_%X{X1DIIcNH_&_{jgDMQi%T^>22WZ83l9&^89#pfAHfAaiCAg=193yL)T&jh zX6(HOb7QCUkVrqBwb<&=;0!b?=gH0ZU7vzkw0+W4+AwHbr3C7U+RMPsGhtDO)dqhw;8y`E$bh6wZ>K+1fC;d?Mk_ z*wy@G5G^1k5Hm9~>Gtj0*D(&bKk~>Ua3*FY&_ZfI{q)nQ#9D9MxbX#c;ZiN`s0D);3u7T#dZE3U{&w5MWlzBP?$`bk<9j8!2!+%v%?nzAFexm`0$qO)gvq{Y>8F`!YLV(V^>QRiqe2u z0uS$n=dt8@807(HTH}d|tz#xjq{JPv3zGJ#bm3^o!`IfWTYrS@hYT5l)9Nd}C%zmJ zc~IM>OP7vh)tDxCX~Y#?r(PHTrZS*bKq8Mrs(R)BTSWwWpm)JnEJqqIg|YPFY?VG7 z2@$@cqM}Mz1^yarZ%zIq1Tn8c)22=DXRluA>FJtmFvHD!_S(E9)-d38>0m3RJ{$>nA5>q*j~~Zr99_8W5xy+Se}uqg)#EPApWtsSZoSd9AXHF{OoI=ctD2-|h;7w3YBY`ysj`TKi zfIOazsPgi@U+{G43?rpp90UlquVy^@=%bIo=H0t@M+#$A_!1(8v4H~z;%u0X!NI{l z!V3{6JvU?B_22AXePJ(=(s+6RX07pzF?nBcoXoz=0F_?s4YBrh1EiubLY;@VSCO2n*=VbVW&==+}UgAh=_>&&hSEsMK|nn5{4X@ zYeBiJG@zD1h`c{~a=A0pEzXUnc}DAQK{5yOmG`}S_hR#WXKrikOtmR|36YX%mJ1=7 z_MAI+?u&VOc}7Q<^ea*itCVRg8eg7Z^`xI8P?q;hE0;V1yEFY%`mrMDxVg+bC@5$TPVXcR@cIf5M^gKG-|z)OP4McjvqgM6m09^;Q{Z1 zBV24so|PiJP~&dhx_PiyZ(m>E4TXh;=!D(9(1PSWDka(qJUbrAs?wOw267%{xn3Et zjPt|w-&K0D1;YE_5#O6PZ${NlZ*kK}YO4JAKPo zNC$>|tWu(_z@n$A{W{JB=AZBoJZ0a^!DC@xP=kFpnn|}UpE+~p`hWogaClUQ_U+rZ zhK;$c?JiPD&(N4NwabnjJ7yw#FRSWR9kdF#!Ojuk%RB26l|h{a5Es=Syr3nXM-KPE ziBf1+>dP94S?Ac;Sh{%e;;&&#M|&S3QZB^MqG7{^53tuBAt52Bc_=d~J8CJ6#7Ji* zY_;os=KwZ*4K!*~eWB{ZUT$;qo$`Pc`guvaOdf)633%u-;vfIOfdl864SRB1V(X6G zb04MLsmQ#%yxOtX&hNha?(<1WNrmVbDHBzv%|#vyUp+2OQ7O+>c*cC7GOVL9plB}b zkTzX9%)wrFk_-&~*dEmw1kb-H8Z%}L66em2s=Ue*FcfnH%@~Qi*lYJ)yLQdTG`Ot` zt!Hwt*nQ<4OCd`$4$)1-kG@LQTm1NNOMqLCULtGhN^+9Uy|I_p3$V@WC;=}Nm=~kc zo4FACeWIhI>GI{vzk}_#4YASyn>y6{2oYXLI!CB^^X8q{YcD@PzhgMbfmm6U!8K2b zTdz`@t>|{?0~%gXc8pv;G0@W_hR!0t(lKO%>dYZ)F_NsHpOgLc1c{`1L<;9L=vJKF z7lMI*T-$8b1AOJ{UAuSh_Jz&3?JzY1TRO%22)UC`w{G1U?ypPVzI}&8L_{QGKMApd zMA$esAb5sKVYXsaRN~=~f71A(43+*Wf*?;(Q4#g= z@k#C3v*-W8X3Tc&VMA_9r;$g9NT{2OP&Rw^?1`+jmmU#B%0xAo@_+}Bpweh|ZoFMl z(X%h)C}N~aBRMpdq|+dhNY9gNDg=`x8qNL=!W5Ir4++N;3YGn_74Cs=)8m$(axdNI z6&xH)rca;#ci4*MJ@7tQFm-t1T%L$fhDEpgJv}|W*=w(D+qQj!BSCJLB}8_grFOwG z@Rj!4k&%(O%XB$x#BGK7Jh5QvbnheNPAFq&+pJkLbga+e!-sdKr>A287Kbty><1CL z;^X7#rcIj;z&6}Q*z2QN=u(OZWlbA3YJ`}ITS5BzFv0GA3_v+B7aR{k9z=tkJ9nO8 zHo-a1T^lxRh@~j(G}J6~DFqCcmN^(&FzLu%ah}Y8vuDp<#Dor#un)5N0%6^F*!ZuwlcVU?hqYo=7=h7wiW)d5#`EnlNb4 zpg+R~%oa#1uuuxy=pyeaPtY;UXd*#tBPuhH=**cjQLdcGaS%CAMn(oaPb?>osJL)b z1Z-lrU51VnvD6{m4#e5tt4o(I!;T$0b`kqeIEh>(zMX(l9XiE5UAuSh4(ZgX6VCJj zd7yh#T(E`HmMZKaf<(yn-90=!y0O>Z_3G7o@X(<{ClV7ArFkMIV$#tCDl~ZoVFN)P-FqJ)qB4`pdxmzcTerr5da(fxU}fchu@{Bk>00U{ zk>wB}ivds5p&K`D+{<)35IW|%#%>9Dxn5<+BSc9ecRq>LlMS^0nl)>_#hn28`T4HA z$U+G6U>{asU|{LD-+sFcI)!ezj)mu`vg8pWClTUsoBQs&uT!g5t$MTf{iaQuHp$o5 zHxaYe*dgZ%X%#~jvIug?-+uco`MvkvdmrS1PMK~|sv}{Bu5~j}Xb%xNk#y=ALx*z7Zo5i-lMp33ULztRa0~KDFE6jhpu-0qc%Tn-%5^KMtt#z# zlp;J428Ou^EaW}FNYsnH_Ca2>Y}v9!7cN}L$LuMRLZ&pAHzM~Y%9sW@bLLF`qD70A zKxfb$|3}1@ROl4Ct#;&*izql8985$t3H)6skZRDU{?0 z($X1o?6add zar$G-JX~Q94|D;YxV%m!BF~L5pMmNEF1ursCQW*x@~Fi<5>xQ7`Sa(`V^!OE7TzSU zR8UX=y9hFgFsBKj6oiqgN%ReOM!?$y1qBtL@AKx(`?^h=Hp7L-!5A@CjG2!eI)E-} zY_4Oe2ycXv6s{VHA~r(d_8~9skwj=4!0^zhQKQDJSg~U5kt0V!f`fyLP`$x3!H`Nq zK?JF6&7tJi;Mc_E?;#AlBRmaAbNTY+BJ>e`efi~=$D;2T1IB_eagXE0$BHpy?9hQI z&t2rPK*}SMPT7#;)=BoOaS{f^6>@8VkGq979pgM>dOCWfL9`}XZSgFdl5?oHOmLAcR45m29s696SaxPEzZd?4>({R@yb=ubV4psHo}Mvd#?;lT zSFhW(YnKm`SQhSbVOWGbR6HOS!U{k4QN}OR0*`{v;s#257pHr{yIj3`7581`q7Af# zHm6UY{!#DVy`SNp27MZUKBBMaGy2ZQfU#gqE|23tkrN5|0H*CRiH6DqE+1<_T?CnA zp6L#u7#@A{$tPc&Hf`FJ1q&7|{PD*hH*ep*{m_8}2mFs8KOTPi^yzE<{{G3VjLu+W z$YLQUJ2W&jJ0v6|ixDs5+_`hfzP`S3Cr+FQKX~w<|Ia`FdTet2I z-j+ld;b~-~>B9SpKBMnQjxiRD$weF|h#(RYN>n7mE5Q(gOjsN0#6m-NmX!8^@z|@# zo0Oyi;2{RV_#Pe}PcW}BV({R>&kY|w`~?8-@jLvD6J#*M!?N$+Aq(0-TfEIa=mYw~ z`y?lg2vZmX#^NH5lLg9FdL=oTFjI^27i&fMj|ZW;@@h^Z6(hs|l*=-2B?ky0$31`N zUZp?3hC~)z8*QL1-X_{cAJ7*$X_Vf^MI4Q#JTf6PVB!rkw@6O0R|bhHZmxqzK;jBx zBNyoc5&?efJhbI?l zs-VaTB`1|27CZwC4le=Y1MnKAApVZe;yd`RAc~wUF2YoE5yn-LOAe4h4&~qFB&o4v Z`G1_=7ktXq^z;A#002ovPDHLkV1lGq_c8zg literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..c5c22b14bcd0380ecc1d67d4087e37fe41e4e1f5 GIT binary patch literal 5859 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..7fae848a8df55cffb5fae49d0441ba15eaee89b9 GIT binary patch literal 13068 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 + + #00c853 + diff --git a/app/src/main/res/values/ic_launcher_background.xml b/app/src/main/res/values/ic_launcher_background.xml new file mode 100644 index 0000000..c5d5899 --- /dev/null +++ b/app/src/main/res/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #FFFFFF + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..476c564 --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,14 @@ + + Aliucord Manager + Clear files cache (Aliucord.dex and patched manifest) + Commits + Dex location + Open settings + You need to grant storage permission to use this app + Grant permission + Replace icon background with Aliucord\'s + Settings + Show menu + Theme + Use Aliucord.dex from storage + diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml new file mode 100644 index 0000000..8a3fc43 --- /dev/null +++ b/app/src/main/res/values/themes.xml @@ -0,0 +1,7 @@ + + + + diff --git a/app/src/main/res/xml/provider_paths.xml b/app/src/main/res/xml/provider_paths.xml new file mode 100644 index 0000000..476311e --- /dev/null +++ b/app/src/main/res/xml/provider_paths.xml @@ -0,0 +1,4 @@ + + + + diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..564619f --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2021 Juby210 + * Licensed under the Open Software License version 3.0 + */ + +// Top-level build file where you can add configuration options common to all sub-projects/modules. +buildscript { + repositories { + google() + mavenCentral() + } + dependencies { + classpath("com.android.tools.build:gradle:7.1.0-alpha03") + @Suppress("GradleDependency") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.10") + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle.kts files + } +} + +tasks.register("clean", Delete::class) { + delete(rootProject.buildDir) +} diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..98bed16 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,21 @@ +# Project-wide Gradle settings. +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app"s APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true +# Automatically convert third-party libraries to use AndroidX +android.enableJetifier=true +# Kotlin code style for this project: "official" or "obsolete": +kotlin.code.style=official \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..e708b1c023ec8b20f512888fe07c5bd3ff77bb8f GIT binary patch literal 59203 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

K7UpUK$>l@ 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 E2O(~oYXATM literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..0c0b2dd --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Mon Jul 12 01:52:20 CEST 2021 +distributionBase=GRADLE_USER_HOME +distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-bin.zip +distributionPath=wrapper/dists +zipStorePath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..4f906e0 --- /dev/null +++ b/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..107acd3 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 0000000..defd771 --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2021 Juby210 + * Licensed under the Open Software License version 3.0 + */ + +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + } +} +rootProject.name = "Aliucord Manager" +include(":app")