Toggle navigation
Toggle navigation
This project
Loading...
Sign in
cse437_e
/
smartdoorlock-frontend
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
오윤석
2020-11-16 23:54:10 +0900
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
ea21a7adaa63126dca25f34fb55613c6e68c82e4
ea21a7ad
1 parent
393077cf
비디오 관련 API
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
202 additions
and
3 deletions
app/src/main/java/com/sunnni/smartdoorlock/api/Api.java
app/src/main/java/com/sunnni/smartdoorlock/data/Video.java
app/src/main/java/com/sunnni/smartdoorlock/ui/VideoCheckActivity.java
app/src/main/res/layout/activity_video_check.xml
app/src/main/java/com/sunnni/smartdoorlock/api/Api.java
View file @
ea21a7a
...
...
@@ -10,6 +10,7 @@ import com.google.gson.JsonParser;
import
com.sunnni.smartdoorlock.data.Auth
;
import
com.sunnni.smartdoorlock.data.RemoteRecord
;
import
com.sunnni.smartdoorlock.data.Setting
;
import
com.sunnni.smartdoorlock.data.Video
;
import
java.io.BufferedReader
;
import
java.io.InputStream
;
...
...
@@ -55,14 +56,13 @@ public class Api {
}
if
(
"POST"
.
equals
(
method
)
||
"PUT"
.
equals
(
method
))
{
if
(
params
==
null
)
{
throw
new
Exception
(
"params is null"
);
}
if
(
params
!=
null
)
{
OutputStream
os
=
conn
.
getOutputStream
();
os
.
write
(
params
.
toString
().
getBytes
());
os
.
flush
();
os
.
close
();
}
}
int
status
=
conn
.
getResponseCode
();
Log
.
d
(
"status"
,
String
.
valueOf
(
status
));
...
...
@@ -201,4 +201,63 @@ public class Api {
}
});
}
static
public
void
getVideos
(
final
Callback
callback
)
{
callApi
(
"GET"
,
"/api/video"
,
null
,
new
Callback
()
{
@Override
public
void
callbackMethod
(
Object
obj
)
{
ApiResult
apiResult
=
(
ApiResult
)
obj
;
if
(
apiResult
.
isSuccess
())
{
JsonObject
resp
=
(
JsonObject
)
apiResult
.
getData
();
if
(
resp
.
has
(
"videoList"
))
{
ArrayList
<
Video
>
videos
=
new
ArrayList
<
Video
>();
Iterator
it
=
resp
.
getAsJsonArray
(
"videoList"
).
iterator
();
while
(
it
.
hasNext
())
{
JsonObject
jsonObject
=
(
JsonObject
)
it
.
next
();
videos
.
add
(
new
Video
(
jsonObject
.
get
(
"vid_name"
).
getAsString
(),
jsonObject
.
get
(
"thumb"
).
getAsString
(),
jsonObject
.
get
(
"created"
).
getAsString
()));
}
callback
.
callbackMethod
(
videos
);
}
else
{
callback
.
callbackMethod
(
null
);
}
}
else
{
callback
.
callbackMethod
(
null
);
}
}
});
}
static
public
void
getVideo
(
Video
video
,
final
Callback
callback
)
{
callApi
(
"GET"
,
"/api/video/"
+
video
.
getVidName
(),
null
,
new
Callback
()
{
@Override
public
void
callbackMethod
(
Object
obj
)
{
ApiResult
apiResult
=
(
ApiResult
)
obj
;
if
(
apiResult
.
isSuccess
())
{
JsonObject
resp
=
(
JsonObject
)
apiResult
.
getData
();
if
(
resp
.
has
(
"s3link"
))
{
callback
.
callbackMethod
(
resp
.
get
(
"s3link"
).
getAsString
());
}
else
{
callback
.
callbackMethod
(
null
);
}
}
else
{
callback
.
callbackMethod
(
null
);
}
}
});
}
static
public
void
removeVideo
(
Video
video
,
final
Callback
callback
)
{
callApi
(
"DELETE"
,
"/api/video/"
+
video
.
getVidName
(),
null
,
new
Callback
()
{
@Override
public
void
callbackMethod
(
Object
obj
)
{
ApiResult
apiResult
=
(
ApiResult
)
obj
;
if
(
apiResult
.
isSuccess
())
{
callback
.
callbackMethod
(
new
Boolean
(
true
));
}
else
{
callback
.
callbackMethod
(
null
);
}
}
});
}
}
...
...
app/src/main/java/com/sunnni/smartdoorlock/data/Video.java
0 → 100644
View file @
ea21a7a
package
com
.
sunnni
.
smartdoorlock
.
data
;
public
class
Video
{
private
String
vidName
;
private
String
thumb
;
private
String
created
;
private
String
s3link
;
public
Video
(
String
vidName
,
String
thumb
,
String
created
)
{
this
.
vidName
=
vidName
;
this
.
thumb
=
thumb
;
this
.
created
=
created
;
}
public
void
setS3link
(
String
s3link
)
{
this
.
s3link
=
s3link
;
}
public
String
getCreated
()
{
return
created
;
}
public
String
getS3link
()
{
return
s3link
;
}
public
String
getThumb
()
{
return
thumb
;
}
public
String
getVidName
()
{
return
vidName
;
}
}
app/src/main/java/com/sunnni/smartdoorlock/ui/VideoCheckActivity.java
View file @
ea21a7a
...
...
@@ -3,15 +3,26 @@ package com.sunnni.smartdoorlock.ui;
import
androidx.appcompat.app.AppCompatActivity
;
import
androidx.appcompat.widget.Toolbar
;
import
android.content.Intent
;
import
android.os.Bundle
;
import
android.view.View
;
import
android.widget.Button
;
import
android.widget.Toast
;
import
com.sunnni.smartdoorlock.R
;
import
com.sunnni.smartdoorlock.api.Api
;
import
com.sunnni.smartdoorlock.data.RemoteRecord
;
import
com.sunnni.smartdoorlock.data.Video
;
import
java.util.ArrayList
;
import
java.util.Objects
;
public
class
VideoCheckActivity
extends
AppCompatActivity
{
ArrayList
<
Video
>
mVideoList
=
new
ArrayList
<
Video
>();
Button
mBtnRemoveVideo
;
Button
mBtnViewVideo
;
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
...
...
@@ -19,6 +30,61 @@ public class VideoCheckActivity extends AppCompatActivity {
Toolbar
mToolbar
=
findViewById
(
R
.
id
.
toolbar_video_check
);
setToolbar
(
mToolbar
);
mBtnRemoveVideo
=
(
Button
)
findViewById
(
R
.
id
.
btn_remove_video
);
mBtnViewVideo
=
(
Button
)
findViewById
(
R
.
id
.
btn_view_video
);
getVideos
();
mBtnRemoveVideo
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
view
)
{
// TODO : 삭제 버튼이 클릭되었을 때
// 원래는 각 비디오에 대해서 동작해야 함. 코드 의미 전달을 위해 video[0]에 대해 삭제하는 코드만 구현
Api
.
removeVideo
(
mVideoList
.
get
(
0
),
new
Api
.
Callback
()
{
@Override
public
void
callbackMethod
(
Object
obj
)
{
if
(
obj
==
null
)
{
Toast
.
makeText
(
getApplicationContext
(),
"연결 상태가 불안정합니다."
,
Toast
.
LENGTH_SHORT
).
show
();
startActivity
(
new
Intent
(
VideoCheckActivity
.
this
,
MainActivity
.
class
));
return
;
}
else
{
// 삭제가 완료되었으므로 비디오 리스트 다시 조회
// (또는 해당 비디오만 삭제하고 notifyDataSetChanged)
getVideos
();
}
}
});
}
});
mBtnViewVideo
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
view
)
{
// TODO : 비디오가 클릭되었을 때 (비디오 재생)
// 원래는 각 비디오에 대해서 동작해야 함. 코드 의미 전달을 위해 video[0]에 대해 재생하는 코드만 구현
final
Video
video
=
mVideoList
.
get
(
0
);
// s3 링크를 받아오지 못한 경우에만 조회. 이미 받아온 경우 바로 해당 링크로 재생
if
(
video
.
getS3link
()
==
null
)
{
Api
.
getVideo
(
mVideoList
.
get
(
0
),
new
Api
.
Callback
()
{
@Override
public
void
callbackMethod
(
Object
obj
)
{
if
(
obj
==
null
)
{
Toast
.
makeText
(
getApplicationContext
(),
"연결 상태가 불안정합니다."
,
Toast
.
LENGTH_SHORT
).
show
();
startActivity
(
new
Intent
(
VideoCheckActivity
.
this
,
MainActivity
.
class
));
return
;
}
else
{
String
s3link
=
(
String
)
obj
;
video
.
setS3link
(
s3link
);
// TODO : 비디오 재생 코드 구현 (video.setS3link를 통해)
}
}
});
}
else
{
// TODO : 비디오 재생 코드 구현 (video.setS3link를 통해)
}
}
});
}
private
void
setToolbar
(
Toolbar
toolbar
){
...
...
@@ -35,4 +101,22 @@ public class VideoCheckActivity extends AppCompatActivity {
}
});
}
private
void
getVideos
()
{
Api
.
getVideos
(
new
Api
.
Callback
()
{
@Override
public
void
callbackMethod
(
Object
obj
)
{
// TODO : 비디오 리스트가 로드되었을 때
if
(
obj
==
null
)
{
Toast
.
makeText
(
getApplicationContext
(),
"연결 상태가 불안정합니다."
,
Toast
.
LENGTH_SHORT
).
show
();
startActivity
(
new
Intent
(
VideoCheckActivity
.
this
,
MainActivity
.
class
));
return
;
}
else
{
mVideoList
.
clear
();
mVideoList
.
addAll
(
0
,
(
ArrayList
<
Video
>)
obj
);
//mAdapter.notifyDataSetChanged();
}
}
});
}
}
...
...
app/src/main/res/layout/activity_video_check.xml
View file @
ea21a7a
...
...
@@ -26,4 +26,26 @@
</androidx.appcompat.widget.Toolbar>
<Button
android:id=
"@+id/btn_remove_video"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginBottom=
"563dp"
android:layout_marginStart=
"100dp"
android:text=
"btn_remove_video"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@+id/toolbar_video_check"
/>
<Button
android:id=
"@+id/btn_view_video"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginBottom=
"504dp"
android:layout_marginStart=
"6dp"
android:text=
"btn_view_video"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintStart_toStartOf=
"@+id/btn_remove_video"
app:layout_constraintTop_toBottomOf=
"@+id/toolbar_video_check"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
...
...
Please
register
or
login
to post a comment