Android Open Source - p1keyboard Bluez I M E Settings






From Project

Back to project page p1keyboard.

License

The source code is released under:

GNU Lesser General Public License

If you think the Android project p1keyboard 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

/* Copyright (C) 2011, Kenneth Skovhede
 * http://www.hexad.dk, opensource@hexad.dk
 * //w w w .j a va 2 s. c  o  m
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 * 
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/
package mobi.omegacentauri.p1keyboard;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.reflect.Constructor;
import java.util.HashMap;
import java.util.Set;
import mobi.omegacentauri.p1keyboard.R;

import android.app.Activity;
import android.app.AlertDialog;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Bundle;
import android.os.PowerManager;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceCategory;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.Preference.OnPreferenceClickListener;
import android.text.Html;
import android.view.inputmethod.InputMethodManager;

public class BluezIMESettings extends PreferenceActivity {

  private static final String SCAN_MARKER = "<scan>";
  private static final int DISCOVER_DEVICE_COMPLETE = 1;
  
  private CheckBoxPreference m_bluetoothActivity;
  private ListPreference[] m_pairedDevices;
  private ListPreference[] m_drivers;
  private Preference[] m_configButtons;
  private Preference m_selectIME;
  private Preference m_helpButton;
  private ListPreference m_donateButton;
  private PreferenceCategory m_devicesCategory;  
  private CheckBoxPreference m_manageBluetooth;
  private ListPreference m_wakelockType;
  private ListPreference m_controllerCount;
  
  private HashMap<String, String> m_pairedDeviceLookup;
  
  private String[] DRIVER_NAMES; 
  private String[] DRIVER_DISPLAYNAMES;;
  
  private Preferences m_prefs;
  
  @SuppressWarnings("unused")
  private Object m_donationObserver;
  private Preference m_licenseButton; 
    
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.bluezimesettings);
        
        m_prefs = new Preferences(this);
        
        m_bluetoothActivity = (CheckBoxPreference)findPreference("blue_activated");
        m_devicesCategory = (PreferenceCategory)findPreference("devices_category");
        m_controllerCount = (ListPreference)findPreference("multidevice_select");
        
        m_pairedDevices = new ListPreference[Preferences.MAX_NO_OF_CONTROLLERS];
      m_drivers = new ListPreference[Preferences.MAX_NO_OF_CONTROLLERS];
      m_configButtons = new Preference[Preferences.MAX_NO_OF_CONTROLLERS];
      
      m_pairedDevices[0] = (ListPreference)findPreference("blue_devices_1");
      m_drivers[0] = (ListPreference)findPreference("blue_drivers_1");
      m_configButtons[0] = (Preference)findPreference("blue_buttons_1");
      
      for(int i = 1; i < Preferences.MAX_NO_OF_CONTROLLERS; i++) {
        m_pairedDevices[i] = new ListPreference(this);
        m_drivers[i] = new ListPreference(this);
        m_configButtons[i] = new Preference(this);
      }
      
        for(int i = 0; i < m_configButtons.length; i++) {
        Intent intent = new Intent(this, ButtonConfiguration.class);
        intent.putExtra(ButtonConfiguration.EXTRA_CONTROLLER, i);
            m_configButtons[i].setIntent(intent);
            m_configButtons[i].setSummary(R.string.preferencelist_configure_keys_long);
          
        }
        
        m_selectIME = (Preference)findPreference("blue_selectime");
        m_helpButton = (Preference)findPreference("blue_help");
        m_licenseButton = (Preference)findPreference("blue_license");
        m_donateButton = (ListPreference)findPreference("donate_button");
        m_manageBluetooth = (CheckBoxPreference)findPreference("blue_autoactivate");
        m_wakelockType = (ListPreference)findPreference("wakelock_type");
        
        //Populate the list, otherwise the app will crash
        m_donateButton.setEntries(new CharSequence[] { getString(R.string.preference_use_paypal) });
        m_donateButton.setEntryValues(new CharSequence[] {"PAYPAL"} );

        m_wakelockType.setEntries(new CharSequence[] { getString(R.string.preference_wakelock_none), getString(R.string.preference_wakelock_full), getString(R.string.preference_wakelock_dim) });
        m_wakelockType.setEntryValues(new CharSequence[] { Preferences.NO_WAKE_LOCK+"", PowerManager.FULL_WAKE_LOCK+"", PowerManager.SCREEN_DIM_WAKE_LOCK+"" } );

        CharSequence[] cnts = new CharSequence[Preferences.MAX_NO_OF_CONTROLLERS];
        for(int i = 0; i < cnts.length; i++) {
          cnts[i] = (i + 1) + "";
        }
        
        m_controllerCount.setEntries(cnts);
        m_controllerCount.setEntryValues(cnts);
        
        try {
          //This code enables the in-app donation system, but does not require it for compilation
          //This is done to avoid polluting the project source with all the boilerplate code
          dalvik.system.PathClassLoader loader = new dalvik.system.PathClassLoader(this.getPackageCodePath(), java.lang.ClassLoader.getSystemClassLoader());

          Class<?> c = loader.loadClass("mobi.omegacentauri.p1keyboard.donation.DonationObserver");
          Constructor<?> cc = c.getDeclaredConstructor(Activity.class);
          
          m_donationObserver = cc.newInstance(this);
        } catch (Exception ex) {
          inAppDonationsEnabled(false);
        }
        
        m_helpButton.setOnPreferenceClickListener(new OnPreferenceClickListener() {
      @Override
      public boolean onPreferenceClick(Preference preference) {
        try {
          String url =  "https://github.com/arpruss/p1keyboard/";
          Intent browse = new Intent( Intent.ACTION_VIEW , Uri.parse( url ) );
            startActivity( browse );      
        } catch (Exception e) {
        }
        
        return false;
      }
    });

        m_donateButton.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
      @Override
      public boolean onPreferenceChange(Preference preference, Object newValue) {
        if (newValue instanceof String && ((String)newValue).equals("PAYPAL"))
        {
          try {
            String url = "https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=paypal%40hexad%2edk&item_name=BluezIME%20Donation&no_shipping=2&no_note=1&tax=0&currency_code=EUR&bn=PP%2dDonationsBF&charset=UTF%2d8";
            Intent browse = new Intent( Intent.ACTION_VIEW , Uri.parse( url ) );
              startActivity( browse );      
          } catch (Exception e) {
          }
        }
        return false;
      }
    });
        
        m_helpButton.setOnPreferenceClickListener(new OnPreferenceClickListener() {
      @Override
      public boolean onPreferenceClick(Preference preference) {
        try {
          String url =  "https://github.com/arpruss/p1keyboard/";
          Intent browse = new Intent( Intent.ACTION_VIEW , Uri.parse( url ) );
            startActivity( browse );      
        } catch (Exception e) {
        }
        
        return false;
      }
    });
        
        m_licenseButton.setOnPreferenceClickListener(new OnPreferenceClickListener() {
      @Override
      public boolean onPreferenceClick(Preference preference) {
        showLicenses();
        
        return false;
      }
    });

        m_manageBluetooth.setChecked(m_prefs.getManageBluetooth());
        m_manageBluetooth.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
      @Override
      public boolean onPreferenceChange(Preference preference, Object newValue) {
        m_prefs.setManageBluetooth((Boolean)newValue);
        return true;
      }
    });

        m_wakelockType.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
      @Override
      public boolean onPreferenceChange(Preference preference, Object newValue) {
        if (newValue instanceof String) {
          int v = -1;
          
          try { v = Integer.parseInt((String)newValue); }
          catch (Throwable t) { }
          
          if (v >= 0) {
            m_prefs.setWakeLock(v);
            return true;
          }
        }
        
        return false;
      }
    });
        
        m_controllerCount.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
      @Override
      public boolean onPreferenceChange(Preference preference, Object newValue) {
        if (newValue instanceof String) {
          int v = -1;
          
          try { v = Integer.parseInt((String)newValue); }
          catch (Throwable t) { }
          
          if (v > 0) {
            m_prefs.setControllerCount(v);
            return true;
          }
        }
        
        return false;
      }
    });
        

        BluetoothAdapter blue = BluetoothAdapter.getDefaultAdapter();
        if (blue == null)
        {
          m_bluetoothActivity.setEnabled(false);
          m_bluetoothActivity.setSummary(R.string.bluetooth_unsupported);
          bluetoothStateMonitor = null;
          
          CharSequence[] entries = new CharSequence[0];
          for(ListPreference p : m_pairedDevices) {
            p.setEntries(entries);
            p.setEntryValues(entries);
            p.setEnabled(false);
          }
          
          for (ListPreference p : m_drivers)
            p.setEnabled(false);
          
          for(Preference p : m_configButtons)
            p.setEnabled(false);
          
          AlertDialog dlg = new AlertDialog.Builder(this).create();
          dlg.setMessage(this.getString(R.string.bluetooth_unsupported));
          dlg.show();
        }
        else
        {          
          m_bluetoothActivity.setChecked(blue.isEnabled());
          m_bluetoothActivity.setEnabled(true);
          
          if (blue.isEnabled()) {
            m_bluetoothActivity.setSummary(R.string.bluetooth_state_on);
          } else {
            m_bluetoothActivity.setSummary(R.string.bluetooth_state_off);
          }
          
          m_bluetoothActivity.setOnPreferenceClickListener(new OnPreferenceClickListener() {
            public boolean onPreferenceClick(Preference preference) {
              
              if (BluetoothAdapter.getDefaultAdapter().isEnabled()) {
                m_bluetoothActivity.setChecked(true);
                ImprovedBluetoothDevice.DeactivateBluetooth(BluezIMESettings.this);
              } else {
                m_bluetoothActivity.setChecked(false);
                ImprovedBluetoothDevice.ActivateBluetooth(BluezIMESettings.this, null);
              }
              return false;
            }
          });
          
          registerReceiver(bluetoothStateMonitor, new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED));
          
          for(ListPreference p : m_pairedDevices) {
            p.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
          @Override
          public boolean onPreferenceChange(Preference preference, Object newValue) {
            int pos = 1;
            for(int i = 0; i < m_pairedDevices.length; i++)
              if (m_pairedDevices[i] == preference) {
                pos = i;
                break;
              }
            
            if (newValue != null && newValue.equals(SCAN_MARKER)) {
              Intent i = new Intent(BluezIMESettings.this, DeviceScanActivity.class);
              i.putExtra(DeviceScanActivity.EXTRA_CONTROLLER, pos);
              startActivityForResult(i, DISCOVER_DEVICE_COMPLETE);
              return false;
            } else {
              String address = (String)newValue;
              
              
              m_prefs.setSelectedDevice(m_pairedDeviceLookup.get(address), address, pos);
              return true;
            }
            
          }
        });
          }
          
          for(ListPreference p : m_drivers) {
            p.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
          @Override
          public boolean onPreferenceChange(Preference preference, Object newValue) {
            String driver = (String)newValue;
            
            int pos = 1;
            for(int i = 0; i < m_drivers.length; i++)
              if (m_drivers[i] == preference) {
                pos = i;
                break;
              }
            
            m_prefs.setSelectedDriverName(driver, pos);
            return true;
          }
        });
          }
          
        updateDisplay();
        }

        //Disable the driver selection until we know what drivers exist
      for(ListPreference p : m_drivers) {
        p.setEnabled(false);
      }
    
      registerReceiver(preferenceUpdateMonitor, new IntentFilter(Preferences.PREFERENCES_UPDATED));

      //Get the driver config from the server
      registerReceiver(configRequestMonitor, new IntentFilter(BluezService.EVENT_REPORT_CONFIG));
      this.startService(new Intent(BluezService.REQUEST_CONFIG));
      
      m_selectIME.setOnPreferenceClickListener(new OnPreferenceClickListener() {
      @Override
      public boolean onPreferenceClick(Preference preference) {
        InputMethodManager m = (InputMethodManager)BluezIMESettings.this.getSystemService(INPUT_METHOD_SERVICE);
        m.showInputMethodPicker();
        return false;
      }
    });
    }

    @Override
  protected void onDestroy() {
      super.onDestroy();
      
      if (bluetoothStateMonitor != null)
        unregisterReceiver(bluetoothStateMonitor);
      unregisterReceiver(preferenceUpdateMonitor);
      unregisterReceiver(configRequestMonitor);
    }
    
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
      
      if (requestCode == DISCOVER_DEVICE_COMPLETE && resultCode == Activity.RESULT_OK) {
        BluetoothDevice device = (BluetoothDevice)data.getParcelableExtra(DeviceScanActivity.EXTRA_DEVICE);

        if (!m_pairedDeviceLookup.containsKey(device.getAddress()))
          m_pairedDeviceLookup.put(device.getAddress(), device.getName());

        int controller = data.getIntExtra(DeviceScanActivity.EXTRA_CONTROLLER, -1);
        
        if (controller >= 0 && controller < m_prefs.getControllerCount())
          m_prefs.setSelectedDevice(device.getName(), device.getAddress(), controller);
      }
    }
    
    public void updateDonationState(String itemid) {
      
      try {
        int purchased = Integer.parseInt(itemid.substring(itemid.indexOf("_") + 1));
        m_prefs.setDonatedAmount(m_prefs.getDonatedAmount() + purchased);
      } catch (Exception ex) {
      }
      
      //Update the display
      inAppDonationsEnabled(true);
    }
    
    public void inAppDonationsEnabled(boolean enabled) {
      if (m_prefs.getDonatedAmount() > 0) {
        m_donateButton.setTitle(R.string.preferencelist_donate_short_donated);
        m_donateButton.setSummary(String.format(this.getString(R.string.preferencelist_donate_long_donated), m_prefs.getDonatedAmount()));
      } else {
        m_donateButton.setTitle(R.string.preferencelist_donate_short);
        m_donateButton.setSummary(R.string.preferencelist_donate_long);
      }
    }
    
    public ListPreference getDonateButton() { return m_donateButton; }
    
    private void enumerateBondedDevices() {
      Set<BluetoothDevice> pairedDevices = BluetoothAdapter.getDefaultAdapter().getBondedDevices();
      
      m_pairedDeviceLookup = new HashMap<String, String>();
      for(BluetoothDevice pd : pairedDevices)
        m_pairedDeviceLookup.put(pd.getAddress(), pd.getName());

      for(int i = 0; i < m_prefs.getControllerCount(); i++) {
        String addr = m_prefs.getSelectedDeviceAddress(i);
        if (addr != null && !m_pairedDeviceLookup.containsKey(addr)) {
          m_pairedDeviceLookup.put(addr, m_prefs.getSelectedDeviceName(i));
        }
      }
      
      CharSequence[] entries = new CharSequence[m_pairedDeviceLookup.size() + 1];
      CharSequence[] entryValues = new CharSequence[entries.length];

      int index = 0;
      for(String s : m_pairedDeviceLookup.keySet()) {
        entries[index] = m_pairedDeviceLookup.get(s);
        entryValues[index] = s;
        index++;
      }
            
      entries[entries.length - 1] = this.getString(R.string.bluetooth_scan_menu);
      entryValues[entries.length - 1] = SCAN_MARKER;
      
      for(ListPreference p : m_pairedDevices) {
        p.setEntries(entries);
        p.setEntryValues(entryValues);
      }
    }

  private void updateDisplay() {
    enumerateBondedDevices();
    
    int controllers = m_prefs.getControllerCount();
    
      m_devicesCategory.removeAll();
      for(int i = 0; i < Preferences.MAX_NO_OF_CONTROLLERS; i++) {
        if (i < controllers) {
          m_devicesCategory.addPreference(m_pairedDevices[i]);
          m_devicesCategory.addPreference(m_drivers[i]);
          m_devicesCategory.addPreference(m_configButtons[i]);
        }
      }
      
      if (controllers == 1) {
        m_pairedDevices[0].setTitle(R.string.preferencelist_selectdevice);
        m_drivers[0].setTitle(R.string.preferencelist_selectdriver);
        m_configButtons[0].setTitle(R.string.preferencelist_configure_keys_short);
      } else {
        int i = 1;
        for(ListPreference p : m_pairedDevices) {
          p.setTitle(String.format(this.getString(R.string.preferencelist_selectdevice_n), i++));
        }
        
        i = 1;
        for(ListPreference p : m_drivers) {
          p.setTitle(String.format(this.getString(R.string.preferencelist_selectdriver_n), i++));
        }

        i = 1;
        for(Preference p : m_configButtons) {
          p.setTitle(String.format(this.getString(R.string.preferencelist_configbuttons_n), i++));
        }
      }
    
    
    for(int i = 0; i < m_pairedDevices.length; i++) {
      ListPreference pd = m_pairedDevices[i];
      ListPreference drv = m_drivers[i];
      Preference btn = m_configButtons[i];
      
      String address = m_prefs.getSelectedDeviceAddress(i);
      String driver = m_prefs.getSelectedDriverName(i);

      if (address == null) {
        pd.setSummary(R.string.bluetooth_no_device);
      } else {
        
        pd.setSummary(m_prefs.getSelectedDeviceName(i) + " - " + address);
  
        CharSequence[] items = pd.getEntryValues();
        for(int j = 0; j < items.length; j++)
          if (items[j].equals(address)) {
            pd.setValueIndex(j);
            break;
          }
      }
      
      if (DRIVER_NAMES != null) {
        int index = -1;
        for(int j = 0; j < DRIVER_NAMES.length; j++)
          if (DRIVER_NAMES[j].equals(driver)) {
            index = j;
            break;
          }
    
        if (index < 0 || index >= DRIVER_DISPLAYNAMES.length)
          drv.setSummary(R.string.preference_device_unknown);
        else
          drv.setSummary(DRIVER_DISPLAYNAMES[index]);
      }
      
      btn.setEnabled(m_prefs.getSelectedDriverName(i) != null && m_prefs.getSelectedDriverName(i).length() > 0);
    }
    
    m_manageBluetooth.setChecked(m_prefs.getManageBluetooth());
    
    String wakeType = m_prefs.getWakeLock() + "";
    CharSequence[] wakeValues = m_wakelockType.getEntryValues();
    m_wakelockType.setSummary("");
    
    for(int i = 0; i < wakeValues.length; i++) {
      if (wakeValues[i].toString().equals(wakeType)) {
        m_wakelockType.setSummary(m_wakelockType.getEntries()[i]);
        break;
      }
    }
    
    m_controllerCount.setSummary(String.format(this.getString(R.string.preferencelist_configure_controllers_long), m_prefs.getControllerCount()));
  }
    
  private BroadcastReceiver bluetoothStateMonitor = new BroadcastReceiver() {
    
    @Override
    public void onReceive(Context context, Intent intent) {
      int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, 0);
      if (state == BluetoothAdapter.STATE_ON) {
        m_bluetoothActivity.setChecked(true);
        m_bluetoothActivity.setEnabled(true);
        m_bluetoothActivity.setSummary(R.string.bluetooth_state_on);
        
        enumerateBondedDevices();
      }
      else if (state == BluetoothAdapter.STATE_OFF) {
        m_bluetoothActivity.setChecked(false);
        m_bluetoothActivity.setEnabled(true);
        m_bluetoothActivity.setSummary(R.string.bluetooth_state_off);
      }
      else if (state == BluetoothAdapter.STATE_TURNING_OFF) {
        m_bluetoothActivity.setChecked(false);
        m_bluetoothActivity.setEnabled(false);
        m_bluetoothActivity.setSummary(R.string.bluetooth_state_turning_off);
      }
      else if (state == BluetoothAdapter.STATE_TURNING_ON) {
        m_bluetoothActivity.setChecked(false);
        m_bluetoothActivity.setEnabled(false);
        m_bluetoothActivity.setSummary(R.string.bluetooth_state_turning_on);
      }
    }
  };
  
     private BroadcastReceiver configRequestMonitor = new BroadcastReceiver() {
      @Override
      public void onReceive(Context context, Intent intent) {
        if (DRIVER_NAMES == null) {
          
          DRIVER_NAMES = intent.getStringArrayExtra(BluezService.EVENT_REPORT_CONFIG_DRIVER_NAMES);
          DRIVER_DISPLAYNAMES = intent.getStringArrayExtra(BluezService.EVENT_REPORT_CONFIG_DRIVER_DISPLAYNAMES);
          
            CharSequence[] entries = new CharSequence[DRIVER_NAMES.length];
            CharSequence[] entryValues = new CharSequence[entries.length];
            String[] displayNames = BluezIMESettings.this.getResources().getStringArray(R.array.driver_displaynames);
            
            for(int i = 0; i < entries.length; i++) {
              if (displayNames.length > i)
                entries[i] = displayNames[i];
              else
                entries[i] = DRIVER_DISPLAYNAMES[i];
              
              entryValues[i] = DRIVER_NAMES[i];
            }
            
            for(ListPreference p : m_drivers) {
              p.setEntries(entries);
              p.setEntryValues(entryValues);
              p.setEnabled(true);
            }
            
            BluezIMESettings.this.updateDisplay();
        }
      }
    };  
  
  private BroadcastReceiver preferenceUpdateMonitor = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
      updateDisplay();
    }
  };  


  static public String getAssetFile(Context context, String assetName) {
    try {
      return getStreamFile(context.getAssets().open(assetName));
    } catch (IOException e) {
      // TODO Auto-generated catch block
      return "";
    }
  }

  static private String getStreamFile(InputStream stream) {
    BufferedReader reader;
    try {
      reader = new BufferedReader(new InputStreamReader(stream));

      String text = "";
      String line;
      while (null != (line=reader.readLine()))
        text = text + line;
      return text;
    } catch (IOException e) {
      // TODO Auto-generated catch block
      return "";
    }
  }

  public void showLicenses() {
        AlertDialog alertDialog = new AlertDialog.Builder(this).create();
        alertDialog.setTitle("Licenses and copyrights");
        alertDialog.setMessage(Html.fromHtml(getAssetFile(this, "licenses.html")));
        alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK", 
          new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {} });
        alertDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
            public void onCancel(DialogInterface dialog) {} });
        alertDialog.show();
  }
}




Java Source Code List

mobi.omegacentauri.p1keyboard.BGP100Reader.java
mobi.omegacentauri.p1keyboard.BluezDriverInterface.java
mobi.omegacentauri.p1keyboard.BluezForegroundService.java
mobi.omegacentauri.p1keyboard.BluezIMESettings.java
mobi.omegacentauri.p1keyboard.BluezIME.java
mobi.omegacentauri.p1keyboard.BluezService.java
mobi.omegacentauri.p1keyboard.ButtonConfiguration.java
mobi.omegacentauri.p1keyboard.DataDumpReader.java
mobi.omegacentauri.p1keyboard.DeviceScanActivity.java
mobi.omegacentauri.p1keyboard.FutureKeyCodes.java
mobi.omegacentauri.p1keyboard.GameStopReader.java
mobi.omegacentauri.p1keyboard.HIDKeyboard.java
mobi.omegacentauri.p1keyboard.HIDReaderBase.java
mobi.omegacentauri.p1keyboard.HIDipega.java
mobi.omegacentauri.p1keyboard.ImprovedBluetoothDevice.java
mobi.omegacentauri.p1keyboard.PalmOneWirelessKeyboardReader.java
mobi.omegacentauri.p1keyboard.PhonejoyReader.java
mobi.omegacentauri.p1keyboard.Preferences.java
mobi.omegacentauri.p1keyboard.RfcommReader.java
mobi.omegacentauri.p1keyboard.WiimoteReader.java
mobi.omegacentauri.p1keyboard.ZeemoteReader.java
mobi.omegacentauri.p1keyboard.iCadeReader.java
mobi.omegacentauri.p1keyboard.iControlPadReader.java