Showing
4 changed files
with
124 additions
and
31 deletions
... | @@ -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() { | ... | ... |
-
Please register or login to post a comment