From 4da192d732be0ddd9ac01260859ba2e6a88ddb4b Mon Sep 17 00:00:00 2001 From: tom hsu Date: Thu, 23 Dec 2021 20:29:10 +0800 Subject: [PATCH 1/5] [Panlingual] Remove getCallingPackage and use Uri instead. - Use uri to pass the package name. - Allow adb command to start this function Bug: 211856852 Test: see b/211856852#2 Change-Id: I3d73d32d7546bf0e3db25d952b2caee934f523dc --- AndroidManifest.xml | 3 +- src/com/android/settings/Settings.java | 2 + .../appinfo/AppLocalePickerActivity.java | 53 ----------- .../appinfo/AppLocalePickerActivityTest.java | 87 ------------------- 4 files changed, 4 insertions(+), 141 deletions(-) delete mode 100644 src/com/android/settings/applications/appinfo/AppLocalePickerActivity.java delete mode 100644 tests/unit/src/com/android/settings/applications/appinfo/AppLocalePickerActivityTest.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 91476051960..e020edbcdc2 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -833,12 +833,13 @@ + diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java index 96f362c1779..99698ca4ef5 100644 --- a/src/com/android/settings/Settings.java +++ b/src/com/android/settings/Settings.java @@ -108,6 +108,8 @@ public class Settings extends SettingsActivity { public static class InputMethodAndSubtypeEnablerActivity extends SettingsActivity { /* empty */ } public static class SpellCheckersSettingsActivity extends SettingsActivity { /* empty */ } public static class LocalePickerActivity extends SettingsActivity { /* empty */ } + /** Activity for the App locale details settings. */ + public static class AppLocalePickerActivity extends SettingsActivity { /* empty */ } public static class LanguageAndInputSettingsActivity extends SettingsActivity { /* empty */ } public static class UserDictionarySettingsActivity extends SettingsActivity { /* empty */ } public static class DarkThemeSettingsActivity extends SettingsActivity { /* empty */ } diff --git a/src/com/android/settings/applications/appinfo/AppLocalePickerActivity.java b/src/com/android/settings/applications/appinfo/AppLocalePickerActivity.java deleted file mode 100644 index ce833ed670e..00000000000 --- a/src/com/android/settings/applications/appinfo/AppLocalePickerActivity.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2021 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.settings.applications.appinfo; - -import android.content.Intent; -import android.os.Bundle; -import android.util.Log; - -import androidx.annotation.VisibleForTesting; - -import com.android.settings.SettingsActivity; -import com.android.settings.applications.AppInfoBase; - -/** Activity for the entry of {@link #AppLocaleDetails} from outside Settings app. */ -public class AppLocalePickerActivity extends SettingsActivity { - private static final String TAG = "AppLocalePickerActivity"; - - @Override - protected void onCreate(Bundle savedState) { - Intent intent = getEntryIntent(getIntent()); - if (intent == null) { - finish(); - return; - } - setIntent(intent); - super.onCreate(savedState); - } - - @VisibleForTesting - Intent getEntryIntent(Intent intent) { - String callingPackage = getCallingPackage(); - if (callingPackage == null || callingPackage.isEmpty()) { - Log.d(TAG, "No calling package name is found."); - return null; - } - final Bundle fragmentArgs = new Bundle(); - fragmentArgs.putString(AppInfoBase.ARG_PACKAGE_NAME, callingPackage); - return intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS, fragmentArgs); - } -} diff --git a/tests/unit/src/com/android/settings/applications/appinfo/AppLocalePickerActivityTest.java b/tests/unit/src/com/android/settings/applications/appinfo/AppLocalePickerActivityTest.java deleted file mode 100644 index f6f56d99e2c..00000000000 --- a/tests/unit/src/com/android/settings/applications/appinfo/AppLocalePickerActivityTest.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (C) 2021 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.settings.applications.appinfo; - -import static com.google.common.truth.Truth.assertThat; - -import android.content.Intent; -import android.os.Bundle; -import android.os.Looper; - -import androidx.test.annotation.UiThreadTest; -import androidx.test.ext.junit.runners.AndroidJUnit4; - -import com.android.settings.SettingsActivity; -import com.android.settings.applications.AppInfoBase; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; - -@RunWith(AndroidJUnit4.class) -public class AppLocalePickerActivityTest { - private TestAppLocalePickerActivity mActivity; - - @Before - @UiThreadTest - public void setUp() { - if (Looper.myLooper() == null) { - Looper.prepare(); - } - mActivity = new TestAppLocalePickerActivity(); - } - - @After - public void cleanUp() { - mActivity = null; - } - - @Test - public void onCreate_getEntryIntent_returnNull() { - TestAppLocalePickerActivity.setCallingPackage(null); - Intent intent = new Intent(); - - assertThat(mActivity.getEntryIntent(intent)).isEqualTo(null); - } - - @Test - public void onCreate_getEntryIntent_returnIntentWithPackageName() { - String callingPackageName = "com.example.android"; - TestAppLocalePickerActivity.setCallingPackage(callingPackageName); - Intent intent = new Intent(); - - Intent entryIntent = mActivity.getEntryIntent(intent); - - Bundle outputBundle = - entryIntent.getBundleExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS); - String packageName = outputBundle.getString(AppInfoBase.ARG_PACKAGE_NAME); - assertThat(packageName).isEqualTo(callingPackageName); - } - - private static class TestAppLocalePickerActivity extends AppLocalePickerActivity { - private static String sCallingPackage; - @Override - public String getCallingPackage() { - return sCallingPackage; - } - - public static void setCallingPackage(String packageName) { - sCallingPackage = packageName; - } - } -} From 72f823ba9e1c1be746b1d952c2f00c6dbd4cb11b Mon Sep 17 00:00:00 2001 From: Tsung-Mao Fang Date: Fri, 24 Dec 2021 11:01:30 +0800 Subject: [PATCH 2/5] Fix potential OOM problem Prior to this cl, there's a potential vulnerability to cache huge logging data in the memory. We send the log out when user didn't trigger any event in 1 min. However, if user keep triggering any log event in 1 min, then there's a change to preserve a huge number logs in the device memory. Then, it causes the OOM. The solution is to set a logging threshold, once the current logging number is larger than 150, then we simply send it out immediately and clean the device memory. Test: Log can be sent out after meeting the threshold. Fix: 211323528 Change-Id: I9d507e8d55d6b7f7e682369edf3b5334eb2856ae --- .../core/instrumentation/SettingsIntelligenceLogWriter.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/core/instrumentation/SettingsIntelligenceLogWriter.java b/src/com/android/settings/core/instrumentation/SettingsIntelligenceLogWriter.java index d963a5500d3..29e58717eff 100644 --- a/src/com/android/settings/core/instrumentation/SettingsIntelligenceLogWriter.java +++ b/src/com/android/settings/core/instrumentation/SettingsIntelligenceLogWriter.java @@ -48,6 +48,8 @@ public class SettingsIntelligenceLogWriter implements LogWriter { private static final String LOG = "logs"; private static final long MESSAGE_DELAY = DateUtils.MINUTE_IN_MILLIS; // 1 minute + // Based on the exp, 99.5% users collect less than 150 data in 1 minute. + private static final int CACHE_LOG_THRESHOLD = 150; private List mSettingsLogList; private SendLogHandler mLogHandler; @@ -128,7 +130,8 @@ public class SettingsIntelligenceLogWriter implements LogWriter { mLogHandler.post(() -> { mSettingsLogList.add(settingsLog); }); - if (action == SettingsEnums.ACTION_CONTEXTUAL_CARD_DISMISS) { + if (action == SettingsEnums.ACTION_CONTEXTUAL_CARD_DISMISS + || mSettingsLogList.size() >= CACHE_LOG_THRESHOLD) { // Directly send this event to notify SI instantly that the card is dismissed mLogHandler.sendLog(); } else { From c5b8ae80ea76d764a2f6237bf6d716a0222f9f6c Mon Sep 17 00:00:00 2001 From: Chienyuan Date: Fri, 24 Dec 2021 17:42:54 +0800 Subject: [PATCH 3/5] Clear non bonded device when device picker start Bug: 205258325 Test: manual Change-Id: I3de46ef79bcf1f643e5cd762b95ad8056237e2c6 --- src/com/android/settings/bluetooth/DevicePickerFragment.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/com/android/settings/bluetooth/DevicePickerFragment.java b/src/com/android/settings/bluetooth/DevicePickerFragment.java index 602b79b2ae9..e8adac01e4f 100644 --- a/src/com/android/settings/bluetooth/DevicePickerFragment.java +++ b/src/com/android/settings/bluetooth/DevicePickerFragment.java @@ -107,6 +107,8 @@ public final class DevicePickerFragment extends DeviceListPreferenceFragment { @Override public void onStart() { super.onStart(); + mLocalManager.getCachedDeviceManager().clearNonBondedDevices(); + removeAllDevices(); addCachedDevices(); mSelectedDevice = null; if (mScanAllowed) { From ff1f09cacdd27b7c5ed3d0ce0ca5885eeb482d5e Mon Sep 17 00:00:00 2001 From: Stanley Wang Date: Fri, 24 Dec 2021 18:52:17 +0800 Subject: [PATCH 4/5] Fix the problem that the "Default USB configuration" item can not be searched. The source of problem is that the controller does not extends the PreferenceControllerMixin. Fix: 211831988 Test: robo test and see the search result Change-Id: I8bdc61bd567812ee484a959f2b058f315df9a3b3 --- .../DefaultUsbConfigurationPreferenceController.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/development/DefaultUsbConfigurationPreferenceController.java b/src/com/android/settings/development/DefaultUsbConfigurationPreferenceController.java index be7704fd735..87ca40fbbe2 100644 --- a/src/com/android/settings/development/DefaultUsbConfigurationPreferenceController.java +++ b/src/com/android/settings/development/DefaultUsbConfigurationPreferenceController.java @@ -24,11 +24,12 @@ import android.os.UserHandle; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; +import com.android.settings.core.PreferenceControllerMixin; import com.android.settingslib.RestrictedSwitchPreference; import com.android.settingslib.development.DeveloperOptionsPreferenceController; public class DefaultUsbConfigurationPreferenceController extends - DeveloperOptionsPreferenceController { + DeveloperOptionsPreferenceController implements PreferenceControllerMixin { private static final String PREFERENCE_KEY = "default_usb_configuration"; From 64620eb36b5e1f5c7a36ef6eab06883f113aeaac Mon Sep 17 00:00:00 2001 From: Stanley Wang Date: Thu, 22 Jul 2021 19:42:59 +0800 Subject: [PATCH 5/5] Add search keyword "always on display" to Always show time and info item. - Search for "always on display" and nothing appears. So we add the search keyword for this item. Fix: 194279416 Test: robotest and see the UI Change-Id: Ib7d8405f34674a06e3c2437444c3de4f2343f7f1 --- res/values/strings.xml | 3 +++ res/xml/security_lockscreen_settings.xml | 1 + 2 files changed, 4 insertions(+) diff --git a/res/values/strings.xml b/res/values/strings.xml index 19a81c4ccca..db7c7512a0b 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -8444,6 +8444,9 @@ text size, large print, large font, large text, low vision, make text bigger, font enlarger, font enlargement + + always on display + Default sound diff --git a/res/xml/security_lockscreen_settings.xml b/res/xml/security_lockscreen_settings.xml index d5d1cba6e0d..7ecf200c7ae 100644 --- a/res/xml/security_lockscreen_settings.xml +++ b/res/xml/security_lockscreen_settings.xml @@ -79,6 +79,7 @@ android:key="ambient_display_always_on" android:title="@string/doze_always_on_title" android:summary="@string/doze_always_on_summary" + settings:keywords="@string/keywords_always_show_time_info" settings:controller="com.android.settings.display.AmbientDisplayAlwaysOnPreferenceController" settings:userRestriction="no_ambient_display" />