Added back keyboard listener on Chat view

This commit is contained in:
Sylvain Berfini 2017-10-25 16:00:36 +02:00
parent a515fe2f68
commit 3126f3d85d

View file

@ -24,9 +24,11 @@ import android.app.Dialog;
import android.app.Fragment; import android.app.Fragment;
import android.content.CursorLoader; import android.content.CursorLoader;
import android.content.Intent; import android.content.Intent;
import android.content.res.Configuration;
import android.database.Cursor; import android.database.Cursor;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import android.graphics.Rect;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.Environment; import android.os.Environment;
@ -37,6 +39,8 @@ import android.text.TextWatcher;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.WindowManager;
import android.widget.Button; import android.widget.Button;
import android.widget.EditText; import android.widget.EditText;
import android.widget.ImageView; import android.widget.ImageView;
@ -49,6 +53,7 @@ import org.linphone.LinphoneService;
import org.linphone.LinphoneUtils; import org.linphone.LinphoneUtils;
import org.linphone.R; import org.linphone.R;
import org.linphone.activities.LinphoneActivity; import org.linphone.activities.LinphoneActivity;
import org.linphone.compatibility.Compatibility;
import org.linphone.contacts.ContactAddress; import org.linphone.contacts.ContactAddress;
import org.linphone.contacts.ContactsManager; import org.linphone.contacts.ContactsManager;
import org.linphone.contacts.LinphoneContact; import org.linphone.contacts.LinphoneContact;
@ -82,6 +87,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
private ListView mChatEventsList; private ListView mChatEventsList;
private LinearLayout mFilesUploadLayout; private LinearLayout mFilesUploadLayout;
private ViewTreeObserver.OnGlobalLayoutListener mKeyboardListener;
private Uri mImageToUploadUri; private Uri mImageToUploadUri;
private ChatEventsAdapter mMessagesAdapter; private ChatEventsAdapter mMessagesAdapter;
private String mRemoteSipUri; private String mRemoteSipUri;
@ -247,6 +253,10 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
} }
ContactsManager.addContactsListener(this); ContactsManager.addContactsListener(this);
addVirtualKeyboardVisiblityListener();
// Force hide keyboard
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
initChatRoom(); initChatRoom();
displayChatRoomHeader(); displayChatRoomHeader();
displayChatRoomHistory(); displayChatRoomHistory();
@ -255,6 +265,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
@Override @Override
public void onPause() { public void onPause() {
ContactsManager.removeContactsListener(this); ContactsManager.removeContactsListener(this);
removeVirtualKeyboardVisiblityListener();
super.onPause(); super.onPause();
} }
@ -300,6 +311,36 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
} }
} }
private void addVirtualKeyboardVisiblityListener() {
mKeyboardListener = new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect visibleArea = new Rect();
getActivity().getWindow().getDecorView().getWindowVisibleDisplayFrame(visibleArea);
int heightDiff = getActivity().getWindow().getDecorView().getRootView().getHeight() - (visibleArea.bottom - visibleArea.top);
if (heightDiff > 200) {
showKeyboardVisibleMode();
} else {
hideKeyboardVisibleMode();
}
}
};
getActivity().getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(mKeyboardListener);
}
private void removeVirtualKeyboardVisiblityListener() {
Compatibility.removeGlobalLayoutListener(getActivity().getWindow().getDecorView().getViewTreeObserver(), mKeyboardListener);
}
public void showKeyboardVisibleMode() {
LinphoneActivity.instance().hideTabBar(true);
}
public void hideKeyboardVisibleMode() {
LinphoneActivity.instance().hideTabBar(false);
}
private String getRealPathFromURI(Uri contentUri) { private String getRealPathFromURI(Uri contentUri) {
String[] proj = {MediaStore.Images.Media.DATA}; String[] proj = {MediaStore.Images.Media.DATA};
CursorLoader loader = new CursorLoader(getActivity(), contentUri, proj, null, null, null); CursorLoader loader = new CursorLoader(getActivity(), contentUri, proj, null, null, null);
@ -363,7 +404,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
private void displayChatRoomHeader() { private void displayChatRoomHeader() {
Core core = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); Core core = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
if (core == null) return; if (core == null || mChatRoom == null) return;
mRemoteComposing.setVisibility(View.INVISIBLE); mRemoteComposing.setVisibility(View.INVISIBLE);
@ -397,6 +438,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
} }
private void displayChatRoomHistory() { private void displayChatRoomHistory() {
if (mChatRoom == null) return;
mMessagesAdapter = new ChatEventsAdapter(getActivity(), mInflater, mChatRoom.getHistoryEvents(0), mParticipants); mMessagesAdapter = new ChatEventsAdapter(getActivity(), mInflater, mChatRoom.getHistoryEvents(0), mParticipants);
mChatEventsList.setAdapter(mMessagesAdapter); mChatEventsList.setAdapter(mMessagesAdapter);
} }