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
1a069c51
Commit
1a069c51
authored
Jun 17, 2019
by
DESKTOP-NFGF3PG\zxa01
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1. simulate the generate key
2. add encrypt and decrypt 3. add content provider to store the key
parent
9db1b605
Changes
17
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
276 additions
and
27 deletions
+276
-27
app/build.gradle
app/build.gradle
+4
-0
app/src/main/AndroidManifest.xml
app/src/main/AndroidManifest.xml
+7
-4
app/src/main/java/com/example/zxa01/iotclient/common/Config.java
.../main/java/com/example/zxa01/iotclient/common/Config.java
+9
-1
app/src/main/java/com/example/zxa01/iotclient/common/DefaultData.java
.../java/com/example/zxa01/iotclient/common/DefaultData.java
+1
-1
app/src/main/java/com/example/zxa01/iotclient/common/tools/Api.java
...in/java/com/example/zxa01/iotclient/common/tools/Api.java
+1
-1
app/src/main/java/com/example/zxa01/iotclient/common/tools/DownloadFile.java
...om/example/zxa01/iotclient/common/tools/DownloadFile.java
+0
-3
app/src/main/java/com/example/zxa01/iotclient/common/tools/ECCGenerate.java
...com/example/zxa01/iotclient/common/tools/ECCGenerate.java
+50
-0
app/src/main/java/com/example/zxa01/iotclient/common/tools/UsersProvider.java
...m/example/zxa01/iotclient/common/tools/UsersProvider.java
+144
-0
app/src/main/java/com/example/zxa01/iotclient/component/detail/DetailModel.java
...example/zxa01/iotclient/component/detail/DetailModel.java
+1
-2
app/src/main/java/com/example/zxa01/iotclient/component/detail/DetailViewModel.java
...ple/zxa01/iotclient/component/detail/DetailViewModel.java
+1
-1
app/src/main/java/com/example/zxa01/iotclient/component/home/record/RecordModel.java
...le/zxa01/iotclient/component/home/record/RecordModel.java
+1
-1
app/src/main/java/com/example/zxa01/iotclient/component/home/setting/SettingModel.java
.../zxa01/iotclient/component/home/setting/SettingModel.java
+1
-1
app/src/main/java/com/example/zxa01/iotclient/component/home/setting/SettingViewModel.java
...01/iotclient/component/home/setting/SettingViewModel.java
+1
-1
app/src/main/java/com/example/zxa01/iotclient/component/login/LoginModel.java
...m/example/zxa01/iotclient/component/login/LoginModel.java
+48
-5
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/PrivacyModel.java
...ample/zxa01/iotclient/component/privacy/PrivacyModel.java
+1
-1
app/src/main/java/com/example/zxa01/iotclient/component/privacy/PrivacyViewModel.java
...e/zxa01/iotclient/component/privacy/PrivacyViewModel.java
+1
-1
No files found.
app/build.gradle
View file @
1a069c51
...
...
@@ -51,4 +51,8 @@ dependencies {
exclude
group:
'com.android.support'
,
module:
'recyclerview-v7'
}
// web3j
implementation
"org.web3j:crypto:4.0.4"
implementation
'org.jetbrains:annotations:15.0'
}
app/src/main/AndroidManifest.xml
View file @
1a069c51
...
...
@@ -7,8 +7,8 @@
<uses-permission
android:name=
"android.permission.READ_CONTACTS"
/>
<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"
/>
<uses-permission
android:name=
"android.permission.WRITE_EXTERNAL_STORAGE"
/>
<uses-permission
android:name=
"android.permission.ACCESS_NETWORK_STATE"
/>
<application
android:allowBackup=
"false"
...
...
@@ -33,8 +33,7 @@
android:name=
".component.home.HomeActivity"
android:label=
"@string/title_home"
android:screenOrientation=
"portrait"
android:windowSoftInputMode=
"adjustPan"
/>
android:windowSoftInputMode=
"adjustPan"
/>
<activity
android:name=
".component.detail.DetailActivity"
...
...
@@ -45,6 +44,10 @@
android:name=
".component.privacy.PrivacyActivity"
android:label=
"@string/title_privacy"
android:screenOrientation=
"portrait"
/>
<provider
android:name=
".common.tools.UsersProvider"
android:authorities=
"com.example.zxa01.iotclient.common.tools.UserProvider"
></provider>
</application>
</manifest>
\ No newline at end of file
app/src/main/java/com/example/zxa01/iotclient/common/
singleton/
Config.java
→
app/src/main/java/com/example/zxa01/iotclient/common/Config.java
View file @
1a069c51
package
com.example.zxa01.iotclient.common
.singleton
;
package
com.example.zxa01.iotclient.common
;
import
com.example.zxa01.iotclient.common.pojo.Setting
;
import
com.example.zxa01.iotclient.common.pojo.auth.LoginMessage
;
...
...
@@ -15,6 +15,7 @@ public class Config {
private
static
Config
config
=
new
Config
();
private
List
<
Setting
>
settings
;
private
LoginMessage
message
;
private
String
key
;
private
Config
()
{
this
.
reset
();
...
...
@@ -49,4 +50,11 @@ public class Config {
this
.
settings
.
add
(
setting
);
}
public
String
getKey
()
{
return
key
;
}
public
void
setKey
(
String
key
)
{
this
.
key
=
key
;
}
}
app/src/main/java/com/example/zxa01/iotclient/common/
singleton/
DefaultData.java
→
app/src/main/java/com/example/zxa01/iotclient/common/DefaultData.java
View file @
1a069c51
package
com.example.zxa01.iotclient.common
.singleton
;
package
com.example.zxa01.iotclient.common
;
import
com.example.zxa01.iotclient.common.pojo.auth.LoginMessage
;
...
...
app/src/main/java/com/example/zxa01/iotclient/common/tools/Api.java
View file @
1a069c51
...
...
@@ -4,7 +4,7 @@ import com.example.zxa01.iotclient.common.pojo.device.Device;
import
com.example.zxa01.iotclient.common.pojo.index.PrivacyChoiceResponse
;
import
com.example.zxa01.iotclient.common.pojo.index.PrivacyPolicyReportResponse
;
import
com.example.zxa01.iotclient.common.pojo.privacy.PrivacyChoice
;
import
com.example.zxa01.iotclient.common.
singleton.
Config
;
import
com.example.zxa01.iotclient.common.Config
;
import
com.google.gson.GsonBuilder
;
import
java.util.List
;
...
...
app/src/main/java/com/example/zxa01/iotclient/common/tools/DownloadFile.java
View file @
1a069c51
...
...
@@ -151,17 +151,14 @@ public class DownloadFile {
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
;
}
}
...
...
app/src/main/java/com/example/zxa01/iotclient/common/tools/ECCGenerate.java
0 → 100644
View file @
1a069c51
package
com.example.zxa01.iotclient.common.tools
;
import
java.security.InvalidKeyException
;
import
java.security.NoSuchAlgorithmException
;
import
java.security.SecureRandom
;
import
java.util.Base64
;
import
javax.crypto.BadPaddingException
;
import
javax.crypto.Cipher
;
import
javax.crypto.IllegalBlockSizeException
;
import
javax.crypto.KeyGenerator
;
import
javax.crypto.NoSuchPaddingException
;
import
javax.crypto.SecretKey
;
import
javax.crypto.spec.SecretKeySpec
;
public
class
ECCGenerate
{
private
static
final
String
ALGORITHM
=
"AES"
;
public
ECCGenerate
()
{
}
public
String
generate
()
throws
NoSuchAlgorithmException
{
KeyGenerator
keyGen
=
KeyGenerator
.
getInstance
(
ALGORITHM
);
keyGen
.
init
(
new
SecureRandom
());
return
encodeKey
(
keyGen
.
generateKey
());
}
public
String
encrypt
(
String
message
,
String
secretKey
)
throws
NoSuchPaddingException
,
NoSuchAlgorithmException
,
BadPaddingException
,
IllegalBlockSizeException
,
InvalidKeyException
{
Cipher
cipher
=
Cipher
.
getInstance
(
ALGORITHM
);
cipher
.
init
(
cipher
.
ENCRYPT_MODE
,
decodeKey
(
secretKey
));
return
Base64
.
getEncoder
().
encodeToString
(
cipher
.
doFinal
(
message
.
getBytes
()));
}
public
String
decrypt
(
String
message
,
String
secretKey
)
throws
NoSuchPaddingException
,
NoSuchAlgorithmException
,
BadPaddingException
,
IllegalBlockSizeException
,
InvalidKeyException
{
Cipher
cipher
=
Cipher
.
getInstance
(
ALGORITHM
);
cipher
.
init
(
Cipher
.
DECRYPT_MODE
,
decodeKey
(
secretKey
));
byte
[]
decryptedText
=
cipher
.
doFinal
(
Base64
.
getDecoder
().
decode
(
message
));
return
new
String
(
decryptedText
);
}
private
SecretKey
decodeKey
(
String
key
)
{
byte
[]
decodedKey
=
Base64
.
getDecoder
().
decode
(
key
);
return
new
SecretKeySpec
(
decodedKey
,
0
,
decodedKey
.
length
,
ALGORITHM
);
}
private
String
encodeKey
(
SecretKey
secretKey
)
{
return
Base64
.
getEncoder
().
encodeToString
(
secretKey
.
getEncoded
());
}
}
app/src/main/java/com/example/zxa01/iotclient/common/tools/UsersProvider.java
0 → 100644
View file @
1a069c51
package
com.example.zxa01.iotclient.common.tools
;
import
android.content.ContentProvider
;
import
android.content.ContentUris
;
import
android.content.ContentValues
;
import
android.content.Context
;
import
android.content.UriMatcher
;
import
android.database.Cursor
;
import
android.database.sqlite.SQLiteDatabase
;
import
android.database.sqlite.SQLiteException
;
import
android.database.sqlite.SQLiteOpenHelper
;
import
android.database.sqlite.SQLiteQueryBuilder
;
import
android.net.Uri
;
import
java.util.HashMap
;
public
class
UsersProvider
extends
ContentProvider
{
public
static
final
String
PROVIDER_NAME
=
"com.example.zxa01.iotclient.common.tools.UserProvider"
;
public
static
final
String
URL
=
"content://"
+
PROVIDER_NAME
+
"/users"
;
public
static
final
Uri
CONTENT_URI
=
Uri
.
parse
(
URL
);
public
static
final
String
id
=
"id"
;
public
static
final
String
name
=
"name"
;
public
static
final
String
secret_key
=
"secret_key"
;
public
static
final
int
uriCode
=
1
;
static
final
UriMatcher
uriMatcher
;
static
final
String
DATABASE_NAME
=
"iotclient.db"
;
static
final
String
TABLE_NAME
=
"user"
;
static
final
int
DATABASE_VERSION
=
1
;
static
final
String
CREATE_DB_TABLE
=
" CREATE TABLE "
+
TABLE_NAME
+
" (id INTEGER PRIMARY KEY AUTOINCREMENT, "
+
" name TEXT NOT NULL,"
+
" secret_key TEXT )"
;
private
static
HashMap
<
String
,
String
>
values
;
static
{
uriMatcher
=
new
UriMatcher
(
UriMatcher
.
NO_MATCH
);
uriMatcher
.
addURI
(
PROVIDER_NAME
,
"users"
,
uriCode
);
uriMatcher
.
addURI
(
PROVIDER_NAME
,
"users/*"
,
uriCode
);
}
private
SQLiteDatabase
db
;
@Override
public
String
getType
(
Uri
uri
)
{
switch
(
uriMatcher
.
match
(
uri
))
{
case
uriCode:
return
"vnd.android.cursor.dir/users"
;
default
:
throw
new
IllegalArgumentException
(
"Unsupported URI: "
+
uri
);
}
}
@Override
public
boolean
onCreate
()
{
Context
context
=
getContext
();
DatabaseHelper
dbHelper
=
new
DatabaseHelper
(
context
);
db
=
dbHelper
.
getWritableDatabase
();
if
(
db
!=
null
)
{
return
true
;
}
return
false
;
}
@Override
public
Cursor
query
(
Uri
uri
,
String
[]
projection
,
String
selection
,
String
[]
selectionArgs
,
String
sortOrder
)
{
SQLiteQueryBuilder
qb
=
new
SQLiteQueryBuilder
();
qb
.
setTables
(
TABLE_NAME
);
switch
(
uriMatcher
.
match
(
uri
))
{
case
uriCode:
qb
.
setProjectionMap
(
values
);
break
;
default
:
throw
new
IllegalArgumentException
(
"Unknown URI "
+
uri
);
}
if
(
sortOrder
==
null
||
sortOrder
==
""
)
{
sortOrder
=
id
;
}
Cursor
c
=
qb
.
query
(
db
,
projection
,
selection
,
selectionArgs
,
null
,
null
,
sortOrder
);
c
.
setNotificationUri
(
getContext
().
getContentResolver
(),
uri
);
return
c
;
}
@Override
public
Uri
insert
(
Uri
uri
,
ContentValues
values
)
{
long
rowID
=
db
.
insert
(
TABLE_NAME
,
""
,
values
);
if
(
rowID
>
0
)
{
Uri
_uri
=
ContentUris
.
withAppendedId
(
CONTENT_URI
,
rowID
);
getContext
().
getContentResolver
().
notifyChange
(
_uri
,
null
);
return
_uri
;
}
throw
new
SQLiteException
(
"Failed to add a record into "
+
uri
);
}
@Override
public
int
update
(
Uri
uri
,
ContentValues
values
,
String
selection
,
String
[]
selectionArgs
)
{
int
count
=
0
;
switch
(
uriMatcher
.
match
(
uri
))
{
case
uriCode:
count
=
db
.
update
(
TABLE_NAME
,
values
,
selection
,
selectionArgs
);
break
;
default
:
throw
new
IllegalArgumentException
(
"Unknown URI "
+
uri
);
}
getContext
().
getContentResolver
().
notifyChange
(
uri
,
null
);
return
count
;
}
@Override
public
int
delete
(
Uri
uri
,
String
selection
,
String
[]
selectionArgs
)
{
int
count
=
0
;
switch
(
uriMatcher
.
match
(
uri
))
{
case
uriCode:
count
=
db
.
delete
(
TABLE_NAME
,
selection
,
selectionArgs
);
break
;
default
:
throw
new
IllegalArgumentException
(
"Unknown URI "
+
uri
);
}
getContext
().
getContentResolver
().
notifyChange
(
uri
,
null
);
return
count
;
}
private
static
class
DatabaseHelper
extends
SQLiteOpenHelper
{
DatabaseHelper
(
Context
context
)
{
super
(
context
,
DATABASE_NAME
,
null
,
DATABASE_VERSION
);
}
@Override
public
void
onCreate
(
SQLiteDatabase
db
)
{
db
.
execSQL
(
CREATE_DB_TABLE
);
}
@Override
public
void
onUpgrade
(
SQLiteDatabase
db
,
int
oldVersion
,
int
newVersion
)
{
db
.
execSQL
(
"DROP TABLE IF EXISTS "
+
TABLE_NAME
);
onCreate
(
db
);
}
}
}
app/src/main/java/com/example/zxa01/iotclient/component/detail/DetailModel.java
View file @
1a069c51
...
...
@@ -6,10 +6,9 @@ import android.support.annotation.NonNull;
import
android.util.Log
;
import
com.example.zxa01.iotclient.common.pojo.index.PrivacyPolicyReportResponse
;
import
com.example.zxa01.iotclient.common.
singleton.
Config
;
import
com.example.zxa01.iotclient.common.Config
;
import
com.example.zxa01.iotclient.common.tools.Api
;
import
com.example.zxa01.iotclient.common.pojo.device.Device
;
import
com.example.zxa01.iotclient.common.pojo.privacy.PrivacyPolicyReport
;
import
retrofit2.Call
;
import
retrofit2.Callback
;
...
...
app/src/main/java/com/example/zxa01/iotclient/component/detail/DetailViewModel.java
View file @
1a069c51
package
com.example.zxa01.iotclient.component.detail
;
import
com.example.zxa01.iotclient.common.pojo.device.Device
;
import
com.example.zxa01.iotclient.common.
singleton.
Config
;
import
com.example.zxa01.iotclient.common.Config
;
import
com.example.zxa01.iotclient.common.tools.DownloadFile
;
import
com.example.zxa01.iotclient.component.privacy.PrivacyActivity
;
import
android.arch.lifecycle.MutableLiveData
;
...
...
app/src/main/java/com/example/zxa01/iotclient/component/home/record/RecordModel.java
View file @
1a069c51
...
...
@@ -5,7 +5,7 @@ import android.databinding.BaseObservable;
import
android.support.annotation.NonNull
;
import
android.util.Log
;
import
com.example.zxa01.iotclient.common.
singleton.
Config
;
import
com.example.zxa01.iotclient.common.Config
;
import
com.example.zxa01.iotclient.common.tools.Api
;
import
com.example.zxa01.iotclient.common.pojo.index.PrivacyChoiceResponse
;
...
...
app/src/main/java/com/example/zxa01/iotclient/component/home/setting/SettingModel.java
View file @
1a069c51
...
...
@@ -4,7 +4,7 @@ import android.arch.lifecycle.MutableLiveData;
import
android.databinding.BaseObservable
;
import
com.example.zxa01.iotclient.common.pojo.Setting
;
import
com.example.zxa01.iotclient.common.
singleton.
Config
;
import
com.example.zxa01.iotclient.common.Config
;
import
java.util.List
;
...
...
app/src/main/java/com/example/zxa01/iotclient/component/home/setting/SettingViewModel.java
View file @
1a069c51
...
...
@@ -8,7 +8,7 @@ import android.databinding.ObservableBoolean;
import
com.example.zxa01.iotclient.R
;
import
com.example.zxa01.iotclient.common.pojo.Setting
;
import
com.example.zxa01.iotclient.common.
singleton.
Config
;
import
com.example.zxa01.iotclient.common.Config
;
import
com.example.zxa01.iotclient.component.login.LoginActivity
;
import
java.util.List
;
...
...
app/src/main/java/com/example/zxa01/iotclient/component/login/LoginModel.java
View file @
1a069c51
package
com.example.zxa01.iotclient.component.login
;
import
com.example.zxa01.iotclient.common.pojo.Setting
;
import
com.example.zxa01.iotclient.common.pojo.auth.User
;
import
com.example.zxa01.iotclient.common.singleton.Config
;
import
com.example.zxa01.iotclient.common.Config
;
import
com.example.zxa01.iotclient.common.pojo.auth.LoginMessage
;
import
com.example.zxa01.iotclient.common.singleton.DefaultData
;
import
com.example.zxa01.iotclient.component.home.device.DeviceFragment
;
import
com.example.zxa01.iotclient.common.DefaultData
;
import
com.example.zxa01.iotclient.common.tools.ECCGenerate
;
import
com.example.zxa01.iotclient.common.tools.UsersProvider
;
import
android.arch.lifecycle.MutableLiveData
;
import
android.content.ContentValues
;
import
android.content.Context
;
import
android.database.Cursor
;
import
android.databinding.BaseObservable
;
import
android.support.annotation.NonNull
;
import
java.security.NoSuchAlgorithmException
;
public
class
LoginModel
extends
BaseObservable
{
private
MutableLiveData
<
Boolean
>
isAuthorized
;
private
Context
context
;
public
LoginModel
()
{
public
LoginModel
(
Context
context
)
{
this
.
context
=
context
;
isAuthorized
=
new
MutableLiveData
<>();
isAuthorized
.
setValue
(
false
);
}
...
...
@@ -28,10 +36,45 @@ public class LoginModel extends BaseObservable {
if
(
verification
(
message
))
{
settingConfig
(
message
);
isAuthorized
.
setValue
(
true
);
checkKey
();
}
}
private
void
checkKey
()
{
Cursor
cursor
=
context
.
getContentResolver
().
query
(
UsersProvider
.
CONTENT_URI
,
null
,
null
,
null
,
null
);
if
(
cursor
.
moveToFirst
())
{
boolean
found
=
false
;
while
(!
cursor
.
isAfterLast
())
{
if
(
cursor
.
getString
(
cursor
.
getColumnIndex
(
UsersProvider
.
name
)).
equals
(
Config
.
getConfig
().
getMessage
().
getAccount
())){
Config
.
getConfig
().
setKey
(
cursor
.
getString
(
cursor
.
getColumnIndex
(
UsersProvider
.
secret_key
)));
found
=
true
;
break
;
}
cursor
.
moveToNext
();
}
if
(!
found
)
{
generateKey
();
}
}
else
{
generateKey
();
}
}
private
void
generateKey
()
{
try
{
Config
.
getConfig
().
setKey
(
new
ECCGenerate
().
generate
());
ContentValues
values
=
new
ContentValues
();
values
.
put
(
UsersProvider
.
name
,
Config
.
getConfig
().
getMessage
().
getAccount
());
values
.
put
(
UsersProvider
.
secret_key
,
Config
.
getConfig
().
getKey
());
context
.
getContentResolver
().
insert
(
UsersProvider
.
CONTENT_URI
,
values
);
}
catch
(
NoSuchAlgorithmException
e
)
{
e
.
printStackTrace
();
}
}
private
boolean
verification
(
@NonNull
LoginMessage
message
)
{
return
message
.
getAccount
()
!=
null
&&
message
.
getPassword
()
!=
null
&&
...
...
app/src/main/java/com/example/zxa01/iotclient/component/login/LoginViewModel.java
View file @
1a069c51
package
com.example.zxa01.iotclient.component.login
;
import
com.example.zxa01.iotclient.common.
singleton.
DefaultData
;
import
com.example.zxa01.iotclient.common.DefaultData
;
import
com.example.zxa01.iotclient.component.home.HomeActivity
;
import
com.example.zxa01.iotclient.common.pojo.auth.LoginMessage
;
import
android.arch.lifecycle.MutableLiveData
;
...
...
@@ -12,13 +12,14 @@ import android.databinding.ObservableField;
public
class
LoginViewModel
extends
ViewModel
{
public
ObservableField
<
LoginMessage
>
loginMessage
=
new
ObservableField
<>();
private
LoginModel
loginModel
=
new
LoginModel
()
;
private
LoginModel
loginModel
;
private
Context
context
;
public
LoginViewModel
(
Context
context
)
{
this
.
context
=
context
;
// default
loginMessage
.
set
(
DefaultData
.
getDefaultData
().
getLoginMessage
());
this
.
loginMessage
.
set
(
DefaultData
.
getDefaultData
().
getLoginMessage
());
this
.
context
=
context
;
loginModel
=
new
LoginModel
(
context
);
}
public
void
login
()
{
...
...
app/src/main/java/com/example/zxa01/iotclient/component/privacy/PrivacyModel.java
View file @
1a069c51
...
...
@@ -12,7 +12,7 @@ import com.example.zxa01.iotclient.common.tools.Api;
import
com.example.zxa01.iotclient.common.pojo.index.PrivacyChoiceResponse
;
import
com.example.zxa01.iotclient.common.pojo.privacy.PrivacyChoice
;
import
com.example.zxa01.iotclient.common.pojo.privacy.PrivacyContent
;
import
com.example.zxa01.iotclient.common.
singleton.
Config
;
import
com.example.zxa01.iotclient.common.Config
;
import
retrofit2.Call
;
import
retrofit2.Callback
;
...
...
app/src/main/java/com/example/zxa01/iotclient/component/privacy/PrivacyViewModel.java
View file @
1a069c51
...
...
@@ -6,7 +6,7 @@ import com.example.zxa01.iotclient.common.pojo.index.PrivacyPolicyReportResponse
import
com.example.zxa01.iotclient.common.pojo.privacy.PrivacyContent
;
import
com.example.zxa01.iotclient.common.pojo.privacy.PrivacyPolicy
;
import
com.example.zxa01.iotclient.common.pojo.privacy.PrivacyPolicyReport
;
import
com.example.zxa01.iotclient.common.
singleton.
Config
;
import
com.example.zxa01.iotclient.common.Config
;
import
android.arch.lifecycle.MutableLiveData
;
import
android.arch.lifecycle.ViewModel
;
...
...
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