Loading cmds/statsd/src/atoms.proto +0 −1 Original line number Diff line number Diff line Loading @@ -3419,7 +3419,6 @@ message HiddenApiUsed { * - When user clicks privacy chip * - How does the user exit the Privacy Dialog * Logged from: * packages/SystemUI/src/com/android/systemui/privacy/OngoingPrivacyDialog.kt * packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java */ message PrivacyIndicatorsInteracted { Loading packages/SystemUI/src/com/android/systemui/privacy/OngoingPrivacyDialog.ktdeleted 100644 → 0 +0 −160 Original line number Diff line number Diff line /* * Copyright (C) 2018 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. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.android.systemui.privacy import android.app.AlertDialog import android.app.Dialog import android.content.Context import android.content.DialogInterface import android.content.Intent import android.content.pm.PackageManager import android.content.res.ColorStateList import android.os.UserHandle import android.provider.Settings import android.util.IconDrawableFactory import android.util.StatsLog import android.view.Gravity import android.view.LayoutInflater import android.view.View import android.widget.ImageView import android.widget.LinearLayout import android.widget.TextView import com.android.systemui.Dependency import com.android.systemui.R import com.android.systemui.plugins.ActivityStarter import java.util.concurrent.TimeUnit class OngoingPrivacyDialog constructor( private val context: Context, private val dialogBuilder: PrivacyDialogBuilder ) { private val iconSize = context.resources.getDimensionPixelSize( R.dimen.ongoing_appops_dialog_icon_size) private val iconColor = context.resources.getColor( com.android.internal.R.color.text_color_primary, context.theme) private val iconMargin = context.resources.getDimensionPixelSize( R.dimen.ongoing_appops_dialog_icon_margin) private val iconFactory = IconDrawableFactory.newInstance(context, true) private var dismissDialog: (() -> Unit)? = null private val appsAndTypes = dialogBuilder.appsAndTypes .sortedWith(compareBy({ -it.second.size }, // Sort by number of AppOps { it.second.min() }, { it.first })) fun createDialog(): Dialog { val builder = AlertDialog.Builder(context).apply { setPositiveButton(R.string.ongoing_privacy_dialog_ok, object : DialogInterface.OnClickListener { override fun onClick(dialog: DialogInterface?, which: Int) { StatsLog.write(StatsLog.PRIVACY_INDICATORS_INTERACTED, StatsLog.PRIVACY_INDICATORS_INTERACTED__TYPE__DIALOG_DISMISS) } }) setNeutralButton(R.string.ongoing_privacy_dialog_open_settings, object : DialogInterface.OnClickListener { val intent = Intent(Settings.ACTION_PRIVACY_SETTINGS).putExtra( Intent.EXTRA_DURATION_MILLIS, TimeUnit.MINUTES.toMillis(1)) @Suppress("DEPRECATION") override fun onClick(dialog: DialogInterface?, which: Int) { StatsLog.write(StatsLog.PRIVACY_INDICATORS_INTERACTED, StatsLog .PRIVACY_INDICATORS_INTERACTED__TYPE__DIALOG_PRIVACY_SETTINGS) Dependency.get(ActivityStarter::class.java) .postStartActivityDismissingKeyguard(intent, 0) } }) } builder.setView(getContentView()) val dialog = builder.create() dismissDialog = dialog::dismiss return dialog } fun getContentView(): View { val layoutInflater = LayoutInflater.from(context) val contentView = layoutInflater.inflate(R.layout.ongoing_privacy_dialog_content, null) val title = contentView.findViewById(R.id.title) as TextView val appsList = contentView.findViewById(R.id.items_container) as LinearLayout title.setText(dialogBuilder.getDialogTitle()) val numItems = appsAndTypes.size for (i in 0..(numItems - 1)) { val item = appsAndTypes[i] addAppItem(appsList, item.first, item.second, dialogBuilder.types.size > 1) } return contentView } @Suppress("DEPRECATION") private fun addAppItem( itemList: LinearLayout, app: PrivacyApplication, types: List<PrivacyType>, showIcons: Boolean = true ) { val layoutInflater = LayoutInflater.from(context) val item = layoutInflater.inflate(R.layout.ongoing_privacy_dialog_item, itemList, false) val appIcon = item.findViewById(R.id.app_icon) as ImageView val appName = item.findViewById(R.id.app_name) as TextView val icons = item.findViewById(R.id.icons) as LinearLayout val lp = LinearLayout.LayoutParams(iconSize, iconSize).apply { gravity = Gravity.CENTER_VERTICAL marginStart = iconMargin } app.icon.let { appIcon.setImageDrawable(iconFactory.getShadowedIcon(it)) } appName.text = app.applicationName if (showIcons) { dialogBuilder.generateIconsForApp(types).forEachIndexed { index, it -> it.setBounds(0, 0, iconSize, iconSize) val image = ImageView(context).apply { imageTintList = ColorStateList.valueOf(iconColor) setImageDrawable(it) } image.contentDescription = types[index].getName(context) icons.addView(image, lp) } icons.visibility = View.VISIBLE } else { icons.visibility = View.GONE } try { // Check if package exists context.packageManager.getPackageInfo(app.packageName, 0) item.setOnClickListener(object : View.OnClickListener { val intent = Intent(Intent.ACTION_MANAGE_APP_PERMISSIONS) .putExtra(Intent.EXTRA_PACKAGE_NAME, app.packageName) .putExtra(Intent.EXTRA_USER, UserHandle.getUserHandleForUid(app.uid)) override fun onClick(v: View?) { StatsLog.write(StatsLog.PRIVACY_INDICATORS_INTERACTED, StatsLog.PRIVACY_INDICATORS_INTERACTED__TYPE__DIALOG_LINE_ITEM, app.packageName) Dependency.get(ActivityStarter::class.java) .postStartActivityDismissingKeyguard(intent, 0) dismissDialog?.invoke() } }) } catch (e: PackageManager.NameNotFoundException) {} itemList.addView(item) } } packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java +2 −8 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ import android.animation.AnimatorListenerAdapter; import android.annotation.ColorInt; import android.app.ActivityManager; import android.app.AlarmManager; import android.app.Dialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; Loading Loading @@ -62,7 +61,6 @@ import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.DarkIconDispatcher; import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver; import com.android.systemui.privacy.OngoingPrivacyChip; import com.android.systemui.privacy.OngoingPrivacyDialog; import com.android.systemui.privacy.PrivacyDialogBuilder; import com.android.systemui.privacy.PrivacyItem; import com.android.systemui.privacy.PrivacyItemController; Loading @@ -71,7 +69,6 @@ import com.android.systemui.statusbar.phone.PhoneStatusBarView; import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.phone.StatusBarIconController.TintedIconManager; import com.android.systemui.statusbar.phone.StatusIconContainer; import com.android.systemui.statusbar.phone.SystemUIDialog; import com.android.systemui.statusbar.policy.Clock; import com.android.systemui.statusbar.policy.DateView; import com.android.systemui.statusbar.policy.NextAlarmController; Loading Loading @@ -561,11 +558,8 @@ public class QuickStatusBarHeader extends RelativeLayout implements StatsLog.write(StatsLog.PRIVACY_INDICATORS_INTERACTED, StatsLog.PRIVACY_INDICATORS_INTERACTED__TYPE__CHIP_CLICKED); mUiHandler.post(() -> { Dialog mDialog = new OngoingPrivacyDialog(mContext, builder).createDialog(); SystemUIDialog.setShowForAllUsers(mDialog, false); SystemUIDialog.registerDismissListener(mDialog); SystemUIDialog.setWindowOnTop(mDialog); mActivityStarter.postQSRunnableDismissingKeyguard(() -> mDialog.show()); mActivityStarter.postStartActivityDismissingKeyguard( new Intent(Intent.ACTION_REVIEW_ONGOING_PERMISSION_USAGE), 0); mHost.collapsePanels(); }); } Loading Loading
cmds/statsd/src/atoms.proto +0 −1 Original line number Diff line number Diff line Loading @@ -3419,7 +3419,6 @@ message HiddenApiUsed { * - When user clicks privacy chip * - How does the user exit the Privacy Dialog * Logged from: * packages/SystemUI/src/com/android/systemui/privacy/OngoingPrivacyDialog.kt * packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java */ message PrivacyIndicatorsInteracted { Loading
packages/SystemUI/src/com/android/systemui/privacy/OngoingPrivacyDialog.ktdeleted 100644 → 0 +0 −160 Original line number Diff line number Diff line /* * Copyright (C) 2018 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. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.android.systemui.privacy import android.app.AlertDialog import android.app.Dialog import android.content.Context import android.content.DialogInterface import android.content.Intent import android.content.pm.PackageManager import android.content.res.ColorStateList import android.os.UserHandle import android.provider.Settings import android.util.IconDrawableFactory import android.util.StatsLog import android.view.Gravity import android.view.LayoutInflater import android.view.View import android.widget.ImageView import android.widget.LinearLayout import android.widget.TextView import com.android.systemui.Dependency import com.android.systemui.R import com.android.systemui.plugins.ActivityStarter import java.util.concurrent.TimeUnit class OngoingPrivacyDialog constructor( private val context: Context, private val dialogBuilder: PrivacyDialogBuilder ) { private val iconSize = context.resources.getDimensionPixelSize( R.dimen.ongoing_appops_dialog_icon_size) private val iconColor = context.resources.getColor( com.android.internal.R.color.text_color_primary, context.theme) private val iconMargin = context.resources.getDimensionPixelSize( R.dimen.ongoing_appops_dialog_icon_margin) private val iconFactory = IconDrawableFactory.newInstance(context, true) private var dismissDialog: (() -> Unit)? = null private val appsAndTypes = dialogBuilder.appsAndTypes .sortedWith(compareBy({ -it.second.size }, // Sort by number of AppOps { it.second.min() }, { it.first })) fun createDialog(): Dialog { val builder = AlertDialog.Builder(context).apply { setPositiveButton(R.string.ongoing_privacy_dialog_ok, object : DialogInterface.OnClickListener { override fun onClick(dialog: DialogInterface?, which: Int) { StatsLog.write(StatsLog.PRIVACY_INDICATORS_INTERACTED, StatsLog.PRIVACY_INDICATORS_INTERACTED__TYPE__DIALOG_DISMISS) } }) setNeutralButton(R.string.ongoing_privacy_dialog_open_settings, object : DialogInterface.OnClickListener { val intent = Intent(Settings.ACTION_PRIVACY_SETTINGS).putExtra( Intent.EXTRA_DURATION_MILLIS, TimeUnit.MINUTES.toMillis(1)) @Suppress("DEPRECATION") override fun onClick(dialog: DialogInterface?, which: Int) { StatsLog.write(StatsLog.PRIVACY_INDICATORS_INTERACTED, StatsLog .PRIVACY_INDICATORS_INTERACTED__TYPE__DIALOG_PRIVACY_SETTINGS) Dependency.get(ActivityStarter::class.java) .postStartActivityDismissingKeyguard(intent, 0) } }) } builder.setView(getContentView()) val dialog = builder.create() dismissDialog = dialog::dismiss return dialog } fun getContentView(): View { val layoutInflater = LayoutInflater.from(context) val contentView = layoutInflater.inflate(R.layout.ongoing_privacy_dialog_content, null) val title = contentView.findViewById(R.id.title) as TextView val appsList = contentView.findViewById(R.id.items_container) as LinearLayout title.setText(dialogBuilder.getDialogTitle()) val numItems = appsAndTypes.size for (i in 0..(numItems - 1)) { val item = appsAndTypes[i] addAppItem(appsList, item.first, item.second, dialogBuilder.types.size > 1) } return contentView } @Suppress("DEPRECATION") private fun addAppItem( itemList: LinearLayout, app: PrivacyApplication, types: List<PrivacyType>, showIcons: Boolean = true ) { val layoutInflater = LayoutInflater.from(context) val item = layoutInflater.inflate(R.layout.ongoing_privacy_dialog_item, itemList, false) val appIcon = item.findViewById(R.id.app_icon) as ImageView val appName = item.findViewById(R.id.app_name) as TextView val icons = item.findViewById(R.id.icons) as LinearLayout val lp = LinearLayout.LayoutParams(iconSize, iconSize).apply { gravity = Gravity.CENTER_VERTICAL marginStart = iconMargin } app.icon.let { appIcon.setImageDrawable(iconFactory.getShadowedIcon(it)) } appName.text = app.applicationName if (showIcons) { dialogBuilder.generateIconsForApp(types).forEachIndexed { index, it -> it.setBounds(0, 0, iconSize, iconSize) val image = ImageView(context).apply { imageTintList = ColorStateList.valueOf(iconColor) setImageDrawable(it) } image.contentDescription = types[index].getName(context) icons.addView(image, lp) } icons.visibility = View.VISIBLE } else { icons.visibility = View.GONE } try { // Check if package exists context.packageManager.getPackageInfo(app.packageName, 0) item.setOnClickListener(object : View.OnClickListener { val intent = Intent(Intent.ACTION_MANAGE_APP_PERMISSIONS) .putExtra(Intent.EXTRA_PACKAGE_NAME, app.packageName) .putExtra(Intent.EXTRA_USER, UserHandle.getUserHandleForUid(app.uid)) override fun onClick(v: View?) { StatsLog.write(StatsLog.PRIVACY_INDICATORS_INTERACTED, StatsLog.PRIVACY_INDICATORS_INTERACTED__TYPE__DIALOG_LINE_ITEM, app.packageName) Dependency.get(ActivityStarter::class.java) .postStartActivityDismissingKeyguard(intent, 0) dismissDialog?.invoke() } }) } catch (e: PackageManager.NameNotFoundException) {} itemList.addView(item) } }
packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java +2 −8 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ import android.animation.AnimatorListenerAdapter; import android.annotation.ColorInt; import android.app.ActivityManager; import android.app.AlarmManager; import android.app.Dialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; Loading Loading @@ -62,7 +61,6 @@ import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.DarkIconDispatcher; import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver; import com.android.systemui.privacy.OngoingPrivacyChip; import com.android.systemui.privacy.OngoingPrivacyDialog; import com.android.systemui.privacy.PrivacyDialogBuilder; import com.android.systemui.privacy.PrivacyItem; import com.android.systemui.privacy.PrivacyItemController; Loading @@ -71,7 +69,6 @@ import com.android.systemui.statusbar.phone.PhoneStatusBarView; import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.phone.StatusBarIconController.TintedIconManager; import com.android.systemui.statusbar.phone.StatusIconContainer; import com.android.systemui.statusbar.phone.SystemUIDialog; import com.android.systemui.statusbar.policy.Clock; import com.android.systemui.statusbar.policy.DateView; import com.android.systemui.statusbar.policy.NextAlarmController; Loading Loading @@ -561,11 +558,8 @@ public class QuickStatusBarHeader extends RelativeLayout implements StatsLog.write(StatsLog.PRIVACY_INDICATORS_INTERACTED, StatsLog.PRIVACY_INDICATORS_INTERACTED__TYPE__CHIP_CLICKED); mUiHandler.post(() -> { Dialog mDialog = new OngoingPrivacyDialog(mContext, builder).createDialog(); SystemUIDialog.setShowForAllUsers(mDialog, false); SystemUIDialog.registerDismissListener(mDialog); SystemUIDialog.setWindowOnTop(mDialog); mActivityStarter.postQSRunnableDismissingKeyguard(() -> mDialog.show()); mActivityStarter.postStartActivityDismissingKeyguard( new Intent(Intent.ACTION_REVIEW_ONGOING_PERMISSION_USAGE), 0); mHost.collapsePanels(); }); } Loading