Added clearing list
This commit is contained in:
parent
266c5ae00e
commit
f691b20952
@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:versionCode="1"
|
||||
android:versionName="1.0">
|
||||
|
||||
@ -21,7 +22,8 @@
|
||||
|
||||
<receiver
|
||||
android:name=".pluginSDK.PluginAccessReceiver"
|
||||
android:exported="true">
|
||||
android:exported="true"
|
||||
tools:ignore="ExportedReceiver">
|
||||
<intent-filter>
|
||||
<action android:name="keepass2android.ACTION_TRIGGER_REQUEST_ACCESS" />
|
||||
<action android:name="keepass2android.ACTION_RECEIVE_ACCESS" />
|
||||
@ -31,7 +33,8 @@
|
||||
|
||||
<receiver
|
||||
android:name=".pluginSDK.PluginActionBroadcastReceiver"
|
||||
android:exported="true">
|
||||
android:exported="true"
|
||||
tools:ignore="ExportedReceiver">
|
||||
<intent-filter>
|
||||
<action android:name="keepass2android.ACTION_OPEN_ENTRY" />
|
||||
<action android:name="keepass2android.ACTION_CLOSE_ENTRY_VIEW" />
|
||||
|
@ -1,7 +1,9 @@
|
||||
package net.helcel.fidelity.activity
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import android.content.pm.ActivityInfo
|
||||
import android.os.Bundle
|
||||
import androidx.activity.addCallback
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
@ -10,38 +12,38 @@ import net.helcel.fidelity.activity.fragment.Launcher
|
||||
import net.helcel.fidelity.databinding.ActMainBinding
|
||||
import net.helcel.fidelity.tools.CacheManager
|
||||
|
||||
@SuppressLint("SourceLockedOrientationActivity")
|
||||
class MainActivity : AppCompatActivity() {
|
||||
|
||||
private lateinit var binding: ActMainBinding
|
||||
|
||||
private lateinit var sharedPreferences: SharedPreferences
|
||||
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
sharedPreferences =
|
||||
this.getSharedPreferences(CacheManager.PREF_NAME, Context.MODE_PRIVATE)
|
||||
CacheManager.loadFidelity(sharedPreferences)
|
||||
|
||||
|
||||
binding = ActMainBinding.inflate(layoutInflater)
|
||||
setContentView(binding.root)
|
||||
|
||||
onBackPressedDispatcher.addCallback(this) {
|
||||
if (supportFragmentManager.backStackEntryCount > 0) {
|
||||
supportFragmentManager.popBackStackImmediate()
|
||||
loadLauncher()
|
||||
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
|
||||
} else {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
|
||||
if (savedInstanceState == null)
|
||||
loadLauncher()
|
||||
|
||||
}
|
||||
|
||||
private fun loadLauncher() {
|
||||
supportFragmentManager.beginTransaction()
|
||||
.add(R.id.container, Launcher())
|
||||
.replace(R.id.container, Launcher())
|
||||
.commit()
|
||||
}
|
||||
}
|
||||
|
@ -67,7 +67,7 @@ class CreateEntry : Fragment() {
|
||||
ErrorToaster.formIncomplete(requireActivity())
|
||||
|
||||
} else {
|
||||
val kpentry = KeepassWrapper.entryCreate(
|
||||
val kpEntry = KeepassWrapper.entryCreate(
|
||||
this,
|
||||
binding.editTextTitle.text.toString(),
|
||||
binding.editTextCode.text.toString(),
|
||||
@ -77,8 +77,8 @@ class CreateEntry : Fragment() {
|
||||
try {
|
||||
resultLauncherAdd.launch(
|
||||
Kp2aControl.getAddEntryIntent(
|
||||
kpentry.first,
|
||||
kpentry.second
|
||||
kpEntry.first,
|
||||
kpEntry.second
|
||||
)
|
||||
)
|
||||
} catch (e: ActivityNotFoundException) {
|
||||
@ -108,23 +108,21 @@ class CreateEntry : Fragment() {
|
||||
binding.editTextCode.error = e.message
|
||||
} catch (e: Exception) {
|
||||
binding.imageViewPreview.setImageBitmap(null)
|
||||
println(e.javaClass)
|
||||
println(e.message)
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
|
||||
private fun isValid(): Boolean {
|
||||
var valid = true
|
||||
if (binding.editTextTitle.text!!.isEmpty()) {
|
||||
if (binding.editTextTitle.text.isNullOrEmpty()) {
|
||||
valid = false
|
||||
binding.editTextTitle.error = "Title cannot be empty"
|
||||
}
|
||||
if (binding.editTextCode.text!!.isEmpty()) {
|
||||
if (binding.editTextCode.text.isNullOrEmpty()) {
|
||||
valid = false
|
||||
binding.editTextCode.error = "Code cannot be empty"
|
||||
}
|
||||
if (binding.editTextFormat.text!!.isEmpty()) {
|
||||
if (binding.editTextFormat.text.isNullOrEmpty()) {
|
||||
valid = false
|
||||
binding.editTextFormat.error = "Format cannot be empty"
|
||||
}
|
||||
|
@ -27,7 +27,6 @@ class Scanner : Fragment() {
|
||||
|
||||
private var code: String = ""
|
||||
private var fmt: String = ""
|
||||
private var valid: Boolean = false
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
@ -35,13 +34,14 @@ class Scanner : Fragment() {
|
||||
savedInstanceState: Bundle?
|
||||
): View {
|
||||
binding = FragScannerBinding.inflate(layoutInflater)
|
||||
binding.bottomText.setOnClickListener {
|
||||
binding.btnScanDone.setOnClickListener {
|
||||
startCreateEntry()
|
||||
}
|
||||
when (hasCameraPermission()) {
|
||||
true -> bindCameraUseCases()
|
||||
else -> requestPermission()
|
||||
}
|
||||
binding.btnScanDone.isEnabled = false
|
||||
return binding.root
|
||||
}
|
||||
|
||||
@ -92,9 +92,10 @@ class Scanner : Fragment() {
|
||||
if (code != null && format != null) {
|
||||
this.code = code
|
||||
this.fmt = format
|
||||
this.valid = true
|
||||
binding.btnScanDone.isEnabled = true
|
||||
|
||||
} else {
|
||||
this.valid = false
|
||||
binding.btnScanDone.isEnabled = false
|
||||
}
|
||||
}
|
||||
try {
|
||||
@ -111,6 +112,4 @@ class Scanner : Fragment() {
|
||||
}
|
||||
}, ContextCompat.getMainExecutor(requireContext()))
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,10 +1,14 @@
|
||||
package net.helcel.fidelity.activity.fragment
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.pm.ActivityInfo
|
||||
import android.content.res.Configuration
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_FULL
|
||||
import android.view.WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE
|
||||
import androidx.fragment.app.Fragment
|
||||
import com.google.zxing.FormatException
|
||||
import net.helcel.fidelity.databinding.FragViewEntryBinding
|
||||
@ -12,16 +16,14 @@ import net.helcel.fidelity.tools.BarcodeGenerator.generateBarcode
|
||||
import net.helcel.fidelity.tools.ErrorToaster
|
||||
import net.helcel.fidelity.tools.KeepassWrapper
|
||||
|
||||
|
||||
@SuppressLint("SourceLockedOrientationActivity")
|
||||
class ViewEntry : Fragment() {
|
||||
|
||||
private lateinit var binding: FragViewEntryBinding
|
||||
|
||||
private var title: String? = null
|
||||
private var code: String? = null
|
||||
private var fmt: String? = null
|
||||
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
@ -33,8 +35,15 @@ class ViewEntry : Fragment() {
|
||||
code = res.second
|
||||
fmt = res.third
|
||||
|
||||
adjustLayout()
|
||||
updatePreview()
|
||||
updateLayout()
|
||||
|
||||
binding.imageViewPreview.setOnClickListener {
|
||||
requireActivity().requestedOrientation =
|
||||
if (isLandscape()) ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
|
||||
else ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
|
||||
}
|
||||
|
||||
return binding.root
|
||||
}
|
||||
|
||||
@ -42,7 +51,7 @@ class ViewEntry : Fragment() {
|
||||
binding.title.text = title
|
||||
try {
|
||||
val barcodeBitmap = generateBarcode(
|
||||
code!!, fmt!!, 1024
|
||||
code, fmt, 1024
|
||||
)
|
||||
binding.imageViewPreview.setImageBitmap(barcodeBitmap)
|
||||
} catch (e: FormatException) {
|
||||
@ -53,23 +62,25 @@ class ViewEntry : Fragment() {
|
||||
ErrorToaster.invalidFormat(requireActivity())
|
||||
} catch (e: Exception) {
|
||||
binding.imageViewPreview.setImageBitmap(null)
|
||||
println(e.javaClass)
|
||||
println(e.message)
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
override fun onConfigurationChanged(newConfig: Configuration) {
|
||||
super.onConfigurationChanged(newConfig)
|
||||
adjustLayout()
|
||||
}
|
||||
|
||||
private fun adjustLayout() {
|
||||
if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
||||
private fun updateLayout() {
|
||||
if (isLandscape()) {
|
||||
binding.title.visibility = View.GONE
|
||||
setScreenBrightness(BRIGHTNESS_OVERRIDE_FULL)
|
||||
} else {
|
||||
binding.title.visibility = View.VISIBLE
|
||||
setScreenBrightness(BRIGHTNESS_OVERRIDE_NONE)
|
||||
}
|
||||
}
|
||||
|
||||
private fun isLandscape(): Boolean {
|
||||
return (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE)
|
||||
}
|
||||
|
||||
private fun setScreenBrightness(brightness: Float?) {
|
||||
requireActivity().window?.attributes?.screenBrightness = brightness
|
||||
}
|
||||
}
|
@ -0,0 +1,45 @@
|
||||
package net.helcel.fidelity.activity.view
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Canvas
|
||||
import android.graphics.Color
|
||||
import android.graphics.Paint
|
||||
import android.graphics.PorterDuff
|
||||
import android.graphics.PorterDuffXfermode
|
||||
import android.util.AttributeSet
|
||||
import android.view.View
|
||||
|
||||
class ScannerView : View {
|
||||
|
||||
private val overlayPaint = Paint().apply {
|
||||
color = Color.parseColor("#80000000") // Semi-transparent black
|
||||
style = Paint.Style.FILL
|
||||
}
|
||||
|
||||
private val clearPaint = Paint().apply {
|
||||
xfermode = PorterDuffXfermode(PorterDuff.Mode.CLEAR)
|
||||
}
|
||||
|
||||
constructor(context: Context) : super(context)
|
||||
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
|
||||
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
||||
context,
|
||||
attrs,
|
||||
defStyleAttr
|
||||
)
|
||||
|
||||
override fun onDraw(canvas: Canvas) {
|
||||
super.onDraw(canvas)
|
||||
|
||||
canvas.drawRect(0f, 0f, width.toFloat(), height.toFloat(), overlayPaint)
|
||||
|
||||
val centerX = width / 2f
|
||||
val centerY = height / 2f
|
||||
val squareSize = 0.75f * width.coerceAtMost(height)
|
||||
canvas.drawRect(
|
||||
centerX - squareSize / 2, centerY - squareSize / 2,
|
||||
centerX + squareSize / 2, centerY + squareSize / 2, clearPaint
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -15,9 +15,9 @@ import net.helcel.fidelity.tools.BarcodeFormatConverter.formatToString
|
||||
import java.util.concurrent.Executors
|
||||
|
||||
|
||||
@OptIn(ExperimentalGetImage::class)
|
||||
object BarcodeScanner {
|
||||
|
||||
@OptIn(ExperimentalGetImage::class)
|
||||
private fun processImageProxy(
|
||||
barcodeScanner: BarcodeScanner,
|
||||
imageProxy: ImageProxy,
|
||||
@ -33,8 +33,6 @@ object BarcodeScanner {
|
||||
|
||||
barcodeScanner.process(inputImage)
|
||||
.addOnSuccessListener { barcodeList ->
|
||||
println(barcodeList.map { e -> e.displayValue })
|
||||
println(barcodeList.map { e -> e.format })
|
||||
val barcode =
|
||||
barcodeList.getOrNull(0)
|
||||
if (barcode != null)
|
||||
|
@ -20,7 +20,6 @@ object BarcodeFormatConverter {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fun formatToString(f: Int): String {
|
||||
return when (f) {
|
||||
Barcode.FORMAT_CODE_128 -> "CODE_128"
|
||||
|
@ -19,8 +19,8 @@ object BarcodeGenerator {
|
||||
android.graphics.Color.WHITE
|
||||
}
|
||||
|
||||
fun generateBarcode(content: String, f: String, width: Int): Bitmap? {
|
||||
if (content.isEmpty() || f.isEmpty()) {
|
||||
fun generateBarcode(content: String?, f: String?, width: Int): Bitmap? {
|
||||
if (content.isNullOrEmpty() || f.isNullOrEmpty()) {
|
||||
return null
|
||||
}
|
||||
try {
|
||||
@ -33,11 +33,8 @@ object BarcodeGenerator {
|
||||
for (x in 0 until width) {
|
||||
for (y in 0 until height) {
|
||||
bitmap.setPixel(
|
||||
x,
|
||||
y,
|
||||
getPixelColor(bitMatrix, x, y)
|
||||
x, y, getPixelColor(bitMatrix, x, y)
|
||||
)
|
||||
|
||||
}
|
||||
}
|
||||
return bitmap
|
||||
|
@ -42,12 +42,11 @@ object KeepassWrapper {
|
||||
callback: (HashMap<String, String>) -> Unit
|
||||
): ActivityResultLauncher<Intent> {
|
||||
return fragment.registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
|
||||
|
||||
println(result.toString())
|
||||
if (result.resultCode == Activity.RESULT_OK) {
|
||||
val data: Intent? = result.data
|
||||
val credentials = Kp2aControl.getEntryFieldsFromIntent(
|
||||
data!!
|
||||
)
|
||||
println(credentials)
|
||||
val credentials = Kp2aControl.getEntryFieldsFromIntent(result.data)
|
||||
println(credentials.toList().toString())
|
||||
callback(credentials)
|
||||
}
|
||||
}
|
||||
@ -59,11 +58,8 @@ object KeepassWrapper {
|
||||
): ActivityResultLauncher<Intent> {
|
||||
return fragment.registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
|
||||
if (result.resultCode == Activity.RESULT_OK) {
|
||||
val data: Intent? = result.data
|
||||
val credentials = Kp2aControl.getEntryFieldsFromIntent(
|
||||
data!!
|
||||
)
|
||||
println(credentials)
|
||||
val credentials = Kp2aControl.getEntryFieldsFromIntent(result.data)
|
||||
println(credentials.toList().toString())
|
||||
callback(credentials)
|
||||
}
|
||||
}
|
||||
|
@ -1,21 +0,0 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="72dp"
|
||||
android:height="72dp"
|
||||
android:viewportWidth="52"
|
||||
android:viewportHeight="52">
|
||||
|
||||
<group
|
||||
android:translateX="-10"
|
||||
android:translateY="-10">
|
||||
<path
|
||||
android:fillColor="#EA5A47"
|
||||
android:pathData="M60.7,26.2c0,-7.2 -5.9,-13.1 -13.1,-13.1c-5,0 -9.3,2.8 -11.5,6.9c-2.2,-4.1 -6.6,-6.9 -11.5,-6.9c-7.2,0 -13.1,5.9 -13.1,13.1c0,3.1 1.1,6 2.9,8.2l0,0l21.8,27l21.8,-27l0,0C59.6,32.2 60.7,29.4 60.7,26.2z" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M60.7,26.2c0,-7.2 -5.9,-13.1 -13.1,-13.1c-5,0 -9.3,2.8 -11.5,6.9c-2.2,-4.1 -6.6,-6.9 -11.5,-6.9c-7.2,0 -13.1,5.9 -13.1,13.1c0,3.1 1.1,6 2.9,8.2l0,0l21.8,27l21.8,-27l0,0C59.6,32.2 60.7,29.4 60.7,26.2z"
|
||||
android:strokeWidth="2"
|
||||
android:strokeColor="#000000"
|
||||
android:strokeLineCap="round"
|
||||
android:strokeLineJoin="round" />
|
||||
</group>
|
||||
</vector>
|
@ -1,31 +0,0 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="72dp"
|
||||
android:height="72dp"
|
||||
android:viewportWidth="52"
|
||||
android:viewportHeight="52">
|
||||
<group
|
||||
android:translateX="-10"
|
||||
android:translateY="-10">
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M30.735,34.656l-16.432,16.026l0,7.24l7.565,0l0,-4.637l5.125,0l0,-5.857l5.098,0l2.404,-2.404l0,-4.358l2.015,0"
|
||||
android:strokeWidth="2"
|
||||
android:strokeColor="#000000"
|
||||
android:strokeLineCap="round"
|
||||
android:strokeLineJoin="round" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M48.52,23.998m-3.952,0a3.952,3.952 0,1 1,7.904 0a3.952,3.952 0,1 1,-7.904 0"
|
||||
android:strokeWidth="2"
|
||||
android:strokeColor="#000000"
|
||||
android:strokeLineCap="round"
|
||||
android:strokeLineJoin="round" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M34.226,31.178c-1.43,-4.238 -0.347,-9.221 3.18,-12.695c4.845,-4.772 12.465,-4.889 17.022,-0.263s4.322,12.244 -0.522,17.016c-3.917,3.858 -9.648,4.674 -14.108,2.4"
|
||||
android:strokeWidth="2"
|
||||
android:strokeColor="#000000"
|
||||
android:strokeLineCap="round"
|
||||
android:strokeLineJoin="round" />
|
||||
</group>
|
||||
</vector>
|
@ -1,31 +0,0 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="72dp"
|
||||
android:height="72dp"
|
||||
android:viewportWidth="52"
|
||||
android:viewportHeight="52">
|
||||
<group
|
||||
android:translateX="-10"
|
||||
android:translateY="-10">
|
||||
<path
|
||||
android:pathData="M53,32.25l1.875,0l0,26.875l-38,0l0,-26.875l1.875,0z"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="2"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#000000"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M21.375,28.915c0,-8.379 6.415,-16.274 14.318,-16.523c7.97,-0.251 15.41,7.285 14.742,16.523"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="2"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#000000"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M25.548,28.915c0,-6.335 4.576,-12.305 10.212,-12.493c5.684,-0.19 10.991,5.508 10.514,12.493"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="2"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#000000"
|
||||
android:strokeLineCap="round"/>
|
||||
</group>
|
||||
</vector>
|
@ -1,8 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/coordinator"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:fitsSystemWindows="true"
|
||||
|
@ -14,7 +14,6 @@
|
||||
android:padding="16dp">
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/nameInputLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
@ -64,7 +63,6 @@
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/formatInputLayout"
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
@ -9,7 +9,8 @@
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/fidelityList"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
android:layout_height="match_parent"
|
||||
android:layout_margin="24dp" />
|
||||
|
||||
|
||||
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
@ -25,7 +26,6 @@
|
||||
app:srcCompat="@drawable/search" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/expandedMenuContainer"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentEnd="true"
|
||||
|
@ -11,12 +11,26 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/bottomText"
|
||||
<net.helcel.fidelity.activity.view.ScannerView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="64dp"
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
android:id="@+id/btnScanDone"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:background="#ffffff"
|
||||
android:textSize="24sp" />
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_margin="24dp"
|
||||
android:contentDescription="@string/manual" />
|
||||
|
||||
<com.google.android.material.progressindicator.CircularProgressIndicator
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_margin="28dp"
|
||||
android:indeterminate="true" />
|
||||
|
||||
|
||||
</RelativeLayout>
|
@ -1,7 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TextView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/textViewFeelings"
|
||||
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="15dp"
|
||||
|
@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="kp2aplugin_title" tools:keep="@string/kp2aplugin_title">Fidelity</string>
|
||||
<string name="kp2aplugin_shortdesc">Stores and Displays fidelity and other cards</string>
|
||||
<string name="kp2aplugin_author" tools:keep="@string/kp2aplugin_author">[soraefir](soraefir)</string>
|
||||
<string name="kp2aplugin_shortdesc" tools:keep="@string/kp2aplugin_shortdesc">Fidelity adds an interface to manage fidelity cards and other barcodes to Keepass2Android</string>
|
||||
<string name="kp2aplugin_author" tools:keep="@string/kp2aplugin_author">Soraefir</string>
|
||||
|
||||
<string name="app_name">Keepass Fidelity</string>
|
||||
|
||||
|
@ -1,3 +0,0 @@
|
||||
<resources>
|
||||
|
||||
</resources>
|
@ -1,9 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<style name="Theme.Fidelity" parent="Theme.Material3.DayNight.NoActionBar">
|
||||
|
||||
<item name="colorPrimary">?attr/colorAccent</item>
|
||||
<style name="Theme.Fidelity" parent="Theme.MaterialComponents.DayNight.NoActionBar">
|
||||
|
||||
<item name="colorPrimary">#7DB9F5</item>
|
||||
<item name="colorPrimaryVariant">#7DB9F5</item>
|
||||
<item name="colorSecondary">#7DB9F5</item>
|
||||
<item name="colorSecondaryVariant">#7DB9F5</item>
|
||||
<item name="colorOnPrimary">#030B12</item>
|
||||
</style>
|
||||
</resources>
|
@ -15,7 +15,7 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
|
||||
# Android operating system, and which are packaged with your app's APK
|
||||
# https://developer.android.com/topic/libraries/support-library/androidx-rn
|
||||
android.useAndroidX=true
|
||||
android.enableJetifier=true
|
||||
android.enableJetifier=false
|
||||
# Kotlin code style for this project: "official" or "obsolete":
|
||||
kotlin.code.style=official
|
||||
# Enables namespacing of each library's R class so that its R class includes only the
|
||||
|
Loading…
x
Reference in New Issue
Block a user