Moved some files around + added a max length to generated contact avatar + fixed possible crash

This commit is contained in:
Sylvain Berfini 2019-11-20 10:06:46 +01:00
parent 53a748409d
commit 260d38669e
30 changed files with 99 additions and 67 deletions

View file

@ -37,6 +37,7 @@ import java.util.ArrayList;
import java.util.Collection;
import org.linphone.LinphoneManager;
import org.linphone.R;
import org.linphone.call.views.CallButton;
import org.linphone.contacts.ContactsActivity;
import org.linphone.contacts.ContactsManager;
import org.linphone.core.Call;
@ -45,7 +46,6 @@ import org.linphone.core.CoreListenerStub;
import org.linphone.core.tools.Log;
import org.linphone.settings.LinphonePreferences;
import org.linphone.views.AddressText;
import org.linphone.views.CallButton;
import org.linphone.views.Digit;
import org.linphone.views.EraseButton;

View file

@ -58,6 +58,7 @@ import org.linphone.compatibility.Compatibility;
import org.linphone.contacts.ContactsManager;
import org.linphone.contacts.ContactsUpdatedListener;
import org.linphone.contacts.LinphoneContact;
import org.linphone.contacts.views.ContactAvatar;
import org.linphone.core.Address;
import org.linphone.core.Call;
import org.linphone.core.ChatMessage;
@ -69,7 +70,6 @@ import org.linphone.core.tools.Log;
import org.linphone.settings.LinphonePreferences;
import org.linphone.utils.AndroidAudioManager;
import org.linphone.utils.LinphoneUtils;
import org.linphone.views.ContactAvatar;
public class CallActivity extends LinphoneGenericActivity
implements CallStatusBarFragment.StatsClikedListener,

View file

@ -36,9 +36,13 @@ import org.linphone.LinphoneContext;
import org.linphone.LinphoneManager;
import org.linphone.R;
import org.linphone.activities.LinphoneGenericActivity;
import org.linphone.call.views.CallIncomingAnswerButton;
import org.linphone.call.views.CallIncomingButtonListener;
import org.linphone.call.views.CallIncomingDeclineButton;
import org.linphone.compatibility.Compatibility;
import org.linphone.contacts.ContactsManager;
import org.linphone.contacts.LinphoneContact;
import org.linphone.contacts.views.ContactAvatar;
import org.linphone.core.Address;
import org.linphone.core.Call;
import org.linphone.core.Call.State;
@ -47,10 +51,6 @@ import org.linphone.core.CoreListenerStub;
import org.linphone.core.tools.Log;
import org.linphone.settings.LinphonePreferences;
import org.linphone.utils.LinphoneUtils;
import org.linphone.views.CallIncomingAnswerButton;
import org.linphone.views.CallIncomingButtonListener;
import org.linphone.views.CallIncomingDeclineButton;
import org.linphone.views.ContactAvatar;
public class CallIncomingActivity extends LinphoneGenericActivity {
private TextView mName, mNumber;

View file

@ -37,6 +37,7 @@ import org.linphone.R;
import org.linphone.activities.LinphoneGenericActivity;
import org.linphone.contacts.ContactsManager;
import org.linphone.contacts.LinphoneContact;
import org.linphone.contacts.views.ContactAvatar;
import org.linphone.core.Address;
import org.linphone.core.Call;
import org.linphone.core.Call.State;
@ -46,7 +47,6 @@ import org.linphone.core.Reason;
import org.linphone.core.tools.Log;
import org.linphone.settings.LinphonePreferences;
import org.linphone.utils.LinphoneUtils;
import org.linphone.views.ContactAvatar;
public class CallOutgoingActivity extends LinphoneGenericActivity implements OnClickListener {
private TextView mName, mNumber;

View file

@ -29,9 +29,9 @@ import java.util.List;
import org.linphone.R;
import org.linphone.contacts.ContactsManager;
import org.linphone.contacts.LinphoneContact;
import org.linphone.contacts.views.ContactAvatar;
import org.linphone.core.Call;
import org.linphone.utils.LinphoneUtils;
import org.linphone.views.ContactAvatar;
public class CallStatsAdapter extends BaseExpandableListAdapter {
private final Context mContext;

View file

@ -17,7 +17,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.linphone.views;
package org.linphone.call.views;
import android.annotation.SuppressLint;
import android.content.Context;
@ -31,6 +31,8 @@ import org.linphone.core.CallLog;
import org.linphone.core.Core;
import org.linphone.core.ProxyConfig;
import org.linphone.settings.LinphonePreferences;
import org.linphone.views.AddressAware;
import org.linphone.views.AddressText;
@SuppressLint("AppCompatCustomView")
public class CallButton extends ImageView implements OnClickListener, AddressAware {

View file

@ -17,7 +17,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.linphone.views;
package org.linphone.call.views;
import android.content.Context;
import android.util.AttributeSet;

View file

@ -17,7 +17,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.linphone.views;
package org.linphone.call.views;
public interface CallIncomingButtonListener {
void onAction();

View file

@ -17,7 +17,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.linphone.views;
package org.linphone.call.views;
import android.content.Context;
import android.util.AttributeSet;

View file

@ -50,6 +50,7 @@ import java.util.List;
import org.linphone.R;
import org.linphone.contacts.ContactsManager;
import org.linphone.contacts.LinphoneContact;
import org.linphone.contacts.views.ContactAvatar;
import org.linphone.core.Address;
import org.linphone.core.ChatMessage;
import org.linphone.core.Content;
@ -57,7 +58,6 @@ import org.linphone.core.tools.Log;
import org.linphone.utils.FileUtils;
import org.linphone.utils.ImageUtils;
import org.linphone.utils.LinphoneUtils;
import org.linphone.views.ContactAvatar;
public class ChatMessageViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

View file

@ -49,6 +49,7 @@ import org.linphone.contacts.ContactsUpdatedListener;
import org.linphone.contacts.LinphoneContact;
import org.linphone.contacts.SearchContactViewHolder;
import org.linphone.contacts.SearchContactsAdapter;
import org.linphone.contacts.views.ContactSelectView;
import org.linphone.core.Address;
import org.linphone.core.ChatRoom;
import org.linphone.core.ChatRoomBackend;
@ -61,7 +62,6 @@ import org.linphone.core.ProxyConfig;
import org.linphone.core.SearchResult;
import org.linphone.core.tools.Log;
import org.linphone.settings.LinphonePreferences;
import org.linphone.views.ContactSelectView;
import org.linphone.views.LinphoneLinearLayoutManager;
public class ChatRoomCreationFragment extends Fragment

View file

@ -28,6 +28,7 @@ import androidx.recyclerview.widget.RecyclerView;
import org.linphone.R;
import org.linphone.contacts.ContactsManager;
import org.linphone.contacts.LinphoneContact;
import org.linphone.contacts.views.ContactAvatar;
import org.linphone.core.Address;
import org.linphone.core.ChatMessage;
import org.linphone.core.ChatRoom;
@ -35,7 +36,6 @@ import org.linphone.core.ChatRoomCapabilities;
import org.linphone.core.Content;
import org.linphone.core.Participant;
import org.linphone.utils.LinphoneUtils;
import org.linphone.views.ContactAvatar;
public class ChatRoomViewHolder extends RecyclerView.ViewHolder
implements View.OnClickListener, View.OnLongClickListener {

View file

@ -29,12 +29,12 @@ import java.util.List;
import org.linphone.R;
import org.linphone.contacts.ContactsManager;
import org.linphone.contacts.LinphoneContact;
import org.linphone.contacts.views.ContactAvatar;
import org.linphone.core.Address;
import org.linphone.core.ChatRoomSecurityLevel;
import org.linphone.core.Participant;
import org.linphone.core.ParticipantDevice;
import org.linphone.utils.LinphoneUtils;
import org.linphone.views.ContactAvatar;
class DevicesAdapter extends BaseExpandableListAdapter {
private final Context mContext;

View file

@ -30,9 +30,9 @@ import org.linphone.LinphoneContext;
import org.linphone.R;
import org.linphone.contacts.ContactAddress;
import org.linphone.contacts.LinphoneContact;
import org.linphone.contacts.views.ContactAvatar;
import org.linphone.core.ChatRoom;
import org.linphone.core.Participant;
import org.linphone.views.ContactAvatar;
class GroupInfoAdapter extends RecyclerView.Adapter<GroupInfoViewHolder> {
private List<ContactAddress> mItems;

View file

@ -32,6 +32,7 @@ import org.linphone.LinphoneManager;
import org.linphone.R;
import org.linphone.contacts.ContactsManager;
import org.linphone.contacts.LinphoneContact;
import org.linphone.contacts.views.ContactAvatar;
import org.linphone.core.Address;
import org.linphone.core.ChatMessage;
import org.linphone.core.ChatMessageListenerStub;
@ -40,7 +41,6 @@ import org.linphone.core.Core;
import org.linphone.core.Factory;
import org.linphone.core.ParticipantImdnState;
import org.linphone.utils.LinphoneUtils;
import org.linphone.views.ContactAvatar;
public class ImdnFragment extends Fragment {
private LayoutInflater mInflater;

View file

@ -36,6 +36,7 @@ import android.widget.TableLayout;
import android.widget.TextView;
import org.linphone.LinphoneManager;
import org.linphone.R;
import org.linphone.contacts.views.ContactAvatar;
import org.linphone.core.Address;
import org.linphone.core.ChatRoom;
import org.linphone.core.ChatRoomBackend;
@ -50,7 +51,6 @@ import org.linphone.core.ProxyConfig;
import org.linphone.core.tools.Log;
import org.linphone.settings.LinphonePreferences;
import org.linphone.utils.LinphoneUtils;
import org.linphone.views.ContactAvatar;
public class ContactDetailsFragment extends Fragment implements ContactsUpdatedListener {
private LinphoneContact mContact;

View file

@ -53,12 +53,12 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.linphone.R;
import org.linphone.contacts.views.ContactAvatar;
import org.linphone.core.tools.Log;
import org.linphone.mediastream.Version;
import org.linphone.settings.LinphonePreferences;
import org.linphone.utils.FileUtils;
import org.linphone.utils.LinphoneUtils;
import org.linphone.views.ContactAvatar;
public class ContactEditorFragment extends Fragment {
private static final int ADD_PHOTO = 1337;

View file

@ -31,10 +31,10 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
import org.linphone.R;
import org.linphone.contacts.views.ContactAvatar;
import org.linphone.settings.LinphonePreferences;
import org.linphone.utils.SelectableAdapter;
import org.linphone.utils.SelectableHelper;
import org.linphone.views.ContactAvatar;
public class ContactsAdapter extends SelectableAdapter<ContactViewHolder>
implements SectionIndexer {

View file

@ -375,6 +375,11 @@ public class ContactsManager extends ContentObserver
}
String username = address.getUsername();
if (username == null) {
Log.w("[Contacts Manager] Address ", address.asString(), " doesn't have a username!");
return null;
}
if (android.util.Patterns.PHONE.matcher(username).matches()) {
return findContactFromPhoneNumber(username);
}

View file

@ -30,13 +30,13 @@ import java.util.Objects;
import org.linphone.LinphoneContext;
import org.linphone.LinphoneManager;
import org.linphone.R;
import org.linphone.contacts.views.ContactAvatar;
import org.linphone.core.Address;
import org.linphone.core.FriendCapability;
import org.linphone.core.PresenceBasicStatus;
import org.linphone.core.PresenceModel;
import org.linphone.core.ProxyConfig;
import org.linphone.core.SearchResult;
import org.linphone.views.ContactAvatar;
public class SearchContactsAdapter extends RecyclerView.Adapter<SearchContactViewHolder> {
private List<SearchResult> mContacts;

View file

@ -17,49 +17,25 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.linphone.views;
package org.linphone.contacts.views;
import android.graphics.Bitmap;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import org.linphone.R;
import org.linphone.contacts.LinphoneContact;
import org.linphone.core.ChatRoomSecurityLevel;
import org.linphone.utils.ImageUtils;
class ContactAvatarHolder {
public final ImageView contactPicture;
public final ImageView avatarBorder;
public final ImageView securityLevel;
public final TextView generatedAvatar;
public final ImageView generatedAvatarBackground;
public ContactAvatarHolder(View v) {
contactPicture = v.findViewById(R.id.contact_picture);
securityLevel = v.findViewById(R.id.security_level);
generatedAvatar = v.findViewById(R.id.generated_avatar);
generatedAvatarBackground = v.findViewById(R.id.generated_avatar_background);
avatarBorder = v.findViewById(R.id.border);
}
public void init() {
contactPicture.setVisibility(View.VISIBLE);
generatedAvatar.setVisibility(View.VISIBLE);
generatedAvatarBackground.setVisibility(View.VISIBLE);
securityLevel.setVisibility(View.GONE);
avatarBorder.setVisibility(View.GONE);
}
}
public class ContactAvatar {
private static String generateAvatar(String displayName) {
String[] names = displayName.split(" ");
StringBuilder generatedAvatarText = new StringBuilder();
int count = 0;
for (String name : names) {
if (name != null && name.length() > 0) {
if (name != null && name.length() > 0 && count < 2) {
generatedAvatarText.append(name.charAt(0));
count += 1;
}
}
return generatedAvatarText.toString().toUpperCase();

View file

@ -0,0 +1,49 @@
/*
* Copyright (c) 2010-2019 Belledonne Communications SARL.
*
* This file is part of linphone-android
* (see https://www.linphone.org).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.linphone.contacts.views;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import org.linphone.R;
class ContactAvatarHolder {
public final ImageView contactPicture;
public final ImageView avatarBorder;
public final ImageView securityLevel;
public final TextView generatedAvatar;
public final ImageView generatedAvatarBackground;
public ContactAvatarHolder(View v) {
contactPicture = v.findViewById(R.id.contact_picture);
securityLevel = v.findViewById(R.id.security_level);
generatedAvatar = v.findViewById(R.id.generated_avatar);
generatedAvatarBackground = v.findViewById(R.id.generated_avatar_background);
avatarBorder = v.findViewById(R.id.border);
}
public void init() {
contactPicture.setVisibility(View.VISIBLE);
generatedAvatar.setVisibility(View.VISIBLE);
generatedAvatarBackground.setVisibility(View.VISIBLE);
securityLevel.setVisibility(View.GONE);
avatarBorder.setVisibility(View.GONE);
}
}

View file

@ -17,7 +17,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.linphone.views;
package org.linphone.contacts.views;
import android.content.Context;
import android.view.LayoutInflater;

View file

@ -30,13 +30,13 @@ import java.util.List;
import org.linphone.R;
import org.linphone.contacts.ContactsManager;
import org.linphone.contacts.LinphoneContact;
import org.linphone.contacts.views.ContactAvatar;
import org.linphone.core.Address;
import org.linphone.core.Call;
import org.linphone.core.CallLog;
import org.linphone.utils.LinphoneUtils;
import org.linphone.utils.SelectableAdapter;
import org.linphone.utils.SelectableHelper;
import org.linphone.views.ContactAvatar;
public class HistoryAdapter extends SelectableAdapter<HistoryViewHolder> {
private final List<CallLog> mLogs;

View file

@ -35,6 +35,7 @@ import org.linphone.LinphoneManager;
import org.linphone.R;
import org.linphone.contacts.ContactsManager;
import org.linphone.contacts.LinphoneContact;
import org.linphone.contacts.views.ContactAvatar;
import org.linphone.core.Address;
import org.linphone.core.CallLog;
import org.linphone.core.ChatRoom;
@ -48,7 +49,6 @@ import org.linphone.core.ProxyConfig;
import org.linphone.core.tools.Log;
import org.linphone.settings.LinphonePreferences;
import org.linphone.utils.LinphoneUtils;
import org.linphone.views.ContactAvatar;
public class HistoryDetailFragment extends Fragment {
private ImageView mAddToContacts;

View file

@ -81,7 +81,7 @@
</RelativeLayout>
<org.linphone.views.CallButton
<org.linphone.call.views.CallButton
android:id="@+id/start_call"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -91,7 +91,7 @@
android:padding="12dp"
android:src="@drawable/call_audio_start" />
<org.linphone.views.CallButton
<org.linphone.call.views.CallButton
android:id="@+id/add_call"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -102,7 +102,7 @@
android:visibility="gone"
android:src="@drawable/call_add" />
<org.linphone.views.CallButton
<org.linphone.call.views.CallButton
android:id="@+id/transfer_call"
android:layout_width="match_parent"
android:layout_height="wrap_content"

View file

@ -115,7 +115,7 @@
</RelativeLayout>
<org.linphone.views.CallButton
<org.linphone.call.views.CallButton
android:id="@+id/start_call"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -125,7 +125,7 @@
android:padding="12dp"
android:src="@drawable/call_audio_start" />
<org.linphone.views.CallButton
<org.linphone.call.views.CallButton
android:id="@+id/add_call"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -136,7 +136,7 @@
android:visibility="gone"
android:src="@drawable/call_add" />
<org.linphone.views.CallButton
<org.linphone.call.views.CallButton
android:id="@+id/transfer_call"
android:layout_width="match_parent"
android:layout_height="wrap_content"

View file

@ -115,7 +115,7 @@
</RelativeLayout>
<org.linphone.views.CallButton
<org.linphone.call.views.CallButton
android:id="@+id/start_call"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -125,7 +125,7 @@
android:padding="12dp"
android:src="@drawable/call_audio_start" />
<org.linphone.views.CallButton
<org.linphone.call.views.CallButton
android:id="@+id/add_call"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -136,7 +136,7 @@
android:visibility="gone"
android:src="@drawable/call_add" />
<org.linphone.views.CallButton
<org.linphone.call.views.CallButton
android:id="@+id/transfer_call"
android:layout_width="match_parent"
android:layout_height="wrap_content"

View file

@ -83,13 +83,13 @@
android:layout_alignParentBottom="true"
android:orientation="horizontal">
<org.linphone.views.CallIncomingDeclineButton
<org.linphone.call.views.CallIncomingDeclineButton
android:id="@+id/decline_button"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<org.linphone.views.CallIncomingAnswerButton
<org.linphone.call.views.CallIncomingAnswerButton
android:id="@+id/answer_button"
android:layout_width="0dp"
android:layout_height="match_parent"

View file

@ -85,7 +85,7 @@
</RelativeLayout>
<org.linphone.views.CallButton
<org.linphone.call.views.CallButton
android:id="@+id/start_call"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -95,7 +95,7 @@
android:padding="12dp"
android:src="@drawable/call_audio_start" />
<org.linphone.views.CallButton
<org.linphone.call.views.CallButton
android:id="@+id/add_call"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -106,7 +106,7 @@
android:visibility="gone"
android:src="@drawable/call_add" />
<org.linphone.views.CallButton
<org.linphone.call.views.CallButton
android:id="@+id/transfer_call"
android:layout_width="match_parent"
android:layout_height="wrap_content"