box升级功能,部分完成

chengzhenyu 8 年之前
父节点
当前提交
a1211370b4

+ 5 - 0
app/src/main/AndroidManifest.xml

@@ -133,6 +133,11 @@
133 133
             android:label="@string/app_name"
134 134
             android:screenOrientation="portrait"/>
135 135
 
136
+        <activity android:name=".upgrade.BoxUpgradeActivity"
137
+            android:configChanges="keyboardHidden|orientation|screenSize"
138
+            android:label="@string/app_name"
139
+            android:screenOrientation="portrait"/>
140
+
136 141
         <activity
137 142
             android:name=".wxapi.WXEntryActivity"
138 143
             android:exported="true"

+ 8 - 0
app/src/main/java/ai/pai/lensman/db/Preferences.java

@@ -96,6 +96,14 @@ public class Preferences {
96 96
         return mPrefs.getInt("delay",10);
97 97
     }
98 98
 
99
+    public int getBoxVersionCode(){
100
+        return mPrefs.getInt("boxVersionCode",0);
101
+    }
102
+
103
+    public void setBoxVersionCode(int boxVersionCode){
104
+        mPrefs.edit().putInt("boxVersionCode",boxVersionCode).commit();
105
+    }
106
+
99 107
     public void clearPrefs(){
100 108
         mPrefs.edit().clear().commit();
101 109
     }

+ 6 - 0
app/src/main/java/ai/pai/lensman/main/MainActivity.java

@@ -25,6 +25,7 @@ import ai.pai.lensman.base.BaseActivity;
25 25
 import ai.pai.lensman.bean.SessionBean;
26 26
 import ai.pai.lensman.briefs.BriefsActivity;
27 27
 import ai.pai.lensman.session.SessionActivity;
28
+import ai.pai.lensman.upgrade.BoxUpgradeActivity;
28 29
 import ai.pai.lensman.upload.UploadActivity;
29 30
 import ai.pai.lensman.utils.UmengEvent;
30 31
 import butterknife.BindView;
@@ -171,6 +172,11 @@ public class MainActivity extends BaseActivity implements MainContract.View {
171 172
         }
172 173
     }
173 174
 
175
+    @Override
176
+    public void showBoxUpgradeActivity(String bpversion_str) {
177
+      BoxUpgradeActivity.startBoxUpgradeActivity(this,bpversion_str);
178
+    }
179
+
174 180
     private void jumpToSelectedSession(SessionBean sessionBean) {
175 181
         Intent intent = new Intent(this, SessionActivity.class);
176 182
         intent.putExtra("session",sessionBean);

+ 1 - 0
app/src/main/java/ai/pai/lensman/main/MainContract.java

@@ -20,6 +20,7 @@ public class MainContract {
20 20
         void setNewSessionBtnEnabled(boolean isEnabled);
21 21
         void showTimeSyncView();
22 22
         void showRetrySyncView(int strId);
23
+        void showBoxUpgradeActivity(String bpversion_str);
23 24
     }
24 25
 
25 26
     interface Presenter extends BasePresenter{

+ 20 - 4
app/src/main/java/ai/pai/lensman/main/MainPresenter.java

@@ -26,8 +26,10 @@ import ai.pai.lensman.db.DBService;
26 26
 import ai.pai.lensman.db.Preferences;
27 27
 import ai.pai.lensman.service.OrderDealService;
28 28
 import ai.pai.lensman.service.UploadService;
29
+import ai.pai.lensman.upgrade.BoxUpgradeActivity;
30
+import ai.pai.lensman.upgrade.CheckBoxUpgradeInfoInteractor;
29 31
 
30
-class MainPresenter implements MainContract.Presenter,SyncTimeInteractor.SyncTimeListener,
32
+class MainPresenter implements MainContract.Presenter,SyncTimeInteractor.SyncTimeListener,CheckBoxUpgradeInfoInteractor.FetchUpgradeInfoListener,
31 33
         UploadService.PhotoUploadListener, QueryBoxStatusInteractor.BoxStatusListener,OrderDealService.OrderServiceListener {
32 34
 
33 35
     private int sessionSeq;
@@ -39,13 +41,13 @@ class MainPresenter implements MainContract.Presenter,SyncTimeInteractor.SyncTim
39 41
 
40 42
     private SyncTimeInteractor syncTimeInteractor;
41 43
     private QueryBoxStatusInteractor boxStatusInteractor;
42
-
44
+    private CheckBoxUpgradeInfoInteractor checkBoxUpgradeInfoInteractor;
43 45
     private ServiceConnection uploadServiceConnection;
44 46
     private ServiceConnection orderServiceConnection;
45 47
 
46 48
     private boolean isTimeSync = false;
47 49
     private boolean isBoxConnected = true;
48
-
50
+    private boolean isBoxUpdateChecked = false;
49 51
 
50 52
     private BroadcastReceiver wifiReceiver  = new BroadcastReceiver() {
51 53
         @Override
@@ -68,6 +70,7 @@ class MainPresenter implements MainContract.Presenter,SyncTimeInteractor.SyncTim
68 70
 
69 71
         boxStatusInteractor = new QueryBoxStatusInteractor(this);
70 72
         syncTimeInteractor = new SyncTimeInteractor(lensmanId,this);
73
+        checkBoxUpgradeInfoInteractor = new CheckBoxUpgradeInfoInteractor(lensmanId,this);
71 74
         uploadServiceConnection = new ServiceConnection() {
72 75
             @Override
73 76
             public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
@@ -107,7 +110,9 @@ class MainPresenter implements MainContract.Presenter,SyncTimeInteractor.SyncTim
107 110
             syncTimeInteractor.startJob();
108 111
         }
109 112
         boxStatusInteractor.startJob();
110
-
113
+        if(!isBoxUpdateChecked){
114
+            checkBoxUpgradeInfoInteractor.startJob();
115
+        }
111 116
         registerWifiChangeReceiver();
112 117
         App.getAppContext().startService(new Intent(App.getAppContext(), OrderDealService.class));
113 118
         App.getAppContext().bindService(new Intent(App.getAppContext(),OrderDealService.class),
@@ -138,6 +143,7 @@ class MainPresenter implements MainContract.Presenter,SyncTimeInteractor.SyncTim
138 143
     public void stop() {
139 144
         boxStatusInteractor.cancelJob();
140 145
         syncTimeInteractor.cancelJob();
146
+        checkBoxUpgradeInfoInteractor.cancelJob();
141 147
         App.getAppContext().unbindService(uploadServiceConnection);
142 148
         App.getAppContext().unbindService(orderServiceConnection);
143 149
         App.getAppContext().unregisterReceiver(wifiReceiver);
@@ -257,4 +263,14 @@ class MainPresenter implements MainContract.Presenter,SyncTimeInteractor.SyncTim
257 263
             }
258 264
         }
259 265
     }
266
+
267
+    @Override
268
+    public void onUpgradeInfoFetched(boolean result, String bpversion_str) {
269
+        isBoxUpdateChecked = true;
270
+        if(result){
271
+            view.showBoxUpgradeActivity(bpversion_str);
272
+
273
+        }
274
+    }
275
+
260 276
 }

+ 74 - 0
app/src/main/java/ai/pai/lensman/upgrade/BoxUpgradeActivity.java

@@ -0,0 +1,74 @@
1
+package ai.pai.lensman.upgrade;
2
+
3
+import android.content.Context;
4
+import android.content.Intent;
5
+import android.os.Bundle;
6
+import android.text.TextUtils;
7
+import android.view.KeyEvent;
8
+import android.view.View;
9
+import android.widget.Button;
10
+
11
+import ai.pai.lensman.R;
12
+import ai.pai.lensman.base.BaseActivity;
13
+import butterknife.BindView;
14
+import butterknife.ButterKnife;
15
+import butterknife.OnClick;
16
+
17
+/**
18
+ * Created by chengzhenyu on 2017/4/22.
19
+ */
20
+
21
+public class BoxUpgradeActivity extends BaseActivity implements BoxUpgradeInteractor.BoxUpgradeListener{
22
+
23
+    @BindView(R.id.layout_choose_update) View chooseUpdateView;
24
+
25
+    BoxUpgradeInteractor upgradeInteractor;
26
+
27
+    private String bpversion_str;
28
+
29
+    public static void startBoxUpgradeActivity(Context context,String bpversion_str){
30
+        Intent intent = new Intent(context, BoxUpgradeActivity.class);
31
+        intent.putExtra("bpversion_str",bpversion_str);
32
+        context.startActivity(intent);
33
+    }
34
+
35
+    @Override
36
+    protected void onCreate(Bundle savedInstanceState) {
37
+        super.onCreate(savedInstanceState);
38
+        setContentView(R.layout.activity_box_upgrade);
39
+        unbinder = ButterKnife.bind(this);
40
+        bpversion_str = getIntent().getStringExtra("bpversion_str");
41
+        if(TextUtils.isEmpty(bpversion_str)){
42
+            finish();
43
+        }
44
+    }
45
+
46
+    @OnClick(R.id.btn_update_now)
47
+    public void updateNow(){
48
+        chooseUpdateView.setVisibility(View.GONE);
49
+        upgradeInteractor = new BoxUpgradeInteractor(bpversion_str,this);
50
+        upgradeInteractor.startJob();
51
+    }
52
+
53
+    @OnClick(R.id.btn_update_later)
54
+    public void UpdateLater(){
55
+        finish();
56
+    }
57
+
58
+    @Override
59
+    public boolean onKeyDown(int keyCode, KeyEvent event) {
60
+        if(event.getKeyCode()==KeyEvent.KEYCODE_BACK){
61
+            return true;
62
+        }
63
+        return super.onKeyDown(keyCode, event);
64
+    }
65
+
66
+    @Override
67
+    public void onBoxUpgrade(boolean result) {
68
+        if(result){
69
+
70
+        }else{
71
+
72
+        }
73
+    }
74
+}

+ 82 - 0
app/src/main/java/ai/pai/lensman/upgrade/BoxUpgradeInteractor.java

@@ -0,0 +1,82 @@
1
+package ai.pai.lensman.upgrade;
2
+
3
+import android.os.AsyncTask;
4
+
5
+import com.android.common.executors.ThreadExecutor;
6
+import com.android.common.utils.LogHelper;
7
+
8
+import org.json.JSONObject;
9
+
10
+import java.util.HashMap;
11
+
12
+import ai.pai.lensman.base.BaseInteractor;
13
+import ai.pai.lensman.utils.BoxUrlContainer;
14
+import ai.pai.lensman.utils.HttpPostTask;
15
+
16
+
17
+public class BoxUpgradeInteractor implements BaseInteractor {
18
+    private HttpPostTask upgradeTask;
19
+    private String bpversion_str;
20
+    private BoxUpgradeListener listener;
21
+
22
+    public BoxUpgradeInteractor(String bpversion_str, BoxUpgradeListener listener) {
23
+        this.listener = listener;
24
+        this.bpversion_str = bpversion_str;
25
+    }
26
+
27
+    @Override
28
+    public void startJob() {
29
+        cancelJob();
30
+        HashMap<String, String> params = new HashMap<>();
31
+        params.put("bpversion_str", bpversion_str);
32
+        LogHelper.d("czy", "开始box升级任务");
33
+        upgradeTask = new HttpPostTask(params) {
34
+
35
+            @Override
36
+            protected boolean parseResponse(String response) {
37
+                LogHelper.d("czy", "box升级任务 box应答=" + response);
38
+                try {
39
+                    JSONObject json = new JSONObject(response);
40
+                    int status = json.getInt("status");
41
+                    if (status == 200) {
42
+                        return true;
43
+                    }
44
+                } catch (Exception e) {
45
+                    LogHelper.d("czy", "box升级任务 box应答异常 " + e);
46
+                }
47
+                return false;
48
+            }
49
+
50
+            @Override
51
+            protected void onPostFail() {
52
+                super.onPostFail();
53
+                listener.onBoxUpgrade(false);
54
+                LogHelper.d("czy", "box升级任务失败");
55
+            }
56
+
57
+            @Override
58
+            protected void onPostSuccess() {
59
+                super.onPostSuccess();
60
+                listener.onBoxUpgrade(true);
61
+                LogHelper.d("czy", "box升级任务成功");
62
+            }
63
+        };
64
+        upgradeTask.executeOnExecutor(ThreadExecutor.getInstance().getExecutor(), BoxUrlContainer.SET_VERSION);
65
+    }
66
+
67
+    @Override
68
+    public void cancelJob() {
69
+        if (upgradeTask == null) {
70
+            return;
71
+        }
72
+        if (upgradeTask.getStatus() == AsyncTask.Status.RUNNING) {
73
+            upgradeTask.cancel(true);
74
+        }
75
+        upgradeTask = null;
76
+    }
77
+
78
+    public interface BoxUpgradeListener {
79
+        void onBoxUpgrade(boolean result);
80
+    }
81
+
82
+}

+ 98 - 0
app/src/main/java/ai/pai/lensman/upgrade/CheckBoxUpgradeInfoInteractor.java

@@ -0,0 +1,98 @@
1
+package ai.pai.lensman.upgrade;
2
+
3
+import android.os.AsyncTask;
4
+import android.text.TextUtils;
5
+
6
+import com.android.common.executors.ThreadExecutor;
7
+import com.android.common.utils.LogHelper;
8
+
9
+import org.json.JSONObject;
10
+
11
+import java.util.HashMap;
12
+
13
+import ai.pai.lensman.base.BaseInteractor;
14
+import ai.pai.lensman.db.Preferences;
15
+import ai.pai.lensman.utils.HttpPostTask;
16
+import ai.pai.lensman.utils.UrlContainer;
17
+
18
+
19
+public class CheckBoxUpgradeInfoInteractor implements BaseInteractor {
20
+    private HttpPostTask upgradeTask;
21
+    private String lensmanId;
22
+    private FetchUpgradeInfoListener listener;
23
+
24
+    private static final String TAG = "CheckBoxUpgradeInfoInteractor";
25
+    
26
+    public CheckBoxUpgradeInfoInteractor(String lensmanId, FetchUpgradeInfoListener listener) {
27
+        this.listener = listener;
28
+        this.lensmanId = lensmanId;
29
+    }
30
+
31
+    @Override
32
+    public void startJob() {
33
+        cancelJob();
34
+        HashMap<String, String> params = new HashMap<>();
35
+        params.put("user_id", lensmanId);
36
+        LogHelper.d(TAG, "开始box升级任务");
37
+        upgradeTask = new HttpPostTask(params) {
38
+
39
+            String bpversion_str ="";
40
+            
41
+            @Override
42
+            protected boolean parseResponse(String response) {
43
+                LogHelper.d(TAG, "box升级任务 服务器应答=" + response);
44
+                int latestVersionCode=0;
45
+                try {
46
+                    JSONObject json = new JSONObject(response);
47
+                    int status = json.getInt("status");
48
+                    if (status == 200) {
49
+                        JSONObject data = json.getJSONObject("data");
50
+                        bpversion_str = data.getString("bpversion_str");
51
+                        latestVersionCode = data.getJSONObject("bpversion").getInt("srv_version_code");
52
+                    }
53
+                } catch (Exception e) {
54
+                    LogHelper.d(TAG, "box升级任务 服务器应答异常 " + e);
55
+                }
56
+                LogHelper.d(TAG,"box升级任务 服务器最新版本="+latestVersionCode+"\t客户端版本="+Preferences.getInstance().getBoxVersionCode());
57
+                if(latestVersionCode<= Preferences.getInstance().getBoxVersionCode()){
58
+                    return false;
59
+                }
60
+                if(TextUtils.isEmpty(bpversion_str)){
61
+                    return false;
62
+                }
63
+                return true;
64
+            }
65
+
66
+            @Override
67
+            protected void onPostFail() {
68
+                super.onPostFail();
69
+                listener.onUpgradeInfoFetched(false, null);
70
+                LogHelper.d(TAG, "box升级任务 获取更新失败或者无需更新");
71
+            }
72
+
73
+            @Override
74
+            protected void onPostSuccess() {
75
+                super.onPostSuccess();
76
+                listener.onUpgradeInfoFetched(true, bpversion_str);
77
+                LogHelper.d(TAG, "box升级任务 需要更新");
78
+            }
79
+        };
80
+        upgradeTask.executeOnExecutor(ThreadExecutor.getInstance().getExecutor(), UrlContainer.BOX_VERSION_URL);
81
+    }
82
+
83
+    @Override
84
+    public void cancelJob() {
85
+        if (upgradeTask == null) {
86
+            return;
87
+        }
88
+        if (upgradeTask.getStatus() == AsyncTask.Status.RUNNING) {
89
+            upgradeTask.cancel(true);
90
+        }
91
+        upgradeTask = null;
92
+    }
93
+
94
+    public interface FetchUpgradeInfoListener {
95
+        void onUpgradeInfoFetched(boolean result, String bpversion_str);
96
+    }
97
+
98
+}

+ 4 - 0
app/src/main/java/ai/pai/lensman/utils/BoxUrlContainer.java

@@ -29,6 +29,8 @@ public class BoxUrlContainer {
29 29
 
30 30
     public static String BOX_TIME_URL = BASE_URL+"box_time";
31 31
 
32
+    public static String SET_VERSION = BASE_URL+"set_version";
33
+
32 34
     public static void resetIPHost(String ip) {
33 35
         BOX_IP = ip;
34 36
 
@@ -51,6 +53,8 @@ public class BoxUrlContainer {
51 53
        SET_TIME_URL = BASE_URL+"set_time";
52 54
 
53 55
        BOX_TIME_URL = BASE_URL+"box_time";
56
+
57
+        SET_VERSION = BASE_URL+"set_version";
54 58
     }
55 59
 
56 60
 

+ 5 - 0
app/src/main/java/ai/pai/lensman/utils/UrlContainer.java

@@ -71,4 +71,9 @@ public class UrlContainer {
71 71
 
72 72
     public static final String SERVER_TIME_URL=HOST_URL+"s/server_time";
73 73
 
74
+    /**
75
+     * 盒子程序版本信息
76
+     */
77
+    public static final String BOX_VERSION_URL = HOST_URL+"op/bpversion";
78
+
74 79
 }

+ 12 - 0
app/src/main/res/drawable/update_btn_rounded_rect_bg.xml

@@ -0,0 +1,12 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
3
+    android:shape="rectangle" >
4
+
5
+    <solid android:color="@color/half_transparent" />
6
+
7
+    <corners
8
+        android:radius="4dp"/>
9
+
10
+    <stroke android:width="1dp" android:color="@color/white"/>
11
+
12
+</shape>

+ 49 - 0
app/src/main/res/layout/activity_box_upgrade.xml

@@ -0,0 +1,49 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
3
+    android:layout_width="match_parent"
4
+    android:layout_height="match_parent"
5
+    android:background="@color/half_transparent">
6
+
7
+<RelativeLayout
8
+    android:id="@+id/layout_choose_update"
9
+    android:layout_width="match_parent"
10
+    android:layout_height="wrap_content"
11
+    android:layout_centerInParent="true">
12
+
13
+    <TextView
14
+        android:layout_width="wrap_content"
15
+        android:layout_height="wrap_content"
16
+        android:text="@string/box_upgrade_found"
17
+        android:layout_centerInParent="true"
18
+        android:textSize="18sp"
19
+        android:textColor="@color/white"
20
+        android:id="@+id/tv_box_upgrade_info"/>
21
+
22
+    <Button
23
+        android:id="@+id/btn_update_now"
24
+        android:layout_width="match_parent"
25
+        android:layout_height="40dp"
26
+        android:layout_margin="12dp"
27
+        android:text="@string/upgrade_now"
28
+        android:gravity="center"
29
+        android:textSize="18sp"
30
+        android:textColor="@color/white"
31
+        android:background="@drawable/print_rounded_rect_bg"
32
+        android:layout_below="@+id/tv_box_upgrade_info"
33
+        />
34
+
35
+    <Button
36
+        android:id="@+id/btn_update_later"
37
+        android:layout_width="match_parent"
38
+        android:layout_height="40dp"
39
+        android:text="@string/upgrade_later"
40
+        android:layout_marginLeft="12dp"
41
+        android:layout_marginRight="12dp"
42
+        android:gravity="center"
43
+        android:textSize="18sp"
44
+        android:textColor="@color/white"
45
+        android:background="@drawable/update_btn_rounded_rect_bg"
46
+        android:layout_below="@+id/btn_update_now"
47
+        />
48
+</RelativeLayout>
49
+</RelativeLayout>

+ 5 - 0
app/src/main/res/values/strings.xml

@@ -181,4 +181,9 @@
181 181
 
182 182
     <string name="time_sync_retry">重新同步</string>
183 183
 
184
+    <string name="box_upgrade_found">发现可用的box软件更新</string>
185
+
186
+    <string name="upgrade_now">立即更新</string>
187
+
188
+    <string name="upgrade_later">下次再说</string>
184 189
 </resources>