Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
C
cs349-code
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Daniel Vogel
cs349-code
Commits
a69f12c2
Commit
a69f12c2
authored
Nov 22, 2017
by
Daniel Vogel
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
updated MVC examples, added MVVM example
parent
8c670a7e
Changes
144
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
144 changed files
with
3289 additions
and
1054 deletions
+3289
-1054
android/MVC1/app/.gitignore
android/MVC1/app/.gitignore
+1
-0
android/MVC1/app/build.gradle
android/MVC1/app/build.gradle
+13
-8
android/MVC1/app/proguard-rules.pro
android/MVC1/app/proguard-rules.pro
+21
-0
android/MVC1/app/src/androidTest/java/cs349/uwaterloo/ca/mvc1/ExampleInstrumentedTest.java
...java/cs349/uwaterloo/ca/mvc1/ExampleInstrumentedTest.java
+28
-0
android/MVC1/app/src/main/AndroidManifest.xml
android/MVC1/app/src/main/AndroidManifest.xml
+10
-16
android/MVC1/app/src/main/java/com/example/mvc/MainActivity.java
.../MVC1/app/src/main/java/com/example/mvc/MainActivity.java
+0
-65
android/MVC1/app/src/main/java/com/example/mvc/Model.java
android/MVC1/app/src/main/java/com/example/mvc/Model.java
+0
-65
android/MVC1/app/src/main/java/com/example/mvc/View1.java
android/MVC1/app/src/main/java/com/example/mvc/View1.java
+0
-54
android/MVC1/app/src/main/java/com/example/mvc/View2.java
android/MVC1/app/src/main/java/com/example/mvc/View2.java
+0
-62
android/MVC1/app/src/main/java/cs349/uwaterloo/ca/mvc1/MainActivity.java
...p/src/main/java/cs349/uwaterloo/ca/mvc1/MainActivity.java
+96
-0
android/MVC1/app/src/main/java/cs349/uwaterloo/ca/mvc1/Model.java
...MVC1/app/src/main/java/cs349/uwaterloo/ca/mvc1/Model.java
+139
-0
android/MVC1/app/src/main/java/cs349/uwaterloo/ca/mvc1/View1.java
...MVC1/app/src/main/java/cs349/uwaterloo/ca/mvc1/View1.java
+73
-0
android/MVC1/app/src/main/java/cs349/uwaterloo/ca/mvc1/View2.java
...MVC1/app/src/main/java/cs349/uwaterloo/ca/mvc1/View2.java
+80
-0
android/MVC1/app/src/main/res/drawable-hdpi/ic_launcher.png
android/MVC1/app/src/main/res/drawable-hdpi/ic_launcher.png
+0
-0
android/MVC1/app/src/main/res/drawable-mdpi/ic_launcher.png
android/MVC1/app/src/main/res/drawable-mdpi/ic_launcher.png
+0
-0
android/MVC1/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
.../app/src/main/res/drawable-v24/ic_launcher_foreground.xml
+34
-0
android/MVC1/app/src/main/res/drawable-xhdpi/ic_launcher.png
android/MVC1/app/src/main/res/drawable-xhdpi/ic_launcher.png
+0
-0
android/MVC1/app/src/main/res/drawable-xxhdpi/ic_launcher.png
...oid/MVC1/app/src/main/res/drawable-xxhdpi/ic_launcher.png
+0
-0
android/MVC1/app/src/main/res/drawable/ic_launcher_background.xml
...MVC1/app/src/main/res/drawable/ic_launcher_background.xml
+171
-0
android/MVC1/app/src/main/res/layout-land/mainactivity.xml
android/MVC1/app/src/main/res/layout-land/mainactivity.xml
+0
-21
android/MVC1/app/src/main/res/layout-port/mainactivity.xml
android/MVC1/app/src/main/res/layout-port/mainactivity.xml
+0
-21
android/MVC1/app/src/main/res/layout/activity_main.xml
android/MVC1/app/src/main/res/layout/activity_main.xml
+40
-0
android/MVC1/app/src/main/res/layout/view1.xml
android/MVC1/app/src/main/res/layout/view1.xml
+0
-19
android/MVC1/app/src/main/res/layout/view1_layout.xml
android/MVC1/app/src/main/res/layout/view1_layout.xml
+13
-0
android/MVC1/app/src/main/res/layout/view2.xml
android/MVC1/app/src/main/res/layout/view2.xml
+0
-19
android/MVC1/app/src/main/res/layout/view2_layout.xml
android/MVC1/app/src/main/res/layout/view2_layout.xml
+13
-0
android/MVC1/app/src/main/res/menu/main.xml
android/MVC1/app/src/main/res/menu/main.xml
+0
-9
android/MVC1/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
...d/MVC1/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
+5
-0
android/MVC1/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
.../app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
+5
-0
android/MVC1/app/src/main/res/mipmap-hdpi/ic_launcher.png
android/MVC1/app/src/main/res/mipmap-hdpi/ic_launcher.png
+0
-0
android/MVC1/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
...d/MVC1/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
+0
-0
android/MVC1/app/src/main/res/mipmap-mdpi/ic_launcher.png
android/MVC1/app/src/main/res/mipmap-mdpi/ic_launcher.png
+0
-0
android/MVC1/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
...d/MVC1/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
+0
-0
android/MVC1/app/src/main/res/mipmap-xhdpi/ic_launcher.png
android/MVC1/app/src/main/res/mipmap-xhdpi/ic_launcher.png
+0
-0
android/MVC1/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
.../MVC1/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
+0
-0
android/MVC1/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
android/MVC1/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
+0
-0
android/MVC1/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
...MVC1/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
+0
-0
android/MVC1/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
android/MVC1/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
+0
-0
android/MVC1/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
...VC1/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
+0
-0
android/MVC1/app/src/main/res/values-sw600dp/dimens.xml
android/MVC1/app/src/main/res/values-sw600dp/dimens.xml
+0
-8
android/MVC1/app/src/main/res/values-sw720dp-land/dimens.xml
android/MVC1/app/src/main/res/values-sw720dp-land/dimens.xml
+0
-9
android/MVC1/app/src/main/res/values-v11/styles.xml
android/MVC1/app/src/main/res/values-v11/styles.xml
+0
-11
android/MVC1/app/src/main/res/values-v14/styles.xml
android/MVC1/app/src/main/res/values-v14/styles.xml
+0
-12
android/MVC1/app/src/main/res/values/colors.xml
android/MVC1/app/src/main/res/values/colors.xml
+6
-0
android/MVC1/app/src/main/res/values/dimens.xml
android/MVC1/app/src/main/res/values/dimens.xml
+0
-7
android/MVC1/app/src/main/res/values/strings.xml
android/MVC1/app/src/main/res/values/strings.xml
+1
-5
android/MVC1/app/src/main/res/values/styles.xml
android/MVC1/app/src/main/res/values/styles.xml
+6
-15
android/MVC1/app/src/test/java/cs349/uwaterloo/ca/mvc1/ExampleUnitTest.java
...rc/test/java/cs349/uwaterloo/ca/mvc1/ExampleUnitTest.java
+19
-0
android/MVC1/build.gradle
android/MVC1/build.gradle
+12
-0
android/MVC1/gradle.properties
android/MVC1/gradle.properties
+17
-0
android/MVC1/gradle/wrapper/gradle-wrapper.properties
android/MVC1/gradle/wrapper/gradle-wrapper.properties
+1
-1
android/MVC1/gradlew
android/MVC1/gradlew
+0
-0
android/MVC1/gradlew.bat
android/MVC1/gradlew.bat
+90
-90
android/MVC2/app/.gitignore
android/MVC2/app/.gitignore
+1
-0
android/MVC2/app/build.gradle
android/MVC2/app/build.gradle
+13
-8
android/MVC2/app/proguard-rules.pro
android/MVC2/app/proguard-rules.pro
+21
-0
android/MVC2/app/src/androidTest/java/cs349/uwaterloo/ca/mvc2/ExampleInstrumentedTest.java
...java/cs349/uwaterloo/ca/mvc2/ExampleInstrumentedTest.java
+28
-0
android/MVC2/app/src/main/AndroidManifest.xml
android/MVC2/app/src/main/AndroidManifest.xml
+11
-16
android/MVC2/app/src/main/java/com/example/mvc2/Model.java
android/MVC2/app/src/main/java/com/example/mvc2/Model.java
+0
-58
android/MVC2/app/src/main/java/com/example/mvc2/MyApplication.java
...VC2/app/src/main/java/com/example/mvc2/MyApplication.java
+0
-10
android/MVC2/app/src/main/java/com/example/mvc2/View1Activity.java
...VC2/app/src/main/java/com/example/mvc2/View1Activity.java
+0
-103
android/MVC2/app/src/main/java/com/example/mvc2/View2Activity.java
...VC2/app/src/main/java/com/example/mvc2/View2Activity.java
+0
-109
android/MVC2/app/src/main/java/cs349/uwaterloo/ca/mvc2/MainActivity.java
...p/src/main/java/cs349/uwaterloo/ca/mvc2/MainActivity.java
+161
-0
android/MVC2/app/src/main/java/cs349/uwaterloo/ca/mvc2/Model.java
...MVC2/app/src/main/java/cs349/uwaterloo/ca/mvc2/Model.java
+142
-0
android/MVC2/app/src/main/java/cs349/uwaterloo/ca/mvc2/SecondActivity.java
...src/main/java/cs349/uwaterloo/ca/mvc2/SecondActivity.java
+175
-0
android/MVC2/app/src/main/res/drawable-hdpi/ic_launcher.png
android/MVC2/app/src/main/res/drawable-hdpi/ic_launcher.png
+0
-0
android/MVC2/app/src/main/res/drawable-mdpi/ic_launcher.png
android/MVC2/app/src/main/res/drawable-mdpi/ic_launcher.png
+0
-0
android/MVC2/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
.../app/src/main/res/drawable-v24/ic_launcher_foreground.xml
+34
-0
android/MVC2/app/src/main/res/drawable-xhdpi/ic_launcher.png
android/MVC2/app/src/main/res/drawable-xhdpi/ic_launcher.png
+0
-0
android/MVC2/app/src/main/res/drawable-xxhdpi/ic_launcher.png
...oid/MVC2/app/src/main/res/drawable-xxhdpi/ic_launcher.png
+0
-0
android/MVC2/app/src/main/res/drawable/ic_launcher_background.xml
...MVC2/app/src/main/res/drawable/ic_launcher_background.xml
+171
-0
android/MVC2/app/src/main/res/layout/activity_main.xml
android/MVC2/app/src/main/res/layout/activity_main.xml
+21
-0
android/MVC2/app/src/main/res/layout/activity_second.xml
android/MVC2/app/src/main/res/layout/activity_second.xml
+22
-0
android/MVC2/app/src/main/res/layout/activity_view1.xml
android/MVC2/app/src/main/res/layout/activity_view1.xml
+0
-21
android/MVC2/app/src/main/res/layout/activity_view2.xml
android/MVC2/app/src/main/res/layout/activity_view2.xml
+0
-25
android/MVC2/app/src/main/res/menu/view1.xml
android/MVC2/app/src/main/res/menu/view1.xml
+4
-12
android/MVC2/app/src/main/res/menu/view2.xml
android/MVC2/app/src/main/res/menu/view2.xml
+5
-11
android/MVC2/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
...d/MVC2/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
+5
-0
android/MVC2/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
.../app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
+5
-0
android/MVC2/app/src/main/res/mipmap-hdpi/ic_launcher.png
android/MVC2/app/src/main/res/mipmap-hdpi/ic_launcher.png
+0
-0
android/MVC2/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
...d/MVC2/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
+0
-0
android/MVC2/app/src/main/res/mipmap-mdpi/ic_launcher.png
android/MVC2/app/src/main/res/mipmap-mdpi/ic_launcher.png
+0
-0
android/MVC2/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
...d/MVC2/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
+0
-0
android/MVC2/app/src/main/res/mipmap-xhdpi/ic_launcher.png
android/MVC2/app/src/main/res/mipmap-xhdpi/ic_launcher.png
+0
-0
android/MVC2/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
.../MVC2/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
+0
-0
android/MVC2/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
android/MVC2/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
+0
-0
android/MVC2/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
...MVC2/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
+0
-0
android/MVC2/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
android/MVC2/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
+0
-0
android/MVC2/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
...VC2/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
+0
-0
android/MVC2/app/src/main/res/values-sw600dp/dimens.xml
android/MVC2/app/src/main/res/values-sw600dp/dimens.xml
+0
-8
android/MVC2/app/src/main/res/values-sw720dp-land/dimens.xml
android/MVC2/app/src/main/res/values-sw720dp-land/dimens.xml
+0
-9
android/MVC2/app/src/main/res/values-v11/styles.xml
android/MVC2/app/src/main/res/values-v11/styles.xml
+0
-11
android/MVC2/app/src/main/res/values-v14/styles.xml
android/MVC2/app/src/main/res/values-v14/styles.xml
+0
-12
android/MVC2/app/src/main/res/values/colors.xml
android/MVC2/app/src/main/res/values/colors.xml
+6
-0
android/MVC2/app/src/main/res/values/dimens.xml
android/MVC2/app/src/main/res/values/dimens.xml
+0
-7
android/MVC2/app/src/main/res/values/strings.xml
android/MVC2/app/src/main/res/values/strings.xml
+2
-8
android/MVC2/app/src/main/res/values/styles.xml
android/MVC2/app/src/main/res/values/styles.xml
+6
-15
android/MVC2/app/src/test/java/cs349/uwaterloo/ca/mvc2/ExampleUnitTest.java
...rc/test/java/cs349/uwaterloo/ca/mvc2/ExampleUnitTest.java
+19
-0
android/MVC2/build.gradle
android/MVC2/build.gradle
+12
-0
android/MVC2/gradle.properties
android/MVC2/gradle.properties
+17
-0
android/MVC2/gradle/wrapper/gradle-wrapper.properties
android/MVC2/gradle/wrapper/gradle-wrapper.properties
+1
-1
android/MVC2/gradlew
android/MVC2/gradlew
+0
-0
android/MVC2/gradlew.bat
android/MVC2/gradlew.bat
+90
-90
android/MVVM/.gitignore
android/MVVM/.gitignore
+131
-0
android/MVVM/app/.gitignore
android/MVVM/app/.gitignore
+1
-0
android/MVVM/app/build.gradle
android/MVVM/app/build.gradle
+34
-0
android/MVVM/app/proguard-rules.pro
android/MVVM/app/proguard-rules.pro
+21
-0
android/MVVM/app/src/androidTest/java/cs349/uwaterloo/ca/mvvm/ExampleInstrumentedTest.java
...java/cs349/uwaterloo/ca/mvvm/ExampleInstrumentedTest.java
+28
-0
android/MVVM/app/src/main/AndroidManifest.xml
android/MVVM/app/src/main/AndroidManifest.xml
+23
-0
android/MVVM/app/src/main/java/cs349/uwaterloo/ca/mvvm/MainActivity.java
...p/src/main/java/cs349/uwaterloo/ca/mvvm/MainActivity.java
+145
-0
android/MVVM/app/src/main/java/cs349/uwaterloo/ca/mvvm/MainViewModel.java
.../src/main/java/cs349/uwaterloo/ca/mvvm/MainViewModel.java
+65
-0
android/MVVM/app/src/main/java/cs349/uwaterloo/ca/mvvm/Model.java
...MVVM/app/src/main/java/cs349/uwaterloo/ca/mvvm/Model.java
+142
-0
android/MVVM/app/src/main/java/cs349/uwaterloo/ca/mvvm/SecondActivity.java
...src/main/java/cs349/uwaterloo/ca/mvvm/SecondActivity.java
+141
-0
android/MVVM/app/src/main/java/cs349/uwaterloo/ca/mvvm/SecondViewModel.java
...rc/main/java/cs349/uwaterloo/ca/mvvm/SecondViewModel.java
+72
-0
android/MVVM/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
.../app/src/main/res/drawable-v24/ic_launcher_foreground.xml
+34
-0
android/MVVM/app/src/main/res/drawable/ic_launcher_background.xml
...MVVM/app/src/main/res/drawable/ic_launcher_background.xml
+171
-0
android/MVVM/app/src/main/res/layout/activity_main.xml
android/MVVM/app/src/main/res/layout/activity_main.xml
+21
-0
android/MVVM/app/src/main/res/layout/activity_second.xml
android/MVVM/app/src/main/res/layout/activity_second.xml
+22
-0
android/MVVM/app/src/main/res/menu/view1.xml
android/MVVM/app/src/main/res/menu/view1.xml
+7
-0
android/MVVM/app/src/main/res/menu/view2.xml
android/MVVM/app/src/main/res/menu/view2.xml
+7
-0
android/MVVM/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
...d/MVVM/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
+5
-0
android/MVVM/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
.../app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
+5
-0
android/MVVM/app/src/main/res/mipmap-hdpi/ic_launcher.png
android/MVVM/app/src/main/res/mipmap-hdpi/ic_launcher.png
+0
-0
android/MVVM/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
...d/MVVM/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
+0
-0
android/MVVM/app/src/main/res/mipmap-mdpi/ic_launcher.png
android/MVVM/app/src/main/res/mipmap-mdpi/ic_launcher.png
+0
-0
android/MVVM/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
...d/MVVM/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
+0
-0
android/MVVM/app/src/main/res/mipmap-xhdpi/ic_launcher.png
android/MVVM/app/src/main/res/mipmap-xhdpi/ic_launcher.png
+0
-0
android/MVVM/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
.../MVVM/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
+0
-0
android/MVVM/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
android/MVVM/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
+0
-0
android/MVVM/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
...MVVM/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
+0
-0
android/MVVM/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
android/MVVM/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
+0
-0
android/MVVM/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
...VVM/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
+0
-0
android/MVVM/app/src/main/res/values/colors.xml
android/MVVM/app/src/main/res/values/colors.xml
+6
-0
android/MVVM/app/src/main/res/values/strings.xml
android/MVVM/app/src/main/res/values/strings.xml
+3
-0
android/MVVM/app/src/main/res/values/styles.xml
android/MVVM/app/src/main/res/values/styles.xml
+11
-0
android/MVVM/app/src/test/java/cs349/uwaterloo/ca/mvvm/ExampleUnitTest.java
...rc/test/java/cs349/uwaterloo/ca/mvvm/ExampleUnitTest.java
+19
-0
android/MVVM/build.gradle
android/MVVM/build.gradle
+28
-0
android/MVVM/gradle.properties
android/MVVM/gradle.properties
+17
-0
android/MVVM/gradle/wrapper/gradle-wrapper.jar
android/MVVM/gradle/wrapper/gradle-wrapper.jar
+0
-0
android/MVVM/gradle/wrapper/gradle-wrapper.properties
android/MVVM/gradle/wrapper/gradle-wrapper.properties
+6
-0
android/MVVM/gradlew
android/MVVM/gradlew
+160
-0
android/MVVM/gradlew.bat
android/MVVM/gradlew.bat
+90
-0
android/MVVM/settings.gradle
android/MVVM/settings.gradle
+1
-0
android/readme.md
android/readme.md
+7
-3
No files found.
android/MVC1/app/.gitignore
0 → 100644
View file @
a69f12c2
/build
android/MVC1/app/build.gradle
View file @
a69f12c2
apply
plugin:
'com.android.application'
android
{
compileSdkVersion
17
buildToolsVersion
"27.0.1"
compileSdkVersion
26
defaultConfig
{
applicationId
"c
om.example.mvc
"
minSdkVersion
15
applicationId
"c
s349.uwaterloo.ca.mvc1
"
minSdkVersion
23
targetSdkVersion
26
versionCode
1
versionName
"1.0"
testInstrumentationRunner
"android.support.test.runner.AndroidJUnitRunner"
}
buildTypes
{
release
{
minifyEnabled
false
proguardFiles
getDefaultProguardFile
(
'proguard-android.txt'
),
'proguard-rules.
txt
'
proguardFiles
getDefaultProguardFile
(
'proguard-android.txt'
),
'proguard-rules.
pro
'
}
}
productFlavors
{
}
}
dependencies
{
compile
'com.android.support:support-v4:18.0.0'
implementation
fileTree
(
dir:
'libs'
,
include:
[
'*.jar'
])
implementation
'com.android.support:appcompat-v7:26.1.0'
implementation
'com.android.support.constraint:constraint-layout:1.0.2'
testImplementation
'junit:junit:4.12'
androidTestImplementation
'com.android.support.test:runner:1.0.1'
androidTestImplementation
'com.android.support.test.espresso:espresso-core:3.0.1'
}
android/MVC1/app/proguard-rules.pro
0 → 100644
View file @
a69f12c2
# Add project specific ProGuard rules here.
#
You
can
control
the
set
of
applied
configuration
files
using
the
#
proguardFiles
setting
in
build
.
gradle
.
#
#
For
more
details
,
see
#
http
://
developer
.
android
.
com
/
guide
/
developing
/
tools
/
proguard
.
html
#
If
your
project
uses
WebView
with
JS
,
uncomment
the
following
#
and
specify
the
fully
qualified
class
name
to
the
JavaScript
interface
#
class
:
#-
keepclassmembers
class
fqcn
.
of
.
javascript
.
interface
.
for
.
webview
{
#
public
*
;
#
}
#
Uncomment
this
to
preserve
the
line
number
information
for
#
debugging
stack
traces
.
#-
keepattributes
SourceFile
,
LineNumberTable
#
If
you
keep
the
line
number
information
,
uncomment
this
to
#
hide
the
original
source
file
name
.
#-
renamesourcefileattribute
SourceFile
android/MVC1/app/src/androidTest/java/cs349/uwaterloo/ca/mvc1/ExampleInstrumentedTest.java
0 → 100644
View file @
a69f12c2
package
cs349.uwaterloo.ca.mvc1
;
import
android.content.Context
;
import
android.support.test.InstrumentationRegistry
;
import
android.support.test.runner.AndroidJUnit4
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
static
org
.
junit
.
Assert
.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith
(
AndroidJUnit4
.
class
)
public
class
ExampleInstrumentedTest
{
@Test
public
void
useAppContext
()
throws
Exception
{
// Context of the app under test.
Context
appContext
=
InstrumentationRegistry
.
getTargetContext
();
assertEquals
(
"cs349.uwaterloo.ca.mvc1"
,
appContext
.
getPackageName
());
}
}
android/MVC1/app/src/main/AndroidManifest.xml
View file @
a69f12c2
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android=
"http://schemas.android.com/apk/res/android"
package=
"com.example.mvc"
android:versionCode=
"1"
android:versionName=
"1.0"
>
<uses-sdk
android:minSdkVersion=
"11"
android:targetSdkVersion=
"17"
/>
<manifest
package=
"cs349.uwaterloo.ca.mvc1"
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<application
android:allowBackup=
"true"
android:icon=
"@
drawable
/ic_launcher"
android:icon=
"@
mipmap
/ic_launcher"
android:label=
"@string/app_name"
android:
theme=
"@style/AppTheme"
>
<activity
android:name=
"com.example.mvc.MainActivity"
android:label=
"@string/app_name"
>
android:
roundIcon=
"@mipmap/ic_launcher_round"
android:supportsRtl=
"true"
android:theme=
"@style/AppTheme"
>
<activity
android:name=
".MainActivity"
>
<intent-filter>
<action
android:name=
"android.intent.action.MAIN"
/>
<action
android:name=
"android.intent.action.MAIN"
/>
<category
android:name=
"android.intent.category.LAUNCHER"
/>
<category
android:name=
"android.intent.category.LAUNCHER"
/>
</intent-filter>
</activity>
</application>
</manifest>
</manifest>
\ No newline at end of file
android/MVC1/app/src/main/java/com/example/mvc/MainActivity.java
deleted
100644 → 0
View file @
8c670a7e
package
com.example.mvc
;
import
android.os.Bundle
;
import
android.app.Activity
;
import
android.util.Log
;
import
android.view.ViewGroup
;
public
class
MainActivity
extends
Activity
{
Model
model
;
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
Log
.
d
(
"MVC"
,
"onCreate"
);
// load the base UI (has places for the views)
setContentView
(
R
.
layout
.
mainactivity
);
// Setup model
model
=
new
Model
();
}
@Override
protected
void
onPostCreate
(
Bundle
savedInstanceState
)
{
super
.
onPostCreate
(
savedInstanceState
);
Log
.
d
(
"MVC"
,
"onPostCreate"
);
// can only get widgets by id in onPostCreate for activity xml res
// create the views and add them to the main activity
View1
view1
=
new
View1
(
this
,
model
);
ViewGroup
v1
=
(
ViewGroup
)
findViewById
(
R
.
id
.
mainactivity_1
);
v1
.
addView
(
view1
);
View2
view2
=
new
View2
(
this
,
model
);
ViewGroup
v2
=
(
ViewGroup
)
findViewById
(
R
.
id
.
mainactivity_2
);
v2
.
addView
(
view2
);
// initialize views
model
.
initObservers
();
}
// save and restore state (need to do this to support orientation change)
@Override
protected
void
onSaveInstanceState
(
Bundle
outState
)
{
Log
.
d
(
"MVC"
,
"save state"
);
// save all stateful values in model
outState
.
putInt
(
"Counter"
,
model
.
getCounterValue
());
super
.
onSaveInstanceState
(
outState
);
}
@Override
protected
void
onRestoreInstanceState
(
Bundle
savedInstanceState
)
{
Log
.
d
(
"MVC"
,
"restore state"
);
super
.
onRestoreInstanceState
(
savedInstanceState
);
// get all stateful values in model
model
.
setCounterValue
(
savedInstanceState
.
getInt
(
"Counter"
));
}
}
android/MVC1/app/src/main/java/com/example/mvc/Model.java
deleted
100644 → 0
View file @
8c670a7e
package
com.example.mvc
;
import
android.util.Log
;
import
java.util.Observable
;
import
java.util.Observer
;
public
class
Model
extends
Observable
{
private
int
counter
;
Model
()
{
counter
=
0
;
}
// Data methods
public
int
getCounterValue
()
{
return
counter
;
}
public
void
setCounterValue
(
int
i
)
{
counter
=
i
;
Log
.
d
(
"DEMO"
,
"Model: set counter to "
+
counter
);
setChanged
();
notifyObservers
();
}
public
void
incrementCounter
()
{
counter
++;
Log
.
d
(
"DEMO"
,
"Model: increment counter to "
+
counter
);
setChanged
();
notifyObservers
();
}
// Observer methods
// a helper to make it easier to initialize all observers
public
void
initObservers
()
{
setChanged
();
notifyObservers
();
}
@Override
public
void
addObserver
(
Observer
observer
)
{
Log
.
d
(
"DEMO"
,
"Model: Observer added"
);
super
.
addObserver
(
observer
);
}
@Override
public
synchronized
void
deleteObserver
(
Observer
observer
)
{
Log
.
d
(
"DEMO"
,
"Model: Observer deleted"
);
super
.
deleteObserver
(
observer
);
}
@Override
public
synchronized
void
deleteObservers
()
{
super
.
deleteObservers
();
}
@Override
public
void
notifyObservers
()
{
Log
.
d
(
"DEMO"
,
"Model: Observers notified"
);
super
.
notifyObservers
();
}
}
\ No newline at end of file
android/MVC1/app/src/main/java/com/example/mvc/View1.java
deleted
100644 → 0
View file @
8c670a7e
package
com.example.mvc
;
import
java.util.Observable
;
import
java.util.Observer
;
import
android.content.Context
;
import
android.util.*
;
import
android.view.View
;
import
android.widget.Button
;
import
android.widget.LinearLayout
;
public
class
View1
extends
LinearLayout
implements
Observer
{
private
Model
model
;
private
Button
button
;
public
View1
(
Context
context
,
Model
m
)
{
super
(
context
);
Log
.
d
(
"DEMO"
,
"View1 constructor"
);
// get the xml description of the view and "inflate" it
// into the display (kind of like rendering it)
View
.
inflate
(
context
,
R
.
layout
.
view1
,
this
);
// save the model reference
model
=
m
;
// add this view to model's list of observers
model
.
addObserver
(
this
);
// get a reference to widgets to manipulate on update
button
=
(
Button
)
findViewById
(
R
.
id
.
view1_button
);
// create a controller for the button
button
.
setOnClickListener
(
new
OnClickListener
()
{
@Override
public
void
onClick
(
View
v
)
{
// do this each time the button is clicked
model
.
incrementCounter
();
}
});
}
// the model call this to update the view
public
void
update
(
Observable
observable
,
Object
data
)
{
Log
.
d
(
"DEMO"
,
"update View1"
);
// update button text with click count
// (convert to string, or else Android uses int as resource id!)
button
.
setText
(
String
.
valueOf
(
model
.
getCounterValue
()));
}
}
android/MVC1/app/src/main/java/com/example/mvc/View2.java
deleted
100644 → 0
View file @
8c670a7e
package
com.example.mvc
;
import
java.util.Observable
;
import
java.util.Observer
;
import
android.content.Context
;
import
android.util.*
;
import
android.view.View
;
import
android.view.View.OnClickListener
;
import
android.widget.Button
;
import
android.widget.LinearLayout
;
import
android.widget.TextView
;
public
class
View2
extends
LinearLayout
implements
Observer
{
private
Model
model
;
private
TextView
textview
;
public
View2
(
Context
context
,
Model
m
)
{
super
(
context
);
Log
.
d
(
"DEMO"
,
"View2 constructor"
);
// get the xml description of the view and "inflate" it
// into the display (kind of like rendering it)
View
.
inflate
(
context
,
R
.
layout
.
view2
,
this
);
// save the model reference
model
=
m
;
// add this view to model's list of observers
model
.
addObserver
(
this
);
// get a reference to widgets to manipulate on update
textview
=
(
TextView
)
findViewById
(
R
.
id
.
view2_textview
);
// create a controller to increment counter when clicked
textview
.
setOnClickListener
(
new
OnClickListener
()
{
@Override
public
void
onClick
(
View
v
)
{
// do this each time the button is clicked
model
.
incrementCounter
();
}
});
}
// the model call this to update the view
public
void
update
(
Observable
observable
,
Object
data
)
{
Log
.
d
(
"DEMO"
,
"update View2"
);
int
n
=
model
.
getCounterValue
();
StringBuilder
s
=
new
StringBuilder
(
n
);
for
(
int
i
=
0
;
i
<
n
;
i
++)
{
s
.
append
(
"x"
);
}
// update button text with click count
// (convert to string, or else Android uses int as resource id!)
textview
.
setText
(
s
);
}
}
android/MVC1/app/src/main/java/cs349/uwaterloo/ca/mvc1/MainActivity.java
0 → 100644
View file @
a69f12c2
package
cs349.uwaterloo.ca.mvc1
;
import
android.support.annotation.Nullable
;
import
android.support.v7.app.AppCompatActivity
;
import
android.os.Bundle
;
import
android.util.Log
;
import
android.view.ViewGroup
;
public
class
MainActivity
extends
AppCompatActivity
{
// Private Vars
Model
model
;
/**
* OnCreate
* -- Called when application is initially launched.
* @see <a href="https://developer.android.com/guide/components/activities/activity-lifecycle.html">Android LifeCycle</a>
* @param savedInstanceState
*/
@Override
protected
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
Log
.
d
(
String
.
valueOf
(
R
.
string
.
DEBUG_MVC_ID
),
"onCreate called"
);
// Load base UI layout from resources.
setContentView
(
R
.
layout
.
activity_main
);
// Init Model
model
=
new
Model
();
////////////////////////////////////////
// Setup Views
////////////////////////////////////////
View1
view1
=
new
View1
(
this
,
model
);
ViewGroup
v1
=
(
ViewGroup
)
findViewById
(
R
.
id
.
mainactivity_1
);
v1
.
addView
(
view1
);
View2
view2
=
new
View2
(
this
,
model
);
ViewGroup
v2
=
(
ViewGroup
)
findViewById
(
R
.
id
.
mainactivity_2
);
v2
.
addView
(
view2
);
// Init Views
model
.
initObservers
();
}
////////////////////////////////////////////////////////////////////////////////////////////////
//
// Save and Restore State
//
////////////////////////////////////////////////////////////////////////////////////////////////
/**
* Save the state of the application
* @param outState
*/
@Override
protected
void
onSaveInstanceState
(
Bundle
outState
)
{
super
.
onSaveInstanceState
(
outState
);
Log
.
d
(
String
.
valueOf
(
R
.
string
.
DEBUG_MVC_ID
),
"MainActivity: Save model state."
);
// Serialize all sateful values form model
outState
.
putInt
(
"Counter"
,
model
.
getCounter
());
}
/**
* This method is called after {@link #onStart} when the activity is
* being re-initialized from a previously saved state, given here in
* <var>savedInstanceState</var>. Most implementations will simply use {@link #onCreate}
* to restore their state, but it is sometimes convenient to do it here
* after all of the initialization has been done or to allow subclasses to
* decide whether to use your default implementation. The default
* implementation of this method performs a restore of any view state that
* had previously been frozen by {@link #onSaveInstanceState}.
* <p>
* <p>This method is called between {@link #onStart} and
* {@link #onPostCreate}.
*
* @param savedInstanceState the data most recently supplied in {@link #onSaveInstanceState}.
* @see #onCreate
* @see #onPostCreate
* @see #onResume
* @see #onSaveInstanceState
*/
@Override
protected
void
onRestoreInstanceState
(
Bundle
savedInstanceState
)
{
super
.
onRestoreInstanceState
(
savedInstanceState
);
Log
.
d
(
String
.
valueOf
(
R
.
string
.
DEBUG_MVC_ID
),
"MainActivity: Restore model"
);
// Get all values and restore them to model
model
.
setCounter
(
savedInstanceState
.
getInt
(
"Counter"
));
}
}
android/MVC1/app/src/main/java/cs349/uwaterloo/ca/mvc1/Model.java
0 → 100644
View file @
a69f12c2
package
cs349.uwaterloo.ca.mvc1
;
import
android.util.Log
;
import
java.util.Observable
;
import
java.util.Observer
;
/**
* CS349_AndroidSamples
* <p>
* Created by J. J. Hartmann on 11/19/2017.
* Email: j3hartma@uwaterloo.ca
* Copyright 2017
*/
/**
* Class Model
* - Stores a persistent state for the application.
*/
public
class
Model
extends
Observable
{
// Private Variables
private
int
mCounter
;
/**
* Model Constructor:
* - Init member variables
*/
Model
()
{
mCounter
=
0
;
}
/**
* Get mCounter Values
* @return Current value mCounter
*/
public
int
getCounter
()
{
return
mCounter
;
}
/**
* Set mCounter Value
* @param i
* -- Value to set Counter
*/
public
void
setCounter
(
int
i
)
{
Log
.
d
(
"DEMO"
,
"Model: set counter to "
+
mCounter
);
this
.
mCounter
=
i
;
}
/**
* Increment mCounter by 1
*/
public
void
incrementCounter
()
{
mCounter
++;
Log
.
d
(
"DEMO"
,
"Model: increment counter to "
+
mCounter
);
// Observable API
setChanged
();
notifyObservers
();
}
////////////////////////////////////////////////////////////////////////////////////////////////
//
// Observable Methods
//
////////////////////////////////////////////////////////////////////////////////////////////////
/**
* Helper method to make it easier to initialize all observers
*/
public
void
initObservers
()
{
setChanged
();
notifyObservers
();
}
/**
* Deletes an observer from the set of observers of this object.