@Override
    protected void addGroups(Cursor cursor) {

      int count = cursor.getCount();
      if (count == 0) {
        return;
      }

      int groupItemCount = 1;

      CharArrayBuffer currentValue = mBuffer1;
      CharArrayBuffer value = mBuffer2;
      cursor.moveToFirst();
      cursor.copyStringToBuffer(NUMBER_COLUMN_INDEX, currentValue);
      int currentCallType = cursor.getInt(CALL_TYPE_COLUMN_INDEX);
      for (int i = 1; i < count; i++) {
        cursor.moveToNext();
        cursor.copyStringToBuffer(NUMBER_COLUMN_INDEX, value);
        boolean sameNumber = equalPhoneNumbers(value, currentValue);

        // Group adjacent calls with the same number. Make an exception
        // for the latest item if it was a missed call.  We don't want
        // a missed call to be hidden inside a group.
        if (sameNumber && currentCallType != Calls.MISSED_TYPE) {
          groupItemCount++;
        } else {
          if (groupItemCount > 1) {
            addGroup(i - groupItemCount, groupItemCount, false);
          }

          groupItemCount = 1;

          // Swap buffers
          CharArrayBuffer temp = currentValue;
          currentValue = value;
          value = temp;

          // If we have just examined a row following a missed call, make
          // sure that it is grouped with subsequent calls from the same number
          // even if it was also missed.
          if (sameNumber && currentCallType == Calls.MISSED_TYPE) {
            currentCallType = 0; // "not a missed call"
          } else {
            currentCallType = cursor.getInt(CALL_TYPE_COLUMN_INDEX);
          }
        }
      }
      if (groupItemCount > 1) {
        addGroup(count - groupItemCount, groupItemCount, false);
      }
    }
 /**
  * Returns a String that holds the current value of the column, optimizing for the case where
  * the value hasn't changed.
  */
 private String getString(String old, String column) {
   int index = mCursor.getColumnIndexOrThrow(column);
   if (old == null) {
     return mCursor.getString(index);
   }
   if (mNewChars == null) {
     mNewChars = new CharArrayBuffer(128);
   }
   mCursor.copyStringToBuffer(index, mNewChars);
   int length = mNewChars.sizeCopied;
   if (length != old.length()) {
     return new String(mNewChars.data, 0, length);
   }
   if (mOldChars == null || mOldChars.sizeCopied < length) {
     mOldChars = new CharArrayBuffer(length);
   }
   char[] oldArray = mOldChars.data;
   char[] newArray = mNewChars.data;
   old.getChars(0, length, oldArray, 0);
   for (int i = length - 1; i >= 0; --i) {
     if (oldArray[i] != newArray[i]) {
       return new String(newArray, 0, length);
     }
   }
   return old;
 }
  @Override
  public void setData(Cursor c) {
    final String imageUrl = c.getString(YANAContract.ArticleTable.PROJ_LIST.IMAGE_URL);
    if (!TextUtils.isEmpty(imageUrl)) {
      mImageLoader.displayImage(imageUrl, mImage);
    }

    final CharArrayBuffer titleBuffer = mTitleBuffer;
    c.copyStringToBuffer(YANAContract.ArticleTable.PROJ_LIST.TITLE, titleBuffer);
    mTitle.setText(titleBuffer.data, 0, titleBuffer.sizeCopied);
  }
    @Override
    public void bindView(View view, Context context, Cursor cursor) {
      ViewHolder vh = (ViewHolder) view.getTag();

      cursor.copyStringToBuffer(mTitleIdx, vh.buffer1);
      vh.line1.setText(vh.buffer1.data, 0, vh.buffer1.sizeCopied);

      final int secondUnit = 1000;
      int secs = cursor.getInt(mDurationIdx) / secondUnit;
      if (secs == 0) {
        vh.duration.setText("");
      } else {
        vh.duration.setText(MusicUtils.makeTimeString(context, secs));
      }

      final StringBuilder builder = mBuilder;
      builder.delete(0, builder.length());

      String name = cursor.getString(mAlbumIdx);
      if (name == null || name.equals("<unknown>")) {
        builder.append(mUnknownAlbum);
      } else {
        builder.append(name);
      }
      builder.append('\n');
      name = cursor.getString(mArtistIdx);
      if (name == null || name.equals("<unknown>")) {
        builder.append(mUnknownArtist);
      } else {
        builder.append(name);
      }
      int len = builder.length();
      if (vh.buffer2.length < len) {
        vh.buffer2 = new char[len];
      }
      builder.getChars(0, len, vh.buffer2, 0);
      vh.line2.setText(vh.buffer2, 0, len);

      // Update the checkbox of the item, based on which the user last
      // selected.  Note that doing it this way means we must have the
      // list view update all of its items when the selected item
      // changes.
      final long id = cursor.getLong(mIdIdx);
      vh.radio.setChecked(id == mSelectedId);
      MusicLogUtils.v(
          TAG,
          "Binding id="
              + id
              + " sel="
              + mSelectedId
              + " playing="
              + mPlayingId
              + " cursor="
              + cursor);

      // Likewise, display the "now playing" icon if this item is
      // currently being previewed for the user.
      ImageView iv = vh.play_indicator;
      if (id == mPlayingId) {
        iv.setVisibility(View.VISIBLE);
      } else {
        /// M: if current song is not playing , we don't need the ImageView of play_indicator
        // visible.
        iv.setVisibility(View.GONE);
      }

      /// M:  Show drm lock when necessary @{
      updateDrmLockIcon(vh.drmLock, cursor, id);
    }
    @Override
    public void bindView(View view, Context context, Cursor cursor) {
      ViewHolder vh = (ViewHolder) view.getTag();

      cursor.copyStringToBuffer(mTitleIdx, vh.buffer1);
      vh.line1.setText(vh.buffer1.data, 0, vh.buffer1.sizeCopied);

      int secs = cursor.getInt(mDurationIdx) / 1000;
      if (secs == 0) {
        vh.duration.setText("");
      } else {
        vh.duration.setText(MusicUtils.makeTimeString(context, secs));
      }

      final StringBuilder builder = mBuilder;
      builder.delete(0, builder.length());

      String name = cursor.getString(mAlbumIdx);
      if (name == null || name.equals("<unknown>")) {
        builder.append(mUnknownAlbum);
      } else {
        builder.append(name);
      }
      builder.append('\n');
      name = cursor.getString(mArtistIdx);
      if (name == null || name.equals("<unknown>")) {
        builder.append(mUnknownArtist);
      } else {
        builder.append(name);
      }
      int len = builder.length();
      if (vh.buffer2.length < len) {
        vh.buffer2 = new char[len];
      }
      builder.getChars(0, len, vh.buffer2, 0);
      vh.line2.setText(vh.buffer2, 0, len);

      // Update the checkbox of the item, based on which the user last
      // selected.  Note that doing it this way means we must have the
      // list view update all of its items when the selected item
      // changes.
      final long id = cursor.getLong(mIdIdx);
      vh.radio.setChecked(id == mSelectedId);
      MusicLogUtils.v(
          TAG,
          "Binding id="
              + id
              + " sel="
              + mSelectedId
              + " playing="
              + mPlayingId
              + " cursor="
              + cursor);

      // Likewise, display the "now playing" icon if this item is
      // currently being previewed for the user.
      ImageView iv = vh.play_indicator;
      if (id == mPlayingId) {
        iv.setImageResource(R.drawable.indicator_ic_mp_playing_list);
        iv.setVisibility(View.VISIBLE);
      } else {
        iv.setVisibility(View.GONE);
      }

      // Show drm lock when necessary
      iv = vh.drm_lock;
      if (FeatureOption.MTK_DRM_APP) {
        int isDRM = cursor.getInt(mIsDrmIdx);
        int drmMethod = cursor.getInt(mDrmMethodIdx);
        MusicLogUtils.d(TAG, "bindView(" + view + "): isDRM=" + isDRM + ", drmMethod=" + drmMethod);
        try {
          if (isDRM == 1 && drmMethod != DrmStore.DrmMethod.METHOD_FL) {
            if (mDrmClient.checkRightsStatus(
                    ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id),
                    DrmStore.Action.PLAY)
                == DrmStore.RightsStatus.RIGHTS_VALID) {
              iv.setImageResource(com.mediatek.internal.R.drawable.drm_green_lock);
            } else {
              iv.setImageResource(com.mediatek.internal.R.drawable.drm_red_lock);
            }
            iv.setVisibility(View.VISIBLE);
          } else {
            iv.setVisibility(View.GONE);
          }
        } catch (Exception ex) {
          MusicLogUtils.e(TAG, "bindView: ", ex);
          iv.setVisibility(View.GONE);
        }
      } else {
        iv.setVisibility(View.GONE);
      }
    }
Exemple #6
0
 public void bindViewToMediaListItem(View paramView, Context paramContext, Cursor paramCursor, long paramLong)
 {
   ViewHolder localViewHolder = (ViewHolder)paramView.getTag();
   Document localDocument = localViewHolder.document;
   TrackListAdapter localTrackListAdapter = this;
   Cursor localCursor1 = paramCursor;
   localTrackListAdapter.populateDocumentFromCursor(localDocument, localCursor1);
   int i = this.mTitleIdx;
   CharArrayBuffer localCharArrayBuffer1 = localViewHolder.titleBuffer;
   Cursor localCursor2 = paramCursor;
   CharArrayBuffer localCharArrayBuffer2 = localCharArrayBuffer1;
   localCursor2.copyStringToBuffer(i, localCharArrayBuffer2);
   StatefulShadowTextView localStatefulShadowTextView1 = localViewHolder.title;
   char[] arrayOfChar = localViewHolder.titleBuffer.data;
   int j = localViewHolder.titleBuffer.sizeCopied;
   localStatefulShadowTextView1.setText(arrayOfChar, 0, j);
   boolean bool1 = this.mSongList instanceof SharedSongList;
   boolean bool2;
   label183: int n;
   label226: label248: boolean bool3;
   label277: boolean bool4;
   if (localViewHolder.contextMenu != null)
   {
     if (bool1)
       localViewHolder.contextMenu.setVisibility(4);
   }
   else
   {
     bool2 = isShowingNowPlaying();
     if (localViewHolder.play_indicator != null)
     {
       bool2 = false;
       if (canShowPlaybackIndicator())
       {
         if (!bool2)
           break label787;
         int k = paramCursor.getPosition();
         int m = this.mCurrentPlayPosition;
         if (k == m)
           break label781;
         bool2 = true;
         if ((!bool2) && (((this.mSongList instanceof PlaylistSongList)) || ((this.mSongList instanceof SelectedSongList))))
           bool2 = false;
       }
       PlayingIndicator localPlayingIndicator = localViewHolder.play_indicator;
       if (!bool2)
         break label839;
       n = 0;
       localPlayingIndicator.setVisibility(n);
       if (!bool2)
         break label846;
       localViewHolder.title.setTypeface(null, 1);
     }
     if (!UIStateManager.getInstance().isStreamingEnabled())
     {
       int i1 = this.mIsLocalIdx;
       if (paramCursor.getInt(i1) == 0)
         break label859;
     }
     bool3 = true;
     localViewHolder.isAvailable = bool3;
     int i2 = this.mHasRemoteIdx;
     if (paramCursor.getInt(i2) == 0)
       break label865;
     bool4 = true;
     label304: localViewHolder.hasRemote = bool4;
     StatefulShadowTextView localStatefulShadowTextView2 = localViewHolder.title;
     boolean bool5 = true;
     localStatefulShadowTextView2.setPrimaryAndOnline(bool5, bool3);
     if (localViewHolder.duration != null)
     {
       StatefulShadowTextView localStatefulShadowTextView3 = localViewHolder.duration;
       boolean bool6 = true;
       localStatefulShadowTextView3.setPrimaryAndOnline(bool6, bool3);
     }
     if (localViewHolder.artist != null)
     {
       StatefulShadowTextView localStatefulShadowTextView4 = localViewHolder.artist;
       boolean bool7 = false;
       localStatefulShadowTextView4.setPrimaryAndOnline(bool7, bool3);
     }
     if (localViewHolder.album != null)
     {
       StatefulShadowTextView localStatefulShadowTextView5 = localViewHolder.album;
       boolean bool8 = true;
       localStatefulShadowTextView5.setPrimaryAndOnline(bool8, bool3);
     }
     if (localViewHolder.year != null)
     {
       StatefulShadowTextView localStatefulShadowTextView6 = localViewHolder.year;
       boolean bool9 = true;
       localStatefulShadowTextView6.setPrimaryAndOnline(bool9, bool3);
     }
     if ((localViewHolder.year != null) && (this.mYearIdx >= 0))
     {
       int i3 = this.mYearIdx;
       int i4 = paramCursor.getInt(i3);
       if (i4 <= 0)
         break label871;
       StatefulShadowTextView localStatefulShadowTextView7 = localViewHolder.year;
       String str1 = Integer.toString(i4);
       localStatefulShadowTextView7.setText(str1);
       localViewHolder.year.setVisibility(0);
     }
     label504: if (localViewHolder.album != null)
     {
       StatefulShadowTextView localStatefulShadowTextView8 = localViewHolder.album;
       String str2 = localViewHolder.document.getAlbumName();
       localStatefulShadowTextView8.setText(str2);
     }
     if (localViewHolder.artist != null)
     {
       if (!this.mShowTrackArtist)
         break label883;
       StatefulShadowTextView localStatefulShadowTextView9 = localViewHolder.artist;
       String str3 = localViewHolder.document.getArtistName();
       localStatefulShadowTextView9.setText(str3);
       localViewHolder.artist.setVisibility(0);
     }
     label584: if (localViewHolder.duration != null)
     {
       int i5 = this.mDurationIdx;
       int i6 = paramCursor.getInt(i5) / 1000;
       StatefulShadowTextView localStatefulShadowTextView10 = localViewHolder.duration;
       Context localContext = getContext();
       long l1 = i6;
       String str4 = MusicUtils.makeTimeString(localContext, l1);
       localStatefulShadowTextView10.setText(str4);
     }
     if (localViewHolder.icon != null)
     {
       if ((this.mShowAlbumArt) && (!bool1))
         break label896;
       localViewHolder.icon.setVisibility(8);
     }
     label676: if (bool2)
     {
       if (!isInInfiniteMixMode())
         break label985;
       int i7 = paramCursor.getCount();
       int i8 = paramCursor.getPosition();
       ViewUtils.fadeViewForPosition(paramView, i7, i8, 4);
     }
   }
   while (true)
   {
     if (!this.mEditMode)
       break label995;
     int i9 = paramView.getPaddingLeft();
     int i10 = paramView.getPaddingTop();
     int i11 = paramView.getPaddingRight();
     int i12 = paramView.getPaddingBottom();
     Drawable localDrawable = this.mDragHandleBG;
     paramView.setBackgroundDrawable(localDrawable);
     paramView.setPadding(i9, i10, i11, i12);
     return;
     localViewHolder.contextMenu.setVisibility(0);
     break;
     label781: bool2 = false;
     break label183;
     label787: if (this.mCurrentAudioId == null)
       break label183;
     int i13 = this.mAudioIdIdx;
     long l2 = paramCursor.getLong(i13);
     long l3 = this.mCurrentAudioId.getId();
     if (l2 == l3);
     for (bool2 = true; ; bool2 = false)
       break;
     label839: n = 8;
     break label226;
     label846: localViewHolder.title.setTypeface(null, 0);
     break label248;
     label859: bool3 = false;
     break label277;
     label865: bool4 = false;
     break label304;
     label871: localViewHolder.year.setVisibility(4);
     break label504;
     label883: localViewHolder.artist.setVisibility(8);
     break label584;
     label896: localViewHolder.icon.setVisibility(0);
     localViewHolder.icon.setAvailable(bool3);
     if (!TextUtils.isEmpty(localViewHolder.document.getArtUrl()))
     {
       AsyncAlbumArtImageView localAsyncAlbumArtImageView1 = localViewHolder.icon;
       String str5 = localViewHolder.document.getArtUrl();
       localAsyncAlbumArtImageView1.setExternalAlbumArt(str5);
       break label676;
     }
     AsyncAlbumArtImageView localAsyncAlbumArtImageView2 = localViewHolder.icon;
     long l4 = localViewHolder.document.getAlbumId();
     localAsyncAlbumArtImageView2.setAlbumId(l4, null, null);
     break label676;
     label985: ViewUtils.setAlpha(paramView, 1.0F);
   }
   label995: paramView.setBackgroundDrawable(null);
 }
 public void copyStringToBuffer(int columnIndex, CharArrayBuffer buffer) {
   mDatabaseCursor.copyStringToBuffer(columnIndex, buffer);
 }