package vandy.mooc.model.services; import java.util.ArrayList; import java.util.List; import vandy.mooc.model.aidl.WeatherCall; import vandy.mooc.model.aidl.WeatherData; import android.content.Context; import android.content.Intent; import android.os.IBinder; import android.os.RemoteException; import android.util.Log; /** * This class uses synchronous AIDL interactions to expand Weathers * via an Weather Web service. The client that binds to this Service * will receive an IBinder that's an instance of WeatherRequest, which * extends IBinder. The client can then interact with this Service by * making two-way method calls on the WeatherCall object asking this * to lookup the current Weather for a designated location. After the * lookup is finishes successfully, this Service sends the Weather * results back to the Activity by returning a List of WeatherData. * An unsuccessful lookup will return a zero-sized List of * WeatherData. * * AIDL is an example of the Broker Pattern, in which all interprocess * communication details are hidden behind the AIDL interfaces. */ public class WeatherServiceSync extends WeatherServiceBase { /** * Factory method that makes an explicit intent used to start the * WeatherServiceSync when passed to bindService(). * * @param context * The context of the calling component. */ public static Intent makeIntent(Context context) { // TODO -- you fill in here. } /** * Called when a client calls bindService() with the proper * Intent. Returns the implementation of WeatherCall, which is * implicitly cast as an IBinder. */ @Override public IBinder onBind(Intent intent) { return mWeatherCallImpl; } /** * The concrete implementation of the AIDL Interface WeatherCall, * which extends the Stub class that implements WeatherCall, * thereby allowing Android to handle calls across process * boundaries. This method runs in a separate Thread as part of * the Android Binder framework. * * This implementation plays the role of Invoker in the Broker * Pattern. */ private final WeatherCall.Stub mWeatherCallImpl = new WeatherCall.Stub() { /** * Implement the AIDL WeatherCall getCurrentWeather() * method, which forwards to getWeatherResults() to obtain * results and then returns the results to the client. */ @Override public List<WeatherData> getCurrentWeather(String location) throws RemoteException { // TODO -- you fill in here. }; }