From ae21d40f9ab7144728900b77d121764602f62a60 Mon Sep 17 00:00:00 2001 From: Neto Date: Sun, 14 Jun 2020 22:17:51 -0300 Subject: [PATCH 01/36] Criado estrutura inicial [TesteAndroidV2] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Adicionado estrutura inicial da tela de login seguindo a arquitetura Clean Code Android - Foi utilizado o gerador de código disponível no repositório: https://github.com/kmmraj/androidcleancode-generator, para facilitar a codificação --- .gitignore | 53 ++++++ LICENSE | 21 +++ app/.gitignore | 1 + app/build.gradle | 37 ++++ app/gradlew | 172 ++++++++++++++++++ app/gradlew.bat | 84 +++++++++ app/src/main/AndroidManifest.xml | 20 ++ .../loginScreen/LoginActivity.java | 44 +++++ .../loginScreen/LoginConfigurator.java | 27 +++ .../loginScreen/LoginInteractor.java | 33 ++++ .../loginScreen/LoginModel.java | 17 ++ .../loginScreen/LoginPresenter.java | 32 ++++ .../loginScreen/LoginRouter.java | 48 +++++ .../loginScreen/LoginWorker.java | 9 + build.gradle | 27 +++ gradle.properties | 18 ++ gradlew | 172 ++++++++++++++++++ gradlew.bat | 84 +++++++++ settings.gradle | 1 + 19 files changed, 900 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 app/.gitignore create mode 100644 app/build.gradle create mode 100644 app/gradlew create mode 100644 app/gradlew.bat create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/java/com/testeandroidv2/loginScreen/LoginActivity.java create mode 100644 app/src/main/java/com/testeandroidv2/loginScreen/LoginConfigurator.java create mode 100644 app/src/main/java/com/testeandroidv2/loginScreen/LoginInteractor.java create mode 100644 app/src/main/java/com/testeandroidv2/loginScreen/LoginModel.java create mode 100644 app/src/main/java/com/testeandroidv2/loginScreen/LoginPresenter.java create mode 100644 app/src/main/java/com/testeandroidv2/loginScreen/LoginRouter.java create mode 100644 app/src/main/java/com/testeandroidv2/loginScreen/LoginWorker.java create mode 100644 build.gradle create mode 100644 gradle.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..b3ad92a0f --- /dev/null +++ b/.gitignore @@ -0,0 +1,53 @@ +build/ +projectFilesBackup/ +gradle/ +.gradle/ +.idea/** +.notidea/ +*.DS_Store +*.iml +app/build/** + + +# built application files +*.apk +*.ap_ + +# files for the dex VM +*.dex + +# Java class files +*.class + +# built native files (uncomment if you build your own) +# *.o +# *.so + +# generated files +bin/ +gen/ + +# Ignore gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ + +# Eclipse Metadata +.metadata/ + +# Mac OS X clutter +*.DS_Store + +# Windows clutter +Thumbs.db + +# Intellij IDEA (see https://intellij-support.jetbrains.com/entries/23393067) +.idea/workspace.xml +.idea/tasks.xml +.idea/datasources.xml +.idea/dataSources.ids diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..1d233faca --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Mohanraj K.M. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 000000000..796b96d1c --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 000000000..704c8d8f6 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,37 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 28 + buildToolsVersion '28.0.3' + + defaultConfig { + applicationId "com.mycompany.flightstatuslistview" + minSdkVersion 19 + targetSdkVersion 28 + versionCode 1 + versionName "1.0" + vectorDrawables.useSupportLibrary = true + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + + testOptions { + unitTests { + includeAndroidResources = true + } + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + testImplementation 'junit:junit:4.12' + // testImplementation 'org.robolectric:shadows-support-v4:3.0' + // testImplementation 'org.mockito:mockito-core:2.18.3' + implementation 'com.android.support:appcompat-v7:28.0.0' + implementation 'com.android.support.constraint:constraint-layout:1.1.3' +} + diff --git a/app/gradlew b/app/gradlew new file mode 100644 index 000000000..cccdd3d51 --- /dev/null +++ b/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/app/gradlew.bat b/app/gradlew.bat new file mode 100644 index 000000000..f9553162f --- /dev/null +++ b/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/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 000000000..28d9bb224 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/testeandroidv2/loginScreen/LoginActivity.java b/app/src/main/java/com/testeandroidv2/loginScreen/LoginActivity.java new file mode 100644 index 000000000..b9744a224 --- /dev/null +++ b/app/src/main/java/com/testeandroidv2/loginScreen/LoginActivity.java @@ -0,0 +1,44 @@ +package com.testeandroidv2.loginScreen; + +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.util.Log; + +import com.testeandroidv2.R; + + +interface LoginActivityInput { + public void displayLoginData(LoginViewModel viewModel); +} + + +public class LoginActivity extends AppCompatActivity + implements LoginActivityInput { + + public static String TAG = LoginActivity.class.getSimpleName(); + LoginInteractorInput output; + LoginRouter router; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + //do the setup + setContentView(R.layout.login_screen); + getSupportActionBar().hide(); + + LoginConfigurator.INSTANCE.configure(this); + LoginRequest aLoginRequest = new LoginRequest(); + //populate the request + + + output.fetchLoginData(aLoginRequest); + // Do other work + } + + + @Override + public void displayLoginData(LoginViewModel viewModel) { + Log.e(TAG, "displayLoginData() called with: viewModel = [" + viewModel + "]"); + // Deal with the data + } +} diff --git a/app/src/main/java/com/testeandroidv2/loginScreen/LoginConfigurator.java b/app/src/main/java/com/testeandroidv2/loginScreen/LoginConfigurator.java new file mode 100644 index 000000000..b08831f41 --- /dev/null +++ b/app/src/main/java/com/testeandroidv2/loginScreen/LoginConfigurator.java @@ -0,0 +1,27 @@ +package com.testeandroidv2.loginScreen; + +import java.lang.ref.WeakReference; + + +public enum LoginConfigurator { + INSTANCE; + + public void configure(LoginActivity activity) { + + LoginRouter router = new LoginRouter(); + router.activity = new WeakReference<>(activity); + + LoginPresenter presenter = new LoginPresenter(); + presenter.output = new WeakReference(activity); + + LoginInteractor interactor = new LoginInteractor(); + interactor.output = presenter; + + if (activity.output == null) { + activity.output = interactor; + } + if (activity.router == null) { + activity.router = router; + } + } +} diff --git a/app/src/main/java/com/testeandroidv2/loginScreen/LoginInteractor.java b/app/src/main/java/com/testeandroidv2/loginScreen/LoginInteractor.java new file mode 100644 index 000000000..7d5e56943 --- /dev/null +++ b/app/src/main/java/com/testeandroidv2/loginScreen/LoginInteractor.java @@ -0,0 +1,33 @@ +package com.testeandroidv2.loginScreen; + +import android.util.Log; + +interface LoginInteractorInput { + public void fetchLoginData(LoginRequest request); +} + + +public class LoginInteractor implements LoginInteractorInput { + + public static String TAG = LoginInteractor.class.getSimpleName(); + public LoginPresenterInput output; + public LoginWorkerInput aLoginWorkerInput; + + public LoginWorkerInput getLoginWorkerInput() { + if (aLoginWorkerInput == null) return new LoginWorker(); + return aLoginWorkerInput; + } + + public void setLoginWorkerInput(LoginWorkerInput aLoginWorkerInput) { + this.aLoginWorkerInput = aLoginWorkerInput; + } + + @Override + public void fetchLoginData(LoginRequest request) { + aLoginWorkerInput = getLoginWorkerInput(); + LoginResponse LoginResponse = new LoginResponse(); + // Call the workers + + output.presentLoginData(LoginResponse); + } +} diff --git a/app/src/main/java/com/testeandroidv2/loginScreen/LoginModel.java b/app/src/main/java/com/testeandroidv2/loginScreen/LoginModel.java new file mode 100644 index 000000000..7a42ad6fc --- /dev/null +++ b/app/src/main/java/com/testeandroidv2/loginScreen/LoginModel.java @@ -0,0 +1,17 @@ +package com.testeandroidv2.loginScreen; + +public class LoginModel { +} + +class LoginViewModel { + //filter to have only the needed data + +} + +class LoginRequest { + +} + +class LoginResponse { + +} diff --git a/app/src/main/java/com/testeandroidv2/loginScreen/LoginPresenter.java b/app/src/main/java/com/testeandroidv2/loginScreen/LoginPresenter.java new file mode 100644 index 000000000..b0516f342 --- /dev/null +++ b/app/src/main/java/com/testeandroidv2/loginScreen/LoginPresenter.java @@ -0,0 +1,32 @@ +package com.testeandroidv2.loginScreen; + +import android.support.annotation.NonNull; +import android.util.Log; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.concurrent.TimeUnit; + +interface LoginPresenterInput { + public void presentLoginData(LoginResponse response); +} + + +public class LoginPresenter implements LoginPresenterInput { + + public static String TAG = LoginPresenter.class.getSimpleName(); + + //weak var output: HomePresenterOutput! + public WeakReference output; + + + @Override + public void presentLoginData(LoginResponse response) { + // Log.e(TAG, "presentLoginData() called with: response = [" + response + "]"); + //Do your decoration or filtering here + + } + + +} diff --git a/app/src/main/java/com/testeandroidv2/loginScreen/LoginRouter.java b/app/src/main/java/com/testeandroidv2/loginScreen/LoginRouter.java new file mode 100644 index 000000000..fc346ca30 --- /dev/null +++ b/app/src/main/java/com/testeandroidv2/loginScreen/LoginRouter.java @@ -0,0 +1,48 @@ +package com.testeandroidv2.loginScreen; + +import android.content.Intent; +import android.support.annotation.NonNull; +import android.view.View; +import android.widget.AdapterView; + +import java.lang.ref.WeakReference; + + +interface LoginRouterInput { + public Intent navigateToSomeWhere(int position); + + public void passDataToNextScene(int position, Intent intent); +} + +public class LoginRouter implements LoginRouterInput, AdapterView.OnItemClickListener { + + public static String TAG = LoginRouter.class.getSimpleName(); + public WeakReference activity; + + + @NonNull + @Override + public Intent navigateToSomeWhere(int position) { + //Based on the position or someother data decide what is the next scene + //Intent intent = new Intent(activity.get(),NextActivity.class); + //return intent; + return null; + } + + @Override + public void passDataToNextScene(int position, Intent intent) { + //Based on the position or someother data decide the data for the next scene + // LoginModel flight = activity.get().listOfSomething.get(position); + // intent.putExtra("flight",flight); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + // Log.e(TAG, "onItemClick() called with: parent = [" + parent + "], view = [" + view + "], position = [" + position + "], id = [" + id + "]"); + Intent intent = navigateToSomeWhere(position); + passDataToNextScene(position, intent); + activity.get().startActivity(intent); + } + + +} diff --git a/app/src/main/java/com/testeandroidv2/loginScreen/LoginWorker.java b/app/src/main/java/com/testeandroidv2/loginScreen/LoginWorker.java new file mode 100644 index 000000000..a678ce801 --- /dev/null +++ b/app/src/main/java/com/testeandroidv2/loginScreen/LoginWorker.java @@ -0,0 +1,9 @@ +package com.testeandroidv2.loginScreen; + +interface LoginWorkerInput { + //Define needed interfaces +} + +public class LoginWorker implements LoginWorkerInput { + +} diff --git a/build.gradle b/build.gradle new file mode 100644 index 000000000..ecbdf61f2 --- /dev/null +++ b/build.gradle @@ -0,0 +1,27 @@ +buildscript { + repositories { + jcenter() + google() + } + dependencies { + classpath 'com.android.tools.build:gradle:3.2.0' + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +allprojects { + String osName = System.getProperty("os.name").toLowerCase(); + if (osName.contains("windows")) { + buildDir = "C:/tmp/${rootProject.name}/${project.name}" + } + repositories { + jcenter() + google() + } +} + +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 000000000..1d3591c8a --- /dev/null +++ b/gradle.properties @@ -0,0 +1,18 @@ +# 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. +# Default value: -Xmx10248m -XX:MaxPermSize=256m +# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true \ No newline at end of file diff --git a/gradlew b/gradlew new file mode 100644 index 000000000..cccdd3d51 --- /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 000000000..f9553162f --- /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/settings.gradle b/settings.gradle new file mode 100644 index 000000000..e7b4def49 --- /dev/null +++ b/settings.gradle @@ -0,0 +1 @@ +include ':app' From fb2ffdec1c7544ea3ab797d801adf7ac3175b29f Mon Sep 17 00:00:00 2001 From: Neto Date: Sun, 14 Jun 2020 22:20:42 -0300 Subject: [PATCH 02/36] =?UTF-8?q?Criado=20estrutura=20de=20teste=20unit?= =?UTF-8?q?=C3=A1rio=20para=20loginScreen=20[TesteAndroidV2]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Adicionado teste unitário utilizando JUnit --- .../loginScreen/LoginActivityUnitTest.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 app/src/test/java/com/testeandroidv2/loginScreen/LoginActivityUnitTest.java diff --git a/app/src/test/java/com/testeandroidv2/loginScreen/LoginActivityUnitTest.java b/app/src/test/java/com/testeandroidv2/loginScreen/LoginActivityUnitTest.java new file mode 100644 index 000000000..10acb6b73 --- /dev/null +++ b/app/src/test/java/com/testeandroidv2/loginScreen/LoginActivityUnitTest.java @@ -0,0 +1,21 @@ +package com.testeandroidv2.loginScreen; + +import junit.framework.Assert; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class LoginActivityUnitTest { + + @Test + public void loginActivity_ShouldNot_Null(){ + // Given + LoginActivity activity = new LoginActivity(); + // When + + // Then + Assert.assertNotNull(activity); + } +} From 2e4f9257633d727454a48b18683b2e1f4f4ada89 Mon Sep 17 00:00:00 2001 From: Neto Date: Sun, 14 Jun 2020 23:18:49 -0300 Subject: [PATCH 03/36] Criado tela de login [TesteAndroidV2] - Adicionado xml da tela de login - Adicionado style do editText customizado - Adicionado font helvetica neue --- app/src/main/AndroidManifest.xml | 2 +- .../loginScreen/LoginActivity.java | 2 - .../main/res/drawable/custom_edit_text_bg.xml | 8 +++ app/src/main/res/drawable/login_button_bg.xml | 6 ++ app/src/main/res/drawable/logo.png | Bin 0 -> 4662 bytes app/src/main/res/font/helveticaneue.ttf | Bin 0 -> 93740 bytes app/src/main/res/layout/login_screen.xml | 61 ++++++++++++++++++ app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3418 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2206 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4842 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7718 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10486 bytes app/src/main/res/plan_landing.svg | 3 + app/src/main/res/plan_takeoff.svg | 3 + app/src/main/res/values-w820dp/dimens.xml | 6 ++ app/src/main/res/values/colors.xml | 13 ++++ app/src/main/res/values/dimens.xml | 5 ++ app/src/main/res/values/ids.xml | 10 +++ app/src/main/res/values/strings.xml | 7 ++ app/src/main/res/values/styles.xml | 9 +++ 20 files changed, 132 insertions(+), 3 deletions(-) create mode 100644 app/src/main/res/drawable/custom_edit_text_bg.xml create mode 100644 app/src/main/res/drawable/login_button_bg.xml create mode 100644 app/src/main/res/drawable/logo.png create mode 100644 app/src/main/res/font/helveticaneue.ttf create mode 100644 app/src/main/res/layout/login_screen.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 app/src/main/res/plan_landing.svg create mode 100644 app/src/main/res/plan_takeoff.svg create mode 100644 app/src/main/res/values-w820dp/dimens.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/ids.xml create mode 100644 app/src/main/res/values/strings.xml create mode 100644 app/src/main/res/values/styles.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 28d9bb224..828c9c86d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,7 +7,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" - android:theme="@style/Theme.AppCompat.Light"> + android:theme="@style/Theme.AppCompat.Light.NoActionBar"> diff --git a/app/src/main/java/com/testeandroidv2/loginScreen/LoginActivity.java b/app/src/main/java/com/testeandroidv2/loginScreen/LoginActivity.java index b9744a224..6f55a08b9 100644 --- a/app/src/main/java/com/testeandroidv2/loginScreen/LoginActivity.java +++ b/app/src/main/java/com/testeandroidv2/loginScreen/LoginActivity.java @@ -22,9 +22,7 @@ public class LoginActivity extends AppCompatActivity @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - //do the setup setContentView(R.layout.login_screen); - getSupportActionBar().hide(); LoginConfigurator.INSTANCE.configure(this); LoginRequest aLoginRequest = new LoginRequest(); diff --git a/app/src/main/res/drawable/custom_edit_text_bg.xml b/app/src/main/res/drawable/custom_edit_text_bg.xml new file mode 100644 index 000000000..3419eb92f --- /dev/null +++ b/app/src/main/res/drawable/custom_edit_text_bg.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/login_button_bg.xml b/app/src/main/res/drawable/login_button_bg.xml new file mode 100644 index 000000000..34070d4cb --- /dev/null +++ b/app/src/main/res/drawable/login_button_bg.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/logo.png b/app/src/main/res/drawable/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..66bdc8d5d4f72d641ee73093c3b1d8ff34506f41 GIT binary patch literal 4662 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/font/helveticaneue.ttf b/app/src/main/res/font/helveticaneue.ttf new file mode 100644 index 0000000000000000000000000000000000000000..cac3b75d83371c3d337d70508be96a24690d8064 GIT binary patch literal 93740 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 z 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 + + + + + + + + +