From 5dacfd86b0e2f16d324c30c6df49933529596c4f Mon Sep 17 00:00:00 2001 From: DJ Todd Date: Sun, 13 Dec 2015 13:20:08 -0600 Subject: [PATCH] initial commit of project --- .gitignore | 8 + .idea/.name | 1 + .idea/compiler.xml | 22 ++ .idea/copyright/profiles_settings.xml | 3 + .idea/encodings.xml | 6 + .idea/gradle.xml | 25 ++ .idea/misc.xml | 62 +++++ .idea/modules.xml | 9 + .idea/runConfigurations.xml | 12 + app/.gitignore | 1 + app/build.gradle | 45 ++++ app/proguard-rules.pro | 17 ++ .../kodlin/kotlincalc/ApplicationTest.java | 13 + app/src/main/AndroidManifest.xml | 28 +++ .../kodlin/kotlincalc/JavaMainActivity.java | 232 ++++++++++++++++++ .../kodlin/kotlincalc/MainActivity.kt | 103 ++++++++ app/src/main/res/layout/activity_main.xml | 14 ++ app/src/main/res/layout/content_main.xml | 168 +++++++++++++ app/src/main/res/menu/menu_main.xml | 10 + app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3418 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2206 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4842 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7718 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10486 bytes app/src/main/res/values-v21/styles.xml | 9 + app/src/main/res/values-w820dp/dimens.xml | 6 + app/src/main/res/values/colors.xml | 6 + app/src/main/res/values/dimens.xml | 6 + app/src/main/res/values/strings.xml | 4 + app/src/main/res/values/styles.xml | 20 ++ .../kodlin/kotlincalc/ExampleUnitTest.java | 15 ++ build.gradle | 23 ++ gradle.properties | 18 ++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 53637 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 160 ++++++++++++ gradlew.bat | 90 +++++++ settings.gradle | 1 + 38 files changed, 1143 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/.name create mode 100644 .idea/compiler.xml create mode 100644 .idea/copyright/profiles_settings.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/gradle.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/runConfigurations.xml create mode 100644 app/.gitignore create mode 100644 app/build.gradle create mode 100644 app/proguard-rules.pro create mode 100644 app/src/androidTest/java/com/darrellii/kodlin/kotlincalc/ApplicationTest.java create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/java/com/darrellii/kodlin/kotlincalc/JavaMainActivity.java create mode 100644 app/src/main/java/com/darrellii/kodlin/kotlincalc/MainActivity.kt create mode 100644 app/src/main/res/layout/activity_main.xml create mode 100644 app/src/main/res/layout/content_main.xml create mode 100644 app/src/main/res/menu/menu_main.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 app/src/main/res/values-v21/styles.xml create mode 100644 app/src/main/res/values-w820dp/dimens.xml create mode 100644 app/src/main/res/values/colors.xml create mode 100644 app/src/main/res/values/dimens.xml create mode 100644 app/src/main/res/values/strings.xml create mode 100644 app/src/main/res/values/styles.xml create mode 100644 app/src/test/java/com/darrellii/kodlin/kotlincalc/ExampleUnitTest.java create mode 100644 build.gradle create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c6cbe56 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +*.iml +.gradle +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build +/captures diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..a880b27 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +KotlinCalc \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..9a8b7e5 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,22 @@ + + + + + \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml new file mode 100644 index 0000000..e7bedf3 --- /dev/null +++ b/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..97626ba --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..680bb89 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,25 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..dae7a60 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.7 + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..dd7ffed --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..7f68460 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..ed1c4ce --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,45 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' + +android { + compileSdkVersion 23 + buildToolsVersion "23.0.1" + + defaultConfig { + applicationId "com.darrellii.kodlin.kotlincalc" + minSdkVersion 15 + targetSdkVersion 23 + versionCode 1 + versionName "1.0" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } +} + +dependencies { + compile fileTree(dir: 'libs', include: ['*.jar']) + testCompile 'junit:junit:4.12' + compile 'com.android.support:appcompat-v7:23.1.1' + compile 'com.android.support:design:23.1.1' + compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" +} +buildscript { + ext.kotlin_version = '1.0.0-beta-2423' + repositories { + mavenCentral() + } + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version" + } +} +repositories { + mavenCentral() +} diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..679dd47 --- /dev/null +++ b/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/dj/Development/SDK/android-sdk-macosx/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/app/src/androidTest/java/com/darrellii/kodlin/kotlincalc/ApplicationTest.java b/app/src/androidTest/java/com/darrellii/kodlin/kotlincalc/ApplicationTest.java new file mode 100644 index 0000000..200eed3 --- /dev/null +++ b/app/src/androidTest/java/com/darrellii/kodlin/kotlincalc/ApplicationTest.java @@ -0,0 +1,13 @@ +package com.darrellii.kodlin.kotlincalc; + +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/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..996a934 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/java/com/darrellii/kodlin/kotlincalc/JavaMainActivity.java b/app/src/main/java/com/darrellii/kodlin/kotlincalc/JavaMainActivity.java new file mode 100644 index 0000000..c92833e --- /dev/null +++ b/app/src/main/java/com/darrellii/kodlin/kotlincalc/JavaMainActivity.java @@ -0,0 +1,232 @@ +package com.darrellii.kodlin.kotlincalc; + +import android.content.Intent; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +public class JavaMainActivity extends AppCompatActivity { + + + private boolean isCurrentlyTypingNumber = false; + private int currentNumber = 0; + private Operation op = Operation.NONE; + private int total = 0; + + enum Operation { + MULTIPLY, + DIVIDE, + ADD, + SUBTRACT, + NONE + } + + TextView display, displayHistory; + Button javaKotlinSwitch; + Button b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, + plus, minus, times, divide, equal, delete; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + display = (TextView) findViewById(R.id.display); + displayHistory = (TextView) findViewById(R.id.displayHistory); + javaKotlinSwitch = (Button) findViewById(R.id.javaKotlinSwitch); + b0 = (Button) findViewById(R.id.b0); + b1 = (Button) findViewById(R.id.b1); + b2 = (Button) findViewById(R.id.b2); + b3 = (Button) findViewById(R.id.b3); + b4 = (Button) findViewById(R.id.b4); + b5 = (Button) findViewById(R.id.b5); + b6 = (Button) findViewById(R.id.b6); + b7 = (Button) findViewById(R.id.b7); + b8 = (Button) findViewById(R.id.b8); + b9 = (Button) findViewById(R.id.b9); + plus = (Button) findViewById(R.id.plus); + minus = (Button) findViewById(R.id.minus); + times = (Button) findViewById(R.id.times); + divide = (Button) findViewById(R.id.divide); + equal = (Button) findViewById(R.id.equal); + delete = (Button) findViewById(R.id.delete); + + display.setText("0"); + displayHistory.setText(""); + javaKotlinSwitch.setText("Switch to Kotlin"); + + + b0.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + appendNumber(0); + } + }); + b1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + appendNumber(1); + } + }); + b2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + appendNumber(2); + } + }); + b3.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + appendNumber(3); + } + }); + b4.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + appendNumber(4); + } + }); + b5.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + appendNumber(5); + } + }); + b6.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + appendNumber(6); + } + }); + b7.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + appendNumber(7); + } + }); + b8.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + appendNumber(8); + } + }); + b9.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + appendNumber(9); + } + }); + javaKotlinSwitch.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + startActivity(new Intent(JavaMainActivity.this, MainActivity.class)); + } + }); + plus.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + setOperation(Operation.ADD); + } + }); + minus.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + setOperation(Operation.SUBTRACT); + } + }); + times.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + setOperation(Operation.MULTIPLY); + } + }); + divide.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + setOperation(Operation.DIVIDE); + } + }); + equal.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + evaluateProgram(); + } + }); + delete.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + deleteOrClear(); + } + }); + } + + private void deleteOrClear() { + if(isCurrentlyTypingNumber){ + currentNumber /= 10; + display.setText(display.getText().length() >1? + display.getText().subSequence(0,display.getText().length() -1): "0"); + }else{ + total = 0; + display.setText("0"); + displayHistory.setText(""); + currentNumber = total; + op = Operation.NONE; + } + + } + + private void evaluateProgram() { + setOperation(Operation.NONE); + currentNumber = total; + } + + private void setOperation(Operation newOp) { + switch (op) { + case ADD: + total += currentNumber; + break; + case DIVIDE: + total = total / currentNumber; + break; + case SUBTRACT: + total = total - currentNumber; + break; + case MULTIPLY: + total *= currentNumber; + break; + case NONE: + total = currentNumber; + break; + } + switch (newOp) { + case ADD: + displayHistory.setText(total+"+"); + break; + case DIVIDE: + displayHistory.setText(total+"÷"); + break; + case SUBTRACT: + displayHistory.setText((total + "-")); + break; + case MULTIPLY: + displayHistory.setText(total+"x"); + break; + case NONE: + displayHistory.setText(total); + break; + } + op = newOp; + isCurrentlyTypingNumber = false; + currentNumber = 0; + display.setText("0"); + } + + private void appendNumber(int i) { + currentNumber = currentNumber*10 + i; + display.setText(isCurrentlyTypingNumber? display.getText() + String.valueOf(i) : + String.valueOf(i)); + isCurrentlyTypingNumber = true; + } + +} diff --git a/app/src/main/java/com/darrellii/kodlin/kotlincalc/MainActivity.kt b/app/src/main/java/com/darrellii/kodlin/kotlincalc/MainActivity.kt new file mode 100644 index 0000000..38de6e8 --- /dev/null +++ b/app/src/main/java/com/darrellii/kodlin/kotlincalc/MainActivity.kt @@ -0,0 +1,103 @@ +package com.darrellii.kodlin.kotlincalc + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import android.support.v7.app.AppCompatActivity +import kotlinx.android.synthetic.content_main.* + +class MainActivity : AppCompatActivity() { + + private var isCurrentlyTypingNumber = false + private var currentNumber = 0 + private var op = Operation.NONE + private var total = 0 + + private enum class Operation { + MULTIPLY, + DIVIDE, + ADD, + SUBTRACT, + NONE + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) + + /*Set up is so much easier*/ + display.text = "0" + displayHistory.text = "" + b0.setOnClickListener { appendNumber(0) } + b1.setOnClickListener { appendNumber(1) } + b2.setOnClickListener { appendNumber(2) } + b3.setOnClickListener { appendNumber(3) } + b4.setOnClickListener { appendNumber(4) } + b5.setOnClickListener { appendNumber(5) } + b6.setOnClickListener { appendNumber(6) } + b7.setOnClickListener { appendNumber(7) } + b8.setOnClickListener { appendNumber(8) } + b9.setOnClickListener { appendNumber(9) } + plus.setOnClickListener { setOperation(Operation.ADD) } + minus.setOnClickListener { setOperation(Operation.SUBTRACT) } + divide.setOnClickListener { setOperation(Operation.DIVIDE) } + times.setOnClickListener { setOperation(Operation.MULTIPLY) } + equal.setOnClickListener { evaluateProgram() } + delete.setOnClickListener { deleteOrClear() } + javaKotlinSwitch.setOnClickListener { Intent(applicationContext as Context, JavaMainActivity::class.java) } + javaKotlinSwitch.text = "Switch to Java" + } + + + private fun setOperation(newOp: Operation) { + + total = when (op) { + Operation.ADD -> total + currentNumber + Operation.DIVIDE -> total / currentNumber + Operation.SUBTRACT -> total - currentNumber + Operation.MULTIPLY -> total * currentNumber + Operation.NONE -> currentNumber + } + displayHistory.text = total.toString() + when (newOp) { + Operation.ADD -> "+" + Operation.DIVIDE -> "÷" + Operation.SUBTRACT -> "-" + Operation.MULTIPLY -> "x" + Operation.NONE -> "" + } + op = newOp + isCurrentlyTypingNumber = false + currentNumber = 0 + display.text = 0.toString() + } + + private fun appendNumber(number: Int) { + currentNumber = currentNumber * 10 + number + display.text = if(isCurrentlyTypingNumber) display.text.toString() + number else number.toString() + isCurrentlyTypingNumber = true + } + + private fun evaluateProgram() { + setOperation(Operation.NONE) + currentNumber = total + } + + private fun deleteOrClear() { + if (isCurrentlyTypingNumber) { + currentNumber /= 10 + display.text = + if(display.text.length>1) + display.text.subSequence(0,display.text.length-1) + else + 0.toString() + } else { + total = 0 + display.text = total.toString() + displayHistory.text = "" + currentNumber = total + op = Operation.NONE + } + isCurrentlyTypingNumber = currentNumber != 0 + } + +} diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..e570e25 --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,14 @@ + + + + + + + + diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml new file mode 100644 index 0000000..a1a1ad9 --- /dev/null +++ b/app/src/main/res/layout/content_main.xml @@ -0,0 +1,168 @@ + + + + +