From 4335e68accb78a6df072f4c66ad56168054ec815 Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Thu, 10 Sep 2020 11:31:17 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E8=A7=A3=E5=86=B3=E9=AB=98=E5=BE=B7?= =?UTF-8?q?=E5=9C=B0=E5=9B=BE=E5=AF=BC=E8=88=AA=E5=AE=9E=E4=BE=8B=E6=97=A0?= =?UTF-8?q?=E6=B3=95inflate=E7=9A=84=E9=97=AE=E9=A2=98=202.=20=E5=9C=A8?= =?UTF-8?q?=E4=B8=BB=E9=A1=B5=E4=B8=AD=E5=8A=A0=E8=BD=BD=E6=8D=A2=E8=82=A4?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mogo/launcher/MogoApplication.java | 14 +- .../com/mogo/commons/mvp/MvpActivity.java | 5 + .../mogo/map/impl/amap/AMapBaseMapView.java | 10 +- .../mogo/map/impl/amap/AMapViewHandler.java | 37 +++++ .../mogo/map/impl/amap/AMapViewWrapper.java | 5 +- .../mogo/map/IMogoMapViewInstanceHandler.java | 15 ++ .../mogo/map/MogoMapViewInstanceHandler.java | 49 ++++++ modules/mogo-module-main/build.gradle | 2 + .../com/mogo/module/main/MainActivity.java | 19 ++- .../com/mogo/service/map/IMogoMapService.java | 8 + .../mogo/service/impl/map/MogoMapService.java | 10 +- .../support/impl/SkinSupportInstaller.java | 9 +- .../support/noop/SkinSupportInstaller.java | 7 + .../support/IMogoSkinSupportInstaller.java | 6 +- .../support/app/SkinActivityLifecycle.java | 149 +++++++++--------- 15 files changed, 252 insertions(+), 93 deletions(-) create mode 100644 libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapViewHandler.java create mode 100644 libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMapViewInstanceHandler.java create mode 100644 libraries/mogo-map/src/main/java/com/mogo/map/MogoMapViewInstanceHandler.java diff --git a/app/src/main/java/com/mogo/launcher/MogoApplication.java b/app/src/main/java/com/mogo/launcher/MogoApplication.java index 230145ae80..58c4a17564 100644 --- a/app/src/main/java/com/mogo/launcher/MogoApplication.java +++ b/app/src/main/java/com/mogo/launcher/MogoApplication.java @@ -1,6 +1,5 @@ package com.mogo.launcher; -import android.app.Application; import android.content.Context; import android.content.Intent; import android.text.TextUtils; @@ -138,14 +137,16 @@ public class MogoApplication extends AbsMogoApplication { @Override protected void init() { super.init(); - prepareBaseService( 2_000L ); + final IMogoServiceApis apis = ARouter.getInstance().navigation( IMogoServiceApis.class ); + prepareBaseService( apis, 2_000L ); +// installSkinManager( this, apis ); } /** * 基础服务:passport、location、socket */ - private void prepareBaseService( long delay ) { - final IMogoServiceApis apis = ARouter.getInstance().navigation( IMogoServiceApis.class ); + private void prepareBaseService( IMogoServiceApis apis, long delay ) { + UiThreadHandler.postDelayed( () -> { // 第三方平台的sn是服务端生成的,所以必须在返回后才能开启 if ( TextUtils.isEmpty( Utils.getSn() ) ) { @@ -157,7 +158,6 @@ public class MogoApplication extends AbsMogoApplication { prepareSocketAndLocationServices( apis ); } }, delay ); - installSkinManager( this, apis ); } private void preparePassportEnvironment( IMogoServiceApis apis, Runnable after ) { @@ -189,10 +189,6 @@ public class MogoApplication extends AbsMogoApplication { } ); } - private void installSkinManager( Application application, IMogoServiceApis apis ) { - apis.getSkinSupportInstallerApi().install( application ); - } - @Override protected void attachBaseContext( Context base ) { super.attachBaseContext( base ); diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/mvp/MvpActivity.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/mvp/MvpActivity.java index 27f41aef51..8f165549a0 100644 --- a/foudations/mogo-commons/src/main/java/com/mogo/commons/mvp/MvpActivity.java +++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/mvp/MvpActivity.java @@ -29,6 +29,7 @@ public abstract class MvpActivity< V extends IView, P extends Presenter< V > > @Override protected void onCreate( @Nullable Bundle savedInstanceState ) { super.onCreate( savedInstanceState ); + beforeSetContentView(savedInstanceState); if ( DebugConfig.getCarMachineType() == DebugConfig.CAR_MACHINE_TYPE_BYD ) { requestWindowFeature( Window.FEATURE_NO_TITLE ); getWindow().setFlags( WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN ); @@ -39,6 +40,10 @@ public abstract class MvpActivity< V extends IView, P extends Presenter< V > > getLifecycle().addObserver( mPresenter ); } + protected void beforeSetContentView(Bundle savedInstanceState){ + + } + /** * 布局资源 * diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapBaseMapView.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapBaseMapView.java index b8055d9cc9..35bb08ad69 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapBaseMapView.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapBaseMapView.java @@ -5,9 +5,6 @@ import android.util.AttributeSet; import androidx.annotation.Nullable; -import com.amap.api.maps.MapView; -import com.amap.api.navi.AMapNaviView; -import com.mogo.commons.debug.DebugConfig; import com.mogo.map.IMogoMapView; import com.mogo.map.MogoBaseMapView; @@ -19,6 +16,8 @@ import com.mogo.map.MogoBaseMapView; */ public class AMapBaseMapView extends MogoBaseMapView { + private static final String TAG = "AMapBaseMapView"; + public AMapBaseMapView( Context context ) { super( context ); } @@ -33,9 +32,6 @@ public class AMapBaseMapView extends MogoBaseMapView { @Override protected IMogoMapView createMapView( Context context ) { - if ( DebugConfig.getCarMachineType() != DebugConfig.CAR_MACHINE_TYPE_BYD ) { - return new AMapViewWrapper( new MapView( context ) ); - } - return new AMapNaviViewWrapper( new AMapNaviView( context ) ); + return AMapViewHandler.getMapView(); } } diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapViewHandler.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapViewHandler.java new file mode 100644 index 0000000000..6bf6a5fc51 --- /dev/null +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapViewHandler.java @@ -0,0 +1,37 @@ +package com.mogo.map.impl.amap; + +import android.content.Context; + +import com.amap.api.maps.TextureMapView; +import com.amap.api.navi.AMapNaviView; +import com.mogo.commons.debug.DebugConfig; +import com.mogo.map.IMogoMapView; + +public + +/** + * @author congtaowang + * @since 2020/9/10 + *

+ * 描述 + */ +class AMapViewHandler { + + private static IMogoMapView sMapView; + + public static void createMapView( Context context ) { + if ( DebugConfig.getCarMachineType() == DebugConfig.CAR_MACHINE_TYPE_SELF_INNOVATE ) { + sMapView = new AMapViewWrapper( new TextureMapView( context ) ); + } else { + sMapView = new AMapNaviViewWrapper( new AMapNaviView( context ) ); + } + } + + public static IMogoMapView getMapView() { + return sMapView; + } + + public static void destroy() { + sMapView = null; + } +} diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapViewWrapper.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapViewWrapper.java index de0604c38f..f346df9a46 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapViewWrapper.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapViewWrapper.java @@ -17,6 +17,7 @@ import com.amap.api.maps.AMap; import com.amap.api.maps.AMapUtils; import com.amap.api.maps.CameraUpdateFactory; import com.amap.api.maps.MapView; +import com.amap.api.maps.TextureMapView; import com.amap.api.maps.model.BitmapDescriptorFactory; import com.amap.api.maps.model.CameraPosition; import com.amap.api.maps.model.CameraPositionCreator; @@ -72,7 +73,7 @@ public class AMapViewWrapper implements IMogoMapView, private static final String TAG = "AMapViewWrapper"; - private final MapView mMapView; + private final TextureMapView mMapView; private IMogoMap mIMap; private AMapMarkerClickHandler mMarkerClickHandler; @@ -87,7 +88,7 @@ public class AMapViewWrapper implements IMogoMapView, .build(); private CarCursorOption mCarCursorOption = DEFAULT_OPTION; - public AMapViewWrapper( MapView mapView ) { + public AMapViewWrapper( TextureMapView mapView ) { this.mMapView = mapView; this.mIMap = new AMapWrapper( mMapView.getMap(), mMapView.getContext(), this ); try { diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMapViewInstanceHandler.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMapViewInstanceHandler.java new file mode 100644 index 0000000000..55d5b23a2f --- /dev/null +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMapViewInstanceHandler.java @@ -0,0 +1,15 @@ +package com.mogo.map; + +import android.content.Context; + +public +/** + * @author congtaowang + * @since 2020/9/10 + * + * 描述 + */ +interface IMogoMapViewInstanceHandler extends IDestroyable { + + void createMapViewInstance( Context context ); +} diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapViewInstanceHandler.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapViewInstanceHandler.java new file mode 100644 index 0000000000..b3e6bf7a2b --- /dev/null +++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapViewInstanceHandler.java @@ -0,0 +1,49 @@ +package com.mogo.map; + +import android.content.Context; + +import com.mogo.map.impl.amap.AMapViewHandler; + +public +/** + * @author congtaowang + * @since 2020/9/10 + * + * 描述 + */ +class MogoMapViewInstanceHandler implements IMogoMapViewInstanceHandler { + + private static volatile MogoMapViewInstanceHandler sInstance; + + private MogoMapViewInstanceHandler(){} + + public static MogoMapViewInstanceHandler getInstance(){ + if( sInstance == null ){ + synchronized( MogoMapViewInstanceHandler.class ) { + if( sInstance == null ){ + sInstance = new MogoMapViewInstanceHandler(); + } + } + } + return sInstance; + } + + public synchronized void release(){ + sInstance = null; + } + + private Object readResolve() { + // 阻止反序列化,必须实现 Serializable 接口 + return sInstance; + } + + @Override + public void createMapViewInstance( Context context ) { + AMapViewHandler.createMapView( context ); + } + + @Override + public void destroy() { + AMapViewHandler.destroy(); + } +} diff --git a/modules/mogo-module-main/build.gradle b/modules/mogo-module-main/build.gradle index f02e1cfff6..cec34c9537 100644 --- a/modules/mogo-module-main/build.gradle +++ b/modules/mogo-module-main/build.gradle @@ -52,6 +52,7 @@ dependencies { api rootProject.ext.dependencies.moduleservice api rootProject.ext.dependencies.moduleapps api rootProject.ext.dependencies.moduleextensions + compileOnly rootProject.ext.dependencies.skinsupport } else { api project(":foudations:mogo-utils") api project(":foudations:mogo-commons") @@ -62,6 +63,7 @@ dependencies { api project(':services:mogo-service') api project(':modules:mogo-module-apps') api project(':modules:mogo-module-extensions') + compileOnly project(':skin:mogo-skin-support') } } diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java index 3244b43a83..0c0ef0ba16 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java @@ -73,6 +73,23 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme return R.layout.module_main_activity_main; } + @Override + protected void beforeSetContentView( Bundle savedInstanceState ) { + init(); + installSkinManager( savedInstanceState ); + } + + /** + * 安装皮肤支持 + * + * @param savedInstanceState + */ + private void installSkinManager( Bundle savedInstanceState ) { + mServiceApis.getMapServiceApi().getMapViewInstanceHandler().createMapViewInstance( this ); + mServiceApis.getSkinSupportInstallerApi().install( getApplication() ); + mServiceApis.getSkinSupportInstallerApi().onCompensateActivityCreated( this, savedInstanceState ); + } + @Override protected void initViews() { @@ -113,7 +130,6 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme @Override protected void onCreate( @Nullable Bundle savedInstanceState ) { super.onCreate( savedInstanceState ); - init(); mPresenter.postLoadModuleMsg(); } @@ -326,6 +342,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme mMogoMapService = null; mMogoMapUIController = null; mMogoFragmentManager = null; + mServiceApis.getMapServiceApi().getMapViewInstanceHandler().destroy(); AdasConfigApiController.getInstance().release(); mServiceApis.getAdasControllerApi().release(); Logger.d( TAG, "destroy." ); diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapService.java b/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapService.java index 0d47238536..fc0f61d014 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapService.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapService.java @@ -3,6 +3,7 @@ package com.mogo.service.map; import android.content.Context; import com.alibaba.android.arouter.facade.template.IProvider; +import com.mogo.map.IMogoMapViewInstanceHandler; import com.mogo.map.listener.IMogoHosListenerRegister; import com.mogo.map.location.IMogoLocationClient; import com.mogo.map.marker.IMogoMarkerManager; @@ -111,4 +112,11 @@ public interface IMogoMapService extends IProvider { * @return */ IMogoRoadSearch getRoadSearchApi(); + + /** + * 地图实例 + * + * @return + */ + IMogoMapViewInstanceHandler getMapViewInstanceHandler(); } diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/map/MogoMapService.java b/services/mogo-service/src/main/java/com/mogo/service/impl/map/MogoMapService.java index ac8d5c81fb..4038c5533d 100644 --- a/services/mogo-service/src/main/java/com/mogo/service/impl/map/MogoMapService.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/map/MogoMapService.java @@ -3,15 +3,17 @@ package com.mogo.service.impl.map; import android.content.Context; import com.alibaba.android.arouter.facade.annotation.Route; -import com.mogo.map.MogoRoadSearch; +import com.mogo.map.IMogoMapViewInstanceHandler; import com.mogo.map.MogoGeoSearch; import com.mogo.map.MogoInputtipsSearch; import com.mogo.map.MogoLocationClient; import com.mogo.map.MogoMapUIController; +import com.mogo.map.MogoMapViewInstanceHandler; import com.mogo.map.MogoMarkerManager; import com.mogo.map.MogoNavi; import com.mogo.map.MogoOverlayManager; import com.mogo.map.MogoPoiSearch; +import com.mogo.map.MogoRoadSearch; import com.mogo.map.listener.IMogoHosListenerRegister; import com.mogo.map.listener.MogoHosListenerRegister; import com.mogo.map.location.IMogoLocationClient; @@ -92,7 +94,13 @@ public class MogoMapService implements IMogoMapService { return new MogoRoadSearch(); } + @Override + public IMogoMapViewInstanceHandler getMapViewInstanceHandler() { + return MogoMapViewInstanceHandler.getInstance(); + } + @Override public void init( Context context ) { } + } diff --git a/skin/mogo-skin-support-impl/src/main/java/com/mogo/skin/support/impl/SkinSupportInstaller.java b/skin/mogo-skin-support-impl/src/main/java/com/mogo/skin/support/impl/SkinSupportInstaller.java index ab4ffcb3f2..a9b4e2a514 100644 --- a/skin/mogo-skin-support-impl/src/main/java/com/mogo/skin/support/impl/SkinSupportInstaller.java +++ b/skin/mogo-skin-support-impl/src/main/java/com/mogo/skin/support/impl/SkinSupportInstaller.java @@ -3,6 +3,7 @@ package com.mogo.skin.support.impl; import android.app.Activity; import android.app.Application; import android.content.Context; +import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatCallback; @@ -15,6 +16,7 @@ import com.mogo.skin.support.SkinMode; import com.mogo.skin.support.SkinSupportInstallerConstants; import skin.support.SkinCompatManager; +import skin.support.app.SkinActivityLifecycle; import skin.support.app.SkinAppCompatViewInflater; import skin.support.app.SkinCardViewInflater; import skin.support.constraint.app.SkinConstraintViewInflater; @@ -60,10 +62,15 @@ class SkinSupportInstaller implements IMogoSkinSupportInstaller { } @Override - public AppCompatDelegate getSkinAppCompatDelegate( AppCompatActivity activity,AppCompatDelegate superDelegate, AppCompatCallback callback ) { + public AppCompatDelegate getSkinAppCompatDelegate( AppCompatActivity activity, AppCompatDelegate superDelegate, AppCompatCallback callback ) { return SkinAppCompatDelegateImpl.get( activity, callback ); } + @Override + public void onCompensateActivityCreated( Activity activity, Bundle savedInstanceState ) { + SkinActivityLifecycle.init( activity.getApplication() ).onCompensateActivityCreated( activity, savedInstanceState ); + } + @Override public void init( Context context ) { diff --git a/skin/mogo-skin-support-noop/src/main/java/com/mogo/skin/support/noop/SkinSupportInstaller.java b/skin/mogo-skin-support-noop/src/main/java/com/mogo/skin/support/noop/SkinSupportInstaller.java index f7d09f1e96..94ab26fbcf 100644 --- a/skin/mogo-skin-support-noop/src/main/java/com/mogo/skin/support/noop/SkinSupportInstaller.java +++ b/skin/mogo-skin-support-noop/src/main/java/com/mogo/skin/support/noop/SkinSupportInstaller.java @@ -1,7 +1,9 @@ package com.mogo.skin.support.noop; +import android.app.Activity; import android.app.Application; import android.content.Context; +import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatCallback; @@ -40,6 +42,11 @@ class SkinSupportInstaller implements IMogoSkinSupportInstaller { return superDelegate; } + @Override + public void onCompensateActivityCreated( Activity activity, Bundle savedInstanceState ) { + Logger.d( TAG, "noop - onCompensateActivityCreated" ); + } + @Override public void init( Context context ) { diff --git a/skin/mogo-skin-support/src/main/java/com/mogo/skin/support/IMogoSkinSupportInstaller.java b/skin/mogo-skin-support/src/main/java/com/mogo/skin/support/IMogoSkinSupportInstaller.java index a6dce85629..0cb5fd30a4 100644 --- a/skin/mogo-skin-support/src/main/java/com/mogo/skin/support/IMogoSkinSupportInstaller.java +++ b/skin/mogo-skin-support/src/main/java/com/mogo/skin/support/IMogoSkinSupportInstaller.java @@ -1,6 +1,8 @@ package com.mogo.skin.support; +import android.app.Activity; import android.app.Application; +import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatCallback; @@ -21,5 +23,7 @@ interface IMogoSkinSupportInstaller extends IProvider { void loadSkin( SkinMode skinMode ); - AppCompatDelegate getSkinAppCompatDelegate( AppCompatActivity activity,AppCompatDelegate superDelegate, AppCompatCallback callback ); + AppCompatDelegate getSkinAppCompatDelegate( AppCompatActivity activity, AppCompatDelegate superDelegate, AppCompatCallback callback ); + + void onCompensateActivityCreated( Activity activity, Bundle savedInstanceState ); } diff --git a/skin/skin-support/src/main/java/skin/support/app/SkinActivityLifecycle.java b/skin/skin-support/src/main/java/skin/support/app/SkinActivityLifecycle.java index 779a87faea..1eb25ffa39 100755 --- a/skin/skin-support/src/main/java/skin/support/app/SkinActivityLifecycle.java +++ b/skin/skin-support/src/main/java/skin/support/app/SkinActivityLifecycle.java @@ -26,128 +26,135 @@ import static skin.support.widget.SkinCompatHelper.checkResourceId; public class SkinActivityLifecycle implements Application.ActivityLifecycleCallbacks { private static final String TAG = "SkinActivityLifecycle"; private static volatile SkinActivityLifecycle sInstance = null; - private WeakHashMap mSkinDelegateMap; - private WeakHashMap mSkinObserverMap; + private WeakHashMap< Context, SkinCompatDelegate > mSkinDelegateMap; + private WeakHashMap< Context, LazySkinObserver > mSkinObserverMap; /** * 用于记录当前Activity,在换肤后,立即刷新当前Activity以及非Activity创建的View。 */ - private WeakReference mCurActivityRef; + private WeakReference< Activity > mCurActivityRef; - public static SkinActivityLifecycle init(Application application) { - if (sInstance == null) { - synchronized (SkinActivityLifecycle.class) { - if (sInstance == null) { - sInstance = new SkinActivityLifecycle(application); + public static SkinActivityLifecycle init( Application application ) { + if ( sInstance == null ) { + synchronized ( SkinActivityLifecycle.class ) { + if ( sInstance == null ) { + sInstance = new SkinActivityLifecycle( application ); } } } return sInstance; } - private SkinActivityLifecycle(Application application) { - application.registerActivityLifecycleCallbacks(this); - installLayoutFactory(application); - SkinCompatManager.getInstance().addObserver(getObserver(application)); + private SkinActivityLifecycle( Application application ) { + application.registerActivityLifecycleCallbacks( this ); + installLayoutFactory( application ); + SkinCompatManager.getInstance().addObserver( getObserver( application ) ); } @Override - public void onActivityCreated(Activity activity, Bundle savedInstanceState) { - if (isContextSkinEnable(activity)) { - installLayoutFactory(activity); - updateWindowBackground(activity); - if (activity instanceof SkinCompatSupportable) { - ((SkinCompatSupportable) activity).applySkin(); + public void onActivityCreated( Activity activity, Bundle savedInstanceState ) { + onCompensateActivityCreated( activity, savedInstanceState ); + } + + /** + * 补偿启动页的 create 回调 + */ + public void onCompensateActivityCreated( Activity activity, Bundle savedInstanceState ) { + if ( isContextSkinEnable( activity ) ) { + installLayoutFactory( activity ); + updateWindowBackground( activity ); + if ( activity instanceof SkinCompatSupportable ) { + ( ( SkinCompatSupportable ) activity ).applySkin(); } } } @Override - public void onActivityStarted(Activity activity) { + public void onActivityStarted( Activity activity ) { } @Override - public void onActivityResumed(Activity activity) { - mCurActivityRef = new WeakReference<>(activity); - if (isContextSkinEnable(activity)) { - LazySkinObserver observer = getObserver(activity); - SkinCompatManager.getInstance().addObserver(observer); + public void onActivityResumed( Activity activity ) { + mCurActivityRef = new WeakReference<>( activity ); + if ( isContextSkinEnable( activity ) ) { + LazySkinObserver observer = getObserver( activity ); + SkinCompatManager.getInstance().addObserver( observer ); observer.updateSkinIfNeeded(); } } @Override - public void onActivityPaused(Activity activity) { + public void onActivityPaused( Activity activity ) { } @Override - public void onActivityStopped(Activity activity) { + public void onActivityStopped( Activity activity ) { } @Override - public void onActivitySaveInstanceState(Activity activity, Bundle outState) { + public void onActivitySaveInstanceState( Activity activity, Bundle outState ) { } @Override - public void onActivityDestroyed(Activity activity) { - if (isContextSkinEnable(activity)) { - SkinCompatManager.getInstance().deleteObserver(getObserver(activity)); - mSkinObserverMap.remove(activity); - mSkinDelegateMap.remove(activity); + public void onActivityDestroyed( Activity activity ) { + if ( isContextSkinEnable( activity ) ) { + SkinCompatManager.getInstance().deleteObserver( getObserver( activity ) ); + mSkinObserverMap.remove( activity ); + mSkinDelegateMap.remove( activity ); } } - private void installLayoutFactory(Context context) { + private void installLayoutFactory( Context context ) { try { - LayoutInflater layoutInflater = LayoutInflater.from(context); - LayoutInflaterCompat.setFactory2(layoutInflater, getSkinDelegate(context)); - } catch (Throwable e) { - Slog.i("SkinActivity", "A factory has already been set on this LayoutInflater"); + LayoutInflater layoutInflater = LayoutInflater.from( context ); + LayoutInflaterCompat.setFactory2( layoutInflater, getSkinDelegate( context ) ); + } catch ( Throwable e ) { + Slog.i( "SkinActivity", "A factory has already been set on this LayoutInflater" ); } } - private SkinCompatDelegate getSkinDelegate(Context context) { - if (mSkinDelegateMap == null) { + private SkinCompatDelegate getSkinDelegate( Context context ) { + if ( mSkinDelegateMap == null ) { mSkinDelegateMap = new WeakHashMap<>(); } - SkinCompatDelegate mSkinDelegate = mSkinDelegateMap.get(context); - if (mSkinDelegate == null) { - mSkinDelegate = SkinCompatDelegate.create(context); - mSkinDelegateMap.put(context, mSkinDelegate); + SkinCompatDelegate mSkinDelegate = mSkinDelegateMap.get( context ); + if ( mSkinDelegate == null ) { + mSkinDelegate = SkinCompatDelegate.create( context ); + mSkinDelegateMap.put( context, mSkinDelegate ); } return mSkinDelegate; } - private LazySkinObserver getObserver(final Context context) { - if (mSkinObserverMap == null) { + private LazySkinObserver getObserver( final Context context ) { + if ( mSkinObserverMap == null ) { mSkinObserverMap = new WeakHashMap<>(); } - LazySkinObserver observer = mSkinObserverMap.get(context); - if (observer == null) { - observer = new LazySkinObserver(context); - mSkinObserverMap.put(context, observer); + LazySkinObserver observer = mSkinObserverMap.get( context ); + if ( observer == null ) { + observer = new LazySkinObserver( context ); + mSkinObserverMap.put( context, observer ); } return observer; } - private void updateWindowBackground(Activity activity) { - if (SkinCompatManager.getInstance().isSkinWindowBackgroundEnable()) { - int windowBackgroundResId = SkinCompatThemeUtils.getWindowBackgroundResId(activity); - if (checkResourceId(windowBackgroundResId) != INVALID_ID) { - Drawable drawable = SkinCompatResources.getDrawable(activity, windowBackgroundResId); - if (drawable != null) { - activity.getWindow().setBackgroundDrawable(drawable); + private void updateWindowBackground( Activity activity ) { + if ( SkinCompatManager.getInstance().isSkinWindowBackgroundEnable() ) { + int windowBackgroundResId = SkinCompatThemeUtils.getWindowBackgroundResId( activity ); + if ( checkResourceId( windowBackgroundResId ) != INVALID_ID ) { + Drawable drawable = SkinCompatResources.getDrawable( activity, windowBackgroundResId ); + if ( drawable != null ) { + activity.getWindow().setBackgroundDrawable( drawable ); } } } } - private boolean isContextSkinEnable(Context context) { + private boolean isContextSkinEnable( Context context ) { return SkinCompatManager.getInstance().isSkinAllActivityEnable() - || context.getClass().getAnnotation(Skinable.class) != null + || context.getClass().getAnnotation( Skinable.class ) != null || context instanceof SkinCompatSupportable; } @@ -155,16 +162,16 @@ public class SkinActivityLifecycle implements Application.ActivityLifecycleCallb private final Context mContext; private boolean mMarkNeedUpdate = false; - LazySkinObserver(Context context) { + LazySkinObserver( Context context ) { mContext = context; } @Override - public void updateSkin(SkinObservable observable, Object o) { + public void updateSkin( SkinObservable observable, Object o ) { // 当前Activity,或者非Activity,立即刷新,否则延迟到下次onResume方法中刷新。 - if (mCurActivityRef == null + if ( mCurActivityRef == null || mContext == mCurActivityRef.get() - || !(mContext instanceof Activity)) { + || !( mContext instanceof Activity ) ) { updateSkinForce(); } else { mMarkNeedUpdate = true; @@ -172,24 +179,24 @@ public class SkinActivityLifecycle implements Application.ActivityLifecycleCallb } void updateSkinIfNeeded() { - if (mMarkNeedUpdate) { + if ( mMarkNeedUpdate ) { updateSkinForce(); } } void updateSkinForce() { - if (Slog.DEBUG) { - Slog.i(TAG, "Context: " + mContext + " updateSkinForce"); + if ( Slog.DEBUG ) { + Slog.i( TAG, "Context: " + mContext + " updateSkinForce" ); } - if (mContext == null) { + if ( mContext == null ) { return; } - if (mContext instanceof Activity && isContextSkinEnable(mContext)) { - updateWindowBackground((Activity) mContext); + if ( mContext instanceof Activity && isContextSkinEnable( mContext ) ) { + updateWindowBackground( ( Activity ) mContext ); } - getSkinDelegate(mContext).applySkin(); - if (mContext instanceof SkinCompatSupportable) { - ((SkinCompatSupportable) mContext).applySkin(); + getSkinDelegate( mContext ).applySkin(); + if ( mContext instanceof SkinCompatSupportable ) { + ( ( SkinCompatSupportable ) mContext ).applySkin(); } mMarkNeedUpdate = false; }