package com.alrubaye.mytracker; import android.*; import android.Manifest; import android.app.Activity; import android.content.Intent; import android.content.pm.PackageManager; import android.database.Cursor; import android.net.Uri; import android.os.Build; import android.provider.ContactsContract; import android.support.v4.app.ActivityCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import java.util.ArrayList; import java.util.Map; public class MyTrackers extends AppCompatActivity { ArrayList<AdapterItems> listnewsData = new ArrayList<AdapterItems>(); MyCustomAdapter myadapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my_trackers); //listnewsData.add(new AdapterItems("hussein"," d34534")); myadapter=new MyCustomAdapter(listnewsData); ListView lsNews=(ListView)findViewById(R.id.listView); lsNews.setAdapter(myadapter);//intisal with data Refesh(); lsNews.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { GlobalInfo.MyTrackers.remove(listnewsData.get(position).PhoneNumber); DatabaseReference mDatabase= FirebaseDatabase.getInstance().getReference(); mDatabase.child("Users").child(listnewsData.get(position).PhoneNumber).child("Finders") .child(GlobalInfo.PhoneNumber).removeValue(); GlobalInfo globalInfo= new GlobalInfo(getApplicationContext()); globalInfo.SaveData(); Refesh(); } }); } void Refesh(){ listnewsData.clear(); for (Map.Entry m:GlobalInfo.MyTrackers.entrySet()){ listnewsData.add(new AdapterItems( m.getValue().toString() , m.getKey().toString())); } myadapter.notifyDataSetChanged(); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu_contact_list, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle item selection switch (item.getItemId()) { case R.id.goback: GlobalInfo globalInfo= new GlobalInfo(this); globalInfo.SaveData(); finish(); return true; case R.id.add: CheckUserPermsions(); return true; default: return super.onOptionsItemSelected(item); } } void CheckUserPermsions(){ if ( Build.VERSION.SDK_INT >= 23){ if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED ){ requestPermissions(new String[]{ Manifest.permission.READ_CONTACTS}, REQUEST_CODE_ASK_PERMISSIONS); return ; } } PickContact(); } //get acces to location permsion final private int REQUEST_CODE_ASK_PERMISSIONS = 123; @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { case REQUEST_CODE_ASK_PERMISSIONS: if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { PickContact(); } else { // Permission Denied Toast.makeText( this,"your message" , Toast.LENGTH_SHORT) .show(); } break; default: super.onRequestPermissionsResult(requestCode, permissions, grantResults); } } void PickContact(){ Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); startActivityForResult(intent, PICK_CONTACT); } // Declare static final int PICK_CONTACT=1; @Override public void onActivityResult(int reqCode, int resultCode, Intent data) { super.onActivityResult(reqCode, resultCode, data); switch (reqCode) { case (PICK_CONTACT) : if (resultCode == Activity.RESULT_OK) { Uri contactData = data.getData(); Cursor c = getContentResolver().query(contactData, null, null, null, null); if (c.moveToFirst()) { String id =c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts._ID)); String hasPhone =c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); String cNumber="No number"; if (hasPhone.equalsIgnoreCase("1")) { Cursor phones = getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ id, null, null); phones.moveToFirst(); cNumber =GlobalInfo.FormatPhoneNumber (phones.getString(phones.getColumnIndex("data1"))); System.out.println("number is:"+cNumber); } String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); GlobalInfo.MyTrackers.put(cNumber,name); DatabaseReference mDatabase= FirebaseDatabase.getInstance().getReference(); mDatabase.child("Users").child(cNumber).child("Finders") .child(GlobalInfo.PhoneNumber).setValue(true); GlobalInfo globalInfo= new GlobalInfo(this); globalInfo.SaveData(); Refesh(); //update firebase and //update list //update database } } break; } } private class MyCustomAdapter extends BaseAdapter { public ArrayList<AdapterItems> listnewsDataAdpater ; public MyCustomAdapter(ArrayList<AdapterItems> listnewsDataAdpater) { this.listnewsDataAdpater=listnewsDataAdpater; } @Override public int getCount() { return listnewsDataAdpater.size(); } @Override public String getItem(int position) { return null; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater mInflater = getLayoutInflater(); View myView = mInflater.inflate(R.layout.single_row_conact, null); final AdapterItems s = listnewsDataAdpater.get(position); TextView tv_user_name=( TextView)myView.findViewById(R.id.tv_user_name); tv_user_name.setText(s.UserName); TextView tv_phone=( TextView)myView.findViewById(R.id.tv_phone); tv_phone.setText(s.PhoneNumber); return myView; } } }