com.yuntongxun.schoolgroup.ui.LauncherActivity.java Source code

Java tutorial

Introduction

Here is the source code for com.yuntongxun.schoolgroup.ui.LauncherActivity.java

Source

/*
 *  Copyright (c) 2015 The CCP project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license
 *  that can be found in the LICENSE file in the root of the web site.
 *
 *   http://www.yuntongxun.com
 *
 *  An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */
package com.yuntongxun.schoolgroup.ui;

import java.io.InvalidClassException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;

import com.umeng.analytics.MobclickAgent;
import com.yuntongxun.schoolgroup.R;
import com.yuntongxun.schoolgroup.common.CCPAppManager;
import com.yuntongxun.schoolgroup.common.ECContentObservers;
import com.yuntongxun.schoolgroup.common.base.CCPCustomViewPager;
import com.yuntongxun.schoolgroup.common.base.CCPLauncherUITabView;
import com.yuntongxun.schoolgroup.common.base.OverflowAdapter;
import com.yuntongxun.schoolgroup.common.base.OverflowAdapter.OverflowItem;
import com.yuntongxun.schoolgroup.common.base.OverflowHelper;
import com.yuntongxun.schoolgroup.common.dialog.ECAlertDialog;
import com.yuntongxun.schoolgroup.common.dialog.ECProgressDialog;
import com.yuntongxun.schoolgroup.common.utils.CrashHandler;
import com.yuntongxun.schoolgroup.common.utils.DemoUtils;
import com.yuntongxun.schoolgroup.common.utils.ECNotificationManager;
import com.yuntongxun.schoolgroup.common.utils.ECPreferenceSettings;
import com.yuntongxun.schoolgroup.common.utils.ECPreferences;
import com.yuntongxun.schoolgroup.common.utils.LogUtil;
import com.yuntongxun.schoolgroup.core.ClientUser;
import com.yuntongxun.schoolgroup.core.ContactsCache;
import com.yuntongxun.schoolgroup.storage.ContactSqlManager;
import com.yuntongxun.schoolgroup.storage.ConversationSqlManager;
import com.yuntongxun.schoolgroup.storage.GroupNoticeSqlManager;
import com.yuntongxun.schoolgroup.storage.GroupSqlManager;
import com.yuntongxun.schoolgroup.storage.IMessageSqlManager;
import com.yuntongxun.schoolgroup.ui.account.LoginActivity;
import com.yuntongxun.schoolgroup.ui.chatting.ChattingActivity;
import com.yuntongxun.schoolgroup.ui.chatting.CustomerServiceHelper;
import com.yuntongxun.schoolgroup.ui.chatting.IMChattingHelper;
import com.yuntongxun.schoolgroup.ui.contact.ContactLogic;
import com.yuntongxun.schoolgroup.ui.contact.ECContacts;
import com.yuntongxun.schoolgroup.ui.contact.MobileContactActivity;
import com.yuntongxun.schoolgroup.ui.contact.MobileContactSelectActivity;
import com.yuntongxun.schoolgroup.ui.group.BaseSearch;
import com.yuntongxun.schoolgroup.ui.group.CreateGroupActivity;
import com.yuntongxun.schoolgroup.ui.group.ECDiscussionActivity;
import com.yuntongxun.schoolgroup.ui.group.GroupNoticeActivity;
import com.yuntongxun.schoolgroup.ui.settings.SettingPersionInfoActivity;
import com.yuntongxun.schoolgroup.ui.settings.SettingsActivity;
import com.yuntongxun.ecsdk.ECChatManager;
import com.yuntongxun.ecsdk.ECDevice;
import com.yuntongxun.ecsdk.ECError;
import com.yuntongxun.ecsdk.SdkErrorCode;
import com.yuntongxun.ecsdk.im.ECGroup;
import com.yuntongxun.ecsdk.platformtools.ECHandlerHelper;

/**
 * ?????????
 */
@ActivityTransition(3)
public class LauncherActivity extends ECFragmentActivity implements View.OnClickListener, View.OnLongClickListener,
        ConversationListFragment.OnUpdateMsgUnreadCountsListener {

    private static final String TAG = "LauncherActivity";
    /**
     * ?ECLauncherUI 
     */
    public static LauncherActivity mLauncherUI;

    /**
     * ?ECLauncherUI
     */
    public static int mLauncherInstanceCount = 0;

    /**
     * ??RootView
     */
    public View mLauncherView;

    /**
     * LauncherUI ?View ,?View Tab
     */
    private CCPLauncherUITabView mLauncherUITabView;
    /**
     * TabView??
     */
    private CCPCustomViewPager mCustomViewPager;

    /**
     * ????
     */
    public LauncherViewPagerAdapter mLauncherViewPagerAdapter;

    private OverflowHelper mOverflowHelper;

    /**
     * ?TabView Fragment
     */
    private int mCurrentItemPosition = -1;

    /**
     * ??()
     */
    private static final int TAB_CONVERSATION = 0;

    /**
     * ?(?)
     */
    private static final int TAB_ADDRESS = 1;

    /**
     * ?
     */
    private static final int TAB_GROUP = 2;
    private static final int TAB_DISCUSSION_GROUP = 3;

    /**
     * {@link CCPLauncherUITabView} ???
     */
    private boolean mTabViewInit = false;

    /**
     * TabView
     */
    private final HashMap<Integer, Fragment> mTabViewCache = new HashMap<Integer, Fragment>();
    private OverflowAdapter.OverflowItem[] mItems;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        int pid = android.os.Process.myPid();

        Intent intentGroup = new Intent();
        intentGroup.setAction("com.yuntongxun.ecdemo.inited");
        sendBroadcast(intentGroup);
        if (mLauncherUI != null) {
            LogUtil.i(LogUtil.getLogUtilsTag(LauncherActivity.class), "finish last LauncherUI");
            mLauncherUI.finish();
        }
        //      CCPAppManager.addActivityUI(mLauncherUI);
        mLauncherUI = this;
        mLauncherInstanceCount++;
        super.onCreate(savedInstanceState);
        initWelcome();
        mOverflowHelper = new OverflowHelper(this);
        // umeng
        MobclickAgent.updateOnlineConfig(this);
        MobclickAgent.setDebugMode(true);
        // ??
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        ECContentObservers.getInstance().initContentObserver();
    }

    @Override
    protected boolean isEnableSwipe() {
        return false;
    }

    private boolean mInit = false;

    private Runnable initRunnable = new Runnable() {
        @Override
        public void run() {
            mInit = false;
            initLauncherUIView();
        }
    };

    private void initWelcome() {

        Intent intentGroup = new Intent();
        intentGroup.setAction("com.yuntongxun.ecdemo.inited");
        sendBroadcast(intentGroup);

        if (!mInit) {
            mInit = true;
            setContentView(R.layout.splash_activity);

            // ??splash????
            ECHandlerHelper.postDelayedRunnOnUI(initRunnable, 3000);
        }
    }

    /**
     * ??UI
     */
    private void initLauncherUIView() {
        mLauncherView = getLayoutInflater().inflate(R.layout.main_tab, null);
        setContentView(mLauncherView);

        mTabViewInit = true;
        mCustomViewPager = (CCPCustomViewPager) findViewById(R.id.pager);
        mCustomViewPager.setOffscreenPageLimit(4);

        if (mLauncherUITabView != null) {
            mLauncherUITabView.setOnUITabViewClickListener(null);
            mLauncherUITabView.setVisibility(View.VISIBLE);
        }
        mLauncherUITabView = (CCPLauncherUITabView) findViewById(R.id.laucher_tab_top);
        mCustomViewPager.setSlideEnabled(true);
        mLauncherViewPagerAdapter = new LauncherViewPagerAdapter(this, mCustomViewPager);
        mLauncherUITabView.setOnUITabViewClickListener(mLauncherViewPagerAdapter);

        findViewById(R.id.btn_plus).setOnClickListener(this);
        findViewById(R.id.btn_plus).setOnLongClickListener(this);
        ctrlViewTab(0);

        Intent intent = getIntent();
        if (intent != null && intent.getIntExtra("launcher_from", -1) == 1) {
            // ???
            checkFirstUse();
        }

        // ?
        doInitAction();
    }

    private void settingPersonInfo() {
        if (isUpSetPersonInfo()) {
            Intent settingAction = new Intent(this, SettingPersionInfoActivity.class);
            settingAction.putExtra("from_regist", true);
            startActivityForResult(settingAction, 0x2a);
        }
    }

    public static boolean isUpSetPersonInfo() {
        ClientUser user = CCPAppManager.getClientUser();
        return (user != null && user.getpVersion() == 0);
    }

    /**
     * ?
     */
    private void checkOffineMessage() {
        if (SDKCoreHelper.getConnectState() != ECDevice.ECConnectState.CONNECT_SUCCESS) {
            return;
        }
        ECHandlerHelper handlerHelper = new ECHandlerHelper();
        handlerHelper.postDelayedRunnOnThead(new Runnable() {
            @Override
            public void run() {
                boolean result = IMChattingHelper.isSyncOffline();
                if (!result) {
                    ECHandlerHelper.postRunnOnUI(new Runnable() {
                        @Override
                        public void run() {
                            disPostingLoading();
                        }
                    });
                    IMChattingHelper.checkDownFailMsg();
                }
            }
        }, 1000);
    }

    private boolean isFirstUse() {
        boolean firstUse = ECPreferences.getSharedPreferences().getBoolean(
                ECPreferenceSettings.SETTINGS_FIRST_USE.getId(),
                ((Boolean) ECPreferenceSettings.SETTINGS_FIRST_USE.getDefaultValue()).booleanValue());
        return firstUse;
    }

    private void checkFirstUse() {
        boolean firstUse = isFirstUse();

        // Display the welcome message?
        if (firstUse) {
            if (IMChattingHelper.isSyncOffline()) {
                mPostingdialog = new ECProgressDialog(this, R.string.tab_loading);
                mPostingdialog.setCanceledOnTouchOutside(false);
                mPostingdialog.setCancelable(false);
                mPostingdialog.show();
            }
            // Don't display again this dialog
            try {
                ECPreferences.savePreference(ECPreferenceSettings.SETTINGS_FIRST_USE, Boolean.FALSE, true);
            } catch (Exception e) {
                /** NON BLOCK **/
            }
        }
    }

    /**
     * ?TabFragment Index Fragment
     *
     * @param tabIndex
     * @return
     */
    public final BaseFragment getTabView(int tabIndex) {
        LogUtil.d(LogUtil.getLogUtilsTag(LauncherActivity.class), "get tab index " + tabIndex);
        if (tabIndex < 0) {
            return null;
        }

        if (mTabViewCache.containsKey(Integer.valueOf(tabIndex))) {
            return (BaseFragment) mTabViewCache.get(Integer.valueOf(tabIndex));
        }

        BaseFragment mFragment = null;
        switch (tabIndex) {
        case TAB_CONVERSATION:
            mFragment = (TabFragment) Fragment.instantiate(this, ConversationListFragment.class.getName(), null);
            break;
        case TAB_ADDRESS:
            mFragment = (TabFragment) Fragment.instantiate(this,
                    MobileContactActivity.MobileContactFragment.class.getName(), null);
            break;
        case TAB_GROUP:

            mFragment = (TabFragment) Fragment.instantiate(this, GroupListFragment.class.getName(), null);
            break;
        case TAB_DISCUSSION_GROUP:

            mFragment = (TabFragment) Fragment.instantiate(this, DiscussionListFragment.class.getName(), null);
            break;

        default:
            break;
        }

        if (mFragment != null) {
            mFragment.setActionBarActivity(this);
        }
        mTabViewCache.put(Integer.valueOf(tabIndex), mFragment);
        return mFragment;
    }

    /**
     * ????Fragment index ??
     *
     * @param index ?Fragmentindex
     */
    public void ctrlViewTab(int index) {

        LogUtil.d(LogUtil.getLogUtilsTag(LauncherActivity.class),
                "change tab to " + index + ", cur tab " + mCurrentItemPosition + ", has init tab " + mTabViewInit
                        + ", tab cache size " + mTabViewCache.size());
        if ((!mTabViewInit || index < 0)
                || (mLauncherViewPagerAdapter != null && index > mLauncherViewPagerAdapter.getCount() - 1)) {
            return;
        }

        if (mCurrentItemPosition == index) {
            return;
        }
        mCurrentItemPosition = index;

        if (mLauncherUITabView != null) {
            mLauncherUITabView.doChangeTabViewDisplay(mCurrentItemPosition);
        }

        if (mCustomViewPager != null) {
            mCustomViewPager.setCurrentItem(mCurrentItemPosition, false);
        }

    }

    /**
     * ???voip???
     */
    void initOverflowItems() {
        if (mItems == null) {
            if (SDKCoreHelper.getInstance().isSupportMedia()) {
                mItems = new OverflowAdapter.OverflowItem[7];
                mItems[0] = new OverflowAdapter.OverflowItem(getString(R.string.main_plus_inter_phone));
                mItems[1] = new OverflowAdapter.OverflowItem(getString(R.string.main_plus_meeting_voice));
                mItems[2] = new OverflowAdapter.OverflowItem(getString(R.string.main_plus_meeting_video));
                mItems[3] = new OverflowAdapter.OverflowItem(getString(R.string.main_plus_groupchat));
                mItems[4] = new OverflowAdapter.OverflowItem(getString(R.string.main_plus_querygroup));
                mItems[5] = new OverflowAdapter.OverflowItem(getString(R.string.create_discussion));
                mItems[6] = new OverflowAdapter.OverflowItem(getString(R.string.main_plus_settings));
                //            mItems[7] = new OverflowAdapter.OverflowItem(getString(R.string.main_plus_mcmessage));
            } else {
                mItems = new OverflowAdapter.OverflowItem[4];
                mItems[0] = new OverflowAdapter.OverflowItem(getString(R.string.main_plus_groupchat));
                mItems[1] = new OverflowAdapter.OverflowItem(getString(R.string.main_plus_querygroup));
                mItems[2] = new OverflowAdapter.OverflowItem(getString(R.string.create_discussion));
                mItems[3] = new OverflowAdapter.OverflowItem(getString(R.string.main_plus_settings));
                //            mItems[4] = new OverflowAdapter.OverflowItem(getString(R.string.main_plus_mcmessage));
            }
        }

    }

    @Override
    public boolean onMenuOpened(int featureId, Menu menu) {
        controlPlusSubMenu();
        return false;
    }

    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        LogUtil.d(LogUtil.getLogUtilsTag(LauncherActivity.class), " onKeyDown");

        if ((event.getKeyCode() == KeyEvent.KEYCODE_BACK) && event.getAction() == KeyEvent.ACTION_UP) {
            // dismiss PlusSubMenuHelper
            if (mOverflowHelper != null && mOverflowHelper.isOverflowShowing()) {
                mOverflowHelper.dismiss();
                return true;
            }
        }

        // ?menu??
        if ((event.getKeyCode() == KeyEvent.KEYCODE_BACK) && event.getAction() == KeyEvent.ACTION_DOWN) {
            doTaskToBackEvent();
        }

        try {

            return super.dispatchKeyEvent(event);
        } catch (Exception e) {
            LogUtil.e(LogUtil.getLogUtilsTag(LauncherActivity.class),
                    "dispatch key event catch exception " + e.getMessage());
        }

        return false;
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (internalReceiver != null) {
            unregisterReceiver(internalReceiver);
        }
    }

    @Override
    protected void onStart() {
        super.onStart();
        Intent intentGroup = new Intent();
        intentGroup.setAction("com.yuntongxun.ecdemo.inited");
        sendBroadcast(intentGroup);

    }

    @Override
    protected void onResume() {
        LogUtil.i(LogUtil.getLogUtilsTag(LauncherActivity.class), "onResume start");
        super.onResume();

        Intent intentGroup = new Intent();
        intentGroup.setAction("com.yuntongxun.ecdemo.inited");
        sendBroadcast(intentGroup);

        CrashHandler.getInstance().setContext(this);
        // 
        MobclickAgent.onResume(this);

        boolean fullExit = ECPreferences.getSharedPreferences()
                .getBoolean(ECPreferenceSettings.SETTINGS_FULLY_EXIT.getId(), false);
        if (fullExit) {
            try {
                ECHandlerHelper.removeCallbacksRunnOnUI(initRunnable);
                ECPreferences.savePreference(ECPreferenceSettings.SETTINGS_FULLY_EXIT, false, true);
                ContactsCache.getInstance().stop();
                CCPAppManager.setClientUser(null);
                ECDevice.unInitial();
                finish();

                android.os.Process.killProcess(android.os.Process.myPid());
                System.exit(0);

                return;
            } catch (InvalidClassException e) {
                e.printStackTrace();
            }
        }
        if (mLauncherUITabView == null) {
            String account = getAutoRegistAccount();
            if (TextUtils.isEmpty(account)) {
                startActivity(new Intent(this, LoginActivity.class));
                finish();
                return;
            }
            // ??
            registerReceiver(
                    new String[] { IMChattingHelper.INTENT_ACTION_SYNC_MESSAGE, SDKCoreHelper.ACTION_SDK_CONNECT });
            ClientUser user = new ClientUser("").from(account);
            CCPAppManager.setClientUser(user);
            if (!ContactSqlManager.hasContact(user.getUserId())) {
                ECContacts contacts = new ECContacts();
                contacts.setClientUser(user);
                ContactSqlManager.insertContact(contacts);
            }

            if (SDKCoreHelper.getConnectState() != ECDevice.ECConnectState.CONNECT_SUCCESS
                    && !SDKCoreHelper.isKickOff()) {

                ContactsCache.getInstance().load();

                if (!TextUtils.isEmpty(getAutoRegistAccount())) {
                    SDKCoreHelper.init(this);
                }
            }
            // ??Tab?
            if (!mInit) {
                initLauncherUIView();
            }
        }
        OnUpdateMsgUnreadCounts();
        getTopContacts();
    }

    private void getTopContacts() {

        final ArrayList<String> arrayList = ConversationSqlManager.getInstance().qureyAllSession();
        ECChatManager chatManager = ECDevice.getECChatManager();
        if (chatManager == null) {
            return;
        }
        chatManager.getSessionsOfTop(new ECChatManager.OnGetSessionsOfTopListener() {
            @Override
            public void onGetSessionsOfTopResult(ECError error, String[] sessionsArr) {
                if (error.errorCode == SdkErrorCode.REQUEST_SUCCESS) {
                    for (String item : sessionsArr) {
                        ConversationSqlManager.updateSessionToTop(item, true);
                    }
                    List<String> list = Arrays.asList(sessionsArr);
                    for (String a : arrayList) {
                        if (!list.contains(a)) {
                            ConversationSqlManager.updateSessionToTop(a, false);
                        }
                    }
                }
            }
        });
    }

    public void handlerKickOff(String kickoffText) {
        if (isFinishing()) {
            return;
        }
        ECAlertDialog buildAlert = ECAlertDialog.buildAlert(this, kickoffText,
                getString(R.string.dialog_btn_confim), new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        ECNotificationManager.getInstance().forceCancelNotification();
                        restartAPP();
                    }
                });
        buildAlert.setTitle("");
        buildAlert.setCanceledOnTouchOutside(false);
        buildAlert.setCancelable(false);
        buildAlert.show();
    }

    public void restartAPP() {

        ECDevice.unInitial();
        Intent intent = new Intent(this, LauncherActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
        android.os.Process.killProcess(android.os.Process.myPid());
    }

    /**
     * ??
     *
     * @return
     */
    private String getAutoRegistAccount() {
        SharedPreferences sharedPreferences = ECPreferences.getSharedPreferences();
        ECPreferenceSettings registAuto = ECPreferenceSettings.SETTINGS_REGIST_AUTO;
        String registAccount = sharedPreferences.getString(registAuto.getId(),
                (String) registAuto.getDefaultValue());
        return registAccount;
    }

    private void controlPlusSubMenu() {
        if (mOverflowHelper == null) {
            return;
        }

        if (mOverflowHelper.isOverflowShowing()) {
            mOverflowHelper.dismiss();
            return;
        }

        if (mItems == null) {
            initOverflowItems();
        }

        mOverflowHelper.setOverflowItems(mItems);
        mOverflowHelper.setOnOverflowItemClickListener(mOverflowItemCliclListener);
        mOverflowHelper.showAsDropDown(findViewById(R.id.btn_plus));
    }

    @Override
    protected void onPause() {
        LogUtil.d(LogUtil.getLogUtilsTag(getClass()), "KEVIN Launcher onPause");
        super.onPause();
        // ?API
        MobclickAgent.onPause(this);
    }

    /**
     * ????
     */
    public void doTaskToBackEvent() {
        moveTaskToBack(true);

    }

    @Override
    public void OnUpdateMsgUnreadCounts() {
        int unreadCount = IMessageSqlManager.qureyAllSessionUnreadCount();
        int notifyUnreadCount = IMessageSqlManager.getUnNotifyUnreadCount();
        int count = unreadCount;
        if (unreadCount >= notifyUnreadCount) {
            count = unreadCount - notifyUnreadCount;
        }
        if (mLauncherUITabView != null) {
            mLauncherUITabView.updateMainTabUnread(count);
        }
    }

    @Override
    public boolean onLongClick(View v) {
        CCPAppManager.showCodecConfigMenu(this);
        return true;
    }

    /**
     * TabView ??
     *
     * @author ?
     * @version 4.0
     * @date 2014-12-4
     */
    private class LauncherViewPagerAdapter extends FragmentStatePagerAdapter
            implements ViewPager.OnPageChangeListener, CCPLauncherUITabView.OnUITabViewClickListener {
        /**
           *
           */
        private int mClickTabCounts;
        private GroupListFragment mGroupListFragment;
        private DiscussionListFragment mDissListFragment;

        private final ViewPager mViewPager;
        private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();

        final class TabInfo {
            private final String tag;
            private final Class<?> clss;
            private final Bundle args;

            TabInfo(String _tag, Class<?> _class, Bundle _args) {
                tag = _tag;
                clss = _class;
                args = _args;
            }
        }

        public LauncherViewPagerAdapter(FragmentActivity fm, ViewPager pager) {
            super(fm.getSupportFragmentManager());
            mViewPager = pager;
            mViewPager.setAdapter(this);
            mViewPager.setOnPageChangeListener(this);
        }

        public void addTab(String tabSpec, Class<?> clss, Bundle args) {
            String tag = tabSpec;

            TabInfo info = new TabInfo(tag, clss, args);
            mTabs.add(info);
            notifyDataSetChanged();
        }

        @Override
        public int getCount() {
            return 4;
        }

        @Override
        public Fragment getItem(int position) {
            return mLauncherUI.getTabView(position);
        }

        @Override
        public void onPageScrollStateChanged(int state) {
            LogUtil.d(LogUtil.getLogUtilsTag(LauncherViewPagerAdapter.class),
                    "onPageScrollStateChanged state = " + state);

            if (state != ViewPager.SCROLL_STATE_IDLE || mGroupListFragment == null) {
                return;
            }
            if (mGroupListFragment != null) {
                mGroupListFragment.onGroupFragmentVisible(true);
                mGroupListFragment = null;
            }
        }

        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            LogUtil.d(LogUtil.getLogUtilsTag(LauncherViewPagerAdapter.class),
                    "onPageScrolled " + position + " " + positionOffset + " " + positionOffsetPixels);
            if (mLauncherUITabView != null) {
                mLauncherUITabView.doTranslateImageMatrix(position, positionOffset);
            }
            if (positionOffset != 0.0F && position == CCPLauncherUITabView.TAB_VIEW_THIRD) {
                if (mGroupListFragment == null) {
                    mGroupListFragment = (GroupListFragment) getTabView(CCPLauncherUITabView.TAB_VIEW_THIRD);
                    mGroupListFragment.onGroupFragmentVisible(true);
                }
            }
            if (positionOffset != 0.0F && position == CCPLauncherUITabView.TAB_VIEW_FOUR) {
                if (mDissListFragment == null) {
                    mDissListFragment = (DiscussionListFragment) getTabView(CCPLauncherUITabView.TAB_VIEW_FOUR);
                    mDissListFragment.onDisGroupFragmentVisible(true);
                }
            }

        }

        @Override
        public void onPageSelected(int position) {
            LogUtil.d(LogUtil.getLogUtilsTag(LauncherViewPagerAdapter.class), "onPageSelected");
            if (mLauncherUITabView != null) {
                mLauncherUITabView.doChangeTabViewDisplay(position);
                mCurrentItemPosition = position;
            }
        }

        @Override
        public void onTabClick(int tabIndex) {
            if (tabIndex == mCurrentItemPosition) {
                LogUtil.d(LogUtil.getLogUtilsTag(LauncherViewPagerAdapter.class),
                        "on click same index " + tabIndex);
                // Perform a rolling
                TabFragment item = (TabFragment) getItem(tabIndex);
                item.onTabFragmentClick();
                return;
            }

            mClickTabCounts += mClickTabCounts;
            LogUtil.d(LogUtil.getLogUtilsTag(LauncherViewPagerAdapter.class),
                    "onUITabView Click count " + mClickTabCounts);
            mViewPager.setCurrentItem(tabIndex);
        }

    }

    /**
     * ??
     *
     * @param connect
     */
    public void onNetWorkNotify(ECDevice.ECConnectState connect) {
        BaseFragment tabView = getTabView(TAB_CONVERSATION);
        if (tabView instanceof ConversationListFragment && tabView.isAdded()) {
            ((ConversationListFragment) tabView).updateConnectState();
        }
    }

    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.btn_plus) {
            controlPlusSubMenu();
        }
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);

        Intent actionIntent = intent;
        String userName = actionIntent.getStringExtra("Main_FromUserName");
        String mSession = actionIntent.getStringExtra("Main_Session");
        ECContacts contacts = ContactSqlManager.getContactLikeUsername(userName);
        if (contacts != null) {
            LogUtil.d(LogUtil.getLogUtilsTag(getClass()),
                    "[onNewIntent] userName = " + userName + " , contact_id " + contacts.getContactid());

            if (GroupNoticeSqlManager.CONTACT_ID.equals(contacts.getContactid())) {
                Intent noticeintent = new Intent(this, GroupNoticeActivity.class);
                startActivity(noticeintent);
                return;
            }

            Intent chatIntent = new Intent(this, ChattingActivity.class);
            String recipinets;
            String username;
            if (!TextUtils.isEmpty(mSession) && mSession.startsWith("g")) {
                ECGroup ecGroup = GroupSqlManager.getECGroup(mSession);
                if (ecGroup == null) {
                    return;
                }
                recipinets = mSession;
                username = ecGroup.getName();
            } else {
                recipinets = contacts.getContactid();
                username = contacts.getNickname();
            }
            startActivity(chatIntent);

            CCPAppManager.startChattingAction(this, recipinets, username);
            return;
        }
    }

    private final AdapterView.OnItemClickListener mOverflowItemCliclListener = new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            controlPlusSubMenu();

            OverflowItem overflowItem = mItems[position];
            String title = overflowItem.getTitle();

            if (getString(R.string.main_plus_inter_phone).equals(title)) {
                // 
            } else if (getString(R.string.main_plus_meeting_voice).equals(title)) {
                // 
            } else if (getString(R.string.main_plus_groupchat).equals(title)) {
                // 
                startActivity(new Intent(LauncherActivity.this, CreateGroupActivity.class));
            } else if (getString(R.string.main_plus_querygroup).equals(title)) {
                // ?
                startActivity(new Intent(LauncherActivity.this, BaseSearch.class));
            } else if (getString(R.string.main_plus_mcmessage).equals(title)) {
                handleStartServiceEvent();

            } else if (getString(R.string.main_plus_settings).equals(title)) {
                // ;
                startActivity(new Intent(LauncherActivity.this, SettingsActivity.class));

            } else if (getString(R.string.main_plus_meeting_video).equals(title)) {

            } else if (getString(R.string.create_discussion).equals(title)) {

                Intent intent = new Intent(LauncherActivity.this, MobileContactSelectActivity.class);
                intent.putExtra("is_discussion", true);
                intent.putExtra("isFromCreateDiscussion", true);
                intent.putExtra("group_select_need_result", true);
                startActivity(intent);

            } else if (getString(R.string.query_discussion).equals(title)) {

                Intent intent = new Intent(LauncherActivity.this, ECDiscussionActivity.class);
                intent.putExtra("is_discussion", true);

                startActivity(intent);

            }
        }

    };

    /**
     * ?
     */
    private void handleStartServiceEvent() {
        showProcessDialog();
        CustomerServiceHelper.startService(ContactLogic.CUSTOM_SERVICE,
                new CustomerServiceHelper.OnStartCustomerServiceListener() {
                    @Override
                    public void onError(ECError error) {
                        dismissPostingDialog();
                    }

                    @Override
                    public void onServiceStart(String event) {
                        dismissPostingDialog();
                        CCPAppManager.startCustomerServiceAction(LauncherActivity.this, event);
                    }
                });
    }

    private InternalReceiver internalReceiver;

    /**
     * 
     * 
     * @param actionArray
     */
    protected final void registerReceiver(String[] actionArray) {
        if (actionArray == null) {
            return;
        }
        IntentFilter intentfilter = new IntentFilter();
        for (String action : actionArray) {
            intentfilter.addAction(action);
        }
        if (internalReceiver == null) {
            internalReceiver = new InternalReceiver();
        }
        registerReceiver(internalReceiver, intentfilter);
    }

    private class InternalReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent == null || TextUtils.isEmpty(intent.getAction())) {
                return;
            }
            LogUtil.d(TAG, "[onReceive] action:" + intent.getAction());
            if (IMChattingHelper.INTENT_ACTION_SYNC_MESSAGE.equals(intent.getAction())) {
                disPostingLoading();
            } else if (SDKCoreHelper.ACTION_SDK_CONNECT.equals(intent.getAction())) {
                doInitAction();
                // tetstMesge();
                BaseFragment tabView = getTabView(TAB_CONVERSATION);
                if (tabView != null && tabView instanceof ConversationListFragment) {
                    ((ConversationListFragment) tabView).updateConnectState();
                }
            } else if (SDKCoreHelper.ACTION_KICK_OFF.equals(intent.getAction())) {
                String kickoffText = intent.getStringExtra("kickoffText");
                handlerKickOff(kickoffText);
            }
        }
    }

    private boolean mInitActionFlag;

    /**
     * ???
     */
    private void doInitAction() {
        if (SDKCoreHelper.getConnectState() == ECDevice.ECConnectState.CONNECT_SUCCESS && !mInitActionFlag) {

            // ?
            SDKCoreHelper.SoftUpdate mSoftUpdate = SDKCoreHelper.mSoftUpdate;
            if (mSoftUpdate != null) {
                if (DemoUtils.checkUpdater(mSoftUpdate.version)) {
                    boolean force = mSoftUpdate.force;
                    showUpdaterTips(mSoftUpdate.desc, force);
                    if (force) {
                        return;
                    }
                }
            }

            String account = getAutoRegistAccount();
            if (!TextUtils.isEmpty(account)) {
                ClientUser user = new ClientUser("").from(account);
                CCPAppManager.setClientUser(user);
            }
            settingPersonInfo();
            IMChattingHelper.getInstance().getPersonInfo();
            // ?
            checkOffineMessage();
            mInitActionFlag = true;
        }
    }

    private void disPostingLoading() {
        if (mPostingdialog != null && mPostingdialog.isShowing()) {
            mPostingdialog.dismiss();
        }
    }

    ECAlertDialog showUpdaterTipsDialog = null;

    private void showUpdaterTips(String updateDesc, final boolean force) {
        if (showUpdaterTipsDialog != null) {
            return;
        }
        String negativeText = getString(force ? R.string.settings_logout : R.string.update_next);
        String msg = getString(R.string.new_update_version);
        if (!TextUtils.isEmpty(updateDesc)) {
            msg = updateDesc;
        }
        showUpdaterTipsDialog = ECAlertDialog.buildAlert(this, msg, negativeText, getString(R.string.app_update),
                new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                        showUpdaterTipsDialog = null;
                        if (force) {
                            try {
                                ECPreferences.savePreference(ECPreferenceSettings.SETTINGS_FULLY_EXIT, true, true);
                            } catch (InvalidClassException e) {
                                e.printStackTrace();
                            }
                            restartAPP();
                        }
                    }
                }, new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        CCPAppManager.startUpdater(LauncherActivity.this);
                        // restartAPP();
                        showUpdaterTipsDialog = null;
                    }
                });

        showUpdaterTipsDialog.setTitle(R.string.app_tip);
        showUpdaterTipsDialog.setDismissFalse();
        showUpdaterTipsDialog.setCanceledOnTouchOutside(false);
        showUpdaterTipsDialog.setCancelable(false);
        showUpdaterTipsDialog.show();
    }

    private ECProgressDialog mPostingdialog;

    void showProcessDialog() {
        mPostingdialog = new ECProgressDialog(LauncherActivity.this, R.string.login_posting_submit);
        mPostingdialog.show();
    }

    /**
     * ?
     */
    private void dismissPostingDialog() {
        if (mPostingdialog == null || !mPostingdialog.isShowing()) {
            return;
        }
        mPostingdialog.dismiss();
        mPostingdialog = null;
    }
}