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.
notes/src/notes/ui/NotesPreferenceActivity.java

768 lines
31 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)
*
* 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.ui;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.ActionBar;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceActivity;
import android.preference.PreferenceCategory;
import android.text.TextUtils;
import android.text.format.DateFormat;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import net.micode.notes.R;
import net.micode.notes.data.Notes;
import net.micode.notes.data.Notes.NoteColumns;
import net.micode.notes.gtask.remote.GTaskSyncService;
/**
* 笔记应用的设置界面Activity
* 主要负责Google Task同步账户的设置和管理
*/
public class NotesPreferenceActivity extends PreferenceActivity {
// 偏好设置文件名
public static final String PREFERENCE_NAME = "notes_preferences";
// 同步账户名称的键11
public static final String PREFERENCE_SYNC_ACCOUNT_NAME = "pref_key_account_name";
// 上次同步时间的键
public static final String PREFERENCE_LAST_SYNC_TIME = "pref_last_sync_time";
// 背景颜色设置的键
public static final String PREFERENCE_SET_BG_COLOR_KEY = "pref_key_bg_random_appear";
// 老年人模式的键
public static final String PREFERENCE_ELDER_MODE_KEY = "pref_key_elder_mode";
// 同步账户设置的键
private static final String PREFERENCE_SYNC_ACCOUNT_KEY = "pref_sync_account_key";
// 账户授权过滤器的键
private static final String AUTHORITIES_FILTER_KEY = "authorities";
private PreferenceCategory mAccountCategory; // 账户设置类别
private GTaskReceiver mReceiver; // 同步服务广播接收器
private Account[] mOriAccounts; // 原始账户列表(用于检测新添加的账户)
private boolean mHasAddedAccount; // 标记是否添加了新账户
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
/* 使用应用图标作为导航按钮 */
getActionBar().setDisplayHomeAsUpEnabled(true);
// 检查并设置密保问题(只在首次设置时显示)
if (!hasSecurityQuestionsSet()) {
showSetSecurityQuestionsDialog();
}
// 从XML文件加载偏好设置
addPreferencesFromResource(R.xml.preferences);
mAccountCategory = (PreferenceCategory) findPreference(PREFERENCE_SYNC_ACCOUNT_KEY);
mReceiver = new GTaskReceiver(); // 创建广播接收器
IntentFilter filter = new IntentFilter();
filter.addAction(GTaskSyncService.GTASK_SERVICE_BROADCAST_NAME); // 注册同步服务广播
registerReceiver(mReceiver, filter, Context.RECEIVER_EXPORTED); // 注册广播接收器
mOriAccounts = null;
// 添加设置界面的头部视图
View header = LayoutInflater.from(this).inflate(R.layout.settings_header, null);
getListView().addHeaderView(header, null, true);
}
@Override
protected void onResume() {
super.onResume();
// 如果用户添加了新账户,需要自动设置同步账户
if (mHasAddedAccount) {
Account[] accounts = getGoogleAccounts();
// 检查是否有新账户添加
if (mOriAccounts != null && accounts.length > mOriAccounts.length) {
for (Account accountNew : accounts) {
boolean found = false;
for (Account accountOld : mOriAccounts) {
if (TextUtils.equals(accountOld.name, accountNew.name)) {
found = true;
break;
}
}
// 发现新账户,自动设置为同步账户
if (!found) {
setSyncAccount(accountNew.name);
break;
}
}
}
}
refreshUI(); // 刷新界面
}
@Override
protected void onDestroy() {
if (mReceiver != null) {
unregisterReceiver(mReceiver); // 注销广播接收器
}
super.onDestroy();
}
/**
* 检查是否设置了密保问题
* @return 是否已设置
*/
private boolean hasSecurityQuestionsSet() {
SharedPreferences preferences = getSharedPreferences(PREFERENCE_NAME, MODE_PRIVATE);
String name = preferences.getString("security_question_name", "");
String birthday = preferences.getString("security_question_birthday", "");
return !name.isEmpty() && !birthday.isEmpty();
}
/**
* 显示设置密保问题的对话框
*/
private void showSetSecurityQuestionsDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("设置密保问题");
builder.setIcon(android.R.drawable.ic_dialog_info);
builder.setMessage("请设置您的个人信息作为密保,用于重置密码时验证身份");
// 创建布局
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
layout.setPadding(40, 20, 40, 20);
// 创建姓名输入框
final EditText nameInput = new EditText(this);
nameInput.setHint("请输入姓名");
layout.addView(nameInput);
// 创建生日输入框
final EditText birthdayInput = new EditText(this);
birthdayInput.setHint("请输入生日 (YYYY-MM-DD)");
layout.addView(birthdayInput);
builder.setView(layout);
// 设置确定按钮
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String name = nameInput.getText().toString();
String birthday = birthdayInput.getText().toString();
if (!name.isEmpty() && !birthday.isEmpty()) {
// 保存密保信息
SharedPreferences preferences = getSharedPreferences(PREFERENCE_NAME, MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("security_question_name", name);
editor.putString("security_question_birthday", birthday);
editor.apply();
// 显示提示
Toast.makeText(NotesPreferenceActivity.this, "密保设置成功", Toast.LENGTH_SHORT).show();
} else {
// 信息为空,显示提示
Toast.makeText(NotesPreferenceActivity.this, "请完整填写个人信息", Toast.LENGTH_SHORT).show();
// 重新显示对话框
showSetSecurityQuestionsDialog();
}
}
});
// 设置取消按钮
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 如果用户取消,退出设置界面
finish();
}
});
// 设置对话框不可取消
builder.setCancelable(false);
// 显示对话框
builder.show();
}
/**
* 显示验证密保问题的对话框
*/
private void showVerifySecurityQuestionsDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("验证身份");
builder.setIcon(android.R.drawable.ic_lock_idle_lock);
builder.setMessage("请回答您的密保问题以验证身份");
// 创建布局
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
layout.setPadding(40, 20, 40, 20);
// 创建姓名输入框
final EditText nameInput = new EditText(this);
nameInput.setHint("请输入姓名");
layout.addView(nameInput);
// 创建生日输入框
final EditText birthdayInput = new EditText(this);
birthdayInput.setHint("请输入生日 (YYYY-MM-DD)");
layout.addView(birthdayInput);
builder.setView(layout);
// 设置确定按钮
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String name = nameInput.getText().toString();
String birthday = birthdayInput.getText().toString();
if (verifySecurityQuestions(name, birthday)) {
// 验证成功,允许进入设置
Toast.makeText(NotesPreferenceActivity.this, "验证成功", Toast.LENGTH_SHORT).show();
} else {
// 验证失败,显示提示
Toast.makeText(NotesPreferenceActivity.this, "验证失败,请重新输入", Toast.LENGTH_SHORT).show();
// 重新显示验证对话框
showVerifySecurityQuestionsDialog();
}
}
});
// 设置取消按钮
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 如果用户取消,退出设置界面
finish();
}
});
// 设置对话框不可取消
builder.setCancelable(false);
// 显示对话框
builder.show();
}
/**
* 验证密保问题
* @param name 姓名
* @param birthday 生日
* @return 验证是否成功
*/
private boolean verifySecurityQuestions(String name, String birthday) {
SharedPreferences preferences = getSharedPreferences(PREFERENCE_NAME, MODE_PRIVATE);
String savedName = preferences.getString("security_question_name", "");
String savedBirthday = preferences.getString("security_question_birthday", "");
return savedName.equals(name) && savedBirthday.equals(birthday);
}
/**
* 验证密保问题(静态方法,供其他类调用)
* @param context 上下文
* @param name 姓名
* @param birthday 生日
* @return 验证是否成功
*/
public static boolean verifySecurityQuestions(Context context, String name, String birthday) {
SharedPreferences preferences = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
String savedName = preferences.getString("security_question_name", "");
String savedBirthday = preferences.getString("security_question_birthday", "");
return savedName.equals(name) && savedBirthday.equals(birthday);
}
/**
* 检查是否设置了密保问题(静态方法,供其他类调用)
* @param context 上下文
* @return 是否已设置
*/
public static boolean hasSecurityQuestionsSet(Context context) {
SharedPreferences preferences = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
String name = preferences.getString("security_question_name", "");
String birthday = preferences.getString("security_question_birthday", "");
return !name.isEmpty() && !birthday.isEmpty();
}
/**
* 加载账户偏好设置项
*/
private void loadAccountPreference() {
mAccountCategory.removeAll(); // 清空现有项
Preference accountPref = new Preference(this);
final String defaultAccount = getSyncAccountName(this);
accountPref.setTitle(getString(R.string.preferences_account_title));
accountPref.setSummary(getString(R.string.preferences_account_summary));
accountPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
// 如果不在同步中才能操作账户设置
if (!GTaskSyncService.isSyncing()) {
if (TextUtils.isEmpty(defaultAccount)) {
// 首次设置账户,显示选择账户对话框
showSelectAccountAlertDialog();
} else {
// 已有账户设置,显示更改账户确认对话框
showChangeAccountConfirmAlertDialog();
}
} else {
Toast.makeText(NotesPreferenceActivity.this,
R.string.preferences_toast_cannot_change_account, Toast.LENGTH_SHORT)
.show(); // 同步中不能更改账户
}
return true;
}
});
// 添加修改密保问题的选项
Preference securityPref = new Preference(this);
securityPref.setTitle("修改密保问题");
securityPref.setSummary("修改用于重置密码的个人信息");
securityPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
// 验证当前密保才能修改
showVerifySecurityQuestionsForModificationDialog();
return true;
}
});
mAccountCategory.addPreference(accountPref); // 添加到设置类别
mAccountCategory.addPreference(securityPref); // 添加密保设置选项
}
/**
* 显示修改密保问题的对话框
*/
private void showChangeSecurityQuestionsDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("修改密保问题");
builder.setIcon(android.R.drawable.ic_dialog_info);
builder.setMessage("请重新设置您的个人信息作为密保");
// 创建布局
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
layout.setPadding(40, 20, 40, 20);
// 创建姓名输入框
final EditText nameInput = new EditText(this);
nameInput.setHint("请输入姓名");
layout.addView(nameInput);
// 创建生日输入框
final EditText birthdayInput = new EditText(this);
birthdayInput.setHint("请输入生日 (YYYY-MM-DD)");
layout.addView(birthdayInput);
builder.setView(layout);
// 设置确定按钮
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String name = nameInput.getText().toString();
String birthday = birthdayInput.getText().toString();
if (!name.isEmpty() && !birthday.isEmpty()) {
// 保存新的密保信息
SharedPreferences preferences = getSharedPreferences(PREFERENCE_NAME, MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("security_question_name", name);
editor.putString("security_question_birthday", birthday);
editor.apply();
// 显示提示
Toast.makeText(NotesPreferenceActivity.this, "密保修改成功", Toast.LENGTH_SHORT).show();
} else {
// 信息为空,显示提示
Toast.makeText(NotesPreferenceActivity.this, "请完整填写个人信息", Toast.LENGTH_SHORT).show();
}
}
});
// 设置取消按钮
builder.setNegativeButton("取消", null);
// 显示对话框
builder.show();
}
/**
* 显示用于修改密保的验证对话框
*/
private void showVerifySecurityQuestionsForModificationDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("验证身份");
builder.setIcon(android.R.drawable.ic_lock_idle_lock);
builder.setMessage("请回答您的密保问题以验证身份,验证成功后才能修改密保");
// 创建布局
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
layout.setPadding(40, 20, 40, 20);
// 创建姓名输入框
final EditText nameInput = new EditText(this);
nameInput.setHint("请输入姓名");
layout.addView(nameInput);
// 创建生日输入框
final EditText birthdayInput = new EditText(this);
birthdayInput.setHint("请输入生日 (YYYY-MM-DD)");
layout.addView(birthdayInput);
builder.setView(layout);
// 设置确定按钮
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String name = nameInput.getText().toString();
String birthday = birthdayInput.getText().toString();
if (verifySecurityQuestions(name, birthday)) {
// 验证成功,显示修改密保对话框
Toast.makeText(NotesPreferenceActivity.this, "验证成功", Toast.LENGTH_SHORT).show();
showChangeSecurityQuestionsDialog();
} else {
// 验证失败,显示提示
Toast.makeText(NotesPreferenceActivity.this, "验证失败,请重新输入", Toast.LENGTH_SHORT).show();
// 重新显示验证对话框
showVerifySecurityQuestionsForModificationDialog();
}
}
});
// 设置取消按钮
builder.setNegativeButton("取消", null);
// 显示对话框
builder.show();
}
/**
* 加载同步按钮和同步状态显示
*/
private void loadSyncButton() {
Button syncButton = (Button) findViewById(R.id.preference_sync_button);
TextView lastSyncTimeView = (TextView) findViewById(R.id.prefenerece_sync_status_textview);
// 设置按钮状态和文字
if (GTaskSyncService.isSyncing()) {
syncButton.setText(getString(R.string.preferences_button_sync_cancel));
syncButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
GTaskSyncService.cancelSync(NotesPreferenceActivity.this); // 取消同步
}
});
} else {
syncButton.setText(getString(R.string.preferences_button_sync_immediately));
syncButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
GTaskSyncService.startSync(NotesPreferenceActivity.this); // 开始同步
}
});
}
// 只有设置了同步账户才能启用同步按钮
syncButton.setEnabled(!TextUtils.isEmpty(getSyncAccountName(this)));
// 设置上次同步时间显示
if (GTaskSyncService.isSyncing()) {
lastSyncTimeView.setText(GTaskSyncService.getProgressString()); // 显示同步进度
lastSyncTimeView.setVisibility(View.VISIBLE);
} else {
long lastSyncTime = getLastSyncTime(this);
if (lastSyncTime != 0) {
// 格式化显示上次同步时间
lastSyncTimeView.setText(getString(R.string.preferences_last_sync_time,
DateFormat.format(getString(R.string.preferences_last_sync_time_format),
lastSyncTime)));
lastSyncTimeView.setVisibility(View.VISIBLE);
} else {
lastSyncTimeView.setVisibility(View.GONE); // 从未同步过
}
}
}
/**
* 刷新整个设置界面
*/
private void refreshUI() {
loadAccountPreference();
loadSyncButton();
}
/**
* 显示选择账户的对话框
*/
private void showSelectAccountAlertDialog() {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
// 自定义对话框标题
View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null);
TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title);
titleTextView.setText(getString(R.string.preferences_dialog_select_account_title));
TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle);
subtitleTextView.setText(getString(R.string.preferences_dialog_select_account_tips));
dialogBuilder.setCustomTitle(titleView);
dialogBuilder.setPositiveButton(null, null); // 不显示确定按钮
Account[] accounts = getGoogleAccounts();
String defAccount = getSyncAccountName(this);
mOriAccounts = accounts; // 保存当前账户列表
mHasAddedAccount = false; // 重置标记
if (accounts.length > 0) {
CharSequence[] items = new CharSequence[accounts.length];
final CharSequence[] itemMapping = items;
int checkedItem = -1;
int index = 0;
// 填充账户列表
for (Account account : accounts) {
if (TextUtils.equals(account.name, defAccount)) {
checkedItem = index; // 标记已选账户
}
items[index++] = account.name;
}
// 设置单选列表
dialogBuilder.setSingleChoiceItems(items, checkedItem,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 选择账户并保存
setSyncAccount(itemMapping[which].toString());
dialog.dismiss();
refreshUI(); // 刷新界面
}
});
}
// 添加"添加账户"选项
View addAccountView = LayoutInflater.from(this).inflate(R.layout.add_account_text, null);
dialogBuilder.setView(addAccountView);
final AlertDialog dialog = dialogBuilder.show();
addAccountView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mHasAddedAccount = true; // 标记添加了新账户
// 启动添加账户界面
Intent intent = new Intent("android.settings.ADD_ACCOUNT_SETTINGS");
intent.putExtra(AUTHORITIES_FILTER_KEY, new String[] {
"gmail-ls" // 限制为Google账户
});
startActivityForResult(intent, -1);
dialog.dismiss(); // 关闭对话框
}
});
}
/**
* 显示更改账户的确认对话框
*/
private void showChangeAccountConfirmAlertDialog() {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
// 自定义对话框标题
View titleView = LayoutInflater.from(this).inflate(R.layout.account_dialog_title, null);
TextView titleTextView = (TextView) titleView.findViewById(R.id.account_dialog_title);
titleTextView.setText(getString(R.string.preferences_dialog_change_account_title,
getSyncAccountName(this))); // 显示当前账户
TextView subtitleTextView = (TextView) titleView.findViewById(R.id.account_dialog_subtitle);
subtitleTextView.setText(getString(R.string.preferences_dialog_change_account_warn_msg));
dialogBuilder.setCustomTitle(titleView);
// 设置操作菜单项
CharSequence[] menuItemArray = new CharSequence[] {
getString(R.string.preferences_menu_change_account), // 更改账户
getString(R.string.preferences_menu_remove_account), // 移除账户
getString(R.string.preferences_menu_cancel) // 取消
};
dialogBuilder.setItems(menuItemArray, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == 0) {
showSelectAccountAlertDialog(); // 显示选择账户对话框
} else if (which == 1) {
removeSyncAccount(); // 移除同步账户
refreshUI(); // 刷新界面
}
// which == 2 取消,不做任何操作
}
});
dialogBuilder.show();
}
/**
* 获取所有Google账户
* @return Google账户数组
*/
private Account[] getGoogleAccounts() {
AccountManager accountManager = AccountManager.get(this);
return accountManager.getAccountsByType("com.google"); // 获取Google类型账户
}
/**
* 设置同步账户
* @param account 账户名称
*/
private void setSyncAccount(String account) {
// 只有当账户变更时才执行操作
if (!getSyncAccountName(this).equals(account)) {
SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
if (account != null) {
editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, account); // 保存账户名
} else {
editor.putString(PREFERENCE_SYNC_ACCOUNT_NAME, ""); // 清空账户名
}
editor.commit();
// 清除上次同步时间
setLastSyncTime(this, 0);
// 在新线程中清除本地与GTask相关的同步信息
new Thread(new Runnable() {
@Override
public void run() {
ContentValues values = new ContentValues();
values.put(NoteColumns.GTASK_ID, ""); // 清空GTask ID
values.put(NoteColumns.SYNC_ID, 0); // 重置同步ID
getContentResolver().update(Notes.CONTENT_NOTE_URI, values, null, null);
}
}).start();
Toast.makeText(NotesPreferenceActivity.this,
getString(R.string.preferences_toast_success_set_accout, account),
Toast.LENGTH_SHORT).show(); // 显示设置成功提示
}
}
/**
* 移除同步账户
*/
private void removeSyncAccount() {
SharedPreferences settings = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
// 移除相关偏好设置
if (settings.contains(PREFERENCE_SYNC_ACCOUNT_NAME)) {
editor.remove(PREFERENCE_SYNC_ACCOUNT_NAME);
}
if (settings.contains(PREFERENCE_LAST_SYNC_TIME)) {
editor.remove(PREFERENCE_LAST_SYNC_TIME);
}
editor.commit();
// 在新线程中清除本地与GTask相关的同步信息
new Thread(new Runnable() {
@Override
public void run() {
ContentValues values = new ContentValues();
values.put(NoteColumns.GTASK_ID, ""); // 清空GTask ID
values.put(NoteColumns.SYNC_ID, 0); // 重置同步ID
getContentResolver().update(Notes.CONTENT_NOTE_URI, values, null, null);
}
}).start();
}
/**
* 静态方法:获取同步账户名称
* @param context 上下文
* @return 同步账户名称,如果不存在则返回空字符串
*/
public static String getSyncAccountName(Context context) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME,
Context.MODE_PRIVATE);
return settings.getString(PREFERENCE_SYNC_ACCOUNT_NAME, ""); // 默认返回空字符串
}
/**
* 静态方法:设置上次同步时间
* @param context 上下文
* @param time 同步时间戳
*/
public static void setLastSyncTime(Context context, long time) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME,
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putLong(PREFERENCE_LAST_SYNC_TIME, time);
editor.commit();
}
/**
* 静态方法:获取上次同步时间
* @param context 上下文
* @return 上次同步时间戳如果不存在则返回0
*/
public static long getLastSyncTime(Context context) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME,
Context.MODE_PRIVATE);
return settings.getLong(PREFERENCE_LAST_SYNC_TIME, 0); // 默认返回0
}
/**
* GTask同步服务广播接收器
* 用于接收同步状态变化的广播
*/
private class GTaskReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
refreshUI(); // 刷新界面
// 如果正在同步,更新同步进度显示
if (intent.getBooleanExtra(GTaskSyncService.GTASK_SERVICE_BROADCAST_IS_SYNCING, false)) {
TextView syncStatus = (TextView) findViewById(R.id.prefenerece_sync_status_textview);
syncStatus.setText(intent
.getStringExtra(GTaskSyncService.GTASK_SERVICE_BROADCAST_PROGRESS_MSG));
}
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// 点击返回按钮,返回笔记列表界面
Intent intent = new Intent(this, NotesListActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // 清理Activity栈
startActivity(intent);
return true;
default:
return false;
}
}
}