├── .gitignore ├── .idea ├── .name ├── compiler.xml ├── copyright │ └── profiles_settings.xml ├── encodings.xml ├── gradle.xml ├── misc.xml ├── modules.xml ├── runConfigurations.xml └── vcs.xml ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── rocks │ │ └── athrow │ │ └── android_quiz_app │ │ └── ApplicationTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── rocks │ │ │ └── athrow │ │ │ └── android_quiz_app │ │ │ └── MainActivity.java │ └── res │ │ ├── layout │ │ └── activity_main.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── rocks │ └── athrow │ └── android_quiz_app │ └── ExampleUnitTest.java ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | android-quiz-app -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 22 | 23 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 19 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 46 | 47 | 48 | 49 | 50 | 1.7 51 | 52 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 68 | 69 | 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # android-quiz-app 2 | 3 | I developed this project as part of the Udacity Code Reviewer training. 4 | 5 | The requirements were to create a quiz layout with at least four different Views, and a method that verifies the answers and displays the final results in a Toast. I chose to present ten questions about science in a combination of free text answers and multiple choice answers. 6 | 7 | ![Screenshot](https://drive.google.com/uc?export=view&id=0B3845EDjiIOWU0xZNmdvandySTA) 8 | 9 | Below are the correct answers: 10 | 11 | * Question 1 - Correct Answer is #3 (DNA) 12 | * Question 2 - Correct Answer is "Vulcanizing" 13 | * Question 3 - Correct Answers are #1 (Ribosomes) and #3 (Golgi Apparatus) 14 | * Question 4 - Correct Answer is "Gravity" 15 | * Question 5 - Correct Answers is #2 "Pine trees" 16 | * Question 6 - Correct Answer is "Clouds" or "Cloud" 17 | * Question 7 - Correct Answers are #3 (Earth) and #4 (Pluto) 18 | * Question 8 - Correct Answer is "Wrist" 19 | * Question 9 - Correct Answers is #2 "Stalagmites" 20 | * Question 10 - Correct Answer is "Smelting" 21 | 22 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 23 5 | buildToolsVersion "23.0.2" 6 | 7 | defaultConfig { 8 | applicationId "rocks.athrow.android_quiz_app" 9 | minSdkVersion 21 10 | targetSdkVersion 23 11 | versionCode 1 12 | versionName "1.0" 13 | } 14 | buildTypes { 15 | release { 16 | minifyEnabled false 17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 18 | } 19 | } 20 | } 21 | 22 | dependencies { 23 | compile fileTree(dir: 'libs', include: ['*.jar']) 24 | testCompile 'junit:junit:4.12' 25 | compile 'com.android.support:appcompat-v7:23.4.0' 26 | } 27 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in C:\Users\josel\AppData\Local\Android\sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /app/src/androidTest/java/rocks/athrow/android_quiz_app/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package rocks.athrow.android_quiz_app; 2 | 3 | import android.app.Application; 4 | import android.test.ApplicationTestCase; 5 | 6 | /** 7 | * Testing Fundamentals 8 | */ 9 | public class ApplicationTest extends ApplicationTestCase { 10 | public ApplicationTest() { 11 | super(Application.class); 12 | } 13 | } -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/java/rocks/athrow/android_quiz_app/MainActivity.java: -------------------------------------------------------------------------------- 1 | package rocks.athrow.android_quiz_app; 2 | 3 | import android.content.Context; 4 | import android.support.annotation.Nullable; 5 | import android.support.v7.app.AppCompatActivity; 6 | import android.os.Bundle; 7 | import android.util.Log; 8 | import android.view.Gravity; 9 | import android.view.View; 10 | import android.view.WindowManager; 11 | import android.widget.CheckBox; 12 | import android.widget.EditText; 13 | import android.widget.LinearLayout; 14 | import android.widget.RadioButton; 15 | import android.widget.Toast; 16 | 17 | public class MainActivity extends AppCompatActivity { 18 | private static final String LOG_TAG = MainActivity.class.getSimpleName(); 19 | // Question 1 20 | RadioButton question1_choice3; 21 | // Question 2 22 | EditText question2_answer; 23 | // Question 3 24 | CheckBox question3_choice1; 25 | CheckBox question2_choice2; 26 | CheckBox question3_choice3; 27 | CheckBox question3_choice4; 28 | // Question 4 29 | EditText question4_answer; 30 | // Question 5 31 | RadioButton question5_choice2; 32 | // Question 6 33 | EditText question6_answer; 34 | // Question 7 35 | CheckBox question7_choice1; 36 | CheckBox question7_choice2; 37 | CheckBox question7_choice3; 38 | CheckBox question7_choice4; 39 | // Question 8 40 | EditText question8_answer; 41 | // Question 9 42 | RadioButton question9_choice2; 43 | // Question 10 44 | EditText question10_answer; 45 | 46 | @Override 47 | protected void onCreate(Bundle savedInstanceState) { 48 | super.onCreate(savedInstanceState); 49 | // Hide the keyboard 50 | this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 51 | setContentView(R.layout.activity_main); 52 | } 53 | 54 | 55 | public void submitAnswers(View view) { 56 | CharSequence resultsDisplay; 57 | Log.e(LOG_TAG, " " + this.findViewById(R.id.question3_choice3)); 58 | int answer1_score; 59 | int answer2_score; 60 | int answer3_score; 61 | int answer4_score; 62 | int answer5_score; 63 | int answer6_score; 64 | int answer7_score; 65 | int answer8_score; 66 | int answer9_score; 67 | int answer10_score; 68 | int final_score; 69 | 70 | //------------------------------------------------------------------------------------------ 71 | // Question 1 - Correct Answer is #3 (DNA) 72 | //------------------------------------------------------------------------------------------ 73 | Boolean answer1; 74 | 75 | question1_choice3 = (RadioButton) this.findViewById(R.id.question1_choice3); 76 | answer1 = question1_choice3.isChecked(); 77 | if (answer1) { 78 | answer1_score = 1; 79 | } else { 80 | answer1_score = 0; 81 | } 82 | //------------------------------------------------------------------------------------------ 83 | // Question 2 - Correct Answer is "Vulcanizing" 84 | //------------------------------------------------------------------------------------------ 85 | String answer2; 86 | question2_answer = (EditText) this.findViewById(R.id.question2_answer); 87 | answer2 = question2_answer.getText().toString().toLowerCase(); 88 | if (answer2.equals("vulcanizing")) { 89 | answer2_score = 1; 90 | } else { 91 | answer2_score = 0; 92 | } 93 | //------------------------------------------------------------------------------------------ 94 | // Question 3 - Correct Answers are #1 (Ribosomes) and #3 (Golgi Apparatus) 95 | //------------------------------------------------------------------------------------------ 96 | Boolean answer3_choice1; 97 | Boolean answer3_choice2; 98 | Boolean answer3_choice3; 99 | Boolean answer3_choice4; 100 | question3_choice1 = (CheckBox) this.findViewById(R.id.question3_choice1); 101 | question2_choice2 = (CheckBox) this.findViewById(R.id.question3_choice2); 102 | question3_choice3 = (CheckBox) this.findViewById(R.id.question3_choice3); 103 | question3_choice4 = (CheckBox) this.findViewById(R.id.question3_choice4); 104 | answer3_choice1 = question3_choice1.isChecked(); 105 | answer3_choice2 = question2_choice2.isChecked(); 106 | answer3_choice3 = question3_choice3.isChecked(); 107 | answer3_choice4 = question3_choice4.isChecked(); 108 | if (answer3_choice1 && !answer3_choice2 && answer3_choice3 && !answer3_choice4) { 109 | answer3_score = 1; 110 | } else { 111 | answer3_score = 0; 112 | } 113 | //------------------------------------------------------------------------------------------ 114 | // Question 4 - Correct Answer is "Gravity" 115 | //------------------------------------------------------------------------------------------ 116 | String answer4; 117 | question4_answer = (EditText) this.findViewById(R.id.question4_answer); 118 | answer4 = question4_answer.getText().toString().toLowerCase(); 119 | if (answer4.equals("gravity")) { 120 | answer4_score = 1; 121 | } else { 122 | answer4_score = 0; 123 | } 124 | //------------------------------------------------------------------------------------------ 125 | // Question 5 - Correct Answers is #2 "Pine trees" 126 | //------------------------------------------------------------------------------------------ 127 | Boolean answer5; 128 | question5_choice2 = (RadioButton) this.findViewById(R.id.question5_choice2); 129 | answer5 = question5_choice2.isChecked(); 130 | if (answer5) { 131 | answer5_score = 1; 132 | } else { 133 | answer5_score = 0; 134 | } 135 | //------------------------------------------------------------------------------------------ 136 | // Question 6 - Correct Answer is "Clouds" or "Cloud" 137 | //------------------------------------------------------------------------------------------ 138 | String answer6; 139 | question6_answer = (EditText) this.findViewById(R.id.question6_answer); 140 | answer6 = question6_answer.getText().toString().toLowerCase(); 141 | if (answer6.equals("clouds") || answer6.equals("cloud")) { 142 | answer6_score = 1; 143 | } else { 144 | answer6_score = 0; 145 | } 146 | //------------------------------------------------------------------------------------------ 147 | // Question 7 - Correct Answers are #3 (Earth) and #4 (Pluto) 148 | //------------------------------------------------------------------------------------------ 149 | Boolean answer7_choice1; 150 | Boolean answer7_choice2; 151 | Boolean answer7_choice3; 152 | Boolean answer7_choice4; 153 | question7_choice1 = (CheckBox) this.findViewById(R.id.question7_choice1); 154 | question7_choice2 = (CheckBox) this.findViewById(R.id.question7_choice2); 155 | question7_choice3 = (CheckBox) this.findViewById(R.id.question7_choice3); 156 | question7_choice4 = (CheckBox) this.findViewById(R.id.question7_choice4); 157 | answer7_choice1 = question7_choice1.isChecked(); 158 | answer7_choice2 = question7_choice2.isChecked(); 159 | answer7_choice3 = question7_choice3.isChecked(); 160 | answer7_choice4 = question7_choice4.isChecked(); 161 | if (!answer7_choice1 && !answer7_choice2 && answer7_choice3 && answer7_choice4) { 162 | answer7_score = 1; 163 | } else { 164 | answer7_score = 0; 165 | } 166 | //------------------------------------------------------------------------------------------ 167 | // Question 8 - Correct Answer is "Wrist" 168 | //------------------------------------------------------------------------------------------ 169 | String answer8; 170 | question8_answer = (EditText) this.findViewById(R.id.question8_answer); 171 | answer8 = question8_answer.getText().toString().toLowerCase(); 172 | if (answer8.equals("wrist")) { 173 | answer8_score = 1; 174 | } else { 175 | answer8_score = 0; 176 | } 177 | //------------------------------------------------------------------------------------------ 178 | // Question 9 - Correct Answers is #2 "Stalagmites" 179 | //------------------------------------------------------------------------------------------ 180 | Boolean answer9; 181 | question9_choice2 = (RadioButton) this.findViewById(R.id.question9_choice2); 182 | answer9 = question9_choice2.isChecked(); 183 | if (answer9) { 184 | answer9_score = 1; 185 | } else { 186 | answer9_score = 0; 187 | } 188 | //------------------------------------------------------------------------------------------ 189 | // Question 10 - Correct Answer is "Smelting" 190 | //------------------------------------------------------------------------------------------ 191 | String answer10; 192 | question10_answer = (EditText) this.findViewById(R.id.question10_answer); 193 | answer10 = question10_answer.getText().toString().toLowerCase(); 194 | if (answer10.equals("smelting")) { 195 | answer10_score = 1; 196 | } else { 197 | answer10_score = 0; 198 | } 199 | //------------------------------------------------------------------------------------------ 200 | // Final Score 201 | //------------------------------------------------------------------------------------------ 202 | final_score = answer1_score + answer2_score + answer3_score + answer4_score + answer5_score + 203 | answer6_score + answer7_score + answer8_score + answer9_score + answer10_score; 204 | 205 | if (final_score == 10) { 206 | resultsDisplay = "Perfect! You scored 10 out of 10"; 207 | } else { 208 | resultsDisplay = "Try again. You scored " + final_score + " out of 10"; 209 | } 210 | 211 | Context context = getApplicationContext(); 212 | int duration = Toast.LENGTH_LONG; 213 | Toast toast = Toast.makeText(context, resultsDisplay, duration); 214 | toast.setGravity(Gravity.CENTER, 0, 0); 215 | toast.show(); 216 | } 217 | } 218 | 219 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 17 | 18 | 25 | 26 | 30 | 31 | 37 | 38 | 44 | 45 | 51 | 52 | 53 | 62 | 63 | 68 | 69 | 77 | 78 | 83 | 84 | 89 | 90 | 95 | 96 | 101 | 102 | 111 | 112 | 113 | 119 | 120 | 128 | 129 | 133 | 134 | 139 | 140 | 145 | 146 | 151 | 152 | 153 | 154 | 163 | 164 | 170 | 171 | 179 | 180 | 181 | 186 | 187 | 192 | 193 | 198 | 199 | 204 | 205 | 206 | 215 | 216 | 217 | 223 | 224 | 232 | 233 | 237 | 238 | 243 | 244 | 249 | 250 | 251 | 252 | 261 | 262 | 268 | 269 |