package org.onepf.oms; import android.content.Context; import android.content.Intent; import android.os.Build; import android.os.RemoteException; import android.util.Log; import com.octo.android.robospice.SpiceManager; import com.octo.android.robospice.persistence.DurationInMillis; import com.octo.android.robospice.persistence.exception.SpiceException; import com.octo.android.robospice.request.listener.RequestListener; import java.util.concurrent.CountDownLatch; import com.aptoide.amethyst.openiab.webservices.IabAvailableRequest; import com.aptoide.amethyst.openiab.webservices.json.IabAvailableJson; /** * Created by j-pac on 12-02-2014. */ public class StoreBinder extends IOpenAppstore.Stub { private static final String BILLING_BIND_INTENT = "org.onepf.oms.billing.BIND"; private final SpiceManager manager; private Context context; public StoreBinder(Context context, SpiceManager manager) { this.context = context; this.manager = manager; } @Override public String getAppstoreName() throws RemoteException { Log.d("AptoideStore", "[getAppstoreName]"); return "cm.aptoide.pt"; } @Override public boolean isPackageInstaller(String packageName) throws RemoteException { Log.d("AptoideStoreS", "[isPackageInstaller] "+ context); String packageInstaller = context.getPackageManager().getInstallerPackageName(packageName); return packageInstaller == null || packageInstaller.equals(context.getPackageName()); } @Override public boolean isBillingAvailable(String packageName) throws RemoteException { Log.d("AptoideStore", "[isBillingAvailable]"); if(Build.VERSION.SDK_INT<Build.VERSION_CODES.FROYO){ return false; } try { final CountDownLatch latch = new CountDownLatch(1); IabAvailableRequest request = new IabAvailableRequest(); request.setApiVersion(Integer.toString(3)); request.setPackageName(packageName); final boolean[] result = { false }; manager.execute(request, packageName + "-iabavalaible", DurationInMillis.ONE_MINUTE,new RequestListener<IabAvailableJson>() { @Override public void onRequestFailure(SpiceException spiceException) { latch.countDown(); } @Override public void onRequestSuccess(IabAvailableJson response) { if("OK".equals(response.getStatus())) { if("OK".equals(response.getResponse().getIabavailable())) { Log.d("AptoideStore", "billing is available"); result[0] = true; } } latch.countDown(); } }); latch.await(); return result[0]; } catch (Exception e) { e.printStackTrace(); } return false; } @Override public int getPackageVersion(String packageName) throws RemoteException { Log.d("AptoideStore", "[getPackageVersion]"); return Integer.MAX_VALUE; //Undefined } @Override public Intent getBillingServiceIntent() throws RemoteException { Log.d("AptoideStore", "[getBillingServiceIntent]"); Intent intent = new Intent(context, BillingService.class); intent.setAction(BILLING_BIND_INTENT); return intent; } @Override public Intent getProductPageIntent(String packageName) throws RemoteException { return null; } @Override public Intent getRateItPageIntent(String packageName) throws RemoteException { return null; } @Override public Intent getSameDeveloperPageIntent(String packageName) throws RemoteException { return null; } @Override public boolean areOutsideLinksAllowed() throws RemoteException { return false; } }