diff options
10 files changed, 88 insertions, 100 deletions
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index 6c8be147528e..af50420208b3 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -106,7 +106,6 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.nio.charset.StandardCharsets; -import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; @@ -1062,7 +1061,7 @@ public class BatteryStatsImpl extends BatteryStats { // methods are protected not private to be VisibleForTesting public static class TimeBase { - protected final ArrayList<WeakReference<TimeBaseObs>> mObservers = new ArrayList<>(); + protected final ArrayList<TimeBaseObs> mObservers = new ArrayList<>(); protected long mUptime; protected long mRealtime; @@ -1106,24 +1105,17 @@ public class BatteryStatsImpl extends BatteryStats { } public void add(TimeBaseObs observer) { - mObservers.add(new WeakReference<TimeBaseObs>(observer)); + mObservers.add(observer); } public void remove(TimeBaseObs observer) { - if (!mObservers.removeIf(ref -> ref.get() == observer)) { - Slog.wtf(TAG, "Removed unknown observer: " + observer); - } + if (!mObservers.remove(observer)) { + Slog.wtf(TAG, "Removed unknown observer: " + observer); + } } public boolean hasObserver(TimeBaseObs observer) { - Iterator<WeakReference<TimeBaseObs>> i = mObservers.iterator(); - while (i.hasNext()) { - TimeBaseObs obs = i.next().get(); - if (obs == observer) { - return true; - } - } - return false; + return mObservers.contains(observer); } public void init(long uptime, long realtime) { @@ -1212,11 +1204,9 @@ public class BatteryStatsImpl extends BatteryStats { mRealtimeStart = realtime; long batteryUptime = mUnpluggedUptime = getUptime(uptime); long batteryRealtime = mUnpluggedRealtime = getRealtime(realtime); - for (WeakReference<TimeBaseObs> ref : mObservers) { - TimeBaseObs obs = ref.get(); - if (obs != null) { - obs.onTimeStarted(realtime, batteryUptime, batteryRealtime); - } + + for (int i = mObservers.size() - 1; i >= 0; i--) { + mObservers.get(i).onTimeStarted(realtime, batteryUptime, batteryRealtime); } } else { mPastUptime += uptime - mUptimeStart; @@ -1224,14 +1214,11 @@ public class BatteryStatsImpl extends BatteryStats { long batteryUptime = getUptime(uptime); long batteryRealtime = getRealtime(realtime); - for (WeakReference<TimeBaseObs> ref : mObservers) { - TimeBaseObs obs = ref.get(); - if (obs != null) { - obs.onTimeStopped(realtime, batteryUptime, batteryRealtime); - } + + for (int i = mObservers.size() - 1; i >= 0; i--) { + mObservers.get(i).onTimeStopped(realtime, batteryUptime, batteryRealtime); } } - mObservers.removeIf(ref -> ref.get() == null); return true; } return false; diff --git a/packages/PrintSpooler/res/values-night/themes.xml b/packages/PrintSpooler/res/values-night/themes.xml new file mode 100644 index 000000000000..4428dbbbaaae --- /dev/null +++ b/packages/PrintSpooler/res/values-night/themes.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2018 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> + +<resources> + <style name="Theme.AddPrinterActivity" parent="@android:style/Theme.DeviceDefault.Dialog"> + <item name="android:listSeparatorTextViewStyle">@style/ListSeparator</item> + <item name="android:textAppearanceListItemSecondary">@style/ListItemSecondary</item> + </style> + + <style name="Theme.SelectPrinterActivity" + parent="android:style/Theme.DeviceDefault"> + <item name="android:textAppearanceListItemSecondary">@style/ListItemSecondary</item> + </style> + + <style name="Theme.PrintActivity" parent="@android:style/Theme.DeviceDefault"> + <item name="android:windowIsTranslucent">true</item> + <item name="android:windowActionBar">false</item> + <item name="android:windowNoTitle">true</item> + </style> + +</resources> diff --git a/packages/SettingsLib/src/com/android/settingslib/drawer/CategoryManager.java b/packages/SettingsLib/src/com/android/settingslib/drawer/CategoryManager.java index 2bec1d740af2..95edc5e1e31f 100644 --- a/packages/SettingsLib/src/com/android/settingslib/drawer/CategoryManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/drawer/CategoryManager.java @@ -17,12 +17,13 @@ package com.android.settingslib.drawer; import android.content.ComponentName; import android.content.Context; -import androidx.annotation.VisibleForTesting; import android.util.ArrayMap; import android.util.ArraySet; import android.util.Log; import android.util.Pair; +import androidx.annotation.VisibleForTesting; + import com.android.settingslib.applications.InterestingConfigChanges; import java.util.ArrayList; @@ -32,10 +33,10 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; -import static java.lang.String.CASE_INSENSITIVE_ORDER; - public class CategoryManager { + public static final String SETTING_PKG = "com.android.settings"; + private static final String TAG = "CategoryManager"; private static CategoryManager sInstance; @@ -70,22 +71,13 @@ public class CategoryManager { } public synchronized DashboardCategory getTilesByCategory(Context context, String categoryKey) { - return getTilesByCategory(context, categoryKey, TileUtils.SETTING_PKG); - } - - public synchronized DashboardCategory getTilesByCategory(Context context, String categoryKey, - String settingPkg) { - tryInitCategories(context, settingPkg); + tryInitCategories(context, SETTING_PKG); return mCategoryByKeyMap.get(categoryKey); } public synchronized List<DashboardCategory> getCategories(Context context) { - return getCategories(context, TileUtils.SETTING_PKG); - } - - public synchronized List<DashboardCategory> getCategories(Context context, String settingPkg) { - tryInitCategories(context, settingPkg); + tryInitCategories(context, SETTING_PKG); return mCategories; } diff --git a/packages/SettingsLib/src/com/android/settingslib/drawer/Tile.java b/packages/SettingsLib/src/com/android/settingslib/drawer/Tile.java index b55d2ef59445..0c802af71a90 100644 --- a/packages/SettingsLib/src/com/android/settingslib/drawer/Tile.java +++ b/packages/SettingsLib/src/com/android/settingslib/drawer/Tile.java @@ -95,11 +95,6 @@ public class Tile implements Parcelable { */ public String key; - /** - * Optional remote view which will be displayed instead of the regular title-summary item. - */ - public RemoteViews remoteViews; - public Tile() { // Empty } @@ -135,7 +130,6 @@ public class Tile implements Parcelable { dest.writeInt(priority); dest.writeBundle(metaData); dest.writeString(key); - dest.writeParcelable(remoteViews, flags); dest.writeBoolean(isIconTintable); } @@ -157,7 +151,6 @@ public class Tile implements Parcelable { priority = in.readInt(); metaData = in.readBundle(); key = in.readString(); - remoteViews = in.readParcelable(RemoteViews.class.getClassLoader()); isIconTintable = in.readBoolean(); } diff --git a/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java b/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java index 76f24bca8d83..f54ba8c947b6 100644 --- a/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java +++ b/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java @@ -166,8 +166,6 @@ public class TileUtils { public static final String META_DATA_PREFERENCE_SUMMARY_URI = "com.android.settings.summary_uri"; - public static final String SETTING_PKG = "com.android.settings"; - /** * Value for {@link #META_DATA_KEY_PROFILE}. When the device has a managed profile, * the app will always be run in the primary profile. @@ -280,15 +278,6 @@ public class TileUtils { Context context, UserHandle user, Intent intent, Map<Pair<String, String>, Tile> addedCache, String defaultCategory, List<Tile> outTiles, boolean usePriority, boolean checkCategory, boolean forceTintExternalIcon) { - getTilesForIntent(context, user, intent, addedCache, defaultCategory, outTiles, - usePriority, checkCategory, forceTintExternalIcon, false /* shouldUpdateTiles */); - } - - public static void getTilesForIntent( - Context context, UserHandle user, Intent intent, - Map<Pair<String, String>, Tile> addedCache, String defaultCategory, List<Tile> outTiles, - boolean usePriority, boolean checkCategory, boolean forceTintExternalIcon, - boolean shouldUpdateTiles) { PackageManager pm = context.getPackageManager(); List<ResolveInfo> results = pm.queryIntentActivitiesAsUser(intent, PackageManager.GET_META_DATA, user.getIdentifier()); @@ -313,8 +302,7 @@ public class TileUtils { categoryKey = metaData.getString(EXTRA_CATEGORY_KEY); } - Pair<String, String> key = new Pair<String, String>(activityInfo.packageName, - activityInfo.name); + Pair<String, String> key = new Pair<>(activityInfo.packageName, activityInfo.name); Tile tile = addedCache.get(key); if (tile == null) { tile = new Tile(); @@ -327,8 +315,6 @@ public class TileUtils { pm, providerMap, forceTintExternalIcon); if (DEBUG) Log.d(LOG_TAG, "Adding tile " + tile.title); addedCache.put(key, tile); - } else if (shouldUpdateTiles) { - updateSummaryAndTitle(context, providerMap, tile); } if (!tile.userHandle.contains(user)) { @@ -435,26 +421,6 @@ public class TileUtils { return false; } - private static void updateSummaryAndTitle( - Context context, Map<String, IContentProvider> providerMap, Tile tile) { - if (tile == null || tile.metaData == null - || !tile.metaData.containsKey(META_DATA_PREFERENCE_SUMMARY_URI)) { - return; - } - - String uriString = tile.metaData.getString(META_DATA_PREFERENCE_SUMMARY_URI); - Bundle bundle = getBundleFromUri(context, uriString, providerMap); - String overrideSummary = getString(bundle, META_DATA_PREFERENCE_SUMMARY); - String overrideTitle = getString(bundle, META_DATA_PREFERENCE_TITLE); - if (overrideSummary != null) { - tile.remoteViews.setTextViewText(android.R.id.summary, overrideSummary); - } - - if (overrideTitle != null) { - tile.remoteViews.setTextViewText(android.R.id.title, overrideTitle); - } - } - /** * Gets the icon package name and resource id from content provider. * @param context context diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/CategoryKeyTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/CategoryKeyTest.java index 605c861fa07f..c495511d4eb0 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/CategoryKeyTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/CategoryKeyTest.java @@ -20,13 +20,15 @@ import static com.google.common.truth.Truth.assertThat; import android.util.ArraySet; +import com.android.settingslib.SettingsLibRobolectricTestRunner; + import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import java.util.Set; -@RunWith(RobolectricTestRunner.class) +@RunWith(SettingsLibRobolectricTestRunner.class) public class CategoryKeyTest { @Test diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileTest.java index 996a1223589c..5d352f08bedf 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileTest.java @@ -7,12 +7,15 @@ import static com.android.settingslib.drawer.TileUtils.PROFILE_ALL; import static com.android.settingslib.drawer.TileUtils.PROFILE_PRIMARY; import android.os.Bundle; + +import com.android.settingslib.SettingsLibRobolectricTestRunner; + import org.junit.Before; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.junit.Test; -@RunWith(RobolectricTestRunner.class) +@RunWith(SettingsLibRobolectricTestRunner.class) public class TileTest { private Tile mTile; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java index 9df43185fd1f..31621afc87c3 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java @@ -178,7 +178,7 @@ public class TileUtilsTest { .thenReturn(info); List<DashboardCategory> categoryList = TileUtils.getCategories( - mContext, cache, testAction, TileUtils.SETTING_PKG); + mContext, cache, testAction, CategoryManager.SETTING_PKG); assertThat(categoryList.get(0).getTile(0).category).isEqualTo(testCategory); } @@ -193,12 +193,12 @@ public class TileUtilsTest { userHandleList.add(new UserHandle(ActivityManager.getCurrentUser())); when(mUserManager.getUserProfiles()).thenReturn(userHandleList); - TileUtils.getCategories(mContext, cache, null /* action */, TileUtils.SETTING_PKG); + TileUtils.getCategories(mContext, cache, null /* action */, CategoryManager.SETTING_PKG); verify(mPackageManager, atLeastOnce()).queryIntentActivitiesAsUser( intentCaptor.capture(), anyInt(), anyInt()); assertThat(intentCaptor.getAllValues().get(0).getPackage()) - .isEqualTo(TileUtils.SETTING_PKG); + .isEqualTo(CategoryManager.SETTING_PKG); } @Test diff --git a/tests/testables/src/android/testing/TestableInstrumentation.java b/tests/testables/src/android/testing/TestableInstrumentation.java index 3207b486b329..c35dc68e071f 100644 --- a/tests/testables/src/android/testing/TestableInstrumentation.java +++ b/tests/testables/src/android/testing/TestableInstrumentation.java @@ -38,22 +38,26 @@ public class TestableInstrumentation extends AndroidJUnitRunner { @Override public void onCreate(Bundle arguments) { - sManager = new MainLooperManager(); - Log.setWtfHandler((tag, what, system) -> { - if (system) { - Log.e(TAG, "WTF!!", what); - } else { - // These normally kill the app, but we don't want that in a test, instead we want - // it to throw. - throw new RuntimeException(what); - } - }); + if (TestableLooper.HOLD_MAIN_THREAD) { + sManager = new MainLooperManager(); + Log.setWtfHandler((tag, what, system) -> { + if (system) { + Log.e(TAG, "WTF!!", what); + } else { + // These normally kill the app, but we don't want that in a test, instead we want + // it to throw. + throw new RuntimeException(what); + } + }); + } super.onCreate(arguments); } @Override public void finish(int resultCode, Bundle results) { - sManager.destroy(); + if (TestableLooper.HOLD_MAIN_THREAD) { + sManager.destroy(); + } super.finish(resultCode, results); } diff --git a/tests/testables/src/android/testing/TestableLooper.java b/tests/testables/src/android/testing/TestableLooper.java index f8d223ab91b6..8b4cba12b0e6 100644 --- a/tests/testables/src/android/testing/TestableLooper.java +++ b/tests/testables/src/android/testing/TestableLooper.java @@ -39,6 +39,12 @@ import java.util.Map; */ public class TestableLooper { + /** + * Whether to hold onto the main thread through all tests in an attempt to + * catch crashes. + */ + public static final boolean HOLD_MAIN_THREAD = false; + private Looper mLooper; private MessageQueue mQueue; private MessageHandler mMessageHandler; @@ -77,7 +83,7 @@ public class TestableLooper { */ public void destroy() { mQueueWrapper.release(); - if (mLooper == Looper.getMainLooper()) { + if (HOLD_MAIN_THREAD && mLooper == Looper.getMainLooper()) { TestableInstrumentation.releaseMain(); } } @@ -199,7 +205,7 @@ public class TestableLooper { } private static TestLooperManager acquireLooperManager(Looper l) { - if (l == Looper.getMainLooper()) { + if (HOLD_MAIN_THREAD && l == Looper.getMainLooper()) { TestableInstrumentation.acquireMain(); } return InstrumentationRegistry.getInstrumentation().acquireLooperManager(l); @@ -291,7 +297,7 @@ public class TestableLooper { if (set) { mTestableLooper.mQueueWrapper.release(); mTestableLooper.mQueueWrapper = null; - if (mLooper == Looper.getMainLooper()) { + if (HOLD_MAIN_THREAD && mLooper == Looper.getMainLooper()) { TestableInstrumentation.releaseMain(); } } |