diff --git a/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/ContactFragment.kt b/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/ContactFragment.kt index 98867da..3c9b666 100644 --- a/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/ContactFragment.kt +++ b/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/ContactFragment.kt @@ -75,7 +75,7 @@ class ContactFragment : Fragment() { */ interface OnListFragmentInteractionListener { // TODO: Update argument type and name - fun onListFragmentInteraction(item: Contact?) + fun onListFragmentInteraction(item: Contact.Contact) } companion object { diff --git a/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/ListKeysFragment.kt b/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/ListKeysFragment.kt new file mode 100644 index 0000000..3d5c509 --- /dev/null +++ b/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/ListKeysFragment.kt @@ -0,0 +1,95 @@ +package io.github.romulus10.blckchnmsg + +import android.content.Context +import android.os.Bundle +import android.support.v4.app.Fragment +import android.support.v7.widget.GridLayoutManager +import android.support.v7.widget.LinearLayoutManager +import android.support.v7.widget.RecyclerView +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import io.github.romulus10.blckchnmsg.blckchnmsg.data.Key + +/** + * A fragment representing a list of Items. + * Activities containing this fragment MUST implement the + * [ListKeysFragment.OnListFragmentInteractionListener] interface. + */ +class ListKeysFragment : Fragment() { + + // TODO: Customize parameters + private var columnCount = 1 + + private var listener: OnListFragmentInteractionListener? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + arguments?.let { + columnCount = it.getInt(ARG_COLUMN_COUNT) + } + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle?): View? { + val view = inflater.inflate(R.layout.fragment_listkeys_list, container, false) + + // Set the adapter + if (view is RecyclerView) { + with(view) { + layoutManager = when { + columnCount <= 1 -> LinearLayoutManager(context) + else -> GridLayoutManager(context, columnCount) + } + adapter = MyListKeysRecyclerViewAdapter(Key.ITEMS, listener) + } + } + return view + } + + override fun onAttach(context: Context) { + super.onAttach(context) + if (context is OnListFragmentInteractionListener) { + listener = context + } else { + throw RuntimeException(context.toString() + " must implement OnListFragmentInteractionListener") + } + } + + override fun onDetach() { + super.onDetach() + listener = null + } + + /** + * This interface must be implemented by activities that contain this + * fragment to allow an interaction in this fragment to be communicated + * to the activity and potentially other fragments contained in that + * activity. + * + * + * See the Android Training lesson + * [Communicating with Other Fragments](http://developer.android.com/training/basics/fragments/communicating.html) + * for more information. + */ + interface OnListFragmentInteractionListener { + // TODO: Update argument type and name + fun onListFragmentInteraction(item: Key.Key) + } + + companion object { + + // TODO: Customize parameter argument names + const val ARG_COLUMN_COUNT = "column-count" + + // TODO: Customize parameter initialization + @JvmStatic + fun newInstance(columnCount: Int) = + ListKeysFragment().apply { + arguments = Bundle().apply { + putInt(ARG_COLUMN_COUNT, columnCount) + } + } + } +} diff --git a/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/LoginActivity.kt b/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/LoginActivity.kt index 1a4cf6b..fdb6128 100644 --- a/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/LoginActivity.kt +++ b/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/LoginActivity.kt @@ -24,6 +24,7 @@ import android.widget.TextView import java.util.ArrayList import android.Manifest.permission.READ_CONTACTS import android.content.Intent +import android.util.Log import kotlinx.android.synthetic.main.activity_login.* @@ -107,11 +108,23 @@ class LoginActivity : AppCompatActivity(), LoaderCallbacks { // Store values at the time of the login attempt. val addrStr = addr.text.toString() val unameStr = uname.text.toString() - val emailAddrStr = email.text.toString() + val emailStr = email.text.toString() val passwordStr = password.text.toString() var cancel = false var focusView: View? = null + + if (cancel) { + // There was an error; don't attempt login and focus the first + // form field with an error. + focusView?.requestFocus() + } else { + // Show a progress spinner, and kick off a background task to + // perform the user login attempt. + showProgress(true) + mAuthTask = UserLoginTask(emailStr, passwordStr) + mAuthTask!!.execute(null as Void?) + } } private fun isEmailValid(email: String): Boolean { @@ -235,6 +248,9 @@ class LoginActivity : AppCompatActivity(), LoaderCallbacks { } override fun onPostExecute(success: Boolean?) { + + Log.d("UserLoginActivity", "onPostExecute firing.") + mAuthTask = null showProgress(false) diff --git a/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/MainActivity.kt b/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/MainActivity.kt index 85aeda6..fc24d69 100644 --- a/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/MainActivity.kt +++ b/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/MainActivity.kt @@ -1,5 +1,6 @@ package io.github.romulus10.blckchnmsg +import android.net.Uri import android.os.Bundle import android.support.design.widget.Snackbar import android.support.design.widget.NavigationView @@ -9,10 +10,35 @@ import android.support.v7.app.AppCompatActivity import android.util.Log import android.view.Menu import android.view.MenuItem +import io.github.romulus10.blckchnmsg.blckchnmsg.data.Contact +import io.github.romulus10.blckchnmsg.blckchnmsg.data.Key +import io.github.romulus10.blckchnmsg.blckchnmsg.data.Message import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.app_bar_main.* -class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener { +class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener, + MessageFragment.OnListFragmentInteractionListener, + ContactFragment.OnListFragmentInteractionListener, + ListKeysFragment.OnListFragmentInteractionListener, + NewContact.OnFragmentInteractionListener, + NewMessage.OnFragmentInteractionListener, + KeysFragment.OnFragmentInteractionListener { + + override fun onFragmentInteraction(uri: Uri) { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + + override fun onListFragmentInteraction(item: Message.Message) { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + + override fun onListFragmentInteraction(item: Contact.Contact) { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + + override fun onListFragmentInteraction(item: Key.Key) { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -93,7 +119,7 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte Log.d("MainActivity", "Keys") val fragmentManager = supportFragmentManager val fragmentTransaction = fragmentManager.beginTransaction() - val fragment = KeysFragment() + val fragment = ListKeysFragment() val b = Bundle() fragment.arguments = b fragmentTransaction.replace(R.id.fragment_container, fragment) diff --git a/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/MessageFragment.kt b/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/MessageFragment.kt index beaae24..823c138 100644 --- a/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/MessageFragment.kt +++ b/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/MessageFragment.kt @@ -75,7 +75,7 @@ class MessageFragment : Fragment() { */ interface OnListFragmentInteractionListener { // TODO: Update argument type and name - fun onListFragmentInteraction(item: Message?) + fun onListFragmentInteraction(item: Message.Message) } companion object { diff --git a/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/MyContactRecyclerViewAdapter.kt b/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/MyContactRecyclerViewAdapter.kt index a999f4a..86b4042 100644 --- a/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/MyContactRecyclerViewAdapter.kt +++ b/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/MyContactRecyclerViewAdapter.kt @@ -9,12 +9,11 @@ import android.widget.TextView import io.github.romulus10.blckchnmsg.ContactFragment.OnListFragmentInteractionListener import io.github.romulus10.blckchnmsg.blckchnmsg.data.Contact -import io.github.romulus10.blckchnmsg.dummy.DummyContent.DummyItem import kotlinx.android.synthetic.main.fragment_contact.view.* /** - * [RecyclerView.Adapter] that can display a [DummyItem] and makes a call to the + * [RecyclerView.Adapter] that can display a [Contact] and makes a call to the * specified [OnListFragmentInteractionListener]. * TODO: Replace the implementation with code for your data type. */ @@ -27,7 +26,7 @@ class MyContactRecyclerViewAdapter( init { mOnClickListener = View.OnClickListener { v -> - val item = v.tag as Contact + val item = v.tag as Contact.Contact // Notify the active callbacks interface (the activity, if the fragment is attached to // one) that an item has been selected. mListener?.onListFragmentInteraction(item) diff --git a/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/MyListKeysRecyclerViewAdapter.kt b/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/MyListKeysRecyclerViewAdapter.kt new file mode 100644 index 0000000..d04e11f --- /dev/null +++ b/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/MyListKeysRecyclerViewAdapter.kt @@ -0,0 +1,63 @@ +package io.github.romulus10.blckchnmsg + +import android.support.v7.widget.RecyclerView +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView + + +import io.github.romulus10.blckchnmsg.ListKeysFragment.OnListFragmentInteractionListener +import io.github.romulus10.blckchnmsg.blckchnmsg.data.Key + +import kotlinx.android.synthetic.main.fragment_listkeys.view.* + +/** + * [RecyclerView.Adapter] that can display a [DummyItem] and makes a call to the + * specified [OnListFragmentInteractionListener]. + * TODO: Replace the implementation with code for your data type. + */ +class MyListKeysRecyclerViewAdapter( + private val mValues: List, + private val mListener: OnListFragmentInteractionListener?) + : RecyclerView.Adapter() { + + private val mOnClickListener: View.OnClickListener + + init { + mOnClickListener = View.OnClickListener { v -> + val item = v.tag as Key.Key + // Notify the active callbacks interface (the activity, if the fragment is attached to + // one) that an item has been selected. + mListener?.onListFragmentInteraction(item) + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.fragment_listkeys, parent, false) + return ViewHolder(view) + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + val item = mValues[position] + holder.mIdView.text = item.id + holder.mContentView.text = item.content + + with(holder.mView) { + tag = item + setOnClickListener(mOnClickListener) + } + } + + override fun getItemCount(): Int = mValues.size + + inner class ViewHolder(val mView: View) : RecyclerView.ViewHolder(mView) { + val mIdView: TextView = mView.item_number + val mContentView: TextView = mView.content + + override fun toString(): String { + return super.toString() + " '" + mContentView.text + "'" + } + } +} diff --git a/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/MyMessageRecyclerViewAdapter.kt b/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/MyMessageRecyclerViewAdapter.kt index 52a19bf..d8d5106 100644 --- a/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/MyMessageRecyclerViewAdapter.kt +++ b/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/MyMessageRecyclerViewAdapter.kt @@ -26,7 +26,7 @@ class MyMessageRecyclerViewAdapter( init { mOnClickListener = View.OnClickListener { v -> - val item = v.tag as Message + val item = v.tag as Message.Message // Notify the active callbacks interface (the activity, if the fragment is attached to // one) that an item has been selected. mListener?.onListFragmentInteraction(item) diff --git a/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/ViewContact.kt b/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/ViewContact.kt new file mode 100644 index 0000000..45565b4 --- /dev/null +++ b/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/ViewContact.kt @@ -0,0 +1,100 @@ +package io.github.romulus10.blckchnmsg + +import android.content.Context +import android.net.Uri +import android.os.Bundle +import android.support.v4.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup + + +// TODO: Rename parameter arguments, choose names that match +// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER +private const val ARG_PARAM1 = "param1" +private const val ARG_PARAM2 = "param2" + +/** + * A simple [Fragment] subclass. + * Activities that contain this fragment must implement the + * [ViewContact.OnFragmentInteractionListener] interface + * to handle interaction events. + * Use the [ViewContact.newInstance] factory method to + * create an instance of this fragment. + * + */ +class ViewContact : Fragment() { + // TODO: Rename and change types of parameters + private var param1: String? = null + private var param2: String? = null + private var listener: OnFragmentInteractionListener? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + arguments?.let { + param1 = it.getString(ARG_PARAM1) + param2 = it.getString(ARG_PARAM2) + } + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle?): View? { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_view_contact, container, false) + } + + // TODO: Rename method, update argument and hook method into UI event + fun onButtonPressed(uri: Uri) { + listener?.onFragmentInteraction(uri) + } + + override fun onAttach(context: Context) { + super.onAttach(context) + if (context is OnFragmentInteractionListener) { + listener = context + } else { + throw RuntimeException(context.toString() + " must implement OnFragmentInteractionListener") + } + } + + override fun onDetach() { + super.onDetach() + listener = null + } + + /** + * This interface must be implemented by activities that contain this + * fragment to allow an interaction in this fragment to be communicated + * to the activity and potentially other fragments contained in that + * activity. + * + * + * See the Android Training lesson [Communicating with Other Fragments] + * (http://developer.android.com/training/basics/fragments/communicating.html) + * for more information. + */ + interface OnFragmentInteractionListener { + // TODO: Update argument type and name + fun onFragmentInteraction(uri: Uri) + } + + companion object { + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment ViewContact. + */ + // TODO: Rename and change types and number of parameters + @JvmStatic + fun newInstance(param1: String, param2: String) = + ViewContact().apply { + arguments = Bundle().apply { + putString(ARG_PARAM1, param1) + putString(ARG_PARAM2, param2) + } + } + } +} diff --git a/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/ViewMessage.kt b/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/ViewMessage.kt new file mode 100644 index 0000000..8b90245 --- /dev/null +++ b/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/ViewMessage.kt @@ -0,0 +1,100 @@ +package io.github.romulus10.blckchnmsg + +import android.content.Context +import android.net.Uri +import android.os.Bundle +import android.support.v4.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup + + +// TODO: Rename parameter arguments, choose names that match +// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER +private const val ARG_PARAM1 = "param1" +private const val ARG_PARAM2 = "param2" + +/** + * A simple [Fragment] subclass. + * Activities that contain this fragment must implement the + * [ViewMessage.OnFragmentInteractionListener] interface + * to handle interaction events. + * Use the [ViewMessage.newInstance] factory method to + * create an instance of this fragment. + * + */ +class ViewMessage : Fragment() { + // TODO: Rename and change types of parameters + private var param1: String? = null + private var param2: String? = null + private var listener: OnFragmentInteractionListener? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + arguments?.let { + param1 = it.getString(ARG_PARAM1) + param2 = it.getString(ARG_PARAM2) + } + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle?): View? { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_view_message, container, false) + } + + // TODO: Rename method, update argument and hook method into UI event + fun onButtonPressed(uri: Uri) { + listener?.onFragmentInteraction(uri) + } + + override fun onAttach(context: Context) { + super.onAttach(context) + if (context is OnFragmentInteractionListener) { + listener = context + } else { + throw RuntimeException(context.toString() + " must implement OnFragmentInteractionListener") + } + } + + override fun onDetach() { + super.onDetach() + listener = null + } + + /** + * This interface must be implemented by activities that contain this + * fragment to allow an interaction in this fragment to be communicated + * to the activity and potentially other fragments contained in that + * activity. + * + * + * See the Android Training lesson [Communicating with Other Fragments] + * (http://developer.android.com/training/basics/fragments/communicating.html) + * for more information. + */ + interface OnFragmentInteractionListener { + // TODO: Update argument type and name + fun onFragmentInteraction(uri: Uri) + } + + companion object { + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment ViewMessage. + */ + // TODO: Rename and change types and number of parameters + @JvmStatic + fun newInstance(param1: String, param2: String) = + ViewMessage().apply { + arguments = Bundle().apply { + putString(ARG_PARAM1, param1) + putString(ARG_PARAM2, param2) + } + } + } +} diff --git a/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/blckchnmsg/crypt.kt b/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/blckchnmsg/crypt.kt index 240f356..768f2d3 100644 --- a/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/blckchnmsg/crypt.kt +++ b/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/blckchnmsg/crypt.kt @@ -1,14 +1,28 @@ package io.github.romulus10.blckchnmsg.blckchnmsg import io.github.romulus10.blckchnmsg.blckchnmsg.data.Contact +import java.security.KeyPairGenerator +import java.security.PrivateKey +import java.security.PublicKey +import javax.crypto.Cipher class Crypt { - constructor() { + constructor(publicKey: PublicKey?, privateKey: PrivateKey?) { + this.publicKey = publicKey + this.privateKey = privateKey } - fun generate_key(uname: String) { + private var publicKey: PublicKey? + + private var privateKey: PrivateKey? + fun generate_key(uname: String) { + val kpg = KeyPairGenerator.getInstance("RSA") + kpg.initialize(1024) + val kp = kpg.genKeyPair() + this.publicKey = kp.public + this.privateKey = kp.private } fun import_key(addr: String, filename: String, email: String): Contact? { @@ -16,11 +30,16 @@ class Crypt { } fun encrypt(message: String, recipient: Contact): ByteArray { - return ByteArray(0) + val cipher = Cipher.getInstance("RSA") + cipher.init(Cipher.ENCRYPT_MODE, publicKey) + return cipher.doFinal(message.toByteArray()) } fun decrypt(message: ByteArray): String { - return "" + val cipher=Cipher.getInstance("RSA") + cipher.init(Cipher.DECRYPT_MODE, privateKey) + val decryptedBytes = cipher.doFinal(message) + return String(decryptedBytes) } fun sign(message: String): String { diff --git a/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/blckchnmsg/data/Key.kt b/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/blckchnmsg/data/Key.kt new file mode 100644 index 0000000..f38a906 --- /dev/null +++ b/BlckchnMsg/app/src/main/java/io/github/romulus10/blckchnmsg/blckchnmsg/data/Key.kt @@ -0,0 +1,54 @@ +package io.github.romulus10.blckchnmsg.blckchnmsg.data + +import java.util.ArrayList +import java.util.HashMap + +/** + * Helper class for providing sample content for user interfaces created by + * Android template wizards. + * + * TODO: Replace all uses of this class before publishing your app. + */ +object Key { + + /** + * An array of sample (dummy) items. + */ + val ITEMS: MutableList = ArrayList() + + /** + * A map of sample (dummy) items, by ID. + */ + val ITEM_MAP: MutableMap = HashMap() + + private val COUNT = 25 + + init { + // Add some sample items. + for (i in 1..COUNT) { + addItem(createKey(i)) + } + } + + private fun addItem(item: Key) { + ITEMS.add(item) + ITEM_MAP[item.id] = item + } + + private fun createKey(position: Int): Key { + return Key(position.toString(), "Item $position", makeDetails(position)) + } + + private fun makeDetails(position: Int): String { + val builder = StringBuilder() + builder.append("Details about Item: ").append(position) + for (i in 0 until (position - 1)) { + builder.append("\nMore details information here.") + } + return builder.toString() + } + + data class Key(val id: String, val content: String, val details: String) { + override fun toString(): String = content + } +} diff --git a/BlckchnMsg/app/src/main/res/layout/activity_login.xml b/BlckchnMsg/app/src/main/res/layout/activity_login.xml index 6b4a276..62f395b 100644 --- a/BlckchnMsg/app/src/main/res/layout/activity_login.xml +++ b/BlckchnMsg/app/src/main/res/layout/activity_login.xml @@ -40,7 +40,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/prompt_addr" - android:inputType="textEmailAddress" + android:inputType="number" android:maxLines="1" android:singleLine="true" /> @@ -55,7 +55,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/prompt_uname" - android:inputType="textEmailAddress" + android:inputType="text" android:maxLines="1" android:singleLine="true" /> diff --git a/BlckchnMsg/app/src/main/res/layout/fragment_listkeys.xml b/BlckchnMsg/app/src/main/res/layout/fragment_listkeys.xml new file mode 100644 index 0000000..f2ff5ac --- /dev/null +++ b/BlckchnMsg/app/src/main/res/layout/fragment_listkeys.xml @@ -0,0 +1,20 @@ + + + + + + + diff --git a/BlckchnMsg/app/src/main/res/layout/fragment_listkeys_list.xml b/BlckchnMsg/app/src/main/res/layout/fragment_listkeys_list.xml new file mode 100644 index 0000000..c143755 --- /dev/null +++ b/BlckchnMsg/app/src/main/res/layout/fragment_listkeys_list.xml @@ -0,0 +1,13 @@ + + \ No newline at end of file diff --git a/BlckchnMsg/app/src/main/res/layout/fragment_view_contact.xml b/BlckchnMsg/app/src/main/res/layout/fragment_view_contact.xml new file mode 100644 index 0000000..7414517 --- /dev/null +++ b/BlckchnMsg/app/src/main/res/layout/fragment_view_contact.xml @@ -0,0 +1,14 @@ + + + + + + + \ No newline at end of file diff --git a/BlckchnMsg/app/src/main/res/layout/fragment_view_message.xml b/BlckchnMsg/app/src/main/res/layout/fragment_view_message.xml new file mode 100644 index 0000000..8f9a639 --- /dev/null +++ b/BlckchnMsg/app/src/main/res/layout/fragment_view_message.xml @@ -0,0 +1,14 @@ + + + + + + + \ No newline at end of file diff --git a/BlckchnMsg/app/src/main/res/values/strings.xml b/BlckchnMsg/app/src/main/res/values/strings.xml index 0ac553b..f836e6c 100644 --- a/BlckchnMsg/app/src/main/res/values/strings.xml +++ b/BlckchnMsg/app/src/main/res/values/strings.xml @@ -4,7 +4,7 @@ User Address Username Email - Password (optional) + Password Sign in or register Sign in This email address is invalid