diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d5df3c05c5c719ea7e646e892b520d138135fd98..dec08962cd350dc3b3f34143222c704e3824535e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -11,24 +11,26 @@ <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" /> - <uses-permission android:name="android.permission.CAMERA"/> + <uses-permission android:name="android.permission.CAMERA" /> + <uses-sdk tools:overrideLibrary="com.google.zxing.client.android" /> + <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-feature android:name="android.hardware.camera" - android:required="false"/> + android:required="false" /> <application android:name=".BondowowoApp" android:allowBackup="true" - android:requestLegacyExternalStorage="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" + android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.BondowosoATM" @@ -42,7 +44,7 @@ android:exported="false" android:theme="@style/AppTheme.NoActionBar" /> <activity - android:name=".LoginActivity" + android:name=".ui.login.LoginActivity" android:exported="true" android:theme="@style/AppTheme.NoActionBar"> <intent-filter> @@ -51,11 +53,9 @@ </intent-filter> </activity> <activity - android:name="com.journeyapps.barcodescanner.CaptureActivity" - android:screenOrientation="fullSensor" - tools:replace="screenOrientation" /> - <activity android:name=".ui.settings.ExportToFileActivity" /> - <activity android:name=".ui.settings.SendEmailActivity" /> + android:name=".ui.twibbon.TwibbonActivity" + android:exported="false" + android:theme="@style/AppTheme.NoActionBar" /> <provider android:name="androidx.core.content.FileProvider" @@ -68,8 +68,6 @@ </provider> - - </application> <queries> diff --git a/app/src/main/java/com/atm/bondowowo/BondowowoApp.kt b/app/src/main/java/com/atm/bondowowo/BondowowoApp.kt index 415865581a1f17ee8855bb59a55ae2c186a6c9b1..5dc20acc2da7fd59529eb391d63e88e20917ae91 100644 --- a/app/src/main/java/com/atm/bondowowo/BondowowoApp.kt +++ b/app/src/main/java/com/atm/bondowowo/BondowowoApp.kt @@ -4,6 +4,7 @@ import android.app.Activity import android.app.Application import android.content.Context import android.content.Intent +import com.atm.bondowowo.ui.login.LoginActivity import com.atm.bondowowo.utils.BackgroundJWTChecker import com.atm.bondowowo.utils.UserPreferencesUtil diff --git a/app/src/main/java/com/atm/bondowowo/MainActivity.kt b/app/src/main/java/com/atm/bondowowo/MainActivity.kt index 13fd9a1e61652d4c73eb00ec1bf34df5468cdc56..f916c79933f5a4bd88624d866e566e20a05f3ed4 100644 --- a/app/src/main/java/com/atm/bondowowo/MainActivity.kt +++ b/app/src/main/java/com/atm/bondowowo/MainActivity.kt @@ -4,13 +4,12 @@ import android.content.Intent import android.os.Bundle import android.widget.Toast import androidx.appcompat.app.AppCompatActivity -import androidx.lifecycle.Observer import androidx.navigation.findNavController import androidx.navigation.fragment.NavHostFragment import androidx.navigation.ui.setupWithNavController import com.atm.bondowowo.databinding.ActivityMainBinding +import com.atm.bondowowo.ui.login.LoginActivity import com.atm.bondowowo.utils.DialogHelper -import com.atm.bondowowo.utils.NetworkHelper import com.atm.bondowowo.utils.NetworkStateLiveData import com.atm.bondowowo.utils.NetworkUtils import kotlinx.coroutines.CoroutineScope diff --git a/app/src/main/java/com/atm/bondowowo/LoginActivity.kt b/app/src/main/java/com/atm/bondowowo/ui/login/LoginActivity.kt similarity index 97% rename from app/src/main/java/com/atm/bondowowo/LoginActivity.kt rename to app/src/main/java/com/atm/bondowowo/ui/login/LoginActivity.kt index 02fa599ad0987f5469b6b9ac88c8e03125cf6d42..479537a5dff6eedf3b1283844b12694b1eaa4281 100644 --- a/app/src/main/java/com/atm/bondowowo/LoginActivity.kt +++ b/app/src/main/java/com/atm/bondowowo/ui/login/LoginActivity.kt @@ -1,4 +1,4 @@ -package com.atm.bondowowo +package com.atm.bondowowo.ui.login import android.content.Context import android.content.Intent @@ -8,6 +8,8 @@ import android.widget.EditText import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.Observer +import com.atm.bondowowo.MainActivity +import com.atm.bondowowo.R import com.atm.bondowowo.data.model.LoginRequest import com.atm.bondowowo.utils.DialogHelper import com.atm.bondowowo.utils.NetworkStateLiveData diff --git a/app/src/main/java/com/atm/bondowowo/ui/scan/ScanFragment.kt b/app/src/main/java/com/atm/bondowowo/ui/scan/ScanFragment.kt index ce83385dda48152622b0ff4d94614de1d10680f6..760f78a17a8c9f837a714d41f0a7a558ecd9f047 100644 --- a/app/src/main/java/com/atm/bondowowo/ui/scan/ScanFragment.kt +++ b/app/src/main/java/com/atm/bondowowo/ui/scan/ScanFragment.kt @@ -22,6 +22,7 @@ import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment import com.atm.bondowowo.R +import com.atm.bondowowo.ui.twibbon.TwibbonActivity import com.budiyev.android.codescanner.CodeScanner import com.budiyev.android.codescanner.CodeScannerView import com.budiyev.android.codescanner.DecodeCallback @@ -47,7 +48,11 @@ class ScanFragment : Fragment() { private val CAMERA_PERMISSION_REQUEST_CODE = 100 private lateinit var codeScanner: CodeScanner - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { return inflater.inflate(R.layout.fragment_scan, container, false) } @@ -61,21 +66,43 @@ class ScanFragment : Fragment() { openGallery() } + val btnTwibbon = view.findViewById<Button>(R.id.btn_filter) + btnTwibbon.setOnClickListener { + val intent = Intent(requireContext(), TwibbonActivity::class.java) + startActivity(intent) + } + // Check camera permission - if (ContextCompat.checkSelfPermission(requireContext(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { - ActivityCompat.requestPermissions(requireActivity(), arrayOf(Manifest.permission.CAMERA), CAMERA_PERMISSION_REQUEST_CODE) + if (ContextCompat.checkSelfPermission( + requireContext(), + Manifest.permission.CAMERA + ) != PackageManager.PERMISSION_GRANTED + ) { + ActivityCompat.requestPermissions( + requireActivity(), + arrayOf(Manifest.permission.CAMERA), + CAMERA_PERMISSION_REQUEST_CODE + ) } else { initializeCodeScanner(scannerView) } // for file - if (ContextCompat.checkSelfPermission(requireContext(),Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) { + if (ContextCompat.checkSelfPermission( + requireContext(), + Manifest.permission.WRITE_EXTERNAL_STORAGE + ) == PackageManager.PERMISSION_DENIED + ) { ActivityCompat.requestPermissions( requireActivity(), arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), WRITE_EXTERNAL_STORAGE_PERMISSION_CODE ) - } else if (ContextCompat.checkSelfPermission(requireContext(), Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) { + } else if (ContextCompat.checkSelfPermission( + requireContext(), + Manifest.permission.READ_EXTERNAL_STORAGE + ) == PackageManager.PERMISSION_DENIED + ) { ActivityCompat.requestPermissions( requireActivity(), arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE), @@ -84,14 +111,19 @@ class ScanFragment : Fragment() { } } - override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) { + override fun onRequestPermissionsResult( + requestCode: Int, + permissions: Array<out String>, + grantResults: IntArray + ) { super.onRequestPermissionsResult(requestCode, permissions, grantResults) if (requestCode == CAMERA_PERMISSION_REQUEST_CODE) { if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) { val scannerView = requireView().findViewById<CodeScannerView>(R.id.scanner) initializeCodeScanner(scannerView) } else { - Toast.makeText(requireContext(), "Camera permission denied", Toast.LENGTH_SHORT).show() + Toast.makeText(requireContext(), "Camera permission denied", Toast.LENGTH_SHORT) + .show() } } else if (requestCode == WRITE_EXTERNAL_STORAGE_PERMISSION_CODE) { if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_DENIED) { @@ -120,17 +152,19 @@ class ScanFragment : Fragment() { codeScanner.decodeCallback = DecodeCallback { requireActivity().runOnUiThread { - val contents = it.text + val contents = it.text tvResult.text = contents Toast.makeText(requireContext(), "Scanned: ${it.text}", Toast.LENGTH_LONG).show() val scanOptions = arrayOf<String>("Ya", "Tidak") AlertDialog.Builder(requireContext()) .setTitle("Scan Berhasil!\nApakah ingin mengulagi proses Scan?") - .setItems(scanOptions) {_, which -> when (which) { - 0 -> codeScanner.startPreview() - 1 -> setToTransaction() - } } + .setItems(scanOptions) { _, which -> + when (which) { + 0 -> codeScanner.startPreview() + 1 -> setToTransaction() + } + } .create().show() } } @@ -203,10 +237,12 @@ class ScanFragment : Fragment() { val scanOptions = arrayOf<String>("Ya", "Tidak") AlertDialog.Builder(requireContext()) .setTitle("Scan Berhasil!\nApakah ingin mengulagi proses Scan?") - .setItems(scanOptions) {_, which -> when (which) { - 0 -> codeScanner.startPreview() - 1 -> setToTransaction() - } } + .setItems(scanOptions) { _, which -> + when (which) { + 0 -> codeScanner.startPreview() + 1 -> setToTransaction() + } + } .create().show() } catch (e: Exception) { diff --git a/app/src/main/java/com/atm/bondowowo/ui/settings/SettingsFragment.kt b/app/src/main/java/com/atm/bondowowo/ui/settings/SettingsFragment.kt index e8b872e867986ffc20a6c590754d210b4d74752e..39aeb2ee1e2c323f12e29671c4f2c98407aa7b34 100644 --- a/app/src/main/java/com/atm/bondowowo/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/com/atm/bondowowo/ui/settings/SettingsFragment.kt @@ -2,14 +2,13 @@ package com.atm.bondowowo.ui.settings import android.content.Intent import android.os.Bundle -import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Button import android.widget.LinearLayout import androidx.fragment.app.Fragment -import com.atm.bondowowo.LoginActivity +import com.atm.bondowowo.ui.login.LoginActivity import com.atm.bondowowo.R import com.atm.bondowowo.data.local.database.AppDatabase import com.atm.bondowowo.utils.ExportToFileUtil diff --git a/app/src/main/java/com/atm/bondowowo/ui/twibbon/TwibbonActivity.kt b/app/src/main/java/com/atm/bondowowo/ui/twibbon/TwibbonActivity.kt new file mode 100644 index 0000000000000000000000000000000000000000..491996834f03ddbe70d7928b933bd0d1acced234 --- /dev/null +++ b/app/src/main/java/com/atm/bondowowo/ui/twibbon/TwibbonActivity.kt @@ -0,0 +1,15 @@ +package com.atm.bondowowo.ui.twibbon + +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import com.atm.bondowowo.databinding.ActivityTwibbonBinding + +class TwibbonActivity : AppCompatActivity() { + + private lateinit var binding: ActivityTwibbonBinding + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = ActivityTwibbonBinding.inflate(layoutInflater) + setContentView(binding.root) + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index f4c3510fa82e5c378fba2e78c7d49147ef853d83..59a22689342126baef6bac0b428e3a623097f074 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -36,7 +36,7 @@ <EditText android:id="@+id/etPassword" android:layout_width="0dp" - android:layout_height="75dp" + android:layout_height="60dp" android:layout_marginTop="16dp" android:hint="Enter your password" android:inputType="textPassword" diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 4bfc45dad778a0f3d31a3eeceb4779c8b33424a7..b0448f68a450ea466b1092a4b7ee86444cd22b0b 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,21 +1,29 @@ <?xml version="1.0" encoding="utf-8"?> -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" +<androidx.constraintlayout.widget.ConstraintLayout + xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" - android:layout_height="match_parent" - android:orientation="vertical"> + android:layout_height="match_parent"> <androidx.fragment.app.FragmentContainerView android:id="@+id/nav_host_fragment" android:name="androidx.navigation.fragment.NavHostFragment" - android:layout_width="match_parent" + android:layout_width="0dp" android:layout_height="0dp" - android:layout_weight="1" app:defaultNavHost="true" + app:layout_constraintBottom_toTopOf="@+id/bottom_nav_layout" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" app:navGraph="@navigation/nav_graph" /> <include android:id="@+id/bottom_nav_layout" - layout="@layout/bottom_navigation_layout" /> + layout="@layout/bottom_navigation_layout" + android:layout_width="0dp" + android:layout_height="wrap_content" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" /> -</LinearLayout> \ No newline at end of file +</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_twibbon.xml b/app/src/main/res/layout/activity_twibbon.xml new file mode 100644 index 0000000000000000000000000000000000000000..7f340509eba3d6a65692f904e10a6a85d05751e6 --- /dev/null +++ b/app/src/main/res/layout/activity_twibbon.xml @@ -0,0 +1,62 @@ +<?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" + tools:context="com.atm.bondowowo.ui.scan.ScanFragment"> + + <com.google.android.material.appbar.AppBarLayout + android:id="@+id/header" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" + app:layout_constraintTop_toTopOf="parent"> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:layout_marginVertical="8dp" + android:text="@string/twibbon" + android:textColor="@color/black" + android:textSize="20sp" + android:textStyle="bold" /> + </com.google.android.material.appbar.AppBarLayout> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_marginTop="40dp" + android:orientation="vertical" + tools:contex="com.atm.bondowowo.ui.scan.ScanFragment"> + + <com.budiyev.android.codescanner.CodeScannerView + android:id="@+id/scanner" + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1" + app:autoFocusButtonVisible="true" /> + + + <Button + android:id="@+id/btn_upload" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:text="Cekrek" /> + + <TextView + android:id="@+id/tv_result" + android:layout_width="match_parent" + android:layout_height="40dp" + android:layout_marginTop="1dp" + android:text="..." + android:textAlignment="center" + android:textColor="#A92B" + android:textSize="20sp" /> + + </LinearLayout> + + +</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/app/src/main/res/layout/bottom_navigation_layout.xml b/app/src/main/res/layout/bottom_navigation_layout.xml index ea6f4c7ba26a0a9950874998902286b23ffb6de9..0b990ca7fcc3206843173070732708f77b1a4bc8 100644 --- a/app/src/main/res/layout/bottom_navigation_layout.xml +++ b/app/src/main/res/layout/bottom_navigation_layout.xml @@ -3,7 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/bottomNavigation" android:layout_width="match_parent" - android:layout_height="70dp" + android:layout_height="60dp" android:background="@color/white" app:itemIconTint="@color/bottom_nav_icon_color" app:itemTextColor="@color/bottom_nav_text_color" diff --git a/app/src/main/res/layout/fragment_scan.xml b/app/src/main/res/layout/fragment_scan.xml index b55566c2f84d7bbc7d926f81ab12fc799c37e21b..00efe4bac86b3c7fa24942af40dbc75d4ff221ed 100644 --- a/app/src/main/res/layout/fragment_scan.xml +++ b/app/src/main/res/layout/fragment_scan.xml @@ -24,45 +24,56 @@ android:textStyle="bold" /> </com.google.android.material.appbar.AppBarLayout> - <LinearLayout - xmlns:android="http://schemas.android.com/apk/res/android" + <LinearLayout 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_marginTop="40dp" android:layout_height="match_parent" + android:layout_marginTop="40dp" android:orientation="vertical" tools:contex="com.atm.bondowowo.ui.scan.ScanFragment"> <com.budiyev.android.codescanner.CodeScannerView android:id="@+id/scanner" android:layout_width="match_parent" - android:layout_height="600dp" - app:autoFocusButtonVisible="true"/> + android:layout_height="0dp" + android:layout_weight="1" + app:autoFocusButtonVisible="true" /> - <Button - android:id="@+id/btn_upload" - android:layout_width="wrap_content" + <LinearLayout + android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_gravity="center" android:layout_marginTop="5dp" + android:gravity="center" + android:orientation="horizontal"> - android:text="Upload File" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintEnd_toEndOf="parent" /> + <Button + android:id="@+id/btn_upload" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginEnd="10dp" + android:text="@string/upload_file" /> + + <Button + android:id="@+id/btn_filter" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="10dp" + android:text="@string/use_filter" /> + + </LinearLayout> <TextView android:id="@+id/tv_result" android:layout_width="match_parent" - android:layout_height="wrap_content" + android:layout_height="40dp" android:layout_marginTop="1dp" android:text="..." android:textAlignment="center" - android:textSize="20sp" - android:textColor="#A92B"/> + android:textColor="#A92B" + android:textSize="20sp" /> </LinearLayout> - </androidx.constraintlayout.widget.ConstraintLayout> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8f1fe466582ed06765f13edd885a7a4c34aba4bf..955d36d4a1dd24af1ad955727c7b75fa294f5501 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -7,6 +7,9 @@ <string name="add">+</string> <string name="capture">Capture</string> <string name="no_data_to_display">Empty :( Please fill transaction</string> + <string name="upload_file">Upload File</string> + <string name="use_filter">Use Filter</string> + <string name="twibbon">Twibbon</string> <string-array name="transaction_option"> <item>Edit</item> <item>Delete</item>