* #30525: changed incoming call screen
diff --git a/src/com/savoirfairelinux/sflphone/client/CallActivity.java b/src/com/savoirfairelinux/sflphone/client/CallActivity.java
index 1effb7b..1cf7e55 100644
--- a/src/com/savoirfairelinux/sflphone/client/CallActivity.java
+++ b/src/com/savoirfairelinux/sflphone/client/CallActivity.java
@@ -184,23 +184,8 @@
 
     @Override
     protected void onDestroy() {
-
         unregisterReceiver(receiver);
-
-        try {
-            service.createNotification();
-        } catch (RemoteException e) {
-            Log.e(TAG, e.toString());
-        }
-        // Log.i(TAG, "Destroying Call Activity for call " + mCall.getCallId());
-        // LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
-        try {
-            service.destroyNotification();
-        } catch (RemoteException e) {
-            Log.e(TAG, e.toString());
-        }
         unbindService(mConnection);
-
         super.onDestroy();
     }
 
diff --git a/src/com/savoirfairelinux/sflphone/client/SFLPhoneHomeActivity.java b/src/com/savoirfairelinux/sflphone/client/SFLPhoneHomeActivity.java
index c976eb6..f8814f8 100644
--- a/src/com/savoirfairelinux/sflphone/client/SFLPhoneHomeActivity.java
+++ b/src/com/savoirfairelinux/sflphone/client/SFLPhoneHomeActivity.java
@@ -116,13 +116,13 @@
     @Override
     protected void onSaveInstanceState(Bundle bundle) {
         super.onSaveInstanceState(bundle);
-        for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
-            try {
-                getFragmentManager().putFragment(bundle, mSectionsPagerAdapter.getClassName(i), mSectionsPagerAdapter.getItem(i));
-            } catch (IllegalStateException e) {
-                Log.e(TAG, "fragment=" + mSectionsPagerAdapter.getItem(i));
-            }
-        }
+//        for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
+//            try {
+//                getFragmentManager().putFragment(bundle, mSectionsPagerAdapter.getClassName(i), mSectionsPagerAdapter.getItem(i));
+//            } catch (IllegalStateException e) {
+//                Log.e(TAG, "fragment=" + mSectionsPagerAdapter.getItem(i));
+//            }
+//        }
 
         getFragmentManager().putFragment(bundle, "ContactsListFragment", mContactsFragment);
         Log.w(TAG, "onSaveInstanceState()");
@@ -146,6 +146,9 @@
             bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
         }
         
+        if(savedInstanceState != null){
+            mContactsFragment = (ContactListFragment) getFragmentManager().getFragment(savedInstanceState, "ContactsListFragment");
+        }
         if (mContactsFragment == null) {
             mContactsFragment = new ContactListFragment();
             Log.w(TAG, "Recreated mContactListFragment=" + mContactsFragment);
@@ -298,12 +301,12 @@
     @Override
     protected void onDestroy() {
         /* stop the service, if no other bound user, no need to check if it is running */
-        try {
-            service.createNotification();
-
-        } catch (RemoteException e) {
-            Log.e(TAG, e.toString());
-        }
+//        try {
+//            service.createNotification();
+//
+//        } catch (RemoteException e) {
+//            Log.e(TAG, e.toString());
+//        }
         if (mBound) {
             Log.i(TAG, "onDestroy: Unbinding service...");
 
diff --git a/src/com/savoirfairelinux/sflphone/fragments/CallFragment.java b/src/com/savoirfairelinux/sflphone/fragments/CallFragment.java
index 919e1da..f7a75fd 100644
--- a/src/com/savoirfairelinux/sflphone/fragments/CallFragment.java
+++ b/src/com/savoirfairelinux/sflphone/fragments/CallFragment.java
@@ -315,7 +315,7 @@
         }
 
         model.clearAttractors();
-//        model.addAttractor(new Attractor(new PointF(model.width * .2f, model.height * 0.9f), ATTRACTOR_SIZE, new Attractor.Callback() {
+//        model.addAttractor(new Attractor(new PointF(model.width * 0.9f, model.height * 0.1f), ATTRACTOR_SIZE, new Attractor.Callback() {
 //            @Override
 //            public boolean onBubbleSucked(Bubble b) {
 //                Log.w(TAG, "Bubble sucked ! ");
@@ -378,10 +378,13 @@
 
         mCallbacks.startTimer();
 
-        getBubbleFor(conf.getParticipants().get(0), model.width / 2, model.height / 2);
+        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(4 * model.width / 5, model.height / 2), ATTRACTOR_SIZE, new Attractor.Callback() {
+        model.addAttractor(new Attractor(new PointF(model.width / 2, model.height / 2), ATTRACTOR_SIZE, new Attractor.Callback() {
             @Override
             public boolean onBubbleSucked(Bubble b) {
 
@@ -392,14 +395,6 @@
                 return false;
             }
         }, call_icon));
-        model.addAttractor(new Attractor(new PointF(model.width / 5, model.height / 2), ATTRACTOR_SIZE, new Attractor.Callback() {
-            @Override
-            public boolean onBubbleSucked(Bubble b) {
-                mCallbacks.onCallRejected(conf.getParticipants().get(0));
-                bubbleRemoved(b);
-                return true;
-            }
-        }, hangup_icon));
     }
 
     private void initOutGoingCallDisplay() {
diff --git a/src/com/savoirfairelinux/sflphone/fragments/DialingFragment.java b/src/com/savoirfairelinux/sflphone/fragments/DialingFragment.java
index b9d38a6..f3399c1 100644
--- a/src/com/savoirfairelinux/sflphone/fragments/DialingFragment.java
+++ b/src/com/savoirfairelinux/sflphone/fragments/DialingFragment.java
@@ -104,9 +104,7 @@
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
-        Log.i(TAG,"Create History Fragment");
         super.onCreate(savedInstanceState);
-
     }
 
     @Override
diff --git a/src/com/savoirfairelinux/sflphone/model/BubbleModel.java b/src/com/savoirfairelinux/sflphone/model/BubbleModel.java
index 8c68499..1ad013e 100644
--- a/src/com/savoirfairelinux/sflphone/model/BubbleModel.java
+++ b/src/com/savoirfairelinux/sflphone/model/BubbleModel.java
@@ -95,11 +95,12 @@
 		for(int i=0, n=bubbles.size(); i<n; i++) {
 			Bubble b = bubbles.get(i);
 			
-			if(b.markedToDie){
+            if (b.markedToDie){
 			    continue;
 			}
 
 			if(!b.dragged) {
+			    
 				float bx=b.getPosX(), by=b.getPosY();
 
 				Attractor attractor = null;
@@ -171,8 +172,10 @@
 				//	Log.w(TAG, "update dx="+dt+" dy="+dy);
 				b.setPos((float)(bx+dx), (float)(by+dy));
 
+//				Log.i(TAG,"Model:");
 				if(attractor != null && attractor_dist < attractor_dist_suck*attractor_dist_suck) {
 					b.dragged = false;
+					Log.i(TAG,"Model:Sucking");
 					if(attractor.callback.onBubbleSucked(b)) {
 						bubbles.remove(b);
 						n--;
diff --git a/src/com/savoirfairelinux/sflphone/model/BubblesView.java b/src/com/savoirfairelinux/sflphone/model/BubblesView.java
index 9f61622..573013e 100644
--- a/src/com/savoirfairelinux/sflphone/model/BubblesView.java
+++ b/src/com/savoirfairelinux/sflphone/model/BubblesView.java
@@ -40,8 +40,12 @@
 import android.graphics.LinearGradient;

 import android.graphics.Paint;

 import android.graphics.Paint.Align;

+import android.graphics.Paint.Style;

+import android.graphics.PorterDuffXfermode;

+import android.graphics.RadialGradient;

 import android.graphics.RectF;

 import android.graphics.Shader.TileMode;

+import android.graphics.Xfermode;

 import android.os.Handler;

 import android.os.Message;

 import android.util.AttributeSet;

@@ -270,26 +274,35 @@
                     // Draw red gradient around to hang up call

                     // canvas.drawColor(Color.RED);

 

-                    LinearGradient grTop = new LinearGradient(0, 0, 0, 40, Color.RED, Color.WHITE, TileMode.CLAMP);

+                    // LinearGradient grTop = new LinearGradient(0, 0, 0, 40, Color.RED, Color.WHITE, TileMode.CLAMP);

+                    // RadialGradient gr = new RadialGradient(model.width/2, model.height/2, model.width/2, Color.WHITE, Color.RED, TileMode.CLAMP);

                     Paint p = new Paint();

                     p.setDither(true);

-                    p.setShader(grTop);

-                    canvas.drawRect(new RectF(0, 0, model.width, 40), p);

+                    // p.setShader(gr);

+                    p.setColor(getResources().getColor(R.color.holo_red_light));

+                    // p.setXfermode(new PorterDuffXfermode(Mode.))

+                    p.setStyle(Style.STROKE);

+                    // canvas.drawRect(new RectF(0, 0, model.width, 40), p);

+                    p.setStrokeWidth(20);

 

-                    LinearGradient grBottom = new LinearGradient(0, model.height, 0, model.height - 40, Color.RED, Color.WHITE, TileMode.CLAMP);

-                    p.setDither(true);

-                    p.setShader(grBottom);

-                    canvas.drawRect(new RectF(0, model.height - 40, model.width, model.height), p);

+                    canvas.drawRect(new RectF(10, 10, model.width - 10, model.height - 10), p);

 

-                    LinearGradient grLeft = new LinearGradient(0, 0, 40, 0, Color.RED, Color.WHITE, TileMode.CLAMP);

-                    p.setDither(true);

-                    p.setShader(grLeft);

-                    canvas.drawRect(new RectF(0, 0, 40, model.height), p);

+                    // canvas.drawRoundRect(new RectF(0,0,model.width, model.height), 200, 200, p);

 

-                    LinearGradient grRight = new LinearGradient(model.width, 0, model.width - 40, 0, Color.RED, Color.WHITE, TileMode.CLAMP);

-                    p.setDither(true);

-                    p.setShader(grRight);

-                    canvas.drawRect(new RectF(model.width - 40, 0, model.width, model.height), p);

+                    // LinearGradient grBottom = new LinearGradient(0, model.height, 0, model.height - 40, Color.RED, Color.WHITE, TileMode.CLAMP);

+                    // p.setDither(true);

+                    // p.setShader(grBottom);

+                    // canvas.drawRect(new RectF(0, model.height - 40, model.width, model.height), p);

+                    //

+                    // LinearGradient grLeft = new LinearGradient(0, 0, 40, 0, Color.RED, Color.WHITE, TileMode.CLAMP);

+                    // p.setDither(true);

+                    // p.setShader(grLeft);

+                    // canvas.drawRect(new RectF(0, 0, 40, model.height), p);

+                    //

+                    // LinearGradient grRight = new LinearGradient(model.width, 0, model.width - 40, 0, Color.RED, Color.WHITE, TileMode.CLAMP);

+                    // p.setDither(true);

+                    // p.setShader(grRight);

+                    // canvas.drawRect(new RectF(model.width - 40, 0, model.width, model.height), p);

 

                     // tryMe.setColor(getResources().getColor(R.color.lighter_gray));

                     // tryMe.setStyle(Paint.Style.FILL);

@@ -358,7 +371,7 @@
 

     @Override

     public boolean onTouch(View v, MotionEvent event) {

-        Log.w(TAG, "onTouch " + event.getAction());

+//        Log.w(TAG, "onTouch " + event.getAction());

 

         int action = event.getActionMasked();

 

@@ -375,7 +388,7 @@
                 if (b.dragged) {

                     b.dragged = false;

                     b.target_scale = 1.f;

-                    if (b.isOnBorder(model.width, model.height)){

+                    if (b.isOnBorder(model.width, model.height)) {

                         b.markedToDie = true;

                         ((CallActivity) callback.getActivity()).onCallEnded(b.associated_call);

                     }

@@ -435,7 +448,7 @@
                 if (!expand.intersects(event.getX(), event.getY())) {

                     expand.retract();

                 } else {

-                    Log.d("Main", "getAction");

+//                    Log.d("Main", "getAction");

                     switch (expand.getAction(event.getX(), event.getY())) {

                     case 0:

                         expand.retract();

@@ -460,7 +473,7 @@
                 }

                 return true;

             }

-            Log.d("Main", "onDown");

+//            Log.d("Main", "onDown");

             for (int i = 0; i < n_bubbles; i++) {

                 Bubble b = bubbles.get(i);

                 if (b.intersects(event.getX(), event.getY()) && !b.expanded) {

@@ -476,13 +489,13 @@
 

         @Override

         public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

-            Log.d("Main", "onFling");

+//            Log.d("Main", "onFling");

             return true;

         }

 

         @Override

         public void onLongPress(MotionEvent e) {

-            Log.d("Main", "onLongPress");

+//            Log.d("Main", "onLongPress");

             if (isDraggingBubble()) {

                 Bubble b = getDraggedBubble(e);

                 b.expand();

@@ -503,7 +516,7 @@
 

         @Override

         public boolean onScroll(MotionEvent e1, MotionEvent event, float distanceX, float distanceY) {

-            Log.d("Main", "onScroll");

+//            Log.d("Main", "onScroll");

             List<Bubble> bubbles = model.getBubbles();

             final int n_bubbles = bubbles.size();

             long now = System.nanoTime();

@@ -526,13 +539,13 @@
 

         @Override

         public void onShowPress(MotionEvent e) {

-            Log.d("Main", "onShowPress");

+//            Log.d("Main", "onShowPress");

 

         }

 

         @Override

         public boolean onSingleTapUp(MotionEvent e) {

-            Log.d("Main", "onSingleTapUp");

+//            Log.d("Main", "onSingleTapUp");

             return true;

         }

     }