修改android 4.4通话记录显示方式,使其相同的号码不再出现原生代码如下 com.android.dialer.calllog.CallLogGroupBuilder
public void addGroups(Cursor cursor) { final int count = cursor.getCount();
if (count == 0) {
return;
}
int currentGroupSize = 1;
cursor.moveToFirst();
// The number of the first entry in the group.
String firstNumber = cursor.getString(CallLogQuery.NUMBER);
// This is the type of the first call in the group.
int firstCallType = cursor.getInt(CallLogQuery.CALL_TYPE);
while (cursor.moveToNext()) {
// The number of the current row in the cursor.
final String currentNumber = cursor.getString(CallLogQuery.NUMBER);
final int callType = cursor.getInt(CallLogQuery.CALL_TYPE);
final boolean sameNumber = equalNumbers(firstNumber, currentNumber);
final boolean shouldGroup;
if (!sameNumber) {
// Should only group with calls from the same number.
shouldGroup = false;
} else if (firstCallType == Calls.VOICEMAIL_TYPE) {
// never group voicemail.
shouldGroup = false;
} else {
// Incoming, outgoing, and missed calls group together.
shouldGroup = callType != Calls.VOICEMAIL_TYPE;
}
if (shouldGroup) {
// Increment the size of the group to include the current call, but do not create
// the group until we find a call that does not match.
currentGroupSize++;
} else {
// Create a group for the previous set of calls, excluding the current one, but do
// not create a group for a single call.
if (currentGroupSize > 1) {
addGroup(cursor.getPosition() - currentGroupSize, currentGroupSize);
}
// Start a new group; it will include at least the current call.
currentGroupSize = 1;
// The current entry is now the first in the group.
firstNumber = currentNumber;
firstCallType = callType;
}
}
// If the last set of calls at the end of the call log was itself a group, create it now.
if (currentGroupSize > 1) {
addGroup(count - currentGroupSize, currentGroupSize);
}
}
修改后如下
public void addGroups(Cursor cursor) {
final int count = cursor.getCount();
if (count == 0) {
return;
}
int currentGroupSize = 1;
cursor.moveToFirst();
String firstNumber = cursor.getString(CallLogQuery.NUMBER);
ArrayList previousNumbers = new ArrayList();
previousNumbers.add(firstNumber);
while (cursor.moveToNext()) {
final String currentNumber = cursor.getString(CallLogQuery.NUMBER);
final boolean isNewNumber = !previousNumbers.contains(currentNumber);
if(isNewNumber){
previousNumbers.add(currentNumber);
}
if(isNewNumber){
if (currentGroupSize > 1) {
addGroup(cursor.getPosition() - currentGroupSize, currentGroupSize);
}
currentGroupSize = 1;
}else{
currentGroupSize++;
}
}
if (currentGroupSize > 1) {
addGroup(count - currentGroupSize, currentGroupSize);
}
}
|