Return Access to Contact list
1: package com.voipplus.mmsclient.activities;
2:
3: import android.Manifest;
4: import android.content.;
5: import android.content.pm.PackageManager;
6: import android.database.Cursor;
7: import android.os.;
8: import android.provider.ContactsContract;
9: import android.util.Log;
10: import android.widget.Toast;
11:
12: import androidx.activity.EdgeToEdge;
13: import androidx.annotation.NonNull;
14: import androidx.appcompat.app.AppCompatActivity;
15: import androidx.core.app.ActivityCompat;
16: import androidx.core.content.ContextCompat;
17: import androidx.core.graphics.Insets;
18: import androidx.core.view.ViewCompat;
19: import androidx.core.view.WindowInsetsCompat;
20: import androidx.recyclerview.widget.LinearLayoutManager;
21: import androidx.recyclerview.widget.RecyclerView;
22:
23: import com.google.android.material.tabs.TabLayout;
24: import com.voipplus.mmsclient.R;
25: import com.voipplus.mmsclient.testContacts.Contact;
26: import com.voipplus.mmsclient.testContacts.ContactsAdapter;
27: import com.voipplus.mmsclient.testContacts.TestContactsProvider;
28: import com.voipplus.mmsclient.BuildConfig;
29: import com.voipplus.mmsclient.tabs.TabSwitcher;
30:
31: import java.util.ArrayList;
32: import java.util.List;
33:
34: public class ContactsActivity extends AppCompatActivity implements ContactsAdapter.OnContactClickListener {
35:
36: private static final int REQUEST_READ_CONTACTS_PERMISSION = 1;
37: private static final String TAG = "ContactsActivity";
38: private RecyclerView contactsRecyclerView;
39: private ContactsAdapter contactsAdapter;
40: private List<Contact> contactsList;
41: private TabLayout tabLayout;
42: private TabSwitcher tabSwitcher;
43:
44: @Override
45: protected void onCreate( savedInstanceState) {
46: super.onCreate(savedInstanceState);
47: Log.d(TAG, "onCreate: ContactsActivity started");
48: setContentView(R.layout.activity_contacts);
49:
50: setTitle("VoipPLUS Contacts");
51:
52: tabLayout = findViewById(R.id.tabLayout);
53: tabSwitcher = new TabSwitcher(this, tabLayout);
54: Log.d(TAG, "onCreate: tabSwitcher created");
55: tabSwitcher.selectTab(1);
56: Log.d(TAG, "onCreate: tabSwitcher.selectTab(1) called");
57:
58: contactsRecyclerView = findViewById(R.id.contactsRecyclerView);
59: contactsRecyclerView.setLayoutManager(new LinearLayoutManager(this));
60:
61: contactsList = new ArrayList<>();
62: // Pass 'this' (the listener) to the adapter constructor
63: contactsAdapter = new ContactsAdapter(contactsList, this);
64: contactsRecyclerView.setAdapter(contactsAdapter);
65:
66: EdgeToEdge.enable(this);
67: ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
68: Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
69: v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
70: return insets;
71: });
72:
73: checkContactsPermission();
74: }
75:
76: private void checkContactsPermission() {
77: if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
78: ActivityCompat.requestPermissions(this,
79: new String[]{Manifest.permission.READ_CONTACTS},
80: REQUEST_READ_CONTACTS_PERMISSION);
81: } else {
82: loadContacts();
83: }
84: }
85:
86: @Override
87: public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
88: super.onRequestPermissionsResult(requestCode, permissions, grantResults);
89: if (requestCode == REQUEST_READ_CONTACTS_PERMISSION) {
90: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
91: loadContacts();
92: } else {
93: Toast.makeText(this, "Contacts permission denied", Toast.LENGTH_SHORT).show();
94: }
95: }
96: }
97:
98: private void loadContacts() {
99: if (BuildConfig.USE_TEST_CONTACTS) {
100: contactsList.addAll(TestContactsProvider.createTestContacts());
101: contactsAdapter.notifyDataSetChanged();
102: } else {
103: Cursor cursor = null;
104: try {
105: cursor = getContentResolver().query(
106: ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
107: null,
108: null,
109: null,
110: ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC"
111: );
112:
113: if (cursor != null && cursor.getCount() > 0) {
114: while (cursor.moveToNext()) {
115: String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
116: String number = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));
117: Contact contact = new Contact(name, number);
118: contactsList.add(contact);
119: }
120: contactsAdapter.notifyDataSetChanged();
121: }
122: } catch (Exception e) {
123: e.printStackTrace();
124: } finally {
125: if (cursor != null) {
126: cursor.close();
127: }
128: }
129: }
130: }
131:
132: @Override
133: public void onContactClick(Contact contact) {
134: Log.d(TAG, "onContactClick: Contact clicked: " + contact.getName() + ", " + contact.getNumber()); // Log when a contact is clicked
135: // Start SelectActivity and pass the contact
136: intent = new (this, SelectActivity.class);
137: Log.d(TAG, "onContactClick: Intent created"); // Log when the Intent is created
138: intent.putExtra(SelectActivity.EXTRA_CONTACT, contact);
139: Log.d(TAG, "onContactClick: Contact added to Intent: " + contact.getName() + ", " + contact.getNumber()); // Log when putExtra is called
140: startActivity(intent);
141: Log.d(TAG, "onContactClick: startActivity called"); // Log when startActivity is called
142: }
143: }
144:
Return
AndroidMosaic context:
Comments (
)
)
Link to this page:
http://www.vb-net.com/AndroidMosaic/Index09.htm
|
|