WIP: 規約同意画面を追加
規約同意を一通り実装しました。
規約同意画面は、二転三転しましたが、最終的にAlertDialogとして実装しました。
- 規約同意画面を表示する、AgreementToTermsHelperを追加
- CMSのAPIを利用するために、AgreementToTermsJSON、AgreementToTermsParameters、AgreementToTermsLogicを追加
- ログアウト処理をLogoutHelper(新規作成)に移行
- その他
といった変更を行っています。
-
-
-
unmarked as a Work In Progress
Toggle commit list -
101 switch (confirmResult) { 102 case DISABLE: 103 case EMPTY: 104 case AGREED: 105 // 規約同意画面が開かれなかったら、改めて初期化 106 doShowMainActivity(); 107 break; 108 case FAILED: 109 break; 110 case CONFIRM: 111 // onActivityResultを待つ 112 break; 113 } 114 } 115 116 protected void doShowMainActivity() { -
Developer
この辺りは、差分を見るとぐちゃぐちゃになっていますが、
showMainActivity()
内では規約同意の処理を行い、従来のshowMainActivity()
の処理は、doShowMainActivity()
に移動させています。
-
-
404 } 450 // 規約に同意しなかったので、ログアウト 451 LogoutHelper.logout(this); 405 452 } 406 intent.setClassName(getApplicationContext().getPackageName(), getMainActivityClassName()).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 407 final Uri data = getIntent().getData(); 408 Logger.i(TAG, "call from URI intent : %s", data); 409 if (data != null && data.getScheme() != null) { 410 if (data.getScheme().equals(getString(R.string.scheme_url))) { // カスタムURI 411 intent.putExtra(CID, getLongValFromURI(data, CID)); 412 intent.putExtra(PAGE, (int)getLongValFromURI(data, PAGE)); 413 intent.putExtra(URL, getValFromURI(data, URL)); // Reader 414 intent.putExtra(PASSWORD, getValFromURI(data, PASSWORD)); // Reader 415 intent.putExtra(MESSAGE, getValFromURI(data, MESSAGE)); // Reader 416 } 453 } -
Developer
この辺りは、差分を見るとぐちゃぐちゃになっていますが、
moveToHome()
内では規約同意の処理を行い、従来のmoveToHome()
の処理は、doMoveToHome()
に移動させています。
-
-
107 } 108 } 109 110 // 同意しない 111 private void disagree() { 112 // 確認ダイアログ 113 ABookAlertDialog dialog = AlertDialogUtil.createAlertDialog(this, R.string.app_name); 114 dialog.setMessage(R.string.logout_by_disagree); 115 dialog.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { 116 @Override 117 public void onClick(DialogInterface dialog, int which) { 118 // ログアウトしてよし 119 setResult(RESULT_CANCELED); 120 finish(); 121 } 122 }); -
Developer
from @kim_j
// ①利用規約画面から同意しないボタンタップ時のダイアログ表示ですが、以下のようにOKボタンのアクションができるメソッドが用意されてます。
AlertDialogUtil.showAlertDialog(this, R.string.app_name, R.string.logout_by_disagree, false, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { // ログアウトしてよし setResult(RESULT_CANCELED); finish(); } });
-
-
-
136 * RESULT_CANCELEDなら同意しなかったと判断する 137 * 138 * @param context 呼び出し元アクティビティ 139 * @param requestCode startActivityForResultで使用するリクエスト・コード 140 * @param isNormalSize 端末サイズ指定(スマホならtrue) 141 * @param onFailed 規約情報の取得に失敗したときの処理 142 */ 143 public static Result confirmAgreement(ABVActivity context, int requestCode, boolean isNormalSize, @Nullable final Runnable onFailed) { 144 if (! ABVDataCache.getInstance().serviceOption.isUsableAgreementToTerms()) { 145 // 規約同意オプションが無効な場合、何もしない 146 return Result.DISABLE; 147 } 148 try { 149 context.showProgressPopup(); 150 AgreementToTermsLogic logic = AbstractLogic.getLogic(AgreementToTermsLogic.class); 151 -
Developer
from @kim_j
②サーバ通信する時(利用規約取得API、同意送信API)にはThreadを利用してください。
private void threadLogin() { //」以下のようにここのメソッドを参考にしてください。 showProgressPopup(); CommonExecutor.execute(new Runnable() {}); }
ThreadからUIを描画する時には以下のようにUIThreadに変更する必要があります。
handler.post(new Runnable() {});
-
-
-
137 * 138 * @param context 呼び出し元アクティビティ 139 * @param requestCode startActivityForResultで使用するリクエスト・コード 140 * @param isNormalSize 端末サイズ指定(スマホならtrue) 141 * @param onFailed 規約情報の取得に失敗したときの処理 142 */ 143 public static Result confirmAgreement(ABVActivity context, int requestCode, boolean isNormalSize, @Nullable final Runnable onFailed) { 144 if (! ABVDataCache.getInstance().serviceOption.isUsableAgreementToTerms()) { 145 // 規約同意オプションが無効な場合、何もしない 146 return Result.DISABLE; 147 } 148 try { 149 context.showProgressPopup(); 150 AgreementToTermsLogic logic = AbstractLogic.getLogic(AgreementToTermsLogic.class); 151 152 AgreementToTermsJSON json = logic.getTerms(); -
Developer
from @kim_j
③通信する前にネットワークチェックお願いします。 ABVActivityにcheckNetworkConnectedメソッドが用意されてます。
-
Developer
getTems()メソッドの実装をたどっていくと、AcmsClient#send(String apiUrl, String methodName, HttpParameterObject param)の冒頭で、
if (!networkAdapter.isNetworkConnected()) { Logger.w(TAG, "network is disconnected."); throw new NetworkDisconnectedException(); }
というようにチェックしているので、不要ではないでしょうか?
-
-
-
Toggle commit list
-
-
-
1112 1114 return new TermsOfUseJson(response.httpResponseBody); 1113 1115 } 1114 1116 1117 public AgreementToTermsJSON getTerms(String sid) throws AcmsException, NetworkDisconnectedException { -
Developer
新規メソッドはコメント作成お願いします。
-
-
1112 1114 return new TermsOfUseJson(response.httpResponseBody); 1113 1115 } 1114 1116 1117 public AgreementToTermsJSON getTerms(String sid) throws AcmsException, NetworkDisconnectedException { 1118 HttpResponse response = send(AcmsApis.ApiGetTerms, new AcmsParameters(sid)); 1119 AgreementToTermsJSON json = new AgreementToTermsJSON(response.httpResponseBody); 1120 return json; 1121 } 1122 1123 public AcmsCommonJSON agreeTerms(AgreementToTermsParameters params) throws AcmsException, NetworkDisconnectedException { -
Developer
新規メソッドはコメント作成お願いします。
-
-
351 351 return isServiceOptionEnable(ServiceOptionId.AlcoholCheckerHw); 352 352 } 353 353 354 public boolean isUsableAgreementToTerms() { -
Developer
新規メソッドはコメント作成お願いします。
-
-
98 finish(); 99 } 100 }); 101 } catch (final Exception e) { 102 Logger.e(TAG, e); 103 // 失敗したらアラート表示 104 runOnUiThread(new Runnable() { 105 @Override 106 public void run() { 107 int messageId; 108 if (e instanceof NetworkDisconnectedException) { 109 messageId = R.string.msg_network_offline; 110 } else { 111 messageId = R.string.failed_to_send_agreement; 112 } 113 AlertDialogUtil.showAlertDialog(AgreementToTermsActivity.this, R.string.app_name, messageId, true, null); -
Developer
新しくメソッドを作成したほうが良いかと思いまが、、、 public static void showAlertDialog(Context context, int title, int message) {
-
-
-
140 * バージョンが同じだったら何もしない 141 * 呼び出し側は、onActivityResultで、resultCode が RESULT_OK なら同意した、 142 * RESULT_CANCELEDなら同意しなかったと判断する 143 * 144 * @param context 呼び出し元アクティビティ 145 * @param requestCode startActivityForResultで使用するリクエスト・コード 146 * @param isNormalSize 端末サイズ指定(スマホならtrue) 147 * @param listener 規約同意画面を表示する前に結果が出た時の動作を指定するリスナー 148 */ 149 public static void confirmAgreement(final ABVActivity context, final int requestCode, final boolean isNormalSize, final PreAgreementListener listener) { 150 if (! ABVDataCache.getInstance().serviceOption.isUsableAgreementToTerms()) { 151 // 規約同意オプションが無効な場合、何もしない 152 listener.onDisabled(); 153 return; 154 } 155 context.showProgressPopup(); -
Developer
インターネット非接続チェックし、ダイアログ表示したほうがよいかと、、
-
-
198 /** 199 * 直近の同意した規約のバージョンを保存するメソッド 200 * 201 * @param context SharedPreferenceにアクセスするためのコンテキスト 202 * @param version バージョン文字列 203 */ 204 private static void setLatestVersion(Context context, String version) { 205 PreferenceUtil.putUserPref(context, ABookKeys.AGREEMENT_TO_TERMS_VERSION, version); 206 } 207 208 /** 209 * 規約同意バージョンをクリア(動作確認時に使用するために残しておく) 210 * 211 * @param context 212 */ 213 public static void clearVersion(Context context) { -
Developer
開発用の動作確認用はコミットしないようにしたほうがよいのではないかと思います。 動作確認用で後で削除しないかつ動作確認用がそのまま残したこともあったので、気になりました。
-
Developer
承知しました。
-
-
-
Toggle commit list
-
Toggle commit list
-
marked as a Work In Progress
Toggle commit list -
changed the description
Toggle commit list -
added 3 commits
Toggle commit list -
-
changed the description
Toggle commit list -
closed
Toggle commit list