Browse Source

[스플래시][New] 첫 실행 퍼미션 체크 진행 중

hyodong.min 6 years ago
parent
commit
2ea60b03ab

+ 63 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/activity/ISplashContract.java

@@ -0,0 +1,63 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.activity;
+
+import android.support.v4.app.FragmentActivity;
+
+/**
+ * ISplashContract
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2019. 2. 20.]   [최초 작성]
+ * @since 2019. 2. 20.
+ */
+public interface ISplashContract {
+
+  interface View {
+    FragmentActivity getActivity();
+  }
+
+  interface Presenter {
+
+    void launchLocationPermission(Runnable runnable);
+
+    void launchDeviceLocationPermission(Runnable runnable);
+
+    void launchPushPermission(Runnable runnable);
+
+    void launchAllPermission(Runnable runnable);
+  }
+
+  interface Model {
+    /**
+     * 푸쉬 알림 설정
+     *
+     * @return
+     */
+    boolean isPushContentsAndService();
+
+    void setPushContentsAndService(boolean isEnabled);
+
+    /**
+     * 푸쉬 마케팅 알림 설정
+     *
+     * @return
+     */
+    boolean isPushEventEnabled();
+
+    void setPushEventEnabled(boolean isEnabled);
+
+    /**
+     * 위치 서비스 설정
+     *
+     * @return
+     */
+    boolean isLocationServiceEnabled();
+
+    void setLocationServiceEnabled(boolean isEnabled);
+  }
+}

+ 21 - 2
app/src/main/java/kr/co/zumo/app/lifeplus/activity/SplashActivity.java

@@ -3,6 +3,7 @@ package kr.co.zumo.app.lifeplus.activity;
 import android.content.Context;
 import android.content.Intent;
 import android.net.Uri;
+import android.support.v4.app.FragmentActivity;
 import android.util.Log;
 
 import com.google.firebase.dynamiclinks.FirebaseDynamicLinks;
@@ -13,6 +14,7 @@ import io.reactivex.schedulers.Schedulers;
 import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.application.App;
 import kr.co.zumo.app.lifeplus.model.SuperModel;
+import kr.co.zumo.app.lifeplus.model.SuperModelInit;
 import kr.co.zumo.app.lifeplus.network.NetworkWatcher;
 import kr.co.zumo.app.lifeplus.view.IWaiterCallable;
 import kr.co.zumo.app.lifeplus.view.animation.LoadingDriver;
@@ -27,17 +29,30 @@ import kr.co.zumo.app.lifeplus.view.animation.LoadingDriver;
  * @version 1.0
  * @history 하세미   [2018-09-07]   [최초 작성]
  */
-public class SplashActivity extends ActivityBaseSetup {
+public class SplashActivity extends ActivityBaseSetup implements ISplashContract.View {
 
   CompositeDisposable disposable = new CompositeDisposable();
   ScreenStarter starter;
   DeepLinkParser deepLinkParser;
 
+  ISplashContract.Presenter presenter;
+
   @Override
   protected void setup() {
     Log.d("APP# SplashActivity | setup", "|" + "========== setup..............");
 
 //    Log.d("APP# SplashActivity | setup", "| noti ? " + NotificationManagerCompat.from(getApplicationContext()).areNotificationsEnabled());
+
+    SuperModelInit.instant(getApplicationContext());
+    presenter = new SplashPresenter(new SplashModel(), this);
+
+    presenter.launchAllPermission(() -> {
+      // 권한 처리 종료
+      controlDynamicLink();
+    });
+  }
+
+  private void controlDynamicLink() {
     /**
      * 다이나믹 링크가 지정한 액티비티로 연계되지 않고 항상 런쳐 액티비티로 전달된다.
      * 어쩔 수 없이 런쳐에 해당 코드를 삽입
@@ -58,7 +73,7 @@ public class SplashActivity extends ActivityBaseSetup {
           deepLinkParser.parse(getApplicationContext(), uri, new IWaiterCallable() {
             @Override
             public void showWaiter() {
-              loadingDriver.create(SplashActivity.this, 10);
+              loadingDriver.create(SplashActivity.this, 100);
             }
 
             @Override
@@ -165,5 +180,9 @@ public class SplashActivity extends ActivityBaseSetup {
     doOnLink();
   }
 
+  @Override
+  public FragmentActivity getActivity() {
+    return this;
+  }
 }
 

+ 61 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/activity/SplashModel.java

@@ -0,0 +1,61 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.activity;
+
+import kr.co.zumo.app.lifeplus.model.SuperModel;
+
+/**
+ * SplashModel
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2019. 2. 20.]   [최초 작성]
+ * @since 2019. 2. 20.
+ */
+class SplashModel implements ISplashContract.Model {
+
+  public SplashModel() {
+  }
+
+  /**
+   * 푸쉬 알림 설정
+   *
+   * @return
+   */
+  public boolean isPushContentsAndService() {
+    return SuperModel.getInstance().getPreferences().isPushContentsAndService();
+  }
+
+  public void setPushContentsAndService(boolean isEnabled) {
+    SuperModel.getInstance().getPreferences().setPushContentsAndService(isEnabled);
+  }
+
+  /**
+   * 푸쉬 마케팅 알림 설정
+   *
+   * @return
+   */
+  public boolean isPushEventEnabled() {
+    return SuperModel.getInstance().getPreferences().isPushEventEnabled();
+  }
+
+  public void setPushEventEnabled(boolean isEnabled) {
+    SuperModel.getInstance().getPreferences().setPushEventEnabled(isEnabled);
+  }
+
+  /**
+   * 위치 서비스 설정
+   *
+   * @return
+   */
+  public boolean isLocationServiceEnabled() {
+    return SuperModel.getInstance().getPreferences().isLocationServiceEnabled();
+  }
+
+  public void setLocationServiceEnabled(boolean isEnabled) {
+    SuperModel.getInstance().getPreferences().setLocationServiceEnabled(isEnabled);
+  }
+}

+ 102 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/activity/SplashPresenter.java

@@ -0,0 +1,102 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.activity;
+
+import kr.co.zumo.app.R;
+import kr.co.zumo.app.lifeplus.model.SuperModel;
+import kr.co.zumo.app.lifeplus.util.ResourceUtil;
+import kr.co.zumo.app.lifeplus.view.Event;
+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;
+import kr.co.zumo.app.lifeplus.view.dialog.ICustomConfirmListener;
+
+/**
+ * SplashPresenter
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2019. 2. 20.]   [최초 작성]
+ * @since 2019. 2. 20.
+ */
+public class SplashPresenter implements ISplashContract.Presenter {
+
+  private ISplashContract.Model model;
+  private ISplashContract.View view;
+
+  public SplashPresenter(ISplashContract.Model model, ISplashContract.View view) {
+    this.model = model;
+    this.view = view;
+  }
+
+  @Override
+  public void launchLocationPermission(Runnable runnable) {
+    runnable.run();
+  }
+
+  @Override
+  public void launchDeviceLocationPermission(Runnable runnable) {
+    runnable.run();
+  }
+
+  @Override
+  public void launchPushPermission(Runnable runnable) {
+
+    if (SuperModel.getInstance().getPreferences().getFirstPermissionCompleted()) {
+      // 이미 설정했다면 다음으로 이동
+      runnable.run();
+    }
+    else {
+      SuperModel.getInstance().getPreferences().setFirstPermissionCompleted();
+      // 설정 창 표시
+      launchPushPermissionInternal(runnable);
+    }
+  }
+
+  private void launchPushPermissionInternal(Runnable runnable) {
+    new DialogBuilder<ConfirmDialog, ICustomConfirmListener>(view.getActivity().getSupportFragmentManager(), DialogID.CONFIRM)
+      .listener(new ICustomConfirmListener<ConfirmDialog>() {
+        @Override
+        public void onPositiveResult(ConfirmDialog dialog, Event event) {
+          model.setPushContentsAndService(true);
+          model.setPushEventEnabled(true);
+
+          this.onDialogCanceled(dialog);
+        }
+
+        @Override
+        public void onNegativeResult(ConfirmDialog dialog, Event event) {
+          this.onDialogCanceled(dialog);
+        }
+
+        @Override
+        public void onDialogCanceled(ConfirmDialog dialog) {
+          dialog.dispose();
+          runnable.run();
+        }
+      })
+      .attribute(dialog -> {
+        dialog.setTitleId(R.string.splash_permission_push_title);
+        dialog.setText(ResourceUtil.getString(R.string.splash_permission_push_contents));
+        dialog.setNegativeButtonLabelId(R.string.splash_permission_do_not_accept);
+        dialog.setPositiveButtonLabelId(R.string.splash_permission_accept);
+      })
+      .show();
+  }
+
+  @Override
+  public void launchAllPermission(Runnable runnable) {
+
+    launchPushPermission(() -> {
+      launchDeviceLocationPermission(() -> {
+        launchLocationPermission(() -> {
+          // 권한 처리 종료
+          runnable.run();
+        });
+      });
+    });
+  }
+}

+ 18 - 4
app/src/main/java/kr/co/zumo/app/lifeplus/model/LifeplusPreferences.java

@@ -18,7 +18,7 @@ package kr.co.zumo.app.lifeplus.model;
 public class LifeplusPreferences {
   private BaseSharedPreferences preferences;
 
-  private final static String ENCRYPTION_USER_NO = "encryption_user_no";
+  final static String ENCRYPTION_USER_NO = "encryption_user_no";
   private final static String ZUMO_USER_UPDATE_COMPLETED = "zumo_user_update_completed";
   private final static String USER_ID = "user_id";
   private final static String USER_NAME = "user_name";
@@ -42,6 +42,7 @@ public class LifeplusPreferences {
   private final static String PIN_FAIL_COUNT = "pin_fail_count";
   private final static String GUEST_SHOW_COUNT = "guest_show_count";
   private final static String GUEST_SHOW_COUNT_3 = "guest_show_count_3";
+  private final static String FIRST_PERMISSION = "first_permission";
 
 
   /**
@@ -361,14 +362,26 @@ public class LifeplusPreferences {
   /**
    * 비회원 컨텐츠 처음 3번 봤는지 확인
    */
-  public void setGuestShowCount3(boolean bool) {
-    preferences.put(GUEST_SHOW_COUNT_3, bool);
+  public void setGuestShowCount3() {
+    preferences.put(GUEST_SHOW_COUNT_3, true);
   }
 
   public boolean getGuestShowCount3() {
     return preferences.get(GUEST_SHOW_COUNT_3, false);
   }
 
+
+  /**
+   * 앱 첫 실행 시 퍼미션 체크 했는지 표시
+   */
+  public void setFirstPermissionCompleted() {
+    preferences.put(FIRST_PERMISSION, true);
+  }
+
+  public boolean getFirstPermissionCompleted() {
+    return preferences.get(FIRST_PERMISSION, false);
+  }
+
   /**
    * 설정 초기화
    * -> 초기화가 필요한 값은 여기에서 추가
@@ -387,6 +400,7 @@ public class LifeplusPreferences {
     setPushMessages("");
     setTagLatestList("");
     setGuestShowCount("");
-    setGuestShowCount3(false);
+    preferences.put(GUEST_SHOW_COUNT_3, false);
+    preferences.put(FIRST_PERMISSION, false);
   }
 }

+ 1 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/tool/GuestContentsShowCounter.java

@@ -64,7 +64,7 @@ public class GuestContentsShowCounter extends ReviewCounter {
    * 비회원이 컨텐츠 3번 봤음을 표시
    */
   public void setCompleted3() {
-    preferences.setGuestShowCount3(true);
+    preferences.setGuestShowCount3();
   }
 
   /**

+ 0 - 33
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/main/MainPresenter.java

@@ -618,38 +618,5 @@ public class MainPresenter extends Presenter<MainModel, IMainView> {
 
   private void showNewbiePopup() {
     view.setNewbieLayoutVisible(true);
-//    new DialogBuilder<AddRegistrationDialog, ICustomDialogListener<AddRegistrationDialog>>(getFragmentManager(), DialogID.ADD_REGISTRATION)
-//      .listener(new ICustomDialogListener<AddRegistrationDialog>() {
-//        @Override
-//        public void onDialogResult(AddRegistrationDialog dialog, Event event) {
-//          dialog.dispose();
-//          LinkBean linkBean = new LinkBean();
-//          linkBean.setLinkType(LinkBean.TYPE_MENU);
-//          if (event.getEventId() == Event.EMAIL_CLICK) {
-//            // 비번 확인 -> 회원 정보 화면
-//            linkBean.setLink(LinkInvoker.API_ID_SETTING_MEMBER_INFO);
-//            if (invokeLink(linkBean) == false) {
-//              showToast("Invalid Link");
-//            }
-//          }
-//          else if (event.getEventId() == Event.SPECIAL_CODE_CLICK) {
-//            // 스페셜 코드 등록
-//            linkBean.setLink(LinkInvoker.API_ID_SPECIAL_CODE);
-//            if (invokeLink(linkBean) == false) {
-//              showToast("Invalid Link");
-//            }
-//          }
-//          else {
-//            giveCoin();
-//          }
-//        }
-//
-//        @Override
-//        public void onDialogCanceled(AddRegistrationDialog dialog) {
-//          dialog.dispose();
-//          giveCoin();
-//        }
-//      })
-//      .show();
   }
 }

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

@@ -10,6 +10,15 @@
   <string name="lifeplus_font_serif" translatable="false">serif</string>
   <string name="lifeplus_font_sans_serif" translatable="false">sans-serif</string>
 
+  <string name="splash_permission_push_title">PUSH 알림 허용</string>
+  <string name="splash_permission_push_contents">경고, 사운드 및 아이콘 배지가 알림에 포함될 수 있습니다.</string>
+  <string name="splash_permission_device_location_title">위치 서비스 설정</string>
+  <string name="splash_permission_device_location_contents">설정으로 이동해 위치 서비스를 허용해주세요.</string>
+  <string name="splash_permission_location_title">위치 접근 허용</string>
+  <string name="splash_permission_location_contents">날씨 정보를 받기 위해 앱을 사용하는 동안에만 현재 위치에 접근합니다.</string>
+  <string name="splash_permission_accept">허용</string>
+  <string name="splash_permission_do_not_accept">허용 안 함</string>
+
   <!--공유 관련 설정 -->
   <string name="lifeplus_www_url">"https://www.lifeplus.co.kr/"</string>
   <string name="lifeplus_share_image_url">"https://lifeplus.app/logo/logo_share.png"</string>