summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
author Mark Renouf <mrenouf@google.com> 2023-12-07 18:03:13 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-12-07 18:03:13 +0000
commitc85c6c55ebdeef744cb812b74fed30cd2b8a4d49 (patch)
treeedbcfabebbcc4ac4f54251f7721bd4427f09ff67 /java
parent4a53c5d06f4c337ab9e689842b4611b0407421e2 (diff)
parent0d5016ae11db6ec551fa8e1b25f034446e266a92 (diff)
Merge "Defer most init to onPostCreate" into main
Diffstat (limited to 'java')
-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
3 files changed, 53 insertions, 29 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