Add clipboard button and barcode to the add device dialog

This commit is contained in:
Jonas Lochmann 2023-02-13 01:00:00 +01:00
parent 196dbcd5a0
commit 33e09be39e
No known key found for this signature in database
GPG key ID: 8B8C9AEE10FA5B36
4 changed files with 39 additions and 8 deletions

View file

@ -1,5 +1,5 @@
/*
* TimeLimit Copyright <C> 2019 Jonas Lochmann
* TimeLimit Copyright <C> 2019 - 2023 Jonas Lochmann
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -16,15 +16,20 @@
package io.timelimit.android.ui.manage.device.add
import android.content.ClipData
import android.content.ClipboardManager
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.content.getSystemService
import androidx.fragment.app.FragmentManager
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProviders
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import io.timelimit.android.R
import io.timelimit.android.barcode.BarcodeMaskDrawable
import io.timelimit.android.barcode.DataMatrix
import io.timelimit.android.databinding.FragmentAddDeviceBinding
import io.timelimit.android.extensions.showSafe
import io.timelimit.android.ui.main.getActivityViewModel
@ -34,27 +39,36 @@ class AddDeviceFragment : BottomSheetDialogFragment() {
private const val DIALOG_TAG = "adf"
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
val binding = FragmentAddDeviceBinding.inflate(inflater, container, false)
val model = ViewModelProviders.of(this).get(AddDeviceModel::class.java)
val clipboardManager = requireContext().getSystemService<ClipboardManager>()!!
binding.copyToClipboardButton.setOnClickListener {
clipboardManager.setPrimaryClip(ClipData.newPlainText("Code", binding.token))
}
model.status.observe(this, Observer {
when (it) {
Initializing -> {
binding.token = null
binding.message = null
binding.barcode.setImageDrawable(null)
}
Failed -> {
binding.token = null
binding.message = getString(R.string.error_network)
binding.barcode.setImageDrawable(null)
}
is ShowingToken -> {
binding.token = it.token
binding.message = null
binding.barcode.setImageDrawable(BarcodeMaskDrawable(DataMatrix.generate(it.token)))
}
is DidAddDevice -> {
binding.token = null
binding.message = getString(R.string.add_device_success, it.deviceName)
binding.barcode.setImageDrawable(null)
}
TokenExpired -> {
dismissAllowingStateLoss()

View file

@ -1,5 +1,5 @@
<!--
TimeLimit Copyright <C> 2019 Jonas Lochmann
TimeLimit Copyright <C> 2019 - 2023 Jonas Lochmann
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation version 3 of the License.
@ -45,6 +45,14 @@
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<ImageView
android:adjustViewBounds="true"
android:id="@+id/barcode"
android:layout_gravity="center_horizontal"
tools:src="@drawable/banner"
android:layout_width="128dp"
android:layout_height="wrap_content" />
<TextView
android:visibility="@{TextUtils.isEmpty(message) ? View.GONE : View.VISIBLE}"
android:gravity="center_horizontal"
@ -64,6 +72,15 @@
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:visibility="@{TextUtils.isEmpty(token) ? View.GONE : View.VISIBLE}"
style="?materialButtonOutlinedStyle"
android:id="@+id/copy_to_clipboard_button"
android:text="@string/diagnose_sync_copy_to_clipboard"
android:layout_gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:visibility="@{TextUtils.isEmpty(token) ? View.GONE : View.VISIBLE}"
android:gravity="center_horizontal"

View file

@ -79,8 +79,8 @@
<string name="add_device">Gerät hinzufügen</string>
<string name="add_device_info">
Geben Sie diesen Code an dem Gerät ein, das Sie hinzufügen möchten.
Sie können den Code NUR bei der Einrichtung von TimeLimit angeben und müssen dafür
Geben/scannen Sie diesen Code an dem Gerät ein, das Sie hinzufügen möchten.
Sie können den Code NUR bei der Einrichtung von TimeLimit verwenden und müssen dafür
auswählen, dass Sie eine Verknüpfung mit einer bestehenden Installation mit einem Code
durchführen möchten. Eine spätere Verknüpfung ist nicht möglich - dann muss TimeLimit am
anderen Gerät neu installiert werden.

View file

@ -124,9 +124,9 @@
<string name="add_device">Add device</string>
<string name="add_device_info">
Enter the code at the device which you would like to add.
You can enter the code ONLY during the setup of TimeLimit and only if you chose to link
the device using a code. You can not enter this code later - you must reinstall TimeLimit at
Enter or scan the code at the device which you would like to add.
You can enter/scan the code ONLY during the setup of TimeLimit and only if you chose to link
the device using a code. You can not use this code later - you must reinstall TimeLimit at
the other device in this case.
</string>
<string name="add_device_success">The device %s was added</string>