diff options
18 files changed, 303 insertions, 847 deletions
diff --git a/core/java/android/app/ApplicationErrorReport.java b/core/java/android/app/ApplicationErrorReport.java index 8692336439f9..9fa8a5d2faee 100644 --- a/core/java/android/app/ApplicationErrorReport.java +++ b/core/java/android/app/ApplicationErrorReport.java @@ -345,7 +345,7 @@ public class ApplicationErrorReport implements Parcelable { PrintWriter pw = new FastPrintWriter(sw, false, 256); tr.printStackTrace(pw); pw.flush(); - stackTrace = sw.toString(); + stackTrace = sanitizeString(sw.toString()); exceptionMessage = tr.getMessage(); // Populate fields with the "root cause" exception @@ -374,6 +374,29 @@ public class ApplicationErrorReport implements Parcelable { throwMethodName = "unknown"; throwLineNumber = 0; } + + exceptionMessage = sanitizeString(exceptionMessage); + } + + /** + * Ensure that the string is of reasonable size, truncating from the middle if needed. + */ + private String sanitizeString(String s) { + int prefixLength = 10 * 1024; + int suffixLength = 10 * 1024; + int acceptableLength = prefixLength + suffixLength; + + if (s != null && s.length() > acceptableLength) { + String replacement = + "\n[TRUNCATED " + (s.length() - acceptableLength) + " CHARS]\n"; + + StringBuilder sb = new StringBuilder(acceptableLength + replacement.length()); + sb.append(s.substring(0, prefixLength)); + sb.append(replacement); + sb.append(s.substring(s.length() - suffixLength)); + return sb.toString(); + } + return s; } /** diff --git a/core/java/android/content/pm/ShortcutServiceInternal.java b/core/java/android/content/pm/ShortcutServiceInternal.java index de52f73fc213..3f8bad15035b 100644 --- a/core/java/android/content/pm/ShortcutServiceInternal.java +++ b/core/java/android/content/pm/ShortcutServiceInternal.java @@ -73,11 +73,4 @@ public abstract class ShortcutServiceInternal { * any locks in this method. */ public abstract void onSystemLocaleChangedNoLock(); - - /** - * Called by PM before sending package broadcasts to other components. PM doesn't hold the PM - * lock, but do not take any locks in here anyway, and don't do any heavy tasks, as doing so - * would slow down all the package broadcasts. - */ - public abstract void onPackageBroadcast(Intent intent); } diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java index 8d4a1510715a..31c7a3249542 100644 --- a/media/java/android/media/MediaPlayer.java +++ b/media/java/android/media/MediaPlayer.java @@ -3498,7 +3498,7 @@ public class MediaPlayer extends PlayerBase * @param extra an extra code, specific to the info. Typically * implementation dependent. * @return True if the method handled the info, false if it didn't. - * Returning false, or not having an OnErrorListener at all, will + * Returning false, or not having an OnInfoListener at all, will * cause the info to be discarded. */ boolean onInfo(MediaPlayer mp, int what, int extra); diff --git a/media/java/android/media/PlayerBase.java b/media/java/android/media/PlayerBase.java index 0f7dc9a819c7..b262d97cfb8e 100644 --- a/media/java/android/media/PlayerBase.java +++ b/media/java/android/media/PlayerBase.java @@ -181,10 +181,15 @@ public abstract class PlayerBase { * @return */ boolean isRestricted_sync() { + // check app ops + if (mHasAppOpsPlayAudio) { + return false; + } + // check bypass flag if ((mAttributes.getAllFlags() & AudioAttributes.FLAG_BYPASS_INTERRUPTION_POLICY) != 0) { return false; } - return !mHasAppOpsPlayAudio; + return true; } // Abstract methods a subclass needs to implement diff --git a/media/java/android/media/SoundPool.java b/media/java/android/media/SoundPool.java index 5ede1d5f7c91..9fafda48d652 100644 --- a/media/java/android/media/SoundPool.java +++ b/media/java/android/media/SoundPool.java @@ -505,27 +505,31 @@ public class SoundPool { } private boolean isRestricted() { - IAudioService service = getService(); - boolean cameraSoundForced = false; - - try { - cameraSoundForced = service.isCameraSoundForced(); - } catch (RemoteException e) { - Log.e(TAG, "Cannot access AudioService in isRestricted()"); - } - - if (cameraSoundForced && - ((mAttributes.getAllFlags() & AudioAttributes.FLAG_AUDIBILITY_ENFORCED) != 0) -// FIXME: should also check usage when set properly by camera app -// && (mAttributes.getUsage() == AudioAttributes.USAGE_ASSISTANCE_SONIFICATION) - ) { + // check app ops + if (mHasAppOpsPlayAudio) { return false; } - + // check bypass flag if ((mAttributes.getAllFlags() & AudioAttributes.FLAG_BYPASS_INTERRUPTION_POLICY) != 0) { return false; } - return !mHasAppOpsPlayAudio; + // check force audibility flag and camera restriction + if ((mAttributes.getAllFlags() & AudioAttributes.FLAG_AUDIBILITY_ENFORCED) != 0) { +// FIXME: should also check usage when set properly by camera app +// && (mAttributes.getUsage() == AudioAttributes.USAGE_ASSISTANCE_SONIFICATION) + boolean cameraSoundForced = false; + try { + cameraSoundForced = getService().isCameraSoundForced(); + } catch (RemoteException e) { + Log.e(TAG, "Cannot access AudioService in isRestricted()"); + } catch (NullPointerException e) { + Log.e(TAG, "Null AudioService in isRestricted()"); + } + if (cameraSoundForced) { + return false; + } + } + return true; } private void updateAppOpsPlayAudio() { diff --git a/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml b/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml index 3b8b909118f1..6673d6e8255f 100644 --- a/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml +++ b/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml @@ -111,7 +111,7 @@ android:layout_alignParentTop="true" android:paddingStart="16dp" android:paddingEnd="16dp" - android:paddingTop="2dp" + android:paddingTop="6dp" android:visibility="gone" android:textAppearance="@style/TextAppearance.StatusBar.Expanded.EmergencyCallsOnly" android:text="@*android:string/emergency_calls_only" diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index e1cbbc5c9c54..ae4f3cf37ce7 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -375,6 +375,8 @@ <!-- The font size of the date in QS --> <dimen name="qs_date_collapsed_size">14sp</dimen> + <!-- Amount the date/time move when emergency calls only is present --> + <dimen name="qs_date_time_translation">8dp</dimen> <!-- Battery level text padding end when in expanded QS and on Keyguard --> <dimen name="battery_level_padding_end">2dp</dimen> diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index 9bc5426d5bcb..fb7afc59b276 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -883,9 +883,9 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, mLightStatusBarController = new LightStatusBarController(mIconController, mBatteryController); mKeyguardMonitor = new KeyguardMonitor(mContext); + mUserSwitcherController = new UserSwitcherController(mContext, mKeyguardMonitor, + mHandler, this); if (UserManager.get(mContext).isUserSwitcherEnabled()) { - mUserSwitcherController = new UserSwitcherController(mContext, mKeyguardMonitor, - mHandler, this); createUserSwitcher(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java index ba51619c14a2..21db64febbe0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java @@ -37,11 +37,11 @@ import com.android.internal.logging.MetricsProto; import com.android.keyguard.KeyguardStatusView; import com.android.systemui.FontSizeUtils; import com.android.systemui.R; -import com.android.systemui.qs.QSAnimator; import com.android.systemui.qs.QSPanel; import com.android.systemui.qs.QSPanel.Callback; import com.android.systemui.qs.QuickQSPanel; import com.android.systemui.qs.TouchAnimator; +import com.android.systemui.qs.TouchAnimator.Builder; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.NextAlarmController; import com.android.systemui.statusbar.policy.NextAlarmController.NextAlarmChangeCallback; @@ -84,13 +84,13 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements private ImageView mMultiUserAvatar; - private TouchAnimator mSecondHalfAnimator; - private TouchAnimator mFirstHalfAnimator; + private TouchAnimator mAnimator; protected TouchAnimator mSettingsAlpha; private float mExpansionAmount; private QSTileHost mHost; private View mEdit; private boolean mShowFullAlarm; + private float mDateTimeTranslation; public QuickStatusBarHeader(Context context, AttributeSet attrs) { super(context, attrs); @@ -111,6 +111,7 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements mDateTimeGroup = (ViewGroup) findViewById(R.id.date_time_group); mDateTimeGroup.setPivotX(0); mDateTimeGroup.setPivotY(0); + mDateTimeTranslation = getResources().getDimension(R.dimen.qs_date_time_translation); mShowFullAlarm = getResources().getBoolean(R.bool.quick_settings_show_full_alarm); mExpandIndicator = (ExpandableIndicator) findViewById(R.id.expand_indicator); @@ -152,15 +153,13 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements FontSizeUtils.updateFontSize(mAlarmStatus, R.dimen.qs_date_collapsed_size); FontSizeUtils.updateFontSize(mEmergencyOnly, R.dimen.qs_emergency_calls_only_text_size); - mSecondHalfAnimator = new TouchAnimator.Builder() + Builder builder = new Builder() .addFloat(mShowFullAlarm ? mAlarmStatus : findViewById(R.id.date), "alpha", 0, 1) - .addFloat(mEmergencyOnly, "alpha", 0, 1) - .build(); + .addFloat(mEmergencyOnly, "alpha", 0, 1); if (mShowFullAlarm) { - mFirstHalfAnimator = new TouchAnimator.Builder() - .addFloat(mAlarmStatusCollapsed, "alpha", 1, 0) - .build(); + builder.addFloat(mAlarmStatusCollapsed, "alpha", 1, 0); } + mAnimator = builder.build(); updateSettingsAnimator(); } @@ -223,10 +222,8 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements @Override public void setExpansion(float headerExpansionFraction) { mExpansionAmount = headerExpansionFraction; - mSecondHalfAnimator.setPosition(headerExpansionFraction); - if (mShowFullAlarm) { - mFirstHalfAnimator.setPosition(headerExpansionFraction); - } + updateDateTimePosition(); + mAnimator.setPosition(headerExpansionFraction); mSettingsAlpha.setPosition(headerExpansionFraction); updateAlarmVisibilities(); @@ -264,6 +261,7 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements protected void updateVisibilities() { updateAlarmVisibilities(); + updateDateTimePosition(); mEmergencyOnly.setVisibility(mExpanded && mShowEmergencyCallsOnly ? View.VISIBLE : View.INVISIBLE); mSettingsContainer.findViewById(R.id.tuner_icon).setVisibility( @@ -274,6 +272,11 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements mEdit.setVisibility(isDemo || !mExpanded ? View.INVISIBLE : View.VISIBLE); } + private void updateDateTimePosition() { + mDateTimeAlarmGroup.setTranslationY(mShowEmergencyCallsOnly + ? mExpansionAmount * mDateTimeTranslation : 0); + } + private void updateListeners() { if (mListening) { mNextAlarmController.addStateChangedCallback(this); diff --git a/proto/src/metrics_constants.proto b/proto/src/metrics_constants.proto index 130eea042ce6..966d0ec44835 100644 --- a/proto/src/metrics_constants.proto +++ b/proto/src/metrics_constants.proto @@ -33,73 +33,61 @@ message MetricsEvent { // OPEN: Settings > Accessibility // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACCESSIBILITY = 2; // OPEN: Settings > Accessibility > Captions // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACCESSIBILITY_CAPTION_PROPERTIES = 3; // OPEN: Settings > Accessibility > [Service] // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACCESSIBILITY_SERVICE = 4; // OPEN: Settings > Accessibility > Color correction // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACCESSIBILITY_TOGGLE_DALTONIZER = 5; // OPEN: Settings > Accessibility > Accessibility shortcut // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACCESSIBILITY_TOGGLE_GLOBAL_GESTURE = 6; // OPEN: Settings > Accessibility > Magnification gestures // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACCESSIBILITY_TOGGLE_SCREEN_MAGNIFICATION = 7; // OPEN: Settings > Accounts // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACCOUNT = 8; // OPEN: Settings > Accounts > [Single Account Sync Settings] // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACCOUNTS_ACCOUNT_SYNC = 9; // OPEN: Settings > Accounts > Add an account // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACCOUNTS_CHOOSE_ACCOUNT_ACTIVITY = 10; // OPEN: Settings > Accounts > [List of accounts when more than one] // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACCOUNTS_MANAGE_ACCOUNTS = 11; // OPEN: Settings > Cellular network settings > APNs // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 APN = 12; // OPEN: Settings > More > Cellular network settings > APNs > [Edit APN] // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 APN_EDITOR = 13; // OBSOLETE @@ -114,7 +102,6 @@ message MetricsEvent { // OPEN: Settings > Apps > Configure apps > App links > [App] // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 APPLICATIONS_APP_LAUNCH = 17; // OBSOLETE @@ -123,19 +110,16 @@ message MetricsEvent { // OPEN: Settings > Internal storage > Apps storage > [App] // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 APPLICATIONS_APP_STORAGE = 19; // OPEN: Settings > Apps > [App info] // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 APPLICATIONS_INSTALLED_APP_DETAILS = 20; // OPEN: Settings > Memory > App usage > [App Memory usage] // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 APPLICATIONS_PROCESS_STATS_DETAIL = 21; // OBSOLETE @@ -144,19 +128,16 @@ message MetricsEvent { // OPEN: Settings > Memory > App usage // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 APPLICATIONS_PROCESS_STATS_UI = 23; // OPEN: Settings > Bluetooth // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 BLUETOOTH = 24; // OPEN: Choose Bluetooth device (ex: when sharing) // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 BLUETOOTH_DEVICE_PICKER = 25; // OBSOLETE @@ -165,55 +146,46 @@ message MetricsEvent { // OPEN: Settings > Security > Choose screen lock // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 CHOOSE_LOCK_GENERIC = 27; // OPEN: Settings > Security > Choose screen lock > Choose your password // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 CHOOSE_LOCK_PASSWORD = 28; // OPEN: Settings > Security > Choose screen lock > Choose your pattern // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 CHOOSE_LOCK_PATTERN = 29; // OPEN: Settings > Security > Choose screen lock > Confirm your password // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 CONFIRM_LOCK_PASSWORD = 30; // OPEN: Settings > Security > Choose screen lock > Confirm your pattern // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 CONFIRM_LOCK_PATTERN = 31; // OPEN: Settings > Security > Encrypt phone // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 CRYPT_KEEPER = 32; // OPEN: Settings > Security > Encrypt phone > Confirm // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 CRYPT_KEEPER_CONFIRM = 33; // OPEN: Settings > Search results // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 DASHBOARD_SEARCH_RESULTS = 34; // OPEN: Settings (Root page) // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 DASHBOARD_SUMMARY = 35; // OBSOLETE @@ -222,49 +194,41 @@ message MetricsEvent { // OPEN: Settings > Data usage // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 DATA_USAGE_SUMMARY = 37; // OPEN: Settings > Date & time // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 DATE_TIME = 38; // OPEN: Settings > Developer options // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 DEVELOPMENT = 39; // OPEN: Settings > About phone // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 DEVICEINFO = 40; // OPEN: Settings > About phone > Status > IMEI information // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 DEVICEINFO_IMEI_INFORMATION = 41; // OPEN: Settings > Internal storage // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 DEVICEINFO_STORAGE = 42; // OPEN: Settings > About phone > Status > SIM status // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 DEVICEINFO_SIM_STATUS = 43; // OPEN: Settings > About phone > Status // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 DEVICEINFO_STATUS = 44; // OBSOLETE @@ -273,25 +237,21 @@ message MetricsEvent { // OPEN: Settings > Display // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 DISPLAY = 46; // OPEN: Settings > Display > Daydream // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 DREAM = 47; // OPEN: Settings > Security > Screen lock > Secure start-up // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ENCRYPTION = 48; // OPEN: Settings > Security > Nexus Imprint // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 FINGERPRINT = 49; // OBSOLETE @@ -300,55 +260,46 @@ message MetricsEvent { // OPEN: Settings > Battery > History details // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 FUELGAUGE_BATTERY_HISTORY_DETAIL = 51; // OPEN: Settings > Battery > Battery saver // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 FUELGAUGE_BATTERY_SAVER = 52; // OPEN: Settings > Battery > [App Use details] // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 FUELGAUGE_POWER_USAGE_DETAIL = 53; // OPEN: Settings > Battery // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 FUELGAUGE_POWER_USAGE_SUMMARY = 54; // OPEN: Settings > Home // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 HOME = 55; // OPEN: Settings > Security > SIM card lock settings // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ICC_LOCK = 56; // OPEN: Settings > Language & input // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 INPUTMETHOD_LANGUAGE = 57; // OPEN: Settings > Language & input > Physical keyboard // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 INPUTMETHOD_KEYBOARD = 58; // OPEN: Settings > Language & input > Spell checker // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 INPUTMETHOD_SPELL_CHECKERS = 59; // OBSOLETE @@ -357,79 +308,66 @@ message MetricsEvent { // OPEN: Settings > Language & input > Personal dictionary // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 INPUTMETHOD_USER_DICTIONARY = 61; // OPEN: Settings > Language & input > Add word // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 INPUTMETHOD_USER_DICTIONARY_ADD_WORD = 62; // OPEN: Settings > Location // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 LOCATION = 63; // OPEN: Settings > Location > Location mode // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 LOCATION_MODE = 64; // OPEN: Settings > Apps // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 MANAGE_APPLICATIONS = 65; // OPEN: Settings > Backup & reset > Factory data reset // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 MASTER_CLEAR = 66; // OPEN: Settings > Backup & reset > Factory data reset > Confirm // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 MASTER_CLEAR_CONFIRM = 67; // OPEN: Settings > Data usage > Network restrictions // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 NET_DATA_USAGE_METERED = 68; // OPEN: Settings > More > Android Beam // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 NFC_BEAM = 69; // OPEN: Settings > Tap & pay // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 NFC_PAYMENT = 70; // OPEN: Settings > Sound & notification // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 NOTIFICATION = 71; // OPEN: Settings > Sound & notification > App notifications > [App] // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 NOTIFICATION_APP_NOTIFICATION = 72; // OPEN: Settings > Sound & notification > Other sounds // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 NOTIFICATION_OTHER_SOUND = 73; // OBSOLETE @@ -438,13 +376,11 @@ message MetricsEvent { // OPEN: Settings Widget > Notification log // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 NOTIFICATION_STATION = 75; // OPEN: Settings > Sound & notification > Do not disturb // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 NOTIFICATION_ZEN_MODE = 76; // OPEN: OBSOLETE @@ -453,25 +389,21 @@ message MetricsEvent { // OPEN: Print job notification > Print job settings // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 PRINT_JOB_SETTINGS = 78; // OPEN: Settings > Printing > [Print Service] // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 PRINT_SERVICE_SETTINGS = 79; // OPEN: Settings > Printing // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 PRINT_SETTINGS = 80; // OPEN: Settings > Backup & reset // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 PRIVACY = 81; //OBSOLETE @@ -480,37 +412,31 @@ message MetricsEvent { // OPEN: Settings > Backup & reset > Network settings reset // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 RESET_NETWORK = 83; // OPEN: Settings > Backup & reset > Network settings reset > Confirm // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 RESET_NETWORK_CONFIRM = 84; // OPEN: Settings > Developer Options > Running Services // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 RUNNING_SERVICE_DETAILS = 85; // OPEN: Settings > Security > Screen pinning // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 SCREEN_PINNING = 86; // OPEN: Settings > Security // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 SECURITY = 87; // OPEN: Settings > SIM cards // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 SIM = 88; // OBSOLETE @@ -519,55 +445,46 @@ message MetricsEvent { // OPEN: Settings > More > Tethering & portable hotspot // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 TETHER = 90; // OPEN: Settings > Security > Trust agents // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 TRUST_AGENT = 91; // OPEN: Settings > Security > Trusted credentials // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 TRUSTED_CREDENTIALS = 92; // OPEN: Settings > Language & input > TTS output > [Engine] > Settings // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 TTS_ENGINE_SETTINGS = 93; // OPEN: Settings > Language & input > Text-to-speech output // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 TTS_TEXT_TO_SPEECH = 94; // OPEN: Settings > Security > Apps with usage access // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 USAGE_ACCESS = 95; // OPEN: Settings > Users // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 USER = 96; // OPEN: Settings > Users > [Restricted profile app & content access] // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 USERS_APP_RESTRICTIONS = 97; // OPEN: Settings > Users > [User settings] // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 USER_DETAILS = 98; // OBSOLETE @@ -576,43 +493,36 @@ message MetricsEvent { // OPEN: Settings > More > VPN // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 VPN = 100; // OPEN: Settings > Display > Choose wallpaper from // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 WALLPAPER_TYPE = 101; // OPEN: Settings > Display > Cast // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 WFD_WIFI_DISPLAY = 102; // OPEN: Settings > Wi-Fi // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 WIFI = 103; // OPEN: Settings > Wi-Fi > Advanced Wi-Fi // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 WIFI_ADVANCED = 104; // OPEN: Settings > More > Wi-Fi Calling // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 WIFI_CALLING = 105; // OPEN: Settings > Wi-Fi > Saved networks // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 WIFI_SAVED_ACCESS_POINTS = 106; // OBSOLETE @@ -624,19 +534,16 @@ message MetricsEvent { // OPEN: Settings > Wi-Fi > Advanced Wi-Fi > Wi-Fi Direct // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 WIFI_P2P = 109; // OPEN: Settings > More // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 WIRELESS = 110; // OPEN: Quick Settings Panel // CATEGORY: QUICK_SETTINGS // OS: 6.0 - // GMS: 7.5.26 QS_PANEL = 111; // OPEN: QS Airplane mode tile shown @@ -644,7 +551,6 @@ message MetricsEvent { // SUBTYPE: 0 is off, 1 is on // CATEGORY: QUICK_SETTINGS // OS: 6.0 - // GMS: 7.5.46 QS_AIRPLANEMODE = 112; // OPEN: QS Bluetooth tile shown @@ -652,21 +558,18 @@ message MetricsEvent { // SUBTYPE: 0 is off, 1 is on // CATEGORY: QUICK_SETTINGS // OS: 6.0 - // GMS: 7.5.46 QS_BLUETOOTH = 113; // OPEN: QS Cast tile shown // ACTION: QS Cast tile tapped // CATEGORY: QUICK_SETTINGS // OS: 6.0 - // GMS: 7.5.46 QS_CAST = 114; // OPEN: QS Cellular tile shown // ACTION: QS Cellular tile tapped // CATEGORY: QUICK_SETTINGS // OS: 6.0 - // GMS: 7.5.46 QS_CELLULAR = 115; // OPEN: QS Color inversion tile shown @@ -674,13 +577,11 @@ message MetricsEvent { // SUBTYPE: 0 is off, 1 is on // CATEGORY: QUICK_SETTINGS // OS: 6.0 - // GMS: 7.5.46 QS_COLORINVERSION = 116; // OPEN: QS Cellular tile > Cellular detail panel // CATEGORY: QUICK_SETTINGS // OS: 6.0 - // GMS: 7.5.46 QS_DATAUSAGEDETAIL = 117; // OPEN: QS Do not disturb tile shown @@ -688,7 +589,6 @@ message MetricsEvent { // SUBTYPE: 0 is off, 1 is on // CATEGORY: QUICK_SETTINGS // OS: 6.0 - // GMS: 7.5.46 QS_DND = 118; // OPEN: QS Flashlight tile shown @@ -696,7 +596,6 @@ message MetricsEvent { // SUBTYPE: 0 is off, 1 is on // CATEGORY: QUICK_SETTINGS // OS: 6.0 - // GMS: 7.5.46 QS_FLASHLIGHT = 119; // OPEN: QS Hotspot tile shown @@ -704,14 +603,12 @@ message MetricsEvent { // SUBTYPE: 0 is off, 1 is on // CATEGORY: QUICK_SETTINGS // OS: 6.0 - // GMS: 7.5.46 QS_HOTSPOT = 120; // OPEN: QS 3P tile shown // ACTION: QS 3P tile tapped // CATEGORY: QUICK_SETTINGS // OS: 6.0 - // GMS: 7.5.46 QS_INTENT = 121; // OPEN: QS Location tile shown @@ -719,7 +616,6 @@ message MetricsEvent { // SUBTYPE: 0 is off, 1 is on // CATEGORY: QUICK_SETTINGS // OS: 6.0 - // GMS: 7.5.46 QS_LOCATION = 122; // OPEN: QS Rotation tile shown @@ -727,7 +623,6 @@ message MetricsEvent { // SUBTYPE: 0 is off, 1 is on // CATEGORY: QUICK_SETTINGS // OS: 6.0 - // GMS: 7.5.46 QS_ROTATIONLOCK = 123; // OBSOLETE @@ -736,7 +631,6 @@ message MetricsEvent { // OPEN: QS User list panel // CATEGORY: QUICK_SETTINGS // OS: 6.0 - // GMS: 7.5.46 QS_USERDETAIL = 125; // OPEN: QS WiFi tile shown @@ -744,13 +638,11 @@ message MetricsEvent { // SUBTYPE: 0 is off, 1 is on // CATEGORY: QUICK_SETTINGS // OS: 6.0 - // GMS: 7.5.46 QS_WIFI = 126; // OPEN: Notification Panel (including lockscreen) // CATEGORY: NOTIFICATION // OS: 5.1.1 - // GMS: 7.5.26 NOTIFICATION_PANEL = 127; // OPEN: Notification in panel became visible. @@ -764,7 +656,6 @@ message MetricsEvent { // SUBTYPE: Dismiss reason from NotificationManagerService.java // CATEGORY: NOTIFICATION // OS: 5.1.1 - // GMS: 7.5.26 NOTIFICATION_ITEM = 128; // ACTION: User tapped notification action @@ -772,19 +663,16 @@ message MetricsEvent { // SUBTYPE: Index of action on notification // CATEGORY: NOTIFICATION // OS: 5.0 - // GMS: 7.5.26 NOTIFICATION_ITEM_ACTION = 129; // OPEN: Settings > Apps > Configure apps > App permissions // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 APPLICATIONS_ADVANCED = 130; // OPEN: Settings > Location > Scanning // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 LOCATION_SCANNING = 131; // OBSOLETE @@ -793,43 +681,36 @@ message MetricsEvent { // OPEN: Settings > Sound & notification > App notifications // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 MANAGE_APPLICATIONS_NOTIFICATIONS = 133; // ACTION: Settings > Wi-Fi > Overflow > Add Network // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACTION_WIFI_ADD_NETWORK = 134; // ACTION: Settings > Wi-Fi > [Long press network] > Connect to network // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACTION_WIFI_CONNECT = 135; // ACTION: Settings > Wi-Fi > Overflow > Refresh // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACTION_WIFI_FORCE_SCAN = 136; // ACTION: Settings > Wi-Fi > [Long press network] > Forget network // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACTION_WIFI_FORGET = 137; // ACTION: Settings > Wi-Fi > Toggle off // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACTION_WIFI_OFF = 138; // ACTION: Settings > Wi-Fi > Toggle on // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACTION_WIFI_ON = 139; // OBSOLETE @@ -838,280 +719,236 @@ message MetricsEvent { // OPEN: Settings > Sound & notification > DND > Priority only allows // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 NOTIFICATION_ZEN_MODE_PRIORITY = 141; // OPEN: Settings > Sound & notification > DND > Automatic rules // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 NOTIFICATION_ZEN_MODE_AUTOMATION = 142; // OPEN: Settings > Apps > Configure apps > App links // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 MANAGE_DOMAIN_URLS = 143; // OPEN: Settings > Sound & notification > DND > [Time based rule] // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 NOTIFICATION_ZEN_MODE_SCHEDULE_RULE = 144; // OPEN: Settings > Sound & notification > DND > [External rule] // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 NOTIFICATION_ZEN_MODE_EXTERNAL_RULE = 145; // OPEN: Settings > Sound & notification > DND > [Event rule] // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 NOTIFICATION_ZEN_MODE_EVENT_RULE = 146; // ACTION: App notification settings > Block Notifications // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACTION_BAN_APP_NOTES = 147; // ACTION: Notification shade > Dismiss all button // CATEGORY: NOTIFICATION // OS: 6.0 - // GMS: 7.5.26 ACTION_DISMISS_ALL_NOTES = 148; // OPEN: QS Do Not Disturb detail panel // CATEGORY: QUICK_SETTINGS // OS: 6.0 - // GMS: 7.5.26 QS_DND_DETAILS = 149; // OPEN: QS Bluetooth detail panel // CATEGORY: QUICK_SETTINGS // OS: 6.0 - // GMS: 7.5.26 QS_BLUETOOTH_DETAILS = 150; // OPEN: QS Cast detail panel // CATEGORY: QUICK_SETTINGS // OS: 6.0 - // GMS: 7.5.26 QS_CAST_DETAILS = 151; // OPEN: QS Wi-Fi detail panel // CATEGORY: QUICK_SETTINGS // OS: 6.0 - // GMS: 7.5.26 QS_WIFI_DETAILS = 152; // ACTION: QS Wi-Fi detail panel > Wi-Fi toggle // SUBTYPE: 0 is off, 1 is on // CATEGORY: QUICK_SETTINGS // OS: 6.0 - // GMS: 7.5.26 QS_WIFI_TOGGLE = 153; // ACTION: QS Bluetooth detail panel > Bluetooth toggle // SUBTYPE: 0 is off, 1 is on // CATEGORY: QUICK_SETTINGS // OS: 6.0 - // GMS: 7.5.26 QS_BLUETOOTH_TOGGLE = 154; // ACTION: QS Cellular detail panel > Cellular toggle // SUBTYPE: 0 is off, 1 is on // CATEGORY: QUICK_SETTINGS // OS: 6.0 - // GMS: 7.5.26 QS_CELLULAR_TOGGLE = 155; // ACTION: QS User list panel > Select different user // CATEGORY: QUICK_SETTINGS // OS: 6.0 - // GMS: 7.5.26 QS_SWITCH_USER = 156; // ACTION: QS Cast detail panel > Select cast device // CATEGORY: QUICK_SETTINGS // OS: 6.0 - // GMS: 7.5.26 QS_CAST_SELECT = 157; // ACTION: QS Cast detail panel > Disconnect cast device // CATEGORY: QUICK_SETTINGS // OS: 6.0 - // GMS: 7.5.26 QS_CAST_DISCONNECT = 158; // ACTION: Settings > Bluetooth > Toggle // SUBTYPE: 0 is off, 1 is on // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACTION_BLUETOOTH_TOGGLE = 159; // ACTION: Settings > Bluetooth > Overflow > Refresh // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACTION_BLUETOOTH_SCAN = 160; // ACTION: Settings > Bluetooth > Overflow > Rename this device // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACTION_BLUETOOTH_RENAME = 161; // ACTION: Settings > Bluetooth > Overflow > Show received files // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACTION_BLUETOOTH_FILES = 162; // ACTION: QS DND details panel > Increase / Decrease exit time // SUBTYPE: true is increase, false is decrease // CATEGORY: QUICK_SETTINGS // OS: 6.0 - // GMS: 7.5.26 QS_DND_TIME = 163; // ACTION: QS DND details panel > [Exit condition] // CATEGORY: QUICK_SETTINGS // OS: 6.0 - // GMS: 7.5.26 QS_DND_CONDITION_SELECT = 164; // ACTION: QS DND details panel > [DND mode] // SUBTYPE: 1 is priority, 2 is silence, 3 is alarms only // CATEGORY: QUICK_SETTINGS // OS: 6.0 - // GMS: 7.5.26 QS_DND_ZEN_SELECT = 165; // ACTION: QS DND detail panel > DND toggle // SUBTYPE: 0 is off, 1 is on // CATEGORY: QUICK_SETTINGS // OS: 6.0 - // GMS: 7.5.26 QS_DND_TOGGLE = 166; // ACTION: DND Settings > Priority only allows > Reminder toggle // SUBTYPE: 0 is off, 1 is on // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACTION_ZEN_ALLOW_REMINDERS = 167; // ACTION: DND Settings > Priority only allows > Event toggle // SUBTYPE: 0 is off, 1 is on // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACTION_ZEN_ALLOW_EVENTS = 168; // ACTION: DND Settings > Priority only allows > Messages // SUBTYPE: 0 is off, 1 is on // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACTION_ZEN_ALLOW_MESSAGES = 169; // ACTION: DND Settings > Priority only allows > Calls // SUBTYPE: 0 is off, 1 is on // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACTION_ZEN_ALLOW_CALLS = 170; // ACTION: DND Settings > Priority only allows > Repeat callers toggle // SUBTYPE: 0 is off, 1 is on // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACTION_ZEN_ALLOW_REPEAT_CALLS = 171; // ACTION: DND Settings > Automatic rules > Add rule // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACTION_ZEN_ADD_RULE = 172; // ACTION: DND Settings > Automatic rules > Add rule > OK // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACTION_ZEN_ADD_RULE_OK = 173; // ACTION: DND Settings > Automatic rules > [Rule] > Delete rule // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACTION_ZEN_DELETE_RULE = 174; // ACTION: DND Settings > Automatic rules > [Rule] > Delete rule > Delete // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACTION_ZEN_DELETE_RULE_OK = 175; // ACTION: DND Settings > Automatic rules > [Rule] > Toggle // SUBTYPE: 0 is off, 1 is on // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACTION_ZEN_ENABLE_RULE = 176; // ACTION: Settings > More > Airplane mode toggle // SUBTYPE: 0 is off, 1 is on // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACTION_AIRPLANE_TOGGLE = 177; // ACTION: Settings > Data usage > Cellular data toggle // SUBTYPE: 0 is off, 1 is on // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACTION_CELL_DATA_TOGGLE = 178; // OPEN: Settings > Sound & notification > Notification access // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 NOTIFICATION_ACCESS = 179; // OPEN: Settings > Sound & notification > Do Not Disturb access // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 NOTIFICATION_ZEN_MODE_ACCESS = 180; // OPEN: Settings > Apps > Configure apps > Default Apps // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 APPLICATIONS_DEFAULT_APPS = 181; // OPEN: Settings > Internal storage > Apps storage // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 APPLICATIONS_STORAGE_APPS = 182; // OPEN: Settings > Security > Usage access // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 APPLICATIONS_USAGE_ACCESS_DETAIL = 183; // OPEN: Settings > Battery > Battery optimization // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 APPLICATIONS_HIGH_POWER_APPS = 184; // OBSOLETE @@ -1120,448 +957,377 @@ message MetricsEvent { // ACTION: Lockscreen > Unlock gesture // CATEGORY: GLOBAL_SYSTEM_UI // OS: 5.1.1 - // GMS: 7.8.22 ACTION_LS_UNLOCK = 186; // ACTION: Lockscreen > Pull shade open // CATEGORY: GLOBAL_SYSTEM_UI // OS: 5.1.1 - // GMS: 7.8.22 ACTION_LS_SHADE = 187; // ACTION: Lockscreen > Tap on lock, shows hint // CATEGORY: GLOBAL_SYSTEM_UI // OS: 5.1.1 - // GMS: 7.8.22 ACTION_LS_HINT = 188; // ACTION: Lockscreen > Camera // CATEGORY: GLOBAL_SYSTEM_UI // OS: 5.1.1 - // GMS: 7.8.22 ACTION_LS_CAMERA = 189; // ACTION: Lockscreen > Dialer // CATEGORY: GLOBAL_SYSTEM_UI // OS: 5.1.1 - // GMS: 7.8.22 ACTION_LS_DIALER = 190; // ACTION: Lockscreen > Tap on lock, locks phone // CATEGORY: GLOBAL_SYSTEM_UI // OS: 5.1.1 - // GMS: 7.8.22 ACTION_LS_LOCK = 191; // ACTION: Lockscreen > Tap on notification, false touch rejection // CATEGORY: GLOBAL_SYSTEM_UI // OS: 5.1.1 - // GMS: 7.8.22 ACTION_LS_NOTE = 192; // ACTION: Lockscreen > Swipe down to open quick settings // CATEGORY: GLOBAL_SYSTEM_UI // OS: 6.0 - // GMS: 7.8.22 ACTION_LS_QS = 193; // ACTION: Swipe down to open quick settings when unlocked // CATEGORY: GLOBAL_SYSTEM_UI // OS: 6.0 - // GMS: 7.8.22 ACTION_SHADE_QS_PULL = 194; // ACTION: Notification shade > Tap to open quick settings // CATEGORY: GLOBAL_SYSTEM_UI // OS: 6.0 - // GMS: 7.8.22 ACTION_SHADE_QS_TAP = 195; // OPEN: Lockscreen // SUBTYPE: 0 is unsecure, 1 is secured by password / pattern / PIN // CATEGORY: GLOBAL_SYSTEM_UI // OS: 5.1.1 - // GMS: 7.8.22 LOCKSCREEN = 196; // OPEN: Lockscreen > Screen to enter password / pattern / PIN // CATEGORY: GLOBAL_SYSTEM_UI // OS: 5.1.1 - // GMS: 7.8.22 BOUNCER = 197; // OPEN: Screen turned on // SUBTYPE: 2 is user action // CATEGORY: GLOBAL_SYSTEM_UI // OS: 5.1.1 - // GMS: 7.8.22 SCREEN = 198; // OPEN: Notification caused sound, vibration, and/or LED blink // SUBTYPE: 1 is buzz, 2 is beep, blink is 4, or'd together // CATEGORY: NOTIFICATION // OS: 5.1.1 - // GMS: 7.8.53 NOTIFICATION_ALERT = 199; // ACTION: Lockscreen > Emergency Call button // CATEGORY: GLOBAL_SYSTEM_UI // OS: 5.1.1 - // GMS: 7.5.26 ACTION_EMERGENCY_CALL = 200; // OPEN: Settings > Apps > Configure > Default apps > Assist & voice input // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 APPLICATIONS_MANAGE_ASSIST = 201; // OPEN: Settings > Memory // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 PROCESS_STATS_SUMMARY = 202; // ACTION: Settings > Display > When device is rotated // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACTION_ROTATION_LOCK = 203; // ACTION: Long press on notification to view controls // CATEGORY: NOTIFICATION // OS: 6.0 - // GMS: 7.5.26 ACTION_NOTE_CONTROLS = 204; // ACTION: Notificatoin controls > Info button // CATEGORY: NOTIFICATION // OS: 6.0 - // GMS: 7.5.26 ACTION_NOTE_INFO = 205; // ACTION: Notification controls > Settings button // CATEGORY: NOTIFICATION // OS: 6.0 - // GMS: 7.5.26 ACTION_APP_NOTE_SETTINGS = 206; // OPEN: Volume Dialog (with hardware buttons) // CATEGORY: GLOBAL_SYSTEM_UI // OS: 6.0 - // GMS: 7.5.26 VOLUME_DIALOG = 207; // OPEN: Volume dialog > Expanded volume dialog (multiple sliders) // CATEGORY: GLOBAL_SYSTEM_UI // OS: 6.0 - // GMS: 7.5.26 VOLUME_DIALOG_DETAILS = 208; // ACTION: Volume dialog > Adjust volume slider // SUBTYPE: volume level (0-7) // CATEGORY: GLOBAL_SYSTEM_UI // OS: 6.0 - // GMS: 7.5.26 ACTION_VOLUME_SLIDER = 209; // ACTION: Volume dialog > Select non-active stream // SUBTYPE: stream (defined in AudioSystem.java) // CATEGORY: GLOBAL_SYSTEM_UI // OS: 6.0 - // GMS: 7.5.26 ACTION_VOLUME_STREAM = 210; // ACTION: Adjust volume with hardware key // SUBTYPE: volume level (0-7) // CATEGORY: GLOBAL_SYSTEM_UI // OS: 6.0 - // GMS: 7.5.26 ACTION_VOLUME_KEY = 211; // ACTION: Volume dialog > Mute a stream by tapping icon // SUBTYPE: mute is 1, audible is 2 // CATEGORY: GLOBAL_SYSTEM_UI // OS: 6.0 - // GMS: 7.5.26 ACTION_VOLUME_ICON = 212; // ACTION: Volume dialog > Change ringer mode by tapping icon // SUBTYPE: 2 is audible, 3 is vibrate // CATEGORY: GLOBAL_SYSTEM_UI // OS: 6.0 - // GMS: 7.5.26 ACTION_RINGER_MODE = 213; // ACTION: Chooser shown (share target, file open, etc.) // CATEGORY: GLOBAL_SYSTEM_UI // OS: 6.0 - // GMS: 7.5.26 ACTION_ACTIVITY_CHOOSER_SHOWN = 214; // ACTION: Chooser > User taps an app target // SUBTYPE: Index of target // CATEGORY: GLOBAL_SYSTEM_UI // OS: 6.0 - // GMS: 7.5.26 ACTION_ACTIVITY_CHOOSER_PICKED_APP_TARGET = 215; // ACTION: Chooser > User taps a service target // SUBTYPE: Index of target // CATEGORY: GLOBAL_SYSTEM_UI // OS: 6.0 - // GMS: 7.5.26 ACTION_ACTIVITY_CHOOSER_PICKED_SERVICE_TARGET = 216; // ACTION: Chooser > User taps a standard target // SUBTYPE: Index of target // CATEGORY: GLOBAL_SYSTEM_UI // OS: 6.0 - // GMS: 7.5.26 ACTION_ACTIVITY_CHOOSER_PICKED_STANDARD_TARGET = 217; // ACTION: QS Brightness Slider (with auto brightness disabled) // SUBTYPE: slider value // CATEGORY: QUICK_SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACTION_BRIGHTNESS = 218; // ACTION: QS Brightness Slider (with auto brightness enabled) // SUBTYPE: slider value // CATEGORY: QUICK_SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACTION_BRIGHTNESS_AUTO = 219; // OPEN: Settings > Display > Brightness Slider // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 BRIGHTNESS_DIALOG = 220; // OPEN: Settings > Apps > Configure Apps > Draw over other apps // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 SYSTEM_ALERT_WINDOW_APPS = 221; // OPEN: Display has entered dream mode // CATEGORY: GLOBAL_SYSTEM_UI // OS: 6.0 - // GMS: 7.5.26 DREAMING = 222; // OPEN: Display has entered ambient notification mode // CATEGORY: GLOBAL_SYSTEM_UI // OS: 6.0 - // GMS: 7.5.26 DOZING = 223; // OPEN: Overview // CATEGORY: GLOBAL_SYSTEM_UI // OS: 6.0 - // GMS: 7.5.26 OVERVIEW_ACTIVITY = 224; // OPEN: Settings > About phone > Legal information // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ABOUT_LEGAL_SETTINGS = 225; // OPEN: Settings > Search > Perform search // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 ACTION_SEARCH_RESULTS = 226; // OPEN: Settings > System UI Tuner // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 TUNER = 227; // OPEN: Settings > System UI Tuner > Quick Settings // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 TUNER_QS = 228; // OPEN: Settings > System UI Tuner > Demo mode // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 TUNER_DEMO_MODE = 229; // ACTION: Settings > System UI Tuner > Quick Settings > Move tile // PACKAGE: Tile // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 TUNER_QS_REORDER = 230; // ACTION: Settings > System UI Tuner > Quick Settings > Add tile // PACKAGE: Tile // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 TUNER_QS_ADD = 231; // ACTION: Settings > System UI Tuner > Quick Settings > Remove tile // PACKAGE: Tile // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 TUNER_QS_REMOVE = 232; // ACTION: Settings > System UI Tuner > Status bar > Enable icon // PACKAGE: Icon // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 TUNER_STATUS_BAR_ENABLE = 233; // ACTION: Settings > System UI Tuner > Status bar > Disable icon // PACKAGE: Icon // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 TUNER_STATUS_BAR_DISABLE = 234; // ACTION: Settings > System UI Tuner > Demo mode > Enable demo mode // SUBTYPE: false is disabled, true is enabled // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 TUNER_DEMO_MODE_ENABLED = 235; // ACTION: Settings > System UI Tuner > Demo mode > Show demo mode // SUBTYPE: false is disabled, true is enabled // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 TUNER_DEMO_MODE_ON = 236; // ACTION: Settings > System UI Tuner > Show embedded battery percentage // SUBTYPE: 0 is disabled, 1 is enabled // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 TUNER_BATTERY_PERCENTAGE = 237; // OPEN: Settings > Developer options > Inactive apps // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.5.26 FUELGAUGE_INACTIVE_APPS = 238; // ACTION: Long press home to bring up assistant // CATEGORY: GLOBAL_SYSTEM_UI // OS: 6.0 - // GMS: 7.5.26 ACTION_ASSIST_LONG_PRESS = 239; // OPEN: Settings > Security > Nexus Imprint > Add Fingerprint // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.8.99 FINGERPRINT_ENROLLING = 240; // OPEN: Fingerprint Enroll > Find Sensor // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.8.99 FINGERPRINT_FIND_SENSOR = 241; // OPEN: Fingerprint Enroll > Fingerprint Enrolled! // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.8.99 FINGERPRINT_ENROLL_FINISH = 242; // OPEN: Fingerprint Enroll introduction // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.8.99 FINGERPRINT_ENROLL_INTRO = 243; // OPEN: Fingerprint Enroll onboarding // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.8.99 FINGERPRINT_ENROLL_ONBOARD = 244; // OPEN: Fingerprint Enroll > Let's Start! // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.8.99 FINGERPRINT_ENROLL_SIDECAR = 245; // OPEN: Fingerprint Enroll SUW > Let's Start! // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.8.99 FINGERPRINT_ENROLLING_SETUP = 246; // OPEN: Fingerprint Enroll SUW > Find Sensor // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.8.99 FINGERPRINT_FIND_SENSOR_SETUP = 247; // OPEN: Fingerprint Enroll SUW > Fingerprint Enrolled! // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.8.99 FINGERPRINT_ENROLL_FINISH_SETUP = 248; // OPEN: Fingerprint Enroll SUW introduction // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.8.99 FINGERPRINT_ENROLL_INTRO_SETUP = 249; // OPEN: Fingerprint Enroll SUW onboarding // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.8.99 FINGERPRINT_ENROLL_ONBOARD_SETUP = 250; // ACTION: Add fingerprint > Enroll fingerprint // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.8.99 ACTION_FINGERPRINT_ENROLL = 251; // ACTION: Authenticate using fingerprint // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.8.99 ACTION_FINGERPRINT_AUTH = 252; // ACTION: Settings > Security > Nexus Imprint > [Fingerprint] > Delete // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.8.99 ACTION_FINGERPRINT_DELETE = 253; // ACTION: Settings > Security > Nexus Imprint > [Fingerprint] > Rename // CATEGORY: SETTINGS // OS: 6.0 - // GMS: 7.8.99 ACTION_FINGERPRINT_RENAME = 254; // ACTION: Double tap camera shortcut // CATEGORY: GLOBAL_SYSTEM_UI // OS: 6.0 - // GMS: 7.8.99 ACTION_DOUBLE_TAP_POWER_CAMERA_GESTURE = 255; // ACTION: Double twist camera shortcut // CATEGORY: GLOBAL_SYSTEM_UI // OS: 6.0 - // GMS: 7.8.99 ACTION_WIGGLE_CAMERA_GESTURE = 256; // OPEN: QS Work Mode tile shown @@ -1569,13 +1335,11 @@ message MetricsEvent { // SUBTYPE: 0 is off, 1 is on // CATEGORY: QUICK_SETTINGS // OS: N - // GMS: 7.8.99 QS_WORKMODE = 257; // OPEN: Settings > Developer Options > Background Check // CATEGORY: SETTINGS // OS: N - // GMS: 7.8.99 BACKGROUND_CHECK_SUMMARY = 258; // OPEN: QS Lock tile shown @@ -1583,52 +1347,44 @@ message MetricsEvent { // SUBTYPE: 0 is off, 1 is on // CATEGORY: QUICK_SETTINGS // OS: N - // GMS: 7.8.99 QS_LOCK_TILE = 259; // OPEN: QS User Tile shown // CATEGORY: QUICK_SETTINGS // OS: N - // GMS: 7.8.99 QS_USER_TILE = 260; // OPEN: QS Battery tile shown // CATEGORY: QUICK_SETTINGS // OS: N - // GMS: 7.8.99 QS_BATTERY_TILE = 261; // OPEN: Settings > Sound > Do not disturb > Visual interruptions // CATEGORY: SETTINGS // OS: N - // GMS: 7.8.99 NOTIFICATION_ZEN_MODE_VISUAL_INTERRUPTIONS = 262; // ACTION: Visual interruptions > No screen interuptions toggle // SUBTYPE: 0 is off, 1 is on // CATEGORY: SETTINGS // OS: N - // GMS: 7.8.99 ACTION_ZEN_ALLOW_WHEN_SCREEN_OFF = 263; // ACTION: Visual interruptions > No notification light toggle // SUBTYPE: 0 is off, 1 is on // CATEGORY: SETTINGS // OS: N - // GMS: 7.8.99 ACTION_ZEN_ALLOW_LIGHTS = 264; // OPEN: Settings > Notifications > [App] > Topic Notifications // CATEGORY: SETTINGS // OS: N - // GMS: 7.8.99 NOTIFICATION_TOPIC_NOTIFICATION = 265; // ACTION: Settings > Apps > Default Apps > Select different SMS app // PACKAGE: Selected SMS app // CATEGORY: SETTINGS // OS: N - // GMS: 7.8.99 ACTION_DEFAULT_SMS_APP_CHANGED = 266; // OPEN: QS Color modification tile shown @@ -1636,105 +1392,88 @@ message MetricsEvent { // SUBTYPE: 0 is off, 1 is on // CATEGORY: QUICK_SETTINGS // OS: N - // GMS: 7.8.99 QS_COLOR_MATRIX = 267; // OPEN: QS Custom tile shown // ACTION: QS Work Mode tile tapped // CATEGORY: QUICK_SETTINGS // OS: N - // GMS: 7.8.99 QS_CUSTOM = 268; // ACTION: Visual interruptions > Never turn off the screen toggle // SUBTYPE: 0 is off, 1 is on // CATEGORY: SETTINGS // OS: N - // GMS: 7.8.99 ACTION_ZEN_ALLOW_WHEN_SCREEN_ON = 269; // ACTION: Overview > Long-press task, drag to enter split-screen // CATEGORY: GLOBAL_SYSTEM_UI // OS: N - // GMS: 7.8.99 ACTION_WINDOW_DOCK_DRAG_DROP = 270; // ACTION: In App > Long-press Overview button to enter split-screen // CATEGORY: GLOBAL_SYSTEM_UI // OS: N - // GMS: 7.8.99 ACTION_WINDOW_DOCK_LONGPRESS = 271; // ACTION: In App > Swipe Overview button to enter split-screen // CATEGORY: GLOBAL_SYSTEM_UI // OS: N - // GMS: 7.8.99 ACTION_WINDOW_DOCK_SWIPE = 272; // ACTION: Launch profile-specific app > Confirm credentials // CATEGORY: GLOBAL_SYSTEM_UI // OS: N - // GMS: 7.8.99 PROFILE_CHALLENGE = 273; // OPEN: QS Battery detail panel // CATEGORY: GLOBAL_SYSTEM_UI // OS: N - // GMS: 7.8.99 QS_BATTERY_DETAIL = 274; // OPEN: Overview > History // CATEGORY: GLOBAL_SYSTEM_UI // OS: N - // GMS: 7.8.99 OVERVIEW_HISTORY = 275; // ACTION: Overview > Page by tapping Overview button // CATEGORY: GLOBAL_SYSTEM_UI // OS: N - // GMS: 7.8.99 ACTION_OVERVIEW_PAGE = 276; // ACTION: Overview > Select app // CATEGORY: GLOBAL_SYSTEM_UI // OS: N - // GMS: 7.8.99 ACTION_OVERVIEW_SELECT = 277; // ACTION: View emergency info // CATEGORY: GLOBAL_SYSTEM_UI // OS: N - // GMS: 7.8.99 ACTION_VIEW_EMERGENCY_INFO = 278; // ACTION: Edit emergency info activity // CATEGORY: SETTINGS // OS: N - // GMS: 7.8.99 ACTION_EDIT_EMERGENCY_INFO = 279; // ACTION: Edit emergency info field // CATEGORY: SETTINGS // OS: N - // GMS: 7.8.99 ACTION_EDIT_EMERGENCY_INFO_FIELD = 280; // ACTION: Add emergency contact // CATEGORY: SETTINGS // OS: N - // GMS: 7.8.99 ACTION_ADD_EMERGENCY_CONTACT = 281; // ACTION: Delete emergency contact // CATEGORY: SETTINGS // OS: N - // GMS: 7.8.99 ACTION_DELETE_EMERGENCY_CONTACT = 282; // ACTION: Call emergency contact // CATEGORY: SETTINGS // OS: N - // GMS: 7.8.99 ACTION_CALL_EMERGENCY_CONTACT = 283; // OPEN: QS Data Saver tile shown @@ -1745,13 +1484,11 @@ message MetricsEvent { // OPEN: Settings > Security > User credentials // CATEGORY: Settings // OS: N - // GMS: 7.8.99 USER_CREDENTIALS = 285; // ACTION: In App (splitscreen) > Long-press Overview to exit split-screen // CATEGORY: GLOBAL_SYSTEM_UI // OS: N - // GMS: 7.8.99 ACTION_WINDOW_UNDOCK_LONGPRESS = 286; // Logged when the user scrolls through overview manually @@ -1773,81 +1510,68 @@ message MetricsEvent { // ACTION: Long-press power button, then tap "Take bug report" option. // CATEGORY: GLOBAL_SYSTEM_UI // OS: N - // GMS: 7.8.99 ACTION_BUGREPORT_FROM_POWER_MENU_INTERACTIVE = 292; // ACTION: Long-press power button, then long-press "Take bug report" option. // CATEGORY: GLOBAL_SYSTEM_UI // OS: N - // GMS: 7.8.99 ACTION_BUGREPORT_FROM_POWER_MENU_FULL = 293; // ACTION: Settings -> Developer Options -> Take bug report -> Interactive report // CATEGORY: SETTINGS // OS: N - // GMS: 7.8.99 // Interactive bug report initiated from Settings. ACTION_BUGREPORT_FROM_SETTINGS_INTERACTIVE = 294; // ACTION: Settings -> Developer Options -> Take bug report -> Full report // CATEGORY: SETTINGS // OS: N - // GMS: 7.8.99 // Interactive bug report initiated from Settings. ACTION_BUGREPORT_FROM_SETTINGS_FULL = 295; // ACTION: User tapped notification action to cancel a bug report // CATEGORY: NOTIFICATION // OS: N - // GMS: 7.8.99 ACTION_BUGREPORT_NOTIFICATION_ACTION_CANCEL = 296; // ACTION: User tapped notification action to launch bug report details screen // CATEGORY: NOTIFICATION // OS: N - // GMS: 7.8.99 ACTION_BUGREPORT_NOTIFICATION_ACTION_DETAILS = 297; // ACTION: User tapped notification action to take adition screenshot on bug report // CATEGORY: NOTIFICATION // OS: N - // GMS: 7.8.99 ACTION_BUGREPORT_NOTIFICATION_ACTION_SCREENSHOT = 298; // ACTION: User tapped notification to share bug report // CATEGORY: NOTIFICATION // OS: N - // GMS: 7.8.99 ACTION_BUGREPORT_NOTIFICATION_ACTION_SHARE = 299; // ACTION: User changed bug report name using the details screen // CATEGORY: GLOBAL_SYSTEM_UI // OS: N - // GMS: 7.8.99 ACTION_BUGREPORT_DETAILS_NAME_CHANGED = 300; // ACTION: User changed bug report title using the details screen // CATEGORY: GLOBAL_SYSTEM_UI // OS: N - // GMS: 7.8.99 ACTION_BUGREPORT_DETAILS_TITLE_CHANGED = 301; // ACTION: User changed bug report description using the details screen // CATEGORY: GLOBAL_SYSTEM_UI // OS: N - // GMS: 7.8.99 ACTION_BUGREPORT_DETAILS_DESCRIPTION_CHANGED = 302; // ACTION: User tapped Save in the bug report details screen. // CATEGORY: GLOBAL_SYSTEM_UI // OS: N - // GMS: 7.8.99 ACTION_BUGREPORT_DETAILS_SAVED = 303; // ACTION: User tapped Cancel in the bug report details screen. // CATEGORY: GLOBAL_SYSTEM_UI // OS: N - // GMS: 7.8.99 ACTION_BUGREPORT_DETAILS_CANCELED = 304; // Tuner: Open/close calibrate dialog. @@ -1920,79 +1644,140 @@ message MetricsEvent { // the transition was executed. APP_TRANSITION_DEVICE_UPTIME_SECONDS = 325; - // User granted access to the request folder; action takes an integer - // representing the folder's index on Environment.STANDARD_DIRECTORIES - // (or -2 for root access, or -1 or unknown directory). + // ACTION: app requested access to a scoped directory, user granted it. + // SUBTYPE: directory's index on Environment.STANDARD_DIRECTORIES + // CATEGORY: GLOBAL_SYSTEM_UI + // OS: N ACTION_SCOPED_DIRECTORY_ACCESS_GRANTED_BY_FOLDER = 326; - // User denied access to the request folder; action takes an integer - // representing the folder's index on Environment.STANDARD_DIRECTORIES - // (or -2 for root access, or -1 or unknown directory). + // ACTION: app requested access to a scoped directory, user denied it. + // SUBTYPE: directory's index on Environment.STANDARD_DIRECTORIES + // CATEGORY: GLOBAL_SYSTEM_UI + // OS: N ACTION_SCOPED_DIRECTORY_ACCESS_DENIED_BY_FOLDER = 327; - // User granted access to the request folder; action pass package name - // of calling package. + // ACTION: app requested access to a scoped directory, user granted it. + // PACKAGE: app that requested access + // CATEGORY: GLOBAL_SYSTEM_UI + // OS: N ACTION_SCOPED_DIRECTORY_ACCESS_GRANTED_BY_PACKAGE = 328; - // User denied access to the request folder; action pass package name - // of calling package. + // ACTION: app requested access to a scoped directory, user denied it. + // PACKAGE: app that requested access. + // CATEGORY: GLOBAL_SYSTEM_UI + // OS: N ACTION_SCOPED_DIRECTORY_ACCESS_DENIED_BY_PACKAGE = 329; - // App requested access to a directory it has already been granted - // access before; action takes an integer representing the folder's - // index on Environment.STANDARD_DIRECTORIES - // (or -2 for root access, or -1 or unknown directory). + // ACTION: app requested access to a directory user has already been granted + // access before. + // SUBTYPE: directory's index on Environment.STANDARD_DIRECTORIES. + // CATEGORY: GLOBAL_SYSTEM_UI + // OS: N ACTION_SCOPED_DIRECTORY_ACCESS_ALREADY_GRANTED_BY_FOLDER = 330; - // App requested access to a directory it has already been granted - // access before; action pass package name of calling package. + // ACTION: app requested access to a directory user has already been granted + // access before. + // PACKAGE: app that requested access. + // CATEGORY: GLOBAL_SYSTEM_UI + // OS: N ACTION_SCOPED_DIRECTORY_ACCESS_ALREADY_GRANTED_BY_PACKAGE = 331; - // Logged when the user slides a notification and - // reveals the gear beneath it. + // ACTION: Logged when the user slides a notification and reveals the gear + // beneath it. + // CATEGORY: NOTIFICATION + // OS: N ACTION_REVEAL_GEAR = 332; - // Logged when the user taps on the gear beneath - // a notification. + // ACTION: Logged when the user taps on the gear beneath a notification. + // CATEGORY: NOTIFICATION + // OS: N ACTION_TOUCH_GEAR = 333; // Logs that the user has edited the enabled VR listeners. + // CATEGORY: SETTINGS + // OS: N VR_MANAGE_LISTENERS = 334; // Settings -> Accessibility -> Click after pointer stops moving + // CATEGORY: SETTINGS + // OS: N ACCESSIBILITY_TOGGLE_AUTOCLICK = 335; + // Settings -> Sound + // CATEGORY: SETTINGS + // OS: N SOUND = 336; + // Settings -> Notifications -> Gear + // CATEGORY: SETTINGS + // OS: N CONFIGURE_NOTIFICATION = 337; + // Settings -> Wi-Fi -> Gear + // CATEGORY: SETTINGS + // OS: N CONFIGURE_WIFI = 338; + // Settings -> Display -> Display size + // OS: N DISPLAY_SCREEN_ZOOM = 339; + // Settings -> Display -> Font size + // CATEGORY: SETTINGS + // OS: N ACCESSIBILITY_FONT_SIZE = 340; + // Settings -> Data usage -> Cellular/Wi-Fi data usage + // CATEGORY: SETTINGS + // OS: N DATA_USAGE_LIST = 341; + // Settings -> Data usage -> Billing cycle or DATA_USAGE_LIST -> Gear + // CATEGORY: SETTINGS + // OS: N BILLING_CYCLE = 342; + // DATA_USAGE_LIST -> Any item or App info -> Data usage + // CATEGORY: SETTINGS + // OS: N APP_DATA_USAGE = 343; + // Settings -> Language & input -> Language + // CATEGORY: SETTINGS + // OS: N USER_LOCALE_LIST = 344; + // Settings -> Language & input -> Virtual keyboard + // CATEGORY: SETTINGS + // OS: N VIRTUAL_KEYBOARDS = 345; + // Settings -> Language & input -> Physical keyboard + // CATEGORY: SETTINGS + // OS: N PHYSICAL_KEYBOARDS = 346; + // Settings -> Language & input -> Virtual keyboard -> Add a virtual keyboard + // CATEGORY: SETTINGS + // OS: N ENABLE_VIRTUAL_KEYBOARDS = 347; + // Settings -> Data usage -> Data Saver + // CATEGORY: SETTINGS + // OS: N DATA_SAVER_SUMMARY = 348; + // Settings -> Data usage -> Data Saver -> Unrestricted data access + // CATEGORY: SETTINGS + // OS: N DATA_USAGE_UNRESTRICTED_ACCESS = 349; // Used for generic logging of Settings Preference Persistence, should not be used // outside SharedPreferencesLogger. + // CATEGORY: SETTINGS + // OS: N ACTION_GENERIC_PACKAGE = 350; + // Settings -> Apps -> Gear -> Special access SPECIAL_ACCESS = 351; @@ -2158,15 +1943,28 @@ message MetricsEvent { // System UI Tuner > Other > Power notification controls > Toggle on/off ACTION_TUNER_POWER_NOTIFICATION_CONTROLS = 393; - // Action: user enable / disabled data saver using Settings. Arguments: - // 0: Data Saver mode is disabled. - // 1: Data Saver mode is enabled. + // Action: user enable / disabled data saver using Settings + // OPEN: Settings -> Data Usage -> Data saver -> On/off toggle + // VALUE: 1 for enabled, 0 for disabled + // CATEGORY: SETTINGS + // OS: N ACTION_DATA_SAVER_MODE = 394; - // User whitelisted an app for Data Saver mode; action pass package name of app. + // User whitelisted an app for Data Saver mode; action pass package name of app + // Action: user enable / disabled data saver using Settings + // OPEN: Settings -> Data Usage -> Data saver -> Unrestricted data access > APP toggle turned on + // or + // Settings -> Apps -> APP -> Data usage -> Unrestricted data usage toggle turned on + // VALUE: package name of APP + // CATEGORY: SETTINGS + // OS: N ACTION_DATA_SAVER_WHITELIST = 395; - // User blacklisted an app for Data Saver mode; action pass package name of app. + // User blacklisted an app for Data Saver mode; action pass package name of app + // OPEN: Settings -> Apps -> APP -> Data usage -> Background data toggle turned off + // VALUE: package name of APP + // CATEGORY: SETTINGS + // OS: N ACTION_DATA_SAVER_BLACKLIST = 396; // User opened a remote input view associated with a notification. Passes package name of app @@ -2332,39 +2130,51 @@ message MetricsEvent { SUPPORT_FRAGMENT = 475; // ACTION: Settings -> Select summary tab. + // CATEGORY: SETTINGS ACTION_SELECT_SUMMARY=476; // ACTION: Settings -> Select support tab. + // CATEGORY: SETTINGS ACTION_SELECT_SUPPORT_FRAGMENT = 477; // ACTION: Settings -> Support -> Tips & tricks + // CATEGORY: SETTINGS ACTION_SUPPORT_TIPS_AND_TRICKS = 478; // ACTION: Settings -> Support -> Help & feedback + // CATEGORY: SETTINGS ACTION_SUPPORT_HELP_AND_FEEDBACK = 479; // ACTION: Settings -> Support -> Sign in + // CATEGORY: SETTINGS ACTION_SUPPORT_SIGN_IN = 480; // ACTION: Settings -> Support -> Phone + // CATEGORY: SETTINGS ACTION_SUPPORT_PHONE = 481; // ACTION: Settings -> Support -> Chat + // CATEGORY: SETTINGS ACTION_SUPPORT_CHAT = 482; // ACTION: Settings -> Support -> Phone/Chat -> Disclaimer Cancel + // CATEGORY: SETTINGS ACTION_SUPPORT_DISCLAIMER_CANCEL = 483; // ACTION: Settings -> Support -> Phone/Chat -> Disclaimer OK + // CATEGORY: SETTINGS ACTION_SUPPORT_DISCLAIMER_OK = 484; // ACTION: Settings -> Support -> Toll-Free Phone + // CATEGORY: SETTINGS ACTION_SUPPORT_DAIL_TOLLFREE = 485; // ACTION: Settings -> Support -> "Travel Abroad" Button + // CATEGORY: SETTINGS ACTION_SUPPORT_VIEW_TRAVEL_ABROAD_DIALOG = 486; // ACTION: Settings -> Support -> "Travel Abroad" Button -> Tolled Phone + // CATEGORY: SETTINGS ACTION_SUPPORT_DIAL_TOLLED = 487; // OPEN: Settings > Display > Night display diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 1ca61480973a..5980715c5358 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -159,7 +159,6 @@ import android.content.pm.PermissionInfo; import android.content.pm.ProviderInfo; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; -import android.content.pm.ShortcutServiceInternal; import android.content.pm.Signature; import android.content.pm.UserInfo; import android.content.pm.VerifierDeviceIdentity; @@ -11439,9 +11438,6 @@ public class PackageManagerService extends IPackageManager.Stub { } else { resolvedUserIds = userIds; } - final ShortcutServiceInternal shortcutService = - LocalServices.getService(ShortcutServiceInternal.class); - for (int id : resolvedUserIds) { final Intent intent = new Intent(action, pkg != null ? Uri.fromParts("package", pkg, null) : null); @@ -11466,10 +11462,6 @@ public class PackageManagerService extends IPackageManager.Stub { + intent.toShortString(false, true, false, false) + " " + intent.getExtras(), here); } - // TODO b/29385425 Consider making lifecycle callbacks for this. - if (shortcutService != null) { - shortcutService.onPackageBroadcast(intent); - } am.broadcastIntent(null, intent, null, finishedReceiver, 0, null, null, null, android.app.AppOpsManager.OP_NONE, null, finishedReceiver != null, false, id); diff --git a/services/core/java/com/android/server/pm/ShortcutPendingTasks.java b/services/core/java/com/android/server/pm/ShortcutPendingTasks.java deleted file mode 100644 index a5ace56fee1f..000000000000 --- a/services/core/java/com/android/server/pm/ShortcutPendingTasks.java +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright (C) 2016 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.server.pm; - -import android.annotation.NonNull; -import android.util.Slog; - -import java.io.PrintWriter; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicLong; -import java.util.function.BooleanSupplier; -import java.util.function.Consumer; -import java.util.logging.Handler; - -/** - * Used by {@link ShortcutService} to register tasks to be executed on Handler and also wait for - * all pending tasks. - * - * Tasks can be registered with {@link #addTask(Runnable)}. Call {@link #waitOnAllTasks()} to wait - * on all tasks that have been registered. - * - * In order to avoid deadlocks, {@link #waitOnAllTasks} MUST NOT be called with any lock held, nor - * on the handler thread. These conditions are checked by {@link #mWaitThreadChecker} and wtf'ed. - * - * During unit tests, we can't run tasks asynchronously, so we just run Runnables synchronously, - * which also means the "is lock held" check doesn't work properly during unit tests (e.g. normally - * when a Runnable is executed on a Handler, the thread doesn't hold any lock, but during the tests - * we just run a Runnable on the thread that registers it, so the thread may or may not hold locks.) - * So unfortunately we have to disable {@link #mWaitThreadChecker} during unit tests. - * - * Because of the complications like those, this class should be used only for specific purposes: - * - {@link #addTask(Runnable)} should only be used to register tasks on callbacks from lower level - * services like the package manager or the activity manager. - * - * - {@link #waitOnAllTasks} should only be called at the entry point of RPC calls (or the test only - * accessors}. - */ -public class ShortcutPendingTasks { - private static final String TAG = "ShortcutPendingTasks"; - - private static final boolean DEBUG = false || ShortcutService.DEBUG; // DO NOT SUBMIT WITH TRUE. - - private final Consumer<Runnable> mRunner; - - private final BooleanSupplier mWaitThreadChecker; - - private final Consumer<Throwable> mExceptionHandler; - - /** # of tasks in the queue, including the running one. */ - private final AtomicInteger mRunningTaskCount = new AtomicInteger(); - - /** For dumpsys */ - private final AtomicLong mLastTaskStartTime = new AtomicLong(); - - /** - * Constructor. In order to allow injection during unit tests, it doesn't take a - * {@link Handler} directly, and instead takes {@code runner} which will post an argument - * to a handler. - */ - public ShortcutPendingTasks(Consumer<Runnable> runner, BooleanSupplier waitThreadChecker, - Consumer<Throwable> exceptionHandler) { - mRunner = runner; - mWaitThreadChecker = waitThreadChecker; - mExceptionHandler = exceptionHandler; - } - - private static void dlog(String message) { - if (DEBUG) { - Slog.d(TAG, message); - } - } - - /** - * Block until all tasks that are already queued finish. DO NOT call it while holding any lock - * or on the handler thread. - */ - public boolean waitOnAllTasks() { - dlog("waitOnAllTasks: enter"); - try { - // Make sure it's not holding the lock. - if (!mWaitThreadChecker.getAsBoolean()) { - return false; - } - - // Optimize for the no-task case. - if (mRunningTaskCount.get() == 0) { - return true; - } - - final CountDownLatch latch = new CountDownLatch(1); - - addTask(latch::countDown); - - for (; ; ) { - try { - if (latch.await(1, TimeUnit.SECONDS)) { - return true; - } - dlog("waitOnAllTasks: Task(s) still running..."); - } catch (InterruptedException ignore) { - } - } - } finally { - dlog("waitOnAllTasks: exit"); - } - } - - /** - * Add a new task. This operation is lock-free. - */ - public void addTask(Runnable task) { - mRunningTaskCount.incrementAndGet(); - mLastTaskStartTime.set(System.currentTimeMillis()); - - dlog("Task registered"); - - mRunner.accept(() -> { - try { - dlog("Task started"); - - task.run(); - } catch (Throwable th) { - mExceptionHandler.accept(th); - } finally { - dlog("Task finished"); - mRunningTaskCount.decrementAndGet(); - } - }); - } - - public void dump(@NonNull PrintWriter pw, @NonNull String prefix) { - pw.print(prefix); - pw.print("Pending tasks: # running tasks: "); - pw.println(mRunningTaskCount.get()); - - pw.print(prefix); - pw.print(" Last task started time: "); - final long lastStarted = mLastTaskStartTime.get(); - pw.print(" ["); - pw.print(lastStarted); - pw.print("] "); - pw.println(ShortcutService.formatTime(lastStarted)); - } -} diff --git a/services/core/java/com/android/server/pm/ShortcutService.java b/services/core/java/com/android/server/pm/ShortcutService.java index a9018b3a5a84..5f8cbbf0544b 100644 --- a/services/core/java/com/android/server/pm/ShortcutService.java +++ b/services/core/java/com/android/server/pm/ShortcutService.java @@ -49,7 +49,6 @@ import android.graphics.Bitmap.CompressFormat; import android.graphics.Canvas; import android.graphics.RectF; import android.graphics.drawable.Icon; -import android.net.Uri; import android.os.Binder; import android.os.Environment; import android.os.FileUtils; @@ -82,6 +81,7 @@ import android.view.IWindowManager; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.content.PackageMonitor; import com.android.internal.os.BackgroundThread; import com.android.internal.util.FastXmlSerializer; import com.android.internal.util.Preconditions; @@ -122,6 +122,9 @@ import java.util.function.Predicate; /** * TODO: + * - Deal with the async nature of PACKAGE_ADD. Basically when a publisher does anything after + * it's upgraded, the manager should make sure the upgrade process has been executed. + * * - getIconMaxWidth()/getIconMaxHeight() should use xdpi and ydpi. * -> But TypedValue.applyDimension() doesn't differentiate x and y..? * @@ -301,8 +304,6 @@ public class ShortcutService extends IShortcutService.Stub { private final AtomicBoolean mBootCompleted = new AtomicBoolean(); - private final ShortcutPendingTasks mPendingTasks; - private static final int PACKAGE_MATCH_FLAGS = PackageManager.MATCH_DIRECT_BOOT_AWARE | PackageManager.MATCH_DIRECT_BOOT_UNAWARE @@ -376,41 +377,16 @@ public class ShortcutService extends IShortcutService.Stub { mUsageStatsManagerInternal = Preconditions.checkNotNull( LocalServices.getService(UsageStatsManagerInternal.class)); - mPendingTasks = new ShortcutPendingTasks( - this::injectPostToHandler, - this::injectCheckPendingTaskWaitThread, - throwable -> wtf(throwable.getMessage(), throwable)); - if (onlyForPackageManagerApis) { return; // Don't do anything further. For unit tests only. } + mPackageMonitor.register(context, looper, UserHandle.ALL, /* externalStorage= */ false); + injectRegisterUidObserver(mUidObserver, ActivityManager.UID_OBSERVER_PROCSTATE | ActivityManager.UID_OBSERVER_GONE); } - /** - * Check whether {@link ShortcutPendingTasks#waitOnAllTasks()} can be called on the current - * thread. - * - * During unit tests, all tasks are executed synchronously which makes the lock held check would - * misfire, so we override this method to always return true. - */ - @VisibleForTesting - boolean injectCheckPendingTaskWaitThread() { - // We shouldn't wait while holding mLock. We should never do this so wtf(). - if (Thread.holdsLock(mLock)) { - wtf("waitOnAllTasks() called while holding the lock"); - return false; - } - // This shouldn't be called on the handler thread either. - if (Thread.currentThread() == mHandler.getLooper().getThread()) { - wtf("waitOnAllTasks() called on handler thread"); - return false; - } - return true; - } - void logDurationStat(int statId, long start) { synchronized (mStatLock) { mCountStats[statId]++; @@ -1516,8 +1492,6 @@ public class ShortcutService extends IShortcutService.Stub { @UserIdInt int userId) { verifyCaller(packageName, userId); - mPendingTasks.waitOnAllTasks(); - final List<ShortcutInfo> newShortcuts = (List<ShortcutInfo>) shortcutInfoList.getList(); final int size = newShortcuts.size(); @@ -1567,8 +1541,6 @@ public class ShortcutService extends IShortcutService.Stub { @UserIdInt int userId) { verifyCaller(packageName, userId); - mPendingTasks.waitOnAllTasks(); - final List<ShortcutInfo> newShortcuts = (List<ShortcutInfo>) shortcutInfoList.getList(); final int size = newShortcuts.size(); @@ -1647,8 +1619,6 @@ public class ShortcutService extends IShortcutService.Stub { @UserIdInt int userId) { verifyCaller(packageName, userId); - mPendingTasks.waitOnAllTasks(); - final List<ShortcutInfo> newShortcuts = (List<ShortcutInfo>) shortcutInfoList.getList(); final int size = newShortcuts.size(); @@ -1699,8 +1669,6 @@ public class ShortcutService extends IShortcutService.Stub { verifyCaller(packageName, userId); Preconditions.checkNotNull(shortcutIds, "shortcutIds must be provided"); - mPendingTasks.waitOnAllTasks(); - synchronized (mLock) { final ShortcutPackage ps = getPackageShortcutsLocked(packageName, userId); @@ -1728,8 +1696,6 @@ public class ShortcutService extends IShortcutService.Stub { verifyCaller(packageName, userId); Preconditions.checkNotNull(shortcutIds, "shortcutIds must be provided"); - mPendingTasks.waitOnAllTasks(); - synchronized (mLock) { final ShortcutPackage ps = getPackageShortcutsLocked(packageName, userId); @@ -1750,8 +1716,6 @@ public class ShortcutService extends IShortcutService.Stub { verifyCaller(packageName, userId); Preconditions.checkNotNull(shortcutIds, "shortcutIds must be provided"); - mPendingTasks.waitOnAllTasks(); - synchronized (mLock) { final ShortcutPackage ps = getPackageShortcutsLocked(packageName, userId); @@ -1774,8 +1738,6 @@ public class ShortcutService extends IShortcutService.Stub { public void removeAllDynamicShortcuts(String packageName, @UserIdInt int userId) { verifyCaller(packageName, userId); - mPendingTasks.waitOnAllTasks(); - synchronized (mLock) { getPackageShortcutsLocked(packageName, userId).deleteAllDynamicShortcuts(); } @@ -1788,9 +1750,6 @@ public class ShortcutService extends IShortcutService.Stub { public ParceledListSlice<ShortcutInfo> getDynamicShortcuts(String packageName, @UserIdInt int userId) { verifyCaller(packageName, userId); - - mPendingTasks.waitOnAllTasks(); - synchronized (mLock) { return getShortcutsWithQueryLocked( packageName, userId, ShortcutInfo.CLONE_REMOVE_FOR_CREATOR, @@ -1802,9 +1761,6 @@ public class ShortcutService extends IShortcutService.Stub { public ParceledListSlice<ShortcutInfo> getManifestShortcuts(String packageName, @UserIdInt int userId) { verifyCaller(packageName, userId); - - mPendingTasks.waitOnAllTasks(); - synchronized (mLock) { return getShortcutsWithQueryLocked( packageName, userId, ShortcutInfo.CLONE_REMOVE_FOR_CREATOR, @@ -1816,9 +1772,6 @@ public class ShortcutService extends IShortcutService.Stub { public ParceledListSlice<ShortcutInfo> getPinnedShortcuts(String packageName, @UserIdInt int userId) { verifyCaller(packageName, userId); - - mPendingTasks.waitOnAllTasks(); - synchronized (mLock) { return getShortcutsWithQueryLocked( packageName, userId, ShortcutInfo.CLONE_REMOVE_FOR_CREATOR, @@ -1848,8 +1801,6 @@ public class ShortcutService extends IShortcutService.Stub { public int getRemainingCallCount(String packageName, @UserIdInt int userId) { verifyCaller(packageName, userId); - mPendingTasks.waitOnAllTasks(); - synchronized (mLock) { return mMaxUpdatesPerInterval - getPackageShortcutsLocked(packageName, userId).getApiCallCount(); @@ -1860,8 +1811,6 @@ public class ShortcutService extends IShortcutService.Stub { public long getRateLimitResetTime(String packageName, @UserIdInt int userId) { verifyCaller(packageName, userId); - mPendingTasks.waitOnAllTasks(); - synchronized (mLock) { return getNextResetTimeLocked(); } @@ -1880,8 +1829,6 @@ public class ShortcutService extends IShortcutService.Stub { public void reportShortcutUsed(String packageName, String shortcutId, int userId) { verifyCaller(packageName, userId); - mPendingTasks.waitOnAllTasks(); - Preconditions.checkNotNull(shortcutId); if (DEBUG) { @@ -1914,8 +1861,6 @@ public class ShortcutService extends IShortcutService.Stub { public void resetThrottling() { enforceSystemOrShell(); - mPendingTasks.waitOnAllTasks(); - resetThrottlingInner(getCallingUserId()); } @@ -1948,9 +1893,6 @@ public class ShortcutService extends IShortcutService.Stub { if (DEBUG) { Slog.d(TAG, "onApplicationActive: package=" + packageName + " userid=" + userId); } - - mPendingTasks.waitOnAllTasks(); - enforceResetThrottlingPermission(); resetPackageThrottling(packageName, userId); } @@ -2113,14 +2055,6 @@ public class ShortcutService extends IShortcutService.Stub { @Nullable String packageName, @Nullable List<String> shortcutIds, @Nullable ComponentName componentName, int queryFlags, int userId) { - - // When this method is called from onShortcutChangedInner() in LauncherApps, - // we're on the handler thread. Do not try to wait on tasks. Not waiting for pending - // tasks on this specific case should be fine. - if (Thread.currentThread() != mHandler.getLooper().getThread()) { - mPendingTasks.waitOnAllTasks(); - } - final ArrayList<ShortcutInfo> ret = new ArrayList<>(); final boolean cloneKeyFieldOnly = ((queryFlags & ShortcutQuery.FLAG_GET_KEY_FIELDS_ONLY) != 0); @@ -2199,8 +2133,6 @@ public class ShortcutService extends IShortcutService.Stub { Preconditions.checkStringNotEmpty(packageName, "packageName"); Preconditions.checkStringNotEmpty(shortcutId, "shortcutId"); - mPendingTasks.waitOnAllTasks(); - synchronized (mLock) { getLauncherShortcutsLocked(callingPackage, userId, launcherUserId) .attemptToRestoreIfNeededAndSave(); @@ -2238,8 +2170,6 @@ public class ShortcutService extends IShortcutService.Stub { Preconditions.checkStringNotEmpty(packageName, "packageName"); Preconditions.checkNotNull(shortcutIds, "shortcutIds"); - mPendingTasks.waitOnAllTasks(); - synchronized (mLock) { final ShortcutLauncher launcher = getLauncherShortcutsLocked(callingPackage, userId, launcherUserId); @@ -2260,8 +2190,6 @@ public class ShortcutService extends IShortcutService.Stub { Preconditions.checkStringNotEmpty(packageName, "packageName can't be empty"); Preconditions.checkStringNotEmpty(shortcutId, "shortcutId can't be empty"); - mPendingTasks.waitOnAllTasks(); - synchronized (mLock) { getLauncherShortcutsLocked(callingPackage, userId, launcherUserId) .attemptToRestoreIfNeededAndSave(); @@ -2292,8 +2220,6 @@ public class ShortcutService extends IShortcutService.Stub { Preconditions.checkNotNull(packageName, "packageName"); Preconditions.checkNotNull(shortcutId, "shortcutId"); - mPendingTasks.waitOnAllTasks(); - synchronized (mLock) { getLauncherShortcutsLocked(callingPackage, userId, launcherUserId) .attemptToRestoreIfNeededAndSave(); @@ -2318,8 +2244,6 @@ public class ShortcutService extends IShortcutService.Stub { Preconditions.checkNotNull(packageName, "packageName"); Preconditions.checkNotNull(shortcutId, "shortcutId"); - mPendingTasks.waitOnAllTasks(); - synchronized (mLock) { getLauncherShortcutsLocked(callingPackage, userId, launcherUserId) .attemptToRestoreIfNeededAndSave(); @@ -2380,17 +2304,8 @@ public class ShortcutService extends IShortcutService.Stub { if (DEBUG) { Slog.d(TAG, "onSystemLocaleChangedNoLock: " + mLocaleChangeSequenceNumber.get()); } - mPendingTasks.addTask(() -> handleLocaleChanged()); - } - } - - @Override - public void onPackageBroadcast(Intent intent) { - if (DEBUG) { - Slog.d(TAG, "onPackageBroadcast"); + injectPostToHandler(() -> handleLocaleChanged()); } - mPendingTasks.addTask(() -> ShortcutService.this.onPackageBroadcast( - new Intent(intent))); } } @@ -2408,49 +2323,58 @@ public class ShortcutService extends IShortcutService.Stub { } } - private void onPackageBroadcast(Intent intent) { - final int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL); - if (userId == UserHandle.USER_NULL) { - Slog.w(TAG, "Intent broadcast does not contain user handle: " + intent); - return; - } + /** + * Package event callbacks. + */ + @VisibleForTesting + final PackageMonitor mPackageMonitor = new PackageMonitor() { - final String action = intent.getAction(); + private boolean isUserUnlocked() { + return mUserManager.isUserUnlocked(getChangingUserId()); + } - if (!mUserManager.isUserUnlocked(userId)) { - if (DEBUG) { - Slog.d(TAG, "Ignoring package broadcast " + action + " for locked/stopped user " - + userId); + @Override + public void onReceive(Context context, Intent intent) { + // clearCallingIdentity is not needed normally, but need to do it for the unit test. + final long token = injectClearCallingIdentity(); + try { + super.onReceive(context, intent); + } finally { + injectRestoreCallingIdentity(token); } - return; } - final Uri intentUri = intent.getData(); - final String packageName = (intentUri != null) ? intentUri.getSchemeSpecificPart() : null; - if (packageName == null) { - Slog.w(TAG, "Intent broadcast does not contain package name: " + intent); - return; + @Override + public void onPackageAdded(String packageName, int uid) { + if (!isUserUnlocked()) return; + handlePackageAdded(packageName, getChangingUserId()); } - final boolean replacing = intent.getBooleanExtra(Intent.EXTRA_REPLACING, false); + @Override + public void onPackageUpdateFinished(String packageName, int uid) { + if (!isUserUnlocked()) return; + handlePackageUpdateFinished(packageName, getChangingUserId()); + } - if (Intent.ACTION_PACKAGE_ADDED.equals(action)) { - if (replacing) { - handlePackageUpdateFinished(packageName, userId); - } else { - handlePackageAdded(packageName, userId); - } - } else if (Intent.ACTION_PACKAGE_REMOVED.equals(action)) { - if (!replacing) { - handlePackageRemoved(packageName, userId); - } - } else if (Intent.ACTION_PACKAGE_CHANGED.equals(action)) { - handlePackageChanged(packageName, userId); + @Override + public void onPackageRemoved(String packageName, int uid) { + if (!isUserUnlocked()) return; + handlePackageRemoved(packageName, getChangingUserId()); + } - } else if (Intent.ACTION_PACKAGE_DATA_CLEARED.equals(action)) { - handlePackageDataCleared(packageName, userId); + @Override + public void onPackageDataCleared(String packageName, int uid) { + if (!isUserUnlocked()) return; + handlePackageDataCleared(packageName, getChangingUserId()); } - } + + @Override + public boolean onPackageChanged(String packageName, int uid, String[] components) { + if (!isUserUnlocked()) return false; + handlePackageChanged(packageName, getChangingUserId()); + return false; // We don't need to receive onSomePackagesChanged(), so just false. + } + }; /** * Called when a user is unlocked. @@ -3097,9 +3021,6 @@ public class ShortcutService extends IShortcutService.Stub { pw.println(Log.getStackTraceString(mLastWtfStacktrace)); } - pw.println(); - mPendingTasks.dump(pw, " "); - for (int i = 0; i < mUsers.size(); i++) { pw.println(); mUsers.valueAt(i).dump(pw, " "); @@ -3148,8 +3069,6 @@ public class ShortcutService extends IShortcutService.Stub { enforceShell(); - mPendingTasks.waitOnAllTasks(); - final int status = (new MyShellCommand()).exec(this, in, out, err, args, resultReceiver); resultReceiver.send(status, null); @@ -3176,6 +3095,10 @@ public class ShortcutService extends IShortcutService.Stub { case "--user": if (takeUser) { mUserId = UserHandle.parseUserArg(getNextArgRequired()); + if (!mUserManager.isUserUnlocked(mUserId)) { + throw new CommandException( + "User " + mUserId + " is not running or locked"); + } break; } // fallthrough @@ -3501,7 +3424,6 @@ public class ShortcutService extends IShortcutService.Stub { @VisibleForTesting ShortcutPackage getPackageShortcutForTest(String packageName, int userId) { - mPendingTasks.waitOnAllTasks(); synchronized (mLock) { final ShortcutUser user = mUsers.get(userId); if (user == null) return null; @@ -3512,12 +3434,8 @@ public class ShortcutService extends IShortcutService.Stub { @VisibleForTesting ShortcutInfo getPackageShortcutForTest(String packageName, String shortcutId, int userId) { - mPendingTasks.waitOnAllTasks(); synchronized (mLock) { - final ShortcutUser user = mUsers.get(userId); - if (user == null) return null; - - final ShortcutPackage pkg = user.getAllPackagesForTest().get(packageName); + final ShortcutPackage pkg = getPackageShortcutForTest(packageName, userId); if (pkg == null) return null; return pkg.findShortcutById(shortcutId); @@ -3552,12 +3470,4 @@ public class ShortcutService extends IShortcutService.Stub { forEachLoadedUserLocked(u -> u.forAllPackageItems(ShortcutPackageItem::verifyStates)); } } - - ShortcutPendingTasks getPendingTasksForTest() { - return mPendingTasks; - } - - Object getLockForTest() { - return mLock; - } } diff --git a/services/retaildemo/java/com/android/server/retaildemo/RetailDemoModeService.java b/services/retaildemo/java/com/android/server/retaildemo/RetailDemoModeService.java index 855a2b6d9253..fe1986fd3d2f 100644 --- a/services/retaildemo/java/com/android/server/retaildemo/RetailDemoModeService.java +++ b/services/retaildemo/java/com/android/server/retaildemo/RetailDemoModeService.java @@ -321,13 +321,12 @@ public class RetailDemoModeService extends SystemService { private void setupDemoUser(UserInfo userInfo) { UserManager um = getUserManager(); UserHandle user = UserHandle.of(userInfo.id); - LockPatternUtils lockPatternUtils = new LockPatternUtils(getContext()); - lockPatternUtils.setLockScreenDisabled(true, userInfo.id); um.setUserRestriction(UserManager.DISALLOW_CONFIG_WIFI, true, user); um.setUserRestriction(UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES, true, user); um.setUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS, true, user); um.setUserRestriction(UserManager.DISALLOW_USB_FILE_TRANSFER, true, user); um.setUserRestriction(UserManager.DISALLOW_MODIFY_ACCOUNTS, true, user); + um.setUserRestriction(UserManager.DISALLOW_CONFIG_BLUETOOTH, true, user); Settings.Secure.putIntForUser(getContext().getContentResolver(), Settings.Secure.SKIP_FIRST_USE_HINTS, 1, userInfo.id); Settings.Secure.putIntForUser(getContext().getContentResolver(), @@ -496,6 +495,9 @@ public class RetailDemoModeService extends SystemService { mAmi.updatePersistentConfigurationForUser(getSystemUsersConfiguration(), userId); turnOffAllFlashLights(); muteVolumeStreams(); + // Disable lock screen for demo users. + LockPatternUtils lockPatternUtils = new LockPatternUtils(getContext()); + lockPatternUtils.setLockScreenDisabled(true, userId); mNm.notifyAsUser(TAG, 1, createResetNotification(), UserHandle.of(userId)); synchronized (mActivityLock) { diff --git a/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java b/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java index 01c19d0ca12b..1be57bccbdb7 100644 --- a/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java @@ -404,11 +404,6 @@ public abstract class BaseShortcutManagerTest extends InstrumentationTestCase { // During tests, WTF is fatal. fail(message + " exception: " + th + "\n" + Log.getStackTraceString(th)); } - - @Override - boolean injectCheckPendingTaskWaitThread() { - return true; - } } /** ShortcutManager with injection override methods. */ @@ -853,8 +848,6 @@ public abstract class BaseShortcutManagerTest extends InstrumentationTestCase { protected void shutdownServices() { if (mService != null) { - mService.getPendingTasksForTest().waitOnAllTasks(); - // Flush all the unsaved data from the previous instance. mService.saveDirtyInfo(); diff --git a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java index c7673d17424d..bf6c2ff97bec 100644 --- a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java +++ b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java @@ -62,7 +62,6 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; import android.Manifest.permission; import android.app.ActivityManager; @@ -1298,7 +1297,8 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), R.xml.shortcut_3); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast(genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); + mService.mPackageMonitor.onReceive(getTestContext(), + genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); runWithCaller(CALLING_PACKAGE_1, USER_0, () -> { assertTrue(mManager.setDynamicShortcuts(list( @@ -1316,7 +1316,8 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), R.xml.shortcut_2); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast(genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); + mService.mPackageMonitor.onReceive(getTestContext(), + genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); runWithCaller(CALLING_PACKAGE_1, USER_0, () -> { assertTrue(mManager.setDynamicShortcuts(list( @@ -2814,7 +2815,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), R.xml.shortcut_2); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); }).assertCallbackCalledForPackageAndUser(CALLING_PACKAGE_1, HANDLE_USER_0) .areAllManifest() @@ -2851,7 +2852,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), R.xml.shortcut_0); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); assertForLauncherCallback(mLauncherApps, () -> { @@ -3471,7 +3472,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), R.xml.shortcut_2); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); runWithCaller(CALLING_PACKAGE_1, USER_0, () -> { @@ -3488,7 +3489,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), R.xml.shortcut_1); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); runWithCaller(CALLING_PACKAGE_1, USER_0, () -> { @@ -3850,7 +3851,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), R.xml.shortcut_1); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); runWithCaller(CALLING_PACKAGE_1, USER_0, () -> { assertWith(getCallerShortcuts()) @@ -3890,7 +3891,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { assertTrue(bitmapDirectoryExists(CALLING_PACKAGE_3, USER_10)); uninstallPackage(USER_0, CALLING_PACKAGE_1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageDeleteIntent(CALLING_PACKAGE_1, USER_0)); assertNull(mService.getPackageShortcutForTest(CALLING_PACKAGE_1, "s1", USER_0)); @@ -3910,7 +3911,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { mRunningUsers.put(USER_10, true); uninstallPackage(USER_10, CALLING_PACKAGE_2); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageDeleteIntent(CALLING_PACKAGE_2, USER_10)); assertNull(mService.getPackageShortcutForTest(CALLING_PACKAGE_1, "s1", USER_0)); @@ -4001,7 +4002,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { assertTrue(bitmapDirectoryExists(CALLING_PACKAGE_2, USER_10)); assertTrue(bitmapDirectoryExists(CALLING_PACKAGE_3, USER_10)); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageDataClear(CALLING_PACKAGE_1, USER_0)); assertNull(mService.getPackageShortcutForTest(CALLING_PACKAGE_1, "s1", USER_0)); @@ -4020,7 +4021,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { mRunningUsers.put(USER_10, true); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageDataClear(CALLING_PACKAGE_2, USER_10)); assertNull(mService.getPackageShortcutForTest(CALLING_PACKAGE_1, "s1", USER_0)); @@ -4047,7 +4048,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), R.xml.shortcut_2); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_1, USER_10)); runWithCaller(CALLING_PACKAGE_1, USER_10, () -> { @@ -4068,7 +4069,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { }); // Clear data - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageDataClear(CALLING_PACKAGE_1, USER_10)); // Only manifest shortcuts will remain, and are no longer pinned. @@ -4133,9 +4134,9 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { reset(c0); reset(c10); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageUpdateIntent(CALLING_PACKAGE_1, USER_0)); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageUpdateIntent(CALLING_PACKAGE_1, USER_10)); waitOnMainThread(); @@ -4156,7 +4157,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { updatePackageVersion(CALLING_PACKAGE_1, 1); // Then send the broadcast, to only user-0. - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageUpdateIntent(CALLING_PACKAGE_1, USER_0)); waitOnMainThread(); @@ -4221,7 +4222,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { updatePackageVersion(CALLING_PACKAGE_2, 10); // Then send the broadcast, to only user-0. - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageUpdateIntent(CALLING_PACKAGE_2, USER_0)); mService.handleUnlockUser(USER_10); @@ -4245,7 +4246,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { updatePackageVersion(CALLING_PACKAGE_3, 100); // Then send the broadcast, to only user-0. - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageUpdateIntent(CALLING_PACKAGE_3, USER_0)); mService.handleUnlockUser(USER_10); @@ -4327,7 +4328,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { // Update the package. updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageUpdateIntent(CALLING_PACKAGE_1, USER_0)); runWithCaller(CALLING_PACKAGE_1, USER_0, () -> { @@ -4356,7 +4357,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { mRunningUsers.put(USER_10, true); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_1, USER_10)); runWithCaller(CALLING_PACKAGE_1, USER_10, () -> { @@ -4388,7 +4389,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { }); // First, no changes. - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageChangedIntent(CALLING_PACKAGE_1, USER_10)); runWithCaller(CALLING_PACKAGE_1, USER_10, () -> { @@ -4411,7 +4412,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { // Disable activity 1 mEnabledActivityChecker = (activity, userId) -> !ACTIVITY1.equals(activity); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageChangedIntent(CALLING_PACKAGE_1, USER_10)); runWithCaller(CALLING_PACKAGE_1, USER_10, () -> { @@ -4431,7 +4432,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { // Re-enable activity 1. // Manifest shortcuts will be re-published, but dynamic ones are not. mEnabledActivityChecker = (activity, userId) -> true; - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageChangedIntent(CALLING_PACKAGE_1, USER_10)); runWithCaller(CALLING_PACKAGE_1, USER_10, () -> { @@ -4455,7 +4456,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { // Disable activity 2 // Because "ms1-alt" and "s2" are both pinned, they will remain, but disabled. mEnabledActivityChecker = (activity, userId) -> !ACTIVITY2.equals(activity); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageChangedIntent(CALLING_PACKAGE_1, USER_10)); runWithCaller(CALLING_PACKAGE_1, USER_10, () -> { @@ -4518,7 +4519,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { setCaller(LAUNCHER_1, USER_0); assertForLauncherCallback(mLauncherApps, () -> { updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageUpdateIntent(CALLING_PACKAGE_1, USER_0)); }).assertCallbackCalledForPackageAndUser(CALLING_PACKAGE_1, HANDLE_USER_0) // Make sure the launcher gets callbacks. @@ -5160,7 +5161,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), R.xml.shortcut_2); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(mServiceContext, genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); // Pin from launcher 1. @@ -5173,7 +5174,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), R.xml.shortcut_1); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(mServiceContext, genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); // Make sure the manifest shortcuts have been published. @@ -5634,7 +5635,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), R.xml.shortcut_1); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); runWithCaller(CALLING_PACKAGE_1, USER_0, () -> { @@ -5655,7 +5656,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_2, ShortcutActivity.class.getName()), R.xml.shortcut_5); updatePackageVersion(CALLING_PACKAGE_2, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_2, USER_0)); runWithCaller(CALLING_PACKAGE_1, USER_0, () -> { @@ -5692,7 +5693,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_2, ShortcutActivity.class.getName()), R.xml.shortcut_2); updatePackageLastUpdateTime(CALLING_PACKAGE_2, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_2, USER_0)); runWithCaller(CALLING_PACKAGE_1, USER_0, () -> { @@ -5729,7 +5730,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { mRunningUsers.put(USER_10, false); mUnlockedUsers.put(USER_10, false); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_2, USER_10)); runWithCaller(CALLING_PACKAGE_2, USER_10, () -> { assertEmpty(mManager.getManifestShortcuts()); @@ -5739,7 +5740,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { // Try again, but the user is locked, so still ignored. mRunningUsers.put(USER_10, true); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_2, USER_10)); runWithCaller(CALLING_PACKAGE_2, USER_10, () -> { assertEmpty(mManager.getManifestShortcuts()); @@ -5750,7 +5751,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { mUnlockedUsers.put(USER_10, true); // Send PACKAGE_ADD broadcast to have Package 2 on user-10 publish manifest shortcuts. - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_2, USER_10)); runWithCaller(CALLING_PACKAGE_2, USER_10, () -> { @@ -5791,7 +5792,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { R.xml.shortcut_5_reverse); updatePackageLastUpdateTime(CALLING_PACKAGE_2, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_2, USER_0)); runWithCaller(CALLING_PACKAGE_2, USER_0, () -> { @@ -5819,7 +5820,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_2, ShortcutActivity2.class.getName()), R.xml.shortcut_0); updatePackageLastUpdateTime(CALLING_PACKAGE_2, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_2, USER_0)); // No manifest shortcuts, and pinned ones are disabled. @@ -5850,7 +5851,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), R.xml.shortcut_error_1); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); // Only the valid one is published. @@ -5865,7 +5866,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), R.xml.shortcut_error_2); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); // Only the valid one is published. @@ -5880,7 +5881,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), R.xml.shortcut_error_3); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); // Only the valid one is published. @@ -5896,7 +5897,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), R.xml.shortcut_error_4); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); runWithCaller(CALLING_PACKAGE_1, USER_0, () -> { @@ -5924,7 +5925,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), R.xml.shortcut_5); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); runWithCaller(CALLING_PACKAGE_1, USER_0, () -> { @@ -5962,7 +5963,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), R.xml.shortcut_error_4); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); // Make sure 3, 4 and 5 still exist but disabled. @@ -6010,7 +6011,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), R.xml.shortcut_5); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); // Only the valid one is published. @@ -6115,7 +6116,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), R.xml.shortcut_2); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); runWithCaller(CALLING_PACKAGE_1, USER_0, () -> { @@ -6212,7 +6213,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), R.xml.shortcut_1); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); // Only the valid one is published. @@ -6231,7 +6232,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), R.xml.shortcut_1_disable); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); // Because shortcut 1 wasn't pinned, it'll just go away. @@ -6252,7 +6253,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), R.xml.shortcut_1); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); // Only the valid one is published. @@ -6275,7 +6276,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), R.xml.shortcut_1_disable); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); // Because shortcut 1 was pinned, it'll still exist as pinned, but disabled. @@ -6308,7 +6309,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), R.xml.shortcut_2_duplicate); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); runWithCaller(CALLING_PACKAGE_1, USER_0, () -> { @@ -6338,7 +6339,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity2.class.getName()), R.xml.shortcut_5); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); runWithCaller(CALLING_PACKAGE_1, USER_0, () -> { @@ -6410,7 +6411,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), R.xml.shortcut_5); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); runWithCaller(CALLING_PACKAGE_1, USER_0, () -> { @@ -6460,7 +6461,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), R.xml.shortcut_2); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); runWithCaller(LAUNCHER_1, USER_0, () -> { @@ -6471,7 +6472,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), R.xml.shortcut_1); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); runWithCaller(CALLING_PACKAGE_1, USER_0, () -> { @@ -6553,7 +6554,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), R.xml.shortcut_5); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); runWithCaller(CALLING_PACKAGE_1, USER_0, () -> { @@ -6623,7 +6624,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), R.xml.shortcut_2); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); assertEquals(2, mManager.getManifestShortcuts().size()); @@ -6749,7 +6750,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), R.xml.shortcut_2); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); assertEquals(2, mManager.getManifestShortcuts().size()); @@ -6898,7 +6899,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), R.xml.shortcut_1); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); assertEquals(1, mManager.getManifestShortcuts().size()); @@ -6918,7 +6919,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity2.class.getName()), R.xml.shortcut_1_alt); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); assertEquals(3, mManager.getManifestShortcuts().size()); @@ -6938,7 +6939,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity2.class.getName()), R.xml.shortcut_5_alt); // manifest has 5, but max is 3, so a2 will have 3. updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); assertEquals(5, mManager.getManifestShortcuts().size()); @@ -6957,7 +6958,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { new ComponentName(CALLING_PACKAGE_1, ShortcutActivity2.class.getName()), R.xml.shortcut_0); updatePackageVersion(CALLING_PACKAGE_1, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE_1, USER_0)); assertEquals(0, mManager.getManifestShortcuts().size()); diff --git a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest3.java b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest3.java index fcf7ea2dcfbb..eb4db7a0f4af 100644 --- a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest3.java +++ b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest3.java @@ -66,7 +66,7 @@ public class ShortcutManagerTest3 extends BaseShortcutManagerTest { private void publishManifestShortcuts(ComponentName activity, int resId) { addManifestShortcutResource(activity, resId); updatePackageVersion(CALLING_PACKAGE, 1); - mInternal.onPackageBroadcast( + mService.mPackageMonitor.onReceive(getTestContext(), genPackageAddIntent(CALLING_PACKAGE, USER_0)); } diff --git a/services/tests/servicestests/src/com/android/server/pm/ShortcutPendingTasksTest.java b/services/tests/servicestests/src/com/android/server/pm/ShortcutPendingTasksTest.java deleted file mode 100644 index bf1ed98983df..000000000000 --- a/services/tests/servicestests/src/com/android/server/pm/ShortcutPendingTasksTest.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright (C) 2016 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.server.pm; - -import android.os.Handler; -import android.os.Looper; -import android.test.MoreAsserts; -import android.test.suitebuilder.annotation.LargeTest; - -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicReference; - -/** - * Run with: - adb install \ - -r -g ${ANDROID_PRODUCT_OUT}/data/app/FrameworksServicesTests/FrameworksServicesTests.apk && - adb shell am instrument -e class com.android.server.pm.ShortcutPendingTasksTest \ - -w com.android.frameworks.servicestests - */ -@LargeTest -public class ShortcutPendingTasksTest extends BaseShortcutManagerTest { - public void testAll() { - final AtomicReference<Throwable> thrown = new AtomicReference<>(); - - final AtomicBoolean threadCheckerResult = new AtomicBoolean(true); - - final Handler handler = new Handler(Looper.getMainLooper()); - - final ShortcutPendingTasks tasks = new ShortcutPendingTasks( - handler::post, - threadCheckerResult::get, - thrown::set); - - // No pending tasks, shouldn't block. - assertTrue(tasks.waitOnAllTasks()); - - final AtomicInteger counter = new AtomicInteger(); - - // Run one task. - tasks.addTask(() -> { - try { - Thread.sleep(1000); - } catch (InterruptedException ignore) { - } - counter.incrementAndGet(); - }); - - assertTrue(tasks.waitOnAllTasks()); - assertNull(thrown.get()); - - assertEquals(1, counter.get()); - - // Run 3 tasks. - - // We use this ID to make sure only one task can run at the same time. - final AtomicInteger currentTaskId = new AtomicInteger(); - - tasks.addTask(() -> { - currentTaskId.set(1); - try { - Thread.sleep(500); - } catch (InterruptedException ignore) { - } - counter.incrementAndGet(); - assertEquals(1, currentTaskId.get()); - }); - tasks.addTask(() -> { - currentTaskId.set(2); - try { - Thread.sleep(500); - } catch (InterruptedException ignore) { - } - counter.incrementAndGet(); - assertEquals(2, currentTaskId.get()); - }); - tasks.addTask(() -> { - currentTaskId.set(3); - try { - Thread.sleep(500); - } catch (InterruptedException ignore) { - } - counter.incrementAndGet(); - assertEquals(3, currentTaskId.get()); - }); - - assertTrue(tasks.waitOnAllTasks()); - assertNull(thrown.get()); - assertEquals(4, counter.get()); - - // No tasks running, shouldn't block. - assertTrue(tasks.waitOnAllTasks()); - assertNull(thrown.get()); - assertEquals(4, counter.get()); - - // Now the thread checker returns false, so waitOnAllTasks() returns false. - threadCheckerResult.set(false); - assertFalse(tasks.waitOnAllTasks()); - - threadCheckerResult.set(true); - - // Make sure the exception handler is called. - tasks.addTask(() -> { - throw new RuntimeException("XXX"); - }); - assertTrue(tasks.waitOnAllTasks()); - assertNotNull(thrown.get()); - MoreAsserts.assertContainsRegex("XXX", thrown.get().getMessage()); - } -} |