From 46e30afe725bc142cca249ff6f12175588a9f9f7 Mon Sep 17 00:00:00 2001 From: Gersbacher Pirmin <pg045@hdm-stuttgart.de> Date: Wed, 16 Dec 2020 12:22:00 +0100 Subject: [PATCH] =?UTF-8?q?*=20Ausblenden=20der=20Overlays=20bei=20Verlass?= =?UTF-8?q?en=20der=20App=20*=20ActivityInfo=20Objekt=20hinzugefuegt=20-?= =?UTF-8?q?=20vielleicht=20spaeter=20wichtig=20wenn=20TYPE=20APPLICATION?= =?UTF-8?q?=20genutzt=20werden=20soll=20*=20CSV=20Test=20Kommentar=20einge?= =?UTF-8?q?f=C3=BCgt=20*=20Abfrage=20Berechtigung=20=C3=BCber=20andere=20A?= =?UTF-8?q?pps=20zu=20zeichnen=20-=20auch=20vielleicht=20spaeter=20wichtig?= =?UTF-8?q?=20bei=20TYPE=20APPLICATION?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AccessibilityInspectorService.java | 236 ++++++++++++++++-- .../MainActivity.java | 7 + app/src/main/res/xml/serviceconfig.xml | 3 +- 3 files changed, 226 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/com/example/accessibilityinspectorservice/AccessibilityInspectorService.java b/app/src/main/java/com/example/accessibilityinspectorservice/AccessibilityInspectorService.java index e297f37..f9d9b71 100644 --- a/app/src/main/java/com/example/accessibilityinspectorservice/AccessibilityInspectorService.java +++ b/app/src/main/java/com/example/accessibilityinspectorservice/AccessibilityInspectorService.java @@ -1,11 +1,16 @@ package com.example.accessibilityinspectorservice; import android.accessibilityservice.AccessibilityService; +import android.app.Activity; import android.content.ComponentName; import android.content.Intent; +import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; +import android.database.Cursor; import android.graphics.drawable.ShapeDrawable; import android.graphics.drawable.shapes.RectShape; +import android.os.Handler; +import android.os.Message; import android.text.Html; import android.util.Log; import android.view.accessibility.AccessibilityEvent; @@ -27,12 +32,15 @@ import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; +import androidx.core.view.ViewCompat; + import com.example.accessibilityserviceappv2.R; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; +import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -47,26 +55,59 @@ public class AccessibilityInspectorService extends AccessibilityService { private static final String LOG_TAG = "MyActivity"; public static String appname = "DummyApp"; int btnCounter; - View view; + View floatingInfobox; String buttonClickTextTest; Boolean viewIsSet = false; + WindowManager wm; + List <CustomButton> accessButtonList; + Button exportButton; + ActivityInfo activityInfo; + ComponentName componentName; @Override public void onAccessibilityEvent(AccessibilityEvent e) { + + if (e.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) { + if (e.getPackageName() != null && e.getClassName() != null) { + componentName = new ComponentName( + e.getPackageName().toString(), + e.getClassName().toString() + ); + + activityInfo = tryGetActivity(componentName); + boolean isActivity = activityInfo != null; + if (isActivity) + Log.i("CurrentActivity", componentName.flattenToShortString()); + } + + if(e.getPackageName() != null){ + if(!e.getPackageName().equals("com.example.emptytestapp") && !e.getPackageName().equals("com.example.accessibilityserviceappv2")) { + System.out.println(" The Package " + e.getPackageName()); + System.out.println(" Remove Windows "); + removeWindows(); + } + + } + + } + btnCounter = 1; if(e.getPackageName()!=null){appname = e.getPackageName().toString();} + if (e.getPackageName()!=null && e.getPackageName().toString().equals("com.example.emptytestapp")) { - showFloatingWindow("init text"); switch (e.getEventType()) { case AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED: { + wm = (WindowManager) getSystemService(WINDOW_SERVICE); + showFloatingWindow("init text"); + accessButtonList = new ArrayList(); logNodeHierarchy(getRootInActiveWindow(), 0); addExportButton(); } @@ -94,6 +135,14 @@ public class AccessibilityInspectorService extends AccessibilityService { } + private ActivityInfo tryGetActivity(ComponentName componentName) { + try { + return getPackageManager().getActivityInfo(componentName, 0); + } catch (PackageManager.NameNotFoundException e) { + return null; + } + } + @Override public void onInterrupt() { @@ -109,6 +158,7 @@ public class AccessibilityInspectorService extends AccessibilityService { Log.i("Service", "Connected"); Toast.makeText(getApplicationContext(), "onServiceConnected", Toast.LENGTH_SHORT).show(); + } @@ -134,12 +184,11 @@ public class AccessibilityInspectorService extends AccessibilityService { Log.v(LOG_TAG, logString); - WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); mLayout = new FrameLayout(this); WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); - lp.type = WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY; + lp.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; lp.format = PixelFormat.TRANSLUCENT; lp.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; // lp.flags |= WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE; @@ -200,6 +249,8 @@ public class AccessibilityInspectorService extends AccessibilityService { wm.addView(testBtn, lp); + accessButtonList.add(testBtn); + btnCounter++; @@ -214,11 +265,10 @@ public class AccessibilityInspectorService 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); + wm.removeView(floatingInfobox); } Button testButton = new Button(context); @@ -228,28 +278,27 @@ public class AccessibilityInspectorService extends AccessibilityService { WindowManager.LayoutParams lp2 = new WindowManager.LayoutParams(); - lp2.type = WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY; + lp2.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; lp2.format = PixelFormat.TRANSLUCENT; lp2.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; // lp.flags |= WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE; lp2.width = WindowManager.LayoutParams.MATCH_PARENT; lp2.height = WindowManager.LayoutParams.WRAP_CONTENT; - lp2.alpha = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; lp2.gravity = Gravity.BOTTOM; lp2.x = 0; lp2.y = 0; LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - view = layoutInflater.inflate(R.layout.floatingwindow, null); + floatingInfobox = layoutInflater.inflate(R.layout.floatingwindow, null); - TextView item = (TextView) view.findViewById(R.id.textView2); + TextView item = (TextView) floatingInfobox.findViewById(R.id.textView2); item.setText(Html.fromHtml(initText)); lLayout.setLayoutParams(llParameters); - view.setOnTouchListener(new View.OnTouchListener() { + floatingInfobox.setOnTouchListener(new View.OnTouchListener() { private WindowManager.LayoutParams updateParameters = lp2; int x, y; @@ -273,7 +322,7 @@ public class AccessibilityInspectorService extends AccessibilityService { case MotionEvent.ACTION_MOVE: updateParameters.y = (int) (y - (event.getRawY() - touchedY)); - wm.updateViewLayout(view, updateParameters); + wm.updateViewLayout(floatingInfobox, updateParameters); default: @@ -285,7 +334,7 @@ public class AccessibilityInspectorService extends AccessibilityService { }); - wm.addView(view,lp2); + wm.addView(floatingInfobox,lp2); viewIsSet = true; @@ -297,15 +346,29 @@ public class AccessibilityInspectorService extends AccessibilityService { Context context = getApplicationContext(); - Button exportButton = new Button(this); + exportButton = new Button(this); exportButton.setText("Export Button"); - WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); + WindowManager.LayoutParams theparams = new WindowManager.LayoutParams(); + + theparams = new WindowManager.LayoutParams( + WindowManager.LayoutParams.WRAP_CONTENT, + WindowManager.LayoutParams.WRAP_CONTENT, + WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, + WindowManager.LayoutParams.FLAG_FULLSCREEN + |WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS + |WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE , + PixelFormat.TRANSLUCENT); + + + wm.addView(exportButton, theparams); - lp.type = WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY; + + + lp.type = WindowManager.LayoutParams.TYPE_APPLICATION; lp.format = PixelFormat.TRANSLUCENT; lp.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; // lp.flags |= WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE; @@ -318,20 +381,20 @@ public class AccessibilityInspectorService extends AccessibilityService { exportButton.setOnClickListener(new View.OnClickListener(){ public void onClick(View v){ + System.out.println("onclicker geklickt"); String btnNumber = "Test Anzahl " + btnCounter; writeToFile(btnNumber, context); + removeWindows(); goToMainActivity(); } }); - - wm.addView(exportButton, lp); - } public void export(){ + //generate data StringBuilder data = new StringBuilder(); data.append("Time, Distance"); @@ -409,5 +472,140 @@ public class AccessibilityInspectorService extends AccessibilityService { return ret; } + private void removeWindows(){ + + System.out.println(" windows removed"); + + + + try { + + + for (CustomButton ab: accessButtonList) { + + if( ViewCompat.isAttachedToWindow(ab)){ + + wm.removeView(ab); + } + + } + + wm.removeView(floatingInfobox); + + wm.removeView(exportButton); + viewIsSet=false; + + + } catch (Exception exception) { + exception.printStackTrace(); + } + + } + + /*private void writeDataToCSV(){ + + final Handler handler = new Handler() { + @Override + public void handleMessage(Message msg) { + + } + }; + new Thread() { + public void run() { + try { + + FileWriter fw = new FileWriter(filename); + + Cursor cursor = db.selectAll(); + + fw.append("No"); + fw.append(','); + + fw.append("code"); + fw.append(','); + + fw.append("nr"); + fw.append(','); + + fw.append("Orde"); + fw.append(','); + + fw.append("Da"); + fw.append(','); + + fw.append("Date"); + fw.append(','); + + fw.append("Leverancier"); + fw.append(','); + + fw.append("Baaln"); + fw.append(','); + + fw.append("asd"); + fw.append(','); + + fw.append("Kwaliteit"); + fw.append(','); + + fw.append("asd"); + fw.append(','); + + fw.append('\n'); + + if (cursor.moveToFirst()) { + do { + fw.append(cursor.getString(0)); + fw.append(','); + + fw.append(cursor.getString(1)); + fw.append(','); + + fw.append(cursor.getString(2)); + fw.append(','); + + fw.append(cursor.getString(3)); + fw.append(','); + + fw.append(cursor.getString(4)); + fw.append(','); + + fw.append(cursor.getString(5)); + fw.append(','); + + fw.append(cursor.getString(6)); + fw.append(','); + + fw.append(cursor.getString(7)); + fw.append(','); + + fw.append(cursor.getString(8)); + fw.append(','); + + fw.append(cursor.getString(9)); + fw.append(','); + + fw.append(cursor.getString(10)); + fw.append(','); + + fw.append('\n'); + + } while (cursor.moveToNext()); + } + if (cursor != null && !cursor.isClosed()) { + cursor.close(); + } + + // fw.flush(); + fw.close(); + + } catch (Exception e) { + } + handler.sendEmptyMessage(0); + } + }.start(); + }*/ + + } \ No newline at end of file diff --git a/app/src/main/java/com/example/accessibilityinspectorservice/MainActivity.java b/app/src/main/java/com/example/accessibilityinspectorservice/MainActivity.java index 702a29b..55eb02b 100644 --- a/app/src/main/java/com/example/accessibilityinspectorservice/MainActivity.java +++ b/app/src/main/java/com/example/accessibilityinspectorservice/MainActivity.java @@ -8,6 +8,7 @@ import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; +import android.provider.Settings; import android.util.Log; import android.view.View; import android.widget.Button; @@ -35,6 +36,12 @@ public class MainActivity extends AppCompatActivity { Button testButoon = (Button) findViewById(R.id.button25); + if (!Settings.canDrawOverlays(this)) { + Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, + Uri.parse("package:" + getPackageName())); + startActivityForResult(intent, 0); + } + testButoon.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { diff --git a/app/src/main/res/xml/serviceconfig.xml b/app/src/main/res/xml/serviceconfig.xml index 054fdb4..64ef35e 100644 --- a/app/src/main/res/xml/serviceconfig.xml +++ b/app/src/main/res/xml/serviceconfig.xml @@ -2,7 +2,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:accessibilityEventTypes="typeAllMask" android:accessibilityFeedbackType="feedbackAllMask" - android:accessibilityFlags="flagDefault" + android:accessibilityFlags="flagDefault|flagRequestFilterKeyEvents" + android:canRequestFilterKeyEvents="true" android:canRequestEnhancedWebAccessibility="true" android:notificationTimeout="100" android:packageNames="@null" -- GitLab