Skip to content

Commit 5721231

Browse files
committed
UI optimize
1 parent c305040 commit 5721231

File tree

8 files changed

+103
-108
lines changed

8 files changed

+103
-108
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,14 @@ https://github.com/rome753/ActivityTaskView/releases
4949

5050
https://github.com/rome753/ActivityTaskView/blob/master/app/src/main/java/cc/rome753/demo/ActivityTaskHelper.java
5151

52-
3. Use ActivityTaskHelper in your application's onCreate()
52+
3. Init ActivityTaskHelper in your application's onCreate()
5353
```
5454
@Override
5555
public void onCreate() {
5656
super.onCreate();
5757
5858
if(BuildConfig.DEBUG) {
59-
new ActivityTaskHelper().init(this);
59+
ActivityTaskHelper.init(this);
6060
}
6161
}
6262
```

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,12 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
6464
private void checkWindowPermission() {
6565
if (Build.VERSION.SDK_INT >= 23 && !Settings.canDrawOverlays(this)) {
6666
binding.btnPermission.setVisibility(View.VISIBLE);
67-
binding.tvPermission.setVisibility(View.INVISIBLE);
68-
} else {
69-
binding.btnPermission.setVisibility(View.INVISIBLE);
7067
binding.tvPermission.setVisibility(View.VISIBLE);
68+
binding.tvPermissionHint.setVisibility(View.GONE);
69+
} else {
70+
binding.btnPermission.setVisibility(View.GONE);
71+
binding.tvPermission.setVisibility(View.GONE);
72+
binding.tvPermissionHint.setVisibility(View.VISIBLE);
7173
ActivityTask.start(this);
7274
}
7375
}

activitytaskview/src/main/res/layout/activity_main.xml

Lines changed: 35 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -3,73 +3,68 @@
33
xmlns:app="http://schemas.android.com/apk/res-auto"
44
xmlns:tools="http://schemas.android.com/tools">
55

6-
<androidx.constraintlayout.widget.ConstraintLayout
6+
<LinearLayout
7+
android:orientation="vertical"
8+
android:padding="16dp"
79
android:layout_width="match_parent"
810
android:layout_height="match_parent">
911

10-
<Button
11-
android:id="@+id/btn_permission"
12-
android:text="Request window permission"
13-
android:textAllCaps="false"
14-
app:layout_constraintTop_toTopOf="parent"
15-
app:layout_constraintStart_toStartOf="parent"
16-
app:layout_constraintEnd_toEndOf="parent"
17-
android:layout_width="wrap_content"
18-
android:layout_height="wrap_content" />
19-
2012
<TextView
2113
android:id="@+id/tv_permission"
22-
android:text="Window permission granted"
23-
android:textAllCaps="false"
24-
app:layout_constraintTop_toTopOf="@id/btn_permission"
25-
app:layout_constraintBottom_toBottomOf="@id/btn_permission"
26-
app:layout_constraintStart_toStartOf="parent"
27-
app:layout_constraintEnd_toEndOf="parent"
14+
android:text="Request float window permission:"
2815
android:layout_width="wrap_content"
2916
android:layout_height="wrap_content" />
3017

3118
<Button
32-
android:id="@+id/btn_clear"
33-
android:text="Clear"
19+
android:id="@+id/btn_permission"
20+
android:text="Settings"
3421
android:textAllCaps="false"
35-
app:layout_constraintBottom_toTopOf="@id/btn_exit"
36-
app:layout_constraintStart_toStartOf="parent"
37-
app:layout_constraintEnd_toEndOf="parent"
3822
android:layout_width="wrap_content"
3923
android:layout_height="wrap_content" />
4024

41-
<Button
42-
android:id="@+id/btn_exit"
43-
android:text="Exit"
25+
<TextView
26+
android:id="@+id/tv_permission_hint"
27+
android:text="@string/float_window_hint"
4428
android:textAllCaps="false"
45-
android:textColor="#FF0000"
46-
android:layout_marginBottom="50dp"
47-
app:layout_constraintBottom_toBottomOf="parent"
48-
app:layout_constraintStart_toStartOf="parent"
49-
app:layout_constraintEnd_toEndOf="parent"
29+
android:visibility="gone"
30+
tools:visibility="visible"
5031
android:layout_width="wrap_content"
5132
android:layout_height="wrap_content" />
5233

5334
<TextView
5435
android:id="@+id/tv_set_duration"
55-
android:text="Set duration (ms)"
56-
app:layout_constraintTop_toBottomOf="@id/btn_permission"
57-
android:layout_marginTop="50dp"
58-
app:layout_constraintStart_toStartOf="parent"
59-
app:layout_constraintEnd_toEndOf="parent"
36+
android:text="Set duration(ms) between lifecycles:"
37+
android:layout_marginTop="30dp"
6038
android:layout_width="wrap_content"
6139
android:layout_height="wrap_content" />
6240

6341
<NumberPicker
6442
android:id="@+id/np"
6543
android:orientation="horizontal"
66-
android:layout_marginTop="10dp"
67-
app:layout_constraintTop_toBottomOf="@id/tv_set_duration"
68-
app:layout_constraintStart_toStartOf="parent"
69-
app:layout_constraintEnd_toEndOf="parent"
44+
android:layout_gravity="center_horizontal"
45+
android:layout_marginTop="5dp"
7046
android:layout_width="wrap_content"
7147
android:layout_height="wrap_content">
7248

7349
</NumberPicker>
74-
</androidx.constraintlayout.widget.ConstraintLayout>
50+
51+
<Space
52+
android:layout_weight="1"
53+
android:layout_width="0dp"
54+
android:layout_height="0dp" />
55+
56+
<Button
57+
android:id="@+id/btn_clear"
58+
android:text="Clear"
59+
android:layout_width="match_parent"
60+
android:layout_height="wrap_content" />
61+
62+
<Button
63+
android:id="@+id/btn_exit"
64+
android:text="Exit"
65+
android:textColor="#FF0000"
66+
android:layout_marginTop="5dp"
67+
android:layout_width="match_parent"
68+
android:layout_height="wrap_content" />
69+
</LinearLayout>
7570
</layout>
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<resources>
3-
<color name="colorPrimary">#3F51B5</color>
4-
<color name="colorPrimaryDark">#303F9F</color>
3+
<color name="colorPrimary">#99FFFFFF</color>
4+
<color name="colorPrimaryDark">#33000000</color>
55
<color name="colorAccent">#FF4081</color>
66
</resources>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
<resources>
22
<string name="app_name">ActivityTaskView</string>
3+
<string name="float_window_hint">Float window is showing…\n\n* Click EXIT button to dismiss\n* Tap to switch between minimum and normal size\n* Long press to back to this activity</string>
34
</resources>

activitytaskview/src/main/res/values/styles.xml

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,4 @@
88
<item name="colorAccent">@color/colorAccent</item>
99
</style>
1010

11-
<!---->
12-
<style name="dialogstyle" parent="Theme.AppCompat.Dialog">
13-
<item name="android:windowFullscreen">true</item>
14-
<item name="windowNoTitle">true</item>
15-
<item name="android:windowIsFloating">true</item>
16-
<item name="android:windowContentOverlay">@null</item>
17-
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
18-
</style>
19-
2011
</resources>

app/src/main/java/cc/rome753/demo/ActivityTaskHelper.java

Lines changed: 57 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import android.content.Context;
66
import android.content.Intent;
77
import android.os.Bundle;
8+
import android.util.Log;
89
import android.view.View;
910

1011
import androidx.fragment.app.Fragment;
@@ -15,20 +16,43 @@
1516

1617
public class ActivityTaskHelper {
1718

18-
public void init(Application app) {
19-
app.registerActivityLifecycleCallbacks(new ActivityLifecycleAdapter());
19+
public static void init(Application app) {
20+
app.registerActivityLifecycleCallbacks(new ActivityTaskHelper().activityLifecycleImpl);
2021
}
2122

22-
public static String getSimpleName(Object obj){
23-
return obj.getClass().getSimpleName() + "@" + Integer.toHexString(obj.hashCode());
23+
private ActivityLifecycleImpl activityLifecycleImpl = new ActivityLifecycleImpl();
24+
25+
private void handleFragment(Fragment fragment) {
26+
if(fragment == null || fragment.getActivity() == null) {
27+
Log.e("ActivityTaskHelper", "handleFragment null");
28+
return;
29+
}
30+
sendBroadcast(fragment.getActivity(), fragment);
31+
}
32+
33+
private void handleFragment(Fragment fragment, Context context) {
34+
if(fragment == null || !(context instanceof Activity)) {
35+
Log.e("ActivityTaskHelper", "handleFragment null");
36+
return;
37+
}
38+
sendBroadcast((Activity) context, fragment);
39+
}
40+
41+
private void handleActivity(Activity activity) {
42+
if(activity == null) {
43+
Log.e("ActivityTaskHelper", "handleActivity null");
44+
return;
45+
}
46+
sendBroadcast(activity, null);
2447
}
2548

26-
private void sendBroadcast(String lifecycle, Activity activity, Fragment fragment) {
49+
private void sendBroadcast(Activity activity, Fragment fragment) {
50+
String lifecycle = Thread.currentThread().getStackTrace()[5].getMethodName();
2751
String packageName = "cc.rome753.activitytask";
2852
Intent intent = new Intent(packageName + ".ACTION_UPDATE_LIFECYCLE");
2953
intent.setPackage(packageName);
3054
intent.putExtra("lifecycle", lifecycle);
31-
intent.putExtra("task", activity.getPackageName() + "@" + Integer.toHexString(activity.getTaskId()));
55+
intent.putExtra("task", activity.getPackageName() + "@0x" + Integer.toHexString(activity.getTaskId()));
3256
intent.putExtra("activity", getSimpleName(activity));
3357
if(fragment != null) {
3458
intent.putStringArrayListExtra("fragments", getAllFragments(fragment));
@@ -45,135 +69,117 @@ private ArrayList<String> getAllFragments(Fragment fragment){
4569
return res;
4670
}
4771

48-
private class ActivityLifecycleAdapter implements Application.ActivityLifecycleCallbacks{
72+
private String getSimpleName(Object obj){
73+
return obj.getClass().getSimpleName() + "@0x" + Integer.toHexString(obj.hashCode());
74+
}
75+
76+
private class ActivityLifecycleImpl implements Application.ActivityLifecycleCallbacks{
4977

5078
@Override
5179
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
5280
if(activity instanceof FragmentActivity){
53-
((FragmentActivity) activity).getSupportFragmentManager().registerFragmentLifecycleCallbacks(new FragmentLifecycleAdapter(), true);
81+
((FragmentActivity) activity).getSupportFragmentManager().registerFragmentLifecycleCallbacks(new FragmentLifecycleImpl(), true);
5482
}
55-
String method = Thread.currentThread().getStackTrace()[2].getMethodName();
56-
sendBroadcast(method, activity, null);
83+
handleActivity(activity);
5784
}
5885

5986
@Override
6087
public void onActivityStarted(Activity activity) {
61-
String method = Thread.currentThread().getStackTrace()[2].getMethodName();
62-
sendBroadcast(method, activity, null);
88+
handleActivity(activity);
6389
}
6490

6591
@Override
6692
public void onActivityResumed(Activity activity) {
67-
String method = Thread.currentThread().getStackTrace()[2].getMethodName();
68-
sendBroadcast(method, activity, null);
93+
handleActivity(activity);
6994
}
7095

7196
@Override
7297
public void onActivityPaused(Activity activity) {
73-
String method = Thread.currentThread().getStackTrace()[2].getMethodName();
74-
sendBroadcast(method, activity, null);
98+
handleActivity(activity);
7599
}
76100

77101
@Override
78102
public void onActivityStopped(Activity activity) {
79-
String method = Thread.currentThread().getStackTrace()[2].getMethodName();
80-
sendBroadcast(method, activity, null);
103+
handleActivity(activity);
81104
}
82105

83106
@Override
84107
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
85-
String method = Thread.currentThread().getStackTrace()[2].getMethodName();
86-
sendBroadcast(method, activity, null);
108+
handleActivity(activity);
87109
}
88110

89111
@Override
90112
public void onActivityDestroyed(Activity activity) {
91-
String method = Thread.currentThread().getStackTrace()[2].getMethodName();
92-
sendBroadcast(method, activity, null);
113+
handleActivity(activity);
93114
}
94115
}
95116

96-
97-
private class FragmentLifecycleAdapter extends FragmentManager.FragmentLifecycleCallbacks{
117+
private class FragmentLifecycleImpl extends FragmentManager.FragmentLifecycleCallbacks{
98118

99119
@Override
100120
public void onFragmentPreAttached(FragmentManager fm, Fragment f, Context context) {
101-
String method = Thread.currentThread().getStackTrace()[2].getMethodName();
102-
sendBroadcast(method, (Activity) context, f);
121+
handleFragment(f, context);
103122
}
104123

105124
@Override
106125
public void onFragmentAttached(FragmentManager fm, Fragment f, Context context) {
107-
String method = Thread.currentThread().getStackTrace()[2].getMethodName();
108-
sendBroadcast(method, (Activity) context, f);
126+
handleFragment(f, context);
109127
}
110128

111129
@Override
112130
public void onFragmentCreated(FragmentManager fm, Fragment f, Bundle savedInstanceState) {
113-
String method = Thread.currentThread().getStackTrace()[2].getMethodName();
114-
sendBroadcast(method, f.getActivity(), f);
131+
handleFragment(f);
115132
}
116133

117134
@Override
118135
public void onFragmentActivityCreated(FragmentManager fm, Fragment f, Bundle savedInstanceState) {
119-
String method = Thread.currentThread().getStackTrace()[2].getMethodName();
120-
sendBroadcast(method, f.getActivity(), f);
136+
handleFragment(f);
121137
}
122138

123139
@Override
124140
public void onFragmentViewCreated(FragmentManager fm, Fragment f, View v, Bundle savedInstanceState) {
125-
String method = Thread.currentThread().getStackTrace()[2].getMethodName();
126-
sendBroadcast(method, f.getActivity(), f);
141+
handleFragment(f);
127142
}
128143

129144
@Override
130145
public void onFragmentStarted(FragmentManager fm, Fragment f) {
131-
String method = Thread.currentThread().getStackTrace()[2].getMethodName();
132-
sendBroadcast(method, f.getActivity(), f);
146+
handleFragment(f);
133147
}
134148

135149
@Override
136150
public void onFragmentResumed(FragmentManager fm, Fragment f) {
137-
String method = Thread.currentThread().getStackTrace()[2].getMethodName();
138-
sendBroadcast(method, f.getActivity(), f);
151+
handleFragment(f);
139152
}
140153

141154
@Override
142155
public void onFragmentPaused(FragmentManager fm, Fragment f) {
143-
String method = Thread.currentThread().getStackTrace()[2].getMethodName();
144-
sendBroadcast(method, f.getActivity(), f);
156+
handleFragment(f);
145157
}
146158

147159
@Override
148160
public void onFragmentStopped(FragmentManager fm, Fragment f) {
149-
String method = Thread.currentThread().getStackTrace()[2].getMethodName();
150-
sendBroadcast(method, f.getActivity(), f);
161+
handleFragment(f);
151162
}
152163

153164
@Override
154165
public void onFragmentSaveInstanceState(FragmentManager fm, Fragment f, Bundle outState) {
155-
String method = Thread.currentThread().getStackTrace()[2].getMethodName();
156-
sendBroadcast(method, f.getActivity(), f);
166+
handleFragment(f);
157167
}
158168

159169
@Override
160170
public void onFragmentViewDestroyed(FragmentManager fm, Fragment f) {
161-
String method = Thread.currentThread().getStackTrace()[2].getMethodName();
162-
sendBroadcast(method, f.getActivity(), f);
171+
handleFragment(f);
163172
}
164173

165174
@Override
166175
public void onFragmentDestroyed(FragmentManager fm, Fragment f) {
167-
String method = Thread.currentThread().getStackTrace()[2].getMethodName();
168-
sendBroadcast(method, f.getActivity(), f);
176+
handleFragment(f);
169177
}
170178

171179
@Override
172180
public void onFragmentDetached(FragmentManager fm, Fragment f) {
173-
String method = Thread.currentThread().getStackTrace()[2].getMethodName();
174-
sendBroadcast(method, f.getActivity(), f);
181+
handleFragment(f);
175182
}
176-
177183
}
178184

179185
}

app/src/main/java/cc/rome753/demo/DemoApplication.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public void onCreate() {
2626
super.onCreate();
2727

2828
if(BuildConfig.DEBUG) {
29-
new ActivityTaskHelper().init(this);
29+
ActivityTaskHelper.init(this);
3030
}
3131
}
3232

0 commit comments

Comments
 (0)