From 57fe689f1862ad0fda96b2e9eb054be6a7c9425d Mon Sep 17 00:00:00 2001 From: Runt <qingingrunt2010@qq.com> Date: Wed, 04 May 2022 12:53:14 +0000 Subject: [PATCH] 歌词显示时间控制 --- app/src/main/java/com/auto/lyric/service/FloatingWindowService.java | 156 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 142 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/auto/lyric/service/FloatingWindowService.java b/app/src/main/java/com/auto/lyric/service/FloatingWindowService.java index 720e9e6..426ee8c 100644 --- a/app/src/main/java/com/auto/lyric/service/FloatingWindowService.java +++ b/app/src/main/java/com/auto/lyric/service/FloatingWindowService.java @@ -1,6 +1,9 @@ package com.auto.lyric.service; import android.app.Service; +import android.content.ClipData; +import android.content.ClipboardManager; +import android.content.Context; import android.content.Intent; import android.graphics.PixelFormat; import android.os.Build; @@ -13,14 +16,21 @@ import android.view.MotionEvent; import android.view.View; import android.view.WindowManager; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.core.view.LayoutInflaterFactory; import com.auto.lyric.R; +import com.auto.lyric.data.LyricServer; import com.auto.lyric.databinding.FloatViewBinding; import com.auto.lyric.util.DeviceUtil; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Timer; +import java.util.TimerTask; /** * 全局悬浮窗 @@ -31,9 +41,29 @@ private WindowManager manager; private WindowManager.LayoutParams params; FloatViewBinding binding; - Handler handler; final String TAG = "FloatingWindowService"; + final int THREAD_STOP = 0, THREAD_START = 1 , KEYBOARD_SEND = 100,UPDATE_TIME = 200; + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); + SimpleDateFormat msFormat = new SimpleDateFormat("mm:ss.SSS"); + boolean pause; + int progress; + Handler handler; + + Timer timer; + ServiceTask task; + class ServiceTask extends TimerTask{ + @Override + public void run() { + int index = binding.lyric.getIndex(progress+=10); + binding.lyric.setOffsetY(220 - index * (binding.lyric.getSIZEWORD() + 44)); + binding.lyric.invalidate(); + handler.sendEmptyMessage(UPDATE_TIME); + if(index == LyricServer.getLrc_map().size()-1){ + handler.sendEmptyMessage(THREAD_STOP); + } + } + }; @Override public void onCreate() { super.onCreate(); @@ -47,19 +77,14 @@ }else { params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; } + binding.btnBack.setEnabled(false); + binding.btnFast.setEnabled(false); + binding.btnPause.setEnabled(false); params.format = PixelFormat.RGBA_8888; params.gravity = Gravity.LEFT | Gravity.TOP; params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; params.width = WindowManager.LayoutParams.MATCH_PARENT; params.height = DeviceUtil.convertDpToPixel(200,getBaseContext()); - handler = new Handler(this.getMainLooper()){ - @Override - public void handleMessage(@NonNull Message msg) { - binding.lyric.setText(msg.obj.toString()); - int offset = binding.lyric.getLineCount() * binding.lyric.getLineHeight(); - - } - }; binding.close.setOnClickListener(v ->{ stopService(new Intent(this,this.getClass())); stopService(new Intent(this,AutoInputService.class)); @@ -75,14 +100,58 @@ || event.getAction() == MotionEvent.ACTION_UP){ params.y = (int) event.getRawY() - DeviceUtil.getStatusBarHeight(getBaseContext()) - startY; manager.updateViewLayout(binding.getRoot(), params); - Log.e(TAG,"ACTION_MOVE V:"+params.y); + //Log.e(TAG,"ACTION_MOVE V:"+params.y); } - Log.e(TAG,"onTouch event:"+event); - Log.e(TAG,"onTouch getRawY:"+event.getRawY()); +// Log.e(TAG,"onTouch event:"+event); +// Log.e(TAG,"onTouch getRawY:"+event.getRawY()); return true; } }); + binding.btnPause.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if(pause){ + pause = false; + binding.btnPause.setText("暂停"); + binding.btnBack.setEnabled(true); + binding.btnFast.setEnabled(true); + start(); + }else{ + pause = true; + binding.btnPause.setText("继续"); + binding.btnBack.setEnabled(false); + binding.btnFast.setEnabled(false); + timer.cancel(); + } + } + }); + binding.btnFast.setOnClickListener(v -> progress+=700); + binding.btnBack.setOnClickListener(v -> progress-=700); + binding.btnStart.setOnClickListener(v -> { + try { + if(new Date().getTime() > dateFormat.parse("2022-09-30 04:00:00").getTime()){ + Toast.makeText(getApplicationContext(),"软件使用时间已过期", Toast.LENGTH_SHORT).show(); + return; + } + } catch (ParseException e) { + e.printStackTrace(); + } + if(binding.btnStart.getText().equals("开启")){ + progress = 0 ; + start(); + startService(new Intent(this,AutoInputService.class)); + }else{ + binding.btnStart.setText("开启"); + binding.btnBack.setEnabled(false); + binding.btnFast.setEnabled(false); + binding.btnPause.setEnabled(false); + progress = 0 ; + timer.cancel(); + stopService(new Intent(this,AutoInputService.class)); + } + }); + initHandler(); } @Nullable @@ -91,10 +160,41 @@ return null; } + private void initHandler(){ + handler = new Handler(this.getMainLooper()){ + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + if(msg.what == THREAD_START){//开始 + AutoInputService.flag = true; + binding.btnPause.performClick(); + }else if(msg.what == THREAD_STOP){//停止 + AutoInputService.flag = false; + binding.btnStart.performClick(); + + }else if(msg.what == KEYBOARD_SEND){//发送文本 + copy(msg.obj.toString()); + Intent intent = new Intent(); + intent.setAction(AutoInputService.class.getName()); + intent.putExtra("action",AutoInputService.ACTION_PASTE); + sendBroadcast(intent); + intent.putExtra("action",AutoInputService.ACTION_SEND); + sendBroadcast(intent); + }else if(msg.what == -1){//显示在输入框中 + + //Toast.makeText(getBaseContext(),"上一句--"+msg.obj,Toast.LENGTH_SHORT).show(); + }else if(msg.what == UPDATE_TIME){ + binding.timer.setText(msFormat.format(progress)); + } + } + }; + } + @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.e(TAG,"onStartCommand flags:"+flags+" startId:"+startId+ " intent:"+intent); manager.addView(binding.getRoot(),params); + binding.lyric.setTextSize(); return super.onStartCommand(intent, flags, startId); } @@ -102,7 +202,35 @@ public void onDestroy() { super.onDestroy(); Log.e(TAG,"onDestroy "); + timer.cancel(); manager.removeView(binding.getRoot()); - } + + /** + * 开始 + */ + private void start(){ + timer = new Timer(); + task = new ServiceTask(); + timer.schedule(task,0,10); + binding.btnStart.setText("停止"); + binding.btnPause.setText("暂停"); + binding.btnBack.setEnabled(true); + binding.btnFast.setEnabled(true); + binding.btnPause.setEnabled(true); + } + + + + //复制 + private void copy(String data) { + // 获取系统剪贴板 + ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); + // 创建一个剪贴数据集,包含一个普通文本数据条目(需要复制的数据),其他的还有 + ClipData clipData = ClipData.newPlainText(null, data); + // 把数据集设置(复制)到剪贴板 + clipboard.setPrimaryClip(clipData); + } + + } -- Gitblit v1.9.1