package org.fdroid.fdroid.data; import android.app.Activity; import android.content.ComponentName; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Bundle; import org.fdroid.fdroid.Utils; /** * Replies with the public download URL for the OBB that belongs to the * requesting app/version. If it doesn't know the OBB URL for the requesting * app, the {@code resultCode} will be {@link Activity#RESULT_CANCELED}. The * request must be sent with {@link Activity#startActivityForResult(Intent, int)} * in order to receive a reply, which will include an {@link Intent} with the * URL as data and the SHA-256 hash as a String {@code Intent} extra. */ public class ObbUrlActivity extends Activity { public static final String TAG = "ObbUrlActivity"; public static final String ACTION_GET_OBB_MAIN_URL = "org.fdroid.fdroid.action.GET_OBB_MAIN_URL"; public static final String ACTION_GET_OBB_PATCH_URL = "org.fdroid.fdroid.action.GET_OBB_PATCH_URL"; public static final String EXTRA_SHA256 = "org.fdroid.fdroid.extra.SHA256"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = getIntent(); ComponentName componentName = getCallingActivity(); setResult(RESULT_CANCELED); if (intent != null && componentName != null) { String action = intent.getAction(); String packageName = componentName.getPackageName(); Apk apk = null; try { PackageManager pm = getPackageManager(); PackageInfo packageInfo = pm.getPackageInfo(packageName, 0); apk = ApkProvider.Helper.findApkFromAnyRepo(this, packageName, packageInfo.versionCode); } catch (PackageManager.NameNotFoundException e) { Utils.debugLog(TAG, e.getLocalizedMessage()); } if (apk == null) { Utils.debugLog(TAG, "got null APK for " + packageName); } else if (ACTION_GET_OBB_MAIN_URL.equals(action)) { String url = apk.getMainObbUrl(); if (url != null) { intent.setData(Uri.parse(url)); intent.putExtra(EXTRA_SHA256, apk.obbMainFileSha256); } setResult(RESULT_OK, intent); } else if (ACTION_GET_OBB_PATCH_URL.equals(action)) { String url = apk.getPatchObbUrl(); if (url != null) { intent.setData(Uri.parse(url)); intent.putExtra(EXTRA_SHA256, apk.obbPatchFileSha256); } setResult(RESULT_OK, intent); } } finish(); } }