Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion library/src/main/java/com/bumptech/glide/Glide.java
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,6 @@ public static void init(@NonNull Context context, @NonNull GlideBuilder builder)
}
}

@VisibleForTesting
public static synchronized boolean isInitialized() {
return glide != null;
}
Expand Down Expand Up @@ -401,6 +400,16 @@ public ArrayPool getArrayPool() {
return arrayPool;
}

@NonNull
public Engine getEngine() {
return engine;
}

@NonNull
public MemoryCache getMemoryCache() {
return memoryCache;
}

/**
* @return The context associated with this instance.
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.bumptech.glide.load.engine;

import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.os.Process;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
Expand All @@ -11,7 +13,9 @@
import com.bumptech.glide.util.Synthetic;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
Expand Down Expand Up @@ -103,6 +107,31 @@ synchronized EngineResource<?> get(Key key) {
return active;
}

synchronized List<BitmapInfo> getActiveBitmapInfos() {
List<BitmapInfo> result = new ArrayList<>();
for (ResourceWeakReference ref : activeEngineResources.values()) {
EngineResource<?> engineResource = ref.get();
if (engineResource != null) {
Bitmap bitmap = getBitmap(engineResource.getResource());
if (bitmap != null) {
result.add(new BitmapInfo(bitmap));
}
}
}
return result;
}

@Nullable
private static Bitmap getBitmap(Resource<?> resource) {
Object value = resource.get();
if (value instanceof Bitmap) {
return (Bitmap) value;
} else if (value instanceof BitmapDrawable) {
return ((BitmapDrawable) value).getBitmap();
}
return null;
}

@SuppressWarnings({"WeakerAccess", "SynchronizeOnNonFinalField"})
@Synthetic
void cleanupActiveReference(@NonNull ResourceWeakReference ref) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.bumptech.glide.load.engine;

import android.graphics.Bitmap;
import android.os.Build;
import androidx.annotation.Nullable;

/** Metadata of a Bitmap, captured safely. */
public final class BitmapInfo {

public final int width;
public final int height;
@Nullable public final Bitmap.Config config;
public final int byteCount;
public final boolean hasGainMap;

public BitmapInfo(Bitmap bitmap) {
this.width = bitmap.getWidth();
this.height = bitmap.getHeight();
this.config = bitmap.getConfig();
this.hasGainMap = Build.VERSION.SDK_INT >= 34 && bitmap.hasGainMap();
this.byteCount =
bitmap.getAllocationByteCount()
+ (hasGainMap ? bitmap.getGainMap().getContents().getAllocationByteCount() : 0);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import com.bumptech.glide.util.Synthetic;
import com.bumptech.glide.util.Util;
import com.bumptech.glide.util.pool.FactoryPools;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Executor;

Expand Down Expand Up @@ -462,6 +463,12 @@ public void onResourceReleased(Key cacheKey, EngineResource<?> resource) {
}
}

/** Returns a list of metadata for currently active bitmaps. */
@NonNull
public List<BitmapInfo> getActiveBitmapInfos() {
return activeResources.getActiveBitmapInfos();
}

public void clearDiskCache() {
diskCacheProvider.getDiskCache().clear();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,12 @@

import android.graphics.Bitmap;
import androidx.annotation.VisibleForTesting;
import com.bumptech.glide.load.engine.BitmapInfo;
import com.bumptech.glide.util.Synthetic;
import com.bumptech.glide.util.Util;
import java.util.ArrayList;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

�����|�������;��������������(�����������&���\���v��������������������������� ���B���\�����������������������0���>���j���x��������������������������T���p�����������������������<���@���R�������������������������������2���N����������� ���F���h�����������\��������������x�������������������� ��2 ��x ��� ��� ��� ��� ��
���
���
��8�����������P ��� ���
��z
���
��0�����������t�����������l�������6�����������$���v�����������:�����������p�������(���z�������&���r�����������\���p�����������D���b�����������>���������������f�����������B�����������N�������������������,�����������^������������ ��& ��� ��� ��2!���!��X"���"��v#��$$���$��l%��F&���'���'���(��x(���(��2)���)���)���)��N������+���+�� ,��V,���,��@-���-��<.���.��:/���/���/��d0���0��
1���1���1��l2���2���2��H3���3��L4���4���4��D5��5���5���5��&6��r6���6��:7���7����c�o�m�p�i�l�e�S�d�k�V�e�r�s�i�o�n�����c�o�m�p�i�l�e�S�d�k�V�e�r�s�i�o�n�C�o�d�e�n�a�m�e�����v�e�r�s�i�o�n�C�o�d�e�����v�e�r�s�i�o�n�N�a�m�e��� �m�i�n�S�d�k�V�e�r�s�i�o�n�����t�a�r�g�e�t�S�d�k�V�e�r�s�i�o�n�����n�a�m�e�����r�e�q�u�i�r�e�d��� �m�a�x�S�d�k�V�e�r�s�i�o�n�����s�c�h�e�m�e�����p�r�o�t�e�c�t�i�o�n�L�e�v�e�l�����a�l�l�o�w�B�a�c�k�u�p�����a�p�p�C�o�m�p�o�n�e�n�t�F�a�c�t�o�r�y�����i�c�o�n�����l�a�b�e�l��� �l�a�r�g�e�H�e�a�p�����p�r�e�s�e�r�v�e�L�e�g�a�c�y�E�x�t�e�r�n�a�l�S�t�o�r�a�g�e�����r�e�q�u�e�s�t�L�e�g�a�c�y�E�x�t�e�r�n�a�l�S�t�o�r�a�g�e�����t�h�e�m�e�����u�s�e�s�C�l�e�a�r�t�e�x�t�T�r�a�f�f�i�c�����v�a�l�u�e�����a�u�t�h�o�r�i�t�i�e�s�����e�x�p�o�r�t�e�d�����s�c�r�e�e�n�O�r�i�e�n�t�a�t�i�o�n��� �c�o�n�f�i�g�C�h�a�n�g�e�s��� �l�a�u�n�c�h�M�o�d�e�����p�a�r�e�n�t�A�c�t�i�v�i�t�y�N�a�m�e�����w�i�n�d�o�w�S�o�f�t�I�n�p�u�t�M�o�d�e��� �s�t�o�p�W�i�t�h�T�a�s�k�����d�i�r�e�c�t�B�o�o�t�A�w�a�r�e��� �i�n�i�t�O�r�d�e�r�����e�n�a�b�l�e�d��� �p�e�r�m�i�s�s�i�o�n�����a�n�d�r�o�i�d���*�h�t�t�p�:�/�/�s�c�h�e�m�a�s�.�a�n�d�r�o�i�d�.�c�o�m�/�a�p�k�/�r�e�s�/�a�n�d�r�o�i�d���������p�a�c�k�a�g�e�����p�l�a�t�f�o�r�m�B�u�i�l�d�V�e�r�s�i�o�n�C�o�d�e�����p�l�a�t�f�o�r�m�B�u�i�l�d�V�e�r�s�i�o�n�N�a�m�e�����m�a�n�i�f�e�s�t�����1�3�����3�.�6�.�6�����c�o�m�.�m�i�x�v�i�d�e o�s�.�v�i�r�t�u a l�d�j�a�p�p�����3�2�����u�s�e�s�-�s�d�k��� �u�s�e�s�-�f�e�a�t�u�r�e���"�a�n�d�r�o�i�d�.�h�a�r�d�w�a�r�e�.�a�u�d�i�o�.�l�o�w�_�l�a�t�e�n�c�y�����a�n�d�r�o�i�d�.�h�a�r�d�w�a�r�e�.�a�u�d�i�o�.�o�u�t�p�u�t�����a�n�d�r�o�i�d�.�h�a�r�d�w�a�r�e�.�a�u�d�i�o�.�p�r�o�����a�n�d�r�o�i�d�.�h�a�r�d�w�a�r�e�.�m�i�c�r�o�p�h�o�n�e�����u�s�e�s�-�p�e�r�m�i�s�s�i�o�n���)�a�n�d�r�o�i�d�.�p�e�r�m�i�s�s�i�o�n�.�W�R�I�T�E�_�E�X�T�E�R�N�A�L�_�S�T�O�R�A�G�E���#�a�n�d�r�o�i�d�.�p�e�r�m�i�s�s�i�o�n�.�R�E�A�D�_�M�E�D�I�A�_�A�U�D�I�O���(�a�n�d�r�o�i�d�.�p�e�r�m�i�s�s�i�o�n�.�R�E�A�D�_�E�X�T�E�R�N�A�L�_�S�T�O�R�A�G�E�����a�n�d�r�o�i�d�.�p�e�r�m�i�s�s�i�o�n�.�I�N�T�E�R�N�E�T���'�a�n�d�r�o�i�d�.�p�e�r�m�i�s�s�i�o�n�.�A�C�C�E�S�S�_�N�E�T�W�O�R�K�_�S�T�A�T�E�����a�n�d�r�o�i�d�.�p�e�r�m�i�s�s�i�o�n�.�R�E�C�O�R�D�_�A�U�D�I�O���%�a�n�d�r�o�i�d�.�p�e�r�m�i�s�s�i�o�n�.�F�O�R�E�G�R�O�U�N�D�_�S�E�R�V�I�C�E�����a�n�d�r�o�i�d�.�p�e�r�m�i�s�s�i�o�n�.�W�A�K�E�_�L�O�C�K�����q�u�e�r�i�e�s�����i�n�t�e�n�t�����a�c�t�i�o�n�����a�n�d�r�o�i�d�.�i�n�t�e�n�t�.�a�c�t�i�o�n�.�V�I�E�W�����c�a�t�e�g�o�r�y���!�a�n�d�r�o�i�d�.�i�n�t�e�n�t�.�c�a�t�e�g�o�r�y�.�B�R�O�W�S�A�B�L�E�����d�a�t�a�����h�t�t�p�s�����a�n�d�r�o�i�d�x�.�t�e�s�t�.�o�r�c�h�e�s�t�r�a�t�o�r�����a�n�d�r�o�i�d�x�.�t�e�s�t�.�s�e�r�v�i�c�e�s���/�c�o�m�.�g�o�o�g�l�e�.�a�n�d�r�o�i�d�.�a�p�p�s�.�c�o�m�m�o�n�.�t�e�s�t�i�n�g�.�s�e�r�v�i�c�e�s���%�a�n�d�r�o�i�d�.�p�e�r�m�i�s�s�i�o�n�.�P�O�S�T�_�N�O�T�I�F�I�C�A�T�I�O�N�S�����a�n�d�r�o�i�d�.�p�e�r�m�i�s�s�i�o�n�.�V�I�B�R�A�T�E���)�a�n�d�r�o�i�d�.�p�e�r�m�i�s�s�i�o�n�.�R�E�C�E�I�V�E�_�B�O�O�T�_�C�O�M�P�L�E�T�E�D���.�c�o�m�.�s�e�c�.�a�n�d�r�o�i�d�.�p�r�o�v�i�d�e�r�.�b�a�d�g�e�.�p�e�r�m�i�s�s�i�o�n�.�R�E�A�D���/�c�o�m�.�s�e�c�.�a�n�d�r�o�i�d�.�p�r�o�v�i�d�e�r�.�b�a�d�g�e�.�p�e�r�m�i�s�s�i�o�n�.�W�R�I�T�E���)�c�o�m�.�h�t�c�.�l�a�u�n�c�h�e�r�.�p�e�r�m�i�s�s�i�o�n�.�R�E�A�D�_�S�E�T�T�I�N�G�S���+�c�o�m�.�h�t�c�.�l�a�u�n�c�h�e�r�.�p�e�r�m�i�s�s�i�o�n�.�U�P�D�A�T�E�_�S�H�O�R�T�C�U�T���0�c�o�m�.�s�o�n�y�e�r�i�c�s�s�o�n�.�h�o�m�e�.�p�e�r�m�i�s�s�i�o�n�.�B�R�O�A�D�C�A�S�T�_�B�A�D�G�E���4�c�o�m�.�s�o�n�y�m�o�b�i�l�e�.�h�o�m�e�.�p�e�r�m�i�s�s�i�o�n�.�P�R�O�V�I�D�E�R�_�I�N�S�E�R�T�_�B�A�D�G�E���,�c�o�m�.�a�n�d�d�o�e�s�.�l�a�u�n�c�h�e�r�.�p�e�r�m�i�s�s�i�o�n�.�U�P�D�A�T�E�_�C�O�U�N�T���+�c�o�m�.�m�a�j�e�u�r�.�l�a�u�n�c�h�e�r�.�p�e�r�m�i�s�s�i�o�n�.�U�P�D�A�T�E�_�B�A�D�G�E���3�c�o�m�.�h�u�a�w�e�i�.�a�n�d�r�o�i�d�.�l�a�u�n�c�h�e�r�.�p�e�r�m�i�s�s�i�o�n�.�C�H�A�N�G�E�_�B�A�D�G�E���4�c�o�m�.�h�u�a�w�e�i�.�a�n�d�r�o�i�d�.�l�a�u�n�c�h�e�r�.�p�e�r�m�i�s�s�i�o�n�.�R�E�A�D�_�S�E�T�T�I�N�G�S���5�c�o�m�.�h�u�a�w�e�i�.�a�n�d�r�o�i�d�.�l�a�u�n�c�h�e�r�.�p�e�r�m�i�s�s�i�o�n�.�W�R�I�T�E�_�S�E�T�T�I�N�G�S���!�a�n�d�r�o�i�d�.�p�e�r�m�i�s�s�i�o�n�.�R�E�A�D�_�A�P�P�_�B�A�D�G�E���*�c�o�m�.�o�p�p�o�.�l�a�u�n�c�h�e�r�.�p�e�r�m�i�s�s�i�o�n�.�R�E�A�D�_�S�E�T�T�I�N�G�S���+�c�o�m�.�o�p�p�o�.�l�a�u�n�c�h�e�r�.�p�e�r�m�i�s�s�i�o�n�.�W�R�I�T�E�_�S�E�T�T�I�N�G�S���0�m�e�.�e�v�e�r�y�t�h�i�n�g�.�b�a�d�g�e�r�.�p�e�r�m�i�s�s�i�o�n�.�B�A�D�G�E�_�C�O�U�N�T�_�R�E�A�D���1�m�e�.�e�v�e�r�y�t�h�i�n�g�.�b�a�d�g�e�r�.�p�e�r�m�i�s�s�i�o�n�.�B�A�D�G�E�_�C�O�U�N�T�_�W�R�I�T�E���@�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i�r t u a l�d�j�a�p�p�.�D�Y�N�A�M�I�C�_�R�E�C�E�I�V�E�R�_�N�O�T�_�E�X�P�O�R�T�E�D�_�P�E�R�M�I�S�S�I�O�N�����a�p�p�l�i�c�a�t�i�o�n���&�a�n�d�r�o�i�d�x�.�c�o�r�e�.�a�p�p�.�C�o�r�e�C�o�m�p�o�n�e�n�t�F�a�c�t�o�r�y���'�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i�r�t u a l�d�j�.v i r�t�u�a�l�D�J�A�p�p�l�i�c�a�t�i�o�n��� �m�e�t�a�-�d�a�t�a���(�g�o�o�g�l�e�_�a�n�a�l�y�t�i�c�s�_�a�d�i�d�_�c�o�l�l�e�c�t�i�o�n�_�e�n�a�b�l�e�d���+�g�o�o�g�l�e�_�a�n�a�l�y�t�i�c�s�_�d�e�f�e�r�r�e�d�_�d�e�e�p�_�l�i�n�k�_�e�n�a�b�l�e�d���3�g�o�o�g�l�e�_�a�n�a�l�y�t�i�c�s�_�a�u�t�o�m�a�t�i�c�_�s�c�r�e�e�n�_�r�e�p�o�r�t�i�n�g�_�e�n�a�b�l�e�d���9�g�o�o�g�l�e�_�a�n�a�l�y�t�i�c�s�_�d�e�f�a�u�l�t�_�a�l�l�o�w�_�a�d�_�p�e�r�s�o�n�a�l�i�z�a�t�i�o�n�_�s�i�g�n�a�l�s���)�g�o�o�g�l�e�_�a�n�a�l�y�t�i�c�s�_�s�s�a�i�d�_�c�o�l�l�e�c�t�i�o�n�_�e�n�a�b�l�e�d���5�f�i�r�e�b�a�s�e�_�i�n�a�p�p�_�m�e�s�s�a�g�i�n�g�_�a�u�t�o�_�d�a�t�a�_�c�o�l�l�e�c�t�i�o�n�_�e�n�a�b�l�e�d���#�f�i�r�e�b�a�s�e�_�p�e�r�f�o�r�m�a�n�c�e�_�l�o�g�c�a�t�_�e�n�a�b�l�e�d���'�f�i�r�e�b�a�s�e�_�p�e�r�f�o�r�m�a�n�c�e�_�c�o�l�l�e�c�t�i�o�n�_�e�n�a�b�l�e�d���+�f�i�r�e�b�a�s�e�_�c�r�a�s�h�l�y�t�i�c�s�_�c�o�l�l�e�c�t�i�o�n�_�d�e�a�c�t�i�v�a�t�e�d���'�f�i�r�e�b�a�s�e�_�c�r�a�s�h�l�y�t�i�c�s�_�c�o�l�l�e�c�t�i�o�n�_�e�n�a�b�l�e�d���$�f�i�r�e�b�a�s�e�_�m�e�s�s�a�g�i�n�g�_�a�u�t�o�_�i�n�i�t�_�e�n�a�b�l�e�d���%�f�i�r�e�b�a�s�e�_�a�n�a�l�y�t�i�c�s�_�c�o�l�l�e�c�t�i�o�n�_�e�n�a�b�l�e�d���)�f�i�r�e�b�a�s�e�_�a�n�a�l�y�t�i�c�s�_�c�o�l�l�e�c�t�i�o�n�_�d�e�a�c�t�i�v�a�t�e�d���!�f�i�r�e�b�a�s�e�_�c�r�a�s�h�_�c�o�l�l�e�c�t�i�o�n�_�e�n�a�b�l�e�d�����p�r�o�v�i�d�e�r���3�c�o�m�.�m�i�x�v�i�d�e�o.s�.�c�r�o�s�s�d�j�.�p�r�o�v�i�d�e�r�s�.�v.i r t u a l�C�o�n�t�e�n�t�P�r�o�v�i�d�e�r�����a�c�t�i�v�i�t�y���)�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i r t u a l�d�j�.�S�p�l�a�s�h�S�c�r�e�e�n�A�c�t�i�v�i�t�y��� �i�n�t�e�n�t�-�f�i�l�t�e�r�����a�n�d�r�o�i�d�.�i�n�t�e�n�t�.�a�c�t�i�o�n�.�M�A�I�N��� �a�n�d�r�o�i�d�.�i�n�t�e�n�t�.�c�a�t�e�g�o�r�y�.�L�A�U�N�C�H�E�R���.�c�o�m�.�m�i�x�v�i�d�e�o.s�.�v i�r�t u a l�d�j�.�a�p�p�.�v i�r�t�u a l�D�e�e�p�L�i�n�k�A�c�t�i�v�i�t�y�����a�n�d�r�o�i�d�.�i�n�t�e�n�t�.�c�a�t�e�g�o�r�y�.�D�E�F�A�U�L�T���"�c�o�m�.�m�i�x�v�i d e o s�. v i r t u a l�d�j�a�p�p�.�c�o�l�l�e�c�t�i�o�n���$�c�o�m�.�m�i�x�v�i�d�e�o s�. v i r t u a l�d�j�.�v i r t u a l�D�J�A�c�t�i�v�i�t�y���'�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i r t u a l�d�j�.�C�o�l�l�e�c�t�i�o�n�A�c�t�i�v�i�t�y�����a�n�d�r�o�i�d�.�s�u�p�p�o�r�t�.�P�A�R�E�N�T�_�A�C�T�I�V�I�T�Y���%�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i r t u a l�d�j�.�S�e�t�t�i�n�g�s�A�c�t�i�v�i�t�y���$�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i r t u a l�d�j�.�M�y�M�i�x�e�s�A�c�t�i�v�i�t�y���&�c�o�m�.�m�i�x�v�i�b d�e�o s�. v i r t u a l�d�j�.�E�d�i�t�M�y�M�i�x�A�c�t�i�v�i�t�y���-�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i r t u a l�d�j�.�A�d�d�P�l�a�y�l�i�s�t�S�o�n�g�s�A�c�t�i�v�i�t�y���-�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i r t u a l�d�j�.�a�p�p�.�A�u�t�o�m�i�x�Q�u�e�u�e�A�c�t�i�v�i�t�y���.�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i r t u a l�d�j�.�E�d�i�t�P�l�a�y�l�i�s�t�S�o�n�g�s�A�c�t�i�v�i�t�y���1�c�o�m�.�m�i�x�v�i�d�e�o s�. v i r t u a l d�j�.�a�p�p�.�v i r t u a l�D�J�S�t�o�r�e�P�a�c�k�A�c�t�i�v�i�t�y���8�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i r t u a l�d�j�.�a�p�p�.�v i r t u a l�D�J�S�t�o�r�e�P�a�c�k�D�e�t�a�i�l�s�A�c�t�i�v�i�t�y���(�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i r t u a l�d�j�.�N�o�t�i�f�i�c�a�t�i�o�n�W�e�b�v�i�e�w���&�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i r t u a l�d�j�.�a�p�p�.�A�b�o�u�t�A�c�t�i�v�i�t�y���6.5�c�o�m�.�m�i�x�v�i�d�e�o s�. V i r t u a l�d�j�.�a�p�p�.�v i r t u a l d j�I�n�t�e�r�s�t�i�t�i�a�l�A�d�s�A�c�t�i�v�i�t�y���.�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i r t u a l�d�j�.�a�p�p�.�R�e�w�a�r�d�e�d�V�i�d�e�o s�A�c�t�i�v�i�t�y���0�c�o�m�.�m�i�x�v�i�b d�e�o s�.�v i r t u a l�d�j�.�a�p�p�.�F�x�R�e�w�a�r�d�e�d�V�i�d�e�o s�A�c�t�i�v�i�t�y���"�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i r t u a l�d�j�.�S�h�a�r�e�A�c�t�i�v�i�t�y�����s�e�r�v�i�c�e���+�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i r t u a l�d�j�.�s�e�r�v�i�c�e�s�.�U�p�l�o�a�d�S�e�r�v�i�c�e�����r�e�c�e�i�v�e�r���4�c�o�m�.�m�i�x�v�i�d�e�o s�.�c�o�m�m�o�n�.�u�t�i�l�s�.�R�e�m�o�t�e�C�o�n�t�r�o�l�C�l�i�e�n�t�M�a�n�a�g�e�r���"�a�n�d�r�o�i�d�.�i�n�t�e�n�t�.�a�c�t�i�o�n�.�M�E�D�I�A�_�B�U�T�T�O�N���*�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i r t u a l�d�j�.�s�e�r�v�i�c�e�s�.�M�u�s�i�c�& v i d e o S�e�r�v�i�c�e���8�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�c�o�m�p�o�n�e�n�t�s�.�C�o�m�p�o�n�e�n�t�D�i�s�c�o�v�e�r�y�S�e�r�v�i�c�e���W�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�c�o�m�p�o�n�e�n�t�s�:�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�m�e�s�s�a�g�i�n�g�.�F�i�r�e�b�a�s�e�M�e�s�s�a�g�i�n�g�R�e�g�i�s�t�r�a�r���1�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�c�o�m�p�o�n�e�n�t�s�.�C�o�m�p�o�n�e�n�t�R�e�g�i�s�t�r�a�r���Z�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�c�o�m�p�o�n�e�n�t�s�:�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�c�r�a�s�h�l�y�t�i�c�s�.�n�d�k�.�C�r�a�s�h�l�y�t�i�c�s�N�d�k�R�e�g�i�s�t�r�a�r���U�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�c�o�m�p�o�n�e�n�t�s�:�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�r�e�m�o�t�e�c�o�n�f�i�g�.�R�e�m�o�t�e�C�o�n�f�i�g�R�e�g�i�s�t�r�a�r���M�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�c�o�m�p�o�n�e�n�t�s�:�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�a�b�t�.�c�o�m�p�o�n�e�n�t�.�A�b�t�R�e�g�i�s�t�r�a�r���S�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�c�o�m�p�o�n�e�n�t�s�:�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�c�r�a�s�h�l�y�t�i�c�s�.�C�r�a�s�h�l�y�t�i�c�s�R�e�g�i�s�t�r�a�r���k�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�c�o�m�p�o�n�e�n�t�s�:�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�a�n�a�l�y�t�i�c�s�.�c�o�n�n�e�c�t�o�r�.�i�n�t�e�r�n�a�l�.�A�n�a�l�y�t�i�c�s�C�o�n�n�e�c�t�o�r�R�e�g�i�s�t�r�a�r���_�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�c�o�m�p�o�n�e�n�t�s�:�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�i�n�s�t�a�l�l�a�t�i�o�n�s�.�F�i�r�e�b�a�s�e�I�n�s�t�a�l�l�a�t�i�o�n�s�R�e�g�i�s�t�r�a�r���S�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�c�o�m�p�o�n�e�n�t�s�:�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�d�a�t�a�t�r�a�n�s�p�o�r�t�.�T�r�a�n�s�p�o�r�t�R�e�g�i�s�t�r�a�r���3�c�o�m�.�g�o�o�g�l�e�.�a�n�d�r�o�i�d�.�g�m�s�.�c�o�m�m�o�n�.�a�p�i�.�G�o�o�g�l�e�A�p�i�A�c�t�i�v�i�t�y���,�c�o�m�.�m�i�x�v�i�d�e�o s�.�v�i�r�t�u�a l d�j�a�p�p�.�f�i�r�e�b�a�s�e�i�n�i�t�p�r�o�v�i�d�e�r���1�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�p�r�o�v�i�d�e�r�.�F�i�r�e�b�a�s�e�I�n�i�t�P�r�o�v�i�d�e�r���(�c�o�m�.�m�i�x�v�i�d�e� o s�.�v.r.t.u.a.l �d�j�a�p�p�.�a�n�d�r�o�i�d�x�-�s�t�a�r�t�u�p���'�a�n�d�r�o�i�d�x�.�s�t�a�r�t�u�p�.�I�n�i�t�i�a�l�i�z�a�t�i�o�n�P�r�o�v�i�d�e�r���$�a�n�d�r�o�i�d�x�.�w�o�r�k�.�W�o�r�k�M�a�n�a�g�e�r�I�n�i�t�i�a�l�i�z�e�r�����a�n�d�r�o�i�d�x�.�s�t�a�r�t�u�p���+�a�n�d�r�o�i�d�x�.�e�m�o�j�i�2�.�t�e�x�t�.�E�m�o�j�i�C�o�m�p�a�t�I�n�i�t�i�a�l�i�z�e�r���.�a�n�d�r�o�i�d�x�.�l�i�f�e�c�y�c�l�e�.�P�r�o�c�e�s�s�L�i�f�e�c�y�c�l�e�I�n�i�t�i�a�l�i�z�e�r���5�a�n�d�r�o�i�d�x�.�p�r�o�f�i�l�e�i�n�s�t�a�l�l�e�r�.�P�r�o�f�i�l�e�I�n�s�t�a�l�l�e�r�I�n�i�t�i�a�l�i�z�e�r���<�a�n�d�r�o�i�d�x�.�w�o�r�k�.�i�m�p�l�.�b�a�c�k�g�r�o�u�n�d�.�s�y�s�t�e�m�a�l�a�r�m�.�S�y�s�t�e�m�A�l�a�r�m�S�e�r�v�i�c�e���8�a�n�d�r�o�i�d�x�.�w�o�r�k�.�i�m�p�l�.�b�a�c�k�g�r�o�u�n�d�.�s�y�s�t�e�m�j�o�b�.�S�y�s�t�e�m�J�o�b�S�e�r�v�i�c�e���#�a�n�d�r�o�i�d�.�p�e�r�m�i�s�s�i�o�n�.�B�I�N�D�_�J�O�B�_�S�E�R�V�I�C�E���5�a�n�d�r�o�i�d�x�.�w�o�r�k�.�i�m�p�l�.�f�o�r�e�g�r�o�u�n�d�.�S�y�s�t�e�m�F�o�r�e�g�r�o�u�n�d�S�e�r�v�i�c�e���<�a�n�d�r�o�i�d�x�.�w�o�r�k�.�i�m�p�l�.�u�t�i�l�s�.�F�o�r�c�e�S�t�o�p�R�u�n�n�a�b�l�e�$�B�r�o�a�d�c�a�s�t�R�e�c�e�i�v�e�r���N�a�n�d�r�o�i�d�x�.�w�o�r�k�.�i�m�p�l�.�b�a�c�k�g�r�o�u�n�d�.�s�y�s�t�e�m�a�l�a�r�m�.�C�o�n�s�t�r�a�i�n�t�P�r�o�x�y�$�B�a�t�t�e�r�y�C�h�a�r�g�i�n�g�P�r�o�x�y���,�a�n�d�r�o�i�d�.�i�n�t�e�n�t�.�a�c�t�i�o�n�.�A�C�T�I�O�N�_�P�O�W�E�R�_�C�O�N�N�E�C�T�E�D���/�a�n�d�r�o�i�d�.�i�n�t�e�n�t�.�a�c�t�i�o�n�.�A�C�T�I�O�N�_�P�O�W�E�R�_�D�I�S�C�O�N�N�E�C�T�E�D���L�a�n�d�r�o�i�d�x�.�w�o�r�k�.�i�m�p�l�.�b�a�c�k�g�r�o�u�n�d�.�s�y�s�t�e�m�a�l�a�r�m�.�C�o�n�s�t�r�a�i�n�t�P�r�o�x�y�$�B�a�t�t�e�r�y�N�o�t�L�o�w�P�r�o�x�y���"�a�n�d�r�o�i�d�.�i�n�t�e�n�t�.�a�c�t�i�o�n�.�B�A�T�T�E�R�Y�_�O�K�A�Y���!�a�n�d�r�o�i�d�.�i�n�t�e�n�t�.�a�c�t�i�o�n�.�B�A�T�T�E�R�Y�_�L�O�W���L�a�n�d�r�o�i�d�x�.�w�o�r�k�.�i�m�p�l�.�b�a�c�k�g�r�o�u�n�d�.�s�y�s�t�e�m�a�l�a�r�m�.�C�o�n�s�t�r�a�i�n�t�P�r�o�x�y�$�S�t�o�r�a�g�e�N�o�t�L�o�w�P�r�o�x�y���(�a�n�d�r�o�i�d�.�i�n�t�e�n�t�.�a�c�t�i�o�n�.�D�E�V�I�C�E�_�S�T�O�R�A�G�E�_�L�O�W���'�a�n�d�r�o�i�d�.�i�n�t�e�n�t�.�a�c�t�i�o�n�.�D�E�V�I�C�E�_�S�T�O�R�A�G�E�_�O�K���K�a�n�d�r�o�i�d�x�.�w�o�r�k�.�i�m�p�l�.�b�a�c�k�g�r�o�u�n�d�.�s�y�s�t�e�m�a�l�a�r�m�.�C�o�n�s�t�r�a�i�n�t�P�r�o�x�y�$�N�e�t�w�o�r�k�S�t�a�t�e�P�r�o�x�y���$�a�n�d�r�o�i�d�.�n�e�t�.�c�o�n�n�.�C�O�N�N�E�C�T�I�V�I�T�Y�_�C�H�A�N�G�E���<�a�n�d�r�o�i�d�x�.�w�o�r�k�.�i�m�p�l�.�b�a�c�k�g�r�o�u�n�d�.�s�y�s�t�e�m�a�l�a�r�m�.�R�e�s�c�h�e�d�u�l�e�R�e�c�e�i�v�e�r���$�a�n�d�r�o�i�d�.�i�n�t�e�n�t�.�a�c�t�i�o�n�.�B�O�O�T�_�C�O�M�P�L�E�T�E�D�����a�n�d�r�o�i�d�.�i�n�t�e�n�t�.�a�c�t�i�o�n�.�T�I�M�E�_�S�E�T���&�a�n�d�r�o�i�d�.�i�n�t�e�n�t�.�a�c�t�i�o�n�.�T�I�M�E�Z�O�N�E�_�C�H�A�N�G�E�D���G�a�n�d�r�o�i�d�x�.�w�o�r�k�.�i�m�p�l�.�b�a�c�k�g�r�o�u�n�d�.�s�y�s�t�e�m�a�l�a�r�m�.�C�o�n�s�t�r�a�i�n�t�P�r�o�x�y�U�p�d�a�t�e�R�e�c�e�i�v�e�r���7�a�n�d�r�o�i�d�x�.�w�o�r�k�.�i�m�p�l�.�b�a�c�k�g�r�o�u�n�d�.�s�y�s�t�e�m�a�l�a�r�m�.�U�p�d�a�t�e�P�r�o�x�i�e�s���2�a�n�d�r�o�i�d�x�.�w�o�r�k�.�i�m�p�l�.�d�i�a�g�n�o�s�t�i�c�s�.�D�i�a�g�n�o�s�t�i�c�s�R�e�c�e�i�v�e�r�����a�n�d�r�o�i�d�.�p�e�r�m�i�s�s�i�o�n�.�D�U�M�P���-�a�n�d�r�o�i�d�x�.�w�o�r�k�.�d�i�a�g�n�o�s�t�i�c�s�.�R�E�Q�U�E�S�T�_�D�I�A�G�N�O�S�T�I�C�S��� �u�s�e�s�-�l�i�b�r�a�r�y�����a�n�d�r�o�i�d�x�.�w�i�n�d�o�w�.�e�x�t�e�n�s�i�o�n�s�����a�n�d�r�o�i�d�x�.�w�i�n�d�o�w�.�s�i�d�e�c�a�r���,�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i r t u a l�d�j�a�p�p�.�c�o�m�.�s�q�u�a�r�e�u�p�.�p�i�c�a�s�s�o���$�c�o�m�.�s�q�u�a�r�e�u�p�.�p�i�c�a�s�s�o�.�P�i�c�a�s�s�o�P�r�o�v�i�d�e�r���0�a�n�d�r�o�i�d�x�.�p�r�o�f�i�l�e�i�n�s�t�a�l�l�e�r�.�P�r�o�f�i�l�e�I�n�s�t�a�l�l�R�e�c�e�i�v�e�r���0�a�n�d�r�o�i�d�x�.�p�r�o�f�i�l�e�i�n�s�t�a�l�l�e�r�.�a�c�t�i�o�n�.�I�N�S�T�A�L�L�_�P�R�O�F�I�L�E���*�a�n�d�r�o�i�d�x�.�p�r�o�f�i�l�e�i�n�s�t�a�l�l�e�r�.�a�c�t�i�o�n�.�S�K�I�P�_�F�I�L�E���.�a�n�d�r�o�i�d�x�.�r�o�o�m�.�M�u�l�t�i�I�n�s�t�a�n�c�e�I�n�v�a�l�i�d�a�t�i�o�n�S�e�r�v�i�c�e�������������r���s����������� ���p�����������q���'��� �������z�����������Z�������������������$���������������������������+���j�����������������������������������!���"�����������������������'���������������"������������������~"�������)�������)���"��������������� ���"�������(�������(�������$���*�������*�������%���+������� �������&���(������� �������L���������������,���������������"�������������������"���������������!�����������������������,�������L���������������-���������������"�������.�������.���"���������������������������������������-�������L���������������-���������������"�������/�������/���"���������������������������������������-�������L���������������-���������������"�������0�������0���"���������������������������������������-�������L���������������-���������������"�������1�������1���"���������������������������������������-�������L���������������2���������������"�������3�������3���"���������������������������������������2�������8��� �����������2���������������"�������4�������4����������� �����������2�������8��� �����������2���������������"�������5�������5����������� �����������2�������8���������������2���������������"�������6�������6�����������������������2�������8��� �����������2���������������"�������7�������7����������� �����������2�������8��� �����������2���������������"�������8�������8����������� �����������2�������8���������������2���������������"�������9�������9�����������������������2�������8���������������2���������������"�������:�������:�����������������������2�������$���������������;�������������������$���������������<�������������������8���������������=���������������"�������>�������>�����������������������=�������8���������������?���������������"�������@�������@�����������������������?�������8���������������A���������������"��� ���B�������B�����������������������A�����������������������<�������8���������������$���������������"�������C�������C�����������������������$�������8���������������$���������������"�������D�������D�����������������������$�������8���������������$���������������"�������E�������E�����������������������$�����������������������;�������8���������������2���������������"�������F�������F�����������������������2�������8���������������2���������������"�������G�������G�����������������������2�������8���������������2���������������"�������H�������H�����������������������2�������8���������������2���������������"�������I�������I�����������������������2�������8���������������2���������������"�������J�������J�����������������������2�������8���������������2���������������"�������K�������K�����������������������2�������8��� �����������2���������������"�������L�������L����������� �����������2�������8���!�����������2���������������"�������M�������M�����������!�����������2�������8���"�����������2���������������"�������N�������N�����������"�����������2�������8���#�����������2���������������"�������O�������O�����������#�����������2�������8���$�����������2���������������"�������P�������P�����������$�����������2�������8���%�����������2���������������"�������Q�������Q�����������%�����������2�������8���&�����������2���������������"�������R�������R�����������&�����������2�������8���'�����������2���������������"�������S�������S�����������'�����������2�������8���(�����������2���������������"�������T�������T�����������(�����������2�������8���)�����������2���������������"�������U�������U�����������)�����������2�������8���*�����������2���������������"�������V�������V�����������*�����������2�������8���+�����������2���������������"�������W�������W�����������+�����������2�������8���,�����������2���������������"�������X�������X�����������,�����������2�������L���-����������� ���������������"�������Y�������Y���"��� �����������������������-����������� �������8���.�����������2���������������"�������Y�������Y�����������.�����������2�����������/�����������Z������� �������"��������������� ���"���������������X���"��� ���������������"�������\�������\���"�������������������"�������������������"�������������������"��� ���[�������[���"�������������������"�����������������������L���0�����������]���������������"�������^�������^���"���������������������������0�����������]�������L���1�����������]���������������"�������_�������_���"���������������������������1�����������]�������L���2�����������]���������������"��������������`���"���������������������������2�����������]�������L���3�����������]���������������"�������a�������a���"���������������������������3�����������]�������L���4�����������]���������������"�������b�������b���"���������������������������4�����������]�������L���5�����������]���������������"�������c�������c���"���������������������������5�����������]�������L

import java.util.List;
import java.util.Map;

/**
* A strategy for reusing bitmaps that requires any returned bitmap's dimensions to exactly match

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

�����|�������;��������������(�����������&���\���v��������������������������� ���B���\�����������������������0���>���j���x��������������������������T���p�����������������������<���@���R�������������������������������2���N����������� ���F���h�����������\��������������x�������������������� ��2 ��x ��� ��� ��� ��� ��
���
���
��8�����������P ��� ���
��z
���
��0�����������t�����������l�������6�����������$���v�����������:�����������p�������(���z�������&���r�����������\���p�����������D���b�����������>���������������f�����������B�����������N�������������������,�����������^������������ ��& ��� ��� ��2!���!��X"���"��v#��$$���$��l%��F&���'���'���(��x(���(��2)���)���)���)��N������+���+�� ,��V,���,��@-���-��<.���.��:/���/���/��d0���0��
1���1���1��l2���2���2��H3���3��L4���4���4��D5��5���5���5��&6��r6���6��:7���7����c�o�m�p�i�l�e�S�d�k�V�e�r�s�i�o�n�����c�o�m�p�i�l�e�S�d�k�V�e�r�s�i�o�n�C�o�d�e�n�a�m�e�����v�e�r�s�i�o�n�C�o�d�e�����v�e�r�s�i�o�n�N�a�m�e��� �m�i�n�S�d�k�V�e�r�s�i�o�n�����t�a�r�g�e�t�S�d�k�V�e�r�s�i�o�n�����n�a�m�e�����r�e�q�u�i�r�e�d��� �m�a�x�S�d�k�V�e�r�s�i�o�n�����s�c�h�e�m�e�����p�r�o�t�e�c�t�i�o�n�L�e�v�e�l�����a�l�l�o�w�B�a�c�k�u�p�����a�p�p�C�o�m�p�o�n�e�n�t�F�a�c�t�o�r�y�����i�c�o�n�����l�a�b�e�l��� �l�a�r�g�e�H�e�a�p�����p�r�e�s�e�r�v�e�L�e�g�a�c�y�E�x�t�e�r�n�a�l�S�t�o�r�a�g�e�����r�e�q�u�e�s�t�L�e�g�a�c�y�E�x�t�e�r�n�a�l�S�t�o�r�a�g�e�����t�h�e�m�e�����u�s�e�s�C�l�e�a�r�t�e�x�t�T�r�a�f�f�i�c�����v�a�l�u�e�����a�u�t�h�o�r�i�t�i�e�s�����e�x�p�o�r�t�e�d�����s�c�r�e�e�n�O�r�i�e�n�t�a�t�i�o�n��� �c�o�n�f�i�g�C�h�a�n�g�e�s��� �l�a�u�n�c�h�M�o�d�e�����p�a�r�e�n�t�A�c�t�i�v�i�t�y�N�a�m�e�����w�i�n�d�o�w�S�o�f�t�I�n�p�u�t�M�o�d�e��� �s�t�o�p�W�i�t�h�T�a�s�k�����d�i�r�e�c�t�B�o�o�t�A�w�a�r�e��� �i�n�i�t�O�r�d�e�r�����e�n�a�b�l�e�d��� �p�e�r�m�i�s�s�i�o�n�����a�n�d�r�o�i�d���*�h�t�t�p�:�/�/�s�c�h�e�m�a�s�.�a�n�d�r�o�i�d�.�c�o�m�/�a�p�k�/�r�e�s�/�a�n�d�r�o�i�d���������p�a�c�k�a�g�e�����p�l�a�t�f�o�r�m�B�u�i�l�d�V�e�r�s�i�o�n�C�o�d�e�����p�l�a�t�f�o�r�m�B�u�i�l�d�V�e�r�s�i�o�n�N�a�m�e�����m�a�n�i�f�e�s�t�����1�3�����3�.�6�.�6�����c�o�m�.�m�i�x�v�i�d�e o�s�.�v�i�r�t�u a l�d�j�a�p�p�����3�2�����u�s�e�s�-�s�d�k��� �u�s�e�s�-�f�e�a�t�u�r�e���"�a�n�d�r�o�i�d�.�h�a�r�d�w�a�r�e�.�a�u�d�i�o�.�l�o�w�_�l�a�t�e�n�c�y�����a�n�d�r�o�i�d�.�h�a�r�d�w�a�r�e�.�a�u�d�i�o�.�o�u�t�p�u�t�����a�n�d�r�o�i�d�.�h�a�r�d�w�a�r�e�.�a�u�d�i�o�.�p�r�o�����a�n�d�r�o�i�d�.�h�a�r�d�w�a�r�e�.�m�i�c�r�o�p�h�o�n�e�����u�s�e�s�-�p�e�r�m�i�s�s�i�o�n���)�a�n�d�r�o�i�d�.�p�e�r�m�i�s�s�i�o�n�.�W�R�I�T�E�_�E�X�T�E�R�N�A�L�_�S�T�O�R�A�G�E���#�a�n�d�r�o�i�d�.�p�e�r�m�i�s�s�i�o�n�.�R�E�A�D�_�M�E�D�I�A�_�A�U�D�I�O���(�a�n�d�r�o�i�d�.�p�e�r�m�i�s�s�i�o�n�.�R�E�A�D�_�E�X�T�E�R�N�A�L�_�S�T�O�R�A�G�E�����a�n�d�r�o�i�d�.�p�e�r�m�i�s�s�i�o�n�.�I�N�T�E�R�N�E�T���'�a�n�d�r�o�i�d�.�p�e�r�m�i�s�s�i�o�n�.�A�C�C�E�S�S�_�N�E�T�W�O�R�K�_�S�T�A�T�E�����a�n�d�r�o�i�d�.�p�e�r�m�i�s�s�i�o�n�.�R�E�C�O�R�D�_�A�U�D�I�O���%�a�n�d�r�o�i�d�.�p�e�r�m�i�s�s�i�o�n�.�F�O�R�E�G�R�O�U�N�D�_�S�E�R�V�I�C�E�����a�n�d�r�o�i�d�.�p�e�r�m�i�s�s�i�o�n�.�W�A�K�E�_�L�O�C�K�����q�u�e�r�i�e�s�����i�n�t�e�n�t�����a�c�t�i�o�n�����a�n�d�r�o�i�d�.�i�n�t�e�n�t�.�a�c�t�i�o�n�.�V�I�E�W�����c�a�t�e�g�o�r�y���!�a�n�d�r�o�i�d�.�i�n�t�e�n�t�.�c�a�t�e�g�o�r�y�.�B�R�O�W�S�A�B�L�E�����d�a�t�a�����h�t�t�p�s�����a�n�d�r�o�i�d�x�.�t�e�s�t�.�o�r�c�h�e�s�t�r�a�t�o�r�����a�n�d�r�o�i�d�x�.�t�e�s�t�.�s�e�r�v�i�c�e�s���/�c�o�m�.�g�o�o�g�l�e�.�a�n�d�r�o�i�d�.�a�p�p�s�.�c�o�m�m�o�n�.�t�e�s�t�i�n�g�.�s�e�r�v�i�c�e�s���%�a�n�d�r�o�i�d�.�p�e�r�m�i�s�s�i�o�n�.�P�O�S�T�_�N�O�T�I�F�I�C�A�T�I�O�N�S�����a�n�d�r�o�i�d�.�p�e�r�m�i�s�s�i�o�n�.�V�I�B�R�A�T�E���)�a�n�d�r�o�i�d�.�p�e�r�m�i�s�s�i�o�n�.�R�E�C�E�I�V�E�_�B�O�O�T�_�C�O�M�P�L�E�T�E�D���.�c�o�m�.�s�e�c�.�a�n�d�r�o�i�d�.�p�r�o�v�i�d�e�r�.�b�a�d�g�e�.�p�e�r�m�i�s�s�i�o�n�.�R�E�A�D���/�c�o�m�.�s�e�c�.�a�n�d�r�o�i�d�.�p�r�o�v�i�d�e�r�.�b�a�d�g�e�.�p�e�r�m�i�s�s�i�o�n�.�W�R�I�T�E���)�c�o�m�.�h�t�c�.�l�a�u�n�c�h�e�r�.�p�e�r�m�i�s�s�i�o�n�.�R�E�A�D�_�S�E�T�T�I�N�G�S���+�c�o�m�.�h�t�c�.�l�a�u�n�c�h�e�r�.�p�e�r�m�i�s�s�i�o�n�.�U�P�D�A�T�E�_�S�H�O�R�T�C�U�T���0�c�o�m�.�s�o�n�y�e�r�i�c�s�s�o�n�.�h�o�m�e�.�p�e�r�m�i�s�s�i�o�n�.�B�R�O�A�D�C�A�S�T�_�B�A�D�G�E���4�c�o�m�.�s�o�n�y�m�o�b�i�l�e�.�h�o�m�e�.�p�e�r�m�i�s�s�i�o�n�.�P�R�O�V�I�D�E�R�_�I�N�S�E�R�T�_�B�A�D�G�E���,�c�o�m�.�a�n�d�d�o�e�s�.�l�a�u�n�c�h�e�r�.�p�e�r�m�i�s�s�i�o�n�.�U�P�D�A�T�E�_�C�O�U�N�T���+�c�o�m�.�m�a�j�e�u�r�.�l�a�u�n�c�h�e�r�.�p�e�r�m�i�s�s�i�o�n�.�U�P�D�A�T�E�_�B�A�D�G�E���3�c�o�m�.�h�u�a�w�e�i�.�a�n�d�r�o�i�d�.�l�a�u�n�c�h�e�r�.�p�e�r�m�i�s�s�i�o�n�.�C�H�A�N�G�E�_�B�A�D�G�E���4�c�o�m�.�h�u�a�w�e�i�.�a�n�d�r�o�i�d�.�l�a�u�n�c�h�e�r�.�p�e�r�m�i�s�s�i�o�n�.�R�E�A�D�_�S�E�T�T�I�N�G�S���5�c�o�m�.�h�u�a�w�e�i�.�a�n�d�r�o�i�d�.�l�a�u�n�c�h�e�r�.�p�e�r�m�i�s�s�i�o�n�.�W�R�I�T�E�_�S�E�T�T�I�N�G�S���!�a�n�d�r�o�i�d�.�p�e�r�m�i�s�s�i�o�n�.�R�E�A�D�_�A�P�P�_�B�A�D�G�E���*�c�o�m�.�o�p�p�o�.�l�a�u�n�c�h�e�r�.�p�e�r�m�i�s�s�i�o�n�.�R�E�A�D�_�S�E�T�T�I�N�G�S���+�c�o�m�.�o�p�p�o�.�l�a�u�n�c�h�e�r�.�p�e�r�m�i�s�s�i�o�n�.�W�R�I�T�E�_�S�E�T�T�I�N�G�S���0�m�e�.�e�v�e�r�y�t�h�i�n�g�.�b�a�d�g�e�r�.�p�e�r�m�i�s�s�i�o�n�.�B�A�D�G�E�_�C�O�U�N�T�_�R�E�A�D���1�m�e�.�e�v�e�r�y�t�h�i�n�g�.�b�a�d�g�e�r�.�p�e�r�m�i�s�s�i�o�n�.�B�A�D�G�E�_�C�O�U�N�T�_�W�R�I�T�E���@�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i�r t u a l�d�j�a�p�p�.�D�Y�N�A�M�I�C�_�R�E�C�E�I�V�E�R�_�N�O�T�_�E�X�P�O�R�T�E�D�_�P�E�R�M�I�S�S�I�O�N�����a�p�p�l�i�c�a�t�i�o�n���&�a�n�d�r�o�i�d�x�.�c�o�r�e�.�a�p�p�.�C�o�r�e�C�o�m�p�o�n�e�n�t�F�a�c�t�o�r�y���'�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i�r�t u a l�d�j�.v i r�t�u�a�l�D�J�A�p�p�l�i�c�a�t�i�o�n��� �m�e�t�a�-�d�a�t�a���(�g�o�o�g�l�e�_�a�n�a�l�y�t�i�c�s�_�a�d�i�d�_�c�o�l�l�e�c�t�i�o�n�_�e�n�a�b�l�e�d���+�g�o�o�g�l�e�_�a�n�a�l�y�t�i�c�s�_�d�e�f�e�r�r�e�d�_�d�e�e�p�_�l�i�n�k�_�e�n�a�b�l�e�d���3�g�o�o�g�l�e�_�a�n�a�l�y�t�i�c�s�_�a�u�t�o�m�a�t�i�c�_�s�c�r�e�e�n�_�r�e�p�o�r�t�i�n�g�_�e�n�a�b�l�e�d���9�g�o�o�g�l�e�_�a�n�a�l�y�t�i�c�s�_�d�e�f�a�u�l�t�_�a�l�l�o�w�_�a�d�_�p�e�r�s�o�n�a�l�i�z�a�t�i�o�n�_�s�i�g�n�a�l�s���)�g�o�o�g�l�e�_�a�n�a�l�y�t�i�c�s�_�s�s�a�i�d�_�c�o�l�l�e�c�t�i�o�n�_�e�n�a�b�l�e�d���5�f�i�r�e�b�a�s�e�_�i�n�a�p�p�_�m�e�s�s�a�g�i�n�g�_�a�u�t�o�_�d�a�t�a�_�c�o�l�l�e�c�t�i�o�n�_�e�n�a�b�l�e�d���#�f�i�r�e�b�a�s�e�_�p�e�r�f�o�r�m�a�n�c�e�_�l�o�g�c�a�t�_�e�n�a�b�l�e�d���'�f�i�r�e�b�a�s�e�_�p�e�r�f�o�r�m�a�n�c�e�_�c�o�l�l�e�c�t�i�o�n�_�e�n�a�b�l�e�d���+�f�i�r�e�b�a�s�e�_�c�r�a�s�h�l�y�t�i�c�s�_�c�o�l�l�e�c�t�i�o�n�_�d�e�a�c�t�i�v�a�t�e�d���'�f�i�r�e�b�a�s�e�_�c�r�a�s�h�l�y�t�i�c�s�_�c�o�l�l�e�c�t�i�o�n�_�e�n�a�b�l�e�d���$�f�i�r�e�b�a�s�e�_�m�e�s�s�a�g�i�n�g�_�a�u�t�o�_�i�n�i�t�_�e�n�a�b�l�e�d���%�f�i�r�e�b�a�s�e�_�a�n�a�l�y�t�i�c�s�_�c�o�l�l�e�c�t�i�o�n�_�e�n�a�b�l�e�d���)�f�i�r�e�b�a�s�e�_�a�n�a�l�y�t�i�c�s�_�c�o�l�l�e�c�t�i�o�n�_�d�e�a�c�t�i�v�a�t�e�d���!�f�i�r�e�b�a�s�e�_�c�r�a�s�h�_�c�o�l�l�e�c�t�i�o�n�_�e�n�a�b�l�e�d�����p�r�o�v�i�d�e�r���3�c�o�m�.�m�i�x�v�i�d�e�o.s�.�c�r�o�s�s�d�j�.�p�r�o�v�i�d�e�r�s�.�v.i r t u a l�C�o�n�t�e�n�t�P�r�o�v�i�d�e�r�����a�c�t�i�v�i�t�y���)�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i r t u a l�d�j�.�S�p�l�a�s�h�S�c�r�e�e�n�A�c�t�i�v�i�t�y��� �i�n�t�e�n�t�-�f�i�l�t�e�r�����a�n�d�r�o�i�d�.�i�n�t�e�n�t�.�a�c�t�i�o�n�.�M�A�I�N��� �a�n�d�r�o�i�d�.�i�n�t�e�n�t�.�c�a�t�e�g�o�r�y�.�L�A�U�N�C�H�E�R���.�c�o�m�.�m�i�x�v�i�d�e�o.s�.�v i�r�t u a l�d�j�.�a�p�p�.�v i�r�t�u a l�D�e�e�p�L�i�n�k�A�c�t�i�v�i�t�y�����a�n�d�r�o�i�d�.�i�n�t�e�n�t�.�c�a�t�e�g�o�r�y�.�D�E�F�A�U�L�T���"�c�o�m�.�m�i�x�v�i d e o s�. v i r t u a l�d�j�a�p�p�.�c�o�l�l�e�c�t�i�o�n���$�c�o�m�.�m�i�x�v�i�d�e�o s�. v i r t u a l�d�j�.�v i r t u a l�D�J�A�c�t�i�v�i�t�y���'�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i r t u a l�d�j�.�C�o�l�l�e�c�t�i�o�n�A�c�t�i�v�i�t�y�����a�n�d�r�o�i�d�.�s�u�p�p�o�r�t�.�P�A�R�E�N�T�_�A�C�T�I�V�I�T�Y���%�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i r t u a l�d�j�.�S�e�t�t�i�n�g�s�A�c�t�i�v�i�t�y���$�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i r t u a l�d�j�.�M�y�M�i�x�e�s�A�c�t�i�v�i�t�y���&�c�o�m�.�m�i�x�v�i�b d�e�o s�. v i r t u a l�d�j�.�E�d�i�t�M�y�M�i�x�A�c�t�i�v�i�t�y���-�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i r t u a l�d�j�.�A�d�d�P�l�a�y�l�i�s�t�S�o�n�g�s�A�c�t�i�v�i�t�y���-�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i r t u a l�d�j�.�a�p�p�.�A�u�t�o�m�i�x�Q�u�e�u�e�A�c�t�i�v�i�t�y���.�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i r t u a l�d�j�.�E�d�i�t�P�l�a�y�l�i�s�t�S�o�n�g�s�A�c�t�i�v�i�t�y���1�c�o�m�.�m�i�x�v�i�d�e�o s�. v i r t u a l d�j�.�a�p�p�.�v i r t u a l�D�J�S�t�o�r�e�P�a�c�k�A�c�t�i�v�i�t�y���8�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i r t u a l�d�j�.�a�p�p�.�v i r t u a l�D�J�S�t�o�r�e�P�a�c�k�D�e�t�a�i�l�s�A�c�t�i�v�i�t�y���(�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i r t u a l�d�j�.�N�o�t�i�f�i�c�a�t�i�o�n�W�e�b�v�i�e�w���&�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i r t u a l�d�j�.�a�p�p�.�A�b�o�u�t�A�c�t�i�v�i�t�y���6.5�c�o�m�.�m�i�x�v�i�d�e�o s�. V i r t u a l�d�j�.�a�p�p�.�v i r t u a l d j�I�n�t�e�r�s�t�i�t�i�a�l�A�d�s�A�c�t�i�v�i�t�y���.�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i r t u a l�d�j�.�a�p�p�.�R�e�w�a�r�d�e�d�V�i�d�e�o s�A�c�t�i�v�i�t�y���0�c�o�m�.�m�i�x�v�i�b d�e�o s�.�v i r t u a l�d�j�.�a�p�p�.�F�x�R�e�w�a�r�d�e�d�V�i�d�e�o s�A�c�t�i�v�i�t�y���"�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i r t u a l�d�j�.�S�h�a�r�e�A�c�t�i�v�i�t�y�����s�e�r�v�i�c�e���+�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i r t u a l�d�j�.�s�e�r�v�i�c�e�s�.�U�p�l�o�a�d�S�e�r�v�i�c�e�����r�e�c�e�i�v�e�r���4�c�o�m�.�m�i�x�v�i�d�e�o s�.�c�o�m�m�o�n�.�u�t�i�l�s�.�R�e�m�o�t�e�C�o�n�t�r�o�l�C�l�i�e�n�t�M�a�n�a�g�e�r���"�a�n�d�r�o�i�d�.�i�n�t�e�n�t�.�a�c�t�i�o�n�.�M�E�D�I�A�_�B�U�T�T�O�N���*�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i r t u a l�d�j�.�s�e�r�v�i�c�e�s�.�M�u�s�i�c�& v i d e o S�e�r�v�i�c�e���8�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�c�o�m�p�o�n�e�n�t�s�.�C�o�m�p�o�n�e�n�t�D�i�s�c�o�v�e�r�y�S�e�r�v�i�c�e���W�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�c�o�m�p�o�n�e�n�t�s�:�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�m�e�s�s�a�g�i�n�g�.�F�i�r�e�b�a�s�e�M�e�s�s�a�g�i�n�g�R�e�g�i�s�t�r�a�r���1�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�c�o�m�p�o�n�e�n�t�s�.�C�o�m�p�o�n�e�n�t�R�e�g�i�s�t�r�a�r���Z�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�c�o�m�p�o�n�e�n�t�s�:�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�c�r�a�s�h�l�y�t�i�c�s�.�n�d�k�.�C�r�a�s�h�l�y�t�i�c�s�N�d�k�R�e�g�i�s�t�r�a�r���U�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�c�o�m�p�o�n�e�n�t�s�:�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�r�e�m�o�t�e�c�o�n�f�i�g�.�R�e�m�o�t�e�C�o�n�f�i�g�R�e�g�i�s�t�r�a�r���M�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�c�o�m�p�o�n�e�n�t�s�:�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�a�b�t�.�c�o�m�p�o�n�e�n�t�.�A�b�t�R�e�g�i�s�t�r�a�r���S�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�c�o�m�p�o�n�e�n�t�s�:�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�c�r�a�s�h�l�y�t�i�c�s�.�C�r�a�s�h�l�y�t�i�c�s�R�e�g�i�s�t�r�a�r���k�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�c�o�m�p�o�n�e�n�t�s�:�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�a�n�a�l�y�t�i�c�s�.�c�o�n�n�e�c�t�o�r�.�i�n�t�e�r�n�a�l�.�A�n�a�l�y�t�i�c�s�C�o�n�n�e�c�t�o�r�R�e�g�i�s�t�r�a�r���_�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�c�o�m�p�o�n�e�n�t�s�:�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�i�n�s�t�a�l�l�a�t�i�o�n�s�.�F�i�r�e�b�a�s�e�I�n�s�t�a�l�l�a�t�i�o�n�s�R�e�g�i�s�t�r�a�r���S�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�c�o�m�p�o�n�e�n�t�s�:�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�d�a�t�a�t�r�a�n�s�p�o�r�t�.�T�r�a�n�s�p�o�r�t�R�e�g�i�s�t�r�a�r���3�c�o�m�.�g�o�o�g�l�e�.�a�n�d�r�o�i�d�.�g�m�s�.�c�o�m�m�o�n�.�a�p�i�.�G�o�o�g�l�e�A�p�i�A�c�t�i�v�i�t�y���,�c�o�m�.�m�i�x�v�i�d�e�o s�.�v�i�r�t�u�a l d�j�a�p�p�.�f�i�r�e�b�a�s�e�i�n�i�t�p�r�o�v�i�d�e�r���1�c�o�m�.�g�o�o�g�l�e�.�f�i�r�e�b�a�s�e�.�p�r�o�v�i�d�e�r�.�F�i�r�e�b�a�s�e�I�n�i�t�P�r�o�v�i�d�e�r���(�c�o�m�.�m�i�x�v�i�d�e� o s�.�v.r.t.u.a.l �d�j�a�p�p�.�a�n�d�r�o�i�d�x�-�s�t�a�r�t�u�p���'�a�n�d�r�o�i�d�x�.�s�t�a�r�t�u�p�.�I�n�i�t�i�a�l�i�z�a�t�i�o�n�P�r�o�v�i�d�e�r���$�a�n�d�r�o�i�d�x�.�w�o�r�k�.�W�o�r�k�M�a�n�a�g�e�r�I�n�i�t�i�a�l�i�z�e�r�����a�n�d�r�o�i�d�x�.�s�t�a�r�t�u�p���+�a�n�d�r�o�i�d�x�.�e�m�o�j�i�2�.�t�e�x�t�.�E�m�o�j�i�C�o�m�p�a�t�I�n�i�t�i�a�l�i�z�e�r���.�a�n�d�r�o�i�d�x�.�l�i�f�e�c�y�c�l�e�.�P�r�o�c�e�s�s�L�i�f�e�c�y�c�l�e�I�n�i�t�i�a�l�i�z�e�r���5�a�n�d�r�o�i�d�x�.�p�r�o�f�i�l�e�i�n�s�t�a�l�l�e�r�.�P�r�o�f�i�l�e�I�n�s�t�a�l�l�e�r�I�n�i�t�i�a�l�i�z�e�r���<�a�n�d�r�o�i�d�x�.�w�o�r�k�.�i�m�p�l�.�b�a�c�k�g�r�o�u�n�d�.�s�y�s�t�e�m�a�l�a�r�m�.�S�y�s�t�e�m�A�l�a�r�m�S�e�r�v�i�c�e���8�a�n�d�r�o�i�d�x�.�w�o�r�k�.�i�m�p�l�.�b�a�c�k�g�r�o�u�n�d�.�s�y�s�t�e�m�j�o�b�.�S�y�s�t�e�m�J�o�b�S�e�r�v�i�c�e���#�a�n�d�r�o�i�d�.�p�e�r�m�i�s�s�i�o�n�.�B�I�N�D�_�J�O�B�_�S�E�R�V�I�C�E���5�a�n�d�r�o�i�d�x�.�w�o�r�k�.�i�m�p�l�.�f�o�r�e�g�r�o�u�n�d�.�S�y�s�t�e�m�F�o�r�e�g�r�o�u�n�d�S�e�r�v�i�c�e���<�a�n�d�r�o�i�d�x�.�w�o�r�k�.�i�m�p�l�.�u�t�i�l�s�.�F�o�r�c�e�S�t�o�p�R�u�n�n�a�b�l�e�$�B�r�o�a�d�c�a�s�t�R�e�c�e�i�v�e�r���N�a�n�d�r�o�i�d�x�.�w�o�r�k�.�i�m�p�l�.�b�a�c�k�g�r�o�u�n�d�.�s�y�s�t�e�m�a�l�a�r�m�.�C�o�n�s�t�r�a�i�n�t�P�r�o�x�y�$�B�a�t�t�e�r�y�C�h�a�r�g�i�n�g�P�r�o�x�y���,�a�n�d�r�o�i�d�.�i�n�t�e�n�t�.�a�c�t�i�o�n�.�A�C�T�I�O�N�_�P�O�W�E�R�_�C�O�N�N�E�C�T�E�D���/�a�n�d�r�o�i�d�.�i�n�t�e�n�t�.�a�c�t�i�o�n�.�A�C�T�I�O�N�_�P�O�W�E�R�_�D�I�S�C�O�N�N�E�C�T�E�D���L�a�n�d�r�o�i�d�x�.�w�o�r�k�.�i�m�p�l�.�b�a�c�k�g�r�o�u�n�d�.�s�y�s�t�e�m�a�l�a�r�m�.�C�o�n�s�t�r�a�i�n�t�P�r�o�x�y�$�B�a�t�t�e�r�y�N�o�t�L�o�w�P�r�o�x�y���"�a�n�d�r�o�i�d�.�i�n�t�e�n�t�.�a�c�t�i�o�n�.�B�A�T�T�E�R�Y�_�O�K�A�Y���!�a�n�d�r�o�i�d�.�i�n�t�e�n�t�.�a�c�t�i�o�n�.�B�A�T�T�E�R�Y�_�L�O�W���L�a�n�d�r�o�i�d�x�.�w�o�r�k�.�i�m�p�l�.�b�a�c�k�g�r�o�u�n�d�.�s�y�s�t�e�m�a�l�a�r�m�.�C�o�n�s�t�r�a�i�n�t�P�r�o�x�y�$�S�t�o�r�a�g�e�N�o�t�L�o�w�P�r�o�x�y���(�a�n�d�r�o�i�d�.�i�n�t�e�n�t�.�a�c�t�i�o�n�.�D�E�V�I�C�E�_�S�T�O�R�A�G�E�_�L�O�W���'�a�n�d�r�o�i�d�.�i�n�t�e�n�t�.�a�c�t�i�o�n�.�D�E�V�I�C�E�_�S�T�O�R�A�G�E�_�O�K���K�a�n�d�r�o�i�d�x�.�w�o�r�k�.�i�m�p�l�.�b�a�c�k�g�r�o�u�n�d�.�s�y�s�t�e�m�a�l�a�r�m�.�C�o�n�s�t�r�a�i�n�t�P�r�o�x�y�$�N�e�t�w�o�r�k�S�t�a�t�e�P�r�o�x�y���$�a�n�d�r�o�i�d�.�n�e�t�.�c�o�n�n�.�C�O�N�N�E�C�T�I�V�I�T�Y�_�C�H�A�N�G�E���<�a�n�d�r�o�i�d�x�.�w�o�r�k�.�i�m�p�l�.�b�a�c�k�g�r�o�u�n�d�.�s�y�s�t�e�m�a�l�a�r�m�.�R�e�s�c�h�e�d�u�l�e�R�e�c�e�i�v�e�r���$�a�n�d�r�o�i�d�.�i�n�t�e�n�t�.�a�c�t�i�o�n�.�B�O�O�T�_�C�O�M�P�L�E�T�E�D�����a�n�d�r�o�i�d�.�i�n�t�e�n�t�.�a�c�t�i�o�n�.�T�I�M�E�_�S�E�T���&�a�n�d�r�o�i�d�.�i�n�t�e�n�t�.�a�c�t�i�o�n�.�T�I�M�E�Z�O�N�E�_�C�H�A�N�G�E�D���G�a�n�d�r�o�i�d�x�.�w�o�r�k�.�i�m�p�l�.�b�a�c�k�g�r�o�u�n�d�.�s�y�s�t�e�m�a�l�a�r�m�.�C�o�n�s�t�r�a�i�n�t�P�r�o�x�y�U�p�d�a�t�e�R�e�c�e�i�v�e�r���7�a�n�d�r�o�i�d�x�.�w�o�r�k�.�i�m�p�l�.�b�a�c�k�g�r�o�u�n�d�.�s�y�s�t�e�m�a�l�a�r�m�.�U�p�d�a�t�e�P�r�o�x�i�e�s���2�a�n�d�r�o�i�d�x�.�w�o�r�k�.�i�m�p�l�.�d�i�a�g�n�o�s�t�i�c�s�.�D�i�a�g�n�o�s�t�i�c�s�R�e�c�e�i�v�e�r�����a�n�d�r�o�i�d�.�p�e�r�m�i�s�s�i�o�n�.�D�U�M�P���-�a�n�d�r�o�i�d�x�.�w�o�r�k�.�d�i�a�g�n�o�s�t�i�c�s�.�R�E�Q�U�E�S�T�_�D�I�A�G�N�O�S�T�I�C�S��� �u�s�e�s�-�l�i�b�r�a�r�y�����a�n�d�r�o�i�d�x�.�w�i�n�d�o�w�.�e�x�t�e�n�s�i�o�n�s�����a�n�d�r�o�i�d�x�.�w�i�n�d�o�w�.�s�i�d�e�c�a�r���,�c�o�m�.�m�i�x�v�i�d�e�o s�.�v i r t u a l�d�j�a�p�p�.�c�o�m�.�s�q�u�a�r�e�u�p�.�p�i�c�a�s�s�o���$�c�o�m�.�s�q�u�a�r�e�u�p�.�p�i�c�a�s�s�o�.�P�i�c�a�s�s�o�P�r�o�v�i�d�e�r���0�a�n�d�r�o�i�d�x�.�p�r�o�f�i�l�e�i�n�s�t�a�l�l�e�r�.�P�r�o�f�i�l�e�I�n�s�t�a�l�l�R�e�c�e�i�v�e�r���0�a�n�d�r�o�i�d�x�.�p�r�o�f�i�l�e�i�n�s�t�a�l�l�e�r�.�a�c�t�i�o�n�.�I�N�S�T�A�L�L�_�P�R�O�F�I�L�E���*�a�n�d�r�o�i�d�x�.�p�r�o�f�i�l�e�i�n�s�t�a�l�l�e�r�.�a�c�t�i�o�n�.�S�K�I�P�_�F�I�L�E���.�a�n�d�r�o�i�d�x�.�r�o�o�m�.�M�u�l�t�i�I�n�s�t�a�n�c�e�I�n�v�a�l�i�d�a�t�i�o�n�S�e�r�v�i�c�e�������������r���s����������� ���p�����������q���'��� �������z�����������Z�������������������$���������������������������+���j�����������������������������������!���"�����������������������'���������������"������������������~"�������)�������)���"��������������� ���"�������(�������(�������$���*�������*�������%���+������� �������&���(������� �������L���������������,���������������"�������������������"���������������!�����������������������,�������L���������������-���������������"�������.�������.���"���������������������������������������-�������L���������������-���������������"�������/�������/���"���������������������������������������-�������L���������������-���������������"�������0�������0���"���������������������������������������-�������L���������������-���������������"�������1�������1���"���������������������������������������-�������L���������������2���������������"�������3�������3���"���������������������������������������2�������8��� �����������2���������������"�������4�������4����������� �����������2�������8��� �����������2���������������"�������5�������5����������� �����������2�������8���������������2���������������"�������6�������6�����������������������2�������8��� �����������2���������������"�������7�������7����������� �����������2�������8��� �����������2���������������"�������8�������8����������� �����������2�������8���������������2���������������"�������9�������9�����������������������2�������8���������������2���������������"�������:�������:�����������������������2�������$���������������;�������������������$���������������<�������������������8���������������=���������������"�������>�������>�����������������������=�������8���������������?���������������"�������@�������@�����������������������?�������8���������������A���������������"��� ���B�������B�����������������������A�����������������������<�������8���������������$���������������"�������C�������C�����������������������$�������8���������������$���������������"�������D�������D�����������������������$�������8���������������$���������������"�������E�������E�����������������������$�����������������������;�������8���������������2���������������"�������F�������F�����������������������2�������8���������������2���������������"�������G�������G�����������������������2�������8���������������2���������������"�������H�������H�����������������������2�������8���������������2���������������"�������I�������I�����������������������2�������8���������������2���������������"�������J�������J�����������������������2�������8���������������2���������������"�������K�������K�����������������������2�������8��� �����������2���������������"�������L�������L����������� �����������2�������8���!�����������2���������������"�������M�������M�����������!�����������2�������8���"�����������2���������������"�������N�������N�����������"�����������2�������8���#�����������2���������������"�������O�������O�����������#�����������2�������8���$�����������2���������������"�������P�������P�����������$�����������2�������8���%�����������2���������������"�������Q�������Q�����������%�����������2�������8���&�����������2���������������"�������R�������R�����������&�����������2�������8���'�����������2���������������"�������S�������S�����������'�����������2�������8���(�����������2���������������"�������T�������T�����������(�����������2�������8���)�����������2���������������"�������U�������U�����������)�����������2�������8���*�����������2���������������"�������V�������V�����������*�����������2�������8���+�����������2���������������"�������W�������W�����������+�����������2�������8���,�����������2���������������"�������X�������X�����������,�����������2�������L���-����������� ���������������"�������Y�������Y���"��� �����������������������-����������� �������8���.�����������2���������������"�������Y�������Y�����������.�����������2�����������/�����������Z������� �������"��������������� ���"���������������X���"��� ���������������"�������\�������\���"�������������������"�������������������"�������������������"��� ���[�������[���"�������������������"�����������������������L���0�����������]���������������"�������^�������^���"���������������������������0�����������]�������L���1�����������]���������������"�������_�������_���"���������������������������1�����������]�������L���2�����������]���������������"��������������`���"���������������������������2�����������]�������L���3�����������]���������������"�������a�������a���"���������������������������3�����������]�������L���4�����������]���������������"�������b�������b���"���������������������������4�����������]�������L���5�����������]���������������"�������c�������c���"���������������������������5�����������]�������L

Expand Down Expand Up @@ -32,6 +36,19 @@ public Bitmap removeLast() {
return groupedMap.removeLast();
}

@Override
public List<BitmapInfo> getPooledBitmapInfos() {
final List<BitmapInfo> result = new ArrayList<>();
for (Map.Entry<Key, List<Bitmap>> entry : groupedMap) {
if (entry.getValue() != null) {
for (Bitmap bitmap : entry.getValue()) {
result.add(new BitmapInfo(bitmap));
}
}
}
return result;
}

@Override
public String logBitmap(Bitmap bitmap) {
return getBitmapString(bitmap);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import android.graphics.Bitmap;
import androidx.annotation.NonNull;
import com.bumptech.glide.load.engine.BitmapInfo;
import java.util.List;

/** An interface for a pool that allows users to reuse {@link android.graphics.Bitmap} objects. */
public interface BitmapPool {
Expand Down Expand Up @@ -97,4 +99,8 @@ public interface BitmapPool {
* @see android.content.ComponentCallbacks2
*/
void trimMemory(int level);

/** Returns a list of metadata for all bitmaps currently in the pool. */
@NonNull
List<BitmapInfo> getPooledBitmapInfos();
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

import android.graphics.Bitmap;
import androidx.annotation.NonNull;
import com.bumptech.glide.load.engine.BitmapInfo;
import java.util.Collections;
import java.util.List;

/**
* An {@link com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool BitmapPool} implementation
Expand Down Expand Up @@ -45,4 +48,10 @@ public void clearMemory() {
public void trimMemory(int level) {
// Do nothing.
}

@NonNull
@Override
public List<BitmapInfo> getPooledBitmapInfos() {
return Collections.emptyList();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@
import com.bumptech.glide.util.Synthetic;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;

/**
* Similar to {@link java.util.LinkedHashMap} when access ordered except that it is access ordered
Expand All @@ -17,7 +19,7 @@
* if no bitmaps of that size are present. We do not count addition or removal of bitmaps as an
* access.
*/
class GroupedLinkedMap<K extends Poolable, V> {
class GroupedLinkedMap<K extends Poolable, V> implements Iterable<Map.Entry<K, List<V>>> {
private final LinkedEntry<K, V> head = new LinkedEntry<>();
private final Map<K, LinkedEntry<K, V>> keyToEntry = new HashMap<>();

Expand Down Expand Up @@ -77,6 +79,35 @@ public V removeLast() {
return null;
}

@Override
public Iterator<Map.Entry<K, List<V>>> iterator() {
return new GroupedLinkedMapIterator();
}

private class GroupedLinkedMapIterator implements Iterator<Map.Entry<K, List<V>>> {
private LinkedEntry<K, V> currentEntry = head.next;

@Override
public boolean hasNext() {
return !currentEntry.equals(head);
}

@Override
public Map.Entry<K, List<V>> next() {
if (!hasNext()) {
throw new NoSuchElementException();
}
LinkedEntry<K, V> result = currentEntry;
currentEntry = currentEntry.next;
return result;
}

@Override
public void remove() {
throw new UnsupportedOperationException();
}
}

@Override
public String toString() {
StringBuilder sb = new StringBuilder("GroupedLinkedMap( ");
Expand Down Expand Up @@ -119,12 +150,27 @@ private static <K, V> void removeEntry(LinkedEntry<K, V> entry) {
entry.next.prev = entry.prev;
}

private static class LinkedEntry<K, V> {
private static final class LinkedEntry<K, V> implements Map.Entry<K, List<V>> {
@Synthetic final K key;
private List<V> values;
LinkedEntry<K, V> next;
LinkedEntry<K, V> prev;

@Override
public K getKey() {
return key;
}

@Override
public List<V> getValue() {
return values;
}

@Override
public List<V> setValue(List<V> value) {
throw new UnsupportedOperationException();
}

// Used only for the first item in the list which we will treat specially and which will not
// contain a value.
LinkedEntry() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,12 @@
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.bumptech.glide.load.engine.BitmapInfo;
import com.bumptech.glide.util.Synthetic;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
Expand Down Expand Up @@ -256,6 +258,12 @@ public void trimMemory(int level) {
}
}

@NonNull
@Override
public synchronized List<BitmapInfo> getPooledBitmapInfos() {
return strategy.getPooledBitmapInfos();
}

private synchronized void trimToSize(long size) {
while (currentSize > size) {
final Bitmap removed = strategy.removeLast();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import android.graphics.Bitmap;
import androidx.annotation.Nullable;
import com.bumptech.glide.load.engine.BitmapInfo;
import java.util.List;

interface LruPoolStrategy {
void put(Bitmap bitmap);
Expand All @@ -17,4 +19,6 @@ interface LruPoolStrategy {
String logBitmap(int width, int height, Bitmap.Config config);

int getSize(Bitmap bitmap);

List<BitmapInfo> getPooledBitmapInfos();
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,13 @@
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.annotation.VisibleForTesting;
import com.bumptech.glide.load.engine.BitmapInfo;
import com.bumptech.glide.util.Synthetic;
import com.bumptech.glide.util.Util;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.NavigableMap;
import java.util.TreeMap;
Expand Down Expand Up @@ -114,6 +117,19 @@ public Bitmap removeLast() {
return removed;
}

@Override
public List<BitmapInfo> getPooledBitmapInfos() {
final List<BitmapInfo> result = new ArrayList<>();
for (Map.Entry<Key, List<Bitmap>> entry : groupedMap) {
if (entry.getValue() != null) {
for (Bitmap bitmap : entry.getValue()) {
result.add(new BitmapInfo(bitmap));
}
}
}
return result;
}

private void decrementBitmapOfSize(Integer size, Bitmap removed) {
Bitmap.Config config = removed.getConfig();
NavigableMap<Integer, Integer> sizes = getSizesForConfig(config);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,12 @@
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.annotation.VisibleForTesting;
import com.bumptech.glide.load.engine.BitmapInfo;
import com.bumptech.glide.util.Synthetic;
import com.bumptech.glide.util.Util;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.NavigableMap;

/**
Expand Down Expand Up @@ -67,6 +71,19 @@ public Bitmap removeLast() {
return removed;
}

@Override
public List<BitmapInfo> getPooledBitmapInfos() {
final List<BitmapInfo> result = new ArrayList<>();
for (Map.Entry<Key, List<Bitmap>> entry : groupedMap) {
if (entry.getValue() != null) {
for (Bitmap bitmap : entry.getValue()) {
result.add(new BitmapInfo(bitmap));
}
}
}
return result;
}

private void decrementBitmapOfSize(Integer size) {
Integer current = sortedSizes.get(size);
if (current == 1) {
Expand Down
Loading
Loading