From 6691f4ba9e9e2a26bcae52c25cc39bf66410e199 Mon Sep 17 00:00:00 2001 From: Gersbacher Pirmin <pg045@hdm-stuttgart.de> Date: Fri, 11 Dec 2020 03:47:51 +0100 Subject: [PATCH] *moved onclick method from button to service --- .../CustomButton.java | 75 +++++++++++++-- .../MyAccessibilityServiceV2.java | 95 ++++++++++++++++++- 2 files changed, 159 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/example/accessibilityserviceappv2/CustomButton.java b/app/src/main/java/com/example/accessibilityserviceappv2/CustomButton.java index 98bf495..8515a8d 100644 --- a/app/src/main/java/com/example/accessibilityserviceappv2/CustomButton.java +++ b/app/src/main/java/com/example/accessibilityserviceappv2/CustomButton.java @@ -1,21 +1,28 @@ package com.example.accessibilityserviceappv2; +import android.app.AlertDialog; import android.content.Context; +import android.content.DialogInterface; import android.graphics.Color; import android.graphics.Paint; import android.graphics.drawable.ShapeDrawable; import android.graphics.drawable.shapes.RectShape; import android.util.AttributeSet; import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; import android.widget.Toast; import com.google.android.material.button.MaterialButton; -public class CustomButton extends androidx.appcompat.widget.AppCompatButton implements View.OnClickListener { +public class CustomButton extends androidx.appcompat.widget.AppCompatButton /*implements View.OnClickListener*/ { /* Custom Button @@ -25,27 +32,81 @@ public class CustomButton extends androidx.appcompat.widget.AppCompatButton impl Context context; String logString; private static final String LOG_TAG = "ButtonActivity"; + View view; + LayoutInflater layoutInflater; + TextView testText; + + String viewText; + String hintText; + int btnCounter; public CustomButton(Context context) { - this(context, null); + this(context, 0, null, null, null); } - public CustomButton(Context context, String contentDescription) { + public CustomButton(Context context, int btnCounter, String viewText, String contentDescription, String hintText) { super(context); init(); + this.btnCounter = btnCounter; + this.viewText = viewText; this.contentDescription = contentDescription; + this.hintText = hintText; this.context = context; } private void init(){ - setOnClickListener(this); + if(context != null){ + layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + view = layoutInflater.inflate(R.layout.floatingwindow, null, false); + testText = findViewById(R.id.textView2); + } + else { + Log.v(LOG_TAG, "context empty"); + } + //setOnClickListener(this); + } - @Override - public void onClick(View v) { - Toast.makeText(context, contentDescription, Toast.LENGTH_SHORT).show(); + //@Override + /* public void onClick(View v) { + String stringToastMessage = "Nummer : " + btnCounter + "\nText: " + viewText + "\nInhaltslabel " + contentDescription + "\nHint: " + hintText; + Toast toast = Toast.makeText(context, stringToastMessage, Toast.LENGTH_LONG); + LinearLayout toastLayout = (LinearLayout) toast.getView(); + TextView toastTV = (TextView) toastLayout.getChildAt(0); + toastTV.setTextSize(30); + View toastView = toast.getView(); + + + TextView toastMessage = (TextView) toastView.findViewById(android.R.id.message); + toastMessage.setTextSize(25); + toastMessage.setTextColor(Color.RED); + toastMessage.setGravity(Gravity.CENTER); + toastMessage.setCompoundDrawablePadding(16); + toastView.setBackgroundColor(Color.CYAN); + //toast.show(); + + Log.v(LOG_TAG, contentDescription); + + if(testText!=null){ + testText.setText(contentDescription); + } + else { + testText = findViewById(R.id.textView2); + Log.v(LOG_TAG, "empty text"); + } + + } +*/ + public void openDialog(){ + + ExampleDialog exampleDialog = new ExampleDialog(); + + } + + public String showContent(){ + return this.contentDescription; } } diff --git a/app/src/main/java/com/example/accessibilityserviceappv2/MyAccessibilityServiceV2.java b/app/src/main/java/com/example/accessibilityserviceappv2/MyAccessibilityServiceV2.java index 8b46b7e..7b9a514 100644 --- a/app/src/main/java/com/example/accessibilityserviceappv2/MyAccessibilityServiceV2.java +++ b/app/src/main/java/com/example/accessibilityserviceappv2/MyAccessibilityServiceV2.java @@ -4,6 +4,7 @@ import android.accessibilityservice.AccessibilityService; import android.graphics.drawable.ShapeDrawable; import android.graphics.drawable.shapes.RectShape; import android.util.Log; +import android.view.ViewGroup; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo; @@ -24,9 +25,13 @@ import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo; import android.widget.Button; import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; +import org.w3c.dom.Text; + import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -37,12 +42,18 @@ import java.util.List; public class MyAccessibilityServiceV2 extends AccessibilityService { FrameLayout mLayout; + LinearLayout lLayout; private static final String LOG_TAG = "MyActivity"; public static String appname = "DummyApp"; private Paint paint; Rect rectArray[]; List<Rect> rectList = new ArrayList<>(); int btnCounter; + View view; + TextView floatingView; + String buttonClickTextTest; + Boolean viewIsSet = false; + @Override @@ -61,10 +72,14 @@ public class MyAccessibilityServiceV2 extends AccessibilityService { if (e.getPackageName()!=null && e.getPackageName().toString().equals("com.example.emptytestapp")) { + showFloatingWindow("init text"); + + switch (e.getEventType()) { case AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED: { + logNodeHierarchy(getRootInActiveWindow(), 0); } @@ -161,6 +176,12 @@ public class MyAccessibilityServiceV2 extends AccessibilityService { Rect rect = new Rect(); + String contentDescription; + String viewText; + String hintText; + + + if (nodeInfo == null) return; @@ -190,20 +211,34 @@ public class MyAccessibilityServiceV2 extends AccessibilityService { lp.width = WindowManager.LayoutParams.WRAP_CONTENT; lp.height = WindowManager.LayoutParams.WRAP_CONTENT; //lp.alpha = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; - - lp.gravity = Gravity.TOP | Gravity.RIGHT; lp.x = rect.centerX(); lp.y = rect.centerY(); - String contentDescription = "empty"; + + if(nodeInfo.getText()!=null){ + viewText = nodeInfo.getText().toString(); + } + else { + viewText = "empty"; + } if(nodeInfo.getContentDescription()!=null){ contentDescription = nodeInfo.getContentDescription().toString(); } + else { + contentDescription = "empty"; + } + + if(nodeInfo.getHintText()!=null){ + hintText = nodeInfo.getHintText().toString(); + } + else { + hintText = "empty"; + } - CustomButton testBtn = new CustomButton(context, contentDescription); + CustomButton testBtn = new CustomButton(context, btnCounter, viewText, contentDescription, hintText); Button testBtn2 = new Button(context); testBtn.setText(String.valueOf(btnCounter)); testBtn.setContentDescription("auto button"); @@ -222,6 +257,13 @@ public class MyAccessibilityServiceV2 extends AccessibilityService { shapedrawable.getPaint().setStyle(Paint.Style.STROKE); testBtn.setBackground(shapedrawable); + testBtn.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + buttonClickTextTest = testBtn.showContent(); + showFloatingWindow(buttonClickTextTest); + } + }); + wm.addView(testBtn, lp); btnCounter++; @@ -236,4 +278,49 @@ public class MyAccessibilityServiceV2 extends AccessibilityService { } + public void showFloatingWindow(String initText){ + Context context = getApplicationContext(); + WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); + lLayout = new LinearLayout(this); + + if(viewIsSet){ + wm.removeView(view); + } + + Button testButton = new Button(context); + + LinearLayout.LayoutParams llParameters = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT); + + WindowManager.LayoutParams lp2 = new WindowManager.LayoutParams(); + + + lp2.type = WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY; + lp2.format = PixelFormat.TRANSLUCENT; + lp2.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; + // lp.flags |= WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE; + lp2.width = WindowManager.LayoutParams.WRAP_CONTENT; + lp2.height = WindowManager.LayoutParams.WRAP_CONTENT; + lp2.alpha = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; + lp2.gravity = Gravity.BOTTOM | Gravity.END; + lp2.x = 0; + lp2.y = 0; + + + LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + view = layoutInflater.inflate(R.layout.floatingwindow, null); + + TextView item = (TextView) view.findViewById(R.id.textView2); + + item.setText(initText); + + + lLayout.setBackgroundColor(Color.RED); + lLayout.setLayoutParams(llParameters); + + wm.addView(view,lp2); + + viewIsSet = true; + + } + } -- GitLab