/* HitoeAddDeviceActivity Copyright (c) 2016 NTT DOCOMO,INC. Released under the MIT license http://opensource.org/licenses/mit-license.php */ package org.deviceconnect.android.deviceplugin.hitoe.activity; import android.bluetooth.BluetoothAdapter; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.res.Resources; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.widget.AdapterView; import android.widget.Button; import android.widget.TextView; import org.deviceconnect.android.deviceplugin.hitoe.R; import org.deviceconnect.android.deviceplugin.hitoe.data.HitoeConstants; import org.deviceconnect.android.deviceplugin.hitoe.data.HitoeDevice; import org.deviceconnect.android.deviceplugin.hitoe.data.HitoeManager; import org.deviceconnect.android.deviceplugin.hitoe.fragment.dialog.DefaultDialogFragment; import org.deviceconnect.android.deviceplugin.hitoe.fragment.dialog.PinCodeDialogFragment; import org.deviceconnect.android.deviceplugin.hitoe.util.BleUtils; import org.deviceconnect.android.deviceplugin.hitoe.util.HitoeScheduler; import java.util.List; /** * This activity is Add Device screen. * @author NTT DOCOMO, INC. */ public class HitoeAddDeviceActivity extends HitoeListActivity implements HitoeManager.OnHitoeConnectionListener, AdapterView.OnItemClickListener, HitoeScheduler.OnRegularNotify { /** * Periodic processing object. */ private HitoeScheduler mScheduler; /** * Received a event that Bluetooth has been changed. */ private final BroadcastReceiver mSensorReceiver = new BroadcastReceiver() { @Override public void onReceive(final Context context, final Intent intent) { String action = intent.getAction(); if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) { int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1); if (state == BluetoothAdapter.STATE_ON) { addFooterView(); getManager().addHitoeConnectionListener(HitoeAddDeviceActivity.this); mScheduler.scanHitoeDevice(true); } else if (state == BluetoothAdapter.STATE_OFF) { addFooterView(); getManager().addHitoeConnectionListener(null); mScheduler.scanHitoeDevice(false); } } } }; @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public void onResume() { super.onResume(); mEnableConnectedBtn = false; mDeviceAdapter.clear(); mDeviceAdapter.notifyDataSetChanged(); mListView.setOnItemClickListener(this); mScheduler = new HitoeScheduler(this, -1, -1); DefaultDialogFragment.showHitoeONStateDialog(this); registerBluetoothFilter(); getManager().addHitoeConnectionListener(this); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { mScheduler.scanHitoeDevice(true); } else { if (BleUtils.isBLEPermission(this)) { mScheduler.scanHitoeDevice(true); } } } @Override public void onPause() { super.onPause(); getManager().removeHitoeConnectionListener(this); mScheduler.scanHitoeDevice(false); dismissProgressDialog(); dismissErrorDialog(); unregisterBluetoothFilter(); } @Override protected void setUI() { TextView title = (TextView) findViewById(R.id.view_title); title.setText(R.string.add_device_view); Button btn = (Button) findViewById(R.id.btn_add_open); btn.setText(R.string.action_search); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(final View view) { getManager().addHitoeConnectionListener(HitoeAddDeviceActivity.this); getManager().discoveryHitoeDevices(); } }); } /** * Register a BroadcastReceiver of Bluetooth event. */ private void registerBluetoothFilter() { IntentFilter filter = new IntentFilter(); filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED); registerReceiver(mSensorReceiver, filter, null, mHandler); } /** * Unregister a previously registered BroadcastReceiver. */ private void unregisterBluetoothFilter() { unregisterReceiver(mSensorReceiver); } @Override public void onConnected(final HitoeDevice device) { runOnUiThread(new Runnable() { @Override public void run() { if (mCheckDialog) { DefaultDialogFragment.showHitoeSetShirtDialog(HitoeAddDeviceActivity.this); } dismissProgressDialog(); mDeviceAdapter.remove(device); mDeviceAdapter.notifyDataSetChanged(); } }); } @Override public void onConnectFailed(final HitoeDevice device) { runOnUiThread(new Runnable() { @Override public void run() { dismissProgressDialog(); if (device == null) { if (mConnectingDevice != null) { HitoeDevice container = findDeviceContainerByAddress(mConnectingDevice.getId()); if (container != null) { container.setPinCode(null); mDeviceAdapter.notifyDataSetChanged(); } Resources res = getResources(); showErrorDialog(res.getString(R.string.hitoe_setting_dialog_error_message03)); } } else { showErrorDialogNotConnect(device.getName()); } } }); } @Override public void onDiscovery(final List<HitoeDevice> devices) { if (mDeviceAdapter == null) { return; } runOnUiThread(new Runnable() { @Override public void run() { mDeviceAdapter.clear(); for (HitoeDevice device : devices) { if (device.getPinCode() == null) { mDeviceAdapter.add(device); } } mDeviceAdapter.notifyDataSetChanged(); } }); } @Override public void onDisconnected(final int res, final HitoeDevice device) { } @Override public void onDeleted(final HitoeDevice device) { } @Override public void onItemClick(final AdapterView<?> adapterView, final View view, final int i, final long l) { final HitoeDevice hitoe = (HitoeDevice) adapterView.getItemAtPosition(i); if (hitoe == null) { return; } mConnectingDevice = hitoe; if (hitoe.getPinCode() == null) { final Resources res = getResources(); PinCodeDialogFragment pinDialog = PinCodeDialogFragment.newInstance(); pinDialog.show(getSupportFragmentManager(), "pin_dialog"); pinDialog.setOnPinCodeListener(new PinCodeDialogFragment.OnPinCodeListener() { @Override public void onPinCode(final String pin) { if (pin.isEmpty()) { showErrorDialog(res.getString(R.string.hitoe_setting_dialog_error_message02)); return; } hitoe.setPinCode(pin); for (HitoeDevice d: getManager().getRegisterDevices()) { if (!d.getName().equals(hitoe.getName()) && d.isRegisterFlag()) { getManager().disconnectHitoeDevice(d); } } connectDevice(hitoe); } }); } new Handler().postDelayed(new Runnable() { @Override public void run() { if (mCheckDialog) { HitoeDevice containar = findDeviceContainerByAddress(hitoe.getId()); if (containar != null) { containar.setPinCode(null); } runOnUiThread(new Runnable() { @Override public void run() { dismissProgressDialog(); Resources res = getResources(); showErrorDialog(res.getString(R.string.hitoe_setting_dialog_error_message04)); } }); } } }, HitoeConstants.DISCOVERY_CYCLE_TIME); } @Override public void onRegularNotify() { if (BleUtils.isEnabled(this)) { addFooterView(); getManager().addHitoeConnectionListener(this); getManager().discoveryHitoeDevices(); } else { mScheduler.scanHitoeDevice(false); } } }