android.util.SparseArray#keyAt ( )源码实例Demo

下面列出了android.util.SparseArray#keyAt ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: CVScanner   文件: DocumentProcessor.java
@Override
public int selectFocus(Detector.Detections<Document> detections) {
    SparseArray<Document> detectedItems;
    if((detectedItems = detections.getDetectedItems()).size() == 0) {
        throw new IllegalArgumentException("No documents for selectFocus.");
    } else {
        int itemKey = detectedItems.keyAt(0);
        int itemArea = detectedItems.valueAt(0).getMaxArea();

        for(int index = 1; index < detectedItems.size(); ++index) {
            int itemKey2 = detectedItems.keyAt(index);
            int itemArea2;
            if((itemArea2 = detectedItems.valueAt(index).getMaxArea()) > itemArea) {
                itemKey = itemKey2;
                itemArea = itemArea2;
            }
        }

        return itemKey;
    }
}
 
源代码2 项目: dttv-android   文件: MediaPlayer.java
private TrackInfo[] getInbandTrackInfo(String encoding) {
    if (mInbandTracks == null) {
        SparseArray<byte[]> trackSparse = new SparseArray<byte[]>();
        if (!native_getTrackInfo(trackSparse)) {
            return null;
        }

        int size = trackSparse.size();
        mInbandTracks = new TrackInfo[size];
        for (int i = 0; i < size; i++) {
            SparseArray<app.dttv.dttvlib.MediaFormat> sparseArray = parseTrackInfo(trackSparse.valueAt(i), encoding);
            TrackInfo trackInfo = new TrackInfo(trackSparse.keyAt(i), sparseArray);
            mInbandTracks[i] = trackInfo;
        }
    }
    return mInbandTracks;
}
 
源代码3 项目: android_9.0.0_r45   文件: AlarmManagerService.java
@VisibleForTesting
static void findAllUnrestrictedPendingBackgroundAlarmsLockedInner(
        SparseArray<ArrayList<Alarm>> pendingAlarms, ArrayList<Alarm> unrestrictedAlarms,
        Predicate<Alarm> isBackgroundRestricted) {

    for (int uidIndex = pendingAlarms.size() - 1; uidIndex >= 0; uidIndex--) {
        final int uid = pendingAlarms.keyAt(uidIndex);
        final ArrayList<Alarm> alarmsForUid = pendingAlarms.valueAt(uidIndex);

        for (int alarmIndex = alarmsForUid.size() - 1; alarmIndex >= 0; alarmIndex--) {
            final Alarm alarm = alarmsForUid.get(alarmIndex);

            if (isBackgroundRestricted.test(alarm)) {
                continue;
            }

            unrestrictedAlarms.add(alarm);
            alarmsForUid.remove(alarmIndex);
        }

        if (alarmsForUid.size() == 0) {
            pendingAlarms.removeAt(uidIndex);
        }
    }
}
 
源代码4 项目: TabStacker   文件: ViewData.java
static Bundle saveViewHierarchy(@NonNull View view) {

        Bundle bundle = new Bundle();
        SparseArray<Parcelable> savedViewHierarchy = new SparseArray<>();

        view.saveHierarchyState(savedViewHierarchy);

        int count = savedViewHierarchy.size();
        for(int i=0; i<count; ++i) {
            int key = savedViewHierarchy.keyAt(i);
            Parcelable parcelable = savedViewHierarchy.get(key);
            String bundleKey = "" + key;
            bundle.putParcelable(bundleKey, parcelable);
        }

        return bundle;
    }
 
源代码5 项目: SprintNBA   文件: RecycleBin.java
static View retrieveFromScrap(SparseArray<View> scrapViews, int position) {
	int size = scrapViews.size();
	if (size > 0) {
		// See if we still have a view for this position.
		for (int i = 0; i < size; i++) {
			int fromPosition = scrapViews.keyAt(i);
			View view = scrapViews.get(fromPosition);
			if (fromPosition == position) {
				scrapViews.remove(fromPosition);
				return view;
			}
		}
		int index = size - 1;
		View r = scrapViews.valueAt(index);
		scrapViews.remove(scrapViews.keyAt(index));
		return r;
	} else {
		return null;
	}
}
 
源代码6 项目: MTweaks-KernelAdiutorMOD   文件: CPUFragment.java
private void refreshCores(SparseArray<SwitchView> array, int[] freqs) {
    for (int i = 0; i < array.size(); i++) {
        SwitchView switchView = array.valueAt(i);
        if (switchView != null) {
            final int core = array.keyAt(i);
            int freq = freqs[core];

            String freqText = freq == 0 ? getString(R.string.offline) : (freq / 1000)
                    + getString(R.string.mhz);
            switchView.clearOnSwitchListener();
            switchView.setChecked(freq != 0);
            switchView.setSummary(getString(R.string.core, core + 1) + " - " + freqText);
            switchView.addOnSwitchListener((switchView1, isChecked) -> {
                if (core == 0) {
                    Utils.toast(R.string.no_offline_core, getActivity());
                } else {
                    mCPUFreq.onlineCpu(core, isChecked, true, getActivity());
                }
            });
        }
    }
}
 
源代码7 项目: Vitamio   文件: MediaPlayer.java
private TrackInfo[] getInbandTrackInfo(String encoding) {
	if (mInbandTracks == null) {
		SparseArray<byte[]> trackSparse = new SparseArray<byte[]>();
    if (!native_getTrackInfo(trackSparse)) {
      return null;
    }

    int size = trackSparse.size();
    mInbandTracks = new TrackInfo[size];
    for (int i = 0; i < size; i++) {
    	SparseArray<MediaFormat> sparseArray = parseTrackInfo(trackSparse.valueAt(i), encoding);
      TrackInfo trackInfo = new TrackInfo(trackSparse.keyAt(i), sparseArray);
      mInbandTracks[i] = trackInfo;
    }
	}
  return mInbandTracks;
}
 
源代码8 项目: ckChangeLog   文件: ChangeLog.java
/**
 * Returns the merged change log.
 *
 * @param full
 *         If this is {@code true} the full change log is returned. Otherwise only changes for
 *         versions newer than the last version are returned.
 *
 * @return A sorted {@code List} containing {@link ReleaseItem}s representing the (partial)
 *         change log.
 *
 * @see #getChangeLogComparator()
 */
public List<ReleaseItem> getChangeLog(boolean full) {
    SparseArray<ReleaseItem> masterChangelog = getMasterChangeLog(full);
    SparseArray<ReleaseItem> changelog = getLocalizedChangeLog(full);

    List<ReleaseItem> mergedChangeLog =
            new ArrayList<ReleaseItem>(masterChangelog.size());

    for (int i = 0, len = masterChangelog.size(); i < len; i++) {
        int key = masterChangelog.keyAt(i);

        // Use release information from localized change log and fall back to the master file
        // if necessary.
        ReleaseItem release = changelog.get(key, masterChangelog.get(key));

        mergedChangeLog.add(release);
    }

    Collections.sort(mergedChangeLog, getChangeLogComparator());

    return mergedChangeLog;
}
 
源代码9 项目: NetCloud_android   文件: MainWindow.java
private void initData(){
    SparseArray<List<ConnInfo>> uid2Conns = TrafficMgr.getInstance().getConnsCategoryByUid();

    if(uid2Conns != null){
        for(int i=0;i<uid2Conns.size();i++){
            int uid = uid2Conns.keyAt(i);
            List<ConnInfo> conns = uid2Conns.get(uid);
            AppConnInfo appConn = new AppConnInfo();
            appConn.uid = uid;
            appConn.connNum = TrafficMgr.getInstance().getConnNum(uid);

            if(conns != null && !conns.isEmpty()){
                for(ConnInfo conn:conns){
                    appConn.accept += conn.accept;
                    appConn.back += conn.back;
                    appConn.sent += conn.sent;
                    appConn.recv += conn.recv;

                    if(conn.alive){
                        ++appConn.alive;
                    }
                }
            }

            mUID2AppInfo.put(uid, appConn);
            getData().add(uid);
        }
    }
}
 
源代码10 项目: ChatKit   文件: MessageHolders.java
@SuppressWarnings("unchecked")
protected void bind(final ViewHolder holder, final Object item, boolean isSelected,
                    final ImageLoader imageLoader,
                    final View.OnClickListener onMessageClickListener,
                    final View.OnLongClickListener onMessageLongClickListener,
                    final DateFormatter.Formatter dateHeadersFormatter,
                    final SparseArray<MessagesListAdapter.OnMessageViewClickListener> clickListenersArray) {

    if (item instanceof IMessage) {
        ((MessageHolders.BaseMessageViewHolder) holder).isSelected = isSelected;
        ((MessageHolders.BaseMessageViewHolder) holder).imageLoader = imageLoader;
        holder.itemView.setOnLongClickListener(onMessageLongClickListener);
        holder.itemView.setOnClickListener(onMessageClickListener);

        for (int i = 0; i < clickListenersArray.size(); i++) {
            final int key = clickListenersArray.keyAt(i);
            final View view = holder.itemView.findViewById(key);
            if (view != null) {
                view.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        clickListenersArray.get(key).onMessageViewClick(view, (IMessage) item);
                    }
                });
            }
        }
    } else if (item instanceof Date) {
        ((MessageHolders.DefaultDateHeaderViewHolder) holder).dateHeadersFormatter = dateHeadersFormatter;
    }

    holder.onBind(item);
}
 
源代码11 项目: K-Sonic   文件: CachedContentIndex.java
/**
 * Returns an id which isn't used in the given array. If the maximum id in the array is smaller
 * than {@link java.lang.Integer#MAX_VALUE} it just returns the next bigger integer. Otherwise it
 * returns the smallest unused non-negative integer.
 */
//@VisibleForTesting
public static int getNewId(SparseArray<String> idToKey) {
  int size = idToKey.size();
  int id = size == 0 ? 0 : (idToKey.keyAt(size - 1) + 1);
  if (id < 0) { // In case if we pass max int value.
    // TODO optimization: defragmentation or binary search?
    for (id = 0; id < size; id++) {
      if (id != idToKey.keyAt(id)) {
        break;
      }
    }
  }
  return id;
}
 
源代码12 项目: BlueSTSDK_Android   文件: Node.java
public boolean isExportingFeature(Class<? extends Feature> featureClass) {
    SparseArray<Class<? extends Feature>> decoder = Manager.getNodeFeatures(
            getTypeId());
    long advertiseBitMask = getAdvertiseBitMask();
    for (int i = 0 ; i< decoder.size(); i++){
        if(featureClass == decoder.valueAt(i)){
            long mask = decoder.keyAt(i);
            if((advertiseBitMask & mask) != 0)
                return true;
        }
    }
    return false;
}
 
@Override
public String toString() {
	final ReentrantLock lock = this.mLock;
	lock.lock();

	try {
		final StringBuilder stringBuilder = new StringBuilder();

		if (this.mQueues.size() > 0) {
			final SparseArray<IList<T>> queues = this.mQueues;
			final SparseIntArray queueCapacities = this.mQueueCapacities;

			stringBuilder.append(" [\n");

			final int queueCount = queues.size();
			for (int i = 0; i < queueCount; i++) {
				final int priority = queues.keyAt(i);
				final IList<T> queue = queues.valueAt(i);
				final int queueCapacity = queueCapacities.valueAt(i);
				final int queueSize = queue.size();

				stringBuilder.append("\tPriority: ").append(priority).append(" (Capacity: ").append(queueSize).append('/').append(queueCapacity).append("): ");
				stringBuilder.append(queue.toString());

				if (i < (queueCount - 1)) {
					stringBuilder.append(',');
				}
				stringBuilder.append('\n');
			}

			stringBuilder.append(']');
		}

		return stringBuilder.toString();
	} finally {
		lock.unlock();
	}
}
 
/**
 * We only accept the barcode inside the scanner square. Note that the return dimensions for the
 * barcodes is based on the camera's coordinates, so we must convert it to the canvas' coordinate
 * for comparing with the scanner square.
 */
@Override
public int selectFocus(Detections<Barcode> detections) {
  SparseArray<Barcode> barcodes = detections.getDetectedItems();
  for (int i = 0; i < barcodes.size(); ++i) {
    int id = barcodes.keyAt(i);
    if (!mCentralFilterEnabled
        || BarcodeCentralFilter.barcodeIsInsideScannerSquare(barcodes.valueAt(i))) {
      return id;
    }
  }
  return -1;
}
 
源代码15 项目: Dream-Catcher   文件: ObjectIdMapper.java
public void clear() {
  SparseArray<Object> idToObjectMap;
  synchronized (mSync) {
    idToObjectMap = mIdToObjectMap;
    mObjectToIdMap.clear();
    mIdToObjectMap = new SparseArray<Object>();
  }

  int size = idToObjectMap.size();
  for (int i = 0; i < size; ++i) {
    int id = idToObjectMap.keyAt(i);
    Object object = idToObjectMap.valueAt(i);
    onUnmapped(object, id);
  }
}
 
源代码16 项目: ankihelper   文件: AnkiDroidHelper.java
/**
 * Remove the duplicates from a list of note fields and tags
 *
 * @param fields  List of fields to remove duplicates from
 * @param tags    List of tags to remove duplicates from
 * @param modelId ID of model to search for duplicates on
 */
public void removeDuplicates(LinkedList<String[]> fields, LinkedList<Set<String>> tags, long modelId) {
    // Build a list of the duplicate keys (first fields) and find all notes that have a match with each key
    List<String> keys = new ArrayList<>(fields.size());
    for (String[] f : fields) {
        keys.add(f[0]);
    }
    SparseArray<List<NoteInfo>> duplicateNotes = getApi().findDuplicateNotes(modelId, keys);
    // Do some sanity checks
    if (tags.size() != fields.size()) {
        throw new IllegalStateException("List of tags must be the same length as the list of fields");
    }
    if (duplicateNotes.size() == 0 || fields.size() == 0 || tags.size() == 0) {
        return;
    }
    if (duplicateNotes.keyAt(duplicateNotes.size() - 1) >= fields.size()) {
        throw new IllegalStateException("The array of duplicates goes outside the bounds of the original lists");
    }
    // Iterate through the fields and tags LinkedLists, removing those that had a duplicate
    ListIterator<String[]> fieldIterator = fields.listIterator();
    ListIterator<Set<String>> tagIterator = tags.listIterator();
    int listIndex = -1;
    for (int i = 0; i < duplicateNotes.size(); i++) {
        int duplicateIndex = duplicateNotes.keyAt(i);
        while (listIndex < duplicateIndex) {
            fieldIterator.next();
            tagIterator.next();
            listIndex++;
        }
        fieldIterator.remove();
        tagIterator.remove();
    }
}
 
源代码17 项目: Onesearch   文件: ResultsActivity.java
private void updateAchievements() {
    int score = Math.max(mPreviousBestScore, mScore);
    SparseArray<String> achievementsMap = null;
    switch (mGameMode.getDifficulty()) {
        case GameDifficulty.Easy:
            achievementsMap = GameAchievement.EASYACHIEVEMENTSMAP;
            break;
        case GameDifficulty.Medium:
            achievementsMap = GameAchievement.MEDIUMACHIEVEMENTSMAP;
            break;
        case GameDifficulty.Hard:
            achievementsMap = GameAchievement.HARDACHIEVEMENTSMAP;
            break;
        case GameDifficulty.Advanced:
            achievementsMap = GameAchievement.ADVANCEDACHIEVEMENTSMAP;
            break;
    }
    if (achievementsMap == null) return;
    // Remember the highest score associated with achievement unlocked, so we don't unlock it multiple times
    SharedPreferences prefs = getSharedPreferences(PREF_NAME, MODE_PRIVATE);
    int highestScore = prefs.getInt(HIGHEST_SCORE_FOR_ACHIEVEMENT_PREFIX + mGameMode.getDifficulty(), 0);

    for (int i = 0; i < achievementsMap.size(); i++) {
        int key = achievementsMap.keyAt(i);
        if (key > score) break;
        if (key <= highestScore) continue;
        if (mGoogleApiClient != null && mGoogleApiClient.isConnected())
            Games.Achievements.unlock(mGoogleApiClient, achievementsMap.get(key, ""));
    }

    if (score > highestScore) {
        SharedPreferences.Editor editor = getSharedPreferences(PREF_NAME, MODE_PRIVATE).edit();
        editor.putInt(HIGHEST_SCORE_FOR_ACHIEVEMENT_PREFIX + mGameMode.getDifficulty(), score);
        editor.apply();
    }
}
 
源代码18 项目: YouTube-In-Background   文件: YouTubeExtractor.java
private void decipherViaWebView(final SparseArray<String> encSignatures)
{
    final Context context = weakContext.get();
    if (context == null) {
        return;
    }

    final StringBuilder stb = new StringBuilder(decipherFunctions + " function decipher(");
    stb.append("){return ");

    for (int i = 0; i < encSignatures.size(); i++) {
        int key = encSignatures.keyAt(i);
        if (i < encSignatures.size() - 1) {
            stb.append(decipherFunctionName)
                    .append("('")
                    .append(encSignatures.get(key))
                    .append("')+\"\\n\"+");
        } else {
            stb.append(decipherFunctionName)
                    .append("('")
                    .append(encSignatures.get(key))
                    .append("')");
        }
    }
    stb.append("};decipher();");


    if (LOGGING) Log.e(LOG_TAG, "FunctionDecipher: " + stb);

    new Handler(Looper.getMainLooper()).post(() -> new JsEvaluator(context).evaluate(stb.toString(), new JsCallback()
    {
        @Override
        public void onResult(String result)
        {
            lock.lock();
            try {
                decipheredSignature = result;

                if (LOGGING) Log.e(LOG_TAG, "JsEvaluator-result: " + result);
                jsExecuting.signal();
            } finally {
                lock.unlock();
            }
        }

        @Override
        public void onError(String errorMessage)
        {
            lock.lock();
            try {
                if (LOGGING)
                    Log.e(LOG_TAG, errorMessage);
                jsExecuting.signal();
            } finally {
                lock.unlock();
            }
        }
    }));
}
 
源代码19 项目: BlueSTSDK_Android   文件: Node.java
private int extractFeatureMask(Feature f){
    SparseArray<Class<? extends Feature>> decoder = Manager.getNodeFeatures(
            mAdvertise.getDeviceId());
    int index = decoder.indexOfValue(f.getClass());
    return decoder.keyAt(index);
}
 
源代码20 项目: TelePlus-Android   文件: DvbParser.java
/**
 * Decodes a subtitling packet, returning a list of parsed {@link Cue}s.
 *
 * @param data The subtitling packet data to decode.
 * @param limit The limit in {@code data} at which to stop decoding.
 * @return The parsed {@link Cue}s.
 */
public List<Cue> decode(byte[] data, int limit) {
  // Parse the input data.
  ParsableBitArray dataBitArray = new ParsableBitArray(data, limit);
  while (dataBitArray.bitsLeft() >= 48 // sync_byte (8) + segment header (40)
      && dataBitArray.readBits(8) == 0x0F) {
    parseSubtitlingSegment(dataBitArray, subtitleService);
  }

  if (subtitleService.pageComposition == null) {
    return Collections.emptyList();
  }

  // Update the canvas bitmap if necessary.
  DisplayDefinition displayDefinition = subtitleService.displayDefinition != null
      ? subtitleService.displayDefinition : defaultDisplayDefinition;
  if (bitmap == null || displayDefinition.width + 1 != bitmap.getWidth()
      || displayDefinition.height + 1 != bitmap.getHeight()) {
    bitmap = Bitmap.createBitmap(displayDefinition.width + 1, displayDefinition.height + 1,
        Bitmap.Config.ARGB_8888);
    canvas.setBitmap(bitmap);
  }

  // Build the cues.
  List<Cue> cues = new ArrayList<>();
  SparseArray<PageRegion> pageRegions = subtitleService.pageComposition.regions;
  for (int i = 0; i < pageRegions.size(); i++) {
    PageRegion pageRegion = pageRegions.valueAt(i);
    int regionId = pageRegions.keyAt(i);
    RegionComposition regionComposition = subtitleService.regions.get(regionId);

    // Clip drawing to the current region and display definition window.
    int baseHorizontalAddress = pageRegion.horizontalAddress
        + displayDefinition.horizontalPositionMinimum;
    int baseVerticalAddress = pageRegion.verticalAddress
        + displayDefinition.verticalPositionMinimum;
    int clipRight = Math.min(baseHorizontalAddress + regionComposition.width,
        displayDefinition.horizontalPositionMaximum);
    int clipBottom = Math.min(baseVerticalAddress + regionComposition.height,
        displayDefinition.verticalPositionMaximum);
    canvas.clipRect(baseHorizontalAddress, baseVerticalAddress, clipRight, clipBottom,
        Region.Op.REPLACE);

    ClutDefinition clutDefinition = subtitleService.cluts.get(regionComposition.clutId);
    if (clutDefinition == null) {
      clutDefinition = subtitleService.ancillaryCluts.get(regionComposition.clutId);
      if (clutDefinition == null) {
        clutDefinition = defaultClutDefinition;
      }
    }

    SparseArray<RegionObject> regionObjects = regionComposition.regionObjects;
    for (int j = 0; j < regionObjects.size(); j++) {
      int objectId = regionObjects.keyAt(j);
      RegionObject regionObject = regionObjects.valueAt(j);
      ObjectData objectData = subtitleService.objects.get(objectId);
      if (objectData == null) {
        objectData = subtitleService.ancillaryObjects.get(objectId);
      }
      if (objectData != null) {
        Paint paint = objectData.nonModifyingColorFlag ? null : defaultPaint;
        paintPixelDataSubBlocks(objectData, clutDefinition, regionComposition.depth,
            baseHorizontalAddress + regionObject.horizontalPosition,
            baseVerticalAddress + regionObject.verticalPosition, paint, canvas);
      }
    }

    if (regionComposition.fillFlag) {
      int color;
      if (regionComposition.depth == REGION_DEPTH_8_BIT) {
        color = clutDefinition.clutEntries8Bit[regionComposition.pixelCode8Bit];
      } else if (regionComposition.depth == REGION_DEPTH_4_BIT) {
        color = clutDefinition.clutEntries4Bit[regionComposition.pixelCode4Bit];
      } else {
        color = clutDefinition.clutEntries2Bit[regionComposition.pixelCode2Bit];
      }
      fillRegionPaint.setColor(color);
      canvas.drawRect(baseHorizontalAddress, baseVerticalAddress,
          baseHorizontalAddress + regionComposition.width,
          baseVerticalAddress + regionComposition.height,
          fillRegionPaint);
    }

    Bitmap cueBitmap = Bitmap.createBitmap(bitmap, baseHorizontalAddress, baseVerticalAddress,
        regionComposition.width, regionComposition.height);
    cues.add(new Cue(cueBitmap, (float) baseHorizontalAddress / displayDefinition.width,
        Cue.ANCHOR_TYPE_START, (float) baseVerticalAddress / displayDefinition.height,
        Cue.ANCHOR_TYPE_START, (float) regionComposition.width / displayDefinition.width,
        (float) regionComposition.height / displayDefinition.height));

    canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
  }

  return cues;
}