diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/.gitignore b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/.gitignore
new file mode 100644
index 00000000..37a4eb8b
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/.gitignore
@@ -0,0 +1,15 @@
+*.iml
+.gradle
+/local.properties
+/.idea/caches
+/.idea/libraries
+/.idea/modules.xml
+/.idea/workspace.xml
+/.idea/navEditor.xml
+/.idea/assetWizardSettings.xml
+.DS_Store
+/build
+/captures
+.externalNativeBuild
+/entry/.preview
+.cxx
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/.idea/.gitignore b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/.idea/.gitignore
new file mode 100644
index 00000000..26d33521
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/.idea/compiler.xml b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/.idea/compiler.xml
new file mode 100644
index 00000000..fb7f4a8a
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/.idea/compiler.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/.idea/gradle.xml b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/.idea/gradle.xml
new file mode 100644
index 00000000..c6642604
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/.idea/gradle.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/.idea/jarRepositories.xml b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/.idea/jarRepositories.xml
new file mode 100644
index 00000000..1dfcd020
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/.idea/jarRepositories.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/.idea/misc.xml b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/.idea/misc.xml
new file mode 100644
index 00000000..794aa67e
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/.idea/misc.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/phone/phoneSettingConfig_-2125426008.json b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/phone/phoneSettingConfig_-2125426008.json
new file mode 100644
index 00000000..f505e6b9
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/phone/phoneSettingConfig_-2125426008.json
@@ -0,0 +1,25 @@
+{
+ "setting": {
+ "1.0.1": {
+ "Language": {
+ "args": {
+ "Language": "zh-CN"
+ }
+ }
+ }
+ },
+ "frontend": {
+ "1.0.0": {
+ "Resolution": {
+ "args": {
+ "Resolution": "360*780"
+ }
+ },
+ "DeviceType": {
+ "args": {
+ "DeviceType": "phone"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/previewConfig.json b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/previewConfig.json
new file mode 100644
index 00000000..a22d11c0
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/previewConfig.json
@@ -0,0 +1,9 @@
+{
+ "1.0.0": {
+ "LastPreviewDevice": {
+ "D:\\DevEcoStudioProjects\\entry": [
+ "tv"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/tv/tvSettingConfig_-2125426008.json b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/tv/tvSettingConfig_-2125426008.json
new file mode 100644
index 00000000..7c9a7228
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/tv/tvSettingConfig_-2125426008.json
@@ -0,0 +1,25 @@
+{
+ "setting": {
+ "1.0.1": {
+ "Language": {
+ "args": {
+ "Language": "en-US"
+ }
+ }
+ }
+ },
+ "frontend": {
+ "1.0.0": {
+ "Resolution": {
+ "args": {
+ "Resolution": "960*540"
+ }
+ },
+ "DeviceType": {
+ "args": {
+ "DeviceType": "tv"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/build.gradle b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/build.gradle
new file mode 100644
index 00000000..9ec29b00
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/build.gradle
@@ -0,0 +1,37 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+apply plugin: 'com.huawei.ohos.app'
+
+ohos {
+ compileSdkVersion 5
+ defaultConfig {
+ compatibleSdkVersion 4
+ }
+}
+
+buildscript {
+ repositories {
+ maven {
+ url 'https://repo.huaweicloud.com/repository/maven/'
+ }
+ maven {
+ url 'https://developer.huawei.com/repo/'
+ }
+ jcenter()
+ }
+ dependencies {
+ classpath 'com.huawei.ohos:hap:2.4.2.7'
+ classpath 'com.huawei.ohos:decctest:1.0.0.7'
+ }
+}
+
+allprojects {
+ repositories {
+ maven {
+ url 'https://repo.huaweicloud.com/repository/maven/'
+ }
+ maven {
+ url 'https://developer.huawei.com/repo/'
+ }
+ jcenter()
+ }
+}
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/.gitignore b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/.gitignore
new file mode 100644
index 00000000..796b96d1
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/build.gradle b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/build.gradle
new file mode 100644
index 00000000..30c5f30b
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/build.gradle
@@ -0,0 +1,26 @@
+apply plugin: 'com.huawei.ohos.hap'
+apply plugin: 'com.huawei.ohos.decctest'
+ohos {
+ compileSdkVersion 5
+ defaultConfig {
+ compatibleSdkVersion 4
+ }
+ buildTypes {
+ release {
+ proguardOpt {
+ proguardEnabled false
+ rulesFiles 'proguard-rules.pro'
+ }
+ }
+ }
+
+}
+
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar', '*.har'])
+ testImplementation 'junit:junit:4.13'
+ ohosTestImplementation 'com.huawei.ohos.testkit:runner:1.0.0.100'
+}
+decc {
+ supportType = ['html','xml']
+}
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/proguard-rules.pro b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/proguard-rules.pro
new file mode 100644
index 00000000..f7666e47
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/proguard-rules.pro
@@ -0,0 +1 @@
+# config module specific ProGuard rules here.
\ No newline at end of file
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/config.json b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/config.json
new file mode 100644
index 00000000..558513aa
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/config.json
@@ -0,0 +1,50 @@
+{
+ "app": {
+ "bundleName": "com.example.loginscreenapplication",
+ "vendor": "example",
+ "version": {
+ "code": 1000000,
+ "name": "1.0.0"
+ },
+ "apiVersion": {
+ "compatible": 4,
+ "target": 5,
+ "releaseType": "Release"
+ }
+ },
+ "deviceConfig": {},
+ "module": {
+ "package": "com.example.loginscreenapplication",
+ "name": ".MyApplication",
+ "deviceType": [
+ "phone",
+ "tv"
+ ],
+ "distro": {
+ "deliveryWithInstall": true,
+ "moduleName": "entry",
+ "moduleType": "entry"
+ },
+ "abilities": [
+ {
+ "skills": [
+ {
+ "entities": [
+ "entity.system.home"
+ ],
+ "actions": [
+ "action.system.home"
+ ]
+ }
+ ],
+ "orientation": "unspecified",
+ "name": "com.example.loginscreenapplication.MainAbility",
+ "icon": "$media:icon",
+ "description": "$string:mainability_description",
+ "label": "$string:app_name",
+ "type": "page",
+ "launchType": "standard"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/MainAbility.java b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/MainAbility.java
new file mode 100644
index 00000000..48471691
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/MainAbility.java
@@ -0,0 +1,13 @@
+package com.example.loginscreenapplication;
+
+import com.example.loginscreenapplication.slice.MainAbilitySlice;
+import ohos.aafwk.ability.Ability;
+import ohos.aafwk.content.Intent;
+
+public class MainAbility extends Ability {
+ @Override
+ public void onStart(Intent intent) {
+ super.onStart(intent);
+ super.setMainRoute(MainAbilitySlice.class.getName());
+ }
+}
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/MyApplication.java b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/MyApplication.java
new file mode 100644
index 00000000..9125cca4
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/MyApplication.java
@@ -0,0 +1,10 @@
+package com.example.loginscreenapplication;
+
+import ohos.aafwk.ability.AbilityPackage;
+
+public class MyApplication extends AbilityPackage {
+ @Override
+ public void onInitialize() {
+ super.onInitialize();
+ }
+}
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/LoginAbilitySlice.java b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/LoginAbilitySlice.java
new file mode 100644
index 00000000..c84b6459
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/LoginAbilitySlice.java
@@ -0,0 +1,24 @@
+package com.example.loginscreenapplication.slice;
+
+import com.example.loginscreenapplication.ResourceTable;
+import ohos.aafwk.ability.AbilitySlice;
+import ohos.aafwk.content.Intent;
+import ohos.agp.components.Button;
+
+public class LoginAbilitySlice extends AbilitySlice {
+ @Override
+ public void onStart(Intent intent) {
+ super.onStart(intent);
+ super.setUIContent(ResourceTable.Layout_login_layout);
+}
+
+ @Override
+ public void onActive() {
+ super.onActive();
+ }
+
+ @Override
+ public void onForeground(Intent intent) {
+ super.onForeground(intent);
+ }
+}
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/MainAbilitySlice.java b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/MainAbilitySlice.java
new file mode 100644
index 00000000..4ead818f
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/MainAbilitySlice.java
@@ -0,0 +1,32 @@
+package com.example.loginscreenapplication.slice;
+
+import com.example.loginscreenapplication.ResourceTable;
+import ohos.aafwk.ability.AbilitySlice;
+import ohos.aafwk.content.Intent;
+import ohos.agp.components.Button;
+
+public class MainAbilitySlice extends AbilitySlice {
+ Button loginButton;
+ Button registerButton;
+ @Override
+ public void onStart(Intent intent) {
+ super.onStart(intent);
+ super.setUIContent(ResourceTable.Layout_ability_main);
+
+ loginButton = (Button)findComponentById(ResourceTable.Id_loginButton);
+ registerButton = (Button)findComponentById(ResourceTable.Id_registerButton);
+
+ loginButton.setClickedListener(component -> present(new LoginAbilitySlice(), new Intent()));
+ registerButton.setClickedListener(component -> present(new RegisterAbilitySlice(), new Intent()));
+ }
+
+ @Override
+ public void onActive() {
+ super.onActive();
+ }
+
+ @Override
+ public void onForeground(Intent intent) {
+ super.onForeground(intent);
+ }
+}
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/RegisterAbilitySlice.java b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/RegisterAbilitySlice.java
new file mode 100644
index 00000000..f6f695d0
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/RegisterAbilitySlice.java
@@ -0,0 +1,23 @@
+package com.example.loginscreenapplication.slice;
+import com.example.loginscreenapplication.ResourceTable;
+import ohos.aafwk.ability.AbilitySlice;
+import ohos.aafwk.content.Intent;
+import ohos.agp.components.Button;
+
+public class RegisterAbilitySlice extends AbilitySlice {
+ @Override
+ public void onStart(Intent intent) {
+ super.onStart(intent);
+ super.setUIContent(ResourceTable.Layout_register_layout);
+ }
+
+ @Override
+ public void onActive() {
+ super.onActive();
+ }
+
+ @Override
+ public void onForeground(Intent intent) {
+ super.onForeground(intent);
+ }
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/element/string.json b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/element/string.json
new file mode 100644
index 00000000..55c7e615
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/element/string.json
@@ -0,0 +1,20 @@
+{
+ "string": [
+ {
+ "name": "app_name",
+ "value": "LoginScreenApplication"
+ },
+ {
+ "name": "mainability_description",
+ "value": "Java_Phone_Empty Feature Ability"
+ },
+ {
+ "name": "mainability_HelloWorld",
+ "value": "Hello World"
+ },
+ {
+ "name": "loginability_description",
+ "value": "hap sample empty provider"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/graphic/background_ability_main.xml b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/graphic/background_ability_main.xml
new file mode 100644
index 00000000..c0c0a3df
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/graphic/background_ability_main.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/graphic/clockvec.xml b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/graphic/clockvec.xml
new file mode 100644
index 00000000..20760d3d
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/graphic/clockvec.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/ability_main.xml b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/ability_main.xml
new file mode 100644
index 00000000..a697cc7f
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/ability_main.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/login_layout.xml b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/login_layout.xml
new file mode 100644
index 00000000..198d293b
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/login_layout.xml
@@ -0,0 +1,13 @@
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/register_layout.xml b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/register_layout.xml
new file mode 100644
index 00000000..f5184c11
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/register_layout.xml
@@ -0,0 +1,13 @@
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/media/icon.png b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/media/icon.png
new file mode 100644
index 00000000..ce307a88
Binary files /dev/null and b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/media/icon.png differ
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/ohosTest/config.json b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/ohosTest/config.json
new file mode 100644
index 00000000..8f211ec7
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/ohosTest/config.json
@@ -0,0 +1,41 @@
+{
+ "app": {
+ "bundleName": "com.example.loginscreenapplication",
+ "vendor": "example",
+ "version": {
+ "code": 1000000,
+ "name": "1.0.0"
+ },
+ "apiVersion": {
+ "compatible": 4,
+ "target": 5,
+ "releaseType": "Release"
+ }
+ },
+ "deviceConfig": {},
+ "module": {
+ "package": "com.example.loginscreenapplication",
+ "name": "testModule",
+ "deviceType": [
+ "phone"
+ ],
+ "distro": {
+ "deliveryWithInstall": true,
+ "moduleName": "entry_test",
+ "moduleType": "feature",
+ "installationFree": true
+ },
+ "abilities": [
+ {
+ "name": "decc.testkit.runner.EntryAbility",
+ "description": "Test Entry Ability",
+ "icon": "$media:icon",
+ "label": "$string:app_name",
+ "launchType": "standard",
+ "orientation": "landscape",
+ "visible": true,
+ "type": "page"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/ohosTest/java/com/example/loginscreenapplication/ExampleOhosTest.java b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/ohosTest/java/com/example/loginscreenapplication/ExampleOhosTest.java
new file mode 100644
index 00000000..1e247a29
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/ohosTest/java/com/example/loginscreenapplication/ExampleOhosTest.java
@@ -0,0 +1,14 @@
+package com.example.loginscreenapplication;
+
+import ohos.aafwk.ability.delegation.AbilityDelegatorRegistry;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class ExampleOhosTest {
+ @Test
+ public void testBundleName() {
+ final String actualBundleName = AbilityDelegatorRegistry.getArguments().getTestBundleName();
+ assertEquals("com.example.loginscreenapplication", actualBundleName);
+ }
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/test/java/com/example/loginscreenapplication/ExampleTest.java b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/test/java/com/example/loginscreenapplication/ExampleTest.java
new file mode 100644
index 00000000..c3b7b239
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/entry/src/test/java/com/example/loginscreenapplication/ExampleTest.java
@@ -0,0 +1,9 @@
+package com.example.loginscreenapplication;
+
+import org.junit.Test;
+
+public class ExampleTest {
+ @Test
+ public void onStart() {
+ }
+}
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/gradle.properties b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/gradle.properties
new file mode 100644
index 00000000..0daf1830
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/gradle.properties
@@ -0,0 +1,10 @@
+# Project-wide Gradle settings.
+# IDE (e.g. DevEco Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+# If the Chinese output is garbled, please configure the following parameter.
+# org.gradle.jvmargs=-Dfile.encoding=GBK
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/gradle/wrapper/gradle-wrapper.jar b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 00000000..490fda85
Binary files /dev/null and b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/gradle/wrapper/gradle-wrapper.properties b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 00000000..f59159e8
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://repo.huaweicloud.com/gradle/gradle-6.3-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/gradlew b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/gradlew
new file mode 100644
index 00000000..2fe81a7d
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/gradlew
@@ -0,0 +1,183 @@
+#!/usr/bin/env sh
+
+#
+# Copyright 2015 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+ echo "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=`expr $i + 1`
+ done
+ case $i in
+ 0) set -- ;;
+ 1) set -- "$args0" ;;
+ 2) set -- "$args0" "$args1" ;;
+ 3) set -- "$args0" "$args1" "$args2" ;;
+ 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=`save "$@"`
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+exec "$JAVACMD" "$@"
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/gradlew.bat b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/gradlew.bat
new file mode 100644
index 00000000..62bd9b9c
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/gradlew.bat
@@ -0,0 +1,103 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/settings.gradle b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/settings.gradle
new file mode 100644
index 00000000..4773db73
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/LoginScreenApplication/settings.gradle
@@ -0,0 +1 @@
+include ':entry'
diff --git a/HarmonyOS/Day1 Assingment/Mahesh/README.md b/HarmonyOS/Day1 Assingment/Mahesh/README.md
new file mode 100644
index 00000000..05c0c3fe
--- /dev/null
+++ b/HarmonyOS/Day1 Assingment/Mahesh/README.md
@@ -0,0 +1,5 @@
+# Day 1
+
+## Target Device: TV
+
+Day 1 Assignment: Basic HMOS application with 3 screens: Main Screen, Login Screen and Register Screen, with buttons to go from Main Screen to Login Screen and from Main Screen to Register Screen.
\ No newline at end of file
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/.gitignore b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/.gitignore
new file mode 100644
index 00000000..37a4eb8b
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/.gitignore
@@ -0,0 +1,15 @@
+*.iml
+.gradle
+/local.properties
+/.idea/caches
+/.idea/libraries
+/.idea/modules.xml
+/.idea/workspace.xml
+/.idea/navEditor.xml
+/.idea/assetWizardSettings.xml
+.DS_Store
+/build
+/captures
+.externalNativeBuild
+/entry/.preview
+.cxx
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/.idea/.gitignore b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/.idea/.gitignore
new file mode 100644
index 00000000..26d33521
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/.idea/compiler.xml b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/.idea/compiler.xml
new file mode 100644
index 00000000..61a9130c
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/.idea/compiler.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/.idea/gradle.xml b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/.idea/gradle.xml
new file mode 100644
index 00000000..c6642604
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/.idea/gradle.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/.idea/jarRepositories.xml b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/.idea/jarRepositories.xml
new file mode 100644
index 00000000..1dfcd020
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/.idea/jarRepositories.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/.idea/misc.xml b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/.idea/misc.xml
new file mode 100644
index 00000000..58918f50
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/.idea/misc.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/previewConfig.json b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/previewConfig.json
new file mode 100644
index 00000000..3a2e064b
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/previewConfig.json
@@ -0,0 +1,9 @@
+{
+ "1.0.0": {
+ "LastPreviewDevice": {
+ "D:\\DevEcoStudioProjects\\LoginScreenApplication\\entry": [
+ "tv"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/tv/tvSettingConfig_3776347.json b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/tv/tvSettingConfig_3776347.json
new file mode 100644
index 00000000..735b7846
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/tv/tvSettingConfig_3776347.json
@@ -0,0 +1,25 @@
+{
+ "setting": {
+ "1.0.1": {
+ "Language": {
+ "args": {
+ "Language": "zh-CN"
+ }
+ }
+ }
+ },
+ "frontend": {
+ "1.0.0": {
+ "Resolution": {
+ "args": {
+ "Resolution": "960*540"
+ }
+ },
+ "DeviceType": {
+ "args": {
+ "DeviceType": "tv"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/build.gradle b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/build.gradle
new file mode 100644
index 00000000..9ec29b00
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/build.gradle
@@ -0,0 +1,37 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+apply plugin: 'com.huawei.ohos.app'
+
+ohos {
+ compileSdkVersion 5
+ defaultConfig {
+ compatibleSdkVersion 4
+ }
+}
+
+buildscript {
+ repositories {
+ maven {
+ url 'https://repo.huaweicloud.com/repository/maven/'
+ }
+ maven {
+ url 'https://developer.huawei.com/repo/'
+ }
+ jcenter()
+ }
+ dependencies {
+ classpath 'com.huawei.ohos:hap:2.4.2.7'
+ classpath 'com.huawei.ohos:decctest:1.0.0.7'
+ }
+}
+
+allprojects {
+ repositories {
+ maven {
+ url 'https://repo.huaweicloud.com/repository/maven/'
+ }
+ maven {
+ url 'https://developer.huawei.com/repo/'
+ }
+ jcenter()
+ }
+}
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/.gitignore b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/.gitignore
new file mode 100644
index 00000000..796b96d1
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/build.gradle b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/build.gradle
new file mode 100644
index 00000000..30c5f30b
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/build.gradle
@@ -0,0 +1,26 @@
+apply plugin: 'com.huawei.ohos.hap'
+apply plugin: 'com.huawei.ohos.decctest'
+ohos {
+ compileSdkVersion 5
+ defaultConfig {
+ compatibleSdkVersion 4
+ }
+ buildTypes {
+ release {
+ proguardOpt {
+ proguardEnabled false
+ rulesFiles 'proguard-rules.pro'
+ }
+ }
+ }
+
+}
+
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar', '*.har'])
+ testImplementation 'junit:junit:4.13'
+ ohosTestImplementation 'com.huawei.ohos.testkit:runner:1.0.0.100'
+}
+decc {
+ supportType = ['html','xml']
+}
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/proguard-rules.pro b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/proguard-rules.pro
new file mode 100644
index 00000000..f7666e47
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/proguard-rules.pro
@@ -0,0 +1 @@
+# config module specific ProGuard rules here.
\ No newline at end of file
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/config.json b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/config.json
new file mode 100644
index 00000000..3fe8d519
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/config.json
@@ -0,0 +1,49 @@
+{
+ "app": {
+ "bundleName": "com.example.loginscreenapplication",
+ "vendor": "example",
+ "version": {
+ "code": 1000000,
+ "name": "1.0.0"
+ },
+ "apiVersion": {
+ "compatible": 4,
+ "target": 5,
+ "releaseType": "Release"
+ }
+ },
+ "deviceConfig": {},
+ "module": {
+ "package": "com.example.loginscreenapplication",
+ "name": ".MyApplication",
+ "deviceType": [
+ "tv"
+ ],
+ "distro": {
+ "deliveryWithInstall": true,
+ "moduleName": "entry",
+ "moduleType": "entry"
+ },
+ "abilities": [
+ {
+ "skills": [
+ {
+ "entities": [
+ "entity.system.home"
+ ],
+ "actions": [
+ "action.system.home"
+ ]
+ }
+ ],
+ "orientation": "landscape",
+ "name": "com.example.loginscreenapplication.MainAbility",
+ "icon": "$media:icon",
+ "description": "$string:mainability_description",
+ "label": "$string:app_name",
+ "type": "page",
+ "launchType": "standard"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/MainAbility.java b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/MainAbility.java
new file mode 100644
index 00000000..48471691
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/MainAbility.java
@@ -0,0 +1,13 @@
+package com.example.loginscreenapplication;
+
+import com.example.loginscreenapplication.slice.MainAbilitySlice;
+import ohos.aafwk.ability.Ability;
+import ohos.aafwk.content.Intent;
+
+public class MainAbility extends Ability {
+ @Override
+ public void onStart(Intent intent) {
+ super.onStart(intent);
+ super.setMainRoute(MainAbilitySlice.class.getName());
+ }
+}
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/MyApplication.java b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/MyApplication.java
new file mode 100644
index 00000000..9125cca4
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/MyApplication.java
@@ -0,0 +1,10 @@
+package com.example.loginscreenapplication;
+
+import ohos.aafwk.ability.AbilityPackage;
+
+public class MyApplication extends AbilityPackage {
+ @Override
+ public void onInitialize() {
+ super.onInitialize();
+ }
+}
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/LoginAbilitySlice.java b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/LoginAbilitySlice.java
new file mode 100644
index 00000000..c84b6459
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/LoginAbilitySlice.java
@@ -0,0 +1,24 @@
+package com.example.loginscreenapplication.slice;
+
+import com.example.loginscreenapplication.ResourceTable;
+import ohos.aafwk.ability.AbilitySlice;
+import ohos.aafwk.content.Intent;
+import ohos.agp.components.Button;
+
+public class LoginAbilitySlice extends AbilitySlice {
+ @Override
+ public void onStart(Intent intent) {
+ super.onStart(intent);
+ super.setUIContent(ResourceTable.Layout_login_layout);
+}
+
+ @Override
+ public void onActive() {
+ super.onActive();
+ }
+
+ @Override
+ public void onForeground(Intent intent) {
+ super.onForeground(intent);
+ }
+}
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/MainAbilitySlice.java b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/MainAbilitySlice.java
new file mode 100644
index 00000000..4ead818f
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/MainAbilitySlice.java
@@ -0,0 +1,32 @@
+package com.example.loginscreenapplication.slice;
+
+import com.example.loginscreenapplication.ResourceTable;
+import ohos.aafwk.ability.AbilitySlice;
+import ohos.aafwk.content.Intent;
+import ohos.agp.components.Button;
+
+public class MainAbilitySlice extends AbilitySlice {
+ Button loginButton;
+ Button registerButton;
+ @Override
+ public void onStart(Intent intent) {
+ super.onStart(intent);
+ super.setUIContent(ResourceTable.Layout_ability_main);
+
+ loginButton = (Button)findComponentById(ResourceTable.Id_loginButton);
+ registerButton = (Button)findComponentById(ResourceTable.Id_registerButton);
+
+ loginButton.setClickedListener(component -> present(new LoginAbilitySlice(), new Intent()));
+ registerButton.setClickedListener(component -> present(new RegisterAbilitySlice(), new Intent()));
+ }
+
+ @Override
+ public void onActive() {
+ super.onActive();
+ }
+
+ @Override
+ public void onForeground(Intent intent) {
+ super.onForeground(intent);
+ }
+}
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/RegisterAbilitySlice.java b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/RegisterAbilitySlice.java
new file mode 100644
index 00000000..20b3f349
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/RegisterAbilitySlice.java
@@ -0,0 +1,108 @@
+package com.example.loginscreenapplication.slice;
+import com.example.loginscreenapplication.ResourceTable;
+import ohos.aafwk.ability.AbilitySlice;
+import ohos.aafwk.content.Intent;
+import ohos.agp.components.*;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class RegisterAbilitySlice extends AbilitySlice {
+ Text errorFirstName;
+ Text errorLastName;
+ Text errorEmail;
+ Text errorPassword;
+ Text errorMobile;
+
+ TextField inputFirstName;
+ TextField inputLastName;
+ TextField inputEmail;
+ TextField inputPassword;
+ TextField inputMobile;
+ RadioButton inputGenderMale;
+ RadioButton inputGenderFemale;
+
+ Button submitButton;
+
+ @Override
+ public void onStart(Intent intent) {
+ super.onStart(intent);
+ super.setUIContent(ResourceTable.Layout_register_layout);
+
+ errorFirstName = (Text)findComponentById(ResourceTable.Id_errorFirstName);
+ errorFirstName.setVisibility(Component.INVISIBLE);
+ errorLastName = (Text)findComponentById(ResourceTable.Id_errorLastName);
+ errorLastName.setVisibility(Component.INVISIBLE);
+ errorEmail = (Text)findComponentById(ResourceTable.Id_errorEmail);
+ errorEmail.setVisibility(Component.INVISIBLE);
+ errorPassword = (Text)findComponentById(ResourceTable.Id_errorPassword);
+ errorPassword.setVisibility(Component.INVISIBLE);
+ errorMobile = (Text)findComponentById(ResourceTable.Id_errorMobile);
+ errorMobile.setVisibility(Component.INVISIBLE);
+
+ inputFirstName = (TextField)findComponentById(ResourceTable.Id_registerFirstName);
+ inputLastName = (TextField)findComponentById(ResourceTable.Id_registerLastName);
+ inputEmail = (TextField)findComponentById(ResourceTable.Id_registerEmail);
+ inputPassword = (TextField)findComponentById(ResourceTable.Id_registerPassword);
+ inputMobile = (TextField)findComponentById(ResourceTable.Id_registerMobile);
+ inputGenderMale = (RadioButton)findComponentById(ResourceTable.Id_registerGenderMale);
+ inputGenderFemale = (RadioButton)findComponentById(ResourceTable.Id_registerGenderFemale);
+
+ submitButton = (Button)findComponentById(ResourceTable.Id_registerSubmitButton);
+
+ inputFirstName.addTextObserver((s, i, i1, i2) -> checkForNameError(s, errorFirstName));
+ inputLastName.addTextObserver((s, i, i1, i2) -> checkForNameError(s, errorLastName));
+ inputEmail.addTextObserver((s, i, i1, i2) -> checkForEmailError(s, errorEmail));
+ inputPassword.addTextObserver((s, i, i1, i2) -> checkForPasswordError(s, errorPassword));
+ inputMobile.addTextObserver((s, i, i1, i2) -> checkForMobileError(s, errorMobile));
+ }
+
+ @Override
+ public void onActive() {
+ super.onActive();
+ }
+
+ @Override
+ public void onForeground(Intent intent) {
+ super.onForeground(intent);
+ }
+
+ private void checkForNameError(String inputName, Text targetErrorText)
+ {
+ Pattern namePattern = Pattern.compile("[^a-zA-Z]");
+ Matcher matcher = namePattern.matcher(inputName);
+ boolean isValidName = !matcher.find();
+ if (!isValidName)
+ targetErrorText.setVisibility(Component.VISIBLE);
+ else
+ targetErrorText.setVisibility(Component.INVISIBLE);
+ }
+ private void checkForEmailError(String inputEmail, Text targetErrorText)
+ {
+ Pattern mailPattern = Pattern.compile("[a-zA-Z0-9._-]+@[a-zA-Z]+\\.+[a-zA-Z]+");
+ Matcher matcher = mailPattern.matcher(inputEmail);
+ boolean isValidEmail = matcher.find();
+ if (!isValidEmail)
+ targetErrorText.setVisibility(Component.VISIBLE);
+ else
+ targetErrorText.setVisibility(Component.INVISIBLE);
+ }
+ private void checkForPasswordError(String inputPassword, Text targetErrorText)
+ {
+ boolean isValidPassword = inputPassword.length() >= 8;
+ if (!isValidPassword)
+ targetErrorText.setVisibility(Component.VISIBLE);
+ else
+ targetErrorText.setVisibility(Component.INVISIBLE);
+ }
+ private void checkForMobileError(String inputMobile, Text targetErrorText)
+ {
+ Pattern nonNumericPattern = Pattern.compile("[^0-9]");
+ Matcher matcher = nonNumericPattern.matcher(inputMobile);
+ boolean isValidMobile = (!matcher.find())&&(inputMobile.length() >= 1);
+ if (!isValidMobile)
+ targetErrorText.setVisibility(Component.VISIBLE);
+ else
+ targetErrorText.setVisibility(Component.INVISIBLE);
+ }
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/element/string.json b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/element/string.json
new file mode 100644
index 00000000..7e2c4c95
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/element/string.json
@@ -0,0 +1,16 @@
+{
+ "string": [
+ {
+ "name": "app_name",
+ "value": "LoginScreenApplication"
+ },
+ {
+ "name": "mainability_description",
+ "value": "Java_TV_Empty Feature Ability"
+ },
+ {
+ "name": "mainability_HelloWorld",
+ "value": "Hello World"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/graphic/background_ability_main.xml b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/graphic/background_ability_main.xml
new file mode 100644
index 00000000..c0c0a3df
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/graphic/background_ability_main.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/graphic/clockvec.xml b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/graphic/clockvec.xml
new file mode 100644
index 00000000..20760d3d
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/graphic/clockvec.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/ability_main.xml b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/ability_main.xml
new file mode 100644
index 00000000..a697cc7f
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/ability_main.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/login_layout.xml b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/login_layout.xml
new file mode 100644
index 00000000..e20047a7
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/login_layout.xml
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/register_layout.xml b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/register_layout.xml
new file mode 100644
index 00000000..385e1395
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/register_layout.xml
@@ -0,0 +1,184 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/media/icon.png b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/media/icon.png
new file mode 100644
index 00000000..ce307a88
Binary files /dev/null and b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/media/icon.png differ
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/ohosTest/config.json b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/ohosTest/config.json
new file mode 100644
index 00000000..9b9d5437
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/ohosTest/config.json
@@ -0,0 +1,41 @@
+{
+ "app": {
+ "bundleName": "com.example.loginscreenapplication",
+ "vendor": "example",
+ "version": {
+ "code": 1000000,
+ "name": "1.0.0"
+ },
+ "apiVersion": {
+ "compatible": 4,
+ "target": 5,
+ "releaseType": "Release"
+ }
+ },
+ "deviceConfig": {},
+ "module": {
+ "package": "com.example.loginscreenapplication",
+ "name": "testModule",
+ "deviceType": [
+ "tv"
+ ],
+ "distro": {
+ "deliveryWithInstall": true,
+ "moduleName": "entry_test",
+ "moduleType": "feature",
+ "installationFree": true
+ },
+ "abilities": [
+ {
+ "name": "decc.testkit.runner.EntryAbility",
+ "description": "Test Entry Ability",
+ "icon": "$media:icon",
+ "label": "$string:app_name",
+ "launchType": "standard",
+ "orientation": "landscape",
+ "visible": true,
+ "type": "page"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/ohosTest/java/com/example/loginscreenapplication/ExampleOhosTest.java b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/ohosTest/java/com/example/loginscreenapplication/ExampleOhosTest.java
new file mode 100644
index 00000000..1e247a29
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/ohosTest/java/com/example/loginscreenapplication/ExampleOhosTest.java
@@ -0,0 +1,14 @@
+package com.example.loginscreenapplication;
+
+import ohos.aafwk.ability.delegation.AbilityDelegatorRegistry;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class ExampleOhosTest {
+ @Test
+ public void testBundleName() {
+ final String actualBundleName = AbilityDelegatorRegistry.getArguments().getTestBundleName();
+ assertEquals("com.example.loginscreenapplication", actualBundleName);
+ }
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/test/java/com/example/loginscreenapplication/ExampleTest.java b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/test/java/com/example/loginscreenapplication/ExampleTest.java
new file mode 100644
index 00000000..c3b7b239
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/entry/src/test/java/com/example/loginscreenapplication/ExampleTest.java
@@ -0,0 +1,9 @@
+package com.example.loginscreenapplication;
+
+import org.junit.Test;
+
+public class ExampleTest {
+ @Test
+ public void onStart() {
+ }
+}
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/gradle.properties b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/gradle.properties
new file mode 100644
index 00000000..0daf1830
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/gradle.properties
@@ -0,0 +1,10 @@
+# Project-wide Gradle settings.
+# IDE (e.g. DevEco Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+# If the Chinese output is garbled, please configure the following parameter.
+# org.gradle.jvmargs=-Dfile.encoding=GBK
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/gradle/wrapper/gradle-wrapper.jar b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 00000000..490fda85
Binary files /dev/null and b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/gradle/wrapper/gradle-wrapper.properties b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 00000000..f59159e8
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://repo.huaweicloud.com/gradle/gradle-6.3-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/gradlew b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/gradlew
new file mode 100644
index 00000000..536f0272
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/gradlew
@@ -0,0 +1,183 @@
+#!/usr/bin/env sh
+
+#
+# Copyright 2015 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ]; do
+ ls=$(ls -ld "$PRG")
+ link=$(expr "$ls" : '.*-> \(.*\)$')
+ if expr "$link" : '/.*' >/dev/null; then
+ PRG="$link"
+ else
+ PRG=$(dirname "$PRG")"/$link"
+ fi
+done
+SAVED="$(pwd)"
+cd "$(dirname \"$PRG\")/" >/dev/null
+APP_HOME="$(pwd -P)"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=$(basename "$0")
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn() {
+ echo "$*"
+}
+
+die() {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "$(uname)" in
+CYGWIN*)
+ cygwin=true
+ ;;
+Darwin*)
+ darwin=true
+ ;;
+MINGW*)
+ msys=true
+ ;;
+NONSTOP*)
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ]; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ]; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ]; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ]; then
+ MAX_FD_LIMIT=$(ulimit -H -n)
+ if [ $? -eq 0 ]; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ]; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ]; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ]; then
+ APP_HOME=$(cygpath --path --mixed "$APP_HOME")
+ CLASSPATH=$(cygpath --path --mixed "$CLASSPATH")
+ JAVACMD=$(cygpath --unix "$JAVACMD")
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=$(find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null)
+ SEP=""
+ for dir in $ROOTDIRSRAW; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ]; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@"; do
+ CHECK=$(echo "$arg" | egrep -c "$OURCYGPATTERN" -)
+ CHECK2=$(echo "$arg" | egrep -c "^-") ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ]; then ### Added a condition
+ eval $(echo args$i)=$(cygpath --path --ignore --mixed "$arg")
+ else
+ eval $(echo args$i)="\"$arg\""
+ fi
+ i=$(expr $i + 1)
+ done
+ case $i in
+ 0) set -- ;;
+ 1) set -- "$args0" ;;
+ 2) set -- "$args0" "$args1" ;;
+ 3) set -- "$args0" "$args1" "$args2" ;;
+ 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save() {
+ for i; do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/"; done
+ echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+exec "$JAVACMD" "$@"
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/gradlew.bat b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/gradlew.bat
new file mode 100644
index 00000000..62bd9b9c
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/gradlew.bat
@@ -0,0 +1,103 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/settings.gradle b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/settings.gradle
new file mode 100644
index 00000000..4773db73
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/LoginScreenApplication/settings.gradle
@@ -0,0 +1 @@
+include ':entry'
diff --git a/HarmonyOS/Day2 Assingment/Mahesh/README.md b/HarmonyOS/Day2 Assingment/Mahesh/README.md
new file mode 100644
index 00000000..df669852
--- /dev/null
+++ b/HarmonyOS/Day2 Assingment/Mahesh/README.md
@@ -0,0 +1,5 @@
+# Day 2
+
+## Target Device: TV
+
+Day 2 Assignment: Built on Day 1 application, Register Screen now has form fill-up content, with form validation during fill-up. Login Screen also has form fill-up content.
\ No newline at end of file
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.gitignore b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.gitignore
new file mode 100644
index 00000000..37a4eb8b
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.gitignore
@@ -0,0 +1,15 @@
+*.iml
+.gradle
+/local.properties
+/.idea/caches
+/.idea/libraries
+/.idea/modules.xml
+/.idea/workspace.xml
+/.idea/navEditor.xml
+/.idea/assetWizardSettings.xml
+.DS_Store
+/build
+/captures
+.externalNativeBuild
+/entry/.preview
+.cxx
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/.gitignore b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/.gitignore
new file mode 100644
index 00000000..26d33521
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/codemars.log b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/codemars.log
new file mode 100644
index 00000000..564bbc1b
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/codemars.log
@@ -0,0 +1,30 @@
+2021-06-08 21:40:17.655 [main] INFO . - user input: D:\Program Files\Huawei\DevEco Studio 2.1.0.303\tools\openjdk\bin\java,-j,-source,@D:/DevEcoStudioProjects/LoginScreenApplication/.idea/code-check/java/detect.txt,-output,D:/DevEcoStudioProjects/LoginScreenApplication/.idea/code-check/java/output.xml
+2021-06-08 21:40:17.659 [main] INFO . - CodeMars Version:2.1.2.sp4
+2021-06-08 21:40:17.893 [main] INFO . - starting analyzing.
+2021-06-08 21:40:17.969 [main] INFO . - start collecting report.
+2021-06-08 21:40:17.989 [CodeMars1] INFO . - Command: "D:\Program Files\Huawei\DevEco Studio 2.1.0.303\plugins\codecheck\lib\CodeMars\engines\SecFinder-J\bin\run_SecFinder-J.bat",-filelist,D:\DevEcoStudioProjects\LoginScreenApplication\.idea\code-check\java\filelist_2021_06_08_21_40_17_972_86.txt,-f,xml,-default,-progress,-r,D:\DevEcoStudioProjects\LoginScreenApplication\.idea\code-check\java\\errorreport_2021_06_08_21_40_17_293_21.xml,-ruleclasspath,file:///D:\DevEcoStudioProjects\LoginScreenApplication\.idea\code-check\java\ruleclasspath.txt
+2021-06-08 21:40:19.120 [Thread-2] INFO . - Jun 08, 2021 9:40:19 PM com.huawei.secfinderj.SecFinderJ needScan
+2021-06-08 21:40:19.120 [Thread-2] INFO . - INFO: SecFinder-J Version: 2.1.3
+2021-06-08 21:40:19.592 [Thread-1] INFO . - 2021-06-08 21:40:19.421: SecFinder-J Output: Inspect start...
+2021-06-08 21:40:25.605 [Thread-1] INFO . - 2021-06-08 21:40:25.605: SecFinder-J Output: Load checkers...
+2021-06-08 21:40:26.362 [Thread-1] INFO . - 2021-06-08 21:40:26.362: SecFinder-J Output: Load config...
+2021-06-08 21:40:26.452 [Thread-1] INFO . - 2021-06-08 21:40:26.451: SecFinder-J Output: step 1/4: Find files
+2021-06-08 21:40:26.525 [Thread-1] INFO . - 2021-06-08 21:40:26.525: SecFinder-J Output: step 2/4: Process files
+2021-06-08 21:40:26.620 [Thread-1] INFO . - 2021-06-08 21:40:26.620: SecFinder-J Output: step 3/4: Run analysis...
+2021-06-08 21:40:26.622 [Thread-1] INFO . - 2021-06-08 21:40:26.622: SecFinder-J Output: [SecFinder-J--Thread--1] - during processing of [LoginAbilitySlice.java]
+2021-06-08 21:40:28.414 [Thread-1] INFO . - 2021-06-08 21:40:28.414: SecFinder-J Output: step 4/4: Result output...
+2021-06-08 21:40:28.415 [Thread-1] INFO . - 2021-06-08 21:40:28.414: SecFinder-J Output: Inspect finish...
+2021-06-08 21:40:28.415 [Thread-1] INFO . - Analysis result:
+2021-06-08 21:40:28.417 [Thread-2] INFO . - Jun 08, 2021 9:40:28 PM com.huawei.secfinderj.override.HwPmd end
+2021-06-08 21:40:28.418 [Thread-2] INFO . - INFO: SecFinder-J run successed!
+2021-06-08 21:40:28.424 [Thread-1] INFO . - files analyzed : 1
+2021-06-08 21:40:28.424 [Thread-1] INFO . - lines analyzed : 137
+2021-06-08 21:40:28.424 [Thread-1] INFO . - rules used : 59
+2021-06-08 21:40:28.424 [Thread-1] INFO . - issues detected : 2
+2021-06-08 21:40:28.424 [Thread-1] INFO . - time cost(sec) : 9
+2021-06-08 21:40:28.424 [Thread-1] INFO . -
+2021-06-08 21:40:28.590 [CodeMars1] INFO . - start parse errorreport xml
+2021-06-08 21:40:28.602 [CodeMars1] INFO . - parse xml time : 55
+2021-06-08 21:40:28.602 [CodeMars1] INFO . - end parse errorreport xml
+2021-06-08 21:40:28.635 [main] INFO . - end collecting report.
+2021-06-08 21:40:28.636 [main] INFO . - end analyzing.
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/detect.txt b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/detect.txt
new file mode 100644
index 00000000..e6174ff2
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/detect.txt
@@ -0,0 +1 @@
+D:/DevEcoStudioProjects/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/LoginAbilitySlice.java
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/output.xml b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/output.xml
new file mode 100644
index 00000000..7bde60fb
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/output.xml
@@ -0,0 +1,93 @@
+
+
+
+
+
+ 信息泄露
+ 编程规范违反
+
+ Hardcoded_Password
+
+ 21
+
+
+
+
+ 1eb44ae25387bda8d20c1a9620da0de4
+ Medium
+
+
+ 11
+ 30
+
+
+
+
+
+
+ 信息泄露
+ 编程规范违反
+
+ Hardcoded_Password
+
+ 24
+
+
+
+
+ 1eb44ae25387bda8d20c1a9620da0de4
+ Medium
+
+
+ 14
+ 33
+
+
+
+
+
+1
+137
+9
+2
+
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/ruleclasspath.txt b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/ruleclasspath.txt
new file mode 100644
index 00000000..862fb70e
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/ruleclasspath.txt
@@ -0,0 +1 @@
+D:\Program Files\Huawei\DevEco Studio 2.1.0.303\plugins\codecheck\lib\CodeMars\engines\SecFinder-J\rule\
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/compiler.xml b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/compiler.xml
new file mode 100644
index 00000000..61a9130c
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/compiler.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/gradle.xml b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/gradle.xml
new file mode 100644
index 00000000..c95bf16d
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/gradle.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/jarRepositories.xml b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/jarRepositories.xml
new file mode 100644
index 00000000..1dfcd020
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/jarRepositories.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/misc.xml b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/misc.xml
new file mode 100644
index 00000000..58918f50
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/misc.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/phone/phoneSettingConfig_3776347.json b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/phone/phoneSettingConfig_3776347.json
new file mode 100644
index 00000000..69beee7f
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/phone/phoneSettingConfig_3776347.json
@@ -0,0 +1,25 @@
+{
+ "setting": {
+ "1.0.1": {
+ "Language": {
+ "args": {
+ "Language": "zh_CN"
+ }
+ }
+ }
+ },
+ "frontend": {
+ "1.0.0": {
+ "Resolution": {
+ "args": {
+ "Resolution": "360*780"
+ }
+ },
+ "DeviceType": {
+ "args": {
+ "DeviceType": "phone"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/previewConfig.json b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/previewConfig.json
new file mode 100644
index 00000000..e8f3ff07
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/previewConfig.json
@@ -0,0 +1,9 @@
+{
+ "1.0.0": {
+ "LastPreviewDevice": {
+ "D:\\DevEcoStudioProjects\\LoginScreenApplication\\entry": [
+ "phone"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/build.gradle b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/build.gradle
new file mode 100644
index 00000000..9ec29b00
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/build.gradle
@@ -0,0 +1,37 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+apply plugin: 'com.huawei.ohos.app'
+
+ohos {
+ compileSdkVersion 5
+ defaultConfig {
+ compatibleSdkVersion 4
+ }
+}
+
+buildscript {
+ repositories {
+ maven {
+ url 'https://repo.huaweicloud.com/repository/maven/'
+ }
+ maven {
+ url 'https://developer.huawei.com/repo/'
+ }
+ jcenter()
+ }
+ dependencies {
+ classpath 'com.huawei.ohos:hap:2.4.2.7'
+ classpath 'com.huawei.ohos:decctest:1.0.0.7'
+ }
+}
+
+allprojects {
+ repositories {
+ maven {
+ url 'https://repo.huaweicloud.com/repository/maven/'
+ }
+ maven {
+ url 'https://developer.huawei.com/repo/'
+ }
+ jcenter()
+ }
+}
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/.gitignore b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/.gitignore
new file mode 100644
index 00000000..796b96d1
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/build.gradle b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/build.gradle
new file mode 100644
index 00000000..30c5f30b
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/build.gradle
@@ -0,0 +1,26 @@
+apply plugin: 'com.huawei.ohos.hap'
+apply plugin: 'com.huawei.ohos.decctest'
+ohos {
+ compileSdkVersion 5
+ defaultConfig {
+ compatibleSdkVersion 4
+ }
+ buildTypes {
+ release {
+ proguardOpt {
+ proguardEnabled false
+ rulesFiles 'proguard-rules.pro'
+ }
+ }
+ }
+
+}
+
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar', '*.har'])
+ testImplementation 'junit:junit:4.13'
+ ohosTestImplementation 'com.huawei.ohos.testkit:runner:1.0.0.100'
+}
+decc {
+ supportType = ['html','xml']
+}
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/proguard-rules.pro b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/proguard-rules.pro
new file mode 100644
index 00000000..f7666e47
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/proguard-rules.pro
@@ -0,0 +1 @@
+# config module specific ProGuard rules here.
\ No newline at end of file
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/config.json b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/config.json
new file mode 100644
index 00000000..e3024fee
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/config.json
@@ -0,0 +1,49 @@
+{
+ "app": {
+ "bundleName": "com.example.loginscreenapplication",
+ "vendor": "example",
+ "version": {
+ "code": 1000000,
+ "name": "1.0.0"
+ },
+ "apiVersion": {
+ "compatible": 4,
+ "target": 5,
+ "releaseType": "Release"
+ }
+ },
+ "deviceConfig": {},
+ "module": {
+ "package": "com.example.loginscreenapplication",
+ "name": ".MyApplication",
+ "deviceType": [
+ "phone"
+ ],
+ "distro": {
+ "deliveryWithInstall": true,
+ "moduleName": "entry",
+ "moduleType": "entry"
+ },
+ "abilities": [
+ {
+ "skills": [
+ {
+ "entities": [
+ "entity.system.home"
+ ],
+ "actions": [
+ "action.system.home"
+ ]
+ }
+ ],
+ "orientation": "unspecified",
+ "name": "com.example.loginscreenapplication.MainAbility",
+ "icon": "$media:icon",
+ "description": "$string:mainability_description",
+ "label": "$string:app_name",
+ "type": "page",
+ "launchType": "standard"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/DbHelper.java b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/DbHelper.java
new file mode 100644
index 00000000..2ae34bb9
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/DbHelper.java
@@ -0,0 +1,95 @@
+package com.example.loginscreenapplication;
+
+import com.example.loginscreenapplication.Model.UserData;
+import ohos.app.Context;
+import ohos.data.DatabaseHelper;
+import ohos.data.rdb.*;
+import ohos.data.resultset.ResultSet;
+
+public class DbHelper extends DatabaseHelper {
+
+ public static final String TABLE_NAME = "UserDataTable";
+
+ private static final String CREATE_TABLE_SQL =
+ String.format("CREATE TABLE IF NOT EXISTS %s(" +
+ "email TEXT PRIMARY KEY, " +
+ "firstName TEXT NOT NULL, " +
+ "lastName TEXT NOT NULL, " +
+ "password TEXT NOT NULL, " +
+ "mobile TEXT NOT NULL, " +
+ "gender TEXT NOT NULL" +
+ ")", TABLE_NAME);
+
+ public DbHelper(Context context) {
+ super(context);
+ }
+
+ private static final RdbOpenCallback callback = new RdbOpenCallback() {
+ @Override
+ public void onCreate(RdbStore rdbStore) {
+ rdbStore.executeSql(CREATE_TABLE_SQL);
+ }
+
+ @Override
+ public void onUpgrade(RdbStore rdbStore, int i, int i1) {
+
+ }
+ };
+
+ public RdbStore initRdb(Context context) {
+ StoreConfig config = StoreConfig.newDefaultConfig("storeTest.db");
+ return getRdbStore(config, 1, callback, null);
+ }
+
+ // DB Helper Methods
+ public static boolean insertUserData(RdbStore db, UserData userData)
+ {
+
+ // Check if entry already exists
+ RdbPredicates emailComparisonPredicate = new RdbPredicates(TABLE_NAME).equalTo("email", userData.getEmail());
+ ResultSet queryResult = db.query(emailComparisonPredicate, null);
+ if (queryResult != null && queryResult.getRowCount() > 0)
+ {
+ // It means there already exist an entry in the database with the same email id
+ return false;
+ }
+
+ ValuesBucket valuesBucket = userData.createValuesBucketFromData();
+
+ long rowId = db.insert(TABLE_NAME, valuesBucket);
+ return rowId != -1;
+ }
+
+ public static UserData getUserDataIfExists(RdbStore db, String email)
+ {
+ // Check if entry already exists
+ RdbPredicates emailComparisonPredicate = new RdbPredicates(TABLE_NAME).equalTo("email", email);
+ ResultSet queryResult = db.query(emailComparisonPredicate, null);
+ if (queryResult != null && queryResult.getRowCount() > 0)
+ {
+ queryResult.goToFirstRow();
+ // It means there already exist an entry in the database with the same email id
+ UserData userData = new UserData();
+ userData.setEmail(queryResult.getString(0));
+ userData.setFirstName(queryResult.getString(1));
+ userData.setLastName(queryResult.getString(2));
+ userData.setPassword(queryResult.getString(3));
+ userData.setMobile(queryResult.getString(4));
+
+ UserData.Gender gender;
+ String queriedGenderString = queryResult.getString(5);
+ if (queriedGenderString.equals(UserData.Gender.Male.toString()))
+ {
+ gender = UserData.Gender.Male;
+ }
+ else
+ {
+ gender = UserData.Gender.Female;
+ }
+
+ userData.setGender(gender);
+ return userData;
+ }
+ return null;
+ }
+}
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/InputValidationMethods.java b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/InputValidationMethods.java
new file mode 100644
index 00000000..27edf054
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/InputValidationMethods.java
@@ -0,0 +1,58 @@
+package com.example.loginscreenapplication;
+
+import ohos.agp.components.Component;
+import ohos.agp.components.Text;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class InputValidationMethods {
+
+ public static void checkForNameError(String inputName, Text targetErrorText)
+ {
+ Pattern namePattern = Pattern.compile("[^a-zA-Z]");
+ Matcher matcher = namePattern.matcher(inputName);
+ boolean isValidName = !matcher.find();
+ if (!isValidName)
+ targetErrorText.setVisibility(Component.VISIBLE);
+ else
+ targetErrorText.setVisibility(Component.INVISIBLE);
+ }
+ public static void checkForEmailError(String inputEmail, Text targetErrorText)
+ {
+ if (!isValidEmail(inputEmail))
+ targetErrorText.setVisibility(Component.VISIBLE);
+ else
+ targetErrorText.setVisibility(Component.INVISIBLE);
+ }
+
+ public static boolean isValidEmail(String inputEmail) {
+
+ Pattern emailPattern = Pattern.compile("[a-zA-Z0-9._-]+@[a-zA-Z]+\\.+[a-zA-Z]+");
+ Matcher matcher = emailPattern.matcher(inputEmail);
+ return matcher.find();
+ }
+
+ public static void checkForPasswordError(String inputPassword, Text targetErrorText)
+ {
+ if (!isValidPassword(inputPassword))
+ targetErrorText.setVisibility(Component.VISIBLE);
+ else
+ targetErrorText.setVisibility(Component.INVISIBLE);
+ }
+
+ public static boolean isValidPassword(String inputPassword) {
+ return inputPassword.length() >= 8;
+ }
+
+ public static void checkForMobileError(String inputMobile, Text targetErrorText)
+ {
+ Pattern nonNumericPattern = Pattern.compile("[^0-9]");
+ Matcher matcher = nonNumericPattern.matcher(inputMobile);
+ boolean isValidMobile = (!matcher.find())&&(inputMobile.length() >= 1);
+ if (!isValidMobile)
+ targetErrorText.setVisibility(Component.VISIBLE);
+ else
+ targetErrorText.setVisibility(Component.INVISIBLE);
+ }
+}
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/MainAbility.java b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/MainAbility.java
new file mode 100644
index 00000000..48471691
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/MainAbility.java
@@ -0,0 +1,13 @@
+package com.example.loginscreenapplication;
+
+import com.example.loginscreenapplication.slice.MainAbilitySlice;
+import ohos.aafwk.ability.Ability;
+import ohos.aafwk.content.Intent;
+
+public class MainAbility extends Ability {
+ @Override
+ public void onStart(Intent intent) {
+ super.onStart(intent);
+ super.setMainRoute(MainAbilitySlice.class.getName());
+ }
+}
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/Model/LoginResponse.java b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/Model/LoginResponse.java
new file mode 100644
index 00000000..031879c9
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/Model/LoginResponse.java
@@ -0,0 +1,27 @@
+package com.example.loginscreenapplication.Model;
+
+
+public class LoginResponse{
+ private final UserData userData;
+ private final LoginResponseType loginResponseType;
+
+ public LoginResponse(UserData userData, LoginResponseType loginResponseType)
+ {
+ this.userData = userData;
+ this.loginResponseType = loginResponseType;
+ }
+
+ public UserData getUserData() {
+ return userData;
+ }
+
+ public LoginResponseType getLoginResponseType() {
+ return loginResponseType;
+ }
+
+ public enum LoginResponseType {
+ success,
+ emailNotFound,
+ incorrectPassword
+ }
+}
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/Model/UserData.java b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/Model/UserData.java
new file mode 100644
index 00000000..e313e955
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/Model/UserData.java
@@ -0,0 +1,90 @@
+package com.example.loginscreenapplication.Model;
+
+
+import ohos.data.rdb.ValuesBucket;
+
+import java.io.Serializable;
+
+public class UserData implements Serializable {
+
+ String firstName;
+ String lastName;
+ String email;
+ String password;
+ String mobile;
+ String gender;
+
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public String getMobile() {
+ return mobile;
+ }
+
+ public void setMobile(String mobile) {
+ this.mobile = mobile;
+ }
+
+ public Gender getGender()
+ {
+ try{
+ return Gender.valueOf(gender);
+ }
+ catch (IllegalArgumentException e)
+ {
+ // Default value
+ return Gender.Male;
+ }
+ }
+
+ public void setGender(Gender gender) {
+ this.gender = gender.toString();
+ }
+
+ public enum Gender {
+ Male,
+ Female
+ }
+
+ public ValuesBucket createValuesBucketFromData()
+ {
+ ValuesBucket valuesBucket = new ValuesBucket();
+ valuesBucket.putString("firstName",firstName);
+ valuesBucket.putString("lastName",lastName);
+ valuesBucket.putString("email",email);
+ valuesBucket.putString("password",password);
+ valuesBucket.putString("mobile",mobile);
+ valuesBucket.putString("gender",gender);
+ return valuesBucket;
+ }
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/MyApplication.java b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/MyApplication.java
new file mode 100644
index 00000000..9125cca4
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/MyApplication.java
@@ -0,0 +1,10 @@
+package com.example.loginscreenapplication;
+
+import ohos.aafwk.ability.AbilityPackage;
+
+public class MyApplication extends AbilityPackage {
+ @Override
+ public void onInitialize() {
+ super.onInitialize();
+ }
+}
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/LoginAbilitySlice.java b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/LoginAbilitySlice.java
new file mode 100644
index 00000000..eb9f61a8
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/LoginAbilitySlice.java
@@ -0,0 +1,137 @@
+package com.example.loginscreenapplication.slice;
+
+import com.example.loginscreenapplication.DbHelper;
+import com.example.loginscreenapplication.InputValidationMethods;
+import com.example.loginscreenapplication.Model.LoginResponse;
+import com.example.loginscreenapplication.Model.UserData;
+import com.example.loginscreenapplication.ResourceTable;
+import ohos.aafwk.ability.AbilitySlice;
+import ohos.aafwk.content.Intent;
+import ohos.agp.components.Button;
+import ohos.agp.components.Component;
+import ohos.agp.components.Text;
+import ohos.agp.components.TextField;
+import ohos.data.DatabaseHelper;
+import ohos.data.rdb.RdbStore;
+
+
+
+public class LoginAbilitySlice extends AbilitySlice {
+
+ public static final String PLEASE_ENTER_VALID_EMAIL_PASSWORD = "Please enter valid email & password.";
+ public static final String LOGIN_SUCCESSFUL = "Login Successful";
+ public static final String EMAIL_ID_NOT_FOUND = "Email Id not found.";
+ public static final String PASSWORD_DOES_NOT_MATCH = "Password does not match.";
+ public static final String USER_DATA = "UserData";
+ TextField inputEmail;
+ TextField inputPassword;
+
+ Button loginButton;
+ Text loginFailedErrorMessage;
+
+ RdbStore db;
+
+ @Override
+ public void onStart(Intent intent) {
+ super.onStart(intent);
+ super.setUIContent(ResourceTable.Layout_login_layout);
+
+ inputEmail = (TextField)findComponentById(ResourceTable.Id_loginEmail);
+ inputPassword = (TextField)findComponentById(ResourceTable.Id_loginPassword);
+
+ loginButton = (Button)findComponentById(ResourceTable.Id_loginSubmitButton);
+ loginFailedErrorMessage = (Text)findComponentById(ResourceTable.Id_loginFailedErrorMessage);
+ loginFailedErrorMessage.setVisibility(Component.INVISIBLE);
+
+ loginButton.setClickedListener(component -> {
+ onClickSubmit();
+ });
+}
+
+ @Override
+ public void onActive() {
+ super.onActive();
+ DbHelper dbHelper = new DbHelper(this);
+ db = dbHelper.initRdb(this);
+ }
+
+ @Override
+ public void onForeground(Intent intent) {
+ super.onForeground(intent);
+ }
+
+ public void onClickSubmit()
+ {
+ if (isLoginInputsValid())
+ {
+ LoginResponse loginResponse = tryLogin();
+ if (!(loginResponse.getLoginResponseType() == LoginResponse.LoginResponseType.success))
+ {
+ loginFailedErrorMessage.setVisibility(Component.VISIBLE);
+ loginFailedErrorMessage.setText(getLoginErrorMessage(loginResponse.getLoginResponseType()));
+ }
+ else
+ {
+ Intent intent = new Intent();
+ intent.setParam(USER_DATA, loginResponse.getUserData());
+ present(new WelcomeAbilitySlice(), intent);
+ }
+ }
+ else
+ {
+ loginFailedErrorMessage.setVisibility(Component.VISIBLE);
+ loginFailedErrorMessage.setText(PLEASE_ENTER_VALID_EMAIL_PASSWORD);
+ }
+ }
+
+ private boolean isLoginInputsValid()
+ {
+ String email = inputEmail.getText();
+ if (isNullOrEmpty(email) || !InputValidationMethods.isValidEmail(email))
+ {
+ return false;
+ }
+ String password = inputPassword.getText();
+ if (isNullOrEmpty(password) || !InputValidationMethods.isValidPassword(password))
+ {
+ return false;
+ }
+ return true;
+ }
+ private boolean isNullOrEmpty(String string)
+ {
+ return string == null || string.isEmpty();
+ }
+ private LoginResponse tryLogin()
+ {
+ LoginResponse.LoginResponseType loginResponseType = LoginResponse.LoginResponseType.success;
+ String email = inputEmail.getText();
+ String password = inputPassword.getText();
+ UserData userData = DbHelper.getUserDataIfExists(db, email);
+ if (userData == null)
+ {
+ loginResponseType = LoginResponse.LoginResponseType.emailNotFound;
+ }
+ else
+ {
+ if (!password.equals(userData.getPassword()))
+ {
+ loginResponseType = LoginResponse.LoginResponseType.incorrectPassword;
+ userData = null;
+ }
+ }
+ return new LoginResponse(userData, loginResponseType);
+ }
+
+ private String getLoginErrorMessage(LoginResponse.LoginResponseType loginResponseType)
+ {
+ switch (loginResponseType)
+ {
+ case success: return LOGIN_SUCCESSFUL;
+ case emailNotFound: return EMAIL_ID_NOT_FOUND;
+ case incorrectPassword: return PASSWORD_DOES_NOT_MATCH;
+ default: return null;
+ }
+ }
+
+}
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/MainAbilitySlice.java b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/MainAbilitySlice.java
new file mode 100644
index 00000000..4ead818f
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/MainAbilitySlice.java
@@ -0,0 +1,32 @@
+package com.example.loginscreenapplication.slice;
+
+import com.example.loginscreenapplication.ResourceTable;
+import ohos.aafwk.ability.AbilitySlice;
+import ohos.aafwk.content.Intent;
+import ohos.agp.components.Button;
+
+public class MainAbilitySlice extends AbilitySlice {
+ Button loginButton;
+ Button registerButton;
+ @Override
+ public void onStart(Intent intent) {
+ super.onStart(intent);
+ super.setUIContent(ResourceTable.Layout_ability_main);
+
+ loginButton = (Button)findComponentById(ResourceTable.Id_loginButton);
+ registerButton = (Button)findComponentById(ResourceTable.Id_registerButton);
+
+ loginButton.setClickedListener(component -> present(new LoginAbilitySlice(), new Intent()));
+ registerButton.setClickedListener(component -> present(new RegisterAbilitySlice(), new Intent()));
+ }
+
+ @Override
+ public void onActive() {
+ super.onActive();
+ }
+
+ @Override
+ public void onForeground(Intent intent) {
+ super.onForeground(intent);
+ }
+}
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/RegisterAbilitySlice.java b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/RegisterAbilitySlice.java
new file mode 100644
index 00000000..e34c02b6
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/RegisterAbilitySlice.java
@@ -0,0 +1,160 @@
+package com.example.loginscreenapplication.slice;
+import com.example.loginscreenapplication.DbHelper;
+import com.example.loginscreenapplication.InputValidationMethods;
+import com.example.loginscreenapplication.Model.UserData;
+import com.example.loginscreenapplication.ResourceTable;
+import ohos.aafwk.ability.AbilitySlice;
+import ohos.aafwk.content.Intent;
+import ohos.agp.components.*;
+import ohos.data.rdb.RdbStore;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class RegisterAbilitySlice extends AbilitySlice {
+ public static final String ALL_FIELDS_ARE_REQUIRED = "All fields are required.";
+ public static final String ENSURE_VALID_INPUTS_TO_ALL_FIELDS = "Ensure valid inputs to all fields.";
+ Text errorFirstName;
+ Text errorLastName;
+ Text errorEmail;
+ Text errorPassword;
+ Text errorMobile;
+ Text registerFailedMessage;
+
+ TextField inputFirstName;
+ TextField inputLastName;
+ TextField inputEmail;
+ TextField inputPassword;
+ TextField inputMobile;
+ RadioButton inputGenderMale;
+ RadioButton inputGenderFemale;
+
+ Button submitButton;
+
+ private RdbStore db;
+
+ private static final String DB_ALIAS = "User Data Table";
+ private static final String DB_NAME = "UserDataTable";
+
+ @Override
+ public void onStart(Intent intent) {
+ super.onStart(intent);
+ super.setUIContent(ResourceTable.Layout_register_layout);
+
+ initializeFieldsAndListeners();
+
+ }
+
+ @Override
+ public void onActive() {
+ super.onActive();
+ DbHelper dbHelper = new DbHelper(this);
+ db = dbHelper.initRdb(this);
+ }
+
+ @Override
+ public void onForeground(Intent intent) {
+ super.onForeground(intent);
+ }
+
+ private void initializeFieldsAndListeners() {
+ errorFirstName = (Text)findComponentById(ResourceTable.Id_errorFirstName);
+ errorFirstName.setVisibility(Component.INVISIBLE);
+ errorLastName = (Text)findComponentById(ResourceTable.Id_errorLastName);
+ errorLastName.setVisibility(Component.INVISIBLE);
+ errorEmail = (Text)findComponentById(ResourceTable.Id_errorEmail);
+ errorEmail.setVisibility(Component.INVISIBLE);
+ errorPassword = (Text)findComponentById(ResourceTable.Id_errorPassword);
+ errorPassword.setVisibility(Component.INVISIBLE);
+ errorMobile = (Text)findComponentById(ResourceTable.Id_errorMobile);
+ errorMobile.setVisibility(Component.INVISIBLE);
+ registerFailedMessage = (Text)findComponentById(ResourceTable.Id_registerFailedMessage);
+ registerFailedMessage.setVisibility(Component.INVISIBLE);
+
+ inputFirstName = (TextField)findComponentById(ResourceTable.Id_registerFirstName);
+ inputLastName = (TextField)findComponentById(ResourceTable.Id_registerLastName);
+ inputEmail = (TextField)findComponentById(ResourceTable.Id_registerEmail);
+ inputPassword = (TextField)findComponentById(ResourceTable.Id_registerPassword);
+ inputMobile = (TextField)findComponentById(ResourceTable.Id_registerMobile);
+ inputGenderMale = (RadioButton)findComponentById(ResourceTable.Id_registerGenderMale);
+ inputGenderFemale = (RadioButton)findComponentById(ResourceTable.Id_registerGenderFemale);
+
+ submitButton = (Button)findComponentById(ResourceTable.Id_registerSubmitButton);
+
+ inputFirstName.addTextObserver((s, i, i1, i2) -> InputValidationMethods.checkForNameError(s, errorFirstName));
+ inputLastName.addTextObserver((s, i, i1, i2) -> InputValidationMethods.checkForNameError(s, errorLastName));
+ inputEmail.addTextObserver((s, i, i1, i2) -> InputValidationMethods.checkForEmailError(s, errorEmail));
+ inputPassword.addTextObserver((s, i, i1, i2) -> InputValidationMethods.checkForPasswordError(s, errorPassword));
+ inputMobile.addTextObserver((s, i, i1, i2) -> InputValidationMethods.checkForMobileError(s, errorMobile));
+ submitButton.setClickedListener(this::onClickSubmit);
+ }
+
+ private void onClickSubmit(Component component)
+ {
+ // Check if the text fields all have entries:
+ if (isNullOrEmpty(inputFirstName.getText()) ||
+ isNullOrEmpty(inputLastName.getText()) ||
+ isNullOrEmpty(inputEmail.getText()) ||
+ isNullOrEmpty(inputPassword.getText()) ||
+ isNullOrEmpty(inputMobile.getText()) ||
+ (!inputGenderMale.isChecked() && !inputGenderFemale.isChecked()))
+ {
+ registerFailedMessage.setVisibility(Component.VISIBLE);
+ registerFailedMessage.setText(ALL_FIELDS_ARE_REQUIRED);
+ }
+ else
+ {
+ // Check if the text fields are all validated
+ if (errorFirstName.getVisibility() == Component.VISIBLE ||
+ errorLastName.getVisibility() == Component.VISIBLE ||
+ errorEmail.getVisibility() == Component.VISIBLE ||
+ errorPassword.getVisibility() == Component.VISIBLE ||
+ errorMobile.getVisibility() == Component.VISIBLE)
+ {
+ registerFailedMessage.setVisibility(Component.VISIBLE);
+ registerFailedMessage.setText(ENSURE_VALID_INPUTS_TO_ALL_FIELDS);
+ }
+ else
+ {
+ // All inputs validated. Data submission can proceed
+ boolean submissionSuccess = submitData();
+ if (submissionSuccess)
+ {
+ // Submission was a success. Redirect to home screen
+ present(new MainAbilitySlice(), new Intent());
+ }
+ else
+ {
+ registerFailedMessage.setVisibility(Component.VISIBLE);
+ registerFailedMessage.setText("Submission Failed. Email Id already exists in database.");
+ }
+ }
+ }
+ }
+
+ private boolean submitData()
+ {
+ boolean submissionResult = DbHelper.insertUserData(db, getUserDataFromTextFields());
+ return submissionResult;
+ }
+
+ private UserData getUserDataFromTextFields()
+ {
+ UserData userData = new UserData();
+ userData.setFirstName(inputFirstName.getText());
+ userData.setLastName(inputLastName.getText());
+ userData.setEmail(inputEmail.getText());
+ userData.setPassword(inputPassword.getText());
+ userData.setMobile(inputMobile.getText());
+ if (inputGenderMale.isChecked())
+ userData.setGender(UserData.Gender.Male);
+ else
+ userData.setGender(UserData.Gender.Female);
+ return userData;
+ }
+
+ private boolean isNullOrEmpty(String string){
+ return string == null || string.isEmpty();
+ }
+
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/WelcomeAbilitySlice.java b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/WelcomeAbilitySlice.java
new file mode 100644
index 00000000..15df03ed
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/WelcomeAbilitySlice.java
@@ -0,0 +1,54 @@
+package com.example.loginscreenapplication.slice;
+
+import com.example.loginscreenapplication.Model.UserData;
+import com.example.loginscreenapplication.ResourceTable;
+import ohos.aafwk.ability.AbilitySlice;
+import ohos.aafwk.content.Intent;
+import ohos.agp.components.Text;
+
+public class WelcomeAbilitySlice extends AbilitySlice {
+ public static final String USER_DATA = "UserData";
+ public static final String WELCOME_BASE_TEXT = "Welcome, %s.";
+
+ public static final String MALE_GENDERED_TITLE = "Mr.";
+ public static final String FEMALE_GENDERED_TITLE = "Mrs.";
+
+ Text welcomeText;
+
+ UserData userData;
+ @Override
+ public void onStart(Intent intent) {
+ super.onStart(intent);
+ super.setUIContent(ResourceTable.Layout_welcome_layout);
+ userData = intent.getSerializableParam(USER_DATA);
+
+ welcomeText = (Text)findComponentById(ResourceTable.Id_welcomePageText);
+
+ String prefix = "";
+ String firstName = userData.getFirstName();
+ String lastName = userData.getLastName();
+ UserData.Gender gender = userData.getGender();
+
+ if (gender == UserData.Gender.Female)
+ {
+ prefix = FEMALE_GENDERED_TITLE;
+ }else{
+ prefix = MALE_GENDERED_TITLE;
+ }
+ String fullName = String.format("%s %s %s", prefix, firstName, lastName);
+ String completedWelcomeText = String.format(WELCOME_BASE_TEXT, fullName);
+
+ welcomeText.setText(completedWelcomeText);
+ }
+
+ @Override
+ public void onActive() {
+ super.onActive();
+ }
+
+ @Override
+ public void onForeground(Intent intent) {
+ super.onForeground(intent);
+ }
+
+}
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/element/string.json b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/element/string.json
new file mode 100644
index 00000000..3d5b4d48
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/element/string.json
@@ -0,0 +1,16 @@
+{
+ "string": [
+ {
+ "name": "app_name",
+ "value": "LoginScreenApplication"
+ },
+ {
+ "name": "mainability_description",
+ "value": "Java_Phone_Empty Feature Ability"
+ },
+ {
+ "name": "mainability_HelloWorld",
+ "value": "Hello World"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/graphic/background_ability_main.xml b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/graphic/background_ability_main.xml
new file mode 100644
index 00000000..c0c0a3df
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/graphic/background_ability_main.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/graphic/clockvec.xml b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/graphic/clockvec.xml
new file mode 100644
index 00000000..20760d3d
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/graphic/clockvec.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/ability_main.xml b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/ability_main.xml
new file mode 100644
index 00000000..182efae7
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/ability_main.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/login_layout.xml b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/login_layout.xml
new file mode 100644
index 00000000..e7f6b6a8
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/login_layout.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/register_layout.xml b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/register_layout.xml
new file mode 100644
index 00000000..e7ca6863
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/register_layout.xml
@@ -0,0 +1,202 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/welcome_layout.xml b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/welcome_layout.xml
new file mode 100644
index 00000000..e2a474ba
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/welcome_layout.xml
@@ -0,0 +1,14 @@
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/media/icon.png b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/media/icon.png
new file mode 100644
index 00000000..ce307a88
Binary files /dev/null and b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/media/icon.png differ
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/ohosTest/config.json b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/ohosTest/config.json
new file mode 100644
index 00000000..8f211ec7
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/ohosTest/config.json
@@ -0,0 +1,41 @@
+{
+ "app": {
+ "bundleName": "com.example.loginscreenapplication",
+ "vendor": "example",
+ "version": {
+ "code": 1000000,
+ "name": "1.0.0"
+ },
+ "apiVersion": {
+ "compatible": 4,
+ "target": 5,
+ "releaseType": "Release"
+ }
+ },
+ "deviceConfig": {},
+ "module": {
+ "package": "com.example.loginscreenapplication",
+ "name": "testModule",
+ "deviceType": [
+ "phone"
+ ],
+ "distro": {
+ "deliveryWithInstall": true,
+ "moduleName": "entry_test",
+ "moduleType": "feature",
+ "installationFree": true
+ },
+ "abilities": [
+ {
+ "name": "decc.testkit.runner.EntryAbility",
+ "description": "Test Entry Ability",
+ "icon": "$media:icon",
+ "label": "$string:app_name",
+ "launchType": "standard",
+ "orientation": "landscape",
+ "visible": true,
+ "type": "page"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/ohosTest/java/com/example/loginscreenapplication/ExampleOhosTest.java b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/ohosTest/java/com/example/loginscreenapplication/ExampleOhosTest.java
new file mode 100644
index 00000000..1e247a29
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/ohosTest/java/com/example/loginscreenapplication/ExampleOhosTest.java
@@ -0,0 +1,14 @@
+package com.example.loginscreenapplication;
+
+import ohos.aafwk.ability.delegation.AbilityDelegatorRegistry;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class ExampleOhosTest {
+ @Test
+ public void testBundleName() {
+ final String actualBundleName = AbilityDelegatorRegistry.getArguments().getTestBundleName();
+ assertEquals("com.example.loginscreenapplication", actualBundleName);
+ }
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/test/java/com/example/loginscreenapplication/ExampleTest.java b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/test/java/com/example/loginscreenapplication/ExampleTest.java
new file mode 100644
index 00000000..c3b7b239
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/entry/src/test/java/com/example/loginscreenapplication/ExampleTest.java
@@ -0,0 +1,9 @@
+package com.example.loginscreenapplication;
+
+import org.junit.Test;
+
+public class ExampleTest {
+ @Test
+ public void onStart() {
+ }
+}
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/gradle.properties b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/gradle.properties
new file mode 100644
index 00000000..0daf1830
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/gradle.properties
@@ -0,0 +1,10 @@
+# Project-wide Gradle settings.
+# IDE (e.g. DevEco Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+# If the Chinese output is garbled, please configure the following parameter.
+# org.gradle.jvmargs=-Dfile.encoding=GBK
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/gradle/wrapper/gradle-wrapper.jar b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 00000000..490fda85
Binary files /dev/null and b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/gradle/wrapper/gradle-wrapper.properties b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 00000000..f59159e8
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://repo.huaweicloud.com/gradle/gradle-6.3-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/gradlew b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/gradlew
new file mode 100644
index 00000000..2fe81a7d
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/gradlew
@@ -0,0 +1,183 @@
+#!/usr/bin/env sh
+
+#
+# Copyright 2015 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+ echo "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=`expr $i + 1`
+ done
+ case $i in
+ 0) set -- ;;
+ 1) set -- "$args0" ;;
+ 2) set -- "$args0" "$args1" ;;
+ 3) set -- "$args0" "$args1" "$args2" ;;
+ 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=`save "$@"`
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+exec "$JAVACMD" "$@"
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/gradlew.bat b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/gradlew.bat
new file mode 100644
index 00000000..62bd9b9c
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/gradlew.bat
@@ -0,0 +1,103 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/settings.gradle b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/settings.gradle
new file mode 100644
index 00000000..4773db73
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/LoginScreenApplication/settings.gradle
@@ -0,0 +1 @@
+include ':entry'
diff --git a/HarmonyOS/Day3 Assingment/Mahesh/README.md b/HarmonyOS/Day3 Assingment/Mahesh/README.md
new file mode 100644
index 00000000..20fb98cf
--- /dev/null
+++ b/HarmonyOS/Day3 Assingment/Mahesh/README.md
@@ -0,0 +1,5 @@
+# Day 3
+
+## Target Device: Phone
+
+Day 3 Assignment: Ported to Phone Device from TV Device. Implemented rdbStore capability to store and retrieve registered user data. Supports insertion of data through registration page (handling of duplicate email Id during registration) and reading of data through login page (handling of non-existent email Id in database and incorrect password).
\ No newline at end of file
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.gitignore b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.gitignore
new file mode 100644
index 00000000..37a4eb8b
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.gitignore
@@ -0,0 +1,15 @@
+*.iml
+.gradle
+/local.properties
+/.idea/caches
+/.idea/libraries
+/.idea/modules.xml
+/.idea/workspace.xml
+/.idea/navEditor.xml
+/.idea/assetWizardSettings.xml
+.DS_Store
+/build
+/captures
+.externalNativeBuild
+/entry/.preview
+.cxx
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/.gitignore b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/.gitignore
new file mode 100644
index 00000000..26d33521
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/codemars.log b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/codemars.log
new file mode 100644
index 00000000..564bbc1b
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/codemars.log
@@ -0,0 +1,30 @@
+2021-06-08 21:40:17.655 [main] INFO . - user input: D:\Program Files\Huawei\DevEco Studio 2.1.0.303\tools\openjdk\bin\java,-j,-source,@D:/DevEcoStudioProjects/LoginScreenApplication/.idea/code-check/java/detect.txt,-output,D:/DevEcoStudioProjects/LoginScreenApplication/.idea/code-check/java/output.xml
+2021-06-08 21:40:17.659 [main] INFO . - CodeMars Version:2.1.2.sp4
+2021-06-08 21:40:17.893 [main] INFO . - starting analyzing.
+2021-06-08 21:40:17.969 [main] INFO . - start collecting report.
+2021-06-08 21:40:17.989 [CodeMars1] INFO . - Command: "D:\Program Files\Huawei\DevEco Studio 2.1.0.303\plugins\codecheck\lib\CodeMars\engines\SecFinder-J\bin\run_SecFinder-J.bat",-filelist,D:\DevEcoStudioProjects\LoginScreenApplication\.idea\code-check\java\filelist_2021_06_08_21_40_17_972_86.txt,-f,xml,-default,-progress,-r,D:\DevEcoStudioProjects\LoginScreenApplication\.idea\code-check\java\\errorreport_2021_06_08_21_40_17_293_21.xml,-ruleclasspath,file:///D:\DevEcoStudioProjects\LoginScreenApplication\.idea\code-check\java\ruleclasspath.txt
+2021-06-08 21:40:19.120 [Thread-2] INFO . - Jun 08, 2021 9:40:19 PM com.huawei.secfinderj.SecFinderJ needScan
+2021-06-08 21:40:19.120 [Thread-2] INFO . - INFO: SecFinder-J Version: 2.1.3
+2021-06-08 21:40:19.592 [Thread-1] INFO . - 2021-06-08 21:40:19.421: SecFinder-J Output: Inspect start...
+2021-06-08 21:40:25.605 [Thread-1] INFO . - 2021-06-08 21:40:25.605: SecFinder-J Output: Load checkers...
+2021-06-08 21:40:26.362 [Thread-1] INFO . - 2021-06-08 21:40:26.362: SecFinder-J Output: Load config...
+2021-06-08 21:40:26.452 [Thread-1] INFO . - 2021-06-08 21:40:26.451: SecFinder-J Output: step 1/4: Find files
+2021-06-08 21:40:26.525 [Thread-1] INFO . - 2021-06-08 21:40:26.525: SecFinder-J Output: step 2/4: Process files
+2021-06-08 21:40:26.620 [Thread-1] INFO . - 2021-06-08 21:40:26.620: SecFinder-J Output: step 3/4: Run analysis...
+2021-06-08 21:40:26.622 [Thread-1] INFO . - 2021-06-08 21:40:26.622: SecFinder-J Output: [SecFinder-J--Thread--1] - during processing of [LoginAbilitySlice.java]
+2021-06-08 21:40:28.414 [Thread-1] INFO . - 2021-06-08 21:40:28.414: SecFinder-J Output: step 4/4: Result output...
+2021-06-08 21:40:28.415 [Thread-1] INFO . - 2021-06-08 21:40:28.414: SecFinder-J Output: Inspect finish...
+2021-06-08 21:40:28.415 [Thread-1] INFO . - Analysis result:
+2021-06-08 21:40:28.417 [Thread-2] INFO . - Jun 08, 2021 9:40:28 PM com.huawei.secfinderj.override.HwPmd end
+2021-06-08 21:40:28.418 [Thread-2] INFO . - INFO: SecFinder-J run successed!
+2021-06-08 21:40:28.424 [Thread-1] INFO . - files analyzed : 1
+2021-06-08 21:40:28.424 [Thread-1] INFO . - lines analyzed : 137
+2021-06-08 21:40:28.424 [Thread-1] INFO . - rules used : 59
+2021-06-08 21:40:28.424 [Thread-1] INFO . - issues detected : 2
+2021-06-08 21:40:28.424 [Thread-1] INFO . - time cost(sec) : 9
+2021-06-08 21:40:28.424 [Thread-1] INFO . -
+2021-06-08 21:40:28.590 [CodeMars1] INFO . - start parse errorreport xml
+2021-06-08 21:40:28.602 [CodeMars1] INFO . - parse xml time : 55
+2021-06-08 21:40:28.602 [CodeMars1] INFO . - end parse errorreport xml
+2021-06-08 21:40:28.635 [main] INFO . - end collecting report.
+2021-06-08 21:40:28.636 [main] INFO . - end analyzing.
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/detect.txt b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/detect.txt
new file mode 100644
index 00000000..e6174ff2
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/detect.txt
@@ -0,0 +1 @@
+D:/DevEcoStudioProjects/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/LoginAbilitySlice.java
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/output.xml b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/output.xml
new file mode 100644
index 00000000..7bde60fb
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/output.xml
@@ -0,0 +1,93 @@
+
+
+
+
+
+ 信息泄露
+ 编程规范违反
+
+ Hardcoded_Password
+
+ 21
+
+
+
+
+ 1eb44ae25387bda8d20c1a9620da0de4
+ Medium
+
+
+ 11
+ 30
+
+
+
+
+
+
+ 信息泄露
+ 编程规范违反
+
+ Hardcoded_Password
+
+ 24
+
+
+
+
+ 1eb44ae25387bda8d20c1a9620da0de4
+ Medium
+
+
+ 14
+ 33
+
+
+
+
+
+1
+137
+9
+2
+
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/ruleclasspath.txt b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/ruleclasspath.txt
new file mode 100644
index 00000000..862fb70e
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/ruleclasspath.txt
@@ -0,0 +1 @@
+D:\Program Files\Huawei\DevEco Studio 2.1.0.303\plugins\codecheck\lib\CodeMars\engines\SecFinder-J\rule\
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/compiler.xml b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/compiler.xml
new file mode 100644
index 00000000..61a9130c
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/compiler.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/gradle.xml b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/gradle.xml
new file mode 100644
index 00000000..c6642604
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/gradle.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/jarRepositories.xml b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/jarRepositories.xml
new file mode 100644
index 00000000..1dfcd020
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/jarRepositories.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/misc.xml b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/misc.xml
new file mode 100644
index 00000000..58918f50
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/misc.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/phone/phoneSettingConfig_3776347.json b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/phone/phoneSettingConfig_3776347.json
new file mode 100644
index 00000000..69beee7f
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/phone/phoneSettingConfig_3776347.json
@@ -0,0 +1,25 @@
+{
+ "setting": {
+ "1.0.1": {
+ "Language": {
+ "args": {
+ "Language": "zh_CN"
+ }
+ }
+ }
+ },
+ "frontend": {
+ "1.0.0": {
+ "Resolution": {
+ "args": {
+ "Resolution": "360*780"
+ }
+ },
+ "DeviceType": {
+ "args": {
+ "DeviceType": "phone"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/previewConfig.json b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/previewConfig.json
new file mode 100644
index 00000000..e8f3ff07
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/previewConfig.json
@@ -0,0 +1,9 @@
+{
+ "1.0.0": {
+ "LastPreviewDevice": {
+ "D:\\DevEcoStudioProjects\\LoginScreenApplication\\entry": [
+ "phone"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/build.gradle b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/build.gradle
new file mode 100644
index 00000000..9ec29b00
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/build.gradle
@@ -0,0 +1,37 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+apply plugin: 'com.huawei.ohos.app'
+
+ohos {
+ compileSdkVersion 5
+ defaultConfig {
+ compatibleSdkVersion 4
+ }
+}
+
+buildscript {
+ repositories {
+ maven {
+ url 'https://repo.huaweicloud.com/repository/maven/'
+ }
+ maven {
+ url 'https://developer.huawei.com/repo/'
+ }
+ jcenter()
+ }
+ dependencies {
+ classpath 'com.huawei.ohos:hap:2.4.2.7'
+ classpath 'com.huawei.ohos:decctest:1.0.0.7'
+ }
+}
+
+allprojects {
+ repositories {
+ maven {
+ url 'https://repo.huaweicloud.com/repository/maven/'
+ }
+ maven {
+ url 'https://developer.huawei.com/repo/'
+ }
+ jcenter()
+ }
+}
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/.gitignore b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/.gitignore
new file mode 100644
index 00000000..796b96d1
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/build.gradle b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/build.gradle
new file mode 100644
index 00000000..30c5f30b
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/build.gradle
@@ -0,0 +1,26 @@
+apply plugin: 'com.huawei.ohos.hap'
+apply plugin: 'com.huawei.ohos.decctest'
+ohos {
+ compileSdkVersion 5
+ defaultConfig {
+ compatibleSdkVersion 4
+ }
+ buildTypes {
+ release {
+ proguardOpt {
+ proguardEnabled false
+ rulesFiles 'proguard-rules.pro'
+ }
+ }
+ }
+
+}
+
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar', '*.har'])
+ testImplementation 'junit:junit:4.13'
+ ohosTestImplementation 'com.huawei.ohos.testkit:runner:1.0.0.100'
+}
+decc {
+ supportType = ['html','xml']
+}
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/proguard-rules.pro b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/proguard-rules.pro
new file mode 100644
index 00000000..f7666e47
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/proguard-rules.pro
@@ -0,0 +1 @@
+# config module specific ProGuard rules here.
\ No newline at end of file
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/config.json b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/config.json
new file mode 100644
index 00000000..e3024fee
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/config.json
@@ -0,0 +1,49 @@
+{
+ "app": {
+ "bundleName": "com.example.loginscreenapplication",
+ "vendor": "example",
+ "version": {
+ "code": 1000000,
+ "name": "1.0.0"
+ },
+ "apiVersion": {
+ "compatible": 4,
+ "target": 5,
+ "releaseType": "Release"
+ }
+ },
+ "deviceConfig": {},
+ "module": {
+ "package": "com.example.loginscreenapplication",
+ "name": ".MyApplication",
+ "deviceType": [
+ "phone"
+ ],
+ "distro": {
+ "deliveryWithInstall": true,
+ "moduleName": "entry",
+ "moduleType": "entry"
+ },
+ "abilities": [
+ {
+ "skills": [
+ {
+ "entities": [
+ "entity.system.home"
+ ],
+ "actions": [
+ "action.system.home"
+ ]
+ }
+ ],
+ "orientation": "unspecified",
+ "name": "com.example.loginscreenapplication.MainAbility",
+ "icon": "$media:icon",
+ "description": "$string:mainability_description",
+ "label": "$string:app_name",
+ "type": "page",
+ "launchType": "standard"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/DbHelper.java b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/DbHelper.java
new file mode 100644
index 00000000..2ae34bb9
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/DbHelper.java
@@ -0,0 +1,95 @@
+package com.example.loginscreenapplication;
+
+import com.example.loginscreenapplication.Model.UserData;
+import ohos.app.Context;
+import ohos.data.DatabaseHelper;
+import ohos.data.rdb.*;
+import ohos.data.resultset.ResultSet;
+
+public class DbHelper extends DatabaseHelper {
+
+ public static final String TABLE_NAME = "UserDataTable";
+
+ private static final String CREATE_TABLE_SQL =
+ String.format("CREATE TABLE IF NOT EXISTS %s(" +
+ "email TEXT PRIMARY KEY, " +
+ "firstName TEXT NOT NULL, " +
+ "lastName TEXT NOT NULL, " +
+ "password TEXT NOT NULL, " +
+ "mobile TEXT NOT NULL, " +
+ "gender TEXT NOT NULL" +
+ ")", TABLE_NAME);
+
+ public DbHelper(Context context) {
+ super(context);
+ }
+
+ private static final RdbOpenCallback callback = new RdbOpenCallback() {
+ @Override
+ public void onCreate(RdbStore rdbStore) {
+ rdbStore.executeSql(CREATE_TABLE_SQL);
+ }
+
+ @Override
+ public void onUpgrade(RdbStore rdbStore, int i, int i1) {
+
+ }
+ };
+
+ public RdbStore initRdb(Context context) {
+ StoreConfig config = StoreConfig.newDefaultConfig("storeTest.db");
+ return getRdbStore(config, 1, callback, null);
+ }
+
+ // DB Helper Methods
+ public static boolean insertUserData(RdbStore db, UserData userData)
+ {
+
+ // Check if entry already exists
+ RdbPredicates emailComparisonPredicate = new RdbPredicates(TABLE_NAME).equalTo("email", userData.getEmail());
+ ResultSet queryResult = db.query(emailComparisonPredicate, null);
+ if (queryResult != null && queryResult.getRowCount() > 0)
+ {
+ // It means there already exist an entry in the database with the same email id
+ return false;
+ }
+
+ ValuesBucket valuesBucket = userData.createValuesBucketFromData();
+
+ long rowId = db.insert(TABLE_NAME, valuesBucket);
+ return rowId != -1;
+ }
+
+ public static UserData getUserDataIfExists(RdbStore db, String email)
+ {
+ // Check if entry already exists
+ RdbPredicates emailComparisonPredicate = new RdbPredicates(TABLE_NAME).equalTo("email", email);
+ ResultSet queryResult = db.query(emailComparisonPredicate, null);
+ if (queryResult != null && queryResult.getRowCount() > 0)
+ {
+ queryResult.goToFirstRow();
+ // It means there already exist an entry in the database with the same email id
+ UserData userData = new UserData();
+ userData.setEmail(queryResult.getString(0));
+ userData.setFirstName(queryResult.getString(1));
+ userData.setLastName(queryResult.getString(2));
+ userData.setPassword(queryResult.getString(3));
+ userData.setMobile(queryResult.getString(4));
+
+ UserData.Gender gender;
+ String queriedGenderString = queryResult.getString(5);
+ if (queriedGenderString.equals(UserData.Gender.Male.toString()))
+ {
+ gender = UserData.Gender.Male;
+ }
+ else
+ {
+ gender = UserData.Gender.Female;
+ }
+
+ userData.setGender(gender);
+ return userData;
+ }
+ return null;
+ }
+}
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/InputValidationMethods.java b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/InputValidationMethods.java
new file mode 100644
index 00000000..27edf054
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/InputValidationMethods.java
@@ -0,0 +1,58 @@
+package com.example.loginscreenapplication;
+
+import ohos.agp.components.Component;
+import ohos.agp.components.Text;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class InputValidationMethods {
+
+ public static void checkForNameError(String inputName, Text targetErrorText)
+ {
+ Pattern namePattern = Pattern.compile("[^a-zA-Z]");
+ Matcher matcher = namePattern.matcher(inputName);
+ boolean isValidName = !matcher.find();
+ if (!isValidName)
+ targetErrorText.setVisibility(Component.VISIBLE);
+ else
+ targetErrorText.setVisibility(Component.INVISIBLE);
+ }
+ public static void checkForEmailError(String inputEmail, Text targetErrorText)
+ {
+ if (!isValidEmail(inputEmail))
+ targetErrorText.setVisibility(Component.VISIBLE);
+ else
+ targetErrorText.setVisibility(Component.INVISIBLE);
+ }
+
+ public static boolean isValidEmail(String inputEmail) {
+
+ Pattern emailPattern = Pattern.compile("[a-zA-Z0-9._-]+@[a-zA-Z]+\\.+[a-zA-Z]+");
+ Matcher matcher = emailPattern.matcher(inputEmail);
+ return matcher.find();
+ }
+
+ public static void checkForPasswordError(String inputPassword, Text targetErrorText)
+ {
+ if (!isValidPassword(inputPassword))
+ targetErrorText.setVisibility(Component.VISIBLE);
+ else
+ targetErrorText.setVisibility(Component.INVISIBLE);
+ }
+
+ public static boolean isValidPassword(String inputPassword) {
+ return inputPassword.length() >= 8;
+ }
+
+ public static void checkForMobileError(String inputMobile, Text targetErrorText)
+ {
+ Pattern nonNumericPattern = Pattern.compile("[^0-9]");
+ Matcher matcher = nonNumericPattern.matcher(inputMobile);
+ boolean isValidMobile = (!matcher.find())&&(inputMobile.length() >= 1);
+ if (!isValidMobile)
+ targetErrorText.setVisibility(Component.VISIBLE);
+ else
+ targetErrorText.setVisibility(Component.INVISIBLE);
+ }
+}
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/MainAbility.java b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/MainAbility.java
new file mode 100644
index 00000000..48471691
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/MainAbility.java
@@ -0,0 +1,13 @@
+package com.example.loginscreenapplication;
+
+import com.example.loginscreenapplication.slice.MainAbilitySlice;
+import ohos.aafwk.ability.Ability;
+import ohos.aafwk.content.Intent;
+
+public class MainAbility extends Ability {
+ @Override
+ public void onStart(Intent intent) {
+ super.onStart(intent);
+ super.setMainRoute(MainAbilitySlice.class.getName());
+ }
+}
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/Model/LoginResponse.java b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/Model/LoginResponse.java
new file mode 100644
index 00000000..031879c9
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/Model/LoginResponse.java
@@ -0,0 +1,27 @@
+package com.example.loginscreenapplication.Model;
+
+
+public class LoginResponse{
+ private final UserData userData;
+ private final LoginResponseType loginResponseType;
+
+ public LoginResponse(UserData userData, LoginResponseType loginResponseType)
+ {
+ this.userData = userData;
+ this.loginResponseType = loginResponseType;
+ }
+
+ public UserData getUserData() {
+ return userData;
+ }
+
+ public LoginResponseType getLoginResponseType() {
+ return loginResponseType;
+ }
+
+ public enum LoginResponseType {
+ success,
+ emailNotFound,
+ incorrectPassword
+ }
+}
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/Model/UserData.java b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/Model/UserData.java
new file mode 100644
index 00000000..e313e955
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/Model/UserData.java
@@ -0,0 +1,90 @@
+package com.example.loginscreenapplication.Model;
+
+
+import ohos.data.rdb.ValuesBucket;
+
+import java.io.Serializable;
+
+public class UserData implements Serializable {
+
+ String firstName;
+ String lastName;
+ String email;
+ String password;
+ String mobile;
+ String gender;
+
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public String getMobile() {
+ return mobile;
+ }
+
+ public void setMobile(String mobile) {
+ this.mobile = mobile;
+ }
+
+ public Gender getGender()
+ {
+ try{
+ return Gender.valueOf(gender);
+ }
+ catch (IllegalArgumentException e)
+ {
+ // Default value
+ return Gender.Male;
+ }
+ }
+
+ public void setGender(Gender gender) {
+ this.gender = gender.toString();
+ }
+
+ public enum Gender {
+ Male,
+ Female
+ }
+
+ public ValuesBucket createValuesBucketFromData()
+ {
+ ValuesBucket valuesBucket = new ValuesBucket();
+ valuesBucket.putString("firstName",firstName);
+ valuesBucket.putString("lastName",lastName);
+ valuesBucket.putString("email",email);
+ valuesBucket.putString("password",password);
+ valuesBucket.putString("mobile",mobile);
+ valuesBucket.putString("gender",gender);
+ return valuesBucket;
+ }
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/MyApplication.java b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/MyApplication.java
new file mode 100644
index 00000000..9125cca4
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/MyApplication.java
@@ -0,0 +1,10 @@
+package com.example.loginscreenapplication;
+
+import ohos.aafwk.ability.AbilityPackage;
+
+public class MyApplication extends AbilityPackage {
+ @Override
+ public void onInitialize() {
+ super.onInitialize();
+ }
+}
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/LoginAbilitySlice.java b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/LoginAbilitySlice.java
new file mode 100644
index 00000000..eb9f61a8
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/LoginAbilitySlice.java
@@ -0,0 +1,137 @@
+package com.example.loginscreenapplication.slice;
+
+import com.example.loginscreenapplication.DbHelper;
+import com.example.loginscreenapplication.InputValidationMethods;
+import com.example.loginscreenapplication.Model.LoginResponse;
+import com.example.loginscreenapplication.Model.UserData;
+import com.example.loginscreenapplication.ResourceTable;
+import ohos.aafwk.ability.AbilitySlice;
+import ohos.aafwk.content.Intent;
+import ohos.agp.components.Button;
+import ohos.agp.components.Component;
+import ohos.agp.components.Text;
+import ohos.agp.components.TextField;
+import ohos.data.DatabaseHelper;
+import ohos.data.rdb.RdbStore;
+
+
+
+public class LoginAbilitySlice extends AbilitySlice {
+
+ public static final String PLEASE_ENTER_VALID_EMAIL_PASSWORD = "Please enter valid email & password.";
+ public static final String LOGIN_SUCCESSFUL = "Login Successful";
+ public static final String EMAIL_ID_NOT_FOUND = "Email Id not found.";
+ public static final String PASSWORD_DOES_NOT_MATCH = "Password does not match.";
+ public static final String USER_DATA = "UserData";
+ TextField inputEmail;
+ TextField inputPassword;
+
+ Button loginButton;
+ Text loginFailedErrorMessage;
+
+ RdbStore db;
+
+ @Override
+ public void onStart(Intent intent) {
+ super.onStart(intent);
+ super.setUIContent(ResourceTable.Layout_login_layout);
+
+ inputEmail = (TextField)findComponentById(ResourceTable.Id_loginEmail);
+ inputPassword = (TextField)findComponentById(ResourceTable.Id_loginPassword);
+
+ loginButton = (Button)findComponentById(ResourceTable.Id_loginSubmitButton);
+ loginFailedErrorMessage = (Text)findComponentById(ResourceTable.Id_loginFailedErrorMessage);
+ loginFailedErrorMessage.setVisibility(Component.INVISIBLE);
+
+ loginButton.setClickedListener(component -> {
+ onClickSubmit();
+ });
+}
+
+ @Override
+ public void onActive() {
+ super.onActive();
+ DbHelper dbHelper = new DbHelper(this);
+ db = dbHelper.initRdb(this);
+ }
+
+ @Override
+ public void onForeground(Intent intent) {
+ super.onForeground(intent);
+ }
+
+ public void onClickSubmit()
+ {
+ if (isLoginInputsValid())
+ {
+ LoginResponse loginResponse = tryLogin();
+ if (!(loginResponse.getLoginResponseType() == LoginResponse.LoginResponseType.success))
+ {
+ loginFailedErrorMessage.setVisibility(Component.VISIBLE);
+ loginFailedErrorMessage.setText(getLoginErrorMessage(loginResponse.getLoginResponseType()));
+ }
+ else
+ {
+ Intent intent = new Intent();
+ intent.setParam(USER_DATA, loginResponse.getUserData());
+ present(new WelcomeAbilitySlice(), intent);
+ }
+ }
+ else
+ {
+ loginFailedErrorMessage.setVisibility(Component.VISIBLE);
+ loginFailedErrorMessage.setText(PLEASE_ENTER_VALID_EMAIL_PASSWORD);
+ }
+ }
+
+ private boolean isLoginInputsValid()
+ {
+ String email = inputEmail.getText();
+ if (isNullOrEmpty(email) || !InputValidationMethods.isValidEmail(email))
+ {
+ return false;
+ }
+ String password = inputPassword.getText();
+ if (isNullOrEmpty(password) || !InputValidationMethods.isValidPassword(password))
+ {
+ return false;
+ }
+ return true;
+ }
+ private boolean isNullOrEmpty(String string)
+ {
+ return string == null || string.isEmpty();
+ }
+ private LoginResponse tryLogin()
+ {
+ LoginResponse.LoginResponseType loginResponseType = LoginResponse.LoginResponseType.success;
+ String email = inputEmail.getText();
+ String password = inputPassword.getText();
+ UserData userData = DbHelper.getUserDataIfExists(db, email);
+ if (userData == null)
+ {
+ loginResponseType = LoginResponse.LoginResponseType.emailNotFound;
+ }
+ else
+ {
+ if (!password.equals(userData.getPassword()))
+ {
+ loginResponseType = LoginResponse.LoginResponseType.incorrectPassword;
+ userData = null;
+ }
+ }
+ return new LoginResponse(userData, loginResponseType);
+ }
+
+ private String getLoginErrorMessage(LoginResponse.LoginResponseType loginResponseType)
+ {
+ switch (loginResponseType)
+ {
+ case success: return LOGIN_SUCCESSFUL;
+ case emailNotFound: return EMAIL_ID_NOT_FOUND;
+ case incorrectPassword: return PASSWORD_DOES_NOT_MATCH;
+ default: return null;
+ }
+ }
+
+}
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/MainAbilitySlice.java b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/MainAbilitySlice.java
new file mode 100644
index 00000000..a6816b3b
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/MainAbilitySlice.java
@@ -0,0 +1,52 @@
+package com.example.loginscreenapplication.slice;
+
+import com.example.loginscreenapplication.ResourceTable;
+import ohos.aafwk.ability.AbilitySlice;
+import ohos.aafwk.content.Intent;
+import ohos.agp.animation.Animator;
+import ohos.agp.animation.AnimatorProperty;
+import ohos.agp.animation.timelinecurves.CubicBezierCurve;
+import ohos.agp.components.Button;
+import ohos.agp.components.Image;
+
+public class MainAbilitySlice extends AbilitySlice {
+ Button loginButton;
+ Button registerButton;
+ Image imageLogo;
+
+ @Override
+ public void onStart(Intent intent) {
+ super.onStart(intent);
+ super.setUIContent(ResourceTable.Layout_ability_main);
+
+ loginButton = (Button)findComponentById(ResourceTable.Id_loginButton);
+ registerButton = (Button)findComponentById(ResourceTable.Id_registerButton);
+ imageLogo = (Image)findComponentById(ResourceTable.Id_imageLogo);
+ AnimatorProperty imageAnimatorProperty = createRotationAnimation(imageLogo);
+
+ imageLogo.setClickedListener(component -> {
+ imageAnimatorProperty.reset();
+ imageAnimatorProperty.start();
+ });
+ loginButton.setClickedListener(component -> present(new LoginAbilitySlice(), new Intent()));
+ registerButton.setClickedListener(component -> present(new RegisterAbilitySlice(), new Intent()));
+ }
+
+ @Override
+ public void onActive() {
+ super.onActive();
+ }
+
+ @Override
+ public void onForeground(Intent intent) {
+ super.onForeground(intent);
+ }
+
+ private AnimatorProperty createRotationAnimation(Image targetImage)
+ {
+ AnimatorProperty animatorProperty = targetImage.createAnimatorProperty()
+ .setCurveType(Animator.CurveType.ANTICIPATE_OVERSHOOT)
+ .rotate(360f).setDuration(4000).setDelay(500);
+ return animatorProperty;
+ }
+}
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/RegisterAbilitySlice.java b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/RegisterAbilitySlice.java
new file mode 100644
index 00000000..e34c02b6
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/RegisterAbilitySlice.java
@@ -0,0 +1,160 @@
+package com.example.loginscreenapplication.slice;
+import com.example.loginscreenapplication.DbHelper;
+import com.example.loginscreenapplication.InputValidationMethods;
+import com.example.loginscreenapplication.Model.UserData;
+import com.example.loginscreenapplication.ResourceTable;
+import ohos.aafwk.ability.AbilitySlice;
+import ohos.aafwk.content.Intent;
+import ohos.agp.components.*;
+import ohos.data.rdb.RdbStore;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class RegisterAbilitySlice extends AbilitySlice {
+ public static final String ALL_FIELDS_ARE_REQUIRED = "All fields are required.";
+ public static final String ENSURE_VALID_INPUTS_TO_ALL_FIELDS = "Ensure valid inputs to all fields.";
+ Text errorFirstName;
+ Text errorLastName;
+ Text errorEmail;
+ Text errorPassword;
+ Text errorMobile;
+ Text registerFailedMessage;
+
+ TextField inputFirstName;
+ TextField inputLastName;
+ TextField inputEmail;
+ TextField inputPassword;
+ TextField inputMobile;
+ RadioButton inputGenderMale;
+ RadioButton inputGenderFemale;
+
+ Button submitButton;
+
+ private RdbStore db;
+
+ private static final String DB_ALIAS = "User Data Table";
+ private static final String DB_NAME = "UserDataTable";
+
+ @Override
+ public void onStart(Intent intent) {
+ super.onStart(intent);
+ super.setUIContent(ResourceTable.Layout_register_layout);
+
+ initializeFieldsAndListeners();
+
+ }
+
+ @Override
+ public void onActive() {
+ super.onActive();
+ DbHelper dbHelper = new DbHelper(this);
+ db = dbHelper.initRdb(this);
+ }
+
+ @Override
+ public void onForeground(Intent intent) {
+ super.onForeground(intent);
+ }
+
+ private void initializeFieldsAndListeners() {
+ errorFirstName = (Text)findComponentById(ResourceTable.Id_errorFirstName);
+ errorFirstName.setVisibility(Component.INVISIBLE);
+ errorLastName = (Text)findComponentById(ResourceTable.Id_errorLastName);
+ errorLastName.setVisibility(Component.INVISIBLE);
+ errorEmail = (Text)findComponentById(ResourceTable.Id_errorEmail);
+ errorEmail.setVisibility(Component.INVISIBLE);
+ errorPassword = (Text)findComponentById(ResourceTable.Id_errorPassword);
+ errorPassword.setVisibility(Component.INVISIBLE);
+ errorMobile = (Text)findComponentById(ResourceTable.Id_errorMobile);
+ errorMobile.setVisibility(Component.INVISIBLE);
+ registerFailedMessage = (Text)findComponentById(ResourceTable.Id_registerFailedMessage);
+ registerFailedMessage.setVisibility(Component.INVISIBLE);
+
+ inputFirstName = (TextField)findComponentById(ResourceTable.Id_registerFirstName);
+ inputLastName = (TextField)findComponentById(ResourceTable.Id_registerLastName);
+ inputEmail = (TextField)findComponentById(ResourceTable.Id_registerEmail);
+ inputPassword = (TextField)findComponentById(ResourceTable.Id_registerPassword);
+ inputMobile = (TextField)findComponentById(ResourceTable.Id_registerMobile);
+ inputGenderMale = (RadioButton)findComponentById(ResourceTable.Id_registerGenderMale);
+ inputGenderFemale = (RadioButton)findComponentById(ResourceTable.Id_registerGenderFemale);
+
+ submitButton = (Button)findComponentById(ResourceTable.Id_registerSubmitButton);
+
+ inputFirstName.addTextObserver((s, i, i1, i2) -> InputValidationMethods.checkForNameError(s, errorFirstName));
+ inputLastName.addTextObserver((s, i, i1, i2) -> InputValidationMethods.checkForNameError(s, errorLastName));
+ inputEmail.addTextObserver((s, i, i1, i2) -> InputValidationMethods.checkForEmailError(s, errorEmail));
+ inputPassword.addTextObserver((s, i, i1, i2) -> InputValidationMethods.checkForPasswordError(s, errorPassword));
+ inputMobile.addTextObserver((s, i, i1, i2) -> InputValidationMethods.checkForMobileError(s, errorMobile));
+ submitButton.setClickedListener(this::onClickSubmit);
+ }
+
+ private void onClickSubmit(Component component)
+ {
+ // Check if the text fields all have entries:
+ if (isNullOrEmpty(inputFirstName.getText()) ||
+ isNullOrEmpty(inputLastName.getText()) ||
+ isNullOrEmpty(inputEmail.getText()) ||
+ isNullOrEmpty(inputPassword.getText()) ||
+ isNullOrEmpty(inputMobile.getText()) ||
+ (!inputGenderMale.isChecked() && !inputGenderFemale.isChecked()))
+ {
+ registerFailedMessage.setVisibility(Component.VISIBLE);
+ registerFailedMessage.setText(ALL_FIELDS_ARE_REQUIRED);
+ }
+ else
+ {
+ // Check if the text fields are all validated
+ if (errorFirstName.getVisibility() == Component.VISIBLE ||
+ errorLastName.getVisibility() == Component.VISIBLE ||
+ errorEmail.getVisibility() == Component.VISIBLE ||
+ errorPassword.getVisibility() == Component.VISIBLE ||
+ errorMobile.getVisibility() == Component.VISIBLE)
+ {
+ registerFailedMessage.setVisibility(Component.VISIBLE);
+ registerFailedMessage.setText(ENSURE_VALID_INPUTS_TO_ALL_FIELDS);
+ }
+ else
+ {
+ // All inputs validated. Data submission can proceed
+ boolean submissionSuccess = submitData();
+ if (submissionSuccess)
+ {
+ // Submission was a success. Redirect to home screen
+ present(new MainAbilitySlice(), new Intent());
+ }
+ else
+ {
+ registerFailedMessage.setVisibility(Component.VISIBLE);
+ registerFailedMessage.setText("Submission Failed. Email Id already exists in database.");
+ }
+ }
+ }
+ }
+
+ private boolean submitData()
+ {
+ boolean submissionResult = DbHelper.insertUserData(db, getUserDataFromTextFields());
+ return submissionResult;
+ }
+
+ private UserData getUserDataFromTextFields()
+ {
+ UserData userData = new UserData();
+ userData.setFirstName(inputFirstName.getText());
+ userData.setLastName(inputLastName.getText());
+ userData.setEmail(inputEmail.getText());
+ userData.setPassword(inputPassword.getText());
+ userData.setMobile(inputMobile.getText());
+ if (inputGenderMale.isChecked())
+ userData.setGender(UserData.Gender.Male);
+ else
+ userData.setGender(UserData.Gender.Female);
+ return userData;
+ }
+
+ private boolean isNullOrEmpty(String string){
+ return string == null || string.isEmpty();
+ }
+
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/WelcomeAbilitySlice.java b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/WelcomeAbilitySlice.java
new file mode 100644
index 00000000..15df03ed
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/WelcomeAbilitySlice.java
@@ -0,0 +1,54 @@
+package com.example.loginscreenapplication.slice;
+
+import com.example.loginscreenapplication.Model.UserData;
+import com.example.loginscreenapplication.ResourceTable;
+import ohos.aafwk.ability.AbilitySlice;
+import ohos.aafwk.content.Intent;
+import ohos.agp.components.Text;
+
+public class WelcomeAbilitySlice extends AbilitySlice {
+ public static final String USER_DATA = "UserData";
+ public static final String WELCOME_BASE_TEXT = "Welcome, %s.";
+
+ public static final String MALE_GENDERED_TITLE = "Mr.";
+ public static final String FEMALE_GENDERED_TITLE = "Mrs.";
+
+ Text welcomeText;
+
+ UserData userData;
+ @Override
+ public void onStart(Intent intent) {
+ super.onStart(intent);
+ super.setUIContent(ResourceTable.Layout_welcome_layout);
+ userData = intent.getSerializableParam(USER_DATA);
+
+ welcomeText = (Text)findComponentById(ResourceTable.Id_welcomePageText);
+
+ String prefix = "";
+ String firstName = userData.getFirstName();
+ String lastName = userData.getLastName();
+ UserData.Gender gender = userData.getGender();
+
+ if (gender == UserData.Gender.Female)
+ {
+ prefix = FEMALE_GENDERED_TITLE;
+ }else{
+ prefix = MALE_GENDERED_TITLE;
+ }
+ String fullName = String.format("%s %s %s", prefix, firstName, lastName);
+ String completedWelcomeText = String.format(WELCOME_BASE_TEXT, fullName);
+
+ welcomeText.setText(completedWelcomeText);
+ }
+
+ @Override
+ public void onActive() {
+ super.onActive();
+ }
+
+ @Override
+ public void onForeground(Intent intent) {
+ super.onForeground(intent);
+ }
+
+}
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/element/string.json b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/element/string.json
new file mode 100644
index 00000000..3d5b4d48
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/element/string.json
@@ -0,0 +1,16 @@
+{
+ "string": [
+ {
+ "name": "app_name",
+ "value": "LoginScreenApplication"
+ },
+ {
+ "name": "mainability_description",
+ "value": "Java_Phone_Empty Feature Ability"
+ },
+ {
+ "name": "mainability_HelloWorld",
+ "value": "Hello World"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/graphic/background_ability_main.xml b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/graphic/background_ability_main.xml
new file mode 100644
index 00000000..c0c0a3df
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/graphic/background_ability_main.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/graphic/clockvec.xml b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/graphic/clockvec.xml
new file mode 100644
index 00000000..20760d3d
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/graphic/clockvec.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/ability_main.xml b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/ability_main.xml
new file mode 100644
index 00000000..7bd710fd
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/ability_main.xml
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/login_layout.xml b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/login_layout.xml
new file mode 100644
index 00000000..e7f6b6a8
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/login_layout.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/register_layout.xml b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/register_layout.xml
new file mode 100644
index 00000000..e7ca6863
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/register_layout.xml
@@ -0,0 +1,202 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/welcome_layout.xml b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/welcome_layout.xml
new file mode 100644
index 00000000..e2a474ba
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/welcome_layout.xml
@@ -0,0 +1,14 @@
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/media/icon.png b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/media/icon.png
new file mode 100644
index 00000000..ce307a88
Binary files /dev/null and b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/media/icon.png differ
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/ohosTest/config.json b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/ohosTest/config.json
new file mode 100644
index 00000000..8f211ec7
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/ohosTest/config.json
@@ -0,0 +1,41 @@
+{
+ "app": {
+ "bundleName": "com.example.loginscreenapplication",
+ "vendor": "example",
+ "version": {
+ "code": 1000000,
+ "name": "1.0.0"
+ },
+ "apiVersion": {
+ "compatible": 4,
+ "target": 5,
+ "releaseType": "Release"
+ }
+ },
+ "deviceConfig": {},
+ "module": {
+ "package": "com.example.loginscreenapplication",
+ "name": "testModule",
+ "deviceType": [
+ "phone"
+ ],
+ "distro": {
+ "deliveryWithInstall": true,
+ "moduleName": "entry_test",
+ "moduleType": "feature",
+ "installationFree": true
+ },
+ "abilities": [
+ {
+ "name": "decc.testkit.runner.EntryAbility",
+ "description": "Test Entry Ability",
+ "icon": "$media:icon",
+ "label": "$string:app_name",
+ "launchType": "standard",
+ "orientation": "landscape",
+ "visible": true,
+ "type": "page"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/ohosTest/java/com/example/loginscreenapplication/ExampleOhosTest.java b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/ohosTest/java/com/example/loginscreenapplication/ExampleOhosTest.java
new file mode 100644
index 00000000..1e247a29
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/ohosTest/java/com/example/loginscreenapplication/ExampleOhosTest.java
@@ -0,0 +1,14 @@
+package com.example.loginscreenapplication;
+
+import ohos.aafwk.ability.delegation.AbilityDelegatorRegistry;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class ExampleOhosTest {
+ @Test
+ public void testBundleName() {
+ final String actualBundleName = AbilityDelegatorRegistry.getArguments().getTestBundleName();
+ assertEquals("com.example.loginscreenapplication", actualBundleName);
+ }
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/test/java/com/example/loginscreenapplication/ExampleTest.java b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/test/java/com/example/loginscreenapplication/ExampleTest.java
new file mode 100644
index 00000000..c3b7b239
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/entry/src/test/java/com/example/loginscreenapplication/ExampleTest.java
@@ -0,0 +1,9 @@
+package com.example.loginscreenapplication;
+
+import org.junit.Test;
+
+public class ExampleTest {
+ @Test
+ public void onStart() {
+ }
+}
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/gradle.properties b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/gradle.properties
new file mode 100644
index 00000000..0daf1830
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/gradle.properties
@@ -0,0 +1,10 @@
+# Project-wide Gradle settings.
+# IDE (e.g. DevEco Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+# If the Chinese output is garbled, please configure the following parameter.
+# org.gradle.jvmargs=-Dfile.encoding=GBK
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/gradle/wrapper/gradle-wrapper.jar b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 00000000..490fda85
Binary files /dev/null and b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/gradle/wrapper/gradle-wrapper.properties b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 00000000..f59159e8
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://repo.huaweicloud.com/gradle/gradle-6.3-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/gradlew b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/gradlew
new file mode 100644
index 00000000..2fe81a7d
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/gradlew
@@ -0,0 +1,183 @@
+#!/usr/bin/env sh
+
+#
+# Copyright 2015 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+ echo "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=`expr $i + 1`
+ done
+ case $i in
+ 0) set -- ;;
+ 1) set -- "$args0" ;;
+ 2) set -- "$args0" "$args1" ;;
+ 3) set -- "$args0" "$args1" "$args2" ;;
+ 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=`save "$@"`
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+exec "$JAVACMD" "$@"
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/gradlew.bat b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/gradlew.bat
new file mode 100644
index 00000000..62bd9b9c
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/gradlew.bat
@@ -0,0 +1,103 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/settings.gradle b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/settings.gradle
new file mode 100644
index 00000000..4773db73
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/LoginScreenApplication/settings.gradle
@@ -0,0 +1 @@
+include ':entry'
diff --git a/HarmonyOS/Day4 Assingment/Mahesh/README.md b/HarmonyOS/Day4 Assingment/Mahesh/README.md
new file mode 100644
index 00000000..9ca2416b
--- /dev/null
+++ b/HarmonyOS/Day4 Assingment/Mahesh/README.md
@@ -0,0 +1,5 @@
+# Day 4
+
+## Target Device: Phone
+
+Day 4 Assignment: Added Rotation Animation to the Clock Logo on the Main Page.
\ No newline at end of file
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.gitignore b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.gitignore
new file mode 100644
index 00000000..37a4eb8b
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.gitignore
@@ -0,0 +1,15 @@
+*.iml
+.gradle
+/local.properties
+/.idea/caches
+/.idea/libraries
+/.idea/modules.xml
+/.idea/workspace.xml
+/.idea/navEditor.xml
+/.idea/assetWizardSettings.xml
+.DS_Store
+/build
+/captures
+.externalNativeBuild
+/entry/.preview
+.cxx
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/.gitignore b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/.gitignore
new file mode 100644
index 00000000..26d33521
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/codemars.log b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/codemars.log
new file mode 100644
index 00000000..ad78fd68
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/codemars.log
@@ -0,0 +1,30 @@
+2021-06-08 23:57:27.202 [main] INFO . - user input: D:\Program Files\Huawei\DevEco Studio 2.1.0.303\tools\openjdk\bin\java,-j,-source,@D:/DevEcoStudioProjects/LoginScreenApplication/.idea/code-check/java/detect.txt,-output,D:/DevEcoStudioProjects/LoginScreenApplication/.idea/code-check/java/output.xml
+2021-06-08 23:57:27.206 [main] INFO . - CodeMars Version:2.1.2.sp4
+2021-06-08 23:57:27.278 [main] INFO . - starting analyzing.
+2021-06-08 23:57:27.292 [main] INFO . - start collecting report.
+2021-06-08 23:57:27.296 [CodeMars1] INFO . - Command: "D:\Program Files\Huawei\DevEco Studio 2.1.0.303\plugins\codecheck\lib\CodeMars\engines\SecFinder-J\bin\run_SecFinder-J.bat",-filelist,D:\DevEcoStudioProjects\LoginScreenApplication\.idea\code-check\java\filelist_2021_06_08_23_57_27_293_74.txt,-f,xml,-default,-progress,-r,D:\DevEcoStudioProjects\LoginScreenApplication\.idea\code-check\java\\errorreport_2021_06_08_23_57_26_959_17.xml,-ruleclasspath,file:///D:\DevEcoStudioProjects\LoginScreenApplication\.idea\code-check\java\ruleclasspath.txt
+2021-06-08 23:57:27.475 [Thread-2] INFO . - Jun 08, 2021 11:57:27 PM com.huawei.secfinderj.SecFinderJ needScan
+2021-06-08 23:57:27.475 [Thread-2] INFO . - INFO: SecFinder-J Version: 2.1.3
+2021-06-08 23:57:27.605 [Thread-1] INFO . - 2021-06-08 23:57:27.540: SecFinder-J Output: Inspect start...
+2021-06-08 23:57:27.691 [Thread-1] INFO . - 2021-06-08 23:57:27.691: SecFinder-J Output: Load checkers...
+2021-06-08 23:57:27.897 [Thread-1] INFO . - 2021-06-08 23:57:27.897: SecFinder-J Output: Load config...
+2021-06-08 23:57:27.955 [Thread-1] INFO . - 2021-06-08 23:57:27.955: SecFinder-J Output: step 1/4: Find files
+2021-06-08 23:57:27.999 [Thread-1] INFO . - 2021-06-08 23:57:27.999: SecFinder-J Output: step 2/4: Process files
+2021-06-08 23:57:28.062 [Thread-1] INFO . - 2021-06-08 23:57:28.062: SecFinder-J Output: step 3/4: Run analysis...
+2021-06-08 23:57:28.063 [Thread-1] INFO . - 2021-06-08 23:57:28.063: SecFinder-J Output: [SecFinder-J--Thread--1] - during processing of [InputValidationMethods.java]
+2021-06-08 23:57:28.636 [Thread-1] INFO . - 2021-06-08 23:57:28.636: SecFinder-J Output: step 4/4: Result output...
+2021-06-08 23:57:28.636 [Thread-1] INFO . - 2021-06-08 23:57:28.636: SecFinder-J Output: Inspect finish...
+2021-06-08 23:57:28.637 [Thread-1] INFO . - Analysis result:
+2021-06-08 23:57:28.637 [Thread-1] INFO . - files analyzed : 1
+2021-06-08 23:57:28.637 [Thread-1] INFO . - lines analyzed : 59
+2021-06-08 23:57:28.637 [Thread-1] INFO . - rules used : 59
+2021-06-08 23:57:28.637 [Thread-1] INFO . - issues detected : 0
+2021-06-08 23:57:28.637 [Thread-1] INFO . - time cost(sec) : 1
+2021-06-08 23:57:28.637 [Thread-1] INFO . -
+2021-06-08 23:57:28.637 [Thread-2] INFO . - Jun 08, 2021 11:57:28 PM com.huawei.secfinderj.override.HwPmd end
+2021-06-08 23:57:28.637 [Thread-2] INFO . - INFO: SecFinder-J run successed!
+2021-06-08 23:57:28.711 [CodeMars1] INFO . - start parse errorreport xml
+2021-06-08 23:57:28.713 [CodeMars1] INFO . - parse xml time : 4
+2021-06-08 23:57:28.713 [CodeMars1] INFO . - end parse errorreport xml
+2021-06-08 23:57:28.714 [main] INFO . - end collecting report.
+2021-06-08 23:57:28.715 [main] INFO . - end analyzing.
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/detect.txt b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/detect.txt
new file mode 100644
index 00000000..bb9d3e99
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/detect.txt
@@ -0,0 +1 @@
+D:/DevEcoStudioProjects/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/Utils/InputValidationMethods.java
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/output.xml b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/output.xml
new file mode 100644
index 00000000..40672f53
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/output.xml
@@ -0,0 +1,9 @@
+
+
+
+
+1
+59
+1
+0
+
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/ruleclasspath.txt b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/ruleclasspath.txt
new file mode 100644
index 00000000..862fb70e
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/code-check/java/ruleclasspath.txt
@@ -0,0 +1 @@
+D:\Program Files\Huawei\DevEco Studio 2.1.0.303\plugins\codecheck\lib\CodeMars\engines\SecFinder-J\rule\
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/compiler.xml b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/compiler.xml
new file mode 100644
index 00000000..61a9130c
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/compiler.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/gradle.xml b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/gradle.xml
new file mode 100644
index 00000000..c6642604
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/gradle.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/jarRepositories.xml b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/jarRepositories.xml
new file mode 100644
index 00000000..1dfcd020
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/jarRepositories.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/misc.xml b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/misc.xml
new file mode 100644
index 00000000..58918f50
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/misc.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/phone/phoneSettingConfig_3776347.json b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/phone/phoneSettingConfig_3776347.json
new file mode 100644
index 00000000..69beee7f
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/phone/phoneSettingConfig_3776347.json
@@ -0,0 +1,25 @@
+{
+ "setting": {
+ "1.0.1": {
+ "Language": {
+ "args": {
+ "Language": "zh_CN"
+ }
+ }
+ }
+ },
+ "frontend": {
+ "1.0.0": {
+ "Resolution": {
+ "args": {
+ "Resolution": "360*780"
+ }
+ },
+ "DeviceType": {
+ "args": {
+ "DeviceType": "phone"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/previewConfig.json b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/previewConfig.json
new file mode 100644
index 00000000..e8f3ff07
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/.idea/previewer/previewConfig.json
@@ -0,0 +1,9 @@
+{
+ "1.0.0": {
+ "LastPreviewDevice": {
+ "D:\\DevEcoStudioProjects\\LoginScreenApplication\\entry": [
+ "phone"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/build.gradle b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/build.gradle
new file mode 100644
index 00000000..9ec29b00
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/build.gradle
@@ -0,0 +1,37 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+apply plugin: 'com.huawei.ohos.app'
+
+ohos {
+ compileSdkVersion 5
+ defaultConfig {
+ compatibleSdkVersion 4
+ }
+}
+
+buildscript {
+ repositories {
+ maven {
+ url 'https://repo.huaweicloud.com/repository/maven/'
+ }
+ maven {
+ url 'https://developer.huawei.com/repo/'
+ }
+ jcenter()
+ }
+ dependencies {
+ classpath 'com.huawei.ohos:hap:2.4.2.7'
+ classpath 'com.huawei.ohos:decctest:1.0.0.7'
+ }
+}
+
+allprojects {
+ repositories {
+ maven {
+ url 'https://repo.huaweicloud.com/repository/maven/'
+ }
+ maven {
+ url 'https://developer.huawei.com/repo/'
+ }
+ jcenter()
+ }
+}
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/.gitignore b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/.gitignore
new file mode 100644
index 00000000..796b96d1
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/build.gradle b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/build.gradle
new file mode 100644
index 00000000..30c5f30b
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/build.gradle
@@ -0,0 +1,26 @@
+apply plugin: 'com.huawei.ohos.hap'
+apply plugin: 'com.huawei.ohos.decctest'
+ohos {
+ compileSdkVersion 5
+ defaultConfig {
+ compatibleSdkVersion 4
+ }
+ buildTypes {
+ release {
+ proguardOpt {
+ proguardEnabled false
+ rulesFiles 'proguard-rules.pro'
+ }
+ }
+ }
+
+}
+
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar', '*.har'])
+ testImplementation 'junit:junit:4.13'
+ ohosTestImplementation 'com.huawei.ohos.testkit:runner:1.0.0.100'
+}
+decc {
+ supportType = ['html','xml']
+}
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/proguard-rules.pro b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/proguard-rules.pro
new file mode 100644
index 00000000..f7666e47
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/proguard-rules.pro
@@ -0,0 +1 @@
+# config module specific ProGuard rules here.
\ No newline at end of file
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/config.json b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/config.json
new file mode 100644
index 00000000..e3024fee
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/config.json
@@ -0,0 +1,49 @@
+{
+ "app": {
+ "bundleName": "com.example.loginscreenapplication",
+ "vendor": "example",
+ "version": {
+ "code": 1000000,
+ "name": "1.0.0"
+ },
+ "apiVersion": {
+ "compatible": 4,
+ "target": 5,
+ "releaseType": "Release"
+ }
+ },
+ "deviceConfig": {},
+ "module": {
+ "package": "com.example.loginscreenapplication",
+ "name": ".MyApplication",
+ "deviceType": [
+ "phone"
+ ],
+ "distro": {
+ "deliveryWithInstall": true,
+ "moduleName": "entry",
+ "moduleType": "entry"
+ },
+ "abilities": [
+ {
+ "skills": [
+ {
+ "entities": [
+ "entity.system.home"
+ ],
+ "actions": [
+ "action.system.home"
+ ]
+ }
+ ],
+ "orientation": "unspecified",
+ "name": "com.example.loginscreenapplication.MainAbility",
+ "icon": "$media:icon",
+ "description": "$string:mainability_description",
+ "label": "$string:app_name",
+ "type": "page",
+ "launchType": "standard"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/DbHelper.java b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/DbHelper.java
new file mode 100644
index 00000000..7a73a81f
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/DbHelper.java
@@ -0,0 +1,97 @@
+package com.example.loginscreenapplication;
+
+import com.example.loginscreenapplication.Model.UserData;
+import ohos.app.Context;
+import ohos.data.DatabaseHelper;
+import ohos.data.rdb.*;
+import ohos.data.resultset.ResultSet;
+
+public class DbHelper extends DatabaseHelper {
+
+ public static final String TABLE_NAME = "UserDataTable";
+
+ private static final String CREATE_TABLE_SQL =
+ String.format("CREATE TABLE IF NOT EXISTS %s(" +
+ "email TEXT PRIMARY KEY, " +
+ "firstName TEXT NOT NULL, " +
+ "lastName TEXT NOT NULL, " +
+ "password TEXT NOT NULL, " +
+ "mobile TEXT NOT NULL, " +
+ "gender TEXT NOT NULL" +
+ ")", TABLE_NAME);
+ public static final String EMAIL_FIELD = "email";
+ public static final String DB_CONFIG_NAME = "storeTest.db";
+
+ public DbHelper(Context context) {
+ super(context);
+ }
+
+ private static final RdbOpenCallback callback = new RdbOpenCallback() {
+ @Override
+ public void onCreate(RdbStore rdbStore) {
+ rdbStore.executeSql(CREATE_TABLE_SQL);
+ }
+
+ @Override
+ public void onUpgrade(RdbStore rdbStore, int i, int i1) {
+
+ }
+ };
+
+ public RdbStore initRdb(Context context) {
+ StoreConfig config = StoreConfig.newDefaultConfig(DB_CONFIG_NAME);
+ return getRdbStore(config, 1, callback, null);
+ }
+
+ // DB Helper Methods
+ public static boolean insertUserData(RdbStore db, UserData userData)
+ {
+
+ // Check if entry already exists
+ RdbPredicates emailComparisonPredicate = new RdbPredicates(TABLE_NAME).equalTo(EMAIL_FIELD, userData.getEmail());
+ ResultSet queryResult = db.query(emailComparisonPredicate, null);
+ if (queryResult != null && queryResult.getRowCount() > 0)
+ {
+ // It means there already exist an entry in the database with the same email id
+ return false;
+ }
+
+ ValuesBucket valuesBucket = userData.createValuesBucketFromData();
+
+ long rowId = db.insert(TABLE_NAME, valuesBucket);
+ return rowId != -1;
+ }
+
+ public static UserData getUserDataIfExists(RdbStore db, String email)
+ {
+ // Check if entry already exists
+ RdbPredicates emailComparisonPredicate = new RdbPredicates(TABLE_NAME).equalTo(EMAIL_FIELD, email);
+ ResultSet queryResult = db.query(emailComparisonPredicate, null);
+ if (queryResult != null && queryResult.getRowCount() > 0)
+ {
+ queryResult.goToFirstRow();
+ // It means there already exist an entry in the database with the same email id
+ UserData userData = new UserData();
+ userData.setEmail(queryResult.getString(0));
+ userData.setFirstName(queryResult.getString(1));
+ userData.setLastName(queryResult.getString(2));
+ userData.setPassword(queryResult.getString(3));
+ userData.setMobile(queryResult.getString(4));
+
+ UserData.Gender gender;
+ String queriedGenderString = queryResult.getString(5);
+ if (queriedGenderString.equals(UserData.Gender.Male.toString()))
+ {
+ gender = UserData.Gender.Male;
+ }
+ else
+ {
+ gender = UserData.Gender.Female;
+ }
+
+ userData.setGender(gender);
+ return userData;
+ }
+ return null;
+ }
+}
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/MainAbility.java b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/MainAbility.java
new file mode 100644
index 00000000..48471691
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/MainAbility.java
@@ -0,0 +1,13 @@
+package com.example.loginscreenapplication;
+
+import com.example.loginscreenapplication.slice.MainAbilitySlice;
+import ohos.aafwk.ability.Ability;
+import ohos.aafwk.content.Intent;
+
+public class MainAbility extends Ability {
+ @Override
+ public void onStart(Intent intent) {
+ super.onStart(intent);
+ super.setMainRoute(MainAbilitySlice.class.getName());
+ }
+}
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/Model/LoginResponse.java b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/Model/LoginResponse.java
new file mode 100644
index 00000000..78734a68
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/Model/LoginResponse.java
@@ -0,0 +1,27 @@
+package com.example.loginscreenapplication.Model;
+
+
+public class LoginResponse{
+ private final UserData userData;
+ private final LoginResponseType loginResponseType;
+
+ public LoginResponse(UserData userData, LoginResponseType loginResponseType)
+ {
+ this.userData = userData;
+ this.loginResponseType = loginResponseType;
+ }
+
+ public UserData getUserData() {
+ return userData;
+ }
+
+ public LoginResponseType getLoginResponseType() {
+ return loginResponseType;
+ }
+
+ public enum LoginResponseType {
+ SUCCESS,
+ EMAIL_NOT_FOUND,
+ INCORRECT_PASSWORD
+ }
+}
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/Model/RegisterResponse.java b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/Model/RegisterResponse.java
new file mode 100644
index 00000000..8581cdc3
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/Model/RegisterResponse.java
@@ -0,0 +1,26 @@
+package com.example.loginscreenapplication.Model;
+
+public class RegisterResponse {
+ private final UserData userData;
+ private final RegisterResponse.RegisterResponseType registerResponseType;
+
+ public RegisterResponse(UserData userData, RegisterResponse.RegisterResponseType registerResponseType)
+ {
+ this.userData = userData;
+ this.registerResponseType = registerResponseType;
+ }
+
+ public UserData getUserData() {
+ return userData;
+ }
+
+ public RegisterResponse.RegisterResponseType getRegisterResponseType() {
+ return registerResponseType;
+ }
+
+ public enum RegisterResponseType {
+ SUCCESS,
+ FAIL
+ }
+}
+
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/Model/UserData.java b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/Model/UserData.java
new file mode 100644
index 00000000..3b1132a1
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/Model/UserData.java
@@ -0,0 +1,96 @@
+package com.example.loginscreenapplication.Model;
+
+
+import ohos.data.rdb.ValuesBucket;
+
+import java.io.Serializable;
+
+public class UserData implements Serializable {
+
+ public static final String EMAIL_FIELD = "email";
+ public static final String LAST_NAME_FIELD = "lastName";
+ public static final String FIRST_NAME_FIELD = "firstName";
+ public static final String PASSWORD_FIELD = "password";
+ public static final String MOBILE_FIELD = "mobile";
+ public static final String GENDER_FIELD = "gender";
+ String firstName;
+ String lastName;
+ String email;
+ String password;
+ String mobile;
+ String gender;
+
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public String getMobile() {
+ return mobile;
+ }
+
+ public void setMobile(String mobile) {
+ this.mobile = mobile;
+ }
+
+ public Gender getGender()
+ {
+ try{
+ return Gender.valueOf(gender);
+ }
+ catch (IllegalArgumentException e)
+ {
+ // Default value
+ return Gender.Male;
+ }
+ }
+
+ public void setGender(Gender gender) {
+ this.gender = gender.toString();
+ }
+
+ public enum Gender {
+ Male,
+ Female
+ }
+
+ public ValuesBucket createValuesBucketFromData()
+ {
+ ValuesBucket valuesBucket = new ValuesBucket();
+ valuesBucket.putString(FIRST_NAME_FIELD,firstName);
+ valuesBucket.putString(LAST_NAME_FIELD,lastName);
+ valuesBucket.putString(EMAIL_FIELD,email);
+ valuesBucket.putString(PASSWORD_FIELD,password);
+ valuesBucket.putString(MOBILE_FIELD,mobile);
+ valuesBucket.putString(GENDER_FIELD,gender);
+ return valuesBucket;
+ }
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/MyApplication.java b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/MyApplication.java
new file mode 100644
index 00000000..9125cca4
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/MyApplication.java
@@ -0,0 +1,10 @@
+package com.example.loginscreenapplication;
+
+import ohos.aafwk.ability.AbilityPackage;
+
+public class MyApplication extends AbilityPackage {
+ @Override
+ public void onInitialize() {
+ super.onInitialize();
+ }
+}
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/Utils/InputValidationMethods.java b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/Utils/InputValidationMethods.java
new file mode 100644
index 00000000..7b5d4ad0
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/Utils/InputValidationMethods.java
@@ -0,0 +1,58 @@
+package com.example.loginscreenapplication.Utils;
+
+import ohos.agp.components.Component;
+import ohos.agp.components.Text;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class InputValidationMethods {
+
+ static final Pattern namePattern = Pattern.compile("[^a-zA-Z]");
+ static final Pattern emailPattern = Pattern.compile("[a-zA-Z0-9._-]+@[a-zA-Z]+\\.+[a-zA-Z]+");
+ static final Pattern nonNumericPattern = Pattern.compile("[^0-9]");
+
+ public static void checkForNameError(String inputName, Text targetErrorText)
+ {
+ Matcher matcher = namePattern.matcher(inputName);
+ boolean isValidName = !matcher.find();
+ if (!isValidName)
+ targetErrorText.setVisibility(Component.VISIBLE);
+ else
+ targetErrorText.setVisibility(Component.INVISIBLE);
+ }
+ public static void checkForEmailError(String inputEmail, Text targetErrorText)
+ {
+ if (!isValidEmail(inputEmail))
+ targetErrorText.setVisibility(Component.VISIBLE);
+ else
+ targetErrorText.setVisibility(Component.INVISIBLE);
+ }
+
+ public static boolean isValidEmail(String inputEmail) {
+ Matcher matcher = emailPattern.matcher(inputEmail);
+ return matcher.matches();
+ }
+
+ public static void checkForPasswordError(String inputPassword, Text targetErrorText)
+ {
+ if (!isValidPassword(inputPassword))
+ targetErrorText.setVisibility(Component.VISIBLE);
+ else
+ targetErrorText.setVisibility(Component.INVISIBLE);
+ }
+
+ public static boolean isValidPassword(String inputPassword) {
+ return inputPassword.length() >= 8;
+ }
+
+ public static void checkForMobileError(String inputMobile, Text targetErrorText)
+ {
+ Matcher matcher = nonNumericPattern.matcher(inputMobile);
+ boolean isValidMobile = (!matcher.find())&&(inputMobile.length() >= 1);
+ if (!isValidMobile)
+ targetErrorText.setVisibility(Component.VISIBLE);
+ else
+ targetErrorText.setVisibility(Component.INVISIBLE);
+ }
+}
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/Utils/UserDataHelperMethods.java b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/Utils/UserDataHelperMethods.java
new file mode 100644
index 00000000..b32e5f55
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/Utils/UserDataHelperMethods.java
@@ -0,0 +1,25 @@
+package com.example.loginscreenapplication.Utils;
+
+import com.example.loginscreenapplication.Model.UserData;
+
+public class UserDataHelperMethods {
+
+ public static final String MALE_GENDERED_TITLE = "Mr.";
+ public static final String FEMALE_GENDERED_TITLE = "Mrs.";
+
+ public static String getFullName(UserData userData) {
+ String prefix = "";
+ String firstName = userData.getFirstName();
+ String lastName = userData.getLastName();
+ UserData.Gender gender = userData.getGender();
+
+ if (gender == UserData.Gender.Female)
+ {
+ prefix = FEMALE_GENDERED_TITLE;
+ }else{
+ prefix = MALE_GENDERED_TITLE;
+ }
+ String fullName = String.format("%s %s %s", prefix, firstName, lastName);
+ return fullName;
+ }
+}
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/LoginAbilitySlice.java b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/LoginAbilitySlice.java
new file mode 100644
index 00000000..f7d0ce18
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/LoginAbilitySlice.java
@@ -0,0 +1,136 @@
+package com.example.loginscreenapplication.slice;
+
+import com.example.loginscreenapplication.DbHelper;
+import com.example.loginscreenapplication.Utils.InputValidationMethods;
+import com.example.loginscreenapplication.Model.LoginResponse;
+import com.example.loginscreenapplication.Model.UserData;
+import com.example.loginscreenapplication.ResourceTable;
+import ohos.aafwk.ability.AbilitySlice;
+import ohos.aafwk.content.Intent;
+import ohos.agp.components.Button;
+import ohos.agp.components.Component;
+import ohos.agp.components.Text;
+import ohos.agp.components.TextField;
+import ohos.data.rdb.RdbStore;
+
+
+
+public class LoginAbilitySlice extends AbilitySlice {
+
+ public static final String PLEASE_ENTER_VALID_EMAIL_PASSWORD = "Please enter valid email & password.";
+ public static final String LOGIN_SUCCESSFUL = "Login Successful";
+ public static final String EMAIL_ID_NOT_FOUND = "Email Id not found.";
+ public static final String PASSWORD_DOES_NOT_MATCH = "Password does not match.";
+ public static final String USER_DATA = "UserData";
+ TextField inputEmail;
+ TextField inputPassword;
+
+ Button loginButton;
+ Text loginFailedErrorMessage;
+
+ RdbStore db;
+
+ @Override
+ public void onStart(Intent intent) {
+ super.onStart(intent);
+ super.setUIContent(ResourceTable.Layout_login_layout);
+
+ inputEmail = (TextField)findComponentById(ResourceTable.Id_loginEmail);
+ inputPassword = (TextField)findComponentById(ResourceTable.Id_loginPassword);
+
+ loginButton = (Button)findComponentById(ResourceTable.Id_loginSubmitButton);
+ loginFailedErrorMessage = (Text)findComponentById(ResourceTable.Id_loginFailedErrorMessage);
+ loginFailedErrorMessage.setVisibility(Component.INVISIBLE);
+
+ loginButton.setClickedListener(component -> {
+ onClickSubmit();
+ });
+}
+
+ @Override
+ public void onActive() {
+ super.onActive();
+ DbHelper dbHelper = new DbHelper(this);
+ db = dbHelper.initRdb(this);
+ }
+
+ @Override
+ public void onForeground(Intent intent) {
+ super.onForeground(intent);
+ }
+
+ public void onClickSubmit()
+ {
+ if (isLoginInputsValid())
+ {
+ LoginResponse loginResponse = tryLogin();
+ if (!(loginResponse.getLoginResponseType() == LoginResponse.LoginResponseType.SUCCESS))
+ {
+ loginFailedErrorMessage.setVisibility(Component.VISIBLE);
+ loginFailedErrorMessage.setText(getLoginErrorMessage(loginResponse.getLoginResponseType()));
+ }
+ else
+ {
+ Intent intent = new Intent();
+ intent.setParam(USER_DATA, loginResponse.getUserData());
+ present(new WelcomeAbilitySlice(), intent);
+ }
+ }
+ else
+ {
+ loginFailedErrorMessage.setVisibility(Component.VISIBLE);
+ loginFailedErrorMessage.setText(PLEASE_ENTER_VALID_EMAIL_PASSWORD);
+ }
+ }
+
+ private boolean isLoginInputsValid()
+ {
+ String email = inputEmail.getText();
+ if (isNullOrEmpty(email) || !InputValidationMethods.isValidEmail(email))
+ {
+ return false;
+ }
+ String password = inputPassword.getText();
+ if (isNullOrEmpty(password) || !InputValidationMethods.isValidPassword(password))
+ {
+ return false;
+ }
+ return true;
+ }
+ private boolean isNullOrEmpty(String string)
+ {
+ return string == null || string.isEmpty();
+ }
+ private LoginResponse tryLogin()
+ {
+ LoginResponse.LoginResponseType loginResponseType = LoginResponse.LoginResponseType.SUCCESS;
+ String email = inputEmail.getText();
+ String password = inputPassword.getText();
+ UserData userData = DbHelper.getUserDataIfExists(db, email);
+ if (userData == null)
+ {
+ loginResponseType = LoginResponse.LoginResponseType.EMAIL_NOT_FOUND;
+ }
+ else
+ {
+ if (!password.equals(userData.getPassword()))
+ {
+ loginResponseType = LoginResponse.LoginResponseType.INCORRECT_PASSWORD;
+ userData = null;
+ }
+ }
+ return new LoginResponse(userData, loginResponseType);
+ }
+
+ private String getLoginErrorMessage(LoginResponse.LoginResponseType loginResponseType)
+ {
+ switch (loginResponseType)
+ {
+ case SUCCESS: return LOGIN_SUCCESSFUL;
+ case EMAIL_NOT_FOUND: return EMAIL_ID_NOT_FOUND;
+ case INCORRECT_PASSWORD: return PASSWORD_DOES_NOT_MATCH;
+ default: return null;
+ }
+ }
+
+}
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/MainAbilitySlice.java b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/MainAbilitySlice.java
new file mode 100644
index 00000000..878c1f6f
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/MainAbilitySlice.java
@@ -0,0 +1,97 @@
+package com.example.loginscreenapplication.slice;
+
+import com.example.loginscreenapplication.Model.UserData;
+import com.example.loginscreenapplication.ResourceTable;
+import ohos.aafwk.ability.AbilitySlice;
+import ohos.aafwk.content.Intent;
+import ohos.agp.animation.Animator;
+import ohos.agp.animation.AnimatorProperty;
+import ohos.agp.components.Button;
+import ohos.agp.components.Image;
+import ohos.agp.window.dialog.CommonDialog;
+import ohos.agp.window.dialog.IDialog;
+import ohos.hiviewdfx.HiLog;
+import ohos.hiviewdfx.HiLogLabel;
+
+import java.util.logging.Logger;
+
+import static com.example.loginscreenapplication.Utils.UserDataHelperMethods.getFullName;
+import static ohos.agp.components.ComponentContainer.LayoutConfig.MATCH_CONTENT;
+
+public class MainAbilitySlice extends AbilitySlice {
+ public static final String REGISTRATION_SUCCESS_INTENT_PARAM = "RegistrationSuccess";
+ public static final String USER_DATA = "UserData";
+ public static final String REGISTRATION_SUCCESS_DIALOG_TITLE = "Success!";
+ public static final String REGISTRATION_SUCCESS_DIALOG_CONTENT_TEXT =
+ "%s, you have successfully registered!";
+ public static final float IMAGE_ANIM_ROTATION_AMOUNT = 360f;
+ public static final int IMAGE_ANIM_DURATION = 4000;
+ public static final int IMAGE_ANIM_DELAY = 500;
+ public static final String DIALOG_OK = "OK";
+
+ Button loginButton;
+ Button registerButton;
+ Image imageLogo;
+
+ @Override
+ public void onStart(Intent intent) {
+ super.onStart(intent);
+ super.setUIContent(ResourceTable.Layout_ability_main);
+
+ loginButton = (Button)findComponentById(ResourceTable.Id_loginButton);
+ registerButton = (Button)findComponentById(ResourceTable.Id_registerButton);
+ imageLogo = (Image)findComponentById(ResourceTable.Id_imageLogo);
+ AnimatorProperty imageAnimatorProperty = createRotationAnimation(imageLogo);
+
+ imageLogo.setClickedListener(component -> {
+ imageAnimatorProperty.reset();
+ imageAnimatorProperty.start();
+ });
+ loginButton.setClickedListener(component -> present(new LoginAbilitySlice(), new Intent()));
+ registerButton.setClickedListener(component -> present(new RegisterAbilitySlice(), new Intent()));
+
+ // Check for intent parameter passed after successful registration
+ if (intent.getBooleanParam(REGISTRATION_SUCCESS_INTENT_PARAM, false))
+ {
+ UserData userData = intent.getSerializableParam(USER_DATA);
+ if (userData != null)
+ {
+ showRegistrationSuccessDialogBox(userData);
+ }
+ }
+ }
+
+ @Override
+ public void onActive() {
+ super.onActive();
+ }
+
+ @Override
+ public void onForeground(Intent intent) {
+ super.onForeground(intent);
+ }
+
+ private AnimatorProperty createRotationAnimation(Image targetImage)
+ {
+ AnimatorProperty animatorProperty = targetImage.createAnimatorProperty()
+ .setCurveType(Animator.CurveType.ANTICIPATE_OVERSHOOT)
+ .rotate(IMAGE_ANIM_ROTATION_AMOUNT).setDuration(IMAGE_ANIM_DURATION).setDelay(IMAGE_ANIM_DELAY);
+ return animatorProperty;
+ }
+
+ private void showRegistrationSuccessDialogBox(UserData userData)
+ {
+ CommonDialog commonDialog = new CommonDialog(this);
+ commonDialog.setTitleText(REGISTRATION_SUCCESS_DIALOG_TITLE);
+
+ String contentText = String.format(REGISTRATION_SUCCESS_DIALOG_CONTENT_TEXT,
+ getFullName(userData));
+
+ commonDialog.setContentText(contentText);
+ commonDialog.setAutoClosable(true);
+ commonDialog.setButton(IDialog.BUTTON1, DIALOG_OK, (iDialog, i) -> {
+ commonDialog.destroy();
+ });
+ commonDialog.show();
+ }
+}
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/RegisterAbilitySlice.java b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/RegisterAbilitySlice.java
new file mode 100644
index 00000000..37450646
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/RegisterAbilitySlice.java
@@ -0,0 +1,167 @@
+package com.example.loginscreenapplication.slice;
+import com.example.loginscreenapplication.DbHelper;
+import com.example.loginscreenapplication.Utils.InputValidationMethods;
+import com.example.loginscreenapplication.Model.RegisterResponse;
+import com.example.loginscreenapplication.Model.UserData;
+import com.example.loginscreenapplication.ResourceTable;
+import ohos.aafwk.ability.AbilitySlice;
+import ohos.aafwk.content.Intent;
+import ohos.agp.components.*;
+import ohos.data.rdb.RdbStore;
+
+public class RegisterAbilitySlice extends AbilitySlice {
+ public static final String ALL_FIELDS_ARE_REQUIRED = "All fields are required.";
+ public static final String ENSURE_VALID_INPUTS_TO_ALL_FIELDS = "Ensure valid inputs to all fields.";
+ public static final String REGISTRATION_SUCCESS = "RegistrationSuccess";
+ public static final String USER_DATA = "UserData";
+ public static final String SUBMISSION_FAILED = "Submission Failed. Email Id already exists in database.";
+ Text errorFirstName;
+ Text errorLastName;
+ Text errorEmail;
+ Text errorPassword;
+ Text errorMobile;
+ Text registerFailedMessage;
+
+ TextField inputFirstName;
+ TextField inputLastName;
+ TextField inputEmail;
+ TextField inputPassword;
+ TextField inputMobile;
+ RadioButton inputGenderMale;
+ RadioButton inputGenderFemale;
+
+ Button submitButton;
+
+ private RdbStore db;
+
+ @Override
+ public void onStart(Intent intent) {
+ super.onStart(intent);
+ super.setUIContent(ResourceTable.Layout_register_layout);
+
+ initializeFieldsAndListeners();
+
+ }
+
+ @Override
+ public void onActive() {
+ super.onActive();
+ DbHelper dbHelper = new DbHelper(this);
+ db = dbHelper.initRdb(this);
+ }
+
+ @Override
+ public void onForeground(Intent intent) {
+ super.onForeground(intent);
+ }
+
+ private void initializeFieldsAndListeners() {
+ errorFirstName = (Text)findComponentById(ResourceTable.Id_errorFirstName);
+ errorFirstName.setVisibility(Component.INVISIBLE);
+ errorLastName = (Text)findComponentById(ResourceTable.Id_errorLastName);
+ errorLastName.setVisibility(Component.INVISIBLE);
+ errorEmail = (Text)findComponentById(ResourceTable.Id_errorEmail);
+ errorEmail.setVisibility(Component.INVISIBLE);
+ errorPassword = (Text)findComponentById(ResourceTable.Id_errorPassword);
+ errorPassword.setVisibility(Component.INVISIBLE);
+ errorMobile = (Text)findComponentById(ResourceTable.Id_errorMobile);
+ errorMobile.setVisibility(Component.INVISIBLE);
+ registerFailedMessage = (Text)findComponentById(ResourceTable.Id_registerFailedMessage);
+ registerFailedMessage.setVisibility(Component.INVISIBLE);
+
+ inputFirstName = (TextField)findComponentById(ResourceTable.Id_registerFirstName);
+ inputLastName = (TextField)findComponentById(ResourceTable.Id_registerLastName);
+ inputEmail = (TextField)findComponentById(ResourceTable.Id_registerEmail);
+ inputPassword = (TextField)findComponentById(ResourceTable.Id_registerPassword);
+ inputMobile = (TextField)findComponentById(ResourceTable.Id_registerMobile);
+ inputGenderMale = (RadioButton)findComponentById(ResourceTable.Id_registerGenderMale);
+ inputGenderFemale = (RadioButton)findComponentById(ResourceTable.Id_registerGenderFemale);
+
+ submitButton = (Button)findComponentById(ResourceTable.Id_registerSubmitButton);
+
+ inputFirstName.addTextObserver((s, i, i1, i2) -> InputValidationMethods.checkForNameError(s, errorFirstName));
+ inputLastName.addTextObserver((s, i, i1, i2) -> InputValidationMethods.checkForNameError(s, errorLastName));
+ inputEmail.addTextObserver((s, i, i1, i2) -> InputValidationMethods.checkForEmailError(s, errorEmail));
+ inputPassword.addTextObserver((s, i, i1, i2) -> InputValidationMethods.checkForPasswordError(s, errorPassword));
+ inputMobile.addTextObserver((s, i, i1, i2) -> InputValidationMethods.checkForMobileError(s, errorMobile));
+ submitButton.setClickedListener(this::onClickSubmit);
+ }
+
+ private void onClickSubmit(Component component)
+ {
+ // Check if the text fields all have entries:
+ if (isNullOrEmpty(inputFirstName.getText()) ||
+ isNullOrEmpty(inputLastName.getText()) ||
+ isNullOrEmpty(inputEmail.getText()) ||
+ isNullOrEmpty(inputPassword.getText()) ||
+ isNullOrEmpty(inputMobile.getText()) ||
+ (!inputGenderMale.isChecked() && !inputGenderFemale.isChecked()))
+ {
+ registerFailedMessage.setVisibility(Component.VISIBLE);
+ registerFailedMessage.setText(ALL_FIELDS_ARE_REQUIRED);
+ }
+ else
+ {
+ // Check if the text fields are all validated
+ if (errorFirstName.getVisibility() == Component.VISIBLE ||
+ errorLastName.getVisibility() == Component.VISIBLE ||
+ errorEmail.getVisibility() == Component.VISIBLE ||
+ errorPassword.getVisibility() == Component.VISIBLE ||
+ errorMobile.getVisibility() == Component.VISIBLE)
+ {
+ registerFailedMessage.setVisibility(Component.VISIBLE);
+ registerFailedMessage.setText(ENSURE_VALID_INPUTS_TO_ALL_FIELDS);
+ }
+ else
+ {
+ // All inputs validated. Data submission can proceed
+ RegisterResponse registerResponse = submitData();
+ if (registerResponse.getRegisterResponseType() == RegisterResponse.RegisterResponseType.SUCCESS)
+ {
+ // Submission was a success. Redirect to home screen
+ Intent intent = new Intent();
+ intent.setParam(REGISTRATION_SUCCESS, true);
+ intent.setParam(USER_DATA, registerResponse.getUserData());
+ present(new MainAbilitySlice(), intent);
+ }
+ else
+ {
+ registerFailedMessage.setVisibility(Component.VISIBLE);
+ registerFailedMessage.setText(SUBMISSION_FAILED);
+ }
+ }
+ }
+ }
+
+ private RegisterResponse submitData()
+ {
+ UserData userData = getUserDataFromTextFields();
+ boolean submissionResult = DbHelper.insertUserData(db, userData);
+ RegisterResponse.RegisterResponseType registerResponseType;
+ if (submissionResult)
+ registerResponseType = RegisterResponse.RegisterResponseType.SUCCESS;
+ else
+ registerResponseType = RegisterResponse.RegisterResponseType.FAIL;
+ return new RegisterResponse(userData, registerResponseType);
+ }
+
+ private UserData getUserDataFromTextFields()
+ {
+ UserData userData = new UserData();
+ userData.setFirstName(inputFirstName.getText());
+ userData.setLastName(inputLastName.getText());
+ userData.setEmail(inputEmail.getText());
+ userData.setPassword(inputPassword.getText());
+ userData.setMobile(inputMobile.getText());
+ if (inputGenderMale.isChecked())
+ userData.setGender(UserData.Gender.Male);
+ else
+ userData.setGender(UserData.Gender.Female);
+ return userData;
+ }
+
+ private boolean isNullOrEmpty(String string){
+ return string == null || string.isEmpty();
+ }
+
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/WelcomeAbilitySlice.java b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/WelcomeAbilitySlice.java
new file mode 100644
index 00000000..2c34751b
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/java/com/example/loginscreenapplication/slice/WelcomeAbilitySlice.java
@@ -0,0 +1,43 @@
+package com.example.loginscreenapplication.slice;
+
+import com.example.loginscreenapplication.Model.UserData;
+import com.example.loginscreenapplication.ResourceTable;
+import ohos.aafwk.ability.AbilitySlice;
+import ohos.aafwk.content.Intent;
+import ohos.agp.components.Text;
+
+import static com.example.loginscreenapplication.Utils.UserDataHelperMethods.getFullName;
+
+public class WelcomeAbilitySlice extends AbilitySlice {
+ public static final String USER_DATA = "UserData";
+ public static final String WELCOME_BASE_TEXT = "Welcome, %s.";
+
+ Text welcomeText;
+
+ UserData userData;
+ @Override
+ public void onStart(Intent intent) {
+ super.onStart(intent);
+ super.setUIContent(ResourceTable.Layout_welcome_layout);
+ userData = intent.getSerializableParam(USER_DATA);
+
+ welcomeText = (Text)findComponentById(ResourceTable.Id_welcomePageText);
+
+ String fullName = getFullName(userData);
+ String completedWelcomeText = String.format(WELCOME_BASE_TEXT, fullName);
+
+ welcomeText.setText(completedWelcomeText);
+ }
+
+ @Override
+ public void onActive() {
+ super.onActive();
+ }
+
+ @Override
+ public void onForeground(Intent intent) {
+ super.onForeground(intent);
+ }
+
+
+}
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/element/string.json b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/element/string.json
new file mode 100644
index 00000000..75b39189
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/element/string.json
@@ -0,0 +1,109 @@
+{
+ "string": [
+ {
+ "name": "app_name",
+ "value": "LoginScreenApplication"
+ },
+ {
+ "name": "mainability_description",
+ "value": "Java_Phone_Empty Feature Ability"
+ },
+ {
+ "name": "mainability_HelloWorld",
+ "value": "Hello World"
+ },
+ {
+ "name": "mainability_Login",
+ "value": "Login"
+ },
+ {
+ "name": "mainability_Register",
+ "value": "Register"
+ },
+ {
+ "name": "login_welcome_text",
+ "value": "Welcome to the login page"
+ },
+ {
+ "name": "register_welcome_text",
+ "value": "Welcome to the register page"
+ },
+ {
+ "name": "email_text_field",
+ "value": "Email"
+ },
+ {
+ "name": "email_hint",
+ "value": "john@example.com"
+ },
+ {
+ "name": "email_error_text",
+ "value": " *Please enter valid email id"
+ },
+ {
+ "name": "password_text_field",
+ "value": "Password"
+ },
+ {
+ "name": "password_error_text",
+ "value": " *Minimum 8 characters"
+ },
+ {
+ "name": "password_hint",
+ "value": "password"
+ },
+ {
+ "name": "first_name_text_field",
+ "value": "First name"
+ },
+ {
+ "name": "name_error_text",
+ "value": " *Name can only consist of letters"
+ },
+ {
+ "name": "first_name_hint",
+ "value": "John"
+ },
+ {
+ "name": "last_name_text_field",
+ "value": "Last Name"
+ },
+ {
+ "name": "last_name_hint",
+ "value": "Smith"
+ },
+ {
+ "name": "mobile_text_field",
+ "value": "Mobile Number"
+ },
+ {
+ "name": "mobile_error_text",
+ "value": " *Please enter valid mobile number"
+ },
+ {
+ "name": "mobile_hint",
+ "value": "00000000"
+ },
+ {
+ "name": "gender_text_field",
+ "value": "Gender"
+ },
+ {
+ "name": "gender_male",
+ "value": "Male"
+ },
+ {
+ "name": "gender_female",
+ "value": "Female"
+ },
+ {
+ "name": "submit_button_text",
+ "value": "Submit"
+ },
+ {
+ "name": "default_error_msg",
+ "value": " *Error Message"
+ }
+
+ ]
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/graphic/background_ability_main.xml b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/graphic/background_ability_main.xml
new file mode 100644
index 00000000..c0c0a3df
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/graphic/background_ability_main.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/graphic/clockvec.xml b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/graphic/clockvec.xml
new file mode 100644
index 00000000..20760d3d
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/graphic/clockvec.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/ability_main.xml b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/ability_main.xml
new file mode 100644
index 00000000..9f641fa6
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/ability_main.xml
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/login_layout.xml b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/login_layout.xml
new file mode 100644
index 00000000..a4cc4e26
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/login_layout.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/register_layout.xml b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/register_layout.xml
new file mode 100644
index 00000000..8cacc523
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/register_layout.xml
@@ -0,0 +1,202 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/welcome_layout.xml b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/welcome_layout.xml
new file mode 100644
index 00000000..e2a474ba
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/layout/welcome_layout.xml
@@ -0,0 +1,14 @@
+
+
+
+
\ No newline at end of file
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/media/icon.png b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/media/icon.png
new file mode 100644
index 00000000..ce307a88
Binary files /dev/null and b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/main/resources/base/media/icon.png differ
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/ohosTest/config.json b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/ohosTest/config.json
new file mode 100644
index 00000000..8f211ec7
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/ohosTest/config.json
@@ -0,0 +1,41 @@
+{
+ "app": {
+ "bundleName": "com.example.loginscreenapplication",
+ "vendor": "example",
+ "version": {
+ "code": 1000000,
+ "name": "1.0.0"
+ },
+ "apiVersion": {
+ "compatible": 4,
+ "target": 5,
+ "releaseType": "Release"
+ }
+ },
+ "deviceConfig": {},
+ "module": {
+ "package": "com.example.loginscreenapplication",
+ "name": "testModule",
+ "deviceType": [
+ "phone"
+ ],
+ "distro": {
+ "deliveryWithInstall": true,
+ "moduleName": "entry_test",
+ "moduleType": "feature",
+ "installationFree": true
+ },
+ "abilities": [
+ {
+ "name": "decc.testkit.runner.EntryAbility",
+ "description": "Test Entry Ability",
+ "icon": "$media:icon",
+ "label": "$string:app_name",
+ "launchType": "standard",
+ "orientation": "landscape",
+ "visible": true,
+ "type": "page"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/ohosTest/java/com/example/loginscreenapplication/ExampleOhosTest.java b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/ohosTest/java/com/example/loginscreenapplication/ExampleOhosTest.java
new file mode 100644
index 00000000..1e247a29
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/ohosTest/java/com/example/loginscreenapplication/ExampleOhosTest.java
@@ -0,0 +1,14 @@
+package com.example.loginscreenapplication;
+
+import ohos.aafwk.ability.delegation.AbilityDelegatorRegistry;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class ExampleOhosTest {
+ @Test
+ public void testBundleName() {
+ final String actualBundleName = AbilityDelegatorRegistry.getArguments().getTestBundleName();
+ assertEquals("com.example.loginscreenapplication", actualBundleName);
+ }
+}
\ No newline at end of file
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/test/java/com/example/loginscreenapplication/ExampleTest.java b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/test/java/com/example/loginscreenapplication/ExampleTest.java
new file mode 100644
index 00000000..c3b7b239
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/entry/src/test/java/com/example/loginscreenapplication/ExampleTest.java
@@ -0,0 +1,9 @@
+package com.example.loginscreenapplication;
+
+import org.junit.Test;
+
+public class ExampleTest {
+ @Test
+ public void onStart() {
+ }
+}
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/gradle.properties b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/gradle.properties
new file mode 100644
index 00000000..0daf1830
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/gradle.properties
@@ -0,0 +1,10 @@
+# Project-wide Gradle settings.
+# IDE (e.g. DevEco Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+# If the Chinese output is garbled, please configure the following parameter.
+# org.gradle.jvmargs=-Dfile.encoding=GBK
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/gradle/wrapper/gradle-wrapper.jar b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 00000000..490fda85
Binary files /dev/null and b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/gradle/wrapper/gradle-wrapper.properties b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 00000000..f59159e8
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://repo.huaweicloud.com/gradle/gradle-6.3-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/gradlew b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/gradlew
new file mode 100644
index 00000000..2fe81a7d
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/gradlew
@@ -0,0 +1,183 @@
+#!/usr/bin/env sh
+
+#
+# Copyright 2015 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+ echo "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=`expr $i + 1`
+ done
+ case $i in
+ 0) set -- ;;
+ 1) set -- "$args0" ;;
+ 2) set -- "$args0" "$args1" ;;
+ 3) set -- "$args0" "$args1" "$args2" ;;
+ 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=`save "$@"`
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+exec "$JAVACMD" "$@"
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/gradlew.bat b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/gradlew.bat
new file mode 100644
index 00000000..62bd9b9c
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/gradlew.bat
@@ -0,0 +1,103 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/settings.gradle b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/settings.gradle
new file mode 100644
index 00000000..4773db73
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/LoginScreenApplication/settings.gradle
@@ -0,0 +1 @@
+include ':entry'
diff --git a/HarmonyOS/Day5 Assingment/Mahesh/README.md b/HarmonyOS/Day5 Assingment/Mahesh/README.md
new file mode 100644
index 00000000..0ca1c0c7
--- /dev/null
+++ b/HarmonyOS/Day5 Assingment/Mahesh/README.md
@@ -0,0 +1,5 @@
+# Day 5
+
+## Target Device: Phone
+
+Day 5 Assignment: Added Common Dialog Box upon successful registration.
\ No newline at end of file