From 63b87b529196c056fb4d96a58eded3936d3445f2 Mon Sep 17 00:00:00 2001
From: haijiang <181069201@qq.com>
Date: Tue, 17 Jul 2018 16:19:35 +0800
Subject: [PATCH] 提交

---
 app/src/main/res/mipmap-xxxhdpi/icon.png                            |    0 
 app/src/main/java/com/moral/screen/activity/ChartActivity.java      |   17 
 app/src/main/java/com/moral/screen/common/API.java                  |    4 
 app/src/main/res/mipmap-xxxhdpi/icon_level1.png                     |    0 
 app/src/main/java/com/moral/screen/update/UpdateManager.java        |  327 +++++++++++++++++++++++++++++
 app/src/main/java/com/moral/screen/update/ParseXmlService.java      |   49 ++++
 .idea/misc.xml                                                      |   49 ++++
 app/src/main/java/com/moral/screen/activity/DeviceDataActivity.java |    7 
 app/src/main/res/layout/ac_login_layout.xml                         |    4 
 .idea/gradle.xml                                                    |   19 +
 app/src/main/res/mipmap-xxxhdpi/icon_offline.png                    |    0 
 app/src/main/res/layout/softupdate_progress.xml                     |   11 +
 app/build.gradle                                                    |    1 
 app/release/app-release.apk                                         |    0 
 app/src/main/res/mipmap-xxxhdpi/icon_level3.png                     |    0 
 app/src/main/res/values/strings.xml                                 |    7 
 app/src/main/AndroidManifest.xml                                    |    4 
 app/src/main/java/com/moral/screen/activity/MapActivity.java        |   75 ++++++
 app/src/main/res/mipmap-xxxhdpi/start.png                           |    0 
 app/src/main/res/mipmap-xxxhdpi/icon_normal.png                     |    0 
 /dev/null                                                           |    0 
 app/release/output.json                                             |    1 
 app/src/main/res/mipmap-xxxhdpi/icon_level2.png                     |    0 
 .idea/runConfigurations.xml                                         |   12 +
 app/src/main/res/layout/ac_charts_layout.xml                        |   38 ++-
 25 files changed, 595 insertions(+), 30 deletions(-)

diff --git a/.idea/gradle.xml b/.idea/gradle.xml
new file mode 100644
index 0000000..a674d6f
--- /dev/null
+++ b/.idea/gradle.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="GradleSettings">
+    <option name="linkedExternalProjectsSettings">
+      <GradleProjectSettings>
+        <option name="distributionType" value="DEFAULT_WRAPPED" />
+        <option name="externalProjectPath" value="$PROJECT_DIR$" />
+        <option name="modules">
+          <set>
+            <option value="$PROJECT_DIR$" />
+            <option value="$PROJECT_DIR$/andbrickslib" />
+            <option value="$PROJECT_DIR$/app" />
+          </set>
+        </option>
+        <option name="resolveModulePerSourceSet" value="false" />
+      </GradleProjectSettings>
+    </option>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..13c4629
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="NullableNotNullManager">
+    <option name="myDefaultNullable" value="android.support.annotation.Nullable" />
+    <option name="myDefaultNotNull" value="android.support.annotation.NonNull" />
+    <option name="myNullables">
+      <value>
+        <list size="4">
+          <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
+          <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
+          <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" />
+          <item index="3" class="java.lang.String" itemvalue="android.support.annotation.Nullable" />
+        </list>
+      </value>
+    </option>
+    <option name="myNotNulls">
+      <value>
+        <list size="4">
+          <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
+          <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
+          <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
+          <item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" />
+        </list>
+      </value>
+    </option>
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/build/classes" />
+  </component>
+  <component name="ProjectType">
+    <option name="id" value="Android" />
+  </component>
+  <component name="masterDetails">
+    <states>
+      <state key="ProjectJDKs.UI">
+        <settings>
+          <last-edited>1.8</last-edited>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+    </states>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml
new file mode 100644
index 0000000..7f68460
--- /dev/null
+++ b/.idea/runConfigurations.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="RunConfigurationProducerService">
+    <option name="ignoredProducers">
+      <set>
+        <option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
+        <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
+        <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
+      </set>
+    </option>
+  </component>
+</project>
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index e6261ea..334d2fc 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -51,4 +51,5 @@
         exclude group: 'com.android.support'
     })
     compile 'com.github.lecho:hellocharts-library:1.5.8@aar'
+    compile 'pub.devrel:easypermissions:0.4.0'
 }
diff --git a/app/release/app-release.apk b/app/release/app-release.apk
new file mode 100644
index 0000000..842c7a8
--- /dev/null
+++ b/app/release/app-release.apk
Binary files differ
diff --git a/app/release/output.json b/app/release/output.json
new file mode 100644
index 0000000..2bd93ae
--- /dev/null
+++ b/app/release/output.json
@@ -0,0 +1 @@
+[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":1},"path":"app-release.apk","properties":{"packageId":"com.moral.screen","split":"","minSdkVersion":"15"}}]
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 57fce28..91ee280 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -23,9 +23,9 @@
     <application
         android:name=".MainApp"
         android:allowBackup="true"
-        android:icon="@mipmap/ic_launcher"
+        android:icon="@mipmap/icon"
         android:label="@string/app_name"
-        android:roundIcon="@mipmap/ic_launcher_round"
+        android:roundIcon="@mipmap/icon"
         android:supportsRtl="true"
         android:theme="@style/AppTheme"
         tools:replace="android:icon">
diff --git a/app/src/main/java/com/moral/screen/activity/ChartActivity.java b/app/src/main/java/com/moral/screen/activity/ChartActivity.java
index 2036671..77ccbea 100644
--- a/app/src/main/java/com/moral/screen/activity/ChartActivity.java
+++ b/app/src/main/java/com/moral/screen/activity/ChartActivity.java
@@ -61,7 +61,7 @@
     private List<PointValue> mPointValues = new ArrayList<>();
     private List<AxisValue> mAxisXValues = new ArrayList<>();
 
-    private TextView tv_sub;
+    private TextView tv_sub,tv_unit;
     private String sensorKey, mac, name, unit;
     private float maxValue;
 
@@ -101,7 +101,9 @@
         initTopBar();
         tv_title.setText("������������");
         tv_sub = findView(R.id.tv_sub);
+        tv_unit = findView(R.id.tv_unit);
         tv_sub.setText(name + "���������������");
+        tv_unit.setText("���������" + unit);
         chartView = findView(R.id.chart);
         initLineChart();
     }
@@ -150,11 +152,12 @@
         data.setLines(lines);
         data.setValueLabelBackgroundColor(Color.TRANSPARENT);//������������������������������������������
         data.setValueLabelBackgroundEnabled(false);
-        data.setValueLabelsTextColor(Color.GRAY);
+        data.setValueLabelsTextColor(Color.WHITE);
+        data.setValueLabelTextSize(8);
 
         //���������
         axisX = new Axis(); //X���
-        axisX.setHasTiltedLabels(true);  //X���������������������������������������������true���������������
+        axisX.setHasTiltedLabels(false);  //X���������������������������������������������true���������������
         axisX.setName("������������");  //������������
         axisX.setTextSize(8);//������������������
         axisX.setTextColor(getResources().getColor(R.color.blue_txt));
@@ -170,12 +173,12 @@
         axisY = Axis.generateAxisFromRange((float) 0.0, maxValue == 0 ? 100 : maxValue, maxValue == 0 ? 10 : maxValue / 16);  //Y���
 //        axisY = new Axis();
         axisY.setAutoGenerated(false);
-        AxisValueFormatter yvalue = new SimpleAxisValueFormatter(1);
-        axisY.setFormatter(yvalue);
+//        AxisValueFormatter yvalue = new SimpleAxisValueFormatter(1);
+//        axisY.setFormatter(yvalue);
         axisY.setHasLines(true);
         axisY.setHasSeparationLine(true);
-        axisY.setName("���������" + unit);//y���������
-        axisY.setTextSize(10);//������������������
+        axisY.setName("            ");//y���������
+        axisY.setTextSize(8);//������������������
         axisY.setTextColor(getResources().getColor(R.color.blue_txt));
         axisY.setLineColor(getResources().getColor(R.color.blue_txt));
         data.setAxisYLeft(axisY);  //Y������������������
diff --git a/app/src/main/java/com/moral/screen/activity/DeviceDataActivity.java b/app/src/main/java/com/moral/screen/activity/DeviceDataActivity.java
index 3b6adc8..15efea5 100644
--- a/app/src/main/java/com/moral/screen/activity/DeviceDataActivity.java
+++ b/app/src/main/java/com/moral/screen/activity/DeviceDataActivity.java
@@ -136,7 +136,12 @@
                 ArrayList<DeviceDataBean> temp = (ArrayList<DeviceDataBean>) FastJsonTools.getArrayJson(res,DeviceDataBean.class);
                 if(temp!=null){
                     dataList.clear();
-                    dataList.addAll(temp);
+                    for (DeviceDataBean data: temp){
+                        if(!("e23".equals(data.getSensor_key())||"e24".equals(data.getSensor_key())||"warn".equals(data.getSensor_key()))){
+                            dataList.add(data);
+                        }
+                    }
+
                 }
                 adapter.notifyDataSetChanged();
             }
diff --git a/app/src/main/java/com/moral/screen/activity/MapActivity.java b/app/src/main/java/com/moral/screen/activity/MapActivity.java
index 656aa7f..ef0a3e9 100644
--- a/app/src/main/java/com/moral/screen/activity/MapActivity.java
+++ b/app/src/main/java/com/moral/screen/activity/MapActivity.java
@@ -1,8 +1,12 @@
 package com.moral.screen.activity;
 
+import android.Manifest;
 import android.content.Intent;
 import android.graphics.Point;
+import android.os.AsyncTask;
+import android.os.Build;
 import android.os.Bundle;
+import android.os.Looper;
 import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -28,17 +32,22 @@
 import com.moral.screen.model.DeviceBean;
 import com.moral.screen.R;
 import com.moral.screen.base.BaseActivity;
+import com.moral.screen.update.UpdateManager;
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Timer;
 import java.util.TimerTask;
+
+import pub.devrel.easypermissions.AfterPermissionGranted;
+import pub.devrel.easypermissions.EasyPermissions;
 
 /**
  * Created by hjzhang on 2018/7/2.
  */
 
-public class MapActivity extends BaseActivity {
+public class MapActivity extends BaseActivity implements EasyPermissions.PermissionCallbacks{
     private TextView tv_left,tv_right;
     private MapView bmapView;
     private BaiduMap mBaiduMap;
@@ -128,6 +137,14 @@
     protected void initData() {
         getData(true);
         showData();
+        /**
+         * ������������
+         */
+        if (Build.VERSION.SDK_INT >= 11) {
+            new checkUpdateTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+        } else {
+            new checkUpdateTask().execute();
+        }
     }
 
     @Override
@@ -211,7 +228,8 @@
                         .zIndex(i);
             }
             // ������������
-            mo.animateType(MarkerOptions.MarkerAnimateType.grow);
+            if(show)
+               mo.animateType(MarkerOptions.MarkerAnimateType.grow);
             mMarker = (Marker) (mBaiduMap.addOverlay(mo));
             mkList.add(mMarker);
         }
@@ -287,4 +305,57 @@
         });
 
     }
+
+
+    @Override
+    public void onPermissionsGranted(int requestCode, List<String> perms) {
+        if (requestCode == WRITE_EXTERNAL_STORAGE) {
+            manager.showNoticeDialog();
+        }
+    }
+
+    @Override
+    public void onPermissionsDenied(int requestCode, List<String> perms) {
+
+    }
+
+    private final static int WRITE_EXTERNAL_STORAGE = 0x01;
+
+    @AfterPermissionGranted(WRITE_EXTERNAL_STORAGE)
+    public void updateAPP() {
+        String[] perms = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
+        if (EasyPermissions.hasPermissions(this, perms)) {
+            // Already have permission, do the thing
+            manager.showNoticeDialog();
+        } else {
+            // Do not have permissions, request them now
+            EasyPermissions.requestPermissions(this, "���������������������������������������������������",
+                    WRITE_EXTERNAL_STORAGE, perms);
+        }
+    }
+
+    UpdateManager manager = new UpdateManager(MapActivity.this);
+
+    private class checkUpdateTask extends AsyncTask<String, Void, String> {
+        @Override
+        protected String doInBackground(String... params) {
+            Looper.prepare();
+            // ������������������
+            manager.checkUpdateJson();
+            Looper.loop();
+            return null;
+        }
+
+        @Override
+        protected void onPostExecute(String result) {
+        }
+
+        @Override
+        protected void onPreExecute() {
+        }
+
+        @Override
+        protected void onProgressUpdate(Void... values) {
+        }
+    }
 }
diff --git a/app/src/main/java/com/moral/screen/common/API.java b/app/src/main/java/com/moral/screen/common/API.java
index 51a40a2..d4fa4bc 100644
--- a/app/src/main/java/com/moral/screen/common/API.java
+++ b/app/src/main/java/com/moral/screen/common/API.java
@@ -5,10 +5,10 @@
  */
 
 public class API {
-    public static final String BASE_HTTP = "http://192.168.1.101:8090/screen_api_v2";
+    public static final String BASE_HTTP = "http://monitor-api2.7drlb.com";
     public static final String LOGIN = BASE_HTTP+"/mobile/login";
     public static final String DEVICES = BASE_HTTP+"/mobile/devices";
     public static final String SENSORS = BASE_HTTP+"/mobile/sensors";
     public static final String SENSOR = BASE_HTTP+"/mobile/sensor";
-
+    public final static String UPDATE = "http://www.7drlb.com/apps/screen_app.json";//���������������
 }
diff --git a/app/src/main/java/com/moral/screen/update/ParseXmlService.java b/app/src/main/java/com/moral/screen/update/ParseXmlService.java
new file mode 100644
index 0000000..fb6209f
--- /dev/null
+++ b/app/src/main/java/com/moral/screen/update/ParseXmlService.java
@@ -0,0 +1,49 @@
+package com.moral.screen.update;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import java.util.HashMap;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+/**
+ * Created by bin.shen on 6/25/16.
+ */
+public class ParseXmlService {
+
+    public HashMap<String, String> parseXml(String uri) throws Exception {
+        HashMap<String, String> hashMap = new HashMap<String, String>();
+
+        // ������������������������������������
+        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+        // ������������������������������������������������������
+        DocumentBuilder builder = factory.newDocumentBuilder();
+        // ���������������������������������������������������������
+        Document document = builder.parse(uri);
+        //������XML���������������
+        Element root = document.getDocumentElement();
+        //���������������������
+        NodeList childNodes = root.getChildNodes();
+        for (int j = 0; j < childNodes.getLength(); j++) {
+            //���������������
+            Node childNode = (Node) childNodes.item(j);
+            if (childNode.getNodeType() == Node.ELEMENT_NODE) {
+                Element childElement = (Element) childNode;
+                if ("version".equals(childElement.getNodeName())) { //���������
+                    hashMap.put("version",childElement.getFirstChild().getNodeValue());
+                } else if (("name".equals(childElement.getNodeName()))) { //������������
+                    hashMap.put("name",childElement.getFirstChild().getNodeValue());
+                } else if (("url".equals(childElement.getNodeName()))) { //������������
+                    hashMap.put("url",childElement.getFirstChild().getNodeValue());
+                } else if (("message".equals(childElement.getNodeName()))) { //������������
+                    hashMap.put("message",childElement.getFirstChild().getNodeValue());
+                }
+            }
+        }
+        return hashMap;
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/moral/screen/update/UpdateManager.java b/app/src/main/java/com/moral/screen/update/UpdateManager.java
new file mode 100644
index 0000000..9d9c37d
--- /dev/null
+++ b/app/src/main/java/com/moral/screen/update/UpdateManager.java
@@ -0,0 +1,327 @@
+package com.moral.screen.update;
+
+/**
+ * Created by bin.shen on 6/25/16.
+ */
+
+import android.app.AlertDialog.Builder;
+import android.app.Dialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
+import android.content.Intent;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Environment;
+import android.os.Handler;
+import android.os.Message;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.ProgressBar;
+
+import com.moral.screen.MainActivity;
+import com.moral.screen.R;
+import com.moral.screen.activity.MapActivity;
+import com.moral.screen.common.API;
+
+import org.json.JSONObject;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.HashMap;
+
+public class UpdateManager {
+    /* ��������� */
+    private static final int DOWNLOAD = 1;
+    /* ������������ */
+    private static final int DOWNLOAD_FINISH = 2;
+    /* ���������������XML������ */
+    HashMap<String, String> mHashMap;
+    /* ������������������ */
+    private String mSavePath;
+    /* ��������������������� */
+    private int progress;
+    /* ������������������ */
+    private boolean cancelUpdate = false;
+
+    private MapActivity mActivity;
+
+    /* ��������������� */
+    private ProgressBar mProgress;
+    private Dialog mDownloadDialog;
+
+    private Handler mHandler = new Handler() {
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                // ������������
+                case DOWNLOAD:
+                    // ���������������������
+                    mProgress.setProgress(progress);
+                    break;
+                case DOWNLOAD_FINISH:
+                    // ������������
+                    installApk();
+                    break;
+                default:
+                    break;
+            }
+        }
+    };
+
+    public UpdateManager(MapActivity activity) {
+        this.mActivity = activity;
+    }
+
+
+    /**
+     * ������������������
+     */
+    public void checkUpdateJson() {
+        String data = getUrlData(API.UPDATE);
+        try {
+            JSONObject resJosn = new JSONObject(data);
+            mHashMap = new HashMap<>();
+            mHashMap.put("version", resJosn.optString("version"));
+            mHashMap.put("name", resJosn.optString("name"));
+            mHashMap.put("message", "");
+            mHashMap.put("url", resJosn.optString("url"));
+            if (isUpdate()) {
+                if (Build.VERSION.SDK_INT >= 23) {
+                    mActivity.updateAPP();
+                } else {
+                    // ���������������������
+                    showNoticeDialog();
+                }
+            } else {
+//                Log.d("haijiang","���������������������");
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * ���������������������������������
+     *
+     * @return
+     */
+    private boolean isUpdate() {
+        // ������������������������
+        int versionCode = getVersionCode(mActivity);
+        if (null != mHashMap) {
+            int serviceCode = Integer.valueOf(mHashMap.get("version"));
+            // ������������
+            if (serviceCode > versionCode) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * ���������������������
+     *
+     * @param context
+     * @return
+     */
+    private int getVersionCode(Context context) {
+        int versionCode = 0;
+        try {
+            // ������������������������������AndroidManifest.xml���android:versionCode
+            versionCode = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionCode;
+        } catch (NameNotFoundException e) {
+            e.printStackTrace();
+        }
+        return versionCode;
+    }
+
+    /**
+     * ���������������������������
+     */
+    public void showNoticeDialog() {
+        String message = mHashMap.get("message");
+        // ���������������
+        Builder builder = new Builder(mActivity);
+        builder.setTitle(R.string.soft_update_title);
+        if (message == null || message.isEmpty()) {
+            builder.setMessage(R.string.soft_update_info);
+        } else {
+            builder.setMessage(message);
+        }
+
+        // ������
+        builder.setPositiveButton(R.string.soft_update_updatebtn, new OnClickListener() {
+            @Override
+            public void onClick(DialogInterface dialog, int which) {
+                dialog.dismiss();
+                // ���������������������
+                showDownloadDialog();
+            }
+        });
+
+        // ������������
+        builder.setNegativeButton(R.string.soft_update_later, new OnClickListener() {
+            @Override
+            public void onClick(DialogInterface dialog, int which) {
+                dialog.dismiss();
+            }
+        });
+        Dialog noticeDialog = builder.create();
+        noticeDialog.setCanceledOnTouchOutside(false);
+        noticeDialog.show();
+    }
+
+    /**
+     * ���������������������������
+     */
+    private void showDownloadDialog() {
+        // ���������������������������
+        Builder builder = new Builder(mActivity);
+        builder.setTitle(R.string.soft_updating);
+        // ���������������������������������
+        final LayoutInflater inflater = LayoutInflater.from(mActivity);
+        View v = inflater.inflate(R.layout.softupdate_progress, null);
+        mProgress = (ProgressBar) v.findViewById(R.id.update_progress);
+        builder.setView(v);
+        // ������������
+        builder.setNegativeButton(R.string.soft_update_cancel, new OnClickListener() {
+            @Override
+            public void onClick(DialogInterface dialog, int which) {
+                dialog.dismiss();
+                // ������������������
+                cancelUpdate = true;
+            }
+        });
+        mDownloadDialog = builder.create();
+        mDownloadDialog.show();
+        // ������������
+        downloadApk();
+    }
+
+    /**
+     * ������apk������
+     */
+    private void downloadApk() {
+        // ���������������������������
+        new downloadApkThread().start();
+    }
+
+    /**
+     * ������������������
+     *
+     * @author coolszy
+     * @date 2012-4-26
+     * @blog http://blog.92coding.com
+     */
+    private class downloadApkThread extends Thread {
+        @Override
+        public void run() {
+            try {
+                // ������SD������������������������������������������������
+                //if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
+                // ������������������������
+                //String sdpath = Environment.getExternalStorageDirectory() + "/";
+                //mSavePath = sdpath + "download";
+
+                mSavePath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/";
+
+                URL url = new URL(mHashMap.get("url"));
+                // ������������
+                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+                conn.connect();
+                // ������������������
+                int length = conn.getContentLength();
+                // ���������������
+                InputStream is = conn.getInputStream();
+
+                File file = new File(mSavePath);
+                // ������������������������������
+                if (!file.exists()) {
+                    file.mkdir();
+                }
+                File apkFile = new File(mSavePath, mHashMap.get("name"));
+                FileOutputStream fos = new FileOutputStream(apkFile);
+                int count = 0;
+                // ������
+                byte buf[] = new byte[1024];
+                // ������������������
+                do {
+                    int numread = is.read(buf);
+                    count += numread;
+                    // ���������������������
+                    progress = (int) (((float) count / length) * 100);
+                    // ������������
+                    mHandler.sendEmptyMessage(DOWNLOAD);
+                    if (numread <= 0) {
+                        // ������������
+                        mHandler.sendEmptyMessage(DOWNLOAD_FINISH);
+                        break;
+                    }
+                    // ������������
+                    fos.write(buf, 0, numread);
+                } while (!cancelUpdate);// ���������������������������.
+                fos.close();
+                is.close();
+                //}
+            } catch (MalformedURLException e) {
+                e.printStackTrace();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+            // ���������������������������
+            mDownloadDialog.dismiss();
+        }
+    }
+
+    ;
+
+    /**
+     * ������APK������
+     */
+    private void installApk() {
+        File apkfile = new File(mSavePath, mHashMap.get("name"));
+        if (!apkfile.exists()) {
+            return;
+        }
+        // ������Intent������APK������
+        Intent i = new Intent(Intent.ACTION_VIEW);
+        i.setDataAndType(Uri.parse("file://" + apkfile.toString()), "application/vnd.android.package-archive");
+        mActivity.startActivity(i);
+    }
+
+    public static String getUrlData(String path) {
+        BufferedReader br = null;
+        StringBuffer sb = new StringBuffer();
+        HttpURLConnection connection = null;
+        try {
+            URL url = new URL(path);
+            connection = (HttpURLConnection) url.openConnection();
+            connection.setRequestMethod("GET");
+            connection.setConnectTimeout(8000);
+            connection.setReadTimeout(8000);
+            br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
+            String s = null;
+            while ((s = br.readLine()) != null) {
+                sb.append(s);
+            }
+            br.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (connection != null) {
+                connection.disconnect();
+            }
+        }
+        return sb.toString();
+    }
+
+
+}
diff --git a/app/src/main/res/layout/ac_charts_layout.xml b/app/src/main/res/layout/ac_charts_layout.xml
index e87c359..d0011b8 100644
--- a/app/src/main/res/layout/ac_charts_layout.xml
+++ b/app/src/main/res/layout/ac_charts_layout.xml
@@ -5,49 +5,59 @@
     android:background="@mipmap/bg"
     android:fitsSystemWindows="true"
     android:orientation="vertical">
-    <include layout="@layout/top_bar_layout"/>
+
+    <include layout="@layout/top_bar_layout" />
+
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:orientation="vertical"
         android:layout_marginLeft="@dimen/x8"
         android:layout_marginRight="@dimen/x8"
         android:layout_marginTop="@dimen/x20"
-        android:padding="@dimen/x10"
-        android:background="@mipmap/bg_chart">
+        android:background="@mipmap/bg_chart"
+        android:orientation="vertical"
+        android:padding="@dimen/x10">
+
         <LinearLayout
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_gravity="center_horizontal"
             android:gravity="center_vertical"
             android:orientation="horizontal">
+
             <ImageView
                 android:layout_width="@dimen/x10"
                 android:layout_height="@dimen/x10"
-                android:src="@mipmap/icon_yuan"/>
+                android:src="@mipmap/icon_yuan" />
+
             <TextView
                 android:id="@+id/tv_sub"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:textColor="@color/white"
-                android:textSize="16sp"
                 android:layout_gravity="center_horizontal"
-                android:text="PM2.5���������"
-                android:layout_marginRight="@dimen/x4"
                 android:layout_marginLeft="@dimen/x4"
-                />
+                android:layout_marginRight="@dimen/x4"
+                android:text="PM2.5���������"
+                android:textColor="@color/white"
+                android:textSize="16sp" />
+
             <ImageView
                 android:layout_width="@dimen/x10"
                 android:layout_height="@dimen/x10"
-                android:src="@mipmap/icon_xia"/>
+                android:src="@mipmap/icon_xia" />
         </LinearLayout>
 
+        <TextView
+            android:id="@+id/tv_unit"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:textColor="@color/blue_txt"
+            android:textSize="14sp" />
         <lecho.lib.hellocharts.view.LineChartView
             android:id="@+id/chart"
             android:layout_width="match_parent"
-            android:layout_marginTop="@dimen/x8"
-            android:layout_height="@dimen/y300">
-        </lecho.lib.hellocharts.view.LineChartView>
+            android:layout_height="@dimen/y300"
+            android:layout_marginTop="@dimen/x8"/>
     </LinearLayout>
 
 </LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/ac_login_layout.xml b/app/src/main/res/layout/ac_login_layout.xml
index 4bbc9ef..a677b35 100644
--- a/app/src/main/res/layout/ac_login_layout.xml
+++ b/app/src/main/res/layout/ac_login_layout.xml
@@ -22,7 +22,7 @@
         android:textSize="16sp"
         android:textColor="@color/white"
         android:textColorHint="@color/white"
-        android:hint="������������������������"
+        android:hint="���������������"
         android:gravity="center"
         android:background="@mipmap/button1"/>
     <EditText
@@ -36,7 +36,7 @@
         android:textSize="16sp"
         android:textColor="@color/white"
         android:textColorHint="@color/white"
-        android:hint="���������������������"
+        android:hint="���������������"
         android:gravity="center"
         android:background="@mipmap/button1"/>
     <Button
diff --git a/app/src/main/res/layout/softupdate_progress.xml b/app/src/main/res/layout/softupdate_progress.xml
new file mode 100644
index 0000000..5abe7e0
--- /dev/null
+++ b/app/src/main/res/layout/softupdate_progress.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout
+	xmlns:android="http://schemas.android.com/apk/res/android"
+	android:layout_width="fill_parent"
+	android:layout_height="wrap_content">
+	<ProgressBar
+		android:id="@+id/update_progress"
+		android:layout_width="fill_parent"
+		android:layout_height="wrap_content"
+		style="?android:attr/progressBarStyleHorizontal" />
+</LinearLayout>
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon.png b/app/src/main/res/mipmap-xxxhdpi/icon.png
new file mode 100644
index 0000000..5c29fb5
--- /dev/null
+++ b/app/src/main/res/mipmap-xxxhdpi/icon.png
Binary files differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_level1.png b/app/src/main/res/mipmap-xxxhdpi/icon_level1.png
index 5487601..d22dddd 100644
--- a/app/src/main/res/mipmap-xxxhdpi/icon_level1.png
+++ b/app/src/main/res/mipmap-xxxhdpi/icon_level1.png
Binary files differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_level2.png b/app/src/main/res/mipmap-xxxhdpi/icon_level2.png
index 1928a67..59d82d0 100644
--- a/app/src/main/res/mipmap-xxxhdpi/icon_level2.png
+++ b/app/src/main/res/mipmap-xxxhdpi/icon_level2.png
Binary files differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_level3.png b/app/src/main/res/mipmap-xxxhdpi/icon_level3.png
index 7b6d691..526e349 100644
--- a/app/src/main/res/mipmap-xxxhdpi/icon_level3.png
+++ b/app/src/main/res/mipmap-xxxhdpi/icon_level3.png
Binary files differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_normal.png b/app/src/main/res/mipmap-xxxhdpi/icon_normal.png
index 64a77b1..0367c2a 100644
--- a/app/src/main/res/mipmap-xxxhdpi/icon_normal.png
+++ b/app/src/main/res/mipmap-xxxhdpi/icon_normal.png
Binary files differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_offline.png b/app/src/main/res/mipmap-xxxhdpi/icon_offline.png
index a71a2cb..9c76b51 100644
--- a/app/src/main/res/mipmap-xxxhdpi/icon_offline.png
+++ b/app/src/main/res/mipmap-xxxhdpi/icon_offline.png
Binary files differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/start.jpg b/app/src/main/res/mipmap-xxxhdpi/start.jpg
deleted file mode 100644
index 0a70db8..0000000
--- a/app/src/main/res/mipmap-xxxhdpi/start.jpg
+++ /dev/null
Binary files differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/start.png b/app/src/main/res/mipmap-xxxhdpi/start.png
new file mode 100644
index 0000000..469f6af
--- /dev/null
+++ b/app/src/main/res/mipmap-xxxhdpi/start.png
Binary files differ
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 9fc9c70..fff96b0 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,3 +1,10 @@
 <resources>
     <string name="app_name">������������������</string>
+    <string name="soft_update_no">���������������������</string>
+    <string name="soft_update_title">������������</string>
+    <string name="soft_update_info">������������������������������������?</string>
+    <string name="soft_update_updatebtn">������</string>
+    <string name="soft_update_later">������������</string>
+    <string name="soft_updating">������������</string>
+    <string name="soft_update_cancel">������</string>
 </resources>

--
Gitblit v1.8.0