Apply embedded media type setting to EmotePlugin.

This commit is contained in:
Docile-Alligator
2024-07-17 19:52:57 -04:00
parent c7479f3fdb
commit 6bbfa4f85a
11 changed files with 134 additions and 118 deletions

View File

@ -216,16 +216,17 @@ public class CommentActivity extends BaseActivity implements UploadImageEnabledA
}
};
EmoteCloseBracketInlineProcessor emoteCloseBracketInlineProcessor = new EmoteCloseBracketInlineProcessor();
emotePlugin = EmotePlugin.create(this, mediaMetadata -> {
Intent imageIntent = new Intent(this, ViewImageOrGifActivity.class);
if (mediaMetadata.isGIF) {
imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_GIF_URL_KEY, mediaMetadata.original.url);
} else {
imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_IMAGE_URL_KEY, mediaMetadata.original.url);
}
imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_SUBREDDIT_OR_USERNAME_KEY, intent.getStringExtra(EXTRA_SUBREDDIT_NAME_KEY));
imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_FILE_NAME_KEY, mediaMetadata.fileName);
});
emotePlugin = EmotePlugin.create(this, SharedPreferencesUtils.EMBEDDED_MEDIA_ALL,
mediaMetadata -> {
Intent imageIntent = new Intent(this, ViewImageOrGifActivity.class);
if (mediaMetadata.isGIF) {
imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_GIF_URL_KEY, mediaMetadata.original.url);
} else {
imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_IMAGE_URL_KEY, mediaMetadata.original.url);
}
imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_SUBREDDIT_OR_USERNAME_KEY, intent.getStringExtra(EXTRA_SUBREDDIT_NAME_KEY));
imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_FILE_NAME_KEY, mediaMetadata.fileName);
});
ImageAndGifPlugin imageAndGifPlugin = new ImageAndGifPlugin();
imageAndGifEntry = new ImageAndGifEntry(this, mGlide, SharedPreferencesUtils.EMBEDDED_MEDIA_ALL, mediaMetadata -> {
Intent imageIntent = new Intent(this, ViewImageOrGifActivity.class);

View File

@ -164,16 +164,17 @@ public class WikiActivity extends BaseActivity {
return true;
};
emoteCloseBracketInlineProcessor = new EmoteCloseBracketInlineProcessor();
emotePlugin = EmotePlugin.create(this, mediaMetadata -> {
Intent intent = new Intent(this, ViewImageOrGifActivity.class);
if (mediaMetadata.isGIF) {
intent.putExtra(ViewImageOrGifActivity.EXTRA_GIF_URL_KEY, mediaMetadata.original.url);
} else {
intent.putExtra(ViewImageOrGifActivity.EXTRA_IMAGE_URL_KEY, mediaMetadata.original.url);
}
intent.putExtra(ViewImageOrGifActivity.EXTRA_SUBREDDIT_OR_USERNAME_KEY, mSubredditName);
intent.putExtra(ViewImageOrGifActivity.EXTRA_FILE_NAME_KEY, mediaMetadata.fileName);
});
emotePlugin = EmotePlugin.create(this, SharedPreferencesUtils.EMBEDDED_MEDIA_ALL,
mediaMetadata -> {
Intent intent = new Intent(this, ViewImageOrGifActivity.class);
if (mediaMetadata.isGIF) {
intent.putExtra(ViewImageOrGifActivity.EXTRA_GIF_URL_KEY, mediaMetadata.original.url);
} else {
intent.putExtra(ViewImageOrGifActivity.EXTRA_IMAGE_URL_KEY, mediaMetadata.original.url);
}
intent.putExtra(ViewImageOrGifActivity.EXTRA_SUBREDDIT_OR_USERNAME_KEY, mSubredditName);
intent.putExtra(ViewImageOrGifActivity.EXTRA_FILE_NAME_KEY, mediaMetadata.fileName);
});
imageAndGifPlugin = new ImageAndGifPlugin();
imageAndGifEntry = new ImageAndGifEntry(this,
mGlide, SharedPreferencesUtils.EMBEDDED_MEDIA_ALL, mediaMetadata -> {

View File

@ -180,20 +180,22 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
return true;
};
mEmoteCloseBracketInlineProcessor = new EmoteCloseBracketInlineProcessor();
mEmotePlugin = EmotePlugin.create(activity, mediaMetadata -> {
Intent intent = new Intent(activity, ViewImageOrGifActivity.class);
if (mediaMetadata.isGIF) {
intent.putExtra(ViewImageOrGifActivity.EXTRA_GIF_URL_KEY, mediaMetadata.original.url);
} else {
intent.putExtra(ViewImageOrGifActivity.EXTRA_IMAGE_URL_KEY, mediaMetadata.original.url);
}
intent.putExtra(ViewImageOrGifActivity.EXTRA_SUBREDDIT_OR_USERNAME_KEY, username);
intent.putExtra(ViewImageOrGifActivity.EXTRA_FILE_NAME_KEY, mediaMetadata.fileName);
if (canStartActivity) {
canStartActivity = false;
activity.startActivity(intent);
}
});
mEmotePlugin = EmotePlugin.create(activity,
Integer.parseInt(sharedPreferences.getString(SharedPreferencesUtils.EMBEDDED_MEDIA_TYPE, "15")),
mediaMetadata -> {
Intent intent = new Intent(activity, ViewImageOrGifActivity.class);
if (mediaMetadata.isGIF) {
intent.putExtra(ViewImageOrGifActivity.EXTRA_GIF_URL_KEY, mediaMetadata.original.url);
} else {
intent.putExtra(ViewImageOrGifActivity.EXTRA_IMAGE_URL_KEY, mediaMetadata.original.url);
}
intent.putExtra(ViewImageOrGifActivity.EXTRA_SUBREDDIT_OR_USERNAME_KEY, username);
intent.putExtra(ViewImageOrGifActivity.EXTRA_FILE_NAME_KEY, mediaMetadata.fileName);
if (canStartActivity) {
canStartActivity = false;
activity.startActivity(intent);
}
});
mImageAndGifPlugin = new ImageAndGifPlugin();
mMarkwon = MarkdownUtils.createFullRedditMarkwon(mActivity,
miscPlugin, mEmoteCloseBracketInlineProcessor, mEmotePlugin, mImageAndGifPlugin, mCommentColor,

View File

@ -220,21 +220,23 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
return true;
};
mEmoteCloseBracketInlineProcessor = new EmoteCloseBracketInlineProcessor();
mEmotePlugin = EmotePlugin.create(activity, mediaMetadata -> {
Intent intent = new Intent(activity, ViewImageOrGifActivity.class);
if (mediaMetadata.isGIF) {
intent.putExtra(ViewImageOrGifActivity.EXTRA_GIF_URL_KEY, mediaMetadata.original.url);
} else {
intent.putExtra(ViewImageOrGifActivity.EXTRA_IMAGE_URL_KEY, mediaMetadata.original.url);
}
intent.putExtra(ViewImageOrGifActivity.EXTRA_IS_NSFW, post.isNSFW());
intent.putExtra(ViewImageOrGifActivity.EXTRA_SUBREDDIT_OR_USERNAME_KEY, post.getSubredditName());
intent.putExtra(ViewImageOrGifActivity.EXTRA_FILE_NAME_KEY, mediaMetadata.fileName);
if (canStartActivity) {
canStartActivity = false;
activity.startActivity(intent);
}
});
mEmotePlugin = EmotePlugin.create(activity,
Integer.parseInt(sharedPreferences.getString(SharedPreferencesUtils.EMBEDDED_MEDIA_TYPE, "15")),
mediaMetadata -> {
Intent intent = new Intent(activity, ViewImageOrGifActivity.class);
if (mediaMetadata.isGIF) {
intent.putExtra(ViewImageOrGifActivity.EXTRA_GIF_URL_KEY, mediaMetadata.original.url);
} else {
intent.putExtra(ViewImageOrGifActivity.EXTRA_IMAGE_URL_KEY, mediaMetadata.original.url);
}
intent.putExtra(ViewImageOrGifActivity.EXTRA_IS_NSFW, post.isNSFW());
intent.putExtra(ViewImageOrGifActivity.EXTRA_SUBREDDIT_OR_USERNAME_KEY, post.getSubredditName());
intent.putExtra(ViewImageOrGifActivity.EXTRA_FILE_NAME_KEY, mediaMetadata.fileName);
if (canStartActivity) {
canStartActivity = false;
activity.startActivity(intent);
}
});
mImageAndGifPlugin = new ImageAndGifPlugin();
mCommentMarkwon = MarkdownUtils.createFullRedditMarkwon(mActivity,
miscPlugin, mEmoteCloseBracketInlineProcessor, mEmotePlugin, mImageAndGifPlugin, mCommentTextColor,

View File

@ -384,21 +384,23 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
return true;
};
mEmoteCloseBracketInlineProcessor = new EmoteCloseBracketInlineProcessor();
mEmotePlugin = EmotePlugin.create(activity, mDataSavingMode, mDisableImagePreview, mediaMetadata -> {
Intent intent = new Intent(activity, ViewImageOrGifActivity.class);
if (mediaMetadata.isGIF) {
intent.putExtra(ViewImageOrGifActivity.EXTRA_GIF_URL_KEY, mediaMetadata.original.url);
} else {
intent.putExtra(ViewImageOrGifActivity.EXTRA_IMAGE_URL_KEY, mediaMetadata.original.url);
}
intent.putExtra(ViewImageOrGifActivity.EXTRA_IS_NSFW, post.isNSFW());
intent.putExtra(ViewImageOrGifActivity.EXTRA_SUBREDDIT_OR_USERNAME_KEY, post.getSubredditName());
intent.putExtra(ViewImageOrGifActivity.EXTRA_FILE_NAME_KEY, mediaMetadata.fileName);
if (canStartActivity) {
canStartActivity = false;
activity.startActivity(intent);
}
});
mEmotePlugin = EmotePlugin.create(activity,
Integer.parseInt(sharedPreferences.getString(SharedPreferencesUtils.EMBEDDED_MEDIA_TYPE, "15")),
mDataSavingMode, mDisableImagePreview, mediaMetadata -> {
Intent intent = new Intent(activity, ViewImageOrGifActivity.class);
if (mediaMetadata.isGIF) {
intent.putExtra(ViewImageOrGifActivity.EXTRA_GIF_URL_KEY, mediaMetadata.original.url);
} else {
intent.putExtra(ViewImageOrGifActivity.EXTRA_IMAGE_URL_KEY, mediaMetadata.original.url);
}
intent.putExtra(ViewImageOrGifActivity.EXTRA_IS_NSFW, post.isNSFW());
intent.putExtra(ViewImageOrGifActivity.EXTRA_SUBREDDIT_OR_USERNAME_KEY, post.getSubredditName());
intent.putExtra(ViewImageOrGifActivity.EXTRA_FILE_NAME_KEY, mediaMetadata.fileName);
if (canStartActivity) {
canStartActivity = false;
activity.startActivity(intent);
}
});
mImageAndGifPlugin = new ImageAndGifPlugin();
mPostDetailMarkwon = MarkdownUtils.createFullRedditMarkwon(mActivity,
miscPlugin, mEmoteCloseBracketInlineProcessor, mEmotePlugin, mImageAndGifPlugin, markdownColor,

View File

@ -92,16 +92,17 @@ public class RulesRecyclerViewAdapter extends RecyclerView.Adapter<RulesRecycler
return true;
};
emoteCloseBracketInlineProcessor = new EmoteCloseBracketInlineProcessor();
emotePlugin = EmotePlugin.create(activity, mediaMetadata -> {
Intent imageIntent = new Intent(activity, ViewImageOrGifActivity.class);
if (mediaMetadata.isGIF) {
imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_GIF_URL_KEY, mediaMetadata.original.url);
} else {
imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_IMAGE_URL_KEY, mediaMetadata.original.url);
}
imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_SUBREDDIT_OR_USERNAME_KEY, subredditName);
imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_FILE_NAME_KEY, mediaMetadata.fileName);
});
emotePlugin = EmotePlugin.create(activity, SharedPreferencesUtils.EMBEDDED_MEDIA_ALL,
mediaMetadata -> {
Intent imageIntent = new Intent(activity, ViewImageOrGifActivity.class);
if (mediaMetadata.isGIF) {
imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_GIF_URL_KEY, mediaMetadata.original.url);
} else {
imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_IMAGE_URL_KEY, mediaMetadata.original.url);
}
imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_SUBREDDIT_OR_USERNAME_KEY, subredditName);
imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_FILE_NAME_KEY, mediaMetadata.fileName);
});
imageAndGifPlugin = new ImageAndGifPlugin();
imageAndGifEntry = new ImageAndGifEntry(activity,
Glide.with(activity), SharedPreferencesUtils.EMBEDDED_MEDIA_ALL,

View File

@ -151,16 +151,17 @@ public class SidebarFragment extends Fragment {
return true;
};
EmoteCloseBracketInlineProcessor emoteCloseBracketInlineProcessor = new EmoteCloseBracketInlineProcessor();
emotePlugin = EmotePlugin.create(activity, mediaMetadata -> {
Intent imageIntent = new Intent(activity, ViewImageOrGifActivity.class);
if (mediaMetadata.isGIF) {
imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_GIF_URL_KEY, mediaMetadata.original.url);
} else {
imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_IMAGE_URL_KEY, mediaMetadata.original.url);
}
imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_SUBREDDIT_OR_USERNAME_KEY, subredditName);
imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_FILE_NAME_KEY, mediaMetadata.fileName);
});
emotePlugin = EmotePlugin.create(activity, SharedPreferencesUtils.EMBEDDED_MEDIA_ALL,
mediaMetadata -> {
Intent imageIntent = new Intent(activity, ViewImageOrGifActivity.class);
if (mediaMetadata.isGIF) {
imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_GIF_URL_KEY, mediaMetadata.original.url);
} else {
imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_IMAGE_URL_KEY, mediaMetadata.original.url);
}
imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_SUBREDDIT_OR_USERNAME_KEY, subredditName);
imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_FILE_NAME_KEY, mediaMetadata.fileName);
});
ImageAndGifPlugin imageAndGifPlugin = new ImageAndGifPlugin();
imageAndGifEntry = new ImageAndGifEntry(activity,
Glide.with(this), SharedPreferencesUtils.EMBEDDED_MEDIA_ALL,

View File

@ -44,6 +44,7 @@ public class EmotePlugin extends AbstractMarkwonPlugin {
private final GlideAsyncDrawableLoader glideAsyncDrawableLoader;
private boolean dataSavingMode;
private final boolean disableImagePreview;
private final boolean canShowEmote;
private final OnEmoteClickListener onEmoteClickListener;
public interface GlideStore {
@ -59,28 +60,7 @@ public class EmotePlugin extends AbstractMarkwonPlugin {
}
@NonNull
public static EmotePlugin create(@NonNull final BaseActivity baseActivity, @NonNull final OnEmoteClickListener onEmoteClickListener) {
// @since 4.5.0 cache RequestManager
// sometimes `cancel` would be called after activity is destroyed,
// so `Glide.with(baseActivity)` will throw an exception
RequestManager requestManager = Glide.with(baseActivity);
return new EmotePlugin(baseActivity, new GlideStore() {
@NonNull
@Override
public RequestBuilder<Drawable> load(@NonNull AsyncDrawable drawable) {
return requestManager.load(drawable.getDestination());
}
@Override
public void cancel(@NonNull Target<?> target) {
requestManager.clear(target);
}
}, onEmoteClickListener);
}
@NonNull
public static EmotePlugin create(@NonNull final BaseActivity baseActivity, boolean dataSavingMode,
boolean disableImagePreview,
public static EmotePlugin create(@NonNull final BaseActivity baseActivity, int embeddedMediaType,
@NonNull final OnEmoteClickListener onEmoteClickListener) {
// @since 4.5.0 cache RequestManager
// sometimes `cancel` would be called after activity is destroyed,
@ -97,11 +77,34 @@ public class EmotePlugin extends AbstractMarkwonPlugin {
public void cancel(@NonNull Target<?> target) {
requestManager.clear(target);
}
}, dataSavingMode, disableImagePreview, onEmoteClickListener);
}, embeddedMediaType, onEmoteClickListener);
}
@NonNull
public static EmotePlugin create(@NonNull final BaseActivity baseActivity, int embeddedMediaType,
boolean dataSavingMode, boolean disableImagePreview,
@NonNull final OnEmoteClickListener onEmoteClickListener) {
// @since 4.5.0 cache RequestManager
// sometimes `cancel` would be called after activity is destroyed,
// so `Glide.with(baseActivity)` will throw an exception
RequestManager requestManager = Glide.with(baseActivity);
return new EmotePlugin(baseActivity, new GlideStore() {
@NonNull
@Override
public RequestBuilder<Drawable> load(@NonNull AsyncDrawable drawable) {
return requestManager.load(drawable.getDestination());
}
@Override
public void cancel(@NonNull Target<?> target) {
requestManager.clear(target);
}
}, embeddedMediaType, dataSavingMode, disableImagePreview, onEmoteClickListener);
}
@SuppressWarnings("WeakerAccess")
EmotePlugin(@NonNull final BaseActivity baseActivity, @NonNull GlideStore glideStore,
EmotePlugin(@NonNull final BaseActivity baseActivity,
@NonNull GlideStore glideStore, int embeddedMediaType,
@NonNull final OnEmoteClickListener onEmoteClickListener) {
this.glideAsyncDrawableLoader = new GlideAsyncDrawableLoader(glideStore);
String dataSavingModeString = baseActivity.getDefaultSharedPreferences().getString(SharedPreferencesUtils.DATA_SAVING_MODE, SharedPreferencesUtils.DATA_SAVING_MODE_OFF);
@ -111,15 +114,18 @@ public class EmotePlugin extends AbstractMarkwonPlugin {
dataSavingMode = Utils.getConnectedNetwork(baseActivity) == Utils.NETWORK_TYPE_CELLULAR;
}
disableImagePreview = baseActivity.getDefaultSharedPreferences().getBoolean(SharedPreferencesUtils.DISABLE_IMAGE_PREVIEW, false);
canShowEmote = SharedPreferencesUtils.canShowEmote(embeddedMediaType);
this.onEmoteClickListener = onEmoteClickListener;
}
@SuppressWarnings("WeakerAccess")
EmotePlugin(@NonNull final BaseActivity baseActivity, @NonNull GlideStore glideStore, boolean dataSavingMode,
boolean disableImagePreview, @NonNull final OnEmoteClickListener onEmoteClickListener) {
EmotePlugin(@NonNull final BaseActivity baseActivity, @NonNull GlideStore glideStore,
int embeddedMediaType, boolean dataSavingMode, boolean disableImagePreview,
@NonNull final OnEmoteClickListener onEmoteClickListener) {
this.glideAsyncDrawableLoader = new GlideAsyncDrawableLoader(glideStore);
this.dataSavingMode = dataSavingMode;
this.disableImagePreview = disableImagePreview;
canShowEmote = SharedPreferencesUtils.canShowEmote(embeddedMediaType);
this.onEmoteClickListener = onEmoteClickListener;
}
@ -136,7 +142,7 @@ public class EmotePlugin extends AbstractMarkwonPlugin {
@Override
public void configureVisitor(@NonNull MarkwonVisitor.Builder builder) {
builder.on(Emote.class, (visitor, emote) -> {
if (dataSavingMode && disableImagePreview) {
if ((dataSavingMode && disableImagePreview) || !canShowEmote) {
Link link = new Link(emote.getMediaMetadata().original.url, emote.getTitle());
final int length = visitor.length();

View File

@ -267,7 +267,7 @@ public class SharedPreferencesUtils {
return embeddedMediaType == 15 || embeddedMediaType == 7 || embeddedMediaType == 5 || embeddedMediaType == 2;
}
public static boolean canShowEmoji(int embeddedMediaType) {
public static boolean canShowEmote(int embeddedMediaType) {
return embeddedMediaType == 15 || embeddedMediaType == 6 || embeddedMediaType == 5 || embeddedMediaType == 1;
}

View File

@ -701,11 +701,11 @@
<string-array name="settings_embedded_media_type">
<item>@string/all</item>
<item>@string/image_and_gif</item>
<item>@string/image_and_emoji</item>
<item>@string/gif_and_emoji</item>
<item>@string/image_and_emote</item>
<item>@string/gif_and_emote</item>
<item>@string/image_embedded_media</item>
<item>@string/gif</item>
<item>@string/emoji</item>
<item>@string/emote</item>
<item>@string/none</item>
</string-array>

View File

@ -1395,10 +1395,10 @@
<string name="online">Online</string>
<string name="image_and_gif">Image and GIF</string>
<string name="image_and_emoji">Image and emoji</string>
<string name="gif_and_emoji">GIF and emoji</string>
<string name="image_and_emote">Image and emote</string>
<string name="gif_and_emote">GIF and emote</string>
<string name="image_embedded_media">Image</string>
<string name="emoji">Emoji</string>
<string name="emote">Emote</string>
<string name="none">None</string>