diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..5b11a39d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,33 @@
+#built application files
+*.apk
+*.ap_
+
+# files for the dex VM
+*.dex
+
+# Java class files
+*.class
+
+# generated files
+bin/
+gen/
+
+# Local configuration file (sdk path, etc)
+local.properties
+
+# Windows thumbnail db
+Thumbs.db
+
+# OSX files
+.DS_Store
+
+# Eclipse project files
+.classpath
+.project
+
+# Android Studio
+*.iml
+.idea
+#.idea/workspace.xml - remove # and delete .idea if it better suit your needs.
+.gradle
+build/
diff --git a/exercises/5_OOP-and-Intents/MyApplication/.gitignore b/exercises/5_OOP-and-Intents/MyApplication/.gitignore
new file mode 100644
index 00000000..afbdab33
--- /dev/null
+++ b/exercises/5_OOP-and-Intents/MyApplication/.gitignore
@@ -0,0 +1,6 @@
+.gradle
+/local.properties
+/.idea/workspace.xml
+/.idea/libraries
+.DS_Store
+/build
diff --git a/exercises/5_OOP-and-Intents/MyApplication/app/.gitignore b/exercises/5_OOP-and-Intents/MyApplication/app/.gitignore
new file mode 100644
index 00000000..796b96d1
--- /dev/null
+++ b/exercises/5_OOP-and-Intents/MyApplication/app/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/exercises/5_OOP-and-Intents/MyApplication/app/build.gradle b/exercises/5_OOP-and-Intents/MyApplication/app/build.gradle
new file mode 100644
index 00000000..cfc7d3f2
--- /dev/null
+++ b/exercises/5_OOP-and-Intents/MyApplication/app/build.gradle
@@ -0,0 +1,25 @@
+apply plugin: 'com.android.application'
+
+android {
+ compileSdkVersion 22
+ buildToolsVersion "21.1.2"
+
+ defaultConfig {
+ applicationId "nyc.c4q.ramonaharrison.myapplication"
+ minSdkVersion 15
+ targetSdkVersion 22
+ versionCode 1
+ versionName "1.0"
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+}
+
+dependencies {
+ compile fileTree(dir: 'libs', include: ['*.jar'])
+ compile 'com.android.support:appcompat-v7:22.1.0'
+}
diff --git a/exercises/5_OOP-and-Intents/MyApplication/app/proguard-rules.pro b/exercises/5_OOP-and-Intents/MyApplication/app/proguard-rules.pro
new file mode 100644
index 00000000..523f994c
--- /dev/null
+++ b/exercises/5_OOP-and-Intents/MyApplication/app/proguard-rules.pro
@@ -0,0 +1,17 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in /Users/mona/Library/Android/sdk/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# 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 *;
+#}
diff --git a/exercises/5_OOP-and-Intents/MyApplication/app/src/androidTest/java/nyc/c4q/ramonaharrison/myapplication/ApplicationTest.java b/exercises/5_OOP-and-Intents/MyApplication/app/src/androidTest/java/nyc/c4q/ramonaharrison/myapplication/ApplicationTest.java
new file mode 100644
index 00000000..ad25f9ce
--- /dev/null
+++ b/exercises/5_OOP-and-Intents/MyApplication/app/src/androidTest/java/nyc/c4q/ramonaharrison/myapplication/ApplicationTest.java
@@ -0,0 +1,13 @@
+package nyc.c4q.ramonaharrison.myapplication;
+
+import android.app.Application;
+import android.test.ApplicationTestCase;
+
+/**
+ * Testing Fundamentals
+ */
+public class ApplicationTest extends ApplicationTestCase {
+ public ApplicationTest() {
+ super(Application.class);
+ }
+}
\ No newline at end of file
diff --git a/exercises/5_OOP-and-Intents/MyApplication/app/src/main/AndroidManifest.xml b/exercises/5_OOP-and-Intents/MyApplication/app/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..b422bfde
--- /dev/null
+++ b/exercises/5_OOP-and-Intents/MyApplication/app/src/main/AndroidManifest.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/exercises/5_OOP-and-Intents/MyApplication/app/src/main/java/nyc/c4q/ramonaharrison/myapplication/MainActivity.java b/exercises/5_OOP-and-Intents/MyApplication/app/src/main/java/nyc/c4q/ramonaharrison/myapplication/MainActivity.java
new file mode 100644
index 00000000..34c77114
--- /dev/null
+++ b/exercises/5_OOP-and-Intents/MyApplication/app/src/main/java/nyc/c4q/ramonaharrison/myapplication/MainActivity.java
@@ -0,0 +1,39 @@
+package nyc.c4q.ramonaharrison.myapplication;
+
+import android.support.v7.app.ActionBarActivity;
+import android.os.Bundle;
+import android.view.Menu;
+import android.view.MenuItem;
+
+
+public class MainActivity extends ActionBarActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+ }
+
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ // Inflate the menu; this adds items to the action bar if it is present.
+ getMenuInflater().inflate(R.menu.menu_main, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ // Handle action bar item clicks here. The action bar will
+ // automatically handle clicks on the Home/Up button, so long
+ // as you specify a parent activity in AndroidManifest.xml.
+ int id = item.getItemId();
+
+ //noinspection SimplifiableIfStatement
+ if (id == R.id.action_settings) {
+ return true;
+ }
+
+ return super.onOptionsItemSelected(item);
+ }
+}
diff --git a/exercises/5_OOP-and-Intents/MyApplication/app/src/main/java/nyc/c4q/ramonaharrison/myapplication/MainActivity2Activity.java b/exercises/5_OOP-and-Intents/MyApplication/app/src/main/java/nyc/c4q/ramonaharrison/myapplication/MainActivity2Activity.java
new file mode 100644
index 00000000..ab409eec
--- /dev/null
+++ b/exercises/5_OOP-and-Intents/MyApplication/app/src/main/java/nyc/c4q/ramonaharrison/myapplication/MainActivity2Activity.java
@@ -0,0 +1,39 @@
+package nyc.c4q.ramonaharrison.myapplication;
+
+import android.support.v7.app.ActionBarActivity;
+import android.os.Bundle;
+import android.view.Menu;
+import android.view.MenuItem;
+
+
+public class MainActivity2Activity extends ActionBarActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main_activity2);
+ }
+
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ // Inflate the menu; this adds items to the action bar if it is present.
+ getMenuInflater().inflate(R.menu.menu_main_activity2, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ // Handle action bar item clicks here. The action bar will
+ // automatically handle clicks on the Home/Up button, so long
+ // as you specify a parent activity in AndroidManifest.xml.
+ int id = item.getItemId();
+
+ //noinspection SimplifiableIfStatement
+ if (id == R.id.action_settings) {
+ return true;
+ }
+
+ return super.onOptionsItemSelected(item);
+ }
+}
diff --git a/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/layout/activity_main.xml b/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/layout/activity_main.xml
new file mode 100644
index 00000000..f7158b81
--- /dev/null
+++ b/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/layout/activity_main.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
diff --git a/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/layout/activity_main_activity2.xml b/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/layout/activity_main_activity2.xml
new file mode 100644
index 00000000..577771c2
--- /dev/null
+++ b/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/layout/activity_main_activity2.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
diff --git a/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/menu/menu_main.xml b/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/menu/menu_main.xml
new file mode 100644
index 00000000..b1cb9081
--- /dev/null
+++ b/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/menu/menu_main.xml
@@ -0,0 +1,6 @@
+
diff --git a/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/menu/menu_main_activity2.xml b/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/menu/menu_main_activity2.xml
new file mode 100644
index 00000000..2c7bdef5
--- /dev/null
+++ b/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/menu/menu_main_activity2.xml
@@ -0,0 +1,7 @@
+
diff --git a/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/mipmap-hdpi/ic_launcher.png b/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 00000000..cde69bcc
Binary files /dev/null and b/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/mipmap-mdpi/ic_launcher.png b/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 00000000..c133a0cb
Binary files /dev/null and b/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 00000000..bfa42f0e
Binary files /dev/null and b/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 00000000..324e72cd
Binary files /dev/null and b/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/values-w820dp/dimens.xml b/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/values-w820dp/dimens.xml
new file mode 100644
index 00000000..63fc8164
--- /dev/null
+++ b/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/values-w820dp/dimens.xml
@@ -0,0 +1,6 @@
+
+
+ 64dp
+
diff --git a/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/values/dimens.xml b/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/values/dimens.xml
new file mode 100644
index 00000000..47c82246
--- /dev/null
+++ b/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/values/dimens.xml
@@ -0,0 +1,5 @@
+
+
+ 16dp
+ 16dp
+
diff --git a/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/values/strings.xml b/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/values/strings.xml
new file mode 100644
index 00000000..bc0bb531
--- /dev/null
+++ b/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/values/strings.xml
@@ -0,0 +1,7 @@
+
+ My Application
+
+ Hello world!
+ Settings
+ MainActivity2Activity
+
diff --git a/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/values/styles.xml b/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/values/styles.xml
new file mode 100644
index 00000000..766ab993
--- /dev/null
+++ b/exercises/5_OOP-and-Intents/MyApplication/app/src/main/res/values/styles.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
diff --git a/exercises/5_OOP-and-Intents/MyApplication/build.gradle b/exercises/5_OOP-and-Intents/MyApplication/build.gradle
new file mode 100644
index 00000000..d3ff69d6
--- /dev/null
+++ b/exercises/5_OOP-and-Intents/MyApplication/build.gradle
@@ -0,0 +1,19 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
+buildscript {
+ repositories {
+ jcenter()
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle:1.1.0'
+
+ // NOTE: Do not place your application dependencies here; they belong
+ // in the individual module build.gradle files
+ }
+}
+
+allprojects {
+ repositories {
+ jcenter()
+ }
+}
diff --git a/exercises/5_OOP-and-Intents/MyApplication/gradle.properties b/exercises/5_OOP-and-Intents/MyApplication/gradle.properties
new file mode 100644
index 00000000..1d3591c8
--- /dev/null
+++ b/exercises/5_OOP-and-Intents/MyApplication/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/exercises/5_OOP-and-Intents/MyApplication/gradle/wrapper/gradle-wrapper.jar b/exercises/5_OOP-and-Intents/MyApplication/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 00000000..8c0fb64a
Binary files /dev/null and b/exercises/5_OOP-and-Intents/MyApplication/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/exercises/5_OOP-and-Intents/MyApplication/gradle/wrapper/gradle-wrapper.properties b/exercises/5_OOP-and-Intents/MyApplication/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 00000000..0c71e760
--- /dev/null
+++ b/exercises/5_OOP-and-Intents/MyApplication/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Wed Apr 10 15:27:10 PDT 2013
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip
diff --git a/exercises/5_OOP-and-Intents/MyApplication/gradlew b/exercises/5_OOP-and-Intents/MyApplication/gradlew
new file mode 100755
index 00000000..91a7e269
--- /dev/null
+++ b/exercises/5_OOP-and-Intents/MyApplication/gradlew
@@ -0,0 +1,164 @@
+#!/usr/bin/env bash
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# 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
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+esac
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched.
+if $cygwin ; then
+ [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+fi
+
+# 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\"`/" >&-
+APP_HOME="`pwd -P`"
+cd "$SAVED" >&-
+
+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" ] ; 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"`
+
+ # 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
+
+# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
+function splitJvmOpts() {
+ JVM_OPTS=("$@")
+}
+eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
+JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+
+exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/exercises/5_OOP-and-Intents/MyApplication/gradlew.bat b/exercises/5_OOP-and-Intents/MyApplication/gradlew.bat
new file mode 100644
index 00000000..aec99730
--- /dev/null
+++ b/exercises/5_OOP-and-Intents/MyApplication/gradlew.bat
@@ -0,0 +1,90 @@
+@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
+
+@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=
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@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 Windowz variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+if "%@eval[2+2]" == "4" goto 4NT_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=%*
+goto execute
+
+:4NT_args
+@rem Get arguments from the 4NT Shell from JP Software
+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/exercises/5_OOP-and-Intents/MyApplication/settings.gradle b/exercises/5_OOP-and-Intents/MyApplication/settings.gradle
new file mode 100644
index 00000000..e7b4def4
--- /dev/null
+++ b/exercises/5_OOP-and-Intents/MyApplication/settings.gradle
@@ -0,0 +1 @@
+include ':app'
diff --git a/exercises/5_OOP-and-Intents/MyPhone/app/src/main/AndroidManifest.xml b/exercises/5_OOP-and-Intents/MyPhone/app/src/main/AndroidManifest.xml
index 832d95e8..05c34d63 100644
--- a/exercises/5_OOP-and-Intents/MyPhone/app/src/main/AndroidManifest.xml
+++ b/exercises/5_OOP-and-Intents/MyPhone/app/src/main/AndroidManifest.xml
@@ -12,11 +12,27 @@
android:label="@string/app_name" >
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/exercises/5_OOP-and-Intents/MyPhone/app/src/main/java/com/example/accesscode/myphone/DialerActivity.java b/exercises/5_OOP-and-Intents/MyPhone/app/src/main/java/com/example/accesscode/myphone/DialerActivity.java
index 09e62463..dd2fde56 100644
--- a/exercises/5_OOP-and-Intents/MyPhone/app/src/main/java/com/example/accesscode/myphone/DialerActivity.java
+++ b/exercises/5_OOP-and-Intents/MyPhone/app/src/main/java/com/example/accesscode/myphone/DialerActivity.java
@@ -1,6 +1,8 @@
package com.example.accesscode.myphone;
import android.app.Activity;
+import android.content.Intent;
+import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
@@ -27,7 +29,17 @@ public void onClick(View v) {
Use an implicit intent to open the user's phone app to call this number.
http://developer.android.com/guide/components/intents-common.html#Phone
*/
+ dialPhoneNumber(phoneNumber);
+
}
});
}
+
+ public void dialPhoneNumber(String phoneNumber) {
+ Intent intent = new Intent(Intent.ACTION_DIAL);
+ intent.setData(Uri.parse("tel:" + phoneNumber));
+ if (intent.resolveActivity(getPackageManager()) != null) {
+ startActivity(intent);
+ }
+ }
}
diff --git a/exercises/5_OOP-and-Intents/MyPhone/app/src/main/java/com/example/accesscode/myphone/EmailActivity.java b/exercises/5_OOP-and-Intents/MyPhone/app/src/main/java/com/example/accesscode/myphone/EmailActivity.java
index 24934ce9..df97313e 100644
--- a/exercises/5_OOP-and-Intents/MyPhone/app/src/main/java/com/example/accesscode/myphone/EmailActivity.java
+++ b/exercises/5_OOP-and-Intents/MyPhone/app/src/main/java/com/example/accesscode/myphone/EmailActivity.java
@@ -1,6 +1,7 @@
package com.example.accesscode.myphone;
import android.app.Activity;
+import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
@@ -9,6 +10,8 @@
/**
* Created by amyquispe on 4/30/15.
*/
+
+
public class EmailActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -20,7 +23,7 @@ protected void onCreate(Bundle savedInstanceState) {
mailButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- String myEmailAddress = ""; /* put your email address here */
+ String myEmailAddress = "ramonaliza@gmail.com"; /* put your email address here */
String subject = emailSubject.getText().toString();
String body = emailBody.getText().toString();
@@ -31,7 +34,41 @@ public void onClick(View v) {
http://developer.android.com/guide/components/intents-common.html#Email
*/
+ composeEmail(myEmailAddress, subject, body);
+
}
});
}
+
+ public void composeEmail(String address, String subject, String body) {
+
+ Intent intent = new Intent(Intent.ACTION_SENDTO);
+
+ intent.setType("text/html");
+ intent.putExtra(Intent.EXTRA_EMAIL, address);
+ intent.putExtra(Intent.EXTRA_SUBJECT, subject);
+ intent.putExtra(Intent.EXTRA_TEXT, body);
+
+ if (intent.resolveActivity(getPackageManager()) != null) {
+ startActivity(intent);
+ }
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ }
+
+ @Override
+ protected void onSaveInstanceState(Bundle savedInstanceState) {
+ super.onSaveInstanceState(savedInstanceState);
+
+ String subject = ((EditText)findViewById(R.id.email_subject)).getText().toString();
+ String body = ((EditText)findViewById(R.id.email_body)).getText().toString();
+ savedInstanceState.putString("subject", subject);
+ savedInstanceState.putString("body", body);
+
+ }
+
+
}
diff --git a/exercises/5_OOP-and-Intents/MyPhone/app/src/main/java/com/example/accesscode/myphone/MainActivity.java b/exercises/5_OOP-and-Intents/MyPhone/app/src/main/java/com/example/accesscode/myphone/MainActivity.java
index 2e0460c9..656aa879 100644
--- a/exercises/5_OOP-and-Intents/MyPhone/app/src/main/java/com/example/accesscode/myphone/MainActivity.java
+++ b/exercises/5_OOP-and-Intents/MyPhone/app/src/main/java/com/example/accesscode/myphone/MainActivity.java
@@ -1,7 +1,8 @@
package com.example.accesscode.myphone;
-import android.support.v7.app.ActionBarActivity;
+import android.content.Intent;
import android.os.Bundle;
+import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
@@ -25,6 +26,9 @@ public void onClick(View v) {
/*
Use Explicit Intent to start DialerActivity here.
*/
+ Intent dialerIntent = new Intent(getApplicationContext(), DialerActivity.class);
+ startActivity(dialerIntent);
+
}
});
/* EmailActivity */
@@ -36,6 +40,8 @@ public void onClick(View v) {
/*
Use Explicit Intent to start EmailActivity here.
*/
+ Intent emailIntent = new Intent(getApplicationContext(), EmailActivity.class);
+ startActivity(emailIntent);
}
});
diff --git a/exercises/5_OOP-and-Intents/git-exercise/src/nyc/c4q/ramonaharrison/Main.java b/exercises/5_OOP-and-Intents/git-exercise/src/nyc/c4q/ramonaharrison/Main.java
new file mode 100644
index 00000000..649e00f0
--- /dev/null
+++ b/exercises/5_OOP-and-Intents/git-exercise/src/nyc/c4q/ramonaharrison/Main.java
@@ -0,0 +1,59 @@
+package nyc.c4q.ramonaharrison;
+
+/**
+ * Access Code 2.1
+ * Ramona Harrison
+ * may9.java
+ */
+
+public class Main {
+
+ public static String reverse(String input) {
+ String reversed = "";
+
+ for (int i = input.length() - 1; i >= 0; i--) {
+ reversed += input.charAt(i);
+ }
+
+ return reversed;
+ }
+
+ public static String capitalize(String input) {
+ String inputs[] = input.split(" ");
+ String output = "";
+ for (int i = 0; i < inputs.length; i++) {
+ inputs[i] = inputs[i].substring(0, 1).toUpperCase() + inputs[i].substring(1);
+ output += inputs[i] + " ";
+ }
+ return output.trim();
+ }
+
+ public static String reverseWords(String input) {
+ String inputs[] = input.split(" ");
+ String output = "";
+ for (int i = inputs.length - 1; i >= 0; i--) {
+ //inputs[i] = inputs[i].substring(0, 1).toUpperCase() + inputs[i].substring(1);
+ output += inputs[i] + " ";
+ }
+ return output.trim();
+ }
+
+ public static int parseAddition(String numbers) {
+ int result = 0;
+ for (int i = 0; i < numbers.length(); i++) {
+ char c = numbers.charAt(i);
+ if (47 < c && c < 58) {
+ result += Integer.valueOf("" + c);
+ }
+ }
+ return result;
+ }
+
+ public static void main(String[] args) {
+ System.out.println(reverse("Ramona"));
+ System.out.println(reverseWords("i love java"));
+ System.out.println(capitalize("i love java"));
+ System.out.println(parseAddition("3 + (4 + 2)"));
+
+ }
+}
\ No newline at end of file
diff --git a/exercises/5_OOP-and-Intents/oop/src/Clarinet.java b/exercises/5_OOP-and-Intents/oop/src/Clarinet.java
new file mode 100644
index 00000000..86a21fc4
--- /dev/null
+++ b/exercises/5_OOP-and-Intents/oop/src/Clarinet.java
@@ -0,0 +1,26 @@
+/**
+ * Access Code 2.1
+ * Ramona Harrison
+ * Clarinet.java
+ *
+ * Create the concrete class Clarinet, which inherits from ReedInstrument.
+ * Implement whatever methods need to be implemented.
+ *
+ */
+
+public class Clarinet extends ReedInstrument{
+
+ @Override
+ public String play() {
+ return "brrrrrrrrrrrrrrrrrhhgggg";
+ }
+
+ public static void main(String[] args) {
+
+ Clarinet myClarinet = new Clarinet();
+ System.out.println(myClarinet.hasReed());
+ myClarinet.placeReed();
+ System.out.println(myClarinet.hasReed());
+
+ }
+}
diff --git a/exercises/5_OOP-and-Intents/oop/src/ClarinetPlayer.java b/exercises/5_OOP-and-Intents/oop/src/ClarinetPlayer.java
new file mode 100644
index 00000000..ca0ab0c5
--- /dev/null
+++ b/exercises/5_OOP-and-Intents/oop/src/ClarinetPlayer.java
@@ -0,0 +1,25 @@
+/**
+ * Access Code 2.1
+ * Ramona Harrison
+ * ClarinetPlayer.java
+ *
+ * Create the concrete class ClarinetPlayer, which extends Musician. The ClarinetPlayer constructor should
+ * take in a Clarinet, and save it in a field called myClarinet. Add a method toggle_reed, which puts a reed
+ * on the Clarinet if it doesn't have one, and takes the reed off it if does. Implement the play_instrument
+ * method such that if the instrument doesn't have a reed on, it returns null, and otherwise plays the
+ * instrument sound.
+ *
+ */
+
+public class ClarinetPlayer extends ReedPlayer {
+ Clarinet myClarinet;
+
+ public ClarinetPlayer() {
+
+ }
+
+ public ClarinetPlayer(Clarinet clarinet) {
+ this.myClarinet = clarinet;
+ }
+
+}
diff --git a/exercises/5_OOP-and-Intents/oop/src/ReedInstrument.java b/exercises/5_OOP-and-Intents/oop/src/ReedInstrument.java
new file mode 100644
index 00000000..1f4e8303
--- /dev/null
+++ b/exercises/5_OOP-and-Intents/oop/src/ReedInstrument.java
@@ -0,0 +1,29 @@
+/**
+ * Access Code 2.1
+ * Ramona Harrison
+ * ReedInstrument.java
+ *
+ * Create an abstract class ReedInstrument, which implements Instrument.
+ * A ReedInstrument needs a boolean field reed, which represents if the instrument
+ * currently has a reed in it. It also needs methods, has_reed which tells us if
+ * the instrument currently has a reed, place_reed, which puts a reed on the instrument,
+ * and remove_reed which removes the reed from the instrument.
+ *
+ */
+
+public abstract class ReedInstrument implements Instrument {
+ private boolean reed;
+
+ public boolean hasReed() {
+ return this.reed;
+ }
+
+ public void placeReed() {
+ this.reed = true;
+ }
+
+ public void removeReed() {
+ this.reed = false;
+ }
+
+}
diff --git a/exercises/5_OOP-and-Intents/oop/src/ReedPlayer.java b/exercises/5_OOP-and-Intents/oop/src/ReedPlayer.java
new file mode 100644
index 00000000..b8d00c1c
--- /dev/null
+++ b/exercises/5_OOP-and-Intents/oop/src/ReedPlayer.java
@@ -0,0 +1,34 @@
+/**
+ * Access Code 2.1
+ * Ramona Harrison
+ * ReedPlayer.java
+ */
+
+public abstract class ReedPlayer extends Musician {
+ ReedInstrument myReedInstrument;
+
+ public ReedPlayer() {
+
+ }
+
+ public ReedPlayer(ReedInstrument reedInstrument) {
+ this.myReedInstrument = reedInstrument;
+ }
+
+ public void toggleReed() {
+ if (this.myReedInstrument.hasReed()) {
+ myReedInstrument.removeReed();
+ } else {
+ myReedInstrument.placeReed();
+ }
+ }
+
+ @Override
+ public String play_instrument() {
+ if (!this.myReedInstrument.hasReed()) {
+ return null;
+ } else {
+ return myReedInstrument.play();
+ }
+ }
+}
diff --git a/homework/week-0/ramonaharrison/src/nyc/c4q/ramonaharrison/Animal.java b/homework/week-0/ramonaharrison/src/nyc/c4q/ramonaharrison/Animal.java
new file mode 100644
index 00000000..70825650
--- /dev/null
+++ b/homework/week-0/ramonaharrison/src/nyc/c4q/ramonaharrison/Animal.java
@@ -0,0 +1,70 @@
+package nyc.c4q.ramonaharrison;
+
+/**
+ * Access Code 2.1
+ * Ramona Harrison
+ * Animal.java
+ */
+
+public class Animal implements Comparable {
+ String name;
+
+ public Animal(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return this.name;
+ }
+
+ public boolean equals(Animal o) {
+ String thisName = this.getName();
+ String thatName = o.getName();
+
+ if (thisName.length() != thatName.length()) {
+ return false;
+ }
+
+ for (int i = 0; i < thisName.length(); i++) {
+ if (thisName.charAt(i) != thatName.charAt(i)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ @Override
+ public int compareTo(T o) {
+
+ // finds the longer and shorter name
+ int length, longer;
+ String thisName = this.getName().toLowerCase();
+ String thatName = ((Animal)o).getName().toLowerCase();
+
+ if (thisName.equals(thatName)) {
+ return 0;
+ }
+
+ if (thatName.length() > thisName.length()) {
+ length = thisName.length();
+ longer = 1;
+ } else {
+ length = thatName.length();
+ longer = -1;
+ }
+
+ for (int i = 0; i < length; i++) {
+ if (thisName.charAt(i) > thatName.charAt(i)) {
+ return 1;
+ }
+ if (thisName.charAt(i) < thatName.charAt(i)) {
+ return -1;
+ }
+ }
+
+ return longer;
+
+ }
+
+}
diff --git a/homework/week-0/ramonaharrison/src/nyc/c4q/ramonaharrison/Main.java b/homework/week-0/ramonaharrison/src/nyc/c4q/ramonaharrison/Main.java
new file mode 100644
index 00000000..51b712ca
--- /dev/null
+++ b/homework/week-0/ramonaharrison/src/nyc/c4q/ramonaharrison/Main.java
@@ -0,0 +1,25 @@
+package nyc.c4q.ramonaharrison;
+
+public class Main {
+
+ public static void main(String[] args) {
+
+ Animal cat = new Animal("Cat");
+ Animal cat2 = new Animal("Cat");
+
+ Animal dog = new Animal("Dog");
+ Animal lizard = new Animal("Lizard");
+ Animal mouse = new Animal("Mouse");
+ Animal moose = new Animal("Moose");
+
+ System.out.println(cat.compareTo(cat2));
+ System.out.println(cat.compareTo(dog));
+ System.out.println(dog.compareTo(cat));
+
+ System.out.println(lizard.compareTo(mouse));
+ System.out.println(mouse.compareTo(lizard));
+ System.out.println(moose.compareTo(mouse));
+
+
+ }
+}
\ No newline at end of file
diff --git a/homework/week-1/Horoscope/.gitignore b/homework/week-1/Horoscope/.gitignore
new file mode 100644
index 00000000..afbdab33
--- /dev/null
+++ b/homework/week-1/Horoscope/.gitignore
@@ -0,0 +1,6 @@
+.gradle
+/local.properties
+/.idea/workspace.xml
+/.idea/libraries
+.DS_Store
+/build
diff --git a/homework/week-1/Horoscope/app/.gitignore b/homework/week-1/Horoscope/app/.gitignore
new file mode 100644
index 00000000..796b96d1
--- /dev/null
+++ b/homework/week-1/Horoscope/app/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/homework/week-1/Horoscope/app/build.gradle b/homework/week-1/Horoscope/app/build.gradle
new file mode 100644
index 00000000..a72bbfb2
--- /dev/null
+++ b/homework/week-1/Horoscope/app/build.gradle
@@ -0,0 +1,25 @@
+apply plugin: 'com.android.application'
+
+android {
+ compileSdkVersion 22
+ buildToolsVersion "22.0.1"
+
+ defaultConfig {
+ applicationId "nyc.c4q.ramonaharrison.horoscope"
+ minSdkVersion 15
+ targetSdkVersion 22
+ versionCode 1
+ versionName "1.0"
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+}
+
+dependencies {
+ compile fileTree(dir: 'libs', include: ['*.jar'])
+ compile 'com.android.support:appcompat-v7:22.1.1'
+}
diff --git a/homework/week-1/Horoscope/app/horoscope_title.png b/homework/week-1/Horoscope/app/horoscope_title.png
new file mode 100644
index 00000000..297da8b3
Binary files /dev/null and b/homework/week-1/Horoscope/app/horoscope_title.png differ
diff --git a/homework/week-1/Horoscope/app/proguard-rules.pro b/homework/week-1/Horoscope/app/proguard-rules.pro
new file mode 100644
index 00000000..523f994c
--- /dev/null
+++ b/homework/week-1/Horoscope/app/proguard-rules.pro
@@ -0,0 +1,17 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in /Users/mona/Library/Android/sdk/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# 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 *;
+#}
diff --git a/homework/week-1/Horoscope/app/src/androidTest/java/nyc/c4q/ramonaharrison/horoscope/ApplicationTest.java b/homework/week-1/Horoscope/app/src/androidTest/java/nyc/c4q/ramonaharrison/horoscope/ApplicationTest.java
new file mode 100644
index 00000000..3d13882a
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/androidTest/java/nyc/c4q/ramonaharrison/horoscope/ApplicationTest.java
@@ -0,0 +1,13 @@
+package nyc.c4q.ramonaharrison.horoscope;
+
+import android.app.Application;
+import android.test.ApplicationTestCase;
+
+/**
+ * Testing Fundamentals
+ */
+public class ApplicationTest extends ApplicationTestCase {
+ public ApplicationTest() {
+ super(Application.class);
+ }
+}
\ No newline at end of file
diff --git a/homework/week-1/Horoscope/app/src/main/AndroidManifest.xml b/homework/week-1/Horoscope/app/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..7346a51d
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/AndroidManifest.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/AboutSignFragment.java b/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/AboutSignFragment.java
new file mode 100644
index 00000000..1b522ee8
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/AboutSignFragment.java
@@ -0,0 +1,126 @@
+package nyc.c4q.ramonaharrison.horoscope;
+
+import android.app.Activity;
+import android.support.v4.app.Fragment;
+import android.net.Uri;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+
+/**
+ * A simple {@link Fragment} subclass.
+ * Activities that contain this fragment must implement the
+ * {@link AboutSignFragment.OnFragmentInteractionListener} interface
+ * to handle interaction events.
+ * Use the {@link AboutSignFragment#newInstance} factory method to
+ * create an instance of this fragment.
+ */
+public class AboutSignFragment extends Fragment {
+
+ private static final String SIGN = "sign";
+ private int sign;
+ private OnFragmentInteractionListener mListener;
+ private int[] signImages = {
+ R.drawable.aries,
+ R.drawable.taurus,
+ R.drawable.gemini,
+ R.drawable.cancer,
+ R.drawable.leo,
+ R.drawable.virgo,
+ R.drawable.libra,
+ R.drawable.scorpio,
+ R.drawable.sagittarius,
+ R.drawable.capricorn,
+ R.drawable.aquarius,
+ R.drawable.pisces,
+ };
+
+ /**
+ * Use this factory method to create a new instance of
+ * this fragment using the provided parameters.
+ *
+ * @param sign - Astrological Sign
+ *
+ * @return A new instance of fragment AboutSignFragment.
+ */
+
+ public static AboutSignFragment newInstance(int sign) {
+ AboutSignFragment fragment = new AboutSignFragment();
+ Bundle args = new Bundle();
+ args.putInt(SIGN, sign);
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ public AboutSignFragment() {
+ // Required empty public constructor
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ if (getArguments() != null) {
+ sign = getArguments().getInt(SIGN);
+ }
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ View aboutSignView = inflater.inflate(R.layout.fragment_about_sign, container, false);
+
+ TextView signTitle = (TextView) aboutSignView.findViewById(R.id.signTitle);
+ TextView signDateRange = (TextView) aboutSignView.findViewById(R.id.signDateRange);
+ ImageView signImage = (ImageView) aboutSignView.findViewById(R.id.signImage);
+ TextView signDescription = (TextView) aboutSignView.findViewById(R.id.signDescription);
+
+ String[] signArray = getResources().getStringArray(R.array.signs_array);
+ String[] dateArray = getResources().getStringArray(R.array.dates_array);
+ String[] descriptionArray = getResources().getStringArray(R.array.description_array);
+
+ signTitle.setText(signArray[sign]);
+ signDateRange.setText(dateArray[sign]);
+ signImage.setImageResource(signImages[sign]);
+ signDescription.setText(descriptionArray[sign]);
+
+ return aboutSignView;
+ }
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ try {
+ mListener = (OnFragmentInteractionListener) activity;
+ } catch (ClassCastException e) {
+ throw new ClassCastException(activity.toString()
+ + " must implement OnFragmentInteractionListener");
+ }
+ }
+
+ @Override
+ public void onDetach() {
+ super.onDetach();
+ mListener = null;
+ }
+
+ /**
+ * This interface must be implemented by activities that contain this
+ * fragment to allow an interaction in this fragment to be communicated
+ * to the activity and potentially other fragments contained in that
+ * activity.
+ *
+ * See the Android Training lesson Communicating with Other Fragments for more information.
+ */
+ public interface OnFragmentInteractionListener {
+ // TODO: Update argument type and name
+ public void onFragmentInteraction(Uri uri);
+ }
+
+}
diff --git a/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/CompatibilityFragment.java b/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/CompatibilityFragment.java
new file mode 100644
index 00000000..6e8dce71
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/CompatibilityFragment.java
@@ -0,0 +1,174 @@
+package nyc.c4q.ramonaharrison.horoscope;
+
+import android.app.Activity;
+import android.content.res.Resources;
+import android.support.v4.app.Fragment;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.Spinner;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+
+/**
+ * A simple {@link Fragment} subclass.
+ * Activities that contain this fragment must implement the
+ * {@link CompatibilityFragment.OnFragmentInteractionListener} interface
+ * to handle interaction events.
+ * Use the {@link CompatibilityFragment#newInstance} factory method to
+ * create an instance of this fragment.
+ */
+public class CompatibilityFragment extends Fragment {
+ // TODO: Rename parameter arguments, choose names that match
+ // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
+ private static final String ARG_PARAM1 = "param1";
+ private static final String ARG_PARAM2 = "param2";
+
+ // TODO: Rename and change types of parameters
+ private String mParam1;
+ private String mParam2;
+
+ final static String TAG = "test";
+ private ArrayList signList = new ArrayList();
+ private OnFragmentInteractionListener mListener;
+
+ /**
+ * Use this factory method to create a new instance of
+ * this fragment using the provided parameters.
+ *
+ * @param param1 Parameter 1.
+ * @param param2 Parameter 2.
+ * @return A new instance of fragment CompatibilityFragment.
+ */
+ // TODO: Rename and change types and number of parameters
+ public static CompatibilityFragment newInstance(String param1, String param2) {
+ CompatibilityFragment fragment = new CompatibilityFragment();
+ Bundle args = new Bundle();
+ args.putString(ARG_PARAM1, param1);
+ args.putString(ARG_PARAM2, param2);
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ public CompatibilityFragment() {
+ // Required empty public constructor
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ if (getArguments() != null) {
+ mParam1 = getArguments().getString(ARG_PARAM1);
+ mParam2 = getArguments().getString(ARG_PARAM2);
+ }
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ View view = inflater.inflate(R.layout.fragment_compatibility, container, false);
+ Resources res = getResources();
+
+ // set up spinner
+ final String[] signs = res.getStringArray(R.array.signs_array);
+ signList.addAll(Arrays.asList(signs));
+
+ ArrayAdapter adapter = new ArrayAdapter(getActivity(), android.R.layout.simple_spinner_item, signList);
+ Spinner spinner = (Spinner) view.findViewById(R.id.your_sign);
+ adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+ spinner.setAdapter(adapter);
+ spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+
+ @Override
+ public void onItemSelected(AdapterView> parentView, View selectedItemView, int position, long id)
+ {
+
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView> parentView) {
+
+
+ }
+ });
+
+ // set up spinner2
+ ArrayAdapter adapter2 = new ArrayAdapter(getActivity(), android.R.layout.simple_spinner_item, signList);
+ Spinner spinner2 = (Spinner) view.findViewById(R.id.their_sign);
+ adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+ spinner2.setAdapter(adapter2);
+ spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+
+ @Override
+ public void onItemSelected(AdapterView> parentView, View selectedItemView, int position, long id)
+ {
+
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView> parentView) {
+
+ }
+ });
+
+ Button button = (Button) view.findViewById(R.id.compatibility_button);
+ Log.d(TAG, "button found");
+ button.setOnClickListener(new View.OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ Log.d(TAG, "onClick() started");
+ onButtonPressed();
+ }
+ });
+
+ return view;
+ }
+
+ public void onButtonPressed() {
+ if (mListener != null) {
+ mListener.onCompatibilityFragmentInteraction();
+ }
+ }
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ try {
+ mListener = (OnFragmentInteractionListener) activity;
+ } catch (ClassCastException e) {
+ throw new ClassCastException(activity.toString()
+ + " must implement OnFragmentInteractionListener");
+ }
+ }
+
+ @Override
+ public void onDetach() {
+ super.onDetach();
+ mListener = null;
+ }
+
+ /**
+ * This interface must be implemented by activities that contain this
+ * fragment to allow an interaction in this fragment to be communicated
+ * to the activity and potentially other fragments contained in that
+ * activity.
+ *
+ * See the Android Training lesson Communicating with Other Fragments for more information.
+ */
+ public interface OnFragmentInteractionListener {
+
+ public void onCompatibilityFragmentInteraction();
+ }
+
+}
diff --git a/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/GameFragment.java b/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/GameFragment.java
new file mode 100644
index 00000000..4a7c55e4
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/GameFragment.java
@@ -0,0 +1,263 @@
+package nyc.c4q.ramonaharrison.horoscope;
+
+import android.app.Activity;
+import android.content.res.Resources;
+import android.os.Bundle;
+import android.os.CountDownTimer;
+import android.support.v4.app.Fragment;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.Spinner;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Random;
+import java.util.TimeZone;
+
+
+/**
+ * A simple {@link Fragment} subclass.
+ * Activities that contain this fragment must implement the
+ * {@link GameFragment.OnFragmentInteractionListener} interface
+ * to handle interaction events.
+ * Use the {@link GameFragment#newInstance} factory method to
+ * create an instance of this fragment.
+ */
+public class GameFragment extends Fragment {
+
+ private ArrayList signList = new ArrayList();
+ private Random random = new Random();
+ private int guess;
+ private int sign;
+ private int randomDay;
+ private int randomMonth;
+ private String dateDisplay;
+ private CountDownTimer timer;
+ private long tick;
+ private boolean timesUp;
+
+
+
+ private OnFragmentInteractionListener mListener;
+
+ /**
+ * Use this factory method to create a new instance of
+ * this fragment using the provided parameters.
+ *
+ * @return A new instance of fragment GameFragment.
+ */
+
+ public static GameFragment newInstance() {
+ GameFragment fragment = new GameFragment();
+ return fragment;
+ }
+
+ public GameFragment() {
+ // Required empty public constructor
+ }
+
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+
+ // Inflate the layout for this fragment
+ View view = inflater.inflate(R.layout.fragment_game, container, false);
+ Resources res = getResources();
+ final String[] signs = res.getStringArray(R.array.signs_array);
+ final TextView countdown = (TextView) view.findViewById(R.id.countdown_timer);
+ timesUp = false;
+ tick = 9000;
+
+
+ setUpGame(view, res);
+ setUpSpinner(view, res, signs);
+ Button button = (Button) view.findViewById(R.id.game_button);
+ button.setOnClickListener(new View.OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ setResult(countdown);
+ }
+ });
+
+
+ timer = new CountDownTimer(tick, 1000) {
+
+ public void onTick(long millisUntilFinished) {
+ tick = millisUntilFinished;
+ countdown.setText("00:0" + millisUntilFinished / 1000);
+
+ }
+
+ public void onFinish() {
+ timesUp = true;
+ countdown.setText(signs[sign]);
+ Toast.makeText(getActivity().getApplicationContext(), "Out of Time!", Toast.LENGTH_SHORT).show();
+
+ }
+ }.start();
+
+ return view;
+ }
+
+
+ public void setUpSpinner(View view, Resources res, String[] signs) {
+ signList.addAll(Arrays.asList(signs));
+ ArrayAdapter adapter = new ArrayAdapter(getActivity(), android.R.layout.simple_spinner_item, signList);
+ Spinner spinner = (Spinner) view.findViewById(R.id.spinner);
+ adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+ spinner.setAdapter(adapter);
+ spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+
+ @Override
+ public void onItemSelected(AdapterView> parentView, View selectedItemView, int position, long id) {
+ Log.d("test", "pos: " + position + "id: " + id);
+ guess = position;
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView> parentView) {
+ guess = 0;
+ }
+ });
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+
+
+ }
+
+ public void setUpGame(View view, Resources res) {
+ randomDay = random.nextInt(27) + 1;
+ randomMonth = random.nextInt(11) + 1;
+ sign = getSign(randomMonth, randomDay);
+ dateDisplay = getDisplayDate(randomMonth, randomDay, res);
+
+ TextView signDate = (TextView) view.findViewById(R.id.sign_date);
+ signDate.setText(dateDisplay);
+ }
+
+ public String getDisplayDate(int month, int day, Resources res) {
+ String[] months = res.getStringArray(R.array.months_array);
+ return months[month] + " " + day;
+ }
+
+ public int getSign(int month, int dayOfMonth) {
+ Calendar localCalendar = Calendar.getInstance(TimeZone.getDefault());
+ localCalendar.set(2015, month, dayOfMonth);
+ int day = localCalendar.get(Calendar.DAY_OF_YEAR);
+
+ if (day < 22) {
+ return 9;
+ }
+ if (day < 49) {
+ return 10;
+ }
+ if (day < 79) {
+ return 11;
+ }
+ if (day < 109) {
+ return 0;
+ }
+ if (day < 140) {
+ return 1;
+ }
+ if (day < 171) {
+ return 2;
+ }
+ if (day < 203) {
+ return 3;
+ }
+ if (day < 234) {
+ return 4;
+ }
+ if (day < 266) {
+ return 5;
+ }
+ if (day < 295) {
+ return 6;
+ }
+ if (day < 325) {
+ return 7;
+ }
+ if (day < 355) {
+ return 8;
+ }
+
+ return 0;
+
+ }
+
+ public void setResult(TextView countdown) {
+ TextView result = (TextView) getActivity().findViewById(R.id.result);
+
+ if (timesUp) {
+ Toast.makeText(getActivity().getApplicationContext(), "Out of time! Better luck next time...", Toast.LENGTH_SHORT).show();
+ } else {
+ if (guess == sign) {
+ timer.cancel();
+ countdown.setText("Correct");
+ Toast.makeText(getActivity().getApplicationContext(), "Correct!", Toast.LENGTH_SHORT).show();
+
+ } else {
+ Toast.makeText(getActivity().getApplicationContext(), "Wrong answer!", Toast.LENGTH_SHORT).show();
+ }
+ }
+ }
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ try {
+ mListener = (OnFragmentInteractionListener) activity;
+ } catch (ClassCastException e) {
+ throw new ClassCastException(activity.toString()
+ + " must implement OnFragmentInteractionListener");
+ }
+ }
+
+ @Override
+ public void onDetach() {
+ super.onDetach();
+ mListener = null;
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ this.timer.cancel();
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ }
+
+
+ /**
+ * This interface must be implemented by activities that contain this
+ * fragment to allow an interaction in this fragment to be communicated
+ * to the activity and potentially other fragments contained in that
+ * activity.
+ *
+ * See the Android Training lesson Communicating with Other Fragments for more information.
+ */
+ public interface OnFragmentInteractionListener {
+ // TODO: Update argument type and name
+ public void onGameFragmentInteraction();
+ }
+
+}
diff --git a/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/ListViewFragment.java b/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/ListViewFragment.java
new file mode 100644
index 00000000..59184ce8
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/ListViewFragment.java
@@ -0,0 +1,158 @@
+package nyc.c4q.ramonaharrison.horoscope;
+
+import android.app.Activity;
+import android.content.res.Resources;
+import android.support.v4.app.Fragment;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AbsListView;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
+import android.widget.TextView;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import nyc.c4q.ramonaharrison.horoscope.sign.SignContent;
+
+/**
+ * A fragment representing a list of Items.
+ *
+ * Large screen devices (such as tablets) are supported by replacing the ListView
+ * with a GridView.
+ *
+ * Activities containing this fragment MUST implement the {@link OnFragmentInteractionListener}
+ * interface.
+ */
+public class ListViewFragment extends Fragment implements AbsListView.OnItemClickListener {
+
+ // TODO: Rename parameter arguments, choose names that match
+ // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
+ private static final String ARG_PARAM1 = "param1";
+ private static final String ARG_PARAM2 = "param2";
+
+ // TODO: Rename and change types of parameters
+ private String mParam1;
+ private String mParam2;
+
+ private OnFragmentInteractionListener mListener;
+
+ /**
+ * The fragment's ListView/GridView.
+ */
+ private ListView mListView;
+
+ /**
+ * The Adapter which will be used to populate the ListView/GridView with
+ * Views.
+ */
+ private ArrayAdapter mAdapter;
+
+ // TODO: Rename and change types of parameters
+ public static ListViewFragment newInstance(String param1, String param2) {
+ ListViewFragment fragment = new ListViewFragment();
+ Bundle args = new Bundle();
+ args.putString(ARG_PARAM1, param1);
+ args.putString(ARG_PARAM2, param2);
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ /**
+ * Mandatory empty constructor for the fragment manager to instantiate the
+ * fragment (e.g. upon screen orientation changes).
+ */
+
+ public ListViewFragment() {
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ if (getArguments() != null) {
+ mParam1 = getArguments().getString(ARG_PARAM1);
+ mParam2 = getArguments().getString(ARG_PARAM2);
+ }
+
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+
+ View view = inflater.inflate(R.layout.fragment_item3, container, false);
+
+ Resources res = getResources();
+ String[] signs = res.getStringArray(R.array.signs_array);
+ ArrayList signList = new ArrayList();
+ signList.addAll( Arrays.asList(signs) );
+ mAdapter = new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, signList);
+ mListView = (ListView) view.findViewById(R.id.list);
+ mListView.setAdapter(mAdapter);
+ mListView.setOnItemClickListener(this);
+
+
+
+ return view;
+ }
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ try {
+ mListener = (OnFragmentInteractionListener) activity;
+ } catch (ClassCastException e) {
+ throw new ClassCastException(activity.toString()
+ + " must implement OnFragmentInteractionListener");
+ }
+ }
+
+ @Override
+ public void onDetach() {
+ super.onDetach();
+ mListener = null;
+ }
+
+
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+ if (null != mListener) {
+ // Notify the active callbacks interface (the activity, if the
+ // fragment is attached to one) that an item has been selected.
+ mListener.onFragmentInteraction(SignContent.ITEMS.get(position).id);
+ }
+ }
+
+ /**
+ * The default content for this Fragment has a TextView that is shown when
+ * the list is empty. If you would like to change the text, call this method
+ * to supply the text it should use.
+ */
+ public void setEmptyText(CharSequence emptyText) {
+ View emptyView = mListView.getEmptyView();
+
+ if (emptyView instanceof TextView) {
+ ((TextView) emptyView).setText(emptyText);
+ }
+ }
+
+ /**
+ * This interface must be implemented by activities that contain this
+ * fragment to allow an interaction in this fragment to be communicated
+ * to the activity and potentially other fragments contained in that
+ * activity.
+ *
+ * See the Android Training lesson Communicating with Other Fragments for more information.
+ */
+ public interface OnFragmentInteractionListener {
+ // TODO: Update argument type and name
+ public void onFragmentInteraction(int id);
+ }
+
+}
diff --git a/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/MainActivity.java b/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/MainActivity.java
new file mode 100644
index 00000000..b102c15a
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/MainActivity.java
@@ -0,0 +1,263 @@
+package nyc.c4q.ramonaharrison.horoscope;
+
+import android.app.Activity;
+import android.net.Uri;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentTransaction;
+import android.support.v4.widget.DrawerLayout;
+import android.support.v7.app.ActionBar;
+import android.support.v7.app.ActionBarActivity;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+
+
+public class MainActivity extends ActionBarActivity
+ implements NavigationDrawerFragment.NavigationDrawerCallbacks, MainFragment.OnFragmentInteractionListener, ListViewFragment.OnFragmentInteractionListener, YourSignFragment.OnFragmentInteractionListener, GameFragment.OnFragmentInteractionListener, ResultFragment.OnFragmentInteractionListener, CompatibilityFragment.OnFragmentInteractionListener, AboutSignFragment.OnFragmentInteractionListener {
+
+ /**
+ * Fragment managing the behaviors, interactions and presentation of the navigation drawer.
+ */
+ private NavigationDrawerFragment mNavigationDrawerFragment;
+ private MainFragment mMainFragment;
+ private ListViewFragment mListViewFragment;
+ private AboutSignFragment mAboutSignFragment;
+ private YourSignFragment mYourSignFragment;
+ private CompatibilityFragment mCompatibilityFragment;
+ private GameFragment mGameFragment;
+ private ResultFragment mResultFragment;
+
+ /**
+ * Used to store the last screen title. For use in {@link #restoreActionBar()}.
+ */
+ private CharSequence mTitle;
+ final static String TAG = "test"; // TAG for debugging
+
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+
+ // Set up the drawer.
+ mNavigationDrawerFragment = (NavigationDrawerFragment) getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
+ mNavigationDrawerFragment.setUp(
+ R.id.navigation_drawer,
+ (DrawerLayout) findViewById(R.id.drawer_layout));
+ mTitle = getTitle();
+
+ if (savedInstanceState == null) {
+ // Place main fragment
+ mMainFragment = MainFragment.newInstance();
+ FragmentTransaction fx = getSupportFragmentManager().beginTransaction();
+ fx.replace(R.id.container, mMainFragment);
+ fx.addToBackStack(null);
+ fx.commit();
+ }
+
+ }
+
+ @Override
+ public void onNavigationDrawerItemSelected(int position) {
+ // update the main content by replacing fragments
+ FragmentTransaction fx;
+
+ switch (position) {
+ case 0:
+ mListViewFragment = ListViewFragment.newInstance("", "");
+ fx = getSupportFragmentManager().beginTransaction();
+ fx.replace(R.id.container, mListViewFragment);
+ fx.addToBackStack(null);
+ fx.commit();
+
+ break;
+ case 1:
+ Log.d(TAG, "case 1");
+ mYourSignFragment = YourSignFragment.newInstance(0, 0);
+ fx = getSupportFragmentManager().beginTransaction();
+ fx.replace(R.id.container, mYourSignFragment);
+ fx.addToBackStack(null);
+ fx.commit();
+ break;
+ case 2:
+ Log.d(TAG, "case 2");
+ mCompatibilityFragment = CompatibilityFragment.newInstance("", "");
+ fx = getSupportFragmentManager().beginTransaction();
+ fx.replace(R.id.container, mCompatibilityFragment);
+ fx.addToBackStack(null);
+ fx.commit();
+ break;
+ case 3:
+ Log.d(TAG, "case 3");
+ mGameFragment = GameFragment.newInstance();
+ fx = getSupportFragmentManager().beginTransaction();
+ fx.replace(R.id.container, mGameFragment);
+ fx.addToBackStack(null);
+ fx.commit();
+ break;
+ }
+
+ }
+
+
+ public void onSectionAttached(int number) {
+ switch (number) {
+ case 1:
+ mTitle = getString(R.string.title_section1);
+ break;
+ case 2:
+ mTitle = getString(R.string.title_section2);
+ break;
+ case 3:
+ mTitle = getString(R.string.title_section3);
+ break;
+ case 4:
+ mTitle = getString(R.string.title_section4);
+ break;
+ }
+ }
+
+ public void restoreActionBar() {
+ ActionBar actionBar = getSupportActionBar();
+ actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
+ actionBar.setDisplayShowTitleEnabled(true);
+ actionBar.setTitle(mTitle);
+ }
+
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+
+ if (this.mNavigationDrawerFragment != null) {
+ if (!mNavigationDrawerFragment.isDrawerOpen()) {
+ // Only show items in the action bar relevant to this screen
+ // if the drawer is not showing. Otherwise, let the drawer
+ // decide what to show in the action bar.
+ getMenuInflater().inflate(R.menu.main, menu);
+ restoreActionBar();
+ return true;
+ }
+ }
+
+ return super.onCreateOptionsMenu(menu);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ // Handle action bar item clicks here. The action bar will
+ // automatically handle clicks on the Home/Up button, so long
+ // as you specify a parent activity in AndroidManifest.xml.
+ int id = item.getItemId();
+
+ //noinspection SimplifiableIfStatement
+ if (id == R.id.action_settings) {
+ return true;
+ }
+
+ return super.onOptionsItemSelected(item);
+ }
+
+ @Override
+ public void onFragmentInteraction(int sign) {
+ mAboutSignFragment = AboutSignFragment.newInstance(sign);
+ FragmentTransaction fx = getSupportFragmentManager().beginTransaction();
+ fx.replace(R.id.container, mAboutSignFragment);
+ fx.addToBackStack(null);
+ fx.commit();
+
+ }
+
+ @Override
+ public void onCompatibilityFragmentInteraction() {
+ mResultFragment = ResultFragment.newInstance();
+ FragmentTransaction fx = getSupportFragmentManager().beginTransaction();
+ fx.replace(R.id.container, mResultFragment);
+ fx.addToBackStack(null);
+ fx.commit();
+ }
+
+ @Override
+ public void onYourSignFragmentInteraction(int sign) {
+ mAboutSignFragment = AboutSignFragment.newInstance(sign);
+ FragmentTransaction fx = getSupportFragmentManager().beginTransaction();
+ fx.replace(R.id.container, mAboutSignFragment);
+ fx.addToBackStack(null);
+ fx.commit();
+
+ }
+
+ @Override
+ public void onFragmentInteraction(Uri uri) {
+
+ }
+
+ @Override
+ public void onGameFragmentInteraction() {
+
+ }
+
+ /**
+ * A placeholder fragment containing a simple view.
+ */
+ public static class PlaceholderFragment extends Fragment {
+ /**
+ * The fragment argument representing the section number for this
+ * fragment.
+ */
+ private static final String ARG_SECTION_NUMBER = "section_number";
+
+ /**
+ * Returns a new instance of this fragment for the given section
+ * number.
+ */
+ public static PlaceholderFragment newInstance(int sectionNumber) {
+ PlaceholderFragment fragment = new PlaceholderFragment();
+ Bundle args = new Bundle();
+ args.putInt(ARG_SECTION_NUMBER, sectionNumber);
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ public PlaceholderFragment() {
+ }
+
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+
+ View rootView = null;
+ rootView = inflater.inflate(R.layout.fragment_main, container, false);
+
+
+ switch(getArguments().getInt(ARG_SECTION_NUMBER)) {
+ case 1:
+ rootView = inflater.inflate(R.layout.fragment_list_view_list, container, false);
+ break;
+ case 2:
+ rootView = inflater.inflate(R.layout.fragment_your_sign, container, false);
+ break;
+ case 3:
+ rootView = inflater.inflate(R.layout.fragment_compatibility, container, false);
+ break;
+ case 4:
+ rootView = inflater.inflate(R.layout.fragment_game, container, false);
+ break;
+ }
+ return rootView;
+
+ }
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ ((MainActivity) activity).onSectionAttached(
+ getArguments().getInt(ARG_SECTION_NUMBER));
+ }
+ }
+
+}
diff --git a/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/MainFragment.java b/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/MainFragment.java
new file mode 100644
index 00000000..357c1154
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/MainFragment.java
@@ -0,0 +1,79 @@
+package nyc.c4q.ramonaharrison.horoscope;
+
+import android.app.Activity;
+import android.net.Uri;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+
+/**
+ * A simple {@link Fragment} subclass.
+ * Activities that contain this fragment must implement the
+ * {@link MainFragment.OnFragmentInteractionListener} interface
+ * to handle interaction events.
+ * Use the {@link MainFragment#newInstance} factory method to
+ * create an instance of this fragment.
+ */
+public class MainFragment extends Fragment {
+
+ private OnFragmentInteractionListener mListener;
+
+ /**
+ * Use this factory method to create a new instance of
+ * this fragment using the provided parameters.
+ * @return A new instance of fragment MainFragment.
+ */
+ // TODO: Rename and change types and number of parameters
+ public static MainFragment newInstance() {
+ MainFragment fragment = new MainFragment();
+ return fragment;
+ }
+
+ public MainFragment() {
+ // Required empty public constructor
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ return inflater.inflate(R.layout.fragment_main, container, false);
+ }
+
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ try {
+ mListener = (OnFragmentInteractionListener) activity;
+ } catch (ClassCastException e) {
+ throw new ClassCastException(activity.toString()
+ + " must implement OnFragmentInteractionListener");
+ }
+ }
+
+ @Override
+ public void onDetach() {
+ super.onDetach();
+ mListener = null;
+ }
+
+ /**
+ * This interface must be implemented by activities that contain this
+ * fragment to allow an interaction in this fragment to be communicated
+ * to the activity and potentially other fragments contained in that
+ * activity.
+ *
+ * See the Android Training lesson Communicating with Other Fragments for more information.
+ */
+ public interface OnFragmentInteractionListener {
+ // TODO: Update argument type and name
+ public void onFragmentInteraction(Uri uri);
+ }
+
+}
diff --git a/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/NavigationDrawerFragment.java b/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/NavigationDrawerFragment.java
new file mode 100644
index 00000000..d1e93d41
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/NavigationDrawerFragment.java
@@ -0,0 +1,282 @@
+package nyc.c4q.ramonaharrison.horoscope;
+
+import android.app.Activity;
+import android.content.SharedPreferences;
+import android.content.res.Configuration;
+import android.os.Bundle;
+import android.preference.PreferenceManager;
+import android.support.v4.app.ActionBarDrawerToggle;
+import android.support.v4.app.Fragment;
+import android.support.v4.view.GravityCompat;
+import android.support.v4.widget.DrawerLayout;
+import android.support.v7.app.ActionBar;
+import android.support.v7.app.ActionBarActivity;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
+
+/**
+ * Fragment used for managing interactions for and presentation of a navigation drawer.
+ * See the
+ * design guidelines for a complete explanation of the behaviors implemented here.
+ */
+public class NavigationDrawerFragment extends Fragment {
+
+ /**
+ * Remember the position of the selected item.
+ */
+ private static final String STATE_SELECTED_POSITION = "selected_navigation_drawer_position";
+
+ /**
+ * Per the design guidelines, you should show the drawer on launch until the user manually
+ * expands it. This shared preference tracks this.
+ */
+ private static final String PREF_USER_LEARNED_DRAWER = "navigation_drawer_learned";
+
+ /**
+ * A pointer to the current callbacks instance (the Activity).
+ */
+ private NavigationDrawerCallbacks mCallbacks;
+
+ /**
+ * Helper component that ties the action bar to the navigation drawer.
+ */
+ private ActionBarDrawerToggle mDrawerToggle;
+
+ private DrawerLayout mDrawerLayout;
+ private ListView mDrawerListView;
+ private View mFragmentContainerView;
+
+ private int mCurrentSelectedPosition = 0;
+ private boolean mFromSavedInstanceState;
+ private boolean mUserLearnedDrawer;
+
+ public NavigationDrawerFragment() {
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ // Read in the flag indicating whether or not the user has demonstrated awareness of the
+ // drawer. See PREF_USER_LEARNED_DRAWER for details.
+ SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity());
+ mUserLearnedDrawer = sp.getBoolean(PREF_USER_LEARNED_DRAWER, false);
+
+ if (savedInstanceState != null) {
+ mCurrentSelectedPosition = savedInstanceState.getInt(STATE_SELECTED_POSITION);
+ mFromSavedInstanceState = true;
+ }
+
+ // Select either the default item (0) or the last selected item.
+ selectItem(mCurrentSelectedPosition);
+ }
+
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+ // Indicate that this fragment would like to influence the set of actions in the action bar.
+ setHasOptionsMenu(true);
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ mDrawerListView = (ListView) inflater.inflate(
+ R.layout.fragment_navigation_drawer, container, false);
+ mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+ selectItem(position);
+ }
+ });
+ mDrawerListView.setAdapter(new ArrayAdapter(
+ getActionBar().getThemedContext(),
+ android.R.layout.simple_list_item_activated_1,
+ android.R.id.text1,
+ new String[]{
+ getString(R.string.title_section1),
+ getString(R.string.title_section2),
+ getString(R.string.title_section3),
+ getString(R.string.title_section4),
+ }));
+ mDrawerListView.setItemChecked(mCurrentSelectedPosition, true);
+ return mDrawerListView;
+ }
+
+ public boolean isDrawerOpen() {
+ return mDrawerLayout != null && mDrawerLayout.isDrawerOpen(mFragmentContainerView);
+ }
+
+ /**
+ * Users of this fragment must call this method to set up the navigation drawer interactions.
+ *
+ * @param fragmentId The android:id of this fragment in its activity's layout.
+ * @param drawerLayout The DrawerLayout containing this fragment's UI.
+ */
+ public void setUp(int fragmentId, DrawerLayout drawerLayout) {
+ mFragmentContainerView = getActivity().findViewById(fragmentId);
+ mDrawerLayout = drawerLayout;
+
+ // set a custom shadow that overlays the main content when the drawer opens
+ mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
+ // set up the drawer's list view with items and click listener
+
+ ActionBar actionBar = getActionBar();
+ actionBar.setDisplayHomeAsUpEnabled(true);
+ actionBar.setHomeButtonEnabled(true);
+
+ // ActionBarDrawerToggle ties together the the proper interactions
+ // between the navigation drawer and the action bar app icon.
+ mDrawerToggle = new ActionBarDrawerToggle(
+ getActivity(), /* host Activity */
+ mDrawerLayout, /* DrawerLayout object */
+ R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */
+ R.string.navigation_drawer_open, /* "open drawer" description for accessibility */
+ R.string.navigation_drawer_close /* "close drawer" description for accessibility */
+ ) {
+ @Override
+ public void onDrawerClosed(View drawerView) {
+ super.onDrawerClosed(drawerView);
+ if (!isAdded()) {
+ return;
+ }
+
+ getActivity().supportInvalidateOptionsMenu(); // calls onPrepareOptionsMenu()
+ }
+
+ @Override
+ public void onDrawerOpened(View drawerView) {
+ super.onDrawerOpened(drawerView);
+ if (!isAdded()) {
+ return;
+ }
+
+ if (!mUserLearnedDrawer) {
+ // The user manually opened the drawer; store this flag to prevent auto-showing
+ // the navigation drawer automatically in the future.
+ mUserLearnedDrawer = true;
+ SharedPreferences sp = PreferenceManager
+ .getDefaultSharedPreferences(getActivity());
+ sp.edit().putBoolean(PREF_USER_LEARNED_DRAWER, true).apply();
+ }
+
+ getActivity().supportInvalidateOptionsMenu(); // calls onPrepareOptionsMenu()
+ }
+ };
+
+ // If the user hasn't 'learned' about the drawer, open it to introduce them to the drawer,
+ // per the navigation drawer design guidelines.
+ if (!mUserLearnedDrawer && !mFromSavedInstanceState) {
+ mDrawerLayout.openDrawer(mFragmentContainerView);
+ }
+
+ // Defer code dependent on restoration of previous instance state.
+ mDrawerLayout.post(new Runnable() {
+ @Override
+ public void run() {
+ mDrawerToggle.syncState();
+ }
+ });
+
+ mDrawerLayout.setDrawerListener(mDrawerToggle);
+ }
+
+ private void selectItem(int position) {
+ mCurrentSelectedPosition = position;
+ if (mDrawerListView != null) {
+ mDrawerListView.setItemChecked(position, true);
+ }
+ if (mDrawerLayout != null) {
+ mDrawerLayout.closeDrawer(mFragmentContainerView);
+ }
+ if (mCallbacks != null) {
+ mCallbacks.onNavigationDrawerItemSelected(position);
+ }
+ }
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ try {
+ mCallbacks = (NavigationDrawerCallbacks) activity;
+ } catch (ClassCastException e) {
+ throw new ClassCastException("Activity must implement NavigationDrawerCallbacks.");
+ }
+ }
+
+ @Override
+ public void onDetach() {
+ super.onDetach();
+ mCallbacks = null;
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ outState.putInt(STATE_SELECTED_POSITION, mCurrentSelectedPosition);
+ }
+
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ // Forward the new configuration the drawer toggle component.
+ mDrawerToggle.onConfigurationChanged(newConfig);
+ }
+
+ @Override
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ // If the drawer is open, show the global app actions in the action bar. See also
+ // showGlobalContextActionBar, which controls the top-left area of the action bar.
+ if (mDrawerLayout != null && isDrawerOpen()) {
+ inflater.inflate(R.menu.global, menu);
+ showGlobalContextActionBar();
+ }
+ super.onCreateOptionsMenu(menu, inflater);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (mDrawerToggle.onOptionsItemSelected(item)) {
+ return true;
+ }
+
+// if (item.getItemId() == R.id.action_example) {
+// Toast.makeText(getActivity(), "Example action.", Toast.LENGTH_SHORT).show();
+// return true;
+// }
+
+ return super.onOptionsItemSelected(item);
+ }
+
+ /**
+ * Per the navigation drawer design guidelines, updates the action bar to show the global app
+ * 'context', rather than just what's in the current screen.
+ */
+ private void showGlobalContextActionBar() {
+ ActionBar actionBar = getActionBar();
+ actionBar.setDisplayShowTitleEnabled(true);
+ actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
+ actionBar.setTitle(R.string.app_name);
+ }
+
+ private ActionBar getActionBar() {
+ return ((ActionBarActivity) getActivity()).getSupportActionBar();
+ }
+
+ /**
+ * Callbacks interface that all activities using this fragment must implement.
+ */
+ public static interface NavigationDrawerCallbacks {
+ /**
+ * Called when an item in the navigation drawer is selected.
+ */
+ void onNavigationDrawerItemSelected(int position);
+ }
+}
diff --git a/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/ResultFragment.java b/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/ResultFragment.java
new file mode 100644
index 00000000..db6a28fe
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/ResultFragment.java
@@ -0,0 +1,78 @@
+package nyc.c4q.ramonaharrison.horoscope;
+
+import android.app.Activity;
+import android.net.Uri;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+
+/**
+ * A simple {@link Fragment} subclass.
+ * Activities that contain this fragment must implement the
+ * {@link ResultFragment.OnFragmentInteractionListener} interface
+ * to handle interaction events.
+ * Use the {@link ResultFragment#newInstance} factory method to
+ * create an instance of this fragment.
+ */
+public class ResultFragment extends Fragment {
+
+ private OnFragmentInteractionListener mListener;
+
+ /**
+ * Use this factory method to create a new instance of
+ * this fragment using the provided parameters.
+ *
+ * @return A new instance of fragment ResultFragment.
+ */
+
+ public static ResultFragment newInstance() {
+ ResultFragment fragment = new ResultFragment();
+ return fragment;
+ }
+
+ public ResultFragment() {
+ // Required empty public constructor
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ return inflater.inflate(R.layout.fragment_result, container, false);
+ }
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ try {
+ mListener = (OnFragmentInteractionListener) activity;
+ } catch (ClassCastException e) {
+ throw new ClassCastException(activity.toString()
+ + " must implement OnFragmentInteractionListener");
+ }
+ }
+
+ @Override
+ public void onDetach() {
+ super.onDetach();
+ mListener = null;
+ }
+
+ /**
+ * This interface must be implemented by activities that contain this
+ * fragment to allow an interaction in this fragment to be communicated
+ * to the activity and potentially other fragments contained in that
+ * activity.
+ *
+ * See the Android Training lesson Communicating with Other Fragments for more information.
+ */
+ public interface OnFragmentInteractionListener {
+ public void onFragmentInteraction(Uri uri);
+ }
+
+}
diff --git a/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/Signs.java b/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/Signs.java
new file mode 100644
index 00000000..d18f378d
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/Signs.java
@@ -0,0 +1,39 @@
+package nyc.c4q.ramonaharrison.horoscope;
+
+import android.support.v7.app.ActionBarActivity;
+import android.os.Bundle;
+import android.view.Menu;
+import android.view.MenuItem;
+
+
+public class Signs extends ActionBarActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_signs);
+ }
+
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ // Inflate the menu; this adds items to the action bar if it is present.
+ getMenuInflater().inflate(R.menu.menu_signs, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ // Handle action bar item clicks here. The action bar will
+ // automatically handle clicks on the Home/Up button, so long
+ // as you specify a parent activity in AndroidManifest.xml.
+ int id = item.getItemId();
+
+ //noinspection SimplifiableIfStatement
+ if (id == R.id.action_settings) {
+ return true;
+ }
+
+ return super.onOptionsItemSelected(item);
+ }
+}
diff --git a/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/YourSignFragment.java b/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/YourSignFragment.java
new file mode 100644
index 00000000..68367259
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/YourSignFragment.java
@@ -0,0 +1,178 @@
+package nyc.c4q.ramonaharrison.horoscope;
+
+import android.app.Activity;
+import android.support.v4.app.Fragment;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.DatePicker;
+import java.util.Calendar;
+import java.util.TimeZone;
+
+
+/**
+ * A simple {@link Fragment} subclass.
+ * Activities that contain this fragment must implement the
+ * {@link YourSignFragment.OnFragmentInteractionListener} interface
+ * to handle interaction events.
+ * Use the {@link YourSignFragment#newInstance} factory method to
+ * create an instance of this fragment.
+ */
+public class YourSignFragment extends Fragment {
+
+ // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
+ private static final String MONTH = "month";
+ private static final String DAY = "day";
+ final static String TAG = "test";
+ private int month;
+ private int day;
+ private OnFragmentInteractionListener mListener;
+
+ /**
+ * Use this factory method to create a new instance of
+ * this fragment using the provided parameters.
+ *
+ * @param day Parameter 1.
+ * @param month Parameter 2.
+ * @return A new instance of fragment YourSignFragment.
+ */
+
+ public static YourSignFragment newInstance(int month, int day) {
+ YourSignFragment fragment = new YourSignFragment();
+ Bundle args = new Bundle();
+ args.putInt(MONTH, month);
+ args.putInt(DAY, day);
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ public YourSignFragment() {
+ // Required empty public constructor
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ if (getArguments() != null) {
+ month = getArguments().getInt(MONTH);
+ day = getArguments().getInt(DAY);
+ }
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ View view = inflater.inflate(R.layout.fragment_your_sign, container, false);
+ DatePicker datePicker = (DatePicker) view.findViewById(R.id.birthdate_edit);
+ datePicker.updateDate(1987, 8, 24);
+
+ Button button = (Button) view.findViewById(R.id.birthdate_button);
+ button.setOnClickListener(new View.OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+
+ DatePicker datePicker = (DatePicker) getActivity().findViewById(R.id.birthdate_edit);
+
+ int month = datePicker.getMonth();
+ int day = datePicker.getDayOfMonth();
+ int sign = getSign(month, day);
+ onButtonPressed(sign);
+ }
+ });
+
+ return view;
+ }
+
+ public void onButtonPressed(int sign) {
+
+ if (mListener != null) {
+ mListener.onYourSignFragmentInteraction(sign);
+ }
+
+ }
+
+
+ public int getSign(int month, int dayOfMonth) {
+ Calendar localCalendar = Calendar.getInstance(TimeZone.getDefault());
+ localCalendar.set(2015, month, dayOfMonth);
+ int day = localCalendar.get(Calendar.DAY_OF_YEAR);
+
+ if (day < 22) {
+ return 9;
+ }
+ if (day < 49) {
+ return 10;
+ }
+ if (day < 79) {
+ return 11;
+ }
+ if (day < 109) {
+ return 0;
+ }
+ if (day < 140) {
+ return 1;
+ }
+ if (day < 171) {
+ return 2;
+ }
+ if (day < 203) {
+ return 3;
+ }
+ if (day < 234) {
+ return 4;
+ }
+ if (day < 266) {
+ return 5;
+ }
+ if (day < 295) {
+ return 6;
+ }
+ if (day < 325) {
+ return 7;
+ }
+ if (day < 355) {
+ return 8;
+ }
+
+ return 0;
+
+ }
+
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ try {
+ mListener = (OnFragmentInteractionListener) activity;
+ } catch (ClassCastException e) {
+ throw new ClassCastException(activity.toString()
+ + " must implement OnFragmentInteractionListener");
+ }
+ }
+
+ @Override
+ public void onDetach() {
+ super.onDetach();
+ mListener = null;
+ }
+
+ /**
+ * This interface must be implemented by activities that contain this
+ * fragment to allow an interaction in this fragment to be communicated
+ * to the activity and potentially other fragments contained in that
+ * activity.
+ *
+ * See the Android Training lesson Communicating with Other Fragments for more information.
+ */
+ public interface OnFragmentInteractionListener {
+
+ public void onYourSignFragmentInteraction(int sign);
+ }
+
+}
diff --git a/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/sign/SignContent.java b/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/sign/SignContent.java
new file mode 100644
index 00000000..520dfa3c
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/java/nyc/c4q/ramonaharrison/horoscope/sign/SignContent.java
@@ -0,0 +1,63 @@
+package nyc.c4q.ramonaharrison.horoscope.sign;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Helper class for providing content
+ */
+
+public class SignContent {
+
+ static String[] signs = {"Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius", "Capricorn", "Aquarius", "Pisces"};
+
+
+ /**
+ * An array of items.
+ */
+ public static List ITEMS = new ArrayList();
+
+ /**
+ * A map of items, by ID.
+ */
+ public static Map ITEM_MAP = new HashMap();
+
+
+ static {
+ // Add 3 sample items.
+ addItem(new Sign(0, signs[0]));
+ addItem(new Sign(1, signs[1]));
+ addItem(new Sign(2, signs[2]));
+ addItem(new Sign(3, signs[3]));
+ addItem(new Sign(4, signs[4]));
+ addItem(new Sign(5, signs[5]));
+ addItem(new Sign(6, signs[6]));
+ addItem(new Sign(7, signs[7]));
+ addItem(new Sign(8, signs[8]));
+ addItem(new Sign(9, signs[9]));
+ addItem(new Sign(10, signs[10]));
+ addItem(new Sign(11, signs[11]));
+ }
+
+ private static void addItem(Sign item) {
+ ITEMS.add(item);
+ ITEM_MAP.put(item.id, item);
+ }
+
+ public static class Sign {
+ public int id;
+ public String content;
+
+ public Sign(int id, String content) {
+ this.id = id;
+ this.content = content;
+ }
+
+ @Override
+ public String toString() {
+ return content;
+ }
+ }
+}
diff --git a/homework/week-1/Horoscope/app/src/main/res/drawable-hdpi/drawer_shadow.9.png b/homework/week-1/Horoscope/app/src/main/res/drawable-hdpi/drawer_shadow.9.png
new file mode 100644
index 00000000..236bff55
Binary files /dev/null and b/homework/week-1/Horoscope/app/src/main/res/drawable-hdpi/drawer_shadow.9.png differ
diff --git a/homework/week-1/Horoscope/app/src/main/res/drawable-hdpi/ic_drawer.png b/homework/week-1/Horoscope/app/src/main/res/drawable-hdpi/ic_drawer.png
new file mode 100644
index 00000000..c59f601c
Binary files /dev/null and b/homework/week-1/Horoscope/app/src/main/res/drawable-hdpi/ic_drawer.png differ
diff --git a/homework/week-1/Horoscope/app/src/main/res/drawable-mdpi/drawer_shadow.9.png b/homework/week-1/Horoscope/app/src/main/res/drawable-mdpi/drawer_shadow.9.png
new file mode 100644
index 00000000..ffe3a28d
Binary files /dev/null and b/homework/week-1/Horoscope/app/src/main/res/drawable-mdpi/drawer_shadow.9.png differ
diff --git a/homework/week-1/Horoscope/app/src/main/res/drawable-mdpi/ic_drawer.png b/homework/week-1/Horoscope/app/src/main/res/drawable-mdpi/ic_drawer.png
new file mode 100644
index 00000000..1ed2c56e
Binary files /dev/null and b/homework/week-1/Horoscope/app/src/main/res/drawable-mdpi/ic_drawer.png differ
diff --git a/homework/week-1/Horoscope/app/src/main/res/drawable-v21/heart.xml b/homework/week-1/Horoscope/app/src/main/res/drawable-v21/heart.xml
new file mode 100644
index 00000000..fc6f4e8a
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/res/drawable-v21/heart.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
diff --git a/homework/week-1/Horoscope/app/src/main/res/drawable-xhdpi/drawer_shadow.9.png b/homework/week-1/Horoscope/app/src/main/res/drawable-xhdpi/drawer_shadow.9.png
new file mode 100644
index 00000000..fabe9d96
Binary files /dev/null and b/homework/week-1/Horoscope/app/src/main/res/drawable-xhdpi/drawer_shadow.9.png differ
diff --git a/homework/week-1/Horoscope/app/src/main/res/drawable-xhdpi/ic_drawer.png b/homework/week-1/Horoscope/app/src/main/res/drawable-xhdpi/ic_drawer.png
new file mode 100644
index 00000000..a5fa74de
Binary files /dev/null and b/homework/week-1/Horoscope/app/src/main/res/drawable-xhdpi/ic_drawer.png differ
diff --git a/homework/week-1/Horoscope/app/src/main/res/drawable-xxhdpi/drawer_shadow.9.png b/homework/week-1/Horoscope/app/src/main/res/drawable-xxhdpi/drawer_shadow.9.png
new file mode 100644
index 00000000..b91e9d7f
Binary files /dev/null and b/homework/week-1/Horoscope/app/src/main/res/drawable-xxhdpi/drawer_shadow.9.png differ
diff --git a/homework/week-1/Horoscope/app/src/main/res/drawable-xxhdpi/ic_drawer.png b/homework/week-1/Horoscope/app/src/main/res/drawable-xxhdpi/ic_drawer.png
new file mode 100644
index 00000000..9c4685d6
Binary files /dev/null and b/homework/week-1/Horoscope/app/src/main/res/drawable-xxhdpi/ic_drawer.png differ
diff --git a/homework/week-1/Horoscope/app/src/main/res/drawable/aquarius.jpg b/homework/week-1/Horoscope/app/src/main/res/drawable/aquarius.jpg
new file mode 100644
index 00000000..4b0d3fb7
Binary files /dev/null and b/homework/week-1/Horoscope/app/src/main/res/drawable/aquarius.jpg differ
diff --git a/homework/week-1/Horoscope/app/src/main/res/drawable/aries.jpg b/homework/week-1/Horoscope/app/src/main/res/drawable/aries.jpg
new file mode 100644
index 00000000..daf666e9
Binary files /dev/null and b/homework/week-1/Horoscope/app/src/main/res/drawable/aries.jpg differ
diff --git a/homework/week-1/Horoscope/app/src/main/res/drawable/border.xml b/homework/week-1/Horoscope/app/src/main/res/drawable/border.xml
new file mode 100644
index 00000000..e4c10c0d
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/res/drawable/border.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/homework/week-1/Horoscope/app/src/main/res/drawable/cancer.jpg b/homework/week-1/Horoscope/app/src/main/res/drawable/cancer.jpg
new file mode 100644
index 00000000..80d871cc
Binary files /dev/null and b/homework/week-1/Horoscope/app/src/main/res/drawable/cancer.jpg differ
diff --git a/homework/week-1/Horoscope/app/src/main/res/drawable/capricorn.jpg b/homework/week-1/Horoscope/app/src/main/res/drawable/capricorn.jpg
new file mode 100644
index 00000000..7783fc64
Binary files /dev/null and b/homework/week-1/Horoscope/app/src/main/res/drawable/capricorn.jpg differ
diff --git a/homework/week-1/Horoscope/app/src/main/res/drawable/gemini.jpg b/homework/week-1/Horoscope/app/src/main/res/drawable/gemini.jpg
new file mode 100644
index 00000000..70e1afbe
Binary files /dev/null and b/homework/week-1/Horoscope/app/src/main/res/drawable/gemini.jpg differ
diff --git a/homework/week-1/Horoscope/app/src/main/res/drawable/heart.xml b/homework/week-1/Horoscope/app/src/main/res/drawable/heart.xml
new file mode 100644
index 00000000..4b035d60
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/res/drawable/heart.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/homework/week-1/Horoscope/app/src/main/res/drawable/horoscope.jpg b/homework/week-1/Horoscope/app/src/main/res/drawable/horoscope.jpg
new file mode 100644
index 00000000..f8c4ca5b
Binary files /dev/null and b/homework/week-1/Horoscope/app/src/main/res/drawable/horoscope.jpg differ
diff --git a/homework/week-1/Horoscope/app/src/main/res/drawable/horoscope_title.png b/homework/week-1/Horoscope/app/src/main/res/drawable/horoscope_title.png
new file mode 100644
index 00000000..297da8b3
Binary files /dev/null and b/homework/week-1/Horoscope/app/src/main/res/drawable/horoscope_title.png differ
diff --git a/homework/week-1/Horoscope/app/src/main/res/drawable/leo.jpg b/homework/week-1/Horoscope/app/src/main/res/drawable/leo.jpg
new file mode 100644
index 00000000..ad746d2f
Binary files /dev/null and b/homework/week-1/Horoscope/app/src/main/res/drawable/leo.jpg differ
diff --git a/homework/week-1/Horoscope/app/src/main/res/drawable/libra.jpg b/homework/week-1/Horoscope/app/src/main/res/drawable/libra.jpg
new file mode 100644
index 00000000..f6560cfe
Binary files /dev/null and b/homework/week-1/Horoscope/app/src/main/res/drawable/libra.jpg differ
diff --git a/homework/week-1/Horoscope/app/src/main/res/drawable/pisces.jpg b/homework/week-1/Horoscope/app/src/main/res/drawable/pisces.jpg
new file mode 100644
index 00000000..b98d4842
Binary files /dev/null and b/homework/week-1/Horoscope/app/src/main/res/drawable/pisces.jpg differ
diff --git a/homework/week-1/Horoscope/app/src/main/res/drawable/sagittarius.jpg b/homework/week-1/Horoscope/app/src/main/res/drawable/sagittarius.jpg
new file mode 100644
index 00000000..ae330a9e
Binary files /dev/null and b/homework/week-1/Horoscope/app/src/main/res/drawable/sagittarius.jpg differ
diff --git a/homework/week-1/Horoscope/app/src/main/res/drawable/scorpio.jpg b/homework/week-1/Horoscope/app/src/main/res/drawable/scorpio.jpg
new file mode 100644
index 00000000..74aa24b9
Binary files /dev/null and b/homework/week-1/Horoscope/app/src/main/res/drawable/scorpio.jpg differ
diff --git a/homework/week-1/Horoscope/app/src/main/res/drawable/taurus.jpg b/homework/week-1/Horoscope/app/src/main/res/drawable/taurus.jpg
new file mode 100644
index 00000000..a0ca41ab
Binary files /dev/null and b/homework/week-1/Horoscope/app/src/main/res/drawable/taurus.jpg differ
diff --git a/homework/week-1/Horoscope/app/src/main/res/drawable/virgo.jpg b/homework/week-1/Horoscope/app/src/main/res/drawable/virgo.jpg
new file mode 100644
index 00000000..d6f23d7c
Binary files /dev/null and b/homework/week-1/Horoscope/app/src/main/res/drawable/virgo.jpg differ
diff --git a/homework/week-1/Horoscope/app/src/main/res/layout/activity_main.xml b/homework/week-1/Horoscope/app/src/main/res/layout/activity_main.xml
new file mode 100644
index 00000000..834c700f
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/res/layout/activity_main.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/homework/week-1/Horoscope/app/src/main/res/layout/activity_signs.xml b/homework/week-1/Horoscope/app/src/main/res/layout/activity_signs.xml
new file mode 100644
index 00000000..f904c171
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/res/layout/activity_signs.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
diff --git a/homework/week-1/Horoscope/app/src/main/res/layout/fragment_about_sign.xml b/homework/week-1/Horoscope/app/src/main/res/layout/fragment_about_sign.xml
new file mode 100644
index 00000000..cc643f32
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/res/layout/fragment_about_sign.xml
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/homework/week-1/Horoscope/app/src/main/res/layout/fragment_compatibility.xml b/homework/week-1/Horoscope/app/src/main/res/layout/fragment_compatibility.xml
new file mode 100644
index 00000000..ba125403
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/res/layout/fragment_compatibility.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/homework/week-1/Horoscope/app/src/main/res/layout/fragment_game.xml b/homework/week-1/Horoscope/app/src/main/res/layout/fragment_game.xml
new file mode 100644
index 00000000..1d730c37
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/res/layout/fragment_game.xml
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/homework/week-1/Horoscope/app/src/main/res/layout/fragment_list_view_grid.xml b/homework/week-1/Horoscope/app/src/main/res/layout/fragment_list_view_grid.xml
new file mode 100644
index 00000000..36d5c794
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/res/layout/fragment_list_view_grid.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
diff --git a/homework/week-1/Horoscope/app/src/main/res/layout/fragment_list_view_list.xml b/homework/week-1/Horoscope/app/src/main/res/layout/fragment_list_view_list.xml
new file mode 100644
index 00000000..0e9200b4
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/res/layout/fragment_list_view_list.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
diff --git a/homework/week-1/Horoscope/app/src/main/res/layout/fragment_main.xml b/homework/week-1/Horoscope/app/src/main/res/layout/fragment_main.xml
new file mode 100644
index 00000000..1c517508
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/res/layout/fragment_main.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
diff --git a/homework/week-1/Horoscope/app/src/main/res/layout/fragment_navigation_drawer.xml b/homework/week-1/Horoscope/app/src/main/res/layout/fragment_navigation_drawer.xml
new file mode 100644
index 00000000..5250946a
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/res/layout/fragment_navigation_drawer.xml
@@ -0,0 +1,9 @@
+
diff --git a/homework/week-1/Horoscope/app/src/main/res/layout/fragment_result.xml b/homework/week-1/Horoscope/app/src/main/res/layout/fragment_result.xml
new file mode 100644
index 00000000..74d1fe7a
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/res/layout/fragment_result.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/homework/week-1/Horoscope/app/src/main/res/layout/fragment_your_sign.xml b/homework/week-1/Horoscope/app/src/main/res/layout/fragment_your_sign.xml
new file mode 100644
index 00000000..abe8b92f
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/res/layout/fragment_your_sign.xml
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/homework/week-1/Horoscope/app/src/main/res/layout/list_item.xml b/homework/week-1/Horoscope/app/src/main/res/layout/list_item.xml
new file mode 100644
index 00000000..3509b841
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/res/layout/list_item.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/homework/week-1/Horoscope/app/src/main/res/layout/signs_row.xml b/homework/week-1/Horoscope/app/src/main/res/layout/signs_row.xml
new file mode 100644
index 00000000..2b752c49
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/res/layout/signs_row.xml
@@ -0,0 +1,8 @@
+
+
+
\ No newline at end of file
diff --git a/homework/week-1/Horoscope/app/src/main/res/menu/global.xml b/homework/week-1/Horoscope/app/src/main/res/menu/global.xml
new file mode 100644
index 00000000..326a6a7e
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/res/menu/global.xml
@@ -0,0 +1,5 @@
+
diff --git a/homework/week-1/Horoscope/app/src/main/res/menu/main.xml b/homework/week-1/Horoscope/app/src/main/res/menu/main.xml
new file mode 100644
index 00000000..04a7ab02
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/res/menu/main.xml
@@ -0,0 +1,8 @@
+
diff --git a/homework/week-1/Horoscope/app/src/main/res/menu/menu_signs.xml b/homework/week-1/Horoscope/app/src/main/res/menu/menu_signs.xml
new file mode 100644
index 00000000..f4f4d647
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/res/menu/menu_signs.xml
@@ -0,0 +1,7 @@
+
diff --git a/homework/week-1/Horoscope/app/src/main/res/mipmap-hdpi/ic_launcher.png b/homework/week-1/Horoscope/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 00000000..cde69bcc
Binary files /dev/null and b/homework/week-1/Horoscope/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/homework/week-1/Horoscope/app/src/main/res/mipmap-mdpi/ic_launcher.png b/homework/week-1/Horoscope/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 00000000..c133a0cb
Binary files /dev/null and b/homework/week-1/Horoscope/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/homework/week-1/Horoscope/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/homework/week-1/Horoscope/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 00000000..bfa42f0e
Binary files /dev/null and b/homework/week-1/Horoscope/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/homework/week-1/Horoscope/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/homework/week-1/Horoscope/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 00000000..324e72cd
Binary files /dev/null and b/homework/week-1/Horoscope/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/homework/week-1/Horoscope/app/src/main/res/values-large/refs.xml b/homework/week-1/Horoscope/app/src/main/res/values-large/refs.xml
new file mode 100644
index 00000000..264f0499
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/res/values-large/refs.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+ - @layout/fragment_list_view_grid
+
+
\ No newline at end of file
diff --git a/homework/week-1/Horoscope/app/src/main/res/values-sw600dp/refs.xml b/homework/week-1/Horoscope/app/src/main/res/values-sw600dp/refs.xml
new file mode 100644
index 00000000..1950edbf
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/res/values-sw600dp/refs.xml
@@ -0,0 +1,12 @@
+
+
+
+ - @layout/fragment_list_view_grid
+
+
\ No newline at end of file
diff --git a/homework/week-1/Horoscope/app/src/main/res/values-v21/styles.xml b/homework/week-1/Horoscope/app/src/main/res/values-v21/styles.xml
new file mode 100644
index 00000000..719e754a
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/res/values-v21/styles.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/homework/week-1/Horoscope/app/src/main/res/values-w820dp/dimens.xml b/homework/week-1/Horoscope/app/src/main/res/values-w820dp/dimens.xml
new file mode 100644
index 00000000..63fc8164
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/res/values-w820dp/dimens.xml
@@ -0,0 +1,6 @@
+
+
+ 64dp
+
diff --git a/homework/week-1/Horoscope/app/src/main/res/values/dimens.xml b/homework/week-1/Horoscope/app/src/main/res/values/dimens.xml
new file mode 100644
index 00000000..074e7a03
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/res/values/dimens.xml
@@ -0,0 +1,9 @@
+
+
+ 16dp
+ 16dp
+
+
+ 240dp
+
diff --git a/homework/week-1/Horoscope/app/src/main/res/values/refs.xml b/homework/week-1/Horoscope/app/src/main/res/values/refs.xml
new file mode 100644
index 00000000..4b10044d
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/res/values/refs.xml
@@ -0,0 +1,12 @@
+
+
+
+ - @layout/fragment_list_view_list
+
+
\ No newline at end of file
diff --git a/homework/week-1/Horoscope/app/src/main/res/values/strings.xml b/homework/week-1/Horoscope/app/src/main/res/values/strings.xml
new file mode 100644
index 00000000..4c1dafa3
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/res/values/strings.xml
@@ -0,0 +1,93 @@
+
+ Horoscope
+
+ Signs Overview
+ Your Sign
+ Compatibility
+ Guess the sign!
+
+ Open navigation drawer
+ Close navigation drawer
+
+
+ Your birth date:
+ Go
+
+ Your sign:
+ Their sign:
+ It\'s a match!
+
+
+
+ - Aries
+ - Taurus
+ - Gemini
+ - Cancer
+ - Leo
+ - Virgo
+ - Libra
+ - Scorpio
+ - Sagittarius
+ - Capricorn
+ - Aquarius
+ - Pisces
+
+
+
+ - March 21 - April 19
+ - April 20 - May 20
+ - May 21 - June 21
+ - June 22 - July 22
+ - July 23 - August 22
+ - August 23 - September 22
+ - September 23 - October 23
+ - October 24 - November 20
+ - November 21 - December 22
+ - December 23 - January 20
+ - January 21 - February 21
+ - February 22 - March 20
+
+
+
+ - January
+ - February
+ - March
+ - April
+ - May
+ - June
+ - July
+ - August
+ - September
+ - October
+ - November
+ - December
+
+
+
+ - This sign is represented by the Ram.
+ - This sign is represented by the Bull.
+ - This sign is represented by the Twins.
+ - This sign is represented by the Crab.
+ - This sign is represented by the Lion.
+ - This sign is represented by the Virgin.
+ - This sign is represented by the Scales.
+ - This sign is represented by the Scorpion.
+ - This sign is represented by the Archer.
+ - This sign is represented by the Sea Goat.
+ - This sign is represented by the Water Bearer.
+ - This sign is represented by the Fish.
+
+
+
+
+
+ Settings
+
+ Signs
+ Horoscope
+ Find your sign | Check your compatibility | Test your knowledge!
+
+ Hello world!
+ your sign is:
+
+
diff --git a/homework/week-1/Horoscope/app/src/main/res/values/styles.xml b/homework/week-1/Horoscope/app/src/main/res/values/styles.xml
new file mode 100644
index 00000000..f035fff5
--- /dev/null
+++ b/homework/week-1/Horoscope/app/src/main/res/values/styles.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/homework/week-1/Horoscope/build.gradle b/homework/week-1/Horoscope/build.gradle
new file mode 100644
index 00000000..d3ff69d6
--- /dev/null
+++ b/homework/week-1/Horoscope/build.gradle
@@ -0,0 +1,19 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
+buildscript {
+ repositories {
+ jcenter()
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle:1.1.0'
+
+ // NOTE: Do not place your application dependencies here; they belong
+ // in the individual module build.gradle files
+ }
+}
+
+allprojects {
+ repositories {
+ jcenter()
+ }
+}
diff --git a/homework/week-1/Horoscope/gradle.properties b/homework/week-1/Horoscope/gradle.properties
new file mode 100644
index 00000000..1d3591c8
--- /dev/null
+++ b/homework/week-1/Horoscope/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/homework/week-1/Horoscope/gradle/wrapper/gradle-wrapper.jar b/homework/week-1/Horoscope/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 00000000..8c0fb64a
Binary files /dev/null and b/homework/week-1/Horoscope/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/homework/week-1/Horoscope/gradle/wrapper/gradle-wrapper.properties b/homework/week-1/Horoscope/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 00000000..0c71e760
--- /dev/null
+++ b/homework/week-1/Horoscope/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Wed Apr 10 15:27:10 PDT 2013
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip
diff --git a/homework/week-1/Horoscope/gradlew b/homework/week-1/Horoscope/gradlew
new file mode 100755
index 00000000..91a7e269
--- /dev/null
+++ b/homework/week-1/Horoscope/gradlew
@@ -0,0 +1,164 @@
+#!/usr/bin/env bash
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# 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
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+esac
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched.
+if $cygwin ; then
+ [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+fi
+
+# 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\"`/" >&-
+APP_HOME="`pwd -P`"
+cd "$SAVED" >&-
+
+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" ] ; 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"`
+
+ # 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
+
+# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
+function splitJvmOpts() {
+ JVM_OPTS=("$@")
+}
+eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
+JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+
+exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/homework/week-1/Horoscope/gradlew.bat b/homework/week-1/Horoscope/gradlew.bat
new file mode 100644
index 00000000..aec99730
--- /dev/null
+++ b/homework/week-1/Horoscope/gradlew.bat
@@ -0,0 +1,90 @@
+@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
+
+@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=
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@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 Windowz variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+if "%@eval[2+2]" == "4" goto 4NT_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=%*
+goto execute
+
+:4NT_args
+@rem Get arguments from the 4NT Shell from JP Software
+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/homework/week-1/Horoscope/settings.gradle b/homework/week-1/Horoscope/settings.gradle
new file mode 100644
index 00000000..e7b4def4
--- /dev/null
+++ b/homework/week-1/Horoscope/settings.gradle
@@ -0,0 +1 @@
+include ':app'
diff --git a/review/2015-04-29/AndroidSample/app/app.iml b/review/2015-04-29/AndroidSample/app/app.iml
deleted file mode 100644
index bb3b9e01..00000000
--- a/review/2015-04-29/AndroidSample/app/app.iml
+++ /dev/null
@@ -1,93 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file