├── client ├── app │ ├── .gitignore │ ├── app-release.apk │ ├── src │ │ ├── main │ │ │ ├── res │ │ │ │ ├── drawable-hdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ ├── drawable-mdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ ├── drawable-xhdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ ├── drawable-xxhdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ ├── values │ │ │ │ │ ├── dimens.xml │ │ │ │ │ ├── styles.xml │ │ │ │ │ ├── strings.xml │ │ │ │ │ └── strings_activity_login.xml │ │ │ │ ├── menu │ │ │ │ │ └── main.xml │ │ │ │ ├── values-w820dp │ │ │ │ │ └── dimens.xml │ │ │ │ └── layout │ │ │ │ │ ├── activity_main.xml │ │ │ │ │ └── activity_signup.xml │ │ │ ├── AndroidManifest.xml │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── csed │ │ │ │ └── absencechecker │ │ │ │ ├── JSONHelper.java │ │ │ │ ├── MainActivity.java │ │ │ │ └── SignupActivity.java │ │ └── androidTest │ │ │ └── java │ │ │ └── com │ │ │ └── csed │ │ │ └── absencechecker │ │ │ └── ApplicationTest.java │ ├── proguard-rules.pro │ ├── build.gradle │ └── app.iml ├── settings.gradle ├── jackson-mapper-asl-1.0.0.jar ├── local.properties ├── build.gradle ├── client.iml ├── AbsenceChecker.iml ├── gradle.properties ├── gradlew.bat └── gradlew ├── server ├── project │ ├── .sbtserver.lock │ ├── .sbtserver │ ├── sbt-ui.sbt │ ├── build.properties │ ├── play-fork-run.sbt │ └── plugins.sbt ├── activator-launch-1.3.0.jar ├── jackson-core-asl-1.0.0.jar ├── jackson-mapper-asl-1.0.0.jar ├── conf │ ├── messages │ ├── evolutions │ │ └── default │ │ │ ├── 1.sql │ │ │ └── 2.sql │ ├── application.conf │ └── routes ├── build.sbt ├── app │ ├── views │ │ ├── twitterBootstrapInput.scala.html │ │ ├── main.scala.html │ │ ├── createForm.scala.html │ │ ├── editForm.scala.html │ │ └── list.scala.html │ ├── models │ │ └── Student.java │ └── controllers │ │ └── Application.java ├── LICENSE ├── public │ └── stylesheets │ │ ├── main.css │ │ └── bootstrap.min.css ├── activator.bat └── activator ├── .gitignore └── README.MD /client/app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /server/project/.sbtserver.lock: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | -------------------------------------------------------------------------------- /client/app/app-release.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CATReloaded/MBAMS/HEAD/client/app/app-release.apk -------------------------------------------------------------------------------- /client/jackson-mapper-asl-1.0.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CATReloaded/MBAMS/HEAD/client/jackson-mapper-asl-1.0.0.jar -------------------------------------------------------------------------------- /server/activator-launch-1.3.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CATReloaded/MBAMS/HEAD/server/activator-launch-1.3.0.jar -------------------------------------------------------------------------------- /server/jackson-core-asl-1.0.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CATReloaded/MBAMS/HEAD/server/jackson-core-asl-1.0.0.jar -------------------------------------------------------------------------------- /server/jackson-mapper-asl-1.0.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CATReloaded/MBAMS/HEAD/server/jackson-mapper-asl-1.0.0.jar -------------------------------------------------------------------------------- /server/conf/messages: -------------------------------------------------------------------------------- 1 | # Messages 2 | 3 | students.list.title={0,choice,0#No students|1#One student|1<{0,number,integer} students} found -------------------------------------------------------------------------------- /server/project/.sbtserver: -------------------------------------------------------------------------------- 1 | #Server Startup at 2015-05-05T15:22+0000 2 | #Tue May 05 18:22:07 EEST 2015 3 | server.uri=http\://0.0.0.0\:52908 4 | -------------------------------------------------------------------------------- /client/app/src/main/res/drawable-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CATReloaded/MBAMS/HEAD/client/app/src/main/res/drawable-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /client/app/src/main/res/drawable-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CATReloaded/MBAMS/HEAD/client/app/src/main/res/drawable-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /client/app/src/main/res/drawable-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CATReloaded/MBAMS/HEAD/client/app/src/main/res/drawable-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /client/app/src/main/res/drawable-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CATReloaded/MBAMS/HEAD/client/app/src/main/res/drawable-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /server/project/sbt-ui.sbt: -------------------------------------------------------------------------------- 1 | // This plugin represents functionality that is to be added to sbt in the future 2 | 3 | addSbtPlugin("org.scala-sbt" % "sbt-core-next" % "0.1.1") -------------------------------------------------------------------------------- /server/project/build.properties: -------------------------------------------------------------------------------- 1 | #Activator-generated Properties 2 | #Mon Apr 27 19:18:57 EEST 2015 3 | template.uuid=3f8cc5b7-60fe-4efc-9fe6-209a610b1b39 4 | sbt.version=0.13.7 5 | -------------------------------------------------------------------------------- /server/project/play-fork-run.sbt: -------------------------------------------------------------------------------- 1 | // This plugin adds forked run capabilities to Play projects which is needed for Activator. 2 | 3 | addSbtPlugin("com.typesafe.play" % "sbt-fork-run-plugin" % "2.3.8") -------------------------------------------------------------------------------- /client/app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 6 | -------------------------------------------------------------------------------- /client/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /client/app/src/main/res/menu/main.xml: -------------------------------------------------------------------------------- 1 | 4 | 8 | 9 | -------------------------------------------------------------------------------- /client/app/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /client/app/src/androidTest/java/com/csed/absencechecker/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package com.csed.absencechecker; 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 | } -------------------------------------------------------------------------------- /server/build.sbt: -------------------------------------------------------------------------------- 1 | import play.PlayJava 2 | 3 | name := """computer-database-java""" 4 | 5 | version := "0.0.1-SNAPSHOT" 6 | 7 | scalaVersion := "2.11.4" 8 | 9 | libraryDependencies ++= Seq( 10 | jdbc, 11 | javaEbean, 12 | "org.webjars" % "jquery" % "2.1.1", 13 | "org.webjars" % "bootstrap" % "3.3.1", 14 | "mysql" % "mysql-connector-java" % "5.1.18" 15 | ) 16 | 17 | lazy val root = (project in file(".")).enablePlugins(PlayJava) 18 | 19 | 20 | fork in run := true -------------------------------------------------------------------------------- /client/local.properties: -------------------------------------------------------------------------------- 1 | ## This file is automatically generated by Android Studio. 2 | # Do not modify this file -- YOUR CHANGES WILL BE ERASED! 3 | # 4 | # This file should *NOT* be checked into Version Control Systems, 5 | # as it contains information specific to your local configuration. 6 | # 7 | # Location of the SDK. This is only used by Gradle. 8 | # For customization when using a Version Control System, please read the 9 | # header note. 10 | sdk.dir=/mnt/DATA/installed/Compilers-SDKs/android-studio/sdk -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | server/.idea 2 | server/.idea_modules 3 | server/.settings 4 | server/.sbtserver 5 | server/logs 6 | server/*.iml 7 | server/logs 8 | server/target 9 | server/projectFilesBackup 10 | client/.idea 11 | logs 12 | project/project 13 | project/target 14 | target 15 | tmp 16 | .history 17 | dist 18 | /.idea 19 | /*.iml 20 | /out 21 | /.idea_modules 22 | /.sbtserver 23 | .classpath 24 | .project 25 | /RUNNING_PID 26 | .settings 27 | .target 28 | .cache 29 | bin 30 | .DS_Store 31 | activator-sbt-*-shim.sbt 32 | -------------------------------------------------------------------------------- /client/build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | repositories { 5 | jcenter() 6 | } 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:1.1.0' 9 | 10 | // NOTE: Do not place your application dependencies here; they belong 11 | // in the individual module build.gradle files 12 | } 13 | } 14 | 15 | allprojects { 16 | repositories { 17 | jcenter() 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /server/app/views/twitterBootstrapInput.scala.html: -------------------------------------------------------------------------------- 1 | @(elements: helper.FieldElements) 2 | 3 | @*************************************************** 4 | * Generate input according twitter bootstrap rules * 5 | ***************************************************@ 6 |
7 | 8 |
9 | @elements.input 10 | @elements.infos.mkString(", ") 11 |
12 |
13 | -------------------------------------------------------------------------------- /server/LICENSE: -------------------------------------------------------------------------------- 1 | This software is licensed under the Apache 2 license, quoted below. 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); you may not use this project except in compliance with 4 | the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0. 5 | 6 | Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an 7 | "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific 8 | language governing permissions and limitations under the License. -------------------------------------------------------------------------------- /server/project/plugins.sbt: -------------------------------------------------------------------------------- 1 | resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/" 2 | 3 | // The Play plugin 4 | addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3.7") 5 | 6 | // web plugins 7 | 8 | addSbtPlugin("com.typesafe.sbt" % "sbt-coffeescript" % "1.0.0") 9 | 10 | addSbtPlugin("com.typesafe.sbt" % "sbt-less" % "1.0.0") 11 | 12 | addSbtPlugin("com.typesafe.sbt" % "sbt-jshint" % "1.0.0") 13 | 14 | addSbtPlugin("com.typesafe.sbt" % "sbt-rjs" % "1.0.1") 15 | 16 | addSbtPlugin("com.typesafe.sbt" % "sbt-digest" % "1.0.0") 17 | 18 | addSbtPlugin("com.typesafe.sbt" % "sbt-gzip" % "1.0.0") 19 | 20 | addSbtPlugin("com.typesafe.sbt" % "sbt-mocha" % "1.0.0") 21 | 22 | -------------------------------------------------------------------------------- /client/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | MBAMS 5 | MBAMS 6 | Status 7 | Settings 8 | Submit my Attendance 9 | 10 | 11 | http://192.168.1.222:9000 12 | ICODER 13 | passwordXD 14 | /students/signup 15 | /students/submit 16 | 17 | -------------------------------------------------------------------------------- /client/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 /mnt/DATA/installed/Compilers-SDKs/android-studio/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 | -------------------------------------------------------------------------------- /client/app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 20 5 | buildToolsVersion "20.0.0" 6 | 7 | defaultConfig { 8 | applicationId "com.csed.absencechecker" 9 | minSdkVersion 16 10 | targetSdkVersion 20 11 | versionCode 1 12 | versionName "1.0" 13 | } 14 | buildTypes { 15 | release { 16 | apply plugin: 'idea' 17 | apply plugin: 'idea' 18 | minifyEnabled false 19 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 20 | } 21 | } 22 | } 23 | 24 | dependencies { 25 | compile fileTree(dir: 'libs', include: ['*.jar']) 26 | compile 'com.google.android.gms:play-services:7.0.0' 27 | compile 'com.android.support:appcompat-v7:20.0.0' 28 | } -------------------------------------------------------------------------------- /client/app/src/main/res/values/strings_activity_login.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Name 5 | ID 6 | Sign up 7 | Sign up 8 | 9 | This id is incorrect 10 | This id is incorrect 11 | This field is required 12 | "You have successfully sign up in the system !" 13 | "We can't identify you! Please check your ID again." 14 | "Something went wrong, make sure you are connect to the same local network with your professor" 15 | 16 | 17 | -------------------------------------------------------------------------------- /client/client.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /client/AbsenceChecker.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /client/gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Settings specified in this file will override any Gradle settings 5 | # configured through the IDE. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m 13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 14 | 15 | # When configured, Gradle will run in incubating parallel mode. 16 | # This option should only be used with decoupled projects. More details, visit 17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 18 | # org.gradle.parallel=true -------------------------------------------------------------------------------- /server/conf/evolutions/default/1.sql: -------------------------------------------------------------------------------- 1 | # --- First database schema 2 | 3 | # --- !Ups 4 | 5 | create table student ( 6 | id bigint not null AUTO_INCREMENT, 7 | student_id VARCHAR(8) not null UNIQUE, 8 | name varchar(255) not null, 9 | mac varchar(17) UNIQUE, 10 | one varchar(255) DEFAULT '-', 11 | two varchar(255) DEFAULT '-', 12 | three varchar(255) DEFAULT '-', 13 | four varchar(255) DEFAULT '-', 14 | five varchar(255) DEFAULT '-', 15 | six varchar(255) DEFAULT '-', 16 | seven varchar(255) DEFAULT '-', 17 | eight varchar(255) DEFAULT '-', 18 | 19 | constraint pk_student primary key (id)) 20 | ; 21 | 22 | # --- !Downs 23 | 24 | SET REFERENTIAL_INTEGRITY FALSE; 25 | 26 | drop table if exists student; 27 | 28 | SET REFERENTIAL_INTEGRITY TRUE; 29 | -------------------------------------------------------------------------------- /server/conf/application.conf: -------------------------------------------------------------------------------- 1 | # Configuration 2 | 3 | application.name=students-database 4 | 5 | # Database configuration 6 | # ~~~~~ 7 | # You can declare as many datasources as you want. 8 | # By convention, the default datasource is named `default` 9 | db.default.driver=com.mysql.jdbc.Driver 10 | 11 | db.default.url="jdbc:mysql://localhost/students" 12 | db.default.user=root 13 | db.default.pass="1909" 14 | 15 | # Ebean configuration 16 | # ~~~~~ 17 | # You can declare as many Ebean servers as you want. 18 | # By convention, the default server is named `default` 19 | ebean.default="models.*" 20 | 21 | # Assets configuration 22 | # ~~~~~ 23 | "assets.cache./public/stylesheets/bootstrap.min.css"="max-age=3600" 24 | 25 | # Logger 26 | # ~~~~~ 27 | # You can also configure logback (http://logback.qos.ch/), by providing a logger.xml file in the conf directory . 28 | 29 | # Root logger: 30 | logger=ERROR 31 | 32 | # Logger used by the framework: 33 | logger.play=INFO 34 | 35 | # Logger provided to your application: 36 | logger.application=DEBUG 37 | 38 | upload.path=/tmp/uploads 39 | -------------------------------------------------------------------------------- /server/app/views/main.scala.html: -------------------------------------------------------------------------------- 1 | @(content: Html) 2 | 3 | 4 | 5 | 6 | Students database 7 | @************************************* 8 | 9 | 10 | 11 | 12 | 13 | *************************************@ 14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 |

22 | 23 | Students database 24 | 25 |

26 |
27 | 28 |
29 | @content 30 |
31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /server/public/stylesheets/main.css: -------------------------------------------------------------------------------- 1 | html { 2 | background: #eee; 3 | } 4 | 5 | header h1 { 6 | padding: 0.4em 1.1em; 7 | color: white; 8 | font-weight: normal; 9 | font-size: 24px; 10 | } 11 | 12 | section#main { 13 | position: relative; 14 | padding: 5em 2em; 15 | border-bottom: 1px solid #ccc; 16 | min-height: 600px; 17 | } 18 | 19 | section#main .topRight { 20 | position: absolute; 21 | right: 20px; 22 | top: 70px; 23 | } 24 | 25 | table.students em { 26 | color: #aaa; 27 | } 28 | 29 | table.students .name{ 30 | width: 30%; 31 | min-width: 100px; 32 | } 33 | 34 | table.students .mac{ 35 | width: 20%; 36 | min-width: 60px; 37 | } 38 | 39 | table.students .one, table.students .two, table.students .three, table.students .four, 40 | table.students .five, table.students .six, table.students .seven, table.students .eight{ 41 | width: 10%; 42 | min-width: 50px 43 | } 44 | 45 | table.students .header a { 46 | } 47 | 48 | #actions { 49 | position: relative; 50 | } 51 | 52 | #actions #add { 53 | position: absolute; 54 | right: 0; 55 | top: 0; 56 | } 57 | 58 | #pagination { 59 | position: relative; 60 | } 61 | 62 | #pagination ul { 63 | position: absolute; 64 | right: 0; 65 | } 66 | 67 | #pagination ul .current a { 68 | color: #666; 69 | } -------------------------------------------------------------------------------- /client/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | 14 | 15 | 16 | 17 | 18 | 19 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /server/conf/routes: -------------------------------------------------------------------------------- 1 | # Routes 2 | # This file defines all application routes (Higher priority routes first) 3 | # ~~~~ 4 | 5 | # Default path will just redirect to the computer list 6 | GET / controllers.Application.index() 7 | #POST /upload controllers.Application.upload() 8 | 9 | #Students list (look at the default values for pagination parameters) 10 | GET /students controllers.Application.list(p:Int ?= 0, s ?= "name", o ?= "asc", f ?= "",lecture:Int ?= 0) 11 | 12 | #Student Signup for the first time 13 | POST /students/signup controllers.Application.signup() 14 | 15 | #Record attendance for a student 16 | POST /students/submit controllers.Application.takeAttendance() 17 | 18 | # Add student 19 | GET /students/new controllers.Application.create() 20 | POST /students controllers.Application.save() 21 | 22 | # Edit existing student 23 | GET /students/:id controllers.Application.edit(id:Long) 24 | POST /students/:id controllers.Application.update(id:Long) 25 | 26 | # Delete a student 27 | POST /students/:id/delete controllers.Application.delete(id:Long) 28 | 29 | # Map static resources from the /public folder to the /assets URL path 30 | GET /assets/*file controllers.Assets.at(path="/public", file) -------------------------------------------------------------------------------- /server/app/views/createForm.scala.html: -------------------------------------------------------------------------------- 1 | @(studentForm: Form[Student]) 2 | 3 | @import helper._ 4 | 5 | @implicitFieldConstructor = @{ FieldConstructor(twitterBootstrapInput.render) } 6 | 7 | @main { 8 | 9 |

Add a student

10 | 11 | @form(routes.Application.save()) { 12 | 13 |
14 | 15 | @inputText(studentForm("student_id"), '_label -> "Student ID", '_help -> "") 16 | @inputText(studentForm("name"), '_label -> "Student name", '_help -> "") 17 | @inputText(studentForm("mac"), '_label -> "MAC Address", '_help -> "") 18 | @inputText(studentForm("one"), '_label -> "Lecture #1", '_help -> "") 19 | @inputText(studentForm("two"), '_label -> "Lecture #2", '_help -> "") 20 | @inputText(studentForm("three"), '_label -> "Lecture #3", '_help -> "") 21 | @inputText(studentForm("four"), '_label -> "Lecture #4", '_help -> "") 22 | @inputText(studentForm("five"), '_label -> "Lecture #5", '_help -> "") 23 | @inputText(studentForm("six"), '_label -> "Lecture #6", '_help -> "") 24 | @inputText(studentForm("seven"), '_label -> "Lecture #7", '_help -> "") 25 | @inputText(studentForm("eight"), '_label -> "Lecture #8", '_help -> "") 26 | 27 |
28 | 29 |
30 | or 31 | Cancel 32 |
33 | 34 | } 35 | 36 | } -------------------------------------------------------------------------------- /client/app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 10 | 11 | 18 | 19 | 20 |