Skip to content

Commit df2f4d7

Browse files
committed
Refactor.
1 parent 06e4b8b commit df2f4d7

30 files changed

Lines changed: 592 additions & 772 deletions

activitytaskview/build.gradle

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,19 @@ android {
88
targetSdkVersion 28
99
versionCode 1
1010
versionName "1.0"
11-
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
1211
}
1312
buildTypes {
1413
release {
1514
minifyEnabled false
1615
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
1716
}
1817
}
19-
lintOptions {
20-
abortOnError false
18+
dataBinding {
19+
enabled = true
20+
}
21+
compileOptions {
22+
sourceCompatibility = '1.8'
23+
targetCompatibility = '1.8'
2124
}
2225
}
2326

@@ -28,4 +31,5 @@ dependencies {
2831
testImplementation 'junit:junit:4.12'
2932
androidTestImplementation 'androidx.test:runner:1.2.0'
3033
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
34+
implementation 'com.google.android.material:material:1.1.0-alpha10'
3135
}

activitytaskview/src/main/AndroidManifest.xml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,19 @@
66

77
<application
88
android:allowBackup="true"
9-
android:icon="@drawable/activity_task"
9+
android:icon="@mipmap/activity_task"
1010
android:label="@string/app_name"
1111
android:supportsRtl="true"
1212
android:theme="@style/AppTheme">
13-
<activity android:name="cc.rome753.activitytask.RequestOverlayActivity">
13+
<activity android:name=".MainActivity">
1414
<intent-filter>
1515
<action android:name="android.intent.action.MAIN" />
1616

1717
<category android:name="android.intent.category.LAUNCHER" />
1818
</intent-filter>
1919
</activity>
20-
<receiver android:name=".LifecycleReceiver" >
20+
21+
<receiver android:name=".LifecycleReceiver">
2122
<intent-filter>
2223
<action android:name="action_update_lifecycle" />
2324
</intent-filter>

activitytaskview/src/main/java/cc/rome753/activitytask/AUtils.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,6 @@
99

1010
public class AUtils {
1111

12-
public static final int[] COLORS = {
13-
0x00000000,//onCreate
14-
0x33ff0000,//onStart
15-
0xffff0000,//onResume
16-
17-
0xff000000,//onPause
18-
0x33000000,//onStop
19-
0x00000000//onDestroy
20-
};
21-
2212
public static int dp2px(float dpValue) {
2313
return (int) (0.5f + dpValue * Resources.getSystem().getDisplayMetrics().density);
2414
}

activitytaskview/src/main/java/cc/rome753/activitytask/ActivityTask.java

Lines changed: 45 additions & 214 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,22 @@
11
package cc.rome753.activitytask;
22

3-
import android.app.Activity;
4-
import android.app.Application;
53
import android.content.Context;
6-
import android.content.Intent;
74
import android.graphics.PixelFormat;
85
import android.os.Build;
9-
import android.os.Bundle;
106
import android.os.Handler;
117
import android.os.Looper;
128
import android.os.Message;
13-
import android.provider.Settings;
14-
import android.util.Log;
159
import android.view.Gravity;
1610
import android.view.View;
1711
import android.view.WindowManager;
1812

19-
import androidx.fragment.app.Fragment;
20-
import androidx.fragment.app.FragmentActivity;
21-
import androidx.fragment.app.FragmentManager;
22-
2313
import java.util.LinkedList;
14+
import java.util.List;
2415
import java.util.Queue;
2516

26-
import cc.rome753.activitytask.model.FragmentInfo;
27-
import cc.rome753.activitytask.model.TaskInfo;
17+
import cc.rome753.activitytask.model.LifecycleInfo;
2818
import cc.rome753.activitytask.view.ActivityTaskView;
29-
30-
import static android.view.View.GONE;
31-
import static android.view.View.VISIBLE;
32-
import static cc.rome753.activitytask.AUtils.getSimpleName;
19+
import cc.rome753.activitytask.view.FragmentTaskView;
3320

3421
/**
3522
* Created by rome753@163.com on 2017/4/16.
@@ -40,67 +27,15 @@ public class ActivityTask {
4027
private static final String TAG = ActivityTask.class.getSimpleName();
4128

4229
private static ActivityTaskView activityTaskView;
43-
private static boolean autoHide = true;
44-
private static long interval = 100;
45-
private static int textSize = 12;
46-
47-
/**
48-
* Is current app front. If not, hide the activityTaskView.
49-
* <p>
50-
* front: Activity A onPause -> Activity B onResume -> Activity A onStop
51-
* <p>
52-
* not front: Activity A onPause -> Activity A onStop
53-
*/
54-
private static boolean isFront;
55-
56-
/**
57-
* auto hide when app is not in foreground, default true
58-
*/
59-
public static void setAutoHide(boolean autoHide) {
60-
ActivityTask.autoHide = autoHide;
61-
}
62-
63-
/**
64-
* interval between lifecycle, default 100(ms)
65-
*/
66-
public static void setInterval(long interval) {
67-
ActivityTask.interval = interval;
68-
}
6930

70-
public static int getTextSize() {
71-
return textSize;
72-
}
73-
74-
public static void setTextSize(int textSize) {
75-
ActivityTask.textSize = textSize;
76-
}
77-
78-
/**
79-
* Init in your application's onCreate()
80-
*
81-
* @param app your application
82-
* @param debug your app module BuildConfig.DEBUG
83-
*/
84-
public static void init(Application app, boolean debug) {
85-
if (!debug) {
86-
return;
87-
}
88-
if (Build.VERSION.SDK_INT >= 23 && !Settings.canDrawOverlays(app)) {
89-
Intent intent = new Intent(app, RequestOverlayActivity.class);
90-
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
91-
app.startActivity(intent);
92-
} else {
93-
start(app);
94-
}
95-
}
31+
private static long interval = 100;
9632

97-
static void start(Application app) {
98-
addViewToWindow(app, activityTaskView = new ActivityTaskView(app));
99-
registerActivityLifecycleCallbacks(app);
33+
public static void start(Context context) {
34+
addViewToWindow(context, activityTaskView = new ActivityTaskView(context));
10035
}
10136

102-
private static void addViewToWindow(Application app, View view){
103-
WindowManager windowManager = (WindowManager) app.getSystemService(Context.WINDOW_SERVICE);
37+
private static void addViewToWindow(Context context, View view){
38+
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
10439
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
10540
if (Build.VERSION.SDK_INT >= 26) {// Android 8.0
10641
params.type= WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
@@ -113,151 +48,25 @@ private static void addViewToWindow(Application app, View view){
11348
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
11449
params.gravity = Gravity.START | Gravity.TOP;
11550
params.x = 0;
116-
params.y = app.getResources().getDisplayMetrics().heightPixels - 500;
51+
params.y = context.getResources().getDisplayMetrics().heightPixels - 500;
11752
if(windowManager != null) {
11853
windowManager.addView(view, params);
11954
}
12055
}
12156

122-
private static void registerActivityLifecycleCallbacks(Application app){
123-
final QueueHandler queueHandler = new QueueHandler();
124-
app.registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {
125-
126-
@Override
127-
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
128-
Log.w(TAG, activity.getClass().getName() + "@" + activity.hashCode() + " " + activity.getTaskId() + " " + " onActivityCreated");
129-
queueHandler.add(new TaskInfo(0, String.valueOf(activity.getTaskId()), getSimpleName(activity)));
130-
registerFragmentLifecycleCallbacks(activity, queueHandler);
131-
}
132-
133-
@Override
134-
public void onActivityStarted(Activity activity) {
135-
Log.d(TAG, activity.getClass().getSimpleName() + " onActivityStarted");
136-
queueHandler.add(new TaskInfo(1, String.valueOf(activity.getTaskId()), getSimpleName(activity)));
137-
}
138-
139-
@Override
140-
public void onActivityResumed(Activity activity) {
141-
Log.d(TAG, activity.getClass().getSimpleName() + " onActivityResumed");
142-
queueHandler.add(new TaskInfo(2, String.valueOf(activity.getTaskId()), getSimpleName(activity)));
143-
if(autoHide) {
144-
activityTaskView.setVisibility(VISIBLE);
145-
isFront = true;
146-
}
147-
}
148-
149-
@Override
150-
public void onActivityPaused(Activity activity) {
151-
Log.d(TAG, activity.getClass().getSimpleName() + " onActivityPaused");
152-
queueHandler.add(new TaskInfo(3, String.valueOf(activity.getTaskId()), getSimpleName(activity)));
153-
isFront = false;
154-
}
155-
156-
@Override
157-
public void onActivityStopped(Activity activity) {
158-
Log.d(TAG, activity.getClass().getSimpleName() + " onActivityStopped");
159-
queueHandler.add(new TaskInfo(4, String.valueOf(activity.getTaskId()), getSimpleName(activity)));
160-
if(autoHide){
161-
activityTaskView.setVisibility(isFront ? VISIBLE : GONE);
162-
}
163-
164-
}
165-
166-
@Override
167-
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
168-
Log.d(TAG, activity.getClass().getSimpleName() + " onActivitySaveInstanceState");
169-
}
170-
171-
@Override
172-
public void onActivityDestroyed(Activity activity) {
173-
Log.w(TAG, activity.getClass().getSimpleName() + " onActivityDestroyed");
174-
queueHandler.add(new TaskInfo(5, String.valueOf(activity.getTaskId()), getSimpleName(activity)));
175-
}
176-
});
177-
}
178-
179-
private static void registerFragmentLifecycleCallbacks(Activity activity, final QueueHandler queueHandler){
180-
if(activity instanceof FragmentActivity){
181-
((FragmentActivity) activity).getSupportFragmentManager().registerFragmentLifecycleCallbacks(new FragmentManager.FragmentLifecycleCallbacks() {
182-
@Override
183-
public void onFragmentPreAttached(FragmentManager fm, Fragment f, Context context) {
184-
Log.d(TAG, getSimpleName(context) + ": " + Thread.currentThread().getStackTrace()[2].getMethodName());
185-
}
186-
187-
@Override
188-
public void onFragmentAttached(FragmentManager fm, Fragment f, Context context) {
189-
Log.d(TAG, getSimpleName(f) + ": " + Thread.currentThread().getStackTrace()[2].getMethodName());
190-
}
191-
192-
@Override
193-
public void onFragmentCreated(FragmentManager fm, Fragment f, Bundle savedInstanceState) {
194-
Log.d(TAG, getSimpleName(f) + ": " + Thread.currentThread().getStackTrace()[2].getMethodName());
195-
queueHandler.add(new FragmentInfo(0, f));
196-
197-
}
198-
199-
@Override
200-
public void onFragmentActivityCreated(FragmentManager fm, Fragment f, Bundle savedInstanceState) {
201-
Log.d(TAG, getSimpleName(f) + ": " + Thread.currentThread().getStackTrace()[2].getMethodName());
202-
}
203-
204-
@Override
205-
public void onFragmentViewCreated(FragmentManager fm, Fragment f, View v, Bundle savedInstanceState) {
206-
Log.d(TAG, getSimpleName(f) + ": " + Thread.currentThread().getStackTrace()[2].getMethodName());
207-
}
208-
209-
@Override
210-
public void onFragmentStarted(FragmentManager fm, Fragment f) {
211-
Log.d(TAG, getSimpleName(f) + ": " + Thread.currentThread().getStackTrace()[2].getMethodName());
212-
queueHandler.add(new FragmentInfo(1, f));
213-
}
214-
215-
@Override
216-
public void onFragmentResumed(FragmentManager fm, Fragment f) {
217-
Log.d(TAG, getSimpleName(f) + ": " + Thread.currentThread().getStackTrace()[2].getMethodName());
218-
queueHandler.add(new FragmentInfo(2, f));
219-
}
220-
221-
@Override
222-
public void onFragmentPaused(FragmentManager fm, Fragment f) {
223-
Log.d(TAG, getSimpleName(f) + ": " + Thread.currentThread().getStackTrace()[2].getMethodName());
224-
queueHandler.add(new FragmentInfo(3, f));
225-
}
226-
227-
@Override
228-
public void onFragmentStopped(FragmentManager fm, Fragment f) {
229-
Log.d(TAG, getSimpleName(f) + ": " + Thread.currentThread().getStackTrace()[2].getMethodName());
230-
queueHandler.add(new FragmentInfo(4, f));
231-
}
232-
233-
@Override
234-
public void onFragmentSaveInstanceState(FragmentManager fm, Fragment f, Bundle outState) {
235-
Log.d(TAG, getSimpleName(f) + ": " + Thread.currentThread().getStackTrace()[2].getMethodName());
236-
}
237-
238-
@Override
239-
public void onFragmentViewDestroyed(FragmentManager fm, Fragment f) {
240-
Log.d(TAG, getSimpleName(f) + ": " + Thread.currentThread().getStackTrace()[2].getMethodName());
241-
}
242-
243-
@Override
244-
public void onFragmentDestroyed(FragmentManager fm, Fragment f) {
245-
Log.d(TAG, getSimpleName(f) + ": " + Thread.currentThread().getStackTrace()[2].getMethodName());
246-
queueHandler.add(new FragmentInfo(5, f));
247-
}
248-
249-
@Override
250-
public void onFragmentDetached(FragmentManager fm, Fragment f) {
251-
Log.d(TAG, getSimpleName(f) + ": " + Thread.currentThread().getStackTrace()[2].getMethodName());
252-
}
57+
private static QueueHandler queueHandler;
25358

254-
}, true);
59+
public static void add(String lifecycle, String task, String activity, List<String> fragments) {
60+
if(queueHandler == null) {
61+
queueHandler = new QueueHandler();
25562
}
63+
LifecycleInfo info = new LifecycleInfo(lifecycle, task, activity, fragments);
64+
queueHandler.send(info);
25665
}
25766

25867
private static class QueueHandler extends Handler{
25968

260-
private Queue<Object> queue;
69+
private Queue<LifecycleInfo> queue;
26170
private long lastTime;
26271

26372
QueueHandler(){
@@ -266,8 +75,8 @@ private static class QueueHandler extends Handler{
26675
queue = new LinkedList<>();
26776
}
26877

269-
void add(Object obj){
270-
queue.add(obj);
78+
void send(LifecycleInfo info) {
79+
queue.add(info);
27180
sendEmptyMessage(0);
27281
}
27382

@@ -277,11 +86,33 @@ public void handleMessage(Message msg) {
27786
sendEmptyMessageDelayed(0, interval / 5);
27887
}else {
27988
lastTime = System.currentTimeMillis();
280-
Object obj = queue.poll();
281-
if(obj instanceof FragmentInfo) {
282-
activityTaskView.onFragmentChange((FragmentInfo) obj);
283-
} else if(obj instanceof TaskInfo) {
284-
activityTaskView.onActivityChange((TaskInfo) obj);
89+
LifecycleInfo info = queue.poll();
90+
if(info == null) {
91+
return;
92+
}
93+
if(info.fragments != null) {
94+
info.lifecycle = info.lifecycle.replace("onFragment", "");
95+
96+
FragmentTaskView fragmentTaskView = activityTaskView.findFragmentTaskView(info.activity);
97+
if(fragmentTaskView != null) {
98+
if (info.lifecycle.contains("PreAttach")) {
99+
fragmentTaskView.add(info);
100+
} else if (info.lifecycle.contains("Detach")) {
101+
fragmentTaskView.remove(info.fragments);
102+
} else {
103+
fragmentTaskView.update(info);
104+
}
105+
}
106+
} else {
107+
info.lifecycle = info.lifecycle.replace("onActivity", "");
108+
109+
if(info.lifecycle.contains("Create")) {
110+
activityTaskView.add(info);
111+
} else if(info.lifecycle.contains("Destroy")) {
112+
activityTaskView.remove(info);
113+
} else {
114+
activityTaskView.update(info);
115+
}
285116
}
286117
}
287118
}

0 commit comments

Comments
 (0)