diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java
index 8caeabbe1b..5813143c2b 100644
--- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java
+++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java
@@ -3,12 +3,17 @@ package com.mogo.module.apps;
import android.os.Bundle;
import android.view.View;
+import android.widget.HorizontalScrollView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.LinearSnapHelper;
+import androidx.recyclerview.widget.RecyclerView;
import com.alibaba.android.arouter.launcher.ARouter;
import com.mogo.commons.mvp.MvpFragment;
+import com.mogo.module.apps.adapter.AppIndicatorAdapter;
import com.mogo.module.apps.utils.LaunchUtils;
import com.mogo.module.common.MogoModulePaths;
import com.mogo.service.MogoServicePaths;
@@ -18,6 +23,7 @@ import com.mogo.service.fragmentmanager.IMogoFragmentManager;
import com.mogo.service.module.IMogoModuleProvider;
import com.mogo.utils.TipToast;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
@@ -27,11 +33,9 @@ import java.util.Map;
*
* 描述
*/
-public class AppNavigatorFragment extends MvpFragment< AppNavigatorView, AppNavigatorPresenter > implements AppNavigatorView {
+public class AppNavigatorFragment extends MvpFragment
+ implements AppNavigatorView {
- private View mNavigation;
- private View mMediaCenter;
- private View mCarSettings;
private View mApps;
private IMogoFragmentManager mMogoFragmentManager;
@@ -42,6 +46,7 @@ public class AppNavigatorFragment extends MvpFragment< AppNavigatorView, AppNavi
private IMogoModuleProvider mSearchProvider;
private IMogoAnalytics mMogoAnalytics;
+ private RecyclerView scroller;
@Override
protected int getLayoutId() {
@@ -51,66 +56,100 @@ public class AppNavigatorFragment extends MvpFragment< AppNavigatorView, AppNavi
@Override
protected void initViews() {
- mMogoFragmentManager = ( IMogoFragmentManager ) ARouter.getInstance().build( MogoServicePaths.PATH_FRAGMENT_MANAGER ).navigation();
+ mMogoFragmentManager = (IMogoFragmentManager) ARouter.getInstance()
+ .build(MogoServicePaths.PATH_FRAGMENT_MANAGER)
+ .navigation();
- mNavigation = findViewById( R.id.module_apps_id_navigation );
- mMediaCenter = findViewById( R.id.module_apps_ic_media_center );
- mCarSettings = findViewById( R.id.module_apps_ic_car_settings );
- mApps = findViewById( R.id.module_apps_id_apps );
- mNavigation.setOnClickListener( view -> {
- openSearchPanel();
- trackNavigatorClickEvent( 1 );
- } );
- mMediaCenter.setOnClickListener( view -> {
- try {
- LaunchUtils.launchByPkg( getContext(), AppsConst.APP_PKG_MUSIC );
- trackNavigatorClickEvent( 2 );
- } catch ( Exception e ) {
- TipToast.shortTip( R.string.module_apps_str_no_app );
- }
- } );
- mCarSettings.setOnClickListener( view -> {
- try {
- LaunchUtils.launchByPkg( getContext(), AppsConst.APP_PKG_CAR_SETTINGS );
- trackNavigatorClickEvent( 3 );
- } catch ( Exception e ) {
- TipToast.shortTip( R.string.module_apps_str_no_app );
- }
- } );
- mApps.setOnClickListener( view -> {
+ mApps = findViewById(R.id.module_apps_id_apps);
+
+ scroller = findViewById(R.id.module_apps_id_scroller);
+
+ LinearLayoutManager linearLayoutManager =
+ new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false);
+
+ scroller.setLayoutManager(linearLayoutManager);
+
+ ArrayList integers = new ArrayList<>(10);
+
+ integers.add(R.drawable.module_apps_ic_navigation);
+ integers.add(R.drawable.module_apps_ic_media_center);
+ integers.add(R.drawable.module_apps_ic_car_settings);
+ integers.add(R.drawable.module_apps_ic_car_settings);
+ integers.add(R.drawable.module_apps_ic_car_settings);
+
+ AppIndicatorAdapter appIndicatorAdapter = new AppIndicatorAdapter(getContext(), integers);
+ scroller.setAdapter(appIndicatorAdapter);
+ LinearSnapHelper snapHelper = new LinearSnapHelper();
+ snapHelper.attachToRecyclerView(scroller);
+
+ scroller.scrollToPosition(Integer.MAX_VALUE / 2);
+ //mNavigation.setOnClickListener( view -> {
+ // openSearchPanel();
+ // trackNavigatorClickEvent( 1 );
+ //} );
+ //mMediaCenter.setOnClickListener( view -> {
+ // try {
+ // LaunchUtils.launchByPkg( getContext(), AppsConst.APP_PKG_MUSIC );
+ // trackNavigatorClickEvent( 2 );
+ // } catch ( Exception e ) {
+ // TipToast.shortTip( R.string.module_apps_str_no_app );
+ // }
+ //} );
+ //mCarSettings.setOnClickListener( view -> {
+ // try {
+ // LaunchUtils.launchByPkg( getContext(), AppsConst.APP_PKG_CAR_SETTINGS );
+ // trackNavigatorClickEvent( 3 );
+ // } catch ( Exception e ) {
+ // TipToast.shortTip( R.string.module_apps_str_no_app );
+ // }
+ //} );
+ mApps.setOnClickListener(view -> {
openAppsPanel();
- trackNavigatorClickEvent( 4 );
- } );
+ trackNavigatorClickEvent(4);
+ });
+ }
+
+ private void scrollToCenter(int index) {
+
}
@NonNull
@Override
protected AppNavigatorPresenter createPresenter() {
- return new AppNavigatorPresenter( this );
+ return new AppNavigatorPresenter(this);
}
private void openSearchPanel() {
- mSearchProvider = ( IMogoModuleProvider ) ARouter.getInstance().build( MogoModulePaths.PATH_MODULE_SEARCH ).navigation();
- final Fragment fragment = mSearchProvider.createFragment( getContext(), null );
- mMogoFragmentManager.push( new FragmentDescriptor.Builder().fragment( fragment ).tag( MogoModulePaths.PATH_FRAGMENT_SEARCH ).notifyMainModule( true ).build() );
+ mSearchProvider = (IMogoModuleProvider) ARouter.getInstance()
+ .build(MogoModulePaths.PATH_MODULE_SEARCH)
+ .navigation();
+ final Fragment fragment = mSearchProvider.createFragment(getContext(), null);
+ mMogoFragmentManager.push(new FragmentDescriptor.Builder().fragment(fragment)
+ .tag(MogoModulePaths.PATH_FRAGMENT_SEARCH)
+ .notifyMainModule(true)
+ .build());
}
@Override
- public void onActivityCreated( @Nullable Bundle savedInstanceState ) {
- super.onActivityCreated( savedInstanceState );
- mMogoFragmentManager = ( IMogoFragmentManager ) ARouter.getInstance().build( MogoServicePaths.PATH_FRAGMENT_MANAGER ).navigation( getContext() );
- mMogoAnalytics = ( IMogoAnalytics ) ARouter.getInstance().build( MogoServicePaths.PATH_UTILS_ANALYTICS ).navigation( getContext() );
+ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+ mMogoFragmentManager = (IMogoFragmentManager) ARouter.getInstance()
+ .build(MogoServicePaths.PATH_FRAGMENT_MANAGER)
+ .navigation(getContext());
+ mMogoAnalytics = (IMogoAnalytics) ARouter.getInstance()
+ .build(MogoServicePaths.PATH_UTILS_ANALYTICS)
+ .navigation(getContext());
}
@Override
public void openAppsPanel() {
- AppsListActivity.start( getActivity() );
+ AppsListActivity.start(getActivity());
}
- private void trackNavigatorClickEvent( int type ) {
- final Map< String, Object > properties = new HashMap<>();
- properties.put( "type", type );
- mMogoAnalytics.track( "Launcher_APP_Icon", properties );
+ private void trackNavigatorClickEvent(int type) {
+ final Map properties = new HashMap<>();
+ properties.put("type", type);
+ mMogoAnalytics.track("Launcher_APP_Icon", properties);
}
@Override
@@ -120,8 +159,8 @@ public class AppNavigatorFragment extends MvpFragment< AppNavigatorView, AppNavi
@Override
public void onDestroyView() {
super.onDestroyView();
- if ( mPresenter != null ) {
- mPresenter.onDestroy( getViewLifecycleOwner() );
+ if (mPresenter != null) {
+ mPresenter.onDestroy(getViewLifecycleOwner());
}
}
}
diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/adapter/AppIndicatorAdapter.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/adapter/AppIndicatorAdapter.java
new file mode 100644
index 0000000000..3b95eaa0bc
--- /dev/null
+++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/adapter/AppIndicatorAdapter.java
@@ -0,0 +1,32 @@
+package com.mogo.module.apps.adapter;
+
+import android.content.Context;
+import android.view.View;
+import android.widget.ImageView;
+import com.mogo.module.apps.R;
+import com.mogo.module.apps.adapter.base.RecycleBaseAdapter;
+import com.mogo.module.apps.adapter.base.RecycleViewHolder;
+import java.util.List;
+
+/**
+ * @author zyz
+ * 2020-03-09.
+ */
+public class AppIndicatorAdapter extends RecycleBaseAdapter {
+ /**
+ *
+ */
+ public AppIndicatorAdapter(Context context, List list
+ ) {
+ super(context, list, R.layout.module_apps_item_app_indicator);
+ }
+
+ @Override public int getItemCount() {
+ return Integer.MAX_VALUE;
+ }
+
+ @Override public void onBindViewHolder(RecycleViewHolder holder, Integer integer) {
+ ImageView ivIndicator = holder.getView(R.id.module_apps_id_app_icon);
+ ivIndicator.setImageResource(integer);
+ }
+}
diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/adapter/base/RecycleBaseAdapter.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/adapter/base/RecycleBaseAdapter.java
new file mode 100644
index 0000000000..2a8cc64079
--- /dev/null
+++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/adapter/base/RecycleBaseAdapter.java
@@ -0,0 +1,122 @@
+package com.mogo.module.apps.adapter.base;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Toast;
+import androidx.recyclerview.widget.RecyclerView;
+import java.util.List;
+
+/**
+ *
+ * Title: adapter
+ *
+ *
+ * Description:
+ *
+ *
+ * Copyright: Copyright (c) 2015
+ *
+ *
+ *
+ */
+public abstract class RecycleBaseAdapter extends
+ RecyclerView.Adapter
+{
+
+ protected Context context;
+ protected List list;
+ private int resourceID;
+ private Toast toast;
+
+ /**
+ * @param context
+ */
+ public RecycleBaseAdapter(Context context, List list, int resourceID)
+ {
+ super();
+ this.context = context;
+ this.list = list;
+ this.resourceID = resourceID;
+ }
+
+ @Override
+ public RecycleViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType)
+ {
+ View v = LayoutInflater.from(context).inflate(resourceID, viewGroup,
+ false);
+
+ RecycleViewHolder holder = RecycleViewHolder
+ .get(v);
+
+ initHolder(holder);
+
+ return holder;
+ }
+
+ @Override
+ public void onBindViewHolder(
+ RecycleViewHolder viewHolder, int position)
+ {
+ onBindViewHolder(viewHolder, list.get(position % list.size()));
+ }
+
+ @Override
+ public int getItemCount()
+ {
+ return list == null ? 0 : list.size();
+ }
+
+ public abstract void onBindViewHolder(
+ RecycleViewHolder holder, T t);
+
+ public void initHolder(RecycleViewHolder holder)
+ {
+
+ }
+ public void setDatas(List list)
+ {
+ setDatas(list, false);
+ }
+
+ public void setDatas(List list, boolean add)
+ {
+ if (add)
+ {
+ this.list.addAll(list);
+ }
+ else
+ {
+ this.list = list;
+ }
+ notifyDataSetChanged();
+ }
+ public void clear(){
+ if (list != null) {
+ list.clear();
+ notifyDataSetChanged();
+ }
+ }
+ public void messageShow(String mes)
+ {
+ if (toast==null){
+ toast= Toast.makeText(context,mes, Toast.LENGTH_LONG);
+ }
+ else{
+ toast.setText(mes);
+ }
+ toast.show();
+ }
+
+ public T getItem(int position){
+ if (list==null||list.size()==0){
+ return null;
+ }
+ return list.get(position);
+ }
+
+ public List getList() {
+ return list;
+ }
+}
diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/adapter/base/RecycleViewHolder.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/adapter/base/RecycleViewHolder.java
new file mode 100644
index 0000000000..58bbebbfce
--- /dev/null
+++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/adapter/base/RecycleViewHolder.java
@@ -0,0 +1,138 @@
+package com.mogo.module.apps.adapter.base;
+
+import android.graphics.Bitmap;
+import android.text.SpannableString;
+import android.util.SparseArray;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.ImageView;
+import android.widget.TextView;
+import androidx.recyclerview.widget.RecyclerView;
+
+public class RecycleViewHolder extends RecyclerView.ViewHolder {
+
+ private SparseArray mViews;
+
+ private View mConvertView;
+
+ public RecycleViewHolder(View itemView) {
+ super(itemView);
+ this.mConvertView = itemView;
+ mViews = new SparseArray();
+ // TODO Auto-generated constructor stub
+ }
+
+ public static RecycleViewHolder get(View itemView) {
+ return new RecycleViewHolder(itemView);
+ }
+
+ public View getConvertView() {
+ return mConvertView;
+ }
+
+ public T getView(int viewId) {
+ View view = mViews.get(viewId);
+ if (view == null) {
+ view = mConvertView.findViewById(viewId);
+ mViews.put(viewId, view);
+ }
+ return (T) view;
+ }
+
+ /**
+ *
+ * @param viewId
+ * @param text
+ * @return
+ */
+ public RecycleViewHolder setText(int viewId, String text) {
+ TextView tv = getView(viewId);
+ if (tv==null)return this;
+ tv.setText(text);
+ return this;
+ }
+
+ /**
+ *
+ * @param viewId
+ * @param text
+ * @return
+ */
+ public RecycleViewHolder setText(int viewId, SpannableString text) {
+ TextView tv = getView(viewId);
+ tv.setText(text);
+ return this;
+ }
+
+ /**
+ *
+ * @param viewId
+ * @param resId
+ * @return
+ */
+ public RecycleViewHolder setImageResource(int viewId, int resId) {
+ ImageView view = getView(viewId);
+ view.setImageResource(resId);
+ return this;
+ }
+
+ /**
+ *
+ * @param viewId
+ * @return
+ */
+ public RecycleViewHolder setImageBitmap(int viewId, Bitmap bitmap) {
+ ImageView view = getView(viewId);
+ view.setImageBitmap(bitmap);
+ return this;
+ }
+
+
+ /**
+ *
+ * @param viewId
+ * @param resId
+ * @return
+ */
+ // public ViewHolder setImageURI(int viewId, String url) {
+ // ImageView view = getView(viewId);
+ // // ImageLoader.getInstance.loadImg(view,url);
+ // return this;
+ // }
+
+ /**
+ *
+ * @param viewId
+ * @param resId
+ * @return
+ */
+ public RecycleViewHolder setBackgroundImage(int viewId, int resId) {
+ View view = getView(viewId);
+ view.setBackgroundResource(resId);
+ return this;
+ }
+
+ /**
+ *
+ * @param viewId
+ * @param resId
+ * @return
+ */
+ public RecycleViewHolder setTextColor(int viewId, int resId) {
+ TextView view = getView(viewId);
+ view.setTextColor(resId);
+ return this;
+ }
+
+ /**
+ *
+ * @param viewId
+ * @return
+ */
+ public RecycleViewHolder setOnClickListener(int viewId,
+ OnClickListener listener) {
+ getView(viewId).setOnClickListener(listener);
+ return this;
+ }
+
+}
diff --git a/modules/mogo-module-apps/src/main/res/layout/module_apps_fragment_apps_navigator.xml b/modules/mogo-module-apps/src/main/res/layout/module_apps_fragment_apps_navigator.xml
index 97cbe13f84..2a44855ab2 100644
--- a/modules/mogo-module-apps/src/main/res/layout/module_apps_fragment_apps_navigator.xml
+++ b/modules/mogo-module-apps/src/main/res/layout/module_apps_fragment_apps_navigator.xml
@@ -4,32 +4,22 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="bottom"
- android:paddingBottom="@dimen/module_apps_navigation_icon_paddingBottom">
+ android:paddingBottom="@dimen/module_apps_navigation_icon_paddingBottom"
+ >
-
+
+
+
-
-
-
-
\ No newline at end of file
diff --git a/modules/mogo-module-apps/src/main/res/layout/module_apps_item_app_indicator.xml b/modules/mogo-module-apps/src/main/res/layout/module_apps_item_app_indicator.xml
new file mode 100644
index 0000000000..8914c979ae
--- /dev/null
+++ b/modules/mogo-module-apps/src/main/res/layout/module_apps_item_app_indicator.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
\ No newline at end of file