示例#1
0
  @Override
  protected void onFinishInflate() {
    super.onFinishInflate();

    mFavoritesBackground = (LinearLayout) findViewById(R.id.starred_contacts);
    mFavoritesBackground.setBackgroundColor(ThemeManager.getBackgroundColor());

    mTitle = (QKTextView) findViewById(R.id.title);

    mFavorites = (LinearLayout) findViewById(R.id.favorites);

    mToggle = findViewById(R.id.toggle);
    mToggle.setOnClickListener(this);

    mIndicator = (ImageView) findViewById(R.id.indicator);

    if (mPrefs.getBoolean(SettingsFragment.COMPOSE_FAVORITES, true)) {
      expand();
    } else {
      collapse();
    }

    LiveViewManager.registerView(this);
    LiveViewManager.registerPreference(this, SettingsFragment.BACKGROUND);
    refresh();
  }
示例#2
0
  /** Update the widget appWidgetId */
  private static void updateWidget(Context context, int appWidgetId) {
    Log.v(TAG, "updateWidget appWidgetId: " + appWidgetId);
    RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
    PendingIntent clickIntent;

    // Launch an intent to avoid ANRs
    final Intent intent = new Intent(context, WidgetService.class);
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
    intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
    remoteViews.setRemoteAdapter(appWidgetId, R.id.conversation_list, intent);

    remoteViews.setTextViewText(
        R.id.widget_label, context.getString(R.string.title_conversation_list));
    remoteViews.setTextColor(R.id.widget_label, ThemeManager.getTextOnColorPrimary());

    remoteViews.setInt(
        R.id.conversation_list_background, "setColorFilter", ThemeManager.getBackgroundColor());
    remoteViews.setInt(R.id.header_background, "setColorFilter", ThemeManager.getColor());

    // Open Mms's app conversation list when click on header
    final Intent convIntent = new Intent(context, MainActivity.class);
    clickIntent =
        PendingIntent.getActivity(context, 0, convIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    remoteViews.setOnClickPendingIntent(R.id.widget_header, clickIntent);

    // On click intent for Compose
    final Intent composeIntent = new Intent(context, QKComposeActivity.class);
    clickIntent =
        PendingIntent.getActivity(context, 0, composeIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    remoteViews.setOnClickPendingIntent(R.id.widget_compose, clickIntent);

    // On click intent for Conversation
    Intent startActivityIntent = new Intent(context, MainActivity.class);
    PendingIntent startActivityPendingIntent =
        PendingIntent.getActivity(
            context, 0, startActivityIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    remoteViews.setPendingIntentTemplate(R.id.conversation_list, startActivityPendingIntent);

    AppWidgetManager.getInstance(context).updateAppWidget(appWidgetId, remoteViews);
  }
示例#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();
            }
          }
        });
  }