From 2f4355aa66723ac40683030b111f083769803dc8 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Thu, 21 Jun 2018 15:34:43 -0700 Subject: [PATCH] Misc cleanup on AndroidManifest.xml - Add a few activities to widget list. These are more commonly used settings, so adding them to widget list for easier access. - Storage - System - About phone - Remove useless intent-filters from AndroidManifest. - If the intent-filter is just action MAIN and category DEFAULT, it doesn't do anything. Bug: 74806595 Test: visual Change-Id: I5d80bc6c88f7bf60adabac872e92b72b341b97e6 --- AndroidManifest.xml | 121 +++--------------- res/xml/device_admin_settings.xml | 10 +- .../DeviceAdminListPreferenceController.java | 8 +- .../LocaleDragAndDropAdapter.java | 4 +- .../settings/shortcut/CreateShortcut.java | 33 ----- .../shortcut/ShortcutsUpdateTask.java | 62 +++++++++ .../settings/shortcut/CreateShortcutTest.java | 51 +------- .../shortcut/ShortcutsUpdateTaskTest.java | 117 +++++++++++++++++ 8 files changed, 207 insertions(+), 199 deletions(-) create mode 100644 src/com/android/settings/shortcut/ShortcutsUpdateTask.java create mode 100644 tests/robotests/src/com/android/settings/shortcut/ShortcutsUpdateTaskTest.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 2c10b69bafa..d6fcf902026 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -261,10 +261,6 @@ - - - - @@ -302,10 +298,6 @@ - - - - + + + + + @@ -616,21 +613,14 @@ - - - - - - - - + android:clearTaskOnLaunch="true" + android:exported="true"> @@ -642,10 +632,6 @@ - - - - @@ -879,10 +865,6 @@ - - - - + @@ -1230,17 +1213,6 @@ - - - - - - - - - - - - - - - - @@ -1524,10 +1488,6 @@ - - - - + @@ -2093,10 +2054,6 @@ - - - - - - - - @@ -2148,10 +2101,6 @@ - - - - @@ -2254,10 +2203,6 @@ - - - - - - - - @@ -2352,10 +2293,6 @@ - - - - @@ -2422,10 +2359,6 @@ - - - - @@ -2494,10 +2427,6 @@ - - - - @@ -2511,10 +2440,6 @@ - - - - @@ -2559,10 +2484,6 @@ - - - - @@ -2651,10 +2572,6 @@ - - - - @@ -2662,10 +2579,6 @@ - - - - @@ -2678,10 +2591,6 @@ - - - - @@ -2776,10 +2685,6 @@ - - - - @@ -3078,6 +2983,10 @@ + + + + + + + + - - - - \ No newline at end of file + android:key="device_admin_settings" + settings:controller="com.android.settings.applications.specialaccess.deviceadmin.DeviceAdminListPreferenceController" /> \ No newline at end of file diff --git a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminListPreferenceController.java b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminListPreferenceController.java index 52d186b7622..2c94acc07e9 100644 --- a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminListPreferenceController.java +++ b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminListPreferenceController.java @@ -173,8 +173,12 @@ public class DeviceAdminListPreferenceController extends BasePreferenceControlle final Context prefContext = mPreferenceGroup.getContext(); final int childrenCount = mPreferenceGroup.getPreferenceCount(); for (int i = 0; i < childrenCount; i++) { - SwitchPreference pref = (SwitchPreference) mPreferenceGroup.getPreference(i); - preferenceCache.put(pref.getKey(), pref); + final Preference pref = mPreferenceGroup.getPreference(i); + if (!(pref instanceof SwitchPreference)) { + continue; + } + final SwitchPreference appSwitch = (SwitchPreference) pref; + preferenceCache.put(appSwitch.getKey(), appSwitch); } for (DeviceAdminListItem item : mAdmins) { final String key = item.getKey(); diff --git a/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java b/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java index 4fdbec2b80a..b59fe7832a1 100644 --- a/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java +++ b/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java @@ -32,7 +32,7 @@ import android.widget.CompoundButton; import com.android.internal.app.LocalePicker; import com.android.internal.app.LocaleStore; import com.android.settings.R; -import com.android.settings.shortcut.CreateShortcut; +import com.android.settings.shortcut.ShortcutsUpdateTask; import java.text.NumberFormat; import java.util.ArrayList; @@ -294,7 +294,7 @@ class LocaleDragAndDropAdapter LocalePicker.updateLocales(mLocalesToSetNext); mLocalesSetLast = mLocalesToSetNext; - new CreateShortcut.ShortcutsUpdateTask(mContext).execute(); + new ShortcutsUpdateTask(mContext).execute(); mLocalesToSetNext = null; diff --git a/src/com/android/settings/shortcut/CreateShortcut.java b/src/com/android/settings/shortcut/CreateShortcut.java index 953dfc0eb0c..15378fd6bc8 100644 --- a/src/com/android/settings/shortcut/CreateShortcut.java +++ b/src/com/android/settings/shortcut/CreateShortcut.java @@ -191,37 +191,4 @@ public class CreateShortcut extends LauncherActivity { return new Intent(Intent.ACTION_MAIN).addCategory("com.android.settings.SHORTCUT"); } - public static class ShortcutsUpdateTask extends AsyncTask { - - private final Context mContext; - - public ShortcutsUpdateTask(Context context) { - mContext = context; - } - - @Override - public Void doInBackground(Void... params) { - ShortcutManager sm = mContext.getSystemService(ShortcutManager.class); - PackageManager pm = mContext.getPackageManager(); - - List updates = new ArrayList<>(); - for (ShortcutInfo info : sm.getPinnedShortcuts()) { - if (!info.getId().startsWith(SHORTCUT_ID_PREFIX)) { - continue; - } - ComponentName cn = ComponentName.unflattenFromString( - info.getId().substring(SHORTCUT_ID_PREFIX.length())); - ResolveInfo ri = pm.resolveActivity(getBaseIntent().setComponent(cn), 0); - if (ri == null) { - continue; - } - updates.add(new ShortcutInfo.Builder(mContext, info.getId()) - .setShortLabel(ri.loadLabel(pm)).build()); - } - if (!updates.isEmpty()) { - sm.updateShortcuts(updates); - } - return null; - } - } } diff --git a/src/com/android/settings/shortcut/ShortcutsUpdateTask.java b/src/com/android/settings/shortcut/ShortcutsUpdateTask.java new file mode 100644 index 00000000000..5144fe11f10 --- /dev/null +++ b/src/com/android/settings/shortcut/ShortcutsUpdateTask.java @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.shortcut; + +import android.content.ComponentName; +import android.content.Context; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.content.pm.ShortcutInfo; +import android.content.pm.ShortcutManager; +import android.os.AsyncTask; + +import java.util.ArrayList; +import java.util.List; + +public class ShortcutsUpdateTask extends AsyncTask { + + private final Context mContext; + + public ShortcutsUpdateTask(Context context) { + mContext = context; + } + + @Override + public Void doInBackground(Void... params) { + ShortcutManager sm = mContext.getSystemService(ShortcutManager.class); + PackageManager pm = mContext.getPackageManager(); + + List updates = new ArrayList<>(); + for (ShortcutInfo info : sm.getPinnedShortcuts()) { + if (!info.getId().startsWith(CreateShortcut.SHORTCUT_ID_PREFIX)) { + continue; + } + ComponentName cn = ComponentName.unflattenFromString( + info.getId().substring(CreateShortcut.SHORTCUT_ID_PREFIX.length())); + ResolveInfo ri = pm.resolveActivity(CreateShortcut.getBaseIntent().setComponent(cn), 0); + if (ri == null) { + continue; + } + updates.add(new ShortcutInfo.Builder(mContext, info.getId()) + .setShortLabel(ri.loadLabel(pm)).build()); + } + if (!updates.isEmpty()) { + sm.updateShortcuts(updates); + } + return null; + } +} diff --git a/tests/robotests/src/com/android/settings/shortcut/CreateShortcutTest.java b/tests/robotests/src/com/android/settings/shortcut/CreateShortcutTest.java index c56819bef62..42190c712e2 100644 --- a/tests/robotests/src/com/android/settings/shortcut/CreateShortcutTest.java +++ b/tests/robotests/src/com/android/settings/shortcut/CreateShortcutTest.java @@ -16,22 +16,20 @@ package com.android.settings.shortcut; +import static com.android.settings.shortcut.CreateShortcut.SHORTCUT_ID_PREFIX; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.eq; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.pm.ShortcutInfo; import android.content.pm.ShortcutManager; @@ -44,7 +42,6 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; -import org.mockito.Captor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.Robolectric; @@ -63,16 +60,12 @@ import java.util.List; @Config(shadows = ShadowConnectivityManager.class) public class CreateShortcutTest { - private static final String SHORTCUT_ID_PREFIX = CreateShortcut.SHORTCUT_ID_PREFIX; - private Context mContext; private ShadowConnectivityManager mShadowConnectivityManager; private ShadowPackageManager mPackageManager; @Mock private ShortcutManager mShortcutManager; - @Captor - private ArgumentCaptor> mListCaptor; @Before public void setup() { @@ -107,40 +100,6 @@ public class CreateShortcutTest { .isEqualTo(SHORTCUT_ID_PREFIX + intent.getComponent().flattenToShortString()); } - @Test - public void shortcutsUpdateTask() { - mContext = spy(RuntimeEnvironment.application); - doReturn(mShortcutManager).when(mContext).getSystemService(eq(Context.SHORTCUT_SERVICE)); - final Intent shortcut1 = CreateShortcut.getBaseIntent().setComponent( - new ComponentName(mContext, Settings.ManageApplicationsActivity.class)); - final ResolveInfo ri1 = mock(ResolveInfo.class); - final Intent shortcut2 = CreateShortcut.getBaseIntent().setComponent( - new ComponentName(mContext, Settings.SoundSettingsActivity.class)); - final ResolveInfo ri2 = mock(ResolveInfo.class); - when(ri1.loadLabel(any(PackageManager.class))).thenReturn("label1"); - when(ri2.loadLabel(any(PackageManager.class))).thenReturn("label2"); - mPackageManager.addResolveInfoForIntent(shortcut1, ri1); - mPackageManager.addResolveInfoForIntent(shortcut2, ri2); - - final List pinnedShortcuts = Arrays.asList( - makeShortcut("d1"), - makeShortcut("d2"), - makeShortcut(Settings.ManageApplicationsActivity.class), - makeShortcut("d3"), - makeShortcut(Settings.SoundSettingsActivity.class)); - when(mShortcutManager.getPinnedShortcuts()).thenReturn(pinnedShortcuts); - - new CreateShortcut.ShortcutsUpdateTask(mContext).doInBackground(); - - verify(mShortcutManager, times(1)).updateShortcuts(mListCaptor.capture()); - - final List updates = mListCaptor.getValue(); - - assertThat(updates).hasSize(2); - assertThat(pinnedShortcuts.get(2).getId()).isEqualTo(updates.get(0).getId()); - assertThat(pinnedShortcuts.get(4).getId()).isEqualTo(updates.get(1).getId()); - } - @Test public void queryActivities_shouldOnlyIncludeSystemApp() { final ResolveInfo ri1 = new ResolveInfo(); @@ -165,14 +124,6 @@ public class CreateShortcutTest { assertThat(info.get(0)).isEqualTo(ri2); } - private ShortcutInfo makeShortcut(Class className) { - ComponentName cn = new ComponentName(mContext, className); - return makeShortcut(SHORTCUT_ID_PREFIX + cn.flattenToShortString()); - } - - private ShortcutInfo makeShortcut(String id) { - return new ShortcutInfo.Builder(mContext, id).build(); - } private static class TestClass extends CreateShortcut { } diff --git a/tests/robotests/src/com/android/settings/shortcut/ShortcutsUpdateTaskTest.java b/tests/robotests/src/com/android/settings/shortcut/ShortcutsUpdateTaskTest.java new file mode 100644 index 00000000000..9a1443973b8 --- /dev/null +++ b/tests/robotests/src/com/android/settings/shortcut/ShortcutsUpdateTaskTest.java @@ -0,0 +1,117 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.shortcut; + +import static com.android.settings.shortcut.CreateShortcut.SHORTCUT_ID_PREFIX; +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.content.pm.ShortcutInfo; +import android.content.pm.ShortcutManager; + +import com.android.settings.Settings; +import com.android.settings.testutils.SettingsRobolectricTestRunner; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.shadow.api.Shadow; +import org.robolectric.shadows.ShadowPackageManager; + +import java.util.Arrays; +import java.util.List; + +@RunWith(SettingsRobolectricTestRunner.class) +public class ShortcutsUpdateTaskTest { + + private Context mContext; + private ShadowPackageManager mPackageManager; + + @Mock + private ShortcutManager mShortcutManager; + @Captor + private ArgumentCaptor> mListCaptor; + + + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + mContext = RuntimeEnvironment.application; + mPackageManager = Shadow.extract(mContext.getPackageManager()); + } + + @Test + public void shortcutsUpdateTask() { + mContext = spy(RuntimeEnvironment.application); + doReturn(mShortcutManager).when(mContext).getSystemService(eq(Context.SHORTCUT_SERVICE)); + final Intent shortcut1 = CreateShortcut.getBaseIntent().setComponent( + new ComponentName(mContext, Settings.ManageApplicationsActivity.class)); + final ResolveInfo ri1 = mock(ResolveInfo.class); + final Intent shortcut2 = CreateShortcut.getBaseIntent().setComponent( + new ComponentName(mContext, Settings.SoundSettingsActivity.class)); + final ResolveInfo ri2 = mock(ResolveInfo.class); + when(ri1.loadLabel(any(PackageManager.class))).thenReturn("label1"); + when(ri2.loadLabel(any(PackageManager.class))).thenReturn("label2"); + mPackageManager.addResolveInfoForIntent(shortcut1, ri1); + mPackageManager.addResolveInfoForIntent(shortcut2, ri2); + + final List pinnedShortcuts = Arrays.asList( + makeShortcut("d1"), + makeShortcut("d2"), + makeShortcut(Settings.ManageApplicationsActivity.class), + makeShortcut("d3"), + makeShortcut(Settings.SoundSettingsActivity.class)); + when(mShortcutManager.getPinnedShortcuts()).thenReturn(pinnedShortcuts); + + new ShortcutsUpdateTask(mContext).doInBackground(); + + verify(mShortcutManager, times(1)).updateShortcuts(mListCaptor.capture()); + + final List updates = mListCaptor.getValue(); + + assertThat(updates).hasSize(2); + assertThat(pinnedShortcuts.get(2).getId()).isEqualTo(updates.get(0).getId()); + assertThat(pinnedShortcuts.get(4).getId()).isEqualTo(updates.get(1).getId()); + } + + private ShortcutInfo makeShortcut(Class className) { + ComponentName cn = new ComponentName(mContext, className); + return makeShortcut(SHORTCUT_ID_PREFIX + cn.flattenToShortString()); + } + + + private ShortcutInfo makeShortcut(String id) { + return new ShortcutInfo.Builder(mContext, id).build(); + } +}