Home | History | Annotate | Download | only in btservice
      1 package com.android.bluetooth.btservice;
      2 
      3 import android.bluetooth.BluetoothAdapter;
      4 import android.content.BroadcastReceiver;
      5 import android.content.Context;
      6 import android.content.Intent;
      7 import android.content.IntentFilter;
      8 import android.database.ContentObserver;
      9 import android.os.Handler;
     10 import android.provider.Settings;
     11 
     12 /**
     13  * This helper class monitors the state of the enabled profiles and will update and restart
     14  * the adapter when necessary.
     15  */
     16 public class ProfileObserver extends ContentObserver {
     17     private Context mContext;
     18     private AdapterService mService;
     19     private AdapterStateObserver mStateObserver;
     20 
     21     public ProfileObserver(Context context, AdapterService service, Handler handler) {
     22         super(handler);
     23         mContext = context;
     24         mService = service;
     25         mStateObserver = new AdapterStateObserver(this);
     26     }
     27 
     28     public void start() {
     29         mContext.getContentResolver().registerContentObserver(
     30                 Settings.Global.getUriFor(Settings.Global.BLUETOOTH_DISABLED_PROFILES), false,
     31                 this);
     32     }
     33 
     34     private void onBluetoothOff() {
     35         mContext.unregisterReceiver(mStateObserver);
     36         Config.init(mContext);
     37         mService.enable();
     38     }
     39 
     40     public void stop() {
     41         mContext.getContentResolver().unregisterContentObserver(this);
     42     }
     43 
     44     @Override
     45     public void onChange(boolean selfChange) {
     46         if (mService.isEnabled()) {
     47             mContext.registerReceiver(mStateObserver,
     48                     new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED));
     49             mService.disable();
     50         }
     51     }
     52 
     53     private static class AdapterStateObserver extends BroadcastReceiver {
     54         private ProfileObserver mProfileObserver;
     55 
     56         public AdapterStateObserver(ProfileObserver observer) {
     57             mProfileObserver = observer;
     58         }
     59 
     60         @Override
     61         public void onReceive(Context context, Intent intent) {
     62             if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(intent.getAction())
     63                     && intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1)
     64                     == BluetoothAdapter.STATE_OFF) {
     65                 mProfileObserver.onBluetoothOff();
     66             }
     67         }
     68     }
     69 }
     70