diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 82bc89e..cd0ee1f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -42,9 +42,6 @@ No nearby devices found - - You already added this contact - %1$s was added as a contact diff --git a/app/src/main/scala/com/nutomic/ensichat/activities/AddContactsActivity.scala b/app/src/main/scala/com/nutomic/ensichat/activities/AddContactsActivity.scala index 8ddae2d..9208dae 100644 --- a/app/src/main/scala/com/nutomic/ensichat/activities/AddContactsActivity.scala +++ b/app/src/main/scala/com/nutomic/ensichat/activities/AddContactsActivity.scala @@ -12,7 +12,7 @@ import android.widget._ import com.nutomic.ensichat.R import com.nutomic.ensichat.protocol.messages.{Message, RequestAddContact, ResultAddContact} import com.nutomic.ensichat.protocol.{User, Address, ChatService, Crypto} -import com.nutomic.ensichat.util.{UsersAdapter, IdenticonGenerator} +import com.nutomic.ensichat.util.{Database, UsersAdapter, IdenticonGenerator} import scala.collection.SortedSet @@ -62,31 +62,17 @@ class AddContactsActivity extends EnsiChatActivity with ChatService.OnConnection runOnServiceConnected(() => { service.registerConnectionListener(AddContactsActivity.this) service.registerMessageListener(this) + Database.runOnContactsUpdated(updateList) }) } - /** - * Displays newly connected devices in the list. - */ - override def onConnectionsChanged(contacts: Set[User]): Unit = { - runOnUiThread(new Runnable { - override def run(): Unit = { - Adapter.clear() - contacts.foreach(Adapter.add) - } - }) - } + override def onConnectionsChanged() = updateList() /** * Initiates adding the device as contact if it hasn't been added yet. */ override def onItemClick(parent: AdapterView[_], view: View, position: Int, id: Long): Unit = { val contact = Adapter.getItem(position) - if (Database.getContact(contact.Address).nonEmpty) { - Toast.makeText(this, R.string.contact_already_added, Toast.LENGTH_SHORT).show() - return - } - service.sendTo(contact.Address, new RequestAddContact()) addDeviceDialog(contact) } @@ -181,4 +167,16 @@ class AddContactsActivity extends EnsiChatActivity with ChatService.OnConnection super.onOptionsItemSelected(item); } + /** + * Fetches connections and displays them (excluding contacts). + */ + private def updateList(): Unit ={ + runOnUiThread(new Runnable { + override def run(): Unit = { + Adapter.clear() + (service.getConnections -- service.Database.getContacts).foreach(Adapter.add) + } + }) + } + } diff --git a/app/src/main/scala/com/nutomic/ensichat/protocol/ChatService.scala b/app/src/main/scala/com/nutomic/ensichat/protocol/ChatService.scala index 41a59c5..cef1ff1 100644 --- a/app/src/main/scala/com/nutomic/ensichat/protocol/ChatService.scala +++ b/app/src/main/scala/com/nutomic/ensichat/protocol/ChatService.scala @@ -39,7 +39,7 @@ object ChatService { * connects or disconnects */ trait OnConnectionsChangedListener { - def onConnectionsChanged(contacts: Set[User]): Unit + def onConnectionsChanged(): Unit } } @@ -116,7 +116,7 @@ class ChatService extends Service { */ def registerConnectionListener(listener: OnConnectionsChangedListener): Unit = { connectionListeners += new WeakReference[OnConnectionsChangedListener](listener) - listener.onConnectionsChanged(getConnections) + listener.onConnectionsChanged() } /** @@ -212,7 +212,7 @@ class ChatService extends Service { def callConnectionListeners(): Unit = { connectionListeners .filter(_.get.nonEmpty) - .foreach(_.apply().onConnectionsChanged(getConnections)) + .foreach(_.apply().onConnectionsChanged()) } /**