build: 电脑损坏,不知道改了啥
This commit is contained in:
@@ -1,8 +1,14 @@
|
||||
package com.ttstd.dialer.adapter;
|
||||
|
||||
import android.content.ClipData;
|
||||
import android.content.ComponentName;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Point;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.view.DragEvent;
|
||||
import android.view.HapticFeedbackConstants;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
@@ -21,7 +27,6 @@ import com.tencent.mmkv.MMKV;
|
||||
import com.ttstd.dialer.R;
|
||||
import com.ttstd.dialer.config.CommonConfig;
|
||||
import com.ttstd.dialer.db.app.AppInfo;
|
||||
import com.ttstd.dialer.fragment.dialog.shortcut.ShortcutDialogFagment;
|
||||
import com.ttstd.dialer.utils.ApkUtils;
|
||||
import com.ttstd.dialer.utils.Logger;
|
||||
import com.ttstd.iconloader.IconCacheManager;
|
||||
@@ -51,16 +56,6 @@ public class AppGridAdapter extends BaseAdapter implements LoaderManager.LoaderC
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public interface ShortcutCallback {
|
||||
void setAppInside(AppInfo appInfo);
|
||||
}
|
||||
|
||||
private ShortcutCallback mShortcutCallback;
|
||||
|
||||
public void setShortcutCallback(ShortcutCallback shortcutCallback) {
|
||||
mShortcutCallback = shortcutCallback;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return mAppInfos == null ? 0 : mAppInfos.size();
|
||||
@@ -109,23 +104,54 @@ public class AppGridAdapter extends BaseAdapter implements LoaderManager.LoaderC
|
||||
holder.root.setOnLongClickListener(new View.OnLongClickListener() {
|
||||
@Override
|
||||
public boolean onLongClick(View v) {
|
||||
ShortcutDialogFagment shortcutDialogFagment = new ShortcutDialogFagment(appInfo);
|
||||
shortcutDialogFagment.setTitile("温馨提示");
|
||||
shortcutDialogFagment.setTips("是否把这个应用移到“更多应用”里?");
|
||||
shortcutDialogFagment.setOnClickListener(new ShortcutDialogFagment.OnClickListener() {
|
||||
@Override
|
||||
public void onPositiveClick() {
|
||||
if (mShortcutCallback != null)
|
||||
mShortcutCallback.setAppInside(appInfo);
|
||||
shortcutDialogFagment.dismiss();
|
||||
if (!v.isAttachedToWindow()) {
|
||||
Logger.e(TAG, "View is not attached to window");
|
||||
return false;
|
||||
}
|
||||
|
||||
// 添加触感反馈
|
||||
v.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
|
||||
|
||||
ClipData data = ClipData.newPlainText("appInfo", appInfo.getPackageName());
|
||||
View.DragShadowBuilder shadowBuilder = new LauncherDragShadowBuilder(v);
|
||||
|
||||
// 使用 post 确保在当前事件处理完成后再开始拖拽,提高稳定性并减少崩溃
|
||||
v.post(() -> {
|
||||
boolean started = false;
|
||||
try {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
started = v.startDragAndDrop(data, shadowBuilder, appInfo, View.DRAG_FLAG_OPAQUE);
|
||||
} else {
|
||||
started = v.startDrag(data, shadowBuilder, appInfo, 0);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Logger.e(TAG, "startDragAndDrop error: " + e.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNegativeClick() {
|
||||
shortcutDialogFagment.dismiss();
|
||||
Logger.e(TAG, "startDragAndDrop result: " + started);
|
||||
if (started) {
|
||||
v.setAlpha(0.5f);
|
||||
}
|
||||
});
|
||||
shortcutDialogFagment.show(mContext.getSupportFragmentManager(), "ShortcutDialogFagment");
|
||||
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
holder.root.setOnDragListener(new View.OnDragListener() {
|
||||
@Override
|
||||
public boolean onDrag(View v, DragEvent event) {
|
||||
switch (event.getAction()) {
|
||||
case DragEvent.ACTION_DRAG_STARTED:
|
||||
if (event.getLocalState() == appInfo) {
|
||||
v.setAlpha(0.5f);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
case DragEvent.ACTION_DRAG_ENDED:
|
||||
v.setAlpha(1.0f);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
});
|
||||
@@ -133,6 +159,34 @@ public class AppGridAdapter extends BaseAdapter implements LoaderManager.LoaderC
|
||||
return convertView;
|
||||
}
|
||||
|
||||
private static class LauncherDragShadowBuilder extends View.DragShadowBuilder {
|
||||
public LauncherDragShadowBuilder(View view) {
|
||||
super(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onProvideShadowMetrics(Point outShadowSize, Point outShadowTouchPoint) {
|
||||
float scale = 1.2f;
|
||||
int width = (int) (getView().getWidth() * scale);
|
||||
int height = (int) (getView().getHeight() * scale);
|
||||
outShadowSize.set(width, height);
|
||||
outShadowTouchPoint.set(width / 2, height / 2);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDrawShadow(Canvas canvas) {
|
||||
float scale = 1.2f;
|
||||
canvas.save();
|
||||
canvas.scale(scale, scale);
|
||||
// 确保在绘制阴影时视图是不透明的
|
||||
float originalAlpha = getView().getAlpha();
|
||||
getView().setAlpha(1.0f);
|
||||
getView().draw(canvas);
|
||||
getView().setAlpha(originalAlpha);
|
||||
canvas.restore();
|
||||
}
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@NotNull
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user