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
f9b3e5d7
Commit
f9b3e5d7
authored
May 17, 2019
by
DESKTOP-NFGF3PG\zxa01
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add notification
parent
8cffb858
Changes
14
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
255 additions
and
57 deletions
+255
-57
app/src/main/AndroidManifest.xml
app/src/main/AndroidManifest.xml
+3
-0
app/src/main/java/com/example/zxa01/iotclient/common/http/DownloadTask.java
...com/example/zxa01/iotclient/common/http/DownloadTask.java
+220
-0
app/src/main/java/com/example/zxa01/iotclient/common/pojo/index/PrivacyChoiceResponse.java
...01/iotclient/common/pojo/index/PrivacyChoiceResponse.java
+6
-7
app/src/main/java/com/example/zxa01/iotclient/component/detail/DetailViewModel.java
...ple/zxa01/iotclient/component/detail/DetailViewModel.java
+16
-4
app/src/main/java/com/example/zxa01/iotclient/component/home/record/RecordViewModel.java
...xa01/iotclient/component/home/record/RecordViewModel.java
+1
-1
app/src/main/java/com/example/zxa01/iotclient/component/login/LoginActivity.java
...xample/zxa01/iotclient/component/login/LoginActivity.java
+1
-1
app/src/main/java/com/example/zxa01/iotclient/component/login/LoginModel.java
...m/example/zxa01/iotclient/component/login/LoginModel.java
+0
-1
app/src/main/java/com/example/zxa01/iotclient/component/login/LoginViewModel.java
...ample/zxa01/iotclient/component/login/LoginViewModel.java
+1
-1
app/src/main/java/com/example/zxa01/iotclient/component/privacy/PrivacyModel.java
...ample/zxa01/iotclient/component/privacy/PrivacyModel.java
+4
-8
app/src/main/res/layout/fragment_device.xml
app/src/main/res/layout/fragment_device.xml
+0
-10
app/src/main/res/layout/fragment_record.xml
app/src/main/res/layout/fragment_record.xml
+0
-11
app/src/main/res/layout/recycler_view_device.xml
app/src/main/res/layout/recycler_view_device.xml
+0
-11
app/src/main/res/layout/recycler_view_record.xml
app/src/main/res/layout/recycler_view_record.xml
+2
-2
app/src/main/res/values/strings.xml
app/src/main/res/values/strings.xml
+1
-0
No files found.
app/src/main/AndroidManifest.xml
View file @
f9b3e5d7
...
@@ -6,6 +6,9 @@
...
@@ -6,6 +6,9 @@
<uses-permission
android:name=
"android.permission.READ_PROFILE"
/>
<uses-permission
android:name=
"android.permission.READ_PROFILE"
/>
<uses-permission
android:name=
"android.permission.READ_CONTACTS"
/>
<uses-permission
android:name=
"android.permission.READ_CONTACTS"
/>
<uses-permission
android:name=
"android.permission.INTERNET"
/>
<uses-permission
android:name=
"android.permission.INTERNET"
/>
<uses-permission
android:name=
"android.permission.READ_EXTERNAL_STORAGE"
/>
<uses-permission
android:name=
"android.permission.WRITE_EXTERNAL_STORAGE"
/>
<uses-permission
android:name=
"android.permission.ACCESS_NETWORK_STATE"
/>
<application
<application
android:allowBackup=
"true"
android:allowBackup=
"true"
...
...
app/src/main/java/com/example/zxa01/iotclient/common/http/DownloadTask.java
0 → 100644
View file @
f9b3e5d7
package
com.example.zxa01.iotclient.common.http
;
import
android.Manifest
;
import
android.app.Activity
;
import
android.app.Notification
;
import
android.app.NotificationChannel
;
import
android.app.NotificationManager
;
import
android.content.Context
;
import
android.content.pm.PackageManager
;
import
android.os.AsyncTask
;
import
android.os.Build
;
import
android.os.Environment
;
import
android.os.Handler
;
import
android.support.v4.app.NotificationCompat
;
import
android.support.v7.app.AlertDialog
;
import
android.util.Log
;
import
android.widget.Toast
;
import
com.example.zxa01.iotclient.R
;
import
java.io.BufferedInputStream
;
import
java.io.File
;
import
java.io.FileOutputStream
;
import
java.io.InputStream
;
import
java.io.OutputStream
;
import
java.net.HttpURLConnection
;
import
java.net.URL
;
import
java.nio.charset.StandardCharsets
;
import
static
android
.
support
.
v4
.
app
.
ActivityCompat
.
requestPermissions
;
public
class
DownloadTask
{
private
static
final
String
TAG
=
"Download File"
;
public
static
final
String
CHANNELID
=
"118"
;
public
static
final
CharSequence
CHANNELCHAR
=
"Download Report File"
;
private
NotificationManager
notificationManager
;
private
Context
context
;
private
String
downloadUrl
;
private
String
downloadFileName
;
private
AlertDialog
dialog
;
public
DownloadTask
(
Context
context
,
String
downloadUrl
)
{
this
.
context
=
context
;
this
.
downloadUrl
=
downloadUrl
;
this
.
dialog
=
new
AlertDialog
.
Builder
(
context
)
.
setMessage
(
R
.
string
.
privacy_loading_message
)
.
setTitle
(
R
.
string
.
detail_report_download
)
.
create
();
isStoragePermissionGranted
();
new
DownloadingTask
().
execute
();
}
private
class
DownloadingTask
extends
AsyncTask
<
Void
,
Void
,
Void
>
{
File
apkStorage
=
null
;
File
outputFile
=
null
;
@Override
protected
void
onPreExecute
()
{
super
.
onPreExecute
();
dialog
.
show
();
}
@Override
protected
void
onPostExecute
(
Void
result
)
{
try
{
dialog
.
hide
();
if
(
outputFile
!=
null
)
{
notification
();
Toast
.
makeText
(
context
,
"Downloaded Successfully"
,
Toast
.
LENGTH_SHORT
).
show
();
}
else
{
dialogDelay
();
Toast
.
makeText
(
context
,
"Downloaded Failed"
,
Toast
.
LENGTH_SHORT
).
show
();
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
dialogDelay
();
Toast
.
makeText
(
context
,
"Downloaded Failed with Exception"
,
Toast
.
LENGTH_SHORT
).
show
();
}
super
.
onPostExecute
(
result
);
}
@Override
protected
Void
doInBackground
(
Void
...
arg0
)
{
try
{
URL
url
=
new
URL
(
downloadUrl
);
HttpURLConnection
connection
=
(
HttpURLConnection
)
url
.
openConnection
();
connection
.
setRequestMethod
(
"GET"
);
connection
.
connect
();
downloadFileName
=
java
.
net
.
URLDecoder
.
decode
(
connection
.
getHeaderField
(
"Content-Disposition"
).
replace
(
"Attachment; filename="
,
""
),
String
.
valueOf
(
StandardCharsets
.
UTF_8
));
// check SDCard
if
(
new
CheckForSDCard
().
isSDCardPresent
())
{
apkStorage
=
new
File
(
Environment
.
getExternalStorageDirectory
().
toString
()
+
"/report"
);
}
else
{
Toast
.
makeText
(
context
,
"There is no SD Card."
,
Toast
.
LENGTH_SHORT
).
show
();
}
// check directory
if
(!
apkStorage
.
exists
())
{
apkStorage
.
mkdir
();
Log
.
e
(
TAG
,
"Directory Created."
);
}
// check file
outputFile
=
new
File
(
apkStorage
,
downloadFileName
);
if
(!
outputFile
.
exists
())
{
outputFile
.
createNewFile
();
outputFile
.
setWritable
(
true
);
Log
.
e
(
TAG
,
"File Created"
);
}
// output handle
FileOutputStream
fos
=
new
FileOutputStream
(
outputFile
);
InputStream
input
=
new
BufferedInputStream
(
url
.
openStream
(),
8192
);
OutputStream
output
=
new
FileOutputStream
(
outputFile
.
getPath
());
byte
[]
data
=
new
byte
[
1024
];
long
total
=
0
;
int
count
;
while
((
count
=
input
.
read
(
data
))
!=
-
1
)
{
total
+=
count
;
output
.
write
(
data
,
0
,
count
);
}
fos
.
flush
();
fos
.
close
();
input
.
close
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
outputFile
=
null
;
Log
.
e
(
TAG
,
"Download Error Exception "
+
e
.
getMessage
());
}
return
null
;
}
}
class
CheckForSDCard
{
public
boolean
isSDCardPresent
()
{
if
(
Environment
.
getExternalStorageState
().
equals
(
Environment
.
MEDIA_MOUNTED
))
{
return
true
;
}
return
false
;
}
}
public
boolean
isStoragePermissionGranted
()
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
M
)
{
if
(
context
.
checkSelfPermission
(
android
.
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
)
==
PackageManager
.
PERMISSION_GRANTED
)
{
Log
.
v
(
TAG
,
"Permission is granted"
);
return
true
;
}
else
{
Log
.
v
(
TAG
,
"Permission is revoked"
);
requestPermissions
((
Activity
)
context
,
new
String
[]{
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
},
1
);
return
false
;
}
}
else
{
Log
.
v
(
TAG
,
"Permission is granted"
);
return
true
;
}
}
private
void
dialogDelay
()
{
new
Handler
().
postDelayed
(()
->{},
3000
);
}
private
void
notification
(){
int
NOTIFY_ID
=
0
;
NotificationCompat
.
Builder
builder
;
if
(
notificationManager
==
null
)
{
notificationManager
=
(
NotificationManager
)
context
.
getSystemService
(
Context
.
NOTIFICATION_SERVICE
);
}
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
O
)
{
int
importance
=
NotificationManager
.
IMPORTANCE_HIGH
;
NotificationChannel
mChannel
=
notificationManager
.
getNotificationChannel
(
CHANNELID
);
if
(
mChannel
==
null
)
{
mChannel
=
new
NotificationChannel
(
CHANNELID
,
CHANNELCHAR
,
importance
);
mChannel
.
enableVibration
(
true
);
mChannel
.
setVibrationPattern
(
new
long
[]{
100
,
200
,
300
,
400
,
500
,
400
,
300
,
200
,
400
});
notificationManager
.
createNotificationChannel
(
mChannel
);
}
builder
=
new
NotificationCompat
.
Builder
(
context
,
CHANNELID
);
builder
.
setContentTitle
(
"下載成功"
)
.
setSmallIcon
(
android
.
R
.
drawable
.
ic_popup_reminder
)
.
setContentText
(
downloadFileName
)
.
setDefaults
(
Notification
.
DEFAULT_ALL
)
.
setAutoCancel
(
true
)
.
setTicker
(
"下載成功"
)
.
setVibrate
(
new
long
[]{
100
,
200
,
300
,
400
,
500
,
400
,
300
,
200
,
400
});
}
else
{
builder
=
new
NotificationCompat
.
Builder
(
context
,
CHANNELID
);
builder
.
setContentTitle
(
"下載成功"
)
.
setSmallIcon
(
android
.
R
.
drawable
.
ic_popup_reminder
)
.
setContentText
(
downloadFileName
)
.
setDefaults
(
Notification
.
DEFAULT_ALL
)
.
setAutoCancel
(
true
)
.
setTicker
(
"下載成功"
)
.
setVibrate
(
new
long
[]{
100
,
200
,
300
,
400
,
500
,
400
,
300
,
200
,
400
})
.
setPriority
(
Notification
.
PRIORITY_HIGH
);
}
Notification
notification
=
builder
.
build
();
notificationManager
.
notify
(
NOTIFY_ID
,
notification
);
}
}
\ No newline at end of file
app/src/main/java/com/example/zxa01/iotclient/common/pojo/index/PrivacyChoiceResponse.java
View file @
f9b3e5d7
package
com.example.zxa01.iotclient.common.pojo.index
;
package
com.example.zxa01.iotclient.common.pojo.index
;
import
com.example.zxa01.iotclient.common.pojo.privacy.PrivacyContent
;
import
com.example.zxa01.iotclient.common.pojo.privacy.PrivacyChoice
;
public
class
PrivacyChoiceResponse
{
public
class
PrivacyChoiceResponse
{
private
long
id
;
private
long
id
;
private
String
localDateTime
;
private
String
localDateTime
;
private
PrivacyC
ontent
privacyContent
;
private
PrivacyC
hoice
privacyChoice
;
public
PrivacyChoiceResponse
(){
public
PrivacyChoiceResponse
(){
...
@@ -28,11 +27,11 @@ public class PrivacyChoiceResponse {
...
@@ -28,11 +27,11 @@ public class PrivacyChoiceResponse {
this
.
localDateTime
=
localDateTime
;
this
.
localDateTime
=
localDateTime
;
}
}
public
PrivacyC
ontent
getPrivacyContent
()
{
public
PrivacyC
hoice
getPrivacyChoice
()
{
return
privacyC
ontent
;
return
privacyC
hoice
;
}
}
public
void
setPrivacyC
ontent
(
PrivacyContent
privacyContent
)
{
public
void
setPrivacyC
hoice
(
PrivacyChoice
privacyChoice
)
{
this
.
privacyC
ontent
=
privacyContent
;
this
.
privacyC
hoice
=
privacyChoice
;
}
}
}
}
app/src/main/java/com/example/zxa01/iotclient/component/detail/DetailViewModel.java
View file @
f9b3e5d7
package
com.example.zxa01.iotclient.component.detail
;
package
com.example.zxa01.iotclient.component.detail
;
import
com.example.zxa01.iotclient.R
;
import
com.example.zxa01.iotclient.R
;
import
com.example.zxa01.iotclient.common.http.DownloadTask
;
import
com.example.zxa01.iotclient.common.pojo.device.Device
;
import
com.example.zxa01.iotclient.common.pojo.device.Device
;
import
com.example.zxa01.iotclient.component.privacy.PrivacyActivity
;
import
com.example.zxa01.iotclient.component.privacy.PrivacyActivity
;
import
android.arch.lifecycle.MutableLiveData
;
import
android.arch.lifecycle.MutableLiveData
;
...
@@ -9,16 +10,28 @@ import android.content.Context;
...
@@ -9,16 +10,28 @@ import android.content.Context;
import
android.content.Intent
;
import
android.content.Intent
;
import
android.databinding.ObservableBoolean
;
import
android.databinding.ObservableBoolean
;
import
android.databinding.ObservableField
;
import
android.databinding.ObservableField
;
import
android.os.AsyncTask
;
import
android.os.Environment
;
import
android.support.annotation.NonNull
;
import
android.support.annotation.NonNull
;
import
android.util.Log
;
import
android.view.Gravity
;
import
android.view.Gravity
;
import
android.widget.Toast
;
import
android.widget.Toast
;
import
java.io.BufferedInputStream
;
import
java.io.FileOutputStream
;
import
java.io.InputStream
;
import
java.io.OutputStream
;
import
java.net.URL
;
import
java.net.URLConnection
;
public
class
DetailViewModel
extends
ViewModel
{
public
class
DetailViewModel
extends
ViewModel
{
public
ObservableBoolean
isLoading
=
new
ObservableBoolean
(
true
);
public
ObservableBoolean
isLoading
=
new
ObservableBoolean
(
true
);
public
ObservableField
<
Device
>
device
=
new
ObservableField
<>();
public
ObservableField
<
Device
>
device
=
new
ObservableField
<>();
private
DetailModel
detailModel
=
new
DetailModel
();
private
DetailModel
detailModel
=
new
DetailModel
();
private
Context
context
;
private
Context
context
;
private
Toast
toast
;
public
DetailViewModel
(
Context
context
)
{
public
DetailViewModel
(
Context
context
)
{
this
.
context
=
context
;
this
.
context
=
context
;
...
@@ -47,9 +60,8 @@ public class DetailViewModel extends ViewModel {
...
@@ -47,9 +60,8 @@ public class DetailViewModel extends ViewModel {
}
}
public
void
downloadPrivacyReport
()
{
public
void
downloadPrivacyReport
()
{
// TODO download
// fake file just for test
Toast
toast
=
Toast
.
makeText
(
context
,
R
.
string
.
detail_report_download
,
Toast
.
LENGTH_LONG
);
String
url
=
"https://www.ey.gov.tw/File/4EBD1D15E6556A04?A=C"
;
toast
.
setGravity
(
Gravity
.
BOTTOM
,
0
,
15
);
new
DownloadTask
(
context
,
url
);
toast
.
show
();
}
}
}
}
app/src/main/java/com/example/zxa01/iotclient/component/home/record/RecordViewModel.java
View file @
f9b3e5d7
...
@@ -56,7 +56,7 @@ public class RecordViewModel extends ViewModel {
...
@@ -56,7 +56,7 @@ public class RecordViewModel extends ViewModel {
new
Intent
(
context
,
PrivacyActivity
.
class
)
new
Intent
(
context
,
PrivacyActivity
.
class
)
.
putExtra
(
"udn"
,
.
putExtra
(
"udn"
,
recordModel
.
getPrivacyChoiceResponsesMLD
().
getValue
().
get
(
index
)
recordModel
.
getPrivacyChoiceResponsesMLD
().
getValue
().
get
(
index
)
.
getPrivacyContent
().
getDevice
().
getUdn
()));
.
getPrivacyC
hoice
().
getPrivacyC
ontent
().
getDevice
().
getUdn
()));
}
}
}
}
...
...
app/src/main/java/com/example/zxa01/iotclient/component/login/LoginActivity.java
View file @
f9b3e5d7
...
@@ -24,7 +24,7 @@ public class LoginActivity extends AppCompatActivity {
...
@@ -24,7 +24,7 @@ public class LoginActivity extends AppCompatActivity {
}
}
private
void
binding
()
{
private
void
binding
()
{
viewModel
=
new
LoginViewModel
(
binding
.
getRoot
().
getContext
()
);
viewModel
=
new
LoginViewModel
(
this
);
binding
.
setViewModel
(
viewModel
);
binding
.
setViewModel
(
viewModel
);
binding
.
linearLoginForm
.
setOnClickListener
(
view
->
hideKeyboard
(
LoginActivity
.
this
));
binding
.
linearLoginForm
.
setOnClickListener
(
view
->
hideKeyboard
(
LoginActivity
.
this
));
}
}
...
...
app/src/main/java/com/example/zxa01/iotclient/component/login/LoginModel.java
View file @
f9b3e5d7
...
@@ -34,7 +34,6 @@ public class LoginModel extends BaseObservable {
...
@@ -34,7 +34,6 @@ public class LoginModel extends BaseObservable {
return
message
.
getAccount
()
!=
null
&&
return
message
.
getAccount
()
!=
null
&&
message
.
getPassword
()
!=
null
&&
message
.
getPassword
()
!=
null
&&
message
.
getGateway
()
!=
null
;
message
.
getGateway
()
!=
null
;
}
}
private
void
settingConfig
(
@NonNull
LoginMessage
message
)
{
private
void
settingConfig
(
@NonNull
LoginMessage
message
)
{
...
...
app/src/main/java/com/example/zxa01/iotclient/component/login/LoginViewModel.java
View file @
f9b3e5d7
...
@@ -3,7 +3,6 @@ package com.example.zxa01.iotclient.component.login;
...
@@ -3,7 +3,6 @@ package com.example.zxa01.iotclient.component.login;
import
com.example.zxa01.iotclient.common.shared.DefaultData
;
import
com.example.zxa01.iotclient.common.shared.DefaultData
;
import
com.example.zxa01.iotclient.component.home.HomeActivity
;
import
com.example.zxa01.iotclient.component.home.HomeActivity
;
import
com.example.zxa01.iotclient.common.pojo.auth.LoginMessage
;
import
com.example.zxa01.iotclient.common.pojo.auth.LoginMessage
;
import
android.arch.lifecycle.MutableLiveData
;
import
android.arch.lifecycle.MutableLiveData
;
import
android.arch.lifecycle.ViewModel
;
import
android.arch.lifecycle.ViewModel
;
import
android.content.Context
;
import
android.content.Context
;
...
@@ -25,6 +24,7 @@ public class LoginViewModel extends ViewModel {
...
@@ -25,6 +24,7 @@ public class LoginViewModel extends ViewModel {
loginModel
.
login
(
loginMessage
.
get
());
loginModel
.
login
(
loginMessage
.
get
());
}
}
public
void
checkAuthorized
(
Boolean
isAuthorized
)
{
public
void
checkAuthorized
(
Boolean
isAuthorized
)
{
if
(
isAuthorized
)
{
if
(
isAuthorized
)
{
context
.
startActivity
(
context
.
startActivity
(
...
...
app/src/main/java/com/example/zxa01/iotclient/component/privacy/PrivacyModel.java
View file @
f9b3e5d7
...
@@ -54,7 +54,10 @@ public class PrivacyModel extends BaseObservable {
...
@@ -54,7 +54,10 @@ public class PrivacyModel extends BaseObservable {
public
void
setPrivacyChoice
(
@NonNull
PrivacyContent
privacyContent
,
@NonNull
boolean
isAccepted
)
{
public
void
setPrivacyChoice
(
@NonNull
PrivacyContent
privacyContent
,
@NonNull
boolean
isAccepted
)
{
isUploadMLD
.
setValue
(
true
);
isUploadMLD
.
setValue
(
true
);
Api
.
getApi
().
setPrivacyChoice
(
transferPrivacyContent
(
privacyContent
,
isAccepted
))
Api
.
getApi
().
setPrivacyChoice
(
new
Gson
().
toJson
(
new
PrivacyChoice
().
setPrivacyContent
(
privacyContent
.
setUser
(
Config
.
getConfig
().
getUser
()))
.
setAccepted
(
isAccepted
)))
.
enqueue
(
new
Callback
<
PrivacyChoiceResponse
>()
{
.
enqueue
(
new
Callback
<
PrivacyChoiceResponse
>()
{
@Override
@Override
public
void
onResponse
(
Call
<
PrivacyChoiceResponse
>
call
,
Response
<
PrivacyChoiceResponse
>
response
)
{
public
void
onResponse
(
Call
<
PrivacyChoiceResponse
>
call
,
Response
<
PrivacyChoiceResponse
>
response
)
{
...
@@ -73,11 +76,4 @@ public class PrivacyModel extends BaseObservable {
...
@@ -73,11 +76,4 @@ public class PrivacyModel extends BaseObservable {
new
Handler
().
postDelayed
(()
->
isUploadMLD
.
setValue
(
false
),
500
);
new
Handler
().
postDelayed
(()
->
isUploadMLD
.
setValue
(
false
),
500
);
}
}
private
String
transferPrivacyContent
(
@NonNull
PrivacyContent
privacyContent
,
@NonNull
boolean
isAccepted
)
{
return
new
Gson
().
toJson
(
new
PrivacyChoice
().
setPrivacyContent
(
privacyContent
.
setUser
(
Config
.
getConfig
().
getUser
()))
.
setAccepted
(
isAccepted
));
}
}
}
app/src/main/res/layout/fragment_device.xml
View file @
f9b3e5d7
...
@@ -47,16 +47,6 @@
...
@@ -47,16 +47,6 @@
android:src=
"@drawable/ic_add_black_24dp"
android:src=
"@drawable/ic_add_black_24dp"
app:backgroundTint=
"@color/colorPrimary"
/>
app:backgroundTint=
"@color/colorPrimary"
/>
<TextView
android:id=
"@+id/textView"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:text=
"@string/no_content"
android:textAlignment=
"center"
android:textSize=
"@dimen/font"
android:visibility=
"@{viewModel.isLoading && viewModel.isNoContent ? View.GONE : View.VISIBLE}"
/>
</FrameLayout>
</FrameLayout>
</layout>
</layout>
app/src/main/res/layout/fragment_record.xml
View file @
f9b3e5d7
...
@@ -59,16 +59,5 @@
...
@@ -59,16 +59,5 @@
</LinearLayout>
</LinearLayout>
<TextView
android:id=
"@+id/textView"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:textAlignment=
"center"
android:textSize=
"@dimen/font"
android:text=
"@string/no_content"
android:visibility=
"@{viewModel.isLoading && viewModel.isNoContent ? View.GONE : View.VISIBLE}"
/>
</FrameLayout>
</FrameLayout>
</layout>
</layout>
\ No newline at end of file
app/src/main/res/layout/recycler_view_device.xml
View file @
f9b3e5d7
...
@@ -58,17 +58,6 @@
...
@@ -58,17 +58,6 @@
app:layout_constraintStart_toEndOf=
"@+id/image_device"
app:layout_constraintStart_toEndOf=
"@+id/image_device"
tools:text=
"subtitle"
/>
tools:text=
"subtitle"
/>
<TextView
android:id=
"@+id/text_device_status"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginEnd=
"8dp"
android:textSize=
"12sp"
android:text=
"@{viewModel.getDeviceAt(position).status.toString()}"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintTop_toTopOf=
"@+id/image_device"
tools:text=
"connection"
/>
</android.support.constraint.ConstraintLayout>
</android.support.constraint.ConstraintLayout>
</layout>
</layout>
\ No newline at end of file
app/src/main/res/layout/recycler_view_record.xml
View file @
f9b3e5d7
...
@@ -34,7 +34,7 @@
...
@@ -34,7 +34,7 @@
<TextView
<TextView
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"@{viewModel.getPrivacyChoiceAt(position).privacyContent.device.name}"
android:text=
"@{viewModel.getPrivacyChoiceAt(position).privacyC
hoice.privacyC
ontent.device.name}"
android:textColor=
"@color/colorPrimary"
android:textColor=
"@color/colorPrimary"
android:textSize=
"18sp"
android:textSize=
"18sp"
android:textStyle=
"bold"
android:textStyle=
"bold"
...
@@ -52,7 +52,7 @@
...
@@ -52,7 +52,7 @@
<TextView
<TextView
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"@{viewModel.getPrivacyChoiceAt(position).privacyContent.policy.description}"
android:text=
"@{viewModel.getPrivacyChoiceAt(position).privacyC
hoice.privacyC
ontent.policy.description}"
tools:text=
"本APP會蒐集使用者周遭溫度作為第三方資料之地區環境分析資料。"
/>
tools:text=
"本APP會蒐集使用者周遭溫度作為第三方資料之地區環境分析資料。"
/>
<LinearLayout
<LinearLayout
...
...
app/src/main/res/values/strings.xml
View file @
f9b3e5d7
...
@@ -23,6 +23,7 @@
...
@@ -23,6 +23,7 @@
<string
name=
"detail_preference_setting"
>
隱私選項設定
</string>
<string
name=
"detail_preference_setting"
>
隱私選項設定
</string>
<string
name=
"detail_detect_report"
>
檢測報告下載
</string>
<string
name=
"detail_detect_report"
>
檢測報告下載
</string>
<string
name=
"detail_report_download"
>
下載中...
</string>
<string
name=
"detail_report_download"
>
下載中...
</string>
<string
name=
"detail_report_downloaded"
>
下載成功
</string>
<!--Privacy-->
<!--Privacy-->
<string
name=
"privacy_report_title"
>
隱私政策報告
</string>
<string
name=
"privacy_report_title"
>
隱私政策報告
</string>
...
...
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