/*
HitoeDeviceListActivity
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.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Resources;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import org.deviceconnect.android.deviceplugin.hitoe.R;
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 java.util.List;
/**
* This activity is device list screen.
* @author NTT DOCOMO, INC.
*/
public class HitoeDeviceListActivity extends HitoeListActivity implements
HitoeManager.OnHitoeConnectionListener,
AdapterView.OnItemClickListener,
AdapterView.OnItemLongClickListener {
/**
* 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)) {
addFooterView();
}
}
};
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onResume() {
super.onResume();
mDeviceAdapter.clear();
mEnableConnectedBtn = true;
mDeviceAdapter.addAll(createDeviceContainers());
mDeviceAdapter.notifyDataSetChanged();
mListView.setOnItemClickListener(this);
mListView.setOnItemLongClickListener(this);
getManager().addHitoeConnectionListener(this);
addFooterView();
IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
registerReceiver(mSensorReceiver, filter, null, mHandler);
DefaultDialogFragment.showHitoeWarningMessageDialog(this);
}
@Override
public void onPause() {
super.onPause();
getManager().removeHitoeConnectionListener(this);
unregisterReceiver(mSensorReceiver);
}
@Override
protected void setUI() {
TextView title = (TextView) findViewById(R.id.view_title);
title.setText(R.string.device_list_view);
Button btn = (Button) findViewById(R.id.btn_add_open);
btn.setText(R.string.add_device_button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View view) {
Intent intent = new Intent();
intent.setClass(HitoeDeviceListActivity.this, HitoeAddDeviceActivity.class);
startActivity(intent);
}
});
}
@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 || !hitoe.isRegisterFlag()) {
Toast.makeText(this, R.string.error_disconnected_hitoe, Toast.LENGTH_SHORT).show();
return;
}
Intent intent = new Intent();
intent.putExtra(HitoeDeviceControlActivity.FEATURE_SERVICE_ID, hitoe.getId());
intent.setClass(HitoeDeviceListActivity.this, HitoeDeviceControlActivity.class);
startActivity(intent);
}
@Override
public boolean onItemLongClick(final AdapterView<?> adapterView, final View view,
final int i, final long l) {
final HitoeDevice hitoe = (HitoeDevice) adapterView.getItemAtPosition(i);
if (hitoe == null) {
return false;
}
mConnectingDevice = hitoe;
DefaultDialogFragment.showConfirmAlert(this, hitoe.getName(), getString(R.string.confirm_delete_device),
getString(R.string.ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(final DialogInterface dialogInterface, final int i) {
runOnUiThread(new Runnable() {
@Override
public void run() {
disconnectDevice(hitoe);
getManager().deleteHitoeDevice(hitoe);
mDeviceAdapter.remove(hitoe);
mDeviceAdapter.notifyDataSetChanged();
addFooterView();
}
});
}
});
return true;
}
@Override
public void onConnected(final HitoeDevice device) {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (!mCheckDialog) {
return;
}
HitoeDevice container = findDeviceContainerByAddress(device.getId());
if (container != null) {
container.setRegisterFlag(true);
container.setSessionId(device.getSessionId());
mDeviceAdapter.notifyDataSetChanged();
}
dismissProgressDialog();
}
});
}
@Override
public void onConnectFailed(final HitoeDevice device) {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (!mCheckDialog) {
return;
}
if (device == null && 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 if (device != null) {
showErrorDialogNotConnect(device.getName());
}
dismissProgressDialog();
}
});
}
@Override
public void onDiscovery(final List<HitoeDevice> devices) {
if (mDeviceAdapter == null) {
return;
}
runOnUiThread(new Runnable() {
@Override
public void run() {
for (HitoeDevice device : devices) {
if (!containAddressForAdapter(device.getId())
&& !device.isRegisterFlag()) {
mDeviceAdapter.add(device);
}
}
mDeviceAdapter.notifyDataSetChanged();
}
});
}
@Override
public void onDisconnected(final int res, final HitoeDevice device) {
HitoeDevice container = findDeviceContainerByAddress(device.getId());
if (container != null) {
if (res != 0) {
container.setRegisterFlag(true);
}
runOnUiThread(new Runnable() {
@Override
public void run() {
mDeviceAdapter.notifyDataSetChanged();
}
});
}
}
@Override
public void onDeleted(final HitoeDevice device) {
}
}