示例#1
0
 @Override
 protected void onDestroy() {
   if (communicator != null) {
     communicator.sendMessage(new ExitMessage());
     communicator.stop();
     remoteViewCommunicator.stop();
   }
   velocityTracker.recycle();
   super.onDestroy();
 }
示例#2
0
  @Override
  public boolean onTouchEvent(MotionEvent event) {
    if (controlling) {
      velocityTracker.addMovement(event);
      velocityTracker.computeCurrentVelocity(1);

      boolean down =
          event.getActionMasked() == MotionEvent.ACTION_DOWN
              || event.getActionMasked() == MotionEvent.ACTION_POINTER_DOWN;
      boolean up =
          event.getActionMasked() == MotionEvent.ACTION_UP
              || event.getActionMasked() == MotionEvent.ACTION_POINTER_UP;
      Finger[] fingers = new Finger[event.getPointerCount()];
      for (int i = 0; i < event.getPointerCount(); i++) {
        fingers[i] =
            new Finger(
                event.getPointerId(i),
                event.getX(i),
                event.getY(i),
                velocityTracker.getXVelocity(i),
                velocityTracker.getYVelocity(i),
                !(event.getActionIndex() == i && up));
      }

      FingerMessage<?> message =
          up ? new UpMessage(fingers) : down ? new DownMessage(fingers) : new MoveMessage(fingers);
      communicator.sendMessage(message);
    }
    return super.onTouchEvent(event);
  }
示例#3
0
 @Override
 public void onActivityResult(int requestCode, int resultCode, Intent data) {
   switch (requestCode) {
     case REQUEST_DEVICES:
       // When DeviceListActivity returns with a device to connect
       devicesShowing = false;
       if (resultCode == Activity.RESULT_OK) {
         // Get the device MAC address
         String address = data.getExtras().getString(Devices.EXTRA_DEVICE_ADDRESS);
         // Get the BLuetoothDevice object
         BluetoothDevice device = bluetoothAdapter.getRemoteDevice(address);
         // Attempt to connect to the device
         communicator.connect(device);
       }
       break;
     case REQUEST_ENABLE_BT:
       // When the request to enable Bluetooth returns
       if (resultCode == Activity.RESULT_OK) {
         // Bluetooth is now enabled
       } else {
         // User did not enable Bluetooth or an error occured
         Toast.makeText(this, R.string.bluetooth_disabled, Toast.LENGTH_LONG).show();
         finish();
       }
   }
 }
示例#4
0
  @Override
  protected void onResume() {
    super.onResume();

    // Performing this check in onResume() covers the case in which BT was
    // not enabled during onStart(), so we were paused to enable it...
    // onResume() will be called when ACTION_REQUEST_ENABLE activity returns.
    if (communicator != null && communicator.getState() == AndroidCommunicator.State.NONE) {
      communicator.start();
      remoteViewCommunicator.start();
    }

    updateActionBarIcon(communicator.getState());
    sensorManager.registerListener(
        sensorListener,
        sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
        SensorManager.SENSOR_DELAY_FASTEST);
  }
示例#5
0
 protected void connect() {
   Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();
   if (pairedDevices.size() == 1) {
     communicator.connect(pairedDevices.iterator().next());
   } else {
     Intent serverIntent = new Intent(this, Devices.class);
     startActivityForResult(serverIntent, REQUEST_DEVICES);
     devicesShowing = true;
   }
 }
示例#6
0
  @Override
  protected void onStart() {
    super.onStart();

    if (!bluetoothAdapter.isEnabled()) {
      Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
      startActivityForResult(enableIntent, REQUEST_ENABLE_BT);
    } else if (communicator.getState() != State.CONNECTED && !devicesShowing) {
      connect();
    }
  }
示例#7
0
 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
   boolean connect = false;
   switch (item.getItemId()) {
     case OPTION_CONNECT:
       connect = true;
       break;
     case OPTION_LOCK_LANDSCAPE:
       setLockLandscape(!item.isChecked());
       item.setChecked(isLockLandscape());
       break;
     case OPTION_ENABLE_REMOTE_VIEW:
       controlFragment.setRemoteEnabled(!item.isChecked());
       item.setChecked(controlFragment.isRemoteEnabled());
       break;
     case OPTION_EXIT:
       finish();
       break;
     case OPTION_HELP:
       showHelp();
       break;
     case OPTION_EXAGGERATION:
       showVerticalExaggerationDialog();
       break;
     case OPTION_FLY_HOME:
       communicator.sendMessage(new FlyHomeMessage());
       break;
     case OPTION_SEND_LOCATION:
       setSendLocation(!item.isChecked());
       item.setChecked(isSendLocation());
       break;
     case android.R.id.home:
       getSupportActionBar().selectTab(getSupportActionBar().getTabAt(0));
       connect = communicator.getState() != State.CONNECTED;
       break;
   }
   if (connect) {
     connect();
   }
   return super.onOptionsItemSelected(item);
 }
示例#8
0
  @Override
  public void stateChanged(final State newState) {
    String toast = null;
    switch (newState) {
      case CONNECTED:
        toast = getString(R.string.title_connected_to) + communicator.getDevice().getName();
        // toast = getString(R.string.title_connected_to) + communicator.getHostname();
        break;
      case CONNECTING:
        toast = getString(R.string.title_connecting);
        break;
      case LISTEN:
      case NONE:
        toast = getString(R.string.title_not_connected);
        break;
    }

    // state changing can occur on non-ui thread, so ensure toast is run on ui thread
    final String toastf = toast;
    runOnUiThread(
        new Runnable() {
          @Override
          public void run() {
            if (toastf != null) {
              communicator.toast(toastf);
            }

            updateActionBarIcon(newState);

            if (newState != State.CONNECTED) {
              for (int i = 0; i < itemModelStates.size(); i++) {
                itemModelStates.valueAt(i).clear();
              }
            }
          }
        });
  }
示例#9
0
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Normally one shouldn't instantiate all these objects in the onCreate method,
    // as onCreate is called every time a configuration change occurs (orientation,
    // keyboard hidden, screen size, etc). But we are handling configuration changes
    // ourselves.

    // hide the status bar
    this.getWindow()
        .setFlags(
            WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

    // get local Bluetooth adapter
    bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    if (bluetoothAdapter == null) {
      Toast.makeText(this, R.string.bluetooth_unavailable, Toast.LENGTH_LONG).show();
      finish();
      return;
    }

    communicator = new AndroidCommunicator(this, bluetoothAdapter);
    communicator.addListener(this);

    remoteViewCommunicator = new SocketAndroidCommunicator(this);

    DatasetModelState datasetsState = new DatasetModelState(communicator, this);
    LayerModelState layersState = new LayerModelState(communicator, this);
    PlaceModelState placesState = new PlaceModelState(communicator, this);

    ItemModelState[] states = new ItemModelState[] {datasetsState, layersState, placesState};
    for (ItemModelState state : states) {
      itemModelStates.put(state.getModel().getId(), state);
      ItemModelFragmentMenuProvider menuProvider = new EmptyMenuProvider();
      if (state == placesState) {
        menuProvider = new PlacesMenuProvider(communicator);
      }
      menuProviders.put(state.getModel().getId(), menuProvider);
    }

    controlFragment = ControlFragment.newInstance(remoteViewCommunicator);
    datasetsFragment = ItemModelFragment.newInstance(datasetsState.getModel().getId(), false);
    layersFragment = ItemModelFragment.newInstance(layersState.getModel().getId(), false);
    flatLayersFragment = ItemModelFragment.newInstance(layersState.getModel().getId(), true);
    placesFragment = ItemModelFragment.newInstance(placesState.getModel().getId(), false);
    tabFragments =
        new Fragment[] {
          controlFragment, datasetsFragment, layersFragment, flatLayersFragment, placesFragment
        };

    // create the tabs
    getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    int[] tabIds =
        new int[] {
          R.string.controls_tab,
          R.string.datasets_tab,
          R.string.layers_tab,
          R.string.flat_layers_tab,
          R.string.places_tab
        };
    for (int i = 0; i < tabIds.length; i++) {
      ActionBar.Tab tab = getSupportActionBar().newTab();
      tab.setTag(tabIds[i]);
      tab.setText(tabIds[i]);
      tab.setTabListener(this);
      getSupportActionBar().addTab(tab);
    }

    getSupportActionBar().setDisplayShowTitleEnabled(false);
    getSupportActionBar().setHomeButtonEnabled(true);

    // setup the shake sensor
    sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    sensorListener.setOnShakeListener(
        new ShakeEventListener.OnShakeListener() {
          @Override
          public void onShake() {
            communicator.sendMessage(new ShakeMessage());
          }
        });

    // Acquire a reference to the system Location Manager
    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

    // Define a listener that responds to location updates
    LocationListener locationListener =
        new LocationListener() {
          public void onLocationChanged(Location location) {
            if (isSendLocation()) {
              communicator.sendMessage(
                  new LocationMessage(
                      location.getLatitude(),
                      location.getLongitude(),
                      location.getAltitude(),
                      location.getAccuracy(),
                      location.getBearing()));
            }
          }

          public void onStatusChanged(String provider, int status, Bundle extras) {}

          public void onProviderEnabled(String provider) {}

          public void onProviderDisabled(String provider) {}
        };
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
    // locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0,
    // locationListener);
  }