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