diff options
Diffstat (limited to 'hostsidetests/securitybulletin/test-apps/CVE-2021-0954/src/android/security/cts/CVE_2021_0954/PocService.java')
-rw-r--r-- | hostsidetests/securitybulletin/test-apps/CVE-2021-0954/src/android/security/cts/CVE_2021_0954/PocService.java | 98 |
1 files changed, 56 insertions, 42 deletions
diff --git a/hostsidetests/securitybulletin/test-apps/CVE-2021-0954/src/android/security/cts/CVE_2021_0954/PocService.java b/hostsidetests/securitybulletin/test-apps/CVE-2021-0954/src/android/security/cts/CVE_2021_0954/PocService.java index 82b78a2beba..79270baa65e 100644 --- a/hostsidetests/securitybulletin/test-apps/CVE-2021-0954/src/android/security/cts/CVE_2021_0954/PocService.java +++ b/hostsidetests/securitybulletin/test-apps/CVE-2021-0954/src/android/security/cts/CVE_2021_0954/PocService.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 The Android Open Source Project + * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,47 +14,65 @@ * limitations under the License. */ -package android.security.cts.cve_2021_0954; +package android.security.cts.CVE_2021_0954; import android.app.Service; +import android.content.Context; import android.content.Intent; +import android.content.SharedPreferences; import android.content.res.Resources; import android.graphics.PixelFormat; -import android.os.Handler; import android.os.IBinder; -import android.provider.Settings; import android.view.Gravity; import android.view.WindowManager; import android.view.WindowManager.LayoutParams; import android.widget.Button; public class PocService extends Service { - public static Button mButton; - private WindowManager mWindowManager; - private WindowManager.LayoutParams mLayoutParams; + Button mButton; + WindowManager mWindowManager; - private static int getScreenWidth() { + private int getScreenWidth() { return Resources.getSystem().getDisplayMetrics().widthPixels; } - private static int getScreenHeight() { + private int getScreenHeight() { return Resources.getSystem().getDisplayMetrics().heightPixels; } + String getStringRes(int key) { + return getResources().getString(key); + } + + int getIntegerRes(int key) { + return getResources().getInteger(key); + } + @Override public void onCreate() { - super.onCreate(); - mWindowManager = getSystemService(WindowManager.class); - mLayoutParams = new WindowManager.LayoutParams(); - mLayoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; - mLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL - | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; - mLayoutParams.format = PixelFormat.OPAQUE; - mLayoutParams.gravity = Gravity.LEFT | Gravity.TOP; - mLayoutParams.width = getScreenWidth(); - mLayoutParams.height = getScreenHeight(); - mLayoutParams.x = getScreenWidth() / 2; - mLayoutParams.y = getScreenHeight() / 2; + try { + super.onCreate(); + mWindowManager = getSystemService(WindowManager.class); + LayoutParams layoutParams = new LayoutParams(); + layoutParams.type = LayoutParams.TYPE_APPLICATION_OVERLAY; + layoutParams.flags = + LayoutParams.FLAG_NOT_TOUCH_MODAL | LayoutParams.FLAG_NOT_FOCUSABLE; + layoutParams.format = PixelFormat.OPAQUE; + layoutParams.gravity = Gravity.LEFT | Gravity.TOP; + layoutParams.width = getScreenWidth(); + layoutParams.height = getScreenHeight(); + layoutParams.x = getScreenWidth() / 2; + layoutParams.y = getScreenHeight() / 2; + + /* Show the floating window */ + mButton = new Button(this); + mButton.setText(getString(R.string.overlayButtonText)); + mWindowManager.addView(mButton, layoutParams); + } catch (Exception e) { + sendTestResult(getIntegerRes(R.integer.assumptionFailure), e.getMessage()); + return; + } + sendTestResult(getIntegerRes(R.integer.noAssumptionFailure), getStringRes(R.string.empty)); } @Override @@ -63,31 +81,27 @@ public class PocService extends Service { } @Override - public int onStartCommand(Intent intent, int flags, int startId) { - showFloatingWindow(); - return super.onStartCommand(intent, flags, startId); - } - - @Override public void onDestroy() { - if (mWindowManager != null && mButton != null) { - mWindowManager.removeView(mButton); + try { + if (mWindowManager != null && mButton != null) { + mWindowManager.removeView(mButton); + } + super.onDestroy(); + } catch (Exception e) { + sendTestResult(getIntegerRes(R.integer.assumptionFailure), e.getMessage()); } - super.onDestroy(); } - private void showFloatingWindow() { - if (Settings.canDrawOverlays(this)) { - mButton = new Button(getApplicationContext()); - mButton.setText("OverlayButton"); - mWindowManager.addView(mButton, mLayoutParams); - new Handler().postDelayed(new Runnable() { - @Override - public void run() { - onDestroy(); - } - }, 60000); // one minute - mButton.setTag(mButton.getVisibility()); + private void sendTestResult(int result, String message) { + try { + SharedPreferences sh = getSharedPreferences(getStringRes(R.string.sharedPreferences), + Context.MODE_PRIVATE); + SharedPreferences.Editor edit = sh.edit(); + edit.putInt(getStringRes(R.string.resultKey), result); + edit.putString(getStringRes(R.string.messageKey), message); + edit.commit(); + } catch (Exception e) { + // ignore the exception } } } |