Commit 355e0acb by 段启岩

检查新版本

parent 8189b014
......@@ -2,6 +2,7 @@ package cn.yunliyunwai.beyondclouds;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
......@@ -28,6 +29,12 @@ import cn.yunliyunwai.beyondclouds.viewmodel.MainActivityViewModel;
public class MainActivity extends BaseActivity<MainActivityViewModel, ActivityMainBinding> implements BeyondBottomNavigationView.OnNavigationItemReselectedListener, BeyondBottomNavigationView.OnNavigationItemSelectedListener {
public static final String ARG_HAS_NEW_VERSION = "HAS_NEW_VERSION";
public static final String ARG_NEW_VERSION_NAME = "NEW_VERSION_NAME";
public static final String ARG_NEW_VERSION_DOWNLOAD_URL = "NEW_VERSION_DOWNLOAD_URL";
private static final String MAIN_NAV_FRAGMENT_TAG_PREFIX = "main_nav_fragment:";
private static final String TAG = MainActivity.class.getCanonicalName();
private List<Fragment> fragments;
......@@ -40,6 +47,13 @@ public class MainActivity extends BaseActivity<MainActivityViewModel, ActivityMa
StatusBarUtils.setWindowStatusBarColor(this, R.color.colorStatusBar);
super.onCreate(savedInstanceState);
initBottomNavigation(savedInstanceState);
Intent intent = getIntent();
if (null != intent && intent.getBooleanExtra(ARG_HAS_NEW_VERSION, false)) {
// 发现新版本
String newVersionName = intent.getStringExtra(ARG_NEW_VERSION_NAME);
String newVersionDownloadUrl = intent.getStringExtra(ARG_NEW_VERSION_DOWNLOAD_URL);
Log.d(getClass().getName(), "发现新版本:" + newVersionName);
}
}
@Override
......
......@@ -3,7 +3,6 @@ package cn.yunliyunwai.beyondclouds;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;
......@@ -12,11 +11,16 @@ import androidx.lifecycle.ViewModelProvider;
import javax.inject.Inject;
import cn.yunliyunwai.beyondclouds.base.BaseActivity;
import cn.yunliyunwai.beyondclouds.data.model.AppVersion;
import cn.yunliyunwai.beyondclouds.databinding.ActivitySplashBinding;
import cn.yunliyunwai.beyondclouds.util.ContextUtils;
import cn.yunliyunwai.beyondclouds.util.VersionUtils;
import cn.yunliyunwai.beyondclouds.viewmodel.SplashActivityViewModel;
import static cn.yunliyunwai.beyondclouds.MainActivity.ARG_HAS_NEW_VERSION;
import static cn.yunliyunwai.beyondclouds.MainActivity.ARG_NEW_VERSION_DOWNLOAD_URL;
import static cn.yunliyunwai.beyondclouds.MainActivity.ARG_NEW_VERSION_NAME;
/**
* 欢迎屏幕
*/
......@@ -45,14 +49,23 @@ public class SplashActivity extends BaseActivity<SplashActivityViewModel, Activi
super.onCreate(savedInstanceState);
String versionName = VersionUtils.getVersionName(this);
Toast.makeText(this, "App当前版本为" + versionName, Toast.LENGTH_SHORT);
viewModel.getInitialStates().observe(this, new Observer<SplashActivityViewModel.InitialStates>() {
@Override
public void onChanged(SplashActivityViewModel.InitialStates initialStates) {
if (initialStates.isCompleted()) {
startActivity(new Intent(SplashActivity.this, MainActivity.class));
Integer versionCode = VersionUtils.getVersionCode(SplashActivity.this);
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
Bundle args = new Bundle();
AppVersion appVersion = viewModel.getAppVersion();
boolean hasNewVersion = null != appVersion
&& null != versionCode
&& appVersion.getVersionCode() > versionCode;
args.putBoolean(ARG_HAS_NEW_VERSION, hasNewVersion);
if (hasNewVersion) {
args.putString(ARG_NEW_VERSION_NAME, appVersion.getVersionName());
args.putString(ARG_NEW_VERSION_DOWNLOAD_URL, appVersion.getDownloadUrl());
}
startActivity(intent);
SplashActivity.this.finish();
}
}
......
package cn.yunliyunwai.beyondclouds.data.model;
import java.util.Date;
import lombok.Data;
@Data
public class AppVersion {
private Integer versionId;
private Long versionCode;
private String versionName;
private String downloadUrl;
private String description;
private Date createTime;
private Date updateTime;
}
package cn.yunliyunwai.beyondclouds.data.source;
import androidx.lifecycle.LiveData;
import cn.yunliyunwai.beyondclouds.data.model.AppVersion;
import cn.yunliyunwai.beyondclouds.data.model.Result;
public interface IAppRepository {
/**
* 获取最新版app的信息
* @return
*/
LiveData<Result<AppVersion>> getLatestVersion();
}
package cn.yunliyunwai.beyondclouds.data.source.impl;
import androidx.lifecycle.LiveData;
import javax.inject.Inject;
import javax.inject.Singleton;
import cn.yunliyunwai.beyondclouds.data.model.AppVersion;
import cn.yunliyunwai.beyondclouds.data.model.Result;
import cn.yunliyunwai.beyondclouds.data.source.IAppRepository;
import cn.yunliyunwai.beyondclouds.data.source.remote.AppApiStore;
@Singleton
public class AppRepositoryImpl implements IAppRepository {
private AppApiStore appApiStore;
@Inject
public AppRepositoryImpl(AppApiStore appApiStore) {
this.appApiStore = appApiStore;
}
@Override
public LiveData<Result<AppVersion>> getLatestVersion() {
return appApiStore.getLatestVersion();
}
}
package cn.yunliyunwai.beyondclouds.data.source.remote;
import androidx.lifecycle.LiveData;
import cn.yunliyunwai.beyondclouds.data.model.AppVersion;
import cn.yunliyunwai.beyondclouds.data.model.Result;
import retrofit2.http.GET;
public interface AppApiStore {
@GET("app/version/latest")
LiveData<Result<AppVersion>> getLatestVersion();
}
......@@ -22,6 +22,7 @@ import cn.yunliyunwai.beyondclouds.data.TokenInterceptor;
import cn.yunliyunwai.beyondclouds.data.source.local.database.BlogDatabase;
import cn.yunliyunwai.beyondclouds.data.source.local.database.ProjectDatabase;
import cn.yunliyunwai.beyondclouds.data.source.local.database.QuestionDatabase;
import cn.yunliyunwai.beyondclouds.data.source.remote.AppApiStore;
import cn.yunliyunwai.beyondclouds.data.source.remote.BlogApiStore;
import cn.yunliyunwai.beyondclouds.data.source.remote.PostApiStore;
import cn.yunliyunwai.beyondclouds.data.source.remote.ProjectApiStore;
......@@ -40,6 +41,12 @@ public class AppModule {
@Singleton
@Provides
public AppApiStore provideAppemoteDataSource(Retrofit retrofit) {
return retrofit.create(AppApiStore.class);
}
@Singleton
@Provides
public BlogApiStore provideBlogRemoteDataSource(Retrofit retrofit) {
return retrofit.create(BlogApiStore.class);
}
......
......@@ -4,11 +4,13 @@ import androidx.lifecycle.ViewModel;
import javax.inject.Singleton;
import cn.yunliyunwai.beyondclouds.data.source.IAppRepository;
import cn.yunliyunwai.beyondclouds.data.source.IBlogRepository;
import cn.yunliyunwai.beyondclouds.data.source.IPostRepository;
import cn.yunliyunwai.beyondclouds.data.source.IProjectRepository;
import cn.yunliyunwai.beyondclouds.data.source.IQuestionRepository;
import cn.yunliyunwai.beyondclouds.data.source.IUserRepository;
import cn.yunliyunwai.beyondclouds.data.source.impl.AppRepositoryImpl;
import cn.yunliyunwai.beyondclouds.data.source.impl.BlogRepositoryImpl;
import cn.yunliyunwai.beyondclouds.data.source.impl.PostRepositoryImpl;
import cn.yunliyunwai.beyondclouds.data.source.impl.ProjectRepositoryImpl;
......@@ -24,8 +26,11 @@ public interface AppModuleBinds {
@Singleton
@Binds
IBlogRepository bindBlogRepository(BlogRepositoryImpl blogRepository);
IAppRepository bindAppRepository(AppRepositoryImpl appRepository);
@Singleton
@Binds
IBlogRepository bindBlogRepository(BlogRepositoryImpl blogRepository);
@Singleton
@Binds
......
......@@ -5,10 +5,10 @@ import android.content.pm.PackageInfo;
public class VersionUtils {
public static String getVersionName(Context context) {
public static Integer getVersionCode(Context context) {
try {
PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
return packageInfo.versionName;
return packageInfo.versionCode;
} catch (Exception e) {
e.printStackTrace();
return null;
......
......@@ -9,10 +9,12 @@ import java.util.List;
import javax.inject.Inject;
import cn.yunliyunwai.beyondclouds.data.model.AppVersion;
import cn.yunliyunwai.beyondclouds.data.model.BlogCategory;
import cn.yunliyunwai.beyondclouds.data.model.ProjectCategory;
import cn.yunliyunwai.beyondclouds.data.model.QuestionCategory;
import cn.yunliyunwai.beyondclouds.data.model.Result;
import cn.yunliyunwai.beyondclouds.data.source.IAppRepository;
import cn.yunliyunwai.beyondclouds.data.source.IBlogRepository;
import cn.yunliyunwai.beyondclouds.data.source.IProjectRepository;
import cn.yunliyunwai.beyondclouds.data.source.IQuestionRepository;
......@@ -31,30 +33,36 @@ public class SplashActivityViewModel extends ViewModel {
private InitialState blogCategoryInitialState;
private InitialState projectCategoryInitialState;
private InitialState questionCategoryInitialState;
private InitialState appVersionCheckInitalState;
public InitialStates() {
blogCategoryInitialState = InitialState.INITIALIZING;
projectCategoryInitialState = InitialState.INITIALIZING;
questionCategoryInitialState = InitialState.INITIALIZING;
appVersionCheckInitalState = InitialState.INITIALIZING;
}
public boolean isCompleted() {
return blogCategoryInitialState == InitialState.COMPLETE
&& projectCategoryInitialState == InitialState.COMPLETE
&& questionCategoryInitialState == InitialState.COMPLETE;
&& questionCategoryInitialState == InitialState.COMPLETE
&& appVersionCheckInitalState == InitialState.COMPLETE;
}
}
private IBlogRepository blogRepository;
private IAppRepository appRepository;
private IProjectRepository projectRepository;
private IQuestionRepository questionRepository;
private AppExecutors appExecutors;
private MutableLiveData<InitialStates> mInitialStates = new MutableLiveData<>();
private AppVersion mAppVersion;
@Inject
public SplashActivityViewModel(IBlogRepository blogRepository, IProjectRepository projectRepository, IQuestionRepository questionRepository, AppExecutors appExecutors) {
public SplashActivityViewModel(IBlogRepository blogRepository, IProjectRepository projectRepository, IQuestionRepository questionRepository, IAppRepository appRepository, AppExecutors appExecutors) {
this.blogRepository = blogRepository;
this.projectRepository = projectRepository;
this.questionRepository = questionRepository;
this.appRepository = appRepository;
this.appExecutors = appExecutors;
mInitialStates.setValue(new InitialStates());
}
......@@ -63,6 +71,10 @@ public class SplashActivityViewModel extends ViewModel {
return mInitialStates;
}
public AppVersion getAppVersion() {
return mAppVersion;
}
/**
* 初始化
*/
......@@ -124,6 +136,17 @@ public class SplashActivityViewModel extends ViewModel {
}
});
appRepository.getLatestVersion().observeForever(new Observer<Result<AppVersion>>() {
@Override
public void onChanged(Result<AppVersion> appVersionResult) {
if (appVersionResult.getCode() == 0) {
mAppVersion = appVersionResult.getData();
mInitialStates.getValue().setAppVersionCheckInitalState(InitialState.COMPLETE);
mInitialStates.setValue(mInitialStates.getValue());
}
}
});
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment