浏览代码

Merge branch 'develop' of https://github.com/swict/LifeplusAndroid into develop

Hasemi 6 年之前
父节点
当前提交
55415e992c

+ 24 - 12
app/src/main/java/kr/co/zumo/app/lifeplus/activity/SplashPresenter.java

@@ -7,6 +7,7 @@ import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.provider.Settings;
+import android.support.v4.app.FragmentActivity;
 import android.util.Log;
 
 import java.util.Arrays;
@@ -21,14 +22,18 @@ import kr.co.zumo.app.lifeplus.config.NetworkConfigProvider;
 import kr.co.zumo.app.lifeplus.helper.AppShieldHelper;
 import kr.co.zumo.app.lifeplus.helper.AppVersionHelper;
 import kr.co.zumo.app.lifeplus.helper.FirebaseHelper;
+import kr.co.zumo.app.lifeplus.helper.Helper;
 import kr.co.zumo.app.lifeplus.model.SuperModel;
 import kr.co.zumo.app.lifeplus.model.SuperModelInit;
 import kr.co.zumo.app.lifeplus.model.module.APIModuleHelper;
 import kr.co.zumo.app.lifeplus.model.module.IEmergency;
 import kr.co.zumo.app.lifeplus.model.module.IModuleEmergencyHandler;
 import kr.co.zumo.app.lifeplus.network.NetworkWatcher;
+import kr.co.zumo.app.lifeplus.util.AppUtil;
 import kr.co.zumo.app.lifeplus.util.ResourceUtil;
 import kr.co.zumo.app.lifeplus.view.Event;
+import kr.co.zumo.app.lifeplus.view.IView;
+import kr.co.zumo.app.lifeplus.view.command.AppUpdateCommand;
 import kr.co.zumo.app.lifeplus.view.dialog.ConfirmDialog;
 import kr.co.zumo.app.lifeplus.view.dialog.DialogBuilder;
 import kr.co.zumo.app.lifeplus.view.dialog.DialogID;
@@ -217,7 +222,7 @@ public class SplashPresenter implements ISplashContract.Presenter, IModuleEmerge
     Context context = App.getInstance().getContext();
 
     // 앱이 실행 중인지 판단한다.
-    if (SuperModel.getInstance().isAppInitialized()) {
+    if (SuperModel.getInstance().isAppInitialized() && App.getInstance().isDisposable() == false) {
       Log.e("APP#  SplashPresenter | setupInternal", "|" + " restart from call...........");
 
       view.finish();
@@ -259,11 +264,21 @@ public class SplashPresenter implements ISplashContract.Presenter, IModuleEmerge
     }
   }
 
-  private void showPopupMultiDevice() {
-    DialogProvider.of(view.getActivity().getSupportFragmentManager()).showPopupMultiDevice(() -> {
-      // 잠금 화면으로 이동
-      dispose();
-      view.linkActivity(ScreenStarter.SCREEN_MULTI_DEVICE);
+  private void showPopupAppUpdate() {
+    DialogProvider.of(view.getActivity().getSupportFragmentManager()).showPopupAppUpdate(() -> {
+      // 플레이 스토어 이동
+      new AppUpdateCommand(AppUtil.getPackageName()).execute(null, new IView() {
+        @Override
+        public FragmentActivity getActivity() {
+          return view.getActivity();
+        }
+
+        @Override
+        public int getScreenId() { return 0; }
+
+        @Override
+        public <H extends Helper> H getHelper(Class<H> helperClass) { return null; }
+      }, null);
     }, () -> {
       // 앱 종료
       exit();
@@ -288,12 +303,9 @@ public class SplashPresenter implements ISplashContract.Presenter, IModuleEmerge
    ***********************************/
   @Override
   public boolean onApiEmergency(IEmergency emergency) {
-    /*
-    멀티 디바이스 사용 등의 경우 api 호출 시 특정 값을 반환하므로 이를 처리한다.
-     */
-    if (emergency.getEmergencyCode() == EmergencyBean.CODE_MULTI_DEVICE) {
-      // 멀티 디바이스
-      showPopupMultiDevice();
+    if (emergency.getEmergencyCode() == EmergencyBean.CODE_FORCE_APP_UPDATE) {
+      // 강제 업데이트
+      showPopupAppUpdate();
       return true;
     }
     else if (emergency.getEmergencyCode() == EmergencyBean.CODE_INVALID_APP) {

+ 1 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/bean/api/EmergencyBean.java

@@ -19,7 +19,7 @@ import kr.co.zumo.app.lifeplus.model.module.IEmergency;
 public class EmergencyBean extends JsonBeanBase implements IEmergency {
 
   public static final int CODE_COMMON = -1111;
-  public static final int CODE_MULTI_DEVICE = -2222;
+//  public static final int CODE_MULTI_DEVICE = -2222;
   public static final int CODE_INVALID_APP = -3333;
   public static final int CODE_FORCE_APP_UPDATE = -4444;
 

+ 4 - 2
app/src/main/java/kr/co/zumo/app/lifeplus/helper/AppVersionHelper.java

@@ -41,7 +41,7 @@ public class AppVersionHelper {
   private FirebaseRemoteConfig firebaseRemoteConfig;
 
   private String VERSION_LATEST = "newerVersion";
-  private String VERSION_FORCE = "newerVersion";
+  private String VERSION_FORCE = "forceVersion";
 
   /**
    * dispose
@@ -64,6 +64,8 @@ public class AppVersionHelper {
 
           String currentVersion = getVersion("");
 
+          Log.d("APP# AppVersionHelper | fetch, 67", "|" + "current: " + StringUtil.getPureVersionString(AppUtil.getVersionName(), 3) + " new: " + getLatestVersion() + " force: " + getForceVersion());
+
           // 강제 업데이트 검사
           if (StringUtil.hasNewVersion(currentVersion, getForceVersion())) {
             dispatchInvalidAppEvent();
@@ -102,7 +104,7 @@ public class AppVersionHelper {
   private void dispatchInvalidAppEvent() {
     boolean consumed = APIModuleHelper.dispatchEmergencyEvent(new EmergencyBean(EmergencyBean.CODE_FORCE_APP_UPDATE));
     if (false == consumed) {
-      Log.d("APP# AppVersionHelper | dispatchInvalidAppEvent", "|" + "------------ again.......");
+      Log.d("APP# AppVersionHelper | dispatchInvalidAppEvent 105", "|" + "------------ again.......");
       disposable = Completable.timer(500, TimeUnit.MILLISECONDS)
         .subscribe(this::dispatchInvalidAppEvent);
     }

+ 4 - 6
app/src/main/java/kr/co/zumo/app/lifeplus/model/module/APIModule.java

@@ -20,14 +20,12 @@ import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.bean.JsonBeanBase;
 import kr.co.zumo.app.lifeplus.bean.api.APIBean;
 import kr.co.zumo.app.lifeplus.bean.api.EmergencyBean;
-import kr.co.zumo.app.lifeplus.bean.api.LifeplusAPIBean;
 import kr.co.zumo.app.lifeplus.model.BasicParamProvider;
 import kr.co.zumo.app.lifeplus.model.IParamProvider;
 import kr.co.zumo.app.lifeplus.network.api.NoResponseBodyException;
 import kr.co.zumo.app.lifeplus.util.AppUtil;
 import kr.co.zumo.app.lifeplus.util.ResourceUtil;
 import kr.co.zumo.app.lifeplus.util.StringUtil;
-import okhttp3.Headers;
 import okhttp3.ResponseBody;
 import retrofit2.HttpException;
 
@@ -162,10 +160,10 @@ public abstract class APIModule<T extends JsonBeanBase, B extends APIBean> imple
 
       if (e instanceof NoResponseBodyException) {
         int code = EmergencyBean.CODE_COMMON;
-        Headers headers = ((NoResponseBodyException) e).getHeaders();
-        if (null != headers && LifeplusAPIBean.HEADER_MULTI_DEVICE_VALUE_MULTI.equals(headers.get(LifeplusAPIBean.HEADER_MULTI_DEVICE))) {
-          code = EmergencyBean.CODE_MULTI_DEVICE;
-        }
+//        Headers headers = ((NoResponseBodyException) e).getHeaders();
+//        if (null != headers && LifeplusAPIBean.HEADER_MULTI_DEVICE_VALUE_MULTI.equals(headers.get(LifeplusAPIBean.HEADER_MULTI_DEVICE))) {
+//          code = EmergencyBean.CODE_MULTI_DEVICE;
+//        }
 
         boolean consumed = APIModuleHelper.dispatchEmergencyEvent(new EmergencyBean(code));
 

+ 7 - 7
app/src/main/java/kr/co/zumo/app/lifeplus/view/dialog/DialogProvider.java

@@ -44,19 +44,19 @@ public class DialogProvider {
   }
 
   /**
-   * 다중 장치 팝업
+   * 앱 강제 업데이트
    *
    * @param positive
    * @param negative
    * @return
    */
-  public ConfirmDialog showPopupMultiDevice(Runnable positive, Runnable negative) {
+  public ConfirmDialog showPopupAppUpdate(Runnable positive, Runnable negative) {
     return new DialogBuilder<ConfirmDialog, ICustomConfirmListener>(manager, DialogID.CONFIRM)
       .listener(new ICustomConfirmListener<ConfirmDialog>() {
         @Override
         public void onPositiveResult(ConfirmDialog dialog, Event event) {
           dialog.dispose();
-          // 잠금 화면으로 이동
+          // 플레이 스토어 이동
           positive.run();
         }
 
@@ -75,10 +75,10 @@ public class DialogProvider {
         }
       })
       .attribute(dialog -> {
-        dialog.setTitleId(R.string.emergency_multi_device_title);
-        dialog.setText(ResourceUtil.getString(R.string.emergency_multi_device));
-        dialog.setNegativeButtonLabelId(R.string.emergency_multi_device_button_negative);
-        dialog.setPositiveButtonLabelId(R.string.emergency_multi_device_button_positive);
+        dialog.setTitleId(R.string.emergency_app_update_title);
+        dialog.setText(ResourceUtil.getString(R.string.emergency_app_update));
+        dialog.setNegativeButtonLabelId(R.string.emergency_app_update_button_negative);
+        dialog.setPositiveButtonLabelId(R.string.emergency_app_update_button_positive);
       })
       .show();
   }

+ 15 - 13
app/src/main/java/kr/co/zumo/app/lifeplus/view/presenter/Presenter.java

@@ -40,6 +40,7 @@ import kr.co.zumo.app.lifeplus.model.module.IModuleEmergencyHandler;
 import kr.co.zumo.app.lifeplus.network.INetworkReceiverListener;
 import kr.co.zumo.app.lifeplus.supervisor.ScreenID;
 import kr.co.zumo.app.lifeplus.supervisor.screen.Screen;
+import kr.co.zumo.app.lifeplus.util.AppUtil;
 import kr.co.zumo.app.lifeplus.util.ResourceUtil;
 import kr.co.zumo.app.lifeplus.util.StringUtil;
 import kr.co.zumo.app.lifeplus.view.Event;
@@ -49,6 +50,7 @@ import kr.co.zumo.app.lifeplus.view.IWaiterCallable;
 import kr.co.zumo.app.lifeplus.view.ToastProvider;
 import kr.co.zumo.app.lifeplus.view.animation.Barrier;
 import kr.co.zumo.app.lifeplus.view.animation.LoadingDriver;
+import kr.co.zumo.app.lifeplus.view.command.AppUpdateCommand;
 import kr.co.zumo.app.lifeplus.view.command.Command;
 import kr.co.zumo.app.lifeplus.view.command.ExitCommand;
 import kr.co.zumo.app.lifeplus.view.command.FinishActivityCommand;
@@ -484,17 +486,17 @@ public abstract class Presenter<M extends Model, V extends IView> implements ILi
   /***********************************
    * Popup - multi device
    ***********************************/
-  private ConfirmDialog multiDeviceDialog;
-
-  private void showPopupMultiDevice() {
-    if (null == multiDeviceDialog) {
-      Log.i("APP# Presenter | showPopupMultiDevice", "|" + " showPopupMultiDevice --------");
-      multiDeviceDialog = DialogProvider.of(getFragmentManager()).showPopupMultiDevice(() -> {
-        multiDeviceDialog = null;
-        // 잠금 화면으로 이동
-        go(ScreenID.PIN_RESET_AUTH_FROM_MULTI_DEVICE);
+  private ConfirmDialog appUpdateDialog;
+
+  private void showPopupAppUpdate() {
+    if (null == appUpdateDialog) {
+      Log.i("APP# Presenter | showPopupAppUpdate", "|" + " showPopupAppUpdate --------");
+      appUpdateDialog = DialogProvider.of(getFragmentManager()).showPopupAppUpdate(() -> {
+        appUpdateDialog = null;
+        // play store
+        onCommand(new AppUpdateCommand(AppUtil.getPackageName()));
       }, () -> {
-        multiDeviceDialog = null;
+        appUpdateDialog = null;
         // 앱 종료
         onCommand(new ExitCommand());
       });
@@ -508,7 +510,7 @@ public abstract class Presenter<M extends Model, V extends IView> implements ILi
 
   private void showPopupInvalidApp() {
     if (null == invalidAppDialog) {
-      Log.i("APP# Presenter | showPopupMultiDevice", "|" + " showPopupMultiDevice --------");
+      Log.i("APP# Presenter | showPopupAppUpdate", "|" + " showPopupAppUpdate --------");
       invalidAppDialog = DialogProvider.of(getFragmentManager()).showErrorDialog(ResourceUtil.getString(R.string.emergency_invalid_app), () -> {
         invalidAppDialog = null;
         // 앱 종료
@@ -703,9 +705,9 @@ public abstract class Presenter<M extends Model, V extends IView> implements ILi
     /*
     멀티 디바이스 사용 등의 경우 api 호출 시 특정 값을 반환하므로 이를 처리한다.
      */
-    if (emergency.getEmergencyCode() == EmergencyBean.CODE_MULTI_DEVICE) {
+    if (emergency.getEmergencyCode() == EmergencyBean.CODE_FORCE_APP_UPDATE) {
       // 멀티 디바이스
-      showPopupMultiDevice();
+      showPopupAppUpdate();
       return true;
     }
     else if (emergency.getEmergencyCode() == EmergencyBean.CODE_INVALID_APP) {

+ 1 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/member/MemberBlockPresenter.java

@@ -136,7 +136,7 @@ public class MemberBlockPresenter extends Presenter<MemberBlockModel, IBlockMemb
       })
       .attribute(dialog -> {
           dialog.setText(R.string.black_member_info_message);
-          dialog.setPositiveButtonLabelId(R.string.emergency_multi_device_button_negative);
+          dialog.setPositiveButtonLabelId(R.string.emergency_app_update_button_negative);
         }
       )
       .show();

+ 4 - 4
app/src/main/res/values/strings.xml

@@ -564,10 +564,10 @@
   <string name="menu_check_message2">상황에 따라 점검 시간이 단축/연장될 수 있습니다.</string>
   <string name="not_show_today">오늘 하루 보지 않기</string>
 
-  <string name="emergency_multi_device_title">동시접속 감지</string>
-  <string name="emergency_multi_device_button_negative">앱 종료</string>
-  <string name="emergency_multi_device_button_positive">계속 사용</string>
-  <string name="emergency_multi_device">새로운 기기에서 동일한 계정 접속이 감지되었습니다. 현재 기기를 계속 사용하시겠어요?</string>
+  <string name="emergency_app_update_title">업데이트 알림</string>
+  <string name="emergency_app_update_button_negative">앱 종료</string>
+  <string name="emergency_app_update_button_positive">업데이트</string>
+  <string name="emergency_app_update">새로운 앱 버젼으로 업데이트가 필요합니다.</string>
   <string name="emergency_invalid_app">App Error</string>
 
   <string name="end">종료</string>