.class public Lcom/miHoYo/YuanshenPS/FloatingBallService;
.super Landroid/app/Service;
.source "FloatingBallService.smali"
.method public constructor <init>()V
invoke-direct {p0}, Landroid/app/Service;-><init>()V
return-void
.end method
.class public Lcom/miHoYo/YuanshenPS/FloatingBallService;
.super Landroid/app/Service;
.source "FloatingBallService.smali"
.implements Landroid/view/View$OnClickListener;
.implements Landroid/view/View$OnTouchListener;
# instance fields
.field private windowManager:Landroid/view/WindowManager;
.field private floatingView:Landroid/widget/ImageView;
.field private initialX:I
.field private initialY:I
.field private initialTouchX:F
.field private initialTouchY:F
# onCreate
.method public onCreate()V
.locals 6
invoke-super {p0}, Landroid/app/Service;->onCreate()V
# 创建 ImageView
new-instance v0, Landroid/widget/ImageView;
invoke-direct {v0, p0}, Landroid/widget/ImageView;-><init>(Landroid/content/Context;)V
iput-object v0, p0, Lcom/miHoYo/YuanshenPS/FloatingBallService;->floatingView:Landroid/widget/ImageView;
# 设置背景颜色 (红色小球: #FF5722)
invoke-virtual {v0, 0xFF5722FF}, Landroid/widget/ImageView;->setBackgroundColor(I)V
# 设置 padding = 16dp
const/4 v1, 0x10
invoke-virtual {v0, v1, v0, v1, v1}, Landroid/widget/ImageView;->setPadding(IIII)V
# 设置点击监听
invoke-virtual {v0, p0}, Landroid/widget/ImageView;->setOnClickListener(Landroid/view/View$OnClickListener;)V
# 设置触摸监听
invoke-virtual {v0, p0}, Landroid/widget/ImageView;->setOnTouchListener(Landroid/view/View$OnTouchListener;)V
# 获取 WindowManager
invoke-virtual {p0, "window"}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
move-result-object v1
check-cast v1, Landroid/view/WindowManager;
iput-object v1, p0, Lcom/miHoYo/YuanshenPS/FloatingBallService;->windowManager:Landroid/view/WindowManager;
# 构建 LayoutParams
invoke-static {}, Landroid/os/Build;->VERSION:Landroid/os/Build$VERSION;
move-result-object v2
iget v2, v2, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v3, 0x1a # API 26+
if-lt v2, v3, :legacy_type
const/4 v2, 0x808 # TYPE_APPLICATION_OVERLAY
goto :type_ok
:legacy_type
const/4 v2, 0x2 # TYPE_PHONE
:type_ok
invoke-static {v2}, Landroid/view/WindowManager$LayoutParams;->newLayoutParams(I)Landroid/view/WindowManager$LayoutParams;
move-result-object v2
# 设置宽高为 60dp
invoke-virtual {v2, 60}, Landroid/view/WindowManager$LayoutParams;->setWidth(I)V
invoke-virtual {v2, 60}, Landroid/view/WindowManager$LayoutParams;->setHeight(I)V
# 初始位置
invoke-virtual {v2, 0}, Landroid/view/WindowManager$LayoutParams;->setX(I)V
invoke-virtual {v2, 100}, Landroid/view/WindowManager$LayoutParams;->setY(I)V
# Gravity: TOP|LEFT
invoke-virtual {v2, 0x51}, Landroid/view/WindowManager$LayoutParams;->setGravity(I)V
# Flag: 可点击穿透?这里保留可交互
invoke-virtual {v2, 0x20}, Landroid/view/WindowManager$LayoutParams;->setFlags(I)V
# Format: TRANSLUCENT
invoke-virtual {v2, Landroid/graphics/PixelFormat;->TRANSLUCENT)I), Landroid/view/WindowManager$LayoutParams;->format(I)V
# 添加 View
iget-object v0, p0, Lcom/miHoYo/YuanshenPS/FloatingBallService;->floatingView:Landroid/widget/ImageView;
iget-object v1, p0, Lcom/miHoYo/YuanshenPS/FloatingBallService;->windowManager:Landroid/view/WindowManager;
invoke-interface {v1, v0, v2}, Landroid/view/WindowManager;->addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
return-void
.end method
# onDestroy
.method public onDestroy()V
iget-object v0, p0, Lcom/miHoYo/YuanshenPS/FloatingBallService;->floatingView:Landroid/widget/ImageView;
if-eqz v0, :skip_remove
iget-object v1, p0, Lcom/miHoYo/YuanshenPS/FloatingBallService;->windowManager:Landroid/view/WindowManager;
invoke-interface {v1, v0}, Landroid/view/WindowManager;->removeView(Landroid/view/View;)V
:skip_remove
invoke-super {p0}, Landroid/app/Service;->onDestroy()V
return-void
.end method
# onClick
.method public onClick(Landroid/view/View;)V
.locals 4
# 打开网页: https://www.yuanshen.com
const-string v0, "https://www.yuanshen.com"
invoke-static {v0}, Landroid/net/Uri;->parse(Ljava/lang/String;)Landroid/net/Uri;
move-result-object v0
new-instance v1, Landroid/content/Intent;
const-string v2, "android.intent.action.VIEW"
invoke-direct {v1, v2, v0}, Landroid/content/Intent;-><init>(Ljava/lang/String;Landroid/net/Uri;)V
# 添加 FLAG_ACTIVITY_NEW_TASK
const/high16 v2, 0x10000000
invoke-virtual {v1, v2}, Landroid/content/Intent;->addFlags(I)Landroid/content/Intent;
# startActivity(intent)
invoke-virtual {p0, v1}, Landroid/content/Context;->startActivity(Landroid/content/Intent;)V
return-void
.end method
# onTouch - 支持拖动
.method public onTouch(Landroid/view/View;Landroid/view/MotionEvent;)Z
.locals 6
invoke-virtual {p2}, Landroid/view/MotionEvent;->getAction()I
move-result v0
packed-switch v0, :switch_data_0
const/4 v0, 0x0
return v0
:case_down
invoke-virtual {p2}, Landroid/view/MotionEvent;->getRawX()F
move-result v1
invoke-virtual {p2}, Landroid/view/MotionEvent;->getRawY()F
move-result v2
iget-object v3, p0, Lcom/miHoYo/YuanshenPS/FloatingBallService;->floatingView:Landroid/widget/ImageView;
invoke-virtual {v3}, Landroid/view/View;->getLayoutParams()Landroid/view/ViewGroup$LayoutParams;
move-result-object v3
check-cast v3, Landroid/view/WindowManager$LayoutParams;
invoke-virtual {v3}, Landroid/view/WindowManager$LayoutParams;->getX()I
move-result v4
invoke-virtual {v3}, Landroid/view/WindowManager$LayoutParams;->getY()I
move-result v5
iput v4, p0, Lcom/miHoYo/YuanshenPS/FloatingBallService;->initialX:I
iput v5, p0, Lcom/miHoYo/YuanshenPS/FloatingBallService;->initialY:I
iput v1, p0, Lcom/miHoYo/YuanshenPS/FloatingBallService;->initialTouchX:F
iput v2, p0, Lcom/miHoYo/YuanshenPS/FloatingBallService;->initialTouchY:F
const/4 v0, 0x1
return v0
:case_move
invoke-virtual {p2}, Landroid/view/MotionEvent;->getRawX()F
move-result v1
invoke-virtual {p2}, Landroid/view/MotionEvent;->getRawY()F
move-result v2
iget v3, p0, Lcom/miHoYo/YuanshenPS/FloatingBallService;->initialX:I
iget v4, p0, Lcom/miHoYo/YuanshenPS/FloatingBallService;->initialTouchX:F
sub-float/2addr v1, v4
invoke-static {v1}, Ljava/lang/Math;->round(F)I
move-result v1
add-int/2addr v1, v3
iget v3, p0, Lcom/miHoYo/YuanshenPS/FloatingBallService;->initialY:I
iget v4, p0, Lcom/miHoYo/YuanshenPS/FloatingBallService;->initialTouchY:F
sub-float/2addr v2, v4
invoke-static {v2}, Ljava/lang/Math;->round(F)I
move-result v2
add-int/2addr v2, v3
iget-object v3, p0, Lcom/miHoYo/YuanshenPS/FloatingBallService;->floatingView:Landroid/widget/ImageView;
invoke-virtual {v3}, Landroid/view/View;->getLayoutParams()Landroid/view/ViewGroup$LayoutParams;
move-result-object v3
check-cast v3, Landroid/view/WindowManager$LayoutParams;
invoke-virtual {v3, v1}, Landroid/view/WindowManager$LayoutParams;->setX(I)V
invoke-virtual {v3, v2}, Landroid/view/WindowManager$LayoutParams;->setY(I)V
iget-object v4, p0, Lcom/miHoYo/YuanshenPS/FloatingBallService;->windowManager:Landroid/view/WindowManager;
invoke-interface {v4, p1, v3}, Landroid/view/WindowManager;->updateViewLayout(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
const/4 v0, 0x1
return v0
nop
:switch_data_0
.packed-switch 0x0
:case_down
:case_move
.end packed-switch
.end method
# onBind
.method public onBind(Landroid/content/Intent;)Landroid/os/IBinder;
const/4 v0, 0x0
return-object v0
.end method
# constructor
.method public constructor <init>()V
invoke-direct {p0}, Landroid/app/Service;-><init>()V
return-void
.end method