Advertisement
Guest User

Untitled

a guest
Aug 29th, 2014
298
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.67 KB | None | 0 0
  1. AudioManager manager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
  2. manager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
  3.  
  4. package my.package;
  5. import android.content.BroadcastReceiver;
  6. import android.content.Context;
  7. import android.content.Intent;
  8. import android.content.SharedPreferences;
  9. import android.database.Cursor;
  10. import android.media.AudioManager;
  11. import android.os.Bundle;
  12. import android.preference.PreferenceManager;
  13. import android.provider.CallLog;
  14. import android.telephony.TelephonyManager;
  15. import android.util.Log;
  16.  
  17. public class PhoneReceiver extends BroadcastReceiver {
  18.  
  19. private DbHelperAdapter mDbHelper;
  20. private DbHelperAdapter mDbHelperFive;
  21. private DbHelperAdapter mDbHelperSix;
  22. private static final int RINGER_MODE_SILENT = 0;
  23. private static final int RINGER_MODE_VIBRATE = 1;
  24. private static final int RINGER_MODE_NORMAL = 2;
  25. public static final String PREFS_NAME = "MyPrefsFile";
  26.  
  27. int indexOfCurrentNumber = 0;
  28.  
  29. private Context context;
  30.  
  31. @Override
  32. public void onReceive(Context context, Intent intent) {
  33. RingerMode ringMode = new RingerMode();
  34. Log.i("jens", "RingerMode: "+ringMode.getRingerMode(context));
  35. this.context = context;
  36. Bundle extras = intent.getExtras();
  37. //AudioManager manager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
  38.  
  39. SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME,
  40. Context.MODE_PRIVATE);
  41. SharedPreferences.Editor editor = prefs.edit();
  42. int incommingcall = 0;
  43. int incommingcallanswered = 0;
  44.  
  45. incommingcallanswered = prefs.getInt("incommingcallanswered", 0);
  46. incommingcall = prefs.getInt("incommingcall", 0);
  47. //boolean prefCallLogStatus = prefs.getBoolean(SettingsActivity.KEY_PREF_CALLLOG, false);
  48. int prefMissedCallsLimit = prefs.getInt("missedCallInCallLog", 3);
  49. int prefMinutesCallInCallLog = prefs.getInt("minutesCallInCallLog", 3);
  50.  
  51. SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
  52. boolean prefCallLogStatus = sp.getBoolean(SettingsActivity.KEY_PREF_CALLLOG, false);
  53.  
  54. Log.i("jens", "prefCallLogStatus: "+prefCallLogStatus);
  55. Log.i("jens", "prefMissedCallsLimit: "+prefMissedCallsLimit);
  56. //SharedPreferences sharedPref = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
  57. // If there has been an incomming call
  58.  
  59. if (extras != null) {
  60. String state = extras.getString(TelephonyManager.EXTRA_STATE);
  61.  
  62. Log.i("jens", "phone state: "+state);
  63. //User ended call
  64. if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
  65.  
  66. if (incommingcall == 1 || incommingcallanswered == 1){
  67.  
  68. try {
  69. //when Idle i.e no call
  70. //Toast.makeText(context, "Phone state IDLE", Toast.LENGTH_LONG).show();
  71. //SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME,
  72. // Context.MODE_PRIVATE);
  73. int ringermode = 0;
  74. ringermode = prefs.getInt("oldringermode", -1);
  75. RingerMode setR = new RingerMode();
  76. Log.i("jens", "ringermode value: "+ringermode);
  77. //Change profile back to previous state
  78. if (ringermode == RINGER_MODE_NORMAL) {
  79. //AudioManager manager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
  80. AudioManager manager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
  81. manager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
  82. //setR.setRingerMode(context, RINGER_MODE_NORMAL);
  83. //manager.setRingerMode(RINGER_MODE_NORMAL);
  84. }else if (ringermode == RINGER_MODE_SILENT) {
  85. //AudioManager manager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
  86. AudioManager manager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
  87. manager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
  88. //setR.setRingerMode(context, RINGER_MODE_SILENT);
  89. //manager.setRingerMode(RINGER_MODE_SILENT);
  90. }else if (ringermode == RINGER_MODE_VIBRATE) {
  91. //AudioManager manager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
  92. AudioManager manager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
  93. manager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
  94.  
  95. //manager.setRingerMode(RINGER_MODE_VIBRATE);
  96. }else{
  97. //Failed
  98. Log.e("DEBUG", "Failed to reset ringermode in PhoneReceiver");
  99.  
  100. }
  101. //Log.i("jens", "Ringermode in IDLE: "+manager.getRingerMode());
  102. //Change shared preference to show not imcomming call
  103. editor.putInt("incommingcall", 0);
  104. editor.putInt("incommingcallanswered", 0);
  105. // Commit the edits!
  106. editor.commit();
  107. } catch (Exception e) {
  108. Log.i("********************************", ""+e);
  109. }
  110.  
  111.  
  112. }else{
  113. //If not an incomming call
  114. editor.putInt("incommingcall", 0);
  115. editor.commit();
  116. }
  117. }
  118.  
  119.  
  120. else if (state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) {
  121. Log.i("********************************", "Phone state OFFHOOK");
  122. //Toast.makeText(context, "Phone state OFFHOOK", Toast.LENGTH_LONG).show();
  123. //when Off hook i.e in call
  124. //Make intent and start your service here
  125. incommingcall = prefs.getInt("incommingcall", -1);
  126.  
  127. //Incomming call or not
  128. if (incommingcall == 1){
  129. editor.putInt("incommingcallanswered", 1);
  130. }else{
  131. editor.putInt("incommingcallanswered", 0);
  132. editor.putInt("incommingcall", 0);
  133. }
  134.  
  135. // Commit the edits!
  136. editor.commit();
  137.  
  138. //Toast.makeText(context, "Phone state Off hook", Toast.LENGTH_LONG).show();
  139. }
  140.  
  141.  
  142. //Phone is ringing
  143. else if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
  144. Log.i("jens", "Phone state RINGING");
  145. mDbHelper = new DbHelperAdapter(context);
  146. try {
  147. String incomingPhoneNumber = extras
  148. .getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
  149. Log.i("jens", "bundle number"+incomingPhoneNumber);
  150.  
  151. //check if phonenumbers is in whitelist in database (phonenumbers table)
  152.  
  153.  
  154. mDbHelper.open();
  155.  
  156. // Check if the calling number is in the white list
  157. Cursor cur = mDbHelper.fetchActiveNormalList(incomingPhoneNumber);
  158.  
  159. //count to see if the number is in the whitelist
  160. int i = cur.getCount();
  161. // Fetch the index of the Current number
  162. while (cur.moveToNext())
  163. {
  164. indexOfCurrentNumber = cur.getInt(0);
  165. }
  166. cur.close();
  167. mDbHelper.close();
  168.  
  169. ////check if denyphonenumbers is in blacklist in database (denyphonenumbers table)
  170. mDbHelperFive = new DbHelperAdapter(context);
  171. mDbHelperFive.open();
  172.  
  173. // Check if the calling number is in the white list
  174. Cursor cursorFive = mDbHelperFive.fetchActiveSilentList(incomingPhoneNumber);
  175.  
  176. //count to see if there is one number in the list
  177. int l = cursorFive.getCount();
  178. cursorFive.close();
  179. mDbHelperFive.close();
  180.  
  181.  
  182. ////check if denyphonenumbers is in blacklist in database (denyphonenumbers table)
  183. mDbHelperSix = new DbHelperAdapter(context);
  184. mDbHelperSix.open();
  185.  
  186. // Check if the calling number is in the white list
  187. Cursor cursorSix = mDbHelperSix.fetchActiveVibrateList(incomingPhoneNumber);
  188.  
  189. //count to see if there is one number in the list
  190. int m = cursorSix.getCount();
  191. cursorSix.close();
  192. mDbHelperSix.close();
  193.  
  194. Log.i("jens", "VALUE of i: "+i);
  195. int listStatus = 0;
  196.  
  197. if (i > 0){
  198. //Number exists in whitelist
  199. listStatus = 1;
  200. }else if (l > 0){
  201. //Number exists in blacklist
  202. listStatus = 2;
  203. }else if (m > 0){
  204. //Number exists in blacklist
  205. listStatus = 3;
  206. }
  207. if (listStatus == 0){
  208. // Call log checkbox is checked in preferences
  209. if (prefCallLogStatus == true){
  210. listStatus = 4;
  211. }
  212. }
  213. Log.i("jens", "VALUE of listStatus: "+listStatus);
  214.  
  215.  
  216. int oldringermode;
  217. RingerMode setR = new RingerMode();
  218. switch (listStatus) {
  219. //case 0:
  220. // Log.i("jens", "Case 0");
  221. // Number exists in whiteList
  222. case 1:
  223. Log.i("jens", "Case 1 Normal : "+i);
  224. //Store old ringermode value in shared preference
  225. oldringermode = setR.getRingerMode(context);
  226. editor.putInt("oldringermode", oldringermode);
  227. editor.putInt("incommingcall", 1);
  228. // Commit the edits!
  229. editor.commit();
  230. // Change ringermode to allow sound
  231.  
  232. setR.setRingerMode(context, RINGER_MODE_NORMAL);
  233.  
  234. break;
  235.  
  236. // Number set to silent
  237. case 2:
  238. Log.i("jens","Case 2 Silent ");
  239. oldringermode = setR.getRingerMode(context);
  240. editor.putInt("oldringermode", oldringermode);
  241. editor.putInt("incommingcall", 1);
  242. // Commit the edits!
  243. editor.commit();
  244. // Change ringermode to block sound
  245.  
  246. setR.setRingerMode(context, RINGER_MODE_SILENT);
  247. //manager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
  248. break;
  249. // Number set to vibrate
  250. case 3:
  251. //number set to vibrate
  252. Log.i("jens","Case 3 Vibrate ");
  253. oldringermode = setR.getRingerMode(context);
  254. editor.putInt("oldringermode", oldringermode);
  255. editor.putInt("incommingcall", 1);
  256. // Commit the edits!
  257. editor.commit();
  258. // Change ringermode to block sound
  259. setR.setRingerMode(context, RINGER_MODE_VIBRATE);
  260. //manager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
  261. break;
  262.  
  263. // Number does not exist in white or black list
  264. case 4:
  265. Log.i("jens", "Case 4 ");
  266. //int minutes = 3; // The number of minutes to be fetched from the callLog
  267. long timestamp = System.currentTimeMillis();
  268. timestamp = timestamp - (60000 * prefMinutesCallInCallLog); // The number of minutes to be fetched from the callLog
  269.  
  270. String projection[] = new String[] {CallLog.Calls.NUMBER, CallLog.Calls.TYPE, CallLog.Calls.DATE };
  271. String selection = CallLog.Calls.NUMBER+" = '" + incomingPhoneNumber +"' AND " + CallLog.Calls.DATE + " > "+ timestamp + " " ;
  272. //String selectionArgs[] = new String[] { (String.valueOf(CallLog.Calls.INCOMING_TYPE)) , (resetDate) };
  273. Log.i("jens", "selection: "+selection);
  274. // Fetch last three minutes from callLog
  275. Cursor managedCursor = context.getContentResolver().query(android.provider.CallLog.Calls.CONTENT_URI, projection,
  276. selection , null, null);
  277.  
  278. int responseCount = managedCursor.getCount();
  279. Log.i("jens","responseCount: "+responseCount);
  280. Log.i("jens","prefMissedCallsLimit: "+prefMissedCallsLimit);
  281. // If there is more than X calls in callLog
  282. if (responseCount > (prefMissedCallsLimit-1))
  283. {
  284. Log.i("jens","responseCount > (prefMissedCallsLimit-1) setting normal" );
  285. oldringermode = setR.getRingerMode(context);
  286. editor.putInt("oldringermode", oldringermode);
  287. editor.putInt("incommingcall", 1);
  288. // Commit the edits!
  289. editor.commit();
  290. // Change ringermode to block sound
  291. setR.setRingerMode(context, RINGER_MODE_NORMAL);
  292. //manager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
  293.  
  294. }
  295. break;
  296.  
  297. default: listStatus = 0;
  298. Log.i("jens", "No Case");
  299. break;
  300. }
  301.  
  302. } catch (Exception e) {
  303. // TODO Auto-generated catch block
  304. Log.i("jens", ""+e);
  305. }
  306. mDbHelper.close();
  307. Log.i("jens", "Phone state RINGING stopped");
  308. }
  309. }
  310. }
  311. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement