Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8499d3f9 authored by Narayan Kamath's avatar Narayan Kamath Committed by android-build-merger
Browse files

Merge "Merge "Changes to MediaProjection UX." into qt-dev am: 7b25470f am:...

Merge "Merge "Changes to MediaProjection UX." into qt-dev am: 7b25470f am: 309228c2" into qt-r1-dev-plus-aosp
am: 43eb6791

Change-Id: I2c1bf850002c4fe9b280cb0b14302b9a7d0a9d5f
parents 889bcb67 43eb6791
Loading
Loading
Loading
Loading
+4 −1
Original line number Original line Diff line number Diff line
@@ -1100,7 +1100,10 @@
    <string name="battery_saver_notification_action_text">Turn off Battery Saver</string>
    <string name="battery_saver_notification_action_text">Turn off Battery Saver</string>


    <!-- Media projection permission dialog warning text. [CHAR LIMIT=NONE] -->
    <!-- Media projection permission dialog warning text. [CHAR LIMIT=NONE] -->
    <string name="media_projection_dialog_text">While recording or casting, <xliff:g id="app_seeking_permission" example="Hangouts">%s</xliff:g> can capture any sensitive information, such as audio that you play and your passwords, payment info, photos, and messages.</string>
    <string name="media_projection_dialog_text">While recording or casting, <xliff:g id="app_seeking_permission" example="Hangouts">%s</xliff:g> can capture any sensitive information that is displayed on your screen or played from your device, including sensitive information such as audio, passwords, payment info, photos and messages.</string>

    <!-- Media projection permission dialog warning text for system services. [CHAR LIMIT=NONE] -->
    <string name="media_projection_dialog_service_text">While recording or casting, the service providing this function can capture any sensitive information that is displayed on your screen or played from your device, including sensitive information such as audio, passwords, payment info, photos and messages.</string>


    <!-- Media projection permission dialog warning title. [CHAR LIMIT=NONE] -->
    <!-- Media projection permission dialog warning title. [CHAR LIMIT=NONE] -->
    <string name="media_projection_dialog_title">Exposing sensitive info during casting/recording </string>
    <string name="media_projection_dialog_title">Exposing sensitive info during casting/recording </string>
+39 −32
Original line number Original line Diff line number Diff line
@@ -44,6 +44,7 @@ import android.view.WindowManager;
import android.widget.TextView;
import android.widget.TextView;


import com.android.systemui.R;
import com.android.systemui.R;
import com.android.systemui.util.Utils;


public class MediaProjectionPermissionActivity extends Activity
public class MediaProjectionPermissionActivity extends Activity
        implements DialogInterface.OnClickListener, DialogInterface.OnCancelListener {
        implements DialogInterface.OnClickListener, DialogInterface.OnCancelListener {
@@ -96,6 +97,10 @@ public class MediaProjectionPermissionActivity extends Activity
        TextPaint paint = new TextPaint();
        TextPaint paint = new TextPaint();
        paint.setTextSize(42);
        paint.setTextSize(42);


        CharSequence dialogText = null;
        if (Utils.isHeadlessRemoteDisplayProvider(packageManager, mPackageName)) {
            dialogText = getString(R.string.media_projection_dialog_service_text);
        } else {
            String label = aInfo.loadLabel(packageManager).toString();
            String label = aInfo.loadLabel(packageManager).toString();


            // If the label contains new line characters it may push the security
            // If the label contains new line characters it may push the security
@@ -132,8 +137,10 @@ public class MediaProjectionPermissionActivity extends Activity
                message.setSpan(new StyleSpan(Typeface.BOLD),
                message.setSpan(new StyleSpan(Typeface.BOLD),
                        appNameIndex, appNameIndex + appName.length(), 0);
                        appNameIndex, appNameIndex + appName.length(), 0);
            }
            }
            dialogText = message;
        }


        String dialogTitle = getString(R.string.media_projection_dialog_title, appName);
        String dialogTitle = getString(R.string.media_projection_dialog_title);


        View dialogTitleView = View.inflate(this, R.layout.media_projection_dialog_title, null);
        View dialogTitleView = View.inflate(this, R.layout.media_projection_dialog_title, null);
        TextView titleText = (TextView) dialogTitleView.findViewById(R.id.dialog_title);
        TextView titleText = (TextView) dialogTitleView.findViewById(R.id.dialog_title);
@@ -141,7 +148,7 @@ public class MediaProjectionPermissionActivity extends Activity


        mDialog = new AlertDialog.Builder(this)
        mDialog = new AlertDialog.Builder(this)
                .setCustomTitle(dialogTitleView)
                .setCustomTitle(dialogTitleView)
                .setMessage(message)
                .setMessage(dialogText)
                .setPositiveButton(R.string.media_projection_action_text, this)
                .setPositiveButton(R.string.media_projection_action_text, this)
                .setNegativeButton(android.R.string.cancel, this)
                .setNegativeButton(android.R.string.cancel, this)
                .setOnCancelListener(this)
                .setOnCancelListener(this)
+5 −0
Original line number Original line Diff line number Diff line
@@ -35,6 +35,7 @@ import androidx.annotation.VisibleForTesting;


import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.GuardedBy;
import com.android.systemui.R;
import com.android.systemui.R;
import com.android.systemui.util.Utils;


import java.io.FileDescriptor;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.io.PrintWriter;
@@ -234,6 +235,10 @@ public class CastControllerImpl implements CastController {


    private String getAppName(String packageName) {
    private String getAppName(String packageName) {
        final PackageManager pm = mContext.getPackageManager();
        final PackageManager pm = mContext.getPackageManager();
        if (Utils.isHeadlessRemoteDisplayProvider(pm, packageName)) {
            return "";
        }

        try {
        try {
            final ApplicationInfo appInfo = pm.getApplicationInfo(packageName, 0);
            final ApplicationInfo appInfo = pm.getApplicationInfo(packageName, 0);
            if (appInfo != null) {
            if (appInfo != null) {
+23 −0
Original line number Original line Diff line number Diff line
@@ -14,6 +14,9 @@


package com.android.systemui.util;
package com.android.systemui.util;


import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.view.View;
import android.view.View;


import com.android.systemui.SysUiServiceProvider;
import com.android.systemui.SysUiServiceProvider;
@@ -87,4 +90,24 @@ public class Utils {
            return mDisabled;
            return mDisabled;
        }
        }
    }
    }


    /**
     * Returns {@code true} iff the package {@code packageName} is a headless remote display
     * provider, i.e, that the package holds the privileged {@code REMOTE_DISPLAY_PROVIDER}
     * permission and that it doesn't host a launcher icon.
     */
    public static boolean isHeadlessRemoteDisplayProvider(PackageManager pm, String packageName) {
        if (pm.checkPermission(Manifest.permission.REMOTE_DISPLAY_PROVIDER, packageName)
                != PackageManager.PERMISSION_GRANTED) {
            return false;
        }

        Intent homeIntent = new Intent(Intent.ACTION_MAIN);
        homeIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        homeIntent.setPackage(packageName);

        return pm.queryIntentActivities(homeIntent, 0).isEmpty();
    }

}
}