diff --git a/app/build.gradle b/app/build.gradle
index 1b32ad9b25..67294d7307 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -93,6 +93,7 @@ dependencies {
implementation project(':modules:mogo-module-common')
implementation project(':modules:mogo-module-tanlu')
implementation project(':modules:mogo-module-search')
+ implementation project(':modules:mogo-module-back')
}
}
diff --git a/app/src/main/java/com/mogo/launcher/MogoApplication.java b/app/src/main/java/com/mogo/launcher/MogoApplication.java
index 67fb67a09e..35d776198c 100644
--- a/app/src/main/java/com/mogo/launcher/MogoApplication.java
+++ b/app/src/main/java/com/mogo/launcher/MogoApplication.java
@@ -10,6 +10,7 @@ import com.mogo.commons.AbsMogoApplication;
import com.mogo.commons.debug.DebugConfig;
import com.mogo.launcher.news.FreshNewsConstants;
import com.mogo.module.adcard.AdCardConstants;
+import com.mogo.module.back.BackToMainHomeManager;
import com.mogo.module.carchatting.card.CallChatConstant;
import com.mogo.module.common.MogoModule;
import com.mogo.module.common.MogoModulePaths;
@@ -52,6 +53,7 @@ public class MogoApplication extends AbsMogoApplication {
MogoModulePaths.addModule(new MogoModule(MediaConstants.TAG, MediaConstants.MODULE_TYPE));
MogoModulePaths.addModule(new MogoModule( FreshNewsConstants.TAG, FreshNewsConstants.MODULE_NAME));
MogoModulePaths.addModule(new MogoModule(PushUIConstants.TAG, PushUIConstants.TAG));
+ // BackToMainHomeManager.addMainHomeView();
}
@Override
diff --git a/config.gradle b/config.gradle
index e300541457..322d7a1834 100644
--- a/config.gradle
+++ b/config.gradle
@@ -108,6 +108,8 @@ ext {
//运营位卡片
moduleadcard : "com.mogo.module:module-adcard:${MOGO_MODULE_AD_CARD_VERSION}",
modulefreshnews : "com.mogo.module:module-freshnews:${MOGO_MODULE_FRESH_NEWS_VERSION}",
+ //统一返回键
+ mogomoduleback : "com.mogo.module:module-back:${MOGO_MODULE_BACK_VERSION}",
// 长链
socketsdk : 'com.zhidao.socketsdk:socketsdk:2.1.0',
socketsdkconnsvrprotoco : 'com.zhidao.ptech:connsvr-protoco:0.1.23',
diff --git a/gradle.properties b/gradle.properties
index e92aff37f7..0bc7e428f7 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -54,5 +54,6 @@ MOGO_MODULE_PUSH_VERSION=1.0.0-SNAPSHOT
MOGO_MODULE_SEARCH_VERSION=1.0.0-SNAPSHOT
MOGO_MODULE_AD_CARD_VERSION=1.0.0-SNAPSHOT
MOGO_MODULE_FRESH_NEWS_VERSION=1.0.0-SNAPSHOT
+MOGO_MODULE_BACK_VERSION=1.0.0-SNAPSHOT
diff --git a/modules/mogo-module-back/.gitignore b/modules/mogo-module-back/.gitignore
new file mode 100644
index 0000000000..796b96d1c4
--- /dev/null
+++ b/modules/mogo-module-back/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/modules/mogo-module-back/build.gradle b/modules/mogo-module-back/build.gradle
new file mode 100644
index 0000000000..d4b9127efe
--- /dev/null
+++ b/modules/mogo-module-back/build.gradle
@@ -0,0 +1,68 @@
+apply plugin: 'com.android.library'
+apply plugin: 'kotlin-android-extensions'
+apply plugin: 'kotlin-android'
+apply plugin: 'com.alibaba.arouter'
+
+android {
+ compileSdkVersion rootProject.ext.android.compileSdkVersion
+ // buildToolsVersion rootProject.ext.android.buildToolsVersion
+ defaultConfig {
+ minSdkVersion rootProject.ext.android.minSdkVersion
+ targetSdkVersion rootProject.ext.android.targetSdkVersion
+ versionCode Integer.valueOf(VERSION_CODE)
+ versionName getValueFromRootProperties("${project.name.replace("-", "_").toUpperCase()}_VERSION")
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ consumerProguardFiles 'consumer-rules.pro'
+
+ javaCompileOptions {
+ annotationProcessorOptions {
+ arguments = [AROUTER_MODULE_NAME: project.getName()]
+ }
+ }
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+}
+
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+ implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
+ implementation 'androidx.appcompat:appcompat:1.0.2'
+ implementation 'androidx.core:core-ktx:1.0.2'
+ implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
+ testImplementation 'junit:junit:4.12'
+ androidTestImplementation 'androidx.test:runner:1.2.0'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
+ implementation rootProject.ext.dependencies.androidxappcompat
+ implementation rootProject.ext.dependencies.androidxconstraintlayout
+ implementation rootProject.ext.dependencies.arouter
+ annotationProcessor rootProject.ext.dependencies.aroutercompiler
+ implementation rootProject.ext.dependencies.rxjava
+ implementation rootProject.ext.dependencies.rxandroid
+
+ if (Boolean.valueOf(RELEASE)) {
+ implementation rootProject.ext.dependencies.mogoutils
+ implementation rootProject.ext.dependencies.mogocommons
+ implementation rootProject.ext.dependencies.modulecommon
+ } else {
+ implementation project(":foudations:mogo-utils")
+ api project(":foudations:mogo-commons")
+ implementation project(':modules:mogo-module-common')
+ }
+
+}
+apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString()
+repositories {
+ mavenCentral()
+}
diff --git a/modules/mogo-module-back/consumer-rules.pro b/modules/mogo-module-back/consumer-rules.pro
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/modules/mogo-module-back/gradle.properties b/modules/mogo-module-back/gradle.properties
new file mode 100644
index 0000000000..370dc456b8
--- /dev/null
+++ b/modules/mogo-module-back/gradle.properties
@@ -0,0 +1,3 @@
+GROUP=com.mogo.module
+POM_ARTIFACT_ID=module-back
+VERSION_CODE=1
diff --git a/modules/mogo-module-back/proguard-rules.pro b/modules/mogo-module-back/proguard-rules.pro
new file mode 100644
index 0000000000..f1b424510d
--- /dev/null
+++ b/modules/mogo-module-back/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/modules/mogo-module-back/src/main/AndroidManifest.xml b/modules/mogo-module-back/src/main/AndroidManifest.xml
new file mode 100644
index 0000000000..a0a69cfe71
--- /dev/null
+++ b/modules/mogo-module-back/src/main/AndroidManifest.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
diff --git a/modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToMainHomeManager.java b/modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToMainHomeManager.java
new file mode 100644
index 0000000000..73e1913002
--- /dev/null
+++ b/modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToMainHomeManager.java
@@ -0,0 +1,76 @@
+package com.mogo.module.back;
+
+import android.app.Activity;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.PixelFormat;
+import android.os.Build;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.WindowManager;
+
+import com.mogo.commons.AbsMogoApplication;
+import com.mogo.module.back.utils.Utils;
+import com.mogo.module.back.utils.WindowManagerViewHelper;
+import com.mogo.utils.logger.Logger;
+
+public class BackToMainHomeManager {
+
+ private static View mBackView;
+ public static void addMainHomeView(){
+ Logger.d("BackToMainHomeManager","addMainHomeView");
+ if (mBackView != null)WindowManagerViewHelper.removeView(mBackView);
+ mBackView = LayoutInflater.from(AbsMogoApplication.getApp()).inflate(R.layout.mogo_module_back_home_back_layout, null);
+ final Context context = mBackView.getContext();
+ if ( context == null || context.getApplicationContext() == null ) {
+ return;
+ }
+ WindowManager windowManager = ( WindowManager ) context.getApplicationContext().getSystemService( Context.WINDOW_SERVICE );
+ if ( windowManager == null ) {
+ return;
+ }
+ mBackView.setOnClickListener(view -> {
+ if (Utils.isActivityExits("com.mogo.launcher","com.mogo.module.main.MainActivity")){
+ ComponentName cn = new ComponentName("com.mogo.launcher", "com.mogo.module.main.MainActivity") ;
+ Intent intent = new Intent() ;
+ intent.setComponent(cn) ;
+ if (!(AbsMogoApplication.getApp().getApplicationContext() instanceof Activity)) {
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ }
+ AbsMogoApplication.getApp().startActivity(intent);
+ }
+ });
+ WindowManager.LayoutParams params = new WindowManager.LayoutParams();
+ params.height = WindowManager.LayoutParams.WRAP_CONTENT;
+ params.width = WindowManager.LayoutParams.WRAP_CONTENT;
+ params.x = AbsMogoApplication.getApp().getResources().getDimensionPixelOffset(R.dimen.module_back_main_home_icon_left);
+ params.y = AbsMogoApplication.getApp().getResources().getDimensionPixelOffset(R.dimen.module_back_main_home_icon_top);
+ params.gravity = Gravity.LEFT | Gravity.CENTER;
+ params.type = getFitWindowParamsType();
+ params.format = PixelFormat.RGBA_8888;
+ params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
+ windowManager.addView( mBackView, params );
+ WindowManagerViewHelper.attachMovementEvent(mBackView,params);
+ }
+
+ public static void removeMainHomeView(){
+ WindowManagerViewHelper.removeView(mBackView);
+ }
+
+ private static int getFitWindowParamsType() {
+ int type;
+ if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1 ) {
+ // Need request permission.
+ type = WindowManager.LayoutParams.TYPE_PHONE;
+ } else if ( Build.MODEL.equalsIgnoreCase( "MI 5" ) ) {
+ // MI 5 phone not display crawler dot in android 7.0
+ type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
+ } else {
+ // It's will be dismissed automatically 3s after showing in Android 25.
+ type = WindowManager.LayoutParams.TYPE_TOAST;
+ }
+ return type;
+ }
+}
diff --git a/modules/mogo-module-back/src/main/java/com/mogo/module/back/utils/Utils.java b/modules/mogo-module-back/src/main/java/com/mogo/module/back/utils/Utils.java
new file mode 100644
index 0000000000..16d4b0991c
--- /dev/null
+++ b/modules/mogo-module-back/src/main/java/com/mogo/module/back/utils/Utils.java
@@ -0,0 +1,20 @@
+package com.mogo.module.back.utils;
+
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+
+import com.mogo.commons.AbsMogoApplication;
+
+public class Utils {
+ public static boolean isActivityExits(String packageName,String classStr){
+ Intent intent = new Intent();
+ intent.setClassName(packageName, classStr);
+ ResolveInfo resolveInfo = AbsMogoApplication.getApp().getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
+ if(resolveInfo != null) {
+ return true;
+ }else{
+ return false;
+ }
+ }
+}
diff --git a/modules/mogo-module-back/src/main/java/com/mogo/module/back/utils/WindowManagerViewHelper.java b/modules/mogo-module-back/src/main/java/com/mogo/module/back/utils/WindowManagerViewHelper.java
new file mode 100644
index 0000000000..ff03d5ab96
--- /dev/null
+++ b/modules/mogo-module-back/src/main/java/com/mogo/module/back/utils/WindowManagerViewHelper.java
@@ -0,0 +1,213 @@
+package com.mogo.module.back.utils;
+
+import android.content.Context;
+import android.graphics.PixelFormat;
+import android.os.Build;
+import android.view.Gravity;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.WindowManager;
+
+/**
+ * @author congtaowang
+ * @since 2019-04-30
+ *
+ * 向 window manager 添加 view
+ */
+public class WindowManagerViewHelper {
+
+ public static void addView( View view ) {
+
+ final Context context = view.getContext();
+ if ( context == null || context.getApplicationContext() == null ) {
+ return;
+ }
+ WindowManager windowManager = ( WindowManager ) context.getApplicationContext().getSystemService( Context.WINDOW_SERVICE );
+ if ( windowManager == null ) {
+ return;
+ }
+ WindowManager.LayoutParams params = new WindowManager.LayoutParams();
+ params.height = WindowManager.LayoutParams.WRAP_CONTENT;
+ params.width = WindowManager.LayoutParams.WRAP_CONTENT;
+ params.gravity = Gravity.LEFT | Gravity.CENTER;
+ params.type = getFitWindowParamsType();
+ params.format = PixelFormat.RGBA_8888;
+ params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
+ windowManager.addView( view, params );
+
+ attachMovementEvent( view, params );
+ }
+
+ private static int getFitWindowParamsType() {
+ int type;
+ if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1 ) {
+ // Need request permission.
+ type = WindowManager.LayoutParams.TYPE_PHONE;
+ } else if ( Build.MODEL.equalsIgnoreCase( "MI 5" ) ) {
+ // MI 5 phone not display crawler dot in android 7.0
+ type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
+ } else {
+ // It's will be dismissed automatically 3s after showing in Android 25.
+ type = WindowManager.LayoutParams.TYPE_TOAST;
+ }
+ return type;
+ }
+
+ public static void removeView( View view ) {
+ if ( view == null || view.getContext() == null || view.getContext().getApplicationContext() == null ) {
+ return;
+ }
+ WindowManager windowManager = ( WindowManager ) view.getContext().getApplicationContext().getSystemService( Context.WINDOW_SERVICE );
+ if ( windowManager == null ) {
+ return;
+ }
+ windowManager.removeViewImmediate( view );
+ DispatchTouchEventWrapper.getInstance().release();
+
+ }
+
+ public static void attachMovementEvent( View view, WindowManager.LayoutParams params ) {
+ if ( view == null ) {
+ return;
+ }
+ view.setOnTouchListener( ( v, event ) -> {
+ DispatchTouchEventWrapper.getInstance()
+ .attach( view, params )
+ .handle( event );
+ return false;
+ } );
+ }
+
+ static class DispatchTouchEventWrapper {
+
+ private WindowViewHandler mWindowViewHandler;
+
+ int mActionDownX = -1;
+ int mActionDownY = -1;
+
+ /**
+ * Flag whether move after touch down.
+ */
+ boolean mMoveFlag = false;
+
+ private static volatile DispatchTouchEventWrapper INST;
+
+ private DispatchTouchEventWrapper() {
+ }
+
+ public static DispatchTouchEventWrapper getInstance() {
+ if ( INST == null ) {
+ synchronized ( DispatchTouchEventWrapper.class ) {
+ if ( INST == null ) {
+ INST = new DispatchTouchEventWrapper();
+ }
+ }
+ }
+ return INST;
+ }
+
+ public DispatchTouchEventWrapper attach( View windowView, WindowManager.LayoutParams params ) {
+ if ( mWindowViewHandler == null || mWindowViewHandler.getWindowView() != windowView ) {
+ mWindowViewHandler = new WindowViewHandler.DefaultHandler( windowView, params );
+ }
+ return this;
+ }
+
+ public boolean handle( MotionEvent event ) {
+ switch ( event.getAction() & MotionEvent.ACTION_MASK ) {
+ case MotionEvent.ACTION_DOWN:
+ if ( onActionDown( event ) ) {
+ return true;
+ }
+ break;
+ case MotionEvent.ACTION_MOVE:
+ if ( onActionMove( event ) ) {
+ return true;
+ }
+ break;
+ case MotionEvent.ACTION_UP:
+ if ( onActionUp( event ) ) {
+ return true;
+ }
+ break;
+ }
+ return false;
+ }
+
+ private boolean onActionDown( MotionEvent event ) {
+ mActionDownX = ( ( int ) event.getRawX() );
+ mActionDownY = ( ( int ) event.getRawY() );
+ if ( mWindowViewHandler != null ) {
+ mWindowViewHandler.recordNewPosition();
+ return true;
+ }
+ return false;
+ }
+
+ private boolean onActionMove( MotionEvent event ) {
+
+ if ( Math.abs( event.getRawX() - mActionDownX ) >= 20
+ || Math.abs( event.getRawY() - mActionDownY ) >= 20 ) {
+ mMoveFlag = true;
+ }
+
+ if ( isLastDownValueLegal() ) {
+ moveWindowView( event );
+ return true;
+ }
+ return false;
+ }
+
+ private boolean onActionUp( MotionEvent event ) {
+ if ( isClickEventLike() ) {
+ if ( mWindowViewHandler != null ) {
+ mWindowViewHandler.performClickLike();
+ }
+ } else {
+ if ( mWindowViewHandler != null ) {
+ mWindowViewHandler.moveToEdge();
+ mWindowViewHandler.recordNewPosition();
+ }
+ }
+ mMoveFlag = false;
+ clearLastDownAxisValue();
+ return true;
+ }
+
+ private void clearLastDownAxisValue() {
+ mActionDownX = mActionDownY = -1;
+ }
+
+ private boolean isLastDownValueLegal() {
+ return mActionDownX != -1 && mActionDownY != -1;
+ }
+
+ private void moveWindowView( MotionEvent event ) {
+ if ( mWindowViewHandler != null ) {
+ mWindowViewHandler.move( event, mActionDownX, mActionDownY );
+ }
+ }
+
+ /**
+ * Simulate click event just like set {@link View.OnClickListener}
+ *
+ * @return
+ */
+ private boolean isClickEventLike() {
+ System.out.println( mMoveFlag );
+ return isLastDownValueLegal() && !mMoveFlag;
+ }
+
+ public void release() {
+ if ( mWindowViewHandler != null ) {
+ mWindowViewHandler.release();
+ }
+ mWindowViewHandler = null;
+ mActionDownX = -1;
+ mActionDownY = -1;
+ mMoveFlag = false;
+ INST = null;
+ }
+ }
+
+}
diff --git a/modules/mogo-module-back/src/main/java/com/mogo/module/back/utils/WindowViewHandler.java b/modules/mogo-module-back/src/main/java/com/mogo/module/back/utils/WindowViewHandler.java
new file mode 100644
index 0000000000..329ce1863e
--- /dev/null
+++ b/modules/mogo-module-back/src/main/java/com/mogo/module/back/utils/WindowViewHandler.java
@@ -0,0 +1,119 @@
+package com.mogo.module.back.utils;
+
+import android.content.Context;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.WindowManager;
+
+import com.mogo.commons.AbsMogoApplication;
+import com.mogo.utils.WindowUtils;
+
+
+/**
+ * Created by congtaowang on 2017/6/20.
+ */
+
+public interface WindowViewHandler {
+
+ View getWindowView();
+
+ void recordNewPosition();
+
+ void move(MotionEvent event, int downX, int downY);
+
+ void release();
+
+ void moveToEdge();
+
+ void performClickLike();
+
+ class DefaultHandler implements WindowViewHandler {
+
+ protected View mWindowView;
+
+ protected int mWindowViewLeft = -1;
+ protected int mWindowViewTop = -1;
+
+ private WindowManager.LayoutParams mParams;
+
+ public DefaultHandler( View windowView, WindowManager.LayoutParams params ) {
+ this.mWindowView = windowView;
+ mParams = params;
+ }
+
+ @Override
+ public View getWindowView() {
+ return mWindowView;
+ }
+
+ @Override
+ public void recordNewPosition() {
+ mWindowViewLeft = mParams.x;
+ mWindowViewTop = mParams.y;
+ }
+
+ @Override
+ public void move( MotionEvent event, int downX, int downY ) {
+ move( ( ( int ) ( event.getRawX() - downX ) ),
+ ( ( int ) ( event.getRawY() - downY ) ) );
+ }
+
+ private void move( int distanceX, int distanceY ) {
+ if ( mWindowView == null ) {
+ return;
+ }
+ mParams.x = mWindowViewLeft + distanceX;
+ mParams.y = mWindowViewTop + distanceY;
+ WindowManager wm = ( ( WindowManager ) mWindowView.getContext().getSystemService( Context.WINDOW_SERVICE ) );
+
+ if ( wm == null ) {
+ return;
+ }
+
+ if ( mWindowView instanceof WindowViewUIController ) {
+ if ( mParams.x > WindowUtils.getScreenWidth( AbsMogoApplication.getApp() ) / 2 ) {
+ ( ( WindowViewUIController ) mWindowView ).rightMode();
+ } else {
+ ( ( WindowViewUIController ) mWindowView ).leftMode();
+ }
+ }
+
+ wm.updateViewLayout( mWindowView, alignLayoutParamsBoundary( mParams ) );
+ }
+
+ @Override
+ public void moveToEdge() {
+ if ( mWindowView == null ) {
+ return;
+ }
+ /* WindowManager wm = ( ( WindowManager ) mWindowView.getContext().getSystemService( Context.WINDOW_SERVICE ) );
+
+ if ( mParams.x > WindowUtils.getScreenWidth( AbsMogoApplication.getApp() ) / 2 ) {
+ mParams.x = WindowUtils.getScreenWidth( AbsMogoApplication.getApp() ) - mWindowView.getMeasuredWidth();
+ } else {
+ mParams.x = 0;
+ }
+
+ wm.updateViewLayout( mWindowView, alignLayoutParamsBoundary( mParams ) );*/
+ }
+
+ protected WindowManager.LayoutParams alignLayoutParamsBoundary( WindowManager.LayoutParams params ) {
+ return params;
+ }
+
+ @Override
+ public void performClickLike() {
+ if ( mWindowView instanceof WindowViewUIController ) {
+ ( ( WindowViewUIController ) mWindowView ).performClickLike();
+ }
+ }
+
+ @Override
+ public void release() {
+ mWindowView = null;
+ mWindowViewLeft = -1;
+ mWindowViewTop = -1;
+ }
+ }
+
+}
diff --git a/modules/mogo-module-back/src/main/java/com/mogo/module/back/utils/WindowViewUIController.java b/modules/mogo-module-back/src/main/java/com/mogo/module/back/utils/WindowViewUIController.java
new file mode 100644
index 0000000000..e329cdea68
--- /dev/null
+++ b/modules/mogo-module-back/src/main/java/com/mogo/module/back/utils/WindowViewUIController.java
@@ -0,0 +1,16 @@
+package com.mogo.module.back.utils;
+
+/**
+ * @author congtaowang
+ * @since 2019-05-12
+ *
+ * 描述
+ */
+public interface WindowViewUIController {
+
+ void leftMode();
+
+ void rightMode();
+
+ void performClickLike();
+}
diff --git a/modules/mogo-module-back/src/main/res/drawable-xhdpi/module_back_home_selected_icon.png b/modules/mogo-module-back/src/main/res/drawable-xhdpi/module_back_home_selected_icon.png
new file mode 100644
index 0000000000..0bfdb4b26e
Binary files /dev/null and b/modules/mogo-module-back/src/main/res/drawable-xhdpi/module_back_home_selected_icon.png differ
diff --git a/modules/mogo-module-back/src/main/res/drawable-xhdpi/module_back_home_unselected_icon.png b/modules/mogo-module-back/src/main/res/drawable-xhdpi/module_back_home_unselected_icon.png
new file mode 100644
index 0000000000..b5d163d95e
Binary files /dev/null and b/modules/mogo-module-back/src/main/res/drawable-xhdpi/module_back_home_unselected_icon.png differ
diff --git a/modules/mogo-module-back/src/main/res/drawable/module_back_home_icon_selector.xml b/modules/mogo-module-back/src/main/res/drawable/module_back_home_icon_selector.xml
new file mode 100644
index 0000000000..0eeab259dd
--- /dev/null
+++ b/modules/mogo-module-back/src/main/res/drawable/module_back_home_icon_selector.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-back/src/main/res/layout/mogo_module_back_home_back_layout.xml b/modules/mogo-module-back/src/main/res/layout/mogo_module_back_home_back_layout.xml
new file mode 100644
index 0000000000..d3a368c14d
--- /dev/null
+++ b/modules/mogo-module-back/src/main/res/layout/mogo_module_back_home_back_layout.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-back/src/main/res/values-ldpi/dimens.xml b/modules/mogo-module-back/src/main/res/values-ldpi/dimens.xml
new file mode 100644
index 0000000000..dfab5dd86c
--- /dev/null
+++ b/modules/mogo-module-back/src/main/res/values-ldpi/dimens.xml
@@ -0,0 +1,7 @@
+
+
+ 80px
+ 0px
+ 100px
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-back/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-back/src/main/res/values-xhdpi/dimens.xml
new file mode 100644
index 0000000000..bd57c0f8ae
--- /dev/null
+++ b/modules/mogo-module-back/src/main/res/values-xhdpi/dimens.xml
@@ -0,0 +1,9 @@
+
+
+ 140px
+ 0px
+ 190px
+
+
+
+
diff --git a/modules/mogo-module-back/src/main/res/values/colors.xml b/modules/mogo-module-back/src/main/res/values/colors.xml
new file mode 100644
index 0000000000..d781ec5f1e
--- /dev/null
+++ b/modules/mogo-module-back/src/main/res/values/colors.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/modules/mogo-module-back/src/main/res/values/dimens.xml b/modules/mogo-module-back/src/main/res/values/dimens.xml
new file mode 100644
index 0000000000..204f24e440
--- /dev/null
+++ b/modules/mogo-module-back/src/main/res/values/dimens.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/modules/mogo-module-back/src/main/res/values/strings.xml b/modules/mogo-module-back/src/main/res/values/strings.xml
new file mode 100644
index 0000000000..9af1d79455
--- /dev/null
+++ b/modules/mogo-module-back/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+ back
+
diff --git a/modules/mogo-module-back/src/main/res/values/styles.xml b/modules/mogo-module-back/src/main/res/values/styles.xml
new file mode 100644
index 0000000000..a49b12ae91
--- /dev/null
+++ b/modules/mogo-module-back/src/main/res/values/styles.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/modules/mogo-module-back/src/test/java/com/example/mogo_module_share/ExampleUnitTest.kt b/modules/mogo-module-back/src/test/java/com/example/mogo_module_share/ExampleUnitTest.kt
new file mode 100644
index 0000000000..5f9bdcdccd
--- /dev/null
+++ b/modules/mogo-module-back/src/test/java/com/example/mogo_module_share/ExampleUnitTest.kt
@@ -0,0 +1,17 @@
+package com.example.mogo_module_share
+
+import org.junit.Test
+
+import org.junit.Assert.*
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+class ExampleUnitTest {
+ @Test
+ fun addition_isCorrect() {
+ assertEquals(4, 2 + 2)
+ }
+}
diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/constants/SearchServiceHolder.kt b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/constants/SearchServiceHolder.kt
index 6b125b6951..d1a89d9c3f 100644
--- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/constants/SearchServiceHolder.kt
+++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/constants/SearchServiceHolder.kt
@@ -4,6 +4,7 @@ import android.annotation.SuppressLint
import android.content.Context
import androidx.fragment.app.Fragment
import com.alibaba.android.arouter.launcher.ARouter
+import com.mogo.map.location.IMogoLocationClient
import com.mogo.map.marker.IMogoMarkerManager
import com.mogo.map.navi.IMogoNavi
import com.mogo.map.search.geo.IMogoGeoSearch
@@ -59,6 +60,10 @@ object SearchServiceHolder{
return mapService.getNavi(context)
}
+ fun getLocationClient(): IMogoLocationClient {
+ return mapService.getLocationClient(context)
+ }
+
fun getMapUIController(): IMogoMapUIController {
return mapService.mapUIController
}
diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/CategoryPresenter.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/CategoryPresenter.java
index 89cb757852..0e85d32520 100644
--- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/CategoryPresenter.java
+++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/CategoryPresenter.java
@@ -64,7 +64,6 @@ public class CategoryPresenter extends Presenter {
public void startSearchLocalPoiByInput(String keyword) {
MogoPoiSearchQuery mogoInputtipsQuery = new MogoPoiSearchQuery(keyword, keyword);
mogoInputtipsQuery.setPageSize(10);
- mogoInputtipsQuery.getCity();
mogoInputtipsQuery.setLocation(
SearchServiceHolder.INSTANCE.getMapUIController().getWindowCenterLocation());
IMogoPoiSearch inputtipsSearch =
diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchFragment.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchFragment.java
index 62c0ea2e45..1255bb8b01 100644
--- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchFragment.java
+++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchFragment.java
@@ -83,7 +83,7 @@ public class SearchFragment extends BaseSearchFragment implements SearchView, Vi
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
SearchServiceHolder.INSTANCE.getMarkerManger().removeMarkers();
- SearchServiceHolder.INSTANCE.getMapUIController().showMyLocation( false );
+ SearchServiceHolder.INSTANCE.getMapUIController().showMyLocation(false);
moveMapToCenter();
}
@@ -116,10 +116,12 @@ public class SearchFragment extends BaseSearchFragment implements SearchView, Vi
mHistoryAdapter.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
- SearchServiceHolder.INSTANCE.getAnalyticsManager().track("Navigation_History_destination", new HashMap());
+ SearchServiceHolder.INSTANCE.getAnalyticsManager()
+ .track("Navigation_History_destination", new HashMap());
SearchPoi item = (SearchPoi) v.getTag(R.id.tag_item);
MogoTip mogoTip = EntityConvertUtils.poi2MogoTip(item);
- SearchServiceHolder.INSTANCE.push(ChoosePathFragment.Companion.newInstance(mogoTip.getPoint()),
+ SearchServiceHolder.INSTANCE.push(
+ ChoosePathFragment.Companion.newInstance(mogoTip.getPoint()),
MogoModulePaths.PATH_FRAGMENT_CHOOSE_PAHT);
}
});
@@ -128,9 +130,15 @@ public class SearchFragment extends BaseSearchFragment implements SearchView, Vi
@Override public void onClick(View v) {
MogoTip tag = (MogoTip) v.getTag(R.id.tag_position);
SearchPoi searchPoi = EntityConvertUtils.tipToPoi(tag);
- mSearchPresenter.insert(searchPoi);
- SearchServiceHolder.INSTANCE.push(ChoosePathFragment.Companion.newInstance(tag.getPoint()),
- MogoModulePaths.PATH_FRAGMENT_CHOOSE_PAHT);
+ if (tag.getPoint() == null) {
+ push(CategorySearchFragment.Companion.newInstance(tag.getName()),
+ MogoModulePaths.PATH_FRAGMENT_SEARCH_CATEGORY);
+ } else {
+ mSearchPresenter.insert(searchPoi);
+ SearchServiceHolder.INSTANCE.push(
+ ChoosePathFragment.Companion.newInstance(tag.getPoint()),
+ MogoModulePaths.PATH_FRAGMENT_CHOOSE_PAHT);
+ }
}
});
@@ -142,7 +150,8 @@ public class SearchFragment extends BaseSearchFragment implements SearchView, Vi
findViewById(R.id.tv_navi_setting).setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
- SearchServiceHolder.INSTANCE.getAnalyticsManager().track("Navigation_button_setting", new HashMap());
+ SearchServiceHolder.INSTANCE.getAnalyticsManager()
+ .track("Navigation_button_setting", new HashMap());
push(new NaviSettingFragment(), MogoModulePaths.PATH_FRAGMENT_SETTING);
}
@@ -168,7 +177,8 @@ public class SearchFragment extends BaseSearchFragment implements SearchView, Vi
findViewById(R.id.tv_navi_search).setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
- SearchServiceHolder.INSTANCE.getAnalyticsManager().track("Navigation_button_search", new HashMap());
+ SearchServiceHolder.INSTANCE.getAnalyticsManager()
+ .track("Navigation_button_search", new HashMap());
mSearchPresenter.startSearchPoiByInput(mSearchBox.getText().toString());
}
@@ -404,7 +414,7 @@ public class SearchFragment extends BaseSearchFragment implements SearchView, Vi
@Override
public void onDestroyView() {
super.onDestroyView();
- SearchServiceHolder.INSTANCE.getMapUIController().showMyLocation( true );
+ SearchServiceHolder.INSTANCE.getMapUIController().showMyLocation(true);
moveMapToRight();
}
}
diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchPresenter.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchPresenter.java
index 74cbbe8708..bf0a049789 100644
--- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchPresenter.java
+++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/SearchPresenter.java
@@ -8,6 +8,7 @@ import androidx.annotation.NonNull;
import androidx.lifecycle.LifecycleOwner;
import com.alibaba.android.arouter.launcher.ARouter;
import com.mogo.commons.mvp.Presenter;
+import com.mogo.map.location.MogoLocation;
import com.mogo.map.search.geo.MogoPoiItem;
import com.mogo.map.search.inputtips.IMogoInputtipsListener;
import com.mogo.map.search.inputtips.IMogoInputtipsSearch;
@@ -100,6 +101,11 @@ public class SearchPresenter extends Presenter< SearchView >
public void startSearchPoiByInput( String keyword ) {
MogoInputtipsQuery mogoInputtipsQuery = new MogoInputtipsQuery();
mogoInputtipsQuery.setKeyword(keyword);
+
+ MogoLocation lastKnowLocation =
+ SearchServiceHolder.INSTANCE.getLocationClient().getLastKnowLocation();
+ mogoInputtipsQuery.setCity(lastKnowLocation.getCityName());
+ mogoInputtipsQuery.setCityLimit(true);
IMogoInputtipsSearch inputtipsSearch =
mMapService.getInputtipsSearch(getContext(), mogoInputtipsQuery);
diff --git a/modules/mogo-module-tanlu/src/main/AndroidManifest.xml b/modules/mogo-module-tanlu/src/main/AndroidManifest.xml
index e5e74d1ffe..72fd803e28 100644
--- a/modules/mogo-module-tanlu/src/main/AndroidManifest.xml
+++ b/modules/mogo-module-tanlu/src/main/AndroidManifest.xml
@@ -21,6 +21,13 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/fragment/TanluCardViewFragment.java b/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/fragment/TanluCardViewFragment.java
index b351b8936d..3d709d5c42 100644
--- a/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/fragment/TanluCardViewFragment.java
+++ b/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/fragment/TanluCardViewFragment.java
@@ -69,12 +69,14 @@ import com.mogo.module.tanlu.model.TanluModelData;
import com.mogo.module.tanlu.model.VoiceSearchResult;
import com.mogo.module.tanlu.model.event.MarkerInfo;
import com.mogo.module.tanlu.model.event.PushTypeInfo;
+import com.mogo.module.tanlu.model.event.SharedialogEvent;
import com.mogo.module.tanlu.util.Utils;
import com.mogo.module.tanlu.video.SimpleCoverVideoPlayer;
import com.mogo.module.tanlu.view.AutoZoomInImageView;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.analytics.IMogoAnalytics;
import com.mogo.service.cardmanager.IMogoCardManager;
+import com.mogo.service.fragmentmanager.IMogoFragmentManager;
import com.mogo.service.imageloader.IMogoImageLoaderListener;
import com.mogo.service.imageloader.IMogoImageloader;
import com.mogo.service.intent.IMogoIntentListener;
@@ -128,6 +130,7 @@ public class TanluCardViewFragment extends MvpFragment>
private IMogoMapUIController mMApUIController;
private IMogoAnalytics mAnalytics;
private IMogoGeoSearch mIMogoGeoSearch;
+ private IMogoFragmentManager mIMogoFragmentManager;
//声音控制文字
private String voiceGetInfoMationTts;
@@ -220,6 +223,8 @@ public class TanluCardViewFragment extends MvpFragment>
mMogoStatusManager = (IMogoStatusManager) ARouter.getInstance().build(MogoServicePaths.PATH_STATUS_MANAGER).navigation(getContext());
mAnalytics = (IMogoAnalytics) ARouter.getInstance().build(MogoServicePaths.PATH_UTILS_ANALYTICS).navigation(getContext());
+ mIMogoFragmentManager = (IMogoFragmentManager) ARouter.getInstance().build(MogoServicePaths.PATH_FRAGMENT_MANAGER).navigation(getContext());
+
mIMogoGeoSearch.setGeoSearchListener(new IMogoGeoSearchListener() {
@Override
public void onRegeocodeSearched(MogoRegeocodeResult regeocodeResult) {
@@ -855,6 +860,18 @@ public class TanluCardViewFragment extends MvpFragment>
mogoIntentManager.unregisterIntentListener(MogoReceiver.ACTIION_ADAS);
}
+ /**
+ * 分享弹框
+ * @param event
+ */
+ @Subscribe(threadMode = ThreadMode.MAIN)
+ public void onShareDialog(final SharedialogEvent event) {
+ if (event == null) {
+ return;
+ }
+ ShareControl.getInstance(getActivity()).showDialog();
+ }
+
/**
* 接收到分享对应数据打点
*
@@ -1099,6 +1116,11 @@ public class TanluCardViewFragment extends MvpFragment>
inputlon = lon;
inputlat = lat;
+ Log.d(TAG, "StackSize() = " + mIMogoFragmentManager.getStackSize());
+ if (mIMogoFragmentManager.getStackSize() > 0) {
+ mIMogoFragmentManager.clearAll();
+ }
+
Log.d(TAG, "getVoiceControlRoadData lat =" + lat + ">>>lon =" + lon + ">>>cityCode= " + cityCode + " >>>adCode = " + adCode);
mTanluModelData.getVoiceControlRoadData(keywords, cityCode, lon, lat, adCode, new VoiceSearchCallback() {
@Override
@@ -1157,7 +1179,10 @@ public class TanluCardViewFragment extends MvpFragment>
}
Logger.d(TAG, "getVoiceControlRoadData optionList.size() = " + optionList.size());
mMarkerManager.addMarkers(TanluConstants.MODEL_NAME, optionList, true);
- //直接使用当前数据list,作为切换的数据源
+
+ //直接使用当前数据list,作为切换的数据源,切换左侧列表到最新的数据
+ handleMarkerExploreWay(markerExploreWayList.get(0));
+
} else {
if (!TextUtils.isEmpty(discription)) {
AIAssist.getInstance(getContext()).speakTTSVoice(discription, null);
diff --git a/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/model/event/SharedialogEvent.java b/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/model/event/SharedialogEvent.java
new file mode 100644
index 0000000000..3911fd8ea1
--- /dev/null
+++ b/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/model/event/SharedialogEvent.java
@@ -0,0 +1,10 @@
+package com.mogo.module.tanlu.model.event;
+
+/**
+ * @author lixiaopeng
+ * @description 分享弹框事件
+ * @since 2020-01-08
+ */
+public class SharedialogEvent {
+
+}
diff --git a/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/receiver/ShareDialogReceiver.java b/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/receiver/ShareDialogReceiver.java
new file mode 100644
index 0000000000..89680cb0c2
--- /dev/null
+++ b/modules/mogo-module-tanlu/src/main/java/com/mogo/module/tanlu/receiver/ShareDialogReceiver.java
@@ -0,0 +1,24 @@
+package com.mogo.module.tanlu.receiver;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.util.Log;
+
+import com.mogo.module.tanlu.model.event.SharedialogEvent;
+
+import org.greenrobot.eventbus.EventBus;
+
+/**
+ * @author lixiaopeng
+ * @description
+ * @since 2020-02-09
+ */
+public class ShareDialogReceiver extends BroadcastReceiver {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (intent.getAction() == "com.zhidao.sharedialog") {
+ EventBus.getDefault().post(new SharedialogEvent());
+ }
+ }
+}
diff --git a/settings.gradle b/settings.gradle
index b76d40d28f..9f50deef77 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -12,6 +12,7 @@ include ':modules:mogo-module-search'
include ':modules:mogo-module-tanlu'
include ':modules:mogo-module-share'
include ':modules:mogo-module-service'
+include ':modules:mogo-module-back'
include ':libraries:map-amap'
//include ':libraries:map-baidu'
include ':libraries:mogo-map-api'