diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..1f808de5 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,2 @@ +[*] +insert_final_newline = true diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..6abedc70 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,12 @@ +# Enforce Unix line endings for all text files +* text=auto eol=lf + +# Explicitly binary +*.png binary +*.jpg binary +*.jpeg binary +*.gif binary +*.ico binary +*.webp binary +*.keystore binary +*.jks binary diff --git a/app/build.gradle b/app/build.gradle index b250318c..a6207f8b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,29 +1,43 @@ plugins { - id("io.sentry.android.gradle") version "3.0.1" + id("io.sentry.android.gradle") version "4.0.0" id 'com.android.application' id 'kotlin-android' - id 'kotlin-android-extensions' id 'kotlin-kapt' } -sentry { - includeProguardMapping = true - autoUploadProguardMapping = true +def gitVersionName = { -> + try { + def proc = ['git', 'describe', '--tags', '--always', '--dirty'].execute(null, rootDir) + proc.waitFor() + proc.exitValue() == 0 ? proc.text.trim() : "v1.10" + } catch (Exception ex) { + "v1.10" + } +} + +def gitVersionCode = { -> + try { + def proc = ['git', 'rev-list', '--count', 'HEAD'].execute(null, rootDir) + proc.waitFor() + proc.exitValue() == 0 ? proc.text.trim().toInteger() : 1 + } catch (Exception ex) { + 1 + } } android { - compileSdkVersion 31 - buildToolsVersion "30.0.3" + namespace "com.example.barcodescanner" + compileSdk 35 defaultConfig { applicationId "com.example.barcodescanner" - minSdkVersion 21 - targetSdkVersion 31 - versionCode 12 - versionName "1.10" + minSdk 21 + targetSdk 35 + versionCode gitVersionCode() + versionName gitVersionName() + multiDexEnabled true - vectorDrawables.useSupportLibrary true - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + vectorDrawables.useSupportLibrary = true javaCompileOptions { annotationProcessorOptions { @@ -35,19 +49,37 @@ android { } compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8.toString() - targetCompatibility = JavaVersion.VERSION_1_8.toString() + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8.toString() + jvmTarget = '17' + } + + buildFeatures { + viewBinding true + buildConfig true + } + + signingConfigs { + release { + storeFile file('../keystore.jks') + storePassword System.getenv("KEYSTORE_PASSWORD") + keyAlias System.getenv("KEY_ALIAS") + keyPassword System.getenv("KEY_PASSWORD") + } } buildTypes { + debug { + applicationIdSuffix ".debug" + } release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + signingConfig signingConfigs.release } } @@ -67,32 +99,33 @@ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) // Kotlin - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" // Android - implementation 'androidx.core:core-ktx:1.7.0' - implementation 'androidx.appcompat:appcompat:1.4.1' - implementation 'com.google.android.material:material:1.5.0' - implementation 'androidx.constraintlayout:constraintlayout:2.1.3' + implementation 'androidx.appcompat:appcompat:1.7.0' + implementation 'androidx.core:core-ktx:1.15.0' + implementation 'androidx.constraintlayout:constraintlayout:2.2.0' + implementation 'com.google.android.material:material:1.12.0' + implementation 'com.google.android.flexbox:flexbox:3.0.0' implementation 'androidx.multidex:multidex:2.0.1' // Room - final roomVersion = "2.4.2" - kapt "androidx.room:room-compiler:$roomVersion" + final roomVersion = "2.6.1" implementation "androidx.room:room-runtime:$roomVersion" implementation "androidx.room:room-rxjava2:$roomVersion" + kapt "androidx.room:room-compiler:$roomVersion" // Paging - final pagingVersion = "1.0.1" - implementation "android.arch.paging:runtime:$pagingVersion" - implementation "android.arch.paging:rxjava2:$pagingVersion" + final pagingVersion = "2.1.2" + implementation "androidx.paging:paging-runtime:$pagingVersion" + implementation "androidx.paging:paging-rxjava2:$pagingVersion" // Barcode Scanner - implementation 'com.budiyev.android:code-scanner:2.1.0' + implementation 'com.github.yuriy-budiyev:code-scanner:v2.1.0' // Barcode Image Generator //noinspection GradleDependency - implementation 'com.journeyapps:zxing-android-embedded:3.4.0' + implementation 'com.journeyapps:zxing-android-embedded:4.3.0' // VCard Parser implementation 'com.googlecode.ez-vcard:ez-vcard:0.11.0' @@ -103,16 +136,19 @@ dependencies { // OTP implementation "dev.turingcomplete:kotlin-onetimepassword:2.0.1" + // ZXing Core + implementation 'com.google.zxing:core:3.5.3' + // Rx implementation "io.reactivex.rxjava2:rxkotlin:2.3.0" implementation "com.jakewharton.rxbinding2:rxbinding-appcompat-v7-kotlin:2.2.0" // Image Crop Library - implementation 'com.isseiaoki:simplecropview:1.1.8' + implementation 'com.vanniktech:android-image-cropper:4.5.0' // Date time picker - implementation 'com.github.florent37:singledateandtimepicker:2.2.6' + implementation 'com.github.florent37:SingleDateAndTimePicker:v2.2.7' // Sentry - implementation 'io.sentry:sentry-android:5.7.1' + implementation 'io.sentry:sentry-android:7.0.0' } diff --git a/app/src/aptoide/res/xml/shortcuts.xml b/app/src/aptoide/res/xml/shortcuts.xml index 70aefae2..161045fa 100644 --- a/app/src/aptoide/res/xml/shortcuts.xml +++ b/app/src/aptoide/res/xml/shortcuts.xml @@ -56,4 +56,4 @@ /> - \ No newline at end of file + diff --git a/app/src/googlePlay/res/xml/shortcuts.xml b/app/src/googlePlay/res/xml/shortcuts.xml index 70aefae2..161045fa 100644 --- a/app/src/googlePlay/res/xml/shortcuts.xml +++ b/app/src/googlePlay/res/xml/shortcuts.xml @@ -56,4 +56,4 @@ /> - \ No newline at end of file + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1425ed13..330717fc 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,7 +2,6 @@ @@ -33,7 +32,7 @@ @@ -203,4 +202,4 @@ - \ No newline at end of file + diff --git a/app/src/main/java/com/example/barcodescanner/App.kt b/app/src/main/java/com/example/barcodescanner/App.kt index 618bab54..faf07c0f 100644 --- a/app/src/main/java/com/example/barcodescanner/App.kt +++ b/app/src/main/java/com/example/barcodescanner/App.kt @@ -22,4 +22,4 @@ class App : MultiDexApplication() { Logger.log(error) } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/di/DependencyInjection.kt b/app/src/main/java/com/example/barcodescanner/di/DependencyInjection.kt index e28855dd..65578d05 100644 --- a/app/src/main/java/com/example/barcodescanner/di/DependencyInjection.kt +++ b/app/src/main/java/com/example/barcodescanner/di/DependencyInjection.kt @@ -60,4 +60,4 @@ val Fragment.settings get() = Settings.getInstance(requireContext()) val Fragment.permissionsHelper - get() = PermissionsHelper \ No newline at end of file + get() = PermissionsHelper diff --git a/app/src/main/java/com/example/barcodescanner/extension/AppCompatActivity.kt b/app/src/main/java/com/example/barcodescanner/extension/AppCompatActivity.kt index 0e82fda4..03251ada 100644 --- a/app/src/main/java/com/example/barcodescanner/extension/AppCompatActivity.kt +++ b/app/src/main/java/com/example/barcodescanner/extension/AppCompatActivity.kt @@ -10,4 +10,4 @@ fun AppCompatActivity.showError(error: Throwable?) { error ) errorDialog.show(supportFragmentManager, "") -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/extension/BarcodeFormat.kt b/app/src/main/java/com/example/barcodescanner/extension/BarcodeFormat.kt index b5cde082..14d96a5b 100644 --- a/app/src/main/java/com/example/barcodescanner/extension/BarcodeFormat.kt +++ b/app/src/main/java/com/example/barcodescanner/extension/BarcodeFormat.kt @@ -38,4 +38,4 @@ fun BarcodeFormat.toColorId(): Int { BarcodeFormat.DATA_MATRIX, BarcodeFormat.AZTEC, BarcodeFormat.PDF_417, BarcodeFormat.MAXICODE -> R.color.orange else -> R.color.green } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/extension/BarcodeSchema.kt b/app/src/main/java/com/example/barcodescanner/extension/BarcodeSchema.kt index f89db97e..442e71f0 100644 --- a/app/src/main/java/com/example/barcodescanner/extension/BarcodeSchema.kt +++ b/app/src/main/java/com/example/barcodescanner/extension/BarcodeSchema.kt @@ -46,4 +46,4 @@ fun BarcodeSchema.toStringId(): Int? { BarcodeSchema.OTHER -> R.string.barcode_schema_other else -> null } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/extension/Boolean.kt b/app/src/main/java/com/example/barcodescanner/extension/Boolean.kt index 2f077eb6..3afeacff 100644 --- a/app/src/main/java/com/example/barcodescanner/extension/Boolean.kt +++ b/app/src/main/java/com/example/barcodescanner/extension/Boolean.kt @@ -2,4 +2,4 @@ package com.example.barcodescanner.extension fun Boolean?.orFalse(): Boolean { return this ?: false -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/extension/ByteArray.kt b/app/src/main/java/com/example/barcodescanner/extension/ByteArray.kt index 8828bec2..a93242c3 100644 --- a/app/src/main/java/com/example/barcodescanner/extension/ByteArray.kt +++ b/app/src/main/java/com/example/barcodescanner/extension/ByteArray.kt @@ -4,4 +4,4 @@ import org.apache.commons.codec.binary.Base32 fun ByteArray.encodeBase32(): String { return Base32().encodeAsString(this) -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/extension/Context.kt b/app/src/main/java/com/example/barcodescanner/extension/Context.kt index 8057e78b..df93ac21 100644 --- a/app/src/main/java/com/example/barcodescanner/extension/Context.kt +++ b/app/src/main/java/com/example/barcodescanner/extension/Context.kt @@ -21,4 +21,4 @@ val Context.currentLocale: Locale? resources.configuration.locales.get(0) } else { resources.configuration.locale - } \ No newline at end of file + } diff --git a/app/src/main/java/com/example/barcodescanner/extension/DateFormat.kt b/app/src/main/java/com/example/barcodescanner/extension/DateFormat.kt index a677d300..5ae9b3d2 100644 --- a/app/src/main/java/com/example/barcodescanner/extension/DateFormat.kt +++ b/app/src/main/java/com/example/barcodescanner/extension/DateFormat.kt @@ -27,4 +27,4 @@ fun DateFormat.formatOrNull(time: Long?): String? { } catch (ex: Exception) { null } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/extension/Double.kt b/app/src/main/java/com/example/barcodescanner/extension/Double.kt index 7f0385c0..aaa53ebb 100644 --- a/app/src/main/java/com/example/barcodescanner/extension/Double.kt +++ b/app/src/main/java/com/example/barcodescanner/extension/Double.kt @@ -2,4 +2,4 @@ package com.example.barcodescanner.extension fun Double?.orZero(): Double { return this ?: 0.0 -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/extension/Int.kt b/app/src/main/java/com/example/barcodescanner/extension/Int.kt index 2e1edfe9..23449f09 100644 --- a/app/src/main/java/com/example/barcodescanner/extension/Int.kt +++ b/app/src/main/java/com/example/barcodescanner/extension/Int.kt @@ -2,4 +2,4 @@ package com.example.barcodescanner.extension fun Int?.orZero(): Int { return this ?: 0 -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/extension/Long.kt b/app/src/main/java/com/example/barcodescanner/extension/Long.kt index dbf72a8e..cd4d601f 100644 --- a/app/src/main/java/com/example/barcodescanner/extension/Long.kt +++ b/app/src/main/java/com/example/barcodescanner/extension/Long.kt @@ -2,4 +2,4 @@ package com.example.barcodescanner.extension fun Long?.orZero(): Long { return this ?: 0L -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/extension/Other.kt b/app/src/main/java/com/example/barcodescanner/extension/Other.kt index 1eea17c6..fc1f6033 100644 --- a/app/src/main/java/com/example/barcodescanner/extension/Other.kt +++ b/app/src/main/java/com/example/barcodescanner/extension/Other.kt @@ -1,3 +1,3 @@ package com.example.barcodescanner.extension -fun unsafeLazy(initializer: () -> T): Lazy = lazy(LazyThreadSafetyMode.NONE, initializer) \ No newline at end of file +fun unsafeLazy(initializer: () -> T): Lazy = lazy(LazyThreadSafetyMode.NONE, initializer) diff --git a/app/src/main/java/com/example/barcodescanner/extension/Result.kt b/app/src/main/java/com/example/barcodescanner/extension/Result.kt index 6daf0e08..5ee4b12d 100644 --- a/app/src/main/java/com/example/barcodescanner/extension/Result.kt +++ b/app/src/main/java/com/example/barcodescanner/extension/Result.kt @@ -5,4 +5,4 @@ import com.google.zxing.Result fun Result.equalTo(barcode: Barcode?): Boolean { return barcodeFormat == barcode?.format && text == barcode?.text -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/extension/String.kt b/app/src/main/java/com/example/barcodescanner/extension/String.kt index bcf442bd..e6729bff 100644 --- a/app/src/main/java/com/example/barcodescanner/extension/String.kt +++ b/app/src/main/java/com/example/barcodescanner/extension/String.kt @@ -150,4 +150,4 @@ fun String.toAddressType(): Int? { "OTHER" -> ContactsContract.CommonDataKinds.StructuredPostal.TYPE_OTHER else -> null } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/extension/StringBuilder.kt b/app/src/main/java/com/example/barcodescanner/extension/StringBuilder.kt index 8eb87af8..a8d8dcdf 100644 --- a/app/src/main/java/com/example/barcodescanner/extension/StringBuilder.kt +++ b/app/src/main/java/com/example/barcodescanner/extension/StringBuilder.kt @@ -7,4 +7,4 @@ fun StringBuilder.appendIfNotNullOrBlank(prefix: String = "", value: String?, su append(suffix) } return this -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/extension/Uri.kt b/app/src/main/java/com/example/barcodescanner/extension/Uri.kt index bf309639..a5bd1b48 100644 --- a/app/src/main/java/com/example/barcodescanner/extension/Uri.kt +++ b/app/src/main/java/com/example/barcodescanner/extension/Uri.kt @@ -7,4 +7,4 @@ fun Uri.Builder.appendQueryParameterIfNotNullOrBlank(key: String, value: String? appendQueryParameter(key, value) } return this -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/extension/Vibrator.kt b/app/src/main/java/com/example/barcodescanner/extension/Vibrator.kt index 54a905e2..ea83793a 100644 --- a/app/src/main/java/com/example/barcodescanner/extension/Vibrator.kt +++ b/app/src/main/java/com/example/barcodescanner/extension/Vibrator.kt @@ -10,4 +10,4 @@ fun Vibrator.vibrateOnce(pattern: LongArray) { } else { vibrate(pattern, -1) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/extension/WindowsInsets.kt b/app/src/main/java/com/example/barcodescanner/extension/WindowsInsets.kt index fa58c488..b7faa51a 100644 --- a/app/src/main/java/com/example/barcodescanner/extension/WindowsInsets.kt +++ b/app/src/main/java/com/example/barcodescanner/extension/WindowsInsets.kt @@ -62,4 +62,4 @@ fun View.requestApplyInsetsWhenAttached() { override fun onViewDetachedFromWindow(v: View) = Unit }) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/BaseActivity.kt b/app/src/main/java/com/example/barcodescanner/feature/BaseActivity.kt index 37aa8e2c..bd630bdb 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/BaseActivity.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/BaseActivity.kt @@ -12,4 +12,4 @@ abstract class BaseActivity : AppCompatActivity() { window.decorView.systemUiVisibility = window.decorView.systemUiVisibility or View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION rotationHelper.lockCurrentOrientationIfNeeded(this) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/barcode/BarcodeActivity.kt b/app/src/main/java/com/example/barcodescanner/feature/barcode/BarcodeActivity.kt index c91db46d..e9085b32 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/barcode/BarcodeActivity.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/barcode/BarcodeActivity.kt @@ -35,7 +35,7 @@ import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.CompositeDisposable import io.reactivex.rxkotlin.addTo import io.reactivex.schedulers.Schedulers -import kotlinx.android.synthetic.main.activity_barcode.* +import com.example.barcodescanner.databinding.ActivityBarcodeBinding import java.text.SimpleDateFormat import java.util.* @@ -55,6 +55,8 @@ class BarcodeActivity : BaseActivity(), DeleteConfirmationDialogFragment.Listene } } + private lateinit var binding: ActivityBarcodeBinding + private val disposable = CompositeDisposable() private val dateFormatter = SimpleDateFormat("dd.MM.yyyy HH:mm", Locale.ENGLISH) @@ -80,7 +82,8 @@ class BarcodeActivity : BaseActivity(), DeleteConfirmationDialogFragment.Listene override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_barcode) + binding = ActivityBarcodeBinding.inflate(layoutInflater) + setContentView(binding.root) supportEdgeToEdge() saveOriginalBrightness() @@ -114,7 +117,7 @@ class BarcodeActivity : BaseActivity(), DeleteConfirmationDialogFragment.Listene private fun supportEdgeToEdge() { - root_view.applySystemWindowInsets(applyTop = true, applyBottom = true) + binding.rootView.applySystemWindowInsets(applyTop = true, applyBottom = true) } private fun saveOriginalBrightness() { @@ -155,23 +158,23 @@ class BarcodeActivity : BaseActivity(), DeleteConfirmationDialogFragment.Listene private fun handleToolbarBackPressed() { - toolbar.setNavigationOnClickListener { + binding.toolbar.setNavigationOnClickListener { finish() } } private fun handleToolbarMenuClicked() { - toolbar.setOnMenuItemClickListener { item -> + binding.toolbar.setOnMenuItemClickListener { item -> when (item.itemId) { R.id.item_increase_brightness -> { increaseBrightnessToMax() - toolbar.menu.findItem(R.id.item_increase_brightness).isVisible = false - toolbar.menu.findItem(R.id.item_decrease_brightness).isVisible = true + binding.toolbar.menu.findItem(R.id.item_increase_brightness).isVisible = false + binding.toolbar.menu.findItem(R.id.item_decrease_brightness).isVisible = true } R.id.item_decrease_brightness -> { restoreOriginalBrightness() - toolbar.menu.findItem(R.id.item_increase_brightness).isVisible = true - toolbar.menu.findItem(R.id.item_decrease_brightness).isVisible = false + binding.toolbar.menu.findItem(R.id.item_increase_brightness).isVisible = true + binding.toolbar.menu.findItem(R.id.item_decrease_brightness).isVisible = false } R.id.item_add_to_favorites -> toggleIsFavorite() R.id.item_show_barcode_image -> navigateToBarcodeImageActivity() @@ -183,44 +186,44 @@ class BarcodeActivity : BaseActivity(), DeleteConfirmationDialogFragment.Listene } private fun handleButtonsClicked() { - button_edit_name.setOnClickListener { showEditBarcodeNameDialog() } - - button_search_on_web.setOnClickListener { searchBarcodeTextOnInternet() } - button_add_to_calendar.setOnClickListener { addToCalendar() } - button_add_to_contacts.setOnClickListener { addToContacts() } - button_show_location.setOnClickListener { showLocation() } - button_connect_to_wifi.setOnClickListener { connectToWifi() } - button_open_wifi_settings.setOnClickListener { openWifiSettings() } - button_copy_network_name.setOnClickListener { copyNetworkNameToClipboard() } - button_copy_network_password.setOnClickListener { copyNetworkPasswordToClipboard() } - button_open_app.setOnClickListener { openApp() } - button_open_in_app_market.setOnClickListener { openInAppMarket() } - button_open_in_youtube.setOnClickListener { openInYoutube() } - button_show_otp.setOnClickListener { showOtp() } - button_open_otp.setOnClickListener { openOtpInOtherApp() } - button_open_bitcoin_uri.setOnClickListener { openBitcoinUrl() } - button_open_link.setOnClickListener { openLink() } - button_save_bookmark.setOnClickListener { saveBookmark() } - - button_call_phone_1.setOnClickListener { callPhone(barcode.phone) } - button_call_phone_2.setOnClickListener { callPhone(barcode.secondaryPhone) } - button_call_phone_3.setOnClickListener { callPhone(barcode.tertiaryPhone) } - - button_send_sms_or_mms_1.setOnClickListener { sendSmsOrMms(barcode.phone) } - button_send_sms_or_mms_2.setOnClickListener { sendSmsOrMms(barcode.secondaryPhone) } - button_send_sms_or_mms_3.setOnClickListener { sendSmsOrMms(barcode.tertiaryPhone) } - - button_send_email_1.setOnClickListener { sendEmail(barcode.email) } - button_send_email_2.setOnClickListener { sendEmail(barcode.secondaryEmail) } - button_send_email_3.setOnClickListener { sendEmail(barcode.tertiaryEmail) } - - button_share_as_text.setOnClickListener { shareBarcodeAsText() } - button_copy.setOnClickListener { copyBarcodeTextToClipboard() } - button_search.setOnClickListener { searchBarcodeTextOnInternet() } - button_save_as_text.setOnClickListener { navigateToSaveBarcodeAsTextActivity() } - button_share_as_image.setOnClickListener { shareBarcodeAsImage() } - button_save_as_image.setOnClickListener { navigateToSaveBarcodeAsImageActivity() } - button_print.setOnClickListener { printBarcode() } + binding.buttonEditName.setOnClickListener { showEditBarcodeNameDialog() } + + binding.buttonSearchOnWeb.setOnClickListener { searchBarcodeTextOnInternet() } + binding.buttonAddToCalendar.setOnClickListener { addToCalendar() } + binding.buttonAddToContacts.setOnClickListener { addToContacts() } + binding.buttonShowLocation.setOnClickListener { showLocation() } + binding.buttonConnectToWifi.setOnClickListener { connectToWifi() } + binding.buttonOpenWifiSettings.setOnClickListener { openWifiSettings() } + binding.buttonCopyNetworkName.setOnClickListener { copyNetworkNameToClipboard() } + binding.buttonCopyNetworkPassword.setOnClickListener { copyNetworkPasswordToClipboard() } + binding.buttonOpenApp.setOnClickListener { openApp() } + binding.buttonOpenInAppMarket.setOnClickListener { openInAppMarket() } + binding.buttonOpenInYoutube.setOnClickListener { openInYoutube() } + binding.buttonShowOtp.setOnClickListener { showOtp() } + binding.buttonOpenOtp.setOnClickListener { openOtpInOtherApp() } + binding.buttonOpenBitcoinUri.setOnClickListener { openBitcoinUrl() } + binding.buttonOpenLink.setOnClickListener { openLink() } + binding.buttonSaveBookmark.setOnClickListener { saveBookmark() } + + binding.buttonCallPhone1.setOnClickListener { callPhone(barcode.phone) } + binding.buttonCallPhone2.setOnClickListener { callPhone(barcode.secondaryPhone) } + binding.buttonCallPhone3.setOnClickListener { callPhone(barcode.tertiaryPhone) } + + binding.buttonSendSmsOrMms1.setOnClickListener { sendSmsOrMms(barcode.phone) } + binding.buttonSendSmsOrMms2.setOnClickListener { sendSmsOrMms(barcode.secondaryPhone) } + binding.buttonSendSmsOrMms3.setOnClickListener { sendSmsOrMms(barcode.tertiaryPhone) } + + binding.buttonSendEmail1.setOnClickListener { sendEmail(barcode.email) } + binding.buttonSendEmail2.setOnClickListener { sendEmail(barcode.secondaryEmail) } + binding.buttonSendEmail3.setOnClickListener { sendEmail(barcode.tertiaryEmail) } + + binding.buttonShareAsText.setOnClickListener { shareBarcodeAsText() } + binding.buttonCopy.setOnClickListener { copyBarcodeTextToClipboard() } + binding.buttonSearch.setOnClickListener { searchBarcodeTextOnInternet() } + binding.buttonSaveAsText.setOnClickListener { navigateToSaveBarcodeAsTextActivity() } + binding.buttonShareAsImage.setOnClickListener { shareBarcodeAsImage() } + binding.buttonSaveAsImage.setOnClickListener { navigateToSaveBarcodeAsImageActivity() } + binding.buttonPrint.setOnClickListener { printBarcode() } } @@ -264,7 +267,7 @@ class BarcodeActivity : BaseActivity(), DeleteConfirmationDialogFragment.Listene } private fun saveBarcode() { - toolbar?.menu?.findItem(R.id.item_save)?.isVisible = false + binding.toolbar.menu?.findItem(R.id.item_save)?.isVisible = false barcodeDatabase.save(originalBarcode, settings.doNotSaveDuplicates) .subscribeOn(Schedulers.io()) @@ -272,11 +275,11 @@ class BarcodeActivity : BaseActivity(), DeleteConfirmationDialogFragment.Listene .subscribe( { id -> barcode.id = id - button_edit_name.isVisible = true - toolbar?.menu?.findItem(R.id.item_delete)?.isVisible = true + binding.buttonEditName.isVisible = true + binding.toolbar.menu?.findItem(R.id.item_delete)?.isVisible = true }, { error -> - toolbar?.menu?.findItem(R.id.item_save)?.isVisible = true + binding.toolbar.menu?.findItem(R.id.item_save)?.isVisible = true showError(error) } ) @@ -548,8 +551,8 @@ class BarcodeActivity : BaseActivity(), DeleteConfirmationDialogFragment.Listene } private fun showBarcodeMenuIfNeeded() { - toolbar.inflateMenu(R.menu.menu_barcode) - toolbar.menu.apply { + binding.toolbar.inflateMenu(R.menu.menu_barcode) + binding.toolbar.menu.apply { findItem(R.id.item_increase_brightness).isVisible = isCreated findItem(R.id.item_add_to_favorites)?.isVisible = barcode.isInDb findItem(R.id.item_show_barcode_image)?.isVisible = isCreated.not() @@ -568,7 +571,7 @@ class BarcodeActivity : BaseActivity(), DeleteConfirmationDialogFragment.Listene } else { R.drawable.ic_favorite_unchecked } - toolbar.menu?.findItem(R.id.item_add_to_favorites)?.icon = ContextCompat.getDrawable(this, iconId) + binding.toolbar.menu?.findItem(R.id.item_add_to_favorites)?.icon = ContextCompat.getDrawable(this, iconId) } private fun showBarcodeImageIfNeeded() { @@ -580,28 +583,28 @@ class BarcodeActivity : BaseActivity(), DeleteConfirmationDialogFragment.Listene private fun showBarcodeImage() { try { val bitmap = barcodeImageGenerator.generateBitmap(originalBarcode, 2000, 2000, 0, settings.barcodeContentColor, settings.barcodeBackgroundColor) - layout_barcode_image_background.isVisible = true - image_view_barcode.isVisible = true - image_view_barcode.setImageBitmap(bitmap) - image_view_barcode.setBackgroundColor(settings.barcodeBackgroundColor) - layout_barcode_image_background.setBackgroundColor(settings.barcodeBackgroundColor) + binding.layoutBarcodeImageBackground.isVisible = true + binding.imageViewBarcode.isVisible = true + binding.imageViewBarcode.setImageBitmap(bitmap) + binding.imageViewBarcode.setBackgroundColor(settings.barcodeBackgroundColor) + binding.layoutBarcodeImageBackground.setBackgroundColor(settings.barcodeBackgroundColor) if (settings.isDarkTheme.not() || settings.areBarcodeColorsInversed) { - layout_barcode_image_background.setPadding(0, 0, 0, 0) + binding.layoutBarcodeImageBackground.setPadding(0, 0, 0, 0) } } catch (ex: Exception) { Logger.log(ex) - image_view_barcode.isVisible = false + binding.imageViewBarcode.isVisible = false } } private fun showBarcodeDate() { - text_view_date.text = dateFormatter.format(barcode.date) + binding.textViewDate.text = dateFormatter.format(barcode.date) } private fun showBarcodeFormat() { val format = barcode.format.toStringId() - toolbar.setTitle(format) + binding.toolbar.setTitle(format) } private fun showBarcodeName() { @@ -609,12 +612,12 @@ class BarcodeActivity : BaseActivity(), DeleteConfirmationDialogFragment.Listene } private fun showBarcodeName(name: String?) { - text_view_barcode_name.isVisible = name.isNullOrBlank().not() - text_view_barcode_name.text = name.orEmpty() + binding.textViewBarcodeName.isVisible = name.isNullOrBlank().not() + binding.textViewBarcodeName.text = name.orEmpty() } private fun showBarcodeText() { - text_view_barcode_text.text = if (isCreated) { + binding.textViewBarcodeText.text = if (isCreated) { barcode.text } else { barcode.formattedText @@ -649,69 +652,69 @@ class BarcodeActivity : BaseActivity(), DeleteConfirmationDialogFragment.Listene } private fun showFullCountryName(fullCountryName: String) { - text_view_country.apply { + binding.textViewCountry.apply { text = fullCountryName isVisible = fullCountryName.isBlank().not() } } private fun showOrHideButtons() { - button_search.isVisible = isCreated.not() - button_edit_name.isVisible = barcode.isInDb + binding.buttonSearch.isVisible = isCreated.not() + binding.buttonEditName.isVisible = barcode.isInDb if (isCreated) { return } - button_search_on_web.isVisible = barcode.isProductBarcode - button_search.isVisible = barcode.isProductBarcode.not() + binding.buttonSearchOnWeb.isVisible = barcode.isProductBarcode + binding.buttonSearch.isVisible = barcode.isProductBarcode.not() - button_add_to_calendar.isVisible = barcode.schema == BarcodeSchema.VEVENT - button_add_to_contacts.isVisible = barcode.schema == BarcodeSchema.VCARD || barcode.schema == BarcodeSchema.MECARD + binding.buttonAddToCalendar.isVisible = barcode.schema == BarcodeSchema.VEVENT + binding.buttonAddToContacts.isVisible = barcode.schema == BarcodeSchema.VCARD || barcode.schema == BarcodeSchema.MECARD - button_call_phone_1.isVisible = barcode.phone.isNullOrEmpty().not() - button_call_phone_2.isVisible = barcode.secondaryPhone.isNullOrEmpty().not() - button_call_phone_3.isVisible = barcode.tertiaryPhone.isNullOrEmpty().not() + binding.buttonCallPhone1.isVisible = barcode.phone.isNullOrEmpty().not() + binding.buttonCallPhone2.isVisible = barcode.secondaryPhone.isNullOrEmpty().not() + binding.buttonCallPhone3.isVisible = barcode.tertiaryPhone.isNullOrEmpty().not() - button_send_sms_or_mms_1.isVisible = barcode.phone.isNullOrEmpty().not() || barcode.smsBody.isNullOrEmpty().not() - button_send_sms_or_mms_2.isVisible = barcode.secondaryPhone.isNullOrEmpty().not() - button_send_sms_or_mms_3.isVisible = barcode.tertiaryPhone.isNullOrEmpty().not() + binding.buttonSendSmsOrMms1.isVisible = barcode.phone.isNullOrEmpty().not() || barcode.smsBody.isNullOrEmpty().not() + binding.buttonSendSmsOrMms2.isVisible = barcode.secondaryPhone.isNullOrEmpty().not() + binding.buttonSendSmsOrMms3.isVisible = barcode.tertiaryPhone.isNullOrEmpty().not() - button_send_email_1.isVisible = barcode.email.isNullOrEmpty().not() || barcode.emailSubject.isNullOrEmpty().not() || barcode.emailBody.isNullOrEmpty().not() - button_send_email_2.isVisible = barcode.secondaryEmail.isNullOrEmpty().not() - button_send_email_3.isVisible = barcode.tertiaryEmail.isNullOrEmpty().not() + binding.buttonSendEmail1.isVisible = barcode.email.isNullOrEmpty().not() || barcode.emailSubject.isNullOrEmpty().not() || barcode.emailBody.isNullOrEmpty().not() + binding.buttonSendEmail2.isVisible = barcode.secondaryEmail.isNullOrEmpty().not() + binding.buttonSendEmail3.isVisible = barcode.tertiaryEmail.isNullOrEmpty().not() - button_show_location.isVisible = barcode.geoUri.isNullOrEmpty().not() - button_connect_to_wifi.isVisible = barcode.schema == BarcodeSchema.WIFI - button_open_wifi_settings.isVisible = barcode.schema == BarcodeSchema.WIFI - button_copy_network_name.isVisible = barcode.networkName.isNullOrEmpty().not() - button_copy_network_password.isVisible = barcode.networkPassword.isNullOrEmpty().not() - button_open_app.isVisible = barcode.appPackage.isNullOrEmpty().not() && isAppInstalled(barcode.appPackage) - button_open_in_app_market.isVisible = barcode.appMarketUrl.isNullOrEmpty().not() - button_open_in_youtube.isVisible = barcode.youtubeUrl.isNullOrEmpty().not() - button_show_otp.isVisible = barcode.otpUrl.isNullOrEmpty().not() - button_open_otp.isVisible = barcode.otpUrl.isNullOrEmpty().not() - button_open_bitcoin_uri.isVisible = barcode.bitcoinUri.isNullOrEmpty().not() - button_open_link.isVisible = barcode.url.isNullOrEmpty().not() - button_save_bookmark.isVisible = barcode.schema == BarcodeSchema.BOOKMARK + binding.buttonShowLocation.isVisible = barcode.geoUri.isNullOrEmpty().not() + binding.buttonConnectToWifi.isVisible = barcode.schema == BarcodeSchema.WIFI + binding.buttonOpenWifiSettings.isVisible = barcode.schema == BarcodeSchema.WIFI + binding.buttonCopyNetworkName.isVisible = barcode.networkName.isNullOrEmpty().not() + binding.buttonCopyNetworkPassword.isVisible = barcode.networkPassword.isNullOrEmpty().not() + binding.buttonOpenApp.isVisible = barcode.appPackage.isNullOrEmpty().not() && isAppInstalled(barcode.appPackage) + binding.buttonOpenInAppMarket.isVisible = barcode.appMarketUrl.isNullOrEmpty().not() + binding.buttonOpenInYoutube.isVisible = barcode.youtubeUrl.isNullOrEmpty().not() + binding.buttonShowOtp.isVisible = barcode.otpUrl.isNullOrEmpty().not() + binding.buttonOpenOtp.isVisible = barcode.otpUrl.isNullOrEmpty().not() + binding.buttonOpenBitcoinUri.isVisible = barcode.bitcoinUri.isNullOrEmpty().not() + binding.buttonOpenLink.isVisible = barcode.url.isNullOrEmpty().not() + binding.buttonSaveBookmark.isVisible = barcode.schema == BarcodeSchema.BOOKMARK } private fun showButtonText() { - button_call_phone_1.text = getString(R.string.activity_barcode_call_phone, barcode.phone) - button_call_phone_2.text = getString(R.string.activity_barcode_call_phone, barcode.secondaryPhone) - button_call_phone_3.text = getString(R.string.activity_barcode_call_phone, barcode.tertiaryPhone) + binding.buttonCallPhone1.text = getString(R.string.activity_barcode_call_phone, barcode.phone) + binding.buttonCallPhone2.text = getString(R.string.activity_barcode_call_phone, barcode.secondaryPhone) + binding.buttonCallPhone3.text = getString(R.string.activity_barcode_call_phone, barcode.tertiaryPhone) - button_send_sms_or_mms_1.text = getString(R.string.activity_barcode_send_sms, barcode.phone) - button_send_sms_or_mms_2.text = getString(R.string.activity_barcode_send_sms, barcode.secondaryPhone) - button_send_sms_or_mms_3.text = getString(R.string.activity_barcode_send_sms, barcode.tertiaryPhone) + binding.buttonSendSmsOrMms1.text = getString(R.string.activity_barcode_send_sms, barcode.phone) + binding.buttonSendSmsOrMms2.text = getString(R.string.activity_barcode_send_sms, barcode.secondaryPhone) + binding.buttonSendSmsOrMms3.text = getString(R.string.activity_barcode_send_sms, barcode.tertiaryPhone) - button_send_email_1.text = getString(R.string.activity_barcode_send_email, barcode.email) - button_send_email_2.text = getString(R.string.activity_barcode_send_email, barcode.secondaryEmail) - button_send_email_3.text = getString(R.string.activity_barcode_send_email, barcode.tertiaryEmail) + binding.buttonSendEmail1.text = getString(R.string.activity_barcode_send_email, barcode.email) + binding.buttonSendEmail2.text = getString(R.string.activity_barcode_send_email, barcode.secondaryEmail) + binding.buttonSendEmail3.text = getString(R.string.activity_barcode_send_email, barcode.tertiaryEmail) } private fun showConnectToWifiButtonEnabled(isEnabled: Boolean) { - button_connect_to_wifi.isEnabled = isEnabled + binding.buttonConnectToWifi.isEnabled = isEnabled } private fun showDeleteBarcodeConfirmationDialog() { @@ -730,8 +733,8 @@ class BarcodeActivity : BaseActivity(), DeleteConfirmationDialogFragment.Listene } private fun showLoading(isLoading: Boolean) { - progress_bar_loading.isVisible = isLoading - scroll_view.isVisible = isLoading.not() + binding.progressBarLoading.isVisible = isLoading + binding.scrollView.isVisible = isLoading.not() } diff --git a/app/src/main/java/com/example/barcodescanner/feature/barcode/BarcodeImageActivity.kt b/app/src/main/java/com/example/barcodescanner/feature/barcode/BarcodeImageActivity.kt index 1a6bdbd0..9f05274b 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/barcode/BarcodeImageActivity.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/barcode/BarcodeImageActivity.kt @@ -5,6 +5,7 @@ import android.content.Intent import android.os.Bundle import androidx.core.view.isVisible import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.ActivityBarcodeImageBinding import com.example.barcodescanner.di.barcodeImageGenerator import com.example.barcodescanner.di.settings import com.example.barcodescanner.extension.applySystemWindowInsets @@ -13,7 +14,6 @@ import com.example.barcodescanner.extension.unsafeLazy import com.example.barcodescanner.feature.BaseActivity import com.example.barcodescanner.model.Barcode import com.example.barcodescanner.usecase.Logger -import kotlinx.android.synthetic.main.activity_barcode_image.* import java.text.SimpleDateFormat import java.util.* @@ -29,6 +29,7 @@ class BarcodeImageActivity : BaseActivity() { } } + private lateinit var binding: ActivityBarcodeImageBinding private val dateFormatter = SimpleDateFormat("dd.MM.yyyy HH:mm", Locale.ENGLISH) private val barcode by unsafeLazy { intent?.getSerializableExtra(BARCODE_KEY) as? Barcode ?: throw IllegalArgumentException("No barcode passed") @@ -37,7 +38,8 @@ class BarcodeImageActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_barcode_image) + binding = ActivityBarcodeImageBinding.inflate(layoutInflater) + setContentView(binding.root) supportEdgeToEdge() saveOriginalBrightness() handleToolbarBackPressed() @@ -47,7 +49,7 @@ class BarcodeImageActivity : BaseActivity() { } private fun supportEdgeToEdge() { - root_view.applySystemWindowInsets(applyTop = true, applyBottom = true) + binding.rootView.applySystemWindowInsets(applyTop = true, applyBottom = true) } private fun saveOriginalBrightness() { @@ -55,24 +57,24 @@ class BarcodeImageActivity : BaseActivity() { } private fun handleToolbarBackPressed() { - toolbar.setNavigationOnClickListener { + binding.toolbar.setNavigationOnClickListener { finish() } } private fun handleToolbarMenuItemClicked() { - toolbar.setOnMenuItemClickListener { item -> + binding.toolbar.setOnMenuItemClickListener { item -> when (item.itemId) { R.id.item_increase_brightness -> { increaseBrightnessToMax() - toolbar.menu.apply { + binding.toolbar.menu.apply { findItem(R.id.item_increase_brightness).isVisible = false findItem(R.id.item_decrease_brightness).isVisible = true } } R.id.item_decrease_brightness -> { restoreOriginalBrightness() - toolbar.menu.apply { + binding.toolbar.menu.apply { findItem(R.id.item_decrease_brightness).isVisible = false findItem(R.id.item_increase_brightness).isVisible = true } @@ -83,7 +85,7 @@ class BarcodeImageActivity : BaseActivity() { } private fun showMenu() { - toolbar.inflateMenu(R.menu.menu_barcode_image) + binding.toolbar.inflateMenu(R.menu.menu_barcode_image) } private fun showBarcode() { @@ -96,30 +98,30 @@ class BarcodeImageActivity : BaseActivity() { private fun showBarcodeImage() { try { val bitmap = barcodeImageGenerator.generateBitmap(barcode, 2000, 2000, 0, settings.barcodeContentColor, settings.barcodeBackgroundColor) - image_view_barcode.setImageBitmap(bitmap) - image_view_barcode.setBackgroundColor(settings.barcodeBackgroundColor) - layout_barcode_image_background.setBackgroundColor(settings.barcodeBackgroundColor) + binding.imageViewBarcode.setImageBitmap(bitmap) + binding.imageViewBarcode.setBackgroundColor(settings.barcodeBackgroundColor) + binding.layoutBarcodeImageBackground.setBackgroundColor(settings.barcodeBackgroundColor) if (settings.isDarkTheme.not() || settings.areBarcodeColorsInversed) { - layout_barcode_image_background.setPadding(0, 0, 0, 0) + binding.layoutBarcodeImageBackground.setPadding(0, 0, 0, 0) } } catch (ex: Exception) { Logger.log(ex) - image_view_barcode.isVisible = false + binding.imageViewBarcode.isVisible = false } } private fun showBarcodeDate() { - text_view_date.text = dateFormatter.format(barcode.date) + binding.textViewDate.text = dateFormatter.format(barcode.date) } private fun showBarcodeFormat() { val format = barcode.format.toStringId() - toolbar.setTitle(format) + binding.toolbar.setTitle(format) } private fun showBarcodeText() { - text_view_barcode_text.text = barcode.text + binding.textViewBarcodeText.text = barcode.text } private fun increaseBrightnessToMax() { @@ -135,4 +137,4 @@ class BarcodeImageActivity : BaseActivity() { screenBrightness = brightness } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/barcode/otp/OtpActivity.kt b/app/src/main/java/com/example/barcodescanner/feature/barcode/otp/OtpActivity.kt index 536dd507..af3c591d 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/barcode/otp/OtpActivity.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/barcode/otp/OtpActivity.kt @@ -6,6 +6,7 @@ import android.os.Bundle import android.view.WindowManager import androidx.core.view.isVisible import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.ActivityBarcodeOtpBinding import com.example.barcodescanner.di.otpGenerator import com.example.barcodescanner.extension.applySystemWindowInsets import com.example.barcodescanner.extension.orZero @@ -15,7 +16,6 @@ import io.reactivex.Observable import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.CompositeDisposable import io.reactivex.rxkotlin.addTo -import kotlinx.android.synthetic.main.activity_barcode_otp.* import java.util.concurrent.TimeUnit class OtpActivity : BaseActivity() { @@ -31,12 +31,14 @@ class OtpActivity : BaseActivity() { } } + private lateinit var binding: ActivityBarcodeOtpBinding private val disposable = CompositeDisposable() private lateinit var otp: OtpAuth override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_barcode_otp) + binding = ActivityBarcodeOtpBinding.inflate(layoutInflater) + setContentView(binding.root) enableSecurity() supportEdgeToEdge() parseOtp() @@ -58,7 +60,7 @@ class OtpActivity : BaseActivity() { } private fun supportEdgeToEdge() { - root_view.applySystemWindowInsets(applyTop = true, applyBottom = true) + binding.rootView.applySystemWindowInsets(applyTop = true, applyBottom = true) } private fun parseOtp() { @@ -66,13 +68,13 @@ class OtpActivity : BaseActivity() { } private fun handleToolbarBackClicked() { - toolbar.setNavigationOnClickListener { + binding.toolbar.setNavigationOnClickListener { finish() } } private fun handleRefreshOtpClicked() { - button_refresh.setOnClickListener { + binding.buttonRefresh.setOnClickListener { refreshOtp() } } @@ -87,17 +89,17 @@ class OtpActivity : BaseActivity() { OtpAuth.HOTP_TYPE -> showHotp() OtpAuth.TOTP_TYPE -> showTotp() } - text_view_password.text = otpGenerator.generateOTP(otp) ?: getString(R.string.activity_barcode_otp_unable_to_generate_otp) + binding.textViewPassword.text = otpGenerator.generateOTP(otp) ?: getString(R.string.activity_barcode_otp_unable_to_generate_otp) } private fun showHotp() { - button_refresh.isVisible = true - text_view_counter.isVisible = true - text_view_counter.text = getString(R.string.activity_barcode_otp_counter, otp.counter.orZero().toString()) + binding.buttonRefresh.isVisible = true + binding.textViewCounter.isVisible = true + binding.textViewCounter.text = getString(R.string.activity_barcode_otp_counter, otp.counter.orZero().toString()) } private fun showTotp() { - text_view_timer.isVisible = true + binding.textViewTimer.isVisible = true startTimer() } @@ -122,7 +124,7 @@ class OtpActivity : BaseActivity() { private fun showTime(secondsLeft: Long) { val minutes = secondsLeft / 60 val seconds = secondsLeft % 60 - text_view_timer.text = getString(R.string.activity_barcode_otp_timer, minutes.toTime(), seconds.toTime()) + binding.textViewTimer.text = getString(R.string.activity_barcode_otp_timer, minutes.toTime(), seconds.toTime()) } private fun Long.toTime(): String { @@ -132,4 +134,4 @@ class OtpActivity : BaseActivity() { "0$this" } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/barcode/save/SaveBarcodeAsImageActivity.kt b/app/src/main/java/com/example/barcodescanner/feature/barcode/save/SaveBarcodeAsImageActivity.kt index d8dbd9ea..a52de469 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/barcode/save/SaveBarcodeAsImageActivity.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/barcode/save/SaveBarcodeAsImageActivity.kt @@ -8,6 +8,7 @@ import android.widget.ArrayAdapter import android.widget.Toast import androidx.core.view.isVisible import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.ActivitySaveBarcodeAsImageBinding import com.example.barcodescanner.di.barcodeImageGenerator import com.example.barcodescanner.di.barcodeImageSaver import com.example.barcodescanner.di.permissionsHelper @@ -20,7 +21,6 @@ import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.CompositeDisposable import io.reactivex.rxkotlin.addTo import io.reactivex.schedulers.Schedulers -import kotlinx.android.synthetic.main.activity_save_barcode_as_image.* class SaveBarcodeAsImageActivity : BaseActivity() { @@ -38,6 +38,7 @@ class SaveBarcodeAsImageActivity : BaseActivity() { } } + private lateinit var binding: ActivitySaveBarcodeAsImageBinding private val barcode by unsafeLazy { intent?.getSerializableExtra(BARCODE_KEY) as? Barcode ?: throw IllegalArgumentException("No barcode passed") } @@ -46,7 +47,8 @@ class SaveBarcodeAsImageActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_save_barcode_as_image) + binding = ActivitySaveBarcodeAsImageBinding.inflate(layoutInflater) + setContentView(binding.root) supportEdgeToEdge() initToolbar() initFormatSpinner() @@ -65,17 +67,17 @@ class SaveBarcodeAsImageActivity : BaseActivity() { } private fun supportEdgeToEdge() { - root_view.applySystemWindowInsets(applyTop = true, applyBottom = true) + binding.rootView.applySystemWindowInsets(applyTop = true, applyBottom = true) } private fun initToolbar() { - toolbar.setNavigationOnClickListener { + binding.toolbar.setNavigationOnClickListener { finish() } } private fun initFormatSpinner() { - spinner_save_as.adapter = ArrayAdapter.createFromResource( + binding.spinnerSaveAs.adapter = ArrayAdapter.createFromResource( this, R.array.activity_save_barcode_as_image_formats, R.layout.item_spinner ).apply { setDropDownViewResource(R.layout.item_spinner_dropdown) @@ -83,7 +85,7 @@ class SaveBarcodeAsImageActivity : BaseActivity() { } private fun initSaveButton() { - button_save.setOnClickListener { + binding.buttonSave.setOnClickListener { requestPermissions() } } @@ -93,7 +95,7 @@ class SaveBarcodeAsImageActivity : BaseActivity() { } private fun saveBarcode() { - val saveFunc = when (spinner_save_as.selectedItemPosition) { + val saveFunc = when (binding.spinnerSaveAs.selectedItemPosition) { 0 -> { barcodeImageGenerator .generateBitmapAsync(barcode, 640, 640, 2) @@ -123,12 +125,12 @@ class SaveBarcodeAsImageActivity : BaseActivity() { } private fun showLoading(isLoading: Boolean) { - progress_bar_loading.isVisible = isLoading - scroll_view.isVisible = isLoading.not() + binding.progressBarLoading.isVisible = isLoading + binding.scrollView.isVisible = isLoading.not() } private fun showBarcodeSaved() { Toast.makeText(this, R.string.activity_save_barcode_as_image_file_name_saved, Toast.LENGTH_LONG).show() finish() } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/barcode/save/SaveBarcodeAsTextActivity.kt b/app/src/main/java/com/example/barcodescanner/feature/barcode/save/SaveBarcodeAsTextActivity.kt index eb01942b..a79d6449 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/barcode/save/SaveBarcodeAsTextActivity.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/barcode/save/SaveBarcodeAsTextActivity.kt @@ -8,6 +8,7 @@ import android.widget.ArrayAdapter import android.widget.Toast import androidx.core.view.isVisible import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.ActivitySaveBarcodeAsTextBinding import com.example.barcodescanner.di.barcodeSaver import com.example.barcodescanner.di.permissionsHelper import com.example.barcodescanner.extension.applySystemWindowInsets @@ -19,7 +20,6 @@ import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.CompositeDisposable import io.reactivex.rxkotlin.addTo import io.reactivex.schedulers.Schedulers -import kotlinx.android.synthetic.main.activity_save_barcode_as_text.* class SaveBarcodeAsTextActivity : BaseActivity() { @@ -37,6 +37,7 @@ class SaveBarcodeAsTextActivity : BaseActivity() { } } + private lateinit var binding: ActivitySaveBarcodeAsTextBinding private val barcode by unsafeLazy { intent?.getSerializableExtra(BARCODE_KEY) as? Barcode ?: throw IllegalArgumentException("No barcode passed") } @@ -45,7 +46,8 @@ class SaveBarcodeAsTextActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_save_barcode_as_text) + binding = ActivitySaveBarcodeAsTextBinding.inflate(layoutInflater) + setContentView(binding.root) supportEdgeToEdge() initToolbar() initFormatSpinner() @@ -64,17 +66,17 @@ class SaveBarcodeAsTextActivity : BaseActivity() { } private fun supportEdgeToEdge() { - root_view.applySystemWindowInsets(applyTop = true, applyBottom = true) + binding.rootView.applySystemWindowInsets(applyTop = true, applyBottom = true) } private fun initToolbar() { - toolbar.setNavigationOnClickListener { + binding.toolbar.setNavigationOnClickListener { finish() } } private fun initFormatSpinner() { - spinner_save_as.adapter = ArrayAdapter.createFromResource( + binding.spinnerSaveAs.adapter = ArrayAdapter.createFromResource( this, R.array.activity_save_barcode_as_text_formats, R.layout.item_spinner ).apply { setDropDownViewResource(R.layout.item_spinner_dropdown) @@ -82,7 +84,7 @@ class SaveBarcodeAsTextActivity : BaseActivity() { } private fun initSaveButton() { - button_save.setOnClickListener { + binding.buttonSave.setOnClickListener { requestPermissions() } } @@ -92,7 +94,7 @@ class SaveBarcodeAsTextActivity : BaseActivity() { } private fun saveBarcode() { - val saveFunc = when (spinner_save_as.selectedItemPosition) { + val saveFunc = when (binding.spinnerSaveAs.selectedItemPosition) { 0 -> barcodeSaver::saveBarcodeAsCsv 1 -> barcodeSaver::saveBarcodeAsJson else -> return @@ -114,12 +116,12 @@ class SaveBarcodeAsTextActivity : BaseActivity() { } private fun showLoading(isLoading: Boolean) { - progress_bar_loading.isVisible = isLoading - scroll_view.isVisible = isLoading.not() + binding.progressBarLoading.isVisible = isLoading + binding.scrollView.isVisible = isLoading.not() } private fun showBarcodeSaved() { Toast.makeText(this, R.string.activity_save_barcode_as_text_file_name_saved, Toast.LENGTH_LONG).show() finish() } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/common/dialog/ChooseSearchEngineDialogFragment.kt b/app/src/main/java/com/example/barcodescanner/feature/common/dialog/ChooseSearchEngineDialogFragment.kt index 64fe6a4d..6b9df936 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/common/dialog/ChooseSearchEngineDialogFragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/common/dialog/ChooseSearchEngineDialogFragment.kt @@ -53,4 +53,4 @@ class ChooseSearchEngineDialogFragment : DialogFragment() { return dialog } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/common/dialog/ConfirmBarcodeDialogFragment.kt b/app/src/main/java/com/example/barcodescanner/feature/common/dialog/ConfirmBarcodeDialogFragment.kt index 6c121a4a..e6b70937 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/common/dialog/ConfirmBarcodeDialogFragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/common/dialog/ConfirmBarcodeDialogFragment.kt @@ -53,4 +53,4 @@ class ConfirmBarcodeDialogFragment : DialogFragment() { return dialog } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/common/dialog/DeleteConfirmationDialogFragment.kt b/app/src/main/java/com/example/barcodescanner/feature/common/dialog/DeleteConfirmationDialogFragment.kt index 35de86c6..a2ec15e9 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/common/dialog/DeleteConfirmationDialogFragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/common/dialog/DeleteConfirmationDialogFragment.kt @@ -44,4 +44,4 @@ class DeleteConfirmationDialogFragment : DialogFragment() { return dialog } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/common/dialog/EditBarcodeNameDialogFragment.kt b/app/src/main/java/com/example/barcodescanner/feature/common/dialog/EditBarcodeNameDialogFragment.kt index 527feeff..fe1a9718 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/common/dialog/EditBarcodeNameDialogFragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/common/dialog/EditBarcodeNameDialogFragment.kt @@ -10,7 +10,7 @@ import androidx.appcompat.app.AlertDialog import androidx.core.content.ContextCompat import androidx.fragment.app.DialogFragment import com.example.barcodescanner.R -import kotlinx.android.synthetic.main.dialog_edit_barcode_name.view.* +import com.example.barcodescanner.databinding.DialogEditBarcodeNameBinding class EditBarcodeNameDialogFragment : DialogFragment() { @@ -30,26 +30,27 @@ class EditBarcodeNameDialogFragment : DialogFragment() { } } + private var _binding: DialogEditBarcodeNameBinding? = null + private val binding get() = _binding!! + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val listener = requireActivity() as? Listener val name = arguments?.getString(NAME_KEY).orEmpty() - val view = LayoutInflater - .from(requireContext()) - .inflate(R.layout.dialog_edit_barcode_name, null, false) + _binding = DialogEditBarcodeNameBinding.inflate(LayoutInflater.from(requireContext())) val dialog = AlertDialog.Builder(requireActivity(), R.style.DialogTheme) .setTitle(R.string.dialog_edit_barcode_name_title) - .setView(view) + .setView(binding.root) .setPositiveButton(R.string.dialog_edit_barcode_name_positive_button) { _, _ -> - val newName = view.edit_text_barcode_name.text.toString() + val newName = binding.editTextBarcodeName.text.toString() listener?.onNameConfirmed(newName) } .setNegativeButton(R.string.dialog_edit_barcode_name_negative_button, null) .create() dialog.setOnShowListener { - initNameEditText(view.edit_text_barcode_name, name) + initNameEditText(binding.editTextBarcodeName, name) dialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(ContextCompat.getColor(requireContext(), R.color.blue)) dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(ContextCompat.getColor(requireContext(), R.color.red)) } @@ -57,6 +58,11 @@ class EditBarcodeNameDialogFragment : DialogFragment() { return dialog } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + private fun initNameEditText(editText: EditText, name: String) { editText.apply { setText(name) @@ -67,4 +73,4 @@ class EditBarcodeNameDialogFragment : DialogFragment() { val manager = requireContext().getSystemService(Activity.INPUT_METHOD_SERVICE) as? InputMethodManager manager?.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/common/dialog/ErrorDialogFragment.kt b/app/src/main/java/com/example/barcodescanner/feature/common/dialog/ErrorDialogFragment.kt index e58e596a..c9fe30bf 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/common/dialog/ErrorDialogFragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/common/dialog/ErrorDialogFragment.kt @@ -54,4 +54,4 @@ class ErrorDialogFragment : DialogFragment() { return dialog } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/common/view/DateTimePickerButton.kt b/app/src/main/java/com/example/barcodescanner/feature/common/view/DateTimePickerButton.kt index f19d6630..6d8ae7ad 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/common/view/DateTimePickerButton.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/common/view/DateTimePickerButton.kt @@ -4,32 +4,29 @@ import android.content.Context import android.content.res.TypedArray import android.util.AttributeSet import android.view.LayoutInflater -import android.view.View import android.widget.FrameLayout import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.LayoutDateTimePickerButtonBinding import com.example.barcodescanner.extension.formatOrNull import com.github.florent37.singledateandtimepicker.dialog.SingleDateAndTimePickerDialog -import kotlinx.android.synthetic.main.layout_date_time_picker_button.view.* import java.text.SimpleDateFormat import java.util.* class DateTimePickerButton : FrameLayout { private val dateFormatter = SimpleDateFormat("dd.MM.yyyy HH:mm", Locale.ENGLISH) - private val view: View + private lateinit var binding: LayoutDateTimePickerButtonBinding constructor(context: Context) : this(context, null) constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, -1) constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { - view = LayoutInflater - .from(context) - .inflate(R.layout.layout_date_time_picker_button, this, true) + binding = LayoutDateTimePickerButtonBinding.inflate(LayoutInflater.from(context), this, true) context.obtainStyledAttributes(attrs, R.styleable.DateTimePickerButton).apply { showHint(this) recycle() } - view.setOnClickListener { + binding.root.setOnClickListener { showDateTimePickerDialog() } @@ -43,13 +40,13 @@ class DateTimePickerButton : FrameLayout { } private fun showHint(attributes: TypedArray) { - view.text_view_hint.text = attributes.getString(R.styleable.DateTimePickerButton_hint).orEmpty() + binding.textViewHint.text = attributes.getString(R.styleable.DateTimePickerButton_hint).orEmpty() } private fun showDateTimePickerDialog() { SingleDateAndTimePickerDialog.Builder(context) .backgroundColor(context.resources.getColor(R.color.date_time_picker_dialog_background_color)) - .title(view.text_view_hint.text.toString()) + .title(binding.textViewHint.text.toString()) .mainColor(context.resources.getColor(R.color.blue)) .listener { newDateTime -> dateTime = newDateTime.time @@ -59,6 +56,6 @@ class DateTimePickerButton : FrameLayout { } private fun showDateTime() { - view.text_view_date_time.text = dateFormatter.formatOrNull(dateTime).orEmpty() + binding.textViewDateTime.text = dateFormatter.formatOrNull(dateTime).orEmpty() } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/common/view/IconButton.kt b/app/src/main/java/com/example/barcodescanner/feature/common/view/IconButton.kt index 835e1e4a..96a7d256 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/common/view/IconButton.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/common/view/IconButton.kt @@ -5,27 +5,24 @@ import android.content.res.TypedArray import android.graphics.drawable.GradientDrawable import android.util.AttributeSet import android.view.LayoutInflater -import android.view.View import android.widget.FrameLayout import androidx.appcompat.content.res.AppCompatResources import androidx.core.content.ContextCompat import com.example.barcodescanner.R -import kotlinx.android.synthetic.main.layout_icon_button.view.* +import com.example.barcodescanner.databinding.LayoutIconButtonBinding class IconButton : FrameLayout { - private val view: View + private lateinit var binding: LayoutIconButtonBinding var text: String - get() = view.text_view.text.toString() - set(value) { view.text_view.text = value } + get() = binding.textView.text.toString() + set(value) { binding.textView.text = value } constructor(context: Context) : this(context, null) constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, -1) constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { - view = LayoutInflater - .from(context) - .inflate(R.layout.layout_icon_button, this, true) + binding = LayoutIconButtonBinding.inflate(LayoutInflater.from(context), this, true) context.obtainStyledAttributes(attrs, R.styleable.IconButton).apply { showIcon(this) @@ -38,24 +35,24 @@ class IconButton : FrameLayout { private fun showIcon(attributes: TypedArray) { val iconResId = attributes.getResourceId(R.styleable.IconButton_icon, -1) val icon = AppCompatResources.getDrawable(context, iconResId) - view.image_view_schema.setImageDrawable(icon) + binding.imageViewSchema.setImageDrawable(icon) } private fun showIconBackgroundColor(attributes: TypedArray) { val color = attributes.getColor( R.styleable.IconButton_iconBackground, - ContextCompat.getColor(view.context, R.color.green) + ContextCompat.getColor(binding.root.context, R.color.green) ) - (view.layout_image.background.mutate() as GradientDrawable).setColor(color) + (binding.layoutImage.background.mutate() as GradientDrawable).setColor(color) } private fun showText(attributes: TypedArray) { - view.text_view.text = attributes.getString(R.styleable.IconButton_text).orEmpty() + binding.textView.text = attributes.getString(R.styleable.IconButton_text).orEmpty() } override fun setEnabled(enabled: Boolean) { super.setEnabled(enabled) - view.image_view_schema.isEnabled = enabled - view.text_view.isEnabled = enabled + binding.imageViewSchema.isEnabled = enabled + binding.textView.isEnabled = enabled } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/common/view/IconButtonWithDelimiter.kt b/app/src/main/java/com/example/barcodescanner/feature/common/view/IconButtonWithDelimiter.kt index a8e7cf17..b3bd0190 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/common/view/IconButtonWithDelimiter.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/common/view/IconButtonWithDelimiter.kt @@ -5,24 +5,21 @@ import android.content.res.TypedArray import android.graphics.drawable.GradientDrawable import android.util.AttributeSet import android.view.LayoutInflater -import android.view.View import android.widget.FrameLayout import androidx.appcompat.content.res.AppCompatResources import androidx.core.view.isInvisible import androidx.core.view.isVisible import com.example.barcodescanner.R -import kotlinx.android.synthetic.main.layout_icon_button_with_delimiter.view.* +import com.example.barcodescanner.databinding.LayoutIconButtonWithDelimiterBinding class IconButtonWithDelimiter : FrameLayout { - private val view: View + private lateinit var binding: LayoutIconButtonWithDelimiterBinding constructor(context: Context) : this(context, null) constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, -1) constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { - view = LayoutInflater - .from(context) - .inflate(R.layout.layout_icon_button_with_delimiter, this, true) + binding = LayoutIconButtonWithDelimiterBinding.inflate(LayoutInflater.from(context), this, true) context.obtainStyledAttributes(attrs, R.styleable.IconButtonWithDelimiter).apply { showIcon(this) @@ -37,29 +34,29 @@ class IconButtonWithDelimiter : FrameLayout { private fun showIcon(attributes: TypedArray) { val iconResId = attributes.getResourceId(R.styleable.IconButtonWithDelimiter_icon, -1) val icon = AppCompatResources.getDrawable(context, iconResId) - view.image_view_schema.setImageDrawable(icon) + binding.imageViewSchema.setImageDrawable(icon) } private fun showIconBackgroundColor(attributes: TypedArray) { - val color = attributes.getColor(R.styleable.IconButtonWithDelimiter_iconBackground, view.context.resources.getColor(R.color.green)) - (view.layout_image.background.mutate() as GradientDrawable).setColor(color) + val color = attributes.getColor(R.styleable.IconButtonWithDelimiter_iconBackground, binding.root.context.resources.getColor(R.color.green)) + (binding.layoutImage.background.mutate() as GradientDrawable).setColor(color) } private fun showText(attributes: TypedArray) { - view.text_view.text = attributes.getString(R.styleable.IconButtonWithDelimiter_text).orEmpty() + binding.textView.text = attributes.getString(R.styleable.IconButtonWithDelimiter_text).orEmpty() } private fun showArrow(attributes: TypedArray) { - view.image_view_arrow.isVisible = attributes.getBoolean(R.styleable.IconButtonWithDelimiter_isArrowVisible, false) + binding.imageViewArrow.isVisible = attributes.getBoolean(R.styleable.IconButtonWithDelimiter_isArrowVisible, false) } private fun showDelimiter(attributes: TypedArray) { - view.delimiter.isInvisible = attributes.getBoolean(R.styleable.IconButtonWithDelimiter_isDelimiterVisible, true).not() + binding.delimiter.isInvisible = attributes.getBoolean(R.styleable.IconButtonWithDelimiter_isDelimiterVisible, true).not() } override fun setEnabled(enabled: Boolean) { super.setEnabled(enabled) - view.image_view_schema.isEnabled = enabled - view.text_view.isEnabled = enabled + binding.imageViewSchema.isEnabled = enabled + binding.textView.isEnabled = enabled } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/common/view/ResultPointsView.kt b/app/src/main/java/com/example/barcodescanner/feature/common/view/ResultPointsView.kt index 7877d7f2..c2ebd6b3 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/common/view/ResultPointsView.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/common/view/ResultPointsView.kt @@ -85,4 +85,4 @@ class ResultPointsView : View { val scale = Math.max(wScale, hScale) preScale(scale, scale, imageWidth / 2f, imageHeight / 2f) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/common/view/SettingsButton.kt b/app/src/main/java/com/example/barcodescanner/feature/common/view/SettingsButton.kt index 2642ca2b..751ae8d6 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/common/view/SettingsButton.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/common/view/SettingsButton.kt @@ -4,21 +4,18 @@ import android.content.Context import android.content.res.TypedArray import android.util.AttributeSet import android.view.LayoutInflater -import android.view.View import android.widget.FrameLayout import androidx.core.view.isVisible import com.example.barcodescanner.R -import kotlinx.android.synthetic.main.layout_settings_button.view.* +import com.example.barcodescanner.databinding.LayoutSettingsButtonBinding class SettingsButton : FrameLayout { - private val view: View + private lateinit var binding: LayoutSettingsButtonBinding constructor(context: Context) : this(context, null) constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, -1) constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { - view = LayoutInflater - .from(context) - .inflate(R.layout.layout_settings_button, this, true) + binding = LayoutSettingsButtonBinding.inflate(LayoutInflater.from(context), this, true) context.obtainStyledAttributes(attrs, R.styleable.SettingsButton).apply { showText(this) @@ -27,33 +24,33 @@ class SettingsButton : FrameLayout { recycle() } } - + var hint: String - get() = view.text_view_hint.text.toString() + get() = binding.textViewHint.text.toString() set(value) { - view.text_view_hint.apply { + binding.textViewHint.apply { text = value isVisible = text.isNullOrEmpty().not() } } var isChecked: Boolean - get() = view.switch_button.isChecked - set(value) { view.switch_button.isChecked = value } + get() = binding.switchButton.isChecked + set(value) { binding.switchButton.isChecked = value } override fun setEnabled(enabled: Boolean) { super.setEnabled(enabled) - text_view_text.isEnabled = enabled + binding.textViewText.isEnabled = enabled } fun setCheckedChangedListener(listener: ((Boolean) -> Unit)?) { - view.switch_button.setOnCheckedChangeListener { _, isChecked -> + binding.switchButton.setOnCheckedChangeListener { _, isChecked -> listener?.invoke(isChecked) } } private fun showText(attributes: TypedArray) { - view.text_view_text.text = attributes.getString(R.styleable.SettingsButton_text).orEmpty() + binding.textViewText.text = attributes.getString(R.styleable.SettingsButton_text).orEmpty() } private fun showHint(attributes: TypedArray) { @@ -61,11 +58,11 @@ class SettingsButton : FrameLayout { } private fun showSwitch(attributes: TypedArray) { - view.switch_button.isVisible = attributes.getBoolean(R.styleable.SettingsButton_isSwitchVisible, true) - if (view.switch_button.isVisible) { - view.setOnClickListener { - view.switch_button.toggle() + binding.switchButton.isVisible = attributes.getBoolean(R.styleable.SettingsButton_isSwitchVisible, true) + if (binding.switchButton.isVisible) { + binding.root.setOnClickListener { + binding.switchButton.toggle() } } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/common/view/SettingsRadioButton.kt b/app/src/main/java/com/example/barcodescanner/feature/common/view/SettingsRadioButton.kt index 29b1e2f5..99a827e3 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/common/view/SettingsRadioButton.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/common/view/SettingsRadioButton.kt @@ -4,21 +4,18 @@ import android.content.Context import android.content.res.TypedArray import android.util.AttributeSet import android.view.LayoutInflater -import android.view.View import android.widget.FrameLayout import androidx.core.view.isInvisible import com.example.barcodescanner.R -import kotlinx.android.synthetic.main.layout_settings_radio_button.view.* +import com.example.barcodescanner.databinding.LayoutSettingsRadioButtonBinding class SettingsRadioButton : FrameLayout { - private val view: View - + private lateinit var binding: LayoutSettingsRadioButtonBinding + constructor(context: Context) : this(context, null) constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, -1) constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { - view = LayoutInflater - .from(context) - .inflate(R.layout.layout_settings_radio_button, this, true) + binding = LayoutSettingsRadioButtonBinding.inflate(LayoutInflater.from(context), this, true) context.obtainStyledAttributes(attrs, R.styleable.SettingsRadioButton).apply { showText(this) @@ -26,26 +23,26 @@ class SettingsRadioButton : FrameLayout { recycle() } - view.setOnClickListener { - radio_button.toggle() + binding.root.setOnClickListener { + binding.radioButton.toggle() } } var isChecked: Boolean - get() = view.radio_button.isChecked - set(value) { view.radio_button.isChecked = value } - + get() = binding.radioButton.isChecked + set(value) { binding.radioButton.isChecked = value } + fun setCheckedChangedListener(listener: ((Boolean) -> Unit)?) { - view.radio_button.setOnCheckedChangeListener { _, isChecked -> + binding.radioButton.setOnCheckedChangeListener { _, isChecked -> listener?.invoke(isChecked) } } private fun showText(attributes: TypedArray) { - view.text_view_text.text = attributes.getString(R.styleable.SettingsRadioButton_text).orEmpty() + binding.textViewText.text = attributes.getString(R.styleable.SettingsRadioButton_text).orEmpty() } private fun showDelimiter(attributes: TypedArray) { - view.delimiter.isInvisible = attributes.getBoolean(R.styleable.SettingsRadioButton_isDelimiterVisible, true).not() + binding.delimiter.isInvisible = attributes.getBoolean(R.styleable.SettingsRadioButton_isDelimiterVisible, true).not() } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/common/view/SquareImageView.kt b/app/src/main/java/com/example/barcodescanner/feature/common/view/SquareImageView.kt index baba9135..589a3981 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/common/view/SquareImageView.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/common/view/SquareImageView.kt @@ -17,4 +17,4 @@ class SquareImageView : AppCompatImageView { override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { super.onMeasure(widthMeasureSpec, widthMeasureSpec) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/BottomTabsActivity.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/BottomTabsActivity.kt index 85d3185e..9b7df8a9 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/BottomTabsActivity.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/BottomTabsActivity.kt @@ -11,11 +11,13 @@ import com.example.barcodescanner.feature.tabs.create.CreateBarcodeFragment import com.example.barcodescanner.feature.tabs.history.BarcodeHistoryFragment import com.example.barcodescanner.feature.tabs.scan.ScanBarcodeFromCameraFragment import com.example.barcodescanner.feature.tabs.settings.SettingsFragment +import com.example.barcodescanner.databinding.ActivityBottomTabsBinding import com.google.android.material.bottomnavigation.BottomNavigationView -import kotlinx.android.synthetic.main.activity_bottom_tabs.* class BottomTabsActivity : BaseActivity(), BottomNavigationView.OnNavigationItemSelectedListener { + private lateinit var binding: ActivityBottomTabsBinding + companion object { private const val ACTION_CREATE_BARCODE = "${BuildConfig.APPLICATION_ID}.CREATE_BARCODE" private const val ACTION_HISTORY = "${BuildConfig.APPLICATION_ID}.HISTORY" @@ -23,7 +25,8 @@ class BottomTabsActivity : BaseActivity(), BottomNavigationView.OnNavigationItem override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_bottom_tabs) + binding = ActivityBottomTabsBinding.inflate(layoutInflater) + setContentView(binding.root) supportEdgeToEdge() initBottomNavigationView() @@ -34,7 +37,7 @@ class BottomTabsActivity : BaseActivity(), BottomNavigationView.OnNavigationItem } override fun onNavigationItemSelected(item: MenuItem): Boolean { - if (item.itemId == bottom_navigation_view.selectedItemId) { + if (item.itemId == binding.bottomNavigationView.selectedItemId) { return false } showFragment(item.itemId) @@ -42,27 +45,27 @@ class BottomTabsActivity : BaseActivity(), BottomNavigationView.OnNavigationItem } override fun onBackPressed() { - if (bottom_navigation_view.selectedItemId == R.id.item_scan) { + if (binding.bottomNavigationView.selectedItemId == R.id.item_scan) { super.onBackPressed() } else { - bottom_navigation_view.selectedItemId = R.id.item_scan + binding.bottomNavigationView.selectedItemId = R.id.item_scan } } private fun supportEdgeToEdge() { - bottom_navigation_view.applySystemWindowInsets(applyBottom = true) + binding.bottomNavigationView.applySystemWindowInsets(applyBottom = true) } private fun initBottomNavigationView() { - bottom_navigation_view.apply { + binding.bottomNavigationView.apply { setOnNavigationItemSelectedListener(this@BottomTabsActivity) } } private fun showInitialFragment() { when (intent?.action) { - ACTION_CREATE_BARCODE -> bottom_navigation_view.selectedItemId = R.id.item_create - ACTION_HISTORY -> bottom_navigation_view.selectedItemId = R.id.item_history + ACTION_CREATE_BARCODE -> binding.bottomNavigationView.selectedItemId = R.id.item_create + ACTION_HISTORY -> binding.bottomNavigationView.selectedItemId = R.id.item_history else -> showFragment(R.id.item_scan) } } @@ -84,4 +87,4 @@ class BottomTabsActivity : BaseActivity(), BottomNavigationView.OnNavigationItem .setReorderingAllowed(true) .commit() } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/BaseCreateBarcodeFragment.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/BaseCreateBarcodeFragment.kt index a3ac146d..a9b5f05c 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/BaseCreateBarcodeFragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/BaseCreateBarcodeFragment.kt @@ -16,4 +16,4 @@ abstract class BaseCreateBarcodeFragment : Fragment() { open fun showPhone(phone: String) {} open fun showContact(contact: Contact) {} open fun showLocation(latitude: Double?, longitude: Double?) {} -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/CreateBarcodeActivity.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/CreateBarcodeActivity.kt index 53f5c218..eb814589 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/CreateBarcodeActivity.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/CreateBarcodeActivity.kt @@ -10,6 +10,7 @@ import android.provider.ContactsContract import android.widget.Toast import androidx.core.content.ContextCompat import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.ActivityCreateBarcodeBinding import com.example.barcodescanner.di.* import com.example.barcodescanner.extension.applySystemWindowInsets import com.example.barcodescanner.extension.showError @@ -30,7 +31,6 @@ import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.CompositeDisposable import io.reactivex.rxkotlin.addTo import io.reactivex.schedulers.Schedulers -import kotlinx.android.synthetic.main.activity_create_barcode.* class CreateBarcodeActivity : BaseActivity(), AppAdapter.Listener { @@ -57,6 +57,7 @@ class CreateBarcodeActivity : BaseActivity(), AppAdapter.Listener { } private val disposable = CompositeDisposable() + private lateinit var binding: ActivityCreateBarcodeBinding private val barcodeFormat by unsafeLazy { BarcodeFormat.values().getOrNull(intent?.getIntExtra(BARCODE_FORMAT_KEY, -1) ?: -1) @@ -80,7 +81,7 @@ class CreateBarcodeActivity : BaseActivity(), AppAdapter.Listener { R.drawable.ic_confirm_disabled } - toolbar.menu?.findItem(R.id.item_create_barcode)?.apply { + binding.toolbar.menu?.findItem(R.id.item_create_barcode)?.apply { icon = ContextCompat.getDrawable(this@CreateBarcodeActivity, iconId) isEnabled = enabled } @@ -93,7 +94,8 @@ class CreateBarcodeActivity : BaseActivity(), AppAdapter.Listener { return } - setContentView(R.layout.activity_create_barcode) + binding = ActivityCreateBarcodeBinding.inflate(layoutInflater) + setContentView(binding.root) supportEdgeToEdge() handleToolbarBackClicked() handleToolbarMenuItemClicked() @@ -135,7 +137,7 @@ class CreateBarcodeActivity : BaseActivity(), AppAdapter.Listener { } private fun supportEdgeToEdge() { - root_view.applySystemWindowInsets(applyTop = true, applyBottom = true) + binding.rootView.applySystemWindowInsets(applyTop = true, applyBottom = true) } private fun createBarcodeImmediatelyIfNeeded(): Boolean { @@ -193,13 +195,13 @@ class CreateBarcodeActivity : BaseActivity(), AppAdapter.Listener { } private fun handleToolbarBackClicked() { - toolbar.setNavigationOnClickListener { + binding.toolbar.setNavigationOnClickListener { finish() } } private fun handleToolbarMenuItemClicked() { - toolbar.setOnMenuItemClickListener { item -> + binding.toolbar.setOnMenuItemClickListener { item -> when (item.itemId) { R.id.item_phone -> choosePhone() R.id.item_contacts -> requestContactsPermissions() @@ -211,7 +213,7 @@ class CreateBarcodeActivity : BaseActivity(), AppAdapter.Listener { private fun showToolbarTitle() { val titleId = barcodeSchema?.toStringId() ?: barcodeFormat.toStringId() - toolbar.setTitle(titleId) + binding.toolbar.setTitle(titleId) } private fun showToolbarMenu() { @@ -221,7 +223,7 @@ class CreateBarcodeActivity : BaseActivity(), AppAdapter.Listener { BarcodeSchema.VCARD, BarcodeSchema.MECARD -> R.menu.menu_create_qr_code_contacts else -> R.menu.menu_create_barcode } - toolbar.inflateMenu(menuId) + binding.toolbar.inflateMenu(menuId) } private fun showFragment() { @@ -338,4 +340,4 @@ class CreateBarcodeActivity : BaseActivity(), AppAdapter.Listener { finish() } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/CreateBarcodeFragment.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/CreateBarcodeFragment.kt index c68393a5..2455eda6 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/CreateBarcodeFragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/CreateBarcodeFragment.kt @@ -6,6 +6,7 @@ import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.FragmentCreateBarcodeBinding import com.example.barcodescanner.extension.applySystemWindowInsets import com.example.barcodescanner.extension.clipboardManager import com.example.barcodescanner.extension.orZero @@ -13,12 +14,15 @@ import com.example.barcodescanner.feature.tabs.create.barcode.CreateBarcodeAllAc import com.example.barcodescanner.feature.tabs.create.qr.CreateQrCodeAllActivity import com.example.barcodescanner.model.schema.BarcodeSchema import com.google.zxing.BarcodeFormat -import kotlinx.android.synthetic.main.fragment_create_barcode.* class CreateBarcodeFragment : Fragment() { - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_create_barcode, container, false) + private var _binding: FragmentCreateBarcodeBinding? = null + private val binding get() = _binding!! + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentCreateBarcodeBinding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -27,22 +31,27 @@ class CreateBarcodeFragment : Fragment() { handleButtonsClicked() } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + private fun supportEdgeToEdge() { - app_bar_layout.applySystemWindowInsets(applyTop = true) + binding.appBarLayout.applySystemWindowInsets(applyTop = true) } private fun handleButtonsClicked() { // QR code - button_clipboard.setOnClickListener { CreateBarcodeActivity.start(requireActivity(), BarcodeFormat.QR_CODE, BarcodeSchema.OTHER, getClipboardContent()) } - button_text.setOnClickListener { CreateBarcodeActivity.start(requireActivity(), BarcodeFormat.QR_CODE, BarcodeSchema.OTHER) } - button_url.setOnClickListener { CreateBarcodeActivity.start(requireActivity(), BarcodeFormat.QR_CODE, BarcodeSchema.URL) } - button_wifi.setOnClickListener { CreateBarcodeActivity.start(requireActivity(), BarcodeFormat.QR_CODE, BarcodeSchema.WIFI) } - button_location.setOnClickListener { CreateBarcodeActivity.start(requireActivity(), BarcodeFormat.QR_CODE, BarcodeSchema.GEO) } - button_contact_vcard.setOnClickListener { CreateBarcodeActivity.start(requireActivity(), BarcodeFormat.QR_CODE, BarcodeSchema.VCARD) } - button_show_all_qr_code.setOnClickListener { CreateQrCodeAllActivity.start(requireActivity()) } + binding.buttonClipboard.setOnClickListener { CreateBarcodeActivity.start(requireActivity(), BarcodeFormat.QR_CODE, BarcodeSchema.OTHER, getClipboardContent()) } + binding.buttonText.setOnClickListener { CreateBarcodeActivity.start(requireActivity(), BarcodeFormat.QR_CODE, BarcodeSchema.OTHER) } + binding.buttonUrl.setOnClickListener { CreateBarcodeActivity.start(requireActivity(), BarcodeFormat.QR_CODE, BarcodeSchema.URL) } + binding.buttonWifi.setOnClickListener { CreateBarcodeActivity.start(requireActivity(), BarcodeFormat.QR_CODE, BarcodeSchema.WIFI) } + binding.buttonLocation.setOnClickListener { CreateBarcodeActivity.start(requireActivity(), BarcodeFormat.QR_CODE, BarcodeSchema.GEO) } + binding.buttonContactVcard.setOnClickListener { CreateBarcodeActivity.start(requireActivity(), BarcodeFormat.QR_CODE, BarcodeSchema.VCARD) } + binding.buttonShowAllQrCode.setOnClickListener { CreateQrCodeAllActivity.start(requireActivity()) } // Barcode - button_create_barcode.setOnClickListener { CreateBarcodeAllActivity.start(requireActivity()) } + binding.buttonCreateBarcode.setOnClickListener { CreateBarcodeAllActivity.start(requireActivity()) } } private fun getClipboardContent(): String { @@ -52,4 +61,4 @@ class CreateBarcodeFragment : Fragment() { else -> clip.getItemAt(0).text.toString() } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateAztecFragment.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateAztecFragment.kt index c3ecf6a7..9fd1ab08 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateAztecFragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateAztecFragment.kt @@ -5,29 +5,36 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.widget.addTextChangedListener -import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.FragmentCreateAztecBinding import com.example.barcodescanner.extension.isNotBlank import com.example.barcodescanner.extension.textString import com.example.barcodescanner.feature.tabs.create.BaseCreateBarcodeFragment import com.example.barcodescanner.model.schema.Other import com.example.barcodescanner.model.schema.Schema -import kotlinx.android.synthetic.main.fragment_create_aztec.* class CreateAztecFragment : BaseCreateBarcodeFragment() { + private var _binding: FragmentCreateAztecBinding? = null + private val binding get() = _binding!! - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_create_aztec, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentCreateAztecBinding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - edit_text.requestFocus() - edit_text.addTextChangedListener { - parentActivity.isCreateBarcodeButtonEnabled = edit_text.isNotBlank() + binding.editText.requestFocus() + binding.editText.addTextChangedListener { + parentActivity.isCreateBarcodeButtonEnabled = binding.editText.isNotBlank() } } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + override fun getBarcodeSchema(): Schema { - return Other(edit_text.textString) + return Other(binding.editText.textString) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateBarcodeAllActivity.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateBarcodeAllActivity.kt index b8de02bd..7f6c266c 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateBarcodeAllActivity.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateBarcodeAllActivity.kt @@ -3,12 +3,11 @@ package com.example.barcodescanner.feature.tabs.create.barcode import android.content.Context import android.content.Intent import android.os.Bundle -import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.ActivityCreateBarcodeAllBinding import com.example.barcodescanner.extension.applySystemWindowInsets import com.example.barcodescanner.feature.BaseActivity import com.example.barcodescanner.feature.tabs.create.CreateBarcodeActivity import com.google.zxing.BarcodeFormat -import kotlinx.android.synthetic.main.activity_create_barcode_all.* class CreateBarcodeAllActivity : BaseActivity() { @@ -20,36 +19,39 @@ class CreateBarcodeAllActivity : BaseActivity() { } } + private lateinit var binding: ActivityCreateBarcodeAllBinding + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_create_barcode_all) + binding = ActivityCreateBarcodeAllBinding.inflate(layoutInflater) + setContentView(binding.root) supportEdgeToEdge() handleToolbarBackClicked() handleButtonsClicked() } private fun supportEdgeToEdge() { - root_view.applySystemWindowInsets(applyTop = true, applyBottom = true) + binding.rootView.applySystemWindowInsets(applyTop = true, applyBottom = true) } private fun handleToolbarBackClicked() { - toolbar.setNavigationOnClickListener { + binding.toolbar.setNavigationOnClickListener { finish() } } private fun handleButtonsClicked() { - button_data_matrix.setOnClickListener { CreateBarcodeActivity.start(this, BarcodeFormat.DATA_MATRIX) } - button_aztec.setOnClickListener { CreateBarcodeActivity.start(this, BarcodeFormat.AZTEC) } - button_pdf_417.setOnClickListener { CreateBarcodeActivity.start(this, BarcodeFormat.PDF_417) } - button_codabar.setOnClickListener { CreateBarcodeActivity.start(this, BarcodeFormat.CODABAR) } - button_code_39.setOnClickListener { CreateBarcodeActivity.start(this, BarcodeFormat.CODE_39) } - button_code_93.setOnClickListener { CreateBarcodeActivity.start(this, BarcodeFormat.CODE_93) } - button_code_128.setOnClickListener { CreateBarcodeActivity.start(this, BarcodeFormat.CODE_128) } - button_ean_8.setOnClickListener { CreateBarcodeActivity.start(this, BarcodeFormat.EAN_8) } - button_ean_13.setOnClickListener { CreateBarcodeActivity.start(this, BarcodeFormat.EAN_13) } - button_itf_14.setOnClickListener { CreateBarcodeActivity.start(this, BarcodeFormat.ITF) } - button_upc_a.setOnClickListener { CreateBarcodeActivity.start(this, BarcodeFormat.UPC_A) } - button_upc_e.setOnClickListener { CreateBarcodeActivity.start(this, BarcodeFormat.UPC_E) } + binding.buttonDataMatrix.setOnClickListener { CreateBarcodeActivity.start(this, BarcodeFormat.DATA_MATRIX) } + binding.buttonAztec.setOnClickListener { CreateBarcodeActivity.start(this, BarcodeFormat.AZTEC) } + binding.buttonPdf417.setOnClickListener { CreateBarcodeActivity.start(this, BarcodeFormat.PDF_417) } + binding.buttonCodabar.setOnClickListener { CreateBarcodeActivity.start(this, BarcodeFormat.CODABAR) } + binding.buttonCode39.setOnClickListener { CreateBarcodeActivity.start(this, BarcodeFormat.CODE_39) } + binding.buttonCode93.setOnClickListener { CreateBarcodeActivity.start(this, BarcodeFormat.CODE_93) } + binding.buttonCode128.setOnClickListener { CreateBarcodeActivity.start(this, BarcodeFormat.CODE_128) } + binding.buttonEan8.setOnClickListener { CreateBarcodeActivity.start(this, BarcodeFormat.EAN_8) } + binding.buttonEan13.setOnClickListener { CreateBarcodeActivity.start(this, BarcodeFormat.EAN_13) } + binding.buttonItf14.setOnClickListener { CreateBarcodeActivity.start(this, BarcodeFormat.ITF) } + binding.buttonUpcA.setOnClickListener { CreateBarcodeActivity.start(this, BarcodeFormat.UPC_A) } + binding.buttonUpcE.setOnClickListener { CreateBarcodeActivity.start(this, BarcodeFormat.UPC_E) } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateCodabarFragment.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateCodabarFragment.kt index 573f0ad6..d6dc80c9 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateCodabarFragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateCodabarFragment.kt @@ -5,29 +5,36 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.widget.addTextChangedListener -import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.FragmentCreateCodabarBinding import com.example.barcodescanner.extension.isNotBlank import com.example.barcodescanner.extension.textString import com.example.barcodescanner.feature.tabs.create.BaseCreateBarcodeFragment import com.example.barcodescanner.model.schema.Other import com.example.barcodescanner.model.schema.Schema -import kotlinx.android.synthetic.main.fragment_create_codabar.* class CreateCodabarFragment : BaseCreateBarcodeFragment() { + private var _binding: FragmentCreateCodabarBinding? = null + private val binding get() = _binding!! - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_create_codabar, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentCreateCodabarBinding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - edit_text.requestFocus() - edit_text.addTextChangedListener { - parentActivity.isCreateBarcodeButtonEnabled = edit_text.isNotBlank() + binding.editText.requestFocus() + binding.editText.addTextChangedListener { + parentActivity.isCreateBarcodeButtonEnabled = binding.editText.isNotBlank() } } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + override fun getBarcodeSchema(): Schema { - return Other(edit_text.textString) + return Other(binding.editText.textString) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateCode128Fragment.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateCode128Fragment.kt index 453ee0e8..c42cac1e 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateCode128Fragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateCode128Fragment.kt @@ -5,29 +5,36 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.widget.addTextChangedListener -import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.FragmentCreateCode128Binding import com.example.barcodescanner.extension.isNotBlank import com.example.barcodescanner.extension.textString import com.example.barcodescanner.feature.tabs.create.BaseCreateBarcodeFragment import com.example.barcodescanner.model.schema.Other import com.example.barcodescanner.model.schema.Schema -import kotlinx.android.synthetic.main.fragment_create_code_128.* class CreateCode128Fragment : BaseCreateBarcodeFragment() { + private var _binding: FragmentCreateCode128Binding? = null + private val binding get() = _binding!! - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_create_code_128, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentCreateCode128Binding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - edit_text.requestFocus() - edit_text.addTextChangedListener { - parentActivity.isCreateBarcodeButtonEnabled = edit_text.isNotBlank() + binding.editText.requestFocus() + binding.editText.addTextChangedListener { + parentActivity.isCreateBarcodeButtonEnabled = binding.editText.isNotBlank() } } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + override fun getBarcodeSchema(): Schema { - return Other(edit_text.textString) + return Other(binding.editText.textString) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateCode39Fragment.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateCode39Fragment.kt index 66414c13..2e499d70 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateCode39Fragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateCode39Fragment.kt @@ -5,29 +5,36 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.widget.addTextChangedListener -import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.FragmentCreateCode39Binding import com.example.barcodescanner.extension.isNotBlank import com.example.barcodescanner.extension.textString import com.example.barcodescanner.feature.tabs.create.BaseCreateBarcodeFragment import com.example.barcodescanner.model.schema.Other import com.example.barcodescanner.model.schema.Schema -import kotlinx.android.synthetic.main.fragment_create_code_39.* class CreateCode39Fragment : BaseCreateBarcodeFragment() { + private var _binding: FragmentCreateCode39Binding? = null + private val binding get() = _binding!! - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_create_code_39, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentCreateCode39Binding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - edit_text.requestFocus() - edit_text.addTextChangedListener { - parentActivity.isCreateBarcodeButtonEnabled = edit_text.isNotBlank() + binding.editText.requestFocus() + binding.editText.addTextChangedListener { + parentActivity.isCreateBarcodeButtonEnabled = binding.editText.isNotBlank() } } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + override fun getBarcodeSchema(): Schema { - return Other(edit_text.textString) + return Other(binding.editText.textString) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateCode93Fragment.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateCode93Fragment.kt index da8a7d45..befbff42 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateCode93Fragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateCode93Fragment.kt @@ -5,29 +5,36 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.widget.addTextChangedListener -import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.FragmentCreateCode93Binding import com.example.barcodescanner.extension.isNotBlank import com.example.barcodescanner.extension.textString import com.example.barcodescanner.feature.tabs.create.BaseCreateBarcodeFragment import com.example.barcodescanner.model.schema.Other import com.example.barcodescanner.model.schema.Schema -import kotlinx.android.synthetic.main.fragment_create_code_93.* class CreateCode93Fragment : BaseCreateBarcodeFragment() { + private var _binding: FragmentCreateCode93Binding? = null + private val binding get() = _binding!! - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_create_code_93, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentCreateCode93Binding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - edit_text.requestFocus() - edit_text.addTextChangedListener { - parentActivity.isCreateBarcodeButtonEnabled = edit_text.isNotBlank() + binding.editText.requestFocus() + binding.editText.addTextChangedListener { + parentActivity.isCreateBarcodeButtonEnabled = binding.editText.isNotBlank() } } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + override fun getBarcodeSchema(): Schema { - return Other(edit_text.textString) + return Other(binding.editText.textString) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateDataMatrixFragment.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateDataMatrixFragment.kt index 397819af..8fd3ad6c 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateDataMatrixFragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateDataMatrixFragment.kt @@ -5,29 +5,36 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.widget.addTextChangedListener -import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.FragmentCreateDataMatrixBinding import com.example.barcodescanner.extension.isNotBlank import com.example.barcodescanner.extension.textString import com.example.barcodescanner.feature.tabs.create.BaseCreateBarcodeFragment import com.example.barcodescanner.model.schema.Other import com.example.barcodescanner.model.schema.Schema -import kotlinx.android.synthetic.main.fragment_create_data_matrix.* class CreateDataMatrixFragment : BaseCreateBarcodeFragment() { + private var _binding: FragmentCreateDataMatrixBinding? = null + private val binding get() = _binding!! - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_create_data_matrix, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentCreateDataMatrixBinding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - edit_text.requestFocus() - edit_text.addTextChangedListener { - parentActivity.isCreateBarcodeButtonEnabled = edit_text.isNotBlank() + binding.editText.requestFocus() + binding.editText.addTextChangedListener { + parentActivity.isCreateBarcodeButtonEnabled = binding.editText.isNotBlank() } } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + override fun getBarcodeSchema(): Schema { - return Other(edit_text.textString) + return Other(binding.editText.textString) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateEan13Fragment.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateEan13Fragment.kt index 1544973b..4f744434 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateEan13Fragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateEan13Fragment.kt @@ -5,28 +5,35 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.widget.addTextChangedListener -import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.FragmentCreateEan13Binding import com.example.barcodescanner.extension.textString import com.example.barcodescanner.feature.tabs.create.BaseCreateBarcodeFragment import com.example.barcodescanner.model.schema.Other import com.example.barcodescanner.model.schema.Schema -import kotlinx.android.synthetic.main.fragment_create_ean_13.* class CreateEan13Fragment : BaseCreateBarcodeFragment() { + private var _binding: FragmentCreateEan13Binding? = null + private val binding get() = _binding!! - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_create_ean_13, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentCreateEan13Binding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - edit_text.requestFocus() - edit_text.addTextChangedListener { - parentActivity.isCreateBarcodeButtonEnabled = edit_text.text.length == 12 + binding.editText.requestFocus() + binding.editText.addTextChangedListener { + parentActivity.isCreateBarcodeButtonEnabled = binding.editText.text.length == 12 } } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + override fun getBarcodeSchema(): Schema { - return Other(edit_text.textString) + return Other(binding.editText.textString) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateEan8Fragment.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateEan8Fragment.kt index 720a46dd..217e2e73 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateEan8Fragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateEan8Fragment.kt @@ -5,28 +5,35 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.widget.addTextChangedListener -import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.FragmentCreateEan8Binding import com.example.barcodescanner.extension.textString import com.example.barcodescanner.feature.tabs.create.BaseCreateBarcodeFragment import com.example.barcodescanner.model.schema.Other import com.example.barcodescanner.model.schema.Schema -import kotlinx.android.synthetic.main.fragment_create_ean_8.* class CreateEan8Fragment : BaseCreateBarcodeFragment() { + private var _binding: FragmentCreateEan8Binding? = null + private val binding get() = _binding!! - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_create_ean_8, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentCreateEan8Binding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - edit_text.requestFocus() - edit_text.addTextChangedListener { - parentActivity.isCreateBarcodeButtonEnabled = edit_text.text.length == 7 + binding.editText.requestFocus() + binding.editText.addTextChangedListener { + parentActivity.isCreateBarcodeButtonEnabled = binding.editText.text.length == 7 } } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + override fun getBarcodeSchema(): Schema { - return Other(edit_text.textString) + return Other(binding.editText.textString) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateItf14Fragment.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateItf14Fragment.kt index bfdaa491..58e5a8ce 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateItf14Fragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateItf14Fragment.kt @@ -5,28 +5,35 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.widget.addTextChangedListener -import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.FragmentCreateItf14Binding import com.example.barcodescanner.extension.textString import com.example.barcodescanner.feature.tabs.create.BaseCreateBarcodeFragment import com.example.barcodescanner.model.schema.Other import com.example.barcodescanner.model.schema.Schema -import kotlinx.android.synthetic.main.fragment_create_itf_14.* class CreateItf14Fragment : BaseCreateBarcodeFragment() { + private var _binding: FragmentCreateItf14Binding? = null + private val binding get() = _binding!! - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_create_itf_14, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentCreateItf14Binding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - edit_text.requestFocus() - edit_text.addTextChangedListener { - parentActivity.isCreateBarcodeButtonEnabled = edit_text.text.length % 2 == 0 + binding.editText.requestFocus() + binding.editText.addTextChangedListener { + parentActivity.isCreateBarcodeButtonEnabled = binding.editText.text.length % 2 == 0 } } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + override fun getBarcodeSchema(): Schema { - return Other(edit_text.textString) + return Other(binding.editText.textString) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreatePdf417Fragment.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreatePdf417Fragment.kt index 9f9a3420..4e820e18 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreatePdf417Fragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreatePdf417Fragment.kt @@ -5,29 +5,36 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.widget.addTextChangedListener -import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.FragmentCreatePdf417Binding import com.example.barcodescanner.extension.isNotBlank import com.example.barcodescanner.extension.textString import com.example.barcodescanner.feature.tabs.create.BaseCreateBarcodeFragment import com.example.barcodescanner.model.schema.Other import com.example.barcodescanner.model.schema.Schema -import kotlinx.android.synthetic.main.fragment_create_pdf417.* class CreatePdf417Fragment : BaseCreateBarcodeFragment() { + private var _binding: FragmentCreatePdf417Binding? = null + private val binding get() = _binding!! - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_create_pdf417, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentCreatePdf417Binding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - edit_text.requestFocus() - edit_text.addTextChangedListener { - parentActivity.isCreateBarcodeButtonEnabled = edit_text.isNotBlank() + binding.editText.requestFocus() + binding.editText.addTextChangedListener { + parentActivity.isCreateBarcodeButtonEnabled = binding.editText.isNotBlank() } } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + override fun getBarcodeSchema(): Schema { - return Other(edit_text.textString) + return Other(binding.editText.textString) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateUpcAFragment.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateUpcAFragment.kt index 102740b2..1ce4590a 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateUpcAFragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateUpcAFragment.kt @@ -5,28 +5,35 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.widget.addTextChangedListener -import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.FragmentCreateUpcABinding import com.example.barcodescanner.extension.textString import com.example.barcodescanner.feature.tabs.create.BaseCreateBarcodeFragment import com.example.barcodescanner.model.schema.Other import com.example.barcodescanner.model.schema.Schema -import kotlinx.android.synthetic.main.fragment_create_upc_a.* class CreateUpcAFragment : BaseCreateBarcodeFragment() { + private var _binding: FragmentCreateUpcABinding? = null + private val binding get() = _binding!! - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_create_upc_a, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentCreateUpcABinding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - edit_text.requestFocus() - edit_text.addTextChangedListener { - parentActivity.isCreateBarcodeButtonEnabled = edit_text.text.length == 11 + binding.editText.requestFocus() + binding.editText.addTextChangedListener { + parentActivity.isCreateBarcodeButtonEnabled = binding.editText.text.length == 11 } } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + override fun getBarcodeSchema(): Schema { - return Other(edit_text.textString) + return Other(binding.editText.textString) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateUpcEFragment.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateUpcEFragment.kt index f46eb294..7b2cd815 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateUpcEFragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/barcode/CreateUpcEFragment.kt @@ -5,28 +5,35 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.widget.addTextChangedListener -import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.FragmentCreateUpcEBinding import com.example.barcodescanner.extension.textString import com.example.barcodescanner.feature.tabs.create.BaseCreateBarcodeFragment import com.example.barcodescanner.model.schema.Other import com.example.barcodescanner.model.schema.Schema -import kotlinx.android.synthetic.main.fragment_create_upc_e.* class CreateUpcEFragment : BaseCreateBarcodeFragment() { + private var _binding: FragmentCreateUpcEBinding? = null + private val binding get() = _binding!! - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_create_upc_e, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentCreateUpcEBinding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - edit_text.requestFocus() - edit_text.addTextChangedListener { - parentActivity.isCreateBarcodeButtonEnabled = edit_text.text.length == 7 + binding.editText.requestFocus() + binding.editText.addTextChangedListener { + parentActivity.isCreateBarcodeButtonEnabled = binding.editText.text.length == 7 } } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + override fun getBarcodeSchema(): Schema { - return Other(edit_text.textString) + return Other(binding.editText.textString) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/AppAdapter.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/AppAdapter.kt index 791a5e83..3ee5f3ac 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/AppAdapter.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/AppAdapter.kt @@ -3,12 +3,10 @@ package com.example.barcodescanner.feature.tabs.create.qr import android.content.pm.PackageManager import android.content.pm.ResolveInfo import android.view.LayoutInflater -import android.view.View import android.view.ViewGroup import androidx.core.view.isInvisible import androidx.recyclerview.widget.RecyclerView -import com.example.barcodescanner.R -import kotlinx.android.synthetic.main.item_app.view.* +import com.example.barcodescanner.databinding.ItemAppBinding class AppAdapter(private val listener: Listener) : RecyclerView.Adapter() { @@ -27,9 +25,8 @@ class AppAdapter(private val listener: Listener) : RecyclerView.Adapter) { appAdapter.apps = apps } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeBookmarkFragment.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeBookmarkFragment.kt index daa31528..64f0cd16 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeBookmarkFragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeBookmarkFragment.kt @@ -5,18 +5,20 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.widget.addTextChangedListener -import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.FragmentCreateQrCodeBookmarkBinding import com.example.barcodescanner.extension.isNotBlank import com.example.barcodescanner.extension.textString import com.example.barcodescanner.feature.tabs.create.BaseCreateBarcodeFragment import com.example.barcodescanner.model.schema.Bookmark import com.example.barcodescanner.model.schema.Schema -import kotlinx.android.synthetic.main.fragment_create_qr_code_bookmark.* class CreateQrCodeBookmarkFragment : BaseCreateBarcodeFragment() { + private var _binding: FragmentCreateQrCodeBookmarkBinding? = null + private val binding get() = _binding!! - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_create_qr_code_bookmark, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentCreateQrCodeBookmarkBinding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -25,23 +27,28 @@ class CreateQrCodeBookmarkFragment : BaseCreateBarcodeFragment() { handleTextChanged() } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + override fun getBarcodeSchema(): Schema { return Bookmark( - title = edit_text_title.textString, - url = edit_text_url.textString + title = binding.editTextTitle.textString, + url = binding.editTextUrl.textString ) } private fun initTitleEditText() { - edit_text_title.requestFocus() + binding.editTextTitle.requestFocus() } private fun handleTextChanged() { - edit_text_title.addTextChangedListener { toggleCreateBarcodeButton() } - edit_text_url.addTextChangedListener { toggleCreateBarcodeButton() } + binding.editTextTitle.addTextChangedListener { toggleCreateBarcodeButton() } + binding.editTextUrl.addTextChangedListener { toggleCreateBarcodeButton() } } private fun toggleCreateBarcodeButton() { - parentActivity.isCreateBarcodeButtonEnabled = edit_text_title.isNotBlank() || edit_text_url.isNotBlank() + parentActivity.isCreateBarcodeButtonEnabled = binding.editTextTitle.isNotBlank() || binding.editTextUrl.isNotBlank() } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeCryptocurrencyFragment.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeCryptocurrencyFragment.kt index 75380378..209e0293 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeCryptocurrencyFragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeCryptocurrencyFragment.kt @@ -7,17 +7,20 @@ import android.view.ViewGroup import android.widget.ArrayAdapter import androidx.core.widget.addTextChangedListener import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.FragmentCreateQrCodeCryptocurrencyBinding import com.example.barcodescanner.extension.isNotBlank import com.example.barcodescanner.extension.textString import com.example.barcodescanner.feature.tabs.create.BaseCreateBarcodeFragment import com.example.barcodescanner.model.schema.Cryptocurrency import com.example.barcodescanner.model.schema.Schema -import kotlinx.android.synthetic.main.fragment_create_qr_code_cryptocurrency.* class CreateQrCodeCryptocurrencyFragment : BaseCreateBarcodeFragment() { + private var _binding: FragmentCreateQrCodeCryptocurrencyBinding? = null + private val binding get() = _binding!! - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_create_qr_code_cryptocurrency, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentCreateQrCodeCryptocurrencyBinding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -27,8 +30,13 @@ class CreateQrCodeCryptocurrencyFragment : BaseCreateBarcodeFragment() { handleTextChanged() } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + override fun getBarcodeSchema(): Schema { - val cryptocurrency = when (spinner_cryptocurrency.selectedItemPosition) { + val cryptocurrency = when (binding.spinnerCryptocurrency.selectedItemPosition) { 0 -> "bitcoin" 1 -> "bitcoincash" 2 -> "ethereum" @@ -38,15 +46,15 @@ class CreateQrCodeCryptocurrencyFragment : BaseCreateBarcodeFragment() { } return Cryptocurrency( cryptocurrency = cryptocurrency, - address = edit_text_address.textString, - label = edit_text_label.textString, - amount = edit_text_amount.textString, - message = edit_text_message.textString + address = binding.editTextAddress.textString, + label = binding.editTextLabel.textString, + amount = binding.editTextAmount.textString, + message = binding.editTextMessage.textString ) } private fun initCryptocurrenciesSpinner() { - spinner_cryptocurrency.adapter = ArrayAdapter.createFromResource( + binding.spinnerCryptocurrency.adapter = ArrayAdapter.createFromResource( requireContext(), R.array.fragment_create_qr_code_cryptocurrencies, R.layout.item_spinner ).apply { setDropDownViewResource(R.layout.item_spinner_dropdown) @@ -54,16 +62,16 @@ class CreateQrCodeCryptocurrencyFragment : BaseCreateBarcodeFragment() { } private fun initAddressEditText() { - edit_text_address.requestFocus() + binding.editTextAddress.requestFocus() } private fun handleTextChanged() { - listOf(edit_text_address, edit_text_amount, edit_text_label, edit_text_message).forEach { editText -> + listOf(binding.editTextAddress, binding.editTextAmount, binding.editTextLabel, binding.editTextMessage).forEach { editText -> editText.addTextChangedListener { toggleCreateBarcodeButton() } } } private fun toggleCreateBarcodeButton() { - parentActivity.isCreateBarcodeButtonEnabled = edit_text_address.isNotBlank() + parentActivity.isCreateBarcodeButtonEnabled = binding.editTextAddress.isNotBlank() } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeEmailFragment.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeEmailFragment.kt index de55a9a4..6babff83 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeEmailFragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeEmailFragment.kt @@ -5,18 +5,20 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.widget.addTextChangedListener -import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.FragmentCreateQrCodeEmailBinding import com.example.barcodescanner.extension.isNotBlank import com.example.barcodescanner.extension.textString import com.example.barcodescanner.feature.tabs.create.BaseCreateBarcodeFragment import com.example.barcodescanner.model.schema.Email import com.example.barcodescanner.model.schema.Schema -import kotlinx.android.synthetic.main.fragment_create_qr_code_email.* class CreateQrCodeEmailFragment : BaseCreateBarcodeFragment() { + private var _binding: FragmentCreateQrCodeEmailBinding? = null + private val binding get() = _binding!! - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_create_qr_code_email, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentCreateQrCodeEmailBinding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -25,25 +27,30 @@ class CreateQrCodeEmailFragment : BaseCreateBarcodeFragment() { handleTextChanged() } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + override fun getBarcodeSchema(): Schema { return Email( - email = edit_text_email.textString, - subject = edit_text_subject.textString, - body = edit_text_message.textString + email = binding.editTextEmail.textString, + subject = binding.editTextSubject.textString, + body = binding.editTextMessage.textString ) } private fun initTitleEditText() { - edit_text_email.requestFocus() + binding.editTextEmail.requestFocus() } private fun handleTextChanged() { - edit_text_email.addTextChangedListener { toggleCreateBarcodeButton() } - edit_text_subject.addTextChangedListener { toggleCreateBarcodeButton() } - edit_text_message.addTextChangedListener { toggleCreateBarcodeButton() } + binding.editTextEmail.addTextChangedListener { toggleCreateBarcodeButton() } + binding.editTextSubject.addTextChangedListener { toggleCreateBarcodeButton() } + binding.editTextMessage.addTextChangedListener { toggleCreateBarcodeButton() } } private fun toggleCreateBarcodeButton() { - parentActivity.isCreateBarcodeButtonEnabled = edit_text_email.isNotBlank() || edit_text_subject.isNotBlank() || edit_text_message.isNotBlank() + parentActivity.isCreateBarcodeButtonEnabled = binding.editTextEmail.isNotBlank() || binding.editTextSubject.isNotBlank() || binding.editTextMessage.isNotBlank() } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeEventFragment.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeEventFragment.kt index 2f449d3e..aebb343f 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeEventFragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeEventFragment.kt @@ -4,32 +4,39 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.FragmentCreateQrCodeVeventBinding import com.example.barcodescanner.extension.textString import com.example.barcodescanner.feature.tabs.create.BaseCreateBarcodeFragment import com.example.barcodescanner.model.schema.Schema import com.example.barcodescanner.model.schema.VEvent -import kotlinx.android.synthetic.main.fragment_create_qr_code_vevent.* class CreateQrCodeEventFragment : BaseCreateBarcodeFragment() { + private var _binding: FragmentCreateQrCodeVeventBinding? = null + private val binding get() = _binding!! - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_create_qr_code_vevent, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentCreateQrCodeVeventBinding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - edit_text_title.requestFocus() + binding.editTextTitle.requestFocus() parentActivity.isCreateBarcodeButtonEnabled = true } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + override fun getBarcodeSchema(): Schema { return VEvent( - uid = edit_text_title.textString, - organizer = edit_text_organizer.textString, - summary = edit_text_summary.textString, - startDate = button_date_time_start.dateTime, - endDate = button_date_time_end.dateTime + uid = binding.editTextTitle.textString, + organizer = binding.editTextOrganizer.textString, + summary = binding.editTextSummary.textString, + startDate = binding.buttonDateTimeStart.dateTime, + endDate = binding.buttonDateTimeEnd.dateTime ) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeLocationFragment.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeLocationFragment.kt index 42455c50..2ecdd42a 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeLocationFragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeLocationFragment.kt @@ -5,24 +5,26 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.widget.addTextChangedListener -import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.FragmentCreateQrCodeLocationBinding import com.example.barcodescanner.extension.isNotBlank import com.example.barcodescanner.extension.textString import com.example.barcodescanner.feature.tabs.create.BaseCreateBarcodeFragment import com.example.barcodescanner.model.schema.Geo import com.example.barcodescanner.model.schema.Schema -import kotlinx.android.synthetic.main.fragment_create_qr_code_location.* class CreateQrCodeLocationFragment : BaseCreateBarcodeFragment() { + private var _binding: FragmentCreateQrCodeLocationBinding? = null + private val binding get() = _binding!! override val latitude: Double? - get() = edit_text_latitude.textString.toDoubleOrNull() + get() = binding.editTextLatitude.textString.toDoubleOrNull() override val longitude: Double? - get() = edit_text_longitude.textString.toDoubleOrNull() + get() = binding.editTextLongitude.textString.toDoubleOrNull() - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_create_qr_code_location, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentCreateQrCodeLocationBinding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -31,33 +33,38 @@ class CreateQrCodeLocationFragment : BaseCreateBarcodeFragment() { handleTextChanged() } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + override fun getBarcodeSchema(): Schema { return Geo( - latitude = edit_text_latitude.textString, - longitude = edit_text_longitude.textString, - altitude = edit_text_altitude.textString + latitude = binding.editTextLatitude.textString, + longitude = binding.editTextLongitude.textString, + altitude = binding.editTextAltitude.textString ) } override fun showLocation(latitude: Double?, longitude: Double?) { latitude?.apply { - edit_text_latitude.setText(latitude.toString()) + binding.editTextLatitude.setText(latitude.toString()) } longitude?.apply { - edit_text_longitude.setText(longitude.toString()) + binding.editTextLongitude.setText(longitude.toString()) } } private fun initLatitudeEditText() { - edit_text_latitude.requestFocus() + binding.editTextLatitude.requestFocus() } private fun handleTextChanged() { - edit_text_latitude.addTextChangedListener { toggleCreateBarcodeButton() } - edit_text_longitude.addTextChangedListener { toggleCreateBarcodeButton() } + binding.editTextLatitude.addTextChangedListener { toggleCreateBarcodeButton() } + binding.editTextLongitude.addTextChangedListener { toggleCreateBarcodeButton() } } private fun toggleCreateBarcodeButton() { - parentActivity.isCreateBarcodeButtonEnabled = edit_text_latitude.isNotBlank() && edit_text_longitude.isNotBlank() + parentActivity.isCreateBarcodeButtonEnabled = binding.editTextLatitude.isNotBlank() && binding.editTextLongitude.isNotBlank() } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeMeCardFragment.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeMeCardFragment.kt index e92a8951..a007fca5 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeMeCardFragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeMeCardFragment.kt @@ -4,39 +4,46 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.FragmentCreateQrCodeMecardBinding import com.example.barcodescanner.extension.textString import com.example.barcodescanner.feature.tabs.create.BaseCreateBarcodeFragment import com.example.barcodescanner.model.Contact import com.example.barcodescanner.model.schema.MeCard import com.example.barcodescanner.model.schema.Schema -import kotlinx.android.synthetic.main.fragment_create_qr_code_mecard.* class CreateQrCodeMeCardFragment : BaseCreateBarcodeFragment() { + private var _binding: FragmentCreateQrCodeMecardBinding? = null + private val binding get() = _binding!! - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_create_qr_code_mecard, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentCreateQrCodeMecardBinding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - edit_text_first_name.requestFocus() + binding.editTextFirstName.requestFocus() parentActivity.isCreateBarcodeButtonEnabled = true } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + override fun getBarcodeSchema(): Schema { return MeCard( - firstName = edit_text_first_name.textString, - lastName = edit_text_last_name.textString, - email = edit_text_email.textString, - phone = edit_text_phone.textString + firstName = binding.editTextFirstName.textString, + lastName = binding.editTextLastName.textString, + email = binding.editTextEmail.textString, + phone = binding.editTextPhone.textString ) } override fun showContact(contact: Contact) { - edit_text_first_name.setText(contact.firstName) - edit_text_last_name.setText(contact.lastName) - edit_text_email.setText(contact.email) - edit_text_phone.setText(contact.phone) + binding.editTextFirstName.setText(contact.firstName) + binding.editTextLastName.setText(contact.lastName) + binding.editTextEmail.setText(contact.email) + binding.editTextPhone.setText(contact.phone) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeMmsFragment.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeMmsFragment.kt index 3a61f9cf..6ecc8566 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeMmsFragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeMmsFragment.kt @@ -5,18 +5,20 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.widget.addTextChangedListener -import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.FragmentCreateQrCodeMmsBinding import com.example.barcodescanner.extension.isNotBlank import com.example.barcodescanner.extension.textString import com.example.barcodescanner.feature.tabs.create.BaseCreateBarcodeFragment import com.example.barcodescanner.model.schema.Mms import com.example.barcodescanner.model.schema.Schema -import kotlinx.android.synthetic.main.fragment_create_qr_code_mms.* class CreateQrCodeMmsFragment : BaseCreateBarcodeFragment() { + private var _binding: FragmentCreateQrCodeMmsBinding? = null + private val binding get() = _binding!! - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_create_qr_code_mms, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentCreateQrCodeMmsBinding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -25,8 +27,13 @@ class CreateQrCodeMmsFragment : BaseCreateBarcodeFragment() { handleTextChanged() } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + override fun showPhone(phone: String) { - edit_text_phone.apply { + binding.editTextPhone.apply { setText(phone) setSelection(phone.length) } @@ -34,23 +41,23 @@ class CreateQrCodeMmsFragment : BaseCreateBarcodeFragment() { override fun getBarcodeSchema(): Schema { return Mms( - phone = edit_text_phone.textString, - subject = edit_text_subject.textString, - message = edit_text_message.textString + phone = binding.editTextPhone.textString, + subject = binding.editTextSubject.textString, + message = binding.editTextMessage.textString ) } private fun initTitleEditText() { - edit_text_phone.requestFocus() + binding.editTextPhone.requestFocus() } private fun handleTextChanged() { - edit_text_phone.addTextChangedListener { toggleCreateBarcodeButton() } - edit_text_subject.addTextChangedListener { toggleCreateBarcodeButton() } - edit_text_message.addTextChangedListener { toggleCreateBarcodeButton() } + binding.editTextPhone.addTextChangedListener { toggleCreateBarcodeButton() } + binding.editTextSubject.addTextChangedListener { toggleCreateBarcodeButton() } + binding.editTextMessage.addTextChangedListener { toggleCreateBarcodeButton() } } private fun toggleCreateBarcodeButton() { - parentActivity.isCreateBarcodeButtonEnabled = edit_text_phone.isNotBlank() || edit_text_subject.isNotBlank() || edit_text_message.isNotBlank() + parentActivity.isCreateBarcodeButtonEnabled = binding.editTextPhone.isNotBlank() || binding.editTextSubject.isNotBlank() || binding.editTextMessage.isNotBlank() } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeOtpFragment.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeOtpFragment.kt index 00140af7..c02b6e73 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeOtpFragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeOtpFragment.kt @@ -9,6 +9,7 @@ import android.widget.ArrayAdapter import androidx.core.view.isVisible import androidx.core.widget.addTextChangedListener import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.FragmentCreateQrCodeOtpBinding import com.example.barcodescanner.extension.encodeBase32 import com.example.barcodescanner.extension.isNotBlank import com.example.barcodescanner.extension.textString @@ -17,14 +18,16 @@ import com.example.barcodescanner.feature.tabs.create.BaseCreateBarcodeFragment import com.example.barcodescanner.model.schema.OtpAuth import com.example.barcodescanner.model.schema.Schema import dev.turingcomplete.kotlinonetimepassword.RandomSecretGenerator -import kotlinx.android.synthetic.main.fragment_create_qr_code_otp.* import java.util.* class CreateQrCodeOtpFragment : BaseCreateBarcodeFragment() { + private var _binding: FragmentCreateQrCodeOtpBinding? = null + private val binding get() = _binding!! private val randomGenerator = RandomSecretGenerator() - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_create_qr_code_otp, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentCreateQrCodeOtpBinding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -36,33 +39,38 @@ class CreateQrCodeOtpFragment : BaseCreateBarcodeFragment() { showRandomSecret() } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + override fun getBarcodeSchema(): Schema { return OtpAuth( - type = spinner_opt_types.selectedItem?.toString()?.toLowerCase(Locale.ENGLISH), - algorithm = spinner_algorithms.selectedItem?.toString(), - label = if (edit_text_issuer.isNotBlank()) { - "${edit_text_issuer.textString}:${edit_text_account.textString}" + type = binding.spinnerOptTypes.selectedItem?.toString()?.toLowerCase(Locale.ENGLISH), + algorithm = binding.spinnerAlgorithms.selectedItem?.toString(), + label = if (binding.editTextIssuer.isNotBlank()) { + "${binding.editTextIssuer.textString}:${binding.editTextAccount.textString}" } else { - edit_text_account.textString + binding.editTextAccount.textString }, - issuer = edit_text_issuer.textString, - digits = edit_text_digits.textString.toIntOrNull(), - period = edit_text_period.textString.toLongOrNull(), - counter = edit_text_counter.textString.toLongOrNull(), - secret = edit_text_secret.textString + issuer = binding.editTextIssuer.textString, + digits = binding.editTextDigits.textString.toIntOrNull(), + period = binding.editTextPeriod.textString.toLongOrNull(), + counter = binding.editTextCounter.textString.toLongOrNull(), + secret = binding.editTextSecret.textString ) } private fun initOtpTypesSpinner() { - spinner_opt_types.adapter = ArrayAdapter.createFromResource( + binding.spinnerOptTypes.adapter = ArrayAdapter.createFromResource( requireContext(), R.array.fragment_create_qr_code_otp_types, R.layout.item_spinner ).apply { setDropDownViewResource(R.layout.item_spinner_dropdown) } - spinner_opt_types.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + binding.spinnerOptTypes.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) { - text_input_layout_counter.isVisible = position == 0 + binding.textInputLayoutCounter.isVisible = position == 0 } override fun onNothingSelected(parent: AdapterView<*>?) { @@ -72,7 +80,7 @@ class CreateQrCodeOtpFragment : BaseCreateBarcodeFragment() { } private fun initAlgorithmsSpinner() { - spinner_algorithms.adapter = ArrayAdapter.createFromResource( + binding.spinnerAlgorithms.adapter = ArrayAdapter.createFromResource( requireContext(), R.array.fragment_create_qr_code_otp_algorithms, R.layout.item_spinner ).apply { setDropDownViewResource(R.layout.item_spinner_dropdown) @@ -80,32 +88,32 @@ class CreateQrCodeOtpFragment : BaseCreateBarcodeFragment() { } private fun initEditTexts() { - edit_text_account.addTextChangedListener { toggleCreateBarcodeButton() } - edit_text_secret.addTextChangedListener { toggleCreateBarcodeButton() } - edit_text_period.addTextChangedListener { toggleCreateBarcodeButton() } - edit_text_counter.addTextChangedListener { toggleCreateBarcodeButton() } + binding.editTextAccount.addTextChangedListener { toggleCreateBarcodeButton() } + binding.editTextSecret.addTextChangedListener { toggleCreateBarcodeButton() } + binding.editTextPeriod.addTextChangedListener { toggleCreateBarcodeButton() } + binding.editTextCounter.addTextChangedListener { toggleCreateBarcodeButton() } } private fun initGenerateRandomSecretButton() { - button_generate_random_secret.setOnClickListener { + binding.buttonGenerateRandomSecret.setOnClickListener { showRandomSecret() } } private fun toggleCreateBarcodeButton() { - val isHotp = spinner_opt_types.selectedItemPosition == 0 - val areGeneralFieldsNotBlank = edit_text_account.isNotBlank() && edit_text_secret.isNotBlank() - val areHotpFieldsNotBlank = edit_text_counter.isNotBlank() && edit_text_period.isNotBlank() + val isHotp = binding.spinnerOptTypes.selectedItemPosition == 0 + val areGeneralFieldsNotBlank = binding.editTextAccount.isNotBlank() && binding.editTextSecret.isNotBlank() + val areHotpFieldsNotBlank = binding.editTextCounter.isNotBlank() && binding.editTextPeriod.isNotBlank() parentActivity.isCreateBarcodeButtonEnabled = areGeneralFieldsNotBlank && (isHotp.not() || isHotp && areHotpFieldsNotBlank) } private fun showRandomSecret() { - edit_text_secret.setText(generateRandomSecret()) + binding.editTextSecret.setText(generateRandomSecret()) } private fun generateRandomSecret(): String { - val algorithm = spinner_algorithms.selectedItem?.toString().toHmacAlgorithm() + val algorithm = binding.spinnerAlgorithms.selectedItem?.toString().toHmacAlgorithm() val secret = randomGenerator.createRandomSecret(algorithm) return secret.encodeBase32() } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodePhoneFragment.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodePhoneFragment.kt index ec74c2d2..b7ab493e 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodePhoneFragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodePhoneFragment.kt @@ -5,18 +5,20 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.widget.addTextChangedListener -import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.FragmentCreateQrCodePhoneBinding import com.example.barcodescanner.extension.isNotBlank import com.example.barcodescanner.extension.textString import com.example.barcodescanner.feature.tabs.create.BaseCreateBarcodeFragment import com.example.barcodescanner.model.schema.Phone import com.example.barcodescanner.model.schema.Schema -import kotlinx.android.synthetic.main.fragment_create_qr_code_phone.* class CreateQrCodePhoneFragment : BaseCreateBarcodeFragment() { + private var _binding: FragmentCreateQrCodePhoneBinding? = null + private val binding get() = _binding!! - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_create_qr_code_phone, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentCreateQrCodePhoneBinding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -25,24 +27,29 @@ class CreateQrCodePhoneFragment : BaseCreateBarcodeFragment() { handleTextChanged() } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + override fun showPhone(phone: String) { - edit_text.apply { + binding.editText.apply { setText(phone) setSelection(phone.length) } } override fun getBarcodeSchema(): Schema { - return Phone(edit_text.textString) + return Phone(binding.editText.textString) } private fun initEditText() { - edit_text.requestFocus() + binding.editText.requestFocus() } private fun handleTextChanged() { - edit_text.addTextChangedListener { - parentActivity.isCreateBarcodeButtonEnabled = edit_text.isNotBlank() + binding.editText.addTextChangedListener { + parentActivity.isCreateBarcodeButtonEnabled = binding.editText.isNotBlank() } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeSmsFragment.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeSmsFragment.kt index 442655d4..a7a86e97 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeSmsFragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeSmsFragment.kt @@ -5,18 +5,20 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.widget.addTextChangedListener -import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.FragmentCreateQrCodeSmsBinding import com.example.barcodescanner.extension.isNotBlank import com.example.barcodescanner.extension.textString import com.example.barcodescanner.feature.tabs.create.BaseCreateBarcodeFragment import com.example.barcodescanner.model.schema.Schema import com.example.barcodescanner.model.schema.Sms -import kotlinx.android.synthetic.main.fragment_create_qr_code_sms.* class CreateQrCodeSmsFragment : BaseCreateBarcodeFragment() { + private var _binding: FragmentCreateQrCodeSmsBinding? = null + private val binding get() = _binding!! - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_create_qr_code_sms, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentCreateQrCodeSmsBinding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -25,8 +27,13 @@ class CreateQrCodeSmsFragment : BaseCreateBarcodeFragment() { handleTextChanged() } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + override fun showPhone(phone: String) { - edit_text_phone.apply { + binding.editTextPhone.apply { setText(phone) setSelection(phone.length) } @@ -34,21 +41,21 @@ class CreateQrCodeSmsFragment : BaseCreateBarcodeFragment() { override fun getBarcodeSchema(): Schema { return Sms( - phone = edit_text_phone.textString, - message = edit_text_message.textString + phone = binding.editTextPhone.textString, + message = binding.editTextMessage.textString ) } private fun initTitleEditText() { - edit_text_phone.requestFocus() + binding.editTextPhone.requestFocus() } private fun handleTextChanged() { - edit_text_phone.addTextChangedListener { toggleCreateBarcodeButton() } - edit_text_message.addTextChangedListener { toggleCreateBarcodeButton() } + binding.editTextPhone.addTextChangedListener { toggleCreateBarcodeButton() } + binding.editTextMessage.addTextChangedListener { toggleCreateBarcodeButton() } } private fun toggleCreateBarcodeButton() { - parentActivity.isCreateBarcodeButtonEnabled = edit_text_phone.isNotBlank() || edit_text_message.isNotBlank() + parentActivity.isCreateBarcodeButtonEnabled = binding.editTextPhone.isNotBlank() || binding.editTextMessage.isNotBlank() } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeTextFragment.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeTextFragment.kt index dbfb5ead..a58193f8 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeTextFragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeTextFragment.kt @@ -5,16 +5,17 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.widget.addTextChangedListener -import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.FragmentCreateQrCodeTextBinding import com.example.barcodescanner.di.barcodeParser import com.example.barcodescanner.extension.isNotBlank import com.example.barcodescanner.extension.textString import com.example.barcodescanner.feature.tabs.create.BaseCreateBarcodeFragment import com.example.barcodescanner.model.schema.Schema import com.google.zxing.BarcodeFormat -import kotlinx.android.synthetic.main.fragment_create_qr_code_text.* class CreateQrCodeTextFragment : BaseCreateBarcodeFragment() { + private var _binding: FragmentCreateQrCodeTextBinding? = null + private val binding get() = _binding!! companion object { private const val DEFAULT_TEXT_KEY = "DEFAULT_TEXT_KEY" @@ -28,8 +29,9 @@ class CreateQrCodeTextFragment : BaseCreateBarcodeFragment() { } } - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_create_qr_code_text, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentCreateQrCodeTextBinding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -38,13 +40,18 @@ class CreateQrCodeTextFragment : BaseCreateBarcodeFragment() { initEditText() } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + override fun getBarcodeSchema(): Schema { - return barcodeParser.parseSchema(BarcodeFormat.QR_CODE, edit_text.textString) + return barcodeParser.parseSchema(BarcodeFormat.QR_CODE, binding.editText.textString) } private fun initEditText() { val defaultText = arguments?.getString(DEFAULT_TEXT_KEY).orEmpty() - edit_text.apply { + binding.editText.apply { setText(defaultText) setSelection(defaultText.length) requestFocus() @@ -52,8 +59,8 @@ class CreateQrCodeTextFragment : BaseCreateBarcodeFragment() { } private fun handleTextChanged() { - edit_text.addTextChangedListener { - parentActivity.isCreateBarcodeButtonEnabled = edit_text.isNotBlank() + binding.editText.addTextChangedListener { + parentActivity.isCreateBarcodeButtonEnabled = binding.editText.isNotBlank() } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeUrlFragment.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeUrlFragment.kt index 49a9ba81..14bf9a6e 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeUrlFragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeUrlFragment.kt @@ -5,18 +5,20 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.widget.addTextChangedListener -import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.FragmentCreateQrCodeUrlBinding import com.example.barcodescanner.extension.isNotBlank import com.example.barcodescanner.extension.textString import com.example.barcodescanner.feature.tabs.create.BaseCreateBarcodeFragment import com.example.barcodescanner.model.schema.Schema import com.example.barcodescanner.model.schema.Url -import kotlinx.android.synthetic.main.fragment_create_qr_code_url.* class CreateQrCodeUrlFragment : BaseCreateBarcodeFragment() { + private var _binding: FragmentCreateQrCodeUrlBinding? = null + private val binding get() = _binding!! - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_create_qr_code_url, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentCreateQrCodeUrlBinding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -25,13 +27,18 @@ class CreateQrCodeUrlFragment : BaseCreateBarcodeFragment() { handleTextChanged() } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + override fun getBarcodeSchema(): Schema { - return Url(edit_text.textString) + return Url(binding.editText.textString) } private fun showUrlPrefix() { val prefix = "https://" - edit_text.apply { + binding.editText.apply { setText(prefix) setSelection(prefix.length) requestFocus() @@ -39,8 +46,8 @@ class CreateQrCodeUrlFragment : BaseCreateBarcodeFragment() { } private fun handleTextChanged() { - edit_text.addTextChangedListener { - parentActivity.isCreateBarcodeButtonEnabled = edit_text.isNotBlank() + binding.editText.addTextChangedListener { + parentActivity.isCreateBarcodeButtonEnabled = binding.editText.isNotBlank() } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeVCardFragment.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeVCardFragment.kt index bc1755a7..ccb8c9a4 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeVCardFragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeVCardFragment.kt @@ -4,43 +4,50 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.FragmentCreateQrCodeVcardBinding import com.example.barcodescanner.extension.textString import com.example.barcodescanner.feature.tabs.create.BaseCreateBarcodeFragment import com.example.barcodescanner.model.Contact import com.example.barcodescanner.model.schema.Schema import com.example.barcodescanner.model.schema.VCard -import kotlinx.android.synthetic.main.fragment_create_qr_code_vcard.* class CreateQrCodeVCardFragment : BaseCreateBarcodeFragment() { + private var _binding: FragmentCreateQrCodeVcardBinding? = null + private val binding get() = _binding!! - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_create_qr_code_vcard, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentCreateQrCodeVcardBinding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - edit_text_first_name.requestFocus() + binding.editTextFirstName.requestFocus() parentActivity.isCreateBarcodeButtonEnabled = true } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + override fun getBarcodeSchema(): Schema { return VCard( - firstName = edit_text_first_name.textString, - lastName = edit_text_last_name.textString, - organization = edit_text_organization.textString, - title = edit_text_job.textString, - email = edit_text_email.textString, - phone = edit_text_phone.textString, - secondaryPhone = edit_text_fax.textString, - url = edit_text_website.textString + firstName = binding.editTextFirstName.textString, + lastName = binding.editTextLastName.textString, + organization = binding.editTextOrganization.textString, + title = binding.editTextJob.textString, + email = binding.editTextEmail.textString, + phone = binding.editTextPhone.textString, + secondaryPhone = binding.editTextFax.textString, + url = binding.editTextWebsite.textString ) } override fun showContact(contact: Contact) { - edit_text_first_name.setText(contact.firstName) - edit_text_last_name.setText(contact.lastName) - edit_text_email.setText(contact.email) - edit_text_phone.setText(contact.phone) + binding.editTextFirstName.setText(contact.firstName) + binding.editTextLastName.setText(contact.lastName) + binding.editTextEmail.setText(contact.email) + binding.editTextPhone.setText(contact.phone) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeWifiFragment.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeWifiFragment.kt index 42cc69e4..1c5a7fd7 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeWifiFragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/create/qr/CreateQrCodeWifiFragment.kt @@ -9,17 +9,20 @@ import android.widget.ArrayAdapter import androidx.core.view.isVisible import androidx.core.widget.addTextChangedListener import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.FragmentCreateQrCodeWifiBinding import com.example.barcodescanner.extension.isNotBlank import com.example.barcodescanner.extension.textString import com.example.barcodescanner.feature.tabs.create.BaseCreateBarcodeFragment import com.example.barcodescanner.model.schema.Schema import com.example.barcodescanner.model.schema.Wifi -import kotlinx.android.synthetic.main.fragment_create_qr_code_wifi.* class CreateQrCodeWifiFragment : BaseCreateBarcodeFragment() { + private var _binding: FragmentCreateQrCodeWifiBinding? = null + private val binding get() = _binding!! - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_create_qr_code_wifi, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentCreateQrCodeWifiBinding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -29,8 +32,13 @@ class CreateQrCodeWifiFragment : BaseCreateBarcodeFragment() { handleTextChanged() } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + override fun getBarcodeSchema(): Schema { - val encryption = when (spinner_encryption.selectedItemPosition) { + val encryption = when (binding.spinnerEncryption.selectedItemPosition) { 0 -> "WPA" 1 -> "WEP" 2 -> "nopass" @@ -38,22 +46,22 @@ class CreateQrCodeWifiFragment : BaseCreateBarcodeFragment() { } return Wifi( encryption = encryption, - name = edit_text_network_name.textString, - password = edit_text_password.textString, - isHidden = check_box_is_hidden.isChecked + name = binding.editTextNetworkName.textString, + password = binding.editTextPassword.textString, + isHidden = binding.checkBoxIsHidden.isChecked ) } private fun initEncryptionTypesSpinner() { - spinner_encryption.adapter = ArrayAdapter.createFromResource( + binding.spinnerEncryption.adapter = ArrayAdapter.createFromResource( requireContext(), R.array.fragment_create_qr_code_wifi_encryption_types, R.layout.item_spinner ).apply { setDropDownViewResource(R.layout.item_spinner_dropdown) } - spinner_encryption.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + binding.spinnerEncryption.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) { - text_input_layout_password.isVisible = position != 2 + binding.textInputLayoutPassword.isVisible = position != 2 } override fun onNothingSelected(parent: AdapterView<*>?) { @@ -63,15 +71,15 @@ class CreateQrCodeWifiFragment : BaseCreateBarcodeFragment() { } private fun initNetworkNameEditText() { - edit_text_network_name.requestFocus() + binding.editTextNetworkName.requestFocus() } private fun handleTextChanged() { - edit_text_network_name.addTextChangedListener { toggleCreateBarcodeButton() } - edit_text_password.addTextChangedListener { toggleCreateBarcodeButton() } + binding.editTextNetworkName.addTextChangedListener { toggleCreateBarcodeButton() } + binding.editTextPassword.addTextChangedListener { toggleCreateBarcodeButton() } } private fun toggleCreateBarcodeButton() { - parentActivity.isCreateBarcodeButtonEnabled = edit_text_network_name.isNotBlank() + parentActivity.isCreateBarcodeButtonEnabled = binding.editTextNetworkName.isNotBlank() } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/history/BarcodeHistoryAdapter.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/history/BarcodeHistoryAdapter.kt index c8bbd129..06e3b567 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/history/BarcodeHistoryAdapter.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/history/BarcodeHistoryAdapter.kt @@ -2,7 +2,6 @@ package com.example.barcodescanner.feature.tabs.history import android.graphics.drawable.GradientDrawable import android.view.LayoutInflater -import android.view.View import android.view.ViewGroup import androidx.appcompat.content.res.AppCompatResources import androidx.core.view.isInvisible @@ -10,12 +9,11 @@ import androidx.core.view.isVisible import androidx.paging.PagedListAdapter import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView -import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.ItemBarcodeHistoryBinding import com.example.barcodescanner.extension.toColorId import com.example.barcodescanner.extension.toImageId import com.example.barcodescanner.extension.toStringId import com.example.barcodescanner.model.Barcode -import kotlinx.android.synthetic.main.item_barcode_history.view.* import java.text.SimpleDateFormat import java.util.* @@ -28,9 +26,8 @@ class BarcodeHistoryAdapter(private val listener: Listener) : PagedListAdapter + binding.toolbar.setOnMenuItemClickListener { item -> when (item.itemId) { R.id.item_export_history -> navigateToExportHistoryScreen() R.id.item_clear_history -> showDeleteHistoryConfirmationDialog() @@ -79,4 +84,4 @@ class BarcodeHistoryFragment : Fragment(), DeleteConfirmationDialogFragment.List ) .addTo(disposable) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/history/BarcodeHistoryListFragment.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/history/BarcodeHistoryListFragment.kt index 96a7eafc..eb43ea39 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/history/BarcodeHistoryListFragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/history/BarcodeHistoryListFragment.kt @@ -9,6 +9,7 @@ import androidx.paging.PagedList import androidx.paging.RxPagedListBuilder import androidx.recyclerview.widget.LinearLayoutManager import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.FragmentBarcodeHistoryListBinding import com.example.barcodescanner.di.barcodeDatabase import com.example.barcodescanner.extension.orZero import com.example.barcodescanner.extension.showError @@ -18,7 +19,6 @@ import io.reactivex.BackpressureStrategy import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.CompositeDisposable import io.reactivex.rxkotlin.addTo -import kotlinx.android.synthetic.main.fragment_barcode_history_list.* class BarcodeHistoryListFragment : Fragment(), BarcodeHistoryAdapter.Listener { @@ -45,11 +45,15 @@ class BarcodeHistoryListFragment : Fragment(), BarcodeHistoryAdapter.Listener { } } + private var _binding: FragmentBarcodeHistoryListBinding? = null + private val binding get() = _binding!! + private val disposable = CompositeDisposable() private val scanHistoryAdapter = BarcodeHistoryAdapter(this) - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_barcode_history_list, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentBarcodeHistoryListBinding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -64,11 +68,12 @@ class BarcodeHistoryListFragment : Fragment(), BarcodeHistoryAdapter.Listener { override fun onDestroyView() { super.onDestroyView() + _binding = null disposable.clear() } private fun initRecyclerView() { - recycler_view_history.apply { + binding.recyclerViewHistory.apply { layoutManager = LinearLayoutManager(requireContext()) adapter = scanHistoryAdapter } @@ -95,4 +100,4 @@ class BarcodeHistoryListFragment : Fragment(), BarcodeHistoryAdapter.Listener { ) .addTo(disposable) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/history/BarcodeHistoryViewPagerAdapter.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/history/BarcodeHistoryViewPagerAdapter.kt index 21972a5b..74b39a03 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/history/BarcodeHistoryViewPagerAdapter.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/history/BarcodeHistoryViewPagerAdapter.kt @@ -24,4 +24,4 @@ class BarcodeHistoryViewPagerAdapter(context: Context, fragmentManager: Fragment else -> throw IllegalArgumentException("No fragment for position greater than 1") } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/history/export/ExportHistoryActivity.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/history/export/ExportHistoryActivity.kt index 82e50711..81a6fc2b 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/history/export/ExportHistoryActivity.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/history/export/ExportHistoryActivity.kt @@ -9,6 +9,7 @@ import android.widget.Toast import androidx.core.view.isVisible import androidx.core.widget.addTextChangedListener import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.ActivityExportHistoryBinding import com.example.barcodescanner.di.barcodeDatabase import com.example.barcodescanner.di.barcodeSaver import com.example.barcodescanner.di.permissionsHelper @@ -21,10 +22,10 @@ import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.CompositeDisposable import io.reactivex.rxkotlin.addTo import io.reactivex.schedulers.Schedulers -import kotlinx.android.synthetic.main.activity_export_history.* class ExportHistoryActivity : BaseActivity() { private val disposable = CompositeDisposable() + private lateinit var binding: ActivityExportHistoryBinding companion object { private const val REQUEST_PERMISSIONS_CODE = 101 @@ -38,7 +39,8 @@ class ExportHistoryActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_export_history) + binding = ActivityExportHistoryBinding.inflate(layoutInflater) + setContentView(binding.root) supportEdgeToEdge() initToolbar() initExportTypeSpinner() @@ -58,17 +60,17 @@ class ExportHistoryActivity : BaseActivity() { } private fun supportEdgeToEdge() { - root_view.applySystemWindowInsets(applyTop = true, applyBottom = true) + binding.rootView.applySystemWindowInsets(applyTop = true, applyBottom = true) } private fun initToolbar() { - toolbar.setNavigationOnClickListener { + binding.toolbar.setNavigationOnClickListener { finish() } } private fun initExportTypeSpinner() { - spinner_export_as.adapter = ArrayAdapter.createFromResource( + binding.spinnerExportAs.adapter = ArrayAdapter.createFromResource( this, R.array.activity_export_history_types, R.layout.item_spinner ).apply { setDropDownViewResource(R.layout.item_spinner_dropdown) @@ -76,13 +78,13 @@ class ExportHistoryActivity : BaseActivity() { } private fun initFileNameEditText() { - edit_text_file_name.addTextChangedListener { - button_export.isEnabled = edit_text_file_name.isNotBlank() + binding.editTextFileName.addTextChangedListener { + binding.buttonExport.isEnabled = binding.editTextFileName.isNotBlank() } } private fun initExportButton() { - button_export.setOnClickListener { + binding.buttonExport.setOnClickListener { requestPermissions() } } @@ -92,8 +94,8 @@ class ExportHistoryActivity : BaseActivity() { } private fun exportHistory() { - val fileName = edit_text_file_name.textString - val saveFunc = when (spinner_export_as.selectedItemPosition) { + val fileName = binding.editTextFileName.textString + val saveFunc = when (binding.spinnerExportAs.selectedItemPosition) { 0 -> barcodeSaver::saveBarcodeHistoryAsCsv 1 -> barcodeSaver::saveBarcodeHistoryAsJson else -> return @@ -121,12 +123,12 @@ class ExportHistoryActivity : BaseActivity() { } private fun showLoading(isLoading: Boolean) { - progress_bar_loading.isVisible = isLoading - scroll_view.isVisible = isLoading.not() + binding.progressBarLoading.isVisible = isLoading + binding.scrollView.isVisible = isLoading.not() } private fun showHistoryExported() { Toast.makeText(this, R.string.activity_export_history_exported, Toast.LENGTH_LONG).show() finish() } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/scan/ScanBarcodeFromCameraFragment.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/scan/ScanBarcodeFromCameraFragment.kt index e611dc14..4cda0a90 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/scan/ScanBarcodeFromCameraFragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/scan/ScanBarcodeFromCameraFragment.kt @@ -14,6 +14,7 @@ import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment import com.budiyev.android.codescanner.* import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.FragmentScanBarcodeFromCameraBinding import com.example.barcodescanner.di.* import com.example.barcodescanner.extension.* import com.example.barcodescanner.feature.barcode.BarcodeActivity @@ -29,7 +30,6 @@ import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.CompositeDisposable import io.reactivex.rxkotlin.addTo import io.reactivex.schedulers.Schedulers -import kotlinx.android.synthetic.main.fragment_scan_barcode_from_camera.* import java.util.concurrent.TimeUnit class ScanBarcodeFromCameraFragment : Fragment(), ConfirmBarcodeDialogFragment.Listener { @@ -41,6 +41,9 @@ class ScanBarcodeFromCameraFragment : Fragment(), ConfirmBarcodeDialogFragment.L private const val CONTINUOUS_SCANNING_PREVIEW_DELAY = 500L } + private var _binding: FragmentScanBarcodeFromCameraBinding? = null + private val binding get() = _binding!! + private val vibrationPattern = arrayOf(0, 350).toLongArray() private val disposable = CompositeDisposable() private var maxZoom: Int = 0 @@ -49,8 +52,9 @@ class ScanBarcodeFromCameraFragment : Fragment(), ConfirmBarcodeDialogFragment.L private var toast: Toast? = null private var lastResult: Barcode? = null - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_scan_barcode_from_camera, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentScanBarcodeFromCameraBinding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -95,14 +99,15 @@ class ScanBarcodeFromCameraFragment : Fragment(), ConfirmBarcodeDialogFragment.L } override fun onDestroyView() { + _binding = null super.onDestroyView() setLightStatusBar() disposable.clear() } private fun supportEdgeToEdge() { - image_view_flash.applySystemWindowInsets(applyTop = true) - image_view_scan_from_file.applySystemWindowInsets(applyTop = true) + binding.imageViewFlash.applySystemWindowInsets(applyTop = true) + binding.imageViewScanFromFile.applySystemWindowInsets(applyTop = true) } private fun setDarkStatusBar() { @@ -134,7 +139,7 @@ class ScanBarcodeFromCameraFragment : Fragment(), ConfirmBarcodeDialogFragment.L } private fun initScanner() { - codeScanner = CodeScanner(requireActivity(), scanner_view).apply { + codeScanner = CodeScanner(requireActivity(), binding.scannerView).apply { camera = if (settings.isBackCamera) { CodeScanner.CAMERA_BACK } else { @@ -158,26 +163,26 @@ class ScanBarcodeFromCameraFragment : Fragment(), ConfirmBarcodeDialogFragment.L private fun initZoomSeekBar() { scannerCameraHelper.getCameraParameters(settings.isBackCamera)?.apply { this@ScanBarcodeFromCameraFragment.maxZoom = maxZoom - seek_bar_zoom.max = maxZoom - seek_bar_zoom.progress = zoom + binding.seekBarZoom.max = maxZoom + binding.seekBarZoom.progress = zoom } } private fun initFlashButton() { - layout_flash_container.setOnClickListener { + binding.layoutFlashContainer.setOnClickListener { toggleFlash() } - image_view_flash.isActivated = settings.flash + binding.imageViewFlash.isActivated = settings.flash } private fun handleScanFromFileClicked() { - layout_scan_from_file_container.setOnClickListener { + binding.layoutScanFromFileContainer.setOnClickListener { navigateToScanFromFileScreen() } } private fun handleZoomChanged() { - seek_bar_zoom.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener { + binding.seekBarZoom.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener { override fun onStartTrackingTouch(seekBar: SeekBar?) { } override fun onStopTrackingTouch(seekBar: SeekBar?) { } @@ -190,13 +195,13 @@ class ScanBarcodeFromCameraFragment : Fragment(), ConfirmBarcodeDialogFragment.L } private fun handleDecreaseZoomClicked() { - button_decrease_zoom.setOnClickListener { + binding.buttonDecreaseZoom.setOnClickListener { decreaseZoom() } } private fun handleIncreaseZoomClicked() { - button_increase_zoom.setOnClickListener { + binding.buttonIncreaseZoom.setOnClickListener { increaseZoom() } } @@ -208,7 +213,7 @@ class ScanBarcodeFromCameraFragment : Fragment(), ConfirmBarcodeDialogFragment.L } else { zoom = 0 } - seek_bar_zoom.progress = zoom + binding.seekBarZoom.progress = zoom } } @@ -219,7 +224,7 @@ class ScanBarcodeFromCameraFragment : Fragment(), ConfirmBarcodeDialogFragment.L } else { zoom = maxZoom } - seek_bar_zoom.progress = zoom + binding.seekBarZoom.progress = zoom } } @@ -305,7 +310,7 @@ class ScanBarcodeFromCameraFragment : Fragment(), ConfirmBarcodeDialogFragment.L } private fun toggleFlash() { - image_view_flash.isActivated = image_view_flash.isActivated.not() + binding.imageViewFlash.isActivated = binding.imageViewFlash.isActivated.not() codeScanner.isFlashEnabled = codeScanner.isFlashEnabled.not() } @@ -373,4 +378,4 @@ class ScanBarcodeFromCameraFragment : Fragment(), ConfirmBarcodeDialogFragment.L finish() } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/scan/file/CropImageViewExtensions.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/scan/file/CropImageViewExtensions.kt new file mode 100644 index 00000000..2099c43a --- /dev/null +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/scan/file/CropImageViewExtensions.kt @@ -0,0 +1,52 @@ +package com.example.barcodescanner.feature.tabs.scan.file + +import android.graphics.Bitmap +import android.net.Uri +import android.view.MotionEvent +import com.canhub.cropper.CropImageView +import io.reactivex.Completable +import io.reactivex.Observable +import io.reactivex.Single +import io.reactivex.android.schedulers.AndroidSchedulers + +class LoadRequest(private val view: CropImageView, private val uri: Uri) { + fun executeAsCompletable(): Completable { + return Completable.create { emitter -> + view.setOnSetImageUriCompleteListener { _, _, error -> + if (error == null) { + emitter.onComplete() + } else { + emitter.onError(error) + } + } + view.setImageUriAsync(uri) + }.subscribeOn(AndroidSchedulers.mainThread()) + } +} + +fun CropImageView.load(uri: Uri) = LoadRequest(this, uri) + +fun CropImageView.cropAsSingle(): Single { + return Single.create { emitter -> + setOnCropImageCompleteListener { _, result -> + val bitmap = result.bitmap + val error = result.error + if (result.isSuccessful && bitmap != null) { + emitter.onSuccess(bitmap) + } else { + emitter.onError(error ?: RuntimeException("Unknown error during cropping")) + } + } + croppedImageAsync() + }.subscribeOn(AndroidSchedulers.mainThread()) +} + +fun CropImageView.touches(): Observable { + return Observable.create { emitter -> + setOnTouchListener { _, event -> + emitter.onNext(event) + false + } + emitter.setCancellable { setOnTouchListener(null) } + }.subscribeOn(AndroidSchedulers.mainThread()) +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/scan/file/MyCropImageView.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/scan/file/MyCropImageView.kt deleted file mode 100644 index 832e9bf7..00000000 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/scan/file/MyCropImageView.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.example.barcodescanner.feature.tabs.scan.file - -import android.content.Context -import android.util.AttributeSet -import android.view.MotionEvent -import com.isseiaoki.simplecropview.CropImageView -import io.reactivex.Observable -import io.reactivex.subjects.PublishSubject - -class MyCropImageView : CropImageView { - private val touches = PublishSubject.create() - - constructor(context: Context?) : super(context) - constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) - constructor(context: Context?, attrs: AttributeSet?, defStyle: Int) : super( - context, - attrs, - defStyle - ) - - override fun onTouchEvent(event: MotionEvent?): Boolean { - event?.also { touches.onNext(it) } - return super.onTouchEvent(event) - } - - override fun rotateImage(degrees: RotateDegrees?) { - if (drawable != null) { - super.rotateImage(degrees) - } - } - - fun touches(): Observable { - return touches - } -} \ No newline at end of file diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/scan/file/ScanBarcodeFromFileActivity.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/scan/file/ScanBarcodeFromFileActivity.kt index 7bd3f0f0..298ea5c1 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/scan/file/ScanBarcodeFromFileActivity.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/scan/file/ScanBarcodeFromFileActivity.kt @@ -12,6 +12,7 @@ import android.view.MotionEvent.ACTION_UP import androidx.core.view.isInvisible import androidx.core.view.isVisible import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.ActivityScanBarcodeFromFileBinding import com.example.barcodescanner.di.* import com.example.barcodescanner.extension.applySystemWindowInsets import com.example.barcodescanner.extension.showError @@ -20,12 +21,11 @@ import com.example.barcodescanner.feature.barcode.BarcodeActivity import com.example.barcodescanner.model.Barcode import com.example.barcodescanner.usecase.save import com.google.zxing.Result -import com.isseiaoki.simplecropview.CropImageView +import com.canhub.cropper.CropImageView import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.CompositeDisposable import io.reactivex.rxkotlin.addTo import io.reactivex.schedulers.Schedulers -import kotlinx.android.synthetic.main.activity_scan_barcode_from_file.* import java.util.concurrent.TimeUnit class ScanBarcodeFromFileActivity : BaseActivity() { @@ -42,6 +42,8 @@ class ScanBarcodeFromFileActivity : BaseActivity() { } } + private lateinit var binding: ActivityScanBarcodeFromFileBinding + private var imageUri: Uri? = null private var lastScanResult: Result? = null private val disposable = CompositeDisposable() @@ -49,7 +51,8 @@ class ScanBarcodeFromFileActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_scan_barcode_from_file) + binding = ActivityScanBarcodeFromFileBinding.inflate(layoutInflater) + setContentView(binding.root) supportEdgeToEdge() handleToolbarBackPressed() @@ -90,7 +93,7 @@ class ScanBarcodeFromFileActivity : BaseActivity() { } private fun supportEdgeToEdge() { - root_view.applySystemWindowInsets(applyTop = true, applyBottom = true) + binding.rootView.applySystemWindowInsets(applyTop = true, applyBottom = true) } private fun showImageFromIntent(): Boolean { @@ -135,16 +138,16 @@ class ScanBarcodeFromFileActivity : BaseActivity() { } private fun handleToolbarBackPressed() { - toolbar.setNavigationOnClickListener { + binding.toolbar.setNavigationOnClickListener { finish() } } private fun handleToolbarMenuItemClicked() { - toolbar.setOnMenuItemClickListener { item -> + binding.toolbar.setOnMenuItemClickListener { item -> when (item.itemId) { - R.id.item_rotate_left -> crop_image_view.rotateImage(CropImageView.RotateDegrees.ROTATE_M90D) - R.id.item_rotate_right -> crop_image_view.rotateImage(CropImageView.RotateDegrees.ROTATE_90D) + R.id.item_rotate_left -> binding.cropImageView.rotateImage(-90) + R.id.item_rotate_right -> binding.cropImageView.rotateImage(90) R.id.item_change_image -> startChooseImageActivityAgain() } return@setOnMenuItemClickListener true @@ -152,7 +155,7 @@ class ScanBarcodeFromFileActivity : BaseActivity() { } private fun handleImageCropAreaChanged() { - crop_image_view.touches() + binding.cropImageView.touches() .filter { it.action == ACTION_UP } .debounce(400, TimeUnit.MILLISECONDS) .observeOn(AndroidSchedulers.mainThread()) @@ -161,7 +164,7 @@ class ScanBarcodeFromFileActivity : BaseActivity() { } private fun handleScanButtonClicked() { - button_scan.setOnClickListener { + binding.buttonScan.setOnClickListener { saveScanResult() } } @@ -169,10 +172,9 @@ class ScanBarcodeFromFileActivity : BaseActivity() { private fun showImage(imageUri: Uri) { this.imageUri = imageUri - crop_image_view + binding.cropImageView .load(imageUri) .executeAsCompletable() - .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe( { scanCroppedImage() }, @@ -195,9 +197,9 @@ class ScanBarcodeFromFileActivity : BaseActivity() { scanDisposable.clear() lastScanResult = null - crop_image_view + binding.cropImageView .cropAsSingle() - .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) .subscribe(::scanCroppedImage, ::showError) .addTo(scanDisposable) } @@ -242,16 +244,16 @@ class ScanBarcodeFromFileActivity : BaseActivity() { } private fun showLoading(isLoading: Boolean) { - progress_bar_loading.isVisible = isLoading - button_scan.isInvisible = isLoading + binding.progressBarLoading.isVisible = isLoading + binding.buttonScan.isInvisible = isLoading } private fun showScanButtonEnabled(isEnabled: Boolean) { - button_scan.isEnabled = isEnabled + binding.buttonScan.isEnabled = isEnabled } private fun navigateToBarcodeScreen(barcode: Barcode) { BarcodeActivity.start(this, barcode) finish() } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/settings/SettingsFragment.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/settings/SettingsFragment.kt index 6ea78bd6..33b0744e 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/settings/SettingsFragment.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/settings/SettingsFragment.kt @@ -19,19 +19,22 @@ import com.example.barcodescanner.feature.tabs.settings.camera.ChooseCameraActiv import com.example.barcodescanner.feature.tabs.settings.formats.SupportedFormatsActivity import com.example.barcodescanner.feature.tabs.settings.permissions.AllPermissionsActivity import com.example.barcodescanner.feature.tabs.settings.search.ChooseSearchEngineActivity +import com.example.barcodescanner.databinding.FragmentSettingsBinding import com.example.barcodescanner.feature.tabs.settings.theme.ChooseThemeActivity import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.CompositeDisposable import io.reactivex.rxkotlin.addTo import io.reactivex.schedulers.Schedulers -import kotlinx.android.synthetic.main.fragment_settings.* class SettingsFragment : Fragment(), DeleteConfirmationDialogFragment.Listener { private val disposable = CompositeDisposable() + private var _binding: FragmentSettingsBinding? = null + private val binding get() = _binding!! - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_settings, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentSettingsBinding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -54,50 +57,51 @@ class SettingsFragment : Fragment(), DeleteConfirmationDialogFragment.Listener { override fun onDestroyView() { super.onDestroyView() disposable.clear() + _binding = null } fun supportEdgeToEdge() { - app_bar_layout.applySystemWindowInsets(applyTop = true) + binding.appBarLayout.applySystemWindowInsets(applyTop = true) } private fun handleButtonCheckedChanged() { - button_inverse_barcode_colors_in_dark_theme.setCheckedChangedListener { settings.areBarcodeColorsInversed = it } - button_open_links_automatically.setCheckedChangedListener { settings.openLinksAutomatically = it } - button_copy_to_clipboard.setCheckedChangedListener { settings.copyToClipboard = it } - button_simple_auto_focus.setCheckedChangedListener { settings.simpleAutoFocus = it } - button_flashlight.setCheckedChangedListener { settings.flash = it } - button_vibrate.setCheckedChangedListener { settings.vibrate = it } - button_continuous_scanning.setCheckedChangedListener { settings.continuousScanning = it } - button_confirm_scans_manually.setCheckedChangedListener { settings.confirmScansManually = it } - button_save_scanned_barcodes.setCheckedChangedListener { settings.saveScannedBarcodesToHistory = it } - button_save_created_barcodes.setCheckedChangedListener { settings.saveCreatedBarcodesToHistory = it } - button_do_not_save_duplicates.setCheckedChangedListener { settings.doNotSaveDuplicates = it } - button_enable_error_reports.setCheckedChangedListener { settings.areErrorReportsEnabled = it } + binding.buttonInverseBarcodeColorsInDarkTheme.setCheckedChangedListener { settings.areBarcodeColorsInversed = it } + binding.buttonOpenLinksAutomatically.setCheckedChangedListener { settings.openLinksAutomatically = it } + binding.buttonCopyToClipboard.setCheckedChangedListener { settings.copyToClipboard = it } + binding.buttonSimpleAutoFocus.setCheckedChangedListener { settings.simpleAutoFocus = it } + binding.buttonFlashlight.setCheckedChangedListener { settings.flash = it } + binding.buttonVibrate.setCheckedChangedListener { settings.vibrate = it } + binding.buttonContinuousScanning.setCheckedChangedListener { settings.continuousScanning = it } + binding.buttonConfirmScansManually.setCheckedChangedListener { settings.confirmScansManually = it } + binding.buttonSaveScannedBarcodes.setCheckedChangedListener { settings.saveScannedBarcodesToHistory = it } + binding.buttonSaveCreatedBarcodes.setCheckedChangedListener { settings.saveCreatedBarcodesToHistory = it } + binding.buttonDoNotSaveDuplicates.setCheckedChangedListener { settings.doNotSaveDuplicates = it } + binding.buttonEnableErrorReports.setCheckedChangedListener { settings.areErrorReportsEnabled = it } } private fun handleButtonClicks() { - button_choose_theme.setOnClickListener { ChooseThemeActivity.start(requireActivity()) } - button_choose_camera.setOnClickListener { ChooseCameraActivity.start(requireActivity()) } - button_select_supported_formats.setOnClickListener { SupportedFormatsActivity.start(requireActivity()) } - button_clear_history.setOnClickListener { showDeleteHistoryConfirmationDialog() } - button_choose_search_engine.setOnClickListener { ChooseSearchEngineActivity.start(requireContext()) } - button_permissions.setOnClickListener { AllPermissionsActivity.start(requireActivity()) } - button_check_updates.setOnClickListener { showAppInMarket() } - button_source_code.setOnClickListener { showSourceCode() } + binding.buttonChooseTheme.setOnClickListener { ChooseThemeActivity.start(requireActivity()) } + binding.buttonChooseCamera.setOnClickListener { ChooseCameraActivity.start(requireActivity()) } + binding.buttonSelectSupportedFormats.setOnClickListener { SupportedFormatsActivity.start(requireActivity()) } + binding.buttonClearHistory.setOnClickListener { showDeleteHistoryConfirmationDialog() } + binding.buttonChooseSearchEngine.setOnClickListener { ChooseSearchEngineActivity.start(requireContext()) } + binding.buttonPermissions.setOnClickListener { AllPermissionsActivity.start(requireActivity()) } + binding.buttonCheckUpdates.setOnClickListener { showAppInMarket() } + binding.buttonSourceCode.setOnClickListener { showSourceCode() } } private fun clearHistory() { - button_clear_history.isEnabled = false + binding.buttonClearHistory.isEnabled = false barcodeDatabase.deleteAll() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe( { - button_clear_history.isEnabled = true + binding.buttonClearHistory.isEnabled = true }, { error -> - button_clear_history.isEnabled = true + binding.buttonClearHistory.isEnabled = true showError(error) } ) @@ -106,18 +110,18 @@ class SettingsFragment : Fragment(), DeleteConfirmationDialogFragment.Listener { private fun showSettings() { settings.apply { - button_inverse_barcode_colors_in_dark_theme.isChecked = areBarcodeColorsInversed - button_open_links_automatically.isChecked = openLinksAutomatically - button_copy_to_clipboard.isChecked = copyToClipboard - button_simple_auto_focus.isChecked = simpleAutoFocus - button_flashlight.isChecked = flash - button_vibrate.isChecked = vibrate - button_continuous_scanning.isChecked = continuousScanning - button_confirm_scans_manually.isChecked = confirmScansManually - button_save_scanned_barcodes.isChecked = saveScannedBarcodesToHistory - button_save_created_barcodes.isChecked = saveCreatedBarcodesToHistory - button_do_not_save_duplicates.isChecked = doNotSaveDuplicates - button_enable_error_reports.isChecked = areErrorReportsEnabled + binding.buttonInverseBarcodeColorsInDarkTheme.isChecked = areBarcodeColorsInversed + binding.buttonOpenLinksAutomatically.isChecked = openLinksAutomatically + binding.buttonCopyToClipboard.isChecked = copyToClipboard + binding.buttonSimpleAutoFocus.isChecked = simpleAutoFocus + binding.buttonFlashlight.isChecked = flash + binding.buttonVibrate.isChecked = vibrate + binding.buttonContinuousScanning.isChecked = continuousScanning + binding.buttonConfirmScansManually.isChecked = confirmScansManually + binding.buttonSaveScannedBarcodes.isChecked = saveScannedBarcodesToHistory + binding.buttonSaveCreatedBarcodes.isChecked = saveCreatedBarcodesToHistory + binding.buttonDoNotSaveDuplicates.isChecked = doNotSaveDuplicates + binding.buttonEnableErrorReports.isChecked = areErrorReportsEnabled } } @@ -144,6 +148,6 @@ class SettingsFragment : Fragment(), DeleteConfirmationDialogFragment.Listener { } private fun showAppVersion() { - button_app_version.hint = BuildConfig.VERSION_NAME + binding.buttonAppVersion.hint = BuildConfig.VERSION_NAME } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/settings/camera/ChooseCameraActivity.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/settings/camera/ChooseCameraActivity.kt index fd3e83d9..1c3b6685 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/settings/camera/ChooseCameraActivity.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/settings/camera/ChooseCameraActivity.kt @@ -3,11 +3,10 @@ package com.example.barcodescanner.feature.tabs.settings.camera import android.content.Context import android.content.Intent import android.os.Bundle -import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.ActivityChooseCameraBinding import com.example.barcodescanner.di.settings import com.example.barcodescanner.extension.applySystemWindowInsets import com.example.barcodescanner.feature.BaseActivity -import kotlinx.android.synthetic.main.activity_choose_camera.* class ChooseCameraActivity : BaseActivity() { @@ -18,9 +17,12 @@ class ChooseCameraActivity : BaseActivity() { } } + private lateinit var binding: ActivityChooseCameraBinding + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_choose_camera) + binding = ActivityChooseCameraBinding.inflate(layoutInflater) + setContentView(binding.root) supportEdgeToEdge() handleToolbarBackClicked() } @@ -34,35 +36,35 @@ class ChooseCameraActivity : BaseActivity() { private fun showSelectedCamera() { val isBackCamera = settings.isBackCamera - button_back_camera.isChecked = isBackCamera - button_front_camera.isChecked = isBackCamera.not() + binding.buttonBackCamera.isChecked = isBackCamera + binding.buttonFrontCamera.isChecked = isBackCamera.not() } private fun supportEdgeToEdge() { - root_view.applySystemWindowInsets(applyTop = true, applyBottom = true) + binding.rootView.applySystemWindowInsets(applyTop = true, applyBottom = true) } private fun handleToolbarBackClicked() { - toolbar.setNavigationOnClickListener { + binding.toolbar.setNavigationOnClickListener { finish() } } private fun handleBackCameraButtonChecked() { - button_back_camera.setCheckedChangedListener { isChecked -> + binding.buttonBackCamera.setCheckedChangedListener { isChecked -> if (isChecked) { - button_front_camera.isChecked = false + binding.buttonFrontCamera.isChecked = false } settings.isBackCamera = isChecked } } private fun handleFrontCameraButtonChecked() { - button_front_camera.setCheckedChangedListener { isChecked -> + binding.buttonFrontCamera.setCheckedChangedListener { isChecked -> if (isChecked) { - button_back_camera.isChecked = false + binding.buttonBackCamera.isChecked = false } settings.isBackCamera = isChecked.not() } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/settings/formats/FormatsAdapter.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/settings/formats/FormatsAdapter.kt index 1942e83d..f3e21d91 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/settings/formats/FormatsAdapter.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/settings/formats/FormatsAdapter.kt @@ -1,14 +1,12 @@ package com.example.barcodescanner.feature.tabs.settings.formats import android.view.LayoutInflater -import android.view.View import android.view.ViewGroup import androidx.core.view.isInvisible import androidx.recyclerview.widget.RecyclerView -import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.ItemBarcodeFormatBinding import com.example.barcodescanner.extension.toStringId import com.google.zxing.BarcodeFormat -import kotlinx.android.synthetic.main.item_barcode_format.view.* class FormatsAdapter( private val listener: Listener, @@ -25,30 +23,29 @@ class FormatsAdapter( } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { - val inflater = LayoutInflater.from(parent.context) - val itemView = inflater.inflate(R.layout.item_barcode_format, parent, false) - return ViewHolder(itemView) + val binding = ItemBarcodeFormatBinding.inflate(LayoutInflater.from(parent.context), parent, false) + return ViewHolder(binding) } override fun onBindViewHolder(holder: ViewHolder, position: Int) { holder.show(position) } - inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + inner class ViewHolder(private val binding: ItemBarcodeFormatBinding) : RecyclerView.ViewHolder(binding.root) { fun show(position: Int) { val format = formats[position] - itemView.text_view_text.text = itemView.context.resources.getString(format.toStringId()) - itemView.delimiter.isInvisible = position == formats.lastIndex - itemView.check_box.isChecked = formatSelection[position] + binding.textViewText.text = binding.root.context.resources.getString(format.toStringId()) + binding.delimiter.isInvisible = position == formats.lastIndex + binding.checkBox.isChecked = formatSelection[position] - itemView.check_box.setOnCheckedChangeListener { _, isChecked -> + binding.checkBox.setOnCheckedChangeListener { _, isChecked -> listener.onFormatChecked(format, isChecked) } - itemView.setOnClickListener { - itemView.check_box.toggle() + binding.root.setOnClickListener { + binding.checkBox.toggle() } } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/settings/formats/SupportedFormatsActivity.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/settings/formats/SupportedFormatsActivity.kt index 6233f254..965b1ae5 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/settings/formats/SupportedFormatsActivity.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/settings/formats/SupportedFormatsActivity.kt @@ -4,14 +4,13 @@ import android.content.Context import android.content.Intent import android.os.Bundle import androidx.recyclerview.widget.LinearLayoutManager -import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.ActivitySupportedFormatsBinding import com.example.barcodescanner.di.settings import com.example.barcodescanner.extension.applySystemWindowInsets import com.example.barcodescanner.extension.unsafeLazy import com.example.barcodescanner.feature.BaseActivity import com.example.barcodescanner.usecase.SupportedBarcodeFormats import com.google.zxing.BarcodeFormat -import kotlinx.android.synthetic.main.activity_supported_formats.* class SupportedFormatsActivity : BaseActivity(), FormatsAdapter.Listener { @@ -22,13 +21,16 @@ class SupportedFormatsActivity : BaseActivity(), FormatsAdapter.Listener { } } + private lateinit var binding: ActivitySupportedFormatsBinding + private val formats by unsafeLazy { SupportedBarcodeFormats.FORMATS } private val formatSelection by unsafeLazy { formats.map(settings::isFormatSelected) } private val formatsAdapter by unsafeLazy { FormatsAdapter(this, formats, formatSelection) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_supported_formats) + binding = ActivitySupportedFormatsBinding.inflate(layoutInflater) + setContentView(binding.root) supportEdgeToEdge() initRecyclerView() handleToolbarBackClicked() @@ -39,19 +41,19 @@ class SupportedFormatsActivity : BaseActivity(), FormatsAdapter.Listener { } private fun supportEdgeToEdge() { - root_view.applySystemWindowInsets(applyTop = true, applyBottom = true) + binding.rootView.applySystemWindowInsets(applyTop = true, applyBottom = true) } private fun initRecyclerView() { - recycler_view_formats.apply { + binding.recyclerViewFormats.apply { layoutManager = LinearLayoutManager(this@SupportedFormatsActivity) adapter = formatsAdapter } } private fun handleToolbarBackClicked() { - toolbar.setNavigationOnClickListener { + binding.toolbar.setNavigationOnClickListener { finish() } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/settings/permissions/AllPermissionsActivity.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/settings/permissions/AllPermissionsActivity.kt index f808238e..896e6bc9 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/settings/permissions/AllPermissionsActivity.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/settings/permissions/AllPermissionsActivity.kt @@ -3,10 +3,9 @@ package com.example.barcodescanner.feature.tabs.settings.permissions import android.content.Context import android.content.Intent import android.os.Bundle -import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.ActivityAllPermissionsBinding import com.example.barcodescanner.extension.applySystemWindowInsets import com.example.barcodescanner.feature.BaseActivity -import kotlinx.android.synthetic.main.activity_all_permissions.* class AllPermissionsActivity : BaseActivity() { @@ -17,10 +16,13 @@ class AllPermissionsActivity : BaseActivity() { } } + private lateinit var binding: ActivityAllPermissionsBinding + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_all_permissions) - root_view.applySystemWindowInsets(applyTop = true, applyBottom = true) - toolbar.setNavigationOnClickListener { finish() } + binding = ActivityAllPermissionsBinding.inflate(layoutInflater) + setContentView(binding.root) + binding.rootView.applySystemWindowInsets(applyTop = true, applyBottom = true) + binding.toolbar.setNavigationOnClickListener { finish() } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/settings/search/ChooseSearchEngineActivity.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/settings/search/ChooseSearchEngineActivity.kt index 95e39609..f019fb4b 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/settings/search/ChooseSearchEngineActivity.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/settings/search/ChooseSearchEngineActivity.kt @@ -4,14 +4,13 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.view.View -import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.ActivityChooseSearchEngineBinding import com.example.barcodescanner.di.settings import com.example.barcodescanner.extension.applySystemWindowInsets import com.example.barcodescanner.extension.unsafeLazy import com.example.barcodescanner.feature.BaseActivity import com.example.barcodescanner.feature.common.view.SettingsRadioButton import com.example.barcodescanner.model.SearchEngine -import kotlinx.android.synthetic.main.activity_choose_search_engine.* class ChooseSearchEngineActivity : BaseActivity() { @@ -22,13 +21,16 @@ class ChooseSearchEngineActivity : BaseActivity() { } } + private lateinit var binding: ActivityChooseSearchEngineBinding + private val buttons by unsafeLazy { - listOf(button_none, button_ask_every_time, button_bing, button_duck_duck_go, button_google, button_qwant, button_startpage, button_yahoo, button_yandex) + listOf(binding.buttonNone, binding.buttonAskEveryTime, binding.buttonBing, binding.buttonDuckDuckGo, binding.buttonGoogle, binding.buttonQwant, binding.buttonStartpage, binding.buttonYahoo, binding.buttonYandex) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_choose_search_engine) + binding = ActivityChooseSearchEngineBinding.inflate(layoutInflater) + setContentView(binding.root) supportEdgeToEdge() initToolbar() showInitialValue() @@ -36,37 +38,37 @@ class ChooseSearchEngineActivity : BaseActivity() { } private fun supportEdgeToEdge() { - root_view.applySystemWindowInsets(applyTop = true, applyBottom = true) + binding.rootView.applySystemWindowInsets(applyTop = true, applyBottom = true) } private fun initToolbar() { - toolbar.setNavigationOnClickListener { finish() } + binding.toolbar.setNavigationOnClickListener { finish() } } private fun showInitialValue() { when (settings.searchEngine) { - SearchEngine.NONE -> button_none.isChecked = true - SearchEngine.ASK_EVERY_TIME -> button_ask_every_time.isChecked = true - SearchEngine.BING -> button_bing.isChecked = true - SearchEngine.DUCK_DUCK_GO -> button_duck_duck_go.isChecked = true - SearchEngine.GOOGLE -> button_google.isChecked = true - SearchEngine.QWANT -> button_qwant.isChecked = true - SearchEngine.STARTPAGE -> button_startpage.isChecked = true - SearchEngine.YAHOO -> button_yahoo.isChecked = true - SearchEngine.YANDEX -> button_yandex.isChecked = true + SearchEngine.NONE -> binding.buttonNone.isChecked = true + SearchEngine.ASK_EVERY_TIME -> binding.buttonAskEveryTime.isChecked = true + SearchEngine.BING -> binding.buttonBing.isChecked = true + SearchEngine.DUCK_DUCK_GO -> binding.buttonDuckDuckGo.isChecked = true + SearchEngine.GOOGLE -> binding.buttonGoogle.isChecked = true + SearchEngine.QWANT -> binding.buttonQwant.isChecked = true + SearchEngine.STARTPAGE -> binding.buttonStartpage.isChecked = true + SearchEngine.YAHOO -> binding.buttonYahoo.isChecked = true + SearchEngine.YANDEX -> binding.buttonYandex.isChecked = true } } private fun handleSettingsChanged() { - button_none.setCheckedChangedListener(SearchEngine.NONE) - button_ask_every_time.setCheckedChangedListener(SearchEngine.ASK_EVERY_TIME) - button_bing.setCheckedChangedListener(SearchEngine.BING) - button_duck_duck_go.setCheckedChangedListener(SearchEngine.DUCK_DUCK_GO) - button_google.setCheckedChangedListener(SearchEngine.GOOGLE) - button_qwant.setCheckedChangedListener(SearchEngine.QWANT) - button_startpage.setCheckedChangedListener(SearchEngine.STARTPAGE) - button_yahoo.setCheckedChangedListener(SearchEngine.YAHOO) - button_yandex.setCheckedChangedListener(SearchEngine.YANDEX) + binding.buttonNone.setCheckedChangedListener(SearchEngine.NONE) + binding.buttonAskEveryTime.setCheckedChangedListener(SearchEngine.ASK_EVERY_TIME) + binding.buttonBing.setCheckedChangedListener(SearchEngine.BING) + binding.buttonDuckDuckGo.setCheckedChangedListener(SearchEngine.DUCK_DUCK_GO) + binding.buttonGoogle.setCheckedChangedListener(SearchEngine.GOOGLE) + binding.buttonQwant.setCheckedChangedListener(SearchEngine.QWANT) + binding.buttonStartpage.setCheckedChangedListener(SearchEngine.STARTPAGE) + binding.buttonYahoo.setCheckedChangedListener(SearchEngine.YAHOO) + binding.buttonYandex.setCheckedChangedListener(SearchEngine.YANDEX) } private fun SettingsRadioButton.setCheckedChangedListener(searchEngine: SearchEngine) { diff --git a/app/src/main/java/com/example/barcodescanner/feature/tabs/settings/theme/ChooseThemeActivity.kt b/app/src/main/java/com/example/barcodescanner/feature/tabs/settings/theme/ChooseThemeActivity.kt index 174c53d3..b7c98f8e 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tabs/settings/theme/ChooseThemeActivity.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tabs/settings/theme/ChooseThemeActivity.kt @@ -4,13 +4,12 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.view.View -import com.example.barcodescanner.R +import com.example.barcodescanner.databinding.ActivityChooseThemeBinding import com.example.barcodescanner.di.settings import com.example.barcodescanner.extension.applySystemWindowInsets import com.example.barcodescanner.extension.unsafeLazy import com.example.barcodescanner.feature.BaseActivity import com.example.barcodescanner.usecase.Settings -import kotlinx.android.synthetic.main.activity_choose_theme.* class ChooseThemeActivity : BaseActivity() { @@ -21,13 +20,16 @@ class ChooseThemeActivity : BaseActivity() { } } + private lateinit var binding: ActivityChooseThemeBinding + private val buttons by unsafeLazy { - listOf(button_system_theme, button_light_theme, button_dark_theme) + listOf(binding.buttonSystemTheme, binding.buttonLightTheme, binding.buttonDarkTheme) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_choose_theme) + binding = ActivityChooseThemeBinding.inflate(layoutInflater) + setContentView(binding.root) supportEdgeToEdge() initToolbar() } @@ -39,45 +41,45 @@ class ChooseThemeActivity : BaseActivity() { } private fun supportEdgeToEdge() { - root_view.applySystemWindowInsets(applyTop = true, applyBottom = true) + binding.rootView.applySystemWindowInsets(applyTop = true, applyBottom = true) } private fun initToolbar() { - toolbar.setNavigationOnClickListener { finish() } + binding.toolbar.setNavigationOnClickListener { finish() } } private fun showInitialSettings() { val theme = settings.theme - button_system_theme.isChecked = theme == Settings.THEME_SYSTEM - button_light_theme.isChecked = theme == Settings.THEME_LIGHT - button_dark_theme.isChecked = theme == Settings.THEME_DARK + binding.buttonSystemTheme.isChecked = theme == Settings.THEME_SYSTEM + binding.buttonLightTheme.isChecked = theme == Settings.THEME_LIGHT + binding.buttonDarkTheme.isChecked = theme == Settings.THEME_DARK } private fun handleSettingsChanged() { - button_system_theme.setCheckedChangedListener { isChecked -> + binding.buttonSystemTheme.setCheckedChangedListener { isChecked -> if (isChecked.not()) { return@setCheckedChangedListener } - uncheckOtherButtons(button_system_theme) + uncheckOtherButtons(binding.buttonSystemTheme) settings.theme = Settings.THEME_SYSTEM } - button_light_theme.setCheckedChangedListener { isChecked -> + binding.buttonLightTheme.setCheckedChangedListener { isChecked -> if (isChecked.not()) { return@setCheckedChangedListener } - uncheckOtherButtons(button_light_theme) + uncheckOtherButtons(binding.buttonLightTheme) settings.theme = Settings.THEME_LIGHT } - button_dark_theme.setCheckedChangedListener { isChecked -> + binding.buttonDarkTheme.setCheckedChangedListener { isChecked -> if (isChecked.not()) { return@setCheckedChangedListener } - uncheckOtherButtons(button_dark_theme) + uncheckOtherButtons(binding.buttonDarkTheme) settings.theme = Settings.THEME_DARK } } @@ -89,4 +91,4 @@ class ChooseThemeActivity : BaseActivity() { } } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/feature/tile/QuickSettingsTileService.kt b/app/src/main/java/com/example/barcodescanner/feature/tile/QuickSettingsTileService.kt index b7269b5a..b8508db5 100644 --- a/app/src/main/java/com/example/barcodescanner/feature/tile/QuickSettingsTileService.kt +++ b/app/src/main/java/com/example/barcodescanner/feature/tile/QuickSettingsTileService.kt @@ -16,4 +16,4 @@ class QuickSettingsTileService : TileService() { } startActivityAndCollapse(intent) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/model/Barcode.kt b/app/src/main/java/com/example/barcodescanner/model/Barcode.kt index 90cb2d66..ec7ef67e 100644 --- a/app/src/main/java/com/example/barcodescanner/model/Barcode.kt +++ b/app/src/main/java/com/example/barcodescanner/model/Barcode.kt @@ -22,4 +22,4 @@ data class Barcode( val isFavorite: Boolean = false, val errorCorrectionLevel: String? = null, val country: String? = null -) : Serializable \ No newline at end of file +) : Serializable diff --git a/app/src/main/java/com/example/barcodescanner/model/Contact.kt b/app/src/main/java/com/example/barcodescanner/model/Contact.kt index 218b5c1b..981ca2af 100644 --- a/app/src/main/java/com/example/barcodescanner/model/Contact.kt +++ b/app/src/main/java/com/example/barcodescanner/model/Contact.kt @@ -17,4 +17,4 @@ class Contact { var formattedAddress: String? = null var label: String? = null var contactType: Int? = null -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/model/ExportBarcode.kt b/app/src/main/java/com/example/barcodescanner/model/ExportBarcode.kt index 095705c1..b659295c 100644 --- a/app/src/main/java/com/example/barcodescanner/model/ExportBarcode.kt +++ b/app/src/main/java/com/example/barcodescanner/model/ExportBarcode.kt @@ -9,4 +9,4 @@ data class ExportBarcode( val date: Long, val format: BarcodeFormat, val text: String -) \ No newline at end of file +) diff --git a/app/src/main/java/com/example/barcodescanner/model/ParsedBarcode.kt b/app/src/main/java/com/example/barcodescanner/model/ParsedBarcode.kt index b52d7f7e..cb9b52e7 100644 --- a/app/src/main/java/com/example/barcodescanner/model/ParsedBarcode.kt +++ b/app/src/main/java/com/example/barcodescanner/model/ParsedBarcode.kt @@ -214,4 +214,4 @@ class ParsedBarcode(barcode: Barcode) { address = objNZCovidTracer.addr url = "http://maps.google.com/maps?q=" + (objNZCovidTracer.addr)?.replace("\n", ", ") } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/model/SearchEngine.kt b/app/src/main/java/com/example/barcodescanner/model/SearchEngine.kt index 229cb0cc..5ddc8b4d 100644 --- a/app/src/main/java/com/example/barcodescanner/model/SearchEngine.kt +++ b/app/src/main/java/com/example/barcodescanner/model/SearchEngine.kt @@ -10,4 +10,4 @@ enum class SearchEngine(val templateUrl: String) { STARTPAGE("https://www.startpage.com/sp/search?query="), YAHOO("https://search.yahoo.com/search?p="), YANDEX("https://www.yandex.ru/search/?text="), -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/model/schema/App.kt b/app/src/main/java/com/example/barcodescanner/model/schema/App.kt index 2d9c68d8..ad3f540d 100644 --- a/app/src/main/java/com/example/barcodescanner/model/schema/App.kt +++ b/app/src/main/java/com/example/barcodescanner/model/schema/App.kt @@ -28,4 +28,4 @@ class App(val url: String) : Schema { val appPackage by unsafeLazy { url.removePrefixIgnoreCase(PREFIXES[0]) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/model/schema/BoardingPass.kt b/app/src/main/java/com/example/barcodescanner/model/schema/BoardingPass.kt index ecc72aa1..e16dd381 100644 --- a/app/src/main/java/com/example/barcodescanner/model/schema/BoardingPass.kt +++ b/app/src/main/java/com/example/barcodescanner/model/schema/BoardingPass.kt @@ -112,4 +112,4 @@ class BoardingPass( override val schema = BarcodeSchema.BOARDINGPASS override fun toFormattedText(): String = listOf(name, pnr, "$from->$to", "$carrier$flight", date, cabin, seat, seq, ticket, selectee, "$ffAirline$ffNo", fasttrack).joinToStringNotNullOrBlankWithLineSeparator() override fun toBarcodeText(): String = "$blob" -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/model/schema/Bookmark.kt b/app/src/main/java/com/example/barcodescanner/model/schema/Bookmark.kt index daf24f80..30e51b20 100644 --- a/app/src/main/java/com/example/barcodescanner/model/schema/Bookmark.kt +++ b/app/src/main/java/com/example/barcodescanner/model/schema/Bookmark.kt @@ -57,4 +57,4 @@ data class Bookmark( .append(SEPARATOR) .toString() } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/model/schema/Cryptocurrency.kt b/app/src/main/java/com/example/barcodescanner/model/schema/Cryptocurrency.kt index 7f5027c5..b86cbfaa 100644 --- a/app/src/main/java/com/example/barcodescanner/model/schema/Cryptocurrency.kt +++ b/app/src/main/java/com/example/barcodescanner/model/schema/Cryptocurrency.kt @@ -110,4 +110,4 @@ class Cryptocurrency( return result.toString() } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/model/schema/Email.kt b/app/src/main/java/com/example/barcodescanner/model/schema/Email.kt index 22550764..1d83f83e 100644 --- a/app/src/main/java/com/example/barcodescanner/model/schema/Email.kt +++ b/app/src/main/java/com/example/barcodescanner/model/schema/Email.kt @@ -81,4 +81,4 @@ data class Email( .append(MATMSG_SEPARATOR) .toString() } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/model/schema/Geo.kt b/app/src/main/java/com/example/barcodescanner/model/schema/Geo.kt index a8562775..fd640808 100644 --- a/app/src/main/java/com/example/barcodescanner/model/schema/Geo.kt +++ b/app/src/main/java/com/example/barcodescanner/model/schema/Geo.kt @@ -38,4 +38,4 @@ class Geo : Schema { override fun toFormattedText(): String { return uri.removePrefixIgnoreCase(PREFIX).replace(SEPARATOR, "\n") } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/model/schema/GoogleMaps.kt b/app/src/main/java/com/example/barcodescanner/model/schema/GoogleMaps.kt index 8be28d8e..057aa769 100644 --- a/app/src/main/java/com/example/barcodescanner/model/schema/GoogleMaps.kt +++ b/app/src/main/java/com/example/barcodescanner/model/schema/GoogleMaps.kt @@ -18,4 +18,4 @@ data class GoogleMaps(val url: String) : Schema { override val schema = BarcodeSchema.GOOGLE_MAPS override fun toFormattedText(): String = url override fun toBarcodeText(): String = url -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/model/schema/MeCard.kt b/app/src/main/java/com/example/barcodescanner/model/schema/MeCard.kt index e0f345a9..b3e0aa6e 100644 --- a/app/src/main/java/com/example/barcodescanner/model/schema/MeCard.kt +++ b/app/src/main/java/com/example/barcodescanner/model/schema/MeCard.kt @@ -127,4 +127,4 @@ data class MeCard( .append(SCHEMA_SUFFIX) .toString() } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/model/schema/Mms.kt b/app/src/main/java/com/example/barcodescanner/model/schema/Mms.kt index c9875126..1ba3a719 100644 --- a/app/src/main/java/com/example/barcodescanner/model/schema/Mms.kt +++ b/app/src/main/java/com/example/barcodescanner/model/schema/Mms.kt @@ -40,4 +40,4 @@ class Mms( "$SEPARATOR${subject.orEmpty()}" + "$SEPARATOR${message.orEmpty()}" } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/model/schema/NZCovidTracer.kt b/app/src/main/java/com/example/barcodescanner/model/schema/NZCovidTracer.kt index 34935997..d502f552 100644 --- a/app/src/main/java/com/example/barcodescanner/model/schema/NZCovidTracer.kt +++ b/app/src/main/java/com/example/barcodescanner/model/schema/NZCovidTracer.kt @@ -53,4 +53,4 @@ class NZCovidTracer( override val schema = BarcodeSchema.NZCOVIDTRACER override fun toFormattedText(): String = listOf(title, addr).joinToStringNotNullOrBlankWithLineSeparator() override fun toBarcodeText(): String = "$PREFIX$decodedBytes" -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/model/schema/Other.kt b/app/src/main/java/com/example/barcodescanner/model/schema/Other.kt index 18985d6a..196e55fb 100644 --- a/app/src/main/java/com/example/barcodescanner/model/schema/Other.kt +++ b/app/src/main/java/com/example/barcodescanner/model/schema/Other.kt @@ -4,4 +4,4 @@ class Other(val text: String): Schema { override val schema = BarcodeSchema.OTHER override fun toFormattedText(): String = text override fun toBarcodeText(): String = text -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/model/schema/OtpAuth.kt b/app/src/main/java/com/example/barcodescanner/model/schema/OtpAuth.kt index 9b58a1e1..5b87f524 100644 --- a/app/src/main/java/com/example/barcodescanner/model/schema/OtpAuth.kt +++ b/app/src/main/java/com/example/barcodescanner/model/schema/OtpAuth.kt @@ -76,4 +76,4 @@ data class OtpAuth( .toString() } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/model/schema/Phone.kt b/app/src/main/java/com/example/barcodescanner/model/schema/Phone.kt index 71e1cc49..2274a16b 100644 --- a/app/src/main/java/com/example/barcodescanner/model/schema/Phone.kt +++ b/app/src/main/java/com/example/barcodescanner/model/schema/Phone.kt @@ -21,4 +21,4 @@ class Phone(val phone: String) : Schema { override val schema = BarcodeSchema.PHONE override fun toFormattedText(): String = phone override fun toBarcodeText(): String = "$PREFIX$phone" -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/model/schema/Schema.kt b/app/src/main/java/com/example/barcodescanner/model/schema/Schema.kt index d737b52c..821bdb56 100644 --- a/app/src/main/java/com/example/barcodescanner/model/schema/Schema.kt +++ b/app/src/main/java/com/example/barcodescanner/model/schema/Schema.kt @@ -26,4 +26,4 @@ interface Schema { val schema: BarcodeSchema fun toFormattedText(): String fun toBarcodeText(): String -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/model/schema/Sms.kt b/app/src/main/java/com/example/barcodescanner/model/schema/Sms.kt index 576d3bf5..e1d5e8e6 100644 --- a/app/src/main/java/com/example/barcodescanner/model/schema/Sms.kt +++ b/app/src/main/java/com/example/barcodescanner/model/schema/Sms.kt @@ -38,4 +38,4 @@ data class Sms( phone.orEmpty() + "$SEPARATOR${message.orEmpty()}" } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/model/schema/Url.kt b/app/src/main/java/com/example/barcodescanner/model/schema/Url.kt index 3ad83396..e39e5529 100644 --- a/app/src/main/java/com/example/barcodescanner/model/schema/Url.kt +++ b/app/src/main/java/com/example/barcodescanner/model/schema/Url.kt @@ -29,4 +29,4 @@ class Url(val url: String) : Schema { override val schema = BarcodeSchema.URL override fun toFormattedText(): String = url override fun toBarcodeText(): String = url -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/model/schema/VCard.kt b/app/src/main/java/com/example/barcodescanner/model/schema/VCard.kt index ac5b501b..fed6ddf4 100644 --- a/app/src/main/java/com/example/barcodescanner/model/schema/VCard.kt +++ b/app/src/main/java/com/example/barcodescanner/model/schema/VCard.kt @@ -199,4 +199,4 @@ data class VCard( .go() .trimEnd('\n', '\r', ' ') } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/model/schema/VEvent.kt b/app/src/main/java/com/example/barcodescanner/model/schema/VEvent.kt index b306a3fd..54ca3121 100644 --- a/app/src/main/java/com/example/barcodescanner/model/schema/VEvent.kt +++ b/app/src/main/java/com/example/barcodescanner/model/schema/VEvent.kt @@ -144,4 +144,4 @@ data class VEvent( .append(SCHEMA_SUFFIX) .toString() } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/model/schema/Wifi.kt b/app/src/main/java/com/example/barcodescanner/model/schema/Wifi.kt index b1d274b4..84a16c7c 100644 --- a/app/src/main/java/com/example/barcodescanner/model/schema/Wifi.kt +++ b/app/src/main/java/com/example/barcodescanner/model/schema/Wifi.kt @@ -70,4 +70,4 @@ class Wifi( .append(SEPARATOR) .toString() } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/model/schema/Youtube.kt b/app/src/main/java/com/example/barcodescanner/model/schema/Youtube.kt index 773dbedf..5915ab30 100644 --- a/app/src/main/java/com/example/barcodescanner/model/schema/Youtube.kt +++ b/app/src/main/java/com/example/barcodescanner/model/schema/Youtube.kt @@ -18,4 +18,4 @@ class Youtube(val url: String) : Schema { override val schema = BarcodeSchema.YOUTUBE override fun toFormattedText(): String = url override fun toBarcodeText(): String = url -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/usecase/BarcodeImageGenerator.kt b/app/src/main/java/com/example/barcodescanner/usecase/BarcodeImageGenerator.kt index 7466f8a6..7d4a039c 100644 --- a/app/src/main/java/com/example/barcodescanner/usecase/BarcodeImageGenerator.kt +++ b/app/src/main/java/com/example/barcodescanner/usecase/BarcodeImageGenerator.kt @@ -131,4 +131,4 @@ object BarcodeImageGenerator { setPixels(pixels, 0, width, 0, 0, width, height) } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/usecase/BarcodeImageSaver.kt b/app/src/main/java/com/example/barcodescanner/usecase/BarcodeImageSaver.kt index 67e118c9..321e97d6 100644 --- a/app/src/main/java/com/example/barcodescanner/usecase/BarcodeImageSaver.kt +++ b/app/src/main/java/com/example/barcodescanner/usecase/BarcodeImageSaver.kt @@ -33,7 +33,7 @@ object BarcodeImageSaver { } // Return Uri for image file - return FileProvider.getUriForFile(context, "com.example.barcodescanner.fileprovider", imageFile) + return FileProvider.getUriForFile(context, "${context.packageName}.fileprovider", imageFile) } fun savePngImageToPublicDirectory(context: Context, image: Bitmap, barcode: Barcode): Completable { @@ -83,4 +83,4 @@ object BarcodeImageSaver { close() } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/usecase/BarcodeImageScanner.kt b/app/src/main/java/com/example/barcodescanner/usecase/BarcodeImageScanner.kt index 1594ef80..c4be96ec 100644 --- a/app/src/main/java/com/example/barcodescanner/usecase/BarcodeImageScanner.kt +++ b/app/src/main/java/com/example/barcodescanner/usecase/BarcodeImageScanner.kt @@ -40,12 +40,12 @@ object BarcodeImageScanner { bitmapBuffer = IntArray(size) } - image.getPixels(bitmapBuffer, 0, width, 0, 0, width, height) + image.getPixels(bitmapBuffer!!, 0, width, 0, 0, width, height) - val source = RGBLuminanceSource(width, height, bitmapBuffer) + val source = RGBLuminanceSource(width, height, bitmapBuffer!!) val bitmap = BinaryBitmap(HybridBinarizer(source)) val reader = MultiFormatReader() return reader.decode(bitmap) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/usecase/BarcodeParser.kt b/app/src/main/java/com/example/barcodescanner/usecase/BarcodeParser.kt index e5fafd59..e3993dad 100644 --- a/app/src/main/java/com/example/barcodescanner/usecase/BarcodeParser.kt +++ b/app/src/main/java/com/example/barcodescanner/usecase/BarcodeParser.kt @@ -47,4 +47,4 @@ object BarcodeParser { ?: BoardingPass.parse(text) ?: Other(text) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/usecase/BarcodeSaver.kt b/app/src/main/java/com/example/barcodescanner/usecase/BarcodeSaver.kt index fd85a3ad..80c86a22 100644 --- a/app/src/main/java/com/example/barcodescanner/usecase/BarcodeSaver.kt +++ b/app/src/main/java/com/example/barcodescanner/usecase/BarcodeSaver.kt @@ -183,4 +183,4 @@ object BarcodeSaver { val uri = resolver.insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI, values) ?: throw IOException() return resolver.openOutputStream(uri) ?: throw IOException() } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/usecase/ContactHelper.kt b/app/src/main/java/com/example/barcodescanner/usecase/ContactHelper.kt index e29f8c41..63b35639 100644 --- a/app/src/main/java/com/example/barcodescanner/usecase/ContactHelper.kt +++ b/app/src/main/java/com/example/barcodescanner/usecase/ContactHelper.kt @@ -162,4 +162,4 @@ object ContactHelper { null } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/usecase/Logger.kt b/app/src/main/java/com/example/barcodescanner/usecase/Logger.kt index 086cfb08..6bc747ea 100644 --- a/app/src/main/java/com/example/barcodescanner/usecase/Logger.kt +++ b/app/src/main/java/com/example/barcodescanner/usecase/Logger.kt @@ -11,4 +11,4 @@ object Logger { Sentry.captureException(error) } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/usecase/OTPGenerator.kt b/app/src/main/java/com/example/barcodescanner/usecase/OTPGenerator.kt index 0d632b3a..836c70e0 100644 --- a/app/src/main/java/com/example/barcodescanner/usecase/OTPGenerator.kt +++ b/app/src/main/java/com/example/barcodescanner/usecase/OTPGenerator.kt @@ -45,4 +45,4 @@ object OTPGenerator { val generator = HmacOneTimePasswordGenerator(secret, config) return generator.generate(counter) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/usecase/PermissionsHelper.kt b/app/src/main/java/com/example/barcodescanner/usecase/PermissionsHelper.kt index bd05fd5e..22d63ae4 100644 --- a/app/src/main/java/com/example/barcodescanner/usecase/PermissionsHelper.kt +++ b/app/src/main/java/com/example/barcodescanner/usecase/PermissionsHelper.kt @@ -50,4 +50,4 @@ object PermissionsHelper { private fun isPermissionGranted(context: Context, permission: String): Boolean { return ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/usecase/RotationHelper.kt b/app/src/main/java/com/example/barcodescanner/usecase/RotationHelper.kt index 355c289d..f1f55f7b 100644 --- a/app/src/main/java/com/example/barcodescanner/usecase/RotationHelper.kt +++ b/app/src/main/java/com/example/barcodescanner/usecase/RotationHelper.kt @@ -24,4 +24,4 @@ object RotationHelper { private fun lockCurrentOrientation(activity: AppCompatActivity) { activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LOCKED } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/usecase/ScannerCameraHelper.kt b/app/src/main/java/com/example/barcodescanner/usecase/ScannerCameraHelper.kt index 92f5c1fc..434da097 100644 --- a/app/src/main/java/com/example/barcodescanner/usecase/ScannerCameraHelper.kt +++ b/app/src/main/java/com/example/barcodescanner/usecase/ScannerCameraHelper.kt @@ -34,4 +34,4 @@ object ScannerCameraHelper { } return null } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/usecase/Settings.kt b/app/src/main/java/com/example/barcodescanner/usecase/Settings.kt index ce2803d3..e408bcaa 100644 --- a/app/src/main/java/com/example/barcodescanner/usecase/Settings.kt +++ b/app/src/main/java/com/example/barcodescanner/usecase/Settings.kt @@ -192,4 +192,4 @@ class Settings(private val context: Context) { val mode = context.resources?.configuration?.uiMode?.and(Configuration.UI_MODE_NIGHT_MASK) return mode == Configuration.UI_MODE_NIGHT_YES } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/usecase/SupportedBarcodeFormats.kt b/app/src/main/java/com/example/barcodescanner/usecase/SupportedBarcodeFormats.kt index 5381232c..ce0b6593 100644 --- a/app/src/main/java/com/example/barcodescanner/usecase/SupportedBarcodeFormats.kt +++ b/app/src/main/java/com/example/barcodescanner/usecase/SupportedBarcodeFormats.kt @@ -18,4 +18,4 @@ object SupportedBarcodeFormats { BarcodeFormat.CODABAR, BarcodeFormat.ITF ) -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/barcodescanner/usecase/WifiConnector.kt b/app/src/main/java/com/example/barcodescanner/usecase/WifiConnector.kt index 93629a59..e4132f89 100644 --- a/app/src/main/java/com/example/barcodescanner/usecase/WifiConnector.kt +++ b/app/src/main/java/com/example/barcodescanner/usecase/WifiConnector.kt @@ -373,4 +373,4 @@ object WifiConnector { private inline fun requireApiLevel(version: Int, block: () -> T): T? { return if (Build.VERSION.SDK_INT >= version) return block() else null } -} \ No newline at end of file +} diff --git a/app/src/main/res/color/color_bottom_navigation_item.xml b/app/src/main/res/color/color_bottom_navigation_item.xml index 015ee182..316ce0fa 100644 --- a/app/src/main/res/color/color_bottom_navigation_item.xml +++ b/app/src/main/res/color/color_bottom_navigation_item.xml @@ -7,4 +7,4 @@ android:state_checked="true" android:color="@color/bottom_navigation_text_color_active" /> - \ No newline at end of file + diff --git a/app/src/main/res/color/color_button_text.xml b/app/src/main/res/color/color_button_text.xml index e6d1f734..758c7ed2 100644 --- a/app/src/main/res/color/color_button_text.xml +++ b/app/src/main/res/color/color_button_text.xml @@ -7,4 +7,4 @@ android:state_enabled="true" android:color="@color/white" /> - \ No newline at end of file + diff --git a/app/src/main/res/color/color_icon_button_icon_and_text.xml b/app/src/main/res/color/color_icon_button_icon_and_text.xml index e5e89456..6894050a 100644 --- a/app/src/main/res/color/color_icon_button_icon_and_text.xml +++ b/app/src/main/res/color/color_icon_button_icon_and_text.xml @@ -7,4 +7,4 @@ android:state_enabled="true" android:color="@color/default_text_color" /> - \ No newline at end of file + diff --git a/app/src/main/res/drawable/background_button.xml b/app/src/main/res/drawable/background_button.xml index 149243a8..09ca7e69 100644 --- a/app/src/main/res/drawable/background_button.xml +++ b/app/src/main/res/drawable/background_button.xml @@ -28,4 +28,4 @@ - \ No newline at end of file + diff --git a/app/src/main/res/drawable/ic_boardingpass.xml b/app/src/main/res/drawable/ic_boardingpass.xml index ec424c58..fbc2ec2c 100644 --- a/app/src/main/res/drawable/ic_boardingpass.xml +++ b/app/src/main/res/drawable/ic_boardingpass.xml @@ -5,4 +5,4 @@ android:viewportWidth="24" android:viewportHeight="24"> - \ No newline at end of file + diff --git a/app/src/main/res/drawable/ic_flash.xml b/app/src/main/res/drawable/ic_flash.xml index 56b73e15..5dbfa1a4 100644 --- a/app/src/main/res/drawable/ic_flash.xml +++ b/app/src/main/res/drawable/ic_flash.xml @@ -8,4 +8,4 @@ android:state_activated="true" android:drawable="@drawable/ic_flash_enabled" /> - \ No newline at end of file + diff --git a/app/src/main/res/drawable/ic_shortcut_create_barcode.xml b/app/src/main/res/drawable/ic_shortcut_create_barcode.xml index 611a9bfc..7473bf38 100644 --- a/app/src/main/res/drawable/ic_shortcut_create_barcode.xml +++ b/app/src/main/res/drawable/ic_shortcut_create_barcode.xml @@ -15,4 +15,4 @@ android:bottom="@dimen/default_margin_small" /> - \ No newline at end of file + diff --git a/app/src/main/res/drawable/ic_shortcut_history.xml b/app/src/main/res/drawable/ic_shortcut_history.xml index 59c86538..ba45c7d5 100644 --- a/app/src/main/res/drawable/ic_shortcut_history.xml +++ b/app/src/main/res/drawable/ic_shortcut_history.xml @@ -15,4 +15,4 @@ android:bottom="@dimen/default_margin_small" /> - \ No newline at end of file + diff --git a/app/src/main/res/drawable/ic_shortcut_scan_from_camera.xml b/app/src/main/res/drawable/ic_shortcut_scan_from_camera.xml index 64d3dc10..f6715667 100644 --- a/app/src/main/res/drawable/ic_shortcut_scan_from_camera.xml +++ b/app/src/main/res/drawable/ic_shortcut_scan_from_camera.xml @@ -15,4 +15,4 @@ android:bottom="@dimen/default_margin_small" /> - \ No newline at end of file + diff --git a/app/src/main/res/drawable/ic_shortcut_scan_from_file.xml b/app/src/main/res/drawable/ic_shortcut_scan_from_file.xml index 96665561..e90a0188 100644 --- a/app/src/main/res/drawable/ic_shortcut_scan_from_file.xml +++ b/app/src/main/res/drawable/ic_shortcut_scan_from_file.xml @@ -15,4 +15,4 @@ android:bottom="@dimen/default_margin_small" /> - \ No newline at end of file + diff --git a/app/src/main/res/layout/activity_all_permissions.xml b/app/src/main/res/layout/activity_all_permissions.xml index 15313d55..46598c1f 100644 --- a/app/src/main/res/layout/activity_all_permissions.xml +++ b/app/src/main/res/layout/activity_all_permissions.xml @@ -101,4 +101,4 @@ - \ No newline at end of file + diff --git a/app/src/main/res/layout/activity_barcode.xml b/app/src/main/res/layout/activity_barcode.xml index a5541427..7e99ff0c 100644 --- a/app/src/main/res/layout/activity_barcode.xml +++ b/app/src/main/res/layout/activity_barcode.xml @@ -437,4 +437,4 @@ android:layout_gravity="center" /> - \ No newline at end of file + diff --git a/app/src/main/res/layout/activity_barcode_image.xml b/app/src/main/res/layout/activity_barcode_image.xml index 2aeec91f..d765b2da 100644 --- a/app/src/main/res/layout/activity_barcode_image.xml +++ b/app/src/main/res/layout/activity_barcode_image.xml @@ -64,4 +64,4 @@ - \ No newline at end of file + diff --git a/app/src/main/res/layout/activity_barcode_otp.xml b/app/src/main/res/layout/activity_barcode_otp.xml index cf729b46..7eb8858c 100644 --- a/app/src/main/res/layout/activity_barcode_otp.xml +++ b/app/src/main/res/layout/activity_barcode_otp.xml @@ -73,4 +73,4 @@ - \ No newline at end of file + diff --git a/app/src/main/res/layout/activity_bottom_tabs.xml b/app/src/main/res/layout/activity_bottom_tabs.xml index 5cc658a3..d2eaa673 100644 --- a/app/src/main/res/layout/activity_bottom_tabs.xml +++ b/app/src/main/res/layout/activity_bottom_tabs.xml @@ -30,4 +30,4 @@ app:itemTextAppearanceInactive="@style/BottomNavigationItemTextAppearance" app:itemHorizontalTranslationEnabled="false" /> - \ No newline at end of file + diff --git a/app/src/main/res/layout/activity_choose_camera.xml b/app/src/main/res/layout/activity_choose_camera.xml index 6736d7b9..17d808e1 100644 --- a/app/src/main/res/layout/activity_choose_camera.xml +++ b/app/src/main/res/layout/activity_choose_camera.xml @@ -48,4 +48,4 @@ - \ No newline at end of file + diff --git a/app/src/main/res/layout/activity_choose_search_engine.xml b/app/src/main/res/layout/activity_choose_search_engine.xml index 8aa93e45..90e1f357 100644 --- a/app/src/main/res/layout/activity_choose_search_engine.xml +++ b/app/src/main/res/layout/activity_choose_search_engine.xml @@ -111,4 +111,4 @@ - \ No newline at end of file + diff --git a/app/src/main/res/layout/activity_choose_theme.xml b/app/src/main/res/layout/activity_choose_theme.xml index 2c365a5e..a3be40db 100644 --- a/app/src/main/res/layout/activity_choose_theme.xml +++ b/app/src/main/res/layout/activity_choose_theme.xml @@ -57,4 +57,4 @@ - \ No newline at end of file + diff --git a/app/src/main/res/layout/activity_create_barcode.xml b/app/src/main/res/layout/activity_create_barcode.xml index 27300334..2a373aa3 100644 --- a/app/src/main/res/layout/activity_create_barcode.xml +++ b/app/src/main/res/layout/activity_create_barcode.xml @@ -27,4 +27,4 @@ /> - \ No newline at end of file + diff --git a/app/src/main/res/layout/activity_create_barcode_all.xml b/app/src/main/res/layout/activity_create_barcode_all.xml index 09c76444..79c2a68e 100644 --- a/app/src/main/res/layout/activity_create_barcode_all.xml +++ b/app/src/main/res/layout/activity_create_barcode_all.xml @@ -152,4 +152,4 @@ - \ No newline at end of file + diff --git a/app/src/main/res/layout/activity_create_qr_code_all.xml b/app/src/main/res/layout/activity_create_qr_code_all.xml index 3093b0fd..b8ee89b6 100644 --- a/app/src/main/res/layout/activity_create_qr_code_all.xml +++ b/app/src/main/res/layout/activity_create_qr_code_all.xml @@ -152,4 +152,4 @@ - \ No newline at end of file + diff --git a/app/src/main/res/layout/activity_export_history.xml b/app/src/main/res/layout/activity_export_history.xml index 8630d0eb..9242913b 100644 --- a/app/src/main/res/layout/activity_export_history.xml +++ b/app/src/main/res/layout/activity_export_history.xml @@ -87,4 +87,4 @@ android:visibility="gone" /> - \ No newline at end of file + diff --git a/app/src/main/res/layout/activity_save_barcode_as_image.xml b/app/src/main/res/layout/activity_save_barcode_as_image.xml index 2e4a55c6..f0fd4f44 100644 --- a/app/src/main/res/layout/activity_save_barcode_as_image.xml +++ b/app/src/main/res/layout/activity_save_barcode_as_image.xml @@ -63,4 +63,4 @@ android:visibility="gone" /> - \ No newline at end of file + diff --git a/app/src/main/res/layout/activity_save_barcode_as_text.xml b/app/src/main/res/layout/activity_save_barcode_as_text.xml index c738e808..3da55978 100644 --- a/app/src/main/res/layout/activity_save_barcode_as_text.xml +++ b/app/src/main/res/layout/activity_save_barcode_as_text.xml @@ -63,4 +63,4 @@ android:visibility="gone" /> - \ No newline at end of file + diff --git a/app/src/main/res/layout/activity_scan_barcode_from_file.xml b/app/src/main/res/layout/activity_scan_barcode_from_file.xml index cff97c7a..4395dfb0 100644 --- a/app/src/main/res/layout/activity_scan_barcode_from_file.xml +++ b/app/src/main/res/layout/activity_scan_barcode_from_file.xml @@ -2,7 +2,6 @@ -