package com.cooleshow.base.utils;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.MotionEvent;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
/**
*
* author: blankj
* blog : http://blankj.com
* time : 2020/03/19
* desc :
*
*/
public class UtilsTransActivity extends AppCompatActivity {
private static final Map CALLBACK_MAP = new HashMap<>();
protected static final String EXTRA_DELEGATE = "extra_delegate";
public static void start(final TransActivityDelegate delegate) {
start(null, null, delegate, UtilsTransActivity.class);
}
public static void start(final Utils.Consumer consumer,
final TransActivityDelegate delegate) {
start(null, consumer, delegate, UtilsTransActivity.class);
}
public static void start(final Activity activity,
final TransActivityDelegate delegate) {
start(activity, null, delegate, UtilsTransActivity.class);
}
public static void start(final Activity activity,
final Utils.Consumer consumer,
final TransActivityDelegate delegate) {
start(activity, consumer, delegate, UtilsTransActivity.class);
}
protected static void start(final Activity activity,
final Utils.Consumer consumer,
final TransActivityDelegate delegate,
final Class> cls) {
if (delegate == null) return;
Intent starter = new Intent(Utils.getApp(), cls);
starter.putExtra(EXTRA_DELEGATE, delegate);
if (consumer != null) {
consumer.accept(starter);
}
if (activity == null) {
starter.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Utils.getApp().startActivity(starter);
} else {
activity.startActivity(starter);
}
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
overridePendingTransition(0, 0);
Serializable extra = getIntent().getSerializableExtra(EXTRA_DELEGATE);
if (!(extra instanceof TransActivityDelegate)) {
super.onCreate(savedInstanceState);
finish();
return;
}
TransActivityDelegate delegate = (TransActivityDelegate) extra;
CALLBACK_MAP.put(this, delegate);
delegate.onCreateBefore(this, savedInstanceState);
super.onCreate(savedInstanceState);
delegate.onCreated(this, savedInstanceState);
}
@Override
protected void onStart() {
super.onStart();
TransActivityDelegate callback = CALLBACK_MAP.get(this);
if (callback == null) return;
callback.onStarted(this);
}
@Override
protected void onResume() {
super.onResume();
TransActivityDelegate callback = CALLBACK_MAP.get(this);
if (callback == null) return;
callback.onResumed(this);
}
@Override
protected void onPause() {
overridePendingTransition(0, 0);
super.onPause();
TransActivityDelegate callback = CALLBACK_MAP.get(this);
if (callback == null) return;
callback.onPaused(this);
}
@Override
protected void onStop() {
super.onStop();
TransActivityDelegate callback = CALLBACK_MAP.get(this);
if (callback == null) return;
callback.onStopped(this);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
TransActivityDelegate callback = CALLBACK_MAP.get(this);
if (callback == null) return;
callback.onSaveInstanceState(this, outState);
}
@Override
protected void onDestroy() {
super.onDestroy();
TransActivityDelegate callback = CALLBACK_MAP.get(this);
if (callback == null) return;
callback.onDestroy(this);
CALLBACK_MAP.remove(this);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
TransActivityDelegate callback = CALLBACK_MAP.get(this);
if (callback == null) return;
callback.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
TransActivityDelegate callback = CALLBACK_MAP.get(this);
if (callback == null) return;
callback.onActivityResult(this, requestCode, resultCode, data);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
TransActivityDelegate callback = CALLBACK_MAP.get(this);
if (callback == null) return super.dispatchTouchEvent(ev);
if (callback.dispatchTouchEvent(this, ev)) {
return true;
}
return super.dispatchTouchEvent(ev);
}
public abstract static class TransActivityDelegate implements Serializable {
public void onCreateBefore(@NonNull UtilsTransActivity activity, @Nullable Bundle savedInstanceState) {/**/}
public void onCreated(@NonNull UtilsTransActivity activity, @Nullable Bundle savedInstanceState) {/**/}
public void onStarted(@NonNull UtilsTransActivity activity) {/**/}
public void onDestroy(@NonNull UtilsTransActivity activity) {/**/}
public void onResumed(@NonNull UtilsTransActivity activity) {/**/}
public void onPaused(@NonNull UtilsTransActivity activity) {/**/}
public void onStopped(@NonNull UtilsTransActivity activity) {/**/}
public void onSaveInstanceState(@NonNull UtilsTransActivity activity, Bundle outState) {/**/}
public void onRequestPermissionsResult(@NonNull UtilsTransActivity activity, int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {/**/}
public void onActivityResult(@NonNull UtilsTransActivity activity, int requestCode, int resultCode, Intent data) {/**/}
public boolean dispatchTouchEvent(@NonNull UtilsTransActivity activity, MotionEvent ev) {
return false;
}
}
}