Start implementing addContact functionality
This commit is contained in:
parent
773ddeb218
commit
8fa067acfb
|
@ -0,0 +1,59 @@
|
|||
package org.mercury_im.messenger.ui.roster.contacts;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Spinner;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AppCompatDialogFragment;
|
||||
import androidx.lifecycle.LiveData;
|
||||
|
||||
import org.mercury_im.messenger.R;
|
||||
import org.mercury_im.messenger.entity.Account;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class AddContactDialogFragment extends AppCompatDialogFragment {
|
||||
|
||||
private final LiveData<List<Account>> accounts;
|
||||
|
||||
public AddContactDialogFragment(LiveData<List<Account>> accountList) {
|
||||
this.accounts = accountList;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||
LayoutInflater inflater = requireActivity().getLayoutInflater();
|
||||
|
||||
View dialogView = inflater.inflate(R.layout.dialog_add_contact, null);
|
||||
Spinner spinner = dialogView.findViewById(R.id.spinner);
|
||||
spinner.setAdapter(
|
||||
new ArrayAdapter<>(requireActivity(), R.layout.support_simple_spinner_dropdown_item, accounts.getValue()));
|
||||
|
||||
builder.setMessage("Add Contact")
|
||||
.setView(dialogView)
|
||||
.setCancelable(false)
|
||||
.setPositiveButton("Add", new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
|
||||
}
|
||||
})
|
||||
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
AddContactDialogFragment.this.onCancel(dialog);
|
||||
}
|
||||
});
|
||||
|
||||
return builder.create();
|
||||
}
|
||||
}
|
|
@ -1,25 +1,25 @@
|
|||
package org.mercury_im.messenger.ui.roster.contacts;
|
||||
|
||||
import static androidx.constraintlayout.widget.Constraints.TAG;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.fragment.app.DialogFragment;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton;
|
||||
|
||||
import org.mercury_im.messenger.R;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
|
||||
import org.mercury_im.messenger.R;
|
||||
import static androidx.constraintlayout.widget.Constraints.TAG;
|
||||
|
||||
/**
|
||||
* A placeholder fragment containing a simple view.
|
||||
|
@ -47,10 +47,15 @@ public class ContactListFragment extends Fragment {
|
|||
|
||||
recyclerView.setAdapter(recyclerViewAdapter);
|
||||
|
||||
fab.setOnClickListener(v -> Toast.makeText(getContext(), R.string.not_yet_implemented, Toast.LENGTH_SHORT).show());
|
||||
fab.setOnClickListener(v -> displayAddContactDialog());
|
||||
return view;
|
||||
}
|
||||
|
||||
private void displayAddContactDialog() {
|
||||
AddContactDialogFragment addContactDialogFragment = new AddContactDialogFragment(contactListViewModel.getAccounts());
|
||||
addContactDialogFragment.show(this.getParentFragmentManager(), "add");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAttach(Context context) {
|
||||
super.onAttach(context);
|
||||
|
|
|
@ -7,7 +7,9 @@ import androidx.lifecycle.MutableLiveData;
|
|||
import androidx.lifecycle.ViewModel;
|
||||
|
||||
import org.mercury_im.messenger.MercuryImApplication;
|
||||
import org.mercury_im.messenger.data.repository.XmppAccountRepository;
|
||||
import org.mercury_im.messenger.data.repository.XmppPeerRepository;
|
||||
import org.mercury_im.messenger.entity.Account;
|
||||
import org.mercury_im.messenger.entity.contact.Peer;
|
||||
|
||||
import java.util.List;
|
||||
|
@ -22,7 +24,11 @@ public class ContactListViewModel extends ViewModel {
|
|||
@Inject
|
||||
XmppPeerRepository xmppContactRepository;
|
||||
|
||||
@Inject
|
||||
XmppAccountRepository accountRepository;
|
||||
|
||||
private final MutableLiveData<List<Peer>> rosterEntryList = new MutableLiveData<>();
|
||||
private final MutableLiveData<List<Account>> accounts = new MutableLiveData<>();
|
||||
private final CompositeDisposable compositeDisposable = new CompositeDisposable();
|
||||
|
||||
public ContactListViewModel() {
|
||||
|
@ -32,6 +38,8 @@ public class ContactListViewModel extends ViewModel {
|
|||
// Subscribe to changes to the contacts table and update the LiveData object for the UI.
|
||||
compositeDisposable.add(xmppContactRepository.observeAllPeers()
|
||||
.subscribe(rosterEntryList::setValue));
|
||||
compositeDisposable.add(accountRepository.observeAllAccounts()
|
||||
.subscribe(accounts::setValue));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -43,4 +51,8 @@ public class ContactListViewModel extends ViewModel {
|
|||
public LiveData<List<Peer>> getRosterEntryList() {
|
||||
return rosterEntryList;
|
||||
}
|
||||
|
||||
public LiveData<List<Account>> getAccounts() {
|
||||
return accounts;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:padding="16dp"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/account_select_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Select Account" />
|
||||
|
||||
<Spinner
|
||||
android:id="@+id/spinner"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="56dp" />
|
||||
</LinearLayout>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/address"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/prompt_jid"
|
||||
android:inputType="textEmailAddress"
|
||||
android:maxLines="1"
|
||||
android:singleLine="true" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
</LinearLayout>
|
|
@ -27,6 +27,8 @@
|
|||
<item name="messageTextColor">@color/textBlack</item>
|
||||
|
||||
<item name="windowActionModeOverlay">true</item>
|
||||
|
||||
<item name="materialButtonStyle">@style/Widget.MaterialComponents.Button.TextButton</item>
|
||||
</style>
|
||||
|
||||
<!-- Light Theme -->
|
||||
|
|
|
@ -1,12 +1,6 @@
|
|||
package org.mercury_im.messenger.xmpp;
|
||||
|
||||
import org.jivesoftware.smack.AbstractXMPPConnection;
|
||||
import org.jivesoftware.smack.ReconnectionListener;
|
||||
import org.jivesoftware.smack.ReconnectionManager;
|
||||
import org.jivesoftware.smack.SmackException;
|
||||
import org.jivesoftware.smack.XMPPException;
|
||||
import org.jivesoftware.smackx.caps.EntityCapsManager;
|
||||
import org.jivesoftware.smackx.carbons.CarbonManager;
|
||||
import org.mercury_im.messenger.data.repository.AccountRepository;
|
||||
import org.mercury_im.messenger.data.repository.Repositories;
|
||||
import org.mercury_im.messenger.entity.Account;
|
||||
|
|
Loading…
Reference in New Issue