/* * The MIT License (MIT) * * Copyright (c) 2014-2015 Umeng, Inc * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ package com.umeng.comm.ui.fragments; import android.content.DialogInterface; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import com.umeng.comm.core.beans.CommConfig; import com.umeng.comm.core.beans.CommUser; import com.umeng.comm.core.login.LoginListener; import com.umeng.comm.core.push.NullPushImpl; import com.umeng.comm.core.push.Pushable; import com.umeng.comm.core.sdkmanager.LoginSDKManager; import com.umeng.comm.core.sdkmanager.PushSDKManager; import com.umeng.comm.core.strategy.logout.InnerLogoutStrategy; import com.umeng.comm.core.utils.CommonUtils; import com.umeng.comm.core.utils.DeviceUtils; import com.umeng.comm.core.utils.ResFinder; import com.umeng.comm.core.utils.ToastMsg; import com.umeng.comm.ui.dialogs.ConfirmDialog; import com.umeng.comm.ui.presenter.impl.NullPresenter; /** * 设置页面,是各个子类型设置页面的入口 */ public class SettingFragment extends BaseFragment<Void, NullPresenter> implements OnClickListener { // 由于开发者可能直接使用Fragment,在退出登录的时候,我们需要回到该Activity private String mContainerClass = null; private boolean mFromRegister = false; @Override protected int getFragmentLayout() { return ResFinder.getLayout("umeng_comm_setting"); } @Override protected void initWidgets() { int userSettingResId = ResFinder.getId("umeng_comm_user_setting"); int settingResId = ResFinder.getId("umeng_comm_msg_setting"); int logoutResId = ResFinder.getId("umeng_comm_logout"); OnClickListener clickListener = (OnClickListener) getActivity(); mRootView.findViewById(userSettingResId).setOnClickListener(clickListener); mRootView.findViewById(settingResId).setOnClickListener(clickListener); // 登出 mRootView.findViewById(logoutResId).setOnClickListener(this); checkConfigPush(mRootView); } public void setContainerClass(String clz) { mContainerClass = clz; } public void setFrom(boolean from) { mFromRegister = from; } /** * 检查是否配置push。如果未配置则不显示push开关</br> */ private void checkConfigPush(View rootView) { Pushable pushImpl = PushSDKManager.getInstance().getCurrentSDK(); // 判断Push是否配置,或者为NullPushImpl实现 if (pushImpl == null || pushImpl instanceof NullPushImpl) { // 没有配置推送,推送设置按钮不可见 rootView.findViewById(ResFinder.getId("umeng_comm_msg_setting")).setVisibility( View.GONE); } } @Override public void onClick(View v) { int logoutResId = ResFinder.getId("umeng_comm_logout"); if (v.getId() == logoutResId) { String title = ResFinder.getString("umeng_comm_setting_logout"); ConfirmDialog.showDialog(getActivity(), title + "?", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { logout(); } }); } } /** * 注销登录。清除保存的用户信息,并调用开发者的注销逻辑</br> */ private void logout() { if (CommonUtils.isActivityAlive(getActivity()) && !DeviceUtils.isNetworkAvailable(getActivity())) { ToastMsg.showShortMsgByResName("umeng_comm_not_network"); return; } // 退出登录的情况 LoginSDKManager.getInstance().getCurrentSDK() .logout(getActivity(), new LoginListener() { @Override public void onStart() { } @Override public void onComplete(int stCode, CommUser userInfo) { Log.d(getTag(), "### 社区登出 , stCode = " + stCode); if (stCode != 200) { ToastMsg.showShortMsgByResName("umeng_comm_logout_failed"); return; } if (mContainerClass == null && !mFromRegister) { Log.e(getTag(), " container class is null..."); return; } String uid = CommConfig.getConfig().loginedUser.id; Log.e(getTag(), "### uid = " + uid); // 关闭推送 Pushable pushable = PushSDKManager.getInstance().getCurrentSDK(); pushable.disable(); // 清空未读消息 CommConfig.getConfig().mMessageCount.clear(); // 清空SDK内部保存的用户信息 CommonUtils.logout(); // 置空用户信息 CommConfig.getConfig().loginedUser = new CommUser(); if (mContainerClass == null) { getActivity().finish(); return; } Class<?> clz; try { clz = Class.forName(mContainerClass); InnerLogoutStrategy strategy = CommConfig.getConfig() .getInnerLogoutStrategy(); if (strategy != null) { strategy.afterLogout(getActivity(), clz); } // finish activity 也作为策略的一部分 // getActivity().finish(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } }); } }