|
|
|
|
@ -32,42 +32,19 @@ import net.micode.notes.tool.ResourceParser;
|
|
|
|
|
import net.micode.notes.ui.NoteEditActivity;
|
|
|
|
|
import net.micode.notes.ui.NotesListActivity;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* NoteWidgetProvider - 便签小部件抽象基类
|
|
|
|
|
* 继承自AppWidgetProvider,为所有便签小部件提供通用功能。
|
|
|
|
|
* 负责管理小部件的更新、删除等操作,以及获取和显示便签数据。
|
|
|
|
|
* 子类需要实现特定的抽象方法来提供小部件的布局和背景资源。
|
|
|
|
|
*
|
|
|
|
|
* 主要功能:
|
|
|
|
|
* - 管理小部件的生命周期事件(删除、更新)
|
|
|
|
|
* - 从数据库获取便签数据并显示在小部件上
|
|
|
|
|
* - 处理小部件点击事件,启动相应的活动
|
|
|
|
|
* - 支持隐私模式下的小部件显示
|
|
|
|
|
* - 提供抽象方法供子类实现特定的小部件样式
|
|
|
|
|
*/
|
|
|
|
|
public abstract class NoteWidgetProvider extends AppWidgetProvider {
|
|
|
|
|
/** 数据库查询的投影列,用于获取便签的ID、背景色ID和内容摘要 */
|
|
|
|
|
public static final String [] PROJECTION = new String [] {
|
|
|
|
|
NoteColumns.ID,
|
|
|
|
|
NoteColumns.BG_COLOR_ID,
|
|
|
|
|
NoteColumns.SNIPPET
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/** 投影列索引 - 便签ID */
|
|
|
|
|
public static final int COLUMN_ID = 0;
|
|
|
|
|
/** 投影列索引 - 背景色ID */
|
|
|
|
|
public static final int COLUMN_BG_COLOR_ID = 1;
|
|
|
|
|
/** 投影列索引 - 内容摘要 */
|
|
|
|
|
public static final int COLUMN_SNIPPET = 2;
|
|
|
|
|
|
|
|
|
|
private static final String TAG = "NoteWidgetProvider"; // 日志标签
|
|
|
|
|
private static final String TAG = "NoteWidgetProvider";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 小部件删除回调 - 处理小部件删除事件
|
|
|
|
|
* 当用户删除小部件时,更新数据库中相关便签的小部件ID为无效值。
|
|
|
|
|
* @param context 上下文环境
|
|
|
|
|
* @param appWidgetIds 被删除的小部件ID数组
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public void onDeleted(Context context, int[] appWidgetIds) {
|
|
|
|
|
ContentValues values = new ContentValues();
|
|
|
|
|
@ -80,13 +57,6 @@ public abstract class NoteWidgetProvider extends AppWidgetProvider {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取小部件关联的便签信息
|
|
|
|
|
* 根据小部件ID从数据库中查询关联的便签数据,排除已删除的便签。
|
|
|
|
|
* @param context 上下文环境
|
|
|
|
|
* @param widgetId 小部件ID
|
|
|
|
|
* @return 包含便签信息的游标
|
|
|
|
|
*/
|
|
|
|
|
private Cursor getNoteWidgetInfo(Context context, int widgetId) {
|
|
|
|
|
return context.getContentResolver().query(Notes.CONTENT_NOTE_URI,
|
|
|
|
|
PROJECTION,
|
|
|
|
|
@ -95,25 +65,10 @@ public abstract class NoteWidgetProvider extends AppWidgetProvider {
|
|
|
|
|
null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 更新小部件 - 默认隐私模式
|
|
|
|
|
* 更新指定的小部件,不使用隐私模式。
|
|
|
|
|
* @param context 上下文环境
|
|
|
|
|
* @param appWidgetManager 小部件管理器
|
|
|
|
|
* @param appWidgetIds 要更新的小部件ID数组
|
|
|
|
|
*/
|
|
|
|
|
protected void update(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
|
|
|
|
|
update(context, appWidgetManager, appWidgetIds, false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 更新小部件 - 核心实现
|
|
|
|
|
* 更新指定的小部件,根据隐私模式决定显示内容和点击行为。
|
|
|
|
|
* @param context 上下文环境
|
|
|
|
|
* @param appWidgetManager 小部件管理器
|
|
|
|
|
* @param appWidgetIds 要更新的小部件ID数组
|
|
|
|
|
* @param privacyMode 是否处于隐私模式
|
|
|
|
|
*/
|
|
|
|
|
private void update(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds,
|
|
|
|
|
boolean privacyMode) {
|
|
|
|
|
for (int i = 0; i < appWidgetIds.length; i++) {
|
|
|
|
|
@ -169,25 +124,9 @@ public abstract class NoteWidgetProvider extends AppWidgetProvider {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取背景资源ID - 抽象方法
|
|
|
|
|
* 子类实现此方法,根据背景色ID返回对应的背景资源ID。
|
|
|
|
|
* @param bgId 背景色ID
|
|
|
|
|
* @return 背景资源ID
|
|
|
|
|
*/
|
|
|
|
|
protected abstract int getBgResourceId(int bgId);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取布局ID - 抽象方法
|
|
|
|
|
* 子类实现此方法,返回小部件的布局资源ID。
|
|
|
|
|
* @return 布局资源ID
|
|
|
|
|
*/
|
|
|
|
|
protected abstract int getLayoutId();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取小部件类型 - 抽象方法
|
|
|
|
|
* 子类实现此方法,返回小部件的类型标识。
|
|
|
|
|
* @return 小部件类型
|
|
|
|
|
*/
|
|
|
|
|
protected abstract int getWidgetType();
|
|
|
|
|
}
|
|
|
|
|
|