Skip to content

Commit

Permalink
feature: add Scene.startActivityForResult(Intent, Int, Bundle?)
Browse files Browse the repository at this point in the history
  • Loading branch information
qii committed Jan 21, 2020
1 parent 894c46a commit 2617e78
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 3 deletions.
Expand Up @@ -20,8 +20,10 @@
import android.arch.lifecycle.LifecycleOwner;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.MainThread;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import com.bytedance.scene.interfaces.ActivityResultCallback;
import com.bytedance.scene.interfaces.PermissionResultCallback;
Expand Down Expand Up @@ -70,6 +72,33 @@ public void onActivityCreated() {
}
}

@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
@MainThread
public static void startActivityForResult(@NonNull final Activity activity, @NonNull final LifecycleOwner lifecycleOwner,
@NonNull final Intent intent, final int requestCode,
@Nullable final Bundle options,
@NonNull final ActivityResultCallback resultCallback) {
ThreadUtility.checkUIThread();
if (isDestroyed(activity, lifecycleOwner)) {
return;
}
final SceneActivityCompatibilityLayerFragment fragment = install(activity);
if (fragment.isAdded()) {
fragment.startActivityForResultByScene(lifecycleOwner, intent, requestCode, options, resultCallback);
} else {
fragment.addOnActivityCreatedCallback(new SceneActivityCompatibilityLayerFragment.OnActivityCreatedCallback() {
@Override
public void onActivityCreated() {
fragment.removeOnActivityCreatedCallback(this);
if (isDestroyed(activity, lifecycleOwner)) {
return;
}
fragment.startActivityForResultByScene(lifecycleOwner, intent, requestCode, options, resultCallback);
}
});
}
}

@MainThread
@RequiresApi(Build.VERSION_CODES.M)
public static void requestPermissions(@NonNull final Activity activity, @NonNull final LifecycleOwner lifecycleOwner,
Expand Down
Expand Up @@ -77,7 +77,8 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
}

@MainThread
void startActivityForResultByScene(@NonNull final LifecycleOwner lifecycleOwner, @NonNull Intent intent, final int requestCode, @NonNull ActivityResultCallback resultCallback) {
void startActivityForResultByScene(@NonNull final LifecycleOwner lifecycleOwner, @NonNull Intent intent,
final int requestCode, @NonNull ActivityResultCallback resultCallback) {
if (!isCurrentStatusValid(lifecycleOwner)) {
return;
}
Expand All @@ -97,9 +98,34 @@ void onDestroy() {
});
}

@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
@MainThread
void startActivityForResultByScene(@NonNull final LifecycleOwner lifecycleOwner, @NonNull Intent intent,
final int requestCode, @Nullable Bundle options,
@NonNull ActivityResultCallback resultCallback) {
if (!isCurrentStatusValid(lifecycleOwner)) {
return;
}

if (requestCode < 0) {
startActivity(intent);
return;
}
mResultCallbackMap.put(requestCode, resultCallback);
startActivityForResult(intent, requestCode, options);
lifecycleOwner.getLifecycle().addObserver(new LifecycleObserver() {
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
void onDestroy() {
lifecycleOwner.getLifecycle().removeObserver(this);
mResultCallbackMap.remove(requestCode);
}
});
}

@MainThread
@RequiresApi(Build.VERSION_CODES.M)
void requestPermissionsByScene(@NonNull final LifecycleOwner lifecycleOwner, @NonNull String[] permissions, final int requestCode, @NonNull final PermissionResultCallback resultCallback) {
void requestPermissionsByScene(@NonNull final LifecycleOwner lifecycleOwner, @NonNull String[] permissions,
final int requestCode, @NonNull final PermissionResultCallback resultCallback) {
if (!isCurrentStatusValid(lifecycleOwner)) {
return;
}
Expand Down Expand Up @@ -149,7 +175,8 @@ private boolean isCurrentStatusValid(@NonNull final LifecycleOwner lifecycleOwne
}

@MainThread
void addConfigurationChangedListener(@NonNull final LifecycleOwner lifecycleOwner, @NonNull final ConfigurationChangedListener configurationChangedListener) {
void addConfigurationChangedListener(@NonNull final LifecycleOwner lifecycleOwner,
@NonNull final ConfigurationChangedListener configurationChangedListener) {
if (!isCurrentStatusValid(lifecycleOwner)) {
return;
}
Expand Down
Expand Up @@ -21,6 +21,7 @@ import android.arch.lifecycle.OnLifecycleEvent
import android.content.Intent
import android.content.res.Configuration
import android.os.Build
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.support.annotation.RequiresApi
Expand Down Expand Up @@ -103,6 +104,16 @@ fun Scene.startActivityForResult(intent: Intent, requestCode: Int, resultCallbac
}
}

@RequiresApi(Build.VERSION_CODES.JELLY_BEAN)
fun Scene.startActivityForResult(intent: Intent, requestCode: Int, options: Bundle?, resultCallback: (Int, Intent?) -> Unit) {
activity?.let {
ActivityCompatibilityUtility.startActivityForResult(it, this, intent, requestCode, options,
ActivityResultCallback { resultCode: Int, result: Intent? ->
resultCallback(resultCode, result)
})
}
}

@RequiresApi(Build.VERSION_CODES.M)
fun Scene.requestPermissions(permissions: Array<String>, requestCode: Int, resultCallback: (IntArray?) -> Unit) {
activity?.let {
Expand Down

0 comments on commit 2617e78

Please sign in to comment.