AdapterViewFlipper.java revision a02fdf1ba03fad71cc80a89dfc74b17456d5b4a5
13db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen/* 23db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * Copyright (C) 2010 The Android Open Source Project 33db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * 43db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * Licensed under the Apache License, Version 2.0 (the "License"); 53db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * you may not use this file except in compliance with the License. 63db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * You may obtain a copy of the License at 73db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * 83db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * http://www.apache.org/licenses/LICENSE-2.0 93db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * 103db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * Unless required by applicable law or agreed to in writing, software 113db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * distributed under the License is distributed on an "AS IS" BASIS, 123db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * See the License for the specific language governing permissions and 143db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * limitations under the License. 153db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen */ 163db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 173db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohenpackage android.widget; 183db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 19ef52176f1244a5bb98d82a0c8c7f4351edec17a1Adam Cohenimport android.animation.ObjectAnimator; 203db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohenimport android.content.BroadcastReceiver; 213db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohenimport android.content.Context; 223db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohenimport android.content.Intent; 233db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohenimport android.content.IntentFilter; 243db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohenimport android.content.res.TypedArray; 253db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohenimport android.os.Handler; 263db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohenimport android.os.Message; 273db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohenimport android.util.AttributeSet; 283db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohenimport android.util.Log; 292dd2197805edb4d9547b143deef2226413218f4cAdam Cohenimport android.view.RemotableViewMethod; 303db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohenimport android.view.animation.AlphaAnimation; 313db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohenimport android.widget.RemoteViews.RemoteView; 323db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 333db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen/** 343db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * Simple {@link ViewAnimator} that will animate between two or more views 353db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * that have been added to it. Only one child is shown at a time. If 363db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * requested, can automatically flip between each child at a regular interval. 373db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * 383db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * @attr ref android.R.styleable#AdapterViewFlipper_flipInterval 393db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * @attr ref android.R.styleable#AdapterViewFlipper_autoStart 403db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen */ 413db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen@RemoteView 423db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohenpublic class AdapterViewFlipper extends AdapterViewAnimator { 433db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen private static final String TAG = "ViewFlipper"; 443db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen private static final boolean LOGD = false; 453db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 463db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen private static final int DEFAULT_INTERVAL = 10000; 473db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 483db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen private int mFlipInterval = DEFAULT_INTERVAL; 493db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen private boolean mAutoStart = false; 503db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 513db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen private boolean mRunning = false; 523db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen private boolean mStarted = false; 533db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen private boolean mVisible = false; 543db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen private boolean mUserPresent = true; 55a02fdf1ba03fad71cc80a89dfc74b17456d5b4a5Adam Cohen private boolean mAdvancedByHost = false; 563db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 573db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen public AdapterViewFlipper(Context context) { 583db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen super(context); 593db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 603db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 613db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen public AdapterViewFlipper(Context context, AttributeSet attrs) { 623db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen super(context, attrs); 633db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 643db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen TypedArray a = context.obtainStyledAttributes(attrs, 653db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen com.android.internal.R.styleable.ViewFlipper); 663db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen mFlipInterval = a.getInt( 673db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen com.android.internal.R.styleable.ViewFlipper_flipInterval, DEFAULT_INTERVAL); 683db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen mAutoStart = a.getBoolean( 693db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen com.android.internal.R.styleable.ViewFlipper_autoStart, false); 701b065cd1401253f999caa5d0ac12909407cef00eAdam Cohen 711b065cd1401253f999caa5d0ac12909407cef00eAdam Cohen // By default we want the flipper to loop 721b065cd1401253f999caa5d0ac12909407cef00eAdam Cohen mLoopViews = a.getBoolean( 731b065cd1401253f999caa5d0ac12909407cef00eAdam Cohen com.android.internal.R.styleable.AdapterViewAnimator_loopViews, true); 741b065cd1401253f999caa5d0ac12909407cef00eAdam Cohen 753db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen a.recycle(); 763db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 773db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 783db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen private final BroadcastReceiver mReceiver = new BroadcastReceiver() { 793db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen @Override 803db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen public void onReceive(Context context, Intent intent) { 813db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen final String action = intent.getAction(); 823db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen if (Intent.ACTION_SCREEN_OFF.equals(action)) { 833db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen mUserPresent = false; 843db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen updateRunning(); 853db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } else if (Intent.ACTION_USER_PRESENT.equals(action)) { 863db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen mUserPresent = true; 873db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen updateRunning(false); 883db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 893db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 903db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen }; 913db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 923db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen @Override 933db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen protected void onAttachedToWindow() { 943db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen super.onAttachedToWindow(); 953db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 963db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen // Listen for broadcasts related to user-presence 973db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen final IntentFilter filter = new IntentFilter(); 983db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen filter.addAction(Intent.ACTION_SCREEN_OFF); 993db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen filter.addAction(Intent.ACTION_USER_PRESENT); 1003db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen getContext().registerReceiver(mReceiver, filter); 1013db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 1023db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen if (mAutoStart) { 1033db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen // Automatically start when requested 1043db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen startFlipping(); 1053db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 1063db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 1073db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 1083db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen @Override 1093db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen protected void onDetachedFromWindow() { 1103db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen super.onDetachedFromWindow(); 1113db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen mVisible = false; 1123db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 1133db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen getContext().unregisterReceiver(mReceiver); 1143db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen updateRunning(); 1153db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 1163db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 1173db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen @Override 1183db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen protected void onWindowVisibilityChanged(int visibility) { 1193db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen super.onWindowVisibilityChanged(visibility); 1203db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen mVisible = (visibility == VISIBLE); 1213db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen updateRunning(false); 1223db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 1233db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 1243db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen @Override 1253db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen public void setAdapter(Adapter adapter) { 1263db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen super.setAdapter(adapter); 1273db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen updateRunning(); 1283db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 1293db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 1303db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen /** 1313db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * How long to wait before flipping to the next view 1323db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * 1333db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * @param milliseconds 1343db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * time in milliseconds 1353db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen */ 1363db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen public void setFlipInterval(int milliseconds) { 1373db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen mFlipInterval = milliseconds; 1383db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 1393db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 1403db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen /** 1413db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * Start a timer to cycle through child views 1423db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen */ 1433db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen public void startFlipping() { 1443db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen mStarted = true; 1453db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen updateRunning(); 1463db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 1473db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 1483db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen /** 1493db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * No more flips 1503db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen */ 1513db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen public void stopFlipping() { 1523db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen mStarted = false; 1533db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen updateRunning(); 1543db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 1553db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 1563db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen /** 157b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen * {@inheritDoc} 158b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen */ 159b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen @Override 160b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen @RemotableViewMethod 161b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen public void showNext() { 162b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen // if the flipper is currently flipping automatically, and showNext() is called 163b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen // we should we should make sure to reset the timer 164b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen if (mRunning) { 165b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen mHandler.removeMessages(FLIP_MSG); 166b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen Message msg = mHandler.obtainMessage(FLIP_MSG); 167b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen mHandler.sendMessageDelayed(msg, mFlipInterval); 168b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen } 169b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen super.showNext(); 170b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen } 171b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen 172b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen /** 173b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen * {@inheritDoc} 174b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen */ 175b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen @Override 176b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen @RemotableViewMethod 177b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen public void showPrevious() { 178b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen // if the flipper is currently flipping automatically, and showPrevious() is called 179b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen // we should we should make sure to reset the timer 180b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen if (mRunning) { 181b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen mHandler.removeMessages(FLIP_MSG); 182b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen Message msg = mHandler.obtainMessage(FLIP_MSG); 183b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen mHandler.sendMessageDelayed(msg, mFlipInterval); 184b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen } 185b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen super.showPrevious(); 186b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen } 187b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen 188b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen /** 1893db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * Internal method to start or stop dispatching flip {@link Message} based 1903db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * on {@link #mRunning} and {@link #mVisible} state. 1913db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen */ 1923db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen private void updateRunning() { 1933db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen // by default when we update running, we want the 1943db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen // current view to animate in 1953db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen updateRunning(true); 1963db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 1973db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 1983db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen /** 1993db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * Internal method to start or stop dispatching flip {@link Message} based 2003db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * on {@link #mRunning} and {@link #mVisible} state. 2013db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * 2023db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * @param flipNow Determines whether or not to execute the animation now, in 2033db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * addition to queuing future flips. If omitted, defaults to 2043db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * true. 2053db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen */ 2063db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen private void updateRunning(boolean flipNow) { 207a02fdf1ba03fad71cc80a89dfc74b17456d5b4a5Adam Cohen boolean running = !mAdvancedByHost && mVisible && mStarted && mUserPresent 208a02fdf1ba03fad71cc80a89dfc74b17456d5b4a5Adam Cohen && mAdapter != null; 2093db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen if (running != mRunning) { 2103db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen if (running) { 2113db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen showOnly(mWhichChild, flipNow); 2123db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen Message msg = mHandler.obtainMessage(FLIP_MSG); 2133db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen mHandler.sendMessageDelayed(msg, mFlipInterval); 2143db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } else { 2153db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen mHandler.removeMessages(FLIP_MSG); 2163db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 2173db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen mRunning = running; 2183db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 2193db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen if (LOGD) { 2203db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen Log.d(TAG, "updateRunning() mVisible=" + mVisible + ", mStarted=" + mStarted 2213db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen + ", mUserPresent=" + mUserPresent + ", mRunning=" + mRunning); 2223db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 2233db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 2243db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 2253db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen /** 2263db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * Returns true if the child views are flipping. 2273db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen */ 2283db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen public boolean isFlipping() { 2293db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen return mStarted; 2303db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 2313db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 2323db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen /** 2333db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * Set if this view automatically calls {@link #startFlipping()} when it 2343db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * becomes attached to a window. 2353db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen */ 2363db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen public void setAutoStart(boolean autoStart) { 2373db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen mAutoStart = autoStart; 2383db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 2393db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 2403db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen /** 2413db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * Returns true if this view automatically calls {@link #startFlipping()} 2423db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * when it becomes attached to a window. 2433db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen */ 2443db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen public boolean isAutoStart() { 2453db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen return mAutoStart; 2463db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 2473db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 2483db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen private final int FLIP_MSG = 1; 2493db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 2503db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen private final Handler mHandler = new Handler() { 2513db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen @Override 2523db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen public void handleMessage(Message msg) { 2533db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen if (msg.what == FLIP_MSG) { 2543db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen if (mRunning) { 2553db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen showNext(); 2563db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 2573db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 2583db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 2593db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen }; 260a02fdf1ba03fad71cc80a89dfc74b17456d5b4a5Adam Cohen 261a02fdf1ba03fad71cc80a89dfc74b17456d5b4a5Adam Cohen @Override 262a02fdf1ba03fad71cc80a89dfc74b17456d5b4a5Adam Cohen public void willBeAdvancedByHost() { 263a02fdf1ba03fad71cc80a89dfc74b17456d5b4a5Adam Cohen mAdvancedByHost = true; 264a02fdf1ba03fad71cc80a89dfc74b17456d5b4a5Adam Cohen updateRunning(false); 265a02fdf1ba03fad71cc80a89dfc74b17456d5b4a5Adam Cohen } 2663db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen} 267