Integrate Receiver for QSB visibility
Updated Launcher with QsbReceiver to adjust search bar
visibility based on Settings search bar toggle.
Issue: FP3-A13#366
Issue: FP4-A14#151
Change-Id: Ic4f907726f404d1f99d1d38dc18713baf0f58fa5
Depends-On: I5dbe4c46d8687741c30a5d79e75a9191a6981bee
(cherry picked from commit 3da9937cf41cc0c85af258b893316b725021b3a2)
(cherry picked from commit 0bf826f0eef6597ae79d78b033cca0b3cbf1f076)
(cherry picked from commit e0255c96fd8b34a743903f0dfc60113e374c3dc2)
(cherry picked from commit f18436992d14f476428924429507f13ba67d8c75)
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 7da16c0..51d4a59 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -81,6 +81,8 @@
import android.content.Context;
import android.content.Intent;
import android.content.IntentSender;
+import android.content.IntentFilter;
+import android.content.BroadcastReceiver;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
@@ -333,6 +335,8 @@
private DropTargetBar mDropTargetBar;
+ private QsbReceiver qsbReceiver;
+
// Main container view for the all apps screen.
@Thunk
ActivityAllAppsContainerView<Launcher> mAppsView;
@@ -394,6 +398,7 @@
private boolean mTouchInProgress;
private SafeCloseable mUserChangedCallbackCloseable;
+ public static boolean GSB_ON_HOME_SCREEN = true;
// New InstanceId is assigned to mAllAppsSessionLogId for each AllApps sessions.
// When Launcher is not in AllApps state mAllAppsSessionLogId will be null.
@@ -476,6 +481,13 @@
LauncherAppState app = LauncherAppState.getInstance(this);
mModel = app.getModel();
+ qsbReceiver = new QsbReceiver();
+ registerReceiver();
+
+ // Initialize the search bar state from SharedPreferences
+ SharedPreferences sharedPreferences = getSharedPreferences("QsbPrefs", Context.MODE_PRIVATE);
+ GSB_ON_HOME_SCREEN = sharedPreferences.getBoolean(QsbReceiver.KEY_SEARCH_BAR, true);
+
mRotationHelper = new RotationHelper(this);
InvariantDeviceProfile idp = app.getInvariantDeviceProfile();
initDeviceProfile(idp);
@@ -2363,7 +2375,7 @@
int count = orderedScreenIds.size();
for (int i = 0; i < count; i++) {
int screenId = orderedScreenIds.get(i);
- if (FeatureFlags.QSB_ON_FIRST_SCREEN && screenId == Workspace.FIRST_SCREEN_ID) {
+ if (FeatureFlags.QSB_ON_FIRST_SCREEN && Launcher.GSB_ON_HOME_SCREEN && screenId == Workspace.FIRST_SCREEN_ID) {
// No need to bind the first screen, as its always bound.
continue;
}
@@ -3353,6 +3365,41 @@
});
}
+ private void registerReceiver() {
+ IntentFilter filter = new IntentFilter("com.android.display.ACTION_SWITCH_TOGGLED");
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ registerReceiver(qsbReceiver, filter, Context.RECEIVER_EXPORTED);
+ } else {
+ registerReceiver(qsbReceiver, filter);
+ }
+ }
+
+ public class QsbReceiver extends BroadcastReceiver {
+
+ private static final String TAG = "QsbReceiver";
+ // Action string for the broadcast intent
+ private static final String ACTION_SWITCH_TOGGLED = "com.android.display.ACTION_SWITCH_TOGGLED";
+
+ private static final String KEY_SEARCH_BAR = "qsb_search_bar";
+ // public static final boolean GSB_ON_HOME_SCREEN = true; //Default value true
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (ACTION_SWITCH_TOGGLED.equals(intent.getAction())) {
+ boolean switchState = intent.getBooleanExtra(KEY_SEARCH_BAR, true);
+ GSB_ON_HOME_SCREEN = switchState; // Update the GSB_ON_HOME_SCREEN with the new switch state
+
+ // Save the state to SharedPreferences
+ SharedPreferences sharedPreferences = context.getSharedPreferences("QsbPrefs", Context.MODE_PRIVATE);
+ sharedPreferences.edit().putBoolean(KEY_SEARCH_BAR, switchState).apply();
+
+ } else {
+ Log.e(TAG, "Received unexpected action: " + intent.getAction());
+ }
+ }
+ }
+
+
/**
* Returns {@code true} if there are visible tasks with windowing mode set to
* {@link android.app.WindowConfiguration#WINDOWING_MODE_FREEFORM}
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index ba492d5..a215fa9 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -591,7 +591,7 @@
* Initializes and binds the first page
*/
public void bindAndInitFirstWorkspaceScreen() {
- if (!FeatureFlags.QSB_ON_FIRST_SCREEN) {
+ if (!FeatureFlags.QSB_ON_FIRST_SCREEN || !Launcher.GSB_ON_HOME_SCREEN) {
return;
}
diff --git a/src/com/android/launcher3/model/LoaderCursor.java b/src/com/android/launcher3/model/LoaderCursor.java
index 855a69d..119c299 100644
--- a/src/com/android/launcher3/model/LoaderCursor.java
+++ b/src/com/android/launcher3/model/LoaderCursor.java
@@ -36,6 +36,7 @@
import androidx.annotation.VisibleForTesting;
import com.android.launcher3.InvariantDeviceProfile;
+import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.LauncherSettings.Favorites;
import com.android.launcher3.Utilities;
@@ -542,7 +543,7 @@
// container.
int spanX = mIDP.numSearchContainerColumns;
int spanY = 1;
- screen.markCells(0, 0, spanX, spanY, true);
+ screen.markCells(0, 0, spanX, spanY, Launcher.GSB_ON_HOME_SCREEN);
}
mOccupied.put(item.screenId, screen);
}
diff --git a/src/com/android/launcher3/qsb/QsbContainerView.java b/src/com/android/launcher3/qsb/QsbContainerView.java
index f295204..17dd785 100644
--- a/src/com/android/launcher3/qsb/QsbContainerView.java
+++ b/src/com/android/launcher3/qsb/QsbContainerView.java
@@ -48,6 +48,7 @@
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.graphics.FragmentWithPreview;
import com.android.launcher3.widget.util.WidgetSizes;
+import com.android.launcher3.Launcher;
/**
* A frame layout which contains a QSB. This internally uses fragment to bind the view, which
@@ -265,6 +266,12 @@
if (mQsb != null && mQsb.isReinflateRequired(mOrientation)) {
rebindFragment();
}
+ if (Launcher.GSB_ON_HOME_SCREEN) {
+ mWrapper.removeAllViews();
+ mWrapper.addView(createQsb(mWrapper));
+ } else {
+ mWrapper.removeAllViews();
+ }
}
@Override
@@ -286,7 +293,7 @@
}
public boolean isQsbEnabled() {
- return FeatureFlags.QSB_ON_FIRST_SCREEN;
+ return FeatureFlags.QSB_ON_FIRST_SCREEN && Launcher.GSB_ON_HOME_SCREEN;
}
protected Bundle createBindOptions() {