Search in sources :

Example 1 with DeviceCoordinator

use of nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator in project Gadgetbridge by Freeyourgadget.

the class ChartsActivity method onCreateOptionsMenu.

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    getMenuInflater().inflate(R.menu.menu_charts, menu);
    DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(mGBDevice);
    if (!mGBDevice.isConnected() || !coordinator.supportsActivityDataFetching()) {
        menu.removeItem(R.id.charts_fetch_activity_data);
    }
    return true;
}
Also used : DeviceCoordinator(nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator)

Example 2 with DeviceCoordinator

use of nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator in project Gadgetbridge by Freeyourgadget.

the class ChartsActivity method enableSwipeRefresh.

private void enableSwipeRefresh(boolean enable) {
    DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(mGBDevice);
    swipeLayout.setEnabled(enable && coordinator.allowFetchActivityData(mGBDevice));
}
Also used : DeviceCoordinator(nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator)

Example 3 with DeviceCoordinator

use of nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator in project Gadgetbridge by Freeyourgadget.

the class GBDeviceAdapterv2 method onBindViewHolder.

@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
    final GBDevice device = deviceList.get(position);
    final DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(device);
    holder.container.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if (device.isInitialized() || device.isConnected()) {
                showTransientSnackbar(R.string.controlcenter_snackbar_need_longpress);
            } else {
                showTransientSnackbar(R.string.controlcenter_snackbar_connecting);
                GBApplication.deviceService().connect(device);
            }
        }
    });
    holder.container.setOnLongClickListener(new View.OnLongClickListener() {

        @Override
        public boolean onLongClick(View v) {
            if (device.getState() != GBDevice.State.NOT_CONNECTED) {
                showTransientSnackbar(R.string.controlcenter_snackbar_disconnecting);
                GBApplication.deviceService().disconnect();
            }
            return true;
        }
    });
    holder.deviceImageView.setImageResource(R.drawable.level_list_device);
    //level-list does not allow negative values, hence we always add 100 to the key.
    holder.deviceImageView.setImageLevel(device.getType().getKey() + 100 + (device.isInitialized() ? 100 : 0));
    holder.deviceNameLabel.setText(getUniqueDeviceName(device));
    if (device.isBusy()) {
        holder.deviceStatusLabel.setText(device.getBusyTask());
        holder.busyIndicator.setVisibility(View.VISIBLE);
    } else {
        holder.deviceStatusLabel.setText(device.getStateString());
        holder.busyIndicator.setVisibility(View.INVISIBLE);
    }
    //begin of action row
    //battery
    holder.batteryStatusBox.setVisibility(View.GONE);
    short batteryLevel = device.getBatteryLevel();
    if (batteryLevel != GBDevice.BATTERY_UNKNOWN) {
        holder.batteryStatusBox.setVisibility(View.VISIBLE);
        holder.batteryStatusLabel.setText(device.getBatteryLevel() + "%");
        BatteryState batteryState = device.getBatteryState();
        if (BatteryState.BATTERY_CHARGING.equals(batteryState) || BatteryState.BATTERY_CHARGING_FULL.equals(batteryState)) {
            holder.batteryIcon.setImageLevel(device.getBatteryLevel() + 100);
        } else {
            holder.batteryIcon.setImageLevel(device.getBatteryLevel());
        }
    }
    //fetch activity data
    holder.fetchActivityDataBox.setVisibility((device.isInitialized() && coordinator.supportsActivityDataFetching()) ? View.VISIBLE : View.GONE);
    holder.fetchActivityData.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            showTransientSnackbar(R.string.busy_task_fetch_activity_data);
            GBApplication.deviceService().onFetchActivityData();
        }
    });
    //take screenshot
    holder.takeScreenshotView.setVisibility((device.isInitialized() && coordinator.supportsScreenshots()) ? View.VISIBLE : View.GONE);
    holder.takeScreenshotView.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            showTransientSnackbar(R.string.controlcenter_snackbar_requested_screenshot);
            GBApplication.deviceService().onScreenshotReq();
        }
    });
    //manage apps
    holder.manageAppsView.setVisibility((device.isInitialized() && coordinator.supportsAppsManagement()) ? View.VISIBLE : View.GONE);
    holder.manageAppsView.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(device);
            Class<? extends Activity> appsManagementActivity = coordinator.getAppsManagementActivity();
            if (appsManagementActivity != null) {
                Intent startIntent = new Intent(context, appsManagementActivity);
                startIntent.putExtra(GBDevice.EXTRA_DEVICE, device);
                context.startActivity(startIntent);
            }
        }
    });
    //set alarms
    holder.setAlarmsView.setVisibility(coordinator.supportsAlarmConfiguration() ? View.VISIBLE : View.GONE);
    holder.setAlarmsView.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent startIntent;
            startIntent = new Intent(context, ConfigureAlarms.class);
            context.startActivity(startIntent);
        }
    });
    //show graphs
    holder.showActivityGraphs.setVisibility(coordinator.supportsActivityTracking() ? View.VISIBLE : View.GONE);
    holder.showActivityGraphs.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent startIntent;
            startIntent = new Intent(context, ChartsActivity.class);
            startIntent.putExtra(GBDevice.EXTRA_DEVICE, device);
            context.startActivity(startIntent);
        }
    });
    ItemWithDetailsAdapter infoAdapter = new ItemWithDetailsAdapter(context, device.getDeviceInfos());
    infoAdapter.setHorizontalAlignment(true);
    holder.deviceInfoList.setAdapter(infoAdapter);
    justifyListViewHeightBasedOnChildren(holder.deviceInfoList);
    holder.deviceInfoList.setFocusable(false);
    final boolean detailsShown = position == expandedDevicePosition;
    boolean showInfoIcon = device.hasDeviceInfos() && !device.isBusy();
    holder.deviceInfoView.setVisibility(showInfoIcon ? View.VISIBLE : View.GONE);
    holder.deviceInfoBox.setActivated(detailsShown);
    holder.deviceInfoBox.setVisibility(detailsShown ? View.VISIBLE : View.GONE);
    holder.deviceInfoView.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            expandedDevicePosition = detailsShown ? -1 : position;
            TransitionManager.beginDelayedTransition(parent);
            notifyDataSetChanged();
        }
    });
    holder.findDevice.setVisibility(device.isInitialized() ? View.VISIBLE : View.GONE);
    holder.findDevice.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if (device.getType() == DeviceType.VIBRATISSIMO) {
                Intent startIntent;
                startIntent = new Intent(context, VibrationActivity.class);
                startIntent.putExtra(GBDevice.EXTRA_DEVICE, device);
                context.startActivity(startIntent);
                return;
            }
            GBApplication.deviceService().onFindDevice(true);
            //TODO: extract string resource if we like this solution.
            Snackbar.make(parent, R.string.control_center_find_lost_device, Snackbar.LENGTH_INDEFINITE).setAction("Found it!", new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    GBApplication.deviceService().onFindDevice(false);
                }
            }).setCallback(new Snackbar.Callback() {

                @Override
                public void onDismissed(Snackbar snackbar, int event) {
                    GBApplication.deviceService().onFindDevice(false);
                    super.onDismissed(snackbar, event);
                }
            }).show();
        //                                                     ProgressDialog.show(
        //                                                             context,
        //                                                             context.getString(R.string.control_center_find_lost_device),
        //                                                             context.getString(R.string.control_center_cancel_to_stop_vibration),
        //                                                             true, true,
        //                                                             new DialogInterface.OnCancelListener() {
        //                                                                 @Override
        //                                                                 public void onCancel(DialogInterface dialog) {
        //                                                                     GBApplication.deviceService().onFindDevice(false);
        //                                                                 }
        //                                                             });
        }
    });
    //remove device, hidden under details
    holder.removeDevice.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            new AlertDialog.Builder(context).setCancelable(true).setTitle(context.getString(R.string.controlcenter_delete_device_name, device.getName())).setMessage(R.string.controlcenter_delete_device_dialogmessage).setPositiveButton(R.string.Delete, new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    try {
                        DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(device);
                        if (coordinator != null) {
                            coordinator.deleteDevice(device);
                        }
                        DeviceHelper.getInstance().removeBond(device);
                    } catch (Exception ex) {
                        GB.toast(context, "Error deleting device: " + ex.getMessage(), Toast.LENGTH_LONG, GB.ERROR, ex);
                    } finally {
                        Intent refreshIntent = new Intent(DeviceManager.ACTION_REFRESH_DEVICELIST);
                        LocalBroadcastManager.getInstance(context).sendBroadcast(refreshIntent);
                    }
                }
            }).setNegativeButton(R.string.Cancel, new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                // do nothing
                }
            }).show();
        }
    });
}
Also used : AlertDialog(android.app.AlertDialog) DialogInterface(android.content.DialogInterface) VibrationActivity(nodomain.freeyourgadget.gadgetbridge.activities.VibrationActivity) ChartsActivity(nodomain.freeyourgadget.gadgetbridge.activities.charts.ChartsActivity) Activity(android.app.Activity) Intent(android.content.Intent) ImageView(android.widget.ImageView) View(android.view.View) CardView(android.support.v7.widget.CardView) RecyclerView(android.support.v7.widget.RecyclerView) TextView(android.widget.TextView) ListView(android.widget.ListView) GBDevice(nodomain.freeyourgadget.gadgetbridge.impl.GBDevice) BatteryState(nodomain.freeyourgadget.gadgetbridge.model.BatteryState) DeviceCoordinator(nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator) Snackbar(android.support.design.widget.Snackbar)

Example 4 with DeviceCoordinator

use of nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator in project Gadgetbridge by Freeyourgadget.

the class DBHelper method ensureDeviceUpToDate.

private static void ensureDeviceUpToDate(Device device, GBDevice gbDevice, DaoSession session) {
    if (!isDeviceUpToDate(device, gbDevice)) {
        device.setIdentifier(gbDevice.getAddress());
        device.setName(gbDevice.getName());
        DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(gbDevice);
        device.setManufacturer(coordinator.getManufacturer());
        device.setType(gbDevice.getType().getKey());
        device.setModel(gbDevice.getModel());
        if (device.getId() == null) {
            session.getDeviceDao().insert(device);
        } else {
            session.getDeviceDao().update(device);
        }
    }
}
Also used : DeviceCoordinator(nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator)

Example 5 with DeviceCoordinator

use of nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator in project Gadgetbridge by Freeyourgadget.

the class DiscoveryActivity method onItemClick.

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    GBDeviceCandidate deviceCandidate = deviceCandidates.get(position);
    if (deviceCandidate == null) {
        LOG.error("Device candidate clicked, but item not found");
        return;
    }
    stopDiscovery();
    DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(deviceCandidate);
    LOG.info("Using device candidate " + deviceCandidate + " with coordinator: " + coordinator.getClass());
    Class<? extends Activity> pairingActivity = coordinator.getPairingActivity();
    if (pairingActivity != null) {
        Intent intent = new Intent(this, pairingActivity);
        intent.putExtra(DeviceCoordinator.EXTRA_DEVICE_CANDIDATE, deviceCandidate);
        startActivity(intent);
    } else {
        try {
            BluetoothDevice btDevice = adapter.getRemoteDevice(deviceCandidate.getMacAddress());
            switch(btDevice.getBondState()) {
                case BluetoothDevice.BOND_NONE:
                    {
                        if (btDevice.createBond()) {
                            // async, wait for bonding event to finish this activity
                            bondingAddress = btDevice.getAddress();
                        }
                        break;
                    }
                case BluetoothDevice.BOND_BONDING:
                    // async, wait for bonding event to finish this activity
                    bondingAddress = btDevice.getAddress();
                    break;
                case BluetoothDevice.BOND_BONDED:
                    handleDeviceBonded();
                    break;
            }
        } catch (Exception e) {
            LOG.error("Error pairing device: " + deviceCandidate.getMacAddress());
        }
    }
}
Also used : GBDeviceCandidate(nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceCandidate) BluetoothDevice(android.bluetooth.BluetoothDevice) Intent(android.content.Intent) DeviceCoordinator(nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator)

Aggregations

DeviceCoordinator (nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator)6 Intent (android.content.Intent)2 Activity (android.app.Activity)1 AlertDialog (android.app.AlertDialog)1 BluetoothDevice (android.bluetooth.BluetoothDevice)1 DialogInterface (android.content.DialogInterface)1 Snackbar (android.support.design.widget.Snackbar)1 CardView (android.support.v7.widget.CardView)1 RecyclerView (android.support.v7.widget.RecyclerView)1 View (android.view.View)1 ImageView (android.widget.ImageView)1 ListView (android.widget.ListView)1 TextView (android.widget.TextView)1 ArrayList (java.util.ArrayList)1 VibrationActivity (nodomain.freeyourgadget.gadgetbridge.activities.VibrationActivity)1 ChartsActivity (nodomain.freeyourgadget.gadgetbridge.activities.charts.ChartsActivity)1 UnknownDeviceCoordinator (nodomain.freeyourgadget.gadgetbridge.devices.UnknownDeviceCoordinator)1 HPlusCoordinator (nodomain.freeyourgadget.gadgetbridge.devices.hplus.HPlusCoordinator)1 MakibesF68Coordinator (nodomain.freeyourgadget.gadgetbridge.devices.hplus.MakibesF68Coordinator)1 LiveviewCoordinator (nodomain.freeyourgadget.gadgetbridge.devices.liveview.LiveviewCoordinator)1