diff --git a/contacts/build.properties b/contacts/build.properties
index 1e29427..fe4eca4 100644
--- a/contacts/build.properties
+++ b/contacts/build.properties
@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
-#Wed Feb 26 05:10:50 HKT 2025
+#Wed Feb 26 06:08:35 GMT 2025
stageCount=4
libraryProject=
baseVersion=1.0
publishVersion=1.0.3
-buildCount=0
+buildCount=5
baseBetaVersion=1.0.4
diff --git a/contacts/src/main/AndroidManifest.xml b/contacts/src/main/AndroidManifest.xml
index 36ac1ee..ed1cce3 100644
--- a/contacts/src/main/AndroidManifest.xml
+++ b/contacts/src/main/AndroidManifest.xml
@@ -29,9 +29,10 @@
-
-
-
+
+
+
+
-
+
\ No newline at end of file
diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/MainActivity.java b/contacts/src/main/java/cc/winboll/studio/contacts/MainActivity.java
index c3241ee..e301a8c 100644
--- a/contacts/src/main/java/cc/winboll/studio/contacts/MainActivity.java
+++ b/contacts/src/main/java/cc/winboll/studio/contacts/MainActivity.java
@@ -1,36 +1,26 @@
package cc.winboll.studio.contacts;
-import android.Manifest;
-import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ActivityManager;
-import android.app.role.RoleManager;
import android.content.Context;
import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
-import android.provider.Settings;
import android.telecom.TelecomManager;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
-import android.view.WindowManager;
import android.widget.CheckBox;
-import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
-import android.widget.Switch;
import android.widget.Toast;
-import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
-import androidx.core.content.ContextCompat;
import androidx.viewpager.widget.ViewPager;
import cc.winboll.studio.contacts.R;
import cc.winboll.studio.contacts.activities.CallActivity;
+import cc.winboll.studio.contacts.activities.SettingsActivity;
import cc.winboll.studio.contacts.adapters.MyPagerAdapter;
import cc.winboll.studio.contacts.beans.MainServiceBean;
import cc.winboll.studio.contacts.services.MainService;
@@ -40,15 +30,9 @@ import cc.winboll.studio.libapputils.app.IWinBollActivity;
import cc.winboll.studio.libapputils.app.WinBollActivityManager;
import cc.winboll.studio.libapputils.bean.APPInfo;
import cc.winboll.studio.libapputils.view.YesNoAlertDialog;
-import cc.winboll.studio.contacts.listenphonecall.CallListenerService;
import com.google.android.material.tabs.TabLayout;
-import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
-import android.content.DialogInterface;
-import cc.winboll.studio.contacts.activities.SettingsActivity;
-import cc.winboll.studio.contacts.beans.MainServiceBean;
-import cc.winboll.studio.contacts.services.MainService;
final public class MainActivity extends AppCompatActivity implements IWinBollActivity, ViewPager.OnPageChangeListener, View.OnClickListener {
@@ -171,7 +155,7 @@ final public class MainActivity extends AppCompatActivity implements IWinBollAct
void initData() {
ViewPager viewPager = findViewById(R.id.activitymainViewPager1);
LayoutInflater inflater = LayoutInflater.from(getActivity());
- View view1 = inflater.inflate(R.layout.fragment_call, viewPager, false);
+ View view1 = inflater.inflate(R.layout.fragment_call_log, viewPager, false);
View view2 = inflater.inflate(R.layout.fragment_contacts, viewPager, false);
View view3 = inflater.inflate(R.layout.fragment_log, viewPager, false);
diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/PhoneCallManager.java b/contacts/src/main/java/cc/winboll/studio/contacts/PhoneCallManager.java
deleted file mode 100644
index 7f7292f..0000000
--- a/contacts/src/main/java/cc/winboll/studio/contacts/PhoneCallManager.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package cc.winboll.studio.contacts;
-
-/**
- * @Author ZhanGSKen@AliYun.Com
- * @Date 2025/02/20 21:14:52
- * @Describe PhoneCallManager
- */
-
-import android.telecom.Call;
-import android.telecom.VideoProfile;
-
-public class PhoneCallManager {
-
- public static final String TAG = "PhoneCallManager";
-
- public static Call call;
-
- /**
- * 接听电话
- */
- public void answer() {
- if (call != null) {
- call.answer(VideoProfile.STATE_AUDIO_ONLY);
- }
- }
-
- /**
- * 断开电话,包括来电时的拒接以及接听后的挂断
- */
- public void disconnect() {
- if (call != null) {
- call.disconnect();
- }
- }
-}
diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/adapters/CallLogAdapter.java b/contacts/src/main/java/cc/winboll/studio/contacts/adapters/CallLogAdapter.java
new file mode 100644
index 0000000..7830c2f
--- /dev/null
+++ b/contacts/src/main/java/cc/winboll/studio/contacts/adapters/CallLogAdapter.java
@@ -0,0 +1,61 @@
+package cc.winboll.studio.contacts.adapters;
+
+/**
+ * @Author ZhanGSKen@AliYun.Com
+ * @Date 2025/02/26 13:09:32
+ * @Describe CallLogAdapter
+ */
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+import cc.winboll.studio.contacts.R;
+import cc.winboll.studio.contacts.beans.CallLogModel;
+import java.text.SimpleDateFormat;
+import java.util.List;
+import java.util.Locale;
+
+public class CallLogAdapter extends RecyclerView.Adapter {
+ public static final String TAG = "CallLogAdapter";
+
+ private List callLogList;
+
+ public CallLogAdapter(List callLogList) {
+ this.callLogList = callLogList;
+ }
+
+ @NonNull
+ @Override
+ public CallLogViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_call_log, parent, false);
+ return new CallLogViewHolder(view);
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull CallLogViewHolder holder, int position) {
+ CallLogModel callLog = callLogList.get(position);
+ holder.phoneNumber.setText(callLog.getPhoneNumber());
+ holder.callStatus.setText(callLog.getCallStatus());
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
+ holder.callDate.setText(dateFormat.format(callLog.getCallDate()));
+ }
+
+ @Override
+ public int getItemCount() {
+ return callLogList.size();
+ }
+
+ public class CallLogViewHolder extends RecyclerView.ViewHolder {
+ TextView phoneNumber, callStatus, callDate;
+
+ public CallLogViewHolder(@NonNull View itemView) {
+ super(itemView);
+ phoneNumber = itemView.findViewById(R.id.phone_number);
+ callStatus = itemView.findViewById(R.id.call_status);
+ callDate = itemView.findViewById(R.id.call_date);
+ }
+ }
+}
+
diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/adapters/ContactAdapter.java b/contacts/src/main/java/cc/winboll/studio/contacts/adapters/ContactAdapter.java
new file mode 100644
index 0000000..c1b526f
--- /dev/null
+++ b/contacts/src/main/java/cc/winboll/studio/contacts/adapters/ContactAdapter.java
@@ -0,0 +1,57 @@
+package cc.winboll.studio.contacts.adapters;
+
+/**
+ * @Author ZhanGSKen@AliYun.Com
+ * @Date 2025/02/26 13:35:44
+ * @Describe ContactAdapter
+ */
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+import cc.winboll.studio.contacts.R;
+import cc.winboll.studio.contacts.beans.ContactModel;
+import java.util.List;
+
+public class ContactAdapter extends RecyclerView.Adapter {
+
+ public static final String TAG = "ContactAdapter";
+
+ private List contactList;
+
+ public ContactAdapter(List contactList) {
+ this.contactList = contactList;
+ }
+
+ @NonNull
+ @Override
+ public ContactViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_contact, parent, false);
+ return new ContactViewHolder(view);
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull ContactViewHolder holder, int position) {
+ ContactModel contact = contactList.get(position);
+ holder.contactName.setText(contact.getName());
+ holder.contactNumber.setText(contact.getNumber());
+ }
+
+ @Override
+ public int getItemCount() {
+ return contactList.size();
+ }
+
+ public class ContactViewHolder extends RecyclerView.ViewHolder {
+ TextView contactName;
+ TextView contactNumber;
+
+ public ContactViewHolder(@NonNull View itemView) {
+ super(itemView);
+ contactName = itemView.findViewById(R.id.contact_name);
+ contactNumber = itemView.findViewById(R.id.contact_number);
+ }
+ }
+}
diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/adapters/MyPagerAdapter.java b/contacts/src/main/java/cc/winboll/studio/contacts/adapters/MyPagerAdapter.java
index 3212231..6c16c5c 100644
--- a/contacts/src/main/java/cc/winboll/studio/contacts/adapters/MyPagerAdapter.java
+++ b/contacts/src/main/java/cc/winboll/studio/contacts/adapters/MyPagerAdapter.java
@@ -9,7 +9,7 @@ import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
-import cc.winboll.studio.contacts.fragments.CallFragment;
+import cc.winboll.studio.contacts.fragments.CallLogFragment;
import cc.winboll.studio.contacts.fragments.ContactsFragment;
import cc.winboll.studio.contacts.fragments.LogFragment;
@@ -30,7 +30,7 @@ public class MyPagerAdapter extends FragmentPagerAdapter {
} else if(position == 2) {
return LogFragment.newInstance(position);
} else {
- return CallFragment.newInstance(position);
+ return CallLogFragment.newInstance(position);
}
}
diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/beans/CallLogModel.java b/contacts/src/main/java/cc/winboll/studio/contacts/beans/CallLogModel.java
new file mode 100644
index 0000000..fc371bf
--- /dev/null
+++ b/contacts/src/main/java/cc/winboll/studio/contacts/beans/CallLogModel.java
@@ -0,0 +1,36 @@
+package cc.winboll.studio.contacts.beans;
+
+/**
+ * @Author ZhanGSKen@AliYun.Com
+ * @Date 2025/02/26 13:10:57
+ * @Describe CallLogModel
+ */
+
+import java.util.Date;
+
+public class CallLogModel {
+ public static final String TAG = "CallLogModel";
+
+ private String phoneNumber;
+ private String callStatus;
+ private Date callDate;
+
+ public CallLogModel(String phoneNumber, String callStatus, Date callDate) {
+ this.phoneNumber = phoneNumber;
+ this.callStatus = callStatus;
+ this.callDate = callDate;
+ }
+
+ public String getPhoneNumber() {
+ return phoneNumber;
+ }
+
+ public String getCallStatus() {
+ return callStatus;
+ }
+
+ public Date getCallDate() {
+ return callDate;
+ }
+}
+
diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/beans/ContactModel.java b/contacts/src/main/java/cc/winboll/studio/contacts/beans/ContactModel.java
new file mode 100644
index 0000000..74e964e
--- /dev/null
+++ b/contacts/src/main/java/cc/winboll/studio/contacts/beans/ContactModel.java
@@ -0,0 +1,28 @@
+package cc.winboll.studio.contacts.beans;
+
+/**
+ * @Author ZhanGSKen@AliYun.Com
+ * @Date 2025/02/26 13:37:00
+ * @Describe ContactModel
+ */
+public class ContactModel {
+
+ public static final String TAG = "ContactModel";
+
+ private String name;
+ private String number;
+
+ public ContactModel(String name, String number) {
+ this.name = name;
+ this.number = number;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getNumber() {
+ return number;
+ }
+}
+
diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/fragments/CallFragment.java b/contacts/src/main/java/cc/winboll/studio/contacts/fragments/CallFragment.java
deleted file mode 100644
index 6acb172..0000000
--- a/contacts/src/main/java/cc/winboll/studio/contacts/fragments/CallFragment.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package cc.winboll.studio.contacts.fragments;
-
-/**
- * @Author ZhanGSKen@AliYun.Com
- * @Date 2025/02/20 12:57:00
- * @Describe 拨号
- */
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import androidx.fragment.app.Fragment;
-import cc.winboll.studio.contacts.R;
-import cc.winboll.studio.libappbase.LogView;
-import androidx.annotation.Nullable;
-import androidx.annotation.NonNull;
-import android.widget.TextView;
-
-public class CallFragment extends Fragment {
-
- public static final String TAG = "CallFragment";
-
- private static final String ARG_PAGE = "ARG_PAGE";
- private int mPage;
-
- public static CallFragment newInstance(int page) {
- Bundle args = new Bundle();
- args.putInt(ARG_PAGE, page);
- CallFragment fragment = new CallFragment();
- fragment.setArguments(args);
- return fragment;
- }
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- if (getArguments()!= null) {
- mPage = getArguments().getInt(ARG_PAGE);
- }
- }
-
- @Nullable
- @Override
- public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
- @Nullable Bundle savedInstanceState) {
- View view = inflater.inflate(R.layout.fragment_call, container, false);
- TextView textView = view.findViewById(R.id.page_text);
- textView.setText("这是第 " + mPage + " 页");
- return view;
- }
-}
diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/fragments/CallLogFragment.java b/contacts/src/main/java/cc/winboll/studio/contacts/fragments/CallLogFragment.java
new file mode 100644
index 0000000..0a97c40
--- /dev/null
+++ b/contacts/src/main/java/cc/winboll/studio/contacts/fragments/CallLogFragment.java
@@ -0,0 +1,125 @@
+package cc.winboll.studio.contacts.fragments;
+
+/**
+ * @Author ZhanGSKen@AliYun.Com
+ * @Date 2025/02/20 12:57:00
+ * @Describe 拨号
+ */
+import android.Manifest;
+import android.content.pm.PackageManager;
+import android.database.Cursor;
+import android.os.Bundle;
+import android.provider.CallLog;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.core.app.ActivityCompat;
+import androidx.fragment.app.Fragment;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import cc.winboll.studio.contacts.R;
+import cc.winboll.studio.contacts.adapters.CallLogAdapter;
+import cc.winboll.studio.contacts.beans.CallLogModel;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class CallLogFragment extends Fragment {
+
+ public static final String TAG = "CallFragment";
+
+ private static final String ARG_PAGE = "ARG_PAGE";
+ private int mPage;
+
+ private static final int REQUEST_READ_CALL_LOG = 1;
+ private RecyclerView recyclerView;
+ private CallLogAdapter callLogAdapter;
+ private List callLogList = new ArrayList<>();
+
+ public static CallLogFragment newInstance(int page) {
+ Bundle args = new Bundle();
+ args.putInt(ARG_PAGE, page);
+ CallLogFragment fragment = new CallLogFragment();
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ @Nullable
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ return inflater.inflate(R.layout.fragment_call_log, container, false);
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ if (getArguments()!= null) {
+ mPage = getArguments().getInt(ARG_PAGE);
+ }
+ }
+
+ @Override
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ recyclerView = view.findViewById(R.id.recyclerView);
+ recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
+ callLogAdapter = new CallLogAdapter(callLogList);
+ recyclerView.setAdapter(callLogAdapter);
+
+ if (ActivityCompat.checkSelfPermission(requireContext(), Manifest.permission.READ_CALL_LOG)!= PackageManager.PERMISSION_GRANTED) {
+ ActivityCompat.requestPermissions(requireActivity(), new String[]{Manifest.permission.READ_CALL_LOG}, REQUEST_READ_CALL_LOG);
+ } else {
+ readCallLog();
+ }
+ }
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+ if (requestCode == REQUEST_READ_CALL_LOG) {
+ if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+ readCallLog();
+ }
+ }
+ }
+
+ private void readCallLog() {
+ Cursor cursor = requireContext().getContentResolver().query(
+ CallLog.Calls.CONTENT_URI,
+ null,
+ null,
+ null,
+ CallLog.Calls.DATE + " DESC");
+
+ if (cursor!= null) {
+ while (cursor.moveToNext()) {
+ String phoneNumber = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER));
+ int callType = cursor.getInt(cursor.getColumnIndex(CallLog.Calls.TYPE));
+ long callDateLong = cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE));
+ Date callDate = new Date(callDateLong);
+
+ String callStatus = getCallStatus(callType);
+
+ callLogList.add(new CallLogModel(phoneNumber, callStatus, callDate));
+ }
+ cursor.close();
+ callLogAdapter.notifyDataSetChanged();
+ }
+ }
+
+ private String getCallStatus(int callType) {
+ switch (callType) {
+ case CallLog.Calls.OUTGOING_TYPE:
+ return "Outgoing";
+ case CallLog.Calls.INCOMING_TYPE:
+ return "Incoming";
+ case CallLog.Calls.MISSED_TYPE:
+ return "Missed";
+ default:
+ return "Unknown";
+ }
+ }
+
+}
diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/fragments/ContactsFragment.java b/contacts/src/main/java/cc/winboll/studio/contacts/fragments/ContactsFragment.java
index 2f7dad6..08ebcef 100644
--- a/contacts/src/main/java/cc/winboll/studio/contacts/fragments/ContactsFragment.java
+++ b/contacts/src/main/java/cc/winboll/studio/contacts/fragments/ContactsFragment.java
@@ -5,23 +5,39 @@ package cc.winboll.studio.contacts.fragments;
* @Date 2025/02/20 12:57:50
* @Describe 联系人
*/
+import android.Manifest;
+import android.content.pm.PackageManager;
+import android.database.Cursor;
import android.os.Bundle;
+import android.provider.ContactsContract;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.core.app.ActivityCompat;
import androidx.fragment.app.Fragment;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
import cc.winboll.studio.contacts.R;
+import cc.winboll.studio.contacts.adapters.ContactAdapter;
+import cc.winboll.studio.contacts.beans.ContactModel;
+import java.util.ArrayList;
+import java.util.List;
public class ContactsFragment extends Fragment {
-
+
public static final String TAG = "ContactsFragment";
-
+
private static final String ARG_PAGE = "ARG_PAGE";
private int mPage;
+ private static final int REQUEST_READ_CONTACTS = 1;
+ private RecyclerView recyclerView;
+ private ContactAdapter contactAdapter;
+ private List contactList = new ArrayList<>();
+
+
public static ContactsFragment newInstance(int page) {
Bundle args = new Bundle();
args.putInt(ARG_PAGE, page);
@@ -33,18 +49,63 @@ public class ContactsFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- if (getArguments()!= null) {
+ if (getArguments() != null) {
mPage = getArguments().getInt(ARG_PAGE);
}
}
+
+
+
+
@Nullable
@Override
- public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
- @Nullable Bundle savedInstanceState) {
- View view = inflater.inflate(R.layout.fragment_contacts, container, false);
- TextView textView = view.findViewById(R.id.page_text);
- textView.setText("这是第 " + mPage + " 页");
- return view;
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ return inflater.inflate(R.layout.fragment_contacts, container, false);
+ }
+
+ @Override
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ recyclerView = view.findViewById(R.id.contacts_recycler_view);
+ recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
+ contactAdapter = new ContactAdapter(contactList);
+ recyclerView.setAdapter(contactAdapter);
+
+ if (ActivityCompat.checkSelfPermission(requireContext(), Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
+ ActivityCompat.requestPermissions(requireActivity(), new String[]{Manifest.permission.READ_CONTACTS}, REQUEST_READ_CONTACTS);
+ } else {
+ readContacts();
+ }
+ }
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+ if (requestCode == REQUEST_READ_CONTACTS) {
+ if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+ readContacts();
+ }
+ }
+ }
+
+ private void readContacts() {
+ contactList.clear();
+ Cursor cursor = requireContext().getContentResolver().query(
+ ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
+ null,
+ null,
+ null,
+ ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");
+
+ if (cursor != null) {
+ while (cursor.moveToNext()) {
+ String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
+ String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
+ contactList.add(new ContactModel(name, number));
+ }
+ cursor.close();
+ contactAdapter.notifyDataSetChanged();
+ }
}
}
diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/receivers/MainReceiver.java b/contacts/src/main/java/cc/winboll/studio/contacts/receivers/MainReceiver.java
index 457a8e9..924ddab 100644
--- a/contacts/src/main/java/cc/winboll/studio/contacts/receivers/MainReceiver.java
+++ b/contacts/src/main/java/cc/winboll/studio/contacts/receivers/MainReceiver.java
@@ -9,9 +9,7 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
-import android.media.AudioManager;
import cc.winboll.studio.contacts.services.MainService;
-import cc.winboll.studio.libappbase.LogUtils;
import com.hjq.toast.ToastUtils;
import java.lang.ref.WeakReference;
diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/services/AssistantService.java b/contacts/src/main/java/cc/winboll/studio/contacts/services/AssistantService.java
index a031f4b..6fd8673 100644
--- a/contacts/src/main/java/cc/winboll/studio/contacts/services/AssistantService.java
+++ b/contacts/src/main/java/cc/winboll/studio/contacts/services/AssistantService.java
@@ -15,8 +15,6 @@ import android.os.IBinder;
import cc.winboll.studio.contacts.beans.MainServiceBean;
import cc.winboll.studio.contacts.services.MainService;
import cc.winboll.studio.libappbase.LogUtils;
-import cc.winboll.studio.libappbase.SOS;
-import cc.winboll.studio.libappbase.bean.APPSOSBean;
public class AssistantService extends Service {
diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/services/MainService.java b/contacts/src/main/java/cc/winboll/studio/contacts/services/MainService.java
index 59b2ba2..d2c39b3 100644
--- a/contacts/src/main/java/cc/winboll/studio/contacts/services/MainService.java
+++ b/contacts/src/main/java/cc/winboll/studio/contacts/services/MainService.java
@@ -11,28 +11,26 @@ package cc.winboll.studio.contacts.services;
* https://blog.csdn.net/cyp331203/article/details/38920491
*/
import android.app.Service;
-import cc.winboll.studio.contacts.listenphonecall.CallListenerService;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
+import android.media.AudioManager;
import android.os.Binder;
import android.os.IBinder;
import cc.winboll.studio.contacts.beans.MainServiceBean;
+import cc.winboll.studio.contacts.beans.RingTongBean;
+import cc.winboll.studio.contacts.dun.Rules;
import cc.winboll.studio.contacts.handlers.MainServiceHandler;
+import cc.winboll.studio.contacts.listenphonecall.CallListenerService;
import cc.winboll.studio.contacts.receivers.MainReceiver;
import cc.winboll.studio.contacts.services.MainService;
import cc.winboll.studio.contacts.threads.MainServiceThread;
-import cc.winboll.studio.contacts.widgets.APPStatusWidget;
import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.libappbase.SOS;
import cc.winboll.studio.libappbase.bean.APPSOSBean;
-import cc.winboll.studio.contacts.dun.Rules;
-import android.media.AudioManager;
-import com.hjq.toast.ToastUtils;
import java.util.Timer;
import java.util.TimerTask;
-import cc.winboll.studio.contacts.beans.RingTongBean;
public class MainService extends Service {
diff --git a/contacts/src/main/res/layout/fragment_call.xml b/contacts/src/main/res/layout/fragment_call.xml
deleted file mode 100644
index 1b8673c..0000000
--- a/contacts/src/main/res/layout/fragment_call.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/contacts/src/main/res/layout/fragment_call_log.xml b/contacts/src/main/res/layout/fragment_call_log.xml
new file mode 100644
index 0000000..32fcbf0
--- /dev/null
+++ b/contacts/src/main/res/layout/fragment_call_log.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/contacts/src/main/res/layout/fragment_contacts.xml b/contacts/src/main/res/layout/fragment_contacts.xml
index aeec420..1628f8a 100644
--- a/contacts/src/main/res/layout/fragment_contacts.xml
+++ b/contacts/src/main/res/layout/fragment_contacts.xml
@@ -6,10 +6,9 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
-
-
+
+
diff --git a/contacts/src/main/res/layout/item_call_log.xml b/contacts/src/main/res/layout/item_call_log.xml
new file mode 100644
index 0000000..d9da032
--- /dev/null
+++ b/contacts/src/main/res/layout/item_call_log.xml
@@ -0,0 +1,32 @@
+
+
+ android:padding="16dp">
+
+
+
+
+
+
+
+
+
diff --git a/contacts/src/main/res/layout/item_contact.xml b/contacts/src/main/res/layout/item_contact.xml
new file mode 100644
index 0000000..401c155
--- /dev/null
+++ b/contacts/src/main/res/layout/item_contact.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+