(FRONT) FRONT (2025)

Return Access to Contact list

   1:  package com.voipplus.mmsclient.activities;
   2:  
   3:  import android.Manifest;
   4:  import android.content.Intent;
   5:  import android.content.pm.PackageManager;
   6:  import android.database.Cursor;
   7:  import android.os.Bundle;
   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(Bundle 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 intent = new Intent(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
< THANKS ME>