Android Open Source - wiki-contacts-android Call State Listener






From Project

Back to project page wiki-contacts-android.

License

The source code is released under:

Apache License

If you think the Android project wiki-contacts-android listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.kahkong.wikicontacts.subcontroller;
/*from  w  ww. j a  v  a 2s .  c o m*/
import com.kahkong.wikicontacts.callback.OnCompleteListener;
import com.kahkong.wikicontacts.modal.Contact;
import com.kahkong.wikicontacts.service.ContactService;
import com.kahkong.wikicontacts.service.ContactServiceImpl;
import com.kahkong.wikicontacts.service.PhoneBookService;
import com.kahkong.wikicontacts.service.PhoneBookServiceImpl;
import com.kahkong.wikicontacts.service.WebService;
import com.kahkong.wikicontacts.service.WebServiceImpl;

import android.content.Context;
import android.graphics.PixelFormat;
import android.os.Handler;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;

/**
 * 
 * @author Poh Kah Kong
 *
 */
public class CallStateListener extends PhoneStateListener {
  private Context context;
  private PhoneBookService phoneBookService = PhoneBookServiceImpl.getInstance();
  private ContactService contactService = ContactServiceImpl.getInstance();
  private WebService webService = WebServiceImpl.getInstance();
  private TelephonyManager telephonyManager;
  private WindowManager windowManager;
  private LayoutParams windowManagerParams;
  private IncomingContactLayout incomingContactLayout;

  public CallStateListener(Context context) {
    this.context = context;
    telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);  
    windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    windowManagerParams = new WindowManager.LayoutParams(
        LayoutParams.MATCH_PARENT,
        LayoutParams.MATCH_PARENT, 
        WindowManager.LayoutParams.TYPE_SYSTEM_ALERT |
        WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
        WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL|
        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
        PixelFormat.TRANSLUCENT);
  }

  public void register() {
    if (telephonyManager==null) {
      return;
    }
    telephonyManager.listen(this, PhoneStateListener.LISTEN_CALL_STATE);
  }

  public void unregister() {
    if (telephonyManager==null) {
      return;
    }
    telephonyManager.listen(this, PhoneStateListener.LISTEN_NONE);
  }

  @Override
  public void onCallStateChanged(int state, final String number) {
    super.onCallStateChanged(state, number);
    switch (state) {
    case TelephonyManager.CALL_STATE_RINGING:
      final Handler handler = new Handler();
          handler.postDelayed(new Runnable() {
              @Override
              public void run() {                              
                addContactView(number);
              }
          }, 1000);              
      break;
    case TelephonyManager.CALL_STATE_IDLE:
    case TelephonyManager.CALL_STATE_OFFHOOK:
      cancel();
      break;
    }        
  }

  private void addContactView(final String number) {
    if (phoneBookService.isContactExists(number)) { // contact in phonebook
      return;
    }    
    incomingContactLayout = new IncomingContactLayout(context);    
    windowManager.addView(incomingContactLayout, windowManagerParams);    
    incomingContactLayout.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View view) {            
        cancel();            
      }          
    });
    
    contactService.getContact(number, new OnCompleteListener() {
      @Override
      public void onComplete(Object[] objects) {
        Contact contact = (Contact) objects[0];
        if (contact==null) { // contact not in database
          cancel();
          return;
        }          
        incomingContactLayout.setContact(contact, number);            
      }      
    });
  }

  private void cancel() {
    webService.svcCancel();
    if (incomingContactLayout==null) {
      return;
    }
    windowManager.removeView(incomingContactLayout);
    incomingContactLayout = null;
  }
}




Java Source Code List

com.kahkong.wikicontacts.callback.OnChangeListener.java
com.kahkong.wikicontacts.callback.OnClickListener.java
com.kahkong.wikicontacts.callback.OnCompleteListener.java
com.kahkong.wikicontacts.callback.OnEventListener.java
com.kahkong.wikicontacts.callback.OnTimeOutListener.java
com.kahkong.wikicontacts.callback.Validator.java
com.kahkong.wikicontacts.controller.AddEditContactActivity.java
com.kahkong.wikicontacts.controller.CallDetectService.java
com.kahkong.wikicontacts.controller.EditContactActivity.java
com.kahkong.wikicontacts.controller.SearchActivity.java
com.kahkong.wikicontacts.controller.TestActivity.java
com.kahkong.wikicontacts.controller.UpdateEditContactActivity.java
com.kahkong.wikicontacts.form.EditTextForm.java
com.kahkong.wikicontacts.form.ImageUploadForm.java
com.kahkong.wikicontacts.form.MultiEditTextForm.java
com.kahkong.wikicontacts.form.OptionsForm.java
com.kahkong.wikicontacts.form.RadioGroupForm.java
com.kahkong.wikicontacts.form.SpinnerForm.java
com.kahkong.wikicontacts.form.TagsForm.java
com.kahkong.wikicontacts.link.EmailLink.java
com.kahkong.wikicontacts.link.Link.java
com.kahkong.wikicontacts.link.NumberLink.java
com.kahkong.wikicontacts.link.TagLink.java
com.kahkong.wikicontacts.link.UrlLink.java
com.kahkong.wikicontacts.modal.ContactAndImage.java
com.kahkong.wikicontacts.modal.Contact.java
com.kahkong.wikicontacts.modal.CountryCode.java
com.kahkong.wikicontacts.modal.CountryCodesWithSelect.java
com.kahkong.wikicontacts.service.ContactServiceImpl.java
com.kahkong.wikicontacts.service.ContactService.java
com.kahkong.wikicontacts.service.CountryCodeServiceImpl.java
com.kahkong.wikicontacts.service.CountryCodeService.java
com.kahkong.wikicontacts.service.ImageServiceImpl.java
com.kahkong.wikicontacts.service.ImageService.java
com.kahkong.wikicontacts.service.IntentServiceImpl.java
com.kahkong.wikicontacts.service.IntentService.java
com.kahkong.wikicontacts.service.NotificationServiceImpl.java
com.kahkong.wikicontacts.service.NotificationService.java
com.kahkong.wikicontacts.service.PhoneBookServiceImpl.java
com.kahkong.wikicontacts.service.PhoneBookService.java
com.kahkong.wikicontacts.service.PreferencesServiceImpl.java
com.kahkong.wikicontacts.service.PreferencesService.java
com.kahkong.wikicontacts.service.ResourceServiceImpl.java
com.kahkong.wikicontacts.service.ResourceService.java
com.kahkong.wikicontacts.service.ValidationServiceImpl.java
com.kahkong.wikicontacts.service.ValidationService.java
com.kahkong.wikicontacts.service.WebServiceImpl.java
com.kahkong.wikicontacts.service.WebService.java
com.kahkong.wikicontacts.subcontroller.CallStateListener.java
com.kahkong.wikicontacts.subcontroller.FlowLayout.java
com.kahkong.wikicontacts.subcontroller.IncomingContactLayout.java
com.kahkong.wikicontacts.subcontroller.InfoDialog.java
com.kahkong.wikicontacts.subcontroller.LoadingDialog.java
com.kahkong.wikicontacts.subcontroller.ResultAdaptor.java
com.kahkong.wikicontacts.subcontroller.ViewContactDialog.java
com.kahkong.wikicontacts.subcontroller.ViewFormatter.java