16

I want to show some information in the middle of a call in that screen like weather info, or facebook updates like that, can anyone help me.

See the screenshot below of the update that I want.

enter image description here

Vadim Kotov
  • 8,084
  • 8
  • 48
  • 62
Pinki
  • 21,723
  • 16
  • 55
  • 88

1 Answers1

21

check this stack overflow answer.In that answer you can see a toast showing different call states.Instead of that toast make a custom toast and show your updates via that Custom toast.

if you want show an activity instead of toast try this code in your CustomPhoneStateListener

 public class CustomPhoneStateListener extends PhoneStateListener {

      ActivityManager activityManager;
      Intent i1;
      public CustomPhoneStateListener(Context context) {
          super();
          this.context = context;
          i1 = new Intent(context, TelephoneyWithoutToastActivity.class);
          i1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      }

      @Override
      public void onCallStateChanged(int state, String incomingNumber) {
          super.onCallStateChanged(state, incomingNumber);

          switch (state) {
          case TelephonyManager.CALL_STATE_IDLE:
              //when Idle i.e no call
              Toast.makeText(context, "Phone state Idle", Toast.LENGTH_LONG).show();

              break;
          case TelephonyManager.CALL_STATE_OFFHOOK:

              //when Off hook i.e in call
              //Make intent and start your service here
              Toast.makeText(context, "Phone state Off hook", Toast.LENGTH_LONG).show();

              break;
          case TelephonyManager.CALL_STATE_RINGING:

              ActivityManager localActivityManager = (ActivityManager) this.context.getSystemService("activity");
              for (String str = ((ActivityManager.RunningTaskInfo) localActivityManager.getRunningTasks(1).get(0)).topActivity.flattenToString();; str = ((ActivityManager.RunningTaskInfo) localActivityManager.getRunningTasks(1).get(0)).topActivity.flattenToString()) {
                  if ((!str.contains("com.android.phone.InCallScreen")))
                      continue;
                  Log.d("IncomingCallPlus", "*****************************************************");   
                  context.startActivity(i1);
                  return;
              }    

          default:
              break;
          }
      }    
  }

add this to your activity for activating touch on the default calling screen.

getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);

this function will give touch on both caller screen and popup

public void addInvitePopup(final String number, Context c) {

    //check if pref is ok with invite in call
    // if(!Preferences.getInstance(c.getInviteInCall())){return ; }
    // sets the WindowManager

    WindowManager wm = (WindowManager) c.getSystemService(Context.WINDOW_SERVICE);

    WindowManager.LayoutParams params = new WindowManager.LayoutParams(
        LayoutParams.WRAP_CONTENT,
        LayoutParams.WRAP_CONTENT,
        WindowManager.LayoutParams.TYPE_SYSTEM_ALERT |
        WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
        WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
        PixelFormat.TRANSLUCENT);
    params.x = 250;
    params.height = LayoutParams.WRAP_CONTENT;
    params.width = LayoutParams.WRAP_CONTENT;
    params.format = PixelFormat.TRANSLUCENT;
    final Context ct = c;

    params.gravity = Gravity.TOP;
    params.setTitle("Testing");

    LinearLayout ly = new LinearLayout(c);
    ly.setOrientation(LinearLayout.VERTICAL);

    Button inviteButton = new Button(c);
    inviteButton.setClickable(true);
    inviteButton.setBackgroundDrawable(c.getResources().getDrawable(R.drawable.ic_launcher));

    inviteButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Toast.makeText(v.getContext(), "adding to blacklist..", Toast.LENGTH_LONG).show();
            v.setBackgroundDrawable(ct.getResources().getDrawable(R.drawable.images));
            v.setClickable(false);
            // sendMessage(v, number);

            //Track this event:
            //MixPanelTracking.setPropKeyValue(getApplicationContext(), null, null, "Add friend - During Call");
        }
    });

    inviteButton.setWidth(30);
    inviteButton.setHeight(30);
    //   inviteButton.setLayoutParams(WindowManager.LayoutParams.WRAP_CONTENT,
    //   WindowManager.LayoutParams.WRAP_CONTENT);


    ly.addView(inviteButton);

    wm.addView(ly, params);
    // wm.addView( inviteButton, params);
    Log.i("TTT", "after add view");
}

add this permission in manifest file

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
Community
  • 1
  • 1
Jackson Chengalai
  • 3,907
  • 1
  • 24
  • 39
  • i tried it.i can not find any solution for acivating touch on both activity.if any reference you get let me know..... – Jackson Chengalai May 22 '12 at 09:19
  • i tried it...its works fine.Getting touch on both calling screen and popup...i added the function in answer..add that function in to your customphonestatelistner (under ringing).thanks for ur code and research...:) – Jackson Chengalai May 22 '12 at 11:20
  • i added a addInvitePopup function in the answer.just add that function in customphonestatelistner class and call it like 'case TelephonyManager.CALL_STATE_RINGING: addInvitePopup("hai",c);' from that case in customphonestatelistner(i added that also in answer) – Jackson Chengalai May 22 '12 at 11:42
  • i got that popup on caller screen..i am used 2.2 version device...r u getting that toast when an incoming call coming? – Jackson Chengalai May 23 '12 at 10:06
  • I used above code it works, but When call is ended, Display (Caller screen and custom activity dialog) not being closed, It remains on screen... How to remove that.? – Dharmik Jun 14 '13 at 10:07
  • 1
    what if i want to change display name of incoming call on screen? – Uniruddh Feb 06 '14 at 07:01