You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

188 lines
7.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*
* Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
*
* 根据Apache License, Version 2.0(以下简称“许可证”)授权;
* 除非遵守许可证,否则不得使用此文件。
* 你可以在以下网址获得许可证的副本:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* 除非适用法律要求或书面同意,否则按“原样”提供软件
* 在许可证下分发,不附带任何明示或暗示的保证或条件。
* 请参阅许可证,了解有关权限和限制的具体语言。
*/
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; // 导入异步任务类
<<<<<<< HEAD
import net.micode.notes.R; // 导入资源文件
import net.micode.notes.ui.NotesListActivity; // 导入笔记列表活动
import net.micode.notes.ui.NotesPreferenceActivity; // 导入笔记偏好设置活动
// 定义GTaskASyncTask类继承自AsyncTask
public class GTaskASyncTask extends AsyncTask<Void, String, Integer> {
private static int GTASK_SYNC_NOTIFICATION_ID = 5234235; // 定义用于同步通知的ID
// 定义完成监听器接口
=======
// 异步任务类用于执行GTask同步操作
public class GTaskASyncTask extends AsyncTask<Void, String, Integer> {
// 定义GTASK同步通知的ID
private static int GTASK_SYNC_NOTIFICATION_ID = 5234235;
// 定义完成监听接口
>>>>>>> a495b394fa4686564cc2bfe7d054eb66276713ae
public interface OnCompleteListener {
void onComplete(); // 监听完成事件
}
<<<<<<< HEAD
private Context mContext; // 上下文
private NotificationManager mNotifiManager; // 通知管理器
private GTaskManager mTaskManager; // 任务管理器
private OnCompleteListener mOnCompleteListener; // 完成监听器
// 构造函数,初始化上下文和监听器
=======
// 上下文对象
private Context mContext;
// 通知管理器
private NotificationManager mNotifiManager;
// 任务管理器
private GTaskManager mTaskManager;
// 完成监听器
private OnCompleteListener mOnCompleteListener;
// 构造函数,初始化上下文、通知管理器、任务管理器和完成监听器
>>>>>>> a495b394fa4686564cc2bfe7d054eb66276713ae
public GTaskASyncTask(Context context, OnCompleteListener listener) {
mContext = context; // 设置上下文
mOnCompleteListener = listener; // 设置完成监听器
mNotifiManager = (NotificationManager) mContext
.getSystemService(Context.NOTIFICATION_SERVICE); // 获取通知服务
mTaskManager = GTaskManager.getInstance(); // 获取任务管理器实例
}
<<<<<<< HEAD
// 取消同步
=======
// 取消同步的方法
>>>>>>> a495b394fa4686564cc2bfe7d054eb66276713ae
public void cancelSync() {
mTaskManager.cancelSync(); // 调用任务管理器的取消同步方法
}
<<<<<<< HEAD
// 发布进度
public void publishProgess(String message) {
publishProgress(new String[] {
message // 发布进度消息
=======
// 发布进度消息的方法
public void publishProgess(String message) {
publishProgress(new String[] {
message
>>>>>>> a495b394fa4686564cc2bfe7d054eb66276713ae
});
}
// 显示通知的方法
private void showNotification(int tickerId, String content) {
// 创建通知对象
Notification notification = new Notification(R.drawable.notification, mContext
.getString(tickerId), System.currentTimeMillis());
<<<<<<< HEAD
notification.defaults = Notification.DEFAULT_LIGHTS; // 设置默认灯光效果
notification.flags = Notification.FLAG_AUTO_CANCEL; // 设置自动取消标志
PendingIntent pendingIntent; // 定义待处理意图
// 根据tickerId判断要跳转的活动
if (tickerId != R.string.ticker_success) {
pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext,
NotesPreferenceActivity.class), 0); // 启动偏好设置活动
=======
notification.defaults = Notification.DEFAULT_LIGHTS;
notification.flags = Notification.FLAG_AUTO_CANCEL;
// 根据tickerId创建不同的PendingIntent
PendingIntent pendingIntent;
if (tickerId != R.string.ticker_success) {
pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext,
NotesPreferenceActivity.class), 0);
>>>>>>> a495b394fa4686564cc2bfe7d054eb66276713ae
} else {
pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(mContext,
NotesListActivity.class), 0); // 启动笔记列表活动
}
// 设置通知的最新事件信息
notification.setLatestEventInfo(mContext, mContext.getString(R.string.app_name), content,
pendingIntent);
<<<<<<< HEAD
mNotifiManager.notify(GTASK_SYNC_NOTIFICATION_ID, notification); // 发送通知
=======
// 发送通知
mNotifiManager.notify(GTASK_SYNC_NOTIFICATION_ID, notification);
>>>>>>> a495b394fa4686564cc2bfe7d054eb66276713ae
}
// 后台执行同步操作的方法
@Override
protected Integer doInBackground(Void... unused) {
// 发布登录进度
publishProgess(mContext.getString(R.string.sync_progress_login, NotesPreferenceActivity
.getSyncAccountName(mContext)));
return mTaskManager.sync(mContext, this); // 调用同步方法并返回状态
}
// 更新进度的方法
@Override
protected void onProgressUpdate(String... progress) {
showNotification(R.string.ticker_syncing, progress[0]); // 显示同步进度通知
// 如果上下文是GTaskSyncService则广播进度消息
if (mContext instanceof GTaskSyncService) {
((GTaskSyncService) mContext).sendBroadcast(progress[0]);
}
}
// 执行完毕后的方法
@Override
protected void onPostExecute(Integer result) {
<<<<<<< HEAD
// 根据同步结果显示相应的通知
=======
// 根据结果展示不同的通知
>>>>>>> a495b394fa4686564cc2bfe7d054eb66276713ae
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)); // 显示取消同步通知
}
<<<<<<< HEAD
// 如果存在完成监听器则在新线程中调用其onComplete方法
=======
// 如果存在完成监听器,则通知监听器任务完成
>>>>>>> a495b394fa4686564cc2bfe7d054eb66276713ae
if (mOnCompleteListener != null) {
new Thread(new Runnable() {
public void run() {
mOnCompleteListener.onComplete(); // 调用完成监听器的onComplete方法
}
}).start();
}
}
}