AbstractMyTracksActivity
*public abstract class AbstractMyTracksActivity extends FragmentActivity
*onCreate()1. SpeechEngine 的 setup
setVolumeControlStream(TextToSpeech.Engine.DEFAULT_STREAM);
2. 一個個不同api 版本的不同設置 actionbar 與 home 鑑
* ApiAdapterFactory.getApiAdapter().hideTitle(this)
* ApiAdapterFactory.getApiAdapter().configureActionBarHomeAsUp(this);
3. setContentView
* protected boolean hideTitle()
protected boolean configureActionBarHomeAsUp()
這兩個 override method 呼應了 oncreate 的 actionBar 與 home 設置。目前設定是: hideTitle: false;
configureActionBarHomeAsUp: true;
* protected abstract int getLayoutResId();
給繼承者 Return Layout id 使用
*onOptionsItemSelected(MenuItem item) Option Menu 被select 時的 action
* default action 是 onHomeSelected() => 直接 finish()掉 Activity
紫色的兩個method 是 Override 的
Summary : AbstractMyTracksActivity 只是簡單的定義了一個 FragmentActivity 以及 ActionBar/Title/MenuItem /SpeechEngine的設置。
AbstractSendToGoogleActivity
public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActivityimplements ChooseAccountCaller, AddEmailsCaller, ChooseActivityCaller
這個 Abstract Class 在實現 Send To Google 功能。
Fig : Send To Google 1
Fig . Send To Google 2
*public void sendToGoogle(SendRequest request)
{
sendRequest = request;
new ChooseAccountDialogFragment().show(
getSupportFragmentManager(), ChooseAccountDialogFragment.CHOOSE_ACCOUNT_DIALOG_TAG);
}
Caller Activity有兩個 : TrackDetailActivity SearchListActivity 都在喚起 Fig . Send To Google 2 的功能
class SendRequest implements Parcelable
Send request states for sending a track to Google Drive, Google Maps, Google, Fusion Tables, and Google Spreadsheets.
* protected void onActivityResult(int requestCode, int resultCode, Intent data) {
case SendToGoogleUtils.DRIVE_PERMISSION_REQUEST_CODE:
case SendToGoogleUtils.FUSION_TABLES_PERMISSION_REQUEST_CODE:
case SendToGoogleUtils.SPREADSHEET_PERMISSION_REQUEST_CODE:
default:
}
onSuccess() 和 onFailure() 的 implementation 必須要 override driveCallback\mapsCallback\fusionTablesCallback\spreadsheetsCallback 這 4 個 variable 的 onSuccess() 和 onFailure() 方法!
*public void onChooseAccountDone()
sendToGoogle 裡的 ChooseAccountDialogFragment 在 onCreate 選取 account 完成後會呼叫它 caller 的這個方法
@Override
* public void onAddEmailsDone(String emails)
AddEmailsDialogFragment 在CreateDialog 後會呼叫這個方法 。。。
@Override
* public void onChooseActivityDone(String packageName, String className)
ChooseActivityDialogFragment onClick() 與 onCancel 時會呼叫 。。。
*private void checkDrivePermission()
*private void checkFusionTablesPermission()
*private void checkSpreadsheetPermission()
*private void getPermission()
* private void startNextActivity()
driveCallback\mapsCallback\fusionTablesCallback\spreadsheetsCallback 這 4 個 variables 在 onSuccess() 時呼叫的。
目前設定是這樣
driveCallback 成功 => getPermission() ;
mapsCallback 成功 => checkFusionTablesPermission();
fusionTablesCallback => checkSpreadsheetPermission();
spreadsheetsCallback => startNextActivity();
是有一個接著呼叫一個的連續性。
最後一個 的 private void startNextActivity()
根據 SendToGoogle Type 開始下一個Activity(), 是 checkSpreadsheetPermission onSuccess() 時呼叫,
*private void handleNoAccountPermission() 則是 onFailure()呼叫的。
以上為 MyTrack 的兩大基本 Abstract Class。MyTrack Project 很多 Class 都是繼承這兩個。