Compare commits

..

No commits in common. 'master' and 'main' have entirely different histories.
master ... main

@ -0,0 +1,2 @@
# Millet4531

Binary file not shown.

Binary file not shown.

@ -1,256 +0,0 @@
package net.micode.notes.model;
import android.content.ContentProviderOperation;
import android.content.ContentProviderResult;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.OperationApplicationException;
import android.net.Uri;
import android.os.RemoteException;
import android.util.Log;
import net.micode.notes.data.Notes;
import net.micode.notes.data.Notes.CallNote;
import net.micode.notes.data.Notes.DataColumns;
import net.micode.notes.data.Notes.NoteColumns;
import net.micode.notes.data.Notes.TextNote;
import java.util.ArrayList;
/**
* 便Note便
* ContentProvider
*/
public class Note {
private ContentValues mNoteDiffValues; // 记录便签基础属性的变更(如修改时间、本地标记等)
private NoteData mNoteData; // 内部类,管理便签的具体数据(文本或通话记录)
private static final String TAG = "Note";
/**
* 便ID
* @param context
* @param folderId ID
* @return 便ID0
*/
public static synchronized long getNewNoteId(Context context, long folderId) {
// 初始化基础字段
ContentValues values = new ContentValues();
long createdTime = System.currentTimeMillis();
values.put(NoteColumns.CREATED_DATE, createdTime);
values.put(NoteColumns.MODIFIED_DATE, createdTime);
values.put(NoteColumns.TYPE, Notes.TYPE_NOTE);
values.put(NoteColumns.LOCAL_MODIFIED, 1); // 标记为本地已修改
values.put(NoteColumns.PARENT_ID, folderId);
// 插入数据库并解析返回的URI获取noteId
Uri uri = context.getContentResolver().insert(Notes.CONTENT_NOTE_URI, values);
long noteId = 0;
try {
noteId = Long.parseLong(uri.getPathSegments().get(1)); // 解析URI路径中的ID
} catch (NumberFormatException e) {
Log.e(TAG, "解析便签ID异常: " + e);
noteId = 0;
}
if (noteId == -1) {
throw new IllegalStateException("非法的便签ID: " + noteId);
}
return noteId;
}
public Note() {
mNoteDiffValues = new ContentValues();
mNoteData = new NoteData();
}
/**
* 便
*
*/
public void setNoteValue(String key, String value) {
mNoteDiffValues.put(key, value);
mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1);
mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis());
}
// 以下方法操作文本数据
public void setTextData(String key, String value) {
mNoteData.setTextData(key, value);
}
public void setTextDataId(long id) {
mNoteData.setTextDataId(id);
}
public long getTextDataId() {
return mNoteData.mTextDataId;
}
// 以下方法操作通话记录数据
public void setCallDataId(long id) {
mNoteData.setCallDataId(id);
}
public void setCallData(String key, String value) {
mNoteData.setCallData(key, value);
}
/**
*
* @return true
*/
public boolean isLocalModified() {
return mNoteDiffValues.size() > 0 || mNoteData.isLocalModified();
}
/**
* 便
* @param context
* @param noteId 便ID
* @return
*/
public boolean syncNote(Context context, long noteId) {
if (noteId <= 0) {
throw new IllegalArgumentException("非法的便签ID: " + noteId);
}
if (!isLocalModified()) {
return true; // 无修改直接返回成功
}
// 1. 先更新便签基础属性
int updateCount = context.getContentResolver().update(
ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId),
mNoteDiffValues, null, null);
if (updateCount == 0) {
Log.e(TAG, "便签基础属性更新失败");
}
mNoteDiffValues.clear();
// 2. 更新具体数据(文本/通话记录)
if (mNoteData.isLocalModified() &&
mNoteData.pushIntoContentResolver(context, noteId) == null) {
return false; // 数据更新失败
}
return true;
}
/**
* 便/
* ContentProviderOperation
*/
private class NoteData {
private long mTextDataId; // 文本数据项的ID
private ContentValues mTextDataValues; // 文本数据键值对
private long mCallDataId; // 通话记录数据项的ID
private ContentValues mCallDataValues; // 通话记录数据键值对
private static final String TAG = "NoteData";
public NoteData() {
mTextDataValues = new ContentValues();
mCallDataValues = new ContentValues();
mTextDataId = 0;
mCallDataId = 0;
}
/**
*
*/
boolean isLocalModified() {
return mTextDataValues.size() > 0 || mCallDataValues.size() > 0;
}
// 文本数据操作 ------
void setTextDataId(long id) {
if (id <= 0) throw new IllegalArgumentException("文本数据ID必须大于0");
mTextDataId = id;
}
void setTextData(String key, String value) {
mTextDataValues.put(key, value);
// 同步标记父便签为已修改
mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1);
mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis());
}
// 通话记录操作 ------
void setCallDataId(long id) {
if (id <= 0) throw new IllegalArgumentException("通话记录ID必须大于0");
mCallDataId = id;
}
void setCallData(String key, String value) {
mCallDataValues.put(key, value);
// 同步标记父便签为已修改
mNoteDiffValues.put(NoteColumns.LOCAL_MODIFIED, 1);
mNoteDiffValues.put(NoteColumns.MODIFIED_DATE, System.currentTimeMillis());
}
/**
*
* @return URInull
*/
Uri pushIntoContentResolver(Context context, long noteId) {
if (noteId <= 0) throw new IllegalArgumentException("非法的便签ID: " + noteId);
ArrayList<ContentProviderOperation> operationList = new ArrayList<>();
ContentProviderOperation.Builder builder;
// 处理文本数据 ------
if (mTextDataValues.size() > 0) {
mTextDataValues.put(DataColumns.NOTE_ID, noteId); // 关联父便签
if (mTextDataId == 0) { // 新增文本数据项
mTextDataValues.put(DataColumns.MIME_TYPE, TextNote.CONTENT_ITEM_TYPE);
Uri uri = context.getContentResolver().insert(
Notes.CONTENT_DATA_URI, mTextDataValues);
try {
setTextDataId(Long.parseLong(uri.getPathSegments().get(1)));
} catch (NumberFormatException e) {
Log.e(TAG, "插入文本数据失败便签ID: " + noteId);
mTextDataValues.clear();
return null;
}
} else { // 更新现有文本数据项
builder = ContentProviderOperation.newUpdate(
ContentUris.withAppendedId(Notes.CONTENT_DATA_URI, mTextDataId));
builder.withValues(mTextDataValues);
operationList.add(builder.build());
}
mTextDataValues.clear();
}
// 处理通话记录数据 ------
if (mCallDataValues.size() > 0) {
mCallDataValues.put(DataColumns.NOTE_ID, noteId);
if (mCallDataId == 0) { // 新增通话记录数据项
mCallDataValues.put(DataColumns.MIME_TYPE, CallNote.CONTENT_ITEM_TYPE);
Uri uri = context.getContentResolver().insert(
Notes.CONTENT_DATA_URI, mCallDataValues);
try {
setCallDataId(Long.parseLong(uri.getPathSegments().get(1)));
} catch (NumberFormatException e) {
Log.e(TAG, "插入通话记录数据失败便签ID: " + noteId);
mCallDataValues.clear();
return null;
}
} else { // 更新现有通话记录数据项
builder = ContentProviderOperation.newUpdate(
ContentUris.withAppendedId(Notes.CONTENT_DATA_URI, mCallDataId));
builder.withValues(mCallDataValues);
operationList.add(builder.build());
}
mCallDataValues.clear();
}
// 执行批量操作(仅更新操作需要)
if (!operationList.isEmpty()) {
try {
ContentProviderResult[] results = context.getContentResolver()
.applyBatch(Notes.AUTHORITY, operationList);
return (results != null && results.length > 0 && results[0] != null) ?
ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, noteId) : null;
} catch (RemoteException | OperationApplicationException e) {
Log.e(TAG, "批量操作异常: " + e.getMessage());
return null;
}
}
return null;
}
}
}

@ -1,348 +0,0 @@
package net.micode.notes.model;
import android.appwidget.AppWidgetManager;
import android.content.ContentUris;
import android.content.Context;
import android.database.Cursor;
import android.text.TextUtils;
import android.util.Log;
import net.micode.notes.data.Notes;
import net.micode.notes.data.Notes.CallNote;
import net.micode.notes.data.Notes.DataColumns;
import net.micode.notes.data.Notes.DataConstants;
import net.micode.notes.data.Notes.NoteColumns;
import net.micode.notes.data.Notes.TextNote;
import net.micode.notes.tool.ResourceParser.NoteBgResources;
/**
* 便便
* 便UI
*/
public class WorkingNote {
// 核心数据对象
private Note mNote; // 便签数据模型
private long mNoteId; // 当前便签的数据库ID0表示未持久化
private String mContent; // 便签文本内容
private int mMode; // 模式(如普通模式/待办清单模式)
// 属性字段
private long mAlertDate; // 提醒时间毫秒时间戳0表示未设置
private long mModifiedDate; // 最后修改时间
private int mBgColorId; // 背景颜色ID对应资源索引
private int mWidgetId; // 关联的小部件ID
private int mWidgetType; // 小部件类型如2x、4x
private long mFolderId; // 所属文件夹ID
// 上下文与状态
private Context mContext; // 上下文对象
private static final String TAG = "WorkingNote";
private boolean mIsDeleted; // 标记是否已删除
// 监听器接口
private NoteSettingChangedListener mNoteSettingStatusListener; // 属性变更监听器
// 数据库查询字段定义
/** 数据表Data表查询字段 */
public static final String[] DATA_PROJECTION = new String[] {
DataColumns.ID, // 数据项ID
DataColumns.CONTENT, // 内容(文本或通话记录)
DataColumns.MIME_TYPE, // MIME类型区分文本/通话记录)
DataColumns.DATA1, // 扩展字段1如模式
DataColumns.DATA2, // 扩展字段2
DataColumns.DATA3, // 扩展字段3
DataColumns.DATA4, // 扩展字段4
};
/** 便签表Note表查询字段 */
public static final String[] NOTE_PROJECTION = new String[] {
NoteColumns.PARENT_ID, // 父文件夹ID
NoteColumns.ALERTED_DATE, // 提醒时间
NoteColumns.BG_COLOR_ID, // 背景色ID
NoteColumns.WIDGET_ID, // 关联小部件ID
NoteColumns.WIDGET_TYPE, // 小部件类型
NoteColumns.MODIFIED_DATE // 修改时间
};
// 数据表字段索引常量 --------------------------------
private static final int DATA_ID_COLUMN = 0;
private static final int DATA_CONTENT_COLUMN = 1;
private static final int DATA_MIME_TYPE_COLUMN = 2;
private static final int DATA_MODE_COLUMN = 3;
// 便签表字段索引常量 --------------------------------
private static final int NOTE_PARENT_ID_COLUMN = 0;
private static final int NOTE_ALERTED_DATE_COLUMN = 1;
private static final int NOTE_BG_COLOR_ID_COLUMN = 2;
private static final int NOTE_WIDGET_ID_COLUMN = 3;
private static final int NOTE_WIDGET_TYPE_COLUMN = 4;
private static final int NOTE_MODIFIED_DATE_COLUMN = 5;
// 构造方法 ----------------------------------------
/**
* 便
* @param context
* @param folderId ID
*/
private WorkingNote(Context context, long folderId) {
mContext = context;
mAlertDate = 0; // 默认无提醒
mModifiedDate = System.currentTimeMillis();
mFolderId = folderId;
mNote = new Note(); // 初始化空Note对象
mNoteId = 0; // 新便签未持久化ID为0
mIsDeleted = false;
mMode = 0; // 默认普通模式
mWidgetType = Notes.TYPE_WIDGET_INVALIDE; // 初始无小部件关联
}
/**
* 便
* @param context
* @param noteId 便ID
* @param folderId ID0
*/
private WorkingNote(Context context, long noteId, long folderId) {
mContext = context;
mNoteId = noteId;
mFolderId = folderId;
mIsDeleted = false;
mNote = new Note();
loadNote(); // 从数据库加载数据
}
// 核心方法 ----------------------------------------
/**
* 便Note
*/
private void loadNote() {
// 查询便签表
Cursor cursor = mContext.getContentResolver().query(
ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, mNoteId),
NOTE_PROJECTION, null, null, null);
if (cursor != null) {
if (cursor.moveToFirst()) {
// 解析字段
mFolderId = cursor.getLong(NOTE_PARENT_ID_COLUMN);
mBgColorId = cursor.getInt(NOTE_BG_COLOR_ID_COLUMN);
mWidgetId = cursor.getInt(NOTE_WIDGET_ID_COLUMN);
mWidgetType = cursor.getInt(NOTE_WIDGET_TYPE_COLUMN);
mAlertDate = cursor.getLong(NOTE_ALERTED_DATE_COLUMN);
mModifiedDate = cursor.getLong(NOTE_MODIFIED_DATE_COLUMN);
}
cursor.close();
} else {
Log.e(TAG, "无法找到便签ID: " + mNoteId);
throw new IllegalArgumentException("无效的便签ID: " + mNoteId);
}
loadNoteData(); // 继续加载数据表内容
}
/**
* 便Data
*/
private void loadNoteData() {
// 查询关联的数据表项
Cursor cursor = mContext.getContentResolver().query(
Notes.CONTENT_DATA_URI,
DATA_PROJECTION,
DataColumns.NOTE_ID + "=?",
new String[] { String.valueOf(mNoteId) },
null
);
if (cursor != null) {
if (cursor.moveToFirst()) {
do {
String type = cursor.getString(DATA_MIME_TYPE_COLUMN);
if (DataConstants.NOTE.equals(type)) {
// 加载文本数据
mContent = cursor.getString(DATA_CONTENT_COLUMN);
mMode = cursor.getInt(DATA_MODE_COLUMN);
mNote.setTextDataId(cursor.getLong(DATA_ID_COLUMN)); // 关联数据项ID
} else if (DataConstants.CALL_NOTE.equals(type)) {
// 加载通话记录数据
mNote.setCallDataId(cursor.getLong(DATA_ID_COLUMN));
} else {
Log.d(TAG, "未知数据类型: " + type);
}
} while (cursor.moveToNext());
}
cursor.close();
} else {
Log.e(TAG, "无法找到便签数据ID: " + mNoteId);
throw new IllegalArgumentException("无效的便签数据ID: " + mNoteId);
}
}
/**
* 便
* @param context
* @param folderId ID
* @param widgetId ID
* @param widgetType
* @param defaultBgColorId ID
*/
public static WorkingNote createEmptyNote(Context context, long folderId, int widgetId,
int widgetType, int defaultBgColorId) {
WorkingNote note = new WorkingNote(context, folderId);
note.setBgColorId(defaultBgColorId); // 设置默认背景
note.setWidgetId(widgetId); // 绑定小部件
note.setWidgetType(widgetType);
return note;
}
/**
* 便
* @param context
* @param id 便ID
*/
public static WorkingNote load(Context context, long id) {
return new WorkingNote(context, id, 0); // 文件夹ID后续从数据库加载
}
/**
* 便
* @return
*/
public synchronized boolean saveNote() {
if (isWorthSaving()) { // 检查是否值得保存
// 若为新便签生成数据库ID
if (!existInDatabase()) {
if ((mNoteId = Note.getNewNoteId(mContext, mFolderId)) == 0) {
Log.e(TAG, "创建新便签失败ID: " + mNoteId);
return false;
}
}
// 同步数据到数据库
mNote.syncNote(mContext, mNoteId);
// 若关联小部件通知UI更新
if (mWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID &&
mWidgetType != Notes.TYPE_WIDGET_INVALIDE &&
mNoteSettingStatusListener != null) {
mNoteSettingStatusListener.onWidgetChanged();
}
return true;
} else {
return false; // 无需保存
}
}
// 辅助方法 ----------------------------------------
/**
* 便
*/
public boolean existInDatabase() {
return mNoteId > 0;
}
/**
* 便
*
* -
* - 便
* -
*/
private boolean isWorthSaving() {
return !(mIsDeleted ||
(!existInDatabase() && TextUtils.isEmpty(mContent)) ||
(existInDatabase() && !mNote.isLocalModified()));
}
// 属性设置方法 ------------------------------------
/**
*
* @param date
* @param set
*/
public void setAlertDate(long date, boolean set) {
if (date != mAlertDate) {
mAlertDate = date;
mNote.setNoteValue(NoteColumns.ALERTED_DATE, String.valueOf(mAlertDate));
}
if (mNoteSettingStatusListener != null) {
mNoteSettingStatusListener.onClockAlertChanged(date, set); // 通知监听器
}
}
/**
*
* @param mark
*/
public void markDeleted(boolean mark) {
mIsDeleted = mark;
// 若关联小部件,通知更新
if (mWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID &&
mWidgetType != Notes.TYPE_WIDGET_INVALIDE &&
mNoteSettingStatusListener != null) {
mNoteSettingStatusListener.onWidgetChanged();
}
}
/**
* ID
* @param id ID
*/
public void setBgColorId(int id) {
if (id != mBgColorId) {
mBgColorId = id;
if (mNoteSettingStatusListener != null) {
mNoteSettingStatusListener.onBackgroundColorChanged();
}
mNote.setNoteValue(NoteColumns.BG_COLOR_ID, String.valueOf(id));
}
}
/**
*
* @param mode
*/
public void setCheckListMode(int mode) {
if (mMode != mode) {
// 触发模式切换回调
if (mNoteSettingStatusListener != null) {
mNoteSettingStatusListener.onCheckListModeChanged(mMode, mode);
}
mMode = mode;
mNote.setTextData(TextNote.MODE, String.valueOf(mMode)); // 更新数据模型
}
}
// 其他属性设置方法(略,逻辑类似)-------------------
// ... setWidgetType(), setWidgetId(), setWorkingText(), convertToCallNote() ...
// 数据获取方法 ------------------------------------
public String getContent() {
return mContent;
}
public long getAlertDate() {
return mAlertDate;
}
public int getBgColorResId() {
return NoteBgResources.getNoteBgResource(mBgColorId);
}
// ... 其他getter方法 ...
// 监听器接口 --------------------------------------
/**
* 便
* UI
*/
public interface NoteSettingChangedListener {
/** 背景色变更 */
void onBackgroundColorChanged();
/** 提醒时间设置/取消 */
void onClockAlertChanged(long date, boolean set);
/** 小部件内容需更新 */
void onWidgetChanged();
/** 待办清单模式切换 */
void onCheckListModeChanged(int oldMode, int newMode);
}
}

@ -1,189 +0,0 @@
package net.micode.notes.widget;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.util.Log;
import android.widget.RemoteViews;
import net.micode.notes.R;
import net.micode.notes.data.Notes;
import net.micode.notes.data.Notes.NoteColumns;
import net.micode.notes.tool.ResourceParser;
import net.micode.notes.ui.NoteEditActivity;
import net.micode.notes.ui.NotesListActivity;
/**
* NoteWidgetProvider 便
* 便
*
*/
public abstract class NoteWidgetProvider extends AppWidgetProvider {
// 查询便签数据时使用的投影列,指定需要获取的数据库字段
public static final String[] PROJECTION = new String[] {
NoteColumns.ID, // 便签ID
NoteColumns.BG_COLOR_ID, // 便签背景颜色ID
NoteColumns.SNIPPET // 便签摘要内容
};
// 投影列索引常量,提高代码可读性
public static final int COLUMN_ID = 0;
public static final int COLUMN_BG_COLOR_ID = 1;
public static final int COLUMN_SNIPPET = 2;
private static final String TAG = "NoteWidgetProvider";
/**
*
* 便widget_idINVALID_APPWIDGET_ID
*
* @param context
* @param appWidgetIds ID
*/
@Override
public void onDeleted(Context context, int[] appWidgetIds) {
ContentValues values = new ContentValues();
values.put(NoteColumns.WIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
// 遍历所有被删除的小部件ID更新对应便签记录
for (int i = 0; i < appWidgetIds.length; i++) {
context.getContentResolver().update(Notes.CONTENT_NOTE_URI,
values,
NoteColumns.WIDGET_ID + "=?",
new String[] { String.valueOf(appWidgetIds[i])});
}
}
/**
* ID便
* 便
*
* @param context
* @param widgetId ID
* @return 便Cursor使
*/
private Cursor getNoteWidgetInfo(Context context, int widgetId) {
return context.getContentResolver().query(Notes.CONTENT_NOTE_URI,
PROJECTION,
NoteColumns.WIDGET_ID + "=? AND " + NoteColumns.PARENT_ID + "<>?",
new String[] { String.valueOf(widgetId), String.valueOf(Notes.ID_TRASH_FOLER) },
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++) {
if (appWidgetIds[i] != AppWidgetManager.INVALID_APPWIDGET_ID) {
int bgId = ResourceParser.getDefaultBgId(context);
String snippet = "";
// 创建启动便签编辑界面的Intent
Intent intent = new Intent(context, NoteEditActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra(Notes.INTENT_EXTRA_WIDGET_ID, appWidgetIds[i]);
intent.putExtra(Notes.INTENT_EXTRA_WIDGET_TYPE, getWidgetType());
// 查询小部件对应的便签信息
Cursor c = getNoteWidgetInfo(context, appWidgetIds[i]);
if (c != null && c.moveToFirst()) {
// 检查是否存在多个相同widget_id的便签异常情况
if (c.getCount() > 1) {
Log.e(TAG, "Multiple message with same widget id:" + appWidgetIds[i]);
c.close();
return;
}
// 从Cursor中获取便签内容和背景ID
snippet = c.getString(COLUMN_SNIPPET);
bgId = c.getInt(COLUMN_BG_COLOR_ID);
intent.putExtra(Intent.EXTRA_UID, c.getLong(COLUMN_ID));
intent.setAction(Intent.ACTION_VIEW);
} else {
// 若未找到对应便签,显示默认提示文本
snippet = context.getResources().getString(R.string.widget_havenot_content);
intent.setAction(Intent.ACTION_INSERT_OR_EDIT);
}
// 确保Cursor被关闭
if (c != null) {
c.close();
}
// 创建RemoteViews并设置背景和文本
RemoteViews rv = new RemoteViews(context.getPackageName(), getLayoutId());
rv.setImageViewResource(R.id.widget_bg_image, getBgResourceId(bgId));
intent.putExtra(Notes.INTENT_EXTRA_BACKGROUND_ID, bgId);
// 根据隐私模式设置不同的点击行为和显示内容
PendingIntent pendingIntent = null;
if (privacyMode) {
rv.setTextViewText(R.id.widget_text,
context.getString(R.string.widget_under_visit_mode));
pendingIntent = PendingIntent.getActivity(context, appWidgetIds[i],
new Intent(context, NotesListActivity.class),
PendingIntent.FLAG_UPDATE_CURRENT);
} else {
rv.setTextViewText(R.id.widget_text, snippet);
pendingIntent = PendingIntent.getActivity(context, appWidgetIds[i], intent,
PendingIntent.FLAG_UPDATE_CURRENT);
}
// 设置点击事件并更新小部件
rv.setOnClickPendingIntent(R.id.widget_text, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetIds[i], rv);
}
}
}
/**
* IDID
*
*
* @param bgId ID
* @return ID
*/
protected abstract int getBgResourceId(int bgId);
/**
* 使ID
*
*
* @return ID
*/
protected abstract int getLayoutId();
/**
*
* 2x4x
*
* @return
*/
protected abstract int getWidgetType();
}

@ -1,81 +0,0 @@
/*
* 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.widget;
import android.appwidget.AppWidgetManager;
import android.content.Context;
import net.micode.notes.R;
import net.micode.notes.data.Notes;
import net.micode.notes.tool.ResourceParser;
/**
* NoteWidgetProvider_2x 2x
* NoteWidgetProvider便
* 2 x 2
*/
public class NoteWidgetProvider_2x extends NoteWidgetProvider {
/**
*
*
*
* @param context
* @param appWidgetManager
* @param appWidgetIds ID
*/
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
// 调用父类的更新方法处理通用更新逻辑
super.update(context, appWidgetManager, appWidgetIds);
}
/**
* 使ID
*
*
* @return R.layout.widget_2x ID
*/
@Override
protected int getLayoutId() {
return R.layout.widget_2x;
}
/**
* IDID
* ID
*
* @param bgId ID Notes
* @return ID
*/
@Override
protected int getBgResourceId(int bgId) {
// 使用 ResourceParser 工具类获取2x小部件的背景资源
return ResourceParser.WidgetBgResources.getWidget2xBgResource(bgId);
}
/**
*
*
*
* @return Notes.TYPE_WIDGET_2X2x
*/
@Override
protected int getWidgetType() {
return Notes.TYPE_WIDGET_2X;
}
}

@ -1,67 +0,0 @@
package net.micode.notes.widget;
import android.appwidget.AppWidgetManager;
import android.content.Context;
import net.micode.notes.R;
import net.micode.notes.data.Notes;
import net.micode.notes.tool.ResourceParser;
/**
* NoteWidgetProvider_4x 4x 便
* NoteWidgetProvider 4x 便
* 4x 4 x N
*/
public class NoteWidgetProvider_4x extends NoteWidgetProvider {
/**
*
*
*
* @param context
* @param appWidgetManager
* @param appWidgetIds ID
*/
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
// 调用父类的更新方法处理通用更新逻辑
super.update(context, appWidgetManager, appWidgetIds);
}
/**
* 使ID
* 4x UI
*
* @return R.layout.widget_4x ID
*/
@Override // 此处应添加@Override注解以确保方法重写正确性
protected int getLayoutId() {
return R.layout.widget_4x;
}
/**
* IDID
* 使
*
* @param bgId ID Notes
* @return ID
*/
@Override
protected int getBgResourceId(int bgId) {
// 使用工具类获取4x小部件的背景资源
return ResourceParser.WidgetBgResources.getWidget4xBgResource(bgId);
}
/**
*
*
*
* @return Notes.TYPE_WIDGET_4X4x便
*/
@Override
protected int getWidgetType() {
return Notes.TYPE_WIDGET_4X;
}
}
Loading…
Cancel
Save