@ -1,5 +1,21 @@
/ *
* 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 ;
package net.micode.notes.ui ;
import android.accounts.Account ;
import android.accounts.Account ;
import android.accounts.AccountManager ;
import android.accounts.AccountManager ;
import android.app.ActionBar ;
import android.app.ActionBar ;
@ -25,147 +41,108 @@ import android.view.View;
import android.widget.Button ;
import android.widget.Button ;
import android.widget.TextView ;
import android.widget.TextView ;
import android.widget.Toast ;
import android.widget.Toast ;
import net.micode.notes.R ;
import net.micode.notes.R ;
import net.micode.notes.data.Notes ;
import net.micode.notes.data.Notes ;
import net.micode.notes.data.Notes.NoteColumns ;
import net.micode.notes.data.Notes.NoteColumns ;
import net.micode.notes.gtask.remote.GTaskSyncService ;
import net.micode.notes.gtask.remote.GTaskSyncService ;
/ *
* 该 类 功 能 : NotesPreferenceActivity , 在 小 米 便 签 中 主 要 实 现 的 是 对 背 景 颜 色 和 字 体 大 小 的 数 据 储 存 。
* 继 承 了 PreferenceActivity 主 要 功 能 为 对 系 统 信 息 和 配 置 进 行 自 动 保 存 的 Activity
* /
public class NotesPreferenceActivity extends PreferenceActivity {
public class NotesPreferenceActivity extends PreferenceActivity {
public static final String PREFERENCE_NAME = "notes_preferences" ;
public static final String PREFERENCE_NAME = "notes_preferences" ;
//优先名
public static final String PREFERENCE_SYNC_ACCOUNT_NAME = "pref_key_account_name" ;
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_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_SET_BG_COLOR_KEY = "pref_key_bg_random_appear" ;
private static final String PREFERENCE_SYNC_ACCOUNT_KEY = "pref_sync_account_key" ;
private static final String PREFERENCE_SYNC_ACCOUNT_KEY = "pref_sync_account_key" ;
//同步密码
private static final String AUTHORITIES_FILTER_KEY = "authorities" ;
private static final String AUTHORITIES_FILTER_KEY = "authorities" ;
//本地密码
private PreferenceCategory mAccountCategory ;
private PreferenceCategory mAccountCategory ;
//账户分组
private GTaskReceiver mReceiver ;
private GTaskReceiver mReceiver ;
//同步任务接收器
private Account [ ] mOriAccounts ;
private Account [ ] mOriAccounts ;
//账户
private boolean mHasAddedAccount ;
private boolean mHasAddedAccount ;
//账户的hash标记
@Override
@Override
/*创建一个activity*/
protected void onCreate ( Bundle icicle ) {
protected void onCreate ( Bundle icicle ) {
//先执行父类的创建函数
super . onCreate ( icicle ) ;
super . onCreate ( icicle ) ;
/* using the app icon for navigation */
/* using the app icon for navigation */
getActionBar ( ) . setDisplayHomeAsUpEnabled ( true ) ;
getActionBar ( ) . setDisplayHomeAsUpEnabled ( true ) ;
//给左上角图标的左边加上一个返回的图标
addPreferencesFromResource ( R . xml . preferences ) ;
addPreferencesFromResource ( R . xml . preferences ) ;
//添加xml来源并显示 xml
mAccountCategory = ( PreferenceCategory ) findPreference ( PREFERENCE_SYNC_ACCOUNT_KEY ) ;
mAccountCategory = ( PreferenceCategory ) findPreference ( PREFERENCE_SYNC_ACCOUNT_KEY ) ;
//根据同步账户关键码来初始化分组
mReceiver = new GTaskReceiver ( ) ;
mReceiver = new GTaskReceiver ( ) ;
IntentFilter filter = new IntentFilter ( ) ;
IntentFilter filter = new IntentFilter ( ) ;
filter . addAction ( GTaskSyncService . GTASK_SERVICE_BROADCAST_NAME ) ;
filter . addAction ( GTaskSyncService . GTASK_SERVICE_BROADCAST_NAME ) ;
registerReceiver ( mReceiver , filter ) ;
registerReceiver ( mReceiver , filter ) ;
//初始化同步组件
mOriAccounts = null ;
mOriAccounts = null ;
View header = LayoutInflater . from ( this ) . inflate ( R . layout . settings_header , null ) ;
View header = LayoutInflater . from ( this ) . inflate ( R . layout . settings_header , null ) ;
//获取listvivew, ListView的作用:用于列出所有选择
getListView ( ) . addHeaderView ( header , null , true ) ;
getListView ( ) . addHeaderView ( header , null , true ) ;
//在listview组件上方添加其他组件
}
}
@Override
@Override
/ *
* 函 数 功 能 : activity 交 互 功 能 的 实 现 , 用 于 接 受 用 户 的 输 入
* 函 数 实 现 : 如 下 注 释
* /
protected void onResume ( ) {
protected void onResume ( ) {
//先执行父类 的交互实现
super . onResume ( ) ;
super . onResume ( ) ;
// need to set sync account automatically if user has added a new
// need to set sync account automatically if user has added a new
// account
// account
if ( mHasAddedAccount ) {
if ( mHasAddedAccount ) {
//若用户新加了账户则自动设置同步账户
Account [ ] accounts = getGoogleAccounts ( ) ;
Account [ ] accounts = getGoogleAccounts ( ) ;
//获取google同步账户
if ( mOriAccounts ! = null & & accounts . length > mOriAccounts . length ) {
if ( mOriAccounts ! = null & & accounts . length > mOriAccounts . length ) {
//若原账户不为空且当前账户有增加
for ( Account accountNew : accounts ) {
for ( Account accountNew : accounts ) {
boolean found = false ;
boolean found = false ;
for ( Account accountOld : mOriAccounts ) {
for ( Account accountOld : mOriAccounts ) {
if ( TextUtils . equals ( accountOld . name , accountNew . name ) ) {
if ( TextUtils . equals ( accountOld . name , accountNew . name ) ) {
//更新账户
found = true ;
found = true ;
break ;
break ;
}
}
}
}
if ( ! found ) {
if ( ! found ) {
setSyncAccount ( accountNew . name ) ;
setSyncAccount ( accountNew . name ) ;
//若是没有找到旧的账户,那么同步账号中就只添加新账户
break ;
break ;
}
}
}
}
}
}
}
}
refreshUI ( ) ;
refreshUI ( ) ;
//刷新标签界面
}
}
@Override
@Override
/ *
* 函 数 功 能 : 销 毁 一 个 activity
* 函 数 实 现 : 如 下 注 释
* /
protected void onDestroy ( ) {
protected void onDestroy ( ) {
if ( mReceiver ! = null ) {
if ( mReceiver ! = null ) {
unregisterReceiver ( mReceiver ) ;
unregisterReceiver ( mReceiver ) ;
//注销接收器
}
}
super . onDestroy ( ) ;
super . onDestroy ( ) ;
//执行父类的销毁动作
}
}
/ *
* 函 数 功 能 : 重 新 设 置 账 户 信 息
* 函 数 实 现 : 如 下 注 释
* /
private void loadAccountPreference ( ) {
private void loadAccountPreference ( ) {
mAccountCategory . removeAll ( ) ;
mAccountCategory . removeAll ( ) ;
//销毁所有的分组
Preference accountPref = new Preference ( this ) ;
Preference accountPref = new Preference ( this ) ;
//建立首选项
final String defaultAccount = getSyncAccountName ( this ) ;
final String defaultAccount = getSyncAccountName ( this ) ;
accountPref . setTitle ( getString ( R . string . preferences_account_title ) ) ;
accountPref . setTitle ( getString ( R . string . preferences_account_title ) ) ;
accountPref . setSummary ( getString ( R . string . preferences_account_summary ) ) ;
accountPref . setSummary ( getString ( R . string . preferences_account_summary ) ) ;
//设置首选项的大标题和小标题
accountPref . setOnPreferenceClickListener ( new OnPreferenceClickListener ( ) {
accountPref . setOnPreferenceClickListener ( new OnPreferenceClickListener ( ) {
public boolean onPreferenceClick ( Preference preference ) {
public boolean onPreferenceClick ( Preference preference ) {
//建立监听器
if ( ! GTaskSyncService . isSyncing ( ) ) {
if ( ! GTaskSyncService . isSyncing ( ) ) {
if ( TextUtils . isEmpty ( defaultAccount ) ) {
if ( TextUtils . isEmpty ( defaultAccount ) ) {
// the first time to set account
// the first time to set account
//若是第一次建立账户显示选择账户提示对话框
showSelectAccountAlertDialog ( ) ;
showSelectAccountAlertDialog ( ) ;
} else {
} else {
// if the account has already been set, we need to promp
// if the account has already been set, we need to promp
// user about the risk
// user about the risk
//若是已经建立则显示修改对话框并进行修改操作
showChangeAccountConfirmAlertDialog ( ) ;
showChangeAccountConfirmAlertDialog ( ) ;
}
}
} else {
} else {
//若在没有同步的情况下, 则在toast中显示不能修改
Toast . makeText ( NotesPreferenceActivity . this ,
Toast . makeText ( NotesPreferenceActivity . this ,
R . string . preferences_toast_cannot_change_account , Toast . LENGTH_SHORT )
R . string . preferences_toast_cannot_change_account , Toast . LENGTH_SHORT )
. show ( ) ;
. show ( ) ;
@ -173,30 +150,22 @@ public class NotesPreferenceActivity extends PreferenceActivity {
return true ;
return true ;
}
}
} ) ;
} ) ;
//根据新建首选项编辑新的账户分组
mAccountCategory . addPreference ( accountPref ) ;
mAccountCategory . addPreference ( accountPref ) ;
}
}
/ *
* 函 数 功 能 : 设 置 按 键 的 状 态 和 最 后 同 步 的 时 间
* 函 数 实 现 : 如 下 注 释
* /
private void loadSyncButton ( ) {
private void loadSyncButton ( ) {
Button syncButton = ( Button ) findViewById ( R . id . preference_sync_button ) ;
Button syncButton = ( Button ) findViewById ( R . id . preference_sync_button ) ;
TextView lastSyncTimeView = ( TextView ) findViewById ( R . id . prefenerece_sync_status_textview ) ;
TextView lastSyncTimeView = ( TextView ) findViewById ( R . id . prefenerece_sync_status_textview ) ;
//获取同步按钮控件和最终同步时间的的窗口
// set button state
// set button state
//设置按钮的状态
if ( GTaskSyncService . isSyncing ( ) ) {
if ( GTaskSyncService . isSyncing ( ) ) {
//若是在同步状态下
syncButton . setText ( getString ( R . string . preferences_button_sync_cancel ) ) ;
syncButton . setText ( getString ( R . string . preferences_button_sync_cancel ) ) ;
syncButton . setOnClickListener ( new View . OnClickListener ( ) {
syncButton . setOnClickListener ( new View . OnClickListener ( ) {
public void onClick ( View v ) {
public void onClick ( View v ) {
GTaskSyncService . cancelSync ( NotesPreferenceActivity . this ) ;
GTaskSyncService . cancelSync ( NotesPreferenceActivity . this ) ;
}
}
} ) ;
} ) ;
//设置按钮显示的文本为“取消同步”以及监听器
} else {
} else {
syncButton . setText ( getString ( R . string . preferences_button_sync_immediately ) ) ;
syncButton . setText ( getString ( R . string . preferences_button_sync_immediately ) ) ;
syncButton . setOnClickListener ( new View . OnClickListener ( ) {
syncButton . setOnClickListener ( new View . OnClickListener ( ) {
@ -204,67 +173,50 @@ public class NotesPreferenceActivity extends PreferenceActivity {
GTaskSyncService . startSync ( NotesPreferenceActivity . this ) ;
GTaskSyncService . startSync ( NotesPreferenceActivity . this ) ;
}
}
} ) ;
} ) ;
//若是不同步则设置按钮显示的文本为“立即同步”以及对应监听器
}
}
syncButton . setEnabled ( ! TextUtils . isEmpty ( getSyncAccountName ( this ) ) ) ;
syncButton . setEnabled ( ! TextUtils . isEmpty ( getSyncAccountName ( this ) ) ) ;
//设置按键可用还是不可用
// set last sync time
// set last sync time
// 设置最终同步时间
if ( GTaskSyncService . isSyncing ( ) ) {
if ( GTaskSyncService . isSyncing ( ) ) {
//若是在同步的情况下
lastSyncTimeView . setText ( GTaskSyncService . getProgressString ( ) ) ;
lastSyncTimeView . setText ( GTaskSyncService . getProgressString ( ) ) ;
lastSyncTimeView . setVisibility ( View . VISIBLE ) ;
lastSyncTimeView . setVisibility ( View . VISIBLE ) ;
// 根据当前同步服务器设置时间显示框的文本以及可见性
} else {
} else {
//若是非同步情况
long lastSyncTime = getLastSyncTime ( this ) ;
long lastSyncTime = getLastSyncTime ( this ) ;
if ( lastSyncTime ! = 0 ) {
if ( lastSyncTime ! = 0 ) {
lastSyncTimeView . setText ( getString ( R . string . preferences_last_sync_time ,
lastSyncTimeView . setText ( getString ( R . string . preferences_last_sync_time ,
DateFormat . format ( getString ( R . string . preferences_last_sync_time_format ) ,
DateFormat . format ( getString ( R . string . preferences_last_sync_time_format ) ,
lastSyncTime ) ) ) ;
lastSyncTime ) ) ) ;
lastSyncTimeView . setVisibility ( View . VISIBLE ) ;
lastSyncTimeView . setVisibility ( View . VISIBLE ) ;
//则根据最后同步时间的信息来编辑时间显示框的文本内容和可见性
} else {
} else {
//若时间为空直接设置为不可见状态
lastSyncTimeView . setVisibility ( View . GONE ) ;
lastSyncTimeView . setVisibility ( View . GONE ) ;
}
}
}
}
}
}
/ *
* 函 数 功 能 : 刷 新 标 签 界 面
* 函 数 实 现 : 调 用 上 文 设 置 账 号 和 设 置 按 键 两 个 函 数 来 实 现
* /
private void refreshUI ( ) {
private void refreshUI ( ) {
loadAccountPreference ( ) ;
loadAccountPreference ( ) ;
loadSyncButton ( ) ;
loadSyncButton ( ) ;
}
}
/ *
* 函 数 功 能 : 显 示 账 户 选 择 的 对 话 框 并 进 行 账 户 的 设 置
* 函 数 实 现 : 如 下 注 释
* /
private void showSelectAccountAlertDialog ( ) {
private void showSelectAccountAlertDialog ( ) {
AlertDialog . Builder dialogBuilder = new AlertDialog . Builder ( this ) ;
AlertDialog . Builder dialogBuilder = new AlertDialog . Builder ( this ) ;
//创建一个新的对话框
View titleView = LayoutInflater . from ( this ) . inflate ( R . layout . account_dialog_title , null ) ;
View titleView = LayoutInflater . from ( this ) . inflate ( R . layout . account_dialog_title , null ) ;
TextView titleTextView = ( TextView ) titleView . findViewById ( R . id . account_dialog_title ) ;
TextView titleTextView = ( TextView ) titleView . findViewById ( R . id . account_dialog_title ) ;
titleTextView . setText ( getString ( R . string . preferences_dialog_select_account_title ) ) ;
titleTextView . setText ( getString ( R . string . preferences_dialog_select_account_title ) ) ;
TextView subtitleTextView = ( TextView ) titleView . findViewById ( R . id . account_dialog_subtitle ) ;
TextView subtitleTextView = ( TextView ) titleView . findViewById ( R . id . account_dialog_subtitle ) ;
subtitleTextView . setText ( getString ( R . string . preferences_dialog_select_account_tips ) ) ;
subtitleTextView . setText ( getString ( R . string . preferences_dialog_select_account_tips ) ) ;
//设置标题以及子标题的内容
dialogBuilder . setCustomTitle ( titleView ) ;
dialogBuilder . setCustomTitle ( titleView ) ;
dialogBuilder . setPositiveButton ( null , null ) ;
dialogBuilder . setPositiveButton ( null , null ) ;
//设置对话框的自定义标题, 建立一个YES的按钮
Account [ ] accounts = getGoogleAccounts ( ) ;
Account [ ] accounts = getGoogleAccounts ( ) ;
String defAccount = getSyncAccountName ( this ) ;
String defAccount = getSyncAccountName ( this ) ;
//获取同步账户信息
mOriAccounts = accounts ;
mOriAccounts = accounts ;
mHasAddedAccount = false ;
mHasAddedAccount = false ;
if ( accounts . length > 0 ) {
if ( accounts . length > 0 ) {
//若账户不为空
CharSequence [ ] items = new CharSequence [ accounts . length ] ;
CharSequence [ ] items = new CharSequence [ accounts . length ] ;
final CharSequence [ ] itemMapping = items ;
final CharSequence [ ] itemMapping = items ;
int checkedItem = - 1 ;
int checkedItem = - 1 ;
@ -272,120 +224,84 @@ public class NotesPreferenceActivity extends PreferenceActivity {
for ( Account account : accounts ) {
for ( Account account : accounts ) {
if ( TextUtils . equals ( account . name , defAccount ) ) {
if ( TextUtils . equals ( account . name , defAccount ) ) {
checkedItem = index ;
checkedItem = index ;
//在账户列表中查询到所需账户
}
}
items [ index + + ] = account . name ;
items [ index + + ] = account . name ;
}
}
dialogBuilder . setSingleChoiceItems ( items , checkedItem ,
dialogBuilder . setSingleChoiceItems ( items , checkedItem ,
//在对话框建立一个单选的复选框
new DialogInterface . OnClickListener ( ) {
new DialogInterface . OnClickListener ( ) {
public void onClick ( DialogInterface dialog , int which ) {
public void onClick ( DialogInterface dialog , int which ) {
setSyncAccount ( itemMapping [ which ] . toString ( ) ) ;
setSyncAccount ( itemMapping [ which ] . toString ( ) ) ;
dialog . dismiss ( ) ;
dialog . dismiss ( ) ;
//取消对话框
refreshUI ( ) ;
refreshUI ( ) ;
}
}
//设置点击后执行的事件,包括检录新同步账户和刷新标签界面
} ) ;
} ) ;
//建立对话框网络版的监听器
}
}
View addAccountView = LayoutInflater . from ( this ) . inflate ( R . layout . add_account_text , null ) ;
View addAccountView = LayoutInflater . from ( this ) . inflate ( R . layout . add_account_text , null ) ;
dialogBuilder . setView ( addAccountView ) ;
dialogBuilder . setView ( addAccountView ) ;
//给新加账户对话框设置自定义样式
final AlertDialog dialog = dialogBuilder . show ( ) ;
final AlertDialog dialog = dialogBuilder . show ( ) ;
//显示对话框
addAccountView . setOnClickListener ( new View . OnClickListener ( ) {
addAccountView . setOnClickListener ( new View . OnClickListener ( ) {
public void onClick ( View v ) {
public void onClick ( View v ) {
mHasAddedAccount = true ;
mHasAddedAccount = true ;
//将新加账户的hash置true
Intent intent = new Intent ( "android.settings.ADD_ACCOUNT_SETTINGS" ) ;
Intent intent = new Intent ( "android.settings.ADD_ACCOUNT_SETTINGS" ) ;
//建立网络建立组件
intent . putExtra ( AUTHORITIES_FILTER_KEY , new String [ ] {
intent . putExtra ( AUTHORITIES_FILTER_KEY , new String [ ] {
"gmail-ls"
"gmail-ls"
} ) ;
} ) ;
startActivityForResult ( intent , - 1 ) ;
startActivityForResult ( intent , - 1 ) ;
//跳回上一个选项
dialog . dismiss ( ) ;
dialog . dismiss ( ) ;
}
}
} ) ;
} ) ;
//建立新加账户对话框的监听器
}
}
/ *
* 函 数 功 能 : 显 示 账 户 选 择 对 话 框 和 相 关 账 户 操 作
* 函 数 实 现 : 如 下 注 释
* /
private void showChangeAccountConfirmAlertDialog ( ) {
private void showChangeAccountConfirmAlertDialog ( ) {
AlertDialog . Builder dialogBuilder = new AlertDialog . Builder ( this ) ;
AlertDialog . Builder dialogBuilder = new AlertDialog . Builder ( this ) ;
//创建一个新的对话框
View titleView = LayoutInflater . from ( this ) . inflate ( R . layout . account_dialog_title , null ) ;
View titleView = LayoutInflater . from ( this ) . inflate ( R . layout . account_dialog_title , null ) ;
TextView titleTextView = ( TextView ) titleView . findViewById ( R . id . account_dialog_title ) ;
TextView titleTextView = ( TextView ) titleView . findViewById ( R . id . account_dialog_title ) ;
titleTextView . setText ( getString ( R . string . preferences_dialog_change_account_title ,
titleTextView . setText ( getString ( R . string . preferences_dialog_change_account_title ,
getSyncAccountName ( this ) ) ) ;
getSyncAccountName ( this ) ) ) ;
TextView subtitleTextView = ( TextView ) titleView . findViewById ( R . id . account_dialog_subtitle ) ;
TextView subtitleTextView = ( TextView ) titleView . findViewById ( R . id . account_dialog_subtitle ) ;
subtitleTextView . setText ( getString ( R . string . preferences_dialog_change_account_warn_msg ) ) ;
subtitleTextView . setText ( getString ( R . string . preferences_dialog_change_account_warn_msg ) ) ;
//根据同步修改的账户信息设置标题以及子标题的内容
dialogBuilder . setCustomTitle ( titleView ) ;
dialogBuilder . setCustomTitle ( titleView ) ;
//设置对话框的自定义标题
CharSequence [ ] menuItemArray = new CharSequence [ ] {
CharSequence [ ] menuItemArray = new CharSequence [ ] {
getString ( R . string . preferences_menu_change_account ) ,
getString ( R . string . preferences_menu_change_account ) ,
getString ( R . string . preferences_menu_remove_account ) ,
getString ( R . string . preferences_menu_remove_account ) ,
getString ( R . string . preferences_menu_cancel )
getString ( R . string . preferences_menu_cancel )
} ;
} ;
//定义一些标记字符串
dialogBuilder . setItems ( menuItemArray , new DialogInterface . OnClickListener ( ) {
dialogBuilder . setItems ( menuItemArray , new DialogInterface . OnClickListener ( ) {
//设置对话框要显示的一个list, 用于显示几个命令时,即change, remove, cancel
public void onClick ( DialogInterface dialog , int which ) {
public void onClick ( DialogInterface dialog , int which ) {
//按键功能, 由which来决定
if ( which = = 0 ) {
if ( which = = 0 ) {
//进入账户选择对话框
showSelectAccountAlertDialog ( ) ;
showSelectAccountAlertDialog ( ) ;
} else if ( which = = 1 ) {
} else if ( which = = 1 ) {
//删除账户并且跟新便签界面
removeSyncAccount ( ) ;
removeSyncAccount ( ) ;
refreshUI ( ) ;
refreshUI ( ) ;
}
}
}
}
} ) ;
} ) ;
dialogBuilder . show ( ) ;
dialogBuilder . show ( ) ;
//显示对话框
}
}
/ *
* 函 数 功 能 : 获 取 谷 歌 账 户
* 函 数 实 现 : 通 过 账 户 管 理 器 直 接 获 取
* /
private Account [ ] getGoogleAccounts ( ) {
private Account [ ] getGoogleAccounts ( ) {
AccountManager accountManager = AccountManager . get ( this ) ;
AccountManager accountManager = AccountManager . get ( this ) ;
return accountManager . getAccountsByType ( "com.google" ) ;
return accountManager . getAccountsByType ( "com.google" ) ;
}
}
/ *
* 函 数 功 能 : 设 置 同 步 账 户
* 函 数 实 现 : 如 下 注 释 :
* /
private void setSyncAccount ( String account ) {
private void setSyncAccount ( String account ) {
if ( ! getSyncAccountName ( this ) . equals ( account ) ) {
if ( ! getSyncAccountName ( this ) . equals ( account ) ) {
//假如该账号不在同步账号列表中
SharedPreferences settings = getSharedPreferences ( PREFERENCE_NAME , Context . MODE_PRIVATE ) ;
SharedPreferences settings = getSharedPreferences ( PREFERENCE_NAME , Context . MODE_PRIVATE ) ;
SharedPreferences . Editor editor = settings . edit ( ) ;
SharedPreferences . Editor editor = settings . edit ( ) ;
//编辑共享的首选项
if ( account ! = null ) {
if ( account ! = null ) {
editor . putString ( PREFERENCE_SYNC_ACCOUNT_NAME , account ) ;
editor . putString ( PREFERENCE_SYNC_ACCOUNT_NAME , account ) ;
} else {
} else {
editor . putString ( PREFERENCE_SYNC_ACCOUNT_NAME , "" ) ;
editor . putString ( PREFERENCE_SYNC_ACCOUNT_NAME , "" ) ;
}
}
//将该账号加入到首选项中
editor . commit ( ) ;
editor . commit ( ) ;
//提交修改的数据
// clean up last sync time
setLastSyncTime ( this , 0 ) ;
setLastSyncTime ( this , 0 ) ;
//将最后同步时间清零
// clean up local gtask related info
// clean up local gtask related info
new Thread ( new Runnable ( ) {
new Thread ( new Runnable ( ) {
public void run ( ) {
public void run ( ) {
@ -395,34 +311,24 @@ public class NotesPreferenceActivity extends PreferenceActivity {
getContentResolver ( ) . update ( Notes . CONTENT_NOTE_URI , values , null , null ) ;
getContentResolver ( ) . update ( Notes . CONTENT_NOTE_URI , values , null , null ) ;
}
}
} ) . start ( ) ;
} ) . start ( ) ;
//重置当地同步任务的信息
Toast . makeText ( NotesPreferenceActivity . this ,
Toast . makeText ( NotesPreferenceActivity . this ,
getString ( R . string . preferences_toast_success_set_accout , account ) ,
getString ( R . string . preferences_toast_success_set_accout , account ) ,
Toast . LENGTH_SHORT ) . show ( ) ;
Toast . LENGTH_SHORT ) . show ( ) ;
//将toast的文本信息置为“设置账户成功”并显示出来
}
}
}
}
/ *
* 函 数 功 能 : 删 除 同 步 账 户
* 函 数 实 现 : 如 下 注 释 :
* /
private void removeSyncAccount ( ) {
private void removeSyncAccount ( ) {
SharedPreferences settings = getSharedPreferences ( PREFERENCE_NAME , Context . MODE_PRIVATE ) ;
SharedPreferences settings = getSharedPreferences ( PREFERENCE_NAME , Context . MODE_PRIVATE ) ;
SharedPreferences . Editor editor = settings . edit ( ) ;
SharedPreferences . Editor editor = settings . edit ( ) ;
//设置共享首选项
if ( settings . contains ( PREFERENCE_SYNC_ACCOUNT_NAME ) ) {
if ( settings . contains ( PREFERENCE_SYNC_ACCOUNT_NAME ) ) {
editor . remove ( PREFERENCE_SYNC_ACCOUNT_NAME ) ;
editor . remove ( PREFERENCE_SYNC_ACCOUNT_NAME ) ;
//假如当前首选项中有账户就删除
}
}
if ( settings . contains ( PREFERENCE_LAST_SYNC_TIME ) ) {
if ( settings . contains ( PREFERENCE_LAST_SYNC_TIME ) ) {
editor . remove ( PREFERENCE_LAST_SYNC_TIME ) ;
editor . remove ( PREFERENCE_LAST_SYNC_TIME ) ;
//删除当前首选项中有账户时间
}
}
editor . commit ( ) ;
editor . commit ( ) ;
//提交更新后的数据
// clean up local gtask related info
// clean up local gtask related info
new Thread ( new Runnable ( ) {
new Thread ( new Runnable ( ) {
public void run ( ) {
public void run ( ) {
@ -432,79 +338,51 @@ public class NotesPreferenceActivity extends PreferenceActivity {
getContentResolver ( ) . update ( Notes . CONTENT_NOTE_URI , values , null , null ) ;
getContentResolver ( ) . update ( Notes . CONTENT_NOTE_URI , values , null , null ) ;
}
}
} ) . start ( ) ;
} ) . start ( ) ;
//重置当地同步任务的信息
}
}
/ *
* 函 数 功 能 : 获 取 同 步 账 户 名 称
* 函 数 实 现 : 通 过 共 享 的 首 选 项 里 的 信 息 直 接 获 取
* /
public static String getSyncAccountName ( Context context ) {
public static String getSyncAccountName ( Context context ) {
SharedPreferences settings = context . getSharedPreferences ( PREFERENCE_NAME ,
SharedPreferences settings = context . getSharedPreferences ( PREFERENCE_NAME ,
Context . MODE_PRIVATE ) ;
Context . MODE_PRIVATE ) ;
return settings . getString ( PREFERENCE_SYNC_ACCOUNT_NAME , "" ) ;
return settings . getString ( PREFERENCE_SYNC_ACCOUNT_NAME , "" ) ;
}
}
/ *
* 函 数 功 能 : 设 置 最 终 同 步 的 时 间
* 函 数 实 现 : 如 下 注 释
* /
public static void setLastSyncTime ( Context context , long time ) {
public static void setLastSyncTime ( Context context , long time ) {
SharedPreferences settings = context . getSharedPreferences ( PREFERENCE_NAME ,
SharedPreferences settings = context . getSharedPreferences ( PREFERENCE_NAME ,
Context . MODE_PRIVATE ) ;
Context . MODE_PRIVATE ) ;
SharedPreferences . Editor editor = settings . edit ( ) ;
SharedPreferences . Editor editor = settings . edit ( ) ;
// 从共享首选项中找到相关账户并获取其编辑器
editor . putLong ( PREFERENCE_LAST_SYNC_TIME , time ) ;
editor . putLong ( PREFERENCE_LAST_SYNC_TIME , time ) ;
editor . commit ( ) ;
editor . commit ( ) ;
//编辑最终同步时间并提交更新
}
}
/ *
* 函 数 功 能 : 获 取 最 终 同 步 时 间
* 函 数 实 现 : 通 过 共 享 的 首 选 项 里 的 信 息 直 接 获 取
* /
public static long getLastSyncTime ( Context context ) {
public static long getLastSyncTime ( Context context ) {
SharedPreferences settings = context . getSharedPreferences ( PREFERENCE_NAME ,
SharedPreferences settings = context . getSharedPreferences ( PREFERENCE_NAME ,
Context . MODE_PRIVATE ) ;
Context . MODE_PRIVATE ) ;
return settings . getLong ( PREFERENCE_LAST_SYNC_TIME , 0 ) ;
return settings . getLong ( PREFERENCE_LAST_SYNC_TIME , 0 ) ;
}
}
/ *
* 函 数 功 能 : 接 受 同 步 信 息
* 函 数 实 现 : 继 承 BroadcastReceiver
* /
private class GTaskReceiver extends BroadcastReceiver {
private class GTaskReceiver extends BroadcastReceiver {
@Override
@Override
public void onReceive ( Context context , Intent intent ) {
public void onReceive ( Context context , Intent intent ) {
refreshUI ( ) ;
refreshUI ( ) ;
if ( intent . getBooleanExtra ( GTaskSyncService . GTASK_SERVICE_BROADCAST_IS_SYNCING , false ) ) {
if ( intent . getBooleanExtra ( GTaskSyncService . GTASK_SERVICE_BROADCAST_IS_SYNCING , false ) ) {
//获取随广播而来的Intent中的同步服务的数据
TextView syncStatus = ( TextView ) findViewById ( R . id . prefenerece_sync_status_textview ) ;
TextView syncStatus = ( TextView ) findViewById ( R . id . prefenerece_sync_status_textview ) ;
syncStatus . setText ( intent
syncStatus . setText ( intent
. getStringExtra ( GTaskSyncService . GTASK_SERVICE_BROADCAST_PROGRESS_MSG ) ) ;
. getStringExtra ( GTaskSyncService . GTASK_SERVICE_BROADCAST_PROGRESS_MSG ) ) ;
//通过获取的数据在设置系统的状态
}
}
}
}
}
}
/ *
* 函 数 功 能 : 处 理 菜 单 的 选 项
* 函 数 实 现 : 如 下 注 释
* 参 数 : MenuItem 菜 单 选 项
* /
public boolean onOptionsItemSelected ( MenuItem item ) {
public boolean onOptionsItemSelected ( MenuItem item ) {
switch ( item . getItemId ( ) ) {
switch ( item . getItemId ( ) ) {
//根据选项的id选择, 这里只有一个主页
case android . R . id . home :
case android . R . id . home :
Intent intent = new Intent ( this , NotesListActivity . class ) ;
Intent intent = new Intent ( this , NotesListActivity . class ) ;
intent . addFlags ( Intent . FLAG_ACTIVITY_CLEAR_TOP ) ;
intent . addFlags ( Intent . FLAG_ACTIVITY_CLEAR_TOP ) ;
startActivity ( intent ) ;
startActivity ( intent ) ;
return true ;
return true ;
//在主页情况下在创建连接组件intent, 发出清空的信号并开始一个相应的activity
default :
default :
return false ;
return false ;
}
}
}
}
}
}