Commit 355e0acb by 段启岩

检查新版本

parent 8189b014
...@@ -2,6 +2,7 @@ package cn.yunliyunwai.beyondclouds; ...@@ -2,6 +2,7 @@ package cn.yunliyunwai.beyondclouds;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.LayoutInflater; import android.view.LayoutInflater;
...@@ -28,6 +29,12 @@ import cn.yunliyunwai.beyondclouds.viewmodel.MainActivityViewModel; ...@@ -28,6 +29,12 @@ import cn.yunliyunwai.beyondclouds.viewmodel.MainActivityViewModel;
public class MainActivity extends BaseActivity<MainActivityViewModel, ActivityMainBinding> implements BeyondBottomNavigationView.OnNavigationItemReselectedListener, BeyondBottomNavigationView.OnNavigationItemSelectedListener { 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 MAIN_NAV_FRAGMENT_TAG_PREFIX = "main_nav_fragment:";
private static final String TAG = MainActivity.class.getCanonicalName(); private static final String TAG = MainActivity.class.getCanonicalName();
private List<Fragment> fragments; private List<Fragment> fragments;
...@@ -40,6 +47,13 @@ public class MainActivity extends BaseActivity<MainActivityViewModel, ActivityMa ...@@ -40,6 +47,13 @@ public class MainActivity extends BaseActivity<MainActivityViewModel, ActivityMa
StatusBarUtils.setWindowStatusBarColor(this, R.color.colorStatusBar); StatusBarUtils.setWindowStatusBarColor(this, R.color.colorStatusBar);
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
initBottomNavigation(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 @Override
......
...@@ -3,7 +3,6 @@ package cn.yunliyunwai.beyondclouds; ...@@ -3,7 +3,6 @@ package cn.yunliyunwai.beyondclouds;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.widget.Toast;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.lifecycle.Observer; import androidx.lifecycle.Observer;
...@@ -12,11 +11,16 @@ import androidx.lifecycle.ViewModelProvider; ...@@ -12,11 +11,16 @@ import androidx.lifecycle.ViewModelProvider;
import javax.inject.Inject; import javax.inject.Inject;
import cn.yunliyunwai.beyondclouds.base.BaseActivity; import cn.yunliyunwai.beyondclouds.base.BaseActivity;
import cn.yunliyunwai.beyondclouds.data.model.AppVersion;
import cn.yunliyunwai.beyondclouds.databinding.ActivitySplashBinding; import cn.yunliyunwai.beyondclouds.databinding.ActivitySplashBinding;
import cn.yunliyunwai.beyondclouds.util.ContextUtils; import cn.yunliyunwai.beyondclouds.util.ContextUtils;
import cn.yunliyunwai.beyondclouds.util.VersionUtils; import cn.yunliyunwai.beyondclouds.util.VersionUtils;
import cn.yunliyunwai.beyondclouds.viewmodel.SplashActivityViewModel; 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 ...@@ -45,14 +49,23 @@ public class SplashActivity extends BaseActivity<SplashActivityViewModel, Activi
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
String versionName = VersionUtils.getVersionName(this);
Toast.makeText(this, "App当前版本为" + versionName, Toast.LENGTH_SHORT);
viewModel.getInitialStates().observe(this, new Observer<SplashActivityViewModel.InitialStates>() { viewModel.getInitialStates().observe(this, new Observer<SplashActivityViewModel.InitialStates>() {
@Override @Override
public void onChanged(SplashActivityViewModel.InitialStates initialStates) { public void onChanged(SplashActivityViewModel.InitialStates initialStates) {
if (initialStates.isCompleted()) { 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(); 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; ...@@ -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.BlogDatabase;
import cn.yunliyunwai.beyondclouds.data.source.local.database.ProjectDatabase; import cn.yunliyunwai.beyondclouds.data.source.local.database.ProjectDatabase;
import cn.yunliyunwai.beyondclouds.data.source.local.database.QuestionDatabase; 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.BlogApiStore;
import cn.yunliyunwai.beyondclouds.data.source.remote.PostApiStore; import cn.yunliyunwai.beyondclouds.data.source.remote.PostApiStore;
import cn.yunliyunwai.beyondclouds.data.source.remote.ProjectApiStore; import cn.yunliyunwai.beyondclouds.data.source.remote.ProjectApiStore;
...@@ -40,6 +41,12 @@ public class AppModule { ...@@ -40,6 +41,12 @@ public class AppModule {
@Singleton @Singleton
@Provides @Provides
public AppApiStore provideAppemoteDataSource(Retrofit retrofit) {
return retrofit.create(AppApiStore.class);
}
@Singleton
@Provides
public BlogApiStore provideBlogRemoteDataSource(Retrofit retrofit) { public BlogApiStore provideBlogRemoteDataSource(Retrofit retrofit) {
return retrofit.create(BlogApiStore.class); return retrofit.create(BlogApiStore.class);
} }
......
...@@ -4,11 +4,13 @@ import androidx.lifecycle.ViewModel; ...@@ -4,11 +4,13 @@ import androidx.lifecycle.ViewModel;
import javax.inject.Singleton; import javax.inject.Singleton;
import cn.yunliyunwai.beyondclouds.data.source.IAppRepository;
import cn.yunliyunwai.beyondclouds.data.source.IBlogRepository; import cn.yunliyunwai.beyondclouds.data.source.IBlogRepository;
import cn.yunliyunwai.beyondclouds.data.source.IPostRepository; import cn.yunliyunwai.beyondclouds.data.source.IPostRepository;
import cn.yunliyunwai.beyondclouds.data.source.IProjectRepository; import cn.yunliyunwai.beyondclouds.data.source.IProjectRepository;
import cn.yunliyunwai.beyondclouds.data.source.IQuestionRepository; import cn.yunliyunwai.beyondclouds.data.source.IQuestionRepository;
import cn.yunliyunwai.beyondclouds.data.source.IUserRepository; 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.BlogRepositoryImpl;
import cn.yunliyunwai.beyondclouds.data.source.impl.PostRepositoryImpl; import cn.yunliyunwai.beyondclouds.data.source.impl.PostRepositoryImpl;
import cn.yunliyunwai.beyondclouds.data.source.impl.ProjectRepositoryImpl; import cn.yunliyunwai.beyondclouds.data.source.impl.ProjectRepositoryImpl;
...@@ -24,8 +26,11 @@ public interface AppModuleBinds { ...@@ -24,8 +26,11 @@ public interface AppModuleBinds {
@Singleton @Singleton
@Binds @Binds
IBlogRepository bindBlogRepository(BlogRepositoryImpl blogRepository); IAppRepository bindAppRepository(AppRepositoryImpl appRepository);
@Singleton
@Binds
IBlogRepository bindBlogRepository(BlogRepositoryImpl blogRepository);
@Singleton @Singleton
@Binds @Binds
......
...@@ -5,10 +5,10 @@ import android.content.pm.PackageInfo; ...@@ -5,10 +5,10 @@ import android.content.pm.PackageInfo;
public class VersionUtils { public class VersionUtils {
public static String getVersionName(Context context) { public static Integer getVersionCode(Context context) {
try { try {
PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
return packageInfo.versionName; return packageInfo.versionCode;
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
return null; return null;
......
...@@ -9,10 +9,12 @@ import java.util.List; ...@@ -9,10 +9,12 @@ import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import cn.yunliyunwai.beyondclouds.data.model.AppVersion;
import cn.yunliyunwai.beyondclouds.data.model.BlogCategory; import cn.yunliyunwai.beyondclouds.data.model.BlogCategory;
import cn.yunliyunwai.beyondclouds.data.model.ProjectCategory; import cn.yunliyunwai.beyondclouds.data.model.ProjectCategory;
import cn.yunliyunwai.beyondclouds.data.model.QuestionCategory; import cn.yunliyunwai.beyondclouds.data.model.QuestionCategory;
import cn.yunliyunwai.beyondclouds.data.model.Result; 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.IBlogRepository;
import cn.yunliyunwai.beyondclouds.data.source.IProjectRepository; import cn.yunliyunwai.beyondclouds.data.source.IProjectRepository;
import cn.yunliyunwai.beyondclouds.data.source.IQuestionRepository; import cn.yunliyunwai.beyondclouds.data.source.IQuestionRepository;
...@@ -31,30 +33,36 @@ public class SplashActivityViewModel extends ViewModel { ...@@ -31,30 +33,36 @@ public class SplashActivityViewModel extends ViewModel {
private InitialState blogCategoryInitialState; private InitialState blogCategoryInitialState;
private InitialState projectCategoryInitialState; private InitialState projectCategoryInitialState;
private InitialState questionCategoryInitialState; private InitialState questionCategoryInitialState;
private InitialState appVersionCheckInitalState;
public InitialStates() { public InitialStates() {
blogCategoryInitialState = InitialState.INITIALIZING; blogCategoryInitialState = InitialState.INITIALIZING;
projectCategoryInitialState = InitialState.INITIALIZING; projectCategoryInitialState = InitialState.INITIALIZING;
questionCategoryInitialState = InitialState.INITIALIZING; questionCategoryInitialState = InitialState.INITIALIZING;
appVersionCheckInitalState = InitialState.INITIALIZING;
} }
public boolean isCompleted() { public boolean isCompleted() {
return blogCategoryInitialState == InitialState.COMPLETE return blogCategoryInitialState == InitialState.COMPLETE
&& projectCategoryInitialState == InitialState.COMPLETE && projectCategoryInitialState == InitialState.COMPLETE
&& questionCategoryInitialState == InitialState.COMPLETE; && questionCategoryInitialState == InitialState.COMPLETE
&& appVersionCheckInitalState == InitialState.COMPLETE;
} }
} }
private IBlogRepository blogRepository; private IBlogRepository blogRepository;
private IAppRepository appRepository;
private IProjectRepository projectRepository; private IProjectRepository projectRepository;
private IQuestionRepository questionRepository; private IQuestionRepository questionRepository;
private AppExecutors appExecutors; private AppExecutors appExecutors;
private MutableLiveData<InitialStates> mInitialStates = new MutableLiveData<>(); private MutableLiveData<InitialStates> mInitialStates = new MutableLiveData<>();
private AppVersion mAppVersion;
@Inject @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.blogRepository = blogRepository;
this.projectRepository = projectRepository; this.projectRepository = projectRepository;
this.questionRepository = questionRepository; this.questionRepository = questionRepository;
this.appRepository = appRepository;
this.appExecutors = appExecutors; this.appExecutors = appExecutors;
mInitialStates.setValue(new InitialStates()); mInitialStates.setValue(new InitialStates());
} }
...@@ -63,6 +71,10 @@ public class SplashActivityViewModel extends ViewModel { ...@@ -63,6 +71,10 @@ public class SplashActivityViewModel extends ViewModel {
return mInitialStates; return mInitialStates;
} }
public AppVersion getAppVersion() {
return mAppVersion;
}
/** /**
* 初始化 * 初始化
*/ */
...@@ -124,6 +136,17 @@ public class SplashActivityViewModel extends ViewModel { ...@@ -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