Skip to content

Commit

Permalink
Finish
Browse files Browse the repository at this point in the history
  • Loading branch information
anugrahdev committed May 22, 2020
1 parent ea16fe6 commit 8cf1f0b
Show file tree
Hide file tree
Showing 34 changed files with 1,292 additions and 223 deletions.
6 changes: 6 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -104,9 +104,15 @@ dependencies {
implementation 'com.jakewharton.threetenabp:threetenabp:1.0.3'

//Material dialog
implementation 'com.afollestad.material-dialogs:core:3.3.0'
implementation 'com.afollestad.material-dialogs:input:3.3.0'

implementation 'com.facebook.stetho:stetho:1.5.1'


implementation 'com.karumi:dexter:6.1.2'
implementation 'com.github.varunest:sparkbutton:1.0.6'
debugImplementation 'com.idescout.sql:sqlscout-server:4.1'
releaseImplementation 'com.idescout.sql:sqlscout-server-noop:4.1'

}
4 changes: 2 additions & 2 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-sdk tools:overrideLibrary="com.google.zxing.client.android" />
<uses-sdk tools:overrideLibrary="com.google.zxing.fclient.android" />

<application

android:hardwareAccelerated="true"
android:allowBackup="true"
android:name=".MyApplication"
android:icon="@mipmap/ic_launcher"
android:icon="@drawable/ic_parcel"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_security_config"
android:usesCleartextTraffic="true"
Expand Down
4 changes: 4 additions & 0 deletions app/src/main/java/com/anugrahdev/app/ikurir/MyApplication.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@ import com.anugrahdev.app.ikurir.data.db.AppDatabase
import com.anugrahdev.app.ikurir.data.network.ApiService
import com.anugrahdev.app.ikurir.data.repositories.CostRepository
import com.anugrahdev.app.ikurir.data.repositories.WaybillRepository
import com.anugrahdev.app.ikurir.preferences.PreferenceProvider
import com.anugrahdev.app.ikurir.ui.shipmentcost.CostViewModelFactory
import com.anugrahdev.app.ikurir.ui.trackwaybill.WaybillViewModelFactory
import com.facebook.stetho.Stetho
import com.jakewharton.threetenabp.AndroidThreeTen
import org.kodein.di.Kodein
import org.kodein.di.KodeinAware
Expand All @@ -20,6 +22,7 @@ class MyApplication: Application(), KodeinAware {
override val kodein = Kodein.lazy {
import(androidXModule(this@MyApplication))
bind() from singleton { ApiService() }
bind() from singleton { PreferenceProvider(instance()) }
bind() from singleton { AppDatabase(instance()) }
bind() from singleton { CostRepository(instance()) }
bind() from singleton { WaybillRepository(instance(),instance()) }
Expand All @@ -31,6 +34,7 @@ class MyApplication: Application(), KodeinAware {
override fun onCreate() {
super.onCreate()
AndroidThreeTen.init(this);
Stetho.initializeWithDefaults(this);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,28 @@ interface WaybillDataDao {
@Delete
suspend fun delete(waybilldata: WaybillData)

@Query("SELECT * FROM WaybillData WHERE type=='history'")
@Query("SELECT COUNT(*) FROM WaybillData WHERE waybillNumber LIKE :waybillNumber AND saved==1")
fun getSearchWaybill(waybillNumber:String): Boolean

@Query("SELECT * FROM WaybillData WHERE waybillNumber LIKE :waybillNumber AND saved==1")
fun getSearchWaybillData(waybillNumber:String): WaybillData

@Query("UPDATE WaybillData SET trackTime = :trackTime, status_status = :status, saved=:saved WHERE waybillNumber ==:waybillNumber")
suspend fun updateSaved(trackTime:String, status: String, saved:Boolean, waybillNumber: String)

@Query("SELECT * FROM WaybillData WHERE history == 1")
fun getHistoryWaybill(): LiveData<List<WaybillData>>

@Query("SELECT * FROM WaybillData WHERE type=='saved' AND status_status==:status")
@Query("SELECT * FROM WaybillData WHERE saved== 1 AND status_status==:status")
fun getSavedWaybill(status:String): LiveData<List<WaybillData>>

@Query("SELECT * FROM WaybillData WHERE type=='saved'")
@Query("SELECT * FROM WaybillData WHERE saved== 1")
fun getAllSavedWaybill(): LiveData<List<WaybillData>>

@Update
suspend fun update(waybilldata: WaybillData)

@Query("UPDATE WaybillData SET history=0")
suspend fun clearHistory()

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import androidx.room.PrimaryKey

const val waybill_number = " ";

@Entity(primaryKeys = ["waybillNumber","type"])
@Entity(primaryKeys = ["waybillNumber"])
data class WaybillData constructor(
@Embedded(prefix = "courier_")
var courier: Courier,
Expand All @@ -22,7 +22,9 @@ data class WaybillData constructor(

){
var waybillNumber: String = waybill_number
var type:String = "history"
var history:Boolean = true
var saved:Boolean = false
var trackTime:String = ""
var savedTime:String = ""
var waybillName = ""

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,16 @@ class WaybillRepository (private val api:ApiService, private val db:AppDatabase)

suspend fun deleteSavedWaybill(waybillData: WaybillData) = db.getWaybillDao().delete(waybillData)

suspend fun update(waybillData: WaybillData) = db.getWaybillDao().update(waybillData)

fun getSearchWaybill(waybillNumber:String) = db.getWaybillDao().getSearchWaybill(waybillNumber)

fun getSearchWaybillData(waybillNumber:String) = db.getWaybillDao().getSearchWaybillData(waybillNumber)

suspend fun updateSaved(trackTime:String, status:String, saved:Boolean, waybillNumber: String)
= db.getWaybillDao().updateSaved(trackTime, status, saved, waybillNumber)

suspend fun clearHistory() = db.getWaybillDao().clearHistory()


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.anugrahdev.app.ikurir.preferences

import android.content.Context
import android.content.SharedPreferences
import androidx.preference.PreferenceManager

private const val KEY_LANGUAGE = "key_language"

class PreferenceProvider(context: Context) {

private val appContext = context.applicationContext

private val preference: SharedPreferences
get() = PreferenceManager.getDefaultSharedPreferences(appContext)

fun setLanguage(language:String){
preference.edit().putString(
KEY_LANGUAGE,
language
).apply()
}

fun getLanguage():String?{
return preference.getString(KEY_LANGUAGE, "Bahasa Indonesia")
}



}
33 changes: 31 additions & 2 deletions app/src/main/java/com/anugrahdev/app/ikurir/ui/MainActivity.kt
Original file line number Diff line number Diff line change
@@ -1,17 +1,46 @@
package com.anugrahdev.app.ikurir.ui

import android.content.res.Configuration
import android.content.res.Resources
import android.os.Build
import android.os.Bundle
import android.util.DisplayMetrics
import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.Navigation
import com.anugrahdev.app.ikurir.R
import com.anugrahdev.app.ikurir.preferences.PreferenceProvider
import java.util.*

class MainActivity : AppCompatActivity() {

class MainActivity : AppCompatActivity() {
private lateinit var prefs: PreferenceProvider
var lang:String="id"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
prefs = PreferenceProvider(this)
setContentView(R.layout.main_activity)
when(prefs.getLanguage()){
"Bahasa Indonesia" -> lang="id"
"English" -> lang="en"
}
setAppLocale(lang);


}

private fun setAppLocale(localeCode: String) {
val resources: Resources = resources
val dm: DisplayMetrics = resources.getDisplayMetrics()
val config: Configuration = resources.getConfiguration()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
config.setLocale(Locale(localeCode.toLowerCase()))
} else {
config.locale = Locale(localeCode.toLowerCase())
}
resources.updateConfiguration(config, dm)
}

override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)

}
}
35 changes: 17 additions & 18 deletions app/src/main/java/com/anugrahdev/app/ikurir/ui/home/HomeFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,26 @@ package com.anugrahdev.app.ikurir.ui.home

import android.content.Intent
import android.os.Bundle
import android.text.format.DateFormat
import android.view.KeyEvent
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.navigation.Navigation
import androidx.navigation.fragment.findNavController

import com.anugrahdev.app.ikurir.R
import com.anugrahdev.app.ikurir.utils.snackbar
import com.google.zxing.integration.android.IntentIntegrator
import kotlinx.android.synthetic.main.home_fragment.*
import java.util.*


/**
* A simple [Fragment] subclass.
*/
class HomeFragment : Fragment() {

var today: String? = null
companion object {
fun newInstance() = HomeFragment()
}
Expand All @@ -35,25 +36,15 @@ class HomeFragment : Fragment() {

override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
val date = Date()
val cal: Calendar = Calendar.getInstance()
cal.time = date
val hour: Int = cal.get(Calendar.HOUR_OF_DAY)

if (hour in 1..10){
tv_greet.text = "Selamat Pagi"
}else if(hour in 11..15){
tv_greet.text = "Selamat Siang"
}else if(hour in 15..16){
tv_greet.text = "Selamat Sore"
}else{
tv_greet.text = "Selamat Malam"
}

iv_scan.setOnClickListener {
initScanner()
}

val dateNow = Calendar.getInstance().time
today = DateFormat.format("EEEE", dateNow) as String
getToday()

et_waybill.setOnKeyListener(View.OnKeyListener { v, keyCode, event ->
if (keyCode == KeyEvent.KEYCODE_ENTER && event.action == KeyEvent.ACTION_UP) {
//Perform Code
Expand All @@ -65,11 +56,18 @@ class HomeFragment : Fragment() {

cv_cost.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_homeFragment_to_costFragment, null))
cv_track.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_homeFragment_to_trackWaybillFragment, null))
// cv_nearby.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_homeFragment_to_nearbyFragment, null))
cv_setting.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_homeFragment_to_settingFragment, null))
cv_myshipment.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_homeFragment_to_myShipmentFragment, null))

}

private fun getToday() {
val date = Calendar.getInstance().time
val tanggal = DateFormat.format("d MMMM yyyy", date) as String
val formatFix: String = today.toString() + ", " + tanggal
tvDate.setText(formatFix)
}

private fun initScanner(){
val integrator = IntentIntegrator.forSupportFragment(this)
integrator.setOrientationLocked(false)
Expand All @@ -84,6 +82,7 @@ class HomeFragment : Fragment() {
root_layout.snackbar("Cancelled")
}else{
gotoTrack(result.contents.toString())

}
}else{
super.onActivityResult(requestCode, resultCode, data)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,10 @@ class DeliveredFragment : Fragment(), KodeinAware {
adapter = historyitemAdapter.also {
it.setOnItemClickListener{ wbData ->
MaterialAlertDialogBuilder(requireContext())
.setTitle("Lacak Resi Ini?")
.setTitle(getString(R.string.track_this))
.setIcon(R.drawable.ic_parcel)
.setMessage(wbData.waybillNumber)
.setPositiveButton("YA"){ dialog, which ->
.setPositiveButton("YES"){ dialog, which ->
val bundle = Bundle().apply {
putString("waybillNumber", wbData.waybillNumber)
putString("courier", wbData.courier.code)
Expand All @@ -76,8 +76,10 @@ class DeliveredFragment : Fragment(), KodeinAware {

private fun getDeliveredShipment(){
viewModel.getSavedWaybill("DELIVERED").observe(viewLifecycleOwner, Observer {
if (it.isEmpty()){
cv_notfound.visibility = View.VISIBLE
}
recycler_view_delivered.apply {
//
val sortedHistory = it.sortedByDescending { sortBy->
sortBy.savedTime
}
Expand All @@ -100,10 +102,21 @@ class DeliveredFragment : Fragment(), KodeinAware {
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
val position = viewHolder.adapterPosition
val waybill = historyitemAdapter.differ.currentList[position]
viewModel.deleteSavedWaybill(waybill)
if (waybill.history){
waybill.saved = false
viewModel.updateWaybill(waybill)

}else if(!waybill.history){
viewModel.deleteSavedWaybill(waybill)
}
view?.rootView?.let { Snackbar.make(it, "Successfully remove waybill data", Snackbar.LENGTH_LONG).apply {
setAction("Undo"){
viewModel.saveWaybill(waybill)
if (!waybill.history){
viewModel.saveWaybill(waybill)
}else{
waybill.saved = true
viewModel.updateWaybill(waybill)
}
}.show()
} }
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,10 @@ class OnProcessFragment : Fragment() , KodeinAware {
adapter = historyitemAdapter.also {
it.setOnItemClickListener{ wbData ->
MaterialAlertDialogBuilder(requireContext())
.setTitle("Lacak Resi Ini?")
.setTitle(getString(R.string.track_this))
.setIcon(R.drawable.ic_parcel)
.setMessage(wbData.waybillNumber)
.setPositiveButton("YA"){ dialog, which ->
.setPositiveButton("YES"){ dialog, which ->
val bundle = Bundle().apply {
putString("waybillNumber", wbData.waybillNumber)
putString("courier", wbData.courier.code)
Expand All @@ -85,8 +85,10 @@ class OnProcessFragment : Fragment() , KodeinAware {

private fun getOnProcessShipment(){
viewModel.getSavedWaybill("ON PROGRESS").observe(viewLifecycleOwner, Observer {
if (it.isEmpty()){
cv_notfound.visibility = View.VISIBLE
}
recycler_view_onprocess.apply {
//
val sortedHistory = it.sortedByDescending { sortBy->
sortBy.savedTime
}
Expand All @@ -109,10 +111,21 @@ class OnProcessFragment : Fragment() , KodeinAware {
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
val position = viewHolder.adapterPosition
val waybill = historyitemAdapter.differ.currentList[position]
viewModel.deleteSavedWaybill(waybill)
if (waybill.history){
waybill.saved = false
viewModel.updateWaybill(waybill)

}else if(!waybill.history){
viewModel.deleteSavedWaybill(waybill)
}
view?.rootView?.let { Snackbar.make(it, "Successfully remove waybill data", Snackbar.LENGTH_LONG).apply {
setAction("Undo"){
viewModel.saveWaybill(waybill)
if (!waybill.history){
viewModel.saveWaybill(waybill)
}else{
waybill.saved = true
viewModel.updateWaybill(waybill)
}
}.show()
} }
}
Expand Down
Loading

0 comments on commit 8cf1f0b

Please sign in to comment.