Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

External Service Bind Use Case #91

Open
redirect11 opened this issue Dec 18, 2015 · 2 comments
Open

External Service Bind Use Case #91

redirect11 opened this issue Dec 18, 2015 · 2 comments

Comments

@redirect11
Copy link

Hi guys, i'm trying to implement the clean architecture into a big Android enterprise project since it fits perfectly in our needs. The only obscure thing it's about bind/unbind to external service (which expose an API trough AIDL). My question is: where the bind/unbind calls goes?

Our external services acts like a repository (method call -> callback with result) but it could push some data to the app occasionally (callback only).

So, in the use case where we pull data from service, this could fit into the data layer... about the second use case, when the service needs to push data, this goes in the data layer as well since some obeservable could notify about the changes to the service data (we use a memory cache which, once updated, notify about the new state).

In any way, for both to work this way, we need to bind to the external service interface: it's right to write use cases to handle this scenarios (like (un)registerForDataUpdates)?

@ljluestc
Copy link

ljluestc commented Sep 3, 2024

public class ExternalServiceBinder {
    private Context context;
    private IExternalService externalService;
    private ServiceConnection serviceConnection;

    public ExternalServiceBinder(Context context) {
        this.context = context;
        this.serviceConnection = new ServiceConnection() {
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                externalService = IExternalService.Stub.asInterface(service);
                // Notify listeners or perform actions after service is connected
            }

            @Override
            public void onServiceDisconnected(ComponentName name) {
                externalService = null;
                // Handle disconnection
            }
        };
    }

    public void bindService() {
        Intent intent = new Intent(context, ExternalService.class);
        context.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
    }

    public void unbindService() {
        context.unbindService(serviceConnection);
    }

    public IExternalService getService() {
        return externalService;
    }
}

@bagus-stimata
Copy link

bagus-stimata commented Sep 3, 2024 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants