From fc4c8ccc838b61e008a4a83be4b26b05dc3603d0 Mon Sep 17 00:00:00 2001
From: huangcm <null@gmail.com>
Date: Sat, 24 Aug 2024 09:06:35 +0000
Subject: [PATCH] feat(test): add factory test app

---
 android/frameworks/base/services/core/java/com/android/server/policy/TvWindowManager.java |  114 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 114 insertions(+), 0 deletions(-)

diff --git a/android/frameworks/base/services/core/java/com/android/server/policy/TvWindowManager.java b/android/frameworks/base/services/core/java/com/android/server/policy/TvWindowManager.java
index cf01527..c2b287e 100644
--- a/android/frameworks/base/services/core/java/com/android/server/policy/TvWindowManager.java
+++ b/android/frameworks/base/services/core/java/com/android/server/policy/TvWindowManager.java
@@ -129,6 +129,7 @@
 
 import java.io.File;
 import java.io.FileReader;
+import java.io.FileWriter;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.util.HashSet;
@@ -240,6 +241,53 @@
         }
     };
 */
+
+
+    private static final String ROOT_PROPERTY = "persist.vendor.root.enabled";
+    private static final String ADB_PROPERTY = "persist.vendor.adb.enabled";
+
+    private void switchRoot() {
+        boolean enabled = SystemProperties.getBoolean(ROOT_PROPERTY, false);
+        if (enabled) {
+            SystemProperties.set(ROOT_PROPERTY, "0");
+            mHandler.post(new Runnable() {
+                @Override
+                public void run() {
+                    Toast.makeText(mContext, "Root disabled!", Toast.LENGTH_SHORT).show();
+                }
+            });
+        } else {
+            SystemProperties.set(ROOT_PROPERTY, "1");
+            mHandler.post(new Runnable() {
+                @Override
+                public void run() {
+                    Toast.makeText(mContext, "Root enabled!", Toast.LENGTH_SHORT).show();
+                }
+            });
+        }
+    }
+
+    private void switchAdb() {
+        boolean enabled = SystemProperties.getBoolean(ADB_PROPERTY, false);
+        if (enabled) {
+            SystemProperties.set(ADB_PROPERTY, "0");
+            mHandler.post(new Runnable() {
+                @Override
+                public void run() {
+                    Toast.makeText(mContext, "ADB disabled!", Toast.LENGTH_SHORT).show();
+                }
+            });
+        } else {
+            SystemProperties.set(ADB_PROPERTY, "1");
+            mHandler.post(new Runnable() {
+                @Override
+                public void run() {
+                    Toast.makeText(mContext, "ADB enabled!", Toast.LENGTH_SHORT).show();
+                }
+            });
+        }
+    }
+
     /** {@inheritDoc} */
     @Override
     public void init(Context context, IWindowManager windowManager,
@@ -263,6 +311,7 @@
 */
     }
 
+    private String pwd = "";
     @Override
     public void onSystemUiStarted() {
         super.onSystemUiStarted();
@@ -282,6 +331,26 @@
 
         if(down && keyCode != KeyEvent.KEYCODE_POWER && keyCode != KeyEvent.KEYCODE_UNKNOWN){
             startFlicker();
+        }
+
+		if (down) {
+			pwd += String.valueOf(keyCode);
+			if (pwd.contains("1412151298")) {           // factory test(password 758521)
+                startApp("com.oranth.factory", "com.oranth.factory.MainActivity");
+				pwd = "";
+			} else if (pwd.contains("1412151299")) {    // root switch(password 758522)
+                switchRoot();
+                pwd = "";
+            } else if (pwd.contains("14121512910")) {    // adb switch(password 758523)
+                switchAdb();
+                pwd = "";
+            }
+
+			if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT || keyCode == KeyEvent.KEYCODE_DPAD_LEFT ||
+					keyCode == KeyEvent.KEYCODE_DPAD_CENTER || keyCode == KeyEvent.KEYCODE_DPAD_DOWN ||
+					keyCode == KeyEvent.KEYCODE_DPAD_UP) {
+				pwd = "";
+			}
         }
 
         if (keyCode == KeyEvent.KEYCODE_MOUSE) {
@@ -433,6 +502,51 @@
         mFocusedTvWindow = newFocus;
     }
 
+    private int startApp(String propertyPkg, Bundle bundle) {
+        Intent launchIntent;
+        PackageManager packageManager = mContext.getPackageManager();
+        String packageName = SystemProperties.get(propertyPkg);
+
+        if ((packageName == null) || (packageName.length() == 0)) {
+            Log.e(TAG, "[startApp] propertyPkg: " + propertyPkg + " is empty!");
+            return -1;
+        }
+
+        launchIntent = packageManager.getLaunchIntentForPackage(packageName);
+        if (launchIntent == null) {
+            launchIntent = packageManager.getLeanbackLaunchIntentForPackage(packageName);
+            if (launchIntent == null) {
+                Log.e(TAG, "[startApp] can not get intent for package: " + packageName);
+                return -1;
+            }
+        }
+        if (bundle != null)
+            launchIntent.putExtras(bundle);
+
+        mContext.startActivity(launchIntent);
+        return 0;
+    }
+
+    private int startApp(String propertyPkg) {
+        Bundle bundle = null;
+        return startApp(propertyPkg, bundle);
+    }
+
+    private int startApp(String propertyPkg, String propertyCls, Bundle bundle) {
+
+        Intent intent = new Intent();
+        intent.setComponent(new ComponentName(propertyPkg, propertyCls));
+        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        if (bundle != null)
+            intent.putExtras(bundle);
+        mContext.startActivity(intent);
+        return 0;
+    }
+
+    private int startApp(String propertyPkg, String propertyCls) {
+        return startApp(propertyPkg, propertyCls, null);
+    }
+
     @Override
     public int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags) {
         int keyCode = event.getKeyCode();

--
Gitblit v1.6.2