Commit 26e29607 authored by idic's avatar idic

感覺可以work 應該

parent fb4c1d5a
...@@ -44,6 +44,7 @@ ...@@ -44,6 +44,7 @@
android:exported="true"/> android:exported="true"/>
<activity <activity
android:parentActivityName=".MainActivity"
android:name=".DeviceOperatorActivity"/> android:name=".DeviceOperatorActivity"/>
</application> </application>
......
...@@ -14,6 +14,7 @@ import android.widget.*; ...@@ -14,6 +14,7 @@ import android.widget.*;
import org.prlab.idic.privacypolicy.adapter.MessageRecyclerViewAdapter; import org.prlab.idic.privacypolicy.adapter.MessageRecyclerViewAdapter;
import org.prlab.idic.privacypolicy.ble.BLECustomScript; import org.prlab.idic.privacypolicy.ble.BLECustomScript;
import org.prlab.idic.privacypolicy.pojo.Message; import org.prlab.idic.privacypolicy.pojo.Message;
import org.prlab.idic.privacypolicy.schedule.Schedulable;
import org.prlab.idic.privacypolicy.storage.PrivacyPolicyStorageImpl; import org.prlab.idic.privacypolicy.storage.PrivacyPolicyStorageImpl;
import org.prlab.idic.privacypolicy.tool.BaseUtils; import org.prlab.idic.privacypolicy.tool.BaseUtils;
...@@ -35,7 +36,7 @@ public class DeviceOperatorActivity extends AppCompatActivity { ...@@ -35,7 +36,7 @@ public class DeviceOperatorActivity extends AppCompatActivity {
private TextView mMessageBarTextView; private TextView mMessageBarTextView;
private EditText mTemperatureEditText; private EditText mTemperatureEditText;
private Button mTemperatureButton; private ImageButton mTemperatureButton;
private Switch mAirPurifierSwitch; private Switch mAirPurifierSwitch;
private RecyclerView.Adapter mMessageRecyclerViewAdapter; private RecyclerView.Adapter mMessageRecyclerViewAdapter;
...@@ -61,7 +62,7 @@ public class DeviceOperatorActivity extends AppCompatActivity { ...@@ -61,7 +62,7 @@ public class DeviceOperatorActivity extends AppCompatActivity {
private void initView() { private void initView() {
mMessageBarTextView = (TextView) findViewById(R.id.text_operation_message_bar); mMessageBarTextView = (TextView) findViewById(R.id.text_operation_message_bar);
mTemperatureEditText = (EditText) findViewById(R.id.edit_operation_current_temperature); mTemperatureEditText = (EditText) findViewById(R.id.edit_operation_current_temperature);
mTemperatureButton = (Button) findViewById(R.id.button_operation_send_temperature); mTemperatureButton = (ImageButton) findViewById(R.id.button_operation_send_temperature);
mTemperatureButton.setOnClickListener(mTemperatureClickedListener); mTemperatureButton.setOnClickListener(mTemperatureClickedListener);
mAirPurifierSwitch = (Switch) findViewById(R.id.switch_operation_air_purifier); mAirPurifierSwitch = (Switch) findViewById(R.id.switch_operation_air_purifier);
...@@ -113,6 +114,8 @@ public class DeviceOperatorActivity extends AppCompatActivity { ...@@ -113,6 +114,8 @@ public class DeviceOperatorActivity extends AppCompatActivity {
} }
}; };
private List<Schedulable> mPermissionSettingQueue = new LinkedList<>();
private BLECustomScript mBLECustomScript = new BLECustomScript() { private BLECustomScript mBLECustomScript = new BLECustomScript() {
int expectedSuccessValue = 0; int expectedSuccessValue = 0;
...@@ -176,8 +179,17 @@ public class DeviceOperatorActivity extends AppCompatActivity { ...@@ -176,8 +179,17 @@ public class DeviceOperatorActivity extends AppCompatActivity {
}); });
} }
private boolean settingPermission() {
if (mPermissionSettingQueue.size() > 0) {
Log.i(TAG, "Continue to work.");
mPermissionSettingQueue.remove(0).work();
return false;
}
return true;
}
@Override @Override
public void onDiscoverServiceCompleted(BluetoothGatt gatt) { public void onDiscoverServiceCompleted(final BluetoothGatt gatt) {
expectedSuccessValue = 0; expectedSuccessValue = 0;
successValue = 0; successValue = 0;
...@@ -187,33 +199,44 @@ public class DeviceOperatorActivity extends AppCompatActivity { ...@@ -187,33 +199,44 @@ public class DeviceOperatorActivity extends AppCompatActivity {
layerUUIDs.add(String.valueOf(service.getUuid())); layerUUIDs.add(String.valueOf(service.getUuid()));
//Write service layer selection //Write service layer selection
int selection = mPolicyStorage.get(layerUUIDs); int selection = mPolicyStorage.get(layerUUIDs);
if (selection != -1) { if (selection == -1) selection = 0;
BluetoothGattCharacteristic characteristic = service.getCharacteristic(PRIVACY_POLICY_ACCEPT_UUID); final BluetoothGattCharacteristic characteristic = service.getCharacteristic(PRIVACY_POLICY_ACCEPT_UUID);
if (characteristic != null) { if (characteristic != null) {
characteristic.setValue(BaseUtils.int2Bytes(selection)); final int finalSelection = selection;
Log.i(TAG, Arrays.toString(BaseUtils.int2Bytes(selection))); mPermissionSettingQueue.add(new Schedulable() {
gatt.writeCharacteristic(characteristic); @Override
expectedSuccessValue++; public void work() {
addMessage("Policy Setting", "Set " + BaseUtils.stringList2ArrayString(layerUUIDs) + " to " + selection + "."); characteristic.setValue(BaseUtils.int2Bytes(finalSelection));
} Log.i(TAG, Arrays.toString(BaseUtils.int2Bytes(finalSelection)));
gatt.writeCharacteristic(characteristic);
expectedSuccessValue++;
}
});
addMessage("Policy Setting", "Set " + BaseUtils.stringList2ArrayString(layerUUIDs) + " to " + selection + ".");
} }
for (BluetoothGattCharacteristic characteristic : service.getCharacteristics()) { for (BluetoothGattCharacteristic characteristic2 : service.getCharacteristics()) {
layerUUIDs.add(String.valueOf(characteristic.getUuid())); layerUUIDs.add(String.valueOf(characteristic2.getUuid()));
//Write characteristic layer selection //Write characteristic layer selection
selection = mPolicyStorage.get(layerUUIDs); selection = mPolicyStorage.get(layerUUIDs);
if (selection != -1) { if (selection == -1) selection = 0;
BluetoothGattDescriptor descriptor = characteristic.getDescriptor(PRIVACY_POLICY_ACCEPT_UUID); final BluetoothGattDescriptor descriptor = characteristic2.getDescriptor(PRIVACY_POLICY_ACCEPT_UUID);
if (descriptor != null) { if (descriptor != null) {
descriptor.setValue(BaseUtils.int2Bytes(selection)); final int finalSelection1 = selection;
Log.i(TAG, Arrays.toString(BaseUtils.int2Bytes(selection))); mPermissionSettingQueue.add(new Schedulable() {
gatt.writeDescriptor(descriptor); @Override
expectedSuccessValue++; public void work() {
addMessage("Policy Setting", "Set " + BaseUtils.stringList2ArrayString(layerUUIDs) + " to " + selection + "."); descriptor.setValue(BaseUtils.int2Bytes(finalSelection1));
} Log.i(TAG, Arrays.toString(BaseUtils.int2Bytes(finalSelection1)));
gatt.writeDescriptor(descriptor);
expectedSuccessValue++;
}
});
addMessage("Policy Setting", "Set " + BaseUtils.stringList2ArrayString(layerUUIDs) + " to " + selection + ".");
} }
layerUUIDs.remove(layerUUIDs.size() - 1); layerUUIDs.remove(layerUUIDs.size() - 1);
} }
} }
settingPermission();
} }
@Override @Override
...@@ -223,16 +246,14 @@ public class DeviceOperatorActivity extends AppCompatActivity { ...@@ -223,16 +246,14 @@ public class DeviceOperatorActivity extends AppCompatActivity {
List<String> layerUUIDs = new LinkedList<>(); List<String> layerUUIDs = new LinkedList<>();
layerUUIDs.add(characteristic.getService().getUuid().toString()); layerUUIDs.add(characteristic.getService().getUuid().toString());
addMessage("Policy Setting", addMessage("Policy Setting",
"Set " + BaseUtils.stringList2ArrayString(layerUUIDs) + "Set " + BaseUtils.stringList2ArrayString(layerUUIDs) + (status == GATT_SUCCESS ? " success" : " failure") + " .");
(status == GATT_SUCCESS ? " success" : " failure") + " ."); if (settingPermission())
requestServices(); requestServices();
} else if (TEMPERATURE_UUID.equals(characteristic.getUuid())) { } else if (TEMPERATURE_UUID.equals(characteristic.getUuid())) {
addMessage("Temperature Setting", addMessage("Temperature Setting", "Set " + BaseUtils.bytesToInt(values) + " to the air conditioning.");
"Set " + BaseUtils.bytesToInt(values) + " to air conditioning.");
requestTemperature(); requestTemperature();
} else if (AIR_UUID.equals(characteristic.getUuid())) { } else if (AIR_UUID.equals(characteristic.getUuid())) {
addMessage("Air Purifier Setting", "Turn " + addMessage("Air Purifier Setting", "Turn " + (BaseUtils.bytesToInt(values) == 1 ? "on " : "off ") + "the air purifier" + ".");
(BaseUtils.bytesToInt(values) == 1 ? " on" : " off") + "air purifier" + ".");
requestAirPurifier(); requestAirPurifier();
} }
} }
...@@ -256,9 +277,10 @@ public class DeviceOperatorActivity extends AppCompatActivity { ...@@ -256,9 +277,10 @@ public class DeviceOperatorActivity extends AppCompatActivity {
List<String> layerUUIDs = new LinkedList<>(); List<String> layerUUIDs = new LinkedList<>();
layerUUIDs.add(descriptor.getCharacteristic().getService().getUuid().toString()); layerUUIDs.add(descriptor.getCharacteristic().getService().getUuid().toString());
layerUUIDs.add(descriptor.getCharacteristic().getUuid().toString()); layerUUIDs.add(descriptor.getCharacteristic().getUuid().toString());
addMessage("Policy setting", "Set " + BaseUtils.stringList2ArrayString(layerUUIDs) + addMessage("Policy Setting", "Set " + BaseUtils.stringList2ArrayString(layerUUIDs) +
(status == GATT_SUCCESS ? " success" : " failure") + " ."); (status == GATT_SUCCESS ? " success" : " failure") + " .");
requestServices(); if (settingPermission())
requestServices();
} }
} }
...@@ -456,4 +478,13 @@ public class DeviceOperatorActivity extends AppCompatActivity { ...@@ -456,4 +478,13 @@ public class DeviceOperatorActivity extends AppCompatActivity {
}); });
} }
@Override
public void onBackPressed() {
super.onBackPressed();
if (mBluetoothGatt != null) {
mBluetoothGatt.disconnect();
mBluetoothGatt.close();
}
}
} }
package org.prlab.idic.privacypolicy.schedule;
/**
* Created by IDIC on 2017/2/24.
*/
public interface Schedulable {
void work();
}
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M6,18c0,0.55 0.45,1 1,1h1v3.5c0,0.83 0.67,1.5 1.5,1.5s1.5,-0.67 1.5,-1.5L11,19h2v3.5c0,0.83 0.67,1.5 1.5,1.5s1.5,-0.67 1.5,-1.5L16,19h1c0.55,0 1,-0.45 1,-1L18,8L6,8v10zM3.5,8C2.67,8 2,8.67 2,9.5v7c0,0.83 0.67,1.5 1.5,1.5S5,17.33 5,16.5v-7C5,8.67 4.33,8 3.5,8zM20.5,8c-0.83,0 -1.5,0.67 -1.5,1.5v7c0,0.83 0.67,1.5 1.5,1.5s1.5,-0.67 1.5,-1.5v-7c0,-0.83 -0.67,-1.5 -1.5,-1.5zM15.53,2.16l1.3,-1.3c0.2,-0.2 0.2,-0.51 0,-0.71 -0.2,-0.2 -0.51,-0.2 -0.71,0l-1.48,1.48C13.85,1.23 12.95,1 12,1c-0.96,0 -1.86,0.23 -2.66,0.63L7.85,0.15c-0.2,-0.2 -0.51,-0.2 -0.71,0 -0.2,0.2 -0.2,0.51 0,0.71l1.31,1.31C6.97,3.26 6,5.01 6,7h12c0,-1.99 -0.97,-3.75 -2.47,-4.84zM10,5L9,5L9,4h1v1zM15,5h-1L14,4h1v1z"/>
</vector>
...@@ -28,7 +28,8 @@ ...@@ -28,7 +28,8 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/item_size"> android:layout_height="@dimen/item_size">
<Button <ImageButton
android:src="@drawable/ic_android_black_24dp"
android:id="@+id/button_operation_send_temperature" android:id="@+id/button_operation_send_temperature"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:layout_width="@dimen/item_size" android:layout_width="@dimen/item_size"
......
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