wait to finish
This commit is contained in:
@@ -8,9 +8,7 @@ import com.alibaba.android.arouter.launcher.ARouter;
|
||||
import com.mogo.eagle.core.data.constants.MogoServicePaths;
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
|
||||
import com.mogo.service.IMogoServiceApis;
|
||||
import com.mogo.service.impl.singleton.SingletonsHolder;
|
||||
import com.mogo.service.module.IMogoRegisterCenter;
|
||||
import com.mogo.service.statusmanager.IMogoStatusManager;
|
||||
import com.mogo.service.windowview.IMogoWindowManager;
|
||||
|
||||
/**
|
||||
@@ -27,11 +25,6 @@ public class MogoServiceApis implements IMogoServiceApis {
|
||||
|
||||
private static final Object sLock = new Object();
|
||||
|
||||
@Override
|
||||
public IMogoStatusManager getStatusManagerApi() {
|
||||
return SingletonsHolder.get(IMogoStatusManager.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(Context context) {
|
||||
|
||||
@@ -50,23 +43,14 @@ public class MogoServiceApis implements IMogoServiceApis {
|
||||
}
|
||||
|
||||
private static <T extends IProvider> T getApiInstance(Class<T> clazz, String path) {
|
||||
T inst = SingletonsHolder.get(clazz);
|
||||
if (inst == null) {
|
||||
synchronized (sLock) {
|
||||
inst = SingletonsHolder.get(clazz);
|
||||
if (inst != null) {
|
||||
return inst;
|
||||
}
|
||||
T newInst = (T) ARouter.getInstance().build(path).navigation();
|
||||
try {
|
||||
SingletonsHolder.registerApi(clazz, newInst);
|
||||
CallerLogger.INSTANCE.d(TAG, "keep IProvider instance to SingletonHolder: path = " + path);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return newInst;
|
||||
synchronized (sLock) {
|
||||
T newInst = (T) ARouter.getInstance().build(path).navigation();
|
||||
try {
|
||||
CallerLogger.INSTANCE.d(TAG, "keep IProvider instance to SingletonHolder: path = " + path);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return newInst;
|
||||
}
|
||||
return inst;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
package com.mogo.service.impl.singleton;
|
||||
|
||||
import com.alibaba.android.arouter.facade.template.IProvider;
|
||||
import com.mogo.service.impl.statusmanager.MogoStatusManager;
|
||||
import com.mogo.service.statusmanager.IMogoStatusManager;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
/**
|
||||
* @author congtaowang
|
||||
* @since 2020-03-06
|
||||
* <p>
|
||||
* 描述
|
||||
*/
|
||||
public class SingletonsHolder {
|
||||
|
||||
private static final Map<Class, Object> sSingletons = new ConcurrentHashMap<>();
|
||||
|
||||
static {
|
||||
sSingletons.put(IMogoStatusManager.class, new MogoStatusManager());
|
||||
}
|
||||
|
||||
public static <T> T get(Class<T> clazz) {
|
||||
return (T) sSingletons.get(clazz);
|
||||
}
|
||||
|
||||
public static <T extends IProvider> void registerApi(Class<? extends IProvider> api, T impl) throws Exception {
|
||||
if (api == null || impl == null) {
|
||||
return;
|
||||
}
|
||||
sSingletons.put(api, impl);
|
||||
}
|
||||
}
|
||||
@@ -1,179 +0,0 @@
|
||||
package com.mogo.service.impl.statusmanager;
|
||||
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.alibaba.android.arouter.facade.annotation.Route;
|
||||
import com.mogo.eagle.core.data.constants.MogoServicePaths;
|
||||
import com.mogo.service.statusmanager.IMogoStatusChangedListener;
|
||||
import com.mogo.service.statusmanager.IMogoStatusManager;
|
||||
import com.mogo.service.statusmanager.IMogoStickyStatusChangedListener;
|
||||
import com.mogo.service.statusmanager.StatusDescriptor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
/**
|
||||
* @author congtaowang
|
||||
* @since 2020-01-02
|
||||
* <p>
|
||||
* 状态控制器
|
||||
*/
|
||||
public class MogoStatusManager implements IMogoStatusManager {
|
||||
|
||||
private static final String TAG = "MogoStatusManager";
|
||||
|
||||
/**
|
||||
* 状态记录
|
||||
*/
|
||||
private static final Map< StatusDescriptor, Boolean > mStatus = new ConcurrentHashMap<>();
|
||||
|
||||
/**
|
||||
* 回调集合
|
||||
*/
|
||||
private static final Map< StatusDescriptor, List< IMogoStatusChangedListener > > mListeners = new ConcurrentHashMap<>();
|
||||
|
||||
/**
|
||||
* 状态类型修改记录
|
||||
*/
|
||||
private static final Map< StatusDescriptor, String > mModifier = new ConcurrentHashMap<>();
|
||||
|
||||
@Override
|
||||
public boolean isVoiceShow() {
|
||||
return get_bool_val( StatusDescriptor.VOICE_UI );
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isVrMode() {
|
||||
return get_bool_val(StatusDescriptor.VR_MODE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isV2XShow() {
|
||||
return get_bool_val( StatusDescriptor.V2X_UI );
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAccOn() {
|
||||
return get_bool_val( StatusDescriptor.ACC_STATUS );
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isMainPageOnResume() {
|
||||
return get_bool_val( StatusDescriptor.MAIN_PAGE_RESUME );
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isMainPageIsBackground() {
|
||||
return get_bool_val( StatusDescriptor.MAIN_PAGE_IS_BACKGROUND );
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isMainPageLaunched() {
|
||||
return get_bool_val( StatusDescriptor.MAIN_PAGE_CREATED );
|
||||
}
|
||||
|
||||
private boolean get_bool_val(StatusDescriptor descriptor ) {
|
||||
Boolean val = mStatus.get( descriptor );
|
||||
return val != null && val;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setVrMode(String tag, boolean vrMode) {
|
||||
doSetStatus(tag, StatusDescriptor.VR_MODE, vrMode);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setVoiceUIShow( String tag, boolean show ) {
|
||||
doSetStatus( tag, StatusDescriptor.VOICE_UI, show );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setV2XUIShow( String tag, boolean show ) {
|
||||
doSetStatus( tag, StatusDescriptor.V2X_UI, show );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAccStatus( String tag, boolean isOn ) {
|
||||
doSetStatus( tag, StatusDescriptor.ACC_STATUS, isOn );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setMainPageResumeStatus( String tag, boolean resume ) {
|
||||
doSetStatus( tag, StatusDescriptor.MAIN_PAGE_RESUME, resume );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setMainPageIsBackgroundStatus(String tag, boolean isBackground) {
|
||||
doSetStatus( tag, StatusDescriptor.MAIN_PAGE_IS_BACKGROUND, isBackground );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAIAssistReady( String tag, boolean ready ) {
|
||||
doSetStatus( tag, StatusDescriptor.AI_ASSIST_READY, ready );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSeekHelping( String tag, boolean seekHelping ) {
|
||||
doSetStatus( tag, StatusDescriptor.SEEK_HELPING, seekHelping );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setMainPageLaunchedStatus( String tag, boolean launched ) {
|
||||
doSetStatus( tag, StatusDescriptor.MAIN_PAGE_CREATED, launched );
|
||||
}
|
||||
|
||||
private void doSetStatus( String tag, StatusDescriptor target, boolean value ) {
|
||||
mStatus.put( target, value );
|
||||
invokeStatusChangedListener( target, value );
|
||||
recordStatusModifier( tag, target );
|
||||
}
|
||||
|
||||
private void invokeStatusChangedListener( StatusDescriptor descriptor, boolean status ) {
|
||||
List< IMogoStatusChangedListener > listenerList = mListeners.get( descriptor );
|
||||
if ( listenerList != null && listenerList.size() > 0 ) {
|
||||
IMogoStatusChangedListener[] listeners = new IMogoStatusChangedListener[listenerList.size()];
|
||||
listenerList.toArray( listeners );
|
||||
for ( IMogoStatusChangedListener listener : listeners ) {
|
||||
if ( listener != null ) {
|
||||
listener.onStatusChanged( descriptor, status );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void recordStatusModifier( String tag, StatusDescriptor descriptor ) {
|
||||
mModifier.put( descriptor, tag );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerStatusChangedListener( String tag, StatusDescriptor descriptor, IMogoStatusChangedListener listener ) {
|
||||
if ( listener == null || descriptor == null ) {
|
||||
return;
|
||||
}
|
||||
if ( !mListeners.containsKey( descriptor ) ) {
|
||||
mListeners.put( descriptor, new ArrayList<>() );
|
||||
}
|
||||
mListeners.get( descriptor ).add( listener );
|
||||
|
||||
if ( listener instanceof IMogoStickyStatusChangedListener && ((IMogoStickyStatusChangedListener)listener).requestStickyStatus( descriptor ) ) {
|
||||
Boolean val = mStatus.get( descriptor );
|
||||
if ( val != null ) {
|
||||
listener.onStatusChanged( descriptor, get_bool_val( descriptor ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unregisterStatusChangedListener( String tag, StatusDescriptor descriptor, IMogoStatusChangedListener listener ) {
|
||||
if ( mListeners.get( descriptor ) != null ) {
|
||||
mListeners.get( descriptor ).remove( listener );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init( Context context ) {
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user