From 436bc9ff39db4a241c0941871be343c1700180ed Mon Sep 17 00:00:00 2001 From: tehcneko <7764726+tehcneko@users.noreply.github.com> Date: Wed, 21 Jul 2021 12:39:05 +0800 Subject: [PATCH] Add support for Android 12 recents URL sharing --- .../hippo/ehviewer/ui/GalleryActivity.java | 24 +++++++++++++++++++ .../ehviewer/ui/scene/GalleryDetailScene.java | 11 +++++++++ .../java/com/hippo/scene/SceneFragment.java | 5 ++++ .../java/com/hippo/scene/StageActivity.java | 21 ++++++++++++++++ 4 files changed, 61 insertions(+) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java index ef8fe218d..359920179 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java @@ -21,6 +21,7 @@ import android.animation.Animator; import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.annotation.SuppressLint; +import android.app.assist.AssistContent; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; @@ -1248,4 +1249,27 @@ public class GalleryActivity extends EhActivity implements SeekBar.OnSeekBarChan } } } + + @Nullable + private String getGalleryDetailUrl() { + long gid; + String token; + if (mGalleryInfo != null) { + gid = mGalleryInfo.gid; + token = mGalleryInfo.token; + } else { + return null; + } + return EhUrl.getGalleryDetailUrl(gid, token, 0, false); + } + + @Override + public void onProvideAssistContent(AssistContent outContent) { + super.onProvideAssistContent(outContent); + + String url = getGalleryDetailUrl(); + if (url != null) { + outContent.setWebUri(Uri.parse(url)); + } + } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java index c0b375be8..d629c8e35 100755 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java @@ -21,6 +21,7 @@ import android.annotation.SuppressLint; import android.app.Activity; import android.app.Dialog; import android.app.DownloadManager; +import android.app.assist.AssistContent; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; @@ -2219,4 +2220,14 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene EhApplication.getEhClient(context).execute(request); } } + + @Override + public void onProvideAssistContent(AssistContent outContent) { + super.onProvideAssistContent(outContent); + + String url = getGalleryDetailUrl(false); + if (url != null) { + outContent.setWebUri(Uri.parse(url)); + } + } } diff --git a/app/src/main/java/com/hippo/scene/SceneFragment.java b/app/src/main/java/com/hippo/scene/SceneFragment.java index e86017a29..2b3a7521a 100644 --- a/app/src/main/java/com/hippo/scene/SceneFragment.java +++ b/app/src/main/java/com/hippo/scene/SceneFragment.java @@ -16,6 +16,7 @@ package com.hippo.scene; +import android.app.assist.AssistContent; import android.os.Bundle; import android.view.View; @@ -104,6 +105,10 @@ public class SceneFragment extends Fragment { finish(); } + public void onProvideAssistContent(AssistContent outContent) { + + } + @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); diff --git a/app/src/main/java/com/hippo/scene/StageActivity.java b/app/src/main/java/com/hippo/scene/StageActivity.java index e15f933d2..13229feb0 100644 --- a/app/src/main/java/com/hippo/scene/StageActivity.java +++ b/app/src/main/java/com/hippo/scene/StageActivity.java @@ -16,6 +16,7 @@ package com.hippo.scene; +import android.app.assist.AssistContent; import android.content.Intent; import android.os.Build; import android.os.Bundle; @@ -589,6 +590,26 @@ public abstract class StageActivity extends EhActivity { scene.onBackPressed(); } + @Override + public void onProvideAssistContent(AssistContent outContent) { + super.onProvideAssistContent(outContent); + int size = mSceneTagList.size(); + String tag = mSceneTagList.get(size - 1); + SceneFragment scene; + Fragment fragment = getSupportFragmentManager().findFragmentByTag(tag); + if (fragment == null) { + Log.e(TAG, "onProvideAssistContent: Can't find scene by tag: " + tag); + return; + } + if (!(fragment instanceof SceneFragment)) { + Log.e(TAG, "onProvideAssistContent: The fragment is not SceneFragment"); + return; + } + + scene = (SceneFragment) fragment; + scene.onProvideAssistContent(outContent); + } + public SceneFragment findSceneByTag(String tag) { FragmentManager fragmentManager = getSupportFragmentManager(); Fragment fragment = fragmentManager.findFragmentByTag(tag);