Don't show mic usage while muted Test: Manual Bug: 168553482 Change-Id: I395206ad173d91e0db39627346b80d2f5c2e1aeb Merged-In: I395206ad173d91e0db39627346b80d2f5c2e1aeb
diff --git a/src/com/android/permissioncontroller/permission/ui/handheld/ReviewOngoingUsageFragment.java b/src/com/android/permissioncontroller/permission/ui/handheld/ReviewOngoingUsageFragment.java index 41f3f45..c7b7263 100644 --- a/src/com/android/permissioncontroller/permission/ui/handheld/ReviewOngoingUsageFragment.java +++ b/src/com/android/permissioncontroller/permission/ui/handheld/ReviewOngoingUsageFragment.java
@@ -26,9 +26,12 @@ import static com.android.permissioncontroller.permission.debug.UtilsKt.shouldShowPermissionsDashboard; import android.app.AlertDialog; +import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; import android.location.LocationManager; +import android.media.AudioManager; import android.os.Bundle; import android.os.UserHandle; import android.text.Html; @@ -74,6 +77,7 @@ static final String PHONE_CALL = "android:phone_call_microphone"; static final String VIDEO_CALL = "android:phone_call_camera"; + private AudioManager mAudioManager; private @NonNull PermissionUsages mPermissionUsages; private boolean mPermissionUsagesLoaded; private @Nullable AlertDialog mDialog; @@ -82,6 +86,13 @@ private ArraySet<String> mSystemUsage = new ArraySet<>(0); private long mStartTime; + private BroadcastReceiver mReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + onPermissionUsagesLoaded(); + } + }; + /** * @return A new {@link ReviewOngoingUsageFragment} */ @@ -99,6 +110,9 @@ long numMillis = getArguments().getLong(Intent.EXTRA_DURATION_MILLIS); + mAudioManager = getContext().getSystemService(AudioManager.class); + getContext().registerReceiver(mReceiver, + new IntentFilter(AudioManager.ACTION_MICROPHONE_MUTE_CHANGED)); mPermissionUsages = new PermissionUsages(getActivity()); mStartTime = Math.max(System.currentTimeMillis() - numMillis, Instant.EPOCH.toEpochMilli()); String[] permissions = new String[]{CAMERA, MICROPHONE}; @@ -188,14 +202,18 @@ } private void showDialog(@NonNull List<Pair<AppPermissionUsage, List<GroupUsage>>> usages) { - AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()) - .setView(createDialogView(usages)) - .setPositiveButton(R.string.ongoing_usage_dialog_ok, (dialog, which) -> - PermissionControllerStatsLog.write(PRIVACY_INDICATORS_INTERACTED, - PRIVACY_INDICATORS_INTERACTED__TYPE__DIALOG_DISMISS)) - .setOnDismissListener((dialog) -> getActivity().finish()); - mDialog = builder.create(); - mDialog.show(); + if (mDialog == null || !mDialog.isShowing()) { + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()) + .setView(createDialogView(usages)) + .setPositiveButton(R.string.ongoing_usage_dialog_ok, (dialog, which) -> + PermissionControllerStatsLog.write(PRIVACY_INDICATORS_INTERACTED, + PRIVACY_INDICATORS_INTERACTED__TYPE__DIALOG_DISMISS)) + .setOnDismissListener((dialog) -> getActivity().finish()); + mDialog = builder.create(); + mDialog.show(); + } else { + mDialog.setView(createDialogView(usages)); + } } /** @@ -251,6 +269,9 @@ int numGroups = groups.size(); for (int groupNum = 0; groupNum < numGroups; groupNum++) { AppPermissionGroup group = groups.get(groupNum).getGroup(); + if (group.getName().equals(MICROPHONE) && mAudioManager.isMicrophoneMute()) { + continue; + } usedGroups.put(group.getName(), group.getLabel()); } } @@ -283,35 +304,42 @@ } if (!mOpUsage.isEmpty()) { - if (mOpUsage.containsKey(VIDEO_CALL) && mOpUsage.containsKey( - PHONE_CALL)) { + boolean hasVideo = mOpUsage.containsKey(VIDEO_CALL); + boolean hasPhone = mOpUsage.containsKey(PHONE_CALL) + && !mAudioManager.isMicrophoneMute(); + if (hasVideo && hasPhone) { otherUseContent.setText( Html.fromHtml(getString(R.string.phone_call_uses_microphone_and_camera), 0)); - } else if (mOpUsage.containsKey(VIDEO_CALL)) { + } else if (hasVideo && mAudioManager.isMicrophoneMute()) { otherUseContent.setText( Html.fromHtml(getString(R.string.phone_call_uses_camera), 0)); - } else if (mOpUsage.containsKey(PHONE_CALL)) { + } else if (hasPhone) { otherUseContent.setText( Html.fromHtml(getString(R.string.phone_call_uses_microphone), 0)); } - if (mOpUsage.containsKey(VIDEO_CALL)) { + if (hasVideo) { usedGroups.put(CAMERA, KotlinUtils.INSTANCE.getPermGroupLabel(context, CAMERA)); + if (!mAudioManager.isMicrophoneMute()) { + usedGroups.put(MICROPHONE, + KotlinUtils.INSTANCE.getPermGroupLabel(context, MICROPHONE)); + } } - if (mOpUsage.containsKey(PHONE_CALL)) { + if (hasPhone) { usedGroups.put(MICROPHONE, KotlinUtils.INSTANCE.getPermGroupLabel(context, MICROPHONE)); } } if (!mSystemUsage.isEmpty()) { - if (mSystemUsage.contains(MICROPHONE) && mSystemUsage.contains(CAMERA)) { + if (mSystemUsage.contains(MICROPHONE) && mSystemUsage.contains(CAMERA) + && !mAudioManager.isMicrophoneMute()) { systemUseContent.setText(getString(R.string.system_uses_microphone_and_camera)); } else if (mSystemUsage.contains(CAMERA)) { systemUseContent.setText(getString(R.string.system_uses_camera)); - } else if (mSystemUsage.contains(MICROPHONE) ) { + } else if (mSystemUsage.contains(MICROPHONE) && !mAudioManager.isMicrophoneMute()) { systemUseContent.setText(getString(R.string.system_uses_microphone)); } @@ -326,6 +354,14 @@ PermissionApp app = usage.first.getApp(); List<GroupUsage> groups = usage.second; + // Check if this uses only mic permission. If the mic is muted, do not show + if (groups.size() == 1) { + if (groups.get(0).getGroup().getName().equals(MICROPHONE) + && mAudioManager.isMicrophoneMute()) { + continue; + } + } + View itemView = inflater.inflate(R.layout.ongoing_usage_dialog_item, appsList, false); ((TextView) itemView.requireViewById(R.id.app_name)).setText(app.getLabel()); @@ -337,6 +373,9 @@ int numGroups = usages.get(usageNum).second.size(); for (int groupNum = 0; groupNum < numGroups; groupNum++) { AppPermissionGroup group = groups.get(groupNum).getGroup(); + if (mAudioManager.isMicrophoneMute() && group.getName().equals(MICROPHONE)) { + continue; + } ViewGroup groupView = (ViewGroup) inflater.inflate(R.layout.image_view, null); ((ImageView) groupView.requireViewById(R.id.icon)).setImageDrawable( @@ -379,4 +418,11 @@ public void onCreatePreferences(Bundle bundle, String s) { // empty } + + @Override + public void onDestroy() { + getContext().unregisterReceiver(mReceiver); + super.onDestroy(); + + } }