void launchLoginActivity() {
    try {
      setTitle(R.string.facebook_request_token_title);
      facebook_info.setText(R.string.facebook_request_token_title);

      isInProcess = true;
      token = loghelper.getDesktopApp().requestToken();
      isInProcess = false;
      getToken = true;
      loginURL = loghelper.getDesktopApp().getLoginUrl(token);

      if (getToken == false) {
        Toast.makeText(
                FacebookLoginActivity.this,
                R.string.facebook_get_accesstoken_failed,
                Toast.LENGTH_LONG)
            .show();
        FacebookLoginActivity.this.setTitle(R.string.sns_network_unavailable);
        facebook_info.setText(R.string.facebook_login_failed_message);
      } else {
        Log.d(TAG, "after get token=" + token);
        mHandler.obtainMessage(QUIT_THREAD).sendToTarget();
        Intent intent = new Intent(FacebookLoginActivity.this, FacebookLoginWebViewActivity.class);
        intent.putExtra("facebook_loginURL", loginURL);
        startActivityForResult(intent, LOGIN_WEBVIEW);
      }
    } catch (FacebookException ne) {
      isInProcess = false;
      Log.d(TAG, "fail to request the token=" + ne.getMessage());
      sendMessageToService(false);

      count--;
      if (count >= 0) {
        Log.d(TAG, "get token again");
        Message msd = mHandler.obtainMessage(LOAD_LOGIN_PAGE);
        mHandler.sendMessageDelayed(msd, 5 * 1000);
      }
    }

    if (getToken == false) {
      handler.obtainMessage(NETWORK_UNAVAL).sendToTarget();
    }

    Log.d(TAG, "continue");
    if (getToken == true || count <= 0) {
      mHandler.obtainMessage(QUIT_THREAD).sendToTarget();
    }
  }
    public void run() {
      handler.post(
          new Runnable() {
            public void run() {
              FacebookLoginActivity.this.setTitle(R.string.facebook_getsession_title);
              facebook_info.setText(R.string.facebook_getsession_wait_message);
            }
          });

      Log.d(TAG, "reconstrcut the facebook session");
      FacebookSession tmps = null;
      try {
        tmps = loghelper.getDesktopApp().requestSession(token);

        handler.post(
            new Runnable() {
              public void run() {
                facebook_info.setText(R.string.facebook_getsession_successed);
              }
            });
      } catch (FacebookException e) {
        Log.e(TAG, "fail to get facebook session=" + e.getMessage());
        handler.post(
            new Runnable() {
              public void run() {
                facebook_info.setText(R.string.facebook_fail_to_get_session);
                FacebookLoginActivity.this.setResult(200);
                sendMessageToService(false);
                quitLooperAndFinish();
              }
            });
        return;
      }
      // save into database
      String Sessionkey = tmps.getSessionKey();
      String secretKey = tmps.getSecretKey();
      long userId = tmps.getLogerInUserID();
      loghelper.recordTmpSession(Sessionkey, secretKey, userId);
      SocialORM orm = new SocialORM(FacebookLoginActivity.this);

      boolean persm = false;
      try {
        handler.post(
            new Runnable() {
              public void run() {
                facebook_info.setText(R.string.facebook_make_session_permanent);
              }
            });
        persm =
            tmps.AuthLogin(
                tmps.getSessionKey(),
                FacebookLoginHelper.SECRET_KEY,
                loghelper.getEmail(),
                loghelper.getPwd());

        handler.post(
            new Runnable() {
              public void run() {
                facebook_info.setText(R.string.facebook_make_session_permanent_suc);
              }
            });
      } catch (FacebookException kke) {
        Log.d(TAG, "fail to get perm session=" + kke.getMessage());
      }

      if (true == persm) {
        recordPermSession(tmps, orm);
      } else {
        Log.d(TAG, "fail to get permnant session");
        if (orm.isUsePermanentSeesion() == false) {
          Log.d(TAG, "fail to get permnant session, use tmp session");
          recordPermSession(tmps, orm);
        } else {
          handler.post(
              new Runnable() {
                public void run() {
                  Toast.makeText(
                          FacebookLoginActivity.this,
                          R.string.facebook_get_permanent_session_failed,
                          Toast.LENGTH_LONG)
                      .show();
                }
              });
        }
      }

      // reset the session and async in activity
      AccountManager.login();

      handler.post(
          new Runnable() {
            public void run() {
              FacebookLoginActivity.this.setResult(100);
              sendMessageToService(true);
            }
          });

      handler.post(
          new Runnable() {
            public void run() {
              quitLooperAndFinish();
            }
          });
    }
  void auth_login() {
    isInProcess = true;
    setButtonEnable(false);
    Log.d(TAG, "reconstrcut the facebook session");
    final FacebookSession tmps;
    boolean persm = false;
    try {
      setHint(getString(R.string.verify_account_hint));
      tmps = loghelper.getDesktopApp().AuthLoginNoSession(loghelper.getEmail(), loghelper.getPwd());
    } catch (FacebookException e) {
      Log.e(TAG, "fail to get facebook session=" + e.getMessage());
      handler.post(
          new Runnable() {
            public void run() {
              facebook_info.setText(R.string.facebook_fail_to_get_session);
              // FacebookLoginActivity.this.setResult(200);
              // sendMessageToService(false);
              // quitLooperAndFinish();
            }
          });
      mHandler.obtainMessage(QUIT_THREAD).sendToTarget();
      isInProcess = false;
      setButtonEnable(true);
      return;
    }
    try {
      persm =
          tmps.AuthLogin(
              tmps.getSessionKey(),
              FacebookLoginHelper.SECRET_KEY,
              loghelper.getEmail(),
              loghelper.getPwd());
    } catch (FacebookException e) {
      Log.e(TAG, "Fail to get permanant session, ignore this step.");
    }
    setHint(getString(R.string.verify_account_suc_hint));

    // get login info in background

    // save into database
    String Sessionkey = tmps.getSessionKey();
    String secretKey = tmps.getSecretKey();
    long userId = tmps.getLogerInUserID();
    loghelper.recordTmpSession(Sessionkey, secretKey, userId);
    SocialORM orm = SocialORM.instance(FacebookLoginActivity.this);

    if (true == persm) {
      recordPermSession(tmps, orm);
    } else {
      Log.d(TAG, "fail to get permnant session");
      if (orm.isUsePermanentSeesion() == false) {
        Log.d(TAG, "fail to get permnant session, use tmp session");
        recordPermSession(tmps, orm);
      } else {
        handler.post(
            new Runnable() {
              public void run() {
                Toast.makeText(
                        FacebookLoginActivity.this,
                        R.string.facebook_get_permanent_session_failed,
                        Toast.LENGTH_LONG)
                    .show();
              }
            });
      }
    }

    // reset the session and async in activity
    AccountManager.login();

    handler.post(
        new Runnable() {
          public void run() {
            FacebookLoginActivity.this.setResult(100);
            sendMessageToService(true);
          }
        });

    handler.post(
        new Runnable() {
          public void run() {
            quitLooperAndFinish();
          }
        });

    isInProcess = false;
    setButtonEnable(true);
  }