OnScreenHint.java revision b8af1c56debb56bad213e39245c79915c9dfece4
1b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project/* 2b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * Copyright (C) 2009 The Android Open Source Project 3b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * 4b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * you may not use this file except in compliance with the License. 6b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * You may obtain a copy of the License at 7b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * 8b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * 10b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * See the License for the specific language governing permissions and 14b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * limitations under the License. 15b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project */ 16b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 17b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Projectpackage com.android.camera; 18b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 19b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Projectimport android.content.Context; 20b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Projectimport android.content.res.Resources; 21b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Projectimport android.graphics.PixelFormat; 22b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Projectimport android.os.Handler; 23b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Projectimport android.os.ServiceManager; 24b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Projectimport android.util.Log; 25b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Projectimport android.view.Gravity; 26b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Projectimport android.view.LayoutInflater; 27b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Projectimport android.view.View; 28b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Projectimport android.view.WindowManager; 29b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Projectimport android.widget.TextView; 30b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 31b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project/** 32b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * A on-screen hint is a view containing a little message for the user and will 33b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * be shown on the screen continuously. This class helps you create and show 34b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * those. 35b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * 36b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * <p> 37b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * When the view is shown to the user, appears as a floating view over the 38b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * application. 39b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * <p> 40b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * The easiest way to use this class is to call one of the static methods that 41b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * constructs everything you need and returns a new OnScreenHint object. 42b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project */ 43b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Projectpublic class OnScreenHint { 44b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project static final String TAG = "OnScreenHint"; 45b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang static final boolean LOCAL_LOGV = false; 46b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 47b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project final Context mContext; 48b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project int mGravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM; 49b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project int mX, mY; 50b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project float mHorizontalMargin; 51b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project float mVerticalMargin; 52b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project View mView; 53b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project View mNextView; 54b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 55b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang private final WindowManager.LayoutParams mParams = 56b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang new WindowManager.LayoutParams(); 57b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project private WindowManager mWM; 58b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project private final Handler mHandler = new Handler(); 59b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 60b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project /** 61b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang * Construct an empty OnScreenHint object. You must call {@link #setView} 62b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang * before you can call {@link #show}. 63b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * 64b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang * @param context The context to use. Usually your 65b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang * {@link android.app.Application} or 66b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang * {@link android.app.Activity} object. 67b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project */ 68b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project public OnScreenHint(Context context) { 69b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project mContext = context; 70b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project mWM = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 71b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang mY = context.getResources().getDimensionPixelSize( 72b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang R.dimen.hint_y_offset); 73b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 74b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project mParams.height = WindowManager.LayoutParams.WRAP_CONTENT; 75b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project mParams.width = WindowManager.LayoutParams.WRAP_CONTENT; 76b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project mParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE 77b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE; 78b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project mParams.format = PixelFormat.TRANSLUCENT; 79b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project mParams.windowAnimations = R.style.Animation_OnScreenHint; 80b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project mParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_PANEL; 81b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project mParams.setTitle("OnScreenHint"); 82b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 83b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 84b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project /** 85b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * Show the view on the screen. 86b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project */ 87b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project public void show() { 88b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project if (mNextView == null) { 89b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project throw new RuntimeException("setView must have been called"); 90b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 91b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang if (LOCAL_LOGV) Log.v(TAG, "SHOW: " + this); 92b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project mHandler.post(mShow); 93b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 94b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 95b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project /** 96b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * Close the view if it's showing. 97b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project */ 98b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project public void cancel() { 99b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang if (LOCAL_LOGV) Log.v(TAG, "HIDE: " + this); 100b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project mHandler.post(mHide); 101b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 102b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 103b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project /** 104b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * Set the view to show. 105b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * @see #getView 106b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project */ 107b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project public void setView(View view) { 108b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project mNextView = view; 109b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 110b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 111b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project /** 112b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * Return the view. 113b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * @see #setView 114b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project */ 115b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project public View getView() { 116b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project return mNextView; 117b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 118b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 119b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project /** 120b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * Set the margins of the view. 121b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * 122b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * @param horizontalMargin The horizontal margin, in percentage of the 123b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * container width, between the container's edges and the 124b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * notification 125b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * @param verticalMargin The vertical margin, in percentage of the 126b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * container height, between the container's edges and the 127b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * notification 128b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project */ 129b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project public void setMargin(float horizontalMargin, float verticalMargin) { 130b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project mHorizontalMargin = horizontalMargin; 131b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project mVerticalMargin = verticalMargin; 132b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 133b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 134b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project /** 135b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * Return the horizontal margin. 136b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project */ 137b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project public float getHorizontalMargin() { 138b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project return mHorizontalMargin; 139b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 140b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 141b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project /** 142b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * Return the vertical margin. 143b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project */ 144b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project public float getVerticalMargin() { 145b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project return mVerticalMargin; 146b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 147b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 148b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project /** 149b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * Set the location at which the notification should appear on the screen. 150b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * @see android.view.Gravity 151b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * @see #getGravity 152b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project */ 153b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project public void setGravity(int gravity, int xOffset, int yOffset) { 154b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project mGravity = gravity; 155b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project mX = xOffset; 156b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project mY = yOffset; 157b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 158b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 159b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project /** 160b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * Get the location at which the notification should appear on the screen. 161b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * @see android.view.Gravity 162b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * @see #getGravity 163b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project */ 164b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project public int getGravity() { 165b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project return mGravity; 166b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 167b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 168b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project /** 169b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * Return the X offset in pixels to apply to the gravity's location. 170b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project */ 171b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project public int getXOffset() { 172b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project return mX; 173b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 174b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 175b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project /** 176b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * Return the Y offset in pixels to apply to the gravity's location. 177b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project */ 178b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project public int getYOffset() { 179b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project return mY; 180b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 181b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 182b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project /** 183b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * Make a standard hint that just contains a text view. 184b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * 185b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang * @param context The context to use. Usually your 186b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang * {@link android.app.Application} or 187b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang * {@link android.app.Activity} object. 188b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * @param text The text to show. Can be formatted text. 189b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * 190b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project */ 191b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project public static OnScreenHint makeText(Context context, CharSequence text) { 192b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project OnScreenHint result = new OnScreenHint(context); 193b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 194b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang LayoutInflater inflate = 195b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang (LayoutInflater) context.getSystemService( 196b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang Context.LAYOUT_INFLATER_SERVICE); 197b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project View v = inflate.inflate(R.layout.on_screen_hint, null); 198b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang TextView tv = (TextView) v.findViewById(R.id.message); 199b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project tv.setText(text); 200b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 201b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project result.mNextView = v; 202b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 203b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project return result; 204b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 205b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 206b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project /** 207b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang * Make a standard hint that just contains a text view with the text from a 208b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang * resource. 209b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * 210b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang * @param context The context to use. Usually your 211b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang * {@link android.app.Application} or 212b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang * {@link android.app.Activity} object. 213b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang * @param resId The resource id of the string resource to use. Can be 214b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang * formatted text. 215b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * 216b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * @throws Resources.NotFoundException if the resource can't be found. 217b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project */ 218b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project public static OnScreenHint makeText(Context context, int resId) 219b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project throws Resources.NotFoundException { 220b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project return makeText(context, context.getResources().getText(resId)); 221b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 222b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 223b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project /** 224b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang * Update the text in a OnScreenHint that was previously created using one 225b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang * of the makeText() methods. 226b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * @param resId The new text for the OnScreenHint. 227b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project */ 228b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project public void setText(int resId) { 229b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project setText(mContext.getText(resId)); 230b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 231b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 232b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project /** 233b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang * Update the text in a OnScreenHint that was previously created using one 234b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang * of the makeText() methods. 235b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * @param s The new text for the OnScreenHint. 236b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project */ 237b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project public void setText(CharSequence s) { 238b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project if (mNextView == null) { 239b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang throw new RuntimeException("This OnScreenHint was not " 240b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang + "created with OnScreenHint.makeText()"); 241b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 242b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project TextView tv = (TextView) mNextView.findViewById(R.id.message); 243b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project if (tv == null) { 244b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang throw new RuntimeException("This OnScreenHint was not " 245b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang + "created with OnScreenHint.makeText()"); 246b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 247b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project tv.setText(s); 248b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 249b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 250b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project private synchronized void handleShow() { 251b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang if (LOCAL_LOGV) { 252b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang Log.v(TAG, "HANDLE SHOW: " + this + " mView=" + mView 253b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang + " mNextView=" + mNextView); 254b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang } 255b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project if (mView != mNextView) { 256b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project // remove the old view if necessary 257b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project handleHide(); 258b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project mView = mNextView; 259b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project final int gravity = mGravity; 260b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project mParams.gravity = gravity; 261b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang if ((gravity & Gravity.HORIZONTAL_GRAVITY_MASK) 262b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang == Gravity.FILL_HORIZONTAL) { 263b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project mParams.horizontalWeight = 1.0f; 264b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 265b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang if ((gravity & Gravity.VERTICAL_GRAVITY_MASK) 266b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang == Gravity.FILL_VERTICAL) { 267b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project mParams.verticalWeight = 1.0f; 268b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 269b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project mParams.x = mX; 270b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project mParams.y = mY; 271b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project mParams.verticalMargin = mVerticalMargin; 272b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project mParams.horizontalMargin = mHorizontalMargin; 273b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project if (mView.getParent() != null) { 274b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang if (LOCAL_LOGV) { 275b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang Log.v(TAG, "REMOVE! " + mView + " in " + this); 276b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang } 277b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project mWM.removeView(mView); 278b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 279b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang if (LOCAL_LOGV) Log.v(TAG, "ADD! " + mView + " in " + this); 280b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project mWM.addView(mView, mParams); 281b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 282b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 283b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 284b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project private synchronized void handleHide() { 285b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang if (LOCAL_LOGV) Log.v(TAG, "HANDLE HIDE: " + this + " mView=" + mView); 286b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project if (mView != null) { 287b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project // note: checking parent() just to make sure the view has 288b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project // been added... i have seen cases where we get here when 289b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project // the view isn't yet added, so let's try not to crash. 290b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project if (mView.getParent() != null) { 291b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang if (LOCAL_LOGV) { 292b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang Log.v(TAG, "REMOVE! " + mView + " in " + this); 293b8af1c56debb56bad213e39245c79915c9dfece4Chih-Chung Chang } 294b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project mWM.removeView(mView); 295b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 296b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project mView = null; 297b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 298b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 299b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 300b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project private Runnable mShow = new Runnable() { 301b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project public void run() { 302b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project handleShow(); 303b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 304b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project }; 305b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 306b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project private Runnable mHide = new Runnable() { 307b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project public void run() { 308b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project handleHide(); 309b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 310b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project }; 311b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project} 312b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 313