From 013fd7945bae48e969d828dde5974b96872903c7 Mon Sep 17 00:00:00 2001 From: Scarygami Date: Tue, 24 Sep 2013 00:22:31 +0200 Subject: [PATCH] Start implementation of Android client not finished, sign-in works, albums are fetched in background, chromecast API is initialized and receiver unit can be chosen --- .gitignore | 14 + .../android/SlideshowCast/AndroidManifest.xml | 30 ++ .../res/drawable-hdpi/ic_launcher.png | Bin 0 -> 392 bytes .../res/drawable-hdpi/ic_user.png | Bin 0 -> 2449 bytes .../res/drawable-mdpi/ic_launcher.png | Bin 0 -> 602 bytes .../res/drawable-mdpi/ic_user.png | Bin 0 -> 1586 bytes .../res/drawable-xhdpi/ic_launcher.png | Bin 0 -> 1021 bytes .../res/drawable-xhdpi/ic_user.png | Bin 0 -> 3294 bytes .../res/drawable-xxhdpi/ic_launcher.png | Bin 0 -> 1341 bytes .../res/drawable-xxhdpi/ic_user.png | Bin 0 -> 5229 bytes .../android/SlideshowCast/res/layout/main.xml | 58 ++++ .../android/SlideshowCast/res/menu/menu.xml | 8 + .../res/values-sw600dp/dimens.xml | 4 + .../res/values-sw720dp-land/dimens.xml | 5 + .../SlideshowCast/res/values-v11/styles.xml | 11 + .../SlideshowCast/res/values-v14/styles.xml | 12 + .../SlideshowCast/res/values/dimens.xml | 5 + .../SlideshowCast/res/values/strings.xml | 12 + .../SlideshowCast/res/values/styles.xml | 20 ++ .../slideshowcast/AsyncReceiver.java | 5 + .../slideshowcast/MainActivity.java | 287 ++++++++++++++++++ .../slideshowcast/PicasaAlbumsTask.java | 97 ++++++ 22 files changed, 568 insertions(+) create mode 100644 .gitignore create mode 100644 slideshow/android/SlideshowCast/AndroidManifest.xml create mode 100644 slideshow/android/SlideshowCast/res/drawable-hdpi/ic_launcher.png create mode 100644 slideshow/android/SlideshowCast/res/drawable-hdpi/ic_user.png create mode 100644 slideshow/android/SlideshowCast/res/drawable-mdpi/ic_launcher.png create mode 100644 slideshow/android/SlideshowCast/res/drawable-mdpi/ic_user.png create mode 100644 slideshow/android/SlideshowCast/res/drawable-xhdpi/ic_launcher.png create mode 100644 slideshow/android/SlideshowCast/res/drawable-xhdpi/ic_user.png create mode 100644 slideshow/android/SlideshowCast/res/drawable-xxhdpi/ic_launcher.png create mode 100644 slideshow/android/SlideshowCast/res/drawable-xxhdpi/ic_user.png create mode 100644 slideshow/android/SlideshowCast/res/layout/main.xml create mode 100644 slideshow/android/SlideshowCast/res/menu/menu.xml create mode 100644 slideshow/android/SlideshowCast/res/values-sw600dp/dimens.xml create mode 100644 slideshow/android/SlideshowCast/res/values-sw720dp-land/dimens.xml create mode 100644 slideshow/android/SlideshowCast/res/values-v11/styles.xml create mode 100644 slideshow/android/SlideshowCast/res/values-v14/styles.xml create mode 100644 slideshow/android/SlideshowCast/res/values/dimens.xml create mode 100644 slideshow/android/SlideshowCast/res/values/strings.xml create mode 100644 slideshow/android/SlideshowCast/res/values/styles.xml create mode 100644 slideshow/android/SlideshowCast/src/at/foldedsoft/slideshowcast/AsyncReceiver.java create mode 100644 slideshow/android/SlideshowCast/src/at/foldedsoft/slideshowcast/MainActivity.java create mode 100644 slideshow/android/SlideshowCast/src/at/foldedsoft/slideshowcast/PicasaAlbumsTask.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9533e0c --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +bin/ +gen/ +libs/ +.metadata/ +*.apk +*.ap_ +*.dex +*.class +.classpath +.project +.settings/ +proguard/ +project.properties +proguard-project.txt diff --git a/slideshow/android/SlideshowCast/AndroidManifest.xml b/slideshow/android/SlideshowCast/AndroidManifest.xml new file mode 100644 index 0000000..147331c --- /dev/null +++ b/slideshow/android/SlideshowCast/AndroidManifest.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + diff --git a/slideshow/android/SlideshowCast/res/drawable-hdpi/ic_launcher.png b/slideshow/android/SlideshowCast/res/drawable-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..070c890b8387c369c0bba93bc511de7aff2aa071 GIT binary patch literal 392 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@Zgyv2VD$HNaSW-r^>*f7uOkjJ?EY_A zbdPwka9eNuBB`VMMkgm%$K@mA5icG7hm%bA9WWJZYE@`DC3&O%lb2xKO<#u(dyYMt zBsn9EGe_b^|Ad1;bD`kDf6ueef|vw59PaX%=vS*Ya=0jfcq~c+Fs3cvllLh}@sk`_ zW}S21skl1J(QVVoSt)Zt*S-xg;jeRAUcsUL5Ym#NJ@dq>`bNl?QlWDd*xY+e3$r_HVy z{7`HExyt91?aiC<=UIL=f2{CawoT`8P`CW*mAR+a+?iD9srJt!F0|Vy&V=*Ic85;e ztJADEMOuB+3a;0_{d{i8w3FwY7tHKG?JhapCrSKZx#aQ7k3xzopr0N4|rFaQ7m literal 0 HcmV?d00001 diff --git a/slideshow/android/SlideshowCast/res/drawable-hdpi/ic_user.png b/slideshow/android/SlideshowCast/res/drawable-hdpi/ic_user.png new file mode 100644 index 0000000000000000000000000000000000000000..bc33709ba9494aa00927a73a7002440e1e5ebbe0 GIT binary patch literal 2449 zcmV;C32yd@P)-=PA;5tDX9x`qOxwl29QH9MTgx$#~ts;y} z1J=nyc>D2h4<+nVLg+u0I13+I;XFSc-kw*2=DvGss?}z104XaOA>TrWzpS&<7XWmh z%4oAX7;ihWyz0L?P1XU)R82I-8eE`^J=b4id%k1g^vlLX^|#I$L7qTl9%JMMK>3D#IL2F2 zN)CXi$J>3*BgUn*C2~TLD-dab;@2>pZqSAxp#>%98DrlI`}Y)=7KI6N z`J;8n*K8Ltnr|6QvpP((og#LH339hZHXV<}Vpo_TkH703SAafWCwM)dV5J3xepPJMgvz>y$nIcBVL8kj6 zja7Z(y)ACkwh%${0^K(%OyvZX7&SOf?Rzb8Rwa`77a|B-{B&&boS=!m#Sf21A5rNo zp$5k}qXQ&FP%774G;k_!8AGGJ8r!}Hu~3yrEF?q_PVUqlh#muuS?00lMZ+;H(z8V@ zi4g=#*u{9@b-#$we9NGdJA%H7dJ(&32znj{*NPa;w+!ylHU+)TCq?WE6NKdagGkOx z%l(Rg*DHfgu7U@>ski;ecESYBYx%cBv06HzEKQ<}{)180Ap*#(4D!(qB=GJXp+_Z_ zL1(D$mTnQ~)j>%Z=PCx;F9Nu1<2iRj}prUFV}>ncAH1!qLgz2nnzk}TQ-ncGLmowiw2*MYjq{}|CFWepluf;;%9a3A)| z3;=c^KwB;npc(4W=W!YL)~1ninBPx@eHG6d()ESLraXx28alYXhp+c!0Mddme-*;~ zm>HlMWkHT75Pb$@jLP>Q#qq%<+P_5PfGX94xH8YS&KjmD{3f$3eMjg^WyR%d_AI0c zsU&gF@kiHTq4)*#T1V*aRTSmE_WJU6v-V7T&@ce(9_s=0SNJ=fP7Ek{!GyI&6vLD;UBDvJeo5k8MgM)y*F@R7Q*t zmC8ermS(3!WHN*|WF-bp1W<@(#A#l*sXiVpCyyUhAg^n_Tc6@{5?i6UiR zrb2`HJ37A-Pg-iAXfdYFD(Fm?#l%KRp0)R>8xAy8@(NjLk92~ru1WqVY7^N;{QV_O zw2WLv)crB&JPl&cBb|c#05Sz~H-qClp@)CZ^jyLZPa~bdi?*acIU^|LP5#ci2~&QJ z&hnDqTs(WJs;&<!>`@cPnFWh-gmwXZ1xOk9^khaT8EhBa*m*0XoR!SelPi#LY}GffabgI(^6dR0o+K-nTFPFKu%9Khd12mH6j z%8zVmqDhe{va*?3P8N61#lpT6w)k#%M;bjU2zwv7>CL4jj)2)SnK(hIJWTfr9Mk!A z$~W=Rql=g19>?cHh<6Z$og`E}ZBgxKt$p!}2R?SDiVNn??y@IJ>{F6Td^!Tnn~_ht z6`oj)pLnq-zpT_#QOg(j4=JI)4SLH_;4Ze{>*>^(K}sDORrP0}nF`pTnP#xw~Ux?<)oIY&!bf&G3| zO(g3NFS{w44YwviD06um3P#;G6&MlO;5H-CmMuM;J$4ydcX)zbPux+6ydmSu7H3pLTrYJ%|cIipGSiQRo|biG!}W*_uAyGAx0Ly)_zYc)~>uWReO_F7EM(e{Kx#$7)oWP^D&!940=wo>BNs*sN#}KfG)C)x;0g$K9ENq| P00000NkvXXu0mjfE1I9( literal 0 HcmV?d00001 diff --git a/slideshow/android/SlideshowCast/res/drawable-mdpi/ic_launcher.png b/slideshow/android/SlideshowCast/res/drawable-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..9bd87fce7b425dd53db31a4784fcc7781f946606 GIT binary patch literal 602 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 literal 0 HcmV?d00001 diff --git a/slideshow/android/SlideshowCast/res/drawable-xxhdpi/ic_launcher.png b/slideshow/android/SlideshowCast/res/drawable-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..02bf3729ee971cffb0f9f00fd3f1b6eb9447092e GIT binary patch literal 1341 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q4M;wBd$farftAJ6#WAGf*4w#1vsGLr9HL#1 ze(l))sPpyPszoavG;+P#C8yKX(V?WI^{aV%#lqLDk6MrUE?aGVbHnRaL7NXuA02uP zJ!?&0bN!xN@3Usr$(mTx-G`L&lG5%qA3u;HWHkBshtks0Wg0*Wi2`gBtDdb`v}OAv zr5m@3GXAq(*)(0$jYa(6t-0O~9u6!nFw_EKZZT%oTAIY0&b~H9nKAeE;x*geDI8m; ztiYs%6Dc6cFd?f$mcY=iu;6X*ZsWhg@%LZYX?gvOHGQXe3aVkj(xkh8*1h`kNAKqK zRXaoNrd$tweC#jx$GuS}|4uPH!67T^v0LQRTD+0I6}SR zeK7iR^-s&^Ia_n)hxMG1U6+?3|7iZ5304~`|0n%@q6W+*stH%teMziYEA{i#{knBh+fUx#w`5w;{Q5ITv)=mY zy8X9t;58QIxe|CIAaIwo^jq0~`^1Ia_wHXc)#s;p(yohB|HZy613JQ06B^80Bzki0 z9{>Mo`s%5Bk5x~PI;CtkYg*Qu>U;UpOTT@$Un;fJOnTGd^X+zg8gm?E=idr{8yh+A z&MxcbbU&7C4&-S$lV&+Zd1vpO_v zgXQlfYE=gCGN$VH)E?!3Y`#Ld*j-qFQ4oy&iuY{o|GNJV`_96(%ab+pf8VaYdTE_z zRK3i~W4_;urbeACZY{j8vhVf#`XJuwzC&u;jxEgb(7!$XSLB;t`?gHl_>Ws7hs*fg zyd%p$GaPzWIWzF_?jWI_iNTx7mk30t9`2l9Q6JR1rnkBJ`iH-T2Jsuduju2ys|rb3 z3+ff#Wai!MzH%z|?cquX-q$uuYi3#qK9{-5e=IRL^7^gV7xl;HX4%}-3eK9dcv7jF z^6~0^&o$L@`J6BQ`&3+?G3So&Tb^y&SEkw8TWe`QeLPP)cz%4xf@It37@0G>k16+m z(Kx?%PVKZR3oUQ`9FtFO+mts=ii9QQ1#bnv8HT?zGkx>iQ{RNAyFF34_Il8~um2Xc zmCn0#cTt;ryxcg@ReOwoCxc;@lH`A?K!qe>S+f=9ClALrr%+W%UUC1pL+aVQ5B#FLj=es3=%;S!o%`l9D~k7RcoC-0b4m7boAGzo#W4ru6D>EN zox1Yf_MGO38yfTFR9hEXbVrtqqXV}`+$U>6NgZK+Kh3CGB z-kAMp--~r_=T4-}+L33n-K+QczDHYAWKW+}PwQWw&eyH(v%4+f(((57%tVwqJO=g5 X`?CWw?(MB{11a}(^>bP0l+XkK(dI|M literal 0 HcmV?d00001 diff --git a/slideshow/android/SlideshowCast/res/drawable-xxhdpi/ic_user.png b/slideshow/android/SlideshowCast/res/drawable-xxhdpi/ic_user.png new file mode 100644 index 0000000000000000000000000000000000000000..29260f24ab74d3267a19c49709c129049c4288ab GIT binary patch literal 5229 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 literal 0 HcmV?d00001 diff --git a/slideshow/android/SlideshowCast/res/layout/main.xml b/slideshow/android/SlideshowCast/res/layout/main.xml new file mode 100644 index 0000000..63111c4 --- /dev/null +++ b/slideshow/android/SlideshowCast/res/layout/main.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/slideshow/android/SlideshowCast/res/menu/menu.xml b/slideshow/android/SlideshowCast/res/menu/menu.xml new file mode 100644 index 0000000..baee3fe --- /dev/null +++ b/slideshow/android/SlideshowCast/res/menu/menu.xml @@ -0,0 +1,8 @@ + + + + diff --git a/slideshow/android/SlideshowCast/res/values-sw600dp/dimens.xml b/slideshow/android/SlideshowCast/res/values-sw600dp/dimens.xml new file mode 100644 index 0000000..886b05f --- /dev/null +++ b/slideshow/android/SlideshowCast/res/values-sw600dp/dimens.xml @@ -0,0 +1,4 @@ + + + diff --git a/slideshow/android/SlideshowCast/res/values-sw720dp-land/dimens.xml b/slideshow/android/SlideshowCast/res/values-sw720dp-land/dimens.xml new file mode 100644 index 0000000..00059fc --- /dev/null +++ b/slideshow/android/SlideshowCast/res/values-sw720dp-land/dimens.xml @@ -0,0 +1,5 @@ + + + 128dp + diff --git a/slideshow/android/SlideshowCast/res/values-v11/styles.xml b/slideshow/android/SlideshowCast/res/values-v11/styles.xml new file mode 100644 index 0000000..189791f --- /dev/null +++ b/slideshow/android/SlideshowCast/res/values-v11/styles.xml @@ -0,0 +1,11 @@ + + + + + + diff --git a/slideshow/android/SlideshowCast/res/values-v14/styles.xml b/slideshow/android/SlideshowCast/res/values-v14/styles.xml new file mode 100644 index 0000000..18783c7 --- /dev/null +++ b/slideshow/android/SlideshowCast/res/values-v14/styles.xml @@ -0,0 +1,12 @@ + + + + + + diff --git a/slideshow/android/SlideshowCast/res/values/dimens.xml b/slideshow/android/SlideshowCast/res/values/dimens.xml new file mode 100644 index 0000000..47c8224 --- /dev/null +++ b/slideshow/android/SlideshowCast/res/values/dimens.xml @@ -0,0 +1,5 @@ + + + 16dp + 16dp + diff --git a/slideshow/android/SlideshowCast/res/values/strings.xml b/slideshow/android/SlideshowCast/res/values/strings.xml new file mode 100644 index 0000000..3ecab2a --- /dev/null +++ b/slideshow/android/SlideshowCast/res/values/strings.xml @@ -0,0 +1,12 @@ + + + + Slideshow for Chomecast + Settings + Add + Enter a URL + Controls + Albums + Sign out + Revoke access + diff --git a/slideshow/android/SlideshowCast/res/values/styles.xml b/slideshow/android/SlideshowCast/res/values/styles.xml new file mode 100644 index 0000000..9e3012d --- /dev/null +++ b/slideshow/android/SlideshowCast/res/values/styles.xml @@ -0,0 +1,20 @@ + + + + + + + + + diff --git a/slideshow/android/SlideshowCast/src/at/foldedsoft/slideshowcast/AsyncReceiver.java b/slideshow/android/SlideshowCast/src/at/foldedsoft/slideshowcast/AsyncReceiver.java new file mode 100644 index 0000000..ee0bcad --- /dev/null +++ b/slideshow/android/SlideshowCast/src/at/foldedsoft/slideshowcast/AsyncReceiver.java @@ -0,0 +1,5 @@ +package at.foldedsoft.slideshowcast; + +public abstract class AsyncReceiver { + public abstract void finished(int results); +} diff --git a/slideshow/android/SlideshowCast/src/at/foldedsoft/slideshowcast/MainActivity.java b/slideshow/android/SlideshowCast/src/at/foldedsoft/slideshowcast/MainActivity.java new file mode 100644 index 0000000..4ca8393 --- /dev/null +++ b/slideshow/android/SlideshowCast/src/at/foldedsoft/slideshowcast/MainActivity.java @@ -0,0 +1,287 @@ +package at.foldedsoft.slideshowcast; + +import com.google.android.gms.common.ConnectionResult; +import com.google.android.gms.common.GooglePlayServicesUtil; +import com.google.android.gms.common.SignInButton; +import com.google.android.gms.common.GooglePlayServicesClient.ConnectionCallbacks; +import com.google.android.gms.common.GooglePlayServicesClient.OnConnectionFailedListener; +import com.google.android.gms.plus.PlusClient; +import com.google.android.gms.plus.PlusClient.OnAccessRevokedListener; +import com.google.android.gms.plus.model.people.Person; +import com.google.cast.CastContext; +import com.google.cast.CastDevice; +import com.google.cast.MediaRouteAdapter; +import com.google.cast.MediaRouteHelper; +import com.google.cast.MediaRouteStateChangeListener; + +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; +import android.support.v7.app.MediaRouteButton; +import android.support.v7.media.MediaRouteSelector; +import android.support.v7.media.MediaRouter; +import android.support.v7.media.MediaRouter.RouteInfo; + +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.GridView; +import android.widget.TextView; +import android.content.Intent; +import android.content.IntentSender; + +public class MainActivity extends FragmentActivity + implements ConnectionCallbacks, + OnConnectionFailedListener, + View.OnClickListener, + OnAccessRevokedListener, + MediaRouteAdapter { + + private static final int REQUEST_CODE_SIGN_IN = 1; + + private PlusClient mPlusClient; + private ConnectionResult mConnectionResult; + private Menu mMenu; + private SignInButton mSignInButton; + private View mContent; + private TextView mUserInfo; + private GridView mGridView; + private boolean mConnected = false; + private CharSequence mUserId; + private CharSequence mUserName; + private CharSequence mUserAccount; + private SearchReceiver mReceiver = new SearchReceiver(); + + private CastContext mCastContext; + private MediaRouteButton mMediaRouteButton; + private MediaRouter mMediaRouter; + private MediaRouteSelector mMediaRouteSelector; + private MediaRouter.Callback mMediaRouterCallback; + private CastDevice mSelectedDevice; + private MediaRouteStateChangeListener mRouteStateListener; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.main); + + mSignInButton = (SignInButton) findViewById(R.id.sign_in_button); + mSignInButton.setOnClickListener(this); + + mContent = findViewById(R.id.content); + mUserInfo = (TextView) findViewById(R.id.user_info); + mGridView = (GridView) findViewById(R.id.album_grid); + + mPlusClient = + new PlusClient.Builder(this, this, this) + .setScopes("https://www.googleapis.com/auth/plus.login", + "https://picasaweb.google.com/data/") + .build(); + + mCastContext = new CastContext(this); + MediaRouteHelper.registerMinimalMediaRouteProvider(mCastContext, this); + mMediaRouter = MediaRouter.getInstance(this); + mMediaRouteSelector = MediaRouteHelper.buildMediaRouteSelector( + MediaRouteHelper.CATEGORY_CAST); + mMediaRouteButton = (MediaRouteButton) findViewById(R.id.media_route_button); + mMediaRouteButton.setRouteSelector(mMediaRouteSelector); + mMediaRouterCallback = new MyMediaRouterCallback(); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.menu, menu); + mMenu = menu; + mMenu.findItem(R.id.action_signout).setVisible(mConnected); + mMenu.findItem(R.id.action_revoke).setVisible(mConnected); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // handle item selection + switch (item.getItemId()) { + case R.id.action_signout: + if (mPlusClient.isConnected()) { + mPlusClient.clearDefaultAccount(); + mPlusClient.disconnect(); + mConnected = false; + mUserId = null; + mUserName = null; + mUserAccount = null; + updateUI(); + mPlusClient.connect(); + } + return true; + case R.id.action_revoke: + if (mPlusClient.isConnected()) { + mPlusClient.revokeAccessAndDisconnect(this); + mConnected = false; + mUserId = null; + mUserName = null; + mUserAccount = null; + updateUI(); + } + return true; + } + return true; + } + + @Override + public void onStart() { + super.onStart(); + mMediaRouter.addCallback(mMediaRouteSelector, mMediaRouterCallback, + MediaRouter.CALLBACK_FLAG_REQUEST_DISCOVERY); + mPlusClient.connect(); + updateUI(); + } + + @Override + public void onStop() { + mPlusClient.disconnect(); + mMediaRouter.removeCallback(mMediaRouterCallback); + super.onStop(); + } + + @Override + public void onDestroy() { + MediaRouteHelper.unregisterMediaRouteProvider(mCastContext); + mCastContext.dispose(); + super.onDestroy(); + } + + @Override + public void onClick(View view) { + if (view.getId() == R.id.sign_in_button) { + int available = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this); + if (available != ConnectionResult.SUCCESS) { + return; + } + + try { + mConnectionResult.startResolutionForResult(this, REQUEST_CODE_SIGN_IN); + } catch (IntentSender.SendIntentException e) { + // Fetch a new result to start. + mPlusClient.connect(); + } + } + } + + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == REQUEST_CODE_SIGN_IN) { + if (resultCode == android.app.Activity.RESULT_OK && !mPlusClient.isConnected() + && !mPlusClient.isConnecting()) { + mPlusClient.connect(); + } + } + } + + @Override + public void onAccessRevoked(ConnectionResult status) { + if (status.isSuccess()) { + mConnected = false; + updateUI(); + } else { + mPlusClient.disconnect(); + } + mPlusClient.connect(); + } + + @Override + public void onConnected(Bundle bundle) { + mConnected = true; + Person me = mPlusClient.getCurrentPerson(); + mUserId = me.getId(); + mUserName = me.getDisplayName(); + mUserAccount = mPlusClient.getAccountName(); + updateAlbums(); + updateUI(); + } + + @Override + public void onConnectionFailed(ConnectionResult result) { + mConnectionResult = result; + updateUI(); + } + + @Override + public void onDisconnected() { + mConnected = false; + updateUI(); + mPlusClient.connect(); + } + + private void updateUI() { + MenuItem item; + if (mMenu != null) { + item = mMenu.findItem(R.id.action_signout); + if (item != null) item.setVisible(mConnected); + item = mMenu.findItem(R.id.action_revoke); + if (item != null) item.setVisible(mConnected); + } + if (mConnected && mUserName != null) { + mUserInfo.setText(" " + mUserName); + mUserInfo.setVisibility(View.VISIBLE); + } else { + mUserInfo.setVisibility(View.GONE); + } + + mSignInButton.setVisibility(mConnected ? View.GONE : View.VISIBLE); + mContent.setVisibility(mConnected ? View.VISIBLE : View.GONE); + } + + private void updateAlbums() { + if (!mConnected || mUserAccount == null) return; + + PicasaAlbumsTask search = + new PicasaAlbumsTask(mReceiver, + this, + (String) mUserAccount, + (String) mUserId, + "oauth2:https://www.googleapis.com/auth/plus.login https://picasaweb.google.com/data/"); + search.execute(); + } + + private class SearchReceiver extends AsyncReceiver { + @Override + public void finished(int results) { + if (results > 0) { + // refresh(); + } + } + } + + private class MyMediaRouterCallback extends MediaRouter.Callback { + @Override + public void onRouteSelected(MediaRouter router, RouteInfo route) { + MediaRouteHelper.requestCastDeviceForRoute(route); + } + + @Override + public void onRouteUnselected(MediaRouter router, RouteInfo route) { + mSelectedDevice = null; + mRouteStateListener = null; + } + } + + @Override + public void onDeviceAvailable(CastDevice device, String routeId, + MediaRouteStateChangeListener listener) { + mSelectedDevice = device; + mRouteStateListener = listener; + } + + @Override + public void onSetVolume(double volume) { + // Handle volume change. + } + + @Override + public void onUpdateVolume(double delta) { + // Handle volume change. + } +} diff --git a/slideshow/android/SlideshowCast/src/at/foldedsoft/slideshowcast/PicasaAlbumsTask.java b/slideshow/android/SlideshowCast/src/at/foldedsoft/slideshowcast/PicasaAlbumsTask.java new file mode 100644 index 0000000..50e58ff --- /dev/null +++ b/slideshow/android/SlideshowCast/src/at/foldedsoft/slideshowcast/PicasaAlbumsTask.java @@ -0,0 +1,97 @@ +package at.foldedsoft.slideshowcast; + +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.MalformedURLException; +import java.net.URL; +import javax.net.ssl.HttpsURLConnection; +import org.json.JSONException; +import org.json.JSONObject; + +import android.content.Context; +import android.os.AsyncTask; +import android.util.Log; + +import com.google.android.gms.auth.GoogleAuthException; +import com.google.android.gms.auth.GoogleAuthUtil; + +public class PicasaAlbumsTask extends AsyncTask { + + AsyncReceiver receiver; + Context context; + String account; + String scopes; + String id; + //TrackerDBAdapter db; + + PicasaAlbumsTask(AsyncReceiver receiver, /*TrackerDBAdapter db,*/ Context context, String account, String id, String scopes) { + this.receiver = receiver; + this.context = context; + this.account = account; + this.scopes = scopes; + this.id = id; + //this.db = db; + } + + @Override + protected Boolean doInBackground(Void... params) { + URL url; + HttpsURLConnection urlConnection; + InputStream in; + String result = ""; + String line; + String accessToken = null; + try { + accessToken = GoogleAuthUtil.getToken(this.context, this.account, this.scopes); + } catch (GoogleAuthException e) { + e.printStackTrace(); + return false; + } catch (IOException e) { + e.printStackTrace(); + return false; + } + if (accessToken == null) return false; + try { + url = new URL("https://picasaweb.google.com/data/feed/api/user/default?alt=json&access=public&type=album"); + } catch (MalformedURLException e) { + e.printStackTrace(); + return false; + } + try { + urlConnection = (HttpsURLConnection) url.openConnection(); + urlConnection.setRequestProperty("Authorization", "Bearer " + accessToken); + in = new BufferedInputStream(urlConnection.getInputStream()); + BufferedReader reader = new BufferedReader(new InputStreamReader(in)); + while((line = reader.readLine()) != null) { + result += " " + line; + } + } catch (IOException e) { + e.printStackTrace(); + return false; + } + JSONObject json; + try { + json = new JSONObject(result); + if (json.has("feed")) { + json = json.optJSONObject("feed"); + // TODO: handle feed + Log.d("picasa", json.toString()); + return true; + } else { + return false; + } + } catch (JSONException e) { + e.printStackTrace(); + return false; + } + } + + protected void onPostExecute(Boolean result) { + if (result) { + receiver.finished(1); + } + } +}