From f6b047e79e8611480f5e26255d9837378f331993 Mon Sep 17 00:00:00 2001 From: Sebastian Franco Date: Thu, 17 Nov 2022 14:23:09 -0800 Subject: [PATCH 001/112] Fix issue where the solution is not updated when the grid is empty Test: Manually move widgets and shortcuts around and the position should match the animation Fix: 259502044 Change-Id: I20a98f9366394c840bb3cd0577de26a181a229ac (cherry picked from commit 02b4711e74d0d328f4fedb747cfd1541f86bdae7) Merged-In: I20a98f9366394c840bb3cd0577de26a181a229ac --- src/com/android/launcher3/Workspace.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index a8def69304..b3b066ffc8 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -2384,6 +2384,9 @@ protected void manageReorderOnDragOver(DragObject d, float targetCellDistance, ItemInfo item = d.dragInfo; final View child = (mDragInfo == null) ? null : mDragInfo.cell; if (!nearestDropOccupied) { + mDragTargetLayout.performReorder((int) mDragViewVisualCenter[0], + (int) mDragViewVisualCenter[1], minSpanX, minSpanY, item.spanX, item.spanY, + child, mTargetCell, new int[2], CellLayout.MODE_SHOW_REORDER_HINT); mDragTargetLayout.visualizeDropLocation(mTargetCell[0], mTargetCell[1], item.spanX, item.spanY, d); } else if ((mDragMode == DRAG_MODE_NONE || mDragMode == DRAG_MODE_REORDER) From 51531c130143908aac313b40529199f3d437be55 Mon Sep 17 00:00:00 2001 From: Sebastian Franco Date: Thu, 17 Nov 2022 14:23:09 -0800 Subject: [PATCH 002/112] Fix issue where the solution is not updated when the grid is empty Test: Manually move widgets and shortcuts around and the position should match the animation Fix: 259502044 Change-Id: I20a98f9366394c840bb3cd0577de26a181a229ac (cherry picked from commit 02b4711e74d0d328f4fedb747cfd1541f86bdae7) Merged-In: I20a98f9366394c840bb3cd0577de26a181a229ac --- src/com/android/launcher3/Workspace.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 517bbf835a..191d063f34 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -2385,6 +2385,9 @@ protected void manageReorderOnDragOver(DragObject d, float targetCellDistance, ItemInfo item = d.dragInfo; final View child = (mDragInfo == null) ? null : mDragInfo.cell; if (!nearestDropOccupied) { + mDragTargetLayout.performReorder((int) mDragViewVisualCenter[0], + (int) mDragViewVisualCenter[1], minSpanX, minSpanY, item.spanX, item.spanY, + child, mTargetCell, new int[2], CellLayout.MODE_SHOW_REORDER_HINT); mDragTargetLayout.visualizeDropLocation(mTargetCell[0], mTargetCell[1], item.spanX, item.spanY, d); } else if ((mDragMode == DRAG_MODE_NONE || mDragMode == DRAG_MODE_REORDER) From b10b38a4f728fc9daadd18b89a0f50358da1029c Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Wed, 11 Jan 2023 23:37:12 +0000 Subject: [PATCH 003/112] Disable Transient Taskbar This feature is not yet ready for release, keep the flag turned off for QPR2 Test: TaplTestsTaskbar; taskbar has already been released and tested with the flag off Bug: 265294859 Change-Id: Ie7c3e14061bae27c7bf3529e3e951218d5e1363c (cherry picked from commit 07d816e19bbc7cfb423d5039200f35fef8c05b77) Merged-In: Ie7c3e14061bae27c7bf3529e3e951218d5e1363c --- src/com/android/launcher3/config/FeatureFlags.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/android/launcher3/config/FeatureFlags.java b/src/com/android/launcher3/config/FeatureFlags.java index 082f6a1a95..e2d81997f8 100644 --- a/src/com/android/launcher3/config/FeatureFlags.java +++ b/src/com/android/launcher3/config/FeatureFlags.java @@ -343,7 +343,7 @@ public static boolean showFlagTogglerUi(Context context) { "Use a single page for the workspace"); public static final BooleanFlag ENABLE_TRANSIENT_TASKBAR = getDebugFlag( - "ENABLE_TRANSIENT_TASKBAR", true, "Enables transient taskbar."); + "ENABLE_TRANSIENT_TASKBAR", false, "Enables transient taskbar."); public static final BooleanFlag SECONDARY_DRAG_N_DROP_TO_PIN = getDebugFlag( "SECONDARY_DRAG_N_DROP_TO_PIN", false, From 6c5c183e4c156014bea4b8a222595b9be571b258 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Thu, 19 Jan 2023 21:59:07 +0000 Subject: [PATCH 004/112] Prevent falling into OtherActivityInputConsumer when over lockscreen - When opening the emergency dialer from the bouncer, there's a brief period where notificationPanelExpanded=false and occluded=false which currently means canStartSystemGesture=true and isKeyguardShowingOccluded=false, which falls through to other activity input consumer. In this state, we can't properly finish the gesture stream because Launcher never shows (it's behind the lockscreen) and the recents animation never finishes. Bug: 242704576 Test: atest NexusLauncherTests Change-Id: I7795abe0aebefca2d42998a672abfd12f951d501 (cherry picked from commit on googleplex-android-review.googlesource.com host: f6d75c98a94d173ae59afc9bd126d1e72d1b28fa) Merged-In: I7795abe0aebefca2d42998a672abfd12f951d501 --- .../src/com/android/quickstep/RecentsAnimationDeviceState.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java b/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java index 9e25555eec..d34153160d 100644 --- a/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java +++ b/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java @@ -43,6 +43,7 @@ import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_OVERVIEW_DISABLED; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_QUICK_SETTINGS_EXPANDED; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_SCREEN_PINNING; +import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED; import android.app.ActivityTaskManager; @@ -381,6 +382,7 @@ public boolean canStartSystemGesture() { || mRotationTouchHelper.isTaskListFrozen(); return canStartWithNavHidden && (mSystemUiStateFlags & SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED) == 0 + && (mSystemUiStateFlags & SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING) == 0 && (mSystemUiStateFlags & SYSUI_STATE_QUICK_SETTINGS_EXPANDED) == 0 && (mSystemUiStateFlags & SYSUI_STATE_MAGNIFICATION_OVERLAP) == 0 && ((mSystemUiStateFlags & SYSUI_STATE_HOME_DISABLED) == 0 From 3914bd49639c8f7e0f92f294eee9d3354281de33 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Thu, 19 Jan 2023 21:59:07 +0000 Subject: [PATCH 005/112] Prevent falling into OtherActivityInputConsumer when over lockscreen - When opening the emergency dialer from the bouncer, there's a brief period where notificationPanelExpanded=false and occluded=false which currently means canStartSystemGesture=true and isKeyguardShowingOccluded=false, which falls through to other activity input consumer. In this state, we can't properly finish the gesture stream because Launcher never shows (it's behind the lockscreen) and the recents animation never finishes. Bug: 242704576 Test: atest NexusLauncherTests Change-Id: I7795abe0aebefca2d42998a672abfd12f951d501 (cherry picked from commit on googleplex-android-review.googlesource.com host: f6d75c98a94d173ae59afc9bd126d1e72d1b28fa) Merged-In: I7795abe0aebefca2d42998a672abfd12f951d501 --- .../src/com/android/quickstep/RecentsAnimationDeviceState.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java b/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java index 9e25555eec..d34153160d 100644 --- a/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java +++ b/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java @@ -43,6 +43,7 @@ import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_OVERVIEW_DISABLED; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_QUICK_SETTINGS_EXPANDED; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_SCREEN_PINNING; +import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED; import android.app.ActivityTaskManager; @@ -381,6 +382,7 @@ public boolean canStartSystemGesture() { || mRotationTouchHelper.isTaskListFrozen(); return canStartWithNavHidden && (mSystemUiStateFlags & SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED) == 0 + && (mSystemUiStateFlags & SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING) == 0 && (mSystemUiStateFlags & SYSUI_STATE_QUICK_SETTINGS_EXPANDED) == 0 && (mSystemUiStateFlags & SYSUI_STATE_MAGNIFICATION_OVERLAP) == 0 && ((mSystemUiStateFlags & SYSUI_STATE_HOME_DISABLED) == 0 From 5182584a62f8a0f8993729b1ab79b18ce3199938 Mon Sep 17 00:00:00 2001 From: Chris Crump Date: Sun, 29 Sep 2019 21:17:44 -0400 Subject: [PATCH 006/112] Create Custom Launcher Change-Id: Iaba9d5b30ca8629c06c882549d731eecfce934f4 [kdrag0n: Debranded to com.android.launcher3] Signed-off-by: Danny Lin --- AndroidManifest.xml | 2 +- quickstep/AndroidManifest-launcher.xml | 2 +- .../com/android/launcher3/CustomLauncher.java | 23 +++++++++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 quickstep/src/com/android/launcher3/CustomLauncher.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 4f580e0bd6..0a58565182 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -44,7 +44,7 @@ attributes and intent filters the same --> Date: Tue, 6 Dec 2016 22:05:39 -0500 Subject: [PATCH 007/112] disable hard-wired QuickSearchBox widget Signed-off-by: Pranav --- src/com/android/launcher3/config/FeatureFlags.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/android/launcher3/config/FeatureFlags.java b/src/com/android/launcher3/config/FeatureFlags.java index e2d81997f8..70154cabc8 100644 --- a/src/com/android/launcher3/config/FeatureFlags.java +++ b/src/com/android/launcher3/config/FeatureFlags.java @@ -54,7 +54,7 @@ public static boolean showFlagTogglerUi(Context context) { * Enable moving the QSB on the 0th screen of the workspace. This is not a configuration feature * and should be modified at a project level. */ - public static final boolean QSB_ON_FIRST_SCREEN = BuildConfig.QSB_ON_FIRST_SCREEN; + public static final boolean QSB_ON_FIRST_SCREEN = false; /** * Feature flag to handle define config changes dynamically instead of killing the process. From c4e469ecaaa5f2bba81249ef9356bafb83d7493a Mon Sep 17 00:00:00 2001 From: Danny Lin Date: Mon, 11 Oct 2021 20:48:31 -0700 Subject: [PATCH 008/112] Enable crossfade when changing theme Change-Id: Id376cd3bfdd3b280cfca14c736bbd0f36174cdc2 Signed-off-by: Pranav --- src/com/android/launcher3/config/FeatureFlags.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/android/launcher3/config/FeatureFlags.java b/src/com/android/launcher3/config/FeatureFlags.java index 70154cabc8..7809790066 100644 --- a/src/com/android/launcher3/config/FeatureFlags.java +++ b/src/com/android/launcher3/config/FeatureFlags.java @@ -184,7 +184,7 @@ public static boolean showFlagTogglerUi(Context context) { // TODO: b/172467144 Remove ENABLE_LAUNCHER_ACTIVITY_THEME_CROSSFADE feature flag. public static final BooleanFlag ENABLE_LAUNCHER_ACTIVITY_THEME_CROSSFADE = new DeviceFlag( - "ENABLE_LAUNCHER_ACTIVITY_THEME_CROSSFADE", false, "Enables a " + "ENABLE_LAUNCHER_ACTIVITY_THEME_CROSSFADE", true, "Enables a " + "crossfade animation when the system these changes."); // TODO: b/174174514 Remove ENABLE_APP_PREDICTIONS_WHILE_VISIBLE feature flag. From 86108d92897f56fc9470bd8fa111a6575b60bac1 Mon Sep 17 00:00:00 2001 From: Danny Lin Date: Mon, 11 Oct 2021 20:48:44 -0700 Subject: [PATCH 009/112] Expose themed icon setting in ThemePicker Change-Id: I44e9288c3de13a3604b7a03857ec400753317d9a Signed-off-by: Pranav --- AndroidManifest.xml | 3 +++ quickstep/AndroidManifest-launcher.xml | 3 +++ 2 files changed, 6 insertions(+) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 0a58565182..8be9f7883a 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -67,6 +67,9 @@ + diff --git a/quickstep/AndroidManifest-launcher.xml b/quickstep/AndroidManifest-launcher.xml index 10a52d5f74..86cbe4dbaa 100644 --- a/quickstep/AndroidManifest-launcher.xml +++ b/quickstep/AndroidManifest-launcher.xml @@ -66,6 +66,9 @@ + From 7bcaf89c33354da6bb76022ac17d88552de5bd8c Mon Sep 17 00:00:00 2001 From: Luca Stefani Date: Fri, 1 Nov 2019 23:17:59 +0100 Subject: [PATCH 010/112] Properly expose GridCustomizationsProvider Change-Id: I8268a215257ae0e399c56ac8b44cdfdff8cc92a0 Signed-off-by: Pranav --- AndroidManifest-common.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/AndroidManifest-common.xml b/AndroidManifest-common.xml index 951be4e54e..49007bd00d 100644 --- a/AndroidManifest-common.xml +++ b/AndroidManifest-common.xml @@ -136,7 +136,9 @@ + android:exported="true" + android:writePermission="${packageName}.permission.WRITE_SETTINGS" + android:readPermission="${packageName}.permission.READ_SETTINGS" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/xml/device_profiles.xml b/res/xml/device_profiles.xml index c9a44a1be0..9b650713f9 100644 --- a/res/xml/device_profiles.xml +++ b/res/xml/device_profiles.xml @@ -17,6 +17,34 @@ + + + + + + + + - \ No newline at end of file + From 853456fc63fbf316f64e71e13536bc30efd2abcf Mon Sep 17 00:00:00 2001 From: Anay Wadhera Date: Sat, 10 Oct 2020 22:46:40 -0700 Subject: [PATCH 012/112] Launcher3: Google feed integration [Mocarafee]: Adapt getPrefs and change onScrollChanged into onOverlayScrollChanged for qpr2 Change-Id: I4dd635369513e7e8db8f8e4363acb017e0ce8eb1 [kdrag0n: Debranded to com.android.launcher3] [kdrag0n: Ported to Android 12 and converted libGoogleFeed to Soong] Signed-off-by: Danny Lin --- Android.bp | 10 +- libs/libGoogleFeed.jar | Bin 0 -> 50896 bytes .../com/android/launcher3/CustomLauncher.java | 6 + res/values/bianca_strings.xml | 32 +++ res/xml/launcher_preferences.xml | 6 + .../launcher3/OverlayCallbackImpl.java | 185 ++++++++++++++++++ .../launcher3/settings/SettingsActivity.java | 28 +++ 7 files changed, 266 insertions(+), 1 deletion(-) create mode 100644 libs/libGoogleFeed.jar create mode 100644 res/values/bianca_strings.xml create mode 100644 src/com/android/launcher3/OverlayCallbackImpl.java diff --git a/Android.bp b/Android.bp index 0bbb3d2c1e..9663ae4811 100644 --- a/Android.bp +++ b/Android.bp @@ -136,6 +136,13 @@ java_library { min_sdk_version: min_launcher3_sdk_version, } +java_import { + name: "libGoogleFeed", + jars: [ + "libs/libGoogleFeed.jar", + ], +} + // Library with all the dependencies for building Launcher3 android_library { name: "Launcher3ResLib", @@ -153,7 +160,8 @@ android_library { "androidx.cardview_cardview", "com.google.android.material_material", "iconloader_base", - "view_capture" + "view_capture", + "libGoogleFeed", ], manifest: "AndroidManifest-common.xml", sdk_version: "current", diff --git a/libs/libGoogleFeed.jar b/libs/libGoogleFeed.jar new file mode 100644 index 0000000000000000000000000000000000000000..158b76de405d8b549b1627b1df2ad40f038c1a7f GIT binary patch literal 50896 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 a!>5MHDb-H7ppsz + + + + + + Show Google App + + + When you swipe left from main Home screen + + + When you swipe right from main Home screen + @string/msg_minus_one_on_left + + diff --git a/res/xml/launcher_preferences.xml b/res/xml/launcher_preferences.xml index 8a0c909ed8..e8a10105bc 100644 --- a/res/xml/launcher_preferences.xml +++ b/res/xml/launcher_preferences.xml @@ -50,6 +50,12 @@ launcher:logIdOn="615" launcher:logIdOff="616" /> + + Implements {@link LauncherClientCallbacks} and sends all the corresponding callbacks to {@link + * Launcher}. + */ +public class OverlayCallbackImpl + implements LauncherOverlay, LauncherClientCallbacks, LauncherOverlayManager, + OnSharedPreferenceChangeListener { + + public static final String KEY_ENABLE_MINUS_ONE = "pref_enable_minus_one"; + + private final Launcher mLauncher; + private final LauncherClient mClient; + + private LauncherOverlayCallbacks mLauncherOverlayCallbacks; + private boolean mWasOverlayAttached = false; + + public OverlayCallbackImpl(Launcher launcher) { + SharedPreferences prefs = LauncherPrefs.getPrefs(launcher); + + mLauncher = launcher; + mClient = new LauncherClient(mLauncher, this, getClientOptions(prefs)); + prefs.registerOnSharedPreferenceChangeListener(this); + } + + @Override + public void onDeviceProvideChanged() { + mClient.reattachOverlay(); + } + + @Override + public void onAttachedToWindow() { + mClient.onAttachedToWindow(); + } + + @Override + public void onDetachedFromWindow() { + mClient.onDetachedFromWindow(); + } + + @Override + public void dump(String prefix, PrintWriter w) { + mClient.dump(prefix, w); + } + + @Override + public void openOverlay() { + mClient.showOverlay(true); + } + + @Override + public void hideOverlay(boolean animate) { + mClient.hideOverlay(animate); + } + + @Override + public void hideOverlay(int duration) { + mClient.hideOverlay(duration); + } + + @Override + public boolean startSearch(byte[] config, Bundle extras) { + return false; + } + + @Override + public void onActivityCreated(Activity activity, Bundle bundle) { + // Not called + } + + @Override + public void onActivityStarted(Activity activity) { + mClient.onStart(); + } + + @Override + public void onActivityResumed(Activity activity) { + mClient.onResume(); + } + + @Override + public void onActivityPaused(Activity activity) { + mClient.onPause(); + } + + @Override + public void onActivityStopped(Activity activity) { + mClient.onStop(); + } + + @Override + public void onActivitySaveInstanceState(Activity activity, Bundle bundle) { } + + @Override + public void onActivityDestroyed(Activity activity) { + mClient.onDestroy(); + mLauncher.getSharedPrefs().unregisterOnSharedPreferenceChangeListener(this); + } + + @Override + public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { + if (KEY_ENABLE_MINUS_ONE.equals(key)) { + mClient.setClientOptions(getClientOptions(prefs)); + } + } + + @Override + public void onServiceStateChanged(boolean overlayAttached, boolean hotwordActive) { + if (overlayAttached != mWasOverlayAttached) { + mWasOverlayAttached = overlayAttached; + mLauncher.setLauncherOverlay(overlayAttached ? this : null); + } + } + + @Override + public void onOverlayScrollChanged(float progress) { + if (mLauncherOverlayCallbacks != null) { + mLauncherOverlayCallbacks.onOverlayScrollChanged(progress); + } + } + + @Override + public void onScrollInteractionBegin() { + mClient.startMove(); + } + + @Override + public void onScrollInteractionEnd() { + mClient.endMove(); + } + + @Override + public void onScrollChange(float progress, boolean rtl) { + mClient.updateMove(progress); + } + + @Override + public void setOverlayCallbacks(LauncherOverlayCallbacks callbacks) { + mLauncherOverlayCallbacks = callbacks; + } + + + private LauncherClient.ClientOptions getClientOptions(SharedPreferences prefs) { + return new LauncherClient.ClientOptions( + prefs.getBoolean(KEY_ENABLE_MINUS_ONE, true), + true, /* enableHotword */ + true /* enablePrewarming */ + ); + } +} diff --git a/src/com/android/launcher3/settings/SettingsActivity.java b/src/com/android/launcher3/settings/SettingsActivity.java index 7ab3013da1..404194d435 100644 --- a/src/com/android/launcher3/settings/SettingsActivity.java +++ b/src/com/android/launcher3/settings/SettingsActivity.java @@ -21,8 +21,12 @@ import static com.android.launcher3.config.FeatureFlags.IS_STUDIO_BUILD; import static com.android.launcher3.states.RotationHelper.ALLOW_ROTATION_PREFERENCE_KEY; +import static com.android.launcher3.OverlayCallbackImpl.KEY_ENABLE_MINUS_ONE; + +import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.content.pm.PackageManager; import android.os.Bundle; import android.text.TextUtils; import android.view.MenuItem; @@ -193,6 +197,10 @@ public static class LauncherSettingsFragment extends PreferenceFragmentCompat { private boolean mPreferenceHighlighted = false; private Preference mDeveloperOptionPref; + protected static final String GSA_PACKAGE = "com.google.android.googlequicksearchbox"; + + private Preference mShowGoogleAppPref; + @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { final Bundle args = getArguments(); @@ -285,6 +293,11 @@ protected boolean initPreference(Preference preference) { case DEVELOPER_OPTIONS_KEY: mDeveloperOptionPref = preference; return updateDeveloperOption(); + + case KEY_ENABLE_MINUS_ONE: + mShowGoogleAppPref = preference; + updateIsGoogleAppEnabled(); + return true; } return true; @@ -308,6 +321,20 @@ private boolean updateDeveloperOption() { return showPreference; } + public static boolean isGSAEnabled(Context context) { + try { + return context.getPackageManager().getApplicationInfo(GSA_PACKAGE, 0).enabled; + } catch (PackageManager.NameNotFoundException e) { + return false; + } + } + + private void updateIsGoogleAppEnabled() { + if (mShowGoogleAppPref != null) { + mShowGoogleAppPref.setEnabled(isGSAEnabled(getContext())); + } + } + @Override public void onResume() { super.onResume(); @@ -323,6 +350,7 @@ public void onResume() { requestAccessibilityFocus(getListView()); } } + updateIsGoogleAppEnabled(); } private PreferenceHighlighter createHighlighter() { From 556735d48ac19886eccf2505c9b849e97c18ef7d Mon Sep 17 00:00:00 2001 From: Danny Lin Date: Mon, 11 Oct 2021 16:17:41 -0700 Subject: [PATCH 013/112] Allow changing feature flags on user builds This is already guarded by developer options. Change-Id: I90fe782bf916c0b31a16f2eb945643119ec0785b Signed-off-by: Pranav --- src/com/android/launcher3/config/FeatureFlags.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/com/android/launcher3/config/FeatureFlags.java b/src/com/android/launcher3/config/FeatureFlags.java index 7809790066..519733b074 100644 --- a/src/com/android/launcher3/config/FeatureFlags.java +++ b/src/com/android/launcher3/config/FeatureFlags.java @@ -42,7 +42,7 @@ private FeatureFlags() { } public static boolean showFlagTogglerUi(Context context) { - return Utilities.IS_DEBUG_DEVICE && Utilities.isDevelopersOptionsEnabled(context); + return Utilities.isDevelopersOptionsEnabled(context); } /** @@ -481,8 +481,6 @@ protected StringBuilder appendProps(StringBuilder src) { } private static BooleanFlag getDebugFlag(String key, boolean defaultValue, String description) { - return Utilities.IS_DEBUG_DEVICE - ? new DebugFlag(key, defaultValue, description) - : new BooleanFlag(key, defaultValue); + return new DebugFlag(key, defaultValue, description); } } From a3d548e6149d60ba6bba1372608bd4be039e2a34 Mon Sep 17 00:00:00 2001 From: dwardo Date: Tue, 7 Apr 2020 22:36:48 +0200 Subject: [PATCH 014/112] Launcher3: Add 5x6, 5x7 and 6x6 default workspaces Had a 5x6 grid (with 6 hotseat spots) on my fajita back in los 16.0 and wanted one on los 17.1 On my Shamu I used to have 6x6 (with 6 hotseat spots) 5x7 has 5 hotseat spots Includes: Author: Sam Mortimer Date: Sun May 16 21:26:44 2021 -0700 Trebuchet: Set 5x6 grid to 5 hotseat icons * 5x5 and 5x7 have hotseat icon count 5 (matches column count) * 5x6 currently has hotseat icon count set to 6 which does not look good with the column count of 5. * The original commit message shows this was intentional: https://review.lineageos.org/q/Ib8d5dcc70d386376755c0a57b009ced1b2ee0834 But a hotseat icon count of 5 for all of 5x5,5x6,5x7 looks more consistent. Change-Id: Ic55a258b8ef64d10b7440576af87d0e78d318cc3 Change-Id: Ib8d5dcc70d386376755c0a57b009ced1b2ee0834 Signed-off-by: Omkar Chandorkar Signed-off-by: Pranav --- res/values/bianca_strings.xml | 1 + res/xml/default_workspace_5x6.xml | 171 +++++++++++++++++++ res/xml/default_workspace_5x7.xml | 171 +++++++++++++++++++ res/xml/default_workspace_6x6.xml | 171 +++++++++++++++++++ res/xml/device_profiles.xml | 60 +++++++ src/com/android/launcher3/LauncherFiles.java | 6 + 6 files changed, 580 insertions(+) create mode 100644 res/xml/default_workspace_5x6.xml create mode 100644 res/xml/default_workspace_5x7.xml create mode 100644 res/xml/default_workspace_6x6.xml diff --git a/res/values/bianca_strings.xml b/res/values/bianca_strings.xml index eff12f2c0f..bc3daf0d5a 100644 --- a/res/values/bianca_strings.xml +++ b/res/values/bianca_strings.xml @@ -18,6 +18,7 @@ --> + Google Show Google App diff --git a/res/xml/default_workspace_5x6.xml b/res/xml/default_workspace_5x6.xml new file mode 100644 index 0000000000..7e3257d541 --- /dev/null +++ b/res/xml/default_workspace_5x6.xml @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/xml/default_workspace_5x7.xml b/res/xml/default_workspace_5x7.xml new file mode 100644 index 0000000000..fe2362f635 --- /dev/null +++ b/res/xml/default_workspace_5x7.xml @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/xml/default_workspace_6x6.xml b/res/xml/default_workspace_6x6.xml new file mode 100644 index 0000000000..f6ab9292db --- /dev/null +++ b/res/xml/default_workspace_6x6.xml @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/xml/device_profiles.xml b/res/xml/device_profiles.xml index 9b650713f9..81b42b4198 100644 --- a/res/xml/device_profiles.xml +++ b/res/xml/device_profiles.xml @@ -236,4 +236,64 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/com/android/launcher3/LauncherFiles.java b/src/com/android/launcher3/LauncherFiles.java index e59eac8dd2..50d33444bf 100644 --- a/src/com/android/launcher3/LauncherFiles.java +++ b/src/com/android/launcher3/LauncherFiles.java @@ -17,6 +17,9 @@ public class LauncherFiles { public static final String LAUNCHER_DB = "launcher.db"; public static final String LAUNCHER_6_BY_5_DB = "launcher_6_by_5.db"; + public static final String LAUNCHER_6_BY_6_DB = "launcher_6_by_6.db"; + public static final String LAUNCHER_5_BY_7_DB = "launcher_5_by_7.db"; + public static final String LAUNCHER_5_BY_6_DB = "launcher_5_by_6.db"; public static final String LAUNCHER_4_BY_5_DB = "launcher_4_by_5.db"; public static final String LAUNCHER_4_BY_4_DB = "launcher_4_by_4.db"; public static final String LAUNCHER_3_BY_3_DB = "launcher_3_by_3.db"; @@ -34,6 +37,9 @@ public class LauncherFiles { public static final List GRID_DB_FILES = Collections.unmodifiableList(Arrays.asList( LAUNCHER_DB, LAUNCHER_6_BY_5_DB, + LAUNCHER_6_BY_6_DB, + LAUNCHER_5_BY_7_DB, + LAUNCHER_5_BY_6_DB, LAUNCHER_4_BY_5_DB, LAUNCHER_4_BY_4_DB, LAUNCHER_3_BY_3_DB, From a894e53a627f3d643591f4e8d2c459be8ebddcea Mon Sep 17 00:00:00 2001 From: Fran Palmero Date: Tue, 25 Jan 2022 19:00:33 +0100 Subject: [PATCH 015/112] Launcher3: Add x8 workspaces * Added 5x8 workspaces, picked and renamed from default_workspace_5x7.xml * Added 6x8 workspaces, picked and renamed from default_workspace_6x6.xml Signed-off-by: Fran Palmero Signed-off-by: Pranav --- res/xml/default_workspace_5x8.xml | 171 +++++++++++++++++++ res/xml/default_workspace_6x8.xml | 171 +++++++++++++++++++ res/xml/device_profiles.xml | 40 +++++ src/com/android/launcher3/LauncherFiles.java | 8 +- 4 files changed, 388 insertions(+), 2 deletions(-) create mode 100644 res/xml/default_workspace_5x8.xml create mode 100644 res/xml/default_workspace_6x8.xml diff --git a/res/xml/default_workspace_5x8.xml b/res/xml/default_workspace_5x8.xml new file mode 100644 index 0000000000..fe2362f635 --- /dev/null +++ b/res/xml/default_workspace_5x8.xml @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/xml/default_workspace_6x8.xml b/res/xml/default_workspace_6x8.xml new file mode 100644 index 0000000000..f6ab9292db --- /dev/null +++ b/res/xml/default_workspace_6x8.xml @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/xml/device_profiles.xml b/res/xml/device_profiles.xml index 81b42b4198..29ccbc3ecc 100644 --- a/res/xml/device_profiles.xml +++ b/res/xml/device_profiles.xml @@ -276,6 +276,26 @@ + + + + + + + + + + + + diff --git a/src/com/android/launcher3/LauncherFiles.java b/src/com/android/launcher3/LauncherFiles.java index 50d33444bf..22724f3ec3 100644 --- a/src/com/android/launcher3/LauncherFiles.java +++ b/src/com/android/launcher3/LauncherFiles.java @@ -16,8 +16,10 @@ public class LauncherFiles { private static final String XML = ".xml"; public static final String LAUNCHER_DB = "launcher.db"; - public static final String LAUNCHER_6_BY_5_DB = "launcher_6_by_5.db"; + public static final String LAUNCHER_6_BY_8_DB = "launcher_6_by_8.db"; public static final String LAUNCHER_6_BY_6_DB = "launcher_6_by_6.db"; + public static final String LAUNCHER_6_BY_5_DB = "launcher_6_by_5.db"; + public static final String LAUNCHER_5_BY_8_DB = "launcher_5_by_8.db"; public static final String LAUNCHER_5_BY_7_DB = "launcher_5_by_7.db"; public static final String LAUNCHER_5_BY_6_DB = "launcher_5_by_6.db"; public static final String LAUNCHER_4_BY_5_DB = "launcher_4_by_5.db"; @@ -36,8 +38,10 @@ public class LauncherFiles { public static final List GRID_DB_FILES = Collections.unmodifiableList(Arrays.asList( LAUNCHER_DB, - LAUNCHER_6_BY_5_DB, + LAUNCHER_6_BY_8_DB, LAUNCHER_6_BY_6_DB, + LAUNCHER_6_BY_5_DB, + LAUNCHER_5_BY_8_DB, LAUNCHER_5_BY_7_DB, LAUNCHER_5_BY_6_DB, LAUNCHER_4_BY_5_DB, From 253c57f06f20fc8a6f703fad27894eb1adbbf315 Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Sat, 9 Nov 2019 22:58:39 +0000 Subject: [PATCH 016/112] Globally disable debug logging This also ensures that developer options stay hidden. Change-Id: I34f5ffb5815effc48bf18c2996d3b074b547472f Signed-off-by: Pranav --- src/com/android/launcher3/Utilities.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java index d7e84f0306..d76e5383cf 100644 --- a/src/com/android/launcher3/Utilities.java +++ b/src/com/android/launcher3/Utilities.java @@ -132,7 +132,6 @@ public final class Utilities { * add extra logging and not for changing the app behavior. */ public static final boolean IS_DEBUG_DEVICE = - Build.TYPE.toLowerCase(Locale.ROOT).contains("debug") || Build.TYPE.toLowerCase(Locale.ROOT).equals("eng"); /** From 36619d48eacc08b561cd12a197b196456ba4f912 Mon Sep 17 00:00:00 2001 From: Andrew Thomas Date: Sun, 13 Dec 2020 22:18:08 -0500 Subject: [PATCH 017/112] Launcher3: Edit Google feed strings to be inline with Pixels itz63c: pixelization goes brrr @gotenksIN edit: extend to msg_minus_one_on_right as well Change-Id: Icc1f5ae997ee3b210e3ed9f006151696e4ed4588 Signed-off-by: Pranav --- res/values/bianca_strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/res/values/bianca_strings.xml b/res/values/bianca_strings.xml index bc3daf0d5a..8ea9ea062a 100644 --- a/res/values/bianca_strings.xml +++ b/res/values/bianca_strings.xml @@ -21,13 +21,13 @@ Google - Show Google App + Swipe to access Google app - When you swipe left from main Home screen + From Home screen, swipe left to open Google app - When you swipe right from main Home screen + From Home screen, swipe right to open Google app @string/msg_minus_one_on_left From 413490fab17cba4f1fc093e9b783c5d2f81a3c85 Mon Sep 17 00:00:00 2001 From: Alexander Koskovich Date: Wed, 4 Nov 2020 16:51:30 -0700 Subject: [PATCH 018/112] Launcher3: Allow changing app suggestion settings. Change-Id: Ib077324ba6676a1b8e143b26c14bf0b6eb258d28 Signed-off-by: Pranav --- res/values/bianca_strings.xml | 3 +++ res/xml/launcher_preferences.xml | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/res/values/bianca_strings.xml b/res/values/bianca_strings.xml index 8ea9ea062a..69461b48b5 100644 --- a/res/values/bianca_strings.xml +++ b/res/values/bianca_strings.xml @@ -30,4 +30,7 @@ From Home screen, swipe right to open Google app @string/msg_minus_one_on_left + + Suggestions + For All Apps & Home screen suggestions diff --git a/res/xml/launcher_preferences.xml b/res/xml/launcher_preferences.xml index e8a10105bc..ef96036551 100644 --- a/res/xml/launcher_preferences.xml +++ b/res/xml/launcher_preferences.xml @@ -56,6 +56,14 @@ android:summary="@string/pref_show_google_now_summary" android:title="@string/title_show_google_app"/> + + + + Date: Fri, 10 Feb 2017 09:38:50 -0500 Subject: [PATCH 019/112] Launcher3: Double tap on home screen to turn off screen Change-Id: I554c005d5e523aca0842c78a353686e86af1a7f2 Signed-off-by: Adithya --- Android.bp | 1 + AndroidManifest-common.xml | 1 + .../launcher3/touch/WorkspaceTouchListener.java | 11 +++++++++++ 3 files changed, 13 insertions(+) diff --git a/Android.bp b/Android.bp index 9663ae4811..310f014401 100644 --- a/Android.bp +++ b/Android.bp @@ -375,6 +375,7 @@ android_app { platform_apis: true, min_sdk_version: "current", target_sdk_version: "current", + certificate: "platform", privileged: true, system_ext_specific: true, diff --git a/AndroidManifest-common.xml b/AndroidManifest-common.xml index 49007bd00d..83729d27b0 100644 --- a/AndroidManifest-common.xml +++ b/AndroidManifest-common.xml @@ -44,6 +44,7 @@ + Suggestions For All Apps & Home screen suggestions + + + Double tap to sleep + Double tap on empty space for power-off diff --git a/res/xml/launcher_preferences.xml b/res/xml/launcher_preferences.xml index ef96036551..4c96caab3b 100644 --- a/res/xml/launcher_preferences.xml +++ b/res/xml/launcher_preferences.xml @@ -64,6 +64,13 @@ + + mWorkspace; @@ -77,14 +81,17 @@ public class WorkspaceTouchListener extends GestureDetector.SimpleOnGestureListe private final GestureDetector mGestureDetector; + private final Context mContext; + public WorkspaceTouchListener(Launcher launcher, Workspace workspace) { mLauncher = launcher; mWorkspace = workspace; + mContext = workspace.getContext(); // Use twice the touch slop as we are looking for long press which is more // likely to cause movement. mTouchSlop = 2 * ViewConfiguration.get(launcher).getScaledTouchSlop(); - mPm = (PowerManager) workspace.getContext().getSystemService(Context.POWER_SERVICE); - mGestureDetector = new GestureDetector(workspace.getContext(), this); + mPm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); + mGestureDetector = new GestureDetector(mContext, this); } @Override @@ -218,7 +225,8 @@ private void maybeShowMenu() { @Override public boolean onDoubleTap(MotionEvent event) { - mPm.goToSleep(event.getEventTime()); + if (LauncherPrefs.getPrefs(mContext).getBoolean(SLEEP_GESTURE, true)) + mPm.goToSleep(event.getEventTime()); return true; } } From eec8cc7e61738a47282ee464be46ca2bd9dc2a97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timi=20Rautam=C3=A4ki?= Date: Sun, 7 Nov 2021 11:17:34 +0000 Subject: [PATCH 021/112] Launcher: Fix all apps view not dismissing The logic was reversed. All apps view should dissmiss on back key when the searchbox is focused but empty and clear when not empty. Change-Id: Id11c991dae6c159b986966f278f0c792993b6abd Signed-off-by: Pranav --- .../launcher3/allapps/search/AllAppsSearchBarController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/android/launcher3/allapps/search/AllAppsSearchBarController.java b/src/com/android/launcher3/allapps/search/AllAppsSearchBarController.java index 4427a49dab..f94658c404 100644 --- a/src/com/android/launcher3/allapps/search/AllAppsSearchBarController.java +++ b/src/com/android/launcher3/allapps/search/AllAppsSearchBarController.java @@ -132,7 +132,7 @@ public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { public boolean onBackKey() { // Only hide the search field if there is no query String query = Utilities.trim(mInput.getEditableText().toString()); - if (query.isEmpty()) { + if (!query.isEmpty()) { reset(); return true; } From 357f933fb594f9890c9d429df00379c8a5b74e3c Mon Sep 17 00:00:00 2001 From: Michael W Date: Sat, 27 Nov 2021 18:42:35 +0100 Subject: [PATCH 022/112] Launcher3: Don't show move layer when editing isn't allowed * When long clicking a widget, it behaves like you could move it just to immediately return to default state when moving the finger * Just don't react to long pressing a widget when editing is disallowed Change-Id: If5d8558c6311b569c7b21e8b4b6598f0dbdd3319 Signed-off-by: Pranav --- src/com/android/launcher3/widget/LauncherAppWidgetHostView.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/com/android/launcher3/widget/LauncherAppWidgetHostView.java b/src/com/android/launcher3/widget/LauncherAppWidgetHostView.java index bc3889fd26..e8773a993e 100644 --- a/src/com/android/launcher3/widget/LauncherAppWidgetHostView.java +++ b/src/com/android/launcher3/widget/LauncherAppWidgetHostView.java @@ -119,6 +119,7 @@ public void setColorResources(@Nullable SparseIntArray colors) { @Override public boolean onLongClick(View view) { + if (!Utilities.isWorkspaceEditAllowed(mLauncher.getApplicationContext())) return true; if (mIsScrollable) { DragLayer dragLayer = mLauncher.getDragLayer(); dragLayer.requestDisallowInterceptTouchEvent(false); From 6f947b35c9242b28c6f9bff0309db974a678924f Mon Sep 17 00:00:00 2001 From: Joey Date: Sun, 4 Feb 2018 11:36:32 +0100 Subject: [PATCH 023/112] Launcher3: allow disabling workspace edit [Mocarafee]: Adapt getPrefs for qpr2 Co-authored-by: Michael W Co-authored-by: Han Wang <416810799@qq.com> Change-Id: I503e19cbc512eac0e4a8c8bccc16a6ccc0e805da --- res/values/bianca_strings.xml | 6 ++++++ res/xml/launcher_preferences.xml | 8 ++++++++ src/com/android/launcher3/InvariantDeviceProfile.java | 2 ++ src/com/android/launcher3/Utilities.java | 7 +++++++ src/com/android/launcher3/dragndrop/DragController.java | 6 ++++++ .../android/launcher3/popup/PopupContainerWithArrow.java | 3 +++ src/com/android/launcher3/popup/SystemShortcut.java | 1 + src/com/android/launcher3/views/OptionsPopupView.java | 2 +- 8 files changed, 34 insertions(+), 1 deletion(-) diff --git a/res/values/bianca_strings.xml b/res/values/bianca_strings.xml index 5139c283c1..4e21fb4acf 100644 --- a/res/values/bianca_strings.xml +++ b/res/values/bianca_strings.xml @@ -37,4 +37,10 @@ Double tap to sleep Double tap on empty space for power-off + + + Lock layout + Icons and widgets can\'t be added, removed and moved on the homescreen + Icons and widgets can be added, removed and moved on the homescreen + It\'s not possible to add widgets to the home screen diff --git a/res/xml/launcher_preferences.xml b/res/xml/launcher_preferences.xml index 4c96caab3b..b5f9e164a8 100644 --- a/res/xml/launcher_preferences.xml +++ b/res/xml/launcher_preferences.xml @@ -18,6 +18,14 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:launcher="http://schemas.android.com/apk/res-auto"> + + getOptions(Launcher launcher) { resDrawable, IGNORE, OptionsPopupView::startWallpaperPicker)); - if (!WidgetsModel.GO_DISABLE_WIDGETS) { + if (!WidgetsModel.GO_DISABLE_WIDGETS && Utilities.isWorkspaceEditAllowed(launcher)) { options.add(new OptionItem(launcher, R.string.widget_button_text, R.drawable.ic_widget, From 2613ad894418b17b299d0ff140e9894bc33fb435 Mon Sep 17 00:00:00 2001 From: Joey Date: Wed, 10 Oct 2018 08:27:37 +0200 Subject: [PATCH 024/112] Launcher3: add toggle for desktop and drawer labels [Mocarafee]: Adapt getPrefs for qpr2 Co-authored-by: razorloves Co-authored-by: LuK1337 Change-Id: I98063b7adaf22029c4bfa50d2cac730f3612e121 --- res/values/bianca_strings.xml | 5 +++++ res/xml/launcher_preferences.xml | 12 +++++++++++ src/com/android/launcher3/BubbleTextView.java | 21 ++++++++++++++++++- .../launcher3/InvariantDeviceProfile.java | 21 +++++++++++++++++-- .../android/launcher3/folder/FolderIcon.java | 4 +++- 5 files changed, 59 insertions(+), 4 deletions(-) diff --git a/res/values/bianca_strings.xml b/res/values/bianca_strings.xml index 4e21fb4acf..151d35f2b1 100644 --- a/res/values/bianca_strings.xml +++ b/res/values/bianca_strings.xml @@ -43,4 +43,9 @@ Icons and widgets can\'t be added, removed and moved on the homescreen Icons and widgets can be added, removed and moved on the homescreen It\'s not possible to add widgets to the home screen + + + Show icon labels on desktop + Show icon labels in drawer + diff --git a/res/xml/launcher_preferences.xml b/res/xml/launcher_preferences.xml index b5f9e164a8..7335387eaa 100644 --- a/res/xml/launcher_preferences.xml +++ b/res/xml/launcher_preferences.xml @@ -85,4 +85,16 @@ android:title="@string/developer_options_title" android:fragment="com.android.launcher3.settings.DeveloperOptionsFragment"/> + + + + diff --git a/src/com/android/launcher3/BubbleTextView.java b/src/com/android/launcher3/BubbleTextView.java index 9f54f09bb6..73285f74df 100644 --- a/src/com/android/launcher3/BubbleTextView.java +++ b/src/com/android/launcher3/BubbleTextView.java @@ -16,6 +16,8 @@ package com.android.launcher3; +import static com.android.launcher3.InvariantDeviceProfile.KEY_SHOW_DESKTOP_LABELS; +import static com.android.launcher3.InvariantDeviceProfile.KEY_SHOW_DRAWER_LABELS; import static com.android.launcher3.config.FeatureFlags.ENABLE_ICON_LABEL_AUTO_SCALING; import static com.android.launcher3.graphics.PreloadIconDrawable.newPendingIcon; import static com.android.launcher3.icons.BitmapInfo.FLAG_NO_BADGE; @@ -26,6 +28,7 @@ import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.content.Context; +import android.content.SharedPreferences; import android.content.res.ColorStateList; import android.content.res.TypedArray; import android.graphics.Canvas; @@ -171,6 +174,8 @@ public void set(BubbleTextView bubbleTextView, Float alpha) { @ViewDebug.ExportedProperty(category = "launcher") private boolean mDisableRelayout = false; + private boolean mShouldShowLabel; + private HandlerRunnable mIconLoadRequest; private boolean mEnableIconUpdateAnimation = false; @@ -194,6 +199,8 @@ public BubbleTextView(Context context, AttributeSet attrs, int defStyle) { == View.LAYOUT_DIRECTION_RTL); DeviceProfile grid = mActivity.getDeviceProfile(); + SharedPreferences prefs = LauncherPrefs.getPrefs(context.getApplicationContext()); + mDisplay = a.getInteger(R.styleable.BubbleTextView_iconDisplay, DISPLAY_WORKSPACE); final int defaultIconSize; if (mDisplay == DISPLAY_WORKSPACE) { @@ -201,24 +208,30 @@ public BubbleTextView(Context context, AttributeSet attrs, int defStyle) { setCompoundDrawablePadding(grid.iconDrawablePaddingPx); defaultIconSize = grid.iconSizePx; setCenterVertically(grid.isScalableGrid); + mShouldShowLabel = prefs.getBoolean(KEY_SHOW_DESKTOP_LABELS, true); } else if (mDisplay == DISPLAY_ALL_APPS) { setTextSize(TypedValue.COMPLEX_UNIT_PX, grid.allAppsIconTextSizePx); setCompoundDrawablePadding(grid.allAppsIconDrawablePaddingPx); defaultIconSize = grid.allAppsIconSizePx; + mShouldShowLabel = prefs.getBoolean(KEY_SHOW_DRAWER_LABELS, true); } else if (mDisplay == DISPLAY_FOLDER) { setTextSize(TypedValue.COMPLEX_UNIT_PX, grid.folderChildTextSizePx); setCompoundDrawablePadding(grid.folderChildDrawablePaddingPx); defaultIconSize = grid.folderChildIconSizePx; + mShouldShowLabel = prefs.getBoolean(KEY_SHOW_DESKTOP_LABELS, true); } else if (mDisplay == DISPLAY_SEARCH_RESULT) { defaultIconSize = getResources().getDimensionPixelSize(R.dimen.search_row_icon_size); + mShouldShowLabel = prefs.getBoolean(KEY_SHOW_DESKTOP_LABELS, true); } else if (mDisplay == DISPLAY_SEARCH_RESULT_SMALL) { defaultIconSize = getResources().getDimensionPixelSize( R.dimen.search_row_small_icon_size); + mShouldShowLabel = prefs.getBoolean(KEY_SHOW_DESKTOP_LABELS, true); } else if (mDisplay == DISPLAY_TASKBAR) { defaultIconSize = grid.iconSizePx; } else { // widget_selection or shortcut_popup defaultIconSize = grid.iconSizePx; + mShouldShowLabel = prefs.getBoolean(KEY_SHOW_DESKTOP_LABELS, true); } mCenterVertically = a.getBoolean(R.styleable.BubbleTextView_centerVertically, false); @@ -383,7 +396,9 @@ protected void applyIconAndLabel(ItemInfoWithIcon info) { @UiThread private void applyLabel(ItemInfoWithIcon info) { - setText(info.title); + if (mShouldShowLabel) { + setText(info.title); + } if (info.contentDescription != null) { setContentDescription(info.isDisabled() ? getContext().getString(R.string.disabled_app_label, info.contentDescription) @@ -658,6 +673,10 @@ public void setTextColor(ColorStateList colors) { } } + public boolean shouldShowLabel() { + return mShouldShowLabel; + } + public boolean shouldTextBeVisible() { // Text should be visible everywhere but the hotseat. Object tag = getParent() instanceof FolderIcon ? ((View) getParent()).getTag() : getTag(); diff --git a/src/com/android/launcher3/InvariantDeviceProfile.java b/src/com/android/launcher3/InvariantDeviceProfile.java index a48e3c5a4f..0ac8d1a170 100644 --- a/src/com/android/launcher3/InvariantDeviceProfile.java +++ b/src/com/android/launcher3/InvariantDeviceProfile.java @@ -29,6 +29,8 @@ import android.appwidget.AppWidgetHostView; import android.content.ComponentName; import android.content.Context; +import android.content.SharedPreferences; +import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.TypedArray; @@ -78,7 +80,7 @@ import java.util.Collections; import java.util.List; -public class InvariantDeviceProfile { +public class InvariantDeviceProfile implements OnSharedPreferenceChangeListener { public static final String TAG = "IDP"; // We do not need any synchronization for this variable as its only written on UI thread. @@ -97,6 +99,8 @@ public class InvariantDeviceProfile { private static final float ICON_SIZE_DEFINED_IN_APP_DP = 48; + public static final String KEY_SHOW_DESKTOP_LABELS = "pref_desktop_show_labels"; + public static final String KEY_SHOW_DRAWER_LABELS = "pref_drawer_show_labels"; public static final String KEY_WORKSPACE_LOCK = "pref_workspace_lock"; // Constants that affects the interpolation curve between statically defined device profile @@ -196,6 +200,8 @@ public class InvariantDeviceProfile { public Point defaultWallpaperSize; public Rect defaultWidgetPadding; + private Context mContext; + private final ArrayList mChangeListeners = new ArrayList<>(); @VisibleForTesting @@ -203,10 +209,14 @@ public InvariantDeviceProfile() { } @TargetApi(23) private InvariantDeviceProfile(Context context) { + mContext = context; + + SharedPreferences prefs = LauncherPrefs.getPrefs(context); + prefs.registerOnSharedPreferenceChangeListener(this); String gridName = getCurrentGridName(context); String newGridName = initGrid(context, gridName); if (!newGridName.equals(gridName)) { - LauncherPrefs.getPrefs(context).edit().putString(KEY_IDP_GRID_NAME, newGridName) + prefs.edit().putString(KEY_IDP_GRID_NAME, newGridName) .apply(); Log.d("b/258560494", "InvariantDeviceProfile - setting newGridName: " + newGridName + ", gridName: " + gridName); @@ -316,6 +326,13 @@ public void reinitializeAfterRestore(Context context) { } } + @Override + public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { + if (KEY_SHOW_DESKTOP_LABELS.equals(key) || KEY_SHOW_DRAWER_LABELS.equals(key)) { + onConfigChanged(mContext); + } + } + public static String getCurrentGridName(Context context) { return LauncherPrefs.getPrefs(context).getString(KEY_IDP_GRID_NAME, null); } diff --git a/src/com/android/launcher3/folder/FolderIcon.java b/src/com/android/launcher3/folder/FolderIcon.java index dd00f07807..d7226a63e3 100644 --- a/src/com/android/launcher3/folder/FolderIcon.java +++ b/src/com/android/launcher3/folder/FolderIcon.java @@ -197,7 +197,9 @@ public static FolderIcon inflateIcon(int resId, ActivityContext activity, ViewGr icon.setClipToPadding(false); icon.mFolderName = icon.findViewById(R.id.folder_icon_name); - icon.mFolderName.setText(folderInfo.title); + if (icon.mFolderName.shouldShowLabel()) { + icon.mFolderName.setText(folderInfo.title); + } icon.mFolderName.setCompoundDrawablePadding(0); FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) icon.mFolderName.getLayoutParams(); lp.topMargin = grid.iconSizePx + grid.iconDrawablePaddingPx; From a2a36e509866ea904480a9433b82c5d52101493a Mon Sep 17 00:00:00 2001 From: Nebojsa Cvetkovic Date: Fri, 10 Nov 2017 16:20:37 +0100 Subject: [PATCH 025/112] Workspace: Allow resizing any widget [BadDaemon: Adapt for S] [PA: Adapted for T D1] Change-Id: Iba122eb45d4ba81e53267ff341addfe281cf02fe Signed-off-by: Joey Rizzoli --- .../launcher3/AppWidgetResizeFrame.java | 28 +++---------------- src/com/android/launcher3/Workspace.java | 3 +- 2 files changed, 5 insertions(+), 26 deletions(-) diff --git a/src/com/android/launcher3/AppWidgetResizeFrame.java b/src/com/android/launcher3/AppWidgetResizeFrame.java index 76a91c0029..0149dcb0f7 100644 --- a/src/com/android/launcher3/AppWidgetResizeFrame.java +++ b/src/com/android/launcher3/AppWidgetResizeFrame.java @@ -15,7 +15,6 @@ import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.animation.PropertyValuesHolder; -import android.appwidget.AppWidgetProviderInfo; import android.content.Context; import android.graphics.Rect; import android.graphics.drawable.Drawable; @@ -220,23 +219,6 @@ private void setupForWidget(LauncherAppWidgetHostView widgetView, CellLayout cel mWidgetPadding = getDefaultPaddingForWidget(getContext(), widgetView.getAppWidgetInfo().provider, null); - // Only show resize handles for the directions in which resizing is possible. - InvariantDeviceProfile idp = LauncherAppState.getIDP(cellLayout.getContext()); - mVerticalResizeActive = (info.resizeMode & AppWidgetProviderInfo.RESIZE_VERTICAL) != 0 - && mMinVSpan < idp.numRows && mMaxVSpan > 1 - && mMinVSpan < mMaxVSpan; - if (!mVerticalResizeActive) { - mDragHandles[INDEX_TOP].setVisibility(GONE); - mDragHandles[INDEX_BOTTOM].setVisibility(GONE); - } - mHorizontalResizeActive = (info.resizeMode & AppWidgetProviderInfo.RESIZE_HORIZONTAL) != 0 - && mMinHSpan < idp.numColumns && mMaxHSpan > 1 - && mMinHSpan < mMaxHSpan; - if (!mHorizontalResizeActive) { - mDragHandles[INDEX_LEFT].setVisibility(GONE); - mDragHandles[INDEX_RIGHT].setVisibility(GONE); - } - mReconfigureButton = (ImageButton) findViewById(R.id.widget_reconfigure_button); if (info.isReconfigurable()) { mReconfigureButton.setVisibility(VISIBLE); @@ -289,12 +271,10 @@ private void setupForWidget(LauncherAppWidgetHostView widgetView, CellLayout cel } public boolean beginResizeIfPointInRegion(int x, int y) { - mLeftBorderActive = (x < mTouchTargetWidth) && mHorizontalResizeActive; - mRightBorderActive = (x > getWidth() - mTouchTargetWidth) && mHorizontalResizeActive; - mTopBorderActive = (y < mTouchTargetWidth + mTopTouchRegionAdjustment) - && mVerticalResizeActive; - mBottomBorderActive = (y > getHeight() - mTouchTargetWidth + mBottomTouchRegionAdjustment) - && mVerticalResizeActive; + mLeftBorderActive = x < mTouchTargetWidth; + mRightBorderActive = x > getWidth() - mTouchTargetWidth; + mTopBorderActive = y < mTouchTargetWidth + mTopTouchRegionAdjustment; + mBottomBorderActive = y > getHeight() - mTouchTargetWidth + mBottomTouchRegionAdjustment; boolean anyBordersActive = mLeftBorderActive || mRightBorderActive || mTopBorderActive || mBottomBorderActive; diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 483309d1cf..4640b19a24 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -2105,8 +2105,7 @@ public void onDrop(final DragObject d, DragOptions options) { private Runnable getWidgetResizeFrameRunnable(DragOptions options, LauncherAppWidgetHostView hostView, CellLayout cellLayout) { AppWidgetProviderInfo pInfo = hostView.getAppWidgetInfo(); - if (pInfo != null && pInfo.resizeMode != AppWidgetProviderInfo.RESIZE_NONE - && !options.isAccessibleDrag) { + if (pInfo != null && !options.isAccessibleDrag) { return () -> { if (!isPageInTransition()) { AppWidgetResizeFrame.showForWidget(hostView, cellLayout); From 7466d6680e72360571038d6594c93d4f029fc7ce Mon Sep 17 00:00:00 2001 From: Ido Ben-Hur Date: Fri, 24 Dec 2021 20:48:09 +0200 Subject: [PATCH 026/112] IconPlatte: Don't crash when the app gives us an invalid color For notification background. Telegram does it for example. Just assume contrast is fine in this case. Log: E AndroidRuntime: FATAL EXCEPTION: main E AndroidRuntime: Process: com.android.launcher3, PID: 2885 E AndroidRuntime: java.lang.IllegalArgumentException: background can not be translucent: #0 E AndroidRuntime: at androidx.core.graphics.ColorUtils.calculateContrast(ColorUtils.java:161) E AndroidRuntime: at com.android.launcher3.graphics.IconPalette.findContrastColor(IconPalette.java:126) E AndroidRuntime: at com.android.launcher3.graphics.IconPalette.ensureTextContrast(IconPalette.java:112) E AndroidRuntime: at com.android.launcher3.graphics.IconPalette.resolveContrastColor(IconPalette.java:71) E AndroidRuntime: at com.android.launcher3.notification.NotificationInfo.getIconForBackground(NotificationInfo.java:124) E AndroidRuntime: at com.android.launcher3.notification.NotificationMainView.applyNotificationInfo(NotificationMainView.java:207) E AndroidRuntime: at com.android.launcher3.notification.NotificationContainer.applyNotificationInfos(NotificationContainer.java:156) E AndroidRuntime: at com.android.launcher3.popup.PopupContainerWithArrow.applyNotificationInfos(PopupContainerWithArrow.java:353) E AndroidRuntime: at com.android.launcher3.popup.PopupPopulator.lambda$createUpdateRunnable$1(PopupPopulator.java:150) E AndroidRuntime: at com.android.launcher3.popup.PopupPopulator$$ExternalSyntheticLambda0.run(Unknown Source:4) ... Signed-off-by: Pranav --- src/com/android/launcher3/graphics/IconPalette.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/com/android/launcher3/graphics/IconPalette.java b/src/com/android/launcher3/graphics/IconPalette.java index 778b32a863..bbad36d3e9 100644 --- a/src/com/android/launcher3/graphics/IconPalette.java +++ b/src/com/android/launcher3/graphics/IconPalette.java @@ -26,6 +26,8 @@ import com.android.launcher3.R; import com.android.launcher3.util.Themes; +import java.lang.IllegalArgumentException; + /** * Contains colors based on the dominant color of an icon. */ @@ -107,7 +109,15 @@ private static String contrastChange(int colorOld, int colorNew, int bg) { * This was copied from com.android.internal.util.NotificationColorUtil. */ private static int ensureTextContrast(int color, int bg) { - return findContrastColor(color, bg, 4.5); + int res = color; + try { + res = findContrastColor(color, bg, 4.5); + } catch (IllegalArgumentException e) { + // Just returning the same color in this case + Log.e(TAG, "ensureTextContrast: Invalid fg/bg color int." + + " fg=" + color + " bg=" + bg); + } + return res; } /** * Finds a suitable color such that there's enough contrast. From c2bf95a1192d7c6b6b19ce92a38919e143b58f30 Mon Sep 17 00:00:00 2001 From: Adithya R Date: Mon, 1 Nov 2021 01:44:45 +0530 Subject: [PATCH 027/112] Launcher3: Adapt home settings UI to Android 12 style Change-Id: If9c5308c2ea7d8bdc7b677af51bf150ad8ef9203 Signed-off-by: Omkar Chandorkar Signed-off-by: Pranav --- Android.bp | 1 + AndroidManifest-common.xml | 2 ++ res/layout/settings_activity.xml | 9 +-------- res/values/dimens.xml | 2 +- res/xml/launcher_preferences.xml | 6 +++--- .../android/launcher3/settings/SettingsActivity.java | 10 ++++------ 6 files changed, 12 insertions(+), 18 deletions(-) diff --git a/Android.bp b/Android.bp index 310f014401..1de3c1a0d8 100644 --- a/Android.bp +++ b/Android.bp @@ -162,6 +162,7 @@ android_library { "iconloader_base", "view_capture", "libGoogleFeed", + "SettingsLib", ], manifest: "AndroidManifest-common.xml", sdk_version: "current", diff --git a/AndroidManifest-common.xml b/AndroidManifest-common.xml index 83729d27b0..0cfde4b698 100644 --- a/AndroidManifest-common.xml +++ b/AndroidManifest-common.xml @@ -31,6 +31,8 @@ with some minor changed based on the derivative app. --> + + diff --git a/res/layout/settings_activity.xml b/res/layout/settings_activity.xml index 5edd2df3f5..912b87d6ff 100644 --- a/res/layout/settings_activity.xml +++ b/res/layout/settings_activity.xml @@ -21,15 +21,8 @@ android:orientation="vertical" android:fitsSystemWindows="true"> - - - \ No newline at end of file + diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 4d2e1b7c6d..c91948b177 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -348,7 +348,7 @@ 504dp - 10dp + 20dp 8dp diff --git a/res/xml/launcher_preferences.xml b/res/xml/launcher_preferences.xml index 7335387eaa..5e7a426ecb 100644 --- a/res/xml/launcher_preferences.xml +++ b/res/xml/launcher_preferences.xml @@ -64,13 +64,13 @@ android:summary="@string/pref_show_google_now_summary" android:title="@string/title_show_google_app"/> - - + - Date: Mon, 18 Oct 2021 12:06:07 +0700 Subject: [PATCH 028/112] Launcher3: Add Google Lens scan button to recents And a squash of: Launcher3: Restart launcher on changing google search/lens app Launcher3: Make lens available without lens package * Google search package is capable of lens functionality. Who knew? :) idoybh (YAAP): Keep clear all rightmost [Mocarafee]: Import PackageInfo & PackageManager since it removed on qpr2 https://github.com/BiancaProject/android_packages_apps_Launcher3/commit/47d4d81b4f4dcc604716306745756df4bee35a7b#diff-429a8553e34dd5ae974cf11266a338ac9b66b56d6aa686638a876f2542e4b123 Co-authored-by: Pranav Vashi Co-authored-by: hundeva Signed-off-by: Pranav --- .gitignore | 1 + quickstep/res/drawable/ic_lens.xml | 5 +++ .../res/layout/overview_actions_container.xml | 17 ++++++++++ .../android/quickstep/ImageActionsApi.java | 6 ++++ .../android/quickstep/TaskOverlayFactory.java | 10 ++++++ .../quickstep/util/ImageActionUtils.java | 32 +++++++++++++++++++ .../quickstep/views/OverviewActionsView.java | 10 ++++++ res/values/bianca_strings.xml | 3 ++ src/com/android/launcher3/Utilities.java | 26 +++++++++++++++ .../launcher3/model/PackageUpdatedTask.java | 21 ++++++++++++ 10 files changed, 131 insertions(+) create mode 100644 quickstep/res/drawable/ic_lens.xml diff --git a/.gitignore b/.gitignore index 694b40c7ef..85bd93af17 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ gradle/ build/ gradlew* .DS_Store +.settings diff --git a/quickstep/res/drawable/ic_lens.xml b/quickstep/res/drawable/ic_lens.xml new file mode 100644 index 0000000000..e372e83526 --- /dev/null +++ b/quickstep/res/drawable/ic_lens.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/quickstep/res/layout/overview_actions_container.xml b/quickstep/res/layout/overview_actions_container.xml index 0fda0bf8d4..f13e139cc9 100644 --- a/quickstep/res/layout/overview_actions_container.xml +++ b/quickstep/res/layout/overview_actions_container.xml @@ -60,6 +60,23 @@ android:layout_height="1dp" android:layout_weight="1" /> +