AccountSettingActivity.java 20.4 KB
Newer Older
ydl committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
package com.yidianling.user.mine;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.text.TextUtils;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.ToggleButton;

import com.umeng.socialize.UMAuthListener;
import com.umeng.socialize.UMShareAPI;
import com.umeng.socialize.bean.SHARE_MEDIA;
import com.ydl.webview.H5Params;
import com.ydl.webview.NewH5Activity;
import com.ydl.ydlcommon.base.BaseActivity;
刘鹏 committed
16
import com.ydl.ydlcommon.base.config.HttpConfig;
17
import com.ydl.ydlcommon.bean.StatusBarOptions;
ydl committed
18 19 20
import com.ydl.ydlcommon.data.http.ThrowableConsumer;
import com.ydl.ydlcommon.modular.ModularServiceManager;
import com.ydl.ydlcommon.router.YdlCommonOut;
21
import com.ydl.ydlcommon.utils.LogUtil;
ydl committed
22 23 24 25 26 27 28 29 30 31 32 33
import com.ydl.ydlcommon.utils.SharedPreferencesEditor;
import com.ydl.ydlcommon.utils.remind.ToastHelper;
import com.ydl.ydlcommon.view.JumpTextView;
import com.ydl.ydlcommon.view.RoundCornerButton;
import com.ydl.ydlcommon.view.TitleBar;
import com.ydl.ydlcommon.view.dialog.CommonDialog;
import com.yidianling.common.tools.ToastUtil;
import com.yidianling.im.api.service.IImService;
import com.yidianling.user.LoginUtils;
import com.yidianling.user.R;
import com.yidianling.user.UserConstants;
import com.yidianling.user.UserHelper;
34
import com.yidianling.user.api.event.RefreshRecentContactListEvent;
35
import com.yidianling.user.event.UnRegisterEvent;
ydl committed
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
import com.yidianling.user.event.UpdateBindStatusEvent;
import com.yidianling.user.http.LoginApiRequestUtil;
import com.yidianling.user.http.UserHttp;
import com.yidianling.user.http.UserHttpImpl;
import com.yidianling.user.http.request.BindQQ;
import com.yidianling.user.http.request.BindWX;
import com.yidianling.user.http.request.UnBindThirdLoginParam;
import com.yidianling.user.route.UserIn;
import com.yidianling.user.ui.login.RegisterAndLoginActivity;
import com.yidianling.user.ui.login.VerificationCodeActivity;

import org.jetbrains.annotations.NotNull;

import java.util.Map;
import java.util.Objects;

import de.greenrobot.event.EventBus;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;

/**
 * 账号设置
 * Created by softrice on 15/12/1.
 */
public class AccountSettingActivity extends BaseActivity implements View.OnClickListener {

    TitleBar tb_title;
    JumpTextView jtv_phone;
    JumpTextView jtv_change_password;
    LinearLayout ll_change_password;
    JumpTextView person_notify_setting;
    JumpTextView person_black_setting;
    ToggleButton tb_eare;
    JumpTextView jtv_wechat;
    JumpTextView jtv_qq;
    RoundCornerButton rcb_exit;
72
    JumpTextView tvAccountUnRegister;
ydl committed
73

74 75 76
    @NotNull
    @Override
    public StatusBarOptions getStatusViewOptions() {
77
        return new StatusBarOptions(true, true);
78 79
    }

ydl committed
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
    @Override
    protected int layoutResId() {
        return R.layout.user_mine_activity_account_setting;
    }

    @Override
    protected void initDataAndEvent() {
        tb_title = findViewById(R.id.tb_title);
        jtv_phone = findViewById(R.id.jtv_phone);
        jtv_change_password = findViewById(R.id.jtv_change_password);
        ll_change_password = findViewById(R.id.ll_change_password);
        person_notify_setting = findViewById(R.id.person_notify_setting);
        person_black_setting = findViewById(R.id.person_black_setting);
        tb_eare = findViewById(R.id.tb_eare);
        jtv_wechat = findViewById(R.id.jtv_wechat);
        jtv_qq = findViewById(R.id.jtv_qq);
        rcb_exit = findViewById(R.id.rcb_exit);
97
        tvAccountUnRegister = findViewById(R.id.tv_account_unregister);
ydl committed
98 99 100 101 102 103 104 105

        jtv_phone.setOnClickListener(this);
        jtv_change_password.setOnClickListener(this);
        jtv_wechat.setOnClickListener(this);
        jtv_qq.setOnClickListener(this);
        rcb_exit.setOnClickListener(this);
        person_notify_setting.setOnClickListener(this);
        person_black_setting.setOnClickListener(this);
106
        tvAccountUnRegister.setOnClickListener(this);
ydl committed
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

        init();
        EventBus.getDefault().register(this);

        userHttp = UserHttpImpl.Companion.getInstance();
        //判断用户是否设置密码 去设置 去修改
        getPasswordData();
    }

    /**
     * 判断是否有密码
     */
    @SuppressLint("CheckResult")
    private void getPasswordData() {

        if (TextUtils.isEmpty(UserHelper.INSTANCE.getUserInfo().getUserInfo().getPhone()) || TextUtils.isEmpty(UserHelper.INSTANCE.getUserInfo().getUserInfo().getCountry_code())) {
            return;
        }
        showProgressDialog();
刘鹏 committed
126
        LoginApiRequestUtil.Companion.checkPhoneStatus(UserHelper.INSTANCE.getUserInfo().getUserInfo().getPhone(), UserHelper.INSTANCE.getUserInfo().getUserInfo().getCountry_code(), HttpConfig.Companion.getGET_GATEWAY_BASE_URL())
ydl committed
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(response -> {
                    dismissProgressDialog();
                    if (response == null || response.data == null) {
                        hasPassword(false);
                    } else {
                        if (response.data.getHasPwd() == 1) {
                            hasPassword(true);
                        } else {
                            hasPassword(false);
                        }
                    }
                }, new ThrowableConsumer() {
                    @Override
                    public void accept(@NotNull String msg) {
                        dismissProgressDialog();
                        hasPassword(false);
                    }
                });
    }

    private void hasPassword(boolean hasPassword) {
        if (hasPassword) {
            jtv_change_password.setRightText("去修改");
        } else {
            jtv_change_password.setRightText("去设置");
        }
    }

    /**
     * 更改听筒模式状态
     *
     * @param b
     */
    private void changeEarMode(boolean b) {
        try {
            final String EAR_MODE_KEY = ModularServiceManager.INSTANCE.provide(IImService.class).getEarModeKey();
            final String EAR_MODE_OPEN = ModularServiceManager.INSTANCE.provide(IImService.class).getEarModeOpenType();
            final String EAR_MODE_CLOSE = ModularServiceManager.INSTANCE.provide(IImService.class).getEarModeCloseType();
            SharedPreferencesEditor.putString(EAR_MODE_KEY, b ? EAR_MODE_OPEN : EAR_MODE_CLOSE);
168 169 170
        } catch (Exception e) {
            e.printStackTrace();
        }
ydl committed
171 172 173 174 175 176 177
    }

    void init() {
        tb_eare.setOnCheckedChangeListener((compoundButton, b) -> {
            //设置听筒模式
            try {
                ModularServiceManager.INSTANCE.provide(IImService.class).updateEarMode(b);
178 179 180
            } catch (Exception e) {
                e.printStackTrace();
            }
ydl committed
181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240
            changeEarMode(b);
        });
        jtv_phone.setRightText(isNullString(UserHelper.INSTANCE.getUserInfo().getUserInfo().getPhone()));
        if (TextUtils.isEmpty(UserHelper.INSTANCE.getUserInfo().getUserInfo().getPhone())) {
            ll_change_password.setVisibility(View.GONE);
        } else {
            ll_change_password.setVisibility(View.VISIBLE);
        }

        //如果是壹点灵正版则开放qq登录入口,而是马甲版则屏蔽qq登录入口
        if (YdlCommonOut.Companion.getChannelName().startsWith("android")) {
            jtv_qq.setVisibility(View.VISIBLE);
            if (UserHelper.INSTANCE.getUserInfo().getUserInfo().getBind_qq() == 0) {
                jtv_qq.setRightText("未绑定");
            } else {
                jtv_qq.setRightText("已绑定");
            }
        }

        if (UserHelper.INSTANCE.getUserInfo().getUserInfo().getBind_weixin() == 0) {
            jtv_wechat.setRightText("未绑定");
        } else {
            jtv_wechat.setRightText("已绑定");
        }
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        dismissProgressDialog();
        EventBus.getDefault().unregister(this);
    }

    /**
     * 更新绑定状态
     *
     * @param event
     */
    public void onEvent(UpdateBindStatusEvent event) {
        jtv_phone.setRightText(isNullString(UserHelper.INSTANCE.getUserInfo().getUserInfo().getPhone()));
        if (TextUtils.isEmpty(UserHelper.INSTANCE.getUserInfo().getUserInfo().getPhone())) {
            ll_change_password.setVisibility(View.GONE);
        } else {
            ll_change_password.setVisibility(View.VISIBLE);
        }

        if (UserHelper.INSTANCE.getUserInfo().getUserInfo().getBind_qq() == 0) {
            jtv_qq.setRightText("未绑定");
        } else {
            jtv_qq.setRightText("已绑定");
        }

        if (UserHelper.INSTANCE.getUserInfo().getUserInfo().getBind_weixin() == 0) {
            jtv_wechat.setRightText("未绑定");
        } else {
            jtv_wechat.setRightText("已绑定");
        }
    }

241 242 243
    public void onEvent(UnRegisterEvent event) {
        LogOut();
    }
ydl committed
244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278

    @Override
    public void onClick(View v) {
        int id = v.getId();
        if (id == R.id.jtv_phone) {
            if (UserHelper.INSTANCE.isLogin() && !TextUtils.isEmpty(UserHelper.INSTANCE.getUserInfo().getUserInfo().getPhone())) {
                startActivity(new Intent(this, PwdCheckActivity.class));
            } else {
                bindPhone();

            }
        } else if (id == R.id.jtv_change_password) {
            if (UserHelper.INSTANCE.isLogin() && TextUtils.isEmpty(UserHelper.INSTANCE.getUserInfo().getUserInfo().getPhone()))
                ToastUtil.toastShort("未绑定手机号,无法修改密码");
            else
                changePassword();
        } else if (id == R.id.person_black_setting) {//黑名单管理
            H5Params h5Params = new H5Params(UserConstants.INSTANCE.getMy_BLACK(), null);
            NewH5Activity.start(this, h5Params);
        } else if (id == R.id.jtv_wechat) {
            if (UserHelper.INSTANCE.getUserInfo().getUserInfo().getBind_weixin() == 0) {
                bindWx();
            } else {
                showEnsureDialog(1);
            }
        } else if (id == R.id.jtv_qq) {
            if (UserHelper.INSTANCE.getUserInfo().getUserInfo().getBind_qq() == 0) {
                bindQQ();
            } else {
                showEnsureDialog(2);
            }
        } else if (id == R.id.rcb_exit) {
            LogOut();
        } else if (id == R.id.person_notify_setting) {
            startActivity(new Intent(this, NotificationsSettingActivity.class));
279 280
        } else if (id == R.id.tv_account_unregister) {
            startActivity(new Intent(this, AccountUnRegisterActivity.class));
ydl committed
281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319
        }
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
    }

    /**
     * 退出登录
     */
    private void LogOut() {
        //清除UserInfo
        UserHelper.INSTANCE.setUserinfo(null);
        UserIn.INSTANCE.clearImData();

        LoginUtils.logout();
        EventBus.getDefault().post(new RefreshRecentContactListEvent());
        finish();
    }

    private UserHttp userHttp;

    /**
     * 绑定QQ
     */
    private void bindQQ() {
        showProgressDialog("绑定QQ中...");
        UMShareAPI.get(this).doOauthVerify(this, SHARE_MEDIA.QQ, new UMAuthListener() {
            @Override
            public void onStart(SHARE_MEDIA share_media) {

            }

            @SuppressLint("CheckResult")
            @Override
            public void onComplete(SHARE_MEDIA share_media, int i, Map<String, String> map) {
320
                if (map == null || map.size() == 0) {
ydl committed
321 322 323 324 325 326
                    return;
                }
                userHttp.bindQQ(new BindQQ(map.get("openid"), map.get("unionid")))
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribe(o -> {
                            dismissProgressDialog();
327
                            if (o.code == 0) {
ydl committed
328 329 330
                                Objects.requireNonNull(UserHelper.INSTANCE.getUserInfo().getUserInfo()).setBind_qq(1);
                                jtv_qq.setRightText("已绑定");
                                ToastUtil.toastShort("绑定成功");
331
                            } else {
ydl committed
332 333 334 335 336
                                ToastHelper.Companion.show(o.msg);
                            }
                        }, new ThrowableConsumer() {
                            @Override
                            public void accept(@NotNull String msg) {
337 338
                                dismissProgressDialog();
                                ToastHelper.Companion.show(msg);
ydl committed
339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363
                            }
                        });

                UMShareAPI.get(AccountSettingActivity.this).deleteOauth(AccountSettingActivity.this, SHARE_MEDIA.QQ, this);
            }

            @Override
            public void onError(SHARE_MEDIA share_media, int i, Throwable throwable) {
                dismissProgressDialog();
                ToastUtil.toastShort(throwable.getMessage());
            }

            @Override
            public void onCancel(SHARE_MEDIA share_media, int i) {
                dismissProgressDialog();
            }
        });

    }

    /**
     * 绑定微信
     */
    private void bindWx() {
        showProgressDialog("绑定微信中...");
364
        UMShareAPI.get(this).getPlatformInfo(this, SHARE_MEDIA.WEIXIN, new UMAuthListener() {
ydl committed
365 366 367 368 369 370 371 372 373 374 375 376 377 378
            @Override
            public void onStart(SHARE_MEDIA share_media) {

            }

            @SuppressLint("CheckResult")
            @Override
            public void onComplete(SHARE_MEDIA share_media, int i, Map<String, String> map) {
                if (map == null||map.size()==0) {
                    return;
                }
                String openid = map.get("openid");
                String unionid = map.get("unionid");
                userHttp.bindWX(new BindWX(openid, unionid))
379
                        .subscribeOn(Schedulers.io())
ydl committed
380 381 382
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribe(o -> {
                            dismissProgressDialog();
383
                            if (o.code == 0) {
ydl committed
384 385 386
                                UserHelper.INSTANCE.getUserInfo().getUserInfo().setBind_weixin(1);
                                jtv_wechat.setRightText("已绑定");
                                ToastUtil.toastShort("绑定成功");
387
                            } else {
ydl committed
388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453
                                ToastHelper.Companion.show(o.msg);
                            }
                        }, new ThrowableConsumer() {
                            @Override
                            public void accept(@NotNull String msg) {
                                dismissProgressDialog();
                            }
                        });

                UMShareAPI.get(AccountSettingActivity.this).deleteOauth(AccountSettingActivity.this, SHARE_MEDIA.WEIXIN, this);
            }

            @Override
            public void onError(SHARE_MEDIA share_media, int i, Throwable throwable) {
                dismissProgressDialog();
                ToastUtil.toastShort(throwable.getMessage());
            }

            @Override
            public void onCancel(SHARE_MEDIA share_media, int i) {
                dismissProgressDialog();
            }
        });
    }

    /**
     * 确认弹窗
     *
     * @param type 1-微信 2-qq
     */
    private void showEnsureDialog(int type) {
        String msg;
        if (type == 1) {
            msg = "您确认要解绑微信?";
        } else {
            msg = "您确认要解绑QQ?";
        }

        CommonDialog.create(this)
                .setMessage(msg)
                .setLeftOnclick("取消", v -> {

                })
                .setRightClick("确认", v -> checkUnbind(type))
                .setCancelAble(true)
                .show();
    }

    /**
     * 判断是否满足解绑条件
     *
     * @param type 1-微信 2-qq
     */
    private void checkUnbind(int type) {
        //没有绑定手机号,且微信和qq只有一个绑定了,解绑前需要再次弹窗确认
        if (TextUtils.isEmpty(UserHelper.INSTANCE.getUserInfo().getUserInfo().getPhone())) {
            int flag = 0;
            if (UserHelper.INSTANCE.getUserInfo().getUserInfo().getBind_weixin() == 1) {
                flag++;
            }
            if (UserHelper.INSTANCE.getUserInfo().getUserInfo().getBind_qq() == 1) {
                flag++;
            }
            if (flag != 2) {
                //满足再次弹窗确认条件
                noticeDialog(type);
454 455
            }else{
                unbindThirdLogin(type);
ydl committed
456 457 458 459
            }
        } else {
            unbindThirdLogin(type);
        }
460

ydl committed
461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527
    }

    /**
     * 再次弹窗确认提示
     *
     * @param type 1-微信 2-qq
     */
    private void noticeDialog(int type) {
        CommonDialog.create(this)
                .setMessage("由于您账号未绑定手机号,取消绑定后账号信息将被清除,确认要解绑?")
                .setLeftOnclick("取消", v -> {

                })
                .setRightClick("确认", v -> unbindThirdLogin(type))
                .setCancelAble(true)
                .show();
    }

    /**
     * 解绑第三方登录账号
     *
     * @param type 1-微信 2-qq
     */
    @SuppressLint("CheckResult")
    private void unbindThirdLogin(int type) {
        UnBindThirdLoginParam param = new UnBindThirdLoginParam();
        param.type = type;
        showProgressDialog();
        userHttp.unBindThirdLogin(param)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(response -> {
                    dismissProgressDialog();
                    if (response != null && response.code == 200) {
                        ToastUtil.toastShort("解绑成功");
                        if (type == 1) {
                            Objects.requireNonNull(UserHelper.INSTANCE.getUserInfo().getUserInfo()).setBind_weixin(0);
                            jtv_wechat.setRightText("未绑定");
                        } else {
                            Objects.requireNonNull(UserHelper.INSTANCE.getUserInfo().getUserInfo()).setBind_qq(0);
                            jtv_qq.setRightText("未绑定");
                        }
                    } else {
                        ToastUtil.toastShort(response.msg);
                    }
                }, new ThrowableConsumer() {
                    @Override
                    public void accept(@NotNull String msg) {
                        dismissProgressDialog();
                        ToastUtil.toastShort(msg);
                    }
                });

    }

    /**
     * 修改密码
     */
    private void changePassword() {
        //跳转到新的修改密码页面
        VerificationCodeActivity.Companion.start(this, UserHelper.INSTANCE.getUserInfo().getUserInfo().getPhone(), UserHelper.INSTANCE.getUserInfo().getUserInfo().getCountry_code(), VerificationCodeActivity.Companion.getSTATUS_FORGET_PWD());
    }

    /**
     * 绑定手机
     */
    private void bindPhone() {
528
        RegisterAndLoginActivity.Companion.start(this,true);
ydl committed
529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557
    }

    private String isNullString(String str) {
        if (TextUtils.isEmpty(str))
            return "未绑定";
        else {
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < str.length(); i++) {
                if (i >= 3 && i <= 5) {
                    sb.append("*");
                } else {
                    sb.append(str.charAt(i));
                }
            }
            return sb.toString();
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        //
        jtv_phone.setRightText(isNullString(UserHelper.INSTANCE.getUserInfo().getUserInfo().getPhone()));
        try {
            if (ModularServiceManager.INSTANCE.provide(IImService.class).getEarModeIsOpen()) {
                tb_eare.setChecked(true);
            } else {
                tb_eare.setChecked(false);
            }
558 559 560
        } catch (Exception e) {
            e.printStackTrace();
        }
ydl committed
561 562 563 564 565 566 567 568 569 570 571 572 573 574

        if (!TextUtils.isEmpty(UserHelper.INSTANCE.getUserInfo().getUserInfo().getPhone())) {
            ll_change_password.setVisibility(View.VISIBLE);
        } else {
            ll_change_password.setVisibility(View.GONE);
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
    }

}