Display contacts regulary during fetch + fixed warnings

This commit is contained in:
Sylvain Berfini 2017-01-10 10:49:56 +01:00
parent afd12250bf
commit 49c98c9ebd
12 changed files with 118 additions and 101 deletions

View file

@ -21,7 +21,6 @@ package org.linphone;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.linphone.compatibility.Compatibility;
import org.linphone.core.LinphoneAddress; import org.linphone.core.LinphoneAddress;
import org.linphone.core.LinphoneCall; import org.linphone.core.LinphoneCall;
import org.linphone.core.LinphoneCall.State; import org.linphone.core.LinphoneCall.State;
@ -32,12 +31,9 @@ import org.linphone.mediastream.Log;
import org.linphone.ui.LinphoneSliders.LinphoneSliderTriggered; import org.linphone.ui.LinphoneSliders.LinphoneSliderTriggered;
import android.Manifest; import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.os.Bundle; import android.os.Bundle;
import android.os.PowerManager;
import android.support.v4.app.ActivityCompat; import android.support.v4.app.ActivityCompat;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.MotionEvent; import android.view.MotionEvent;
@ -88,8 +84,6 @@ public class CallIncomingActivity extends LinphoneGenericActivity implements Lin
int flags = WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON; int flags = WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON;
getWindow().addFlags(flags); getWindow().addFlags(flags);
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
final int screenWidth = getResources().getDisplayMetrics().widthPixels; final int screenWidth = getResources().getDisplayMetrics().widthPixels;
acceptUnlock = (LinearLayout) findViewById(R.id.acceptUnlock); acceptUnlock = (LinearLayout) findViewById(R.id.acceptUnlock);

View file

@ -30,7 +30,6 @@ import org.linphone.core.Reason;
import org.linphone.mediastream.Log; import org.linphone.mediastream.Log;
import android.Manifest; import android.Manifest;
import android.app.Activity;
import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.os.Bundle; import android.os.Bundle;

View file

@ -30,7 +30,6 @@ import org.linphone.mediastream.Log;
import android.app.Dialog; import android.app.Dialog;
import android.app.Fragment; import android.app.Fragment;
import android.graphics.Bitmap;
import android.graphics.Typeface; import android.graphics.Typeface;
import android.os.Bundle; import android.os.Bundle;
import android.view.ContextMenu; import android.view.ContextMenu;
@ -228,7 +227,8 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte
@Override @Override
public void onContactsUpdated() { public void onContactsUpdated() {
hideAndDisplayMessageIfNoChat(); ChatListAdapter adapter = (ChatListAdapter)chatList.getAdapter();
adapter.notifyDataSetChanged();
} }
@Override @Override

View file

@ -27,7 +27,6 @@ import java.util.Map;
import android.app.Dialog; import android.app.Dialog;
import android.app.Fragment; import android.app.Fragment;
import android.graphics.Bitmap;
import android.os.Bundle; import android.os.Bundle;
import android.text.Editable; import android.text.Editable;
import android.text.TextWatcher; import android.text.TextWatcher;
@ -411,7 +410,15 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O
@Override @Override
public void onContactsUpdated() { public void onContactsUpdated() {
invalidate(); ContactsListAdapter adapter = (ContactsListAdapter)contactsList.getAdapter();
contactsList.setFastScrollEnabled(false);
if (onlyDisplayLinphoneContacts) {
adapter.updateDataSet(ContactsManager.getInstance().getSIPContacts());
} else {
adapter.updateDataSet(ContactsManager.getInstance().getContacts());
}
contactsList.setFastScrollEnabled(true);
contactsFetchInProgress.setVisibility(View.GONE);
} }
public void invalidate() { public void invalidate() {
@ -452,6 +459,10 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O
Map<String, Integer>map = new LinkedHashMap<String, Integer>(); Map<String, Integer>map = new LinkedHashMap<String, Integer>();
ContactsListAdapter(List<LinphoneContact> contactsList) { ContactsListAdapter(List<LinphoneContact> contactsList) {
updateDataSet(contactsList);
}
public void updateDataSet(List<LinphoneContact> contactsList) {
contacts = contactsList; contacts = contactsList;
map = new LinkedHashMap<String, Integer>(); map = new LinkedHashMap<String, Integer>();
@ -471,6 +482,8 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O
sectionsList = new ArrayList<String>(map.keySet()); sectionsList = new ArrayList<String>(map.keySet());
sections = new String[sectionsList.size()]; sections = new String[sectionsList.size()];
sectionsList.toArray(sections); sectionsList.toArray(sections);
notifyDataSetChanged();
} }
public int getCount() { public int getCount() {

View file

@ -40,6 +40,7 @@ import android.accounts.AccountManager;
import android.content.ContentProviderOperation; import android.content.ContentProviderOperation;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageManager;
import android.database.ContentObserver; import android.database.ContentObserver;
import android.database.Cursor; import android.database.Cursor;
import android.database.MatrixCursor; import android.database.MatrixCursor;
@ -58,6 +59,7 @@ interface ContactsUpdatedListener {
} }
public class ContactsManager extends ContentObserver { public class ContactsManager extends ContentObserver {
public static int CONTACTS_STEP = 15;
private static ContactsManager instance; private static ContactsManager instance;
private List<LinphoneContact> contacts, sipContacts; private List<LinphoneContact> contacts, sipContacts;
private boolean preferLinphoneContacts = false, isContactPresenceDisabled = true, hasContactAccess = false; private boolean preferLinphoneContacts = false, isContactPresenceDisabled = true, hasContactAccess = false;
@ -180,7 +182,8 @@ public class ContactsManager extends ContentObserver {
if (context == null) if (context == null)
return false; return false;
int contacts = context.getPackageManager().checkPermission(android.Manifest.permission.READ_CONTACTS, context.getPackageName()); int contacts = context.getPackageManager().checkPermission(android.Manifest.permission.READ_CONTACTS, context.getPackageName());
return contacts == context.getPackageManager().PERMISSION_GRANTED && !context.getResources().getBoolean(R.bool.force_use_of_linphone_friends); context.getPackageManager();
return contacts == PackageManager.PERMISSION_GRANTED && !context.getResources().getBoolean(R.bool.force_use_of_linphone_friends);
} }
public void setLinphoneContactsPrefered(boolean isPrefered) { public void setLinphoneContactsPrefered(boolean isPrefered) {
@ -217,7 +220,7 @@ public class ContactsManager extends ContentObserver {
initializeContactManager(context, contentResolver); initializeContactManager(context, contentResolver);
} }
public LinphoneContact findContactFromAddress(LinphoneAddress address) { public synchronized LinphoneContact findContactFromAddress(LinphoneAddress address) {
String sipUri = address.asStringUriOnly(); String sipUri = address.asStringUriOnly();
String username = address.getUserName(); String username = address.getUserName();
@ -251,7 +254,7 @@ public class ContactsManager extends ContentObserver {
return null; return null;
} }
public LinphoneContact findContactFromPhoneNumber(String phoneNumber) { public synchronized LinphoneContact findContactFromPhoneNumber(String phoneNumber) {
LinphoneContact cache = contactsCache.get(phoneNumber); LinphoneContact cache = contactsCache.get(phoneNumber);
if (cache != null) { if (cache != null) {
if (cache == contactNotFound) return null; if (cache == contactNotFound) return null;
@ -355,9 +358,17 @@ public class ContactsManager extends ContentObserver {
} }
} }
int i = 0;
for (LinphoneContact contact : contacts) { for (LinphoneContact contact : contacts) {
// This will only get name & picture informations to be able to quickly display contacts list // This will only get name & picture informations to be able to quickly display contacts list
contact.minimalRefresh(); contact.minimalRefresh();
i++;
if (i == CONTACTS_STEP) {
i = 0;
publishProgress(contacts);
}
} }
Collections.sort(contacts); Collections.sort(contacts);
@ -384,9 +395,9 @@ public class ContactsManager extends ContentObserver {
return contacts; return contacts;
} }
protected void onProgressUpdate(List<LinphoneContact>... result) { protected synchronized void onProgressUpdate(List<LinphoneContact>... result) {
contactsCache.clear();
setContacts(result[0]); setContacts(result[0]);
contactsCache.clear();
for (ContactsUpdatedListener listener : contactsUpdatedListeners) { for (ContactsUpdatedListener listener : contactsUpdatedListeners) {
listener.onContactsUpdated(); listener.onContactsUpdated();
} }

View file

@ -1,14 +1,14 @@
package org.linphone; package org.linphone;
import org.linphone.core.LinphoneCore;
import org.linphone.core.LinphoneCoreFactory;
import org.linphone.mediastream.Log;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Build; import android.os.Build;
import android.os.PowerManager; import android.os.PowerManager;
import org.linphone.core.LinphoneCore;
import org.linphone.core.LinphoneCoreFactory;
import org.linphone.mediastream.Log;
/* /*
* Purpose of this receiver is to disable keep alives when device is on idle * Purpose of this receiver is to disable keep alives when device is on idle
* */ * */
@ -24,7 +24,7 @@ public class DozeReceiver extends android.content.BroadcastReceiver {
LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
if (lc == null) return; if (lc == null) return;
pm = (PowerManager) context.getSystemService(context.POWER_SERVICE); pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
boolean dozeM = pm.isDeviceIdleMode(); boolean dozeM = pm.isDeviceIdleMode();
Log.i("[DozeReceiver] Idle Mode: " + dozeM); Log.i("[DozeReceiver] Idle Mode: " + dozeM);

View file

@ -30,10 +30,9 @@ import org.linphone.core.LinphoneCallLog.CallStatus;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.Dialog; import android.app.Dialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.app.Fragment; import android.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.View.OnClickListener; import android.view.View.OnClickListener;
@ -222,7 +221,8 @@ public class HistoryListFragment extends Fragment implements OnClickListener, On
@Override @Override
public void onContactsUpdated() { public void onContactsUpdated() {
historyList.setAdapter(new CallHistoryAdapter(getActivity().getApplicationContext())); CallHistoryAdapter adapter = (CallHistoryAdapter)historyList.getAdapter();
adapter.notifyDataSetChanged();
} }
@Override @Override

View file

@ -18,35 +18,23 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/ */
package org.linphone; package org.linphone;
import android.annotation.SuppressLint; import static android.media.AudioManager.MODE_RINGTONE;
import android.annotation.TargetApi; import static android.media.AudioManager.STREAM_RING;
import android.app.AlertDialog; import static android.media.AudioManager.STREAM_VOICE_CALL;
import android.app.Dialog;
import android.app.ProgressDialog; import java.io.ByteArrayInputStream;
import android.content.BroadcastReceiver; import java.io.File;
import android.content.ContentResolver; import java.io.FileInputStream;
import android.content.Context; import java.io.FileOutputStream;
import android.content.Intent; import java.io.IOException;
import android.content.IntentFilter; import java.io.InputStream;
import android.content.pm.PackageManager.NameNotFoundException; import java.nio.ByteBuffer;
import android.content.res.Resources; import java.sql.Timestamp;
import android.media.AudioManager; import java.util.ArrayList;
import android.media.MediaPlayer; import java.util.Date;
import android.net.ConnectivityManager; import java.util.List;
import android.net.NetworkInfo; import java.util.Timer;
import android.net.Uri; import java.util.TimerTask;
import android.os.Build;
import android.os.Handler;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.os.Vibrator;
import android.preference.CheckBoxPreference;
import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
import android.telephony.TelephonyManager;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import org.linphone.assistant.AssistantActivity; import org.linphone.assistant.AssistantActivity;
import org.linphone.core.CallDirection; import org.linphone.core.CallDirection;
@ -91,23 +79,35 @@ import org.linphone.mediastream.video.capture.hwconf.Hacks;
import org.linphone.tools.H264Helper; import org.linphone.tools.H264Helper;
import org.linphone.tools.OpenH264DownloadHelper; import org.linphone.tools.OpenH264DownloadHelper;
import java.io.ByteArrayInputStream; import android.annotation.SuppressLint;
import java.io.File; import android.annotation.TargetApi;
import java.io.FileInputStream; import android.app.AlertDialog;
import java.io.FileOutputStream; import android.app.Dialog;
import java.io.IOException; import android.app.ProgressDialog;
import java.io.InputStream; import android.content.BroadcastReceiver;
import java.nio.ByteBuffer; import android.content.ContentResolver;
import java.sql.Timestamp; import android.content.Context;
import java.util.ArrayList; import android.content.Intent;
import java.util.Date; import android.content.IntentFilter;
import java.util.List; import android.content.pm.PackageManager.NameNotFoundException;
import java.util.Timer; import android.content.res.Resources;
import java.util.TimerTask; import android.media.AudioManager;
import android.media.MediaPlayer;
import static android.media.AudioManager.MODE_RINGTONE; import android.net.ConnectivityManager;
import static android.media.AudioManager.STREAM_RING; import android.net.NetworkInfo;
import static android.media.AudioManager.STREAM_VOICE_CALL; import android.net.Uri;
import android.os.Build;
import android.os.Handler;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.os.Vibrator;
import android.preference.CheckBoxPreference;
import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
import android.telephony.TelephonyManager;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
/** /**
* *
@ -193,7 +193,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag
mPendingChatFileMessage = new ArrayList<LinphoneChatMessage>(); mPendingChatFileMessage = new ArrayList<LinphoneChatMessage>();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
dozeModeEnabled = ((PowerManager)c.getSystemService(c.POWER_SERVICE)).isDeviceIdleMode(); dozeModeEnabled = ((PowerManager)c.getSystemService(Context.POWER_SERVICE)).isDeviceIdleMode();
} else { } else {
dozeModeEnabled = false; dozeModeEnabled = false;
} }

View file

@ -42,7 +42,6 @@ import java.util.Locale;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream; import java.util.zip.ZipOutputStream;
import org.linphone.assistant.AssistantActivity;
import org.linphone.core.DialPlan; import org.linphone.core.DialPlan;
import org.linphone.core.LinphoneAccountCreator; import org.linphone.core.LinphoneAccountCreator;
import org.linphone.core.LinphoneAddress; import org.linphone.core.LinphoneAddress;
@ -58,7 +57,6 @@ import org.linphone.mediastream.video.capture.hwconf.Hacks;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.app.Dialog;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.ContentValues; import android.content.ContentValues;
import android.content.Context; import android.content.Context;

View file

@ -22,7 +22,6 @@ import java.util.Timer;
import java.util.TimerTask; import java.util.TimerTask;
import org.linphone.assistant.AssistantActivity; import org.linphone.assistant.AssistantActivity;
import org.linphone.core.LinphoneAccountCreator;
import org.linphone.core.LinphoneCall; import org.linphone.core.LinphoneCall;
import org.linphone.core.LinphoneCallParams; import org.linphone.core.LinphoneCallParams;
import org.linphone.core.LinphoneCallStats; import org.linphone.core.LinphoneCallStats;
@ -442,6 +441,7 @@ public class StatusFragment extends Fragment {
} }
} }
@SuppressWarnings("deprecation")
private void formatText(TextView tv, String name, String value) { private void formatText(TextView tv, String name, String value) {
tv.setText(Html.fromHtml("<b>" + name + " </b>" + value)); tv.setText(Html.fromHtml("<b>" + name + " </b>" + value));
} }

View file

@ -18,21 +18,17 @@ along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/ */
import android.app.AlarmManager; import java.util.ArrayList;
import android.app.PendingIntent; import java.util.Arrays;
import android.view.LayoutInflater; import java.util.List;
import android.view.ViewGroup;
import android.widget.*;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.linphone.LinphoneActivity; import org.linphone.LinphoneActivity;
import org.linphone.LinphoneLauncherActivity; import org.linphone.LinphoneLauncherActivity;
import org.linphone.LinphoneManager; import org.linphone.LinphoneManager;
import org.linphone.LinphonePreferences; import org.linphone.LinphonePreferences;
import org.linphone.LinphonePreferences.AccountBuilder;
import org.linphone.LinphoneService; import org.linphone.LinphoneService;
import org.linphone.LinphoneUtils; import org.linphone.LinphoneUtils;
import org.linphone.LinphonePreferences.AccountBuilder;
import org.linphone.R; import org.linphone.R;
import org.linphone.StatusFragment; import org.linphone.StatusFragment;
import org.linphone.core.DialPlan; import org.linphone.core.DialPlan;
@ -51,10 +47,12 @@ import org.linphone.tools.OpenH264DownloadHelper;
import android.Manifest; import android.Manifest;
import android.app.Activity; import android.app.Activity;
import android.app.AlarmManager;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.app.Dialog; import android.app.Dialog;
import android.app.Fragment; import android.app.Fragment;
import android.app.FragmentTransaction; import android.app.FragmentTransaction;
import android.app.PendingIntent;
import android.app.ProgressDialog; import android.app.ProgressDialog;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
@ -67,14 +65,18 @@ import android.os.Bundle;
import android.support.v4.app.ActivityCompat; import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat; import android.support.v4.content.ContextCompat;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.View.OnClickListener; import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.WindowManager; import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
import android.widget.BaseAdapter;
import java.util.ArrayList; import android.widget.Filter;
import java.util.Arrays; import android.widget.Filterable;
import java.util.List; import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
/** /**
* @author Sylvain Berfini * @author Sylvain Berfini

View file

@ -17,6 +17,18 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/ */
import java.util.Locale;
import org.linphone.LinphoneManager;
import org.linphone.LinphonePreferences;
import org.linphone.LinphoneUtils;
import org.linphone.R;
import org.linphone.compatibility.Compatibility;
import org.linphone.core.DialPlan;
import org.linphone.core.LinphoneAccountCreator;
import org.linphone.core.LinphoneCoreFactory;
import org.linphone.core.LinphoneProxyConfig;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.app.Fragment; import android.app.Fragment;
import android.content.Context; import android.content.Context;
@ -38,18 +50,6 @@ import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import org.linphone.LinphoneManager;
import org.linphone.LinphonePreferences;
import org.linphone.LinphoneUtils;
import org.linphone.R;
import org.linphone.compatibility.Compatibility;
import org.linphone.core.DialPlan;
import org.linphone.core.LinphoneAccountCreator;
import org.linphone.core.LinphoneCoreFactory;
import org.linphone.core.LinphoneProxyConfig;
import java.util.Locale;
/** /**
* @author Sylvain Berfini * @author Sylvain Berfini
*/ */
@ -62,7 +62,7 @@ public class LinphoneLoginFragment extends Fragment implements CompoundButton.On
private Boolean recoverAccount; private Boolean recoverAccount;
private LinphoneAccountCreator accountCreator; private LinphoneAccountCreator accountCreator;
private int countryCode; private int countryCode;
private String username, phone, dialcode; private String phone, dialcode;
private ImageView phoneNumberInfo; private ImageView phoneNumberInfo;
@Override @Override