From 8ad2135be7e637e612c6c5d00c57aacb462abac4 Mon Sep 17 00:00:00 2001 From: lidongxiu Date: Mon, 10 Feb 2020 09:47:09 +0800 Subject: [PATCH] add back home --- app/build.gradle | 1 + .../com/mogo/launcher/MogoApplication.java | 2 + config.gradle | 2 + gradle.properties | 1 + modules/mogo-module-back/.gitignore | 1 + modules/mogo-module-back/build.gradle | 68 ++++++ modules/mogo-module-back/consumer-rules.pro | 0 modules/mogo-module-back/gradle.properties | 3 + modules/mogo-module-back/proguard-rules.pro | 21 ++ .../src/main/AndroidManifest.xml | 6 + .../module/back/BackToMainHomeManager.java | 73 ++++++ .../back/utils/WindowManagerViewHelper.java | 213 ++++++++++++++++++ .../module/back/utils/WindowViewHandler.java | 119 ++++++++++ .../back/utils/WindowViewUIController.java | 16 ++ .../module_back_home_selected_icon.png | Bin 0 -> 8546 bytes .../module_back_home_unselected_icon.png | Bin 0 -> 8494 bytes .../module_back_home_icon_selector.xml | 12 + .../mogo_module_back_home_back_layout.xml | 11 + .../src/main/res/values-ldpi/dimens.xml | 7 + .../src/main/res/values-xhdpi/dimens.xml | 9 + .../src/main/res/values/colors.xml | 4 + .../src/main/res/values/dimens.xml | 6 + .../src/main/res/values/strings.xml | 3 + .../src/main/res/values/styles.xml | 4 + .../mogo_module_share/ExampleUnitTest.kt | 17 ++ settings.gradle | 1 + 26 files changed, 600 insertions(+) create mode 100644 modules/mogo-module-back/.gitignore create mode 100644 modules/mogo-module-back/build.gradle create mode 100644 modules/mogo-module-back/consumer-rules.pro create mode 100644 modules/mogo-module-back/gradle.properties create mode 100644 modules/mogo-module-back/proguard-rules.pro create mode 100644 modules/mogo-module-back/src/main/AndroidManifest.xml create mode 100644 modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToMainHomeManager.java create mode 100644 modules/mogo-module-back/src/main/java/com/mogo/module/back/utils/WindowManagerViewHelper.java create mode 100644 modules/mogo-module-back/src/main/java/com/mogo/module/back/utils/WindowViewHandler.java create mode 100644 modules/mogo-module-back/src/main/java/com/mogo/module/back/utils/WindowViewUIController.java create mode 100644 modules/mogo-module-back/src/main/res/drawable-xhdpi/module_back_home_selected_icon.png create mode 100644 modules/mogo-module-back/src/main/res/drawable-xhdpi/module_back_home_unselected_icon.png create mode 100644 modules/mogo-module-back/src/main/res/drawable/module_back_home_icon_selector.xml create mode 100644 modules/mogo-module-back/src/main/res/layout/mogo_module_back_home_back_layout.xml create mode 100644 modules/mogo-module-back/src/main/res/values-ldpi/dimens.xml create mode 100644 modules/mogo-module-back/src/main/res/values-xhdpi/dimens.xml create mode 100644 modules/mogo-module-back/src/main/res/values/colors.xml create mode 100644 modules/mogo-module-back/src/main/res/values/dimens.xml create mode 100644 modules/mogo-module-back/src/main/res/values/strings.xml create mode 100644 modules/mogo-module-back/src/main/res/values/styles.xml create mode 100644 modules/mogo-module-back/src/test/java/com/example/mogo_module_share/ExampleUnitTest.kt diff --git a/app/build.gradle b/app/build.gradle index 7967765624..17af85cb83 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -92,6 +92,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 f7a41dd5ee..7a2288b8b8 100644 --- a/app/src/main/java/com/mogo/launcher/MogoApplication.java +++ b/app/src/main/java/com/mogo/launcher/MogoApplication.java @@ -8,6 +8,7 @@ import com.alibaba.android.arouter.launcher.ARouter; import com.auto.zhidao.logsdk.CrashSystem; import com.mogo.commons.AbsMogoApplication; import com.mogo.commons.debug.DebugConfig; +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; @@ -49,6 +50,7 @@ public class MogoApplication extends AbsMogoApplication { MogoModulePaths.addModule(new MogoModule(CallChatConstant.PROVIDER, CallChatConstant.MODULE_NAME)); MogoModulePaths.addModule(new MogoModule(MediaConstants.TAG, MediaConstants.MODULE_TYPE)); MogoModulePaths.addModule(new MogoModule(PushUIConstants.TAG, PushUIConstants.TAG)); + // BackToMainHomeManager.addMainHomeView(); } @Override diff --git a/config.gradle b/config.gradle index 9b22bd8d31..27008acf01 100644 --- a/config.gradle +++ b/config.gradle @@ -107,6 +107,8 @@ ext { modulepush : "com.mogo.module:module-push:${MOGO_MODULE_PUSH_VERSION}", //运营位卡片 moduleadcard : "com.mogo.module:module-adcard:${MOGO_MODULE_AD_CARD_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 fddb467c1d..299457c03c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -53,5 +53,6 @@ MOGO_MODULE_MEDIA_VERSION=1.0.0-SNAPSHOT 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_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..972abc758a --- /dev/null +++ b/modules/mogo-module-back/src/main/java/com/mogo/module/back/BackToMainHomeManager.java @@ -0,0 +1,73 @@ +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.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 -> { + 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/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 0000000000000000000000000000000000000000..0bfdb4b26e7425b0035db97e5afa6085e2cd2ef9 GIT binary patch literal 8546 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 literal 0 HcmV?d00001 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/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'