Commit a257e52f by onuma

#47941 HW連携 アルコールチェッカーから値を取得する処理を追加中

parent fb21a680
......@@ -192,5 +192,6 @@ public class Constant {
int radiationThermomete = 4; // 放射温度計
int sppBluetoothMachine = 5; // SPP通信機器
int nfc = 6; // nfc機器
int alcoholChecker = 7; // アルコールチェッカー
}
}
......@@ -230,4 +230,9 @@ public class ABookKeys {
}
public static final String SCAN_TYPE = "scanType";
// アルコールチェッカー情報取得
public static final String CMD_GET_DEVICE_INFO = "getDeviceInfo"; // CMSのインターフェースのパラメータ:cmd
public static final String TASK_DEVICE_TYPE = "deviceType"; // CMSのインターフェースのパラメータ:devicetype
public static final String TASK_QUESTION_ID = "qid"; // CMSのインターフェースのパラメータ:qid
}
......@@ -47,7 +47,6 @@ import jp.agentec.abook.abv.bl.data.tables.TEnquete;
import jp.agentec.abook.abv.bl.data.tables.TMarkingSetting;
import jp.agentec.abook.abv.bl.data.tables.TOperation;
import jp.agentec.abook.abv.bl.data.tables.TPushMessage;
import jp.agentec.abook.abv.bl.data.tables.TSppDevice;
import jp.agentec.abook.abv.bl.data.tables.TTask;
import jp.agentec.abook.abv.bl.data.tables.TTaskReport;
import jp.agentec.abook.abv.bl.data.tables.TTaskReportApproval;
......@@ -112,10 +111,7 @@ public class ABVDataOpenHelper {
iTableScripts.add(new ROperationGroupMasterOperation());
iTableScripts.add(new TTaskReportApproval());
// SPP通信端末管理テーブルをスクリプトに追加
iTableScripts.add(new TSppDevice());
return iTableScripts;
return iTableScripts;
}
......
package jp.agentec.abook.abv.bl.data.dao;
import java.util.List;
import jp.agentec.abook.abv.bl.common.db.Cursor;
import jp.agentec.abook.abv.bl.dto.SppDeviceDto;
/**
* SPP通信の端末情報を管理する
*/
public class SppDeviceDao extends AbstractDao {
private static final String TAG = "SppDeviceDao";
@Override
protected SppDeviceDto convert(Cursor cursor) {
SppDeviceDto dto = new SppDeviceDto();
int column = cursor.getColumnIndex("spp_device_id");
if (column != -1) {
dto.sppDeviceId = cursor.getInt(column);
}
column = cursor.getColumnIndex("spp_device_name");
if (column != -1) {
dto.sppDeviceName = cursor.getString(column);
}
column = cursor.getColumnIndex("data_start_index");
if (column != -1) {
dto.dataStartIndex = cursor.getInt(column);
}
column = cursor.getColumnIndex("data_end_index");
if (column != -1) {
dto.dataEndIndex = cursor.getInt(column);
}
column = cursor.getColumnIndex("pairing_device_name");
if (column != -1) {
dto.pairingDeviceName = cursor.getString(column);
}
column = cursor.getColumnIndex("pairing_device_address");
if (column != -1) {
dto.pairingDeviceAddress = cursor.getString(column);
}
return dto;
}
/**
* 登録処理
* @param dto
*/
public void insert(SppDeviceDto dto) {
insert("insert into t_spp_device "
+ "(spp_device_id, "
+ "spp_device_name, "
+ "data_start_index, "
+ "data_end_index, "
+ "pairing_device_name, "
+ "pairing_device_address) "
+ "values "
+ "(?,?,?,?,?,?)",
dto.getInsertValues());
}
/**
* SPP通信端末を全て取得
* @return
*/
public List<SppDeviceDto> getAllSppDevice() {
return rawQueryGetDtoList("SELECT * FROM t_spp_device ORDER BY spp_device_id DESC", null, SppDeviceDto.class);
}
/**
* SPP通信端末をIDで検索
* @param sppDeviceId
* @return
*/
public SppDeviceDto getSppDeviceById(Integer sppDeviceId) {
return rawQueryGetDto("SELECT * FROM t_spp_device WHERE spp_device_id = ?", new String[] { "" + sppDeviceId }, SppDeviceDto.class);
}
/**
* SPP通信端末IDを全て取得
* @return
*/
public List<Integer> getSppDeviceIdList() {
return rawQueryGetIntegerList("SELECT spp_device_id FROM t_spp_device ORDER BY spp_device_id DESC", null);
}
/**
* SPP通信端末でペアリング済みデータ取得
* @return
*/
public List<SppDeviceDto> getPairingDeviceList() {
return rawQueryGetDtoList("SELECT * FROM t_spp_device WHERE pairing_device_name is NOT NULL AND pairing_device_address is NOT NULL order by spp_device_id DESC", null, SppDeviceDto.class);
}
/**
* SPP通信端末の更新処理
* @param dto
* @return
*/
public boolean updateSppDevice(SppDeviceDto dto) {
long count = update("UPDATE t_spp_device SET spp_device_name=?, data_start_index=?, data_end_index=?, pairing_device_name=?, pairing_device_address=? WHERE spp_device_id=?", dto.getUpdateValues());
return count > 0;
}
/**
* ペアリングの端末アドレスがユニーク前提
* ペアリング情報をアドレスで取得
* @param deviceAddress
* @return
*/
public SppDeviceDto getPairingDeviceByAddress(String deviceAddress) {
StringBuffer sql = new StringBuffer();
sql.append(" SELECT DISTINCT * ");
sql.append(" FROM t_spp_device");
sql.append(" WHERE pairing_device_address = ?");
return rawQueryGetDto(sql.toString(), new String[] { deviceAddress }, SppDeviceDto.class);
}
/**
* ペアリング情報をクリアする
* @param deviceAddress
*/
public void clearPairingDevice(String deviceAddress) {
SppDeviceDto sppDeviceDto = getPairingDeviceByAddress(deviceAddress);
// ペアリング情報を空にして更新
sppDeviceDto.pairingDeviceName = null;
sppDeviceDto.pairingDeviceAddress = null;
updateSppDevice(sppDeviceDto);
}
/**
* SPP端末IDでDB情報を削除
* @param sppDeviceId
*/
public void deleteById(Integer sppDeviceId) {
delete("t_spp_device", "spp_device_id=?", new String[] { "" + sppDeviceId });
}
}
package jp.agentec.abook.abv.bl.data.tables;
import java.util.ArrayList;
import java.util.List;
import jp.agentec.abook.abv.bl.common.db.SQLiteDatabase;
import jp.agentec.abook.abv.bl.data.DatabaseVersions;
/**
* CMS側から取得したSPP通信端末を管理するテーブル
*/
public class TSppDevice extends SQLiteTableScript {
public TSppDevice() {
super();
}
@Override
public List<String> getCreateScript(int version) {
List<String> ddl = new ArrayList<String>();
StringBuffer sql = new StringBuffer();
sql.append(" CREATE TABLE t_spp_device ( ");
sql.append(" spp_device_id INTEGER NOT NULL");
sql.append(" , spp_device_name VARCHAR(256) NOT NULL");
sql.append(" , data_start_index INTEGER NOT NULL ");
sql.append(" , data_end_index INTEGER NOT NULL ");
sql.append(" , pairing_device_name VARCHAR(256) ");
sql.append(" , pairing_device_address VARCHAR(256) ");
sql.append(" , PRIMARY KEY (spp_device_id) ");
sql.append(" ) ");
ddl.add(sql.toString());
return ddl;
}
/**
* マイグレーション処理
* @param oldVersion
* @param newVersion
* @return
*/
@Override
public List<String> getUpgradeScript(int oldVersion, int newVersion) {
List<String> ddl = new ArrayList<String>();
if (oldVersion < DatabaseVersions.Ver1_4_0) {
ddl.addAll(getCreateScript(newVersion));
}
return ddl;
}
@Override
public List<String> getMigrationScript(SQLiteDatabase databaseConnection, int oldVersion, int newVersion, Object[] params) {
return null;
}
}
package jp.agentec.abook.abv.bl.dto;
/**
* SPP通信の端末情報DTO
*/
public class SppDeviceDto extends AbstractDto {
// SPP通信端末ID
public Integer sppDeviceId;
// SPP通信端末名
public String sppDeviceName;
// 取得したいデータの開始時点
public Integer dataStartIndex;
// 取得したいデータの終了時点
public Integer dataEndIndex;
// ペアリング端末名
public String pairingDeviceName;
// ペアリング端末アドレス
public String pairingDeviceAddress;
@Override
public Object[] getInsertValues() {
return new Object[] { sppDeviceId, sppDeviceName, dataStartIndex, dataEndIndex, pairingDeviceName, pairingDeviceAddress };
}
@Override
public Object[] getUpdateValues() {
return new Object[] { sppDeviceName, dataStartIndex, dataEndIndex, pairingDeviceName, pairingDeviceAddress, sppDeviceId };
}
@Override
public String[] getKeyValues() {
return new String[] { "" + sppDeviceId };
}
}
......@@ -264,8 +264,5 @@
android:theme="@style/AppTheme"
android:configChanges="keyboardHidden|orientation|screenSize" >
</activity>
<activity android:name="jp.agentec.abook.abv.ui.home.activity.SppBluetoothPairingSettingActivity"
android:theme="@style/AppTheme">
</activity>
</application>
</manifest>
\ No newline at end of file
......@@ -1515,15 +1515,16 @@
<string name="clickable_detail_button">(詳細)</string>
<string name="err_gert_term_of_use_text">利用規約の取得に失敗しました。ネットワークの接続状態を確認してください。</string>
<!-- アルコールチェッカー -->
<string name="set_title_pairing">ペアリング</string>
<string name="set_title_pairing">アルコールチェッカー設定</string>
<string name="pairing_search_scan">スキャン</string>
<string name="pairing_search_scaning">スキャン中..</string>
<string name="pairing_search_stop">中止</string>
<string name="chino_machine">CHINO機器</string>
<string name="spp_machine">シリアル通信機器</string>
<string name="alc_setting">alc checker setting</string>
<string name="center_thermometer">中心温度計</string>
<string name="bluetooth_is_not_supported">Bluetooth機能が利用できない端末です。</string>
<string name="msg_scan_bluetooth_no_allow">BlueToothの利用を「許可」しないと、%1$sのスキャンができません。</string>
<string name="msg_location_device_no_allow">端末の設定から位置情報をONにしてください。</string>
<string name="center_thermometer">中心温度計</string>
<string name="alc_checker_setting">アルコールチェッカー設定</string>
<string name="alcohl_checker">アルコールチェッカー</string>
</resources>
......@@ -1516,7 +1516,7 @@
<string name="clickable_detail_button">(detail)</string>
<string name="err_gert_term_of_use_text">Failed to get the terms of use. Check the network connection status.</string>
<!-- アルコールチェッカー -->
<string name="set_title_pairing">Pairing</string>
<string name="set_title_pairing">Alcohol Checker Setting</string>
<string name="center_thermometer">中心温度計</string>
<string name="pairing_search_scan">Scan</string>
<string name="pairing_search_scaning">Scaning...</string>
......@@ -1524,7 +1524,6 @@
<string name="chino_machine">CHINO機器</string>
<string name="spp_machine">シリアル通信機器</string>
<string name="radiation_thermometer">放射温度計</string>
<string name="alc_setting">alc checker setting</string>
<string name="bluetooth_is_not_supported">Bluetooth is not supported.</string>
<string name="msg_scan_bluetooth_no_allow">If Bluetooth is not allow, %1$s scan is disabled.</string>
<string name="msg_location_device_no_allow">Please set the location information to ON in the device setting.</string>
......@@ -1532,4 +1531,10 @@
<string name="pairing_other_machine">Other %s</string>
<string name="pairing_other_machine_searching">Other %s(Searching...)</string>
<string name="select_spp_device_title">シリアル通信機器選択</string>
<string name="alc_checker_setting">アルコールチェッカー設定</string>
<string name="alcohl_checker">アルコールチェッカー</string>
<string name="pairing_other_alcohl_checker_searching">アルコールチェッカー(Searching...)</string>
<string name="msg_pairing_device_no_info">登録されたアルコールチェッカー情報がありません。\n設定画面のアルコールチェッカー設定から登録できます。</string>
<string name="msg_ble_connect_success">%1$sと接続になりました。%1$sを操作してください。</string>
<string name="ble_connecting">Connection...</string>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/item_spp_device_select"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/spp_device_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:minHeight="20dp"
android:padding="10dp"
android:text="@string/dummy_str"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/text_select" />
<ImageView
android:id="@+id/nextLevel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_gravity="center"
android:src="@drawable/ic_navigation_next_item"
android:visibility="visible" />
</LinearLayout>
<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:background="@android:color/darker_gray" />
</LinearLayout>
\ No newline at end of file
......@@ -75,13 +75,8 @@
</PreferenceCategory>
<PreferenceCategory android:title="@string/set_title_pairing" android:key="set_pairing" android:layout="@layout/custom_preference_category">
<PreferenceScreen
android:key="setChinoPairing"
android:title="@string/chino_machine"
android:layout="@layout/custom_preference_screen">
</PreferenceScreen>
<PreferenceScreen
android:key="setSppPairing"
android:title="@string/spp_machine"
android:key="setAlcPairing"
android:title="@string/alc_checker_setting"
android:layout="@layout/custom_preference_screen">
</PreferenceScreen>
</PreferenceCategory>
......
......@@ -3,7 +3,6 @@ package jp.agentec.abook.abv.launcher.android;
import java.util.ArrayList;
import jp.agentec.abook.abv.bl.common.Constant;
import jp.agentec.abook.abv.bl.common.Constant.ReportType;
import jp.agentec.abook.abv.bl.common.log.Logger;
import jp.agentec.abook.abv.bl.dto.BluetoothPairingDeviceInfoDto;
import jp.agentec.abook.abv.bl.dto.OperationGroupMasterDto;
......@@ -203,6 +202,10 @@ public class ABVUIDataCache {
// 放射温度計
deviceName = PreferenceUtil.getUserPref(context, UserPrefKey.BLE_DEVICE_RADIATION_TEMPERATURE_NAME, "");
deviceAddress = PreferenceUtil.getUserPref(context, UserPrefKey.BLE_DEVICE_RADIATION_TEMPERATURE_ADDRESS, "");
} else if (bluetoothDeviceType == Constant.DeviceType.alcoholChecker) {
// アルコールチェッカー
deviceName = PreferenceUtil.getUserPref(context, UserPrefKey.BLE_DEVICE_ALCOHO_CHECKER_NAME, "");
deviceAddress = PreferenceUtil.getUserPref(context, UserPrefKey.BLE_DEVICE_ALCOHO_CHECKER_ADDRESS, "");
}
// deviceNameとdeviceAddressがセットなので、どっちかの値が存在しないとnullで返す。
......@@ -227,6 +230,8 @@ public class ABVUIDataCache {
deviceAddressKey = UserPrefKey.BLE_DEVICE_CENTER_TEMPERATURE_ADDRESS;
} else if (bluetoothDeviceType == Constant.DeviceType.radiationThermomete) {
deviceAddressKey = UserPrefKey.BLE_DEVICE_RADIATION_TEMPERATURE_ADDRESS;
} else if (bluetoothDeviceType == Constant.DeviceType.alcoholChecker) {
deviceAddressKey = UserPrefKey.BLE_DEVICE_ALCOHO_CHECKER_ADDRESS;
}
if (deviceAddressKey == null) {
// 引数のデバイスタイプが定義した以外の値が入った場合
......@@ -269,6 +274,10 @@ public class ABVUIDataCache {
// 放射温度計
PreferenceUtil.putUserPref(context, UserPrefKey.BLE_DEVICE_RADIATION_TEMPERATURE_NAME, pairingDeviceInfoDto.deviceName);
PreferenceUtil.putUserPref(context, UserPrefKey.BLE_DEVICE_RADIATION_TEMPERATURE_ADDRESS, pairingDeviceInfoDto.deviceAddress);
} else if (pairingDeviceInfoDto.deviceType.equals(Constant.DeviceType.alcoholChecker)) {
// アルコールチェッカー
PreferenceUtil.putUserPref(context, UserPrefKey.BLE_DEVICE_ALCOHO_CHECKER_NAME, pairingDeviceInfoDto.deviceName);
PreferenceUtil.putUserPref(context, UserPrefKey.BLE_DEVICE_ALCOHO_CHECKER_ADDRESS, pairingDeviceInfoDto.deviceAddress);
}
}
......@@ -286,6 +295,10 @@ public class ABVUIDataCache {
// 放射温度計
PreferenceUtil.removeUserPref(context, UserPrefKey.BLE_DEVICE_RADIATION_TEMPERATURE_NAME);
PreferenceUtil.removeUserPref(context, UserPrefKey.BLE_DEVICE_RADIATION_TEMPERATURE_ADDRESS);
} else if (deviceType == Constant.DeviceType.alcoholChecker) {
// 放射温度計
PreferenceUtil.removeUserPref(context, UserPrefKey.BLE_DEVICE_ALCOHO_CHECKER_NAME);
PreferenceUtil.removeUserPref(context, UserPrefKey.BLE_DEVICE_ALCOHO_CHECKER_ADDRESS);
}
}
}
package jp.agentec.abook.abv.ui.common.activity;
import android.bluetooth.BluetoothAdapter;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
......@@ -62,6 +63,7 @@ import jp.agentec.abook.abv.bl.websocket.MeetingManager;
import jp.agentec.abook.abv.cl.environment.DeviceInfo;
import jp.agentec.abook.abv.cl.helper.ContentMarkingFileHelper;
import jp.agentec.abook.abv.cl.util.AndroidStringUtil;
import jp.agentec.abook.abv.cl.util.BleManagerUtil;
import jp.agentec.abook.abv.cl.util.ContentLogUtil;
import jp.agentec.abook.abv.cl.util.LocationManagerUtil;
import jp.agentec.abook.abv.cl.util.PreferenceUtil;
......@@ -157,6 +159,21 @@ public abstract class ABVContentViewActivity extends ABVAuthenticatedActivity {
protected boolean isCollaboration = false;
// 定数
private static final int REQUEST_CODE_ENABLEBLUETOOTH_CENTER_TEMPERATURE = 2001; // Bluetooth機能の有効化要求時の識別コード(中心温度計)
private static final int REQUEST_CODE_ENABLEBLUETOOTH_OKUDAKE = 2002; // Bluetooth機能の有効化要求時の識別コード
private static final int REQUEST_CODE_BARCODE_READER = 2003; // バーコードリーダの職別コード
private static final int REQUEST_CODE_ENABLEBLUETOOTH_RADIATION_TEMPERATURE = 2004; // Bluetooth機能の有効化要求時の識別コード(放射温度計)
private static final int REQUEST_CODE_ENABLEBLUETOOTH_SPP_MACHINE = 2005; // Bluetooth機能の有効化要求時の識別コード(SPP通信機器)
private static final int REQUEST_CODE_ENABLEBLUETOOTH_TR41 = 2006; // Bluetooth機能の有効化要求時の識別コード(TR41温度センサー)
private static final int REQUEST_CODE_ENABLEBLUETOOTH_ALCOHL_CHECKER = 2007; // Bluetooth機能の有効化要求時の識別コード(TR41温度センサー)
// Bluetooth機器連携
private BleManagerUtil bleManagerUtil; // Bluetoothの接続
// Bluetoothの接続状態
private boolean mIsConnection;
//待ち状態の時画面に表示するダイアログ
protected ABookAlertDialog mWaitingDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
......@@ -206,6 +223,35 @@ public abstract class ABVContentViewActivity extends ABVAuthenticatedActivity {
}
}
/** アルコールチェッカー関連 開始 **/
bleManagerUtil = new BleManagerUtil(this, new BleManagerUtil.BleManagerUtilListener() {
@Override
public void onGetDeviceInfo(String strTemperature) {
}
@Override
public void onGetDeviceInfoFailed(int status) {
}
@Override
public void onConnectionState() {
}
@Override
public void onDisConnectionState() {
}
@Override
public void onConnectionError(int status) {
}
});
// 遠隔連動
meetingManager = MeetingManager.getInstance();
isCollaboration = meetingManager.isCollaboration();
......@@ -922,6 +968,150 @@ public abstract class ABVContentViewActivity extends ABVAuthenticatedActivity {
// showHelpViewDialog(helpViewType);
// }
private void bleManagerDisconnect(boolean disconnect)
{
Logger.d(TAG,"-------------------------------------------------");
Logger.d(TAG, "bleManagerDisconnect = " + disconnect);
Logger.d(TAG,"-------------------------------------------------");
if (disconnect){
mIsConnection = false;
bleManagerUtil.disconnect(true);
} else {
// 何もしない
}
}
/**
* 各デバイスから値を正常に取得された場合、HTML側にコールする
* @param value 各種デバイスから取得した値
*/
private void successAfterAbookCheckAip(String value) {
JSONObject responseJson = new JSONObject();
responseJson.put(ABookKeys.TASK_QUESTION_ID, mQid);
responseJson.put("value", value);
afterABookCheckApi(mCmd, "", 0, "", responseJson.toString());
Logger.d(TAG, "successAfterAbookCheckAip JSON [%s]", responseJson.toString());
}
/**
* 中心温度計、置くだけセンサー接続の待機、TR41温度センサースキャン中、ダイヤログ表示
* @param title タイトル
* @param message 内容
*/
private void showWaitingDialog(String title, String message) {
Logger.d(TAG,"-------------------------------------------------");
Logger.d(TAG,"showWaitingDialog");
Logger.d(TAG,"-------------------------------------------------");
//待機状態のダイヤログ表示
mWaitingDialog = AlertDialogUtil.createAlertDialog(this, title);
mWaitingDialog.setMessage(message);
mWaitingDialog.setButton(DialogInterface.BUTTON_POSITIVE, getResources().getString(R.string.pairing_search_stop), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Logger.d(TAG, "waiting Dialog stop click : " + mDeviceType);
switch (mDeviceType) {
case Constant.DeviceType.centerThermomete:
case Constant.DeviceType.radiationThermomete:
case Constant.DeviceType.alcoholChecker:
Logger.d(TAG,"-------------------------------------------------");
Logger.d(TAG,"放射・中心温度計 接続待中止");
Logger.d(TAG,"-------------------------------------------------");
bleManagerDisconnect(true); // 放射温度計、中心温度計接続切断
break;
// case Constant.DeviceType.sensor:
// stopOkudakeBeaconScan(); // 置くだけセンサースキャン中止
// break;
// case Constant.DeviceType.sppBluetoothMachine:
// disConnectSppBluetooth();
// // 接続を切るのに5秒ぐらい必要なので、プログレスバーを表示して5秒後に閉じる
// showProgressPopup(getString(R.string.msg_common_processing));
// handler.postDelayed( new Runnable() {
// @Override
// public void run() {
// closeProgressPopup();
// }
// }, 5000 );
// break;
// case Constant.DeviceType.nfc: // nfc
// // Activityがバックグラウンドになったときは、受け取らない
// mNfcAdapter.disableForegroundDispatch(ABVCheckContentViewActivity.this);
// break;
// case Constant.DeviceType.tr41: // TR41温度センサー
// Logger.d(TAG,"-------------------------------------------------");
// Logger.d(TAG,"TR41温度センサー スキャン中止");
// Logger.d(TAG,"-------------------------------------------------");
// stopTR41BeaconScan();
// break;
}
successAfterAbookCheckAip("");
mWaitingDialog = null;
}
});
mWaitingDialog.show();
}
/**
* 各デバイスからエラー(接続不能など)発生した場合、HTML側にコールする
* @param errorMessage 各種デバイスから取得した値
*/
private void errorAfterAbookCheckAip(String errorMessage) {
afterABookCheckApi(mCmd, "", 1, errorMessage, null);
}
/**
* Android端末のBluetooth機能の有効化要求
* @return true:bluetooth ON, false:bluetooth OFF
*/
private boolean requestBluetoothFeature(int requestCode) {
if(bleManagerUtil.mBluetoothAdapter.isEnabled()) {
return true;
}
// デバイスのBluetooth機能が有効になっていないときは、有効化要求(ダイアログ表示)
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, requestCode);
return false;
}
/**
* BLEディバイスの中心温度計の情報取得
*/
private void setCenterThermometerDeviceInfo() {
if (requestBluetoothFeature(REQUEST_CODE_ENABLEBLUETOOTH_ALCOHL_CHECKER)) { //端末のBluetooth設定を確認
String deviceAddress = getABVUIDataCache().getPairingBluetoothDeviceAddress(Constant.DeviceType.alcoholChecker);
if (StringUtil.isNullOrEmpty(deviceAddress)) {
// 登録されている中心温度計がない場合
errorAfterAbookCheckAip(getString(R.string.msg_pairing_device_no_info));
return; // 以下の処理にかからないようにreturnする
}
if (mIsConnection) {
Logger.d(TAG,"-------------------------------------------------");
Logger.d(TAG, "isConnection = true");
Logger.d(TAG,"-------------------------------------------------");
String message = String.format(getString(R.string.msg_ble_connect_success), getString(R.string.alcohl_checker));
showWaitingDialog(getString(R.string.center_thermometer),message);
} else {
// 登録されている中心温度計がある
showWaitingDialog(getString(R.string.center_thermometer), getString(R.string.ble_connecting));
// 接続
bleManagerUtil.connect(Constant.DeviceType.centerThermomete, deviceAddress);
}
}
}
private int mDeviceType;
private String mQid;
private void getDeviceInfo(Map<String, String> abookCheckParam) {
Logger.d(TAG,"-------------------------------------------------");
Logger.d(TAG,"getDeviceInfo");
Logger.d(TAG,"-------------------------------------------------");
mDeviceType = Constant.DeviceType.alcoholChecker;
mQid = "1";
}
/**
* WebView発生を受け取るメソッド
* @param uri 情報がkey, valueの形式で格納されている
......@@ -939,6 +1129,11 @@ public abstract class ABVContentViewActivity extends ABVAuthenticatedActivity {
if (abookCheckParam.containsKey(ABookKeys.TASK_KEY)) {
mTaskKey = abookCheckParam.get(ABookKeys.TASK_KEY);
}
// アルコールチェッカーテスト
if (mCmd.equals(ABookKeys.CMD_INSERT_TASK_REPORT) || mCmd.equals(ABookKeys.CMD_CANCEL_TASK_REPORT)) {
mCmd = ABookKeys.CMD_GET_DEVICE_INFO;
getDeviceInfo(abookCheckParam);
}
int taskReportLevel = 0; // 作業報告レベル(0:報告、1:報告(回答)、2:報告(回答))
if (abookCheckParam.containsKey(ABookKeys.TASK_REPORT_LEVEL)) {
......
......@@ -73,6 +73,10 @@ public interface AppDefType {
String BLE_DEVICE_RADIATION_TEMPERATURE_NAME = "bleDeviceRadiationTemperatureName"; // 放射温度計機器の名
String BLE_DEVICE_RADIATION_TEMPERATURE_ADDRESS = "bleDeviceRadiationTemperatureAddress"; // 放射温度計機器のアドレス
// アルコールチェッカー
String BLE_DEVICE_ALCOHO_CHECKER_NAME = "bleDeviceAlcoholCheckerName"; // アルコールチェッカー機器の名
String BLE_DEVICE_ALCOHO_CHECKER_ADDRESS = "bleDeviceAlcoholCheckerAddress"; // 中心温度計機器のアドレス
String OPERATION_GROUP_MASERT_MODE = "operation_group_master"; // 通常・作業種別モード(画面)
String OPERATION_GROUP_MASERT_ID = "operation_group_master_id"; // 作業種別のID
......
......@@ -88,8 +88,9 @@ public class ABookSettingFragment extends PreferenceFragment {
private static final String PRIVACY_POLICY = "privacyPolicy";
// 機器連携(ペアリング)
private static final String SET_CHINO_PAIRING = "setChinoPairing"; // CHINO機器
private static final String SET_SPP_PAIRING = "setSppPairing"; // SPP通信機器
//private static final String SET_CHINO_PAIRING = "setChinoPairing"; // CHINO機器
//private static final String SET_SPP_PAIRING = "setSppPairing"; // SPP通信機器
private static final String SET_ALC_PAIRING = "setAlcPairing";
protected Handler handler = new Handler();
protected AlertDialog alertDialog = null;
......@@ -482,7 +483,7 @@ public class ABookSettingFragment extends PreferenceFragment {
// 機器連携のペアリング設定
private void setPairingSetting() {
// CHINO機器
PreferenceGroup chinoDevicePairing = (PreferenceGroup) findPreference(SET_CHINO_PAIRING);
PreferenceGroup chinoDevicePairing = (PreferenceGroup) findPreference(SET_ALC_PAIRING);
chinoDevicePairing.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
......@@ -499,23 +500,5 @@ public class ABookSettingFragment extends PreferenceFragment {
return true;
}
});
// SPP通信機器
PreferenceGroup sppDevicePairing = (PreferenceGroup) findPreference(SET_SPP_PAIRING);
sppDevicePairing.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
try {
// ペアリング設定画面(SPP通信)
Intent intent = new Intent();
intent.setClass(getActivity(), SppBluetoothPairingSettingActivity.class);
startActivity(intent);
} catch (Exception e) {
Logger.e(TAG, e);
}
return true;
}
});
}
}
......@@ -47,7 +47,7 @@ public class BlePairingSettingActivity extends ABVUIActivity {
private static final String CENTER_THERMOMETE_DEVICE_NAME = "MF500"; // 中心温度計のデバイス名
private static final String RADIATION_THERMOMETE_DEVICE_NAME = "IR-TB"; // 放射温度計のデバイス名
private static final String ALC_DEVICE_NAME = "FALC"; // アルコールチェッカーデバイス名
private static final String ALCOHOL_CHECKER_DEVICE_NAME = "FALC"; // アルコールチェッカーデバイス名
// メンバー変数
private Handler mHandler; // UIスレッド操作ハンドラ : 「一定時間後にスキャンをやめる処理」で必要
......@@ -73,8 +73,9 @@ public class BlePairingSettingActivity extends ABVUIActivity {
Logger.d("mScanCallback device.getName() = " + device.getName());
}
// 識別商品名に絞る ALC_DEVICE_NAME
//if(device.getName() != null && (device.getName().startsWith(CENTER_THERMOMETE_DEVICE_NAME) || device.getName().startsWith(RADIATION_THERMOMETE_DEVICE_NAME)))
if(device.getName() != null && (device.getName().startsWith(ALC_DEVICE_NAME)))
if(device.getName() != null && (device.getName().startsWith(CENTER_THERMOMETE_DEVICE_NAME)
|| device.getName().startsWith(RADIATION_THERMOMETE_DEVICE_NAME)
|| (device.getName().startsWith(ALCOHOL_CHECKER_DEVICE_NAME) )))
{
if (!mSavedDeviceAddressList.contains(device.getAddress())) { //登録されたデバイスの場合、スキャン情報から除外する。
boolean isAdd = true;
......@@ -98,7 +99,7 @@ public class BlePairingSettingActivity extends ABVUIActivity {
// スキャンに失敗
@Override
public void onScanFailed( int errorCode ) {
public void onScanFailed(int errorCode) {
super.onScanFailed( errorCode );
}
};
......@@ -110,7 +111,7 @@ public class BlePairingSettingActivity extends ABVUIActivity {
setContentView(R.layout.pairing_setting);
TextView deviceTitle = (TextView) findViewById(R.id.device_toolbar_title);
deviceTitle.setText(getString(R.string.chino_machine));
deviceTitle.setText(getString(R.string.alc_checker_setting));
// 戻り値の初期化
setResult( Activity.RESULT_CANCELED );
......@@ -126,6 +127,8 @@ public class BlePairingSettingActivity extends ABVUIActivity {
deviceType = DeviceType.centerThermomete;
} else if (rowData.title.startsWith(RADIATION_THERMOMETE_DEVICE_NAME)) {
deviceType = DeviceType.radiationThermomete;
} else if (rowData.title.startsWith(ALCOHOL_CHECKER_DEVICE_NAME)) {
deviceType = DeviceType.alcoholChecker;
}
if (deviceType != null) {
......@@ -147,7 +150,7 @@ public class BlePairingSettingActivity extends ABVUIActivity {
bleManagerUtil = new BleManagerUtil(this, null);
bleManagerUtil.startDeviceInfo();
//bleManagerUtil.mBluetoothAdapter.startDiscovery();
bleManagerUtil.mBluetoothAdapter.startDiscovery();
ListView listView = (ListView) findViewById(R.id.devicelist); // リストビューの取得
listView.setAdapter(mBleListAdapter); // リストビューにビューアダプターをセット
......@@ -308,6 +311,9 @@ public class BlePairingSettingActivity extends ABVUIActivity {
} else if (bleListRowData.title.startsWith(RADIATION_THERMOMETE_DEVICE_NAME)) {
// デバイス名がIR-TBから始まると放射温度計と見做す。
pairingDeviceInfo.deviceType = DeviceType.radiationThermomete;
} else if (bleListRowData.title.startsWith(ALCOHOL_CHECKER_DEVICE_NAME)) {
// デバイス名がMF500から始まるとアルコールチェッカーとみなす
pairingDeviceInfo.deviceType = DeviceType.alcoholChecker;
}
// 上記のdeviceTypeがセットされた場合のみ、ローカルのxmlに保存する
......@@ -343,7 +349,8 @@ public class BlePairingSettingActivity extends ABVUIActivity {
private List<SectionHeaderData> getSectionListInfo() {
List<SectionHeaderData> sectionList = new ArrayList<>();
List<BluetoothPairingDeviceInfoDto> bluetoothPairingInfoDtoList = getABVUIDataCache().getPairingBluetoothDeviceInfoList(Arrays.asList(DeviceType.centerThermomete, DeviceType.radiationThermomete));
List<BluetoothPairingDeviceInfoDto> bluetoothPairingInfoDtoList =
getABVUIDataCache().getPairingBluetoothDeviceInfoList(Arrays.asList(DeviceType.centerThermomete, DeviceType.radiationThermomete, DeviceType.alcoholChecker));
if (CollectionUtil.isNotEmpty(bluetoothPairingInfoDtoList)) {
for (BluetoothPairingDeviceInfoDto bluetoothPairingDeviceInfoDto : bluetoothPairingInfoDtoList) {
// ペアリング情報が既に保存されてる場合はヘッダー情報を各機器毎に追加する
......@@ -351,12 +358,17 @@ public class BlePairingSettingActivity extends ABVUIActivity {
sectionList.add(new SectionHeaderData(String.format(getString(R.string.pairing_save_machine), getString(R.string.center_thermometer))));
} else if (bluetoothPairingDeviceInfoDto.deviceType.equals(DeviceType.radiationThermomete)) {
sectionList.add(new SectionHeaderData(String.format(getString(R.string.pairing_save_machine), getString(R.string.radiation_thermometer))));
} else if (bluetoothPairingDeviceInfoDto.deviceType.equals(DeviceType.alcoholChecker)) {
sectionList.add(new SectionHeaderData(String.format(getString(R.string.pairing_save_machine), getString(R.string.alcohl_checker))));
}
}
}
// その他のヘッダー情報追加
sectionList.add(new SectionHeaderData(String.format(getString(mScanning ? R.string.pairing_other_machine_searching : R.string.pairing_other_machine), getString(R.string.chino_machine))));
if (mScanning) {
sectionList.add(new SectionHeaderData(String.format(getString(R.string.pairing_other_machine_searching), getString(R.string.alcohl_checker))));
} else {
sectionList.add(new SectionHeaderData(String.format(getString(R.string.alc_checker_setting))));
}
return sectionList;
}
......@@ -367,7 +379,8 @@ public class BlePairingSettingActivity extends ABVUIActivity {
private List<List<BleListRowData>> getRowListInfo() {
List<List<BleListRowData>> rowList = new ArrayList<List<BleListRowData>>();
// 引数で指定したタイプリストのペアリング情報を取得
List<BluetoothPairingDeviceInfoDto> bluetoothPairingInfoDtoList = getABVUIDataCache().getPairingBluetoothDeviceInfoList(Arrays.asList(DeviceType.centerThermomete, DeviceType.radiationThermomete));
List<BluetoothPairingDeviceInfoDto> bluetoothPairingInfoDtoList =
getABVUIDataCache().getPairingBluetoothDeviceInfoList(Arrays.asList(DeviceType.centerThermomete, DeviceType.radiationThermomete, DeviceType.alcoholChecker));
if (CollectionUtil.isNotEmpty(bluetoothPairingInfoDtoList)) {
for (BluetoothPairingDeviceInfoDto bluetoothPairingDeviceInfoDto : bluetoothPairingInfoDtoList) {
......@@ -392,12 +405,11 @@ public class BlePairingSettingActivity extends ABVUIActivity {
List<BleListRowData> scanRowDataList = new ArrayList<BleListRowData>();
for (BluetoothDevice bleDevice : mScanDeviceInfoList) {
String labelDeviceName = "";
// if (bleDevice.getName().startsWith(CENTER_THERMOMETE_DEVICE_NAME)) {
// labelDeviceName = getString(R.string.center_thermometer);
// } else if (bleDevice.getName().startsWith(RADIATION_THERMOMETE_DEVICE_NAME)) {
// labelDeviceName = getString(R.string.radiation_thermometer);
// }
if (bleDevice.getName().startsWith(ALC_DEVICE_NAME)) {
if (bleDevice.getName().startsWith(CENTER_THERMOMETE_DEVICE_NAME)) {
labelDeviceName = getString(R.string.center_thermometer);
} else if (bleDevice.getName().startsWith(RADIATION_THERMOMETE_DEVICE_NAME)) {
labelDeviceName = getString(R.string.radiation_thermometer);
} else if (bleDevice.getName().startsWith(ALCOHOL_CHECKER_DEVICE_NAME)) {
labelDeviceName = "アルコールチェッカー";
}
BleListRowData scanRowData = new BleListRowData(bleDevice.getName(), labelDeviceName, bleDevice.getAddress(), false);
......
package jp.agentec.abook.abv.ui.home.activity;
import android.app.Activity;
import android.app.Dialog;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.Handler;
import android.provider.Settings;
import android.view.View;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import jp.agentec.abook.abv.bl.common.Constant;
import jp.agentec.abook.abv.bl.common.Constant.DeviceType;
import jp.agentec.abook.abv.bl.common.log.Logger;
import jp.agentec.abook.abv.bl.data.dao.AbstractDao;
import jp.agentec.abook.abv.bl.data.dao.SppDeviceDao;
import jp.agentec.abook.abv.bl.dto.BluetoothPairingDeviceInfoDto;
import jp.agentec.abook.abv.bl.dto.SppDeviceDto;
import jp.agentec.abook.abv.cl.util.BleManagerUtil;
import jp.agentec.abook.abv.launcher.android.R;
import jp.agentec.abook.abv.ui.common.activity.ABVUIActivity;
import jp.agentec.abook.abv.ui.common.util.ABVToastUtil;
import jp.agentec.abook.abv.ui.home.adapter.BleListAdapter;
import jp.agentec.abook.abv.ui.home.adapter.BleListRowData;
import jp.agentec.abook.abv.ui.home.adapter.SelectSppDeviceAdapter;
import jp.agentec.abook.abv.ui.home.adapter.common.SectionHeaderData;
import jp.agentec.abook.abv.ui.home.helper.ABookPermissionHelper;
import jp.agentec.adf.util.CollectionUtil;
import jp.agentec.adf.util.StringUtil;
public class SppBluetoothPairingSettingActivity extends ABVUIActivity {
private static final String TAG = "SppBluetoothPairingSettingActivity";
// 定数
private static final int REQUEST_ENABLEBLUETOOTH = 1; // Bluetooth機能の有効化要求時の識別コード
private static final long SCAN_PERIOD = 20000; // スキャン時間。単位はミリ秒。
// メンバー変数
private Handler mHandler; // UIスレッド操作ハンドラ : 「一定時間後にスキャンをやめる処理」で必要
private boolean mScanning = false; // スキャン中かどうかのフラグ
private Button mButton_Scan;
private BleListAdapter mBleListAdapter; // Adapter
private List<BluetoothDevice> mScanDeviceInfoList = new ArrayList<BluetoothDevice>();
private BleManagerUtil bleManagerUtil;
private List<String> mSavedDeviceAddressList = new ArrayList<String>(); //登録した端末アドレス
private BroadcastReceiver mBluetoothSearchReceiver;
// SPP通信端末の選択リストダイアログ
private Dialog mSelectSppDeviceListDialog;
// SPP通信端末のDaoクラス
private SppDeviceDao mSppDeviceDao = AbstractDao.getDao(SppDeviceDao.class);
@Override
protected void onCreate(Bundle savedInstanceState) {
Logger.i(TAG, "onCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.pairing_setting);
TextView deviceTitle = (TextView) findViewById(R.id.device_toolbar_title);
deviceTitle.setText(getString(R.string.spp_machine));
// 戻り値の初期化
setResult( Activity.RESULT_CANCELED );
List<SectionHeaderData> sectionList = getSectionListInfo();
List<List<BleListRowData>> rowList = getRowListInfo();
mBleListAdapter = new BleListAdapter( this, sectionList, rowList, new BleListAdapter.BleListAdapterListener() { // ビューアダプターの初期化
@Override
public void onDeleteConnectInfo(BleListRowData rowData) { // 登録されたデバイス情報削除
Logger.d(TAG, String.format("[deleteConnectInfo] title : %s, address : %s", rowData.title, rowData.deviceAddress));
// ペアリング情報をクリアする。
mSppDeviceDao.clearPairingDevice(rowData.deviceAddress);
// 保存済みのアドレスを管理するメンバー変数も削除
mSavedDeviceAddressList.remove(rowData.deviceAddress);
reloadListView();
//スキャン実行中ではない場合はスキャン実行
if (!mScanning) {
startScan();
}
}
});
ListView listView = (ListView) findViewById(R.id.devicelist); // リストビューの取得
listView.setAdapter(mBleListAdapter); // リストビューにビューアダプターをセット
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Logger.d(TAG, "position = " + position);
BleListRowData bleListRowData = (BleListRowData)parent.getItemAtPosition(position);
// 既に保存されてる場合は何もしない
if (!bleListRowData.isSaved) {
localSaveDeviceInfo(bleListRowData);
}
}
});
// Reload Button
mButton_Scan = (Button)findViewById( R.id.btn_reload );
mButton_Scan.setAllCaps(false);
mButton_Scan.setText(getString(R.string.pairing_search_scan));
mButton_Scan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mScanning) {
stopScan();
} else {
startScan();
}
}
});
// Bluetoothと接続処理する
bleManagerUtil = new BleManagerUtil(this, null);
bleManagerUtil.startDeviceInfo();
bleManagerUtil.mBluetoothAdapter.startDiscovery();
// UIスレッド操作ハンドラの作成(「一定時間後にスキャンをやめる処理」で使用する)
mHandler = new Handler();
}
// 初回表示時、および、ポーズからの復帰時
@Override
protected void onResume() {
super.onResume();
//画面表示時にスキャン実行
startScan();
}
// 別のアクティビティ(か別のアプリ)に移行したことで、バックグラウンドに追いやられた時
@Override
protected void onPause() {
super.onPause();
// スキャンの停止
stopScan();
}
// 機能の有効化ダイアログの操作結果
@Override
protected void onActivityResult( int requestCode, int resultCode, Intent data ) {
switch (requestCode) {
case REQUEST_ENABLEBLUETOOTH: // Bluetooth有効化要求
if( Activity.RESULT_CANCELED == resultCode ) { // 有効にされなかった
ABVToastUtil.showMakeText(getApplicationContext(), String.format(getString(R.string.msg_scan_bluetooth_no_allow), getString(R.string.spp_machine)), Toast.LENGTH_SHORT);
return;
}
break;
}
super.onActivityResult( requestCode, resultCode, data );
}
// スキャンの開始
private void startScan() {
//BlueTooth許可チェック
if (!requestBluetoothFeature()) return;
LocationManager lm = (LocationManager) this.getSystemService(this.LOCATION_SERVICE);
final boolean gpsEnabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
// GPSの状態を取得(getSystemtServiceからのGPS ON/OFF取得が取れない場合があるため、secureで取得したgpsも判定するため)
final boolean secureLocationGpsEnabled = android.provider.Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED).contains("gps");
//端末側の位置情報許可チェック
if (!(gpsEnabled || secureLocationGpsEnabled)) {
showSimpleAlertDialog(R.string.spp_machine, R.string.msg_location_device_no_allow);
return;
}
ABookPermissionHelper helper = new ABookPermissionHelper(this, Constant.ABookPermissionType.AccessFineLocation, null);
//アプリ側の位置情報許可チェック(置くだけセンサーとLinkingアプリの通信できないため)
if (!helper.checkMultiPermissions(true)) return;
//インテントフィルターとBroadcastReceiverの登録
IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
filter.addAction(BluetoothDevice.ACTION_FOUND);
mBluetoothSearchReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (BluetoothDevice.ACTION_FOUND.equals(intent.getAction())) {
// 取得したbluetooth情報を取得
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
// 識別商品名に絞る
if (device.getName() != null) {
if (!mSavedDeviceAddressList.contains(device.getAddress())) { //登録されたデバイスの場合、スキャン情報から除外する。
boolean isAdd = true;
for (BluetoothDevice savedDevice : mScanDeviceInfoList) {
if (savedDevice.getAddress().equals(device.getAddress())) {
// スキャンされたデバイス情報リストから一つでも一致する場合、既にスキャンされたと見做し追加しない。
isAdd = false;
}
}
if (isAdd) {
mScanDeviceInfoList.add(device);
}
reloadListView();
}
Logger.d("device.getName() = " + device.getName() + "device.getAddress() = " + device.getAddress());
}
} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(intent.getAction())) {
Logger.d("-------ACTION_DISCOVERY_FINISHED");
// startDiscoveryのスキャン時間が12秒であるため、再度スタートさせる(20秒のタイマーが別であるため無限には実行しない)
bleManagerUtil.mBluetoothAdapter.startDiscovery();
}
}
};
registerReceiver(mBluetoothSearchReceiver, filter);
// bluetoothAdapterから発見開始行う(結果はブロードキャストで取得 mBluetoothSearchReceiver)
bleManagerUtil.mBluetoothAdapter.startDiscovery();
// スキャン開始(一定時間後にスキャン停止する)
mHandler.postDelayed( new Runnable() {
@Override
public void run() {
stopScan();
Logger.d(TAG, "scan in 20 sec");
}
}, SCAN_PERIOD );
mScanning = true;
mButton_Scan.setText(getString(R.string.pairing_search_stop));
reloadListView();
Logger.d(TAG, "start scan !!");
}
// スキャンの停止
private void stopScan() {
// 一定期間後にスキャン停止するためのHandlerのRunnableの削除
mHandler.removeCallbacksAndMessages( null );
if (mBluetoothSearchReceiver != null) {
unregisterReceiver(mBluetoothSearchReceiver);
mBluetoothSearchReceiver = null;
}
mScanning = false;
mButton_Scan.setText(getString(R.string.pairing_search_scan));
reloadListView();
Logger.d(TAG, "stop scan !!");
}
/**
* SPP通信の端末選択ダイアログ表示処理
* @param rowData bluetooth情報
*/
private void showSelectSppDeviceListDialog(final BleListRowData rowData) {
if (mSelectSppDeviceListDialog == null) {
mSelectSppDeviceListDialog = new Dialog(this);
mSelectSppDeviceListDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
mSelectSppDeviceListDialog.setCanceledOnTouchOutside(false);
mSelectSppDeviceListDialog.setContentView(R.layout.bluetooth_device_select_dialog);
mSelectSppDeviceListDialog.findViewById(R.id.closeBtn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mSelectSppDeviceListDialog.dismiss();
}
});
}
ListView listView = (ListView) mSelectSppDeviceListDialog.findViewById(R.id.listView1);
final List<SppDeviceDto> sppDeviceDtoList = mSppDeviceDao.getAllSppDevice();
listView.setAdapter(new SelectSppDeviceAdapter(this, sppDeviceDtoList));
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mSelectSppDeviceListDialog.dismiss();
// タップしたポジションの端末情報を取得
SppDeviceDto selectedSppDeviceDto = sppDeviceDtoList.get(position);
// 取得したデータのペアリングが既に存在し、ペアリング情報が一致しない場合上書きと見做す。
if (!StringUtil.isNullOrEmpty(selectedSppDeviceDto.pairingDeviceAddress)) {
if (!selectedSppDeviceDto.pairingDeviceAddress.equals(rowData.deviceAddress)) {
mSavedDeviceAddressList.remove(selectedSppDeviceDto.pairingDeviceAddress);
}
}
// ペアリング情報をセットして、更新する
selectedSppDeviceDto.pairingDeviceName = rowData.title;
selectedSppDeviceDto.pairingDeviceAddress = rowData.deviceAddress;
mSppDeviceDao.updateSppDevice(sppDeviceDtoList.get(position));
// スキャンされた情報から保存されたのでdeviceは削除
for (BluetoothDevice savedScanDevice : mScanDeviceInfoList) {
if (savedScanDevice.getAddress().equals(rowData.deviceAddress)) {
mScanDeviceInfoList.remove(savedScanDevice);
break;
}
}
//画面リロード
reloadListView();
}
});
if (mSelectSppDeviceListDialog != null) {
mSelectSppDeviceListDialog.show();
}
}
private void localSaveDeviceInfo(BleListRowData bleListRowData) {
// アドレスが保存されてる場合無視
if (!mSavedDeviceAddressList.contains(bleListRowData.deviceAddress)) {
// 選択ダイアログ表示
showSelectSppDeviceListDialog(bleListRowData);
}
}
// 閉じるボタンの処理
public void onClickCloseView(View v) {
finish();
}
/**
* ListViewのSectionデータを作成する。
* @return Rowデータリスト
*/
private List<SectionHeaderData> getSectionListInfo() {
List<SectionHeaderData> sectionList = new ArrayList<>();
// SPP通信端末の情報を取得
List<SppDeviceDto> sppDeviceDtoList = mSppDeviceDao.getPairingDeviceList();
if (CollectionUtil.isNotEmpty(sppDeviceDtoList)) {
for (SppDeviceDto dto : sppDeviceDtoList) {
sectionList.add(new SectionHeaderData(String.format(getString(R.string.pairing_save_machine), dto.sppDeviceName)));
}
}
// その他のヘッダー情報追加
sectionList.add(new SectionHeaderData(String.format(getString(mScanning ? R.string.pairing_other_machine_searching : R.string.pairing_other_machine), getString(R.string.spp_machine))));
return sectionList;
}
/**
* ListViewのRowデータを作成する。
* @return Rowデータリスト
*/
private List<List<BleListRowData>> getRowListInfo() {
List<List<BleListRowData>> rowList = new ArrayList<List<BleListRowData>>();
// SPP通信機器のペアリングデバイス情報を取得
List<SppDeviceDto> sppDeviceDtoList = mSppDeviceDao.getPairingDeviceList();
if (CollectionUtil.isNotEmpty(sppDeviceDtoList)) {
for (SppDeviceDto dto : sppDeviceDtoList) {
List<BleListRowData> rowDataList = new ArrayList<BleListRowData>();
rowDataList.add(new BleListRowData(dto.pairingDeviceName, dto.pairingDeviceAddress, true));
rowList.add(rowDataList);
// 保存された情報であれば、メンバー変数で管理するため、listに追加、既に存在する場合は何もしない
if (!mSavedDeviceAddressList.contains(dto.pairingDeviceAddress)) {
mSavedDeviceAddressList.add(dto.pairingDeviceAddress);
}
}
}
if (mScanDeviceInfoList.size() == 0) {
List<BleListRowData> scanRowDataList = new ArrayList<BleListRowData>();
BleListRowData scanRowData = new BleListRowData("" , "" );
scanRowDataList.add(scanRowData);
rowList.add(scanRowDataList);
} else {
List<BleListRowData> scanRowDataList = new ArrayList<BleListRowData>();
for (BluetoothDevice bleDevice : mScanDeviceInfoList) {
BleListRowData scanRowData = new BleListRowData(bleDevice.getName(), bleDevice.getAddress(), false);
scanRowDataList.add(scanRowData);
}
rowList.add(scanRowDataList);
}
return rowList;
}
/**
* ListViewをリロードする。
*/
private void reloadListView() {
List<SectionHeaderData> sectionList = getSectionListInfo();
List<List<BleListRowData>> rowList = getRowListInfo();
mBleListAdapter.setItem(sectionList, rowList);
}
// デバイスのBluetooth機能の有効化要求
private boolean requestBluetoothFeature() {
if(bleManagerUtil.mBluetoothAdapter.isEnabled()) {
return true;
}
// デバイスのBluetooth機能が有効になっていないときは、有効化要求(ダイアログ表示)
Intent enableBtIntent = new Intent( BluetoothAdapter.ACTION_REQUEST_ENABLE );
startActivityForResult( enableBtIntent, REQUEST_ENABLEBLUETOOTH );
return false;
}
}
package jp.agentec.abook.abv.ui.home.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
import jp.agentec.abook.abv.bl.dto.FixPushMessageDto;
import jp.agentec.abook.abv.bl.dto.SppDeviceDto;
import jp.agentec.abook.abv.launcher.android.R;
/**
* SPP端末選択アダプタ用
*/
public class SelectSppDeviceAdapter extends ArrayAdapter<SppDeviceDto> {
private LayoutInflater mInflater;
private List<SppDeviceDto> mSppDeviceDtoList;
public SelectSppDeviceAdapter(Context context, List<SppDeviceDto> sppDeviceDtoList) {
super(context, 0, sppDeviceDtoList);
mSppDeviceDtoList = sppDeviceDtoList;
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item_spp_device_select, parent, false);
holder = new ViewHolder();
holder.tvSppDeviceName = (TextView) convertView.findViewById(R.id.spp_device_name);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
final SppDeviceDto sppDeviceDto = getItem(position);
if (sppDeviceDto != null) {
holder.tvSppDeviceName.setText(sppDeviceDto.sppDeviceName);
}
return convertView;
}
private static class ViewHolder {
TextView tvSppDeviceName;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment