| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.chromoting; | 5 package org.chromium.chromoting; |
| 6 | 6 |
| 7 import android.content.Context; | 7 import android.content.Context; |
| 8 import android.graphics.Bitmap; | 8 import android.graphics.Bitmap; |
| 9 import android.graphics.Canvas; | 9 import android.graphics.Canvas; |
| 10 import android.graphics.Color; | 10 import android.graphics.Color; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 27 import org.chromium.chromoting.jni.JniInterface; | 27 import org.chromium.chromoting.jni.JniInterface; |
| 28 | 28 |
| 29 /** | 29 /** |
| 30 * The user interface for viewing and interacting with a specific remote host. | 30 * The user interface for viewing and interacting with a specific remote host. |
| 31 * It provides a canvas onto which the video feed is rendered, handles | 31 * It provides a canvas onto which the video feed is rendered, handles |
| 32 * multitouch pan and zoom gestures, and collects and forwards input events. | 32 * multitouch pan and zoom gestures, and collects and forwards input events. |
| 33 */ | 33 */ |
| 34 /** GUI element that holds the drawing canvas. */ | 34 /** GUI element that holds the drawing canvas. */ |
| 35 public class DesktopView extends SurfaceView implements DesktopViewInterface, | 35 public class DesktopView extends SurfaceView implements DesktopViewInterface, |
| 36 SurfaceHolder.Callback { | 36 SurfaceHolder.Callback { |
| 37 private RenderData mRenderData; | 37 private final RenderData mRenderData; |
| 38 private TouchInputHandler mInputHandler; | 38 private TouchInputHandler mInputHandler; |
| 39 | 39 |
| 40 /** The parent Desktop activity. */ | 40 /** The parent Desktop activity. */ |
| 41 private Desktop mDesktop; | 41 private Desktop mDesktop; |
| 42 | 42 |
| 43 // Flag to prevent multiple repaint requests from being backed up. Requests
for repainting will | 43 // Flag to prevent multiple repaint requests from being backed up. Requests
for repainting will |
| 44 // be dropped if this is already set to true. This is used by the main threa
d and the painting | 44 // be dropped if this is already set to true. This is used by the main threa
d and the painting |
| 45 // thread, so the access should be synchronized on |mRenderData|. | 45 // thread, so the access should be synchronized on |mRenderData|. |
| 46 private boolean mRepaintPending; | 46 private boolean mRepaintPending; |
| 47 | 47 |
| 48 // Flag used to ensure that the SurfaceView is only painted between calls to
surfaceCreated() | 48 // Flag used to ensure that the SurfaceView is only painted between calls to
surfaceCreated() |
| 49 // and surfaceDestroyed(). Accessed on main thread and display thread, so th
is should be | 49 // and surfaceDestroyed(). Accessed on main thread and display thread, so th
is should be |
| 50 // synchronized on |mRenderData|. | 50 // synchronized on |mRenderData|. |
| 51 private boolean mSurfaceCreated = false; | 51 private boolean mSurfaceCreated = false; |
| 52 | 52 |
| 53 /** Helper class for displaying the long-press feedback animation. This clas
s is thread-safe. */ | 53 /** Helper class for displaying the long-press feedback animation. This clas
s is thread-safe. */ |
| 54 private static class FeedbackAnimator { | 54 private static class FeedbackAnimator { |
| 55 /** Total duration of the animation, in milliseconds. */ | 55 /** Total duration of the animation, in milliseconds. */ |
| 56 private static final float TOTAL_DURATION_MS = 220; | 56 private static final float TOTAL_DURATION_MS = 220; |
| 57 | 57 |
| 58 /** Start time of the animation, from {@link SystemClock#uptimeMillis()}
. */ | 58 /** Start time of the animation, from {@link SystemClock#uptimeMillis()}
. */ |
| 59 private long mStartTime = 0; | 59 private long mStartTime = 0; |
| 60 | 60 |
| 61 private boolean mRunning = false; | 61 private boolean mRunning = false; |
| 62 | 62 |
| 63 /** Lock to allow multithreaded access to {@link #mStartTime} and {@link
#mRunning}. */ | 63 /** Lock to allow multithreaded access to {@link #mStartTime} and {@link
#mRunning}. */ |
| 64 private Object mLock = new Object(); | 64 private final Object mLock = new Object(); |
| 65 | 65 |
| 66 private Paint mPaint = new Paint(); | 66 private Paint mPaint = new Paint(); |
| 67 | 67 |
| 68 public boolean isAnimationRunning() { | 68 public boolean isAnimationRunning() { |
| 69 synchronized (mLock) { | 69 synchronized (mLock) { |
| 70 return mRunning; | 70 return mRunning; |
| 71 } | 71 } |
| 72 } | 72 } |
| 73 | 73 |
| 74 /** | 74 /** |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 new float[] {0.0f, 0.8f, 0.9f, 1.0f}, Shader.TileMode.CLAMP)
); | 108 new float[] {0.0f, 0.8f, 0.9f, 1.0f}, Shader.TileMode.CLAMP)
); |
| 109 canvas.drawCircle(x, y, radius, mPaint); | 109 canvas.drawCircle(x, y, radius, mPaint); |
| 110 } | 110 } |
| 111 } | 111 } |
| 112 | 112 |
| 113 private FeedbackAnimator mFeedbackAnimator = new FeedbackAnimator(); | 113 private FeedbackAnimator mFeedbackAnimator = new FeedbackAnimator(); |
| 114 | 114 |
| 115 // Variables to control animation by the TouchInputHandler. | 115 // Variables to control animation by the TouchInputHandler. |
| 116 | 116 |
| 117 /** Protects mInputAnimationRunning. */ | 117 /** Protects mInputAnimationRunning. */ |
| 118 private Object mAnimationLock = new Object(); | 118 private final Object mAnimationLock = new Object(); |
| 119 | 119 |
| 120 /** Whether the TouchInputHandler has requested animation to be performed. *
/ | 120 /** Whether the TouchInputHandler has requested animation to be performed. *
/ |
| 121 private boolean mInputAnimationRunning = false; | 121 private boolean mInputAnimationRunning = false; |
| 122 | 122 |
| 123 public DesktopView(Context context, AttributeSet attributes) { | 123 public DesktopView(Context context, AttributeSet attributes) { |
| 124 super(context, attributes); | 124 super(context, attributes); |
| 125 | 125 |
| 126 // Give this view keyboard focus, allowing us to customize the soft keyb
oard's settings. | 126 // Give this view keyboard focus, allowing us to customize the soft keyb
oard's settings. |
| 127 setFocusableInTouchMode(true); | 127 setFocusableInTouchMode(true); |
| 128 | 128 |
| (...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 378 @Override | 378 @Override |
| 379 public void setAnimationEnabled(boolean enabled) { | 379 public void setAnimationEnabled(boolean enabled) { |
| 380 synchronized (mAnimationLock) { | 380 synchronized (mAnimationLock) { |
| 381 if (enabled && !mInputAnimationRunning) { | 381 if (enabled && !mInputAnimationRunning) { |
| 382 requestRepaint(); | 382 requestRepaint(); |
| 383 } | 383 } |
| 384 mInputAnimationRunning = enabled; | 384 mInputAnimationRunning = enabled; |
| 385 } | 385 } |
| 386 } | 386 } |
| 387 } | 387 } |
| OLD | NEW |