diff --git a/src/org/linphone/CallIncomingActivity.java b/src/org/linphone/CallIncomingActivity.java index a9a954886..b428de7e2 100644 --- a/src/org/linphone/CallIncomingActivity.java +++ b/src/org/linphone/CallIncomingActivity.java @@ -21,7 +21,6 @@ package org.linphone; import java.util.ArrayList; import java.util.List; -import org.linphone.compatibility.Compatibility; import org.linphone.core.LinphoneAddress; import org.linphone.core.LinphoneCall; import org.linphone.core.LinphoneCall.State; @@ -32,12 +31,9 @@ import org.linphone.mediastream.Log; import org.linphone.ui.LinphoneSliders.LinphoneSliderTriggered; import android.Manifest; -import android.app.Activity; -import android.content.Context; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.os.Bundle; -import android.os.PowerManager; import android.support.v4.app.ActivityCompat; import android.view.KeyEvent; 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; getWindow().addFlags(flags); - PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); - final int screenWidth = getResources().getDisplayMetrics().widthPixels; acceptUnlock = (LinearLayout) findViewById(R.id.acceptUnlock); diff --git a/src/org/linphone/CallOutgoingActivity.java b/src/org/linphone/CallOutgoingActivity.java index 0bee6cadd..e359099c5 100644 --- a/src/org/linphone/CallOutgoingActivity.java +++ b/src/org/linphone/CallOutgoingActivity.java @@ -30,7 +30,6 @@ import org.linphone.core.Reason; import org.linphone.mediastream.Log; import android.Manifest; -import android.app.Activity; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.os.Bundle; diff --git a/src/org/linphone/ChatListFragment.java b/src/org/linphone/ChatListFragment.java index 0a0165398..2987b8ccf 100644 --- a/src/org/linphone/ChatListFragment.java +++ b/src/org/linphone/ChatListFragment.java @@ -30,7 +30,6 @@ import org.linphone.mediastream.Log; import android.app.Dialog; import android.app.Fragment; -import android.graphics.Bitmap; import android.graphics.Typeface; import android.os.Bundle; import android.view.ContextMenu; @@ -228,7 +227,8 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte @Override public void onContactsUpdated() { - hideAndDisplayMessageIfNoChat(); + ChatListAdapter adapter = (ChatListAdapter)chatList.getAdapter(); + adapter.notifyDataSetChanged(); } @Override diff --git a/src/org/linphone/ContactsListFragment.java b/src/org/linphone/ContactsListFragment.java index fdb30c7d6..07b957d42 100644 --- a/src/org/linphone/ContactsListFragment.java +++ b/src/org/linphone/ContactsListFragment.java @@ -27,7 +27,6 @@ import java.util.Map; import android.app.Dialog; import android.app.Fragment; -import android.graphics.Bitmap; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; @@ -411,7 +410,15 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O @Override 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() { @@ -452,6 +459,10 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O Mapmap = new LinkedHashMap(); ContactsListAdapter(List contactsList) { + updateDataSet(contactsList); + } + + public void updateDataSet(List contactsList) { contacts = contactsList; map = new LinkedHashMap(); @@ -471,6 +482,8 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O sectionsList = new ArrayList(map.keySet()); sections = new String[sectionsList.size()]; sectionsList.toArray(sections); + + notifyDataSetChanged(); } public int getCount() { diff --git a/src/org/linphone/ContactsManager.java b/src/org/linphone/ContactsManager.java index 0f66e437c..90e4bbc28 100644 --- a/src/org/linphone/ContactsManager.java +++ b/src/org/linphone/ContactsManager.java @@ -40,6 +40,7 @@ import android.accounts.AccountManager; import android.content.ContentProviderOperation; import android.content.ContentResolver; import android.content.Context; +import android.content.pm.PackageManager; import android.database.ContentObserver; import android.database.Cursor; import android.database.MatrixCursor; @@ -58,6 +59,7 @@ interface ContactsUpdatedListener { } public class ContactsManager extends ContentObserver { + public static int CONTACTS_STEP = 15; private static ContactsManager instance; private List contacts, sipContacts; private boolean preferLinphoneContacts = false, isContactPresenceDisabled = true, hasContactAccess = false; @@ -180,7 +182,8 @@ public class ContactsManager extends ContentObserver { if (context == null) return false; 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) { @@ -217,7 +220,7 @@ public class ContactsManager extends ContentObserver { initializeContactManager(context, contentResolver); } - public LinphoneContact findContactFromAddress(LinphoneAddress address) { + public synchronized LinphoneContact findContactFromAddress(LinphoneAddress address) { String sipUri = address.asStringUriOnly(); String username = address.getUserName(); @@ -251,7 +254,7 @@ public class ContactsManager extends ContentObserver { return null; } - public LinphoneContact findContactFromPhoneNumber(String phoneNumber) { + public synchronized LinphoneContact findContactFromPhoneNumber(String phoneNumber) { LinphoneContact cache = contactsCache.get(phoneNumber); if (cache != null) { if (cache == contactNotFound) return null; @@ -355,9 +358,17 @@ public class ContactsManager extends ContentObserver { } } + int i = 0; + for (LinphoneContact contact : contacts) { // This will only get name & picture informations to be able to quickly display contacts list contact.minimalRefresh(); + i++; + + if (i == CONTACTS_STEP) { + i = 0; + publishProgress(contacts); + } } Collections.sort(contacts); @@ -384,9 +395,9 @@ public class ContactsManager extends ContentObserver { return contacts; } - protected void onProgressUpdate(List... result) { - contactsCache.clear(); + protected synchronized void onProgressUpdate(List... result) { setContacts(result[0]); + contactsCache.clear(); for (ContactsUpdatedListener listener : contactsUpdatedListeners) { listener.onContactsUpdated(); } diff --git a/src/org/linphone/DozeReceiver.java b/src/org/linphone/DozeReceiver.java index 2fea22feb..717e7a002 100644 --- a/src/org/linphone/DozeReceiver.java +++ b/src/org/linphone/DozeReceiver.java @@ -1,14 +1,14 @@ 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.Intent; import android.os.Build; 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 * */ @@ -24,7 +24,7 @@ public class DozeReceiver extends android.content.BroadcastReceiver { LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); 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) { boolean dozeM = pm.isDeviceIdleMode(); Log.i("[DozeReceiver] Idle Mode: " + dozeM); diff --git a/src/org/linphone/HistoryListFragment.java b/src/org/linphone/HistoryListFragment.java index f19529c15..5fec54996 100644 --- a/src/org/linphone/HistoryListFragment.java +++ b/src/org/linphone/HistoryListFragment.java @@ -30,10 +30,9 @@ import org.linphone.core.LinphoneCallLog.CallStatus; import android.annotation.SuppressLint; import android.app.Dialog; -import android.content.Context; -import android.graphics.Bitmap; -import android.os.Bundle; import android.app.Fragment; +import android.content.Context; +import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; @@ -222,7 +221,8 @@ public class HistoryListFragment extends Fragment implements OnClickListener, On @Override public void onContactsUpdated() { - historyList.setAdapter(new CallHistoryAdapter(getActivity().getApplicationContext())); + CallHistoryAdapter adapter = (CallHistoryAdapter)historyList.getAdapter(); + adapter.notifyDataSetChanged(); } @Override diff --git a/src/org/linphone/LinphoneManager.java b/src/org/linphone/LinphoneManager.java index d94633274..417013b40 100644 --- a/src/org/linphone/LinphoneManager.java +++ b/src/org/linphone/LinphoneManager.java @@ -18,35 +18,23 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package org.linphone; -import android.annotation.SuppressLint; -import android.annotation.TargetApi; -import android.app.AlertDialog; -import android.app.Dialog; -import android.app.ProgressDialog; -import android.content.BroadcastReceiver; -import android.content.ContentResolver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.content.pm.PackageManager.NameNotFoundException; -import android.content.res.Resources; -import android.media.AudioManager; -import android.media.MediaPlayer; -import android.net.ConnectivityManager; -import android.net.NetworkInfo; -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; +import static android.media.AudioManager.MODE_RINGTONE; +import static android.media.AudioManager.STREAM_RING; +import static android.media.AudioManager.STREAM_VOICE_CALL; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.ByteBuffer; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Timer; +import java.util.TimerTask; import org.linphone.assistant.AssistantActivity; 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.OpenH264DownloadHelper; -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.nio.ByteBuffer; -import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Timer; -import java.util.TimerTask; - -import static android.media.AudioManager.MODE_RINGTONE; -import static android.media.AudioManager.STREAM_RING; -import static android.media.AudioManager.STREAM_VOICE_CALL; +import android.annotation.SuppressLint; +import android.annotation.TargetApi; +import android.app.AlertDialog; +import android.app.Dialog; +import android.app.ProgressDialog; +import android.content.BroadcastReceiver; +import android.content.ContentResolver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.pm.PackageManager.NameNotFoundException; +import android.content.res.Resources; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +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(); 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 { dozeModeEnabled = false; } diff --git a/src/org/linphone/LinphoneUtils.java b/src/org/linphone/LinphoneUtils.java index a58a37471..a73c242c1 100644 --- a/src/org/linphone/LinphoneUtils.java +++ b/src/org/linphone/LinphoneUtils.java @@ -42,7 +42,6 @@ import java.util.Locale; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; -import org.linphone.assistant.AssistantActivity; import org.linphone.core.DialPlan; import org.linphone.core.LinphoneAccountCreator; import org.linphone.core.LinphoneAddress; @@ -58,7 +57,6 @@ import org.linphone.mediastream.video.capture.hwconf.Hacks; import android.app.Activity; import android.app.AlertDialog; -import android.app.Dialog; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; diff --git a/src/org/linphone/StatusFragment.java b/src/org/linphone/StatusFragment.java index 820571485..b9e8e19e0 100644 --- a/src/org/linphone/StatusFragment.java +++ b/src/org/linphone/StatusFragment.java @@ -22,7 +22,6 @@ import java.util.Timer; import java.util.TimerTask; import org.linphone.assistant.AssistantActivity; -import org.linphone.core.LinphoneAccountCreator; import org.linphone.core.LinphoneCall; import org.linphone.core.LinphoneCallParams; 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) { tv.setText(Html.fromHtml("" + name + " " + value)); } diff --git a/src/org/linphone/assistant/AssistantActivity.java b/src/org/linphone/assistant/AssistantActivity.java index ac05faf5a..95f21e3d3 100644 --- a/src/org/linphone/assistant/AssistantActivity.java +++ b/src/org/linphone/assistant/AssistantActivity.java @@ -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. */ -import android.app.AlarmManager; -import android.app.PendingIntent; -import android.view.LayoutInflater; -import android.view.ViewGroup; -import android.widget.*; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + import org.linphone.LinphoneActivity; import org.linphone.LinphoneLauncherActivity; import org.linphone.LinphoneManager; import org.linphone.LinphonePreferences; +import org.linphone.LinphonePreferences.AccountBuilder; import org.linphone.LinphoneService; import org.linphone.LinphoneUtils; -import org.linphone.LinphonePreferences.AccountBuilder; import org.linphone.R; import org.linphone.StatusFragment; import org.linphone.core.DialPlan; @@ -51,10 +47,12 @@ import org.linphone.tools.OpenH264DownloadHelper; import android.Manifest; import android.app.Activity; +import android.app.AlarmManager; import android.app.AlertDialog; import android.app.Dialog; import android.app.Fragment; import android.app.FragmentTransaction; +import android.app.PendingIntent; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; @@ -67,14 +65,18 @@ import android.os.Bundle; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.text.TextUtils; +import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; +import android.view.ViewGroup; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import android.widget.BaseAdapter; +import android.widget.Filter; +import android.widget.Filterable; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; /** * @author Sylvain Berfini diff --git a/src/org/linphone/assistant/LinphoneLoginFragment.java b/src/org/linphone/assistant/LinphoneLoginFragment.java index 9dba2d01c..a7b1cab14 100644 --- a/src/org/linphone/assistant/LinphoneLoginFragment.java +++ b/src/org/linphone/assistant/LinphoneLoginFragment.java @@ -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 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.Fragment; import android.content.Context; @@ -38,18 +50,6 @@ import android.widget.ImageView; import android.widget.LinearLayout; 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 */ @@ -62,7 +62,7 @@ public class LinphoneLoginFragment extends Fragment implements CompoundButton.On private Boolean recoverAccount; private LinphoneAccountCreator accountCreator; private int countryCode; - private String username, phone, dialcode; + private String phone, dialcode; private ImageView phoneNumberInfo; @Override