diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index 6356ee5e965138872cabfd64d74a2a12bd45c12d..0c0c3383890637b4721df1f49d0b229e55c0f361 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -3,20 +3,7 @@ <component name="deploymentTargetDropDown"> <value> <entry key="app"> - <State> - <targetSelectedWithDropDown> - <Target> - <type value="QUICK_BOOT_TARGET" /> - <deviceKey> - <Key> - <type value="VIRTUAL_DEVICE_PATH" /> - <value value="C:\Users\Vanessa\.android\avd\Medium_Phone_API_29.avd" /> - </Key> - </deviceKey> - </Target> - </targetSelectedWithDropDown> - <timeTargetWasSelectedWithDropDown value="2024-03-12T15:43:38.986853700Z" /> - </State> + <State /> </entry> </value> </component> diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2296cceb1643b2b66e3a078996c896bc3b932302..7037ee6744a0c3391b7c44d851d92e813f2b37f3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -18,7 +18,7 @@ tools:targetApi="31"> <activity - android:name=".MainActivity" + android:name=".SplashActivity" android:exported="true" android:label="@string/app_name"> <intent-filter> @@ -26,5 +26,9 @@ <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> + <activity android:name=".LoginActivity" /> + <meta-data + android:name="preloaded_fonts" + android:resource="@array/preloaded_fonts" /> </application> </manifest> diff --git a/app/src/main/java/com/example/tubespbd/LoginActivity.kt b/app/src/main/java/com/example/tubespbd/LoginActivity.kt new file mode 100644 index 0000000000000000000000000000000000000000..91bcc1ee2ab5ec6c8be87cf48f8b3fb863427b65 --- /dev/null +++ b/app/src/main/java/com/example/tubespbd/LoginActivity.kt @@ -0,0 +1,16 @@ +package com.example.tubespbd + +import android.content.Intent +import android.os.Bundle +import android.os.Handler +import androidx.appcompat.app.AppCompatActivity + +class LoginActivity : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_login) + + } + +} diff --git a/app/src/main/java/com/example/tubespbd/SplashActivity.kt b/app/src/main/java/com/example/tubespbd/SplashActivity.kt new file mode 100644 index 0000000000000000000000000000000000000000..ed627bebaffd15bd2ffccffc0aeff8f0d238a441 --- /dev/null +++ b/app/src/main/java/com/example/tubespbd/SplashActivity.kt @@ -0,0 +1,36 @@ +package com.example.tubespbd + +import android.content.Intent +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.cancel +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch + +class SplashActivity: AppCompatActivity() { + + private val SPLASH_DELAY: Long = 2000 + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_splash) + + + // Using Kotlin Coroutines to delay transition to LoginActivity + CoroutineScope(Dispatchers.Main).launch { + delay(SPLASH_DELAY) + // Start LoginActivity after the delay + startActivity(Intent(this@SplashActivity, LoginActivity::class.java)) + // Finish SplashActivity so that it's not accessible by pressing back button + finish() + } + } + + override fun onDestroy() { + super.onDestroy() + // Cancel the coroutine if the activity is destroyed + CoroutineScope(Dispatchers.Main).cancel() + } + +} \ No newline at end of file diff --git a/app/src/main/res/drawable/button_rounded.xml b/app/src/main/res/drawable/button_rounded.xml new file mode 100644 index 0000000000000000000000000000000000000000..917cae12c2d48a281575ff62136aca78a5f09384 --- /dev/null +++ b/app/src/main/res/drawable/button_rounded.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> +<item> + <shape + android:shape="rectangle"> + + <corners android:radius="15dp"/> + <stroke android:width="1dip"/> + <solid android:color="@color/primary"/> + + </shape> +</item> + + <item android:drawable="@color/primary"/> + +</layer-list> diff --git a/app/src/main/res/drawable/rounded_corner.xml b/app/src/main/res/drawable/rounded_corner.xml new file mode 100644 index 0000000000000000000000000000000000000000..f1e04c4bfe60de29fc605cdb47cc660c38697ea9 --- /dev/null +++ b/app/src/main/res/drawable/rounded_corner.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape xmlns:android="http://schemas.android.com/apk/res/android" + android:shape="rectangle"> + + <corners android:radius="15dp"/> + <stroke android:width="1dip" android:color="@color/border" /> + +</shape> \ No newline at end of file diff --git a/app/src/main/res/font/inter.xml b/app/src/main/res/font/inter.xml new file mode 100644 index 0000000000000000000000000000000000000000..71311f0a995421988fa6cdeb43ec1774346368d9 --- /dev/null +++ b/app/src/main/res/font/inter.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8"?> +<font-family xmlns:app="http://schemas.android.com/apk/res-auto" + app:fontProviderAuthority="com.google.android.gms.fonts" + app:fontProviderPackage="com.google.android.gms" + app:fontProviderQuery="Inter" + app:fontProviderCerts="@array/com_google_android_gms_fonts_certs"> +</font-family> diff --git a/app/src/main/res/font/inter_medium.xml b/app/src/main/res/font/inter_medium.xml new file mode 100644 index 0000000000000000000000000000000000000000..70a4c867bec901832195d21fa87c7158c491cb52 --- /dev/null +++ b/app/src/main/res/font/inter_medium.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8"?> +<font-family xmlns:app="http://schemas.android.com/apk/res-auto" + app:fontProviderAuthority="com.google.android.gms.fonts" + app:fontProviderPackage="com.google.android.gms" + app:fontProviderQuery="name=Inter&weight=500" + app:fontProviderCerts="@array/com_google_android_gms_fonts_certs"> +</font-family> diff --git a/app/src/main/res/font/montserrat.xml b/app/src/main/res/font/montserrat.xml new file mode 100644 index 0000000000000000000000000000000000000000..0421f22c0ace369b92263538329fda6e848ec038 --- /dev/null +++ b/app/src/main/res/font/montserrat.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8"?> +<font-family xmlns:app="http://schemas.android.com/apk/res-auto" + app:fontProviderAuthority="com.google.android.gms.fonts" + app:fontProviderPackage="com.google.android.gms" + app:fontProviderQuery="Montserrat" + app:fontProviderCerts="@array/com_google_android_gms_fonts_certs"> +</font-family> diff --git a/app/src/main/res/font/montserrat_semibold.xml b/app/src/main/res/font/montserrat_semibold.xml new file mode 100644 index 0000000000000000000000000000000000000000..0f2b4786d6c43b55360d3f0778a18ee4e3fd8db3 --- /dev/null +++ b/app/src/main/res/font/montserrat_semibold.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8"?> +<font-family xmlns:app="http://schemas.android.com/apk/res-auto" + app:fontProviderAuthority="com.google.android.gms.fonts" + app:fontProviderPackage="com.google.android.gms" + app:fontProviderQuery="name=Montserrat&weight=600" + app:fontProviderCerts="@array/com_google_android_gms_fonts_certs"> +</font-family> diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml new file mode 100644 index 0000000000000000000000000000000000000000..edeff682797adf565931abc170c5a98f222697c9 --- /dev/null +++ b/app/src/main/res/layout/activity_login.xml @@ -0,0 +1,112 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <LinearLayout + android:id="@+id/linearLayout" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginBottom="32dp" + android:gravity="center" + android:orientation="vertical" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.0" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.421"> + + <TextView + android:id="@+id/login_header" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginBottom="100dp" + android:fontFamily="@font/montserrat_semibold" + android:text="@string/login_header_text" + android:textColor="@color/black" + android:textSize="43sp" /> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_marginStart="40dp" + android:layout_marginEnd="40dp" + android:orientation="vertical"> + + <TextView + android:id="@+id/email_textview" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginBottom="10dp" + android:fontFamily="@font/inter_medium" + android:text="@string/email_text" + android:textColor="@color/black" + android:textSize="27sp" /> + + <EditText + android:id="@+id/editTextTextEmailAddress" + android:layout_width="match_parent" + android:layout_height="48dp" + android:autofillHints="Enter email..." + android:background="@drawable/rounded_corner" + android:ems="10" + android:inputType="textEmailAddress" + android:textSize="24sp" + tools:ignore="LabelFor" /> + </LinearLayout> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_marginStart="40dp" + android:layout_marginEnd="40dp" + android:orientation="vertical"> + + <TextView + android:id="@+id/password_textview" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="15dp" + android:layout_marginBottom="10dp" + android:fontFamily="@font/inter_medium" + android:text="@string/password_text" + android:textColor="@color/black" + android:textSize="27sp" /> + + <EditText + android:id="@+id/editTextTextPassword" + android:layout_width="match_parent" + android:layout_height="48dp" + android:autofillHints="Enter email..." + android:background="@drawable/rounded_corner" + android:ems="10" + android:inputType="textPassword" + android:textSize="24sp" + tools:ignore="LabelFor" /> + </LinearLayout> + + </LinearLayout> + + <Button + android:id="@+id/button_masuk" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="48dp" + android:background="@drawable/rounded_corner" + android:backgroundTint="@color/primary" + android:backgroundTintMode="src_over" + android:fontFamily="@font/inter_medium" + android:paddingHorizontal="70dp" + android:paddingVertical="1dp" + android:text="@string/masuk_text" + android:textAllCaps="false" + android:textSize="27sp" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/linearLayout" /> + + +</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/app/src/main/res/layout/activity_splash.xml b/app/src/main/res/layout/activity_splash.xml new file mode 100644 index 0000000000000000000000000000000000000000..53504950b347bb96705bccec3177292dab0886f9 --- /dev/null +++ b/app/src/main/res/layout/activity_splash.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <TextView + android:id="@+id/splash_text" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/splash_text" + android:textSize="48sp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> +</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index f8c6127d327620c93d2b2d00342a68e97b98a48d..1a8a5deaf6ba21be8665440cbb9ff96d0d1a1732 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -7,4 +7,6 @@ <color name="teal_700">#FF018786</color> <color name="black">#FF000000</color> <color name="white">#FFFFFFFF</color> + <color name="border">#D9D9D9</color> + <color name="primary">#3F6D5C</color> </resources> \ No newline at end of file diff --git a/app/src/main/res/values/font_certs.xml b/app/src/main/res/values/font_certs.xml new file mode 100644 index 0000000000000000000000000000000000000000..d2226ac01c057907ca1fc71f1d3390d3deea9ca1 --- /dev/null +++ b/app/src/main/res/values/font_certs.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <array name="com_google_android_gms_fonts_certs"> + <item>@array/com_google_android_gms_fonts_certs_dev</item> + <item>@array/com_google_android_gms_fonts_certs_prod</item> + </array> + <string-array name="com_google_android_gms_fonts_certs_dev"> + <item> + MIIEqDCCA5CgAwIBAgIJANWFuGx90071MA0GCSqGSIb3DQEBBAUAMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTAeFw0wODA0MTUyMzM2NTZaFw0zNTA5MDEyMzM2NTZaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBANbOLggKv+IxTdGNs8/TGFy0PTP6DHThvbbR24kT9ixcOd9W+EaBPWW+wPPKQmsHxajtWjmQwWfna8mZuSeJS48LIgAZlKkpFeVyxW0qMBujb8X8ETrWy550NaFtI6t9+u7hZeTfHwqNvacKhp1RbE6dBRGWynwMVX8XW8N1+UjFaq6GCJukT4qmpN2afb8sCjUigq0GuMwYXrFVee74bQgLHWGJwPmvmLHC69EH6kWr22ijx4OKXlSIx2xT1AsSHee70w5iDBiK4aph27yH3TxkXy9V89TDdexAcKk/cVHYNnDBapcavl7y0RiQ4biu8ymM8Ga/nmzhRKya6G0cGw8CAQOjgfwwgfkwHQYDVR0OBBYEFI0cxb6VTEM8YYY6FbBMvAPyT+CyMIHJBgNVHSMEgcEwgb6AFI0cxb6VTEM8YYY6FbBMvAPyT+CyoYGapIGXMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbYIJANWFuGx90071MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADggEBABnTDPEF+3iSP0wNfdIjIz1AlnrPzgAIHVvXxunW7SBrDhEglQZBbKJEk5kT0mtKoOD1JMrSu1xuTKEBahWRbqHsXclaXjoBADb0kkjVEJu/Lh5hgYZnOjvlba8Ld7HCKePCVePoTJBdI4fvugnL8TsgK05aIskyY0hKI9L8KfqfGTl1lzOv2KoWD0KWwtAWPoGChZxmQ+nBli+gwYMzM1vAkP+aayLe0a1EQimlOalO762r0GXO0ks+UeXde2Z4e+8S/pf7pITEI/tP+MxJTALw9QUWEv9lKTk+jkbqxbsh8nfBUapfKqYn0eidpwq2AzVp3juYl7//fKnaPhJD9gs= + </item> + </string-array> + <string-array name="com_google_android_gms_fonts_certs_prod"> + <item> + MIIEQzCCAyugAwIBAgIJAMLgh0ZkSjCNMA0GCSqGSIb3DQEBBAUAMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDAeFw0wODA4MjEyMzEzMzRaFw0zNjAxMDcyMzEzMzRaMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBAKtWLgDYO6IIrgqWbxJOKdoR8qtW0I9Y4sypEwPpt1TTcvZApxsdyxMJZ2JORland2qSGT2y5b+3JKkedxiLDmpHpDsz2WCbdxgxRczfey5YZnTJ4VZbH0xqWVW/8lGmPav5xVwnIiJS6HXk+BVKZF+JcWjAsb/GEuq/eFdpuzSqeYTcfi6idkyugwfYwXFU1+5fZKUaRKYCwkkFQVfcAs1fXA5V+++FGfvjJ/CxURaSxaBvGdGDhfXE28LWuT9ozCl5xw4Yq5OGazvV24mZVSoOO0yZ31j7kYvtwYK6NeADwbSxDdJEqO4k//0zOHKrUiGYXtqw/A0LFFtqoZKFjnkCAQOjgdkwgdYwHQYDVR0OBBYEFMd9jMIhF1Ylmn/Tgt9r45jk14alMIGmBgNVHSMEgZ4wgZuAFMd9jMIhF1Ylmn/Tgt9r45jk14aloXikdjB0MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLR29vZ2xlIEluYy4xEDAOBgNVBAsTB0FuZHJvaWQxEDAOBgNVBAMTB0FuZHJvaWSCCQDC4IdGZEowjTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBAUAA4IBAQBt0lLO74UwLDYKqs6Tm8/yzKkEu116FmH4rkaymUIE0P9KaMftGlMexFlaYjzmB2OxZyl6euNXEsQH8gjwyxCUKRJNexBiGcCEyj6z+a1fuHHvkiaai+KL8W1EyNmgjmyy8AW7P+LLlkR+ho5zEHatRbM/YAnqGcFh5iZBqpknHf1SKMXFh4dd239FJ1jWYfbMDMy3NS5CTMQ2XFI1MvcyUTdZPErjQfTbQe3aDQsQcafEQPD+nqActifKZ0Np0IS9L9kR/wbNvyz6ENwPiTrjV2KRkEjH78ZMcUQXg0L3BYHJ3lc69Vs5Ddf9uUGGMYldX3WfMBEmh/9iFBDAaTCK + </item> + </string-array> +</resources> diff --git a/app/src/main/res/values/preloaded_fonts.xml b/app/src/main/res/values/preloaded_fonts.xml new file mode 100644 index 0000000000000000000000000000000000000000..34635f7748b50368219e358cf872997f68a86e9e --- /dev/null +++ b/app/src/main/res/values/preloaded_fonts.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <array name="preloaded_fonts" translatable="false"> + <item>@font/inter</item> + <item>@font/inter_medium</item> + <item>@font/montserrat</item> + <item>@font/montserrat_semibold</item> + </array> +</resources> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ed151da1b301ad7d0aa060c879b9c1d9d9696971..b746033c096b4aae425eca7b872afa39b355844e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -3,5 +3,13 @@ <string name="title_home">Home</string> <string name="title_dashboard">Dashboard</string> <string name="title_notifications">Notifications</string> + <string name="splash_text"> + ꦧꦺꦴꦤ꧀ê¦ê¦ºê¦´ +ꦩꦤ꧀ + </string> + <string name="login_header_text">Selamat Datang</string> + <string name="email_text">Email</string> + <string name="password_text">Password</string> + <string name="masuk_text">Masuk</string> <string name="title_scan">Scan</string> </resources> \ No newline at end of file