From cdbaf02f93eb0d2ff53620357a98b231067572dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=AD=E6=B7=91=E6=B6=B5?= <1508386176@qq.com> Date: Wed, 25 Dec 2024 02:12:51 +0800 Subject: [PATCH] Signed-off-by: --- GTaskASyncTask.txt | 170 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 GTaskASyncTask.txt diff --git a/GTaskASyncTask.txt b/GTaskASyncTask.txt new file mode 100644 index 0000000..97201a8 --- /dev/null +++ b/GTaskASyncTask.txt @@ -0,0 +1,170 @@ + +/* + * 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.app.Notification; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.os.AsyncTask; + +import net.micode.notes.R; +import net.micode.notes.ui.NotesListActivity; +import net.micode.notes.ui.NotesPreferenceActivity; + +/* + * GTaskASyncTask类是一个异步任务类,用于执行Google任务的同步操作。 + * 该类继承自AsyncTask,并在后台线程中执行同步操作,同时在UI线程中更新进度和结果。 + */ +public class GTaskASyncTask extends AsyncTask { + + private static int GTASK_SYNC_NOTIFICATION_ID = 5234235; + + public interface OnCompleteListener { //定义一个接口,用于在任务完成时通知监听器。 + void onComplete(); + } + + private Context mContext; + + private NotificationManager mNotifiManager; + + private GTaskManager mTaskManager; + + private OnCompleteListener mOnCompleteListener; +/* + * 构造函数,初始化上下文、通知管理器、任务管理器和完成监听器。 + * @param context 上下文 + * @param listener 完成监听器 + */ + public GTaskASyncTask(Context context, OnCompleteListener listener) { + // 初始化上下文 + mContext = context; + // 初始化完成监听器 + mOnCompleteListener = listener; + // 获取通知管理器 + mNotifiManager = (NotificationManager) mContext + .getSystemService(Context.NOTIFICATION_SERVICE); + // 获取任务管理器实例 + mTaskManager = GTaskManager.getInstance(); + } +/* + * 取消同步操作。 + */ + public void cancelSync() { + mTaskManager.cancelSync(); + } +/* + * 发布进度消息。 + */ + public void publishProgess(String message) { + publishProgress(new String[] { + message + }); + } +/* + * 显示通知。 + * @param tickerId 通知的提示文本ID + * @param content 通知的内容 + */ + private void showNotification(int tickerId, String content) { + // 创建一个新的Notification对象 + Notification notification = new Notification(R.drawable.notification, mContext + .getString(tickerId), System.currentTimeMillis()); + // 设置通知的默认灯光效果 + notification.defaults = Notification.DEFAULT_LIGHTS; + // 设置通知的标志,自动取消通知 + notification.flags = Notification.FLAG_AUTO_CANCEL; + // 创建PendingIntent,用于在用户点击通知时启动相应的Activity + PendingIntent pendingIntent; + if (tickerId != R.string.ticker_success) { + // 如果通知不是成功通知,启动NotesPreferenceActivity + pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext, + NotesPreferenceActivity.class), 0); + + } else { + // 如果通知是成功通知,启动NotesListActivity + pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext, + NotesListActivity.class), 0); + } + // 设置通知的详细信息 + notification.setLatestEventInfo(mContext, mContext.getString(R.string.app_name), content, + pendingIntent); + // 发送通知 + mNotifiManager.notify(GTASK_SYNC_NOTIFICATION_ID, notification); + } +/* + * 在后台线程中执行同步操作。 + * @param unused 未使用的参数 + * @return 同步结果状态码 + */ + @Override + protected Integer doInBackground(Void... unused) { + // 发布登录进度消息 + publishProgess(mContext.getString(R.string.sync_progress_login, NotesPreferenceActivity + .getSyncAccountName(mContext))); + // 调用任务管理器的同步方法,并返回同步结果状态码 + return mTaskManager.sync(mContext, this); + } +/* + * 在UI线程中更新进度。 + * @param progress 进度消息 + */ + @Override + protected void onProgressUpdate(String... progress) { + // 显示同步进度通知 + showNotification(R.string.ticker_syncing, progress[0]); + // 如果上下文是GTaskSyncService的实例,发送广播 + if (mContext instanceof GTaskSyncService) { + ((GTaskSyncService) mContext).sendBroadcast(progress[0]); + } + } +/* + * 在UI线程中处理同步结果。 + * @param result 同步结果状态码 + */ + @Override + protected void onPostExecute(Integer result) { + // 根据同步结果状态码显示相应的通知 + if (result == GTaskManager.STATE_SUCCESS) { + // 如果同步成功,显示成功通知,并更新最后一次同步时间 + showNotification(R.string.ticker_success, mContext.getString( + R.string.success_sync_account, mTaskManager.getSyncAccount())); + NotesPreferenceActivity.setLastSyncTime(mContext, System.currentTimeMillis()); + } else if (result == GTaskManager.STATE_NETWORK_ERROR) { + // 如果同步失败,显示网络错误通知 + showNotification(R.string.ticker_fail, mContext.getString(R.string.error_sync_network)); + } else if (result == GTaskManager.STATE_INTERNAL_ERROR) { + // 如果同步失败,显示内部错误通知 + showNotification(R.string.ticker_fail, mContext.getString(R.string.error_sync_internal)); + } else if (result == GTaskManager.STATE_SYNC_CANCELLED) { + // 如果同步被取消,显示取消通知 + showNotification(R.string.ticker_cancel, mContext + .getString(R.string.error_sync_cancelled)); + } + // 如果存在完成监听器,启动新线程调用onComplete方法 + if (mOnCompleteListener != null) { + new Thread(new Runnable() { + + public void run() { + mOnCompleteListener.onComplete(); + } + }).start(); + } + } +}