From c72517c9f3071895d007888aba4953746ab67ec5 Mon Sep 17 00:00:00 2001 From: Nitorac <nitorac.r@gmail.com> Date: Mon, 5 Oct 2020 20:47:25 +0200 Subject: [PATCH] Initial Commit --- .gitignore | 13 ++ app/.gitignore | 2 + app/build.gradle | 65 +++++++ app/proguard-rules.pro | 21 ++ .../aurionweb/ExampleInstrumentedTest.java | 26 +++ app/src/main/AndroidManifest.xml | 40 ++++ app/src/main/ic_launcher-playstore.png | Bin 0 -> 30844 bytes .../java/fr/nitorac/aurionweb/AurionApp.java | 18 ++ .../fr/nitorac/aurionweb/MainActivity.java | 70 +++++++ .../main/java/fr/nitorac/aurionweb/Utils.java | 96 ++++++++++ .../aurionweb/aurionweb/AurionManager.java | 179 +++++++++++++++++ .../aurionweb/aurionweb/AurionSession.java | 178 +++++++++++++++++ .../aurionweb/aurionweb/AurionView.java | 7 + .../aurionweb/CheckConnectionTask.java | 50 +++++ .../aurionweb/security/SecurityHelper.java | 11 ++ .../security/SecurityHelperPostM.java | 66 +++++++ .../security/SecurityHelperPreM.java | 135 +++++++++++++ .../aurionweb/security/SecurityManager.java | 35 ++++ .../ui/dashboard/DashboardFragment.java | 35 ++++ .../ui/dashboard/DashboardViewModel.java | 19 ++ .../aurionweb/ui/home/HomeFragment.java | 35 ++++ .../aurionweb/ui/home/HomeViewModel.java | 19 ++ .../notifications/NotificationsFragment.java | 35 ++++ .../notifications/NotificationsViewModel.java | 19 ++ .../update/AsyncUpdateCheckerTask.java | 60 ++++++ .../aurionweb/update/UpdateManager.java | 180 ++++++++++++++++++ .../main/res/drawable-anydpi/ic_calendar.xml | 11 ++ .../main/res/drawable-anydpi/ic_download.xml | 16 ++ app/src/main/res/drawable-anydpi/ic_login.xml | 11 ++ .../main/res/drawable-hdpi/ic_calendar.png | Bin 0 -> 198 bytes .../main/res/drawable-hdpi/ic_download.png | Bin 0 -> 317 bytes app/src/main/res/drawable-hdpi/ic_login.png | Bin 0 -> 414 bytes .../main/res/drawable-mdpi/ic_calendar.png | Bin 0 -> 145 bytes .../main/res/drawable-mdpi/ic_download.png | Bin 0 -> 250 bytes app/src/main/res/drawable-mdpi/ic_login.png | Bin 0 -> 288 bytes .../main/res/drawable-xhdpi/ic_calendar.png | Bin 0 -> 208 bytes .../main/res/drawable-xhdpi/ic_download.png | Bin 0 -> 406 bytes app/src/main/res/drawable-xhdpi/ic_login.png | Bin 0 -> 530 bytes .../main/res/drawable-xxhdpi/ic_calendar.png | Bin 0 -> 262 bytes .../main/res/drawable-xxhdpi/ic_download.png | Bin 0 -> 586 bytes app/src/main/res/drawable-xxhdpi/ic_login.png | Bin 0 -> 768 bytes .../res/drawable/ic_dashboard_black_24dp.xml | 9 + .../main/res/drawable/ic_home_black_24dp.xml | 9 + .../drawable/ic_notifications_black_24dp.xml | 9 + app/src/main/res/layout/activity_main.xml | 33 ++++ app/src/main/res/layout/dialog_download.xml | 26 +++ app/src/main/res/layout/dialog_loading.xml | 16 ++ app/src/main/res/layout/dialog_login.xml | 66 +++++++ app/src/main/res/layout/fragment_calendar.xml | 22 +++ app/src/main/res/layout/fragment_home.xml | 22 +++ .../res/layout/fragment_notifications.xml | 22 +++ app/src/main/res/menu/appbar_menu.xml | 10 + app/src/main/res/menu/bottom_nav_menu.xml | 19 ++ .../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 -> 4521 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 3418 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 4521 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2796 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 2172 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2796 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6388 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 4801 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 6388 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 10022 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 7770 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10022 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 14301 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 11165 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 14301 bytes .../main/res/navigation/mobile_navigation.xml | 25 +++ app/src/main/res/raw/aurionweb_ensiie_fr.pem | 42 ++++ app/src/main/res/raw/cas_ensiie_fr.pem | 41 ++++ app/src/main/res/values-fr-rFR/strings.xml | 11 ++ app/src/main/res/values/colors.xml | 6 + app/src/main/res/values/dimens.xml | 5 + .../res/values/ic_launcher_background.xml | 4 + app/src/main/res/values/strings.xml | 11 ++ app/src/main/res/values/styles.xml | 11 ++ app/src/main/res/xml/provider_paths.xml | 5 + .../fr/nitorac/aurionweb/ExampleUnitTest.java | 17 ++ build.gradle | 27 +++ gradle.properties | 19 ++ gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 172 +++++++++++++++++ gradlew.bat | 84 ++++++++ local.properties | 10 + settings.gradle | 2 + 88 files changed, 2223 insertions(+) create mode 100644 .gitignore create mode 100644 app/.gitignore create mode 100644 app/build.gradle create mode 100644 app/proguard-rules.pro create mode 100644 app/src/androidTest/java/fr/nitorac/aurionweb/ExampleInstrumentedTest.java create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/ic_launcher-playstore.png create mode 100644 app/src/main/java/fr/nitorac/aurionweb/AurionApp.java create mode 100644 app/src/main/java/fr/nitorac/aurionweb/MainActivity.java create mode 100644 app/src/main/java/fr/nitorac/aurionweb/Utils.java create mode 100644 app/src/main/java/fr/nitorac/aurionweb/aurionweb/AurionManager.java create mode 100644 app/src/main/java/fr/nitorac/aurionweb/aurionweb/AurionSession.java create mode 100644 app/src/main/java/fr/nitorac/aurionweb/aurionweb/AurionView.java create mode 100644 app/src/main/java/fr/nitorac/aurionweb/aurionweb/CheckConnectionTask.java create mode 100644 app/src/main/java/fr/nitorac/aurionweb/security/SecurityHelper.java create mode 100644 app/src/main/java/fr/nitorac/aurionweb/security/SecurityHelperPostM.java create mode 100644 app/src/main/java/fr/nitorac/aurionweb/security/SecurityHelperPreM.java create mode 100644 app/src/main/java/fr/nitorac/aurionweb/security/SecurityManager.java create mode 100644 app/src/main/java/fr/nitorac/aurionweb/ui/dashboard/DashboardFragment.java create mode 100644 app/src/main/java/fr/nitorac/aurionweb/ui/dashboard/DashboardViewModel.java create mode 100644 app/src/main/java/fr/nitorac/aurionweb/ui/home/HomeFragment.java create mode 100644 app/src/main/java/fr/nitorac/aurionweb/ui/home/HomeViewModel.java create mode 100644 app/src/main/java/fr/nitorac/aurionweb/ui/notifications/NotificationsFragment.java create mode 100644 app/src/main/java/fr/nitorac/aurionweb/ui/notifications/NotificationsViewModel.java create mode 100644 app/src/main/java/fr/nitorac/aurionweb/update/AsyncUpdateCheckerTask.java create mode 100644 app/src/main/java/fr/nitorac/aurionweb/update/UpdateManager.java create mode 100644 app/src/main/res/drawable-anydpi/ic_calendar.xml create mode 100644 app/src/main/res/drawable-anydpi/ic_download.xml create mode 100644 app/src/main/res/drawable-anydpi/ic_login.xml create mode 100644 app/src/main/res/drawable-hdpi/ic_calendar.png create mode 100644 app/src/main/res/drawable-hdpi/ic_download.png create mode 100644 app/src/main/res/drawable-hdpi/ic_login.png create mode 100644 app/src/main/res/drawable-mdpi/ic_calendar.png create mode 100644 app/src/main/res/drawable-mdpi/ic_download.png create mode 100644 app/src/main/res/drawable-mdpi/ic_login.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_calendar.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_download.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_login.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_calendar.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_download.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_login.png create mode 100644 app/src/main/res/drawable/ic_dashboard_black_24dp.xml create mode 100644 app/src/main/res/drawable/ic_home_black_24dp.xml create mode 100644 app/src/main/res/drawable/ic_notifications_black_24dp.xml create mode 100644 app/src/main/res/layout/activity_main.xml create mode 100644 app/src/main/res/layout/dialog_download.xml create mode 100644 app/src/main/res/layout/dialog_loading.xml create mode 100644 app/src/main/res/layout/dialog_login.xml create mode 100644 app/src/main/res/layout/fragment_calendar.xml create mode 100644 app/src/main/res/layout/fragment_home.xml create mode 100644 app/src/main/res/layout/fragment_notifications.xml create mode 100644 app/src/main/res/menu/appbar_menu.xml create mode 100644 app/src/main/res/menu/bottom_nav_menu.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_foreground.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_foreground.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_foreground.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_foreground.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_foreground.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/navigation/mobile_navigation.xml create mode 100644 app/src/main/res/raw/aurionweb_ensiie_fr.pem create mode 100644 app/src/main/res/raw/cas_ensiie_fr.pem create mode 100644 app/src/main/res/values-fr-rFR/strings.xml create mode 100644 app/src/main/res/values/colors.xml create mode 100644 app/src/main/res/values/dimens.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/styles.xml create mode 100644 app/src/main/res/xml/provider_paths.xml create mode 100644 app/src/test/java/fr/nitorac/aurionweb/ExampleUnitTest.java create mode 100644 build.gradle create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 local.properties create mode 100644 settings.gradle diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c08c401 --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +*.iml +.gradle +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..956c004 --- /dev/null +++ b/app/.gitignore @@ -0,0 +1,2 @@ +/build +/release \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..2ea288c --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,65 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' + +android { + compileSdkVersion 29 + buildToolsVersion "30.0.2" + + defaultConfig { + applicationId "fr.nitorac.aurionweb" + minSdkVersion 19 + targetSdkVersion 29 + versionCode 1 + versionName "1.0.0" + multiDexEnabled true + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + compileOptions { + coreLibraryDesugaringEnabled true + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + implementation fileTree(dir: "libs", include: ["*.jar"]) + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'com.google.android.material:material:1.2.1' + implementation 'androidx.constraintlayout:constraintlayout:2.0.1' + implementation 'androidx.vectordrawable:vectordrawable:1.1.0' + implementation 'androidx.navigation:navigation-fragment:2.3.0' + implementation 'androidx.navigation:navigation-ui:2.3.0' + implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' + implementation 'org.jsoup:jsoup:1.13.1' + implementation 'com.google.code.gson:gson:2.8.6' + implementation 'org.projectlombok:lombok:1.18.12' + annotationProcessor 'org.projectlombok:lombok:1.18.12' + + implementation 'com.github.lzyzsd:circleprogress:1.2.1' + implementation 'com.mindorks.android:prdownloader:0.6.0' + + implementation 'com.afollestad.material-dialogs:core:3.3.0' + implementation 'com.afollestad.material-dialogs:bottomsheets:3.3.0' + + testAnnotationProcessor 'org.projectlombok:lombok:1.18.12' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'androidx.test.ext:junit:1.1.2' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' + + coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.10' + implementation "androidx.core:core-ktx:1.3.2" + implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" +} +repositories { + mavenCentral() +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# 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 + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/app/src/androidTest/java/fr/nitorac/aurionweb/ExampleInstrumentedTest.java b/app/src/androidTest/java/fr/nitorac/aurionweb/ExampleInstrumentedTest.java new file mode 100644 index 0000000..78a697f --- /dev/null +++ b/app/src/androidTest/java/fr/nitorac/aurionweb/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package fr.nitorac.aurionweb; + +import android.content.Context; + +import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.platform.app.InstrumentationRegistry; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.assertEquals; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + assertEquals("fr.nitorac.aurionweb", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..f77c855 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="utf-8"?> +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="fr.nitorac.aurionweb"> + + <uses-permission android:name="android.permission.INTERNET" /> + <uses-permission-sdk-23 android:name="android.permission.INTERNET" /> + <uses-permission android:name="android.permission.WAKE_LOCK" /> + <uses-permission-sdk-23 android:name="android.permission.WAKE_LOCK" /> + <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/> + <uses-permission-sdk-23 android:name="android.permission.REQUEST_INSTALL_PACKAGES"/> + + <application + android:name=".AurionApp" + android:allowBackup="true" + android:icon="@mipmap/ic_launcher" + android:label="@string/app_name" + android:roundIcon="@mipmap/ic_launcher_round" + android:supportsRtl="true" + android:theme="@style/AppTheme"> + <activity + android:name=".MainActivity" + android:label="@string/app_name"> + <intent-filter> + <action android:name="android.intent.action.MAIN" /> + + <category android:name="android.intent.category.LAUNCHER" /> + </intent-filter> + </activity> + <provider + android:name="androidx.core.content.FileProvider" + android:authorities="${applicationId}.provider" + android:exported="false" + android:grantUriPermissions="true"> + <meta-data + android:name="android.support.FILE_PROVIDER_PATHS" + android:resource="@xml/provider_paths"/> + </provider> + </application> + +</manifest> \ No newline at end of file diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000000000000000000000000000000000000..32a3deb7f2521963368bbbe9ac18e4e6e31f4ea2 GIT binary patch literal 30844 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 Yyy|McJEz$7|ItxJQA43z-aPdG0%hQTRsaA1 literal 0 HcmV?d00001 diff --git a/app/src/main/java/fr/nitorac/aurionweb/AurionApp.java b/app/src/main/java/fr/nitorac/aurionweb/AurionApp.java new file mode 100644 index 0000000..f7ab679 --- /dev/null +++ b/app/src/main/java/fr/nitorac/aurionweb/AurionApp.java @@ -0,0 +1,18 @@ +package fr.nitorac.aurionweb; + +import android.app.Application; + +import com.downloader.PRDownloader; +import com.downloader.PRDownloaderConfig; + +public class AurionApp extends Application { + @Override + public void onCreate() { + super.onCreate(); + PRDownloader.initialize(getApplicationContext(), PRDownloaderConfig.newBuilder() + .setReadTimeout(30_000) + .setConnectTimeout(30_000) + .setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0") + .build()); + } +} diff --git a/app/src/main/java/fr/nitorac/aurionweb/MainActivity.java b/app/src/main/java/fr/nitorac/aurionweb/MainActivity.java new file mode 100644 index 0000000..37e137f --- /dev/null +++ b/app/src/main/java/fr/nitorac/aurionweb/MainActivity.java @@ -0,0 +1,70 @@ +package fr.nitorac.aurionweb; + +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.navigation.NavController; +import androidx.navigation.Navigation; +import androidx.navigation.ui.NavigationUI; + +import com.google.android.material.bottomnavigation.BottomNavigationView; + +import fr.nitorac.aurionweb.aurionweb.AurionManager; +import fr.nitorac.aurionweb.update.UpdateManager; + +public class MainActivity extends AppCompatActivity { + + private static MainActivity mainActivity; + + @Override + protected void onCreate(Bundle savedInstanceState) { + mainActivity = this; + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + UpdateManager.getInstance().checkUpdates(this); + AurionManager.getInstance().spawnLoginDialog(this); + + BottomNavigationView navView = findViewById(R.id.nav_view); + NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment); + NavigationUI.setupWithNavController(navView, navController); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.appbar_menu, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.connect_menuitem: + AurionManager.getInstance().spawnLoginDialog(this); + return true; + default: + return super.onOptionsItemSelected(item); + } + } + + + @Override + protected void onPause() { + super.onPause(); + UpdateManager.handleOnPause(); + } + + @Override + protected void onResume() { + super.onResume(); + UpdateManager.handleOnResume(); + } + + public static MainActivity getInstance(){ + return mainActivity; + } +} \ No newline at end of file diff --git a/app/src/main/java/fr/nitorac/aurionweb/Utils.java b/app/src/main/java/fr/nitorac/aurionweb/Utils.java new file mode 100644 index 0000000..c2fb787 --- /dev/null +++ b/app/src/main/java/fr/nitorac/aurionweb/Utils.java @@ -0,0 +1,96 @@ +package fr.nitorac.aurionweb; + +import android.content.Context; +import android.graphics.Point; +import android.view.Display; +import android.view.WindowManager; + +import com.google.gson.JsonObject; + +import org.jsoup.Connection; +import org.jsoup.Jsoup; + +import java.io.IOException; +import java.security.GeneralSecurityException; +import java.security.KeyStore; +import java.security.cert.Certificate; +import java.security.cert.CertificateFactory; +import java.text.CharacterIterator; +import java.text.Normalizer; +import java.text.StringCharacterIterator; +import java.util.Locale; + +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManagerFactory; + +public class Utils { + + private static SSLContext sslContext; + + public static Connection wrapSSL(String url) throws GeneralSecurityException, IOException { + return Jsoup.connect(url) + .sslSocketFactory(getContextForTrustedCertificates(MainActivity.getInstance().getApplicationContext()).getSocketFactory()); + } + + public static SSLContext getContextForTrustedCertificates(Context c) throws GeneralSecurityException, IOException { + if(sslContext == null){ + CertificateFactory cf = CertificateFactory.getInstance("X.509"); + + + Certificate cas = cf.generateCertificate(c.getResources().openRawResource(R.raw.cas_ensiie_fr)); + Certificate aurionweb = cf.generateCertificate(c.getResources().openRawResource(R.raw.aurionweb_ensiie_fr)); + + // Create a KeyStore containing our trusted CAs + String keyStoreType = KeyStore.getDefaultType(); + KeyStore keyStore = KeyStore.getInstance(keyStoreType); + keyStore.load(null, null); + keyStore.setCertificateEntry("cas", cas); + keyStore.setCertificateEntry("aurionweb", aurionweb); + + // Create a TrustManager that trusts the CAs in our KeyStore + String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm(); + TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm); + tmf.init(keyStore); + + // Create an SSLContext that uses our TrustManager + sslContext = SSLContext.getInstance("TLS"); + sslContext.init(null, tmf.getTrustManagers(), null); + } + + return sslContext; + } + + public static Point getScreenSize(Context c){ + WindowManager wm = (WindowManager) c.getSystemService(Context.WINDOW_SERVICE); + Display display = wm.getDefaultDisplay(); + Point size = new Point(); + display.getSize(size); + return size; + } + public static JsonObject strToJson(String text) { + JsonObject root = new JsonObject(); + root.addProperty("text", text); + return root; + } + + public static String stripAccents(String s) { + s = Normalizer.normalize(s, Normalizer.Form.NFD); + s = s.replaceAll("[\\p{InCombiningDiacriticalMarks}]", ""); + return s; + } + + public static String bytesToString(long bytes) { + long absB = bytes == Long.MIN_VALUE ? Long.MAX_VALUE : Math.abs(bytes); + if (absB < 1024) { + return bytes + " o"; + } + long value = absB; + CharacterIterator ci = new StringCharacterIterator("KMGTPE"); + for (int i = 40; i >= 0 && absB > 0xfffccccccccccccL >> i; i -= 10) { + value >>= 10; + ci.next(); + } + value *= Long.signum(bytes); + return String.format(Locale.FRENCH, "%.1f %co", value / 1024.0, ci.current()); + } +} diff --git a/app/src/main/java/fr/nitorac/aurionweb/aurionweb/AurionManager.java b/app/src/main/java/fr/nitorac/aurionweb/aurionweb/AurionManager.java new file mode 100644 index 0000000..71bed71 --- /dev/null +++ b/app/src/main/java/fr/nitorac/aurionweb/aurionweb/AurionManager.java @@ -0,0 +1,179 @@ +package fr.nitorac.aurionweb.aurionweb; + +import android.content.Context; +import android.util.TypedValue; +import android.widget.EditText; +import android.widget.Toast; + +import androidx.core.content.ContextCompat; + +import com.afollestad.materialdialogs.LayoutMode; +import com.afollestad.materialdialogs.MaterialDialog; +import com.afollestad.materialdialogs.bottomsheets.BottomSheet; +import com.afollestad.materialdialogs.bottomsheets.BottomSheetsKt; +import com.afollestad.materialdialogs.customview.DialogCustomViewExtKt; + +import org.jsoup.Connection; +import org.jsoup.nodes.Document; + +import java.io.IOException; +import java.security.GeneralSecurityException; + +import fr.nitorac.aurionweb.R; +import fr.nitorac.aurionweb.Utils; + +public class AurionManager { + + private static AurionManager instance; + + public AurionManager(){ + + } + + public boolean checkPassword(String username, String password) { + AurionSession session = new AurionSession(); + try { + initConnection(session, username, password); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + // Instancie une connection vers AurionWeb + public Document initConnection(AurionSession AurionSession, String username, String pwd) throws IOException, GeneralSecurityException { + // Première connection pour récupérer un String "execution" nécessaire à la connection + Connection.Response initRes = Utils.wrapSSL("https://cas.ensiie.fr/login?service=https%3A%2F%2Faurionweb.ensiie.fr%2F%2Flogin%2Fcas") + .method(Connection.Method.GET) + .header("Cache-Control", "max-age=0") + .header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36") + .execute(); + String execution = initRes.parse().getElementsByAttributeValue("name", "execution").get(0).attr("value"); + //Requête effective permettant la validation de l'authentification sur CAS + Connection secConn = Utils.wrapSSL("https://cas.ensiie.fr/login?service=https%3A%2F%2Faurionweb.ensiie.fr%2F%2Flogin%2Fcas") + .method(Connection.Method.POST) + .followRedirects(true) + .header("Cache-Control", "max-age=0") + .header("Content-Type", "application/x-www-form-urlencoded") + .header("Host", "cas.ensiie.fr") + .header("Origin", "https://cas.ensiie.fr") + .header("Referer", "https://cas.ensiie.fr/login?service=https%3A%2F%2Faurionweb.ensiie.fr%2F%2Flogin%2Fcas") + .header("Sec-Fetch-Mode", "navigate") + .header("Sec-Fetch-Site", "same-origin") + .header("Upgrade-Insecure-Requests", "1") + .header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36") + .data("username", username) + .data("_eventId", "submit") + //.data("geolocation", "") + .data("execution", execution); + secConn.data("password", pwd); + Connection.Response sec = secConn.execute(); + Document doc1 = sec.parse(); + AurionSession.parseViewState(doc1); + AurionSession.setJSESSIONID(sec.cookie("JSESSIONID")); + //On trouve le form ID + AurionSession.parseConnectMenuFormId(doc1); + //On trouve l'ID du bouton Emploi du temps (pour les requêtes) + AurionSession.parseConnectMenuId(doc1); + //Requête effective permettant la validation de l'authentification sur CAS + Connection.Response tmp = Utils.wrapSSL("https://aurionweb.ensiie.fr/faces/MainMenuPage.xhtml") + .method(Connection.Method.POST) + .followRedirects(true) + .header("Cache-Control", "max-age=0") + .header("Content-Type", "application/x-www-form-urlencoded") + .header("Host", "aurionweb.ensiie.fr") + .header("Origin", "https://aurionweb.ensiie.fr") + .header("Referer", "https://aurionweb.ensiie.fr/") + .header("Faces-Request", "partial/ajax") + .header("Upgrade-Insecure-Requests", "1") + .header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36") + .cookie("JSESSIONID", AurionSession.getJSESSIONID()) + .data("javax.faces.partial.ajax", "true") + .data("javax.faces.source", AurionSession.getMenuFormId()) + .data("javax.faces.partial.execute", AurionSession.getMenuFormId()) + .data("javax.faces.partial.render", "form:sidebar") + .data(AurionSession.getMenuFormId(), AurionSession.getMenuFormId()) + .data("webscolaapp.Sidebar.ID_SUBMENU", AurionSession.getMenuId()) + .data("form", "form") + //.data("form:largeurDivCenter", "1219") + //.data("form:sauvegarde", "") + .data("javax.faces.ViewState", AurionSession.getViewState()) + .execute(); + Document doc2 = tmp.parse(); + AurionSession.parseViewState(doc2); + AurionSession.parseConnectSubmenuId(doc2); + // On charge une fois la page pour valider un affichage fictif (cote server aurion) + // Requête effective permettant la validation de l'authentification sur CAS + Connection.Response resp = Utils.wrapSSL("https://aurionweb.ensiie.fr/faces/MainMenuPage.xhtml") + .method(Connection.Method.POST) + .followRedirects(true) + .header("Cache-Control", "max-age=0") + .header("Content-Type", "application/x-www-form-urlencoded") + .header("Host", "aurionweb.ensiie.fr") + .header("Origin", "https://aurionweb.ensiie.fr") + .header("Referer", "https://aurionweb.ensiie.fr/") + .header("Upgrade-Insecure-Requests", "1") + .header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36") + .cookie("JSESSIONID", AurionSession.getJSESSIONID()) + .data("form", "form") + //.data("form:largeurDivCenter", "1219") + //.data("form:sauvegarde", "") + .data("form:sidebar", "form:sidebar") + .data("form:sidebar_menuid", AurionSession.getSubmenuId()) + .data("javax.faces.ViewState", AurionSession.getViewState()) + .execute(); + Document respDoc = resp.parse(); + //On trouve le formId du ChoixPlanning + AurionSession.parseChoixPlanningFormId(respDoc); + //On trouve l'id du bouton 'Voir planning' necéssaire aux requêtes + AurionSession.parseChoixPlanningSubmitBtnId(respDoc); + AurionSession.parseViewState(respDoc); + return respDoc; + } + + public void spawnLoginDialog(Context c){ + final MaterialDialog dialog = new MaterialDialog(c, new BottomSheet(LayoutMode.MATCH_PARENT)) + .title(null, "Connexion AurionWeb") + .icon(null, ContextCompat.getDrawable(c, R.drawable.ic_login)) + .cancelable(true) + .noAutoDismiss() + .positiveButton(null, "CONNEXION", materialDialog -> { + EditText login = materialDialog.getView().findViewById(R.id.loginInput); + EditText pwd = materialDialog.getView().findViewById(R.id.passwordInput); + CheckConnectionTask checkTask = new CheckConnectionTask(c, (res) -> { + if(res){ + Toast.makeText(c, "Connexion réussie !", Toast.LENGTH_LONG).show(); + materialDialog.dismiss(); + }else{ + Toast.makeText(c, "Mauvais mot de passe ou erreur de connexion !", Toast.LENGTH_LONG).show(); + } + }); + checkTask.execute(login.getText().toString().toLowerCase().trim(), pwd.getText().toString().trim()); + return null; + }) + .negativeButton(null, "ANNULER", materialDialog -> { + materialDialog.dismiss(); + return null; + }); + BottomSheetsKt.setPeekHeight(dialog, (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 400 /*dp*/, c.getResources().getDisplayMetrics()), null); + + // Errk, dirtyyyy, but I can't find any other way to do it + DialogCustomViewExtKt.customView(dialog, R.layout.dialog_login, null, false, false, true, true); + + // Errk, dirtyyyy, workaround to avoid a flickering issue when dialog is sliding + dialog.dismiss(); + + dialog.show(); + } + + + + public static AurionManager getInstance(){ + if(instance == null){ + instance = new AurionManager(); + } + + return instance; + } +} diff --git a/app/src/main/java/fr/nitorac/aurionweb/aurionweb/AurionSession.java b/app/src/main/java/fr/nitorac/aurionweb/aurionweb/AurionSession.java new file mode 100644 index 0000000..996e47d --- /dev/null +++ b/app/src/main/java/fr/nitorac/aurionweb/aurionweb/AurionSession.java @@ -0,0 +1,178 @@ +package fr.nitorac.aurionweb.aurionweb; + +import android.util.Log; + +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; +import org.jsoup.nodes.Node; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import fr.nitorac.aurionweb.Utils; +import lombok.AccessLevel; +import lombok.Data; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@NoArgsConstructor +@Data +public class AurionSession { + private static final String TAG = "AurionSession"; + + @Getter(AccessLevel.NONE) + @Setter(AccessLevel.NONE) + private static final Pattern menuIdPattern = Pattern.compile("\\{PrimeFaces\\.ab\\(\\{s:\"(.*?)\"", Pattern.MULTILINE); + + @Getter(AccessLevel.NONE) + @Setter(AccessLevel.NONE) + private static final Pattern liSubmenuPattern = Pattern.compile("'form:sidebar_menuid':'(.*?)'", Pattern.MULTILINE); + private static final List<String> elemsPopupLabel = Arrays.asList("cour", "interve", "ressourc"); + + private String JSESSIONID = ""; + + //Variables ID pour la connection et le menu (@see initConnection du AurionManager) + @Setter(AccessLevel.PRIVATE) + private String viewState = ""; + @Setter(AccessLevel.NONE) + private String menuFormId = ""; + @Setter(AccessLevel.NONE) + private String menuId = ""; + + //Variables ID pour le ChoixPlanning + @Setter(AccessLevel.NONE) + private String submenuId = ""; + @Setter(AccessLevel.NONE) + private String choixpFormId = ""; + + //Variables ID pour le Planning + @Setter(AccessLevel.NONE) + private String choixpSubmitId = ""; + @Setter(AccessLevel.NONE) + private String planningFormId = ""; + //Variables ID pour le popup d'un événement du Planning : Cours, Intervenants, Ressources, et Infos + @Setter(AccessLevel.NONE) + private ArrayList<String> elemsPopupId = new ArrayList<>(3); + private Document lastDoc; + + private static String getViewState(Document doc) { + Element view = doc.getElementById("j_id1:javax.faces.ViewState:0"); + if (view == null) { + return null; + } + String test = view.attr("value"); + return test.isEmpty() ? /* CDATA Node */view.text() : test; + } + + public void parseViewState(Document doc) { + doc = setLastDoc(doc); + String viewState = getViewState(doc); + if (viewState == null) { + Log.e(TAG, "Impossible d'analyser le ViewState pour : \n" + doc.outerHtml()); + } + setViewState(viewState); + } + + public boolean parseConnectMenuFormId(Document doc) { + doc = setLastDoc(doc); + //On va récupérer l'ID Aurionweb qui correspond à la form du menu + String menuScript = doc.getElementsByAttributeValue("type", "text/javascript").stream().map(Node::outerHtml).filter(e -> e.contains("chargerSousMenu = function()")).findFirst().orElse(""); + Matcher menuMatcher = menuIdPattern.matcher(menuScript); + menuFormId = menuMatcher.find() ? menuMatcher.group(1) : null; + if (menuFormId == null) { + Log.e(TAG, "Impossible de trouver l'ID menu dans : " + menuScript); + return false; + } + return true; + } + + public boolean parseConnectMenuId(Document doc) { + doc = setLastDoc(doc); + //Maintenant on va récupérer l'ID du menu qu'on souhaite, c'est à dire Emploi du temps + // (Oui c'est bien un menu même si on cherche une balise avec submenu_... comme classe x) (c'est aurionweb) + Element menuClass = doc.getElementsByAttributeValueContaining("class", "submenu_").stream().filter(e -> e.text().contains("Emploi du temps")).findFirst().orElse(null); + menuId = menuClass != null ? menuClass.classNames().stream().filter(c -> c.startsWith("submenu_")).findFirst().orElse("") : null; + if (menuId == null) { + Log.e(TAG, "Impossible de trouver un menu avec 'Emploi du temps' comme texte !"); + return false; + } + return true; + } + + public boolean parseConnectSubmenuId(Document doc) { + doc = setLastDoc(doc); + //On va maintenant trouver un ID de la forme '2_1' qui correspond à l'ID du lien "Planning d'un étudiant au choix" + Element liSubmenuID = Jsoup.parse(doc.getElementById("form:sidebar").text()).getElementsByTag("li").stream().filter(e -> Utils.stripAccents(e.text()).equalsIgnoreCase("Planning d'un etudiant au choix")).findFirst().orElse(null); + if (liSubmenuID != null) { + Matcher submenuMatcher = liSubmenuPattern.matcher(liSubmenuID.child(0).attr("onclick")); + if (submenuMatcher.find()) { + submenuId = submenuMatcher.group(1); + return true; + } + } else { + Log.e(TAG, "Impossible de trouver un sous menu de tag 'li' avec 'Planning d'un étudiant au choix' comme texte !"); + } + return false; + } + + + public boolean parseChoixPlanningFormId(Document doc) { + doc = setLastDoc(doc); + //On va trouver l'ID principal correspondant à la form de la page ChoixPlanning d'Aurionweb + Element formDiv = doc.getElementsByAttributeValueContaining("class", "ui-datatable ui-widget").first(); + if (formDiv != null) { + choixpFormId = formDiv.id(); + return true; + } + return false; + } + + public boolean parseChoixPlanningSubmitBtnId(Document doc) { + doc = setLastDoc(doc); + //On va trouver l'ID du bouton 'Voir planning' qui est nécessaire dans les données d'une requête accédant à l'edt d'un user + Element submitBtn = doc.getElementsByAttributeValue("type", "submit").stream().filter(e -> e.text().toLowerCase().contains("voir planning")).findFirst().orElse(null); + if (submitBtn != null) { + choixpSubmitId = submitBtn.id(); + return true; + } + return false; + } + + public boolean parsePlanningFormId(Document doc) { + doc = setLastDoc(doc); + //On va trouver la form id principale de la page + Element scheduleDiv = doc.getElementsByClass("schedule").first(); + if (scheduleDiv != null) { + planningFormId = scheduleDiv.id(); + return true; + } + return false; + } + + public void parseEventProps(Document doc) { + elemsPopupId.clear(); + for (int i = 0; i < elemsPopupLabel.size(); i++) { + elemsPopupId.add(null); + } + for (Element e : doc.getElementsByTag("a")) { + if (e.children().size() == 0) { + for (int i = 0; i < elemsPopupLabel.size(); i++) { + if (e.text().toLowerCase().contains(elemsPopupLabel.get(i))) { + //substring(1) pour retirer le # devant + elemsPopupId.set(i, doc.getElementById(e.attr("href").substring(1)).getElementsByAttributeValueContaining("id", "_data").first().id()); + } + } + } + } + } + + + public Document setLastDoc(Document doc) { + return doc == null ? getLastDoc() : (lastDoc = doc); + } +} diff --git a/app/src/main/java/fr/nitorac/aurionweb/aurionweb/AurionView.java b/app/src/main/java/fr/nitorac/aurionweb/aurionweb/AurionView.java new file mode 100644 index 0000000..1b13e02 --- /dev/null +++ b/app/src/main/java/fr/nitorac/aurionweb/aurionweb/AurionView.java @@ -0,0 +1,7 @@ +package fr.nitorac.aurionweb.aurionweb; + +public class AurionView { + public AurionView(){ + + } +} diff --git a/app/src/main/java/fr/nitorac/aurionweb/aurionweb/CheckConnectionTask.java b/app/src/main/java/fr/nitorac/aurionweb/aurionweb/CheckConnectionTask.java new file mode 100644 index 0000000..974ddb5 --- /dev/null +++ b/app/src/main/java/fr/nitorac/aurionweb/aurionweb/CheckConnectionTask.java @@ -0,0 +1,50 @@ +package fr.nitorac.aurionweb.aurionweb; + +import android.content.Context; +import android.os.AsyncTask; + +import com.afollestad.materialdialogs.LayoutMode; +import com.afollestad.materialdialogs.MaterialDialog; +import com.afollestad.materialdialogs.bottomsheets.BottomSheet; +import com.afollestad.materialdialogs.customview.DialogCustomViewExtKt; + +import fr.nitorac.aurionweb.R; + +public class CheckConnectionTask extends AsyncTask<String, Void, Boolean> { + + private MaterialDialog loading; + private ConnectionCheck callback; + + public CheckConnectionTask(Context c, ConnectionCheck callback){ + this.callback = callback; + loading = new MaterialDialog(c, new BottomSheet(LayoutMode.WRAP_CONTENT)) + .cancelable(false) + .cancelOnTouchOutside(false) + .title(R.string.loading, null) + .noAutoDismiss(); + DialogCustomViewExtKt.customView(loading, R.layout.dialog_loading, null, false, false, true, true); + loading.dismiss(); + } + + @Override + protected void onPreExecute() { + super.onPreExecute(); + loading.show(); + } + + @Override + protected void onPostExecute(Boolean res) { + super.onPostExecute(res); + loading.dismiss(); + callback.onResult(res); + } + + @Override + protected Boolean doInBackground(String... creds) { + return AurionManager.getInstance().checkPassword(creds[0], creds[1]); + } + + public interface ConnectionCheck { + void onResult(Boolean res); + } +} diff --git a/app/src/main/java/fr/nitorac/aurionweb/security/SecurityHelper.java b/app/src/main/java/fr/nitorac/aurionweb/security/SecurityHelper.java new file mode 100644 index 0000000..f73a917 --- /dev/null +++ b/app/src/main/java/fr/nitorac/aurionweb/security/SecurityHelper.java @@ -0,0 +1,11 @@ +package fr.nitorac.aurionweb.security; + +import java.io.IOException; +import java.security.GeneralSecurityException; + +public interface SecurityHelper { + + void init() throws GeneralSecurityException, IOException; + String decrypt(String encrypted) throws GeneralSecurityException, IOException; + String encrypt(String raw) throws GeneralSecurityException, IOException; +} diff --git a/app/src/main/java/fr/nitorac/aurionweb/security/SecurityHelperPostM.java b/app/src/main/java/fr/nitorac/aurionweb/security/SecurityHelperPostM.java new file mode 100644 index 0000000..b15d398 --- /dev/null +++ b/app/src/main/java/fr/nitorac/aurionweb/security/SecurityHelperPostM.java @@ -0,0 +1,66 @@ +package fr.nitorac.aurionweb.security; + +import android.os.Build; +import android.security.keystore.KeyGenParameterSpec; +import android.security.keystore.KeyProperties; +import android.util.Base64; + +import androidx.annotation.RequiresApi; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.security.GeneralSecurityException; +import java.security.Key; +import java.security.KeyStore; + +import javax.crypto.Cipher; +import javax.crypto.KeyGenerator; +import javax.crypto.spec.GCMParameterSpec; + +@RequiresApi(api = Build.VERSION_CODES.M) +public class SecurityHelperPostM implements SecurityHelper { + + private static final String AndroidKeyStore = "AndroidKeyStore"; + private static final String AES_MODE = "AES/GCM/NoPadding"; + + private KeyStore keyStore; + + public SecurityHelperPostM() throws GeneralSecurityException, IOException { + init(); + } + + public void init() throws GeneralSecurityException, IOException { + keyStore = KeyStore.getInstance(AndroidKeyStore); + keyStore.load(null); + + if (!keyStore.containsAlias(SecurityManager.KEYSTORE_NAME)) { + KeyGenerator keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, AndroidKeyStore); + keyGenerator.init( + new KeyGenParameterSpec.Builder(SecurityManager.KEYSTORE_NAME, + KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT) + .setBlockModes(KeyProperties.BLOCK_MODE_GCM) + .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE) + .setRandomizedEncryptionRequired(true) + .build()); + keyGenerator.generateKey(); + } + } + + private Key getSecretKey() throws GeneralSecurityException { + return keyStore.getKey(SecurityManager.KEYSTORE_NAME, null); + } + + public String encrypt(String raw) throws GeneralSecurityException { + Cipher c = Cipher.getInstance(AES_MODE); + c.init(Cipher.ENCRYPT_MODE, getSecretKey(), c.getParameters()); + byte[] encodedBytes = c.doFinal(raw.getBytes(StandardCharsets.UTF_8)); + return Base64.encodeToString(encodedBytes, Base64.DEFAULT).replace("\n", "") + ":" + Base64.encodeToString(c.getIV(), Base64.DEFAULT); + } + + public String decrypt(String encrypted) throws GeneralSecurityException { + String[] data = encrypted.split(":"); + Cipher c = Cipher.getInstance(AES_MODE); + c.init(Cipher.DECRYPT_MODE, getSecretKey(), new GCMParameterSpec(128, Base64.decode(data[1], Base64.DEFAULT))); + return new String(c.doFinal(Base64.decode(data[0], Base64.DEFAULT)), StandardCharsets.UTF_8); + } +} \ No newline at end of file diff --git a/app/src/main/java/fr/nitorac/aurionweb/security/SecurityHelperPreM.java b/app/src/main/java/fr/nitorac/aurionweb/security/SecurityHelperPreM.java new file mode 100644 index 0000000..7a73b26 --- /dev/null +++ b/app/src/main/java/fr/nitorac/aurionweb/security/SecurityHelperPreM.java @@ -0,0 +1,135 @@ +package fr.nitorac.aurionweb.security; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.SharedPreferences; +import android.security.KeyPairGeneratorSpec; +import android.util.Base64; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.math.BigInteger; +import java.nio.charset.StandardCharsets; +import java.security.GeneralSecurityException; +import java.security.InvalidKeyException; +import java.security.Key; +import java.security.KeyPairGenerator; +import java.security.KeyStore; +import java.security.SecureRandom; +import java.util.ArrayList; +import java.util.Calendar; + +import javax.crypto.Cipher; +import javax.crypto.CipherInputStream; +import javax.crypto.CipherOutputStream; +import javax.crypto.spec.SecretKeySpec; +import javax.security.auth.x500.X500Principal; + +public class SecurityHelperPreM implements SecurityHelper { + + private static final String AndroidKeyStore = "AndroidKeyStore"; + private static final String RSA_MODE = "RSA/ECB/PKCS1Padding"; + private static final String AES_MODE = "AES/ECB/PKCS7Padding"; + + private Context context; + private KeyStore keyStore; + + public SecurityHelperPreM(Context context) throws GeneralSecurityException, IOException { + this.context = context; + init(); + } + + public void init() throws GeneralSecurityException, IOException { + keyStore = KeyStore.getInstance(AndroidKeyStore); + keyStore.load(null);// Generate the RSA key pairs + if (!keyStore.containsAlias(SecurityManager.KEYSTORE_NAME)) { + // Generate a key pair for encryption + Calendar start = Calendar.getInstance(); + Calendar end = Calendar.getInstance(); + end.add(Calendar.YEAR, 60); + KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(context) + .setAlias(SecurityManager.KEYSTORE_NAME) + .setSubject(new X500Principal("CN=" + SecurityManager.KEYSTORE_NAME)) + .setSerialNumber(BigInteger.TEN) + .setStartDate(start.getTime()) + .setEndDate(end.getTime()) + .build(); + KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA", AndroidKeyStore); + kpg.initialize(spec); + kpg.generateKeyPair(); + } + + SharedPreferences pref = context.getSharedPreferences(SecurityManager.SEC_SHARED_PREF, Context.MODE_PRIVATE); + String enryptedKeyB64 = pref.getString(SecurityManager.ENCRYPT_KEY, null); + if (enryptedKeyB64 == null) { + byte[] key = new byte[16]; + SecureRandom secureRandom = new SecureRandom(); + secureRandom.nextBytes(key); + byte[] encryptedKey = rsaEncrypt(key); + enryptedKeyB64 = Base64.encodeToString(encryptedKey, Base64.DEFAULT); + SharedPreferences.Editor edit = pref.edit(); + edit.putString(SecurityManager.ENCRYPT_KEY, enryptedKeyB64); + edit.apply(); + } + } + + private byte[] rsaEncrypt(byte[] secret) throws GeneralSecurityException, IOException { + KeyStore.PrivateKeyEntry privateKeyEntry = (KeyStore.PrivateKeyEntry) keyStore.getEntry(SecurityManager.KEYSTORE_NAME, null); + // Encrypt the text + Cipher inputCipher = Cipher.getInstance(RSA_MODE, "AndroidOpenSSL"); + inputCipher.init(Cipher.ENCRYPT_MODE, privateKeyEntry.getCertificate().getPublicKey()); + + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + CipherOutputStream cipherOutputStream = new CipherOutputStream(outputStream, inputCipher); + cipherOutputStream.write(secret); + cipherOutputStream.close(); + + return outputStream.toByteArray(); + } + + private byte[] rsaDecrypt(byte[] encrypted) throws GeneralSecurityException, IOException { + KeyStore.PrivateKeyEntry privateKeyEntry = (KeyStore.PrivateKeyEntry)keyStore.getEntry(SecurityManager.KEYSTORE_NAME, null); + Cipher output = Cipher.getInstance(RSA_MODE, "AndroidOpenSSL"); + output.init(Cipher.DECRYPT_MODE, privateKeyEntry.getPrivateKey()); + CipherInputStream cipherInputStream = new CipherInputStream( + new ByteArrayInputStream(encrypted), output); + ArrayList<Byte> values = new ArrayList<>(); + int nextByte; + while ((nextByte = cipherInputStream.read()) != -1) { + values.add((byte)nextByte); + } + + byte[] bytes = new byte[values.size()]; + for(int i = 0; i < bytes.length; i++) { + bytes[i] = values.get(i); + } + return bytes; + } + + private Key getSecretKey(Context context) throws GeneralSecurityException, IOException { + SharedPreferences pref = context.getSharedPreferences(SecurityManager.SEC_SHARED_PREF, Context.MODE_PRIVATE); + String enryptedKeyB64 = pref.getString(SecurityManager.ENCRYPT_KEY, null); + if(enryptedKeyB64 == null){ + throw new InvalidKeyException("Impossible de trouver la clé AES sauvegardée !"); + } + byte[] encryptedKey = Base64.decode(enryptedKeyB64, Base64.DEFAULT); + byte[] key = rsaDecrypt(encryptedKey); + return new SecretKeySpec(key, "AES"); + } + + @SuppressLint("GetInstance") // Vu qu'on fait du legacy ici, ça sert à rien d'avoir ces warnings + public String encrypt(String input) throws GeneralSecurityException, IOException { + Cipher c = Cipher.getInstance(AES_MODE, "BC"); + c.init(Cipher.ENCRYPT_MODE, getSecretKey(context)); + byte[] encodedBytes = c.doFinal(input.getBytes(StandardCharsets.UTF_8)); + return Base64.encodeToString(encodedBytes, Base64.DEFAULT); + } + + @SuppressLint("GetInstance") // Vu qu'on fait du legacy ici, ça sert à rien d'avoir ces warnings + public String decrypt(String encrypted) throws GeneralSecurityException, IOException { + Cipher c = Cipher.getInstance(AES_MODE, "BC"); + c.init(Cipher.DECRYPT_MODE, getSecretKey(context)); + return new String(c.doFinal(Base64.decode(encrypted, Base64.DEFAULT)), StandardCharsets.UTF_8); + } +} diff --git a/app/src/main/java/fr/nitorac/aurionweb/security/SecurityManager.java b/app/src/main/java/fr/nitorac/aurionweb/security/SecurityManager.java new file mode 100644 index 0000000..0efccae --- /dev/null +++ b/app/src/main/java/fr/nitorac/aurionweb/security/SecurityManager.java @@ -0,0 +1,35 @@ +package fr.nitorac.aurionweb.security; + +import android.content.Context; +import android.os.Build; + +import java.io.IOException; +import java.security.GeneralSecurityException; + +/** + * On utilise une méthode assez compliquée pour stocker le mot de passe Aurionweb + * + * Etant donné qu'on ne peut utiliser une clé de chiffrement dans le code car trop facilement retrouvable, + * on la stocke en utilisant le chiffrement fourni par Android ! + * + * Cependant, le gestionnaire de chiffrement Android a changé d'API avant et après Android M, il faut donc gérer les deux possibilités + */ +public class SecurityManager { + + public static final String KEYSTORE_NAME = "NitAurionWeb"; + public static final String SEC_SHARED_PREF = "secstore"; + public static final String ENCRYPT_KEY = "aesKey"; + + private static SecurityHelper secHelp; + + public static SecurityHelper getSecurityHelper(Context c) throws GeneralSecurityException, IOException { + if(secHelp == null) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + secHelp = new SecurityHelperPostM(); + }else{ + secHelp = new SecurityHelperPreM(c); + } + } + return secHelp; + } +} diff --git a/app/src/main/java/fr/nitorac/aurionweb/ui/dashboard/DashboardFragment.java b/app/src/main/java/fr/nitorac/aurionweb/ui/dashboard/DashboardFragment.java new file mode 100644 index 0000000..0ddc055 --- /dev/null +++ b/app/src/main/java/fr/nitorac/aurionweb/ui/dashboard/DashboardFragment.java @@ -0,0 +1,35 @@ +package fr.nitorac.aurionweb.ui.dashboard; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProviders; + +import fr.nitorac.aurionweb.R; + +public class DashboardFragment extends Fragment { + + private DashboardViewModel dashboardViewModel; + + public View onCreateView(@NonNull LayoutInflater inflater, + ViewGroup container, Bundle savedInstanceState) { + dashboardViewModel = + ViewModelProviders.of(this).get(DashboardViewModel.class); + View root = inflater.inflate(R.layout.fragment_calendar, container, false); + final TextView textView = root.findViewById(R.id.text_dashboard); + dashboardViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() { + @Override + public void onChanged(@Nullable String s) { + textView.setText(s); + } + }); + return root; + } +} \ No newline at end of file diff --git a/app/src/main/java/fr/nitorac/aurionweb/ui/dashboard/DashboardViewModel.java b/app/src/main/java/fr/nitorac/aurionweb/ui/dashboard/DashboardViewModel.java new file mode 100644 index 0000000..84c5294 --- /dev/null +++ b/app/src/main/java/fr/nitorac/aurionweb/ui/dashboard/DashboardViewModel.java @@ -0,0 +1,19 @@ +package fr.nitorac.aurionweb.ui.dashboard; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; + +public class DashboardViewModel extends ViewModel { + + private MutableLiveData<String> mText; + + public DashboardViewModel() { + mText = new MutableLiveData<>(); + mText.setValue("This is dashboard fragment"); + } + + public LiveData<String> getText() { + return mText; + } +} \ No newline at end of file diff --git a/app/src/main/java/fr/nitorac/aurionweb/ui/home/HomeFragment.java b/app/src/main/java/fr/nitorac/aurionweb/ui/home/HomeFragment.java new file mode 100644 index 0000000..8f33708 --- /dev/null +++ b/app/src/main/java/fr/nitorac/aurionweb/ui/home/HomeFragment.java @@ -0,0 +1,35 @@ +package fr.nitorac.aurionweb.ui.home; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProviders; + +import fr.nitorac.aurionweb.R; + +public class HomeFragment extends Fragment { + + private HomeViewModel homeViewModel; + + public View onCreateView(@NonNull LayoutInflater inflater, + ViewGroup container, Bundle savedInstanceState) { + homeViewModel = + ViewModelProviders.of(this).get(HomeViewModel.class); + View root = inflater.inflate(R.layout.fragment_home, container, false); + final TextView textView = root.findViewById(R.id.text_home); + homeViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() { + @Override + public void onChanged(@Nullable String s) { + textView.setText(s); + } + }); + return root; + } +} \ No newline at end of file diff --git a/app/src/main/java/fr/nitorac/aurionweb/ui/home/HomeViewModel.java b/app/src/main/java/fr/nitorac/aurionweb/ui/home/HomeViewModel.java new file mode 100644 index 0000000..9f8c5f8 --- /dev/null +++ b/app/src/main/java/fr/nitorac/aurionweb/ui/home/HomeViewModel.java @@ -0,0 +1,19 @@ +package fr.nitorac.aurionweb.ui.home; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; + +public class HomeViewModel extends ViewModel { + + private MutableLiveData<String> mText; + + public HomeViewModel() { + mText = new MutableLiveData<>(); + mText.setValue("This is home fragment"); + } + + public LiveData<String> getText() { + return mText; + } +} \ No newline at end of file diff --git a/app/src/main/java/fr/nitorac/aurionweb/ui/notifications/NotificationsFragment.java b/app/src/main/java/fr/nitorac/aurionweb/ui/notifications/NotificationsFragment.java new file mode 100644 index 0000000..f926c6d --- /dev/null +++ b/app/src/main/java/fr/nitorac/aurionweb/ui/notifications/NotificationsFragment.java @@ -0,0 +1,35 @@ +package fr.nitorac.aurionweb.ui.notifications; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProviders; + +import fr.nitorac.aurionweb.R; + +public class NotificationsFragment extends Fragment { + + private NotificationsViewModel notificationsViewModel; + + public View onCreateView(@NonNull LayoutInflater inflater, + ViewGroup container, Bundle savedInstanceState) { + notificationsViewModel = + ViewModelProviders.of(this).get(NotificationsViewModel.class); + View root = inflater.inflate(R.layout.fragment_notifications, container, false); + final TextView textView = root.findViewById(R.id.text_notifications); + notificationsViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() { + @Override + public void onChanged(@Nullable String s) { + textView.setText(s); + } + }); + return root; + } +} \ No newline at end of file diff --git a/app/src/main/java/fr/nitorac/aurionweb/ui/notifications/NotificationsViewModel.java b/app/src/main/java/fr/nitorac/aurionweb/ui/notifications/NotificationsViewModel.java new file mode 100644 index 0000000..daea70f --- /dev/null +++ b/app/src/main/java/fr/nitorac/aurionweb/ui/notifications/NotificationsViewModel.java @@ -0,0 +1,19 @@ +package fr.nitorac.aurionweb.ui.notifications; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; + +public class NotificationsViewModel extends ViewModel { + + private MutableLiveData<String> mText; + + public NotificationsViewModel() { + mText = new MutableLiveData<>(); + mText.setValue("This is notifications fragment"); + } + + public LiveData<String> getText() { + return mText; + } +} \ No newline at end of file diff --git a/app/src/main/java/fr/nitorac/aurionweb/update/AsyncUpdateCheckerTask.java b/app/src/main/java/fr/nitorac/aurionweb/update/AsyncUpdateCheckerTask.java new file mode 100644 index 0000000..cf29576 --- /dev/null +++ b/app/src/main/java/fr/nitorac/aurionweb/update/AsyncUpdateCheckerTask.java @@ -0,0 +1,60 @@ +package fr.nitorac.aurionweb.update; + +import android.content.Context; +import android.os.AsyncTask; +import android.widget.Toast; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; + +import java.io.IOException; +import java.io.InputStreamReader; +import java.lang.ref.WeakReference; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; + +import fr.nitorac.aurionweb.BuildConfig; + +public class AsyncUpdateCheckerTask extends AsyncTask<Void, Void, JsonObject> { + + private WeakReference<Context> weakContext; + + public AsyncUpdateCheckerTask(Context c){ + weakContext = new WeakReference<>(c); + } + + @Override + protected JsonObject doInBackground(Void... voids) { + try { + URL url = new URL(UpdateManager.CHECK_URL + URLEncoder.encode(BuildConfig.VERSION_NAME, StandardCharsets.UTF_8.toString())); + HttpURLConnection conn=(HttpURLConnection) url.openConnection(); + conn.setConnectTimeout(10000); // timing out in a minute + + JsonObject obj = new Gson().fromJson(new InputStreamReader(conn.getInputStream()), JsonObject.class); + if(!obj.get("version").getAsString().equalsIgnoreCase(BuildConfig.VERSION_NAME)){ + return obj; + }else{ + return new JsonObject(); + } + } catch (IOException e) { + e.printStackTrace(); + return null; + } + } + + @Override + protected void onPostExecute(JsonObject obj) { + super.onPostExecute(obj); + if(weakContext == null){ + return; + } + if(obj == null){ + Toast.makeText(weakContext.get(), "Impossible de vérifier les mises à jour ...", Toast.LENGTH_SHORT).show(); + }else if(!obj.entrySet().isEmpty()){ + UpdateManager.updateAvailable = true; + UpdateManager.getInstance().spawnUpdateDialog(weakContext, obj); + } + } +} diff --git a/app/src/main/java/fr/nitorac/aurionweb/update/UpdateManager.java b/app/src/main/java/fr/nitorac/aurionweb/update/UpdateManager.java new file mode 100644 index 0000000..abc3f46 --- /dev/null +++ b/app/src/main/java/fr/nitorac/aurionweb/update/UpdateManager.java @@ -0,0 +1,180 @@ +package fr.nitorac.aurionweb.update; + +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.os.PowerManager; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.core.content.ContextCompat; +import androidx.core.content.FileProvider; + +import com.afollestad.materialdialogs.MaterialDialog; +import com.afollestad.materialdialogs.customview.DialogCustomViewExtKt; +import com.downloader.Error; +import com.downloader.OnDownloadListener; +import com.downloader.PRDownloader; +import com.github.lzyzsd.circleprogress.CircleProgress; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; + +import java.io.File; +import java.lang.ref.WeakReference; + +import fr.nitorac.aurionweb.BuildConfig; +import fr.nitorac.aurionweb.R; +import fr.nitorac.aurionweb.Utils; + +import static android.content.Context.POWER_SERVICE; + +public class UpdateManager { + public static String CHECK_URL = "https://ranini.iiens.net/aurionweb-check/update.php?version="; + + public static boolean updateAvailable = false; + public static int downloadId = -1; + private static UpdateManager instance; + + public UpdateManager(){ + + } + + public static void handleOnPause(){ + PRDownloader.pause(downloadId); + } + + public static void handleOnResume(){ + PRDownloader.resume(downloadId); + } + + public void checkUpdates(Context c){ + AsyncUpdateCheckerTask task = new AsyncUpdateCheckerTask(c); + task.execute(); + } + + public void startDownload(final WeakReference<Context> weakContext, String url){ + if(weakContext == null){ + return; + } + String tag = "UpdateDownload"; + Context c = weakContext.get(); + final MaterialDialog dialog = new MaterialDialog(c, MaterialDialog.getDEFAULT_BEHAVIOR()) + .title(null, "Téléchargement") + .icon(null, ContextCompat.getDrawable(c, R.drawable.ic_download)) + .cancelable(false); + DialogCustomViewExtKt.customView(dialog, R.layout.dialog_download, null, false, false, true, true); + final WeakReference<CircleProgress> circleProgress = new WeakReference<>(dialog.findViewById(R.id.circle_progress)); + final WeakReference<TextView> textProgress = new WeakReference<>(dialog.findViewById(R.id.progress_text)); + + PowerManager powerManager = (PowerManager) weakContext.get().getSystemService(POWER_SERVICE); + PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, + "AurionWeb::DownloadWakelock"); + + downloadId = PRDownloader.download(url, c.getCacheDir().getAbsolutePath(), "update.apk") + .setTag(tag) + .build() + .setOnStartOrResumeListener(() -> { + if(circleProgress != null){ + circleProgress.get().setProgress(0); + circleProgress.get().setMax(100); + } + + if(textProgress != null){ + textProgress.get().setText("Chargement ..."); + } + + if(!dialog.isShowing()){ + dialog.show(); + } + + if(!wakeLock.isHeld()){ + wakeLock.acquire(10*60*1000L /*30 minutes*/); + } + }) + .setOnPauseListener(() -> { + + }) + .setOnCancelListener(() -> { + if(weakContext != null){ + Toast.makeText(weakContext.get(), "Téléchargement annulé", Toast.LENGTH_LONG).show(); + } + wakeLock.release(); + }) + .setOnProgressListener(progress -> { + int frac = (int)((double)progress.currentBytes * 100.0 / (double)progress.totalBytes); + if(circleProgress != null){ + circleProgress.get().setProgress(frac); + } + if(textProgress != null){ + textProgress.get().setText(Utils.bytesToString(progress.currentBytes) + " / " + Utils.bytesToString(progress.totalBytes)); + } + }) + .start(new OnDownloadListener() { + @Override + public void onDownloadComplete() { + if(weakContext != null){ + Context context = weakContext.get(); + File file = new File(weakContext.get().getCacheDir().getAbsolutePath(), "update.apk"); + Uri apkURI = FileProvider.getUriForFile( + context, + context.getApplicationContext() + .getPackageName() + ".provider", file); + + Intent intent = new Intent(Intent.ACTION_VIEW, apkURI); + intent.setDataAndType(apkURI, "application/vnd.android.package-archive"); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + intent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true); + dialog.dismiss(); + context.getApplicationContext().startActivity(intent); + } + wakeLock.release(); + } + + @Override + public void onError(Error error) { + if(weakContext != null){ + error.getConnectionException().printStackTrace(); + Toast.makeText(weakContext.get(), "Erreur : " + error.getConnectionException().getMessage(), Toast.LENGTH_LONG).show(); + } + wakeLock.release(); + } + }); + } + + public void spawnUpdateDialog(WeakReference<Context> weakContext, JsonObject remote){ + if(weakContext == null){ + return; + } + Context c = weakContext.get(); + StringBuilder changelogs = new StringBuilder(); + + for(JsonElement el : remote.get("changelogs").getAsJsonArray()){ + JsonObject obj = el.getAsJsonObject(); + changelogs.append(obj.get("version").getAsString()).append(" :\n"); + for(JsonElement change : obj.get("msg").getAsJsonArray()){ + changelogs.append(" - ").append(change.getAsString()).append("\n"); + } + changelogs.append("\n"); + } + + MaterialDialog dialog = new MaterialDialog(c, MaterialDialog.getDEFAULT_BEHAVIOR()) + .title(R.string.dialog_update_title, null) + .icon(null, ContextCompat.getDrawable(c, R.drawable.ic_download)) + .message(null, String.format(c.getResources().getString(R.string.dialog_update_msg), BuildConfig.VERSION_NAME, remote.get("version").getAsString(), changelogs), null) + .cancelable(true) + .positiveButton(null, "METTRE A JOUR", materialDialog -> { + startDownload(weakContext, remote.get("url").getAsString()); + return null; + }) + .negativeButton(null, "ANNULER", materialDialog -> { + materialDialog.dismiss(); + return null; + }); + dialog.show(); + } + + public static UpdateManager getInstance(){ + return instance != null ? instance : (instance = new UpdateManager()); + } +} diff --git a/app/src/main/res/drawable-anydpi/ic_calendar.xml b/app/src/main/res/drawable-anydpi/ic_calendar.xml new file mode 100644 index 0000000..4d95670 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_calendar.xml @@ -0,0 +1,11 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24" + android:tint="#FFFFFF" + android:alpha="0.8"> + <path + android:fillColor="@android:color/white" + android:pathData="M17,12h-5v5h5v-5zM16,1v2L8,3L8,1L6,1v2L5,3c-1.11,0 -1.99,0.9 -1.99,2L3,19c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2L21,5c0,-1.1 -0.9,-2 -2,-2h-1L18,1h-2zM19,19L5,19L5,8h14v11z"/> +</vector> diff --git a/app/src/main/res/drawable-anydpi/ic_download.xml b/app/src/main/res/drawable-anydpi/ic_download.xml new file mode 100644 index 0000000..290ec39 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_download.xml @@ -0,0 +1,16 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24" + android:tint="#FFFFFF" + android:alpha="0.8"> + <group android:scaleX="0.90909094" + android:scaleY="0.90909094" + android:translateX="1.0909091" + android:translateY="1.0909091"> + <path + android:fillColor="@android:color/white" + android:pathData="M19.35,10.04C18.67,6.59 15.64,4 12,4 9.11,4 6.6,5.64 5.35,8.04 2.34,8.36 0,10.91 0,14c0,3.31 2.69,6 6,6h13c2.76,0 5,-2.24 5,-5 0,-2.64 -2.05,-4.78 -4.65,-4.96zM17,13l-5,5 -5,-5h3V9h4v4h3z"/> + </group> +</vector> diff --git a/app/src/main/res/drawable-anydpi/ic_login.xml b/app/src/main/res/drawable-anydpi/ic_login.xml new file mode 100644 index 0000000..1bc2080 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_login.xml @@ -0,0 +1,11 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24" + android:tint="#FFFFFF" + android:alpha="0.8"> + <path + android:fillColor="@android:color/white" + android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,5c1.66,0 3,1.34 3,3s-1.34,3 -3,3 -3,-1.34 -3,-3 1.34,-3 3,-3zM12,19.2c-2.5,0 -4.71,-1.28 -6,-3.22 0.03,-1.99 4,-3.08 6,-3.08 1.99,0 5.97,1.09 6,3.08 -1.29,1.94 -3.5,3.22 -6,3.22z"/> +</vector> diff --git a/app/src/main/res/drawable-hdpi/ic_calendar.png b/app/src/main/res/drawable-hdpi/ic_calendar.png new file mode 100644 index 0000000000000000000000000000000000000000..45900b5204d22184d3621713898f19a24b0edc88 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBdOcknLn>~)y?&9mL4k)QVB1Ru zod+hd&esyu%be;xIt)ER^)l9-tld_r=(w^te$AZC(-f+sor5_ymFHcsI}m<+?y41r z>3frowj5p{7+Gz|bYP0d`?U^@QxuvmD9C=1R_ah_I<w&3YhM9JmcN`=s$NvrNdzva xNao+|wWVp=%4-S_7D>!ob1C0lrrUIdnOD|A-TG(wCP0TVc)I$ztaD0e0s!hYOzHpt literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_download.png b/app/src/main/res/drawable-hdpi/ic_download.png new file mode 100644 index 0000000000000000000000000000000000000000..2c614590ecfaf46600b184246b291a3c1d32692d GIT binary patch literal 317 zcmV-D0mA-?P)<h;3K|Lk000e1NJLTq001Na001Ni1^@s6;Q*MJ00035Nkl<Zc-rlk zZ4HDl42Cf<0~kQS1RMgc29Uu7fPoW$08Ri1xDzl>93)*r2w&^E<$m-{-allNr(3&? zEE9=DqI;UA=`p*W-OV1*9X``3K}!6%z3>nn470bMu4BP81Q_Rr8wLVkoPh%*$Kw4k z04*^T6{Nt9vCOVwFOS}NU!RQcePJrkjD3MDcIxwT`LJGW0-$wG!5L7S7|7Y|!6;&p zasVwZsX<yC>#PovTaURj^Fv5h5UFGHkZFbpySv_QgltCv@u<<;AR`A<z`0j&1p<Z` z<Iz;VsZfD80yqLv0Z>%GuDU}JcWsJ|?_J2?HDqK0_+mVh^hZD>68*D&dtrRD0`af* P00000NkvXXu0mjfRjPmq literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_login.png b/app/src/main/res/drawable-hdpi/ic_login.png new file mode 100644 index 0000000000000000000000000000000000000000..abdfc916bac5477883bbd6539fe007edd16972c3 GIT binary patch literal 414 zcmV;P0b%}$P)<h;3K|Lk000e1NJLTq001Na001Ni1^@s6;Q*MJ0004HNkl<Zc-rk( z3k`!X5XArnFi-&)zyJa^0ViMxSZyEx1b~250G?Qz+>)g!{oQq+Y)xK5puIlse^vEg zzp(aw7aA9hQDf5B5EH&L-$ZE=wFYS1o(P0s_Cg6VoyL+t#D+QBaghN65gR}yBO@-E zai7HJ(Ee*F%_x@{(7cLOQz$g_r(LP@u4oE5@Ejp0WWI&di3cYCgBU{Ug@kS)A#G&% zP7Ee{K=_0V2|0!8)M0I79ZD$+M`52*UPcZzZ&pFQBBq@4K0@0&@KuCTOtxZZo4nN{ z0N<?%a%PHCE4;Lc2>S;2DvDG4!ruIOo!QvQ+^`o%WElD?nVc9srK4dW)VN$Ax451e z2%U3_Ykd$UJ%LQ`ic*dS4Km08sX>bnWKu&LalZAW5#WxD$7o|npYZY)pCQn3N~$w{ z&KP9*)Jh<-vJHw3ZK(tzs>mpPkkJQp+SwW!NBkzL|N4b>2e|)b3;ehx8~^|S07*qo IM6N<$f&_i4N&o-= literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_calendar.png b/app/src/main/res/drawable-mdpi/ic_calendar.png new file mode 100644 index 0000000000000000000000000000000000000000..8a4b66a35466df4297e88b716137b9941d08cab3 GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj5uPrNAr-fh6C^Y~{Qv*oSiwiP z^vgzu6&EBr%nzDOY;>&Z{TR7nCez`E(*(ZgEv;aQaM--WHj6P-=YaUi#bP|d+-$W* swhpbEGK?2;wNJ82G``1`E|S2^U~cm_VODjXDbNlEPgg&ebxsLQ0OScUTL1t6 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_download.png b/app/src/main/res/drawable-mdpi/ic_download.png new file mode 100644 index 0000000000000000000000000000000000000000..94506fcc503df3ab86404a8ec0ca1fb43d58cb63 GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj2R&UJLn>}1CrGe5bN%`M|Gq?5 z<;vU_J_>ftZH`HNQ>5m#9Ze{Saas2;&_#mpaNrV&HGHK%>x6U|5;dLJJ~I{a+l4E+ z7KxnPcR+CBi5n8Sk1jrSw9|76YtPxCFX-rSg6Yma#Y110L^UjuTaswZ=c<suTG&Hi zhmf=WrbDR}F-=#6nA(~@sHGg`W!cl6#3|U;Tx_)~`<y^B=ft+=0x3()O#6v#`iG+w xnz;0B1pRd8d2ZO!%GPWs8IiRmNV<lB;r*kj1{}={VL;C?c)I$ztaD0e0steyStbAg literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_login.png b/app/src/main/res/drawable-mdpi/ic_login.png new file mode 100644 index 0000000000000000000000000000000000000000..2ec22cf526cec302eace27ed42996384024fd162 GIT binary patch literal 288 zcmV+*0pI?KP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv0002zNkl<Zc-q}n z!41P849o&uz{`{cIzSkJ0m=YnjSLV52n%!ocA}1iswlFFT_RO2(tRRxNAUR=hQD8> zlpErKm=U>RuHUXb#0If!NI9%EMoaDm#CzO($e##{fC|Tmc*(U;8!b_5nOf5lNX(`S zQ43s8T5icF2+)6lA46k<BkEnFK2QSjz$K%g$?rL#1oD~qiU4;-fofW{G}pH%Y4R!v zg24pha6w{IP(%xehHW=!Rw1yR>ZFN^QAwT;la&a&iOT(Ym`N3Og1BB9Z-oEk!ASzo mC-sBF_&x3{9J+{qX1xGPZRDgmP#@s{0000<MNUMnLSTYte03QB literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_calendar.png b/app/src/main/res/drawable-xhdpi/ic_calendar.png new file mode 100644 index 0000000000000000000000000000000000000000..506e47b544918f67d3930ba134e610ce1f4bb176 GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUt>7Fi*Ar-gY-h9Z}pdiqe_<YCA z;+e$^vJ2*(IiT=o<wW&;@^{Yfs@~vn#&T0c(Yfcl*WBf2Xy|XB8sx5-EB!Yhs`~Va z4~2&w<Q~;?*?B@*;-BVy<^X2~*}9!+;y~le*mbtQW(6`B7}OZ{%4>mHKq8uxVK(!m zg~?MlJpH&!BC^%w*Ysy`od%CLuH1W6(5d5Qj5*J%$)0R_9v}^#u6{1-oD!M<Gv-XF literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_download.png b/app/src/main/res/drawable-xhdpi/ic_download.png new file mode 100644 index 0000000000000000000000000000000000000000..3caed0d3d3ecbd57e4d3e1b255da73ea3fa8c724 GIT binary patch literal 406 zcmV;H0crk;P)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00049Nkl<Zc-rk) zZ4HAk6vO}qFo1v>Kmau`0SEvAAYc=K0487)00QQT(S&A8!$*0&LVvtV?$5F|cU}A5 zyG0R$!C){Lj335vj3<hTg+cXM9J26yVmtA(L-n0JB;o30Ulzhmsx{(j@g+gH$?_`k zH9)*(eYW@tC|<KVOMK=*yr%FiJ|R9>>xb>D%BcI^dlddpi9GE)K|r(6#55a=^&LWd z>Tu#>=hw8^Bfd&J%0NAL_JlIWbiOLd0R!gfA#4p4K1(6dfM#KH`hCC#wwoQWLHRVG zn5}Kz5bvkSbf-Wpt#NO5gpD9W7;z}fPzIb#I83w^(g4YX<2c@;-T=u2AWJM7kY@xF zP!MX@`heGT1x#@jvXokx07p=<H9`+)6JYVry*nzAVI3^qE_Q-VAbC3)-iLt1OG>AV z=MnpTq43AyV6!oZ$&I{=W)}3H!3+k2!C)Zp1w=arvh(Nr1ONa407*qoM6N<$f@+Vf Aq5uE@ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_login.png b/app/src/main/res/drawable-xhdpi/ic_login.png new file mode 100644 index 0000000000000000000000000000000000000000..469fcc0c804cf621497dce16d32b803a64d48fef GIT binary patch literal 530 zcmV+t0`2{YP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm0005mNkl<Zc-rk* z?Qw%J3}pcp@B$2w1sEV1AQ>P7)B}V8U;qYy0m1-y0Cu8wPuy{Yf+ZxwwfOG+Dp8+g zeLUMybgpxqi)HnFpIAICa*N8Mo1lWfxo?uAkX9C77VjCtYk0$N)gHuSix+|PZ*aEa zP~=mKmXZ7bXET*1{}Lenu^Un;lLsI_AZJY}0(m{|G|-_m)`>mR#w@i+aKvB&!BMc7 zs3o5B0%J4XlJ~7dwCuMTvOC2T2Qu#HZ`g&5GGS4jgAgEWXHppB`hX5-jB$##kxZc< z?IdYjvWRg(0=e5s{eukwa(MVSP;3-rYlCcy5G;HgsF>vOR7!9N!Ahb#1jXsVe{#U7 z&JtikI#5$Pgllsamj&Aw_=ei)YVJ1LSllRT5!CJtY_PV`C)-f*cjm!4$P!N7!>o@I zUt>*($Rl^6;gZuz&;i9Ir_}*>Kw*t#2dV)b5!;-hs7@mJc3~jKRKsi6Dt89*caduq z#ObM|6gJdZDSEMmoX(ESb!odHEw3KL@mDDx^?;EW6_CsUCGwzDh`bkUIE;6}?n6Bb z+XxUh;tw2?l;YeC9qfr|rjux-Bpyp~y~`ut!Y~>RD|3gUdUWVH#xv`=&h-b@H~N;s U(#1L|H~;_u07*qoM6N<$f&(1r`2YX_ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_calendar.png b/app/src/main/res/drawable-xxhdpi/ic_calendar.png new file mode 100644 index 0000000000000000000000000000000000000000..57e81fd2d33ec8422aceaf72024b4d5fbc3beba1 GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!XFXjULn>~)y?v7Rkb!_hp!tJy zkC-$S*0s&^v0xD5GVecd`1hqb$+oG1+k#ZqUXXZPWfr-en?pdsp&^XL%50zP=K81` z{O4=WMyvS5iag_4<;IYDpi=4VvCPf_xyxxxu|iC5ABJ~bWe4eCU}R$95Lob@p>iPu z*a(P#f`es)Ql1?nSQf4f$gtrDsaJ4#*;teKjp-F<<1ZhD{my@H#$8eND>3B^;{U1o n`E9}L?n7IYJSVA~eZlrMdHs_+ODgvRJ;vba>gTe~DWM4fS!P*g literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_download.png b/app/src/main/res/drawable-xxhdpi/ic_download.png new file mode 100644 index 0000000000000000000000000000000000000000..bd7b6b75f831af271a8b027b398a3f8870a53cb3 GIT binary patch literal 586 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@Zgyv2U=s9naSW-r^>)_liA@F~t+@x- zavGR45_BE7E&wS_5Tyg+H88#C^i6Bp{Q3=3;~n=8b7p=%?f5wTOzo3AGXWMyIGTK= z^zJna({sK0$F_^t@49}eyt$~rA<F-DI$w5MvB|phhRUyp9q+AU^?9`~MEXYjG0!&z zMN9_k&n34Or!`#uEh9aLTY1h71;h71VkT=^Q$baF)WbJStsj?e%f6AxQWDIt{JXDr z*q?_^JJl@q25TCu{NQMFHN4YUE#=3$e;NV*i%mZpm(97ja@wf|@suaaXE>X)FVHrf zGr3JFE75oQq(4{hNN?9>_+o5t#r~4PK(+QxL)}x)?y{+sJFZ+=rjRpR=J~sM-+UQ< zitq5*?Jlgaf0=Y(b%?dX>%UW4ReF{-m^tvj+mpU#$_bmvp<O{o)=wAtF@2R~p6s1< z>m$o1`kv*S74E50aEv=<(LO#-6(x(qta^zZ{9K&^=L$Y3^ocnt2p*Pv#~={?zFX1o zfaJS$<EM_B6$}q<)H@~?l-YcQBi*KPD~sg&^+Kry$GrK%&zegqa307sxoX!uf#pHO zbi3(Iy&@`#7IoKM&P@F)JV{|rjo-bAoDP#3is##YUXik-^-DsWjlipIwVRzRzUy7t zvc`Hxx9CAl54X<Pc_BurcT^V6DPEyiXc_#_aHV46?qh$m+RiI-G$}xl)CF?^&B-$S TUP_;UX@tSk)z4*}Q$iB}-g5Zd literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_login.png b/app/src/main/res/drawable-xxhdpi/ic_login.png new file mode 100644 index 0000000000000000000000000000000000000000..635946f3249219620708901c70508fb2a2d660de GIT binary patch literal 768 zcmV+b1ONPqP)<h;3K|Lk000e1NJLTq002k;002k`1^@s6RqeA!0008VNkl<Zc-rlp z;f?Yz42D^t3v_`FkOdgv7@!@X16&7a27m!Fz-0g!pbWrH{eom9gpT`2`o?i9TYCQ- zr(&KuvE!uO?bOuN)YR0}B5a;#6VwNdK`!VVbbHa6J{#$O&6a^wK`s5@+d?_IR<)H# zIRc=(({YuNMPOV;Fuz5WS<6s5GJ<*4D0b)t$M!)}K{yZHeb`Hb^DO|(tG=ZSsULxG z9{MRZ<W>Nu93(KDdj>iLHBZ-X=x=V7kU((!C#jiA29JQm1!n-ksUjm50cqe!<*aZr zK-%Y=cMx@sS>S^K)k#$jK!^(20sKHr+&0JB3Xx3?0ACIuUknluD%~~!Um8?-AuW1t zz#DcG6Gh=7rws!-Au<=T?3Xme9;%i&(}A6lG)X_yNtm3arFo1`nO4_ELc&-)H|BCC zb!DBoy<$=T^-_8?485m51(0QEWPRH1$laK;5+=jH8fIU=G|av@eMkXxUO_t*rL&X_ zCRPea0VyDHfG&&<ddgVO@{Heqk(A~yv@^2*WOe_vM`knLG*`M%^wb%s0gKg|uH{P? zian?Z%yw=Ecn+!OUab0=@jw$`_tm6+aZ<RJI8i|hTFcrBP6%JSD{Kjn7B$RbTCQHu zfiBP0a;-S~%|Jj0mZp8=wofexP|dRK6Pe9AL4dlMYvV9-vTg*xX}ES+Qle-o35noL ztkIJ&7fprgpgIDM&Edd3qg^FNQe@;@v)#aiBX}(XoL0mUyeEf-gavDzDQaRX{edf_ zQx=9Ju-!2hJ1`Y7ANd6vhHVTig3>P7K=gB=)Amc7Ruc`A{*4^qWUZeIKd<2hH{+d% z=f^;&@6j4|l8j1#s{k-paSznJ47pQ5ICfsc)6n`*Zyczc5p~+c3kPWEb-))3benjw yz<(mEr#ZvD*)hG)XLj?irchH;Q&UsRV*da(!E{Ec<hn)x0000<MNUMnLSTX|w^9KB literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_dashboard_black_24dp.xml b/app/src/main/res/drawable/ic_dashboard_black_24dp.xml new file mode 100644 index 0000000..46fc8de --- /dev/null +++ b/app/src/main/res/drawable/ic_dashboard_black_24dp.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:fillColor="#FF000000" + android:pathData="M3,13h8L11,3L3,3v10zM3,21h8v-6L3,15v6zM13,21h8L21,11h-8v10zM13,3v6h8L21,3h-8z" /> +</vector> diff --git a/app/src/main/res/drawable/ic_home_black_24dp.xml b/app/src/main/res/drawable/ic_home_black_24dp.xml new file mode 100644 index 0000000..f8bb0b5 --- /dev/null +++ b/app/src/main/res/drawable/ic_home_black_24dp.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:fillColor="#FF000000" + android:pathData="M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z" /> +</vector> diff --git a/app/src/main/res/drawable/ic_notifications_black_24dp.xml b/app/src/main/res/drawable/ic_notifications_black_24dp.xml new file mode 100644 index 0000000..78b75c3 --- /dev/null +++ b/app/src/main/res/drawable/ic_notifications_black_24dp.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:fillColor="#FF000000" + android:pathData="M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z" /> +</vector> diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..38c0aa8 --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:id="@+id/container" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:paddingTop="?attr/actionBarSize"> + + <com.google.android.material.bottomnavigation.BottomNavigationView + android:id="@+id/nav_view" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginStart="0dp" + android:layout_marginEnd="0dp" + android:background="?android:attr/windowBackground" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + app:menu="@menu/bottom_nav_menu" /> + + <fragment + android:id="@+id/nav_host_fragment" + android:name="androidx.navigation.fragment.NavHostFragment" + android:layout_width="match_parent" + android:layout_height="match_parent" + app:defaultNavHost="true" + app:layout_constraintBottom_toTopOf="@id/nav_view" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:navGraph="@navigation/mobile_navigation" /> + +</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_download.xml b/app/src/main/res/layout/dialog_download.xml new file mode 100644 index 0000000..0feed7d --- /dev/null +++ b/app/src/main/res/layout/dialog_download.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + xmlns:custom="http://schemas.android.com/apk/res-auto"> + + <com.github.lzyzsd.circleprogress.CircleProgress + android:id="@+id/circle_progress" + android:layout_width="100dp" + android:layout_height="100dp" + custom:circle_progress="0" + custom:layout_constraintBottom_toTopOf="@id/progress_text" + custom:layout_constraintEnd_toEndOf="parent" + custom:layout_constraintStart_toStartOf="parent" + custom:layout_constraintTop_toTopOf="parent" /> + <TextView + android:id="@+id/progress_text" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="10dp" + android:layout_marginBottom="30dp" + custom:layout_constraintEnd_toEndOf="parent" + custom:layout_constraintStart_toStartOf="parent" + custom:layout_constraintTop_toBottomOf="@id/circle_progress" + custom:layout_constraintBottom_toBottomOf="parent" /> +</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_loading.xml b/app/src/main/res/layout/dialog_loading.xml new file mode 100644 index 0000000..305c462 --- /dev/null +++ b/app/src/main/res/layout/dialog_loading.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <ProgressBar + android:id="@+id/progressBar" + style="?android:attr/progressBarStyle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> +</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_login.xml b/app/src/main/res/layout/dialog_login.xml new file mode 100644 index 0000000..1d135e4 --- /dev/null +++ b/app/src/main/res/layout/dialog_login.xml @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <TextView + android:id="@+id/loginLbl" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/login_login" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + <com.google.android.material.textfield.TextInputEditText + android:id="@+id/loginInput" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:ems="60" + android:inputType="text" + android:hint="prenom.nom" + android:layout_marginTop="5dp" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/loginLbl" /> + + <TextView + android:id="@+id/passwordLbl" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/login_password" + android:layout_marginTop="30dp" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/loginInput" /> + + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/passwordLayout" + android:layout_width="0dp" + android:layout_height="wrap_content" + app:passwordToggleEnabled="true" + android:layout_marginTop="5dp" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/passwordLbl"> + + <com.google.android.material.textfield.TextInputEditText + android:id="@+id/passwordInput" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:inputType="textWebPassword" + android:hint="••••••••••••"/> + + </com.google.android.material.textfield.TextInputLayout> + + <CheckBox + android:id="@+id/rememberMe" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="20dp" + android:layout_marginBottom="50dp" + android:text="Enregistrer les informations" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/passwordLayout" /> + + +</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_calendar.xml b/app/src/main/res/layout/fragment_calendar.xml new file mode 100644 index 0000000..166ab0e --- /dev/null +++ b/app/src/main/res/layout/fragment_calendar.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:context=".ui.dashboard.DashboardFragment"> + + <TextView + android:id="@+id/text_dashboard" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginStart="8dp" + android:layout_marginTop="8dp" + android:layout_marginEnd="8dp" + android:textAlignment="center" + android:textSize="20sp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> +</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml new file mode 100644 index 0000000..f3d9b08 --- /dev/null +++ b/app/src/main/res/layout/fragment_home.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:context=".ui.home.HomeFragment"> + + <TextView + android:id="@+id/text_home" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginStart="8dp" + android:layout_marginTop="8dp" + android:layout_marginEnd="8dp" + android:textAlignment="center" + android:textSize="20sp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> +</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_notifications.xml b/app/src/main/res/layout/fragment_notifications.xml new file mode 100644 index 0000000..d417935 --- /dev/null +++ b/app/src/main/res/layout/fragment_notifications.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:context=".ui.notifications.NotificationsFragment"> + + <TextView + android:id="@+id/text_notifications" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginStart="8dp" + android:layout_marginTop="8dp" + android:layout_marginEnd="8dp" + android:textAlignment="center" + android:textSize="20sp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> +</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/app/src/main/res/menu/appbar_menu.xml b/app/src/main/res/menu/appbar_menu.xml new file mode 100644 index 0000000..a219eba --- /dev/null +++ b/app/src/main/res/menu/appbar_menu.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<menu xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:android="http://schemas.android.com/apk/res/android"> + <item + android:id="@+id/connect_menuitem" + android:icon="@drawable/ic_login" + android:orderInCategory="0" + android:title="Connexion" + app:showAsAction="ifRoom|withText" /> +</menu> \ No newline at end of file diff --git a/app/src/main/res/menu/bottom_nav_menu.xml b/app/src/main/res/menu/bottom_nav_menu.xml new file mode 100644 index 0000000..5485a38 --- /dev/null +++ b/app/src/main/res/menu/bottom_nav_menu.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<menu xmlns:android="http://schemas.android.com/apk/res/android"> + + <item + android:id="@+id/navigation_home" + android:icon="@drawable/ic_home_black_24dp" + android:title="@string/title_home" /> + + <item + android:id="@+id/navigation_dashboard" + android:icon="@drawable/ic_calendar" + android:title="@string/title_calendar" /> + + <item + android:id="@+id/navigation_notifications" + android:icon="@drawable/ic_notifications_black_24dp" + android:title="@string/title_notifications" /> + +</menu> \ No newline at end of file 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..036d09b --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> + <background android:drawable="@color/ic_launcher_background"/> + <foreground android:drawable="@mipmap/ic_launcher_foreground"/> +</adaptive-icon> \ 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..036d09b --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> + <background android:drawable="@color/ic_launcher_background"/> + <foreground android:drawable="@mipmap/ic_launcher_foreground"/> +</adaptive-icon> \ 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..575265141fe1f63ffc50a45312df7965588609f2 GIT binary patch literal 4521 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 Hu0mjfiBGT7 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..28b0ed042b42ff8b5a196c2f7a1208e9ab84fcd9 GIT binary patch literal 3418 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 ZpECLc>De=bLLdG|hSoDiRw3?0{|^plR|)_C 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..575265141fe1f63ffc50a45312df7965588609f2 GIT binary patch literal 4521 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 Hu0mjfiBGT7 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..a8a8cd4b40affd65af7fc90bea46fb93cd064341 GIT binary patch literal 2796 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..6b990032028b98b52ab3bb357ac747fc4e07e196 GIT binary patch literal 2172 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..a8a8cd4b40affd65af7fc90bea46fb93cd064341 GIT binary patch literal 2796 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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..6a12762b797a846a88371c5d8766499736b977c9 GIT binary patch literal 6388 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 CF;hkW literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..46253eb6d25182180367e4433fb670029bb0fb58 GIT binary patch literal 4801 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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..6a12762b797a846a88371c5d8766499736b977c9 GIT binary patch literal 6388 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 CF;hkW literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..1919c7a7db0aedcd5d13eeb315daed5bb1c98b64 GIT binary patch literal 10022 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á(4XRpGX=dQuYx30r`*KWe+w}Qiw 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..d28f2d811dcac0328512f9c2ea17a6e35339cc26 GIT binary patch literal 7770 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 DY_ZK| 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..1919c7a7db0aedcd5d13eeb315daed5bb1c98b64 GIT binary patch literal 10022 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á(4XRpGX=dQuYx30r`*KWe+w}Qiw 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 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..b07abd7593365d8ebec48b9116e2bcbe98020c35 GIT binary patch literal 14301 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 LNkvXXu0mjf&W|Nc literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..f72fa44cd45a3ccf7cf2459fc5a51e37d1e1b1bf GIT binary patch literal 11165 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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..b07abd7593365d8ebec48b9116e2bcbe98020c35 GIT binary patch literal 14301 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 LNkvXXu0mjf&W|Nc literal 0 HcmV?d00001 diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml new file mode 100644 index 0000000..aadbe80 --- /dev/null +++ b/app/src/main/res/navigation/mobile_navigation.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="utf-8"?> +<navigation xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/mobile_navigation" + app:startDestination="@+id/navigation_home"> + + <fragment + android:id="@+id/navigation_home" + android:name="fr.nitorac.aurionweb.ui.home.HomeFragment" + android:label="@string/title_home" + tools:layout="@layout/fragment_home" /> + + <fragment + android:id="@+id/navigation_dashboard" + android:name="fr.nitorac.aurionweb.ui.dashboard.DashboardFragment" + android:label="@string/title_calendar" + tools:layout="@layout/fragment_calendar" /> + + <fragment + android:id="@+id/navigation_notifications" + android:name="fr.nitorac.aurionweb.ui.notifications.NotificationsFragment" + android:label="@string/title_notifications" + tools:layout="@layout/fragment_notifications" /> +</navigation> \ No newline at end of file diff --git a/app/src/main/res/raw/aurionweb_ensiie_fr.pem b/app/src/main/res/raw/aurionweb_ensiie_fr.pem new file mode 100644 index 0000000..4b1c5b4 --- /dev/null +++ b/app/src/main/res/raw/aurionweb_ensiie_fr.pem @@ -0,0 +1,42 @@ +-----BEGIN CERTIFICATE----- +MIIHTzCCBjegAwIBAgIQCQtdJVL7YaPr+9+02mt9CzANBgkqhkiG9w0BAQsFADBk +MQswCQYDVQQGEwJOTDEWMBQGA1UECBMNTm9vcmQtSG9sbGFuZDESMBAGA1UEBxMJ +QW1zdGVyZGFtMQ8wDQYDVQQKEwZURVJFTkExGDAWBgNVBAMTD1RFUkVOQSBTU0wg +Q0EgMzAeFw0xODA3MDQwMDAwMDBaFw0yMDEwMDYwMDAwMDBaMIGYMQswCQYDVQQG +EwJGUjETMBEGA1UEBxMKRVZSWSBDRURFWDFIMEYGA1UECgw/RWNvbGUgTmF0aW9u +YWxlIFN1cMOpcmlldXJlIGQnaW5mby4gcG91ciBsJ0luZC4gZXQgbCdFbnRyZXBy +aXNlMQwwCgYDVQQLEwNDUkkxHDAaBgNVBAMTE2F1cmlvbndlYi5lbnNpaWUuZnIw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCnNDksvsGjgcM3ThkXVAx5 +xxJXoDUYbnuqdqyi0oA1uSjHVcC+4UgA2lw+ZY/FeCG7weAPejGZqqZhY6vEq54M +hysnNZH3VDgFUeixq1D8gEjOxkdOwXm88utvplan3PgcOIckt2BjsEbfxseX1v4u +4VDH5/99MeTBeAjxrknZPjWdILiPMx/9BgKKOHbfXhrKZoeZ6bfsEoVzKWjlAqPP +rxBYbAeX4kFZE0VWLrlqs2VNzKfsmvfm+GAKKf8h0iRlUM1lG8bBsmfxb0pjg9Tm +mVJgr2+8R89V1j59hFiBHjfyqYoSJNirUlhXuGFKeGOBzJm4jDReWHPe5BBthnk3 +AgMBAAGjggPGMIIDwjAfBgNVHSMEGDAWgBRn/YggFCeYxwnSJRm76VERY3VQYjAd +BgNVHQ4EFgQU9RX+8yvm3V3rbDKQz3s6FJegGqAwHgYDVR0RBBcwFYITYXVyaW9u +d2ViLmVuc2lpZS5mcjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUH +AwEGCCsGAQUFBwMCMGsGA1UdHwRkMGIwL6AtoCuGKWh0dHA6Ly9jcmwzLmRpZ2lj +ZXJ0LmNvbS9URVJFTkFTU0xDQTMuY3JsMC+gLaArhilodHRwOi8vY3JsNC5kaWdp +Y2VydC5jb20vVEVSRU5BU1NMQ0EzLmNybDBMBgNVHSAERTBDMDcGCWCGSAGG/WwB +ATAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BTMAgG +BmeBDAECAjBuBggrBgEFBQcBAQRiMGAwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3Nw +LmRpZ2ljZXJ0LmNvbTA4BggrBgEFBQcwAoYsaHR0cDovL2NhY2VydHMuZGlnaWNl +cnQuY29tL1RFUkVOQVNTTENBMy5jcnQwDAYDVR0TAQH/BAIwADCCAfYGCisGAQQB +1nkCBAIEggHmBIIB4gHgAHYApLkJkLQYWBSHuxOizGdwCjw1mAT5G9+443fNDsgN +3BAAAAFkZD6SfgAABAMARzBFAiEAhqeRjwyl7IWrb46mS4n+I31HxLNhDDLn9jEi +VN3Cip0CIDqnppqzhC6e3RHYFTXrvkdQjrzAw/LRtgJ+M9J2idNPAHYAh3W/51l8 ++IxDmV+9827/Vo1HVjb/SrVgwbTq/16ggw8AAAFkZD6TUwAABAMARzBFAiEA/CFX +dd1HUPCDZjMz+oqicI6H7UCUKTO1Y9ojCJwUFzECIGOU4F7s2gyV7j8rm/xF3Vw/ +jeP1nDWDpO/bs+6JO6XtAHcA7ku9t3XOYLrhQmkfq+GeZqMPfl+wctiDAMR7iXqo +/csAAAFkZD6SwQAABAMASDBGAiEAuWbkrYVras5GeloBf4224WOv+ZRg+QV3xQGn +MmVTFtICIQCz73qOSo/HyT1Ctak7NWYwHlW/bRIu61Ol+U7LxZr01wB1ALvZ37wf +inG1k5Qjl6qSe0c4V5UKq1LoGpCWZDaOHtGFAAABZGQ+k3MAAAQDAEYwRAIgcZDt +pPgy3Jd100lSKUGqIPZ9okT8S2Q3umjmM+52DPICIBeX+iCxSIiIF3wQAo+B22Qo +GUzYVMEqpV5jN2iI4Y5VMA0GCSqGSIb3DQEBCwUAA4IBAQASfy7UQIOWiJhSSxJj +xwxhe1uyVn/+JNbaqNyDGGz0uL8hGZTt6SUGrjV+/RMnL0l8d5eApe73Chr5VcYn +3kcuY4B3EKzMEonuGuMOJmPzk65YWk015lHJc0t+GOMi0BN1Ven/DweDRlxIb18w +CM/Tvua27q0PBGPDjQ1m+QRZ9gaEU1XyqD7Cts4SFfjwxZL4EjAz/dQFsGfB4a4Z +l3l94e7vGZfMUOoORFkrV55Qm5zqodQyRv6A46M1v6+kfVMUPyppVCM2F54EPw6M +7r6RULICwobirLXdT4CajKB4bOIjm0e09zLzuij4TLAo34mOATG9DYV2HOFRsCem +NJBE +-----END CERTIFICATE----- \ No newline at end of file diff --git a/app/src/main/res/raw/cas_ensiie_fr.pem b/app/src/main/res/raw/cas_ensiie_fr.pem new file mode 100644 index 0000000..de4efbe --- /dev/null +++ b/app/src/main/res/raw/cas_ensiie_fr.pem @@ -0,0 +1,41 @@ +-----BEGIN CERTIFICATE----- +MIIHPTCCBiWgAwIBAgIQBWafOeFdJ+iHekwJBoSBCDANBgkqhkiG9w0BAQsFADBk +MQswCQYDVQQGEwJOTDEWMBQGA1UECBMNTm9vcmQtSG9sbGFuZDESMBAGA1UEBxMJ +QW1zdGVyZGFtMQ8wDQYDVQQKEwZURVJFTkExGDAWBgNVBAMTD1RFUkVOQSBTU0wg +Q0EgMzAeFw0yMDA0MDcwMDAwMDBaFw0yMjA3MTEwMDAwMDBaMIGNMQswCQYDVQQG +EwJGUjENMAsGA1UEBxMERVZSWTFIMEYGA1UECgw/RWNvbGUgTmF0aW9uYWxlIFN1 +cMOpcmlldXJlIGQnaW5mby4gcG91ciBsJ0luZC4gZXQgbCdFbnRyZXByaXNlMQ0w +CwYDVQQLEwRESVNJMRYwFAYDVQQDEw1jYXMuZW5zaWllLmZyMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEApH5oCBw+lp1LzM5gvsWMXB2rdTUOcyD1elfk +lOAUvl5tkQxHhnSOQo6Ywnf6vKP7GF5yqT6sCqDZxHxITXY1YgHlkageW90Rvlga +OkswpHT6l0wN0msQVFpUZAV94LY2LqgPzcDgdCqS9fW17S6jNlNezlCVCS4eYFos +og//D3LU4WWOlFIbeq0BiEyR2SsSvgrtm3IVA9At5EoXL5f8nxGJetCz9K0Okm/P +R/EK7zIEU/UsmLlUSn8mBbgd63/jBRvzvKYPZyLFhPgdLiEyLRADMLGfoKFU4IND +aj5WiN9CnjePzbrViON7rXAoFGa6WmsIjP3FPqg/9VHti2DrdwIDAQABo4IDvzCC +A7swHwYDVR0jBBgwFoAUZ/2IIBQnmMcJ0iUZu+lREWN1UGIwHQYDVR0OBBYEFLTb +kMQmJI6GUM30mxKHpH0GABEYMBgGA1UdEQQRMA+CDWNhcy5lbnNpaWUuZnIwDgYD +VR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBrBgNV +HR8EZDBiMC+gLaArhilodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vVEVSRU5BU1NM +Q0EzLmNybDAvoC2gK4YpaHR0cDovL2NybDQuZGlnaWNlcnQuY29tL1RFUkVOQVNT +TENBMy5jcmwwTAYDVR0gBEUwQzA3BglghkgBhv1sAQEwKjAoBggrBgEFBQcCARYc +aHR0cHM6Ly93d3cuZGlnaWNlcnQuY29tL0NQUzAIBgZngQwBAgIwbgYIKwYBBQUH +AQEEYjBgMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wOAYI +KwYBBQUHMAKGLGh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9URVJFTkFTU0xD +QTMuY3J0MAwGA1UdEwEB/wQCMAAwggH1BgorBgEEAdZ5AgQCBIIB5QSCAeEB3wB2 +AKS5CZC0GFgUh7sTosxncAo8NZgE+RvfuON3zQ7IDdwQAAABcVPmeiEAAAQDAEcw +RQIgGnTSe4WZ+XAc94FW3+X33bHh4545LfhedHfqve1b5ncCIQDX5U6yy0UPHH/v +sF63PRbAUQVYTwHtgjMTD+myHdxI4wB1ACJFRQdZVSRWlj+hL/H3bYbgIyZjrcBL +f13Gg1xu4g8CAAABcVPmek4AAAQDAEYwRAIgcwGGmxrOD1rnHTNR4RJBcZWuoG2U +h49ZVhsw+egrqm0CIDit+elupvyTGMggdjY8M5O4H3PX7eflWkX00B93Z67EAHcA +UaOw9f0BeZxWbbg3eI8MpHrMGyfL956IQpoN/tSLBeUAAAFxU+Z6kQAABAMASDBG +AiEA7MqBM8nCli74ADm2yZNkQNBG5maK7mz7Nt/cbSxkuGQCIQCIeCd4y+EUnoSD +7aksYyn0qOn7SY5n4AZypyjG7UDjMgB1AEHIyrHfIkZKEMahOglCh15OMYsbA+vr +S8do8JBilgb2AAABcVPmef8AAAQDAEYwRAIgSYstHo0iQh3A5/xtP7/pU/GvMuDK +FEYMiEk5AG8pJzACIDp/cFGRQoeVbbzdGR+dYzhkVMmSoOpuqCCwZZNlm3hIMA0G +CSqGSIb3DQEBCwUAA4IBAQAIGGzSixN4XaiJvG5MAW7Awo5FaXXf4jbKABuQ2x/a +6XpOy1eh9uqYYF6MHJqdLo63KtO+aKowS7OLQHtlDw/Zgtr1mnBt6xLA8BiFzy2+ +QFiA4d46iB1dkGecbnMNftXt99WQQFC72VO4hlmZDYUcjFcjRfqceDUojgYMtq4R +6npY8Sb0IPFWWPhWYYwIdboeRmEurKgz2nVDfFaEmQnJzKHfMclIXUSXGqgR7lV2 +FnSEJFJ3x1ef/gT4S/dIA72/mxUT8tovul4RS9pCXSOBe6VlJa4WcwkM7IrBwjsJ +j51+5I7zk8RjE+JOxXJFfM/bUGJ1vmSW8vdXiMTybVIB +-----END CERTIFICATE----- \ No newline at end of file diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml new file mode 100644 index 0000000..86ad9fe --- /dev/null +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <string name="app_name">AurionWeb</string> + <string name="title_home">Accueil</string> + <string name="dialog_update_title">Mise à jour</string> + <string name="dialog_update_msg">Une mise à jour est disponible !\n(%1$s -> %2$s)\n\nChangements :\n%3$s\n\nVoulez-vous mettre à jour ?</string> + <string name="login_login">Nom d\'utilisateur</string> + <string name="login_password">Mot de passe</string> + <string name="title_calendar">Emploi du temps</string> + <string name="loading">Chargement ...</string> +</resources> \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..fd454c4 --- /dev/null +++ b/app/src/main/res/values/colors.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <color name="colorPrimary">#42A5F5</color> + <color name="colorPrimaryDark">#3F51B5</color> + <color name="colorAccent">#F44336</color> +</resources> \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml new file mode 100644 index 0000000..e00c2dd --- /dev/null +++ b/app/src/main/res/values/dimens.xml @@ -0,0 +1,5 @@ +<resources> + <!-- Default screen margins, per the Android Design guidelines. --> + <dimen name="activity_horizontal_margin">16dp</dimen> + <dimen name="activity_vertical_margin">16dp</dimen> +</resources> \ No newline at end of file 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..35a7725 --- /dev/null +++ b/app/src/main/res/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <color name="ic_launcher_background">#3D2E27</color> +</resources> \ 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..6dd0345 --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,11 @@ +<resources> + <string name="app_name">AurionWeb</string> + <string name="title_home">Home</string> + <string name="title_calendar">Calendar</string> + <string name="title_notifications">Notifications</string> + <string name="dialog_update_title">Update</string> + <string name="dialog_update_msg">An update is available !\n(%1$s -> %2$s)\n\nChangelogs:\n%3$s\n\nDo you want to update ?</string> + <string name="login_login">Login</string> + <string name="login_password">Password</string> + <string name="loading">Loading...</string> +</resources> \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..f4cf47d --- /dev/null +++ b/app/src/main/res/values/styles.xml @@ -0,0 +1,11 @@ +<resources> + <!-- Base application theme. --> + <style name="AppTheme" parent="Theme.AppCompat.DayNight"> + <!-- Customize your theme here. --> + <item name="colorPrimary">@color/colorPrimary</item> + <item name="colorPrimaryDark">@color/colorPrimaryDark</item> + <item name="colorAccent">@color/colorAccent</item> + <item name="md_corner_radius">16dp</item> + </style> + +</resources> \ No newline at end of file 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..20c6b33 --- /dev/null +++ b/app/src/main/res/xml/provider_paths.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<paths> + <files-path name="internal_data" path="."/> + <cache-path name="cache_data" path="."/> +</paths> \ No newline at end of file diff --git a/app/src/test/java/fr/nitorac/aurionweb/ExampleUnitTest.java b/app/src/test/java/fr/nitorac/aurionweb/ExampleUnitTest.java new file mode 100644 index 0000000..b982752 --- /dev/null +++ b/app/src/test/java/fr/nitorac/aurionweb/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package fr.nitorac.aurionweb; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..bfb75dc --- /dev/null +++ b/build.gradle @@ -0,0 +1,27 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. +buildscript { + ext.kotlin_version = '1.4.10' + repositories { + google() + jcenter() + } + dependencies { + classpath "com.android.tools.build:gradle:4.0.1" + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +allprojects { + repositories { + google() + jcenter() + maven { url 'https://jitpack.io' } + } +} + +task clean(type: Delete) { + delete rootProject.buildDir +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..c52ac9b --- /dev/null +++ b/gradle.properties @@ -0,0 +1,19 @@ +# 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 +# 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 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..919be2f --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Fri Oct 02 17:31:26 CEST 2020 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..cccdd3d --- /dev/null +++ b/gradlew @@ -0,0 +1,172 @@ +#!/usr/bin/env sh + +############################################################################## +## +## 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="" + +# 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, switch paths to Windows format before running java +if $cygwin ; 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=$((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" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..f955316 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,84 @@ +@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 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= + +@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 init + +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 init + +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 + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +: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 %CMD_LINE_ARGS% + +: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/local.properties b/local.properties new file mode 100644 index 0000000..ee4e8c4 --- /dev/null +++ b/local.properties @@ -0,0 +1,10 @@ +## This file is automatically generated by Android Studio. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file should *NOT* be checked into Version Control Systems, +# as it contains information specific to your local configuration. +# +# Location of the SDK. This is only used by Gradle. +# For customization when using a Version Control System, please read the +# header note. +sdk.dir=D\:\\Users\\Nitorac\\AppData\\Local\\sdk \ No newline at end of file diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..a8df4e4 --- /dev/null +++ b/settings.gradle @@ -0,0 +1,2 @@ +include ':app' +rootProject.name = "AurionWeb" \ No newline at end of file -- GitLab