summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--java/src/com/android/intentresolver/v2/ChooserActivity.java21
-rw-r--r--java/src/com/android/intentresolver/v2/ChooserActivityLogic.kt2
-rw-r--r--java/src/com/android/intentresolver/v2/ResolverActivity.java59
-rw-r--r--tests/activity/src/com/android/intentresolver/v2/ChooserWrapperActivity.java20
-rw-r--r--tests/activity/src/com/android/intentresolver/v2/ResolverWrapperActivity.java9
5 files changed, 70 insertions, 41 deletions
diff --git a/java/src/com/android/intentresolver/v2/ChooserActivity.java b/java/src/com/android/intentresolver/v2/ChooserActivity.java
index 95eedf47..60ea1b1c 100644
--- a/java/src/com/android/intentresolver/v2/ChooserActivity.java
+++ b/java/src/com/android/intentresolver/v2/ChooserActivity.java
@@ -236,21 +236,20 @@ public class ChooserActivity extends Hilt_ChooserActivity implements
private final AtomicLong mIntentReceivedTime = new AtomicLong(-1);
- public ChooserActivity() {
- super();
- mLogic = new ChooserActivityLogic(
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ Tracer.INSTANCE.markLaunched();
+ super.onCreate(savedInstanceState);
+ setLogic(new ChooserActivityLogic(
TAG,
() -> this,
this::onWorkProfileStatusUpdated,
() -> mTargetDataLoader,
- this::onPreinitialization
- );
+ this::onPreinitialization));
+ addInitializer(this::init);
}
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- Tracer.INSTANCE.markLaunched();
- super.onCreate(savedInstanceState);
+ private void init() {
if (getChooserRequest() == null) {
finish();
return;
@@ -719,7 +718,9 @@ public class ChooserActivity extends Hilt_ChooserActivity implements
@Override
protected void onStop() {
super.onStop();
- mRefinementManager.onActivityStop(isChangingConfigurations());
+ if (mRefinementManager != null) {
+ mRefinementManager.onActivityStop(isChangingConfigurations());
+ }
if (mFinishWhenStopped) {
mFinishWhenStopped = false;
diff --git a/java/src/com/android/intentresolver/v2/ChooserActivityLogic.kt b/java/src/com/android/intentresolver/v2/ChooserActivityLogic.kt
index 5303a7e7..7bc39a24 100644
--- a/java/src/com/android/intentresolver/v2/ChooserActivityLogic.kt
+++ b/java/src/com/android/intentresolver/v2/ChooserActivityLogic.kt
@@ -10,6 +10,8 @@ import com.android.intentresolver.R
import com.android.intentresolver.icons.TargetDataLoader
import com.android.intentresolver.v2.util.mutableLazy
+private const val TAG = "ChooserActivityLogic"
+
/**
* Activity logic for [ChooserActivity].
*
diff --git a/java/src/com/android/intentresolver/v2/ResolverActivity.java b/java/src/com/android/intentresolver/v2/ResolverActivity.java
index a7f2047d..8f8a7d0d 100644
--- a/java/src/com/android/intentresolver/v2/ResolverActivity.java
+++ b/java/src/com/android/intentresolver/v2/ResolverActivity.java
@@ -33,7 +33,9 @@ import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTE
import static com.android.internal.annotations.VisibleForTesting.Visibility.PROTECTED;
+import static java.util.Collections.emptyList;
import static java.util.Objects.requireNonNull;
+import static java.util.Objects.requireNonNullElse;
import android.app.ActivityManager;
import android.app.ActivityThread;
@@ -91,6 +93,7 @@ import android.widget.TabWidget;
import android.widget.TextView;
import android.widget.Toast;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.annotation.UiThread;
@@ -129,9 +132,12 @@ import kotlin.Unit;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
+import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
+import java.util.Queue;
import java.util.Set;
+import java.util.function.Consumer;
/**
* This is a copy of ResolverActivity to support IntentResolver's ChooserActivity. This code is
@@ -143,11 +149,9 @@ import java.util.Set;
public class ResolverActivity extends FragmentActivity implements
ResolverListAdapter.ResolverListCommunicator {
- protected ActivityLogic mLogic = new ResolverActivityLogic(
- TAG,
- () -> this,
- this::onWorkProfileStatusUpdated
- );
+ private final List<Runnable> mInit = new ArrayList<>();
+
+ protected ActivityLogic mLogic;
public ResolverActivity() {
mIsIntentPicker = getClass().equals(ResolverActivity.class);
@@ -307,30 +311,47 @@ public class ResolverActivity extends FragmentActivity implements
}
};
}
+ protected interface Initializer {
+ void initialize(ActivityLogic value);
+ }
+
+ protected void setLogic(ActivityLogic logic) {
+ mLogic = logic;
+ }
+
+ protected void addInitializer(Runnable initializer) {
+ mInit.add(initializer);
+ }
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (isFinishing()) {
// Performing a clean exit:
- // Skip initializing any additional resources.
+ // Skip initializing anything.
return;
}
+ setLogic(new ResolverActivityLogic(
+ TAG,
+ () -> this,
+ this::onWorkProfileStatusUpdated));
+ addInitializer(this::init);
+ }
+
+ @Override
+ protected final void onPostCreate(@Nullable Bundle savedInstanceState) {
+ super.onPostCreate(savedInstanceState);
+ mInit.forEach(Runnable::run);
+ }
+
+ private void init() {
setTheme(mLogic.getThemeResId());
mLogic.preInitialization();
- init(
- mLogic.getTargetIntent(),
- mLogic.getInitialIntents() == null
- ? null : mLogic.getInitialIntents().toArray(new Intent[0]),
- mLogic.getTargetDataLoader()
- );
- }
- protected void init(
- Intent intent,
- Intent[] initialIntents,
- TargetDataLoader targetDataLoader
- ) {
+ Intent intent = mLogic.getTargetIntent();
+ List<Intent> initialIntents = mLogic.getInitialIntents();
+ TargetDataLoader targetDataLoader = mLogic.getTargetDataLoader();
+
// Calling UID did not have valid permissions
if (mLogic.getAnnotatedUserHandles() == null) {
finish();
@@ -350,7 +371,7 @@ public class ResolverActivity extends FragmentActivity implements
boolean filterLastUsed = mLogic.getSupportsAlwaysUseOption() && !isVoiceInteraction()
&& !shouldShowTabs() && !hasCloneProfile();
mMultiProfilePagerAdapter = createMultiProfilePagerAdapter(
- initialIntents,
+ requireNonNullElse(initialIntents, emptyList()).toArray(new Intent[0]),
/* resolutionList = */ null,
filterLastUsed,
targetDataLoader
diff --git a/tests/activity/src/com/android/intentresolver/v2/ChooserWrapperActivity.java b/tests/activity/src/com/android/intentresolver/v2/ChooserWrapperActivity.java
index a314ee97..6eace9f4 100644
--- a/tests/activity/src/com/android/intentresolver/v2/ChooserWrapperActivity.java
+++ b/tests/activity/src/com/android/intentresolver/v2/ChooserWrapperActivity.java
@@ -57,16 +57,16 @@ public class ChooserWrapperActivity extends ChooserActivity implements IChooserW
static final ChooserActivityOverrideData sOverrides = ChooserActivityOverrideData.getInstance();
private UsageStatsManager mUsm;
- public ChooserWrapperActivity() {
- super();
- mLogic = new TestChooserActivityLogic(
- "ChooserWrapper",
- () -> this,
- this::onWorkProfileStatusUpdated,
- () -> mTargetDataLoader,
- this::onPreinitialization,
- sOverrides
- );
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setLogic(new TestChooserActivityLogic(
+ "ChooserWrapper",
+ () -> this,
+ this::onWorkProfileStatusUpdated,
+ () -> mTargetDataLoader,
+ this::onPreinitialization,
+ sOverrides));
}
// ResolverActivity (the base class of ChooserActivity) inspects the launched-from UID at
diff --git a/tests/activity/src/com/android/intentresolver/v2/ResolverWrapperActivity.java b/tests/activity/src/com/android/intentresolver/v2/ResolverWrapperActivity.java
index 92b73d92..7ae58254 100644
--- a/tests/activity/src/com/android/intentresolver/v2/ResolverWrapperActivity.java
+++ b/tests/activity/src/com/android/intentresolver/v2/ResolverWrapperActivity.java
@@ -62,7 +62,12 @@ public class ResolverWrapperActivity extends ResolverActivity {
public ResolverWrapperActivity() {
super(/* isIntentPicker= */ true);
- mLogic = new TestResolverActivityLogic(
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setLogic(new TestResolverActivityLogic(
"ResolverWrapper",
() -> this,
() -> {
@@ -70,7 +75,7 @@ public class ResolverWrapperActivity extends ResolverActivity {
return Unit.INSTANCE;
},
sOverrides
- );
+ ));
}
public CountingIdlingResource getLabelIdlingResource() {