From c8fc9e7734bd4849a03033875c26f71918bc7494 Mon Sep 17 00:00:00 2001 From: tongchenfei Date: Mon, 22 Jun 2020 14:57:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=88=E5=B9=B6extention=E5=92=8Centrance?= =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../extensions/entrance/EntranceFragment.java | 71 ++++++ .../entrance/EntrancePresenter.java | 143 ++++++++++- .../extensions/entrance/EntranceView.java | 3 +- .../res/layout/include_navi_info_panle.xml | 219 +++++++++++++++++ .../res/layout/module_ext_layout_entrance.xml | 229 +----------------- .../layout/module_ext_layout_extensions.xml | 19 +- .../com/mogo/module/main/MainActivity.java | 10 +- .../res/layout/module_main_activity_main.xml | 14 +- 8 files changed, 455 insertions(+), 253 deletions(-) create mode 100644 modules/mogo-module-extensions/src/main/res/layout/include_navi_info_panle.xml diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java index bc8988abcc..e60d3e3f3c 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java @@ -6,6 +6,7 @@ import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; +import android.text.TextUtils; import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; @@ -39,7 +40,9 @@ import com.mogo.module.common.map.Scene; import com.mogo.module.extensions.ExtensionsModuleConst; import com.mogo.module.extensions.R; import com.mogo.module.extensions.navi.NaviInfoView; +import com.mogo.module.extensions.userinfo.UserInfo; import com.mogo.module.extensions.utils.TopViewAnimHelper; +import com.mogo.module.share.manager.ServiceApisManager; import com.mogo.service.IMogoServiceApis; import com.mogo.service.MogoServicePaths; import com.mogo.service.analytics.IMogoAnalytics; @@ -55,6 +58,7 @@ import com.mogo.service.windowview.IMogoTopViewStatusListener; import com.mogo.utils.LaunchUtils; import com.mogo.utils.ResourcesHelper; import com.mogo.utils.UiThreadHandler; +import com.mogo.utils.glide.GlideApp; import com.mogo.utils.logger.Logger; import java.util.ArrayList; @@ -107,6 +111,17 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent private EntrancePresenter mEntrancePresenter; private IMogoStatusManager mStatusManager; + public static final int MAX_DISPLAY_MSG_AMOUNT = 99; + + private View mWeatherContainer; + private ImageView mWeatherIcon; + private TextView mWeatherTemp; + + private View mMsgContainer; + private TextView mMsgCounter; + + private ImageView mUserHeadImg; + /** * 搜索莫模块 @@ -402,6 +417,32 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent e.printStackTrace(); } } ); + + mWeatherContainer = findViewById( R.id.module_ext_id_weather_container ); + mWeatherIcon = findViewById( R.id.module_ext_id_weather_icon ); + mWeatherTemp = findViewById( R.id.module_ext_id_weather_temp ); + + mUserHeadImg = findViewById(R.id.ivUserHeadImg); + + mMsgContainer = findViewById( R.id.module_ext_id_msg ); + + mMsgContainer.setOnClickListener( view -> { + ARouter.getInstance().build( "/push/ui/message" ).navigation( getContext() ); + } ); + mMsgCounter = findViewById( R.id.module_ext_id_msg_counter ); + mUserHeadImg.setOnClickListener(view ->{ + try { + LaunchUtils.launchByPkg(getContext(), "com.zhidao.auto.personal"); + // 埋点 + final Map properties = new HashMap<>(); + properties.put("type", 3); + ServiceApisManager.serviceApis.getAnalyticsApi().track( "Launcher_APP_Icon", properties ); + } catch (Exception e) { + Logger.e(TAG, e, "打开个人中心Exception"); + } + }); + + mUserHeadImg.setVisibility(DebugConfig.isLauncher()?View.VISIBLE:View.GONE); } public void showShareDialog() { @@ -602,4 +643,34 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent // 30s 后无论成功与否,停止动画 mUploadFrameAnimHandler.sendEmptyMessageDelayed( MSG_STOP_ANIM, 30_000 ); } + + @Override + public void renderWeatherInfo( String temp, String desc, int iconId ) { + boolean hidden = false; + if ( iconId != 0 ) { + mWeatherIcon.setImageResource( iconId ); + mWeatherIcon.setVisibility( View.VISIBLE ); + } else { + mWeatherIcon.setVisibility( View.GONE ); + hidden |= true; + } + hidden |= TextUtils.isEmpty( temp ); + hidden |= TextUtils.isEmpty( desc ); + mWeatherTemp.setText( temp ); + mWeatherContainer.setVisibility( hidden ? View.GONE : View.VISIBLE ); + } + + @Override + public void renderMsgInfo( boolean hasMsg, int amount ) { + mMsgContainer.setVisibility( hasMsg ? View.VISIBLE : View.GONE ); + mMsgCounter.setText( amount > MAX_DISPLAY_MSG_AMOUNT ? getString( R.string.module_ext_str_dots ) : String.valueOf( amount ) ); + } + + @Override + public void renderUserInfo(UserInfo userInfo) { + if(userInfo != null){ + Logger.d(TAG, "renderUserInfo: " + userInfo); + GlideApp.with(getContext()).load(userInfo.getHeadImgurl()).circleCrop().into(mUserHeadImg); + } + } } diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntrancePresenter.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntrancePresenter.java index e93ab8a7b9..e638517410 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntrancePresenter.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntrancePresenter.java @@ -1,11 +1,38 @@ package com.mogo.module.extensions.entrance; import android.content.Context; +import android.util.ArrayMap; import androidx.annotation.NonNull; import androidx.lifecycle.LifecycleOwner; +import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.mvp.Presenter; +import com.mogo.module.extensions.R; +import com.mogo.module.extensions.net.UserInfoNetApiServices; +import com.mogo.module.extensions.userinfo.UserInfo; +import com.mogo.module.extensions.userinfo.UserInfoConstant; +import com.mogo.module.extensions.userinfo.UserInfoResponse; +import com.mogo.module.extensions.utils.ExtensionsConfig; +import com.mogo.module.extensions.weather.Phenomena; +import com.mogo.module.extensions.weather.WeatherCallback; +import com.mogo.module.extensions.weather.WeatherInfo; +import com.mogo.module.extensions.weather.WeatherModel; +import com.mogo.service.IMogoServiceApis; +import com.mogo.service.MogoServicePaths; +import com.mogo.service.network.IMogoNetwork; +import com.mogo.service.statusmanager.IMogoMsgCenter; +import com.mogo.service.statusmanager.IMogoMsgCenterListener; +import com.mogo.utils.digest.DigestUtils; +import com.mogo.utils.logger.Logger; +import com.zhidao.auto.platform.util.DeviceUtil; + +import java.util.Map; + +import io.reactivex.SingleObserver; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; +import io.reactivex.schedulers.Schedulers; /** * @author congtaowang @@ -13,23 +40,123 @@ import com.mogo.commons.mvp.Presenter; *

* 描述 */ -public class EntrancePresenter extends Presenter { +public class EntrancePresenter extends Presenter implements WeatherCallback, + IMogoMsgCenterListener { + private static final String TAG = "EntrancePresenter"; + + private WeatherModel mWeatherModel; + + private IMogoMsgCenter mMsgCenter; + + private IMogoNetwork mNetWork; public EntrancePresenter(Context context, EntranceView view) { super(view); + mWeatherModel = new WeatherModel( getContext() ); + mNetWork = + ((IMogoServiceApis) ARouter.getInstance().build(MogoServicePaths.PATH_SERVICE_APIS).navigation(view.getContext())).getNetworkApi(); } - - @Override - public void onResume(@NonNull LifecycleOwner owner) { - super.onResume(owner); - } - - @Override public void onCreate(@NonNull LifecycleOwner owner) { super.onCreate(owner); + mWeatherModel.init( this ); + mWeatherModel.queryWeatherInformation(); + mMsgCenter = ( IMogoMsgCenter ) ARouter.getInstance().build( MogoServicePaths.PATH_MSG_CENTER ).navigation(); + mMsgCenter.registerMsgCenterListener( this ); } + @Override + public void onWeatherLoaded( WeatherInfo weatherInfo ) { + if ( weatherInfo == null ) { + return; + } + String temp = getContext().getResources().getString( R.string.module_ext_str_weather_temp_format, weatherInfo.getTemperature() ); + Phenomena phenomena = Phenomena.getById( weatherInfo.getPhenomena() ); + String desc = phenomena == null ? "" : phenomena.nameCn; + int resId = phenomena.resId; + mView.renderWeatherInfo( temp, desc, resId ); + } + + @Override + public void onMsgChanged( boolean hasMsg, int amount ) { + if ( mView != null ) { + mView.renderMsgInfo( hasMsg, amount ); + } + } + + @Override + public void onResume( @NonNull LifecycleOwner owner ) { + super.onResume( owner ); + if(ExtensionsConfig.needRequestUserInfo()){ + // 相当于每次onResume都会请求一下个人信息,目的是能够相对及时的同步手机端的个人信息修改 + requestUserInfo(); + } + } + + @Override + public void onPause( @NonNull LifecycleOwner owner ) { + super.onPause( owner ); + } + + @Override + public void onDestroy( @NonNull LifecycleOwner owner ) { + super.onDestroy( owner ); + if ( mWeatherModel != null ) { + mWeatherModel.destroy(); + } + if ( mMsgCenter != null ) { + mMsgCenter.unregisterMsgCenterListener( this ); + } + } + + private UserInfo userInfo; + public void requestUserInfo() { + Map params = new ArrayMap<>(); + params.put("sn", DeviceUtil.getSn()); + params.put("source", "2"); + String sign = createSign(params, "JGqZw9"); + params.put("sig", sign); + mNetWork.create(UserInfoNetApiServices.class, UserInfoConstant.getUserInfoBaseUrl()).requestUserInfo(params).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new SingleObserver() { + @Override + public void onSubscribe(Disposable d) { + } + + @Override + public void onSuccess(UserInfoResponse userInfoBaseResponse) { + userInfo = userInfoBaseResponse.getResult(); + if(userInfo!=null) { + Logger.d(TAG, "获取个人信息成功: " + userInfo); + mView.renderUserInfo(userInfo); + }else{ + Logger.e(TAG,"获取个人信息失败"); + } + } + + @Override + public void onError(Throwable e) { + e.printStackTrace(); + Logger.e(TAG, e, "获取个人信息失败=="); + } + }); + } + + private String createSign(Map map, String salt) { + try { + StringBuilder queryString = new StringBuilder(); + for (Map.Entry entry : map.entrySet()) { + queryString.append(entry.getKey()) + .append("=") + .append(entry.getValue()) + .append("&"); + } + queryString.append("key=").append(DigestUtils.shaHex(salt)); + return DigestUtils.shaHex(queryString.toString()).toUpperCase(); + } catch (Exception e) { + e.printStackTrace(); + Logger.e(TAG, e, "createSign()"); + return ""; + } + } } diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceView.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceView.java index 5f37f0256d..82abc6df6d 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceView.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceView.java @@ -1,6 +1,7 @@ package com.mogo.module.extensions.entrance; import com.mogo.commons.mvp.IView; +import com.mogo.module.extensions.ExtensionsView; import com.mogo.module.extensions.userinfo.UserInfo; /** @@ -9,5 +10,5 @@ import com.mogo.module.extensions.userinfo.UserInfo; *

* 描述 */ -public interface EntranceView extends IView { +public interface EntranceView extends ExtensionsView { } diff --git a/modules/mogo-module-extensions/src/main/res/layout/include_navi_info_panle.xml b/modules/mogo-module-extensions/src/main/res/layout/include_navi_info_panle.xml new file mode 100644 index 0000000000..431f1560b1 --- /dev/null +++ b/modules/mogo-module-extensions/src/main/res/layout/include_navi_info_panle.xml @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml index 95ceaa4c07..24f3ea1443 100644 --- a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml +++ b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml @@ -6,226 +6,15 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - - - - - - + android:layout_height="wrap_content" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -265,7 +54,7 @@ android:orientation="vertical" android:gravity="center_horizontal" android:visibility="gone" - tools:visibility="visible" + tools:visibility="gone" app:layout_constraintLeft_toLeftOf="@+id/module_map_id_navi_bg" app:layout_constraintTop_toBottomOf="@+id/module_map_id_navi_bg"> diff --git a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_extensions.xml b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_extensions.xml index 827a2becac..cc2b4a2d2c 100644 --- a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_extensions.xml +++ b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_extensions.xml @@ -1,21 +1,18 @@ - + xmlns:app="http://schemas.android.com/apk/res-auto" + tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"> @@ -71,10 +68,8 @@ android:id="@+id/ivUserHeadImg" android:layout_width="@dimen/module_ext_height" android:layout_height="@dimen/module_ext_height" - android:layout_marginEnd="@dimen/dp_30" android:src="@drawable/model_ext_default_user_head" app:layout_constraintRight_toRightOf="parent" - app:layout_constraintTop_toTopOf="parent" /> - - - \ No newline at end of file + app:layout_constraintTop_toTopOf="@+id/module_ext_id_weather_container" + app:layout_constraintBottom_toBottomOf="@+id/module_ext_id_weather_container"/> + \ No newline at end of file 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 5553aeab37..21a1949282 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 @@ -60,7 +60,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme protected IMogoFragmentManager mMogoFragmentManager; protected IMogoStatusManager mMogoStatusManager; - protected View mHeader; +// protected View mHeader; protected View mApps; protected View mEntrance; protected FrameLayout mFloatingLayout; @@ -77,7 +77,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme getWindow().setBackgroundDrawable( null ); - mHeader = findViewById( R.id.module_main_id_header_fragment_container ); +// mHeader = findViewById( R.id.module_main_id_header_fragment_container ); mApps = findViewById( R.id.module_main_id_apps_fragment_container ); mEntrance = findViewById( R.id.module_main_id_entrance_fragment_container ); mFloatingLayout = findViewById( R.id.module_main_id_floating_view ); @@ -92,14 +92,14 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme // 隐藏布局 protected void hideLayout() { - mHeader.setVisibility( View.GONE ); +// mHeader.setVisibility( View.GONE ); mEntrance.setVisibility( View.GONE ); mFloatingLayout.setVisibility( View.GONE ); } // 显示布局 protected void showLayout() { - mHeader.setVisibility( View.VISIBLE ); +// mHeader.setVisibility( View.VISIBLE ); mEntrance.setVisibility( View.VISIBLE ); mFloatingLayout.setVisibility( View.VISIBLE ); } @@ -176,7 +176,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme } protected void loadContainerModules() { - MogoModulesManager.getInstance().loadExtensionsModule( R.id.module_main_id_header_fragment_container ); +// MogoModulesManager.getInstance().loadExtensionsModule( R.id.module_main_id_header_fragment_container ); MogoModulesManager.getInstance().loadEntrancesModule( R.id.module_main_id_entrance_fragment_container ); } diff --git a/modules/mogo-module-main/src/main/res/layout/module_main_activity_main.xml b/modules/mogo-module-main/src/main/res/layout/module_main_activity_main.xml index 1f9c30d179..c19e5eb10e 100644 --- a/modules/mogo-module-main/src/main/res/layout/module_main_activity_main.xml +++ b/modules/mogo-module-main/src/main/res/layout/module_main_activity_main.xml @@ -19,13 +19,13 @@ android:background="@drawable/module_main_dw_left_frame_bkg" tools:visibility="visible" /> - - + + + + + + +