Beispiel #1
0
 public void startAnimation(View focused) {
   if (mAnimatorSet == null || focused == null) {
     return;
   }
   mAnimatorSet.end();
   focused.getGlobalVisibleRect(rect);
   mXAnimator.setFloatValues(rect.left + mLeftOffset);
   mYAnimator.setFloatValues(rect.top + mTopOffset);
   mWAnimator.setIntValues(rect.width());
   mHAnimator.setIntValues(rect.height());
   mAnimatorSet.start();
 }
  public ValueAnimator createValueAnimator(
      int startValue,
      int endValue,
      long duration,
      int repeatCount,
      ValueAnimator.AnimatorUpdateListener updateListener,
      Animator.AnimatorListener listener) {

    ValueAnimator valueAnimator = new ValueAnimator();
    valueAnimator.setIntValues(startValue, endValue);
    valueAnimator.setDuration(duration);
    valueAnimator.setRepeatCount(repeatCount);
    if (updateListener != null) {
      valueAnimator.addUpdateListener(updateListener);
    }
    if (listener != null) {
      valueAnimator.addListener(listener);
    }
    valueAnimator.start();
    return valueAnimator;
  }
Beispiel #3
0
  @Override
  public void onFinishInflate() {
    super.onFinishInflate();

    // Get references to the views
    mReplyText = (QKEditText) findViewById(R.id.compose_reply_text);
    mButton = (FrameLayout) findViewById(R.id.compose_button);
    mProgress = (DonutProgress) findViewById(R.id.progress);
    mButtonBackground = (ImageView) findViewById(R.id.compose_button_background);
    mButtonBar1 = (ImageView) findViewById(R.id.compose_button_bar_1);
    mButtonBar2 = (ImageView) findViewById(R.id.compose_button_bar_2);
    mAttachmentPanel = findViewById(R.id.attachment_panel);
    mAttach = (ImageButton) findViewById(R.id.attach);
    mCamera = (ImageButton) findViewById(R.id.camera);
    mDelay = (ImageButton) findViewById(R.id.delay);
    mLetterCount = (QKTextView) findViewById(R.id.compose_letter_count);
    mAttachmentLayout = (FrameLayout) findViewById(R.id.attachment);
    mAttachment = (AttachmentImageView) findViewById(R.id.compose_attachment);
    mCancel = (ImageButton) findViewById(R.id.cancel);

    mButton.setOnClickListener(this);
    mAttach.setOnClickListener(this);
    mCamera.setOnClickListener(this);
    mCancel.setOnClickListener(this);
    mDelay.setOnClickListener(this);

    LiveViewManager.registerView(
        QKPreference.THEME,
        this,
        key -> {
          mButtonBackground.setColorFilter(ThemeManager.getColor(), PorterDuff.Mode.SRC_ATOP);
          mButtonBar1.setColorFilter(
              ThemeManager.getTextOnColorPrimary(), PorterDuff.Mode.SRC_ATOP);
          mButtonBar2.setColorFilter(
              ThemeManager.getTextOnColorPrimary(), PorterDuff.Mode.SRC_ATOP);
          mAttachmentPanel.setBackgroundColor(ThemeManager.getColor());
          mAttach.setColorFilter(ThemeManager.getTextOnColorPrimary(), PorterDuff.Mode.SRC_ATOP);
          mCamera.setColorFilter(ThemeManager.getTextOnColorPrimary(), PorterDuff.Mode.SRC_ATOP);
          updateDelayButton();
          mProgress.setUnfinishedStrokeColor(ThemeManager.getTextOnColorSecondary());
          mProgress.setFinishedStrokeColor(ThemeManager.getTextOnColorPrimary());
          if (ThemeManager.getSentBubbleRes() != 0)
            mReplyText.setBackgroundResource(ThemeManager.getSentBubbleRes());
        });

    LiveViewManager.registerView(
        QKPreference.BACKGROUND,
        this,
        key -> {
          mReplyText
              .getBackground()
              .setColorFilter(ThemeManager.getNeutralBubbleColor(), PorterDuff.Mode.SRC_ATOP);
          getBackground()
              .setColorFilter(ThemeManager.getBackgroundColor(), PorterDuff.Mode.SRC_ATOP);
        });

    // There is an option for using the return button instead of the emoticon button in the
    // keyboard; set that up here.
    switch (Integer.parseInt(mPrefs.getString(SettingsFragment.ENTER_BUTTON, "0"))) {
      case 0: // emoji
        break;
      case 1: // new line
        mReplyText.setInputType(
            InputType.TYPE_CLASS_TEXT
                | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES
                | InputType.TYPE_TEXT_VARIATION_LONG_MESSAGE);
        mReplyText.setSingleLine(false);
        break;
      case 2: // send
        mReplyText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
        mReplyText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);
        mReplyText.setSingleLine(false);
        mReplyText.setOnKeyListener(
            new OnKeyListener() { // Workaround because ACTION_SEND does not support multiline mode
              @Override
              public boolean onKey(View v, int keyCode, KeyEvent event) {
                if (keyCode == 66) {
                  sendSms();
                  return true;
                }
                return false;
              }
            });
        break;
    }

    mReplyText.setTextChangedListener(
        new QKEditText.TextChangedListener() {
          @Override
          public void onTextChanged(CharSequence s) {
            int length = s.length();

            updateButtonState(length);

            // If the reply is within 10 characters of the SMS limit (160), it will start counting
            // down
            // If the reply exceeds the SMS limit, it will count down until an extra message will
            // have to be sent, and shows how many messages will currently be sent
            if (length < 150) {
              mLetterCount.setText("");
            } else if (150 <= length && length <= 160) {
              mLetterCount.setText("" + (160 - length));
            } else if (160 < length) {
              mLetterCount.setText((160 - length % 160) + "/" + (length / 160 + 1));
            }
          }
        });

    mProgressAnimator = new ValueAnimator();
    mProgressAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
    mProgressAnimator.setDuration(mDelayDuration);
    mProgressAnimator.setIntValues(0, 360);
    mProgressAnimator.addUpdateListener(
        new ValueAnimator.AnimatorUpdateListener() {
          @Override
          public void onAnimationUpdate(ValueAnimator animation) {
            mProgress.setProgress((int) animation.getAnimatedValue());
          }
        });
    mProgressAnimator.addListener(
        new AnimatorListenerAdapter() {
          @Override
          public void onAnimationEnd(Animator animation) {
            super.onAnimationEnd(animation);
            mProgress.setVisibility(INVISIBLE);
            mProgress.setProgress(0);

            if (!mSendingCancelled) {
              sendSms();
              // In case they only enabled it for a particular message, let's set it back to the
              // pref value
              mDelayedMessagingEnabled = mPrefs.getBoolean(SettingsFragment.DELAYED, false);
              updateDelayButton();
            } else {
              mSendingCancelled = false;
              updateButtonState();
            }
          }
        });
  }