BaseActivity.java
4.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
package com.sw.laryngoscope.base;
import android.app.Activity;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import androidx.annotation.Nullable;
import com.sw.laryngoscope.base.factory.PresenterFactory;
import com.sw.laryngoscope.base.factory.PresenterFactoryImpl;
import com.sw.laryngoscope.base.factory.PresenterProxy;
import com.sw.laryngoscope.base.factory.PresenterProxyImpl;
import com.sw.laryngoscope.utils.Logger;
import butterknife.ButterKnife;
/**
* @Description 继承自Activity的基类MvpActivity
* 使用代理模式来代理Presenter的创建、销毁、绑定、解绑以及Presenter的状态保存,其实就是管理Presenter的生命周期
* 首先在V层上定义需要创建的Presenter,声明自己模块具体的View接口类型和Presenter类型,最后实现自己View接口就ok了
* 如果要设置自己的Presenter创建工厂,必须在调用onResume方法和getPresenter方法之前设置
* @Author
* @Time 2019/05/29
*/
public abstract class BaseActivity<V extends BaseView, P extends BasePresenter<V>>
extends Activity implements BaseView, PresenterProxy<V, P> {
public String TAG;
private static final String PRESENTER_SAVE_KEY = "presenter_save_key";
private PresenterProxyImpl<V, P> mProxyImpl;
public View.OnLongClickListener longClickListener = new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
return true;
}
};
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.TRANSPARENT);
}
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
super.onCreate(savedInstanceState);
TAG = getClass().getSimpleName();
hideBottomUIMenu();
setContentView(getLayoutId());
ButterKnife.bind(this);
//创建被代理对象,传入默认Presenter的工厂
mProxyImpl = new PresenterProxyImpl<>(PresenterFactoryImpl.<V, P>createFactory(getClass()));
if (savedInstanceState != null) {
mProxyImpl.onRestoreInstanceState(savedInstanceState.getBundle(PRESENTER_SAVE_KEY));
}
}
@Override
protected void onResume() {
super.onResume();
mProxyImpl.onResume((V) this);
}
protected abstract int getLayoutId();
@Override
protected void onDestroy() {
super.onDestroy();
Logger.e(TAG, "V onDestroy ");
mProxyImpl.onDestroy();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBundle(PRESENTER_SAVE_KEY, mProxyImpl.onSaveInstanceState());
}
@Override
public void setPresenterFactory(PresenterFactory<V, P> presenterFactory) {
mProxyImpl.setPresenterFactory(presenterFactory);
}
@Override
public PresenterFactory<V, P> getPresenterFactory() {
return mProxyImpl.getPresenterFactory();
}
@Override
public P getPresenter() {
return mProxyImpl.getPresenter();
}
private void hideBottomUIMenu() {
//隐藏虚拟按键,并且全屏
if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api
View v = getWindow().getDecorView();
v.setSystemUiVisibility(View.GONE);
} else if (Build.VERSION.SDK_INT >= 19) {
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
}
}
}