From b0cb9eb4d6977f8609792294b3fbea66ab2ffee2 Mon Sep 17 00:00:00 2001 From: Dorinel Filip Date: Wed, 15 May 2019 17:39:17 +0300 Subject: [PATCH] [CitiSim/Android]: Initial version --- projects/CitiSim/Android/.gitignore | 83 +++++ projects/CitiSim/Android/app/.gitignore | 83 +++++ .../Android/app/.idea/codeStyles/Project.xml | 29 ++ projects/CitiSim/Android/app/.idea/misc.xml | 14 + .../Android/app/.idea/runConfigurations.xml | 12 + projects/CitiSim/Android/app/build.gradle | 33 ++ .../gradle/wrapper/gradle-wrapper.properties | 6 + projects/CitiSim/Android/app/gradlew | 172 ++++++++++ projects/CitiSim/Android/app/gradlew.bat | 84 +++++ .../CitiSim/Android/app/proguard-rules.pro | 21 ++ .../main/citisim/ExampleInstrumentedTest.java | 26 ++ .../Android/app/src/main/AndroidManifest.xml | 44 +++ .../java/com/main/citisim/ChangePass.java | 95 ++++++ .../java/com/main/citisim/MainActivity.java | 153 +++++++++ .../java/com/main/citisim/MapActivity.java | 275 ++++++++++++++++ .../java/com/main/citisim/MyVolleyQueue.java | 61 ++++ .../main/java/com/main/citisim/NewReport.java | 299 ++++++++++++++++++ .../main/java/com/main/citisim/Register.java | 88 ++++++ .../main/java/com/main/citisim/Session.java | 25 ++ .../main/java/com/main/citisim/Settings.java | 113 +++++++ .../main/citisim/VolleyMultipartRequest.java | 214 +++++++++++++ .../drawable-v24/ic_launcher_foreground.xml | 34 ++ .../app/src/main/res/drawable/account.png | Bin 0 -> 5486 bytes .../app/src/main/res/drawable/buttonshape.xml | 19 ++ .../app/src/main/res/drawable/camera.png | Bin 0 -> 3720 bytes .../app/src/main/res/drawable/camera2.png | Bin 0 -> 2341 bytes .../res/drawable/ic_launcher_background.xml | 170 ++++++++++ .../app/src/main/res/drawable/logo.png | Bin 0 -> 85819 bytes .../app/src/main/res/drawable/settings.png | Bin 0 -> 33635 bytes .../main/res/layout/activity_change_pass.xml | 154 +++++++++ .../app/src/main/res/layout/activity_main.xml | 162 ++++++++++ .../app/src/main/res/layout/activity_map.xml | 58 ++++ .../main/res/layout/activity_new_report.xml | 136 ++++++++ .../src/main/res/layout/activity_register.xml | 224 +++++++++++++ .../src/main/res/layout/activity_settings.xml | 207 ++++++++++++ .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2963 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 4905 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2060 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2783 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4490 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 6895 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6387 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10413 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9128 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 15132 bytes .../Android/app/src/main/res/raw/reports.json | 3 + .../app/src/main/res/values/colors.xml | 6 + .../app/src/main/res/values/strings.xml | 5 + .../app/src/main/res/values/styles.xml | 11 + .../com/main/citisim/ExampleUnitTest.java | 17 + projects/CitiSim/Android/build.gradle | 27 ++ projects/CitiSim/Android/gradle.properties | 15 + .../gradle/wrapper/gradle-wrapper.properties | 6 + projects/CitiSim/Android/gradlew | 172 ++++++++++ projects/CitiSim/Android/gradlew.bat | 84 +++++ projects/CitiSim/Android/settings.gradle | 1 + 58 files changed, 3451 insertions(+) create mode 100644 projects/CitiSim/Android/.gitignore create mode 100755 projects/CitiSim/Android/app/.gitignore create mode 100755 projects/CitiSim/Android/app/.idea/codeStyles/Project.xml create mode 100755 projects/CitiSim/Android/app/.idea/misc.xml create mode 100755 projects/CitiSim/Android/app/.idea/runConfigurations.xml create mode 100755 projects/CitiSim/Android/app/build.gradle create mode 100755 projects/CitiSim/Android/app/gradle/wrapper/gradle-wrapper.properties create mode 100755 projects/CitiSim/Android/app/gradlew create mode 100755 projects/CitiSim/Android/app/gradlew.bat create mode 100755 projects/CitiSim/Android/app/proguard-rules.pro create mode 100755 projects/CitiSim/Android/app/src/androidTest/java/com/main/citisim/ExampleInstrumentedTest.java create mode 100755 projects/CitiSim/Android/app/src/main/AndroidManifest.xml create mode 100755 projects/CitiSim/Android/app/src/main/java/com/main/citisim/ChangePass.java create mode 100755 projects/CitiSim/Android/app/src/main/java/com/main/citisim/MainActivity.java create mode 100755 projects/CitiSim/Android/app/src/main/java/com/main/citisim/MapActivity.java create mode 100755 projects/CitiSim/Android/app/src/main/java/com/main/citisim/MyVolleyQueue.java create mode 100755 projects/CitiSim/Android/app/src/main/java/com/main/citisim/NewReport.java create mode 100755 projects/CitiSim/Android/app/src/main/java/com/main/citisim/Register.java create mode 100755 projects/CitiSim/Android/app/src/main/java/com/main/citisim/Session.java create mode 100755 projects/CitiSim/Android/app/src/main/java/com/main/citisim/Settings.java create mode 100644 projects/CitiSim/Android/app/src/main/java/com/main/citisim/VolleyMultipartRequest.java create mode 100755 projects/CitiSim/Android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100755 projects/CitiSim/Android/app/src/main/res/drawable/account.png create mode 100755 projects/CitiSim/Android/app/src/main/res/drawable/buttonshape.xml create mode 100755 projects/CitiSim/Android/app/src/main/res/drawable/camera.png create mode 100755 projects/CitiSim/Android/app/src/main/res/drawable/camera2.png create mode 100755 projects/CitiSim/Android/app/src/main/res/drawable/ic_launcher_background.xml create mode 100755 projects/CitiSim/Android/app/src/main/res/drawable/logo.png create mode 100755 projects/CitiSim/Android/app/src/main/res/drawable/settings.png create mode 100644 projects/CitiSim/Android/app/src/main/res/layout/activity_change_pass.xml create mode 100644 projects/CitiSim/Android/app/src/main/res/layout/activity_main.xml create mode 100644 projects/CitiSim/Android/app/src/main/res/layout/activity_map.xml create mode 100644 projects/CitiSim/Android/app/src/main/res/layout/activity_new_report.xml create mode 100644 projects/CitiSim/Android/app/src/main/res/layout/activity_register.xml create mode 100644 projects/CitiSim/Android/app/src/main/res/layout/activity_settings.xml create mode 100755 projects/CitiSim/Android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100755 projects/CitiSim/Android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100755 projects/CitiSim/Android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100755 projects/CitiSim/Android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100755 projects/CitiSim/Android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100755 projects/CitiSim/Android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100755 projects/CitiSim/Android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100755 projects/CitiSim/Android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100755 projects/CitiSim/Android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100755 projects/CitiSim/Android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100755 projects/CitiSim/Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100755 projects/CitiSim/Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100755 projects/CitiSim/Android/app/src/main/res/raw/reports.json create mode 100755 projects/CitiSim/Android/app/src/main/res/values/colors.xml create mode 100755 projects/CitiSim/Android/app/src/main/res/values/strings.xml create mode 100755 projects/CitiSim/Android/app/src/main/res/values/styles.xml create mode 100755 projects/CitiSim/Android/app/src/test/java/com/main/citisim/ExampleUnitTest.java create mode 100755 projects/CitiSim/Android/build.gradle create mode 100755 projects/CitiSim/Android/gradle.properties create mode 100755 projects/CitiSim/Android/gradle/wrapper/gradle-wrapper.properties create mode 100755 projects/CitiSim/Android/gradlew create mode 100755 projects/CitiSim/Android/gradlew.bat create mode 100755 projects/CitiSim/Android/settings.gradle diff --git a/projects/CitiSim/Android/.gitignore b/projects/CitiSim/Android/.gitignore new file mode 100644 index 00000000..2fd41868 --- /dev/null +++ b/projects/CitiSim/Android/.gitignore @@ -0,0 +1,83 @@ +# Built application files +*.apk +*.ap_ +*.aab + +# Files for the ART/Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ +out/ +release/ + +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ + +# Log Files +*.log + +# Android Studio Navigation editor temp files +.navigation/ + +# Android Studio captures folder +captures/ + +# IntelliJ +*.iml +.idea/workspace.xml +.idea/tasks.xml +.idea/gradle.xml +.idea/assetWizardSettings.xml +.idea/dictionaries +.idea/libraries + +# Android Studio 3 in .gitignore file. +.idea/caches +.idea/modules.xml + +# Comment next line if keeping position of elements in Navigation Editor is relevant for you +.idea/navEditor.xml + +# Keystore files +*.jks +*.keystore + +# External native build folder generated in Android Studio 2.2 and later +.externalNativeBuild + +# Google Services (e.g. APIs or Firebase) +# google-services.json + +# Freeline +freeline.py +freeline/ +freeline_project_description.json + +# fastlane +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots +fastlane/test_output +fastlane/readme.md + +# Version control +vcs.xml + +# lint +lint/intermediates/ +lint/generated/ +lint/outputs/ +lint/tmp/ +lint/reports/ diff --git a/projects/CitiSim/Android/app/.gitignore b/projects/CitiSim/Android/app/.gitignore new file mode 100755 index 00000000..2fd41868 --- /dev/null +++ b/projects/CitiSim/Android/app/.gitignore @@ -0,0 +1,83 @@ +# Built application files +*.apk +*.ap_ +*.aab + +# Files for the ART/Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ +out/ +release/ + +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ + +# Log Files +*.log + +# Android Studio Navigation editor temp files +.navigation/ + +# Android Studio captures folder +captures/ + +# IntelliJ +*.iml +.idea/workspace.xml +.idea/tasks.xml +.idea/gradle.xml +.idea/assetWizardSettings.xml +.idea/dictionaries +.idea/libraries + +# Android Studio 3 in .gitignore file. +.idea/caches +.idea/modules.xml + +# Comment next line if keeping position of elements in Navigation Editor is relevant for you +.idea/navEditor.xml + +# Keystore files +*.jks +*.keystore + +# External native build folder generated in Android Studio 2.2 and later +.externalNativeBuild + +# Google Services (e.g. APIs or Firebase) +# google-services.json + +# Freeline +freeline.py +freeline/ +freeline_project_description.json + +# fastlane +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots +fastlane/test_output +fastlane/readme.md + +# Version control +vcs.xml + +# lint +lint/intermediates/ +lint/generated/ +lint/outputs/ +lint/tmp/ +lint/reports/ diff --git a/projects/CitiSim/Android/app/.idea/codeStyles/Project.xml b/projects/CitiSim/Android/app/.idea/codeStyles/Project.xml new file mode 100755 index 00000000..30aa626c --- /dev/null +++ b/projects/CitiSim/Android/app/.idea/codeStyles/Project.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/projects/CitiSim/Android/app/.idea/misc.xml b/projects/CitiSim/Android/app/.idea/misc.xml new file mode 100755 index 00000000..c72ad176 --- /dev/null +++ b/projects/CitiSim/Android/app/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/projects/CitiSim/Android/app/.idea/runConfigurations.xml b/projects/CitiSim/Android/app/.idea/runConfigurations.xml new file mode 100755 index 00000000..7f68460d --- /dev/null +++ b/projects/CitiSim/Android/app/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/projects/CitiSim/Android/app/build.gradle b/projects/CitiSim/Android/app/build.gradle new file mode 100755 index 00000000..b5d5a6ac --- /dev/null +++ b/projects/CitiSim/Android/app/build.gradle @@ -0,0 +1,33 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 28 + defaultConfig { + applicationId "ro.beia.citisimR" + minSdkVersion 15 + targetSdkVersion 28 + versionCode 4 + versionName "1.0.2" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + buildTypes { + release { + minifyEnabled true + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'com.android.support:appcompat-v7:28.0.0' + implementation 'com.google.android.gms:play-services-location:16.0.0' + implementation 'com.google.maps.android:android-maps-utils:0.5+' ///////////////// + implementation 'com.android.support.constraint:constraint-layout:1.1.3' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.2' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' + implementation 'com.google.android.gms:play-services-maps:16.1.0' + implementation 'com.android.volley:volley:1.1.1' + +} diff --git a/projects/CitiSim/Android/app/gradle/wrapper/gradle-wrapper.properties b/projects/CitiSim/Android/app/gradle/wrapper/gradle-wrapper.properties new file mode 100755 index 00000000..f8d70928 --- /dev/null +++ b/projects/CitiSim/Android/app/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Wed May 08 09:07:41 EEST 2019 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip diff --git a/projects/CitiSim/Android/app/gradlew b/projects/CitiSim/Android/app/gradlew new file mode 100755 index 00000000..cccdd3d5 --- /dev/null +++ b/projects/CitiSim/Android/app/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/projects/CitiSim/Android/app/gradlew.bat b/projects/CitiSim/Android/app/gradlew.bat new file mode 100755 index 00000000..f9553162 --- /dev/null +++ b/projects/CitiSim/Android/app/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/projects/CitiSim/Android/app/proguard-rules.pro b/projects/CitiSim/Android/app/proguard-rules.pro new file mode 100755 index 00000000..f1b42451 --- /dev/null +++ b/projects/CitiSim/Android/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 diff --git a/projects/CitiSim/Android/app/src/androidTest/java/com/main/citisim/ExampleInstrumentedTest.java b/projects/CitiSim/Android/app/src/androidTest/java/com/main/citisim/ExampleInstrumentedTest.java new file mode 100755 index 00000000..e268ee1b --- /dev/null +++ b/projects/CitiSim/Android/app/src/androidTest/java/com/main/citisim/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.main.citisim; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("com.main.citisim", appContext.getPackageName()); + } +} diff --git a/projects/CitiSim/Android/app/src/main/AndroidManifest.xml b/projects/CitiSim/Android/app/src/main/AndroidManifest.xml new file mode 100755 index 00000000..82aa4db9 --- /dev/null +++ b/projects/CitiSim/Android/app/src/main/AndroidManifest.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/projects/CitiSim/Android/app/src/main/java/com/main/citisim/ChangePass.java b/projects/CitiSim/Android/app/src/main/java/com/main/citisim/ChangePass.java new file mode 100755 index 00000000..aeab50c1 --- /dev/null +++ b/projects/CitiSim/Android/app/src/main/java/com/main/citisim/ChangePass.java @@ -0,0 +1,95 @@ +package com.main.citisim; + +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.Toast; + +import com.android.volley.AuthFailureError; +import com.android.volley.NoConnectionError; +import com.android.volley.Request; +import com.android.volley.RequestQueue; +import com.android.volley.Response; +import com.android.volley.TimeoutError; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.JsonObjectRequest; +import com.android.volley.toolbox.StringRequest; +import com.android.volley.toolbox.Volley; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; + +public class ChangePass extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_change_pass); + + final EditText oldpass = (EditText) findViewById(R.id.oldPass); + final EditText newPass1 = (EditText) findViewById(R.id.newPass1); + final EditText newPass2 = (EditText) findViewById(R.id.newPass2); + + Button confirm = (Button)findViewById(R.id.confirm); + + confirm.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(newPass1.getText().toString().equals(newPass2.getText().toString())) { + /////////// + HashMap data = new HashMap(); + data.put("currentPassword", oldpass.getText().toString()); + data.put("newPassword", newPass1.getText().toString()); + + String url = getResources().getString(R.string.api_server)+"/api/account/change-password"; + + JsonObjectRequest jsonObjectRequest = new JsonObjectRequest + (Request.Method.POST, url, new JSONObject(data), new Response.Listener() { + + @Override + public void onResponse(JSONObject response) { + Toast.makeText(getApplicationContext(),"Completed",Toast.LENGTH_SHORT).show(); + } + }, new Response.ErrorListener() { + + @Override + public void onErrorResponse(VolleyError error) { + // TODO: Handle error + if(error instanceof TimeoutError || error instanceof NoConnectionError){ + Toast.makeText(getApplicationContext(),"no internet connection",Toast.LENGTH_SHORT).show(); + }else if(error instanceof AuthFailureError){ + Toast.makeText(getApplicationContext(),error.toString(),Toast.LENGTH_SHORT).show(); + + } + else { + Toast.makeText(getApplicationContext(),error.toString(),Toast.LENGTH_SHORT).show(); + } + } + } + + ) { + @Override + public java.util.Map getHeaders() { + HashMap params = new HashMap<>(); + params.put("Authorization", "Bearer " + new Session(getApplication()).getAuthToken()); + return params; + } + }; + + // Access the RequestQueue through your singleton class. + MyVolleyQueue.getInstance(getApplicationContext()).addToRequestQueue(jsonObjectRequest); + /////////// + } else { + Toast.makeText(getApplicationContext(), "The password and the confirmation should match.", Toast.LENGTH_LONG).show(); + } + } + }); + + } + +} diff --git a/projects/CitiSim/Android/app/src/main/java/com/main/citisim/MainActivity.java b/projects/CitiSim/Android/app/src/main/java/com/main/citisim/MainActivity.java new file mode 100755 index 00000000..b22006f9 --- /dev/null +++ b/projects/CitiSim/Android/app/src/main/java/com/main/citisim/MainActivity.java @@ -0,0 +1,153 @@ +package com.main.citisim; + +import android.app.Dialog; +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import com.android.volley.AuthFailureError; +import com.android.volley.NoConnectionError; +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.TimeoutError; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.JsonObjectRequest; +import com.google.android.gms.common.ConnectionResult; +import com.google.android.gms.common.GoogleApiAvailability; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; + +public class MainActivity extends AppCompatActivity { + + private static final String TAG = "MainActivity"; + private static final int ERROR_DIALOG_REQUEST = 9001; + public static String token; + + private void openRegisterPage() { + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(getResources().getString(R.string.api_server) + "/#/register"))); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + Button addBtn = (Button) findViewById(R.id.addBtn); + Button register= ( Button) findViewById(R.id.register); + + register.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + openRegisterPage(); + } + }); + + + + addBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + EditText username = (EditText) findViewById(R.id.username); + EditText password = (EditText) findViewById(R.id.password); + final TextView okmsg = (TextView) findViewById(R.id.okmsg); + + + + + //------LOGARE------- + okmsg.setText(""); + HashMap data = new HashMap(); + data.put("username", username.getText().toString()); + data.put("password", password.getText().toString()); + data.put("rememberMe", true); + + String url = getResources().getString(R.string.api_server)+"/api/authenticate"; + + JsonObjectRequest jsonObjectRequest = new JsonObjectRequest + (Request.Method.POST, url, new JSONObject(data), new Response.Listener() { + + @Override + public void onResponse(JSONObject response) { + okmsg.setText("Authentication succesful"); + try { + // Procesare continut raspuns + token=response.getString("id_token"); + Session session = new Session(getApplicationContext()); + session.setAuthToken(token); + // Procesare raspuns + openMap(); + } catch (JSONException e) { + Toast.makeText(getApplicationContext(), "Invalid response from server.", Toast.LENGTH_LONG).show(); + } + } + }, new Response.ErrorListener() { + + @Override + public void onErrorResponse(VolleyError error) { + // TODO: Handle error + if(error instanceof TimeoutError || error instanceof NoConnectionError){ + Toast.makeText(getApplicationContext(),error.toString(),Toast.LENGTH_SHORT).show(); + }else if(error instanceof AuthFailureError){ + Toast.makeText(getApplicationContext(),"wronguser/pass",Toast.LENGTH_SHORT).show(); + } + else{ + Toast.makeText(getApplicationContext(),"????",Toast.LENGTH_SHORT).show(); + } + } + }); + +// Access the RequestQueue through your singleton class. + MyVolleyQueue.getInstance(getApplicationContext()).addToRequestQueue(jsonObjectRequest); + + + //------LOGARE-------// + } + }); + } + + public void openRegister(){ + Intent intent = new Intent(this, Register.class); + startActivity(intent); + } + + public void openMap(){ + Intent intent = new Intent(this, MapActivity.class); + startActivity(intent); + } + + + public boolean isServicesOK(){ + Log.d(TAG,"isServicesOK: checking google services version"); + + int available = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(MainActivity.this); + + if(available == ConnectionResult.SUCCESS) { + Log.d(TAG,"isServicesOK: Google Play Services is working"); + return true; + } + else if(GoogleApiAvailability.getInstance().isUserResolvableError(available)) { + Log.d(TAG,"isServicesOK: a version error occured"); + Dialog dialog = GoogleApiAvailability.getInstance().getErrorDialog(MainActivity.this,available,ERROR_DIALOG_REQUEST); + dialog.show(); + }else { + Toast.makeText(this,"an error occured",Toast.LENGTH_SHORT).show(); + } + return false; + } + + + + + +} + diff --git a/projects/CitiSim/Android/app/src/main/java/com/main/citisim/MapActivity.java b/projects/CitiSim/Android/app/src/main/java/com/main/citisim/MapActivity.java new file mode 100755 index 00000000..cdcc38ed --- /dev/null +++ b/projects/CitiSim/Android/app/src/main/java/com/main/citisim/MapActivity.java @@ -0,0 +1,275 @@ +package com.main.citisim; + +import android.Manifest; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.location.Location; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.ActivityCompat; +import android.support.v4.content.ContextCompat; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.ImageButton; +import android.widget.Toast; + +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.JsonArrayRequest; +import com.google.android.gms.location.FusedLocationProviderClient; +import com.google.android.gms.location.LocationServices; +import com.google.android.gms.maps.CameraUpdateFactory; +import com.google.android.gms.maps.GoogleMap; +import com.google.android.gms.maps.OnMapReadyCallback; +import com.google.android.gms.maps.SupportMapFragment; +import com.google.android.gms.maps.model.LatLng; +import com.google.android.gms.maps.model.TileOverlayOptions; +import com.google.android.gms.tasks.OnCompleteListener; +import com.google.android.gms.tasks.Task; +import com.google.maps.android.heatmaps.HeatmapTileProvider; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +public class MapActivity extends AppCompatActivity implements OnMapReadyCallback { + + final HashMap info = new HashMap(); + + @Override + public void onMapReady(GoogleMap googleMap) { + mMap = googleMap; + + if (mLocationPermissionsGranted) { + getDeviceLocation(); + if (ActivityCompat.checkSelfPermission(this, + Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, + Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { + Toast.makeText(getApplicationContext(), "Location permission not gruanteed.", Toast.LENGTH_LONG).show(); + return; + } + mMap.setMyLocationEnabled(true); + //mMap.getUiSettings(). different settings + + // Get the reports + getReports(); + } + + } + + private static final String TAG = "MapActivity"; + + private static final String FINE_LOCATION = Manifest.permission.ACCESS_FINE_LOCATION; + private static final String COURSE_LOCATION = Manifest.permission.ACCESS_COARSE_LOCATION; + private static final int LOCATION_PERMISSION_REQUEST_CODE = 1234; + private static final float DEFAULT_ZOOM = 15f; + //vars + private Boolean mLocationPermissionsGranted = false; + private GoogleMap mMap; + private FusedLocationProviderClient mFusedLocationProviderClient; + + + public static double latitude; + public static double longitude; + + private HeatmapTileProvider mProvider; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_map); + + getLocationPermission(); + Button button2; + button2 = (Button) findViewById(R.id.button2); + button2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + openNewReport(); + } + }); + + ImageButton settings; + settings = (ImageButton) findViewById(R.id.settings); + settings.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + openSettings(); + } + }); + + } + + + /////////////////////////////////////////////////////// + + + private void openSettings() { + Intent intent = new Intent(this, Settings.class); + startActivity(intent); + } + + + private void updateHeatMap(List list) { + // Create a heat map tile provider, passing it the latlngs of the police stations. + mProvider = new HeatmapTileProvider.Builder() + .data(list) + .build(); + + // Add a tile overlay to the map, using the heat map tile provider. + mMap.addTileOverlay(new TileOverlayOptions().tileProvider(mProvider)); + + } + + +//////////////////////////////////////////////////////////// + + + public void getReports() { + final String url = getResources().getString(R.string.api_server) + "/api/reports"; + + + final JsonArrayRequest getRequest = new JsonArrayRequest(Request.Method.GET, url, null, + new Response.Listener() { + @Override + public void onResponse(JSONArray response) { + ArrayList coordinates = new ArrayList<>(); + try { + for (int i = 0; i < response.length(); i++) { + JSONObject report = response.getJSONObject(i); + Double lat = Double.parseDouble(report.getString("latitude")); + Double lng = Double.parseDouble(report.getString("longitude")); + coordinates.add(new LatLng(lat, lng)); + } + updateHeatMap(coordinates); + + } catch (JSONException e) { + e.printStackTrace(); + } + } + }, + new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Toast.makeText(getApplicationContext(), error.toString(), Toast.LENGTH_SHORT).show(); + } + } + ) { + @Override + public java.util.Map getHeaders() { + HashMap params = new HashMap<>(); + params.put("Authorization", "Bearer " + new Session(getApplication()).getAuthToken()); + return params; + } + }; + + // add it to the RequestQueue + MyVolleyQueue.getInstance(getApplicationContext()).addToRequestQueue(getRequest); + } + + + public void openNewReport() { + Intent intent = new Intent(this, NewReport.class); + startActivity(intent); + } + + public void getDeviceLocation() { + mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this); + try { + if (mLocationPermissionsGranted) { + Task location = mFusedLocationProviderClient.getLastLocation(); + location.addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()) { + Log.d(TAG, "onComplete: found location!"); + Location currentLocation = (Location) task.getResult(); + + moveCamera(new LatLng(currentLocation.getLatitude(), currentLocation.getLongitude()), + DEFAULT_ZOOM); + + latitude = currentLocation.getLatitude(); + longitude = currentLocation.getLongitude(); + + + } else { + Log.d(TAG, "onComplete: current location is null"); + Toast.makeText(MapActivity.this, "unable to get current location", Toast.LENGTH_SHORT).show(); + } + } + }); + } + } catch (SecurityException e) { + Log.e(TAG, "getDeviceLocation: SecurityException: " + e.getMessage()); + } + } + + + private void moveCamera(LatLng latLng, float zoom) { + mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, zoom)); + } + + private void initMap() { + SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); + + mapFragment.getMapAsync(MapActivity.this); + } + + private void getLocationPermission() { + String[] permissions = {Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.ACCESS_COARSE_LOCATION}; + + if (ContextCompat.checkSelfPermission(this.getApplicationContext(), + FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { + if (ContextCompat.checkSelfPermission(this.getApplicationContext(), + COURSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { + mLocationPermissionsGranted = true; + initMap(); + } else { + ActivityCompat.requestPermissions(this, + permissions, + LOCATION_PERMISSION_REQUEST_CODE); + + } + } else { + ActivityCompat.requestPermissions(this, + permissions, + LOCATION_PERMISSION_REQUEST_CODE); + + } + + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + mLocationPermissionsGranted = false; + + switch (requestCode) { + case LOCATION_PERMISSION_REQUEST_CODE: { + if (grantResults.length > 0) { + for (int i = 0; i < grantResults.length; i++) { + if (grantResults[i] != PackageManager.PERMISSION_GRANTED) { + mLocationPermissionsGranted = false; + return; + } + } + mLocationPermissionsGranted = true; + //initialize map + initMap(); + } + + } + + } + } + + +} diff --git a/projects/CitiSim/Android/app/src/main/java/com/main/citisim/MyVolleyQueue.java b/projects/CitiSim/Android/app/src/main/java/com/main/citisim/MyVolleyQueue.java new file mode 100755 index 00000000..4e5be5d1 --- /dev/null +++ b/projects/CitiSim/Android/app/src/main/java/com/main/citisim/MyVolleyQueue.java @@ -0,0 +1,61 @@ +package com.main.citisim; +import android.content.Context; +import android.graphics.Bitmap; +import android.util.LruCache; + +import com.android.volley.Request; +import com.android.volley.RequestQueue; +import com.android.volley.toolbox.ImageLoader; +import com.android.volley.toolbox.Volley; + +public class MyVolleyQueue { + private static MyVolleyQueue instance; + private RequestQueue requestQueue; + private ImageLoader imageLoader; + private static Context ctx; + + private MyVolleyQueue(Context context) { + ctx = context; + requestQueue = getRequestQueue(); + + imageLoader = new ImageLoader(requestQueue, + new ImageLoader.ImageCache() { + private final LruCache + cache = new LruCache(20); + + @Override + public Bitmap getBitmap(String url) { + return cache.get(url); + } + + @Override + public void putBitmap(String url, Bitmap bitmap) { + cache.put(url, bitmap); + } + }); + } + + public static synchronized MyVolleyQueue getInstance(Context context) { + if (instance == null) { + instance = new MyVolleyQueue(context); + } + return instance; + } + + public RequestQueue getRequestQueue() { + if (requestQueue == null) { + // getApplicationContext() is key, it keeps you from leaking the + // Activity or BroadcastReceiver if someone passes one in. + requestQueue = Volley.newRequestQueue(ctx.getApplicationContext()); + } + return requestQueue; + } + + public void addToRequestQueue(Request req) { + getRequestQueue().add(req); + } + + public ImageLoader getImageLoader() { + return imageLoader; + } +} \ No newline at end of file diff --git a/projects/CitiSim/Android/app/src/main/java/com/main/citisim/NewReport.java b/projects/CitiSim/Android/app/src/main/java/com/main/citisim/NewReport.java new file mode 100755 index 00000000..943395b9 --- /dev/null +++ b/projects/CitiSim/Android/app/src/main/java/com/main/citisim/NewReport.java @@ -0,0 +1,299 @@ +package com.main.citisim; + +import android.content.Intent; +import android.graphics.Bitmap; +import android.net.Uri; +import android.os.Bundle; +import android.provider.MediaStore; +import android.support.v7.app.AppCompatActivity; +import android.util.Base64; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.Toast; + +import com.android.volley.AuthFailureError; +import com.android.volley.DefaultRetryPolicy; +import com.android.volley.NetworkResponse; +import com.android.volley.NoConnectionError; +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.TimeoutError; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.JsonObjectRequest; +/* +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.mime.MultipartEntityBuilder; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +*/ +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +public class NewReport extends AppCompatActivity { + + //vars + private Button backToReports; + private ImageButton addImage; + private Button submitImage; + ImageView image; + private static final int PICK_IMAGE = 100; + Uri imageUri; + Bitmap image_bitmap; + EditText latitude; + EditText longitude; + EditText title; + final HashMap info = new HashMap(); + + private Uri buildURI(String url, Map params) { + + // build url with parameters. + Uri.Builder builder = Uri.parse(url).buildUpon(); + for (Map.Entry entry : params.entrySet()) { + builder.appendQueryParameter(entry.getKey(), entry.getValue()); + } + + return builder.build(); + } + + private void uploadImage(final Bitmap bitmap, final String url, Map query_params) { + + String full_url = buildURI(url, query_params).toString(); + + VolleyMultipartRequest volleyMultipartRequest = new VolleyMultipartRequest(Request.Method.POST, full_url, + new Response.Listener() { + @Override + public void onResponse(NetworkResponse response) { + try { + JSONObject jsonObject = new JSONObject(new String(response.data)); + Log.d("raspuns", response.data.toString()); + + } catch (JSONException e) { + e.printStackTrace(); + } + } + }, + new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Toast.makeText(getApplicationContext(), "Failed to submit report: " + error.getMessage(), Toast.LENGTH_SHORT).show(); + NetworkResponse networkResponse = error.networkResponse; + if (networkResponse != null && networkResponse.data != null) { + String jsonError = new String(networkResponse.data); + Log.d("error_response", jsonError); + } + } + }) { + + @Override + public java.util.Map getHeaders() { + HashMap params = new HashMap<>(); + params.put("Authorization", "Bearer " + new Session(getApplication()).getAuthToken()); + return params; + } + + /* + * If you want to add more parameters with the image + * you can do it here + * here we have only one parameter with the image + * which is tags + * */ + @Override + protected Map getParams() throws AuthFailureError { + Map params = new HashMap<>(); + // params.put("tags", "ccccc"); add string parameters + return params; + } + + /* + *pass files using below method + * */ + @Override + protected Map getByteData() { + Map params = new HashMap<>(); + long imagename = System.currentTimeMillis(); + params.put("file", new DataPart(imagename + ".png", getFileDataFromDrawable(bitmap))); + return params; + } + }; + + + volleyMultipartRequest.setRetryPolicy(new DefaultRetryPolicy( + 0, + DefaultRetryPolicy.DEFAULT_MAX_RETRIES, + DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); + MyVolleyQueue.getInstance(getApplicationContext()).addToRequestQueue(volleyMultipartRequest); + } + + public byte[] getFileDataFromDrawable(Bitmap bitmap) { + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + bitmap.compress(Bitmap.CompressFormat.JPEG, 80, byteArrayOutputStream); + return byteArrayOutputStream.toByteArray(); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_new_report); + + getUserInfo(); + + title = (EditText) findViewById(R.id.title); + + + image = (ImageView) findViewById(R.id.image); + // + image.setVisibility(View.INVISIBLE); + backToReports = (Button) findViewById(R.id.backToReports); + backToReports.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + openMap2(); + } + }); + + addImage = (ImageButton) findViewById(R.id.addImage); + addImage.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + openGallery(); + } + }); + + submitImage = (Button) findViewById(R.id.submitImage); + submitImage.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + + /*latitude.setText(Double.toString(MapActivity.latitude)); + longitude.setText(Double.toString(MapActivity.longitude)); +*/ + + + HashMap query_params = new HashMap(); + query_params.put("latitude", Double.toString(MapActivity.latitude)); + query_params.put("longitude", Double.toString(MapActivity.longitude)); + query_params.put("altitude", "0"); + query_params.put("userId", info.get("id").toString()); + // data.put("photoDescription","0"); + //data.put("photoPath","0"); + + //data.put("status","REPORT_CREATED"); + query_params.put("title", title.getText().toString()); + //data.put("id","0"); + query_params.put("date", "0"); + + + String url = getResources().getString(R.string.api_server) + "/api/reports"; + + submitImage.setEnabled(false); + + Toast.makeText(getApplicationContext(), "Submitting report...", Toast.LENGTH_LONG).show(); + uploadImage(image_bitmap, url, query_params); + + + } + }); + + + } + + + public void getUserInfo() { + final String url = getResources().getString(R.string.api_server) + "/api/account"; + + + final JsonObjectRequest getRequest = new JsonObjectRequest(Request.Method.GET, url, null, + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + //firstName.setText(""+response.toString()); + try { + + info.put("id", response.getString("id")); + // Toast.makeText(NewReport.this, info.get("id").toString(), Toast.LENGTH_SHORT).show(); + + } catch (JSONException e) { + e.printStackTrace(); + + } + + Log.d("Response", response.toString()); + } + }, + new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Toast.makeText(getApplicationContext(), error.toString(), Toast.LENGTH_SHORT).show(); + Log.d("Error.Response", "??"); + } + } + ) { + @Override + public java.util.Map getHeaders() { + HashMap params = new HashMap<>(); + params.put("Authorization", "Bearer " + new Session(getApplication()).getAuthToken()); + return params; + } + }; + + // add it to the RequestQueue + MyVolleyQueue.getInstance(getApplicationContext()).addToRequestQueue(getRequest); + } + + + private void openGallery() { + Intent gallery = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI); + startActivityForResult(gallery, PICK_IMAGE); + } + + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK && requestCode == PICK_IMAGE) { + imageUri = data.getData(); + image.setImageURI(imageUri); + image.setVisibility(View.VISIBLE); + + Log.d("hau", "am ajuns aici"); + + //aici imaginea trebuie rotita + //aici imaginea trebuie rotita + //aici imaginea trebuie rotita + //aici imaginea trebuie rotita + + image_bitmap = null; + try { + image_bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri); + } catch (IOException e) { + e.printStackTrace(); + } + + } + + + } + + + public void openMap2() { + Intent intent = new Intent(this, MapActivity.class); + startActivity(intent); + } + + +} diff --git a/projects/CitiSim/Android/app/src/main/java/com/main/citisim/Register.java b/projects/CitiSim/Android/app/src/main/java/com/main/citisim/Register.java new file mode 100755 index 00000000..264b9eb0 --- /dev/null +++ b/projects/CitiSim/Android/app/src/main/java/com/main/citisim/Register.java @@ -0,0 +1,88 @@ +package com.main.citisim; + +import android.content.Intent; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.Toast; + +import com.android.volley.AuthFailureError; +import com.android.volley.NoConnectionError; +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.TimeoutError; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.JsonObjectRequest; + +import org.json.JSONObject; + +import java.util.HashMap; + +public class Register extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_register); + + Button register = (Button) findViewById(R.id.registerButton); + + register.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + EditText firstName = (EditText) findViewById(R.id.editText_firstName); + EditText lastName = (EditText) findViewById(R.id.editText_lastName); + EditText email = (EditText) findViewById(R.id.editText_email); + EditText password = (EditText) findViewById(R.id.editText_password); + EditText repeatPassword = (EditText) findViewById(R.id.editText_repeatPassword); + + if(!password.getText().toString().equals( repeatPassword.getText().toString())){ + ///TODO: pop-up message "Password not ok" + Toast.makeText(getApplicationContext(),"Password not ok",Toast.LENGTH_SHORT).show(); + }else { + + + HashMap data = new HashMap(); + data.put("email", email.getText().toString()); + data.put("firstName", firstName.getText().toString()); + data.put("lastName", lastName.getText().toString()); + data.put("password", password.getText().toString()); + + + String url = getResources().getString(R.string.api_server) + "/api/register"; + + JsonObjectRequest jsonObjectRequest = new JsonObjectRequest + (Request.Method.POST, url, new JSONObject(data), new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + Toast.makeText(getApplicationContext(), response.toString(), Toast.LENGTH_SHORT).show(); + openMain(); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + // TODO: Handle error + if (error instanceof TimeoutError || error instanceof NoConnectionError) { + Toast.makeText(getApplicationContext(), "no internet connection", Toast.LENGTH_SHORT).show(); + } else if (error instanceof AuthFailureError) { + Toast.makeText(getApplicationContext(), "wronguser/pass", Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText(getApplicationContext(),"???", Toast.LENGTH_SHORT).show(); + } + } + }); + + MyVolleyQueue.getInstance(getApplicationContext()).addToRequestQueue(jsonObjectRequest); + } + } + + }); + } + + public void openMain(){ + Intent intent = new Intent(this, MainActivity.class); + startActivity(intent); + } +} diff --git a/projects/CitiSim/Android/app/src/main/java/com/main/citisim/Session.java b/projects/CitiSim/Android/app/src/main/java/com/main/citisim/Session.java new file mode 100755 index 00000000..a5519217 --- /dev/null +++ b/projects/CitiSim/Android/app/src/main/java/com/main/citisim/Session.java @@ -0,0 +1,25 @@ +package com.main.citisim; + +import android.content.Context; +import android.content.SharedPreferences; +import android.preference.PreferenceManager; + +public class Session { + private SharedPreferences prefs; + final private String AUTH_TOKEN_KEY = "authToken"; + + + public Session(Context cntx) { + // TODO Auto-generated constructor stub + prefs = PreferenceManager.getDefaultSharedPreferences(cntx); + } + + public void setAuthToken(String token) { + prefs.edit().putString(AUTH_TOKEN_KEY, token).commit(); + } + + public String getAuthToken() { + String usename = prefs.getString(AUTH_TOKEN_KEY,""); + return usename; + } +} diff --git a/projects/CitiSim/Android/app/src/main/java/com/main/citisim/Settings.java b/projects/CitiSim/Android/app/src/main/java/com/main/citisim/Settings.java new file mode 100755 index 00000000..a4e4d683 --- /dev/null +++ b/projects/CitiSim/Android/app/src/main/java/com/main/citisim/Settings.java @@ -0,0 +1,113 @@ +package com.main.citisim; + +import android.content.Intent; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; +import android.widget.Toast; + +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.JsonObjectRequest; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; + +public class Settings extends AppCompatActivity { + + TextView email; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_settings); + + final TextView firstName; + final TextView lastName; + + Button changePass; + + + + + firstName=(TextView)findViewById(R.id.firstName); + lastName=(TextView)findViewById(R.id.lastName); + email=(TextView)findViewById(R.id.email); + changePass=(Button)findViewById(R.id.changePass); + + changePass.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + + openChangePass(); + + + + } + }); + + + /////////////////GETDATAFROMVOLLEY///////////////// + + getUserInfo(); + + /////////////////GETDATAFROMVOLLEY///////////////// + + } + + public void getUserInfo(){ + final String url = getResources().getString(R.string.api_server) + "/api/account"; + + + JsonObjectRequest getRequest = new JsonObjectRequest(Request.Method.GET, url, null, + new Response.Listener() + { + @Override + public void onResponse(JSONObject response) { + //firstName.setText(""+response.toString()); + try { + email.setText(response.getString("email")); + + } catch (JSONException e) { + e.printStackTrace(); + } + + Log.d("Response", response.toString()); + } + }, + new Response.ErrorListener() + { + @Override + public void onErrorResponse(VolleyError error) { + Toast.makeText(getApplicationContext(),error.toString(),Toast.LENGTH_SHORT).show(); + Log.d("Error.Response","??" ); + } + } + ){ + @Override + public java.util.Map getHeaders() { + HashMap params = new HashMap<>(); + params.put("Authorization", "Bearer " + new Session(getApplication()).getAuthToken()); + return params; + } + }; + +// add it to the RequestQueue + MyVolleyQueue.getInstance(getApplicationContext()).addToRequestQueue(getRequest); + } + + + public void openChangePass(){ + Intent intent = new Intent(this, ChangePass.class); + startActivity(intent); + } + +} diff --git a/projects/CitiSim/Android/app/src/main/java/com/main/citisim/VolleyMultipartRequest.java b/projects/CitiSim/Android/app/src/main/java/com/main/citisim/VolleyMultipartRequest.java new file mode 100644 index 00000000..87821f60 --- /dev/null +++ b/projects/CitiSim/Android/app/src/main/java/com/main/citisim/VolleyMultipartRequest.java @@ -0,0 +1,214 @@ +package com.main.citisim; + +import com.android.volley.AuthFailureError; +import com.android.volley.NetworkResponse; +import com.android.volley.ParseError; +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.HttpHeaderParser; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.util.Map; + +public class VolleyMultipartRequest extends Request { + + private final String twoHyphens = "--"; + private final String lineEnd = "\r\n"; + private final String boundary = "apiclient-" + System.currentTimeMillis(); + + private Response.Listener mListener; + private Response.ErrorListener mErrorListener; + private Map mHeaders; + + + public VolleyMultipartRequest(int method, String url, + Response.Listener listener, + Response.ErrorListener errorListener) { + super(method, url, errorListener); + this.mListener = listener; + this.mErrorListener = errorListener; + } + + @Override + public Map getHeaders() throws AuthFailureError { + return (mHeaders != null) ? mHeaders : super.getHeaders(); + } + + @Override + public String getBodyContentType() { + return "multipart/form-data;boundary=" + boundary; + } + + @Override + public byte[] getBody() throws AuthFailureError { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + DataOutputStream dos = new DataOutputStream(bos); + + try { + // populate text payload + Map params = getParams(); + if (params != null && params.size() > 0) { + textParse(dos, params, getParamsEncoding()); + } + + // populate data byte payload + Map data = getByteData(); + if (data != null && data.size() > 0) { + dataParse(dos, data); + } + + // close multipart form data after text and file data + dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); + + return bos.toByteArray(); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + + /** + * Custom method handle data payload. + * + * @return MapActivity data part label with data byte + * @throws AuthFailureError + */ + protected Map getByteData() throws AuthFailureError { + return null; + } + + @Override + protected Response parseNetworkResponse(NetworkResponse response) { + try { + return Response.success( + response, + HttpHeaderParser.parseCacheHeaders(response)); + } catch (Exception e) { + return Response.error(new ParseError(e)); + } + } + + @Override + protected void deliverResponse(NetworkResponse response) { + mListener.onResponse(response); + } + + @Override + public void deliverError(VolleyError error) { + mErrorListener.onErrorResponse(error); + } + + /** + * Parse string map into data output stream by key and value. + * + * @param dataOutputStream data output stream handle string parsing + * @param params string inputs collection + * @param encoding encode the inputs, default UTF-8 + * @throws IOException + */ + private void textParse(DataOutputStream dataOutputStream, Map params, String encoding) throws IOException { + try { + for (Map.Entry entry : params.entrySet()) { + buildTextPart(dataOutputStream, entry.getKey(), entry.getValue()); + } + } catch (UnsupportedEncodingException uee) { + throw new RuntimeException("Encoding not supported: " + encoding, uee); + } + } + + /** + * Parse data into data output stream. + * + * @param dataOutputStream data output stream handle file attachment + * @param data loop through data + * @throws IOException + */ + private void dataParse(DataOutputStream dataOutputStream, Map data) throws IOException { + for (Map.Entry entry : data.entrySet()) { + buildDataPart(dataOutputStream, entry.getValue(), entry.getKey()); + } + } + + /** + * Write string data into header and data output stream. + * + * @param dataOutputStream data output stream handle string parsing + * @param parameterName name of input + * @param parameterValue value of input + * @throws IOException + */ + private void buildTextPart(DataOutputStream dataOutputStream, String parameterName, String parameterValue) throws IOException { + dataOutputStream.writeBytes(twoHyphens + boundary + lineEnd); + dataOutputStream.writeBytes("Content-Disposition: form-data; name=\"" + parameterName + "\"" + lineEnd); + dataOutputStream.writeBytes(lineEnd); + dataOutputStream.writeBytes(parameterValue + lineEnd); + } + + /** + * Write data file into header and data output stream. + * + * @param dataOutputStream data output stream handle data parsing + * @param dataFile data byte as DataPart from collection + * @param inputName name of data input + * @throws IOException + */ + private void buildDataPart(DataOutputStream dataOutputStream, DataPart dataFile, String inputName) throws IOException { + dataOutputStream.writeBytes(twoHyphens + boundary + lineEnd); + dataOutputStream.writeBytes("Content-Disposition: form-data; name=\"" + + inputName + "\"; filename=\"" + dataFile.getFileName() + "\"" + lineEnd); + if (dataFile.getType() != null && !dataFile.getType().trim().isEmpty()) { + dataOutputStream.writeBytes("Content-Type: " + dataFile.getType() + lineEnd); + } + dataOutputStream.writeBytes(lineEnd); + + ByteArrayInputStream fileInputStream = new ByteArrayInputStream(dataFile.getContent()); + int bytesAvailable = fileInputStream.available(); + + int maxBufferSize = 1024 * 1024; + int bufferSize = Math.min(bytesAvailable, maxBufferSize); + byte[] buffer = new byte[bufferSize]; + + int bytesRead = fileInputStream.read(buffer, 0, bufferSize); + + while (bytesRead > 0) { + dataOutputStream.write(buffer, 0, bufferSize); + bytesAvailable = fileInputStream.available(); + bufferSize = Math.min(bytesAvailable, maxBufferSize); + bytesRead = fileInputStream.read(buffer, 0, bufferSize); + } + + dataOutputStream.writeBytes(lineEnd); + } + + class DataPart { + private String fileName; + private byte[] content; + private String type; + + public DataPart() { + } + + DataPart(String name, byte[] data) { + fileName = name; + content = data; + } + + String getFileName() { + return fileName; + } + + byte[] getContent() { + return content; + } + + String getType() { + return type; + } + + } +} diff --git a/projects/CitiSim/Android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/projects/CitiSim/Android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100755 index 00000000..1f6bb290 --- /dev/null +++ b/projects/CitiSim/Android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/projects/CitiSim/Android/app/src/main/res/drawable/account.png b/projects/CitiSim/Android/app/src/main/res/drawable/account.png new file mode 100755 index 0000000000000000000000000000000000000000..49dc302b7bc38725940374bae462027ba9a49f05 GIT binary patch literal 5486 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 literal 0 HcmV?d00001 diff --git a/projects/CitiSim/Android/app/src/main/res/drawable/buttonshape.xml b/projects/CitiSim/Android/app/src/main/res/drawable/buttonshape.xml new file mode 100755 index 00000000..a27d63d8 --- /dev/null +++ b/projects/CitiSim/Android/app/src/main/res/drawable/buttonshape.xml @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/projects/CitiSim/Android/app/src/main/res/drawable/camera.png b/projects/CitiSim/Android/app/src/main/res/drawable/camera.png new file mode 100755 index 0000000000000000000000000000000000000000..cd7f07522e6001d920360a1c73ca9d2d28fcf963 GIT binary patch literal 3720 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 literal 0 HcmV?d00001 diff --git a/projects/CitiSim/Android/app/src/main/res/drawable/camera2.png b/projects/CitiSim/Android/app/src/main/res/drawable/camera2.png new file mode 100755 index 0000000000000000000000000000000000000000..500c573e24cae7265858caa5b5bf2f26d39dd993 GIT binary patch literal 2341 zcmaJ@c|6nqAD`^wnAu8OA~E`@nWM~2s->YYM>&#XWkeEkH&tTAy$d zdFF4Gk`UQix4J@+6AN>)Iu5EERGJed;EOmr90*i@TV~@tAj+jftj~slK(K%RRBpZ6qO1I~OpS~-ULH_qg=JL)eaaS8F1d32pGoLX0j!Jk7JAyP z>3EI}>otOi%)vZ#9MrU+HYRyETsd9ml-PY3FHFJeqtEp}U`0R554Zye zFtAlMlGf&ZWMm*kkvOybY{(WhPXlzp|U&-Q7_@!Pj?2Q!jXfX653bOQA_u zixfI_{el{Fxx1%xlRC+ZLt_Eb-dI8rmt~mhTEqukQuu} zY1PrbKGE#mo`#r42IO^fLyfsl{ZgWVo{5zJ6O2=)e3|;27Wr~cr8Vx_mX7DtzXWa> zh|c05VCfMG;m{$Zg2c8MWM5w`e_VB$RX}?-(J}={aR?Q>Qk~L~6X;l3~QJ|2@*? z+JaKL0N^DnkR^OV$rSeBM_y!{y!MtnAT5>sEtYqoU{`DGD|$Hy2z4?Uhey9xo`_c_ zN6s`)WCuEcG{Tniw;6Zgr(nhnwNwZalgr_1G*H-nRhI& z(HJw>Ou%FnnkhBJefwE8?K>X~!^0GTyvnAl1tF^1x?(_I2-jD|{`E}d%aVgoY+8B= zYN!8pM#7IMS=pg0>>`v|I?q!fmZpmBWmtB-f)Fx_><{m$dfQBvk5D4c|VrlmOAYGZti9g>X?M61Ros6;aob1i;{pz zS$D4_;*vRnggfxs)pRx{v0V$&pr+a9=9p{#36I-ls4osh`p!<4_bVf6p@8&b-8Yf4 z%io-!o{}_|`685Nz1X6{^2AR&oG>zt3-de|>TMW#rF@nbtdzgPuR{4G%uE02O=?_v zRtXpl!|3(e?{vuA+XFK*y^n7&%IZ~#L6B~TqK)?gc|`&-CRaCuLW-7fs8&DEucT7a z_XMR#_?-4e@H8Z!(cpl>qwCY7$g$g`Li-BW?tVvkAT(ql=*gQYkCmMKRt}N>pAuAj zp<_gz#2lvN_SJqW#n=Sil-~1q1I^_6d>~(7>yF25QzLutX=K%iV?C|h_f(8cE-&Ua zCR4xw+)*b5N_^t43#GaEs+}8cN`iAT(0f-;KOa&Y9?kDCy!zk{#n!=;XwM3I(tI#M z#WAzz!|pCUlXr2UA?-A;7Sv&hJT!0nR@>Qt8|-omtzM;E9Oe?y@a;_0(Yn11!Un(!xFXzYJ1>_nl| z4)NpfWtXS{!Wa=Q>^6tFuyu(O%yQ0e+7TN9v4Qj}^DlEFQs;FeND?t;gcJN}V_4JE ztSPq^&(Nb^5E{uscXx(^Tz@Swoqa!BM}6OFFDw7~0d{y-ca-5HW#l($?P9Z4Zw({S z&zJ@MJWn^v`Z{@k>WB0x+rw)0IDumKDQwG-Mr6{B<-1Qb&zI3#J%mYD-}}k>=eOMy zoZ{3ExF1{Iy^w3}%va{v=NlAx^51ot(L+pZ191J`SuaY}-xNz`y}&HI$SyD}L(M32 zKBlghk%_A9u3Uv`Go!$y@?Bjc=RZ|v1z-M@xDsd8?ARRj>{F(ZX1nvvLOhDJF!Ja_ zOIG>l{JzE0@wL#+9XCD6&1FnSonADq(Usemeevi7B#>-mcP^L8LQ%?_XGPXKKsyG0^TJr4N|KZz%ts5?%i F{1=(jF17#w literal 0 HcmV?d00001 diff --git a/projects/CitiSim/Android/app/src/main/res/drawable/ic_launcher_background.xml b/projects/CitiSim/Android/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100755 index 00000000..0d025f9b --- /dev/null +++ b/projects/CitiSim/Android/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/projects/CitiSim/Android/app/src/main/res/drawable/logo.png b/projects/CitiSim/Android/app/src/main/res/drawable/logo.png new file mode 100755 index 0000000000000000000000000000000000000000..a1fa010a8f69bf11a2c84695745c22b57600b3bf GIT binary patch literal 85819 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 literal 0 HcmV?d00001 diff --git a/projects/CitiSim/Android/app/src/main/res/drawable/settings.png b/projects/CitiSim/Android/app/src/main/res/drawable/settings.png new file mode 100755 index 0000000000000000000000000000000000000000..62dc6585664ced8a7e27d1ee1fed9f4208522eca GIT binary patch literal 33635 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 mapX(G%*VAF+k@Ue27qvIGdp9nPtbNna$RZA|=~ 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 literal 0 HcmV?d00001 diff --git a/projects/CitiSim/Android/app/src/main/res/layout/activity_change_pass.xml b/projects/CitiSim/Android/app/src/main/res/layout/activity_change_pass.xml new file mode 100644 index 00000000..b569d373 --- /dev/null +++ b/projects/CitiSim/Android/app/src/main/res/layout/activity_change_pass.xml @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + +