오윤석

기기 관련 API 추가

...@@ -8,6 +8,7 @@ import com.google.gson.JsonElement; ...@@ -8,6 +8,7 @@ import com.google.gson.JsonElement;
8 import com.google.gson.JsonObject; 8 import com.google.gson.JsonObject;
9 import com.google.gson.JsonParser; 9 import com.google.gson.JsonParser;
10 import com.sunnni.smartdoorlock.data.Auth; 10 import com.sunnni.smartdoorlock.data.Auth;
11 +import com.sunnni.smartdoorlock.data.Device;
11 import com.sunnni.smartdoorlock.data.RemoteRecord; 12 import com.sunnni.smartdoorlock.data.RemoteRecord;
12 import com.sunnni.smartdoorlock.data.Setting; 13 import com.sunnni.smartdoorlock.data.Setting;
13 import com.sunnni.smartdoorlock.data.Video; 14 import com.sunnni.smartdoorlock.data.Video;
...@@ -260,4 +261,57 @@ public class Api { ...@@ -260,4 +261,57 @@ public class Api {
260 }); 261 });
261 } 262 }
262 263
264 + static public void getDevices(final Callback callback) {
265 + callApi("GET", "/api/device", null, new Callback() {
266 + @Override
267 + public void callbackMethod(Object obj) {
268 + ApiResult apiResult = (ApiResult) obj;
269 + if(apiResult.isSuccess()) {
270 + JsonObject resp = (JsonObject) apiResult.getData();
271 + if(resp.has("deviceList")) {
272 + ArrayList<Device> videos = new ArrayList<Device>();
273 + Iterator it = resp.getAsJsonArray("deviceList").iterator();
274 + while(it.hasNext()) {
275 + JsonObject jsonObject = (JsonObject) it.next();
276 + videos.add(new Device(jsonObject.get("device_id").getAsInt(), jsonObject.get("rfid_id").getAsString(), jsonObject.get("created").getAsString()));
277 + }
278 + callback.callbackMethod(videos);
279 + } else {
280 + callback.callbackMethod(null);
281 + }
282 + } else {
283 + callback.callbackMethod(null);
284 + }
285 + }
286 + });
287 + }
288 +
289 + static public void removeDevice(Device device, final Callback callback) {
290 + callApi("DELETE", "/api/device/" + device.getDeviceId(), null, new Callback() {
291 + @Override
292 + public void callbackMethod(Object obj) {
293 + ApiResult apiResult = (ApiResult) obj;
294 + if(apiResult.isSuccess()) {
295 + callback.callbackMethod(new Boolean(true));
296 + } else {
297 + callback.callbackMethod(null);
298 + }
299 + }
300 + });
301 + }
302 +
303 + static public void requestAddDevice(final Callback callback) {
304 + callApi("POST", "/api/device/request", null, new Callback() {
305 + @Override
306 + public void callbackMethod(Object obj) {
307 + ApiResult apiResult = (ApiResult) obj;
308 + if(apiResult.isSuccess()) {
309 + callback.callbackMethod(new Boolean(true));
310 + } else {
311 + callback.callbackMethod(null);
312 + }
313 + }
314 + });
315 + }
316 +
263 } 317 }
......
1 package com.sunnni.smartdoorlock.data; 1 package com.sunnni.smartdoorlock.data;
2 2
3 public class Device { 3 public class Device {
4 - public String deviceNumber; 4 + private int deviceId;
5 - public String registerDate; 5 + private String RFIDId;
6 + private String created;
6 7
7 - public Device(String number, String date){ 8 + public Device(int deviceId, String RFIDId, String created){
8 - this.deviceNumber = number; 9 + this.deviceId = deviceId;
9 - this.registerDate = date; 10 + this.RFIDId = RFIDId;
11 + this.created = created;
12 + }
13 +
14 + public String getCreated() {
15 + return created;
16 + }
17 +
18 + public int getDeviceId() {
19 + return deviceId;
20 + }
21 +
22 + public String getRFIDId() {
23 + return RFIDId;
10 } 24 }
11 } 25 }
......
...@@ -9,17 +9,22 @@ import androidx.recyclerview.widget.LinearLayoutManager; ...@@ -9,17 +9,22 @@ import androidx.recyclerview.widget.LinearLayoutManager;
9 import androidx.recyclerview.widget.RecyclerView; 9 import androidx.recyclerview.widget.RecyclerView;
10 10
11 import android.content.DialogInterface; 11 import android.content.DialogInterface;
12 +import android.content.Intent;
12 import android.os.Bundle; 13 import android.os.Bundle;
13 import android.view.View; 14 import android.view.View;
14 import android.widget.ScrollView; 15 import android.widget.ScrollView;
15 import android.widget.Toast; 16 import android.widget.Toast;
16 17
17 import com.sunnni.smartdoorlock.R; 18 import com.sunnni.smartdoorlock.R;
19 +import com.sunnni.smartdoorlock.api.Api;
18 import com.sunnni.smartdoorlock.data.Device; 20 import com.sunnni.smartdoorlock.data.Device;
21 +import com.sunnni.smartdoorlock.data.RemoteRecord;
19 22
20 import java.util.ArrayList; 23 import java.util.ArrayList;
21 import java.util.Objects; 24 import java.util.Objects;
22 25
26 +import static android.view.InputDevice.getDevice;
27 +
23 public class DeviceManagerActivity extends AppCompatActivity { 28 public class DeviceManagerActivity extends AppCompatActivity {
24 29
25 ArrayList<Device> mList = new ArrayList<Device>(); 30 ArrayList<Device> mList = new ArrayList<Device>();
...@@ -37,7 +42,7 @@ public class DeviceManagerActivity extends AppCompatActivity { ...@@ -37,7 +42,7 @@ public class DeviceManagerActivity extends AppCompatActivity {
37 setToolbar(mToolbar); 42 setToolbar(mToolbar);
38 43
39 setRecyclerView(); 44 setRecyclerView();
40 - setDeviceList(); 45 + getDevice();
41 46
42 init(); 47 init();
43 } 48 }
...@@ -78,26 +83,21 @@ public class DeviceManagerActivity extends AppCompatActivity { ...@@ -78,26 +83,21 @@ public class DeviceManagerActivity extends AppCompatActivity {
78 mRecyclerView.setAdapter(mAdapter); 83 mRecyclerView.setAdapter(mAdapter);
79 } 84 }
80 85
81 - // 기기 목록 dummy data -> api 생성되면 수정 86 + public void getDevice() {
82 - private void setDeviceList(){ 87 + Api.getDevices(new Api.Callback() {
83 - Device temp; 88 + @Override
84 - mList.add(temp = new Device("0047617826460", "2020.10.08 17:21:30")); 89 + public void callbackMethod(Object obj) {
85 - mList.add(temp = new Device("0047617826460", "2020.10.08 17:21:30")); 90 + if(obj == null) {
86 - mList.add(temp = new Device("0047617826460", "2020.10.08 17:21:30")); 91 + Toast.makeText(getApplicationContext(), "연결 상태가 불안정합니다.", Toast.LENGTH_SHORT).show();
87 - mList.add(temp = new Device("0047617826460", "2020.10.08 17:21:30")); 92 + startActivity(new Intent(DeviceManagerActivity.this, MainActivity.class));
88 - mList.add(temp = new Device("0047617826460", "2020.10.08 17:21:30")); 93 + return;
89 - mList.add(temp = new Device("0047617826460", "2020.10.08 17:21:30")); 94 + } else {
90 - mList.add(temp = new Device("0047617826460", "2020.10.08 17:21:30")); 95 + mList.clear();
91 - mList.add(temp = new Device("0047617826460", "2020.10.08 17:21:30")); 96 + mList.addAll(0, (ArrayList<Device>) obj);
92 - mList.add(temp = new Device("0047617826460", "2020.10.08 17:21:30")); 97 + mAdapter.notifyDataSetChanged();
93 - mList.add(temp = new Device("0047617826460", "2020.10.08 17:21:30")); 98 + }
94 - mList.add(temp = new Device("0047617826460", "2020.10.08 17:21:30")); 99 + }
95 - mList.add(temp = new Device("0047617826460", "2020.10.08 17:21:30")); 100 + });
96 - mList.add(temp = new Device("0047617826460", "2020.10.08 17:21:30"));
97 - mList.add(temp = new Device("0047617826460", "2020.10.08 17:21:30"));
98 - mList.add(temp = new Device("0047617826460", "2020.10.08 17:21:30"));
99 -
100 - mAdapter.notifyDataSetChanged();
101 } 101 }
102 102
103 private void remoteControlDialog() { 103 private void remoteControlDialog() {
...@@ -107,7 +107,18 @@ public class DeviceManagerActivity extends AppCompatActivity { ...@@ -107,7 +107,18 @@ public class DeviceManagerActivity extends AppCompatActivity {
107 builder.setPositiveButton("추가", new DialogInterface.OnClickListener() { 107 builder.setPositiveButton("추가", new DialogInterface.OnClickListener() {
108 @Override 108 @Override
109 public void onClick(DialogInterface dialog, int which) { 109 public void onClick(DialogInterface dialog, int which) {
110 - Toast.makeText(DeviceManagerActivity.this, "도어락에 기기를 태그해주세요.", Toast.LENGTH_LONG).show(); 110 + Api.requestAddDevice(new Api.Callback() {
111 + @Override
112 + public void callbackMethod(Object obj) {
113 + if(obj == null) {
114 + Toast.makeText(getApplicationContext(), "연결 상태가 불안정합니다.", Toast.LENGTH_SHORT).show();
115 + startActivity(new Intent(DeviceManagerActivity.this, MainActivity.class));
116 + return;
117 + } else {
118 + Toast.makeText(DeviceManagerActivity.this, "도어락에 기기를 태그해주세요.", Toast.LENGTH_LONG).show();
119 + }
120 + }
121 + });
111 } 122 }
112 }); 123 });
113 builder.setNegativeButton("취소", new DialogInterface.OnClickListener() { 124 builder.setNegativeButton("취소", new DialogInterface.OnClickListener() {
......
1 package com.sunnni.smartdoorlock.ui; 1 package com.sunnni.smartdoorlock.ui;
2 2
3 import android.content.DialogInterface; 3 import android.content.DialogInterface;
4 +import android.content.Intent;
4 import android.view.LayoutInflater; 5 import android.view.LayoutInflater;
5 import android.view.View; 6 import android.view.View;
6 import android.view.ViewGroup; 7 import android.view.ViewGroup;
...@@ -14,6 +15,7 @@ import androidx.core.content.res.ResourcesCompat; ...@@ -14,6 +15,7 @@ import androidx.core.content.res.ResourcesCompat;
14 import androidx.recyclerview.widget.RecyclerView; 15 import androidx.recyclerview.widget.RecyclerView;
15 16
16 import com.sunnni.smartdoorlock.R; 17 import com.sunnni.smartdoorlock.R;
18 +import com.sunnni.smartdoorlock.api.Api;
17 import com.sunnni.smartdoorlock.data.Device; 19 import com.sunnni.smartdoorlock.data.Device;
18 20
19 import java.util.ArrayList; 21 import java.util.ArrayList;
...@@ -33,9 +35,9 @@ public class DeviceRecyclerViewAdapter extends RecyclerView.Adapter<DeviceRecycl ...@@ -33,9 +35,9 @@ public class DeviceRecyclerViewAdapter extends RecyclerView.Adapter<DeviceRecycl
33 this.mTrashcan = v.findViewById(R.id.img_trashcan); 35 this.mTrashcan = v.findViewById(R.id.img_trashcan);
34 } 36 }
35 37
36 - void bind(Device device) { 38 + void bind(final Device device) {
37 - mTvDeviceNum.setText(device.deviceNumber); 39 + mTvDeviceNum.setText(device.getRFIDId());
38 - mTvRegisterDate.setText(device.registerDate); 40 + mTvRegisterDate.setText(device.getCreated());
39 41
40 mTrashcan.setOnClickListener(new View.OnClickListener() { 42 mTrashcan.setOnClickListener(new View.OnClickListener() {
41 @Override 43 @Override
...@@ -46,7 +48,19 @@ public class DeviceRecyclerViewAdapter extends RecyclerView.Adapter<DeviceRecycl ...@@ -46,7 +48,19 @@ public class DeviceRecyclerViewAdapter extends RecyclerView.Adapter<DeviceRecycl
46 builder.setPositiveButton("삭제", new DialogInterface.OnClickListener() { 48 builder.setPositiveButton("삭제", new DialogInterface.OnClickListener() {
47 @Override 49 @Override
48 public void onClick(DialogInterface dialog, int which) { 50 public void onClick(DialogInterface dialog, int which) {
49 - Toast.makeText(itemView.getContext(), "삭제되었습니다.", Toast.LENGTH_SHORT).show(); 51 + Api.removeDevice(device, new Api.Callback() {
52 + @Override
53 + public void callbackMethod(Object obj) {
54 + if(obj == null) {
55 + Toast.makeText(itemView.getContext(), "연결 상태가 불안정합니다.", Toast.LENGTH_SHORT).show();
56 + return;
57 + } else {
58 + Toast.makeText(itemView.getContext(), "삭제되었습니다.", Toast.LENGTH_LONG).show();
59 + // TODO : 목록 refresh
60 + // DeviceManagerActivity.getDevices 를 호출하거나 DeviceManagerActivity.mList에서 device 제거
61 + }
62 + }
63 + });
50 } 64 }
51 }); 65 });
52 builder.setNegativeButton("취소", new DialogInterface.OnClickListener() { 66 builder.setNegativeButton("취소", new DialogInterface.OnClickListener() {
......