Loading packages/SystemUI/src/com/android/systemui/communal/CommunalSource.java +17 −26 Original line number Original line Diff line number Diff line Loading @@ -35,7 +35,23 @@ public interface CommunalSource { * {@link Connector} defines an interface for {@link CommunalSource} instances to be generated. * {@link Connector} defines an interface for {@link CommunalSource} instances to be generated. */ */ interface Connector { interface Connector { ListenableFuture<Optional<CommunalSource>> connect(); Connection connect(Connection.Callback callback); } /** * {@link Connection} defines an interface for an entity which holds the necessary components * for establishing and maintaining a connection to the communal source. */ interface Connection { /** * {@link Callback} defines an interface for clients to be notified when a source is ready */ interface Callback { void onSourceEstablished(Optional<CommunalSource> source); void onDisconnected(); } void disconnect(); } } /** /** Loading Loading @@ -86,29 +102,4 @@ public interface CommunalSource { * value will be {@code null} in case of a failure. * value will be {@code null} in case of a failure. */ */ ListenableFuture<CommunalViewResult> requestCommunalView(Context context); ListenableFuture<CommunalViewResult> requestCommunalView(Context context); /** * Adds a {@link Callback} to receive future status updates regarding this * {@link CommunalSource}. * * @param callback The {@link Callback} to be added. */ void addCallback(Callback callback); /** * Removes a {@link Callback} from receiving future updates. * * @param callback The {@link Callback} to be removed. */ void removeCallback(Callback callback); /** * An interface for receiving updates on the state of the {@link CommunalSource}. */ interface Callback { /** * Invoked when the {@link CommunalSource} is no longer available for use. */ void onDisconnected(); } } } packages/SystemUI/src/com/android/systemui/communal/CommunalSourceMonitor.java +37 −43 Original line number Original line Diff line number Diff line Loading @@ -21,12 +21,14 @@ import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.communal.conditions.CommunalConditionsMonitor; import com.android.systemui.communal.conditions.CommunalConditionsMonitor; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; import com.google.android.collect.Lists; import com.google.android.collect.Lists; import java.lang.ref.WeakReference; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.ArrayList; import java.util.Iterator; import java.util.Iterator; import java.util.concurrent.Executor; import javax.inject.Inject; import javax.inject.Inject; Loading @@ -41,6 +43,7 @@ public class CommunalSourceMonitor { // A list of {@link Callback} that have registered to receive updates. // A list of {@link Callback} that have registered to receive updates. private final ArrayList<WeakReference<Callback>> mCallbacks = Lists.newArrayList(); private final ArrayList<WeakReference<Callback>> mCallbacks = Lists.newArrayList(); private final CommunalConditionsMonitor mConditionsMonitor; private final CommunalConditionsMonitor mConditionsMonitor; private final Executor mExecutor; private CommunalSource mCurrentSource; private CommunalSource mCurrentSource; Loading @@ -50,14 +53,6 @@ public class CommunalSourceMonitor { // Whether the class is currently listening for condition changes. // Whether the class is currently listening for condition changes. private boolean mListeningForConditions = false; private boolean mListeningForConditions = false; private CommunalSource.Callback mSourceCallback = new CommunalSource.Callback() { @Override public void onDisconnected() { // Clear source reference. setSource(null /* source */); } }; private final CommunalConditionsMonitor.Callback mConditionsCallback = private final CommunalConditionsMonitor.Callback mConditionsCallback = allConditionsMet -> { allConditionsMet -> { if (mAllCommunalConditionsMet != allConditionsMet) { if (mAllCommunalConditionsMet != allConditionsMet) { Loading @@ -70,7 +65,9 @@ public class CommunalSourceMonitor { @VisibleForTesting @VisibleForTesting @Inject @Inject public CommunalSourceMonitor(CommunalConditionsMonitor communalConditionsMonitor) { public CommunalSourceMonitor(@Main Executor executor, CommunalConditionsMonitor communalConditionsMonitor) { mExecutor = executor; mConditionsMonitor = communalConditionsMonitor; mConditionsMonitor = communalConditionsMonitor; } } Loading @@ -81,23 +78,15 @@ public class CommunalSourceMonitor { * @param source The new {@link CommunalSource}. * @param source The new {@link CommunalSource}. */ */ public void setSource(CommunalSource source) { public void setSource(CommunalSource source) { if (mCurrentSource != null) { mCurrentSource.removeCallback(mSourceCallback); } mCurrentSource = source; mCurrentSource = source; if (mAllCommunalConditionsMet) { if (mAllCommunalConditionsMet) { executeOnSourceAvailableCallbacks(); executeOnSourceAvailableCallbacks(); } } // Add callback to be informed when the source disconnects. if (mCurrentSource != null) { mCurrentSource.addCallback(mSourceCallback); } } } private void executeOnSourceAvailableCallbacks() { private void executeOnSourceAvailableCallbacks() { mExecutor.execute(() -> { // If the new source is valid, inform registered Callbacks of its presence. // If the new source is valid, inform registered Callbacks of its presence. Iterator<WeakReference<Callback>> itr = mCallbacks.iterator(); Iterator<WeakReference<Callback>> itr = mCallbacks.iterator(); while (itr.hasNext()) { while (itr.hasNext()) { Loading @@ -106,10 +95,11 @@ public class CommunalSourceMonitor { itr.remove(); itr.remove(); } else { } else { cb.onSourceAvailable( cb.onSourceAvailable( (mAllCommunalConditionsMet && mCurrentSource != null) ? new WeakReference<>( (mAllCommunalConditionsMet && mCurrentSource != null) mCurrentSource) : null); ? new WeakReference<>(mCurrentSource) : null); } } } } }); } } /** /** Loading @@ -118,6 +108,7 @@ public class CommunalSourceMonitor { * @param callback The {@link Callback} to add. * @param callback The {@link Callback} to add. */ */ public void addCallback(Callback callback) { public void addCallback(Callback callback) { mExecutor.execute(() -> { mCallbacks.add(new WeakReference<>(callback)); mCallbacks.add(new WeakReference<>(callback)); // Inform the callback of any already present CommunalSource. // Inform the callback of any already present CommunalSource. Loading @@ -129,6 +120,7 @@ public class CommunalSourceMonitor { mConditionsMonitor.addCallback(mConditionsCallback); mConditionsMonitor.addCallback(mConditionsCallback); mListeningForConditions = true; mListeningForConditions = true; } } }); } } /** /** Loading @@ -137,12 +129,14 @@ public class CommunalSourceMonitor { * @param callback The {@link Callback} to add. * @param callback The {@link Callback} to add. */ */ public void removeCallback(Callback callback) { public void removeCallback(Callback callback) { mExecutor.execute(() -> { mCallbacks.removeIf(el -> el.get() == callback); mCallbacks.removeIf(el -> el.get() == callback); if (mCallbacks.isEmpty() && mListeningForConditions) { if (mCallbacks.isEmpty() && mListeningForConditions) { mConditionsMonitor.removeCallback(mConditionsCallback); mConditionsMonitor.removeCallback(mConditionsCallback); mListeningForConditions = false; mListeningForConditions = false; } } }); } } /** /** Loading packages/SystemUI/src/com/android/systemui/communal/CommunalSourcePrimer.java +29 −24 Original line number Original line Diff line number Diff line Loading @@ -27,8 +27,6 @@ import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.time.SystemClock; import com.android.systemui.util.time.SystemClock; import com.google.common.util.concurrent.ListenableFuture; import java.util.Optional; import java.util.Optional; import javax.inject.Inject; import javax.inject.Inject; Loading @@ -53,10 +51,11 @@ public class CommunalSourcePrimer extends CoreStartable { private int mReconnectAttempts = 0; private int mReconnectAttempts = 0; private Runnable mCurrentReconnectCancelable; private Runnable mCurrentReconnectCancelable; private ListenableFuture<Optional<CommunalSource>> mGetSourceFuture; private final Optional<CommunalSource.Connector> mConnector; private final Optional<CommunalSource.Observer> mObserver; private final Optional<CommunalSource.Observer> mObserver; private final Optional<CommunalSource.Connector> mConnector; private CommunalSource.Connection mCurrentConnection; private final Runnable mConnectRunnable = new Runnable() { private final Runnable mConnectRunnable = new Runnable() { @Override @Override Loading @@ -66,6 +65,10 @@ public class CommunalSourcePrimer extends CoreStartable { } } }; }; private final CommunalSource.Observer.Callback mObserverCallback = () -> { initiateConnectionAttempt(); }; @Inject @Inject public CommunalSourcePrimer(Context context, @Main Resources resources, public CommunalSourcePrimer(Context context, @Main Resources resources, SystemClock clock, SystemClock clock, Loading Loading @@ -132,7 +135,7 @@ public class CommunalSourcePrimer extends CoreStartable { @Override @Override protected void onBootCompleted() { protected void onBootCompleted() { if (mObserver.isPresent()) { if (mObserver.isPresent()) { mObserver.get().addCallback(() -> initiateConnectionAttempt()); mObserver.get().addCallback(mObserverCallback); } } initiateConnectionAttempt(); initiateConnectionAttempt(); } } Loading @@ -142,34 +145,36 @@ public class CommunalSourcePrimer extends CoreStartable { Log.d(TAG, "attempting to communal to communal source"); Log.d(TAG, "attempting to communal to communal source"); } } if (mGetSourceFuture != null) { if (mCurrentConnection != null) { if (DEBUG) { if (DEBUG) { Log.d(TAG, "canceling in-flight connection"); Log.d(TAG, "canceling in-flight connection"); } } mGetSourceFuture.cancel(true); mCurrentConnection.disconnect(); } } mGetSourceFuture = mConnector.get().connect(); mCurrentConnection = mConnector.get().connect(new CommunalSource.Connection.Callback() { mGetSourceFuture.addListener(() -> { private long mStartTime; try { final long startTime = mSystemClock.currentTimeMillis(); @Override Optional<CommunalSource> result = mGetSourceFuture.get(); public void onSourceEstablished(Optional<CommunalSource> optionalSource) { if (result.isPresent()) { mStartTime = mSystemClock.currentTimeMillis(); final CommunalSource source = result.get(); source.addCallback(() -> { if (optionalSource.isPresent()) { if (mSystemClock.currentTimeMillis() - startTime > mMinConnectionDuration) { final CommunalSource source = optionalSource.get(); initiateConnectionAttempt(); mMonitor.setSource(source); } else { } else { scheduleConnectionAttempt(); scheduleConnectionAttempt(); } } }); } mMonitor.setSource(source); @Override public void onDisconnected() { if (mSystemClock.currentTimeMillis() - mStartTime > mMinConnectionDuration) { initiateConnectionAttempt(); } else { } else { scheduleConnectionAttempt(); scheduleConnectionAttempt(); } } } catch (Exception e) { e.printStackTrace(); } } }, mMainExecutor); }); } } } } packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java +0 −7 Original line number Original line Diff line number Diff line Loading @@ -519,8 +519,6 @@ public class NotificationPanelViewController extends PanelViewController { private WeakReference<CommunalSource> mCommunalSource; private WeakReference<CommunalSource> mCommunalSource; private final CommunalSource.Callback mCommunalSourceCallback; private final CommandQueue mCommandQueue; private final CommandQueue mCommandQueue; private final NotificationLockscreenUserManager mLockscreenUserManager; private final NotificationLockscreenUserManager mLockscreenUserManager; private final UserManager mUserManager; private final UserManager mUserManager; Loading Loading @@ -906,9 +904,6 @@ public class NotificationPanelViewController extends PanelViewController { mMaxKeyguardNotifications = resources.getInteger(R.integer.keyguard_max_notification_count); mMaxKeyguardNotifications = resources.getInteger(R.integer.keyguard_max_notification_count); mKeyguardUnfoldTransition = unfoldComponent.map(c -> c.getKeyguardUnfoldTransition()); mKeyguardUnfoldTransition = unfoldComponent.map(c -> c.getKeyguardUnfoldTransition()); mCommunalSourceCallback = () -> { mUiExecutor.execute(() -> setCommunalSource(null /*source*/)); }; mCommunalSourceMonitorCallback = (source) -> { mCommunalSourceMonitorCallback = (source) -> { mUiExecutor.execute(() -> setCommunalSource(source)); mUiExecutor.execute(() -> setCommunalSource(source)); Loading Loading @@ -4713,7 +4708,6 @@ public class NotificationPanelViewController extends PanelViewController { CommunalSource existingSource = mCommunalSource != null ? mCommunalSource.get() : null; CommunalSource existingSource = mCommunalSource != null ? mCommunalSource.get() : null; if (existingSource != null) { if (existingSource != null) { existingSource.removeCallback(mCommunalSourceCallback); mCommunalViewController.show(null /*source*/); mCommunalViewController.show(null /*source*/); } } Loading @@ -4722,7 +4716,6 @@ public class NotificationPanelViewController extends PanelViewController { CommunalSource currentSource = mCommunalSource != null ? mCommunalSource.get() : null; CommunalSource currentSource = mCommunalSource != null ? mCommunalSource.get() : null; // Set source and register callback // Set source and register callback if (currentSource != null && mCommunalViewController != null) { if (currentSource != null && mCommunalViewController != null) { currentSource.addCallback(mCommunalSourceCallback); mCommunalViewController.show(source); mCommunalViewController.show(source); } } Loading packages/SystemUI/src/com/android/systemui/util/service/ObservableServiceConnection.java +7 −5 Original line number Original line Diff line number Diff line Loading @@ -16,9 +16,7 @@ package com.android.systemui.util.service; package com.android.systemui.util.service; import android.annotation.CallbackExecutor; import android.annotation.IntDef; import android.annotation.IntDef; import android.annotation.NonNull; import android.content.ComponentName; import android.content.ComponentName; import android.content.Context; import android.content.Context; import android.content.Intent; import android.content.Intent; Loading @@ -26,6 +24,8 @@ import android.content.ServiceConnection; import android.os.IBinder; import android.os.IBinder; import android.util.Log; import android.util.Log; import com.android.systemui.dagger.qualifiers.Main; import java.lang.annotation.Retention; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy; import java.lang.ref.WeakReference; import java.lang.ref.WeakReference; Loading @@ -35,6 +35,8 @@ import java.util.Optional; import java.util.concurrent.Executor; import java.util.concurrent.Executor; import java.util.function.Consumer; import java.util.function.Consumer; import javax.inject.Inject; /** /** * {@link ObservableServiceConnection} is a concrete implementation of {@link ServiceConnection} * {@link ObservableServiceConnection} is a concrete implementation of {@link ServiceConnection} * that enables monitoring the status of a binder connection. It also aides in automatically * that enables monitoring the status of a binder connection. It also aides in automatically Loading Loading @@ -119,17 +121,17 @@ public class ObservableServiceConnection<T> implements ServiceConnection { * Default constructor for {@link ObservableServiceConnection}. * Default constructor for {@link ObservableServiceConnection}. * @param context The context from which the service will be bound with. * @param context The context from which the service will be bound with. * @param serviceIntent The intent to bind service with. * @param serviceIntent The intent to bind service with. * @param flags The flags to use during the binding * @param executor The executor for connection callbacks to be delivered on * @param executor The executor for connection callbacks to be delivered on * @param transformer A {@link ServiceTransformer} for transforming the resulting service * @param transformer A {@link ServiceTransformer} for transforming the resulting service * into a desired type. * into a desired type. */ */ @Inject public ObservableServiceConnection(Context context, Intent serviceIntent, public ObservableServiceConnection(Context context, Intent serviceIntent, @Context.BindServiceFlags int flags, @NonNull @CallbackExecutor Executor executor, @Main Executor executor, ServiceTransformer<T> transformer) { ServiceTransformer<T> transformer) { mContext = context; mContext = context; mServiceIntent = serviceIntent; mServiceIntent = serviceIntent; mFlags = flags; mFlags = Context.BIND_AUTO_CREATE; mExecutor = executor; mExecutor = executor; mTransformer = transformer; mTransformer = transformer; mCallbacks = new ArrayList<>(); mCallbacks = new ArrayList<>(); Loading Loading
packages/SystemUI/src/com/android/systemui/communal/CommunalSource.java +17 −26 Original line number Original line Diff line number Diff line Loading @@ -35,7 +35,23 @@ public interface CommunalSource { * {@link Connector} defines an interface for {@link CommunalSource} instances to be generated. * {@link Connector} defines an interface for {@link CommunalSource} instances to be generated. */ */ interface Connector { interface Connector { ListenableFuture<Optional<CommunalSource>> connect(); Connection connect(Connection.Callback callback); } /** * {@link Connection} defines an interface for an entity which holds the necessary components * for establishing and maintaining a connection to the communal source. */ interface Connection { /** * {@link Callback} defines an interface for clients to be notified when a source is ready */ interface Callback { void onSourceEstablished(Optional<CommunalSource> source); void onDisconnected(); } void disconnect(); } } /** /** Loading Loading @@ -86,29 +102,4 @@ public interface CommunalSource { * value will be {@code null} in case of a failure. * value will be {@code null} in case of a failure. */ */ ListenableFuture<CommunalViewResult> requestCommunalView(Context context); ListenableFuture<CommunalViewResult> requestCommunalView(Context context); /** * Adds a {@link Callback} to receive future status updates regarding this * {@link CommunalSource}. * * @param callback The {@link Callback} to be added. */ void addCallback(Callback callback); /** * Removes a {@link Callback} from receiving future updates. * * @param callback The {@link Callback} to be removed. */ void removeCallback(Callback callback); /** * An interface for receiving updates on the state of the {@link CommunalSource}. */ interface Callback { /** * Invoked when the {@link CommunalSource} is no longer available for use. */ void onDisconnected(); } } }
packages/SystemUI/src/com/android/systemui/communal/CommunalSourceMonitor.java +37 −43 Original line number Original line Diff line number Diff line Loading @@ -21,12 +21,14 @@ import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.communal.conditions.CommunalConditionsMonitor; import com.android.systemui.communal.conditions.CommunalConditionsMonitor; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; import com.google.android.collect.Lists; import com.google.android.collect.Lists; import java.lang.ref.WeakReference; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.ArrayList; import java.util.Iterator; import java.util.Iterator; import java.util.concurrent.Executor; import javax.inject.Inject; import javax.inject.Inject; Loading @@ -41,6 +43,7 @@ public class CommunalSourceMonitor { // A list of {@link Callback} that have registered to receive updates. // A list of {@link Callback} that have registered to receive updates. private final ArrayList<WeakReference<Callback>> mCallbacks = Lists.newArrayList(); private final ArrayList<WeakReference<Callback>> mCallbacks = Lists.newArrayList(); private final CommunalConditionsMonitor mConditionsMonitor; private final CommunalConditionsMonitor mConditionsMonitor; private final Executor mExecutor; private CommunalSource mCurrentSource; private CommunalSource mCurrentSource; Loading @@ -50,14 +53,6 @@ public class CommunalSourceMonitor { // Whether the class is currently listening for condition changes. // Whether the class is currently listening for condition changes. private boolean mListeningForConditions = false; private boolean mListeningForConditions = false; private CommunalSource.Callback mSourceCallback = new CommunalSource.Callback() { @Override public void onDisconnected() { // Clear source reference. setSource(null /* source */); } }; private final CommunalConditionsMonitor.Callback mConditionsCallback = private final CommunalConditionsMonitor.Callback mConditionsCallback = allConditionsMet -> { allConditionsMet -> { if (mAllCommunalConditionsMet != allConditionsMet) { if (mAllCommunalConditionsMet != allConditionsMet) { Loading @@ -70,7 +65,9 @@ public class CommunalSourceMonitor { @VisibleForTesting @VisibleForTesting @Inject @Inject public CommunalSourceMonitor(CommunalConditionsMonitor communalConditionsMonitor) { public CommunalSourceMonitor(@Main Executor executor, CommunalConditionsMonitor communalConditionsMonitor) { mExecutor = executor; mConditionsMonitor = communalConditionsMonitor; mConditionsMonitor = communalConditionsMonitor; } } Loading @@ -81,23 +78,15 @@ public class CommunalSourceMonitor { * @param source The new {@link CommunalSource}. * @param source The new {@link CommunalSource}. */ */ public void setSource(CommunalSource source) { public void setSource(CommunalSource source) { if (mCurrentSource != null) { mCurrentSource.removeCallback(mSourceCallback); } mCurrentSource = source; mCurrentSource = source; if (mAllCommunalConditionsMet) { if (mAllCommunalConditionsMet) { executeOnSourceAvailableCallbacks(); executeOnSourceAvailableCallbacks(); } } // Add callback to be informed when the source disconnects. if (mCurrentSource != null) { mCurrentSource.addCallback(mSourceCallback); } } } private void executeOnSourceAvailableCallbacks() { private void executeOnSourceAvailableCallbacks() { mExecutor.execute(() -> { // If the new source is valid, inform registered Callbacks of its presence. // If the new source is valid, inform registered Callbacks of its presence. Iterator<WeakReference<Callback>> itr = mCallbacks.iterator(); Iterator<WeakReference<Callback>> itr = mCallbacks.iterator(); while (itr.hasNext()) { while (itr.hasNext()) { Loading @@ -106,10 +95,11 @@ public class CommunalSourceMonitor { itr.remove(); itr.remove(); } else { } else { cb.onSourceAvailable( cb.onSourceAvailable( (mAllCommunalConditionsMet && mCurrentSource != null) ? new WeakReference<>( (mAllCommunalConditionsMet && mCurrentSource != null) mCurrentSource) : null); ? new WeakReference<>(mCurrentSource) : null); } } } } }); } } /** /** Loading @@ -118,6 +108,7 @@ public class CommunalSourceMonitor { * @param callback The {@link Callback} to add. * @param callback The {@link Callback} to add. */ */ public void addCallback(Callback callback) { public void addCallback(Callback callback) { mExecutor.execute(() -> { mCallbacks.add(new WeakReference<>(callback)); mCallbacks.add(new WeakReference<>(callback)); // Inform the callback of any already present CommunalSource. // Inform the callback of any already present CommunalSource. Loading @@ -129,6 +120,7 @@ public class CommunalSourceMonitor { mConditionsMonitor.addCallback(mConditionsCallback); mConditionsMonitor.addCallback(mConditionsCallback); mListeningForConditions = true; mListeningForConditions = true; } } }); } } /** /** Loading @@ -137,12 +129,14 @@ public class CommunalSourceMonitor { * @param callback The {@link Callback} to add. * @param callback The {@link Callback} to add. */ */ public void removeCallback(Callback callback) { public void removeCallback(Callback callback) { mExecutor.execute(() -> { mCallbacks.removeIf(el -> el.get() == callback); mCallbacks.removeIf(el -> el.get() == callback); if (mCallbacks.isEmpty() && mListeningForConditions) { if (mCallbacks.isEmpty() && mListeningForConditions) { mConditionsMonitor.removeCallback(mConditionsCallback); mConditionsMonitor.removeCallback(mConditionsCallback); mListeningForConditions = false; mListeningForConditions = false; } } }); } } /** /** Loading
packages/SystemUI/src/com/android/systemui/communal/CommunalSourcePrimer.java +29 −24 Original line number Original line Diff line number Diff line Loading @@ -27,8 +27,6 @@ import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.time.SystemClock; import com.android.systemui.util.time.SystemClock; import com.google.common.util.concurrent.ListenableFuture; import java.util.Optional; import java.util.Optional; import javax.inject.Inject; import javax.inject.Inject; Loading @@ -53,10 +51,11 @@ public class CommunalSourcePrimer extends CoreStartable { private int mReconnectAttempts = 0; private int mReconnectAttempts = 0; private Runnable mCurrentReconnectCancelable; private Runnable mCurrentReconnectCancelable; private ListenableFuture<Optional<CommunalSource>> mGetSourceFuture; private final Optional<CommunalSource.Connector> mConnector; private final Optional<CommunalSource.Observer> mObserver; private final Optional<CommunalSource.Observer> mObserver; private final Optional<CommunalSource.Connector> mConnector; private CommunalSource.Connection mCurrentConnection; private final Runnable mConnectRunnable = new Runnable() { private final Runnable mConnectRunnable = new Runnable() { @Override @Override Loading @@ -66,6 +65,10 @@ public class CommunalSourcePrimer extends CoreStartable { } } }; }; private final CommunalSource.Observer.Callback mObserverCallback = () -> { initiateConnectionAttempt(); }; @Inject @Inject public CommunalSourcePrimer(Context context, @Main Resources resources, public CommunalSourcePrimer(Context context, @Main Resources resources, SystemClock clock, SystemClock clock, Loading Loading @@ -132,7 +135,7 @@ public class CommunalSourcePrimer extends CoreStartable { @Override @Override protected void onBootCompleted() { protected void onBootCompleted() { if (mObserver.isPresent()) { if (mObserver.isPresent()) { mObserver.get().addCallback(() -> initiateConnectionAttempt()); mObserver.get().addCallback(mObserverCallback); } } initiateConnectionAttempt(); initiateConnectionAttempt(); } } Loading @@ -142,34 +145,36 @@ public class CommunalSourcePrimer extends CoreStartable { Log.d(TAG, "attempting to communal to communal source"); Log.d(TAG, "attempting to communal to communal source"); } } if (mGetSourceFuture != null) { if (mCurrentConnection != null) { if (DEBUG) { if (DEBUG) { Log.d(TAG, "canceling in-flight connection"); Log.d(TAG, "canceling in-flight connection"); } } mGetSourceFuture.cancel(true); mCurrentConnection.disconnect(); } } mGetSourceFuture = mConnector.get().connect(); mCurrentConnection = mConnector.get().connect(new CommunalSource.Connection.Callback() { mGetSourceFuture.addListener(() -> { private long mStartTime; try { final long startTime = mSystemClock.currentTimeMillis(); @Override Optional<CommunalSource> result = mGetSourceFuture.get(); public void onSourceEstablished(Optional<CommunalSource> optionalSource) { if (result.isPresent()) { mStartTime = mSystemClock.currentTimeMillis(); final CommunalSource source = result.get(); source.addCallback(() -> { if (optionalSource.isPresent()) { if (mSystemClock.currentTimeMillis() - startTime > mMinConnectionDuration) { final CommunalSource source = optionalSource.get(); initiateConnectionAttempt(); mMonitor.setSource(source); } else { } else { scheduleConnectionAttempt(); scheduleConnectionAttempt(); } } }); } mMonitor.setSource(source); @Override public void onDisconnected() { if (mSystemClock.currentTimeMillis() - mStartTime > mMinConnectionDuration) { initiateConnectionAttempt(); } else { } else { scheduleConnectionAttempt(); scheduleConnectionAttempt(); } } } catch (Exception e) { e.printStackTrace(); } } }, mMainExecutor); }); } } } }
packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java +0 −7 Original line number Original line Diff line number Diff line Loading @@ -519,8 +519,6 @@ public class NotificationPanelViewController extends PanelViewController { private WeakReference<CommunalSource> mCommunalSource; private WeakReference<CommunalSource> mCommunalSource; private final CommunalSource.Callback mCommunalSourceCallback; private final CommandQueue mCommandQueue; private final CommandQueue mCommandQueue; private final NotificationLockscreenUserManager mLockscreenUserManager; private final NotificationLockscreenUserManager mLockscreenUserManager; private final UserManager mUserManager; private final UserManager mUserManager; Loading Loading @@ -906,9 +904,6 @@ public class NotificationPanelViewController extends PanelViewController { mMaxKeyguardNotifications = resources.getInteger(R.integer.keyguard_max_notification_count); mMaxKeyguardNotifications = resources.getInteger(R.integer.keyguard_max_notification_count); mKeyguardUnfoldTransition = unfoldComponent.map(c -> c.getKeyguardUnfoldTransition()); mKeyguardUnfoldTransition = unfoldComponent.map(c -> c.getKeyguardUnfoldTransition()); mCommunalSourceCallback = () -> { mUiExecutor.execute(() -> setCommunalSource(null /*source*/)); }; mCommunalSourceMonitorCallback = (source) -> { mCommunalSourceMonitorCallback = (source) -> { mUiExecutor.execute(() -> setCommunalSource(source)); mUiExecutor.execute(() -> setCommunalSource(source)); Loading Loading @@ -4713,7 +4708,6 @@ public class NotificationPanelViewController extends PanelViewController { CommunalSource existingSource = mCommunalSource != null ? mCommunalSource.get() : null; CommunalSource existingSource = mCommunalSource != null ? mCommunalSource.get() : null; if (existingSource != null) { if (existingSource != null) { existingSource.removeCallback(mCommunalSourceCallback); mCommunalViewController.show(null /*source*/); mCommunalViewController.show(null /*source*/); } } Loading @@ -4722,7 +4716,6 @@ public class NotificationPanelViewController extends PanelViewController { CommunalSource currentSource = mCommunalSource != null ? mCommunalSource.get() : null; CommunalSource currentSource = mCommunalSource != null ? mCommunalSource.get() : null; // Set source and register callback // Set source and register callback if (currentSource != null && mCommunalViewController != null) { if (currentSource != null && mCommunalViewController != null) { currentSource.addCallback(mCommunalSourceCallback); mCommunalViewController.show(source); mCommunalViewController.show(source); } } Loading
packages/SystemUI/src/com/android/systemui/util/service/ObservableServiceConnection.java +7 −5 Original line number Original line Diff line number Diff line Loading @@ -16,9 +16,7 @@ package com.android.systemui.util.service; package com.android.systemui.util.service; import android.annotation.CallbackExecutor; import android.annotation.IntDef; import android.annotation.IntDef; import android.annotation.NonNull; import android.content.ComponentName; import android.content.ComponentName; import android.content.Context; import android.content.Context; import android.content.Intent; import android.content.Intent; Loading @@ -26,6 +24,8 @@ import android.content.ServiceConnection; import android.os.IBinder; import android.os.IBinder; import android.util.Log; import android.util.Log; import com.android.systemui.dagger.qualifiers.Main; import java.lang.annotation.Retention; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy; import java.lang.ref.WeakReference; import java.lang.ref.WeakReference; Loading @@ -35,6 +35,8 @@ import java.util.Optional; import java.util.concurrent.Executor; import java.util.concurrent.Executor; import java.util.function.Consumer; import java.util.function.Consumer; import javax.inject.Inject; /** /** * {@link ObservableServiceConnection} is a concrete implementation of {@link ServiceConnection} * {@link ObservableServiceConnection} is a concrete implementation of {@link ServiceConnection} * that enables monitoring the status of a binder connection. It also aides in automatically * that enables monitoring the status of a binder connection. It also aides in automatically Loading Loading @@ -119,17 +121,17 @@ public class ObservableServiceConnection<T> implements ServiceConnection { * Default constructor for {@link ObservableServiceConnection}. * Default constructor for {@link ObservableServiceConnection}. * @param context The context from which the service will be bound with. * @param context The context from which the service will be bound with. * @param serviceIntent The intent to bind service with. * @param serviceIntent The intent to bind service with. * @param flags The flags to use during the binding * @param executor The executor for connection callbacks to be delivered on * @param executor The executor for connection callbacks to be delivered on * @param transformer A {@link ServiceTransformer} for transforming the resulting service * @param transformer A {@link ServiceTransformer} for transforming the resulting service * into a desired type. * into a desired type. */ */ @Inject public ObservableServiceConnection(Context context, Intent serviceIntent, public ObservableServiceConnection(Context context, Intent serviceIntent, @Context.BindServiceFlags int flags, @NonNull @CallbackExecutor Executor executor, @Main Executor executor, ServiceTransformer<T> transformer) { ServiceTransformer<T> transformer) { mContext = context; mContext = context; mServiceIntent = serviceIntent; mServiceIntent = serviceIntent; mFlags = flags; mFlags = Context.BIND_AUTO_CREATE; mExecutor = executor; mExecutor = executor; mTransformer = transformer; mTransformer = transformer; mCallbacks = new ArrayList<>(); mCallbacks = new ArrayList<>(); Loading