Merge "Asynchronously bind/unbind service" into tm-dev am: f4dbcd621f
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17188342 Change-Id: Iafdc1b7b860930c68a86dde988d6bd7d4631367a
This commit is contained in:
@@ -42,7 +42,19 @@ public interface QuickAccessWalletClient extends Closeable {
|
|||||||
*/
|
*/
|
||||||
@NonNull
|
@NonNull
|
||||||
static QuickAccessWalletClient create(@NonNull Context context) {
|
static QuickAccessWalletClient create(@NonNull Context context) {
|
||||||
return new QuickAccessWalletClientImpl(context);
|
return create(context, null /* bgExecutor */);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a client for accessing wallet cards from the {@link QuickAccessWalletService}. If the
|
||||||
|
* service is unavailable, {@link #isWalletServiceAvailable()} will return false.
|
||||||
|
* @param context Context.
|
||||||
|
* @param bgExecutor A background {@link Executor} for service registration.
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
static QuickAccessWalletClient create(@NonNull Context context, @Nullable Executor bgExecutor) {
|
||||||
|
return new QuickAccessWalletClientImpl(context, bgExecutor);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -67,6 +67,7 @@ public class QuickAccessWalletClientImpl implements QuickAccessWalletClient, Ser
|
|||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final Queue<ApiCaller> mRequestQueue;
|
private final Queue<ApiCaller> mRequestQueue;
|
||||||
private final Map<WalletServiceEventListener, String> mEventListeners;
|
private final Map<WalletServiceEventListener, String> mEventListeners;
|
||||||
|
private final Executor mLifecycleExecutor;
|
||||||
private boolean mIsConnected;
|
private boolean mIsConnected;
|
||||||
/** Timeout for active service connections (1 minute) */
|
/** Timeout for active service connections (1 minute) */
|
||||||
private static final long SERVICE_CONNECTION_TIMEOUT_MS = 60 * 1000;
|
private static final long SERVICE_CONNECTION_TIMEOUT_MS = 60 * 1000;
|
||||||
@@ -79,10 +80,11 @@ public class QuickAccessWalletClientImpl implements QuickAccessWalletClient, Ser
|
|||||||
|
|
||||||
private static final int MSG_TIMEOUT_SERVICE = 5;
|
private static final int MSG_TIMEOUT_SERVICE = 5;
|
||||||
|
|
||||||
QuickAccessWalletClientImpl(@NonNull Context context) {
|
QuickAccessWalletClientImpl(@NonNull Context context, @Nullable Executor bgExecutor) {
|
||||||
mContext = context.getApplicationContext();
|
mContext = context.getApplicationContext();
|
||||||
mServiceInfo = QuickAccessWalletServiceInfo.tryCreate(context);
|
mServiceInfo = QuickAccessWalletServiceInfo.tryCreate(context);
|
||||||
mHandler = new Handler(Looper.getMainLooper());
|
mHandler = new Handler(Looper.getMainLooper());
|
||||||
|
mLifecycleExecutor = (bgExecutor == null) ? Runnable::run : bgExecutor;
|
||||||
mRequestQueue = new LinkedList<>();
|
mRequestQueue = new LinkedList<>();
|
||||||
mEventListeners = new HashMap<>(1);
|
mEventListeners = new HashMap<>(1);
|
||||||
}
|
}
|
||||||
@@ -369,7 +371,7 @@ public class QuickAccessWalletClientImpl implements QuickAccessWalletClient, Ser
|
|||||||
Intent intent = new Intent(SERVICE_INTERFACE);
|
Intent intent = new Intent(SERVICE_INTERFACE);
|
||||||
intent.setComponent(mServiceInfo.getComponentName());
|
intent.setComponent(mServiceInfo.getComponentName());
|
||||||
int flags = Context.BIND_AUTO_CREATE | Context.BIND_WAIVE_PRIORITY;
|
int flags = Context.BIND_AUTO_CREATE | Context.BIND_WAIVE_PRIORITY;
|
||||||
mContext.bindService(intent, this, flags);
|
mLifecycleExecutor.execute(() -> mContext.bindService(intent, this, flags));
|
||||||
resetServiceConnectionTimeout();
|
resetServiceConnectionTimeout();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -411,7 +413,7 @@ public class QuickAccessWalletClientImpl implements QuickAccessWalletClient, Ser
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mIsConnected = false;
|
mIsConnected = false;
|
||||||
mContext.unbindService(/*conn=*/ this);
|
mLifecycleExecutor.execute(() -> mContext.unbindService(/*conn=*/ this));
|
||||||
mService = null;
|
mService = null;
|
||||||
mEventListeners.clear();
|
mEventListeners.clear();
|
||||||
mRequestQueue.clear();
|
mRequestQueue.clear();
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ import android.util.Log;
|
|||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
import com.android.systemui.animation.ActivityLaunchAnimator;
|
import com.android.systemui.animation.ActivityLaunchAnimator;
|
||||||
import com.android.systemui.dagger.SysUISingleton;
|
import com.android.systemui.dagger.SysUISingleton;
|
||||||
|
import com.android.systemui.dagger.qualifiers.Background;
|
||||||
import com.android.systemui.dagger.qualifiers.Main;
|
import com.android.systemui.dagger.qualifiers.Main;
|
||||||
import com.android.systemui.plugins.ActivityStarter;
|
import com.android.systemui.plugins.ActivityStarter;
|
||||||
import com.android.systemui.util.settings.SecureSettings;
|
import com.android.systemui.util.settings.SecureSettings;
|
||||||
@@ -64,6 +65,7 @@ public class QuickAccessWalletController {
|
|||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final Executor mExecutor;
|
private final Executor mExecutor;
|
||||||
private final Executor mCallbackExecutor;
|
private final Executor mCallbackExecutor;
|
||||||
|
private final Executor mBgExecutor;
|
||||||
private final SecureSettings mSecureSettings;
|
private final SecureSettings mSecureSettings;
|
||||||
private final SystemClock mClock;
|
private final SystemClock mClock;
|
||||||
|
|
||||||
@@ -80,12 +82,14 @@ public class QuickAccessWalletController {
|
|||||||
Context context,
|
Context context,
|
||||||
@Main Executor executor,
|
@Main Executor executor,
|
||||||
@CallbackExecutor Executor callbackExecutor,
|
@CallbackExecutor Executor callbackExecutor,
|
||||||
|
@Background Executor bgExecutor,
|
||||||
SecureSettings secureSettings,
|
SecureSettings secureSettings,
|
||||||
QuickAccessWalletClient quickAccessWalletClient,
|
QuickAccessWalletClient quickAccessWalletClient,
|
||||||
SystemClock clock) {
|
SystemClock clock) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mExecutor = executor;
|
mExecutor = executor;
|
||||||
mCallbackExecutor = callbackExecutor;
|
mCallbackExecutor = callbackExecutor;
|
||||||
|
mBgExecutor = bgExecutor;
|
||||||
mSecureSettings = secureSettings;
|
mSecureSettings = secureSettings;
|
||||||
mQuickAccessWalletClient = quickAccessWalletClient;
|
mQuickAccessWalletClient = quickAccessWalletClient;
|
||||||
mClock = clock;
|
mClock = clock;
|
||||||
@@ -182,7 +186,7 @@ public class QuickAccessWalletController {
|
|||||||
* Re-create the {@link QuickAccessWalletClient} of the controller.
|
* Re-create the {@link QuickAccessWalletClient} of the controller.
|
||||||
*/
|
*/
|
||||||
public void reCreateWalletClient() {
|
public void reCreateWalletClient() {
|
||||||
mQuickAccessWalletClient = QuickAccessWalletClient.create(mContext);
|
mQuickAccessWalletClient = QuickAccessWalletClient.create(mContext, mBgExecutor);
|
||||||
mQawClientCreatedTimeMillis = mClock.elapsedRealtime();
|
mQawClientCreatedTimeMillis = mClock.elapsedRealtime();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,8 +21,11 @@ import android.content.Context;
|
|||||||
import android.service.quickaccesswallet.QuickAccessWalletClient;
|
import android.service.quickaccesswallet.QuickAccessWalletClient;
|
||||||
|
|
||||||
import com.android.systemui.dagger.SysUISingleton;
|
import com.android.systemui.dagger.SysUISingleton;
|
||||||
|
import com.android.systemui.dagger.qualifiers.Background;
|
||||||
import com.android.systemui.wallet.ui.WalletActivity;
|
import com.android.systemui.wallet.ui.WalletActivity;
|
||||||
|
|
||||||
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
import dagger.Binds;
|
import dagger.Binds;
|
||||||
import dagger.Module;
|
import dagger.Module;
|
||||||
import dagger.Provides;
|
import dagger.Provides;
|
||||||
@@ -45,7 +48,8 @@ public abstract class WalletModule {
|
|||||||
/** */
|
/** */
|
||||||
@SysUISingleton
|
@SysUISingleton
|
||||||
@Provides
|
@Provides
|
||||||
public static QuickAccessWalletClient provideQuickAccessWalletClient(Context context) {
|
public static QuickAccessWalletClient provideQuickAccessWalletClient(Context context,
|
||||||
return QuickAccessWalletClient.create(context);
|
@Background Executor bgExecutor) {
|
||||||
|
return QuickAccessWalletClient.create(context, bgExecutor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ public class WalletActivity extends LifecycleActivity implements
|
|||||||
getActionBar().setHomeActionContentDescription(R.string.accessibility_desc_close);
|
getActionBar().setHomeActionContentDescription(R.string.accessibility_desc_close);
|
||||||
WalletView walletView = requireViewById(R.id.wallet_view);
|
WalletView walletView = requireViewById(R.id.wallet_view);
|
||||||
|
|
||||||
mWalletClient = QuickAccessWalletClient.create(this);
|
mWalletClient = QuickAccessWalletClient.create(this, mExecutor);
|
||||||
mWalletScreenController = new WalletScreenController(
|
mWalletScreenController = new WalletScreenController(
|
||||||
this,
|
this,
|
||||||
walletView,
|
walletView,
|
||||||
|
|||||||
@@ -100,6 +100,7 @@ public class QuickAccessWalletControllerTest extends SysuiTestCase {
|
|||||||
mContext,
|
mContext,
|
||||||
MoreExecutors.directExecutor(),
|
MoreExecutors.directExecutor(),
|
||||||
MoreExecutors.directExecutor(),
|
MoreExecutors.directExecutor(),
|
||||||
|
MoreExecutors.directExecutor(),
|
||||||
mSecureSettings,
|
mSecureSettings,
|
||||||
mQuickAccessWalletClient,
|
mQuickAccessWalletClient,
|
||||||
mClock);
|
mClock);
|
||||||
|
|||||||
Reference in New Issue
Block a user