package com.integralblue.callerid;
import roboguice.fragment.RoboFragment;
import roboguice.inject.InjectView;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.telephony.PhoneNumberFormattingTextWatcher;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import com.google.inject.Inject;
import com.integralblue.callerid.contacts.ContactsHelper;
public class LookupFragment extends RoboFragment {
@InjectView(R.id.phone_number)
EditText phoneNumber;
@InjectView(R.id.perform_lookup)
View performLookup;
@InjectView(R.id.create_contact)
View createContact;
@InjectView(R.id.call)
View call;
@Inject
ContactsHelper contactsHelper;
LookupAsyncTask currentLookupAsyncTask = null;
//contains the last lookup result
private CallerIDResult callerIDResult = null;
class MainLookupAsyncTask extends LookupAsyncTask {
public MainLookupAsyncTask(Context context, CharSequence phoneNumber) {
super(context, phoneNumber,(ViewGroup) getView().findViewById(R.id.toast_layout_root),true);
}
@Override
protected void onSuccess(CallerIDResult result)
throws Exception {
super.onSuccess(result);
callerIDResult = result;
createContact.setVisibility(callerIDResult==null || contactsHelper.haveContactWithPhoneNumber(callerIDResult.getPhoneNumber())?View.GONE:View.VISIBLE);
call.setVisibility(callerIDResult==null?View.GONE:View.VISIBLE);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.lookup, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
public void lookup(String initialPhoneNumber){
if(! TextUtils.isEmpty(initialPhoneNumber)){
phoneNumber.setText(initialPhoneNumber);
performLookup.performClick();
}
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
phoneNumber.addTextChangedListener(new PhoneNumberFormattingTextWatcher());
performLookup.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// since we're about to start a new lookup,
// we want to cancel any lookups in progress
if (currentLookupAsyncTask != null)
currentLookupAsyncTask.cancel(true);
currentLookupAsyncTask = new MainLookupAsyncTask(getActivity(), phoneNumber.getText());
currentLookupAsyncTask.execute();
}
});
call.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Uri callUri;
if (CallerIDApplication.isUriNumber(callerIDResult.getPhoneNumber())) {
callUri = Uri.fromParts("sip", callerIDResult.getPhoneNumber(), null);
} else {
callUri = Uri.fromParts("tel", callerIDResult.getPhoneNumber(), null);
}
startActivity(new Intent(Intent.ACTION_CALL,callUri));
}
});
createContact.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
startActivity(contactsHelper.createContactEditor(callerIDResult));
}
});
//if a phone number was passed in, look it up
if(savedInstanceState!=null && savedInstanceState.getString("phoneNumber")!=null){
lookup(savedInstanceState.getString("phoneNumber"));
}else if(getArguments() !=null) lookup(getArguments().getString("phoneNumber"));
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("phoneNumber",phoneNumber.getText().toString());
}
}