Skip to content

Commit

Permalink
Feature Search Ticket : Add feature
Browse files Browse the repository at this point in the history
  • Loading branch information
anantyan committed Jan 28, 2024
1 parent 18abdc6 commit a6c9137
Show file tree
Hide file tree
Showing 37 changed files with 565 additions and 162 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package id.synrgy6team2.bookingticket.common

import android.content.Intent
import android.os.Build.VERSION.SDK_INT
import android.os.Parcelable

inline fun <reified T : Parcelable> Intent.parcelable(key: String): T? = when {
SDK_INT >= 33 -> getParcelableExtra(key, T::class.java)
else -> @Suppress("DEPRECATION") getParcelableExtra(key) as? T
}
36 changes: 36 additions & 0 deletions common/src/main/res/drawable/ic_not_found.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="647.64dp"
android:height="632.17dp"
android:viewportWidth="647.64"
android:viewportHeight="632.17">
<path
android:pathData="M411.15,142.17L236.64,142.17a15.02,15.02 0,0 0,-15 15v387.85l-2,0.61 -42.81,13.11a8.01,8.01 0,0 1,-9.99 -5.31L39.5,137.48a8,8 0,0 1,5.31 -9.99l65.97,-20.2 191.25,-58.54 65.97,-20.2a7.99,7.99 0,0 1,9.99 5.3l32.55,106.32Z"
android:fillColor="@color/neutral_01"/>
<path
android:pathData="M449.23,140.17l-39.23,-128.14a16.99,16.99 0,0 0,-21.23 -11.28l-92.75,28.39L104.78,87.69l-92.75,28.4a17.02,17.02 0,0 0,-11.28 21.23l134.08,437.93a17.03,17.03 0,0 0,16.26 12.03,16.79 16.79,0 0,0 4.97,-0.75l63.58,-19.46 2,-0.62v-2.09l-2,0.61 -64.17,19.65a15.01,15.01 0,0 1,-18.73 -9.95l-134.07,-437.94a14.98,14.98 0,0 1,9.95 -18.73l92.75,-28.4 191.24,-58.54 92.75,-28.4a15.16,15.16 0,0 1,4.41 -0.66,15.01 15.01,0 0,1 14.32,10.61l39.05,127.56 0.62,2h2.08Z"
android:fillColor="@color/primary_dark_blue"/>
<path
android:pathData="M122.68,127.82a9.02,9.02 0,0 1,-8.61 -6.37l-12.88,-42.07a9,9 0,0 1,5.97 -11.24l175.94,-53.86a9.01,9.01 0,0 1,11.24 5.97l12.88,42.07a9.01,9.01 0,0 1,-5.97 11.24L125.31,127.43A8.98,8.98 0,0 1,122.68 127.82Z"
android:fillColor="#0064ff"/>
<path
android:pathData="M190.15,24.95m-20,0a20,20 0,1 1,40 0a20,20 0,1 1,-40 0"
android:fillColor="#0064ff"/>
<path
android:pathData="M190.15,24.95m-12.66,0a12.66,12.66 0,1 1,25.33 0a12.66,12.66 0,1 1,-25.33 0"
android:fillColor="#fff"/>
<path
android:pathData="M602.64,582.17h-338a8.51,8.51 0,0 1,-8.5 -8.5v-405a8.51,8.51 0,0 1,8.5 -8.5h338a8.51,8.51 0,0 1,8.5 8.5v405A8.51,8.51 0,0 1,602.64 582.17Z"
android:fillColor="@color/neutral_01"/>
<path
android:pathData="M447.14,140.17h-210.5a17.02,17.02 0,0 0,-17 17v407.8l2,-0.61v-407.19a15.02,15.02 0,0 1,15 -15L447.76,142.17ZM630.64,140.17h-394a17.02,17.02 0,0 0,-17 17v458a17.02,17.02 0,0 0,17 17h394a17.02,17.02 0,0 0,17 -17v-458A17.02,17.02 0,0 0,630.64 140.17ZM645.64,615.17a15.02,15.02 0,0 1,-15 15h-394a15.02,15.02 0,0 1,-15 -15v-458a15.02,15.02 0,0 1,15 -15h394a15.02,15.02 0,0 1,15 15Z"
android:fillColor="@color/primary_dark_blue"/>
<path
android:pathData="M525.64,184.17h-184a9.01,9.01 0,0 1,-9 -9v-44a9.01,9.01 0,0 1,9 -9h184a9.01,9.01 0,0 1,9 9v44A9.01,9.01 0,0 1,525.64 184.17Z"
android:fillColor="#0064ff"/>
<path
android:pathData="M433.64,105.17m-20,0a20,20 0,1 1,40 0a20,20 0,1 1,-40 0"
android:fillColor="#0064ff"/>
<path
android:pathData="M433.64,105.17m-12.18,0a12.18,12.18 0,1 1,24.36 0a12.18,12.18 0,1 1,-24.36 0"
android:fillColor="#fff"/>
</vector>
35 changes: 21 additions & 14 deletions common/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@
<!-- State Loading, Success, Error -->
<string name="host_url">be-finpro-ev4x53wgca-uc.a.run.app</string>
<string name="host_google_oauth">123526737477-411hc1qbsuiv0kd91jjb1rogaro6dpjm.apps.googleusercontent.com</string>
<string name="txt_not_null">Email tidak boleh NULL!</string>
<string name="txt_not_empty">Email tidak boleh kosong!</string>
<string name="txt_not_null">Tidak boleh NULL!</string>
<string name="txt_not_empty">Tidak boleh kosong!</string>
<string name="txt_not_email">Email tidak valid!</string>
<string name="txt_not_min_length_8">Password harus lebih dari 8 karakter!</string>
<string name="txt_not_lowercase_and_uppercase">Passwords harus mengandung lowercase dan uppercase!</string>
<string name="txt_not_valid_confirm_password">Konfirmasi password tidak sama dengan password sebelumnya!</string>
<string name="txt_loading_progress">Tunggu…</string>
<string name="txt_loading_progress_description">Jangan menunggu yang tidak pasti!</string>
<string name="txt_verify_successfully">Berhasil</string>
<string name="txt_verify_successfully_description">Verifikasi email berhasil!</string>
<string name="txt_verify_successfully_description">Verifikasi email berhasil! Silahkan masuk kembali di halaman Profil</string>
<string name="txt_forgot_password_successfully">Berhasil mengirim ke</string>
<string name="txt_register_has_beed_success">Verifikasi email sekarang!</string>
<!-- Login Layout-->
Expand Down Expand Up @@ -56,13 +56,13 @@
<item>Support Center</item>
<item>Settings</item>
</string-array>
<string name="txt_notification">Notification</string>
<string name="txt_account_customization">Account Customization</string>
<string name="txt_payment">Payment</string>
<string name="txt_coupon">My Coupon</string>
<string name="txt_support_center">Support Center</string>
<string name="txt_settings">Settings</string>
<string name="txt_logout">Logout</string>
<string name="txt_notification">Pemberitahuan</string>
<string name="txt_account_customization">Kustomisasi Akun</string>
<string name="txt_payment">Pembayaran</string>
<string name="txt_coupon">Kupon Saya</string>
<string name="txt_support_center">Pusat Dukungan</string>
<string name="txt_settings">Pengaturan</string>
<string name="txt_logout">Keluar</string>

<!-- List of icon preference -->
<string-array name="list_icon_preference">
Expand Down Expand Up @@ -96,10 +96,10 @@
<string name="txt_notifikasi_title">Notifikasi</string>

<!-- Menu Main - Navigation Component -->
<string name="menu_home">Home</string>
<string name="menu_home">Beranda</string>
<string name="menu_promo">Promo</string>
<string name="menu_order">Booking</string>
<string name="menu_profile">Profile</string>
<string name="menu_order">Pesanan</string>
<string name="menu_profile">Profil</string>

<!-- Home Page -->
<string name="searchbar_hint">Cari</string>
Expand Down Expand Up @@ -219,5 +219,12 @@
<item>6</item>
<item>7</item>
</string-array>
<string name="notification">Notification</string>
<string name="notification">Pemberitahuan</string>
<string name="txt_history_order">Riwayat Pemesanan</string>
<string name="txt_confirm_password">Ulang Password baru</string>
<string name="txt_title_menu_ticket_pesawat">Ticket Pesawat</string>
<string name="txt_title_menu_spesial_offers">Spesial Offers</string>
<string name="txt_title_menu_paket_diskon">Paket Diskon</string>
<string name="txt_title_menu_panduan_wisata">Panduan Wisata</string>
<string name="txt_not_found">Tidak ditemukan</string>
</resources>
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import id.synrgy6team2.bookingticket.domain.model.TicketRequestModel
import id.synrgy6team2.bookingticket.domain.model.TicketResponseModel

fun TicketRequestModel.toData(): TicketRequest {
return TicketRequest(classId, dataPerPage, passenger?.toData(), departureCode, sortBy, page, departureDateStart, arrivalCode, departureDateEnd, airlineId)
return TicketRequest(classId, 20, passenger?.toData(), departureCode, sortBy, 0, departureDateStart, arrivalCode, departureDateEnd, airlineId)
}

fun TicketRequestModel.Passenger.toData(): TicketRequest.Passenger {
Expand Down
1 change: 1 addition & 0 deletions domain/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
plugins {
id("com.android.library")
id("org.jetbrains.kotlin.android")
id("kotlin-parcelize")
}

android {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,24 @@
package id.synrgy6team2.bookingticket.domain.model

import android.os.Parcelable
import kotlinx.parcelize.Parcelize

@Parcelize
data class TicketRequestModel(
val classId: Int? = null,
val dataPerPage: Int? = null,
val passenger: Passenger? = null,
val departureCode: String? = null,
val sortBy: List<String?>? = null,
val page: Int? = null,
val departureDateStart: String? = null,
val arrivalCode: String? = null,
val departureDateEnd: String? = null,
val airlineId: List<Long?>? = null
) {
) : Parcelable {
@Parcelize
data class Passenger(
val adult: Int? = null,
val infant: Int? = null,
val child: Int? = null
)
) : Parcelable
}

1 change: 1 addition & 0 deletions presentation/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ plugins {
id("androidx.navigation.safeargs.kotlin")
id("com.google.devtools.ksp")
id("com.google.dagger.hilt.android")
id("kotlin-parcelize")
}

android {
Expand Down
18 changes: 9 additions & 9 deletions presentation/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,17 @@
android:exported="false" />
<activity
android:name=".login.LoginActivity"
android:exported="false">
</activity>
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.DEFAULT" />
Expand All @@ -49,15 +58,6 @@
<data android:pathPattern="/api/register/verification/*" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".forgotpassword.LupaPasswordActivity"
android:exported="false" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,22 @@ import id.synrgy6team2.bookingticket.presentation.dashboard.DashboardRecomendedA
import id.synrgy6team2.bookingticket.presentation.history.HistoryChildAdapter
import id.synrgy6team2.bookingticket.presentation.notification.NotificationAdapter
import id.synrgy6team2.bookingticket.presentation.profile.ProfileAdapter
import id.synrgy6team2.bookingticket.presentation.searchticket.AirportAdapter
import id.synrgy6team2.bookingticket.presentation.searchticket.TypeFlightAdapter

@Module
@InstallIn(ActivityComponent::class)
object AdapterModule {
@Provides
fun provideAirportAdapter(): AirportAdapter {
return AirportAdapter()
}

@Provides
fun provideTypeFlightAdapter(): TypeFlightAdapter {
return TypeFlightAdapter()
}

@Provides
fun provideDashboardMainMenuAdapter(): DashboardMainMenuAdapter {
return DashboardMainMenuAdapter()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,26 @@
package id.synrgy6team2.bookingticket.presentation

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import id.synrgy6team2.bookingticket.presentation.databinding.ActivityBookingBinding

class BookingActivity : AppCompatActivity() {

private lateinit var binding: ActivityBookingBinding

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_booking)
binding = ActivityBookingBinding.inflate(layoutInflater)
setContentView(binding.root)

binding.materialToolbar.setNavigationOnClickListener {
finish()
}

binding.btnContinue.setOnClickListener {
val intent = Intent(this, PaymentActivity::class.java)
startActivity(intent)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,20 @@ package id.synrgy6team2.bookingticket.presentation

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import id.synrgy6team2.bookingticket.presentation.databinding.ActivityBookingBinding
import id.synrgy6team2.bookingticket.presentation.databinding.ActivityBookingDetailBinding

class BookingDetailActivity : AppCompatActivity() {

private lateinit var binding: ActivityBookingDetailBinding

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_booking_detail)
binding = ActivityBookingDetailBinding.inflate(layoutInflater)
setContentView(binding.root)

binding.topAppBar.setNavigationOnClickListener {
finish()
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package id.synrgy6team2.bookingticket.presentation

import android.content.DialogInterface
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
Expand All @@ -13,6 +14,10 @@ import androidx.navigation.ui.setupWithNavController
import com.google.android.gms.auth.api.signin.GoogleSignIn
import com.google.android.gms.auth.api.signin.GoogleSignInOptions
import dagger.hilt.android.AndroidEntryPoint
import id.synrgy6team2.bookingticket.common.State
import id.synrgy6team2.bookingticket.common.StyleType
import id.synrgy6team2.bookingticket.common.createMessageDialog
import id.synrgy6team2.bookingticket.common.onToast
import id.synrgy6team2.bookingticket.presentation.databinding.ActivityMainBinding
import id.synrgy6team2.bookingticket.presentation.login.LoginActivity

Expand All @@ -21,15 +26,48 @@ class MainActivity : AppCompatActivity(), NavController.OnDestinationChangedList

private lateinit var binding: ActivityMainBinding
private lateinit var navController: NavController
private val viewModel: MainViewModel by viewModels()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
bindObserver()
bindView()
}

private fun bindObserver() {
viewModel.verify.observe(this) { state ->
when (state) {
is State.Loading -> {
onToast(
getString(id.synrgy6team2.bookingticket.common.R.string.txt_loading_progress),
getString(id.synrgy6team2.bookingticket.common.R.string.txt_loading_progress_description),
StyleType.INFO
)
}
is State.Success -> {
createMessageDialog(
getString(id.synrgy6team2.bookingticket.common.R.string.txt_verify_successfully),
getString(id.synrgy6team2.bookingticket.common.R.string.txt_verify_successfully_description)
) { dialogInterface: DialogInterface -> dialogInterface.dismiss() }
}
is State.Error -> {
onToast(
"Error!",
state.message,
StyleType.ERROR
)
}
}
}
}

private fun bindView() {
intent.data?.let { uri ->
viewModel.verify(uri.lastPathSegment)
}

val host = supportFragmentManager.findFragmentById(R.id.container_view) as NavHostFragment
navController = host.navController
navController.addOnDestinationChangedListener(this)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package id.synrgy6team2.bookingticket.presentation

import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
import id.synrgy6team2.bookingticket.common.LiveEvent
import id.synrgy6team2.bookingticket.common.State
import id.synrgy6team2.bookingticket.domain.repository.AuthenticationUseCase
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import javax.inject.Inject

@HiltViewModel
class MainViewModel @Inject constructor(
private val authenticationUseCase: AuthenticationUseCase
) : ViewModel() {
private var _verify: LiveEvent<State<Unit>> = LiveEvent()

val verify: LiveData<State<Unit>> = _verify

fun verify(token: String?) {
val dataToken = token ?: "-1"
viewModelScope.launch {
try {
_verify.postValue(State.Loading())
withContext(Dispatchers.IO) {
authenticationUseCase.executeVerify(dataToken.toInt())
}
_verify.postValue(State.Success(Unit))
} catch (e: Exception) {
_verify.postValue(State.Error(null, e.message.toString()))
}
}
}
}
Loading

0 comments on commit a6c9137

Please sign in to comment.