package cri.sanity; import cri.sanity.util.*; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.DialogInterface.OnCancelListener; import android.content.DialogInterface.OnDismissListener; public class OutgoingReceiver extends BroadcastReceiver implements OnCancelListener, OnDismissListener { private static final String SEP = ":\n "; private static boolean confirmed = false; private static boolean anonym = false; @Override public void onReceive(Context ctx, Intent i) { if(!A.isEnabled()) return; final String num = i.getStringExtra(Intent.EXTRA_PHONE_NUMBER); if(A.empty(num)) return; if(!A.is(K.ANONYM)) { setCallNum(num); return; } final CallFilter cf = new CallFilter(); if(!cf.includes(num, "anonym", true)) { setCallNum(num); return; } if(!A.is(K.ANONYM_CONFIRM)) confirmed = anonym = true; if(confirmed) { confirmed = false; setCallNum(num); if(anonym) { anonym = false; setResultData(A.gets(K.ANONYM_PREFIX)+num); notify(ctx); } return; } setResultData(null); abortBroadcast(); alert(num, cf.searchName(num)); } private static void setCallNum(String num) { if(MainService.isRunning()) return; PhoneReceiver.number = num; if(A.is(K.VIBRATE_PICKUP)) PickupService.start(); } private void alert(final String num, String name) { final String called = (A.empty(name)? "" : A.s(R.string.contact)+SEP+name+"\n\n") + A.s(R.string.phone_number)+SEP+num; final OnDismissListener dismiss = this; final OnCancelListener cancel = this; BlankActivity.postSingleton(new Runnable(){ public void run(){ AlertDialog dlg = Alert.msg( A.s(R.string.ask_anonym_title), called + "\n\n" + A.s(R.string.ask_anonym_msg), new Alert.Click(){ public void on(){ confirmed = anonym = true; Dev.dial(num); }}, new Alert.Click(){ public void on(){ confirmed = true; anonym = false; Dev.dial(num); }}, null, Alert.YESNO, true, BlankActivity.getInstance() ); dlg.setOnCancelListener(cancel); dlg.setOnDismissListener(dismiss); }}); BlankActivity.force = true; Intent i = new Intent(A.app(), BlankActivity.class); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); A.app().startActivity(i); } private static void notify(Context ctx) { if(!A.is(K.ANONYM_NOTIFY)) return; A.toast(ctx, R.string.msg_anonym_dial); } @Override public void onDismiss(DialogInterface dlg) { BlankActivity act = BlankActivity.getInstance(); if(act != null) act.postFinish(); } @Override public void onCancel(DialogInterface dlg) { confirmed = anonym = false; } }