messenger-android

Android graphical user interfaces for GNUnet Messenger
Log | Files | Refs | README | LICENSE

CreateAccountFragment.kt (4383B)


      1 /*
      2    This file is part of GNUnet.
      3    Copyright (C) 2021--2025 GNUnet e.V.
      4 
      5    GNUnet is free software: you can redistribute it and/or modify it
      6    under the terms of the GNU Affero General Public License as published
      7    by the Free Software Foundation, either version 3 of the License,
      8    or (at your option) any later version.
      9 
     10    GNUnet is distributed in the hope that it will be useful, but
     11    WITHOUT ANY WARRANTY; without even the implied warranty of
     12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     13    Affero General Public License for more details.
     14 
     15    You should have received a copy of the GNU Affero General Public License
     16    along with this program.  If not, see <http://www.gnu.org/licenses/>.
     17 
     18    SPDX-License-Identifier: AGPL3.0-or-later
     19  */
     20 /*
     21  * @author t3sserakt
     22  * @file GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ui/account/CreateAccountFragment.kt
     23  */
     24 
     25 package org.gnunet.gnunetmessenger.ui.account
     26 
     27 import android.net.Uri
     28 import android.os.Bundle
     29 import android.view.LayoutInflater
     30 import android.view.View
     31 import android.view.ViewGroup
     32 import androidx.fragment.app.Fragment
     33 import androidx.activity.result.contract.ActivityResultContracts
     34 import androidx.lifecycle.lifecycleScope
     35 import androidx.navigation.fragment.findNavController
     36 import kotlinx.coroutines.launch
     37 import org.gnunet.gnunetmessenger.MainActivity
     38 import org.gnunet.gnunetmessenger.databinding.FragmentCreateAccountBinding
     39 import org.gnunet.gnunetmessenger.model.ChatHandle
     40 import org.gnunet.gnunetmessenger.service.GnunetChat
     41 import org.gnunet.gnunetmessenger.model.GnunetReturnValue
     42 import org.gnunet.gnunetmessenger.util.AvatarStorageUtil
     43 
     44 class CreateAccountFragment : Fragment() {
     45 
     46     private lateinit var binding: FragmentCreateAccountBinding
     47     private lateinit var mainActivity: MainActivity
     48     private lateinit var gnunetChat: GnunetChat
     49     private lateinit var handle: ChatHandle
     50     private var selectedAvatarUri: Uri? = null
     51 
     52     private val avatarImageRequest = registerForActivityResult(ActivityResultContracts.GetContent()) { uri ->
     53         uri?.let {
     54             selectedAvatarUri = it
     55             binding.avatarPreview.setImageURI(it)
     56             AvatarStorageUtil.saveAvatarFromUri(requireContext(), uri, gnunetChat.getProfileKey(handle))
     57             binding.avatarPreview.setImageURI(it)
     58         }
     59     }
     60 
     61     override fun onCreateView(
     62         inflater: LayoutInflater, container: ViewGroup?,
     63         savedInstanceState: Bundle?
     64     ): View {
     65         mainActivity = activity as MainActivity
     66         gnunetChat = mainActivity.getGnunetChatInstance()
     67         handle = mainActivity.getChatHandle()
     68 
     69         binding = FragmentCreateAccountBinding.inflate(inflater, container, false)
     70 
     71         binding.selectAvatarButton.setOnClickListener {
     72             avatarImageRequest.launch("image/*") // Start the image picker
     73         }
     74 
     75         val avatar = AvatarStorageUtil.loadAvatar(requireContext(), gnunetChat.getProfileKey(handle))
     76         avatar?.let {
     77             binding.avatarPreview.setImageBitmap(it)
     78         }
     79 
     80 
     81         binding.confirmButton.setOnClickListener {
     82             val accountName = binding.accountNameInput.text.toString()
     83             if (accountName.isNotEmpty()) {
     84                 createAccount(accountName)
     85             }
     86         }
     87 
     88         binding.cancelButton.setOnClickListener {
     89             // Navigate back to the previous screen
     90             requireActivity().onBackPressed()
     91         }
     92 
     93         return binding.root
     94     }
     95 
     96     private fun createAccount(accountName: String) {
     97         viewLifecycleOwner.lifecycleScope.launch {
     98             try {
     99                 val result = gnunetChat.createAccount(handle = handle, name = accountName)
    100 
    101                 when (result) {
    102                     GnunetReturnValue.OK -> {
    103                         // Erfolgreich → zurück zur Account-Liste
    104                         requireActivity().runOnUiThread {
    105                             findNavController().popBackStack()
    106                         }
    107                     }
    108                     else -> {
    109                         // TODO: Fehler anzeigen (Toast/Snackbar)
    110                         println("createAccount failed: $result")
    111                     }
    112                 }
    113             } catch (t: Throwable) {
    114                 // TODO: Fehler anzeigen (Toast/Snackbar)
    115                 t.printStackTrace()
    116             }
    117         }
    118     }
    119 }