Call log don't update after macking call

182 views Asked by At

I created a recyclerview that lists the call log history of the phone and dial the selected number when clicked. the problem that when the user select a number and dial it it doesn't refresh the recycler data with new calling transaction in the top off the call log.

My CallLogRecyclerAdapter:

public class CallLogAdapter extends RecyclerView.Adapter<CallLogAdapter.ViewHolder> {
private List<CallLogItemVO> mListItem;
Context context;
public CallLogAdapter(List<CallLogItemVO> mListItem,Context context) {
    this.mListItem = mListItem;
    this.context=context;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.log_recycler_row,parent,false);
    ViewHolder viewHolder=new ViewHolder(view);
    return viewHolder;
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    CallLogItemVO callLogItem =mListItem.get(position);
    holder.phoneNumberOrName.setText(callLogItem.getContactName());
    holder.callDuration.setText(callLogItem.getCallDuration()+" ");
    holder.callDate.setText(callLogItem.getCallDate()+", "+callLogItem.getCallTime());
    String callTypeValue=callLogItem.getCallType();

    if (callTypeValue=="Missed"){
        holder.phoneNumberOrName.setTextColor(Color.parseColor("#FFF20B0B"));
        holder.callType.setImageResource(R.drawable.ic_call_missed);
    }else if (callTypeValue=="Outgoing") {
        holder.phoneNumberOrName.setTextColor(Color.BLACK);
        holder.callType.setImageResource(R.drawable.ic_sent_call);
    }else if (callTypeValue=="Incoming") {
        holder.phoneNumberOrName.setTextColor(Color.BLACK);
        holder.callType.setImageResource(R.drawable.ic_call_received);
    }else {
        holder.phoneNumberOrName.setTextColor(Color.BLACK);
        holder.callType.setImageResource(R.drawable.ic_call_rejected);
    }
}

@Override
public int getItemCount() {

    return mListItem.size();
}

class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
    public Button callInfoButton;
    public View view;
    public TextView phoneNumberOrName,callDuration,callDate,phoneNumber;
    ImageView callType;

    public ViewHolder(View itemView)
    {
        super(itemView);

        phoneNumberOrName = (TextView)itemView.findViewById(R.id.phoneNumberOrName);
        callDuration = (TextView)itemView.findViewById(R.id.callDuration);
        callDate = (TextView)itemView.findViewById(R.id.callDate);
        callType = (ImageView)itemView.findViewById(R.id.callType);
        callInfoButton=(Button) itemView.findViewById(R.id.ptnLogInfo);
        itemView.setOnClickListener(this);
        itemView.setOnLongClickListener(this);
    }

    @Override
    public void onClick(View v) {
        int position = getAdapterPosition();
        CallLogItemVO callLogItem=mListItem.get(position);
        Methods.callNumber(callLogItem.getPhoneNumber().toString(),context);
    }

    @Override
    public boolean onLongClick(View v) {
        return false;
    }
}}

My CallLogVO:

public class CallLogItemVO {
private String phoneNumber;
private String contactName;
private String callType;
private String callDate;
private String callDuration;
private String callTime;

public String getCallTime() {
    return callTime;
}

public void setCallTime(String callTime) {
    this.callTime = callTime;
}

public String getContactName() {
    return contactName;
}

public void setContactName(String conatctName) {
    this.contactName = conatctName;
}

public String getPhoneNumber() {
    return phoneNumber;
}

public void setPhoneNumber(String phoneNumber) {
    this.phoneNumber = phoneNumber;
}

public String getCallType() {
    return callType;
}

public void setCallType(String callType) {
    this.callType = callType;
}

public String getCallDate() {
    return callDate;
}

public void setCallDate(String callDate) {
    this.callDate = callDate;
}

public String getCallDuration() {
    return callDuration;
}

public void setCallDuration(String callDuration) {
    this.callDuration = callDuration;
}

My CallLogFragment:

public class CallLogFragment extends Fragment {
String simOrange,simVodafone,simEtisalat,simOther;
ArrayList<CallLogItemVO> callLogItemsList = new ArrayList<>();
RecyclerView recyclerViewLog;
RecyclerView.LayoutManager layoutManagerLog;
RecyclerView.Adapter adapterLog;
public CallLogFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_call_log, container, false);
    recyclerViewLog = (RecyclerView) view.findViewById(R.id.recyclerViewCallLog);
    recyclerViewLog.setHasFixedSize(true);

    layoutManagerLog = new LinearLayoutManager(getContext());
    recyclerViewLog.setLayoutManager(layoutManagerLog);
    getCallLogDetails();
    return view;
}

private void getCallLogDetails() {
    //adapterLog=null;
    String strOrder = CallLog.Calls.DATE + " DESC";
    Cursor managedCursor = getActivity().getContentResolver().query(CallLog.Calls.CONTENT_URI, null, null, null, strOrder);
    int number = managedCursor.getColumnIndex(CallLog.Calls.NUMBER);
    int name = managedCursor.getColumnIndex(CallLog.Calls.CACHED_NAME);
    int type = managedCursor.getColumnIndex(CallLog.Calls.TYPE);
    int date = managedCursor.getColumnIndex(CallLog.Calls.DATE);
    int duration = managedCursor.getColumnIndex(CallLog.Calls.DURATION);
    while (managedCursor.moveToNext()) {
        String phNum = managedCursor.getString(number);
        String contactName = managedCursor.getString(name);
        String callTypeCode = managedCursor.getString(type);
        String strcallDate = managedCursor.getString(date);
        Date callDate = new Date(Long.valueOf(strcallDate));
        Time callTime = new Time(Long.valueOf(strcallDate));
        String callDuration = managedCursor.getString(duration);
        //تحديد نوع الاتصال
        String callType = null;
        int callcode = Integer.parseInt(callTypeCode);
        switch (callcode) {
            case CallLog.Calls.OUTGOING_TYPE:
                callType = "Outgoing";
                break;
            case CallLog.Calls.INCOMING_TYPE:
                callType = "Incoming";
                break;
            case CallLog.Calls.MISSED_TYPE:
                callType = "Missed";
                break;
        }
        try {
            if(callType==null){
                callType="Rejected";
            }
        } catch (Exception e) {
            Toast.makeText(getContext(), ""+e, Toast.LENGTH_SHORT).show();
        }
        //تحديد رقم المتصل او اسمه
        String phoneNumberOrName ;
        if (contactName == null || contactName.isEmpty()){
            phoneNumberOrName = phNum;
        }else {
            phoneNumberOrName=contactName;
        }
        CallLogItemVO callLogItem = new CallLogItemVO();
        callLogItem.setPhoneNumber(phNum);
        callLogItem.setContactName(phoneNumberOrName);
        callLogItem.setCallDate(String.valueOf(callDate));
        callLogItem.setCallTime(String.valueOf(callTime));
        callLogItem.setCallType(callType);
        callLogItem.setCallDuration(Methods.convertToTime(callDuration));
        callLogItemsList.add(callLogItem);

        adapterLog = new CallLogAdapter(callLogItemsList, getContext());
        recyclerViewLog.setAdapter(adapterLog);
    }
    // Toast.makeText(this, "FillLog", Toast.LENGTH_SHORT).show();
    managedCursor.close();
}}
0

There are 0 answers