2013年5月13日 星期一

[Android] MyTracks Notes (1)


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 AbstractMyTracksActivity

    implements 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 都是繼承這兩個。