iosched読書会向け資料

33
iosched読書会 T.K at 頓智・会議室

Upload: tkawashita

Post on 24-Jun-2015

2.240 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Iosched読書会向け資料

iosched読書会

T.K

at 頓智・会議室

Page 2: Iosched読書会向け資料

機能概要

• Google I/O 2011 スケジュール閲覧

• セッションの詳細とスピーカー情報の閲覧

• セッションとサンドボックスの評価

• リアルタイムの buzz 情報の閲覧

• カンファレンス地図を利用したガイド

• Catch を利用したノート作成・管理

Page 3: Iosched読書会向け資料

アプリ画面

phoneのみtablet未所持なもので・・・

Page 4: Iosched読書会向け資料

Top , search

Page 5: Iosched読書会向け資料

Schedule

Page 6: Iosched読書会向け資料

Map

Page 7: Iosched読書会向け資料

Sessions

Page 8: Iosched読書会向け資料

Starred

Page 9: Iosched読書会向け資料

Sandbox

Page 10: Iosched読書会向け資料

Blletin

Page 11: Iosched読書会向け資料

Realtime Stream

Page 12: Iosched読書会向け資料

初見の雑感

• 素直によくできている– tabletも使ってみたかったが、emulator は立ち上げる気が起きず・・・

• オプションメニューで機能を提供していない– iOS向けに同じアプリを提供したいから?

– ActionBarがあるから?

• ActionBarが機能ごとに微妙に異なる機能を提供–どこからでも Home に戻れる機能を提供

Page 13: Iosched読書会向け資料

中身をざっとみた雑感

• Honycombで Activity + Fragment のアプリを作ったことがないため、違和感あり– 3.0以上では、Activity+Fragment

– 2.3以下では、FragmentActivity + Fragment

• 互換ライブラリの準備が必要

• ioschedのビルドにも必要

– 1画面 1Activity に慣れているAndroid開発者はつらそう

– tabletの1Activity 複数Fragmentからみたほうがよかったかも

• 端末がないからイメージできず・・・

• これをベースに他のイベント向けスケジュールアプリ作るのは、意外と時間がかかりそう– phone向けのみで Fragment 利用無し版があればいいのに・・・

– でも、CEATECなどでは両対応のものを提供してもらいたい

Page 14: Iosched読書会向け資料

Buildするのに思ったより時間が・・・・orz

Page 15: Iosched読書会向け資料

技術詳細

Page 16: Iosched読書会向け資料

AndroidManifest.xml(1/?)

<manifestxmlns:android="http://schemas.android.com/apk/res/android"package="com.google.android.apps.iosched"android:versionCode="16"android:versionName="0.16"android:installLocation="auto">

<uses-sdkandroid:minSdkVersion="7"android:targetSdkVersion="11" />

<permissionandroid:name="com.google.android.apps.iosched.permission.WRITE_SCHEDULE"android:protectionLevel="normal"android:label="@string/permission_write"android:description="@string/permission_write" />

2.1 eclair

3.0 honycomb

Page 17: Iosched読書会向け資料

AndroidManifest.xml(2/?)

<uses-permission android:name="android.permission.INTERNET" />

<uses-permission android:name="android.permission.GET_ACCOUNTS" />

<uses-permission android:name="android.permission.USE_CREDENTIALS" />

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<application

android:label="@string/app_name"

android:icon="@drawable/ic_launcher"

android:logo="@drawable/title_logo"

android:theme="@style/Theme.IOSched"

android:hardwareAccelerated="true">

Page 18: Iosched読書会向け資料

AndroidManifest.xml <application>

android:logo

Page 19: Iosched読書会向け資料

AndroidManifest.xml(3/?)

<!-- Used for install referrer tracking -->

<receiver

android:name="com.google.android.apps.analytics.AnalyticsReceiver"

android:exported="true">

<intent-filter>

<action android:name="com.android.vending.INSTALL_REFERRER" />

</intent-filter>

</receiver>

<!-- Other manifest items -->

<meta-data

android:name="android.app.default_searchable"

android:value=".ui.SearchActivity" />

<service android:name=".service.SyncService" />

<provider

android:name=".provider.ScheduleProvider"

android:authorities="com.google.android.apps.iosched"

android:writePermission="com.google.android.apps.iosched.permission.WRITE_SCHEDULE" />

Google Analytics向け

インストール数計算?

Page 20: Iosched読書会向け資料

.service.SyncService

• com.google.android.apps.iosched.service– SyncService.java

• 機能– BackGround で動作

– 最新情報をデータベース(ScheduleProvider)に同期

• 備考– アプリ起動時に起動

• HomeActivity:102line:startService(intent)

– xmlフォルダ内から各種情報を取得(オフライン対応)• blocks, rooms, tracks, search_suggest, sessions

– ネットワーク上から最新情報取得も可能

Page 21: Iosched読書会向け資料

Activity 一覧

• Common Activity– .ui.HomeActivity

– .ui.BulletinActivity

– .ui.TagStreamActivity

– .ui.StarredActivity

– .ui.SearchActivity

• For Phone– .ui.phone.ScheduleActivity

– .ui.phone.TracksActivity

– .ui.phone.SessionsActivity

– .ui.phone.SessionDetailActivity

– .ui.phone.VendorsActivity

– .ui.phone.VendorDetailActivity

– .ui.phone.MapActivity

• For Tablet– .ui.tablet.SessionsMultiPaneActivity

– .ui.tablet.VendorsMultiPaneActivity

– .ui.tablet.ScheduleMultiPaneActivity

– .ui.tablet.MapMultiPaneActivity

– .ui.tablet.NowPlayingMultiPaneActivity

Page 22: Iosched読書会向け資料

Activity 一覧

• Common Activity– .ui.HomeActivity

• intent-filter– android.intent.action.MAIN

– android.intent.category.LAUNCHER

– .ui.BulletinActivity

– .ui.TagStreamActivity

– .ui.StarredActivity

– .ui.SearchActivity• android:launchMode="singleTop“

• intent-filter– android.intent.action.SEARCH

– android.intent.category.DEFAULT

• <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" />

Page 23: Iosched読書会向け資料

Activity 一覧

• For Phone

– .ui.phone.ScheduleActivity

– .ui.phone.TracksActivity

– .ui.phone.SessionsActivity

– .ui.phone.SessionDetailActivity

– .ui.phone.VendorsActivity

– .ui.phone.VendorDetailActivity

– .ui.phone.MapActivity

Page 24: Iosched読書会向け資料

Common Activity系クラス図.ui.*(AndroidManifestベース)

Base

Activity

Home

Activity

Fragment

Activity

BaseSinglePane

Activity

Bulletin

Activity

BaseMultiPane

Activity

Starred

Activity

Search

Activity

TagStream

Activity

Page 25: Iosched読書会向け資料

phone Activity系クラス図.ui.phohe.* (AndroidManifestベース)

Base

Activity

Fragment

Activity

BaseSinglePane

Activity

Schedule

Activity

Tracks

Activity

SessionDetail

Activity

Vendors

Activity

Sessions

Activity

VendorDetail

Activity

Map

Activity

Page 26: Iosched読書会向け資料

ui.Phone Activity

Page 27: Iosched読書会向け資料

tablet Activity系クラス図.ui.tablet.*(AndroidManifestベース)Base

Activity

Fragment

Activity

BaseMultiPane

Activity

ScheduleMultiPane

Activity

SessionsMultiPane

Activity

NowPlaying

MultiPane

Activity

VendorsMultiPane

Activity

MapMultiPane

Activity

FragmentManager.

OnBackStackChangedListener

View.

OnClickListener

Page 28: Iosched読書会向け資料

.ui.HomeActivity

• トップページで、phone と tablet で異なるレイアウト– Phone

• ダッシュボード(DashboardFragment)

– tablet• ダッシュボード(DashboardFragment)• Stream(TagStreamFragment)

• Layout– activity_home.xml

• [include] actionbar.xml– [include] colorstrip.xml

• [fragment] DashboradFragment– layout/fragment_dashboard.xml

• [fragment] WhatsOnFragment– layout/fragment_whats_on

• 疑問– Actionbarのデザインや機能は誰が設定しているか?

• *Fragment の中で Honycombかどうかを判断して、View を構築し、onCreateView()の返り値として、そのview として返すことによって画面を作成

Page 29: Iosched読書会向け資料

DashboardFragment

• layout

– R.layout.fragment_dashboard

• .ui.widget.DashboardLayout

– 子Viewとして、ダッシュボードの各ボタンを保持

– 子Viewをグリッドのように表示し、縦、横の空白を同じにするカスタ

ムレイアウト

• view を構築して、onCreateView() の返り値で返す

– 各ボタンへのクリック処理を追加

– この View が HomeActivityの<fragment>に展開される

Page 30: Iosched読書会向け資料

WhatsOnFragment

• layout– R.layout.fragment_whats_on

• <LinearLayout>のみ horizontal

• 第1要素– 3パターンの文言表示

• Google IO 開催前– R.layout.whats_on_countdown

– カウントダウンタイマー– 残り時間、日数を表示

• 開催中– R.layout.whats_on_now_playing

– Now Playing(リンク設定)» Honycombの場合:NowPlayingMultiPaneActivityへのリンク» phoneの場合:現在開催中のScheduleContractへのリンク

• 開催後– R.layout.whats_on_thank_you

» @string/whats_on_thank_you_title

» you next year!

• 参考情報– UIUtils

» public static final long CONFERENCE_START_MILLIS = ParserUtils.parseTime("2011-05-10T09:00:00.000-07:00");

» public static final long CONFERENCE_END_MILLIS = ParserUtils.parseTime("2011-05-11T17:30:00.000-07:00");

• 第2要素– phoneのみ

• R.layout.whats_on_stream– 文言:Realtime¥nStream– TagStreamActivityへのリンク

第1 第2

Page 31: Iosched読書会向け資料

Fragment系クラス

• Fragment の派生クラス– .ui

• BulletinFragment

• DashboardFragment

• MapFragment

• ScheduleFragment

• SessionDetailFragment

• SessionsFragment

• TagStreamFragment

• TracksFragment

• VendorDetailFragment

• VendorsFragment

• WhatsOnFragment

– .ui.tablet• TracksDropdownFragment

Page 32: Iosched読書会向け資料

Fragment系 クラス図Fragment

.tablet.

TracksDropdown

Fragment

NotifyingAsyncQueryHandler.

AsyncQueryListener

AdapterView.

OnItemClickListener

PopupWindow.

OnDismissListener

Bulletin

Fragment

Dashboard

Fragment

Map

Fragment

Schedule

Fragment

SessionDetail

Fragment

Sessions

Fragment

TagStream

Fragment Tracks

Fragment

VendorDetail

Fragment

Vendors

Fragment

WhatsOn

Fragment

View.

OnClickListener

ObservableScrollView.

OnScrollListener

CompoundButton.

OnCheckedChangeListener

Page 33: Iosched読書会向け資料

というところで、力尽きました・・・