Merge "Deprecate LoaderCallback, create MetadataLoaderRepoCallback" into oc-support-26.0-dev
diff --git a/api/26.0.0-SNAPSHOT.txt b/api/26.0.0-SNAPSHOT.txt
index 4d70979..9e9a646 100644
--- a/api/26.0.0-SNAPSHOT.txt
+++ b/api/26.0.0-SNAPSHOT.txt
@@ -1911,7 +1911,8 @@
}
public static abstract class EmojiCompat.Config {
- ctor protected EmojiCompat.Config(android.support.text.emoji.EmojiCompat.MetadataLoader);
+ ctor protected EmojiCompat.Config(android.support.text.emoji.EmojiCompat.MetadataRepoLoader);
+ ctor protected deprecated EmojiCompat.Config(android.support.text.emoji.EmojiCompat.MetadataLoader);
method public android.support.text.emoji.EmojiCompat.Config registerInitCallback(android.support.text.emoji.EmojiCompat.InitCallback);
method public android.support.text.emoji.EmojiCompat.Config setEmojiSpanIndicatorColor(int);
method public android.support.text.emoji.EmojiCompat.Config setEmojiSpanIndicatorEnabled(boolean);
@@ -1925,16 +1926,26 @@
method public void onInitialized();
}
- public static abstract class EmojiCompat.LoaderCallback {
+ public static abstract deprecated class EmojiCompat.LoaderCallback {
ctor public EmojiCompat.LoaderCallback();
method public abstract void onFailed(java.lang.Throwable);
method public abstract void onLoaded(android.support.text.emoji.MetadataRepo);
}
- public static abstract interface EmojiCompat.MetadataLoader {
+ public static abstract deprecated interface EmojiCompat.MetadataLoader {
method public abstract void load(android.support.text.emoji.EmojiCompat.LoaderCallback);
}
+ public static abstract interface EmojiCompat.MetadataRepoLoader {
+ method public abstract void load(android.support.text.emoji.EmojiCompat.MetadataRepoLoaderCallback);
+ }
+
+ public static abstract class EmojiCompat.MetadataRepoLoaderCallback {
+ ctor public EmojiCompat.MetadataRepoLoaderCallback();
+ method public abstract void onFailed(java.lang.Throwable);
+ method public abstract void onLoaded(android.support.text.emoji.MetadataRepo);
+ }
+
public abstract class EmojiSpan extends android.text.style.ReplacementSpan {
method public int getSize(android.graphics.Paint, java.lang.CharSequence, int, int, android.graphics.Paint.FontMetricsInt);
}
diff --git a/emoji/bundled/src/android/support/text/emoji/bundled/BundledEmojiCompatConfig.java b/emoji/bundled/src/android/support/text/emoji/bundled/BundledEmojiCompatConfig.java
index 37fc444..97ea363 100644
--- a/emoji/bundled/src/android/support/text/emoji/bundled/BundledEmojiCompatConfig.java
+++ b/emoji/bundled/src/android/support/text/emoji/bundled/BundledEmojiCompatConfig.java
@@ -43,7 +43,7 @@
super(new BundledMetadataLoader(context));
}
- private static class BundledMetadataLoader implements EmojiCompat.MetadataLoader {
+ private static class BundledMetadataLoader implements EmojiCompat.MetadataRepoLoader {
private final Context mContext;
private BundledMetadataLoader(@NonNull Context context) {
@@ -52,7 +52,7 @@
@Override
@RequiresApi(19)
- public void load(@NonNull EmojiCompat.LoaderCallback loaderCallback) {
+ public void load(@NonNull EmojiCompat.MetadataRepoLoaderCallback loaderCallback) {
Preconditions.checkNotNull(loaderCallback, "loaderCallback cannot be null");
final InitRunnable runnable = new InitRunnable(mContext, loaderCallback);
final Thread thread = new Thread(runnable);
@@ -64,11 +64,11 @@
@RequiresApi(19)
private static class InitRunnable implements Runnable {
private static final String FONT_NAME = "NotoColorEmojiCompat.ttf";
- private final EmojiCompat.LoaderCallback mLoaderCallback;
+ private final EmojiCompat.MetadataRepoLoaderCallback mLoaderCallback;
private final Context mContext;
private InitRunnable(final Context context,
- final EmojiCompat.LoaderCallback loaderCallback) {
+ final EmojiCompat.MetadataRepoLoaderCallback loaderCallback) {
mContext = context;
mLoaderCallback = loaderCallback;
}
diff --git a/emoji/core/src/android/support/text/emoji/EmojiCompat.java b/emoji/core/src/android/support/text/emoji/EmojiCompat.java
index 5d816e5..26efbba 100644
--- a/emoji/core/src/android/support/text/emoji/EmojiCompat.java
+++ b/emoji/core/src/android/support/text/emoji/EmojiCompat.java
@@ -180,9 +180,16 @@
private final CompatInternal mHelper;
/**
- * MetadataLoader instance given in the Config instance.
+ * Metadata loader instance given in the Config instance.
*/
- private final MetadataLoader mMetadataLoader;
+ private final MetadataRepoLoader mMetadataLoader;
+
+ /**
+ * Old metadata loader instance given in the Config instance.
+ * @deprecated Will be removed soon.
+ */
+ @Deprecated
+ private final MetadataLoader mLegacyMetadataLoader;
/**
* @see Config#setReplaceAll(boolean)
@@ -210,6 +217,7 @@
mEmojiSpanIndicatorEnabled = config.mEmojiSpanIndicatorEnabled;
mEmojiSpanIndicatorColor = config.mEmojiSpanIndicatorColor;
mMetadataLoader = config.mMetadataLoader;
+ mLegacyMetadataLoader = config.mLegacyMetadataLoader;
mMainHandler = new Handler(Looper.getMainLooper());
mInitCallbacks = new ArraySet<>();
if (config.mInitCallbacks != null && !config.mInitCallbacks.isEmpty()) {
@@ -733,6 +741,44 @@
/**
* Interface to load emoji metadata.
*/
+ public interface MetadataRepoLoader {
+ /**
+ * Start loading the metadata. When the loading operation is finished {@link
+ * MetadataRepoLoaderCallback#onLoaded(MetadataRepo)} or
+ * {@link MetadataRepoLoaderCallback#onFailed(Throwable)} should be called. When used on
+ * devices running API 18 or below, this function is never called.
+ *
+ * @param loaderCallback callback to signal the loading state
+ */
+ void load(@NonNull MetadataRepoLoaderCallback loaderCallback);
+ }
+
+ /**
+ * Callback to inform EmojiCompat about the state of the metadata load. Passed to
+ * MetadataRepoLoader during {@link MetadataRepoLoader#load(MetadataRepoLoaderCallback)} call.
+ */
+ public abstract static class MetadataRepoLoaderCallback {
+ /**
+ * Called by {@link MetadataRepoLoader} when metadata is loaded successfully.
+ *
+ * @param metadataRepo MetadataRepo instance, cannot be {@code null}
+ */
+ public abstract void onLoaded(@NonNull MetadataRepo metadataRepo);
+
+ /**
+ * Called by {@link MetadataRepoLoader} if an error occurs while loading the metadata.
+ *
+ * @param throwable the exception that caused the failure, {@code nullable}
+ */
+ public abstract void onFailed(@Nullable Throwable throwable);
+ }
+
+ /**
+ * Interface to load emoji metadata.
+ *
+ * @deprecated Use {@link MetadataRepoLoader} instead.
+ */
+ @Deprecated
public interface MetadataLoader {
/**
* Start loading the metadata. When the loading operation is finished {@link
@@ -748,7 +794,10 @@
/**
* Callback to inform EmojiCompat about the state of the metadata load. Passed to MetadataLoader
* during {@link MetadataLoader#load(LoaderCallback)} call.
+ *
+ * @deprecated Use {@link MetadataRepoLoaderCallback} instead.
*/
+ @Deprecated
public abstract static class LoaderCallback {
/**
* Called by {@link MetadataLoader} when metadata is loaded successfully.
@@ -772,7 +821,8 @@
* @see #init(EmojiCompat.Config)
*/
public abstract static class Config {
- private final MetadataLoader mMetadataLoader;
+ private final MetadataRepoLoader mMetadataLoader;
+ private final MetadataLoader mLegacyMetadataLoader;
private boolean mReplaceAll;
private Set<InitCallback> mInitCallbacks;
private boolean mEmojiSpanIndicatorEnabled;
@@ -781,11 +831,25 @@
/**
* Default constructor.
*
+ * @param metadataLoader MetadataRepoLoader instance, cannot be {@code null}
+ */
+ protected Config(@NonNull final MetadataRepoLoader metadataLoader) {
+ Preconditions.checkNotNull(metadataLoader, "metadataLoader cannot be null.");
+ mMetadataLoader = metadataLoader;
+ mLegacyMetadataLoader = null;
+ }
+
+ /**
+ * Default constructor.
+ *
* @param metadataLoader MetadataLoader instance, cannot be {@code null}
+ *
+ * @deprecated Use constructor with MetadataRepoLoader instead.
*/
protected Config(@NonNull final MetadataLoader metadataLoader) {
Preconditions.checkNotNull(metadataLoader, "metadataLoader cannot be null.");
- mMetadataLoader = metadataLoader;
+ mLegacyMetadataLoader = metadataLoader;
+ mMetadataLoader = null;
}
/**
@@ -860,11 +924,11 @@
}
/**
- * Returns the {@link MetadataLoader}.
+ * Returns the {@link MetadataRepoLoader}.
* @hide
*/
@RestrictTo(LIBRARY_GROUP)
- public final MetadataLoader getMetadataLoader() {
+ public final MetadataRepoLoader getMetadataLoader() {
return mMetadataLoader;
}
}
@@ -978,17 +1042,34 @@
@Override
void loadMetadata() {
try {
- mEmojiCompat.mMetadataLoader.load(new LoaderCallback() {
- @Override
- public void onLoaded(@NonNull MetadataRepo metadataRepo) {
- onMetadataLoadSuccess(metadataRepo);
- }
+ if (mEmojiCompat.mMetadataLoader != null) {
+ final MetadataRepoLoaderCallback callback = new MetadataRepoLoaderCallback() {
+ @Override
+ public void onLoaded(@NonNull MetadataRepo metadataRepo) {
+ onMetadataLoadSuccess(metadataRepo);
+ }
- @Override
- public void onFailed(@Nullable Throwable throwable) {
- mEmojiCompat.onMetadataLoadFailed(throwable);
- }
- });
+ @Override
+ public void onFailed(@Nullable Throwable throwable) {
+ mEmojiCompat.onMetadataLoadFailed(throwable);
+ }
+ };
+ mEmojiCompat.mMetadataLoader.load(callback);
+ } else {
+ final LoaderCallback callback = new LoaderCallback() {
+ @Override
+ public void onLoaded(@NonNull MetadataRepo metadataRepo) {
+ onMetadataLoadSuccess(metadataRepo);
+ }
+
+ @Override
+ public void onFailed(@Nullable Throwable throwable) {
+ mEmojiCompat.onMetadataLoadFailed(throwable);
+ }
+ };
+ mEmojiCompat.mLegacyMetadataLoader.load(callback);
+ }
+
} catch (Throwable t) {
mEmojiCompat.onMetadataLoadFailed(t);
}
diff --git a/emoji/core/src/android/support/text/emoji/FontRequestEmojiCompatConfig.java b/emoji/core/src/android/support/text/emoji/FontRequestEmojiCompatConfig.java
index ae7cd14..b266473 100644
--- a/emoji/core/src/android/support/text/emoji/FontRequestEmojiCompatConfig.java
+++ b/emoji/core/src/android/support/text/emoji/FontRequestEmojiCompatConfig.java
@@ -64,10 +64,10 @@
/**
- * MetadataLoader implementation that uses FontsContractCompat and TypefaceCompat to load a
+ * MetadataRepoLoader implementation that uses FontsContractCompat and TypefaceCompat to load a
* given FontRequest.
*/
- private static class FontRequestMetadataLoader implements EmojiCompat.MetadataLoader {
+ private static class FontRequestMetadataLoader implements EmojiCompat.MetadataRepoLoader {
private final Context mContext;
private final FontRequest mRequest;
private final FontsContractDelegate mFontsContract;
@@ -83,7 +83,7 @@
@Override
@RequiresApi(19)
- public void load(@NonNull final EmojiCompat.LoaderCallback loaderCallback) {
+ public void load(@NonNull final EmojiCompat.MetadataRepoLoaderCallback loaderCallback) {
Preconditions.checkNotNull(loaderCallback, "LoaderCallback cannot be null");
final InitRunnable runnable =
new InitRunnable(mContext, mRequest, mFontsContract, loaderCallback);
@@ -98,7 +98,7 @@
*/
@RequiresApi(19)
private static class InitRunnable implements Runnable {
- private final EmojiCompat.LoaderCallback mLoaderCallback;
+ private final EmojiCompat.MetadataRepoLoaderCallback mLoaderCallback;
private final Context mContext;
private final FontsContractDelegate mFontsContract;
private final FontRequest mFontRequest;
@@ -106,7 +106,7 @@
private InitRunnable(final Context context,
final FontRequest fontRequest,
final FontsContractDelegate fontsContract,
- final EmojiCompat.LoaderCallback loaderCallback) {
+ final EmojiCompat.MetadataRepoLoaderCallback loaderCallback) {
mContext = context;
mFontRequest = fontRequest;
mFontsContract = fontsContract;
diff --git a/emoji/core/tests/java/android/support/text/emoji/ConfigTest.java b/emoji/core/tests/java/android/support/text/emoji/ConfigTest.java
index 75692af..538ce99 100644
--- a/emoji/core/tests/java/android/support/text/emoji/ConfigTest.java
+++ b/emoji/core/tests/java/android/support/text/emoji/ConfigTest.java
@@ -102,9 +102,9 @@
public void testInitCallback_callsFailCallback() {
final EmojiCompat.InitCallback initCallback1 = mock(EmojiCompat.InitCallback.class);
final EmojiCompat.InitCallback initCallback2 = mock(EmojiCompat.InitCallback.class);
- final EmojiCompat.MetadataLoader loader = mock(EmojiCompat.MetadataLoader.class);
- doThrow(new RuntimeException("")).when(loader).load(any(EmojiCompat.LoaderCallback
- .class));
+ final EmojiCompat.MetadataRepoLoader loader = mock(EmojiCompat.MetadataRepoLoader.class);
+ doThrow(new RuntimeException("")).when(loader)
+ .load(any(EmojiCompat.MetadataRepoLoaderCallback.class));
final EmojiCompat.Config config = new TestConfigBuilder.TestConfig(loader)
.registerInitCallback(initCallback1)
diff --git a/emoji/core/tests/java/android/support/text/emoji/FontRequestEmojiCompatConfigTest.java b/emoji/core/tests/java/android/support/text/emoji/FontRequestEmojiCompatConfigTest.java
index 72602c5..8201e96 100644
--- a/emoji/core/tests/java/android/support/text/emoji/FontRequestEmojiCompatConfigTest.java
+++ b/emoji/core/tests/java/android/support/text/emoji/FontRequestEmojiCompatConfigTest.java
@@ -203,7 +203,7 @@
assertThat(argumentCaptor.getValue().getMessage(), containsString(exceptionMessage));
}
- public static class WaitingLoaderCallback extends EmojiCompat.LoaderCallback {
+ public static class WaitingLoaderCallback extends EmojiCompat.MetadataRepoLoaderCallback {
final CountDownLatch mLatch;
public WaitingLoaderCallback() {
diff --git a/emoji/core/tests/java/android/support/text/emoji/InitCallbackTest.java b/emoji/core/tests/java/android/support/text/emoji/InitCallbackTest.java
index e11f4da..10abb01 100644
--- a/emoji/core/tests/java/android/support/text/emoji/InitCallbackTest.java
+++ b/emoji/core/tests/java/android/support/text/emoji/InitCallbackTest.java
@@ -57,9 +57,9 @@
public void testRegisterInitCallback_callsFailCallback() {
final EmojiCompat.InitCallback initCallback1 = mock(EmojiCompat.InitCallback.class);
final EmojiCompat.InitCallback initCallback2 = mock(EmojiCompat.InitCallback.class);
- final EmojiCompat.MetadataLoader loader = mock(EmojiCompat.MetadataLoader.class);
- doThrow(new RuntimeException("")).when(loader).load(any(EmojiCompat.LoaderCallback
- .class));
+ final EmojiCompat.MetadataRepoLoader loader = mock(EmojiCompat.MetadataRepoLoader.class);
+ doThrow(new RuntimeException("")).when(loader)
+ .load(any(EmojiCompat.MetadataRepoLoaderCallback.class));
final EmojiCompat.Config config = new TestConfig(loader);
final EmojiCompat emojiCompat = EmojiCompat.reset(config);
@@ -76,9 +76,9 @@
@SdkSuppress(minSdkVersion = 19)
public void testRegisterInitCallback_callsFailCallback_whenOnFailCalledByLoader() {
final EmojiCompat.InitCallback initCallback = mock(EmojiCompat.InitCallback.class);
- final EmojiCompat.MetadataLoader loader = new EmojiCompat.MetadataLoader() {
+ final EmojiCompat.MetadataRepoLoader loader = new EmojiCompat.MetadataRepoLoader() {
@Override
- public void load(@NonNull EmojiCompat.LoaderCallback loaderCallback) {
+ public void load(@NonNull EmojiCompat.MetadataRepoLoaderCallback loaderCallback) {
loaderCallback.onFailed(new RuntimeException(""));
}
};
@@ -95,9 +95,9 @@
@SdkSuppress(minSdkVersion = 19)
public void testRegisterInitCallback_callsFailCallback_whenMetadataRepoIsNull() {
final EmojiCompat.InitCallback initCallback = mock(EmojiCompat.InitCallback.class);
- final EmojiCompat.MetadataLoader loader = new EmojiCompat.MetadataLoader() {
+ final EmojiCompat.MetadataRepoLoader loader = new EmojiCompat.MetadataRepoLoader() {
@Override
- public void load(@NonNull EmojiCompat.LoaderCallback loaderCallback) {
+ public void load(@NonNull EmojiCompat.MetadataRepoLoaderCallback loaderCallback) {
loaderCallback.onLoaded(null);
}
};
diff --git a/emoji/core/tests/java/android/support/text/emoji/TestConfigBuilder.java b/emoji/core/tests/java/android/support/text/emoji/TestConfigBuilder.java
index 202b2e4..242d62b 100644
--- a/emoji/core/tests/java/android/support/text/emoji/TestConfigBuilder.java
+++ b/emoji/core/tests/java/android/support/text/emoji/TestConfigBuilder.java
@@ -34,12 +34,12 @@
super(new TestEmojiDataLoader());
}
- TestConfig(final EmojiCompat.MetadataLoader metadataLoader) {
+ TestConfig(final EmojiCompat.MetadataRepoLoader metadataLoader) {
super(metadataLoader);
}
}
- public static class WaitingDataLoader implements EmojiCompat.MetadataLoader {
+ public static class WaitingDataLoader implements EmojiCompat.MetadataRepoLoader {
private final CountDownLatch mLoaderLatch;
private final CountDownLatch mTestLatch;
private final boolean mSuccess;
@@ -63,7 +63,7 @@
}
@Override
- public void load(@NonNull final EmojiCompat.LoaderCallback loaderCallback) {
+ public void load(@NonNull final EmojiCompat.MetadataRepoLoaderCallback loaderCallback) {
new Thread(new Runnable() {
@Override
public void run() {
@@ -84,7 +84,7 @@
}
}
- public static class TestEmojiDataLoader implements EmojiCompat.MetadataLoader {
+ public static class TestEmojiDataLoader implements EmojiCompat.MetadataRepoLoader {
static final Object sMetadataRepoLock = new Object();
// keep a static instance to in order not to slow down the tests
@GuardedBy("sMetadataRepoLock")
@@ -94,7 +94,7 @@
}
@Override
- public void load(@NonNull EmojiCompat.LoaderCallback loaderCallback) {
+ public void load(@NonNull EmojiCompat.MetadataRepoLoaderCallback loaderCallback) {
if (sMetadataRepo == null) {
synchronized (sMetadataRepoLock) {
if (sMetadataRepo == null) {