package androidx.activity.result.contract; import android.annotation.TargetApi; import android.content.ClipData; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Build; import androidx.activity.result.ActivityResult; import androidx.activity.result.IntentSenderRequest; import androidx.activity.result.contract.ActivityResultContract; import androidx.annotation.CallSuper; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.collection.ArrayMap; import androidx.core.content.ContextCompat; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; public final class ActivityResultContracts { @TargetApi(19) public static class CreateDocument extends ActivityResultContract { @NonNull @CallSuper public Intent createIntent(@NonNull Context context, @NonNull String str) { return new Intent("android.intent.action.CREATE_DOCUMENT").setType("*/*").putExtra("android.intent.extra.TITLE", str); } @Nullable public final ActivityResultContract.SynchronousResult getSynchronousResult(@NonNull Context context, @NonNull String str) { return null; } @Override // androidx.activity.result.contract.ActivityResultContract @Nullable public final Uri parseResult(int i, @Nullable Intent intent) { if (intent == null || i != -1) { return null; } return intent.getData(); } } public static class GetContent extends ActivityResultContract { @NonNull @CallSuper public Intent createIntent(@NonNull Context context, @NonNull String str) { return new Intent("android.intent.action.GET_CONTENT").addCategory("android.intent.category.OPENABLE").setType(str); } @Nullable public final ActivityResultContract.SynchronousResult getSynchronousResult(@NonNull Context context, @NonNull String str) { return null; } @Override // androidx.activity.result.contract.ActivityResultContract @Nullable public final Uri parseResult(int i, @Nullable Intent intent) { if (intent == null || i != -1) { return null; } return intent.getData(); } } @TargetApi(18) public static class GetMultipleContents extends ActivityResultContract> { @NonNull public static List getClipDataUris(@NonNull Intent intent) { LinkedHashSet linkedHashSet = new LinkedHashSet(); if (intent.getData() != null) { linkedHashSet.add(intent.getData()); } ClipData clipData = intent.getClipData(); if (clipData == null && linkedHashSet.isEmpty()) { return Collections.emptyList(); } if (clipData != null) { for (int i = 0; i < clipData.getItemCount(); i++) { Uri uri = clipData.getItemAt(i).getUri(); if (uri != null) { linkedHashSet.add(uri); } } } return new ArrayList(linkedHashSet); } @NonNull @CallSuper public Intent createIntent(@NonNull Context context, @NonNull String str) { return new Intent("android.intent.action.GET_CONTENT").addCategory("android.intent.category.OPENABLE").setType(str).putExtra("android.intent.extra.ALLOW_MULTIPLE", true); } @Nullable public final ActivityResultContract.SynchronousResult> getSynchronousResult(@NonNull Context context, @NonNull String str) { return null; } @Override // androidx.activity.result.contract.ActivityResultContract @NonNull public final List parseResult(int i, @Nullable Intent intent) { return (intent == null || i != -1) ? Collections.emptyList() : getClipDataUris(intent); } } @TargetApi(19) public static class OpenDocument extends ActivityResultContract { @NonNull @CallSuper public Intent createIntent(@NonNull Context context, @NonNull String[] strArr) { return new Intent("android.intent.action.OPEN_DOCUMENT").putExtra("android.intent.extra.MIME_TYPES", strArr).setType("*/*"); } @Nullable public final ActivityResultContract.SynchronousResult getSynchronousResult(@NonNull Context context, @NonNull String[] strArr) { return null; } @Override // androidx.activity.result.contract.ActivityResultContract @Nullable public final Uri parseResult(int i, @Nullable Intent intent) { if (intent == null || i != -1) { return null; } return intent.getData(); } } @TargetApi(21) public static class OpenDocumentTree extends ActivityResultContract { @NonNull @CallSuper public Intent createIntent(@NonNull Context context, @Nullable Uri uri) { Intent intent = new Intent("android.intent.action.OPEN_DOCUMENT_TREE"); if (Build.VERSION.SDK_INT >= 26 && uri != null) { intent.putExtra("android.provider.extra.INITIAL_URI", uri); } return intent; } @Nullable public final ActivityResultContract.SynchronousResult getSynchronousResult(@NonNull Context context, @Nullable Uri uri) { return null; } @Override // androidx.activity.result.contract.ActivityResultContract @Nullable public final Uri parseResult(int i, @Nullable Intent intent) { if (intent == null || i != -1) { return null; } return intent.getData(); } } @TargetApi(19) public static class OpenMultipleDocuments extends ActivityResultContract> { @NonNull @CallSuper public Intent createIntent(@NonNull Context context, @NonNull String[] strArr) { return new Intent("android.intent.action.OPEN_DOCUMENT").putExtra("android.intent.extra.MIME_TYPES", strArr).putExtra("android.intent.extra.ALLOW_MULTIPLE", true).setType("*/*"); } @Nullable public final ActivityResultContract.SynchronousResult> getSynchronousResult(@NonNull Context context, @NonNull String[] strArr) { return null; } @Override // androidx.activity.result.contract.ActivityResultContract @NonNull public final List parseResult(int i, @Nullable Intent intent) { return (i != -1 || intent == null) ? Collections.emptyList() : GetMultipleContents.getClipDataUris(intent); } } public static final class PickContact extends ActivityResultContract { @NonNull public Intent createIntent(@NonNull Context context, @Nullable Void r2) { return new Intent("android.intent.action.PICK").setType("vnd.android.cursor.dir/contact"); } @Override // androidx.activity.result.contract.ActivityResultContract @Nullable public Uri parseResult(int i, @Nullable Intent intent) { if (intent == null || i != -1) { return null; } return intent.getData(); } } public static final class RequestMultiplePermissions extends ActivityResultContract> { public static final String ACTION_REQUEST_PERMISSIONS = "androidx.activity.result.contract.action.REQUEST_PERMISSIONS"; public static final String EXTRA_PERMISSIONS = "androidx.activity.result.contract.extra.PERMISSIONS"; public static final String EXTRA_PERMISSION_GRANT_RESULTS = "androidx.activity.result.contract.extra.PERMISSION_GRANT_RESULTS"; @NonNull public static Intent createIntent(@NonNull String[] strArr) { return new Intent(ACTION_REQUEST_PERMISSIONS).putExtra(EXTRA_PERMISSIONS, strArr); } @NonNull public Intent createIntent(@NonNull Context context, @NonNull String[] strArr) { return createIntent(strArr); } @Nullable public ActivityResultContract.SynchronousResult> getSynchronousResult(@NonNull Context context, @Nullable String[] strArr) { if (strArr == null || strArr.length == 0) { return new ActivityResultContract.SynchronousResult<>(Collections.emptyMap()); } ArrayMap arrayMap = new ArrayMap(); boolean z2 = true; for (String str : strArr) { boolean z3 = ContextCompat.checkSelfPermission(context, str) == 0; arrayMap.put(str, Boolean.valueOf(z3)); if (!z3) { z2 = false; } } if (z2) { return new ActivityResultContract.SynchronousResult<>(arrayMap); } return null; } @Override // androidx.activity.result.contract.ActivityResultContract @NonNull public Map parseResult(int i, @Nullable Intent intent) { if (i != -1) { return Collections.emptyMap(); } if (intent == null) { return Collections.emptyMap(); } String[] stringArrayExtra = intent.getStringArrayExtra(EXTRA_PERMISSIONS); int[] intArrayExtra = intent.getIntArrayExtra(EXTRA_PERMISSION_GRANT_RESULTS); if (intArrayExtra == null || stringArrayExtra == null) { return Collections.emptyMap(); } HashMap hashMap = new HashMap(); int length = stringArrayExtra.length; for (int i2 = 0; i2 < length; i2++) { hashMap.put(stringArrayExtra[i2], Boolean.valueOf(intArrayExtra[i2] == 0)); } return hashMap; } } public static final class RequestPermission extends ActivityResultContract { @NonNull public Intent createIntent(@NonNull Context context, @NonNull String str) { return RequestMultiplePermissions.createIntent(new String[]{str}); } @Nullable public ActivityResultContract.SynchronousResult getSynchronousResult(@NonNull Context context, @Nullable String str) { if (str == null) { return new ActivityResultContract.SynchronousResult<>(Boolean.FALSE); } if (ContextCompat.checkSelfPermission(context, str) == 0) { return new ActivityResultContract.SynchronousResult<>(Boolean.TRUE); } return null; } @Override // androidx.activity.result.contract.ActivityResultContract @NonNull public Boolean parseResult(int i, @Nullable Intent intent) { if (intent == null || i != -1) { return Boolean.FALSE; } int[] intArrayExtra = intent.getIntArrayExtra(RequestMultiplePermissions.EXTRA_PERMISSION_GRANT_RESULTS); if (intArrayExtra == null || intArrayExtra.length == 0) { return Boolean.FALSE; } boolean z2 = false; if (intArrayExtra[0] == 0) { z2 = true; } return Boolean.valueOf(z2); } } public static final class StartActivityForResult extends ActivityResultContract { public static final String EXTRA_ACTIVITY_OPTIONS_BUNDLE = "androidx.activity.result.contract.extra.ACTIVITY_OPTIONS_BUNDLE"; @NonNull public Intent createIntent(@NonNull Context context, @NonNull Intent intent) { return intent; } @Override // androidx.activity.result.contract.ActivityResultContract @NonNull public ActivityResult parseResult(int i, @Nullable Intent intent) { return new ActivityResult(i, intent); } } public static final class StartIntentSenderForResult extends ActivityResultContract { public static final String ACTION_INTENT_SENDER_REQUEST = "androidx.activity.result.contract.action.INTENT_SENDER_REQUEST"; public static final String EXTRA_INTENT_SENDER_REQUEST = "androidx.activity.result.contract.extra.INTENT_SENDER_REQUEST"; public static final String EXTRA_SEND_INTENT_EXCEPTION = "androidx.activity.result.contract.extra.SEND_INTENT_EXCEPTION"; @NonNull public Intent createIntent(@NonNull Context context, @NonNull IntentSenderRequest intentSenderRequest) { return new Intent(ACTION_INTENT_SENDER_REQUEST).putExtra(EXTRA_INTENT_SENDER_REQUEST, intentSenderRequest); } @Override // androidx.activity.result.contract.ActivityResultContract @NonNull public ActivityResult parseResult(int i, @Nullable Intent intent) { return new ActivityResult(i, intent); } } public static class TakePicture extends ActivityResultContract { @NonNull @CallSuper public Intent createIntent(@NonNull Context context, @NonNull Uri uri) { return new Intent("android.media.action.IMAGE_CAPTURE").putExtra("output", uri); } @Nullable public final ActivityResultContract.SynchronousResult getSynchronousResult(@NonNull Context context, @NonNull Uri uri) { return null; } @Override // androidx.activity.result.contract.ActivityResultContract @NonNull public final Boolean parseResult(int i, @Nullable Intent intent) { return Boolean.valueOf(i == -1); } } public static class TakePicturePreview extends ActivityResultContract { @NonNull @CallSuper public Intent createIntent(@NonNull Context context, @Nullable Void r2) { return new Intent("android.media.action.IMAGE_CAPTURE"); } @Nullable public final ActivityResultContract.SynchronousResult getSynchronousResult(@NonNull Context context, @Nullable Void r2) { return null; } @Override // androidx.activity.result.contract.ActivityResultContract @Nullable public final Bitmap parseResult(int i, @Nullable Intent intent) { if (intent == null || i != -1) { return null; } return (Bitmap) intent.getParcelableExtra("data"); } } public static class TakeVideo extends ActivityResultContract { @NonNull @CallSuper public Intent createIntent(@NonNull Context context, @NonNull Uri uri) { return new Intent("android.media.action.VIDEO_CAPTURE").putExtra("output", uri); } @Nullable public final ActivityResultContract.SynchronousResult getSynchronousResult(@NonNull Context context, @NonNull Uri uri) { return null; } @Override // androidx.activity.result.contract.ActivityResultContract @Nullable public final Bitmap parseResult(int i, @Nullable Intent intent) { if (intent == null || i != -1) { return null; } return (Bitmap) intent.getParcelableExtra("data"); } } private ActivityResultContracts() { } }