AdapterViewFlipper.java revision 4725660292bcf11c84e9c7da127fd0215fb58e81
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, 654725660292bcf11c84e9c7da127fd0215fb58e81Adam Cohen com.android.internal.R.styleable.AdapterViewFlipper); 663db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen mFlipInterval = a.getInt( 674725660292bcf11c84e9c7da127fd0215fb58e81Adam Cohen com.android.internal.R.styleable.AdapterViewFlipper_flipInterval, DEFAULT_INTERVAL); 683db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen mAutoStart = a.getBoolean( 694725660292bcf11c84e9c7da127fd0215fb58e81Adam Cohen com.android.internal.R.styleable.AdapterViewFlipper_autoStart, false); 701b065cd1401253f999caa5d0ac12909407cef00eAdam Cohen 714725660292bcf11c84e9c7da127fd0215fb58e81Adam Cohen // A view flipper should cycle through the views 724725660292bcf11c84e9c7da127fd0215fb58e81Adam Cohen mLoopViews = true; 731b065cd1401253f999caa5d0ac12909407cef00eAdam Cohen 743db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen a.recycle(); 753db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 763db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 773db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen private final BroadcastReceiver mReceiver = new BroadcastReceiver() { 783db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen @Override 793db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen public void onReceive(Context context, Intent intent) { 803db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen final String action = intent.getAction(); 813db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen if (Intent.ACTION_SCREEN_OFF.equals(action)) { 823db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen mUserPresent = false; 833db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen updateRunning(); 843db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } else if (Intent.ACTION_USER_PRESENT.equals(action)) { 853db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen mUserPresent = true; 863db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen updateRunning(false); 873db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 883db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 893db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen }; 903db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 913db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen @Override 923db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen protected void onAttachedToWindow() { 933db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen super.onAttachedToWindow(); 943db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 953db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen // Listen for broadcasts related to user-presence 963db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen final IntentFilter filter = new IntentFilter(); 973db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen filter.addAction(Intent.ACTION_SCREEN_OFF); 983db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen filter.addAction(Intent.ACTION_USER_PRESENT); 993db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen getContext().registerReceiver(mReceiver, filter); 1003db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 1013db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen if (mAutoStart) { 1023db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen // Automatically start when requested 1033db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen startFlipping(); 1043db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 1053db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 1063db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 1073db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen @Override 1083db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen protected void onDetachedFromWindow() { 1093db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen super.onDetachedFromWindow(); 1103db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen mVisible = false; 1113db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 1123db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen getContext().unregisterReceiver(mReceiver); 1133db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen updateRunning(); 1143db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 1153db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 1163db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen @Override 1173db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen protected void onWindowVisibilityChanged(int visibility) { 1183db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen super.onWindowVisibilityChanged(visibility); 1193db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen mVisible = (visibility == VISIBLE); 1203db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen updateRunning(false); 1213db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 1223db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 1233db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen @Override 1243db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen public void setAdapter(Adapter adapter) { 1253db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen super.setAdapter(adapter); 1263db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen updateRunning(); 1273db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 1283db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 1293db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen /** 1303db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * How long to wait before flipping to the next view 1313db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * 1323db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * @param milliseconds 1333db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * time in milliseconds 1343db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen */ 1353db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen public void setFlipInterval(int milliseconds) { 1363db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen mFlipInterval = milliseconds; 1373db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 1383db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 1393db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen /** 1403db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * Start a timer to cycle through child views 1413db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen */ 1423db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen public void startFlipping() { 1433db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen mStarted = true; 1443db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen updateRunning(); 1453db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 1463db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 1473db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen /** 1483db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * No more flips 1493db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen */ 1503db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen public void stopFlipping() { 1513db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen mStarted = false; 1523db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen updateRunning(); 1533db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 1543db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 1553db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen /** 156b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen * {@inheritDoc} 157b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen */ 158b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen @Override 159b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen @RemotableViewMethod 160b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen public void showNext() { 161b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen // if the flipper is currently flipping automatically, and showNext() is called 162b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen // we should we should make sure to reset the timer 163b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen if (mRunning) { 164b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen mHandler.removeMessages(FLIP_MSG); 165b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen Message msg = mHandler.obtainMessage(FLIP_MSG); 166b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen mHandler.sendMessageDelayed(msg, mFlipInterval); 167b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen } 168b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen super.showNext(); 169b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen } 170b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen 171b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen /** 172b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen * {@inheritDoc} 173b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen */ 174b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen @Override 175b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen @RemotableViewMethod 176b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen public void showPrevious() { 177b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen // if the flipper is currently flipping automatically, and showPrevious() is called 178b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen // we should we should make sure to reset the timer 179b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen if (mRunning) { 180b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen mHandler.removeMessages(FLIP_MSG); 181b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen Message msg = mHandler.obtainMessage(FLIP_MSG); 182b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen mHandler.sendMessageDelayed(msg, mFlipInterval); 183b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen } 184b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen super.showPrevious(); 185b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen } 186b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen 187b04f7ad90b7d5d5e0998e3b56960004cf56e6e8fAdam Cohen /** 1883db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * Internal method to start or stop dispatching flip {@link Message} based 1893db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * on {@link #mRunning} and {@link #mVisible} state. 1903db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen */ 1913db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen private void updateRunning() { 1923db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen // by default when we update running, we want the 1933db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen // current view to animate in 1943db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen updateRunning(true); 1953db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 1963db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 1973db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen /** 1983db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * Internal method to start or stop dispatching flip {@link Message} based 1993db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * on {@link #mRunning} and {@link #mVisible} state. 2003db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * 2013db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * @param flipNow Determines whether or not to execute the animation now, in 2023db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * addition to queuing future flips. If omitted, defaults to 2033db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * true. 2043db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen */ 2053db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen private void updateRunning(boolean flipNow) { 206a02fdf1ba03fad71cc80a89dfc74b17456d5b4a5Adam Cohen boolean running = !mAdvancedByHost && mVisible && mStarted && mUserPresent 207a02fdf1ba03fad71cc80a89dfc74b17456d5b4a5Adam Cohen && mAdapter != null; 2083db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen if (running != mRunning) { 2093db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen if (running) { 2103db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen showOnly(mWhichChild, flipNow); 2113db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen Message msg = mHandler.obtainMessage(FLIP_MSG); 2123db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen mHandler.sendMessageDelayed(msg, mFlipInterval); 2133db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } else { 2143db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen mHandler.removeMessages(FLIP_MSG); 2153db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 2163db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen mRunning = running; 2173db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 2183db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen if (LOGD) { 2193db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen Log.d(TAG, "updateRunning() mVisible=" + mVisible + ", mStarted=" + mStarted 2203db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen + ", mUserPresent=" + mUserPresent + ", mRunning=" + mRunning); 2213db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 2223db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 2233db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 2243db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen /** 2253db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * Returns true if the child views are flipping. 2263db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen */ 2273db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen public boolean isFlipping() { 2283db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen return mStarted; 2293db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 2303db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 2313db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen /** 2323db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * Set if this view automatically calls {@link #startFlipping()} when it 2333db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * becomes attached to a window. 2343db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen */ 2353db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen public void setAutoStart(boolean autoStart) { 2363db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen mAutoStart = autoStart; 2373db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 2383db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 2393db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen /** 2403db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * Returns true if this view automatically calls {@link #startFlipping()} 2413db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen * when it becomes attached to a window. 2423db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen */ 2433db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen public boolean isAutoStart() { 2443db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen return mAutoStart; 2453db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 2463db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 2473db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen private final int FLIP_MSG = 1; 2483db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen 2493db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen private final Handler mHandler = new Handler() { 2503db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen @Override 2513db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen public void handleMessage(Message msg) { 2523db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen if (msg.what == FLIP_MSG) { 2533db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen if (mRunning) { 2543db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen showNext(); 2553db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 2563db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 2573db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen } 2583db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen }; 259a02fdf1ba03fad71cc80a89dfc74b17456d5b4a5Adam Cohen 2600e2de6d7187ef67ec00a2f2544450caa4a239c39Adam Cohen /** 2610e2de6d7187ef67ec00a2f2544450caa4a239c39Adam Cohen * Called by an {@link android.appwidget.AppWidgetHost} to indicate that it will be 2620e2de6d7187ef67ec00a2f2544450caa4a239c39Adam Cohen * automatically advancing the views of this {@link AdapterViewFlipper} by calling 2630e2de6d7187ef67ec00a2f2544450caa4a239c39Adam Cohen * {@link AdapterViewFlipper#advance()} at some point in the future. This allows 2640e2de6d7187ef67ec00a2f2544450caa4a239c39Adam Cohen * {@link AdapterViewFlipper} to prepare by no longer Advancing its children. 2650e2de6d7187ef67ec00a2f2544450caa4a239c39Adam Cohen */ 266a02fdf1ba03fad71cc80a89dfc74b17456d5b4a5Adam Cohen @Override 2670e2de6d7187ef67ec00a2f2544450caa4a239c39Adam Cohen public void fyiWillBeAdvancedByHostKThx() { 268a02fdf1ba03fad71cc80a89dfc74b17456d5b4a5Adam Cohen mAdvancedByHost = true; 269a02fdf1ba03fad71cc80a89dfc74b17456d5b4a5Adam Cohen updateRunning(false); 270a02fdf1ba03fad71cc80a89dfc74b17456d5b4a5Adam Cohen } 2713db40678d33c2b5f90c380966d36b3e10ed11f05Adam Cohen} 272