Skip to content

Commit 0f0e8fa

Browse files
committed
添加长按应用弹窗出现卸载功能
1 parent d01b6d5 commit 0f0e8fa

File tree

12 files changed

+209
-52
lines changed

12 files changed

+209
-52
lines changed

effectivecard/src/main/java/com/codemx/effectivecard/CardWindowManager.java

Lines changed: 5 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package com.codemx.effectivecard;
22

33
import android.content.Context;
4+
import android.graphics.PixelFormat;
45
import android.os.Handler;
56
import android.os.Looper;
67
import android.view.Gravity;
78
import android.view.LayoutInflater;
8-
import android.view.MotionEvent;
99
import android.view.View;
1010
import android.view.WindowManager;
1111
import android.widget.ImageView;
@@ -51,13 +51,13 @@ private void showWindow(MxLayoutParams layoutParams) {
5151

5252
mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
5353
mWindowParams = new WindowManager.LayoutParams();
54-
// mWindowParams.width = layoutParams.width;
55-
// mWindowParams.height = layoutParams.height;
56-
mWindowParams.width = 600;
57-
mWindowParams.height = 600;
54+
mWindowParams.width = layoutParams.width;
55+
mWindowParams.height = layoutParams.height;
5856
XLog.d(XLog.getTag(), "width= " + layoutParams.width + " ,height= " + layoutParams.height);
5957
mWindowParams.x = 0;
6058
mWindowParams.y = 0;
59+
// 设置透明
60+
mWindowParams.format = PixelFormat.RGBA_8888;
6161
mWindowParams.gravity = Gravity.TOP | Gravity.START;
6262
mWindowParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
6363
| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
@@ -68,33 +68,8 @@ private void showWindow(MxLayoutParams layoutParams) {
6868
| WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
6969
mWindowParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
7070
mWindowManager.addView(mContentView, mWindowParams);
71-
mContentView.setOnTouchListener(new View.OnTouchListener() {
72-
@Override
73-
public boolean onTouch(View v, MotionEvent event) {
74-
switch (event.getAction()) {
75-
case MotionEvent.ACTION_DOWN:
76-
mStartX = event.getRawX();
77-
XLog.d(XLog.getTag(), "ACTION_DOWN= " + event.getRawX());
78-
break;
79-
case MotionEvent.ACTION_MOVE:
80-
// mWindowParams.x += (int) (event.getRawX() - mStartX);
81-
// mStartX = event.getRawX();
82-
// XLog.d(XLog.getTag(), "ACTION_MOVE= " + event.getRawX());
83-
// mWindowManager.updateViewLayout(v, mWindowParams);
84-
v.setTranslationX(-100);
85-
break;
86-
case MotionEvent.ACTION_UP:
87-
break;
88-
default:
89-
break;
90-
}
91-
return false;
92-
}
93-
});
9471
}
9572

96-
private float mStartX;
97-
9873
public void hideWindow() {
9974
FloatWindow.destroy();
10075
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package com.codemx.effectivecard;
2+
3+
import android.content.Context;
4+
import android.util.AttributeSet;
5+
import android.view.MotionEvent;
6+
import android.widget.FrameLayout;
7+
8+
import com.android.mxlibrary.util.XLog;
9+
10+
import androidx.annotation.NonNull;
11+
import androidx.annotation.Nullable;
12+
13+
/**
14+
* Created by yuchuan
15+
* DATE 2020/4/29
16+
* TIME 18:16
17+
*/
18+
public class LauncherOverlayView extends FrameLayout {
19+
public LauncherOverlayView(@NonNull Context context) {
20+
super(context);
21+
}
22+
23+
public LauncherOverlayView(@NonNull Context context, @Nullable AttributeSet attrs) {
24+
super(context, attrs);
25+
}
26+
27+
public LauncherOverlayView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
28+
super(context, attrs, defStyleAttr);
29+
}
30+
31+
@Override
32+
protected void onFinishInflate() {
33+
super.onFinishInflate();
34+
35+
}
36+
37+
@Override
38+
public boolean onInterceptTouchEvent(MotionEvent ev) {
39+
return super.onInterceptTouchEvent(ev);
40+
}
41+
42+
private float mStartX;
43+
44+
@Override
45+
public boolean onTouchEvent(MotionEvent event) {
46+
switch (event.getAction()) {
47+
case MotionEvent.ACTION_DOWN:
48+
mStartX = event.getRawX();
49+
XLog.d(XLog.getTag(), "ACTION_DOWN= " + event.getRawX());
50+
break;
51+
case MotionEvent.ACTION_MOVE:
52+
setTranslationX(getTranslationX()%getResources().getDisplayMetrics().widthPixels + (int) (event.getRawX() - mStartX));
53+
break;
54+
case MotionEvent.ACTION_UP:
55+
break;
56+
default:
57+
break;
58+
}
59+
return super.onTouchEvent(event);
60+
}
61+
}
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2+
<com.codemx.effectivecard.LauncherOverlayView xmlns:android="http://schemas.android.com/apk/res/android"
33
android:layout_width="match_parent"
4-
android:layout_height="match_parent"
5-
android:orientation="vertical">
4+
android:layout_height="match_parent">
5+
66
<ImageView
77
android:layout_width="match_parent"
88
android:layout_height="match_parent"
9-
android:src="@drawable/plus"
10-
android:scaleType="centerCrop"/>
9+
android:scaleType="centerCrop"
10+
android:src="@drawable/plus" />
1111

12-
</LinearLayout>
12+
</com.codemx.effectivecard.LauncherOverlayView>

floatwindow/floatwindow.iml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<module external.linked.project.id=":floatwindow" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" type="JAVA_MODULE" version="4">
2+
<module external.linked.project.id=":floatwindow" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" external.system.module.group="Launcher3-master" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
33
<component name="FacetManager">
44
<facet type="android-gradle" name="Android-Gradle">
55
<configuration>
@@ -19,8 +19,8 @@
1919
<option name="ALLOW_USER_CONFIGURATION" value="false" />
2020
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
2121
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
22-
<option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res" />
23-
<option name="TEST_RES_FOLDERS_RELATIVE_PATH" value="" />
22+
<option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res;file://$MODULE_DIR$/src/debug/res;file://$MODULE_DIR$/build/generated/res/rs/debug" />
23+
<option name="TEST_RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/androidTest/res;file://$MODULE_DIR$/src/test/res;file://$MODULE_DIR$/src/androidTestDebug/res;file://$MODULE_DIR$/src/testDebug/res;file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" />
2424
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
2525
<option name="PROJECT_TYPE" value="1" />
2626
</configuration>
@@ -31,14 +31,14 @@
3131
<output-test url="file://$MODULE_DIR$/build/intermediates/javac/debugUnitTest/classes" />
3232
<exclude-output />
3333
<content url="file://$MODULE_DIR$">
34-
<sourceFolder url="file://$MODULE_DIR$/build/generated/ap_generated_sources/debug/out" isTestSource="false" generated="true" />
3534
<sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debug/out" isTestSource="false" generated="true" />
35+
<sourceFolder url="file://$MODULE_DIR$/build/generated/ap_generated_sources/debug/out" isTestSource="false" generated="true" />
3636
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
3737
<sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debug/out" isTestSource="false" generated="true" />
3838
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" generated="true" />
3939
<sourceFolder url="file://$MODULE_DIR$/build/generated/ap_generated_sources/debugAndroidTest/out" isTestSource="true" generated="true" />
40-
<sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debugAndroidTest/out" isTestSource="true" generated="true" />
4140
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
41+
<sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debugAndroidTest/out" isTestSource="true" generated="true" />
4242
<sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debugAndroidTest/out" isTestSource="true" generated="true" />
4343
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" generated="true" />
4444
<sourceFolder url="file://$MODULE_DIR$/build/generated/ap_generated_sources/debugUnitTest/out" isTestSource="true" generated="true" />

src/com/android/launcher3/Workspace.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -933,7 +933,7 @@ private void addInScreen(View child, long container, long screenId, int x, int y
933933

934934
ViewGroup.LayoutParams genericLp = child.getLayoutParams();
935935
CellLayout.LayoutParams lp;
936-
if (genericLp == null || !(genericLp instanceof CellLayout.LayoutParams)) {
936+
if (!(genericLp instanceof CellLayout.LayoutParams)) {
937937
lp = new CellLayout.LayoutParams(x, y, spanX, spanY);
938938
} else {
939939
lp = (CellLayout.LayoutParams) genericLp;

src/com/android/launcher3/config/BaseFlags.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,6 @@ abstract class BaseFlags {
6262
// 是否开启负一屏,当LAUNCHER_OVERLAY_ENABLED = false才起作用
6363
public static final boolean CUSTOM_CONTENT_ENABLED = true;
6464
// 是否开启跨进程的负一屏,如果开启,则不会开启CustomContent负一屏
65-
public static final boolean LAUNCHER_OVERLAY_ENABLED = true;
65+
public static final boolean LAUNCHER_OVERLAY_ENABLED = false;
6666

6767
}

src/com/android/launcher3/folder/FolderIcon.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import android.graphics.Rect;
2525
import android.graphics.drawable.Drawable;
2626
import android.os.Parcelable;
27-
import androidx.annotation.NonNull;
2827
import android.util.AttributeSet;
2928
import android.util.Property;
3029
import android.view.LayoutInflater;
@@ -65,11 +64,14 @@
6564
import java.util.ArrayList;
6665
import java.util.List;
6766

67+
import androidx.annotation.NonNull;
68+
6869
import static com.android.launcher3.folder.ClippedFolderIconLayoutRule.MAX_NUM_ITEMS_IN_PREVIEW;
6970
import static com.android.launcher3.folder.PreviewItemManager.INITIAL_ITEM_ANIMATION_DURATION;
7071

7172
/**
7273
* An icon that can appear on in the workspace representing an {@link Folder}.
74+
* 文件夹图标
7375
*/
7476
public class FolderIcon extends FrameLayout implements FolderListener {
7577
@Thunk
@@ -236,7 +238,6 @@ public void onDragEnter(ItemInfo dragInfo) {
236238
mOpenAlarm.setOnAlarmListener(mOnOpenListener);
237239
if (SPRING_LOADING_ENABLED &&
238240
((dragInfo instanceof ShortcutInfo)
239-
|| (dragInfo instanceof ShortcutInfo)
240241
|| (dragInfo instanceof PendingAddShortcutInfo))) {
241242
mOpenAlarm.setAlarm(ON_OPEN_DELAY);
242243
}
@@ -340,8 +341,8 @@ private void onDrop(final ShortcutInfo item, DragView animateView, Rect finalRec
340341

341342
int[] center = new int[2];
342343
float scale = getLocalCenterForIndex(index, numItemsInPreview, center);
343-
center[0] = (int) Math.round(scaleRelativeToDragLayer * center[0]);
344-
center[1] = (int) Math.round(scaleRelativeToDragLayer * center[1]);
344+
center[0] = Math.round(scaleRelativeToDragLayer * center[0]);
345+
center[1] = Math.round(scaleRelativeToDragLayer * center[1]);
345346

346347
to.offset(center[0] - animateView.getMeasuredWidth() / 2,
347348
center[1] - animateView.getMeasuredHeight() / 2);

src/com/android/launcher3/popup/PopupContainerWithArrow.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -218,8 +218,10 @@ protected void onInflationComplete(boolean isReversed) {
218218
}
219219

220220
@TargetApi(Build.VERSION_CODES.P)
221-
private void populateAndShow(final BubbleTextView originalIcon, final List<String> shortcutIds,
222-
final List<NotificationKeyData> notificationKeys, List<SystemShortcut> systemShortcuts) {
221+
private void populateAndShow(final BubbleTextView originalIcon,
222+
final List<String> shortcutIds,
223+
final List<NotificationKeyData> notificationKeys,
224+
List<SystemShortcut> systemShortcuts) {
223225
mNumNotifications = notificationKeys.size();
224226
mOriginalIcon = originalIcon;
225227

src/com/android/launcher3/popup/PopupDataProvider.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
import android.content.ComponentName;
2020
import android.service.notification.StatusBarNotification;
21-
import androidx.annotation.NonNull;
2221
import android.util.Log;
2322

2423
import com.android.launcher3.ItemInfo;
@@ -41,6 +40,8 @@
4140
import java.util.List;
4241
import java.util.Map;
4342

43+
import androidx.annotation.NonNull;
44+
4445
/**
4546
* Provides data for the popup menu that appears after long-clicking on apps.
4647
*/
@@ -53,6 +54,7 @@ public class PopupDataProvider implements NotificationListener.NotificationsChan
5354
* Note that these are in order of priority.
5455
*/
5556
private static final SystemShortcut[] SYSTEM_SHORTCUTS = new SystemShortcut[]{
57+
new SystemShortcut.Uninstall(),
5658
new SystemShortcut.AppInfo(),
5759
new SystemShortcut.Widgets(),
5860
new SystemShortcut.Install()

0 commit comments

Comments
 (0)