@Override public void run() { final Context context = mCheckout.getContext(); final RobotmediaDatabase database = new RobotmediaDatabase(context); final Products products = database.load(mTask.getRequest()); onLoaded(products); } }
public static boolean exists(@Nonnull Context context) { final File file = getDatabaseFile(context); return file != null && file.exists(); }
@Nonnull Inventory.Products load(@Nonnull Inventory.Request request) { SQLiteDatabase db = null; try { final String databasePath = RobotmediaDatabase.getDatabasePath(mContext); db = openDatabase(databasePath, null, OPEN_READONLY); return loadProducts(request, db); } catch (RuntimeException e) { Billing.error(e); } finally { if (db != null) { db.close(); } } return toInventoryProducts(ProductTypes.ALL); }
@Nonnull private List<Purchase> loadPurchases(@Nonnull List<String> skus, @Nonnull SQLiteDatabase db) { Check.isNotEmpty(skus); final List<Purchase> purchases = new ArrayList<>(skus.size()); final String[] columns = {"_id", "state", "productId", "purchaseTime", "developerPayload"}; final String packageName = mContext.getPackageName(); Cursor c = null; try { c = db.query("purchases", columns, "productId in " + makeInClause(skus.size()), skus.toArray(new String[skus.size()]), null, null, null); if (c.moveToFirst()) { do { final String orderId = c.getString(0); final int state = c.getInt(1); final String sku = c.getString(2); final long time = c.getLong(3); final String payload = c.getString(4); final Purchase p = new Purchase(sku, orderId, packageName, time, state, payload, "", false, "", ""); purchases.add(p); } while (c.moveToNext()); } } finally { if (c != null) { c.close(); } } return purchases; } }
@Override public void run() { if (RobotmediaDatabase.exists(mCheckout.getContext())) { mBackground.execute(new Loader()); } else { onLoaded(RobotmediaDatabase.toInventoryProducts(ProductTypes.ALL)); } }
@Nonnull private Inventory.Products loadProducts(@Nonnull Inventory.Request request, @Nonnull SQLiteDatabase db) { final Inventory.Products result = new Inventory.Products(); for (String productId : ProductTypes.ALL) { final Inventory.Product product = new Inventory.Product(productId, true); final List<String> skus = request.getSkus(productId); if (!skus.isEmpty()) { product.setPurchases(loadPurchases(skus, db)); } else { Billing.warning("There are no SKUs for \"" + product.id + "\" product. No purchase information will be loaded"); } result.add(product); } return result; }
@Test public void testShouldCreateValidInClause() throws Exception { assertEquals("(?)", makeInClause(1)); assertEquals("(?,?)", makeInClause(2)); assertEquals("(?,?,?)", makeInClause(3)); assertEquals("(?,?,?,?)", makeInClause(4)); try { makeInClause(0); fail(); } catch (RuntimeException e) { // ok } }
@Nullable static String getDatabasePath(@Nonnull Context context) { final File file = getDatabaseFile(context); return file != null ? file.getPath() : null; }