Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
I
IOTClient
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lola
IOTClient
Commits
1a4ddac9
An error occurred while fetching merge requests data.
Commit
1a4ddac9
authored
5 years ago
by
DESKTOP-NFGF3PG\zxa01
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update api
parent
a97da2ea
Changes
35
Hide whitespace changes
Inline
Side-by-side
Showing
35 changed files
with
506 additions
and
361 deletions
+506
-361
app/build.gradle
app/build.gradle
+1
-1
app/src/androidTest/java/com/example/zxa01/iotclient/component/login/BindTest.java
...com/example/zxa01/iotclient/component/login/BindTest.java
+78
-0
app/src/main/java/com/example/zxa01/iotclient/common/bindings/CustomViewBindings.java
...e/zxa01/iotclient/common/bindings/CustomViewBindings.java
+2
-0
app/src/main/java/com/example/zxa01/iotclient/common/http/Api.java
...ain/java/com/example/zxa01/iotclient/common/http/Api.java
+15
-6
app/src/main/java/com/example/zxa01/iotclient/common/http/HttpService.java
.../com/example/zxa01/iotclient/common/http/HttpService.java
+0
-60
app/src/main/java/com/example/zxa01/iotclient/common/pojo/auth/LoginMessage.java
...xample/zxa01/iotclient/common/pojo/auth/LoginMessage.java
+2
-2
app/src/main/java/com/example/zxa01/iotclient/common/pojo/device/Device.java
...om/example/zxa01/iotclient/common/pojo/device/Device.java
+9
-9
app/src/main/java/com/example/zxa01/iotclient/common/pojo/index/DeviceIndex.java
...xample/zxa01/iotclient/common/pojo/index/DeviceIndex.java
+18
-0
app/src/main/java/com/example/zxa01/iotclient/common/pojo/index/PrivacyChoiceIndex.java
...zxa01/iotclient/common/pojo/index/PrivacyChoiceIndex.java
+40
-0
app/src/main/java/com/example/zxa01/iotclient/common/shared/DefaultData.java
...om/example/zxa01/iotclient/common/shared/DefaultData.java
+21
-0
app/src/main/java/com/example/zxa01/iotclient/component/detail/DetailModel.java
...example/zxa01/iotclient/component/detail/DetailModel.java
+6
-7
app/src/main/java/com/example/zxa01/iotclient/component/detail/DetailViewModel.java
...ple/zxa01/iotclient/component/detail/DetailViewModel.java
+6
-5
app/src/main/java/com/example/zxa01/iotclient/component/home/HomeActivity.java
.../example/zxa01/iotclient/component/home/HomeActivity.java
+3
-4
app/src/main/java/com/example/zxa01/iotclient/component/home/device/DeviceFragment.java
...zxa01/iotclient/component/home/device/DeviceFragment.java
+2
-3
app/src/main/java/com/example/zxa01/iotclient/component/home/device/DeviceModel.java
...le/zxa01/iotclient/component/home/device/DeviceModel.java
+1
-18
app/src/main/java/com/example/zxa01/iotclient/component/home/device/DeviceViewModel.java
...xa01/iotclient/component/home/device/DeviceViewModel.java
+3
-17
app/src/main/java/com/example/zxa01/iotclient/component/home/device/bind/DeviceBindFragment.java
...client/component/home/device/bind/DeviceBindFragment.java
+41
-0
app/src/main/java/com/example/zxa01/iotclient/component/home/device/bind/DeviceBindModel.java
...iotclient/component/home/device/bind/DeviceBindModel.java
+35
-0
app/src/main/java/com/example/zxa01/iotclient/component/home/device/bind/DeviceBindViewModel.java
...lient/component/home/device/bind/DeviceBindViewModel.java
+59
-0
app/src/main/java/com/example/zxa01/iotclient/component/home/device/create/DeviceCreateFragment.java
...nt/component/home/device/create/DeviceCreateFragment.java
+0
-79
app/src/main/java/com/example/zxa01/iotclient/component/home/record/RecordAdapter.java
.../zxa01/iotclient/component/home/record/RecordAdapter.java
+6
-6
app/src/main/java/com/example/zxa01/iotclient/component/home/record/RecordFragment.java
...zxa01/iotclient/component/home/record/RecordFragment.java
+10
-8
app/src/main/java/com/example/zxa01/iotclient/component/home/record/RecordModel.java
...le/zxa01/iotclient/component/home/record/RecordModel.java
+15
-91
app/src/main/java/com/example/zxa01/iotclient/component/home/record/RecordViewModel.java
...xa01/iotclient/component/home/record/RecordViewModel.java
+16
-16
app/src/main/java/com/example/zxa01/iotclient/component/home/setting/SettingViewModel.java
...01/iotclient/component/home/setting/SettingViewModel.java
+1
-0
app/src/main/java/com/example/zxa01/iotclient/component/login/LoginModel.java
...m/example/zxa01/iotclient/component/login/LoginModel.java
+1
-4
app/src/main/java/com/example/zxa01/iotclient/component/login/LoginViewModel.java
...ample/zxa01/iotclient/component/login/LoginViewModel.java
+5
-4
app/src/main/java/com/example/zxa01/iotclient/component/privacy/PrivacyActivity.java
...le/zxa01/iotclient/component/privacy/PrivacyActivity.java
+0
-2
app/src/main/java/com/example/zxa01/iotclient/component/privacy/PrivacyModel.java
...ample/zxa01/iotclient/component/privacy/PrivacyModel.java
+3
-2
app/src/main/java/com/example/zxa01/iotclient/component/privacy/PrivacyViewModel.java
...e/zxa01/iotclient/component/privacy/PrivacyViewModel.java
+4
-4
app/src/main/res/layout/activity_detail.xml
app/src/main/res/layout/activity_detail.xml
+1
-1
app/src/main/res/layout/activity_login.xml
app/src/main/res/layout/activity_login.xml
+0
-1
app/src/main/res/layout/fragment_device_bind.xml
app/src/main/res/layout/fragment_device_bind.xml
+86
-0
app/src/main/res/layout/recycler_view_record.xml
app/src/main/res/layout/recycler_view_record.xml
+9
-4
app/src/main/res/values/strings.xml
app/src/main/res/values/strings.xml
+7
-7
No files found.
app/build.gradle
View file @
1a4ddac9
...
...
@@ -37,7 +37,7 @@ dependencies {
androidTestImplementation
'com.android.support.test.espresso:espresso-core:3.0.2'
// modelmapper
compile
'net.eunjae.android.modelmapper:ModelMapper:1.0.6'
implementation
'net.eunjae.android.modelmapper:ModelMapper:1.0.6'
// rxjava
implementation
"io.reactivex:rxjava:1.1.8"
...
...
This diff is collapsed.
Click to expand it.
app/src/androidTest/java/com/example/zxa01/iotclient/component/login/BindTest.java
0 → 100644
View file @
1a4ddac9
package
com.example.zxa01.iotclient.component.login
;
import
android.support.test.espresso.ViewInteraction
;
import
android.support.test.filters.LargeTest
;
import
android.support.test.rule.ActivityTestRule
;
import
android.support.test.runner.AndroidJUnit4
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
android.view.ViewParent
;
import
com.example.zxa01.iotclient.R
;
import
org.hamcrest.Description
;
import
org.hamcrest.Matcher
;
import
org.hamcrest.TypeSafeMatcher
;
import
org.junit.Rule
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
static
android
.
support
.
test
.
espresso
.
Espresso
.
onView
;
import
static
android
.
support
.
test
.
espresso
.
action
.
ViewActions
.
click
;
import
static
android
.
support
.
test
.
espresso
.
action
.
ViewActions
.
scrollTo
;
import
static
android
.
support
.
test
.
espresso
.
matcher
.
ViewMatchers
.
isDisplayed
;
import
static
android
.
support
.
test
.
espresso
.
matcher
.
ViewMatchers
.
withClassName
;
import
static
android
.
support
.
test
.
espresso
.
matcher
.
ViewMatchers
.
withId
;
import
static
android
.
support
.
test
.
espresso
.
matcher
.
ViewMatchers
.
withText
;
import
static
org
.
hamcrest
.
Matchers
.
allOf
;
import
static
org
.
hamcrest
.
Matchers
.
is
;
@LargeTest
@RunWith
(
AndroidJUnit4
.
class
)
public
class
BindTest
{
@Rule
public
ActivityTestRule
<
LoginActivity
>
mActivityTestRule
=
new
ActivityTestRule
<>(
LoginActivity
.
class
);
@Test
public
void
bindTest
()
{
ViewInteraction
appCompatButton
=
onView
(
allOf
(
withId
(
R
.
id
.
sign_in_button
),
withText
(
"登入"
),
childAtPosition
(
childAtPosition
(
withClassName
(
is
(
"android.widget.ScrollView"
)),
0
),
4
)));
appCompatButton
.
perform
(
scrollTo
(),
click
());
ViewInteraction
floatingActionButton
=
onView
(
allOf
(
withId
(
R
.
id
.
fab
),
childAtPosition
(
childAtPosition
(
withId
(
R
.
id
.
home_fragment_layout
),
0
),
2
),
isDisplayed
()));
floatingActionButton
.
perform
(
click
());
}
private
static
Matcher
<
View
>
childAtPosition
(
final
Matcher
<
View
>
parentMatcher
,
final
int
position
)
{
return
new
TypeSafeMatcher
<
View
>()
{
@Override
public
void
describeTo
(
Description
description
)
{
description
.
appendText
(
"Child at position "
+
position
+
" in parent "
);
parentMatcher
.
describeTo
(
description
);
}
@Override
public
boolean
matchesSafely
(
View
view
)
{
ViewParent
parent
=
view
.
getParent
();
return
parent
instanceof
ViewGroup
&&
parentMatcher
.
matches
(
parent
)
&&
view
.
equals
(((
ViewGroup
)
parent
).
getChildAt
(
position
));
}
};
}
}
This diff is collapsed.
Click to expand it.
app/src/main/java/com/example/zxa01/iotclient/common/bindings/CustomViewBindings.java
View file @
1a4ddac9
...
...
@@ -3,6 +3,7 @@ package com.example.zxa01.iotclient.common.bindings;
import
android.databinding.BindingAdapter
;
import
android.support.v7.widget.LinearLayoutManager
;
import
android.support.v7.widget.RecyclerView
;
import
android.view.View
;
public
class
CustomViewBindings
{
...
...
@@ -12,4 +13,5 @@ public class CustomViewBindings {
recyclerView
.
setLayoutManager
(
new
LinearLayoutManager
(
recyclerView
.
getContext
()));
recyclerView
.
setAdapter
(
adapter
);
}
}
This diff is collapsed.
Click to expand it.
app/src/main/java/com/example/zxa01/iotclient/common/http/Api.java
View file @
1a4ddac9
package
com.example.zxa01.iotclient.common.http
;
import
com.example.zxa01.iotclient.common.pojo.device.Device
;
import
com.example.zxa01.iotclient.common.pojo.index.PrivacyChoiceIndex
;
import
com.example.zxa01.iotclient.common.pojo.privacy.PrivacyChoice
;
import
com.example.zxa01.iotclient.common.pojo.privacy.PrivacyPolicyReport
;
import
com.example.zxa01.iotclient.common.shared.Config
;
...
...
@@ -41,25 +42,33 @@ public class Api {
public
interface
ApiInterface
{
// 未使用
@POST
(
"/api/breeds/list/all"
)
Call
<
Object
>
login
();
// 取得與該gateway所綁定的裝置列表
@GET
(
"/device"
)
Call
<
List
<
Device
>>
get
Devices
();
Call
<
List
<
Device
>>
read
Devices
();
// 新增並綁定裝置與gateway
@POST
(
"/device/{udn}"
)
Call
<
Device
>
bindDeviceAndGateway
(
@Path
(
"udn"
)
String
udn
);
// 取得該裝置相關資料
@GET
(
"/device/{udn}"
)
Call
<
Device
>
readDevice
(
@Path
(
"udn"
)
String
udn
);
@GET
(
"/device/privacy/{udn}"
)
// 取得該裝置的隱私政策與相關資料
@GET
(
"/privacy/{udn}"
)
Call
<
PrivacyPolicyReport
>
readPrivacyPolicyReportByDevice
(
@Path
(
"udn"
)
String
udn
);
// 表達隱私偏好
@POST
(
"/choice"
)
Call
<
PrivacyChoice
>
setPrivacyChoice
(
@Body
PrivacyChoice
privacyChoice
);
//
TODO
@GET
(
"/
api/breeds/list/all
"
)
Call
<
Object
>
getRecord
();
//
取得隱私偏好記錄
@GET
(
"/
choice
"
)
Call
<
List
<
PrivacyChoiceIndex
>>
readPrivacyChoiceRecordsByUser
();
}
}
This diff is collapsed.
Click to expand it.
app/src/main/java/com/example/zxa01/iotclient/common/http/HttpService.java
deleted
100644 → 0
View file @
a97da2ea
package
com.example.zxa01.iotclient.common.http
;
import
java.io.IOException
;
import
okhttp3.Call
;
import
okhttp3.MediaType
;
import
okhttp3.OkHttpClient
;
import
okhttp3.Request
;
import
okhttp3.RequestBody
;
import
okhttp3.Response
;
public
class
HttpService
{
public
static
final
MediaType
JSON
=
MediaType
.
parse
(
"application/json; charset=utf-8"
);
public
String
doGetSyncRequest
(
String
url
)
throws
IOException
{
OkHttpClient
client
=
new
OkHttpClient
();
Request
request
=
new
Request
.
Builder
()
.
url
(
url
)
.
build
();
Call
call
=
client
.
newCall
(
request
);
Response
mResponse
=
call
.
execute
();
if
(
mResponse
.
isSuccessful
())
{
return
mResponse
.
body
().
string
();
}
else
{
throw
new
IOException
(
"Unexpected code "
+
mResponse
);
}
// call.enqueue(new Callback(){
//
// @Override
// public void onFailure(Call call, IOException e) {
//
// }
//
// @Override
// public void onResponse(Call call, Response response) throws IOException {
// System.out.println(response);
// }
// });
// return client.newCall(
// new Request.Builder()
// .url(HttpUrl.parse(url).newBuilder().build().toString())
// .build()
// ).execute().body().string();
}
public
String
doPostRequest
(
String
url
,
String
json
)
throws
IOException
{
OkHttpClient
client
=
new
OkHttpClient
();
return
client
.
newCall
(
new
Request
.
Builder
()
.
url
(
url
)
.
post
(
RequestBody
.
create
(
JSON
,
json
))
.
build
()
).
execute
().
body
().
string
();
}
}
This diff is collapsed.
Click to expand it.
app/src/main/java/com/example/zxa01/iotclient/com
ponent/login/pojo
/LoginMessage.java
→
app/src/main/java/com/example/zxa01/iotclient/com
mon/pojo/auth
/LoginMessage.java
View file @
1a4ddac9
package
com.example.zxa01.iotclient.com
ponent.login.pojo
;
package
com.example.zxa01.iotclient.com
mon.pojo.auth
;
import
android.support.annotation.NonNull
;
public
class
LoginMessage
{
...
...
@@ -7,7 +7,7 @@ public class LoginMessage {
private
String
account
;
private
String
password
;
public
LoginMessage
()
{
public
LoginMessage
(){
}
...
...
This diff is collapsed.
Click to expand it.
app/src/main/java/com/example/zxa01/iotclient/common/pojo/device/Device.java
View file @
1a4ddac9
...
...
@@ -14,7 +14,7 @@ public class Device implements Parcelable {
private
Type
type
;
private
Manufacturer
manufacturer
;
private
Model
model
;
private
String
UPC
;
private
String
upc
;
private
String
location
;
private
List
<
Icon
>
icons
=
new
LinkedList
<>();
private
Status
status
;
...
...
@@ -37,7 +37,7 @@ public class Device implements Parcelable {
.
setType
(
device
.
type
)
.
setManufacturer
(
device
.
manufacturer
!=
null
?
new
Manufacturer
(
device
.
manufacturer
)
:
null
)
.
setModel
(
device
.
model
!=
null
?
new
Model
(
device
.
model
)
:
null
)
.
setU
PC
(
device
.
UPC
)
.
setU
pc
(
device
.
upc
)
.
setLocation
(
device
.
location
)
.
setStatus
(
device
.
status
);
}
...
...
@@ -48,7 +48,7 @@ public class Device implements Parcelable {
type
=
Type
.
valueOf
(
in
.
readString
());
manufacturer
=
in
.
readParcelable
(
Manufacturer
.
class
.
getClassLoader
());
model
=
in
.
readParcelable
(
Model
.
class
.
getClassLoader
());
UPC
=
in
.
readString
();
upc
=
in
.
readString
();
location
=
in
.
readString
();
icons
=
in
.
createTypedArrayList
(
Icon
.
CREATOR
);
status
=
Status
.
valueOf
(
in
.
readString
());
...
...
@@ -61,7 +61,7 @@ public class Device implements Parcelable {
dest
.
writeString
(
type
.
name
());
dest
.
writeParcelable
(
manufacturer
,
flags
);
dest
.
writeParcelable
(
model
,
flags
);
dest
.
writeString
(
UPC
);
dest
.
writeString
(
upc
);
dest
.
writeString
(
location
);
dest
.
writeTypedList
(
icons
);
dest
.
writeString
(
status
.
name
());
...
...
@@ -129,12 +129,12 @@ public class Device implements Parcelable {
return
this
;
}
public
String
getU
PC
()
{
return
UPC
;
public
String
getU
pc
()
{
return
upc
;
}
public
Device
setU
PC
(
String
UPC
)
{
this
.
UPC
=
UPC
;
public
Device
setU
pc
(
String
upc
)
{
this
.
upc
=
upc
;
return
this
;
}
...
...
@@ -197,7 +197,7 @@ public class Device implements Parcelable {
", type="
+
type
+
", manufacturer="
+
manufacturer
+
", model="
+
model
+
", UPC='"
+
UPC
+
'\''
+
", UPC='"
+
upc
+
'\''
+
", location='"
+
location
+
'\''
+
", icons="
+
icons
+
", status="
+
status
+
...
...
This diff is collapsed.
Click to expand it.
app/src/main/java/com/example/zxa01/iotclient/common/pojo/index/DeviceIndex.java
0 → 100644
View file @
1a4ddac9
package
com.example.zxa01.iotclient.common.pojo.index
;
public
class
DeviceIndex
{
private
String
udn
;
public
DeviceIndex
(){
}
public
String
getUdn
()
{
return
udn
;
}
public
void
setUdn
(
String
udn
)
{
this
.
udn
=
udn
;
}
}
This diff is collapsed.
Click to expand it.
app/src/main/java/com/example/zxa01/iotclient/common/pojo/index/PrivacyChoiceIndex.java
0 → 100644
View file @
1a4ddac9
package
com.example.zxa01.iotclient.common.pojo.index
;
import
com.example.zxa01.iotclient.common.pojo.privacy.PrivacyChoice
;
import
java.time.LocalDateTime
;
public
class
PrivacyChoiceIndex
{
private
long
id
;
private
LocalDateTime
localDateTime
;
private
PrivacyChoice
privacyChoice
;
public
PrivacyChoiceIndex
(){
}
public
long
getId
()
{
return
id
;
}
public
void
setId
(
long
id
)
{
this
.
id
=
id
;
}
public
LocalDateTime
getLocalDateTime
()
{
return
localDateTime
;
}
public
void
setLocalDateTime
(
LocalDateTime
localDateTime
)
{
this
.
localDateTime
=
localDateTime
;
}
public
PrivacyChoice
getPrivacyChoice
()
{
return
privacyChoice
;
}
public
void
setPrivacyChoice
(
PrivacyChoice
privacyChoice
)
{
this
.
privacyChoice
=
privacyChoice
;
}
}
This diff is collapsed.
Click to expand it.
app/src/main/java/com/example/zxa01/iotclient/common/shared/DefaultData.java
0 → 100644
View file @
1a4ddac9
package
com.example.zxa01.iotclient.common.shared
;
import
com.example.zxa01.iotclient.common.pojo.auth.LoginMessage
;
public
class
DefaultData
{
private
static
DefaultData
defaultData
=
new
DefaultData
();
private
LoginMessage
loginMessage
;
private
DefaultData
()
{
loginMessage
=
new
LoginMessage
(
"192.168.2.69:8080"
,
"user"
,
"1234"
);
}
public
static
DefaultData
getDefaultData
()
{
return
defaultData
;
}
public
LoginMessage
getLoginMessage
()
{
return
loginMessage
;
}
}
This diff is collapsed.
Click to expand it.
app/src/main/java/com/example/zxa01/iotclient/component/detail/DetailModel.java
View file @
1a4ddac9
...
...
@@ -2,12 +2,12 @@ package com.example.zxa01.iotclient.component.detail;
import
android.arch.lifecycle.MutableLiveData
;
import
android.databinding.BaseObservable
;
import
android.support.annotation.NonNull
;
import
android.util.Log
;
import
com.example.zxa01.iotclient.common.http.Api
;
import
com.example.zxa01.iotclient.common.pojo.device.Device
;
import
com.example.zxa01.iotclient.common.pojo.device.Manufacturer
;
import
com.example.zxa01.iotclient.common.pojo.device.Model
;
import
com.example.zxa01.iotclient.common.pojo.privacy.PrivacyPolicyReport
;
import
retrofit2.Call
;
import
retrofit2.Callback
;
...
...
@@ -24,13 +24,12 @@ public class DetailModel extends BaseObservable {
return
deviceMLD
;
}
public
void
setDeviceMLD
(
Device
device
)
{
public
void
setDeviceMLD
(
@NonNull
Device
device
)
{
deviceMLD
.
setValue
(
device
);
}
public
void
readDevice
(
String
udn
)
{
// TODO instead of udn
Api
.
getApi
().
readDevice
(
"1"
).
enqueue
(
new
Callback
<
Device
>()
{
public
void
readDevice
(
@NonNull
String
udn
)
{
Api
.
getApi
().
readDevice
(
udn
).
enqueue
(
new
Callback
<
Device
>()
{
@Override
public
void
onResponse
(
Call
<
Device
>
call
,
Response
<
Device
>
response
)
{
setDeviceMLD
(
response
==
null
||
response
.
body
()
==
null
?
...
...
@@ -39,7 +38,7 @@ public class DetailModel extends BaseObservable {
@Override
public
void
onFailure
(
Call
<
Device
>
call
,
Throwable
t
)
{
Log
.
e
(
"
fetch
Device - onFailure()"
,
t
.
getMessage
(),
t
);
Log
.
e
(
"
read
Device - onFailure()"
,
t
.
getMessage
(),
t
);
}
});
...
...
This diff is collapsed.
Click to expand it.
app/src/main/java/com/example/zxa01/iotclient/component/detail/DetailViewModel.java
View file @
1a4ddac9
...
...
@@ -9,6 +9,7 @@ import android.content.Context;
import
android.content.Intent
;
import
android.databinding.ObservableBoolean
;
import
android.databinding.ObservableField
;
import
android.support.annotation.NonNull
;
import
android.view.Gravity
;
import
android.widget.Toast
;
...
...
@@ -20,11 +21,11 @@ public class DetailViewModel extends ViewModel {
private
Context
context
;
public
DetailViewModel
(
Context
context
)
{
this
.
device
.
set
(
new
Device
());
this
.
context
=
context
;
device
.
set
(
new
Device
());
}
public
void
fetchDevice
(
String
udn
)
{
public
void
fetchDevice
(
@NonNull
String
udn
)
{
detailModel
.
readDevice
(
udn
);
}
...
...
@@ -32,9 +33,9 @@ public class DetailViewModel extends ViewModel {
return
detailModel
.
getDeviceMLD
();
}
public
void
setDevice
(
Device
device
)
{
if
(
device
!=
null
&&
device
.
getUdn
()
!=
null
)
{
this
.
isLoading
.
set
(
false
);
public
void
setDevice
(
@NonNull
Device
device
)
{
if
(
device
.
getUdn
()
!=
null
)
{
isLoading
.
set
(
false
);
this
.
device
.
set
(
device
);
}
}
...
...
This diff is collapsed.
Click to expand it.
app/src/main/java/com/example/zxa01/iotclient/component/home/HomeActivity.java
View file @
1a4ddac9
package
com.example.zxa01.iotclient.component.home
;
import
com.example.zxa01.iotclient.R
;
import
com.example.zxa01.iotclient.component.home.device.
Device
ViewModel
;
import
com.example.zxa01.iotclient.component.home.device.
bind.DeviceBind
ViewModel
;
import
com.example.zxa01.iotclient.databinding.ActivityHomeBinding
;
import
com.example.zxa01.iotclient.component.home.device.DeviceFragment
;
import
com.example.zxa01.iotclient.component.home.record.RecordFragment
;
import
com.example.zxa01.iotclient.component.home.setting.SettingFragment
;
import
android.content.Intent
;
import
android.graphics.drawable.GradientDrawable
;
import
android.os.Bundle
;
import
android.support.design.widget.BottomNavigationView
;
import
android.support.v4.app.Fragment
;
...
...
@@ -73,10 +72,10 @@ public class HomeActivity extends AppCompatActivity {
@Override
public
void
onActivityResult
(
int
requestCode
,
int
resultCode
,
Intent
intent
)
{
if
(
resultCode
==
RESULT_OK
)
{
new
Device
ViewModel
().
createDevice
(
intent
.
getStringExtra
(
"SCAN_RESULT"
));
new
Device
BindViewModel
().
bindDeviceAndGateway
(
intent
.
getStringExtra
(
"SCAN_RESULT"
));
}
else
{
new
AlertDialog
.
Builder
(
this
)
.
setMessage
(
R
.
string
.
create
_qrcode_error
)
.
setMessage
(
R
.
string
.
bind
_qrcode_error
)
.
show
();
}
}
...
...
This diff is collapsed.
Click to expand it.
app/src/main/java/com/example/zxa01/iotclient/component/home/device/DeviceFragment.java
View file @
1a4ddac9
package
com.example.zxa01.iotclient.component.home.device
;
import
android.content.Context
;
import
android.databinding.DataBindingUtil
;
import
android.os.Bundle
;
import
android.support.v4.app.Fragment
;
...
...
@@ -12,7 +11,7 @@ import android.view.ViewGroup;
import
com.example.zxa01.iotclient.R
;
import
com.example.zxa01.iotclient.databinding.FragmentDeviceBinding
;
import
com.example.zxa01.iotclient.component.home.device.
create.DeviceCreate
Fragment
;
import
com.example.zxa01.iotclient.component.home.device.
bind.DeviceBind
Fragment
;
public
class
DeviceFragment
extends
Fragment
{
...
...
@@ -51,7 +50,7 @@ public class DeviceFragment extends Fragment {
fragmentTransaction
.
remove
(
fragment
);
}
fragmentTransaction
.
addToBackStack
(
null
);
new
Device
Create
Fragment
().
show
(
fragmentTransaction
,
String
.
valueOf
(
R
.
string
.
dialog
));
new
Device
Bind
Fragment
().
show
(
fragmentTransaction
,
String
.
valueOf
(
R
.
string
.
dialog
));
}
...
...
This diff is collapsed.
Click to expand it.
app/src/main/java/com/example/zxa01/iotclient/component/home/device/DeviceModel.java
View file @
1a4ddac9
...
...
@@ -26,7 +26,7 @@ public class DeviceModel extends BaseObservable {
}
public
void
readDevices
()
{
Api
.
getApi
().
get
Devices
().
enqueue
(
Api
.
getApi
().
read
Devices
().
enqueue
(
new
Callback
<
List
<
Device
>>()
{
@Override
public
void
onResponse
(
Call
<
List
<
Device
>>
call
,
Response
<
List
<
Device
>>
response
)
{
...
...
@@ -42,22 +42,5 @@ public class DeviceModel extends BaseObservable {
);
}
public
void
createDevice
(
String
udn
)
{
// TODO api post-createDevice & update
// Api.getApi().getDevices().enqueue(
//// new Callback<List<Device>>() {
//// @Override
//// public void onResponse(Call<List<Device>> call, Response<List<Device>> response) {
//// devicesMLD.setValue(response == null || response.body() == null ?
//// null : response.body().stream().collect(Collectors.toList()));
//// }
////
//// @Override
//// public void onFailure(Call<List<Device>> call, Throwable t) {
//// Log.e("readDevices - onFailure()", t.getMessage(), t);
//// }
//// }
//// );
}
}
This diff is collapsed.
Click to expand it.
app/src/main/java/com/example/zxa01/iotclient/component/home/device/DeviceViewModel.java
View file @
1a4ddac9
...
...
@@ -9,13 +9,13 @@ import android.arch.lifecycle.ViewModel;
import
android.content.Context
;
import
android.content.Intent
;
import
android.databinding.ObservableBoolean
;
import
android.support.annotation.NonNull
;
import
java.util.List
;
public
class
DeviceViewModel
extends
ViewModel
{
public
ObservableBoolean
isLoading
=
new
ObservableBoolean
(
true
);
private
DeviceModel
deviceModel
=
new
DeviceModel
();
private
DeviceAdapter
adapter
=
new
DeviceAdapter
(
R
.
layout
.
recycler_view_device
,
this
);
private
Context
context
;
...
...
@@ -24,9 +24,6 @@ public class DeviceViewModel extends ViewModel {
this
.
context
=
context
;
}
public
DeviceViewModel
()
{
}
/**
* model
*/
...
...
@@ -39,31 +36,20 @@ public class DeviceViewModel extends ViewModel {
return
deviceModel
.
getDevicesMLD
();
}
/**
* create
*/
public
void
createDevice
(
String
udn
)
{
deviceModel
.
createDevice
(
udn
);
readDevices
();
}
/**
* child model
*/
public
Device
getDeviceAt
(
Integer
index
)
{
public
Device
getDeviceAt
(
@NonNull
Integer
index
)
{
if
(
deviceModel
.
getDevicesMLD
().
getValue
()
!=
null
&&
index
!=
null
&&
deviceModel
.
getDevicesMLD
().
getValue
().
size
()
>
index
)
{
return
deviceModel
.
getDevicesMLD
().
getValue
().
get
(
index
);
}
return
null
;
}
public
void
onDevicesClick
(
Integer
index
)
{
public
void
onDevicesClick
(
@NonNull
Integer
index
)
{
if
(
deviceModel
.
getDevicesMLD
().
getValue
()
!=
null
&&
index
!=
null
&&
deviceModel
.
getDevicesMLD
().
getValue
().
size
()
>
index
)
{
context
.
startActivity
(
new
Intent
(
context
,
DetailActivity
.
class
)
...
...
This diff is collapsed.
Click to expand it.
app/src/main/java/com/example/zxa01/iotclient/component/home/device/bind/DeviceBindFragment.java
0 → 100644
View file @
1a4ddac9
package
com.example.zxa01.iotclient.component.home.device.bind
;
import
android.databinding.DataBindingUtil
;
import
android.os.Bundle
;
import
android.support.v4.app.DialogFragment
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
com.example.zxa01.iotclient.R
;
import
com.example.zxa01.iotclient.databinding.FragmentDeviceBindBinding
;
public
class
DeviceBindFragment
extends
DialogFragment
{
private
DeviceBindViewModel
viewModel
;
private
FragmentDeviceBindBinding
binding
;
public
DeviceBindFragment
()
{
}
@Override
public
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
}
@Override
public
View
onCreateView
(
LayoutInflater
inflater
,
ViewGroup
container
,
Bundle
savedInstanceState
)
{
binding
=
DataBindingUtil
.
inflate
(
inflater
,
R
.
layout
.
fragment_device_bind
,
container
,
false
);
binding
();
return
binding
.
getRoot
();
}
private
void
binding
()
{
viewModel
=
new
DeviceBindViewModel
(
this
);
binding
.
setViewModel
(
viewModel
);
}
}
This diff is collapsed.
Click to expand it.
app/src/main/java/com/example/zxa01/iotclient/component/home/device/bind/DeviceBindModel.java
0 → 100644
View file @
1a4ddac9
package
com.example.zxa01.iotclient.component.home.device.bind
;
import
android.arch.lifecycle.MutableLiveData
;
import
android.databinding.BaseObservable
;
import
android.support.annotation.NonNull
;
import
android.util.Log
;
import
com.example.zxa01.iotclient.common.http.Api
;
import
com.example.zxa01.iotclient.common.pojo.device.Device
;
import
retrofit2.Call
;
import
retrofit2.Callback
;
import
retrofit2.Response
;
public
class
DeviceBindModel
extends
BaseObservable
{
public
DeviceBindModel
()
{
}
public
void
bindDeviceAndGateway
(
@NonNull
String
udn
)
{
Api
.
getApi
().
bindDeviceAndGateway
(
udn
).
enqueue
(
new
Callback
<
Device
>()
{
@Override
public
void
onResponse
(
Call
<
Device
>
call
,
Response
<
Device
>
response
)
{
}
@Override
public
void
onFailure
(
Call
<
Device
>
call
,
Throwable
t
)
{
Log
.
e
(
"bindDeviceAndGateway - onFailure()"
,
t
.
getMessage
(),
t
);
}
}
);
}
}
This diff is collapsed.
Click to expand it.
app/src/main/java/com/example/zxa01/iotclient/component/home/device/bind/DeviceBindViewModel.java
0 → 100644
View file @
1a4ddac9
package
com.example.zxa01.iotclient.component.home.device.bind
;
import
android.arch.lifecycle.MutableLiveData
;
import
android.arch.lifecycle.ViewModel
;
import
android.content.Intent
;
import
android.databinding.ObservableBoolean
;
import
android.databinding.ObservableField
;
import
android.net.Uri
;
import
android.support.annotation.NonNull
;
import
android.support.v4.app.Fragment
;
public
class
DeviceBindViewModel
extends
ViewModel
{
private
static
final
String
QRCODE_MARKET
=
"market://details?id=com.google.zxing.client.android"
;
private
static
final
String
QRCODE_INTENT
=
"com.google.zxing.client.android.SCAN"
;
private
static
final
String
QRCODE_MODE
=
"SCAN_MODE"
;
private
static
final
String
QRCODE_CODE_MODE
=
"QR_CODE_MODE"
;
private
static
final
int
QRCODE_REQUEST_CODE
=
0
;
public
ObservableField
<
String
>
udn
=
new
ObservableField
<>();
private
DeviceBindModel
deviceBindModel
=
new
DeviceBindModel
();
private
Fragment
fragment
;
public
DeviceBindViewModel
()
{
}
public
DeviceBindViewModel
(
Fragment
fragment
)
{
this
.
fragment
=
fragment
;
}
/**
* button function
*/
public
void
bindDeviceAndGateway
(
String
udn
)
{
deviceBindModel
.
bindDeviceAndGateway
(
udn
);
}
public
void
bindDeviceAndGateway
()
{
deviceBindModel
.
bindDeviceAndGateway
(
udn
.
get
());
}
public
void
qrcode
()
{
try
{
fragment
.
startActivityForResult
(
new
Intent
(
QRCODE_INTENT
)
.
putExtra
(
QRCODE_MODE
,
QRCODE_CODE_MODE
)
,
QRCODE_REQUEST_CODE
);
}
catch
(
Exception
e
)
{
fragment
.
startActivity
(
new
Intent
(
Intent
.
ACTION_VIEW
,
Uri
.
parse
(
QRCODE_MARKET
)));
}
}
public
void
cancel
()
{
((
DeviceBindFragment
)
fragment
).
dismiss
();
}
}
This diff is collapsed.
Click to expand it.
app/src/main/java/com/example/zxa01/iotclient/component/home/device/create/DeviceCreateFragment.java
deleted
100644 → 0
View file @
a97da2ea
package
com.example.zxa01.iotclient.component.home.device.create
;
import
android.app.AlertDialog
;
import
android.app.Dialog
;
import
android.content.Intent
;
import
android.databinding.DataBindingUtil
;
import
android.net.Uri
;
import
android.os.Bundle
;
import
android.support.v4.app.DialogFragment
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
com.example.zxa01.iotclient.R
;
import
com.example.zxa01.iotclient.databinding.FragmentDeviceCreateBinding
;
import
com.example.zxa01.iotclient.component.home.device.DeviceViewModel
;
public
class
DeviceCreateFragment
extends
DialogFragment
{
private
static
final
String
QRCODE_MARKET
=
"market://details?id=com.google.zxing.client.android"
;
private
static
final
String
QRCODE_INTENT
=
"com.google.zxing.client.android.SCAN"
;
private
static
final
String
QRCODE_MODE
=
"SCAN_MODE"
;
private
static
final
String
QRCODE_CODE_MODE
=
"QR_CODE_MODE"
;
private
static
final
int
QRCODE_REQUEST_CODE
=
0
;
private
DeviceViewModel
viewModel
;
private
FragmentDeviceCreateBinding
binding
;
public
DeviceCreateFragment
()
{
}
@Override
public
Dialog
onCreateDialog
(
Bundle
savedInstanceState
)
{
return
new
AlertDialog
.
Builder
(
getActivity
())
.
setView
(
R
.
layout
.
fragment_device_create
)
.
setNeutralButton
(
R
.
string
.
create_button_qrcode
,
(
dialog
,
whichButton
)
->
qrcodeIntent
()
)
.
setPositiveButton
(
R
.
string
.
create_button_correct
,
(
dialog
,
whichButton
)
->
viewModel
.
createDevice
(
"address"
)
)
.
setNegativeButton
(
R
.
string
.
create_button_cancel
,
(
dialog
,
whichButton
)
->
{
})
.
create
();
}
@Override
public
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
}
@Override
public
View
onCreateView
(
LayoutInflater
inflater
,
ViewGroup
container
,
Bundle
savedInstanceState
)
{
binding
=
DataBindingUtil
.
inflate
(
inflater
,
R
.
layout
.
fragment_device_create
,
container
,
false
);
binding
();
return
binding
.
getRoot
();
}
private
void
binding
()
{
viewModel
=
new
DeviceViewModel
(
binding
.
getRoot
().
getContext
());
binding
.
setViewModel
(
viewModel
);
}
private
void
qrcodeIntent
()
{
try
{
startActivityForResult
(
new
Intent
(
QRCODE_INTENT
)
.
putExtra
(
QRCODE_MODE
,
QRCODE_CODE_MODE
)
,
QRCODE_REQUEST_CODE
);
}
catch
(
Exception
e
)
{
startActivity
(
new
Intent
(
Intent
.
ACTION_VIEW
,
Uri
.
parse
(
QRCODE_MARKET
)));
}
}
}
This diff is collapsed.
Click to expand it.
app/src/main/java/com/example/zxa01/iotclient/component/home/record/RecordAdapter.java
View file @
1a4ddac9
...
...
@@ -8,14 +8,14 @@ import android.support.v7.widget.RecyclerView;
import
android.view.LayoutInflater
;
import
android.view.ViewGroup
;
import
com.example.zxa01.iotclient.BR
;
import
com.example.zxa01.iotclient.common.pojo.
privacy.PrivacyPolicyReport
;
import
com.example.zxa01.iotclient.common.pojo.
index.PrivacyChoiceIndex
;
import
java.util.List
;
public
class
RecordAdapter
extends
RecyclerView
.
Adapter
<
RecordAdapter
.
MyViewHolder
>
{
private
int
layoutId
;
private
List
<
Privacy
PolicyReport
>
privacyPolicyReport
s
;
private
List
<
Privacy
ChoiceIndex
>
privacyChoiceIndice
s
;
private
RecordViewModel
viewModel
;
public
RecordAdapter
(
@LayoutRes
int
layoutId
,
RecordViewModel
viewModel
)
{
...
...
@@ -40,7 +40,7 @@ public class RecordAdapter extends RecyclerView.Adapter<RecordAdapter.MyViewHold
@Override
public
int
getItemCount
()
{
return
privacy
PolicyReports
==
null
?
0
:
privacyPolicyReport
s
.
size
();
return
privacy
ChoiceIndices
==
null
?
0
:
privacyChoiceIndice
s
.
size
();
}
@Override
...
...
@@ -48,8 +48,8 @@ public class RecordAdapter extends RecyclerView.Adapter<RecordAdapter.MyViewHold
return
getLayoutIdForPosition
(
position
);
}
public
void
setPrivacy
PolicyReports
(
List
<
PrivacyPolicyReport
>
privacyPolicyReport
s
)
{
this
.
privacy
PolicyReports
=
privacyPolicyReport
s
;
public
void
setPrivacy
ChoiceIndices
(
List
<
PrivacyChoiceIndex
>
privacyChoiceIndice
s
)
{
this
.
privacy
ChoiceIndices
=
privacyChoiceIndice
s
;
}
class
MyViewHolder
extends
RecyclerView
.
ViewHolder
{
...
...
@@ -62,7 +62,7 @@ public class RecordAdapter extends RecyclerView.Adapter<RecordAdapter.MyViewHold
}
void
bind
(
RecordViewModel
viewModel
,
Integer
position
)
{
viewModel
.
getPrivacy
PolicyReport
At
(
position
);
viewModel
.
getPrivacy
Choice
At
(
position
);
binding
.
setVariable
(
BR
.
viewModel
,
viewModel
);
binding
.
setVariable
(
BR
.
position
,
position
);
binding
.
executePendingBindings
();
...
...
This diff is collapsed.
Click to expand it.
app/src/main/java/com/example/zxa01/iotclient/component/home/record/RecordFragment.java
View file @
1a4ddac9
package
com.example.zxa01.iotclient.component.home.record
;
import
android.content.Context
;
import
android.databinding.DataBindingUtil
;
import
android.net.Uri
;
import
android.os.Bundle
;
import
android.support.v4.app.Fragment
;
import
android.support.v7.widget.LinearLayoutManager
;
...
...
@@ -24,17 +22,21 @@ public class RecordFragment extends Fragment {
@Override
public
View
onCreateView
(
LayoutInflater
inflater
,
ViewGroup
container
,
Bundle
savedInstanceState
)
{
this
.
binding
=
DataBindingUtil
.
inflate
(
inflater
,
R
.
layout
.
fragment_record
,
container
,
false
);
this
.
viewModel
=
new
RecordViewModel
(
binding
.
getRoot
().
getContext
());
this
.
binding
.
setViewModel
(
viewModel
);
this
.
binding
.
recordRecyclerView
.
setLayoutManager
(
new
LinearLayoutManager
(
getActivity
()));
binding
=
DataBindingUtil
.
inflate
(
inflater
,
R
.
layout
.
fragment_record
,
container
,
false
);
binding
();
init
();
return
binding
.
getRoot
();
}
private
void
binding
()
{
viewModel
=
new
RecordViewModel
(
binding
.
getRoot
().
getContext
());
binding
.
setViewModel
(
viewModel
);
binding
.
recordRecyclerView
.
setLayoutManager
(
new
LinearLayoutManager
(
getActivity
()));
}
private
void
init
()
{
this
.
viewModel
.
refreshRecord
();
this
.
viewModel
.
observePrivacyPolicyReport
sMLD
().
observe
(
this
,
viewModel:
:
setAdapter
);
viewModel
.
refreshRecord
();
viewModel
.
observePrivacyChoiceIndice
sMLD
().
observe
(
this
,
viewModel:
:
setAdapter
);
}
}
This diff is collapsed.
Click to expand it.
app/src/main/java/com/example/zxa01/iotclient/component/home/record/RecordModel.java
View file @
1a4ddac9
...
...
@@ -8,6 +8,7 @@ import com.example.zxa01.iotclient.common.http.Api;
import
com.example.zxa01.iotclient.common.pojo.device.Device
;
import
com.example.zxa01.iotclient.common.pojo.device.Manufacturer
;
import
com.example.zxa01.iotclient.common.pojo.device.Model
;
import
com.example.zxa01.iotclient.common.pojo.index.PrivacyChoiceIndex
;
import
com.example.zxa01.iotclient.common.pojo.privacy.PrivacyPolicy
;
import
com.example.zxa01.iotclient.common.pojo.privacy.PrivacyPolicyReport
;
import
com.example.zxa01.iotclient.common.pojo.privacy.p3p.Access
;
...
...
@@ -22,6 +23,7 @@ import com.example.zxa01.iotclient.common.pojo.privacy.p3p.Statement;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.stream.Collectors
;
import
retrofit2.Call
;
import
retrofit2.Callback
;
...
...
@@ -29,111 +31,33 @@ import retrofit2.Response;
public
class
RecordModel
extends
BaseObservable
{
private
List
<
Privacy
PolicyReport
>
privacyPolicyReport
s
=
new
ArrayList
<>();
private
MutableLiveData
<
List
<
Privacy
PolicyReport
>>
privacyPolicyReport
sMLD
=
new
MutableLiveData
<>();
private
List
<
Privacy
ChoiceIndex
>
privacyChoiceIndice
s
=
new
ArrayList
<>();
private
MutableLiveData
<
List
<
Privacy
ChoiceIndex
>>
privacyChoiceIndice
sMLD
=
new
MutableLiveData
<>();
private
Device
oxygenDevice
=
new
Device
()
.
setUdn
(
"a1252c49-4188-4e6d-a32e-66604c664fb8"
)
.
setName
(
"指尖式血氧機"
)
.
setType
(
Device
.
Type
.
Sensor
)
.
setManufacturer
(
new
Manufacturer
()
.
setName
(
"Facelake"
)
.
setSerialNumber
(
"3176927193"
)
.
setUrl
(
"http://facelake.com"
))
.
setModel
(
new
Model
()
.
setName
(
"指尖式血氧機"
)
.
setDescription
(
"本設備是為符合不同領域及照護應用而設計,並把這些特色融入小如指節的分析儀中,可在數秒內量測出準確可靠的血氧及心跳值。"
)
.
setUrl
(
"https://www.amazon.com/Pulse-Oximeter-Blood-Oxygen-Monitor/dp/B00HXXO332"
))
.
setUPC
(
"B00HXXO332"
)
.
setLocation
(
"25.013068, 121.541651"
)
.
setStatus
(
Device
.
Status
.
Disconnected
);
private
PrivacyPolicyReport
oxygenPrivacyPolicyReport
=
new
PrivacyPolicyReport
()
.
setId
(
"0cfb6be3-6f0f-4e63-85b8-e9c936707c0b"
)
.
setVersion
(
"1.0"
)
.
setDescription
(
"為提供您最佳的互動照護服務,本APP部分服務內容可能會請您提供心跳資訊及血氧飽和度資訊,以作為持續自動追蹤心率的技術,提供整日健康狀況的深入分析以及運動強度的資訊。"
)
.
setDevice
(
oxygenDevice
)
.
addPrivacyPolicy
(
new
PrivacyPolicy
()
.
setId
(
"119df569-06b1-4d63-84cd-bde7c9e4ab7e"
)
.
setDescription
(
"為提供您最佳的互動照護服務,本APP部分服務內容可能會請您提供血氧飽和度資訊,以作為呼吸系統疾病、循環系統疾病、其它治療、檢查引起的損傷之遠端醫療照護分析資料。"
)
.
setCollector
(
new
Collector
()
.
setName
(
"健康促進中心"
)
.
setEmail
(
"hcc@gmail.com.tw"
)
.
setPhone
(
"0988415875"
))
.
setAccess
(
Access
.
OTHER_IDENT
)
.
setDispute
(
new
Dispute
()
.
setRelatedOrganization
(
"地方法院"
)
.
setType
(
Dispute
.
Type
.
LAW
))
.
addRemedy
(
new
Remedy
()
.
setType
(
Remedy
.
Type
.
LAW
))
.
addStatement
(
new
Statement
()
.
setConsequence
(
"a1252c49-4188-4e6d-a32e-66604c664fb9"
)
.
addPurpose
(
new
Purpose
()
.
setType
(
Purpose
.
Type
.
PSEUDO_ANALYSIS
)
.
setDescription
(
"本APP會使用者蒐集血氧飽和度資訊作為呼吸系統疾病、循環系統疾病、其它治療、檢查引起的損傷之遠端醫療照護分析資料。"
))
.
addDatum
(
new
Datum
()
.
setType
(
Datum
.
Type
.
HEALTH
)
.
setDescription
(
"血氧飽和度資訊"
))
.
addRecipient
(
new
Recipient
()
.
setEntity
(
"健康促進中心"
)
.
setType
(
Recipient
.
Type
.
OURS
))
.
setRetention
(
Retention
.
STATED_PURPOSE
)))
.
addPrivacyPolicy
(
new
PrivacyPolicy
()
.
setId
(
"abe5ca7b-780e-4857-87e6-014870fe0a3f"
)
.
setDescription
(
"為提供您最佳的互動照護服務,本APP會蒐集使用者心跳資訊,作為持續自動追蹤心率的技術,提供整日健康狀況的深入分析以及運動強度的資訊。"
)
.
setCollector
(
new
Collector
()
.
setName
(
"健康促進中心"
)
.
setEmail
(
"hcc@gmail.com.tw"
)
.
setPhone
(
"0988415875"
))
.
setAccess
(
Access
.
OTHER_IDENT
)
.
setDispute
(
new
Dispute
()
.
setRelatedOrganization
(
"地方法院"
)
.
setType
(
Dispute
.
Type
.
LAW
))
.
addRemedy
(
new
Remedy
()
.
setType
(
Remedy
.
Type
.
CORRECT
))
.
addRemedy
(
new
Remedy
()
.
setType
(
Remedy
.
Type
.
LAW
))
.
addRemedy
(
new
Remedy
()
.
setType
(
Remedy
.
Type
.
MONEY
))
.
addStatement
(
new
Statement
()
.
setConsequence
(
"a1252c49-4188-4e6d-a32e-66604c664fba"
)
.
addPurpose
(
new
Purpose
()
.
setType
(
Purpose
.
Type
.
INDIVIDUAL_ANALYSIS
)
.
setDescription
(
"本APP會蒐集使用者心跳資訊,作為持續自動追蹤心率的技術,提供整日健康狀況的深入分析以及運動強度的資訊。"
))
.
addDatum
(
new
Datum
()
.
setType
(
Datum
.
Type
.
HEALTH
)
.
setDescription
(
"心跳資訊"
))
.
addRecipient
(
new
Recipient
()
.
setEntity
(
"健康促進中心"
)
.
setType
(
Recipient
.
Type
.
OURS
))
.
setRetention
(
Retention
.
STATED_PURPOSE
)));
public
RecordModel
(){
public
RecordModel
()
{
}
private
void
addPrivacy
PolicyReport
(
PrivacyPolicyReport
privacyPolicyReport
)
{
privacy
PolicyReports
.
add
(
privacyPolicyReport
);
private
void
addPrivacy
ChoiceIndices
(
PrivacyChoiceIndex
privacyChoiceIndex
)
{
privacy
ChoiceIndices
.
add
(
privacyChoiceIndex
);
}
public
MutableLiveData
<
List
<
Privacy
PolicyReport
>>
getPrivacyPolicyReport
sMLD
()
{
return
privacy
PolicyReport
sMLD
;
public
MutableLiveData
<
List
<
Privacy
ChoiceIndex
>>
getPrivacyChoiceIndice
sMLD
()
{
return
privacy
ChoiceIndice
sMLD
;
}
public
void
fetchRecord
()
{
Callback
<
Object
>
callback
=
new
Callback
<
Object
>()
{
Api
.
getApi
().
readPrivacyChoiceRecordsByUser
().
enqueue
(
new
Callback
<
List
<
PrivacyChoiceIndex
>
>()
{
@Override
public
void
onResponse
(
Call
<
Object
>
call
,
Response
<
Object
>
response
)
{
public
void
onResponse
(
Call
<
List
<
PrivacyChoiceIndex
>>
call
,
Response
<
List
<
PrivacyChoiceIndex
>
>
response
)
{
// TODO transfer response
addPrivacyPolicyReport
(
oxygenPrivacyPolicyReport
);
privacyPolicyReportsMLD
.
setValue
(
privacyPolicyReports
);
privacyChoiceIndicesMLD
.
setValue
(
response
==
null
||
response
.
body
()
==
null
?
null
:
response
.
body
().
stream
().
collect
(
Collectors
.
toList
())
);
}
@Override
public
void
onFailure
(
Call
<
Object
>
call
,
Throwable
t
)
{
Log
.
e
(
"fetchDevices - onFailure()"
,
t
.
getMessage
(),
t
);
public
void
onFailure
(
Call
<
List
<
PrivacyChoiceIndex
>>
call
,
Throwable
t
)
{
}
};
Api
.
getApi
().
getRecord
().
enqueue
(
callback
);
});
}
...
...
This diff is collapsed.
Click to expand it.
app/src/main/java/com/example/zxa01/iotclient/component/home/record/RecordViewModel.java
View file @
1a4ddac9
...
...
@@ -5,9 +5,10 @@ import android.arch.lifecycle.ViewModel;
import
android.content.Context
;
import
android.content.Intent
;
import
android.databinding.ObservableBoolean
;
import
android.support.annotation.NonNull
;
import
com.example.zxa01.iotclient.R
;
import
com.example.zxa01.iotclient.common.pojo.
privacy.PrivacyPolicyReport
;
import
com.example.zxa01.iotclient.common.pojo.
index.PrivacyChoiceIndex
;
import
com.example.zxa01.iotclient.component.privacy.PrivacyActivity
;
import
java.util.List
;
...
...
@@ -31,31 +32,30 @@ public class RecordViewModel extends ViewModel {
recordModel
.
fetchRecord
();
}
public
MutableLiveData
<
List
<
Privacy
PolicyReport
>>
observePrivacyPolicyReport
sMLD
()
{
return
recordModel
.
getPrivacy
PolicyReport
sMLD
();
public
MutableLiveData
<
List
<
Privacy
ChoiceIndex
>>
observePrivacyChoiceIndice
sMLD
()
{
return
recordModel
.
getPrivacy
ChoiceIndice
sMLD
();
}
/**
* child model
*/
public
PrivacyPolicyReport
getPrivacyPolicyReportAt
(
Integer
index
)
{
if
(
recordModel
.
getPrivacyPolicyReportsMLD
().
getValue
()
!=
null
&&
index
!=
null
&&
recordModel
.
getPrivacyPolicyReportsMLD
().
getValue
().
size
()
>
index
)
{
return
recordModel
.
getPrivacyPolicyReportsMLD
().
getValue
().
get
(
index
);
public
PrivacyChoiceIndex
getPrivacyChoiceAt
(
@NonNull
Integer
index
)
{
if
(
recordModel
.
getPrivacyChoiceIndicesMLD
().
getValue
()
!=
null
&&
recordModel
.
getPrivacyChoiceIndicesMLD
().
getValue
().
size
()
>
index
)
{
return
recordModel
.
getPrivacyChoiceIndicesMLD
().
getValue
().
get
(
index
);
}
return
null
;
}
public
void
onPrivacyPolicyReportClick
(
Integer
index
)
{
if
(
recordModel
.
getPrivacyPolicyReportsMLD
().
getValue
()
!=
null
&&
index
!=
null
&&
recordModel
.
getPrivacyPolicyReportsMLD
().
getValue
().
size
()
>
index
)
{
// TODO detail of device
public
void
onPrivacyChoiceClick
(
@NonNull
Integer
index
)
{
if
(
recordModel
.
getPrivacyChoiceIndicesMLD
().
getValue
()
!=
null
&&
recordModel
.
getPrivacyChoiceIndicesMLD
().
getValue
().
size
()
>
index
)
{
context
.
startActivity
(
new
Intent
(
context
,
PrivacyActivity
.
class
)
.
putExtra
(
"index"
,
index
));
.
putExtra
(
"udn"
,
recordModel
.
getPrivacyChoiceIndicesMLD
().
getValue
().
get
(
index
)
.
getPrivacyChoice
().
getPrivacyContent
().
getDevice
().
getUdn
()));
}
}
...
...
@@ -67,9 +67,9 @@ public class RecordViewModel extends ViewModel {
return
adapter
;
}
public
void
setAdapter
(
List
<
Privacy
PolicyReport
>
privacyPolicyReport
s
)
{
public
void
setAdapter
(
List
<
Privacy
ChoiceIndex
>
privacyChoiceIndice
s
)
{
isLoading
.
set
(
false
);
adapter
.
setPrivacy
PolicyReports
(
privacyPolicyReport
s
);
adapter
.
setPrivacy
ChoiceIndices
(
privacyChoiceIndice
s
);
}
}
This diff is collapsed.
Click to expand it.
app/src/main/java/com/example/zxa01/iotclient/component/home/setting/SettingViewModel.java
View file @
1a4ddac9
...
...
@@ -5,6 +5,7 @@ import android.arch.lifecycle.ViewModel;
import
android.content.Context
;
import
android.content.Intent
;
import
android.databinding.ObservableBoolean
;
import
android.support.annotation.NonNull
;
import
com.example.zxa01.iotclient.R
;
import
com.example.zxa01.iotclient.common.pojo.Setting
;
...
...
This diff is collapsed.
Click to expand it.
app/src/main/java/com/example/zxa01/iotclient/component/login/LoginModel.java
View file @
1a4ddac9
package
com.example.zxa01.iotclient.component.login
;
import
com.example.zxa01.iotclient.common.http.Api
;
import
com.example.zxa01.iotclient.common.pojo.Setting
;
import
com.example.zxa01.iotclient.common.pojo.auth.User
;
import
com.example.zxa01.iotclient.common.shared.Config
;
import
com.example.zxa01.iotclient.com
ponent.login.pojo
.LoginMessage
;
import
com.example.zxa01.iotclient.com
mon.pojo.auth
.LoginMessage
;
import
android.arch.lifecycle.MutableLiveData
;
import
android.databinding.BaseObservable
;
...
...
@@ -17,7 +15,6 @@ public class LoginModel extends BaseObservable {
public
LoginModel
()
{
isAuthorized
=
new
MutableLiveData
<>();
isAuthorized
.
setValue
(
false
);
}
public
MutableLiveData
<
Boolean
>
isAuthorized
()
{
...
...
This diff is collapsed.
Click to expand it.
app/src/main/java/com/example/zxa01/iotclient/component/login/LoginViewModel.java
View file @
1a4ddac9
package
com.example.zxa01.iotclient.component.login
;
import
com.example.zxa01.iotclient.common.shared.DefaultData
;
import
com.example.zxa01.iotclient.component.home.HomeActivity
;
import
com.example.zxa01.iotclient.component.login.pojo.LoginMessage
;
import
com.example.zxa01.iotclient.common.pojo.auth.LoginMessage
;
import
android.arch.lifecycle.MutableLiveData
;
import
android.arch.lifecycle.ViewModel
;
import
android.content.Context
;
...
...
@@ -11,12 +13,12 @@ import android.databinding.ObservableField;
public
class
LoginViewModel
extends
ViewModel
{
public
ObservableField
<
LoginMessage
>
loginMessage
=
new
ObservableField
<>();
private
Context
context
;
private
LoginModel
loginModel
=
new
LoginModel
();
private
Context
context
;
public
LoginViewModel
(
Context
context
)
{
this
.
context
=
context
;
loginMessage
.
set
(
new
LoginMessage
(
"192.168.2.69:8081"
,
"user"
,
"1234"
));
loginMessage
.
set
(
DefaultData
.
getDefaultData
().
getLoginMessage
(
));
}
public
void
login
()
{
...
...
@@ -34,5 +36,4 @@ public class LoginViewModel extends ViewModel {
return
loginModel
.
isAuthorized
();
}
}
This diff is collapsed.
Click to expand it.
app/src/main/java/com/example/zxa01/iotclient/component/privacy/PrivacyActivity.java
View file @
1a4ddac9
package
com.example.zxa01.iotclient.component.privacy
;
import
android.databinding.DataBindingUtil
;
import
android.graphics.drawable.Drawable
;
import
android.graphics.drawable.PictureDrawable
;
import
android.support.v7.app.AppCompatActivity
;
import
android.os.Bundle
;
import
android.view.MenuItem
;
...
...
This diff is collapsed.
Click to expand it.
app/src/main/java/com/example/zxa01/iotclient/component/privacy/PrivacyModel.java
View file @
1a4ddac9
...
...
@@ -3,6 +3,7 @@ package com.example.zxa01.iotclient.component.privacy;
import
android.arch.lifecycle.MutableLiveData
;
import
android.databinding.BaseObservable
;
import
android.os.Handler
;
import
android.support.annotation.NonNull
;
import
android.util.Log
;
import
com.example.zxa01.iotclient.common.http.Api
;
...
...
@@ -32,7 +33,7 @@ public class PrivacyModel extends BaseObservable {
return
isUploadMLD
;
}
public
void
readPrivacyPolicyReportByDevice
(
String
udn
)
{
public
void
readPrivacyPolicyReportByDevice
(
@NonNull
String
udn
)
{
Api
.
getApi
().
readPrivacyPolicyReportByDevice
(
udn
).
enqueue
(
new
Callback
<
PrivacyPolicyReport
>()
{
@Override
public
void
onResponse
(
Call
<
PrivacyPolicyReport
>
call
,
Response
<
PrivacyPolicyReport
>
response
)
{
...
...
@@ -47,7 +48,7 @@ public class PrivacyModel extends BaseObservable {
}
public
void
setPrivacyChoice
(
PrivacyContent
privacyContent
,
boolean
isAccepted
)
{
public
void
setPrivacyChoice
(
@NonNull
PrivacyContent
privacyContent
,
@NonNull
boolean
isAccepted
)
{
isUploadMLD
.
setValue
(
true
);
Api
.
getApi
().
setPrivacyChoice
(
new
PrivacyChoice
().
setPrivacyContent
(
privacyContent
).
setAccepted
(
isAccepted
)).
enqueue
(
...
...
This diff is collapsed.
Click to expand it.
app/src/main/java/com/example/zxa01/iotclient/component/privacy/PrivacyViewModel.java
View file @
1a4ddac9
...
...
@@ -11,6 +11,7 @@ import android.arch.lifecycle.ViewModel;
import
android.content.Context
;
import
android.databinding.ObservableBoolean
;
import
android.databinding.ObservableField
;
import
android.support.annotation.NonNull
;
import
android.support.v7.app.AlertDialog
;
import
android.view.View
;
import
android.widget.Switch
;
...
...
@@ -37,7 +38,7 @@ public class PrivacyViewModel extends ViewModel {
* model
*/
public
void
fetchPrivacyPolicyReportByDevice
(
String
udn
)
{
public
void
fetchPrivacyPolicyReportByDevice
(
@NonNull
String
udn
)
{
privacyModel
.
readPrivacyPolicyReportByDevice
(
udn
);
}
...
...
@@ -56,7 +57,7 @@ public class PrivacyViewModel extends ViewModel {
* child model
*/
public
PrivacyPolicy
getPrivacyAt
(
Integer
index
)
{
public
PrivacyPolicy
getPrivacyAt
(
@NonNull
Integer
index
)
{
if
(
privacyModel
.
getPrivacyPolicyReportMLD
().
getValue
()
!=
null
&&
index
!=
null
&&
privacyModel
.
getPrivacyPolicyReportMLD
().
getValue
().
getPolicies
().
size
()
>
index
)
{
...
...
@@ -65,9 +66,8 @@ public class PrivacyViewModel extends ViewModel {
return
null
;
}
public
void
onSetPrivacyChoice
(
Integer
index
,
View
view
)
{
public
void
onSetPrivacyChoice
(
@NonNull
Integer
index
,
View
view
)
{
if
(
privacyModel
.
getPrivacyPolicyReportMLD
().
getValue
()
!=
null
&&
index
!=
null
&&
privacyModel
.
getPrivacyPolicyReportMLD
().
getValue
().
getPolicies
().
size
()
>
index
)
{
privacyModel
.
setPrivacyChoice
(
new
PrivacyContent
()
...
...
This diff is collapsed.
Click to expand it.
app/src/main/res/layout/activity_detail.xml
View file @
1a4ddac9
...
...
@@ -467,7 +467,7 @@
android:layout_height=
"wrap_content"
android:layout_marginRight=
"@dimen/margin_lg"
android:padding=
"@dimen/padding_sm"
android:text=
"@{viewModel.device.
UPC
}"
android:text=
"@{viewModel.device.
upc
}"
android:textSize=
"@dimen/font"
/>
</LinearLayout>
...
...
This diff is collapsed.
Click to expand it.
app/src/main/res/layout/activity_login.xml
View file @
1a4ddac9
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
>
<data>
...
...
This diff is collapsed.
Click to expand it.
app/src/main/res/layout/fragment_device_
create
.xml
→
app/src/main/res/layout/fragment_device_
bind
.xml
View file @
1a4ddac9
...
...
@@ -4,15 +4,17 @@
<data>
<import
type=
"android.view.View"
/>
<variable
name=
"viewModel"
type=
"com.example.zxa01.iotclient.component.home.device.
Device
ViewModel"
/>
type=
"com.example.zxa01.iotclient.component.home.device.
bind.DeviceBind
ViewModel"
/>
</data>
<FrameLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
tools:context=
".component.home.device.
create.DeviceCreate
Fragment"
>
tools:context=
".component.home.device.
bind.DeviceBind
Fragment"
>
<LinearLayout
android:layout_width=
"match_parent"
...
...
@@ -20,26 +22,63 @@
android:orientation=
"vertical"
>
<TextView
android:id=
"@+id/
textView
"
android:id=
"@+id/
CreateAndBind
"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:background=
"@color/colorLightest"
android:fontFamily=
"monospace"
android:padding=
"@dimen/padding"
android:text=
"@string/
create
_title"
android:text=
"@string/
bind
_title"
android:textAlignment=
"center"
android:textSize=
"@dimen/font"
/>
<EditText
android:id=
"@+id/
editTex
t"
android:layout_width=
"
match_parent
"
android:id=
"@+id/
ubnInpu
t"
android:layout_width=
"
350dp
"
android:layout_height=
"wrap_content"
android:layout_margin=
"@dimen/margin_sm"
android:hint=
"@string/create_input_placeholder"
android:padding=
"@dimen/padding_lg"
android:layout_margin=
"@dimen/margin"
android:hint=
"@string/bind_input_placeholder"
android:paddingTop=
"@dimen/padding_lg"
android:paddingRight=
"@dimen/padding_xs"
android:paddingLeft=
"@dimen/padding_xs"
android:paddingBottom=
"@dimen/padding"
android:text=
"@={viewModel.udn}"
android:textColorHighlight=
"@color/colorPrimary"
android:textColorLink=
"@color/colorLight"
/>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:orientation=
"horizontal"
>
<Button
android:id=
"@+id/qrcode"
style=
"@style/Widget.AppCompat.Button.ButtonBar.AlertDialog"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
android:onClick=
"@{()->viewModel.qrcode()}"
android:text=
"@string/bind_button_qrcode"
/>
<Button
android:id=
"@+id/cancel"
style=
"@style/Widget.AppCompat.Button.ButtonBar.AlertDialog"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
android:onClick=
"@{()->viewModel.cancel()}"
android:text=
"@string/bind_button_cancel"
/>
<Button
android:id=
"@+id/correct"
style=
"@style/Widget.AppCompat.Button.ButtonBar.AlertDialog"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
android:onClick=
"@{()->viewModel.bindDeviceAndGateway()}"
android:text=
"@string/bind_button_correct"
/>
</LinearLayout>
</LinearLayout>
</FrameLayout>
...
...
This diff is collapsed.
Click to expand it.
app/src/main/res/layout/recycler_view_record.xml
View file @
1a4ddac9
...
...
@@ -17,7 +17,7 @@
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:background=
"@drawable/border_bottom"
android:onClick=
"@{()->viewModel.onPrivacy
PolicyReport
Click(position)}"
android:onClick=
"@{()->viewModel.onPrivacy
Choice
Click(position)}"
android:orientation=
"vertical"
android:padding=
"@dimen/margin"
>
...
...
@@ -34,7 +34,7 @@
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"@{viewModel.getPrivacy
PolicyReportAt(position)
.device.name}"
android:text=
"@{viewModel.getPrivacy
ChoiceAt(position).privacyChoice.privacyContent
.device.name}"
android:textColor=
"@color/colorLight"
android:textSize=
"18sp"
android:textStyle=
"bold"
...
...
@@ -51,15 +51,20 @@
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"@{viewModel.getPrivacy
PolicyReportAt(position)
.description}"
android:text=
"@{viewModel.getPrivacy
ChoiceAt(position).privacyChoice.privacyContent.policy
.description}"
tools:text=
"@tools:sample/lorem"
/>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
'2019.04.23'
android:text=
"@{viewModel.getPrivacyChoiceAt(position).localDateTime.toString()}"
tools:text=
"@tools:sample/lorem"
/>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"同意或拒絕"
tools:text=
"@tools:sample/lorem"
/>
</LinearLayout>
</LinearLayout>
...
...
This diff is collapsed.
Click to expand it.
app/src/main/res/values/strings.xml
View file @
1a4ddac9
...
...
@@ -11,13 +11,13 @@
<string
name=
"nav_record"
>
Record
</string>
<string
name=
"nav_setting"
>
Setting
</string>
<!--
Create
-->
<string
name=
"
create_title"
>
新增
裝置
</string>
<string
name=
"
create
_input_placeholder"
>
請輸入裝置的UDN
</string>
<string
name=
"
create
_button_qrcode"
>
QRcode
</string>
<string
name=
"
create
_button_correct"
>
新增
</string>
<string
name=
"
create
_button_cancel"
>
返回
</string>
<string
name=
"
create
_qrcode_error"
>
格式錯誤
</string>
<!--
Bind
-->
<string
name=
"
bind_title"
>
新增且綁定
裝置
</string>
<string
name=
"
bind
_input_placeholder"
>
請輸入裝置的UDN
</string>
<string
name=
"
bind
_button_qrcode"
>
QRcode
</string>
<string
name=
"
bind
_button_correct"
>
新增
</string>
<string
name=
"
bind
_button_cancel"
>
返回
</string>
<string
name=
"
bind
_qrcode_error"
>
格式錯誤
</string>
<!--Detail-->
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment