/* LinkingBeaconActivity.java Copyright (c) 2016 NTT DOCOMO,INC. Released under the MIT license http://opensource.org/licenses/mit-license.php */ package org.deviceconnect.android.deviceplugin.linking.setting; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.TextView; import org.deviceconnect.android.deviceplugin.linking.BuildConfig; import org.deviceconnect.android.deviceplugin.linking.LinkingApplication; import org.deviceconnect.android.deviceplugin.linking.R; import org.deviceconnect.android.deviceplugin.linking.beacon.LinkingBeaconManager; import org.deviceconnect.android.deviceplugin.linking.beacon.data.LinkingBeacon; import java.text.SimpleDateFormat; import java.util.Locale; public class LinkingBeaconActivity extends AppCompatActivity implements LinkingBeaconManager.OnBeaconEventListener, LinkingBeaconManager.OnBeaconButtonEventListener { private static final String TAG = "LinkingPlugIn"; public static final String EXTRA_ID = "extraId"; public static final String VENDOR_ID = "vendorId"; private final SimpleDateFormat mDateFormat = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss", Locale.JAPAN); private LinkingBeacon mLinkingBeacon; @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_linking_beacon); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setTitle(getString(R.string.activity_beacon_title)); actionBar.setElevation(0); } Intent intent = getIntent(); if (intent != null) { Bundle args = intent.getExtras(); if (args != null) { int extraId = args.getInt(EXTRA_ID); int vendorId = args.getInt(VENDOR_ID); LinkingApplication app = (LinkingApplication) getApplication(); LinkingBeaconManager mgr = app.getLinkingBeaconManager(); mLinkingBeacon = mgr.findBeacon(extraId, vendorId); } } if (BuildConfig.DEBUG) { Log.i(TAG, "LinkingBeaconActivity#onCreate"); Log.i(TAG, "Beacon: " + mLinkingBeacon); } Button clearBtn = (Button) findViewById(R.id.activity_beacon_clear_btn); if (clearBtn != null) { clearBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { clearTextView(); } }); } setBeaconData(); if (mLinkingBeacon == null) { finish(); } } @Override protected void onResume() { super.onResume(); LinkingApplication app = (LinkingApplication) getApplication(); LinkingBeaconManager mgr = app.getLinkingBeaconManager(); mgr.addOnBeaconEventListener(this); mgr.addOnBeaconButtonEventListener(this); } @Override protected void onPause() { LinkingApplication app = (LinkingApplication) getApplication(); LinkingBeaconManager mgr = app.getLinkingBeaconManager(); mgr.removeOnBeaconEventListener(this); mgr.removeOnBeaconButtonEventListener(this); super.onPause(); } @Override public boolean onOptionsItemSelected(final MenuItem item) { if (item.getItemId() == android.R.id.home) { finish(); return true; } return super.onOptionsItemSelected(item); } @Override public void onNotify(final LinkingBeacon beacon) { runOnUiThread(new Runnable() { @Override public void run() { setBeaconData(); } }); } @Override public void onClickButton(final LinkingBeacon beacon, final int keyCode, final long timeStamp) { if (beacon.equals(mLinkingBeacon)) { runOnUiThread(new Runnable() { @Override public void run() { addButton("buttonId:[" + keyCode + "]"); } }); } } private void setBeaconData() { if (mLinkingBeacon == null) { if (BuildConfig.DEBUG) { Log.e(TAG, "Linking beacon is not exist."); } return; } setVendorId(String.valueOf(mLinkingBeacon.getVendorId())); setExtraId(String.valueOf(mLinkingBeacon.getExtraId())); setVersion(String.valueOf(mLinkingBeacon.getVersion())); setTimeStamp(mLinkingBeacon.getTimeStamp()); setStatus(mLinkingBeacon.isOnline() ? "Online" : "Offline"); if (mLinkingBeacon.getBatteryData() != null) { setLowBattery(String.valueOf(mLinkingBeacon.getBatteryData().isLowBatteryFlag())); setBatteryLevel(getString(R.string.activity_beacon_unit_percent, mLinkingBeacon.getBatteryData().getLevel())); } else { setLowBattery("-"); setBatteryLevel("-"); } if (mLinkingBeacon.getTemperatureData() != null) { setTemperature(getString(R.string.activity_beacon_unit_c, mLinkingBeacon.getTemperatureData().getValue())); } else { setTemperature("-"); } if (mLinkingBeacon.getAtmosphericPressureData() != null) { setAtmosphericPressure(getString(R.string.activity_beacon_unit_hectopascal, mLinkingBeacon.getAtmosphericPressureData().getValue())); } else { setAtmosphericPressure("-"); } if (mLinkingBeacon.getHumidityData() != null) { setHumidity(getString(R.string.activity_beacon_unit_percent, mLinkingBeacon.getHumidityData().getValue())); } else { setHumidity("-"); } if (mLinkingBeacon.getGattData() != null) { setDistance(getDistanceString(mLinkingBeacon.getGattData().getDistance())); } else { setDistance("-"); } if (mLinkingBeacon.getRawData() != null) { setRawData(String.valueOf(mLinkingBeacon.getRawData().getValue())); } else { setRawData("-"); } } private void clearTextView() { TextView view = (TextView) findViewById(R.id.activity_beacon_button_event); if (view != null) { view.setText(""); } } private void setVendorId(final String vendorId) { TextView view = (TextView) findViewById(R.id.activity_beacon_vendor_id); if (view != null) { view.setText(vendorId); } } private void setExtraId(final String extraId) { TextView view = (TextView) findViewById(R.id.activity_beacon_extra_id); if (view != null) { view.setText(extraId); } } private void setVersion(final String version) { TextView view = (TextView) findViewById(R.id.activity_beacon_version); if (view != null) { view.setText(version); } } private void setStatus(final String status) { TextView view = (TextView) findViewById(R.id.activity_beacon_status); if (view != null) { view.setText(status); } } private void setTimeStamp(final long timeStamp) { TextView view = (TextView) findViewById(R.id.activity_beacon_time_stamp); if (view != null) { view.setText(mDateFormat.format(timeStamp)); } } private void setLowBattery(final String lowBattery) { TextView view = (TextView) findViewById(R.id.activity_beacon_battery_low); if (view != null) { view.setText(lowBattery); } } private void setBatteryLevel(final String level) { TextView view = (TextView) findViewById(R.id.activity_beacon_battery_level); if (view != null) { view.setText(level); } } private void setAtmosphericPressure(final String atmosphericPressure) { TextView view = (TextView) findViewById(R.id.activity_beacon_atmospheric_pressure); if (view != null) { view.setText(atmosphericPressure); } } private void setTemperature(final String temperature) { TextView view = (TextView) findViewById(R.id.activity_beacon_temperature); if (view != null) { view.setText(temperature); } } private void setHumidity(final String humidity) { TextView view = (TextView) findViewById(R.id.activity_beacon_humidity); if (view != null) { view.setText(humidity); } } private void setDistance(final String distance) { TextView view = (TextView) findViewById(R.id.activity_beacon_distance); if (view != null) { view.setText(distance); } } private void setRawData(final String rawData) { TextView view = (TextView) findViewById(R.id.activity_beacon_raw_data); if (view != null) { view.setText(rawData); } } private String getDistanceString(final int distance) { switch (distance) { case 1: return getString(R.string.activity_beacon_distance_close); case 2: return getString(R.string.activity_beacon_distance_little_close); case 3: return getString(R.string.activity_beacon_distance_far); default: return "-"; } } private void addButton(final String value) { TextView view = (TextView) findViewById(R.id.activity_beacon_button_event); if (view != null) { String text = (String) view.getText(); text = value + "\n" + text; view.setText(text); } } }