ImageShow.java revision 4af6d6a77ad15d49605aaf9451d713eb70b6b619
1/* 2 * Copyright (C) 2012 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.gallery3d.filtershow.imageshow; 18 19import android.content.Context; 20import android.graphics.Bitmap; 21import android.graphics.Canvas; 22import android.graphics.Color; 23import android.graphics.Paint; 24import android.graphics.Rect; 25import android.graphics.RectF; 26import android.net.Uri; 27import android.os.Handler; 28import android.util.AttributeSet; 29import android.view.GestureDetector; 30import android.view.GestureDetector.OnDoubleTapListener; 31import android.view.GestureDetector.OnGestureListener; 32import android.view.MotionEvent; 33import android.view.View; 34import android.widget.ArrayAdapter; 35import android.widget.SeekBar; 36import android.widget.SeekBar.OnSeekBarChangeListener; 37 38import com.android.gallery3d.R; 39import com.android.gallery3d.filtershow.FilterShowActivity; 40import com.android.gallery3d.filtershow.HistoryAdapter; 41import com.android.gallery3d.filtershow.ImageStateAdapter; 42import com.android.gallery3d.filtershow.PanelController; 43import com.android.gallery3d.filtershow.cache.ImageLoader; 44import com.android.gallery3d.filtershow.filters.ImageFilter; 45import com.android.gallery3d.filtershow.presets.ImagePreset; 46import com.android.gallery3d.filtershow.ui.SliderController; 47import com.android.gallery3d.filtershow.ui.SliderListener; 48 49import java.io.File; 50 51public class ImageShow extends View implements OnGestureListener, 52 OnDoubleTapListener, 53 SliderListener, 54 OnSeekBarChangeListener { 55 56 private static final String LOGTAG = "ImageShow"; 57 58 protected Paint mPaint = new Paint(); 59 protected static int mTextSize = 24; 60 protected static int mTextPadding = 20; 61 62 protected ImagePreset mImagePreset = null; 63 protected ImagePreset mImageGeometryOnlyPreset = null; 64 protected ImagePreset mImageFiltersOnlyPreset = null; 65 66 protected ImageLoader mImageLoader = null; 67 private ImageFilter mCurrentFilter = null; 68 private boolean mDirtyGeometry = false; 69 70 private Bitmap mBackgroundImage = null; 71 private final boolean USE_BACKGROUND_IMAGE = false; 72 private static int mBackgroundColor = Color.RED; 73 74 private Bitmap mGeometryOnlyImage = null; 75 private Bitmap mFiltersOnlyImage = null; 76 private Bitmap mFilteredImage = null; 77 78 private GestureDetector mGestureDetector = null; 79 80 private HistoryAdapter mHistoryAdapter = null; 81 private ImageStateAdapter mImageStateAdapter = null; 82 83 protected Rect mImageBounds = new Rect(); 84 85 private boolean mTouchShowOriginal = false; 86 private long mTouchShowOriginalDate = 0; 87 private final long mTouchShowOriginalDelayMin = 200; // 200ms 88 private final long mTouchShowOriginalDelayMax = 300; // 300ms 89 private int mShowOriginalDirection = 0; 90 private static int UNVEIL_HORIZONTAL = 1; 91 private static int UNVEIL_VERTICAL = 2; 92 93 private int mTouchDownX = 0; 94 private int mTouchDownY = 0; 95 protected float mTouchX = 0; 96 protected float mTouchY = 0; 97 98 private static int mOriginalTextMargin = 8; 99 private static int mOriginalTextSize = 26; 100 private static String mOriginalText = "Original"; 101 102 protected GeometryMetadata getGeometry() { 103 return new GeometryMetadata(getImagePreset().mGeoData); 104 } 105 106 public void setGeometry(GeometryMetadata d) { 107 getImagePreset().mGeoData.set(d); 108 } 109 110 private boolean mShowControls = false; 111 private boolean mShowOriginal = false; 112 private String mToast = null; 113 private boolean mShowToast = false; 114 private boolean mImportantToast = false; 115 116 private SeekBar mSeekBar = null; 117 private PanelController mController = null; 118 119 private FilterShowActivity mActivity = null; 120 121 public static void setDefaultBackgroundColor(int value) { 122 mBackgroundColor = value; 123 } 124 125 public int getDefaultBackgroundColor() { 126 return mBackgroundColor; 127 } 128 129 public static void setTextSize(int value) { 130 mTextSize = value; 131 } 132 133 public static void setTextPadding(int value) { 134 mTextPadding = value; 135 } 136 137 public static void setOriginalTextMargin(int value) { 138 mOriginalTextMargin = value; 139 } 140 141 public static void setOriginalTextSize(int value) { 142 mOriginalTextSize = value; 143 } 144 145 public static void setOriginalText(String text) { 146 mOriginalText = text; 147 } 148 149 private final Handler mHandler = new Handler(); 150 151 public void select() { 152 if (mSeekBar != null) { 153 mSeekBar.setOnSeekBarChangeListener(this); 154 } 155 if (getCurrentFilter() != null) { 156 int parameter = getCurrentFilter().getParameter(); 157 int maxp = getCurrentFilter().getMaxParameter(); 158 int minp = getCurrentFilter().getMinParameter(); 159 updateSeekBar(parameter, minp, maxp); 160 } 161 } 162 163 private int parameterToUI(int parameter, int minp, int maxp, int uimax) { 164 return (uimax * (parameter - minp)) / (maxp - minp); 165 } 166 167 private int uiToParameter(int ui, int minp, int maxp, int uimax) { 168 return ((maxp - minp) * ui) / uimax + minp; 169 } 170 171 public void updateSeekBar(int parameter, int minp, int maxp) { 172 if (mSeekBar == null) { 173 return; 174 } 175 int seekMax = mSeekBar.getMax(); 176 int progress = parameterToUI(parameter, minp, maxp, seekMax); 177 mSeekBar.setProgress(progress); 178 } 179 180 public void unselect() { 181 182 } 183 184 public boolean hasModifications() { 185 if (getImagePreset() == null) { 186 return false; 187 } 188 return getImagePreset().hasModifications(); 189 } 190 191 public void resetParameter() { 192 ImageFilter currentFilter = getCurrentFilter(); 193 if (currentFilter != null) { 194 updateSeekBar(currentFilter.getDefaultParameter(), 195 getCurrentFilter().getMinParameter(), getCurrentFilter().getMaxParameter()); 196 } 197 } 198 199 public void setPanelController(PanelController controller) { 200 mController = controller; 201 } 202 203 public PanelController getPanelController() { 204 return mController; 205 } 206 207 @Override 208 public void onNewValue(int parameter) { 209 int maxp = ImageFilter.DEFAULT_MAX_PARAMETER; 210 int minp = ImageFilter.DEFAULT_MIN_PARAMETER; 211 if (getCurrentFilter() != null) { 212 getCurrentFilter().setParameter(parameter); 213 maxp = getCurrentFilter().getMaxParameter(); 214 minp = getCurrentFilter().getMinParameter(); 215 } 216 if (getImagePreset() != null) { 217 mImageLoader.resetImageForPreset(getImagePreset(), this); 218 getImagePreset().fillImageStateAdapter(mImageStateAdapter); 219 } 220 if (getPanelController() != null) { 221 getPanelController().onNewValue(parameter); 222 } 223 invalidate(); 224 mActivity.enableSave(hasModifications()); 225 } 226 227 @Override 228 public void onTouchDown(float x, float y) { 229 mTouchX = x; 230 mTouchY = y; 231 invalidate(); 232 } 233 234 @Override 235 public void onTouchUp() { 236 } 237 238 public ImageShow(Context context, AttributeSet attrs) { 239 super(context, attrs); 240 mHistoryAdapter = new HistoryAdapter(context, R.layout.filtershow_history_operation_row, 241 R.id.rowTextView); 242 mImageStateAdapter = new ImageStateAdapter(context, 243 R.layout.filtershow_imagestate_row); 244 setupGestureDetector(context); 245 mActivity = (FilterShowActivity) context; 246 } 247 248 public ImageShow(Context context) { 249 super(context); 250 mHistoryAdapter = new HistoryAdapter(context, R.layout.filtershow_history_operation_row, 251 R.id.rowTextView); 252 setupGestureDetector(context); 253 mActivity = (FilterShowActivity) context; 254 } 255 256 public void setupGestureDetector(Context context) { 257 mGestureDetector = new GestureDetector(context, this); 258 } 259 260 @Override 261 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 262 int parentWidth = MeasureSpec.getSize(widthMeasureSpec); 263 int parentHeight = MeasureSpec.getSize(heightMeasureSpec); 264 setMeasuredDimension(parentWidth, parentHeight); 265 } 266 267 public void setSeekBar(SeekBar seekBar) { 268 mSeekBar = seekBar; 269 } 270 271 public void setCurrentFilter(ImageFilter filter) { 272 mCurrentFilter = filter; 273 } 274 275 public ImageFilter getCurrentFilter() { 276 return mCurrentFilter; 277 } 278 279 public void setAdapter(HistoryAdapter adapter) { 280 mHistoryAdapter = adapter; 281 } 282 283 public void showToast(String text) { 284 showToast(text, false); 285 } 286 287 public void showToast(String text, boolean important) { 288 mToast = text; 289 mShowToast = true; 290 mImportantToast = important; 291 invalidate(); 292 293 mHandler.postDelayed(new Runnable() { 294 @Override 295 public void run() { 296 mShowToast = false; 297 invalidate(); 298 } 299 }, 400); 300 } 301 302 public Rect getImageBounds() { 303 Rect dst = new Rect(); 304 getImagePreset().mGeoData.getPhotoBounds().roundOut(dst); 305 return dst; 306 } 307 308 public Rect getImageCropBounds() { 309 return GeometryMath.roundNearest(getImagePreset().mGeoData.getPreviewCropBounds()); 310 } 311 312 public Rect getDisplayedImageBounds() { 313 return mImageBounds; 314 } 315 316 public ImagePreset getImagePreset() { 317 return mImagePreset; 318 } 319 320 public void drawToast(Canvas canvas) { 321 if (mShowToast && mToast != null) { 322 Paint paint = new Paint(); 323 paint.setTextSize(128); 324 float textWidth = paint.measureText(mToast); 325 int toastX = (int) ((getWidth() - textWidth) / 2.0f); 326 int toastY = (int) (getHeight() / 3.0f); 327 328 paint.setARGB(255, 0, 0, 0); 329 canvas.drawText(mToast, toastX - 2, toastY - 2, paint); 330 canvas.drawText(mToast, toastX - 2, toastY, paint); 331 canvas.drawText(mToast, toastX, toastY - 2, paint); 332 canvas.drawText(mToast, toastX + 2, toastY + 2, paint); 333 canvas.drawText(mToast, toastX + 2, toastY, paint); 334 canvas.drawText(mToast, toastX, toastY + 2, paint); 335 if (mImportantToast) { 336 paint.setARGB(255, 200, 0, 0); 337 } else { 338 paint.setARGB(255, 255, 255, 255); 339 } 340 canvas.drawText(mToast, toastX, toastY, paint); 341 } 342 } 343 344 public void defaultDrawImage(Canvas canvas) { 345 drawImage(canvas, getFilteredImage()); 346 drawPartialImage(canvas, getGeometryOnlyImage()); 347 } 348 349 @Override 350 public void onDraw(Canvas canvas) { 351 drawBackground(canvas); 352 requestFilteredImages(); 353 defaultDrawImage(canvas); 354 355 if (showTitle() && getImagePreset() != null) { 356 mPaint.setARGB(200, 0, 0, 0); 357 mPaint.setTextSize(mTextSize); 358 359 Rect textRect = new Rect(0, 0, getWidth(), mTextSize + mTextPadding); 360 canvas.drawRect(textRect, mPaint); 361 mPaint.setARGB(255, 200, 200, 200); 362 canvas.drawText(getImagePreset().name(), mTextPadding, 363 1.5f * mTextPadding, mPaint); 364 } 365 366 drawToast(canvas); 367 } 368 369 public void resetImageCaches(ImageShow caller) { 370 if (mImageLoader == null) { 371 return; 372 } 373 updateImagePresets(true); 374 } 375 376 public void updateImagePresets(boolean force) { 377 ImagePreset preset = getImagePreset(); 378 if (preset == null) { 379 mActivity.enableSave(false); 380 return; 381 } 382 if (force) { 383 mImageLoader.resetImageForPreset(getImagePreset(), this); 384 } 385 if (force || mImageGeometryOnlyPreset == null) { 386 ImagePreset newPreset = new ImagePreset(preset); 387 newPreset.setDoApplyFilters(false); 388 if (mImageGeometryOnlyPreset == null 389 || !newPreset.same(mImageGeometryOnlyPreset)) { 390 mImageGeometryOnlyPreset = newPreset; 391 mGeometryOnlyImage = null; 392 } 393 } 394 if (force || mImageFiltersOnlyPreset == null) { 395 ImagePreset newPreset = new ImagePreset(preset); 396 newPreset.setDoApplyGeometry(false); 397 if (mImageFiltersOnlyPreset == null 398 || !newPreset.same(mImageFiltersOnlyPreset)) { 399 mImageFiltersOnlyPreset = newPreset; 400 mFiltersOnlyImage = null; 401 } 402 } 403 mActivity.enableSave(hasModifications()); 404 } 405 406 public void requestFilteredImages() { 407 if (mImageLoader != null) { 408 Bitmap bitmap = mImageLoader.getImageForPreset(this, 409 getImagePreset(), showHires()); 410 411 if (bitmap != null) { 412 if (mFilteredImage == null) { 413 invalidate(); 414 } 415 mFilteredImage = bitmap; 416 } 417 418 updateImagePresets(false); 419 if (mImageGeometryOnlyPreset != null) { 420 bitmap = mImageLoader.getImageForPreset(this, mImageGeometryOnlyPreset, 421 showHires()); 422 if (bitmap != null) { 423 mGeometryOnlyImage = bitmap; 424 } 425 } 426 if (mImageFiltersOnlyPreset != null) { 427 bitmap = mImageLoader.getImageForPreset(this, mImageFiltersOnlyPreset, 428 showHires()); 429 if (bitmap != null) { 430 mFiltersOnlyImage = bitmap; 431 } 432 } 433 } 434 435 if (mShowOriginal) { 436 mFilteredImage = mGeometryOnlyImage; 437 } 438 } 439 440 public Bitmap getFiltersOnlyImage() { 441 return mFiltersOnlyImage; 442 } 443 444 public Bitmap getGeometryOnlyImage() { 445 return mGeometryOnlyImage; 446 } 447 448 public Bitmap getFilteredImage() { 449 return mFilteredImage; 450 } 451 452 public void drawImage(Canvas canvas, Bitmap image) { 453 if (image != null) { 454 Rect s = new Rect(0, 0, image.getWidth(), 455 image.getHeight()); 456 457 float scale = GeometryMath.scale(image.getWidth(), image.getHeight(), getWidth(), 458 getHeight()); 459 460 float w = image.getWidth() * scale; 461 float h = image.getHeight() * scale; 462 float ty = (getHeight() - h) / 2.0f; 463 float tx = (getWidth() - w) / 2.0f; 464 465 Rect d = new Rect((int) tx, (int) ty, (int) (w + tx), 466 (int) (h + ty)); 467 mImageBounds = d; 468 canvas.drawBitmap(image, s, d, mPaint); 469 } 470 } 471 472 public void drawPartialImage(Canvas canvas, Bitmap image) { 473 if (!mTouchShowOriginal) 474 return; 475 canvas.save(); 476 if (image != null) { 477 if (mShowOriginalDirection == 0) { 478 if ((mTouchY - mTouchDownY) > (mTouchX - mTouchDownX)) { 479 mShowOriginalDirection = UNVEIL_VERTICAL; 480 } else { 481 mShowOriginalDirection = UNVEIL_HORIZONTAL; 482 } 483 } 484 485 int px = 0; 486 int py = 0; 487 if (mShowOriginalDirection == UNVEIL_VERTICAL) { 488 px = mImageBounds.width(); 489 py = (int) (mTouchY - mImageBounds.top); 490 } else { 491 px = (int) (mTouchX - mImageBounds.left); 492 py = mImageBounds.height(); 493 } 494 495 Rect d = new Rect(mImageBounds.left, mImageBounds.top, 496 mImageBounds.left + px, mImageBounds.top + py); 497 canvas.clipRect(d); 498 drawImage(canvas, image); 499 Paint paint = new Paint(); 500 paint.setColor(Color.BLACK); 501 502 if (mShowOriginalDirection == UNVEIL_VERTICAL) { 503 canvas.drawLine(mImageBounds.left, mTouchY - 1, 504 mImageBounds.right, mTouchY - 1, paint); 505 } else { 506 canvas.drawLine(mTouchX - 1, mImageBounds.top, 507 mTouchX - 1, mImageBounds.bottom, paint); 508 } 509 510 Rect bounds = new Rect(); 511 paint.setTextSize(mOriginalTextSize); 512 paint.getTextBounds(mOriginalText, 0, mOriginalText.length(), bounds); 513 paint.setColor(Color.BLACK); 514 canvas.drawText(mOriginalText, mImageBounds.left + mOriginalTextMargin + 1, 515 mImageBounds.top + bounds.height() + mOriginalTextMargin + 1, paint); 516 paint.setColor(Color.WHITE); 517 canvas.drawText(mOriginalText, mImageBounds.left + mOriginalTextMargin, 518 mImageBounds.top + bounds.height() + mOriginalTextMargin, paint); 519 } 520 canvas.restore(); 521 } 522 523 public void drawBackground(Canvas canvas) { 524 if (USE_BACKGROUND_IMAGE) { 525 if (mBackgroundImage == null) { 526 mBackgroundImage = mImageLoader.getBackgroundBitmap(getResources()); 527 } 528 if (mBackgroundImage != null) { 529 Rect s = new Rect(0, 0, mBackgroundImage.getWidth(), 530 mBackgroundImage.getHeight()); 531 Rect d = new Rect(0, 0, getWidth(), getHeight()); 532 canvas.drawBitmap(mBackgroundImage, s, d, mPaint); 533 } 534 } else { 535 canvas.drawColor(mBackgroundColor); 536 } 537 } 538 539 public ImageShow setShowControls(boolean value) { 540 mShowControls = value; 541 if (mShowControls) { 542 if (mSeekBar != null) { 543 mSeekBar.setVisibility(View.VISIBLE); 544 } 545 } else { 546 if (mSeekBar != null) { 547 mSeekBar.setVisibility(View.INVISIBLE); 548 } 549 } 550 return this; 551 } 552 553 public boolean showControls() { 554 return mShowControls; 555 } 556 557 public boolean showHires() { 558 return true; 559 } 560 561 public boolean showTitle() { 562 return false; 563 } 564 565 public void setImagePreset(ImagePreset preset) { 566 setImagePreset(preset, true); 567 } 568 569 public void setImagePreset(ImagePreset preset, boolean addToHistory) { 570 if (preset == null) { 571 return; 572 } 573 mImagePreset = preset; 574 getImagePreset().setImageLoader(mImageLoader); 575 updateImagePresets(true); 576 if (addToHistory) { 577 mHistoryAdapter.addHistoryItem(getImagePreset()); 578 } 579 getImagePreset().setEndpoint(this); 580 updateImage(); 581 mImagePreset.fillImageStateAdapter(mImageStateAdapter); 582 invalidate(); 583 } 584 585 public void setImageLoader(ImageLoader loader) { 586 mImageLoader = loader; 587 if (mImageLoader != null) { 588 mImageLoader.addListener(this); 589 if (mImagePreset != null) { 590 mImagePreset.setImageLoader(mImageLoader); 591 } 592 } 593 } 594 595 private void setDirtyGeometryFlag() { 596 mDirtyGeometry = true; 597 } 598 599 protected void clearDirtyGeometryFlag() { 600 mDirtyGeometry = false; 601 } 602 603 protected boolean getDirtyGeometryFlag() { 604 return mDirtyGeometry; 605 } 606 607 private void imageSizeChanged(Bitmap image) { 608 if (image == null || getImagePreset() == null) 609 return; 610 float w = image.getWidth(); 611 float h = image.getHeight(); 612 GeometryMetadata geo = getImagePreset().mGeoData; 613 RectF pb = geo.getPhotoBounds(); 614 if (w == pb.width() && h == pb.height()) { 615 return; 616 } 617 RectF r = new RectF(0, 0, w, h); 618 getImagePreset().mGeoData.setPhotoBounds(r); 619 getImagePreset().mGeoData.setCropBounds(r); 620 setDirtyGeometryFlag(); 621 } 622 623 public boolean updateGeometryFlags() { 624 return true; 625 } 626 627 public void updateImage() { 628 invalidate(); 629 if (!updateGeometryFlags()) { 630 return; 631 } 632 Bitmap bitmap = mImageLoader.getOriginalBitmapLarge(); 633 if (bitmap != null) { 634 imageSizeChanged(bitmap); 635 } 636 } 637 638 public void imageLoaded() { 639 updateImage(); 640 invalidate(); 641 } 642 643 public void updateFilteredImage(Bitmap bitmap) { 644 mFilteredImage = bitmap; 645 } 646 647 public void saveImage(FilterShowActivity filterShowActivity, File file) { 648 mImageLoader.saveImage(getImagePreset(), filterShowActivity, file); 649 } 650 651 public void saveToUri(Bitmap f, Uri u, String m, FilterShowActivity filterShowActivity) { 652 mImageLoader.saveToUri(f, u, m, filterShowActivity); 653 } 654 655 public void returnFilteredResult(FilterShowActivity filterShowActivity) { 656 mImageLoader.returnFilteredResult(getImagePreset(), filterShowActivity); 657 } 658 659 @Override 660 public boolean onTouchEvent(MotionEvent event) { 661 super.onTouchEvent(event); 662 if (mGestureDetector != null) { 663 mGestureDetector.onTouchEvent(event); 664 } 665 int ex = (int) event.getX(); 666 int ey = (int) event.getY(); 667 if (event.getAction() == MotionEvent.ACTION_DOWN) { 668 mTouchDownX = ex; 669 mTouchDownY = ey; 670 mTouchShowOriginalDate = System.currentTimeMillis(); 671 mShowOriginalDirection = 0; 672 } 673 if (event.getAction() == MotionEvent.ACTION_MOVE) { 674 mTouchX = ex; 675 mTouchY = ey; 676 if (!mActivity.isShowingHistoryPanel() 677 && (System.currentTimeMillis() - mTouchShowOriginalDate 678 > mTouchShowOriginalDelayMin)) { 679 mTouchShowOriginal = true; 680 } 681 } 682 if (event.getAction() == MotionEvent.ACTION_UP) { 683 mTouchShowOriginal = false; 684 mTouchDownX = 0; 685 mTouchDownY = 0; 686 mTouchX = 0; 687 mTouchY = 0; 688 } 689 invalidate(); 690 return true; 691 } 692 693 // listview stuff 694 695 public HistoryAdapter getHistory() { 696 return mHistoryAdapter; 697 } 698 699 public ArrayAdapter getImageStateAdapter() { 700 return mImageStateAdapter; 701 } 702 703 public void onItemClick(int position) { 704 setImagePreset(new ImagePreset(mHistoryAdapter.getItem(position)), false); 705 // we need a copy from the history 706 mHistoryAdapter.setCurrentPreset(position); 707 } 708 709 public void showOriginal(boolean show) { 710 mShowOriginal = show; 711 invalidate(); 712 } 713 714 public float getImageRotation() { 715 return getImagePreset().mGeoData.getRotation(); 716 } 717 718 public float getImageRotationZoomFactor() { 719 return getImagePreset().mGeoData.getScaleFactor(); 720 } 721 722 public void setImageRotation(float r) { 723 getImagePreset().mGeoData.setRotation(r); 724 } 725 726 public void setImageRotationZoomFactor(float f) { 727 getImagePreset().mGeoData.setScaleFactor(f); 728 } 729 730 public void setImageRotation(float imageRotation, 731 float imageRotationZoomFactor) { 732 float r = getImageRotation(); 733 if (imageRotation != r) { 734 invalidate(); 735 } 736 setImageRotation(imageRotation); 737 setImageRotationZoomFactor(imageRotationZoomFactor); 738 } 739 740 @Override 741 public void onProgressChanged(SeekBar arg0, int progress, boolean arg2) { 742 int parameter = progress; 743 if (getCurrentFilter() != null) { 744 int maxp = getCurrentFilter().getMaxParameter(); 745 int minp = getCurrentFilter().getMinParameter(); 746 parameter = uiToParameter(progress, minp, maxp, arg0.getMax()); 747 } 748 749 onNewValue(parameter); 750 } 751 752 @Override 753 public void onStartTrackingTouch(SeekBar arg0) { 754 // TODO Auto-generated method stub 755 756 } 757 758 @Override 759 public void onStopTrackingTouch(SeekBar arg0) { 760 // TODO Auto-generated method stub 761 762 } 763 764 @Override 765 public boolean onDoubleTap(MotionEvent arg0) { 766 // TODO Auto-generated method stub 767 return false; 768 } 769 770 @Override 771 public boolean onDoubleTapEvent(MotionEvent arg0) { 772 // TODO Auto-generated method stub 773 return false; 774 } 775 776 @Override 777 public boolean onSingleTapConfirmed(MotionEvent arg0) { 778 // TODO Auto-generated method stub 779 return false; 780 } 781 782 @Override 783 public boolean onDown(MotionEvent arg0) { 784 // TODO Auto-generated method stub 785 return false; 786 } 787 788 @Override 789 public boolean onFling(MotionEvent startEvent, MotionEvent endEvent, float arg2, float arg3) { 790 if ((!mActivity.isShowingHistoryPanel() && startEvent.getX() > endEvent.getX()) 791 || (mActivity.isShowingHistoryPanel() && endEvent.getX() > startEvent.getX())) { 792 if (!mTouchShowOriginal 793 || (mTouchShowOriginal && 794 (System.currentTimeMillis() - mTouchShowOriginalDate 795 < mTouchShowOriginalDelayMax))) { 796 mActivity.toggleHistoryPanel(); 797 } 798 } 799 return true; 800 } 801 802 @Override 803 public void onLongPress(MotionEvent arg0) { 804 // TODO Auto-generated method stub 805 806 } 807 808 @Override 809 public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2, float arg3) { 810 // TODO Auto-generated method stub 811 return false; 812 } 813 814 @Override 815 public void onShowPress(MotionEvent arg0) { 816 // TODO Auto-generated method stub 817 818 } 819 820 @Override 821 public boolean onSingleTapUp(MotionEvent arg0) { 822 // TODO Auto-generated method stub 823 return false; 824 } 825 826} 827