diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java index 7fb520766977e..ff34be0415cab 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java +++ b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java @@ -90,7 +90,8 @@ public class QSCustomizer extends LinearLayout implements OnMenuItemClickListene public QSCustomizer(Context context, AttributeSet attrs, LightBarController lightBarController, KeyguardStateController keyguardStateController, - ScreenLifecycle screenLifecycle) { + ScreenLifecycle screenLifecycle, + TileQueryHelper tileQueryHelper) { super(new ContextThemeWrapper(context, R.style.edit_theme), attrs); LayoutInflater.from(getContext()).inflate(R.layout.qs_customize_panel_content, this); @@ -113,7 +114,8 @@ public class QSCustomizer extends LinearLayout implements OnMenuItemClickListene mRecyclerView = findViewById(android.R.id.list); mTransparentView = findViewById(R.id.customizer_transparent_view); mTileAdapter = new TileAdapter(getContext()); - mTileQueryHelper = new TileQueryHelper(context, mTileAdapter); + mTileQueryHelper = tileQueryHelper; + mTileQueryHelper.setListener(mTileAdapter); mRecyclerView.setAdapter(mTileAdapter); mTileAdapter.getItemTouchHelper().attachToRecyclerView(mRecyclerView); GridLayoutManager layout = new GridLayoutManager(getContext(), 3); diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java b/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java index 70062492c1624..0a9100f6c7d51 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java +++ b/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java @@ -33,8 +33,9 @@ import android.text.TextUtils; import android.util.ArraySet; import android.widget.Button; -import com.android.systemui.Dependency; import com.android.systemui.R; +import com.android.systemui.dagger.qualifiers.BgHandler; +import com.android.systemui.dagger.qualifiers.MainHandler; import com.android.systemui.plugins.qs.QSTile; import com.android.systemui.plugins.qs.QSTile.State; import com.android.systemui.qs.QSTileHost; @@ -47,6 +48,8 @@ import java.util.Arrays; import java.util.Collection; import java.util.List; +import javax.inject.Inject; + public class TileQueryHelper { private static final String TAG = "TileQueryHelper"; @@ -55,15 +58,20 @@ public class TileQueryHelper { private final Handler mBgHandler; private final Handler mMainHandler; private final Context mContext; - private final TileStateListener mListener; + private TileStateListener mListener; private boolean mFinished; - public TileQueryHelper(Context context, TileStateListener listener) { + @Inject + public TileQueryHelper(Context context, + @MainHandler Handler mainHandler, @BgHandler Handler bgHandler) { mContext = context; + mMainHandler = mainHandler; + mBgHandler = bgHandler; + } + + public void setListener(TileStateListener listener) { mListener = listener; - mBgHandler = new Handler(Dependency.get(Dependency.BG_LOOPER)); - mMainHandler = Dependency.get(Dependency.MAIN_HANDLER); } public void queryTiles(QSTileHost host) { @@ -178,7 +186,9 @@ public class TileQueryHelper { private void notifyTilesChanged(final boolean finished) { final ArrayList tilesToReturn = new ArrayList<>(mTiles); mMainHandler.post(() -> { - mListener.onTilesChanged(tilesToReturn); + if (mListener != null) { + mListener.onTilesChanged(tilesToReturn); + } mFinished = finished; }); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileQueryHelperTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileQueryHelperTest.java index 9e226f6936223..b41512c9a9351 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileQueryHelperTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileQueryHelperTest.java @@ -36,6 +36,8 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; +import android.os.Handler; +import android.os.Looper; import android.provider.Settings; import android.service.quicksettings.Tile; import android.testing.AndroidTestingRunner; @@ -46,7 +48,6 @@ import android.util.ArraySet; import androidx.test.filters.SmallTest; -import com.android.systemui.Dependency; import com.android.systemui.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.plugins.qs.QSTile; @@ -99,12 +100,12 @@ public class TileQueryHelperTest extends SysuiTestCase { private QSTile.State mState; private TestableLooper mBGLooper; private TileQueryHelper mTileQueryHelper; + private Handler mMainHandler; @Before public void setup() { MockitoAnnotations.initMocks(this); mBGLooper = TestableLooper.get(this); - mDependency.injectTestDependency(Dependency.BG_LOOPER, mBGLooper.getLooper()); mContext.setMockPackageManager(mPackageManager); mState = new QSTile.State(); @@ -122,7 +123,10 @@ public class TileQueryHelperTest extends SysuiTestCase { } ).when(mQSTileHost).createTile(anyString()); - mTileQueryHelper = new TileQueryHelper(mContext, mListener); + mMainHandler = new Handler(Looper.getMainLooper()); + mTileQueryHelper = new TileQueryHelper(mContext, mMainHandler, + new Handler(mBGLooper.getLooper())); + mTileQueryHelper.setListener(mListener); } @Test @@ -135,7 +139,7 @@ public class TileQueryHelperTest extends SysuiTestCase { mTileQueryHelper.queryTiles(mQSTileHost); mBGLooper.processAllMessages(); - waitForIdleSync(Dependency.get(Dependency.MAIN_HANDLER)); + waitForIdleSync(mMainHandler); assertTrue(mTileQueryHelper.isFinished()); } @@ -145,7 +149,7 @@ public class TileQueryHelperTest extends SysuiTestCase { mTileQueryHelper.queryTiles(mQSTileHost); mBGLooper.processAllMessages(); - waitForIdleSync(Dependency.get(Dependency.MAIN_HANDLER)); + waitForIdleSync(mMainHandler); verify(mListener, times(2)).onTilesChanged(any()); } @@ -160,7 +164,7 @@ public class TileQueryHelperTest extends SysuiTestCase { mTileQueryHelper.queryTiles(mQSTileHost); mBGLooper.processAllMessages(); - waitForIdleSync(Dependency.get(Dependency.MAIN_HANDLER)); + waitForIdleSync(mMainHandler); assertTrue(mTileQueryHelper.isFinished()); } @@ -175,7 +179,7 @@ public class TileQueryHelperTest extends SysuiTestCase { mTileQueryHelper.queryTiles(mQSTileHost); mBGLooper.processAllMessages(); - waitForIdleSync(Dependency.get(Dependency.MAIN_HANDLER)); + waitForIdleSync(mMainHandler); verify(mListener, atLeastOnce()).onTilesChanged(mCaptor.capture()); List specs = new ArrayList<>(); @@ -196,7 +200,7 @@ public class TileQueryHelperTest extends SysuiTestCase { mTileQueryHelper.queryTiles(mQSTileHost); mBGLooper.processAllMessages(); - waitForIdleSync(Dependency.get(Dependency.MAIN_HANDLER)); + waitForIdleSync(mMainHandler); verify(mListener, atLeastOnce()).onTilesChanged(mCaptor.capture()); List specs = new ArrayList<>(); @@ -217,7 +221,7 @@ public class TileQueryHelperTest extends SysuiTestCase { mTileQueryHelper.queryTiles(mQSTileHost); mBGLooper.processAllMessages(); - waitForIdleSync(Dependency.get(Dependency.MAIN_HANDLER)); + waitForIdleSync(mMainHandler); verify(mListener, atLeastOnce()).onTilesChanged(mCaptor.capture()); List specs = new ArrayList<>(); @@ -248,7 +252,7 @@ public class TileQueryHelperTest extends SysuiTestCase { mTileQueryHelper.queryTiles(mQSTileHost); mBGLooper.processAllMessages(); - waitForIdleSync(Dependency.get(Dependency.MAIN_HANDLER)); + waitForIdleSync(mMainHandler); verify(mListener, atLeastOnce()).onTilesChanged(mCaptor.capture()); List tileInfos = mCaptor.getValue();