protected synchronized boolean authorize() {

        // 認証中
        authStatus = AUTH_NOW;
        System.out.println("認証します");

        // tokenがある場合は認証スキップ
        String token = settings.getToken();

        // tokenがある場合は
        if (token != null && token.length() != 0) {
            authStatus = AUTH_OK;
            googleCalendar.setToken(token);
            return true;
        }
        // tokenがない場合は

        // 認証情報取得
        if (mailAddress == null ) {
            // メールアドレス取得(設定から)
            mailAddress = settings.getMailAddress();
        }
        // パスワードがなかったら認証開始
        AuthInfo authInfo = null;
        if (password == null || password.length() == 0) {
            // 認証情報をユーザーに入力してもらう
            authInfo = inputAuthInfo();

            // ユーザーキャンセルなら認証失敗
            if (authInfo == null) {
                authStatus = AUTH_NG;
                return false;
            }
        }

        // 認証
        boolean ret = googleCalendar.authorize(authInfo);
        // 認証失敗の場合はデータクリア
        if (!ret) {
            reset();
            return ret;
        }
        // 成功
        authStatus = AUTH_OK;
        settings.setToken(authInfo.getToken());
        return ret;
    }