diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 93d8dd9d135acd77595f40e7acbb446f8934ab2c..af1532d0ee795a74a4120e42f892418132c9b640 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -90,7 +90,8 @@ as that of the covered work. <activity android:name="com.savoirfairelinux.sflphone.client.CallActivity" android:label="@string/app_name" - android:screenOrientation="portrait" > + android:screenOrientation="portrait" + android:windowSoftInputMode="adjustPan" > <intent-filter> <action android:name="android.intent.action.CALL_PRIVILEGED" /> diff --git a/src/com/savoirfairelinux/sflphone/fragments/CallFragment.java b/src/com/savoirfairelinux/sflphone/fragments/CallFragment.java index f7a75fd4341395d8548be0150577ad6a0a41e509..f0d6b0266a24bda81bd4235fd8d22d50a0e8edad 100644 --- a/src/com/savoirfairelinux/sflphone/fragments/CallFragment.java +++ b/src/com/savoirfairelinux/sflphone/fragments/CallFragment.java @@ -52,8 +52,11 @@ import android.view.LayoutInflater; import android.view.SurfaceHolder; import android.view.SurfaceHolder.Callback; import android.view.View; +import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.widget.ImageButton; import android.widget.TextView; import android.widget.Toast; @@ -275,7 +278,7 @@ public class CallFragment extends Fragment implements Callback, SensorEventListe @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.frag_call, container, false); + final ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.frag_call, container, false); view = (BubblesView) rootView.findViewById(R.id.main_view); view.setFragment(this); @@ -288,6 +291,15 @@ public class CallFragment extends Fragment implements Callback, SensorEventListe call_icon = BitmapFactory.decodeResource(getResources(), R.drawable.ic_call); transfer_icon = BitmapFactory.decodeResource(getResources(), R.drawable.ic_phones_call_transfer_icon); + ((ImageButton) rootView.findViewById(R.id.dialpad_btn)).setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + InputMethodManager lManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); + lManager.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, InputMethodManager.HIDE_IMPLICIT_ONLY); + } + }); + // Do nothing here, the view is not initialized yet. return rootView; } @@ -381,7 +393,6 @@ public class CallFragment extends Fragment implements Callback, SensorEventListe int radiusCalls = (int) (model.width / 2 - BUBBLE_SIZE); getBubbleFor(myself, model.width / 2, model.height / 2 + radiusCalls); getBubbleFor(conf.getParticipants().get(0), model.width / 2, model.height / 2 - radiusCalls); - model.clearAttractors(); model.addAttractor(new Attractor(new PointF(model.width / 2, model.height / 2), ATTRACTOR_SIZE, new Attractor.Callback() { @@ -505,7 +516,6 @@ public class CallFragment extends Fragment implements Callback, SensorEventListe public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { if (conf.getParticipants().size() == 1) { - if (conf.getParticipants().get(0).isIncoming() && conf.getParticipants().get(0).isRinging()) { initIncomingCallDisplay(); } else { @@ -551,6 +561,9 @@ public class CallFragment extends Fragment implements Callback, SensorEventListe @Override public void surfaceDestroyed(SurfaceHolder holder) { + // check that soft input is hidden + InputMethodManager lManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); + lManager.hideSoftInputFromWindow(view.getWindowToken(), 0); } public BubblesView getBubbleView() { diff --git a/src/com/savoirfairelinux/sflphone/fragments/DialingFragment.java b/src/com/savoirfairelinux/sflphone/fragments/DialingFragment.java index f3399c1523ecb70a5de1066ea2d652d7010f0fba..2e3b030bd0bf6c8b7a76d802ce69eea8152aaf74 100644 --- a/src/com/savoirfairelinux/sflphone/fragments/DialingFragment.java +++ b/src/com/savoirfairelinux/sflphone/fragments/DialingFragment.java @@ -35,7 +35,6 @@ import android.app.Activity; import android.app.Fragment; import android.content.Context; import android.os.Bundle; -import android.util.Log; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; @@ -162,7 +161,6 @@ public class DialingFragment extends Fragment implements OnTouchListener { @Override public boolean onTouch(View v, MotionEvent event) { InputMethodManager lManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); - lManager.showSoftInput(textField.getEdit_text(), 0); textField.setError(null); lManager.hideSoftInputFromWindow(textField.getWindowToken(), 0); return false; diff --git a/src/com/savoirfairelinux/sflphone/model/BubblesView.java b/src/com/savoirfairelinux/sflphone/model/BubblesView.java index c5b0933661c442236115ff915e5bff99d548d427..799d0a0a4a77b549bb5404b0538aee0f26d3ab75 100644 --- a/src/com/savoirfairelinux/sflphone/model/BubblesView.java +++ b/src/com/savoirfairelinux/sflphone/model/BubblesView.java @@ -137,6 +137,10 @@ public class BubblesView extends SurfaceView implements SurfaceHolder.Callback, @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { Log.w(TAG, "surfaceChanged " + width + "-" + height); + if(height < model.height) // probably showing the keyboard, don't move! + return; + + thread.setSurfaceSize(width, height); }