From 089d8270239e75b204b8e265dff557c94c6c8160 Mon Sep 17 00:00:00 2001
From: "DESKTOP-NFGF3PG\\zxa01" <zxa011023>
Date: Thu, 23 May 2019 16:09:00 +0800
Subject: [PATCH] update

---
 app/src/main/AndroidManifest.xml              |  2 +-
 .../common/bindings/CustomViewBindings.java   |  1 -
 .../pojo/index/PrivacyChoiceResponse.java     |  9 ++++---
 .../common/{shared => singleton}/Config.java  |  2 +-
 .../{shared => singleton}/DefaultData.java    |  4 ++--
 .../iotclient/common/{http => tools}/Api.java | 15 +++++++-----
 .../DownloadFile.java}                        |  6 ++---
 .../component/detail/DetailModel.java         |  3 ++-
 .../component/detail/DetailViewModel.java     | 16 ++-----------
 .../component/home/device/DeviceFragment.java |  3 +++
 .../component/home/device/DeviceModel.java    |  6 ++---
 .../home/device/bind/DeviceBindModel.java     |  3 +--
 .../component/home/record/RecordModel.java    |  6 +++--
 .../home/record/RecordViewModel.java          | 24 ++++++++++++++++++-
 .../component/home/setting/SettingModel.java  |  2 +-
 .../home/setting/SettingViewModel.java        |  3 +--
 .../iotclient/component/login/LoginModel.java |  2 +-
 .../component/login/LoginViewModel.java       |  2 +-
 .../component/privacy/PrivacyModel.java       | 14 +++++------
 .../component/privacy/PrivacyViewModel.java   |  2 +-
 app/src/main/res/drawable/gradient_theme.xml  |  8 -------
 .../drawable/ic_notifications_black_24dp.xml  |  9 -------
 .../main/res/layout/recycler_view_record.xml  | 11 +++++----
 app/src/main/res/values/colors.xml            |  1 -
 build.gradle                                  |  2 +-
 25 files changed, 79 insertions(+), 77 deletions(-)
 rename app/src/main/java/com/example/zxa01/iotclient/common/{shared => singleton}/Config.java (96%)
 rename app/src/main/java/com/example/zxa01/iotclient/common/{shared => singleton}/DefaultData.java (77%)
 rename app/src/main/java/com/example/zxa01/iotclient/common/{http => tools}/Api.java (78%)
 rename app/src/main/java/com/example/zxa01/iotclient/common/{http/DownloadTask.java => tools/DownloadFile.java} (98%)
 delete mode 100644 app/src/main/res/drawable/gradient_theme.xml
 delete mode 100644 app/src/main/res/drawable/ic_notifications_black_24dp.xml

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 7f15348..671df78 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -11,7 +11,7 @@
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
 
     <application
-        android:allowBackup="true"
+        android:allowBackup="false"
         android:icon="@mipmap/ic_launcher"
         android:label="@string/app_name"
         android:roundIcon="@mipmap/ic_launcher_round"
diff --git a/app/src/main/java/com/example/zxa01/iotclient/common/bindings/CustomViewBindings.java b/app/src/main/java/com/example/zxa01/iotclient/common/bindings/CustomViewBindings.java
index 3f33ed6..66653f7 100644
--- a/app/src/main/java/com/example/zxa01/iotclient/common/bindings/CustomViewBindings.java
+++ b/app/src/main/java/com/example/zxa01/iotclient/common/bindings/CustomViewBindings.java
@@ -3,7 +3,6 @@ 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 {
 
diff --git a/app/src/main/java/com/example/zxa01/iotclient/common/pojo/index/PrivacyChoiceResponse.java b/app/src/main/java/com/example/zxa01/iotclient/common/pojo/index/PrivacyChoiceResponse.java
index 739fb80..425dbb7 100644
--- a/app/src/main/java/com/example/zxa01/iotclient/common/pojo/index/PrivacyChoiceResponse.java
+++ b/app/src/main/java/com/example/zxa01/iotclient/common/pojo/index/PrivacyChoiceResponse.java
@@ -15,23 +15,26 @@ public class PrivacyChoiceResponse {
         return id;
     }
 
-    public void setId(long id) {
+    public PrivacyChoiceResponse setId(long id) {
         this.id = id;
+        return this;
     }
 
     public String getLocalDateTime() {
         return localDateTime;
     }
 
-    public void setLocalDateTime(String localDateTime) {
+    public PrivacyChoiceResponse setLocalDateTime(String localDateTime) {
         this.localDateTime = localDateTime;
+        return this;
     }
 
     public PrivacyChoice getPrivacyChoice() {
         return privacyChoice;
     }
 
-    public void setPrivacyChoice(PrivacyChoice privacyChoice) {
+    public PrivacyChoiceResponse setPrivacyChoice(PrivacyChoice privacyChoice) {
         this.privacyChoice = privacyChoice;
+        return this;
     }
 }
diff --git a/app/src/main/java/com/example/zxa01/iotclient/common/shared/Config.java b/app/src/main/java/com/example/zxa01/iotclient/common/singleton/Config.java
similarity index 96%
rename from app/src/main/java/com/example/zxa01/iotclient/common/shared/Config.java
rename to app/src/main/java/com/example/zxa01/iotclient/common/singleton/Config.java
index d54c183..71c6f1e 100644
--- a/app/src/main/java/com/example/zxa01/iotclient/common/shared/Config.java
+++ b/app/src/main/java/com/example/zxa01/iotclient/common/singleton/Config.java
@@ -1,4 +1,4 @@
-package com.example.zxa01.iotclient.common.shared;
+package com.example.zxa01.iotclient.common.singleton;
 
 
 import com.example.zxa01.iotclient.common.pojo.Setting;
diff --git a/app/src/main/java/com/example/zxa01/iotclient/common/shared/DefaultData.java b/app/src/main/java/com/example/zxa01/iotclient/common/singleton/DefaultData.java
similarity index 77%
rename from app/src/main/java/com/example/zxa01/iotclient/common/shared/DefaultData.java
rename to app/src/main/java/com/example/zxa01/iotclient/common/singleton/DefaultData.java
index 02488e7..20eaf68 100644
--- a/app/src/main/java/com/example/zxa01/iotclient/common/shared/DefaultData.java
+++ b/app/src/main/java/com/example/zxa01/iotclient/common/singleton/DefaultData.java
@@ -1,4 +1,4 @@
-package com.example.zxa01.iotclient.common.shared;
+package com.example.zxa01.iotclient.common.singleton;
 
 import com.example.zxa01.iotclient.common.pojo.auth.LoginMessage;
 
@@ -8,7 +8,7 @@ public class DefaultData {
     private LoginMessage loginMessage;
 
     private DefaultData() {
-        loginMessage = new LoginMessage("192.168.2.90:8080", "user", "1234");
+        loginMessage = new LoginMessage("192.168.2.69:8080", "user", "1234");
     }
 
     public static DefaultData getDefaultData() {
diff --git a/app/src/main/java/com/example/zxa01/iotclient/common/http/Api.java b/app/src/main/java/com/example/zxa01/iotclient/common/tools/Api.java
similarity index 78%
rename from app/src/main/java/com/example/zxa01/iotclient/common/http/Api.java
rename to app/src/main/java/com/example/zxa01/iotclient/common/tools/Api.java
index 2c10545..9e42a1f 100644
--- a/app/src/main/java/com/example/zxa01/iotclient/common/http/Api.java
+++ b/app/src/main/java/com/example/zxa01/iotclient/common/tools/Api.java
@@ -1,15 +1,16 @@
-package com.example.zxa01.iotclient.common.http;
+package com.example.zxa01.iotclient.common.tools;
 
 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.privacy.PrivacyChoice;
 import com.example.zxa01.iotclient.common.pojo.privacy.PrivacyPolicyReport;
-import com.example.zxa01.iotclient.common.shared.Config;
+import com.example.zxa01.iotclient.common.singleton.Config;
 import com.google.gson.GsonBuilder;
 
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 import okhttp3.OkHttpClient;
-
 import retrofit2.Call;
 import retrofit2.Retrofit;
 import retrofit2.converter.gson.GsonConverterFactory;
@@ -21,17 +22,19 @@ import retrofit2.http.Path;
 public class Api {
 
     private static ApiInterface api;
+    private static Retrofit retrofit = null;
 
     public static ApiInterface getApi() {
-        Retrofit retrofit = new Retrofit.Builder()
+        retrofit = new Retrofit.Builder()
                 .baseUrl("http://" + Config.getConfig().getGateway())
                 .client(new OkHttpClient.Builder()
+                        .connectTimeout(10, TimeUnit.SECONDS)
+                        .cache(null)
                         .build())
                 .addConverterFactory(
                         GsonConverterFactory.create(new GsonBuilder()
                                 .create()))
                 .build();
-
         api = retrofit.create(ApiInterface.class);
         return api;
     }
@@ -56,7 +59,7 @@ public class Api {
 
         // 表達隱私偏好
         @POST("/choice")
-        Call<PrivacyChoiceResponse> setPrivacyChoice(@Body String privacyChoice);
+        Call<PrivacyChoiceResponse> setPrivacyChoice(@Body PrivacyChoice privacyChoice);
 
         // 取得隱私偏好記錄
         @GET("/choice")
diff --git a/app/src/main/java/com/example/zxa01/iotclient/common/http/DownloadTask.java b/app/src/main/java/com/example/zxa01/iotclient/common/tools/DownloadFile.java
similarity index 98%
rename from app/src/main/java/com/example/zxa01/iotclient/common/http/DownloadTask.java
rename to app/src/main/java/com/example/zxa01/iotclient/common/tools/DownloadFile.java
index adf3e39..2952799 100644
--- a/app/src/main/java/com/example/zxa01/iotclient/common/http/DownloadTask.java
+++ b/app/src/main/java/com/example/zxa01/iotclient/common/tools/DownloadFile.java
@@ -1,4 +1,4 @@
-package com.example.zxa01.iotclient.common.http;
+package com.example.zxa01.iotclient.common.tools;
 
 import android.Manifest;
 import android.app.Activity;
@@ -29,7 +29,7 @@ import java.nio.charset.StandardCharsets;
 
 import static android.support.v4.app.ActivityCompat.requestPermissions;
 
-public class DownloadTask {
+public class DownloadFile {
 
     private static final String TAG = "Download File";
     public static final String CHANNELID = "118";
@@ -42,7 +42,7 @@ public class DownloadTask {
     private AlertDialog dialog;
 
 
-    public DownloadTask(Context context, String downloadUrl) {
+    public DownloadFile(Context context, String downloadUrl) {
         this.context = context;
         this.downloadUrl = downloadUrl;
         this.dialog = new AlertDialog.Builder(context)
diff --git a/app/src/main/java/com/example/zxa01/iotclient/component/detail/DetailModel.java b/app/src/main/java/com/example/zxa01/iotclient/component/detail/DetailModel.java
index 93652be..fab42ce 100644
--- a/app/src/main/java/com/example/zxa01/iotclient/component/detail/DetailModel.java
+++ b/app/src/main/java/com/example/zxa01/iotclient/component/detail/DetailModel.java
@@ -5,7 +5,7 @@ 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.tools.Api;
 import com.example.zxa01.iotclient.common.pojo.device.Device;
 import com.example.zxa01.iotclient.common.pojo.privacy.PrivacyPolicyReport;
 
@@ -32,6 +32,7 @@ public class DetailModel extends BaseObservable {
         Api.getApi().readPrivacyPolicyReportByDevice(udn).enqueue(new Callback<PrivacyPolicyReport>() {
             @Override
             public void onResponse(Call<PrivacyPolicyReport> call, Response<PrivacyPolicyReport> response) {
+                Log.i("readDevices - onResponse()", "success");
                 setDeviceMLD(response == null || response.body() == null ?
                         null : response.body().getDevice());
             }
diff --git a/app/src/main/java/com/example/zxa01/iotclient/component/detail/DetailViewModel.java b/app/src/main/java/com/example/zxa01/iotclient/component/detail/DetailViewModel.java
index dcf77ec..6e26201 100644
--- a/app/src/main/java/com/example/zxa01/iotclient/component/detail/DetailViewModel.java
+++ b/app/src/main/java/com/example/zxa01/iotclient/component/detail/DetailViewModel.java
@@ -1,8 +1,7 @@
 package com.example.zxa01.iotclient.component.detail;
 
-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.tools.DownloadFile;
 import com.example.zxa01.iotclient.component.privacy.PrivacyActivity;
 import android.arch.lifecycle.MutableLiveData;
 import android.arch.lifecycle.ViewModel;
@@ -10,20 +9,9 @@ import android.content.Context;
 import android.content.Intent;
 import android.databinding.ObservableBoolean;
 import android.databinding.ObservableField;
-import android.os.AsyncTask;
-import android.os.Environment;
 import android.support.annotation.NonNull;
-import android.util.Log;
-import android.view.Gravity;
 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 ObservableBoolean isLoading = new ObservableBoolean(true);
@@ -62,6 +50,6 @@ public class DetailViewModel extends ViewModel {
     public void downloadPrivacyReport() {
         // fake file just for test
         String url = "https://www.ey.gov.tw/File/4EBD1D15E6556A04?A=C";
-        new DownloadTask(context, url);
+        new DownloadFile(context, url);
     }
 }
diff --git a/app/src/main/java/com/example/zxa01/iotclient/component/home/device/DeviceFragment.java b/app/src/main/java/com/example/zxa01/iotclient/component/home/device/DeviceFragment.java
index 997ef5f..94a834c 100644
--- a/app/src/main/java/com/example/zxa01/iotclient/component/home/device/DeviceFragment.java
+++ b/app/src/main/java/com/example/zxa01/iotclient/component/home/device/DeviceFragment.java
@@ -13,6 +13,9 @@ import com.example.zxa01.iotclient.R;
 import com.example.zxa01.iotclient.databinding.FragmentDeviceBinding;
 import com.example.zxa01.iotclient.component.home.device.bind.DeviceBindFragment;
 
+import java.io.File;
+import java.util.Arrays;
+
 
 public class DeviceFragment extends Fragment {
 
diff --git a/app/src/main/java/com/example/zxa01/iotclient/component/home/device/DeviceModel.java b/app/src/main/java/com/example/zxa01/iotclient/component/home/device/DeviceModel.java
index 634a06d..2d3b643 100644
--- a/app/src/main/java/com/example/zxa01/iotclient/component/home/device/DeviceModel.java
+++ b/app/src/main/java/com/example/zxa01/iotclient/component/home/device/DeviceModel.java
@@ -1,6 +1,6 @@
 package com.example.zxa01.iotclient.component.home.device;
 
-import com.example.zxa01.iotclient.common.http.Api;
+import com.example.zxa01.iotclient.common.tools.Api;
 import com.example.zxa01.iotclient.common.pojo.device.Device;
 
 import android.arch.lifecycle.MutableLiveData;
@@ -10,7 +10,6 @@ import android.util.Log;
 
 import java.util.List;
 import java.util.stream.Collectors;
-
 import retrofit2.Call;
 import retrofit2.Callback;
 import retrofit2.Response;
@@ -31,14 +30,15 @@ public class DeviceModel extends BaseObservable {
                 new Callback<List<Device>>() {
                     @Override
                     public void onResponse(Call<List<Device>> call, @NonNull Response<List<Device>> response) {
+                        Log.i("readDevices - onResponse()", response.body().toString());
                         devicesMLD.setValue(response.body() == null ?
                                 null : response.body().stream().collect(Collectors.toList()));
                     }
 
                     @Override
                     public void onFailure(Call<List<Device>> call, Throwable t) {
-                        devicesMLD.setValue(null);
                         Log.e("readDevices - onFailure()", t.getMessage(), t);
+                        devicesMLD.setValue(null);
                     }
                 }
         );
diff --git a/app/src/main/java/com/example/zxa01/iotclient/component/home/device/bind/DeviceBindModel.java b/app/src/main/java/com/example/zxa01/iotclient/component/home/device/bind/DeviceBindModel.java
index db30765..791070c 100644
--- a/app/src/main/java/com/example/zxa01/iotclient/component/home/device/bind/DeviceBindModel.java
+++ b/app/src/main/java/com/example/zxa01/iotclient/component/home/device/bind/DeviceBindModel.java
@@ -1,11 +1,10 @@
 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.tools.Api;
 import com.example.zxa01.iotclient.common.pojo.device.Device;
 
 import retrofit2.Call;
diff --git a/app/src/main/java/com/example/zxa01/iotclient/component/home/record/RecordModel.java b/app/src/main/java/com/example/zxa01/iotclient/component/home/record/RecordModel.java
index 1e7f55d..0ef1b86 100644
--- a/app/src/main/java/com/example/zxa01/iotclient/component/home/record/RecordModel.java
+++ b/app/src/main/java/com/example/zxa01/iotclient/component/home/record/RecordModel.java
@@ -5,8 +5,9 @@ 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.tools.Api;
 import com.example.zxa01.iotclient.common.pojo.index.PrivacyChoiceResponse;
+
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -29,14 +30,15 @@ public class RecordModel extends BaseObservable {
         Api.getApi().readPrivacyChoiceRecordsByUser().enqueue(new Callback<List<PrivacyChoiceResponse>>() {
             @Override
             public void onResponse(Call<List<PrivacyChoiceResponse>> call, @NonNull Response<List<PrivacyChoiceResponse>> response) {
+                Log.i("fetchRecord - onResponse()", response.body().toString());
                 privacyChoiceResponsesMLD.setValue(response.body() == null ?
                         null : response.body().stream().collect(Collectors.toList()));
             }
 
             @Override
             public void onFailure(Call<List<PrivacyChoiceResponse>> call, Throwable t) {
-                privacyChoiceResponsesMLD.setValue(null);
                 Log.e("fetchRecord - onFailure()", t.getMessage(), t);
+                privacyChoiceResponsesMLD.setValue(null);
             }
         });
 
diff --git a/app/src/main/java/com/example/zxa01/iotclient/component/home/record/RecordViewModel.java b/app/src/main/java/com/example/zxa01/iotclient/component/home/record/RecordViewModel.java
index c75f296..a3d8c77 100644
--- a/app/src/main/java/com/example/zxa01/iotclient/component/home/record/RecordViewModel.java
+++ b/app/src/main/java/com/example/zxa01/iotclient/component/home/record/RecordViewModel.java
@@ -6,12 +6,18 @@ import android.content.Context;
 import android.content.Intent;
 import android.databinding.ObservableBoolean;
 import android.support.annotation.NonNull;
+import android.text.format.DateFormat;
 
 import com.example.zxa01.iotclient.R;
 import com.example.zxa01.iotclient.common.pojo.index.PrivacyChoiceResponse;
+import com.example.zxa01.iotclient.common.pojo.privacy.p3p.Collector;
 import com.example.zxa01.iotclient.component.privacy.PrivacyActivity;
 
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 public class RecordViewModel extends ViewModel {
 
@@ -71,7 +77,23 @@ public class RecordViewModel extends ViewModel {
     public void setAdapter(List<PrivacyChoiceResponse> privacyChoiceResponses) {
         isLoading.set(false);
         isNoContent.set(privacyChoiceResponses == null);
-        adapter.setPrivacyChoiceResponses(privacyChoiceResponses);
+        privacyChoiceResponses.sort((pre, post) -> post.getLocalDateTime().compareTo(pre.getLocalDateTime()));
+        adapter.setPrivacyChoiceResponses(privacyChoiceResponses.stream()
+                        .map(choice -> choice.setLocalDateTime(convertDateTime(choice.getLocalDateTime())))
+                        .collect(Collectors.toList())
+        );
+    }
+
+    private String convertDateTime(String dateTime) {
+        SimpleDateFormat preConvert = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.mmm");
+        SimpleDateFormat postConvert = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+        String convertDateTime = "";
+        try {
+            convertDateTime = postConvert.format(preConvert.parse(dateTime));
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return convertDateTime;
     }
 
 }
diff --git a/app/src/main/java/com/example/zxa01/iotclient/component/home/setting/SettingModel.java b/app/src/main/java/com/example/zxa01/iotclient/component/home/setting/SettingModel.java
index 2f88c80..58b57e0 100644
--- a/app/src/main/java/com/example/zxa01/iotclient/component/home/setting/SettingModel.java
+++ b/app/src/main/java/com/example/zxa01/iotclient/component/home/setting/SettingModel.java
@@ -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.shared.Config;
+import com.example.zxa01.iotclient.common.singleton.Config;
 
 import java.util.List;
 
diff --git a/app/src/main/java/com/example/zxa01/iotclient/component/home/setting/SettingViewModel.java b/app/src/main/java/com/example/zxa01/iotclient/component/home/setting/SettingViewModel.java
index 0a89cb3..81fdcba 100644
--- a/app/src/main/java/com/example/zxa01/iotclient/component/home/setting/SettingViewModel.java
+++ b/app/src/main/java/com/example/zxa01/iotclient/component/home/setting/SettingViewModel.java
@@ -5,11 +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.Setting;
-import com.example.zxa01.iotclient.common.shared.Config;
+import com.example.zxa01.iotclient.common.singleton.Config;
 import com.example.zxa01.iotclient.component.login.LoginActivity;
 
 import java.util.List;
diff --git a/app/src/main/java/com/example/zxa01/iotclient/component/login/LoginModel.java b/app/src/main/java/com/example/zxa01/iotclient/component/login/LoginModel.java
index 2f31d26..f6500c2 100644
--- a/app/src/main/java/com/example/zxa01/iotclient/component/login/LoginModel.java
+++ b/app/src/main/java/com/example/zxa01/iotclient/component/login/LoginModel.java
@@ -1,7 +1,7 @@
 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.shared.Config;
+import com.example.zxa01.iotclient.common.singleton.Config;
 import com.example.zxa01.iotclient.common.pojo.auth.LoginMessage;
 
 import android.arch.lifecycle.MutableLiveData;
diff --git a/app/src/main/java/com/example/zxa01/iotclient/component/login/LoginViewModel.java b/app/src/main/java/com/example/zxa01/iotclient/component/login/LoginViewModel.java
index 675c74c..46587ac 100644
--- a/app/src/main/java/com/example/zxa01/iotclient/component/login/LoginViewModel.java
+++ b/app/src/main/java/com/example/zxa01/iotclient/component/login/LoginViewModel.java
@@ -1,6 +1,6 @@
 package com.example.zxa01.iotclient.component.login;
 
-import com.example.zxa01.iotclient.common.shared.DefaultData;
+import com.example.zxa01.iotclient.common.singleton.DefaultData;
 import com.example.zxa01.iotclient.component.home.HomeActivity;
 import com.example.zxa01.iotclient.common.pojo.auth.LoginMessage;
 import android.arch.lifecycle.MutableLiveData;
diff --git a/app/src/main/java/com/example/zxa01/iotclient/component/privacy/PrivacyModel.java b/app/src/main/java/com/example/zxa01/iotclient/component/privacy/PrivacyModel.java
index 0a125ba..8b284c3 100644
--- a/app/src/main/java/com/example/zxa01/iotclient/component/privacy/PrivacyModel.java
+++ b/app/src/main/java/com/example/zxa01/iotclient/component/privacy/PrivacyModel.java
@@ -6,13 +6,12 @@ import android.os.Handler;
 import android.support.annotation.NonNull;
 import android.util.Log;
 
-import com.example.zxa01.iotclient.common.http.Api;
+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.pojo.privacy.PrivacyPolicyReport;
-import com.example.zxa01.iotclient.common.shared.Config;
-import com.google.gson.Gson;
+import com.example.zxa01.iotclient.common.singleton.Config;
 
 import retrofit2.Call;
 import retrofit2.Callback;
@@ -54,20 +53,21 @@ public class PrivacyModel extends BaseObservable {
 
     public void setPrivacyChoice(@NonNull PrivacyContent privacyContent, @NonNull boolean isAccepted) {
         isUploadMLD.setValue(true);
-        Api.getApi().setPrivacyChoice(new Gson().toJson(
-                new PrivacyChoice().setPrivacyContent(
+        Api.getApi().setPrivacyChoice(new PrivacyChoice()
+                .setPrivacyContent(
                         privacyContent.setUser(Config.getConfig().getUser()))
-                        .setAccepted(isAccepted)))
+                .setAccepted(isAccepted))
                 .enqueue(new Callback<PrivacyChoiceResponse>() {
                     @Override
                     public void onResponse(Call<PrivacyChoiceResponse> call, Response<PrivacyChoiceResponse> response) {
+                        Log.i("setPrivacyChoice - onResponse()", "success");
                         dialogDelay();
                     }
 
                     @Override
                     public void onFailure(Call<PrivacyChoiceResponse> call, Throwable t) {
-                        dialogDelay();
                         Log.e("setPrivacyChoice - onFailure()", t.getMessage(), t);
+                        dialogDelay();
                     }
                 });
     }
diff --git a/app/src/main/java/com/example/zxa01/iotclient/component/privacy/PrivacyViewModel.java b/app/src/main/java/com/example/zxa01/iotclient/component/privacy/PrivacyViewModel.java
index 1d9c775..66aac3f 100644
--- a/app/src/main/java/com/example/zxa01/iotclient/component/privacy/PrivacyViewModel.java
+++ b/app/src/main/java/com/example/zxa01/iotclient/component/privacy/PrivacyViewModel.java
@@ -4,7 +4,7 @@ import com.example.zxa01.iotclient.R;
 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.shared.Config;
+import com.example.zxa01.iotclient.common.singleton.Config;
 
 import android.arch.lifecycle.MutableLiveData;
 import android.arch.lifecycle.ViewModel;
diff --git a/app/src/main/res/drawable/gradient_theme.xml b/app/src/main/res/drawable/gradient_theme.xml
deleted file mode 100644
index d2576f2..0000000
--- a/app/src/main/res/drawable/gradient_theme.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<shape xmlns:android="http://schemas.android.com/apk/res/android"
-    android:shape="rectangle">
-    <gradient
-        android:startColor="@color/colorPrimaryDark"
-        android:endColor="@color/colorAccent"
-        android:angle="180"/>
-</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_notifications_black_24dp.xml b/app/src/main/res/drawable/ic_notifications_black_24dp.xml
deleted file mode 100644
index 78b75c3..0000000
--- a/app/src/main/res/drawable/ic_notifications_black_24dp.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="24dp"
-    android:height="24dp"
-    android:viewportWidth="24.0"
-    android:viewportHeight="24.0">
-    <path
-        android:fillColor="#FF000000"
-        android:pathData="M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z" />
-</vector>
diff --git a/app/src/main/res/layout/recycler_view_record.xml b/app/src/main/res/layout/recycler_view_record.xml
index c9e7b1a..df16d71 100644
--- a/app/src/main/res/layout/recycler_view_record.xml
+++ b/app/src/main/res/layout/recycler_view_record.xml
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <layout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools">
+    xmlns:tools="http://schemas.android.com/tools"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
 
     <data>
 
@@ -45,9 +46,9 @@
                     android:layout_height="wrap_content"
                     android:paddingTop="@dimen/padding_xs"
                     android:paddingBottom="@dimen/padding_xs"
-                    android:text='@{@string/privacy_version+" "+String.valueOf(position+1)}'
+                    android:text='@{@string/privacy_title+" "+viewModel.getPrivacyChoiceAt(position).privacyChoice.privacyContent.policy.id}'
                     android:textSize="@dimen/font_sm"
-                    tools:text="版本1" />
+                    tools:text="隱私政策 1" />
 
                 <TextView
                     android:layout_width="wrap_content"
@@ -66,12 +67,12 @@
                         android:layout_marginTop="@dimen/margin_sm"
                         android:layout_marginBottom="@dimen/margin_sm"
                         android:textColor="@color/colorWhite"
-                        android:background="@{true ? @drawable/green_radius_background : @drawable/red_radius_background }"
+                        android:background="@{viewModel.getPrivacyChoiceAt(position).privacyChoice.accepted ? @drawable/green_radius_background : @drawable/red_radius_background }"
                         android:paddingLeft="@dimen/padding_sm"
                         android:paddingTop="@dimen/padding_xs"
                         android:paddingRight="@dimen/padding_sm"
                         android:paddingBottom="@dimen/padding_xs"
-                        android:text="@{true ? @string/record_accept : @string/record_reject }"
+                        android:text="@{viewModel.getPrivacyChoiceAt(position).privacyChoice.accepted ? @string/record_accept : @string/record_reject }"
                         android:textSize="@dimen/font_sm"
                         tools:text="同意" />
                     <TextView
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index a323158..da0dd72 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -9,7 +9,6 @@
     <color name="colorLighter">#E4E4E4</color>
     <color name="colorLightest">#F4F4F4</color>
     <color name="colorWhite">#FFFFFF</color>
-    <color name="colorTransparent">#00000000</color>
     <color name="colorGreen">#28A745</color>
     <color name="colorRed">#DC3545</color>
 
diff --git a/build.gradle b/build.gradle
index 06ec953..606827d 100644
--- a/build.gradle
+++ b/build.gradle
@@ -7,7 +7,7 @@ buildscript {
         jcenter()
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.4.0'
+        classpath 'com.android.tools.build:gradle:3.4.1'
         // NOTE: Do not place your application dependencies here; they belong
         // in the individual module build.gradle files
     }
-- 
2.26.0