parent
8254ad40b7
commit
edde5724fe
@ -0,0 +1,20 @@
|
||||
package com.mindspore.himindspore.base;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
|
||||
public abstract class BaseActivity<T extends BasePresenter> extends Activity {
|
||||
|
||||
protected T presenter;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstance) {
|
||||
super.onCreate(savedInstance);
|
||||
setContentView(getLayout());
|
||||
init();
|
||||
}
|
||||
|
||||
protected abstract void init();
|
||||
|
||||
public abstract int getLayout();
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
package com.mindspore.himindspore.base;
|
||||
|
||||
public abstract class BasePresenter<T extends BaseActivity> {
|
||||
protected T view;
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
package com.mindspore.himindspore.base;
|
||||
|
||||
public interface TrackListener {
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package com.mindspore.himindspore.mvp;
|
||||
|
||||
import com.mindspore.himindspore.net.FileDownLoadObserver;
|
||||
import com.mindspore.himindspore.net.UpdateInfoBean;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public interface MainContract {
|
||||
|
||||
interface View {
|
||||
void showUpdateResult(UpdateInfoBean object);
|
||||
|
||||
void showFail(String s);
|
||||
|
||||
}
|
||||
|
||||
interface Presenter {
|
||||
void getUpdateInfo();
|
||||
|
||||
void downloadApk(String destDir, String fileName, FileDownLoadObserver<File> fileDownLoadObserver);
|
||||
}
|
||||
}
|
@ -0,0 +1,65 @@
|
||||
package com.mindspore.himindspore.mvp;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
import com.mindspore.himindspore.SplashActivity;
|
||||
import com.mindspore.himindspore.base.BasePresenter;
|
||||
import com.mindspore.himindspore.net.FileDownLoadObserver;
|
||||
import com.mindspore.himindspore.net.RetrofitHelper;
|
||||
import com.mindspore.himindspore.net.UpdateInfoBean;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.annotations.NonNull;
|
||||
import io.reactivex.functions.Function;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
import okhttp3.ResponseBody;
|
||||
import retrofit2.Call;
|
||||
import retrofit2.Callback;
|
||||
import retrofit2.Response;
|
||||
|
||||
public class MainPresenter extends BasePresenter<SplashActivity> implements MainContract.Presenter {
|
||||
|
||||
private static final String TAG = "MainPresenter";
|
||||
private RetrofitHelper retrofitHelper;
|
||||
|
||||
public MainPresenter(SplashActivity mainActivity) {
|
||||
this.view = mainActivity;
|
||||
retrofitHelper = new RetrofitHelper();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getUpdateInfo() {
|
||||
retrofitHelper.getUpdateInfo().enqueue(new Callback<UpdateInfoBean>() {
|
||||
@Override
|
||||
public void onResponse(Call<UpdateInfoBean> call, Response<UpdateInfoBean> response) {
|
||||
Log.i(TAG, "onResponse" + response.toString());
|
||||
view.showUpdateResult(response.body());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Call<UpdateInfoBean> call, Throwable t) {
|
||||
Log.e(TAG, "onFailure" + t.toString());
|
||||
view.showFail(call.toString());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void downloadApk(final String destDir, final String fileName, final FileDownLoadObserver<File> fileDownLoadObserver) {
|
||||
retrofitHelper.downlaodApk()
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(Schedulers.io())
|
||||
.observeOn(Schedulers.computation())
|
||||
.map(new Function<ResponseBody, File>() {
|
||||
@Override
|
||||
public File apply(@NonNull ResponseBody responseBody) throws Exception {
|
||||
return fileDownLoadObserver.saveFile(responseBody, destDir, fileName);
|
||||
}
|
||||
})
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(fileDownLoadObserver);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,73 @@
|
||||
package com.mindspore.himindspore.net;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
import io.reactivex.observers.DefaultObserver;
|
||||
import okhttp3.ResponseBody;
|
||||
|
||||
public abstract class FileDownLoadObserver<T> extends DefaultObserver<T> {
|
||||
|
||||
@Override
|
||||
public void onNext(T t) {
|
||||
onDownLoadSuccess(t);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Throwable e) {
|
||||
onDownLoadFail(e);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onComplete() {
|
||||
}
|
||||
|
||||
public abstract void onDownLoadSuccess(T t);
|
||||
|
||||
public abstract void onDownLoadFail(Throwable throwable);
|
||||
|
||||
public abstract void onProgress(int progress, long total);
|
||||
|
||||
|
||||
public File saveFile(ResponseBody responseBody, String destFileDir, String destFileName) throws IOException {
|
||||
InputStream is = null;
|
||||
byte[] buf = new byte[2048];
|
||||
int len = 0;
|
||||
FileOutputStream fos = null;
|
||||
try {
|
||||
is = responseBody.byteStream();
|
||||
final long total = responseBody.contentLength();
|
||||
long sum = 0;
|
||||
|
||||
File dir = new File(destFileDir);
|
||||
if (!dir.exists()) {
|
||||
dir.mkdirs();
|
||||
}
|
||||
File file = new File(dir, destFileName);
|
||||
fos = new FileOutputStream(file);
|
||||
while ((len = is.read(buf)) != -1) {
|
||||
sum += len;
|
||||
fos.write(buf, 0, len);
|
||||
final long finalSum = sum;
|
||||
onProgress((int) (finalSum * 100 / total), total);
|
||||
}
|
||||
fos.flush();
|
||||
|
||||
return file;
|
||||
|
||||
} finally {
|
||||
try {
|
||||
if (is != null) is.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
try {
|
||||
if (fos != null) fos.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,45 @@
|
||||
package com.mindspore.himindspore.net;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import io.reactivex.Observable;
|
||||
import okhttp3.OkHttpClient;
|
||||
import okhttp3.ResponseBody;
|
||||
import retrofit2.Call;
|
||||
import retrofit2.Retrofit;
|
||||
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
|
||||
import retrofit2.converter.gson.GsonConverterFactory;
|
||||
|
||||
public class RetrofitHelper {
|
||||
public static final String MS_BASE_HOST = "https://download.mindspore.cn/model_zoo/official/lite/apk/";
|
||||
|
||||
private RetrofitService retrofitService;
|
||||
|
||||
|
||||
public RetrofitHelper() {
|
||||
|
||||
OkHttpClient httpClient = new OkHttpClient.Builder()
|
||||
.retryOnConnectionFailure(true)
|
||||
.connectTimeout(30, TimeUnit.SECONDS)
|
||||
.build();
|
||||
|
||||
Retrofit retrofit = new Retrofit.Builder()
|
||||
.baseUrl(MS_BASE_HOST)
|
||||
.client(httpClient)
|
||||
.addConverterFactory(GsonConverterFactory.create())
|
||||
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
|
||||
.build();
|
||||
|
||||
retrofitService = retrofit.create(RetrofitService.class);
|
||||
}
|
||||
|
||||
|
||||
public Call<UpdateInfoBean> getUpdateInfo() {
|
||||
return retrofitService.getUpdateInfo();
|
||||
}
|
||||
|
||||
public Observable<ResponseBody> downlaodApk() {
|
||||
return retrofitService.downloadApk();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package com.mindspore.himindspore.net;
|
||||
|
||||
import io.reactivex.Observable;
|
||||
import okhttp3.ResponseBody;
|
||||
import retrofit2.Call;
|
||||
import retrofit2.http.GET;
|
||||
import retrofit2.http.Streaming;
|
||||
|
||||
public interface RetrofitService {
|
||||
|
||||
@GET("version.json")
|
||||
Call<UpdateInfoBean> getUpdateInfo();
|
||||
|
||||
@Streaming
|
||||
@GET("himindsporedemo.apk")
|
||||
Observable<ResponseBody> downloadApk();
|
||||
}
|
@ -0,0 +1,68 @@
|
||||
package com.mindspore.himindspore.net;
|
||||
|
||||
public class UpdateInfoBean {
|
||||
|
||||
private int versionCode;
|
||||
private String versionName;
|
||||
private int forceUpdate;
|
||||
private String create_time;
|
||||
private String url;
|
||||
private String md5;
|
||||
private String message;
|
||||
|
||||
public int getVersionCode() {
|
||||
return versionCode;
|
||||
}
|
||||
|
||||
public void setVersionCode(int versionCode) {
|
||||
this.versionCode = versionCode;
|
||||
}
|
||||
|
||||
public String getVersionName() {
|
||||
return versionName;
|
||||
}
|
||||
|
||||
public void setVersionName(String versionName) {
|
||||
this.versionName = versionName;
|
||||
}
|
||||
|
||||
public int getForceUpdate() {
|
||||
return forceUpdate;
|
||||
}
|
||||
|
||||
public void setForceUpdate(int forceUpdate) {
|
||||
this.forceUpdate = forceUpdate;
|
||||
}
|
||||
|
||||
public String getCreate_time() {
|
||||
return create_time;
|
||||
}
|
||||
|
||||
public void setCreate_time(String create_time) {
|
||||
this.create_time = create_time;
|
||||
}
|
||||
|
||||
public String getUrl() {
|
||||
return url;
|
||||
}
|
||||
|
||||
public void setUrl(String url) {
|
||||
this.url = url;
|
||||
}
|
||||
|
||||
public String getMd5() {
|
||||
return md5;
|
||||
}
|
||||
|
||||
public void setMd5(String md5) {
|
||||
this.md5 = md5;
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
public void setMessage(String message) {
|
||||
this.message = message;
|
||||
}
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<paths>
|
||||
<external-path path="Android/data/com.mindspore.himindspore/" name="files_root" />
|
||||
|
||||
<files-path
|
||||
name="Android/data/com.mindspore.himindspore/"
|
||||
path="files_root">
|
||||
</files-path>
|
||||
</paths>
|
Loading…
Reference in new issue