/*
* 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 .
*/
package org.linphone.chat;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import androidx.annotation.Nullable;
import java.util.ArrayList;
import org.linphone.LinphoneManager;
import org.linphone.R;
import org.linphone.core.Address;
import org.linphone.core.ChatRoom;
import org.linphone.core.Core;
import org.linphone.core.Factory;
import org.linphone.core.Participant;
import org.linphone.core.ParticipantDevice;
import org.linphone.utils.LinphoneUtils;
public class DevicesFragment extends Fragment {
private ExpandableListView mExpandableList;
private DevicesAdapter mAdapter;
private Address mLocalSipAddr, mRoomAddr;
private ChatRoom mRoom;
private boolean mOnlyDisplayChilds;
@Nullable
@Override
public View onCreateView(
LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
String localSipUri = getArguments().getString("LocalSipUri");
mLocalSipAddr = Factory.instance().createAddress(localSipUri);
String roomUri = getArguments().getString("RemoteSipUri");
mRoomAddr = Factory.instance().createAddress(roomUri);
}
View view = inflater.inflate(R.layout.chat_devices, container, false);
mOnlyDisplayChilds = false;
mExpandableList = view.findViewById(R.id.devices_list);
mExpandableList.setOnChildClickListener(
new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(
ExpandableListView expandableListView,
View view,
int groupPosition,
int childPosition,
long l) {
ParticipantDevice device =
(ParticipantDevice) mAdapter.getChild(groupPosition, childPosition);
LinphoneManager.getCallManager().inviteAddress(device.getAddress(), true);
return false;
}
});
mExpandableList.setOnGroupClickListener(
new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(
ExpandableListView expandableListView,
View view,
int groupPosition,
long l) {
if (mOnlyDisplayChilds) {
// in this case groups are childs, so call on click
ParticipantDevice device =
(ParticipantDevice) mAdapter.getGroup(groupPosition);
LinphoneManager.getCallManager()
.inviteAddress(device.getAddress(), true);
return true;
} else {
if (mAdapter.getChildrenCount(groupPosition) == 1) {
ParticipantDevice device =
(ParticipantDevice) mAdapter.getChild(groupPosition, 0);
LinphoneManager.getCallManager()
.inviteAddress(device.getAddress(), true);
return true;
}
}
return false;
}
});
initChatRoom();
ImageView backButton = view.findViewById(R.id.back);
backButton.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View view) {
((ChatActivity) getActivity()).goBack();
}
});
return view;
}
@Override
public void onResume() {
super.onResume();
initValues();
if (LinphoneManager.getInstance().hasLastCallSasBeenRejected()) {
LinphoneManager.getInstance().lastCallSasRejected(false);
LinphoneUtils.showTrustDeniedDialog(getActivity());
}
}
private void initChatRoom() {
Core core = LinphoneManager.getCore();
mRoom = core.getChatRoom(mRoomAddr, mLocalSipAddr);
}
private void initValues() {
if (mAdapter == null) {
mAdapter = new DevicesAdapter(getActivity());
mExpandableList.setAdapter(mAdapter);
}
if (mRoom == null) {
initChatRoom();
}
if (mRoom != null && mRoom.getNbParticipants() > 0) {
ArrayList participantLists = new ArrayList<>();
// Group position 0 is reserved for ME participant & devices
participantLists.add(mRoom.getMe());
for (Participant participant : mRoom.getParticipants()) {
participantLists.add(participant);
}
mAdapter.updateListItems(participantLists);
}
}
}