|
|
|
@ -0,0 +1,204 @@
|
|
|
|
|
这段代码是一个Android应用程序中的Java类,名为`GTaskClient`,用于与Google Tasks服务进行交互,执行登录、创建任务、获取任务列表等操作。以下是代码的注释:
|
|
|
|
|
|
|
|
|
|
```java
|
|
|
|
|
/*
|
|
|
|
|
* Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
|
|
|
|
|
*
|
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
|
* you may not use this file except in compliance with the License.
|
|
|
|
|
* You may obtain a copy of the License at
|
|
|
|
|
*
|
|
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
|
*
|
|
|
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
|
* See the License for the specific language governing permissions and
|
|
|
|
|
* limitations under the License.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
package net.micode.notes.gtask.remote;
|
|
|
|
|
|
|
|
|
|
import android.accounts.Account;
|
|
|
|
|
import android.accounts.AccountManager;
|
|
|
|
|
import android.accounts.AccountManagerFuture;
|
|
|
|
|
import android.app.Activity;
|
|
|
|
|
import android.os.Bundle;
|
|
|
|
|
import android.text.TextUtils;
|
|
|
|
|
import android.util.Log;
|
|
|
|
|
|
|
|
|
|
import net.micode.notes.gtask.data.Node;
|
|
|
|
|
import net.micode.notes.gtask.data.Task;
|
|
|
|
|
import net.micode.notes.gtask.data.TaskList;
|
|
|
|
|
import net.micode.notes.gtask.exception.ActionFailureException;
|
|
|
|
|
import net.micode.notes.gtask.exception.NetworkFailureException;
|
|
|
|
|
import net.micode.notes.tool.GTaskStringUtils;
|
|
|
|
|
import net.micode.notes.ui.NotesPreferenceActivity;
|
|
|
|
|
|
|
|
|
|
import org.apache.http.HttpEntity;
|
|
|
|
|
import org.apache.http.HttpResponse;
|
|
|
|
|
import org.apache.http.client.ClientProtocolException;
|
|
|
|
|
import org.apache.http.client.entity.UrlEncodedFormEntity;
|
|
|
|
|
import org.apache.http.client.methods.HttpGet;
|
|
|
|
|
import org.apache.http.client.methods.HttpPost;
|
|
|
|
|
import org.apache.http.cookie.Cookie;
|
|
|
|
|
import org.apache.http.impl.client.BasicCookieStore;
|
|
|
|
|
import org.apache.http.impl.client.DefaultHttpClient;
|
|
|
|
|
import org.apache.http.message.BasicNameValuePair;
|
|
|
|
|
import org.apache.http.params.BasicHttpParams;
|
|
|
|
|
import org.apache.http.params.HttpConnectionParams;
|
|
|
|
|
import org.apache.http.params.HttpParams;
|
|
|
|
|
import org.apache.http.params.HttpProtocolParams;
|
|
|
|
|
import org.json.JSONArray;
|
|
|
|
|
import org.json.JSONException;
|
|
|
|
|
import org.json.JSONObject;
|
|
|
|
|
|
|
|
|
|
import java.io.BufferedReader;
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
import java.io.InputStream;
|
|
|
|
|
import java.io.InputStreamReader;
|
|
|
|
|
import java.util.LinkedList;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.zip.GZIPInputStream;
|
|
|
|
|
import java.util.zip.Inflater;
|
|
|
|
|
import java.util.zip.InflaterInputStream;
|
|
|
|
|
|
|
|
|
|
// GTaskClient类用于与Google Tasks服务进行交互
|
|
|
|
|
public class GTaskClient {
|
|
|
|
|
// 类的标签,用于日志记录
|
|
|
|
|
private static final String TAG = GTaskClient.class.getSimpleName();
|
|
|
|
|
|
|
|
|
|
// Google Tasks的URL
|
|
|
|
|
private static final String GTASK_URL = "https://mail.google.com/tasks/";
|
|
|
|
|
private static final String GTASK_GET_URL = "https://mail.google.com/tasks/ig";
|
|
|
|
|
private static final String GTASK_POST_URL = "https://mail.google.com/tasks/r/ig";
|
|
|
|
|
|
|
|
|
|
// GTaskClient的单例
|
|
|
|
|
private static GTaskClient mInstance = null;
|
|
|
|
|
|
|
|
|
|
// 成员变量
|
|
|
|
|
private DefaultHttpClient mHttpClient; // HTTP客户端
|
|
|
|
|
private String mGetUrl; // GET请求的URL
|
|
|
|
|
private String mPostUrl; // POST请求的URL
|
|
|
|
|
private long mClientVersion; // 客户端版本
|
|
|
|
|
private boolean mLoggedin; // 是否已登录
|
|
|
|
|
private long mLastLoginTime; // 最后登录时间
|
|
|
|
|
private int mActionId; // 操作ID
|
|
|
|
|
private Account mAccount; // 账户
|
|
|
|
|
private JSONArray mUpdateArray; // 更新数组
|
|
|
|
|
|
|
|
|
|
// 私有构造函数,确保单例
|
|
|
|
|
private GTaskClient() {
|
|
|
|
|
mHttpClient = null;
|
|
|
|
|
mGetUrl = GTASK_GET_URL;
|
|
|
|
|
mPostUrl = GTASK_POST_URL;
|
|
|
|
|
mClientVersion = -1;
|
|
|
|
|
mLoggedin = false;
|
|
|
|
|
mLastLoginTime = 0;
|
|
|
|
|
mActionId = 1;
|
|
|
|
|
mAccount = null;
|
|
|
|
|
mUpdateArray = null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取GTaskClient单例的方法
|
|
|
|
|
public static synchronized GTaskClient getInstance() {
|
|
|
|
|
if (mInstance == null) {
|
|
|
|
|
mInstance = new GTaskClient();
|
|
|
|
|
}
|
|
|
|
|
return mInstance;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 登录方法
|
|
|
|
|
public boolean login(Activity activity) {
|
|
|
|
|
// ... 登录逻辑
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 登录Google账户的方法
|
|
|
|
|
private String loginGoogleAccount(Activity activity, boolean invalidateToken) {
|
|
|
|
|
// ... 登录Google账户逻辑
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 尝试登录Google Tasks的方法
|
|
|
|
|
private boolean tryToLoginGtask(Activity activity, String authToken) {
|
|
|
|
|
// ... 尝试登录Google Tasks逻辑
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 登录Google Tasks的方法
|
|
|
|
|
private boolean loginGtask(String authToken) {
|
|
|
|
|
// ... 登录Google Tasks逻辑
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取操作ID的方法
|
|
|
|
|
private int getActionId() {
|
|
|
|
|
return mActionId++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 创建HttpPost对象的方法
|
|
|
|
|
private HttpPost createHttpPost() {
|
|
|
|
|
// ... 创建HttpPost对象逻辑
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取响应内容的方法
|
|
|
|
|
private String getResponseContent(HttpEntity entity) throws IOException {
|
|
|
|
|
// ... 获取响应内容逻辑
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 发送POST请求的方法
|
|
|
|
|
private JSONObject postRequest(JSONObject js) throws NetworkFailureException {
|
|
|
|
|
// ... 发送POST请求逻辑
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 创建任务的方法
|
|
|
|
|
public void createTask(Task task) throws NetworkFailureException {
|
|
|
|
|
// ... 创建任务逻辑
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 创建任务列表的方法
|
|
|
|
|
public void createTaskList(TaskList tasklist) throws NetworkFailureException {
|
|
|
|
|
// ... 创建任务列表逻辑
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 提交更新的方法
|
|
|
|
|
public void commitUpdate() throws NetworkFailureException {
|
|
|
|
|
// ... 提交更新逻辑
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 添加更新节点的方法
|
|
|
|
|
public void addUpdateNode(Node node) throws NetworkFailureException {
|
|
|
|
|
// ... 添加更新节点逻辑
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 移动任务的方法
|
|
|
|
|
public void moveTask(Task task, TaskList preParent, TaskList curParent)
|
|
|
|
|
throws NetworkFailureException {
|
|
|
|
|
// ... 移动任务逻辑
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 删除节点的方法
|
|
|
|
|
public void deleteNode(Node node) throws NetworkFailureException {
|
|
|
|
|
// ... 删除节点逻辑
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取任务列表的方法
|
|
|
|
|
public JSONArray getTaskLists() throws NetworkFailureException {
|
|
|
|
|
// ... 获取任务列表逻辑
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取任务列表中的任务的方法
|
|
|
|
|
public JSONArray getTaskList(String listGid) throws NetworkFailureException {
|
|
|
|
|
// ... 获取任务列表中的任务逻辑
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取同步账户的方法
|
|
|
|
|
public Account getSyncAccount() {
|
|
|
|
|
return mAccount;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 重置更新数组的方法
|
|
|
|
|
public void resetUpdateArray() {
|
|
|
|
|
mUpdateArray = null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
这个`GTaskClient`类提供了与Google Tasks服务交互的一系列方法,包括登录、创建任务、获取任务列表等。它使用了HTTP客户端来发送请求,并处理了JSON对象的解析和构建。此外,它还管理了一个更新数组,用于批量提交更新。
|