[
  {
    "path": ".gitignore",
    "content": "# Built application files\n*.apk\n*.ap_\ngradle.properties\n\n# Files for the Dalvik VM\n*.dex\n\n# Java class files\n*.class\n\n# Generated files\nbin/\ngen/\n\n# Gradle files\n.gradle/\nbuild/\n/*/build/\n\n# Local configuration file (sdk path, etc)\nlocal.properties\n\n# Proguard folder generated by Eclipse\nproguard/\n\n# Log Files\n*.log\n\n\n\n# Built application files\n\n*.apk\n\n*.ap_\n\n\n\n# Files for the ART/Dalvik VM\n\n*.dex\n\n\n\n# Java class files\n\n*.class\n\n\n\n# Generated files\n\nbin/\n\ngen/\n\nout/\n\n\n\n# Gradle files\n\n.gradle/\n\nbuild/\n\n\n\n# Local configuration file (sdk path, etc)\n\nlocal.properties\n\n\n\n# Proguard folder generated by Eclipse\n\nproguard/\n\n\n\n# Log Files\n\n*.log\n\n\n\n# Android Studio Navigation editor temp files\n\n.navigation/\n\n\n\n# Android Studio captures folder\n\ncaptures/\n\n\n\n# IntelliJ\n\n*.iml\n\n.idea/workspace.xml\n\n.idea/tasks.xml\n\n.idea/gradle.xml\n\n.idea/assetWizardSettings.xml\n\n.idea/dictionaries\n\n.idea/libraries\n\n.idea/caches\n\n\n\n# Keystore files\n\n# Uncomment the following line if you do not want to check your keystore files in.\n\n#*.jks\n\n\n\n# External native build folder generated in Android Studio 2.2 and later\n\n.externalNativeBuild\n\n\n\n# Google Services (e.g. APIs or Firebase)\n\ngoogle-services.json\n\n\n\n# Freeline\n\nfreeline.py\n\nfreeline/\n\nfreeline_project_description.json\n\n\n\n# fastlane\n\nfastlane/report.xml\n\nfastlane/Preview.html\n\nfastlane/screenshots\n\nfastlane/test_output\n\nfastlane/readme.md\n.idea/\n"
  },
  {
    "path": "README.md",
    "content": "[![](https://jitpack.io/v/limuyang2/LDialog.svg)](https://jitpack.io/#limuyang2/LDialog)\n[![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://www.apache.org/licenses/LICENSE-2.0.html)\n\n\n# LDialog\n\n### [中文](https://github.com/limuyang2/LDialog/blob/master/README_CN.md)\n\n(suppor Android X)\n\nA library based on Google's recommended DialogFragment package, according to its own business extraction package, the library is written using ```kotlin```, ```java``` can also be called, can meet most project needs, can Used in Activity and Fragment. The guiding principle of this project is to adhere to the maximum degree of freedom.  \n\nThe library currently has the following features:  \n\n* Rotate the vertical and vertical screens to save the Dialog property state (and maintain the event state of the DialogFragment, such as a click event)\n* Complete custom interface\n* Rich interface property settings\n* Perfect keyboard automatically pops up (not using delay method)\n\n> Recommendations：\n> DialogFragment has many advantages over AlertDialog. However, for simple information prompts, only native styles, and no horizontal and vertical rotation is required, a simpler AlertDialog is recommended. Please don't complicate the simple question.  \n\n> Source description：  \n> If you haven't gotten started with koltin, it is recommended to learn to use it. The environment version of this library is as follows：  \n> * kotlin 1.3.61\n> * AndroidX\n\n## Preview\n![](https://github.com/limuyang2/LDialog/blob/master/screenshot/kap.gif)\n> Due to the limitations of the screen. Please download the demo experience\n\n### Demo download link\n[demo apk](https://github.com/limuyang2/LDialog/blob/master/apk/app-release.apk)\n\n## Obtain\nThis library is divided into the necessary ```LDialog`` and non-essential ```CustomLDialog```.\n```LDialog``` is the base library; ```CustomLDialog``` contains custom styles, and you don't need to import them if you don't need them.\nFirst add in the repositories of build.gradle : \n```gradle\nallprojects {\n\trepositories {\n\t\t...\n\t\tmaven { url 'https://jitpack.io' }\n\t}\n}\n```\n\nAdd in dependencies：  \n```gradle\ndependencies {\n\t//Must be imported\n\timplementation 'com.github.limuyang2.LDialog:ldialog:1.0.2'\n\t//3 custom styles, you don't need to import them if you don't need them\n\timplementation 'com.github.limuyang2.LDialog:custom_ldialog:1.0.2'\n}\n```\n\n**if you use Android X，Please use the following:**  \n```gradle\ndependencies {\n\t//Must be imported\n\timplementation 'com.github.limuyang2.LDialog:ldialog:1.0.2_androidx'\n\t//3 custom styles, you don't need to import them if you don't need them\n\timplementation 'com.github.limuyang2.LDialog:custom_ldialog:1.0.2_androidx'\n}\n```\n\n## Simple to use\n\nBoth LDialog and CustonLDialog inherit from the BaseLDialog class.  \n\n>The parameters in init(), ```Activity``` use ```supportFragmentManager```, ```Fragment``` using ```childFragmentManager```  \n\n### CustonLDialog Use\n\nThere are currently 3 custom styles:\n* IOSMsgDialog\n* MaterialMsgDialog\n* BottomTextListDialog\n\nThe following is an example of ```MaterialMsgDialog```:\n```kotlin\n//koltin\nMaterialMsgDialog.init(supportFragmentManager) //Freagment using childFragmentManager\n\t.setTitle(\"Material Style\")\n\t.setMessage(\"This is Material Design dialog!\")\n\t.setNegativeButton(\"Decline\", View.OnClickListener {\n\t\tToast.makeText(this@MainActivity, \"Decline\", Toast.LENGTH_SHORT).show()\n    })\n    .setPositiveButton(\"Accept\", View.OnClickListener {\n        Toast.makeText(this@MainActivity, \"Accept\", Toast.LENGTH_SHORT).show()\n    })\n    .show()\n```\n```java\n//java\nMaterialMsgDialog.Companion.init(getSupportFragmentManager())\n\t.setTitle(\"Material Style\")\n\t.setMessage(\"This is Material Design dialog!\")\n\t.setNegativeButton(\"Decline\", new View.OnClickListener() {\n\t\t@Override\n\t\tpublic void onClick(View v) {\n\t\t\tToast.makeText(JavaDemo.this, \"Decline\", Toast.LENGTH_SHORT).show()\n        \t}\n    \t})\n    \t.setPositiveButton(\"Accept\", new View.OnClickListener() {\n        \t@Override\n        \tpublic void onClick(View v) {\n            \t\tToast.makeText(JavaDemo.this, \"Accept\", Toast.LENGTH_SHORT).show()\n        \t}\n    \t})\n    \t.show();\n```\n\n### LDialog use (mainly used)\nUsed to provide a custom layout using layoutRes.  \nExamples：\n\n```kotlin\n//kotlin\nLDialog.init(supportFragmentManager)\n\t.setLayoutRes(R.layout.ldialog_share)\n\t.setBackgroundDrawableRes(R.drawable.shape_share_dialog_bg)\n\t.setGravity(Gravity.BOTTOM)\n\t.setWidthScale(0.95f)\n\t.setVerticalMargin(0.015f)\n\t.setAnimStyle(R.style.LDialogBottomAnimation)\n\t.setViewHandlerListener(object : ViewHandlerListener() {\n\t\toverride fun convertView(holder: ViewHolder, dialog: BaseLDialog<*>) {\n        \tholder.setOnClickListener(R.id.cancelBtn, View.OnClickListener {\n            \tdialog.dismiss()\n            })\n       }\n    })\n    .show()\n```\n[For Java usage, please refer to JavaDemo.java under the project.](https://github.com/limuyang2/LDialog/blob/master/app/src/main/java/top/limuyang2/ldialogdemo/java/JavaDemo.java)\n\n### Method description\n\n| Method name                   | Description                                                         |\n| ------------------------ | ------------------------------------------------------------ |\n| setLayoutRes             | Set layout resources 【priority is higher than setLayoutView】【LDialog only, must】 |\n| setLayoutView            | Set layout view (not recommended)【LDialog only，must】                |\n| * setViewHandlerListener | (Important) Set the properties of the controls in the layout. If need to consider horizontal and vertical rotation, the relevant properties of the control must be set here. It is recommended that the settings for the controls in the layout be written here.【LDialog only, must】 |\n|||\n| General method（BaseLDialog） |                                                              |\n|setBackgroundDrawableRes|Dialog Background resource file id|\n| setTag                   | DialogFragment tag                                       |\n| setDismissListener       | Dialog off Listener                                           |\n| setGravity               | Dialog Gravity（Examples：Gravity.CENTER    Gravity.TOP）        |\n| setWidthScale            | Proportion of screen width(range 0.0 - 1.0, when it is 1.0, it is full)【Priority is higher than ```setWidthDp```】 |\n|setWidthDp|Dialog width, unit dp|\n|setHeightScale|Proportion of screen height (range 0.0 - 1.0)【Priority is higher than ```setHeightDp```】|\n|setHeightDp|Dialog height, unit dp|\n|setKeepWidthScale|Whether to maintain the set width ratio when horizontally【Only takes effect when the width ratio ```setWidthScale``` is set】(default false)|\n|setKeepHeightScale|Whether to maintain the set height ratio when the screen is horizontal【Only takes effect when the height ratio ```setHeightScale``` is set】(default false)|\n|setVerticalMargin|Set the Margin value in the vertical direction (range 0.0 - 0.1)|\n|setCancelableAll|Set whether you can click outside the dialog and Back key to close the dialog|\n|setCancelableOutside|Set whether you can click outside the dialog to close the dialog (the Back key is not affected)|\n|setAnimStyle|Animated Style resource file id|\n|setNeedKeyboardEditTextId|Set the control id that needs to automatically pop up the keyboard. It must be a control of type EditText.|\n|show|Show Dialog|\n\n## Advanced use\nIf the above still can not meet your needs, you can directly inherit the ```BaseLDialog``` class, and also have a general method. For details, please refer to the three Dialog classes in ```CustonLDialog``.  \nThe basic writing is as follows：\n```kotlin\nclass ExKotlinLdialog : BaseLDialog<ExKotlinLdialog>() {\n\n    override fun layoutRes(): Int = R.layout.ldialog_share\n\n    override fun layoutView(): View? = null\n\n    /**\n     * Must\n     * If [need] to consider horizontal and vertical rotation, the relevant properties of the control are set here.\n     * @return\n     */\n    override fun viewHandler(): ViewHandlerListener? {\n        return object : ViewHandlerListener() {\n            override fun convertView(holder: ViewHolder, dialog: BaseLDialog<*>) {\n                \n            }\n        }\n    }\n\n    /**\n     * Optional\n     * If you don't consider the horizontal and vertical rotation, you can also set the control properties here.\n     * @param view\n     */\n    override fun initView(view: View) {\n\n    }\n}\n```\n[Java use please refer to ExJavaLdialog.java under the project](https://github.com/limuyang2/LDialog/blob/master/app/src/main/java/top/limuyang2/ldialogdemo/java/ExJavaLdialog.java)\n\n## ProGuard\nIf you are using ProGuard you might need to add the following option:  \n```\n-keep class top.limuyang2.ldialog.base.** { *; }\n```\n\n## License\n```\n2018 limuyang\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n   http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n```\n"
  },
  {
    "path": "README_CN.md",
    "content": "[![](https://jitpack.io/v/limuyang2/LDialog.svg)](https://jitpack.io/#limuyang2/LDialog)\n[![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://www.apache.org/licenses/LICENSE-2.0.html)\n\n# LDialog\n(已经支持Android X)  \n\n一个基于Google推荐的DialogFragment封装的的库，根据自身业务提取封装，本库全部使用```kotlin```编写，```java```亦可调用，能满足大部分的项目需求，能在Activity与Fragment中使用。本项目准则即是遵守最大化的自由程度。  \n\n本库目前已具备的特点如下：\n\n* 横竖屏旋转保存Dialog属性状态（并且能保持DialogFragment的事件状态，例如点击事件）\n* 完全的自定义界面\n* 丰富的界面属性设置\n* 完美的键盘自动弹出(并非使用延迟的方法)\n\n> 使用建议：\n> DialogFragment相对于AlertDialog有很多优点。但对于只需要非常简单信息提示、仅需要原生样式，以及不考虑横竖屏的情况下，推荐使用更简单的AlertDialog，请不要把简单问题复杂化。DialogFragment适合用有UI要求、使用要求的情况下。  \n\n> 源码说明：  \n> 如果你还没上手koltin，建议学习使用。本库的环境版本如下：  \n> * kotlin 1.2.51\n> * Android support 27.1.1\n\n## 预览\n![](https://github.com/limuyang2/LDialog/blob/master/screenshot/kap.gif)\n> 由于录屏的限制无法录制横竖切换情况。请下载demo体验\n\n### demo下载地址\n[demo apk](https://github.com/limuyang2/LDialog/blob/master/apk/app-release.apk)\n\n## 获取\n本库分为必须导入的```LDialog```和非必须的```CustomLDialog```。  \n```LDialog```为基础库；```CustomLDialog```中包含了自定义的样式，不需要可以不导入。  \n先在 build.gradle 的 repositories 添加：  \n```gradle\nallprojects {\n\trepositories {\n\t\t...\n\t\tmaven { url 'https://jitpack.io' }\n\t}\n}\n```\n\n再在dependencies添加：  \n```gradle\ndependencies {\n\t//必须导入\n\timplementation 'com.github.limuyang2.LDialog:ldialog:1.0.2'\n\t//3种自定义样式，不使用就不导入\n\timplementation 'com.github.limuyang2.LDialog:custom_ldialog:1.0.2'\n}\n```\n\n**如果你使用 Android X，请使用以下内容：**  \n```gradle\ndependencies {\n\t//必须导入\n\timplementation 'com.github.limuyang2.LDialog:ldialog:1.0.2_androidx'\n\t//3种自定义样式，不使用就不导入\n\timplementation 'com.github.limuyang2.LDialog:custom_ldialog:1.0.2_androidx'\n}\n```\n\n## 简单使用\nLDialog与CustonLDialog均继承于BaseLDialog类。  \n\n>init()中的参数，```Activity```中使用```supportFragmentManager```，```Fragment```中使用```childFragmentManager```  \n\n### CustonLDialog 使用方式\n\n目前里面包含3种自定义样式：\n* IOSMsgDialog\n* MaterialMsgDialog\n* BottomTextListDialog\n\n以下以```MaterialMsgDialog```为示例：\n```kotlin\n//koltin\nMaterialMsgDialog.init(supportFragmentManager) //Freagment中使用childFragmentManager\n\t.setTitle(\"Material Style\")\n\t.setMessage(\"This is Material Design dialog!\")\n\t.setNegativeButton(\"Decline\", View.OnClickListener {\n\t\tToast.makeText(this@MainActivity, \"Decline\", Toast.LENGTH_SHORT).show()\n    })\n    .setPositiveButton(\"Accept\", View.OnClickListener {\n        Toast.makeText(this@MainActivity, \"Accept\", Toast.LENGTH_SHORT).show()\n    })\n    .show()\n```\n```java\n//java\nMaterialMsgDialog.Companion.init(getSupportFragmentManager())\n\t.setTitle(\"Material Style\")\n\t.setMessage(\"This is Material Design dialog!\")\n\t.setNegativeButton(\"Decline\", new View.OnClickListener() {\n\t\t@Override\n\t\tpublic void onClick(View v) {\n\t\t\tToast.makeText(JavaDemo.this, \"Decline\", Toast.LENGTH_SHORT).show()\n        \t}\n    \t})\n    \t.setPositiveButton(\"Accept\", new View.OnClickListener() {\n        \t@Override\n        \tpublic void onClick(View v) {\n            \t\tToast.makeText(JavaDemo.this, \"Accept\", Toast.LENGTH_SHORT).show()\n        \t}\n    \t})\n    \t.show();\n```\n\n### LDialog 使用方式 (主要使用方式)\n用于对外提供使用 layoutRes 自定义布局。  \n示例如下：\n```kotlin\n//kotlin\nLDialog.init(supportFragmentManager)\n\t.setLayoutRes(R.layout.ldialog_share)\n\t.setBackgroundDrawableRes(R.drawable.shape_share_dialog_bg)\n\t.setGravity(Gravity.BOTTOM)\n\t.setWidthScale(0.95f)\n\t.setVerticalMargin(0.015f)\n\t.setAnimStyle(R.style.LDialogBottomAnimation)\n\t.setViewHandlerListener(object : ViewHandlerListener() {\n\t\toverride fun convertView(holder: ViewHolder, dialog: BaseLDialog<*>) {\n        \tholder.setOnClickListener(R.id.cancelBtn, View.OnClickListener {\n            \tdialog.dismiss()\n            })\n       }\n    })\n    .show()\n```\n[Java使用请参考项目下的 JavaDemo.java](https://github.com/limuyang2/LDialog/blob/master/app/src/main/java/top/limuyang2/ldialogdemo/java/JavaDemo.java)\n\n### 方法说明\n\n| 方法名                   | 说明                                                         |\n| ------------------------ | ------------------------------------------------------------ |\n| setLayoutRes             | 设置布局资源【优先级高于setLayoutView】【仅LDialog，必须】 |\n| setLayoutView            | 设置布局view（不推荐使用）【仅LDialog，必须】                |\n| * setViewHandlerListener | （重要）设置布局中控件的属性。如果【需要】考虑横竖屏旋转，则控件的相关属性必须在此设置。建议对布局中控件的设置均写在此处。【仅LDialog，必须】 |\n|||\n| 通用方法（BaseLDialog） |                                                              |\n|setBackgroundDrawableRes|弹窗背景资源文件id|\n| setTag                   | DialogFragment的标签                                         |\n| setDismissListener       | 弹窗的关闭监听                                            |\n| setGravity               | 窗体位置（例：Gravity.CENTER    Gravity.TOP）                |\n| setWidthScale            | 占屏幕宽度的比例（范围0.0 - 1.0，当为1.0时即为铺满）【优先级高于setWidthDp】 |\n|setWidthDp|Dialog的宽度，单位dp|\n|setHeightScale|占屏幕高度的比例（范围0.0 - 1.0）【优先级高于setHeightDp】|\n|setHeightDp|Dialog的高度，单位dp|\n|setKeepWidthScale|横屏时，是否保持设置的宽度比例【仅当设置了宽度比例setWidthScale后，才生效】（默认false）|\n|setKeepHeightScale|横屏时，是否保持设置的高度比例【仅当设置了高度比例setHeightScale后，才生效】（默认false）|\n|setVerticalMargin|设置垂直方向的Margin值（范围0.0 - 0.1）|\n|setCancelableAll|设置是否可以点击dialog外及返回键关闭dialog|\n|setCancelableOutside|设置是否可以点击dialog外关闭dialog（返回键不受影响）|\n|setAnimStyle|动画Style资源文件id|\n|setNeedKeyboardEditTextId|设置需要自动弹出键盘的控件id，必须是EditText类型的控件|\n|show|显示Dialog|\n\n## 高级使用\n如果以上仍然无法满足你们的需求，那可以直接继承```BaseLDialog```类，同时也就具备了通用方法。具体可参考```CustonLDialog```中的三个弹窗类。  \n基本写法如下：\n```kotlin\nclass ExKotlinLdialog : BaseLDialog<ExKotlinLdialog>() {\n\n    override fun layoutRes(): Int = R.layout.ldialog_share\n\n    override fun layoutView(): View? = null\n\n    /**\n     * 必须\n     * 如果【需要】考虑横竖屏旋转，则控件的相关属性在此设置\n     * @return\n     */\n    override fun viewHandler(): ViewHandlerListener? {\n        return object : ViewHandlerListener() {\n            override fun convertView(holder: ViewHolder, dialog: BaseLDialog<*>) {\n                \n            }\n        }\n    }\n\n    /**\n     * 可选\n     * 如果【不】考虑横竖屏旋转，也可以在此设置控件属性\n     * @param view\n     */\n    override fun initView(view: View) {\n\n    }\n}\n```\n[Java使用请参考项目下的 ExJavaLdialog.java](https://github.com/limuyang2/LDialog/blob/master/app/src/main/java/top/limuyang2/ldialogdemo/java/ExJavaLdialog.java)\n\n## 混淆\n如果你开启了 ProGuard 混淆，需要添加以下配置：  \n```\n-keep class top.limuyang2.ldialog.base.** { *; }\n```\n\n## License\n```\n2018 limuyang\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n   http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n```\n"
  },
  {
    "path": "apk/apk",
    "content": "\n"
  },
  {
    "path": "app/.gitignore",
    "content": "/build\n"
  },
  {
    "path": "app/build.gradle",
    "content": "apply plugin: 'com.android.application'\napply plugin: 'kotlin-android'\napply plugin: 'kotlin-android-extensions'\n\nandroid {\n    compileSdkVersion 28\n    defaultConfig {\n        applicationId \"top.limuyang2.ldialogdemo\"\n        minSdkVersion 16\n        targetSdkVersion 28\n        versionCode 1\n        versionName \"1.0\"\n        testInstrumentationRunner \"androidx.test.runner.AndroidJUnitRunner\"\n    }\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n        }\n    }\n}\n\ndependencies {\n    implementation fileTree(dir: 'libs', include: ['*.jar'])\n    implementation\"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version\"\n    implementation \"androidx.appcompat:appcompat:1.2.0\"\n    implementation 'androidx.constraintlayout:constraintlayout:2.0.2'\n    testImplementation 'junit:junit:4.13'\n    androidTestImplementation 'androidx.test:runner:1.2.0'\n    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'\n//    implementation project(path: ':ldialog')\n    implementation project(path: ':custom_ldialog')\n}\n"
  },
  {
    "path": "app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile\n"
  },
  {
    "path": "app/src/androidTest/java/top/limuyang2/ldialogdemo/ExampleInstrumentedTest.kt",
    "content": "package top.limuyang2.ldialogdemo\n\nimport android.support.test.InstrumentationRegistry\nimport android.support.test.runner.AndroidJUnit4\n\nimport org.junit.Test\nimport org.junit.runner.RunWith\n\nimport org.junit.Assert.*\n\n/**\n * Instrumented test, which will execute on an Android device.\n *\n * See [testing documentation](http://d.android.com/tools/testing).\n */\n@RunWith(AndroidJUnit4::class)\nclass ExampleInstrumentedTest {\n    @Test\n    fun useAppContext() {\n        // Context of the app under test.\n        val appContext = InstrumentationRegistry.getTargetContext()\n        assertEquals(\"top.limuyang2.ldialogdemo\", appContext.packageName)\n    }\n}\n"
  },
  {
    "path": "app/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"top.limuyang2.ldialogdemo\">\n\n    <application\n        android:allowBackup=\"true\"\n        android:icon=\"@mipmap/ic_launcher\"\n        android:label=\"@string/app_name\"\n        android:roundIcon=\"@mipmap/ic_launcher_round\"\n        android:supportsRtl=\"true\"\n        android:theme=\"@style/AppTheme\">\n        <activity android:name=\"top.limuyang2.ldialogdemo.kotlin.activity.MainActivity\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n        <activity android:name=\"top.limuyang2.ldialogdemo.kotlin.fragment.FragmentActivity\" />\n    </application>\n\n</manifest>"
  },
  {
    "path": "app/src/main/java/top/limuyang2/ldialogdemo/java/ExJavaLdialog.java",
    "content": "package top.limuyang2.ldialogdemo.java;\n\nimport android.view.View;\n\nimport org.jetbrains.annotations.NotNull;\nimport org.jetbrains.annotations.Nullable;\n\nimport top.limuyang2.ldialog.base.BaseLDialog;\nimport top.limuyang2.ldialog.base.ViewHandlerListener;\nimport top.limuyang2.ldialog.base.ViewHolder;\nimport top.limuyang2.ldialogdemo.R;\n\npublic class ExJavaLdialog extends BaseLDialog<ExJavaLdialog> {\n\n    @Override\n    protected int layoutRes() {\n        return R.layout.ldialog_share;\n    }\n\n    @Nullable\n    @Override\n    protected View layoutView() {\n        return null;\n    }\n\n    /**\n     * 必须\n     * 如果【需要】考虑横竖屏旋转，则控件的相关属性在此设置\n     * @return\n     */\n    @Nullable\n    @Override\n    protected ViewHandlerListener viewHandler() {\n        return new ViewHandlerListener() {\n            @Override\n            public void convertView(@NotNull ViewHolder holder, @NotNull BaseLDialog<?> dialog) {\n\n            }\n        };\n    }\n\n    /**\n     * 可选\n     * 如果【不】考虑横竖屏旋转，也可以在此设置控件属性\n     * @param view\n     */\n    @Override\n    public void initView(@NotNull View view) {\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/top/limuyang2/ldialogdemo/java/JavaDemo.java",
    "content": "package top.limuyang2.ldialogdemo.java;\n\nimport android.content.DialogInterface;\nimport android.graphics.Color;\nimport android.os.Bundle;\nimport android.view.Gravity;\nimport android.view.View;\nimport android.widget.Toast;\n\nimport org.jetbrains.annotations.NotNull;\n\nimport androidx.annotation.Nullable;\nimport androidx.appcompat.app.AppCompatActivity;\nimport top.limuyang2.customldialog.IOSMsgDialog;\nimport top.limuyang2.customldialog.MaterialMsgDialog;\nimport top.limuyang2.ldialog.LDialog;\nimport top.limuyang2.ldialog.base.BaseLDialog;\nimport top.limuyang2.ldialog.base.OnDialogDismissListener;\nimport top.limuyang2.ldialog.base.ViewHandlerListener;\nimport top.limuyang2.ldialog.base.ViewHolder;\nimport top.limuyang2.ldialogdemo.R;\n\npublic class JavaDemo extends AppCompatActivity {\n\n    @Override\n    protected void onCreate(@Nullable Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n\n\n        IOSMsgDialog.Companion.init(getSupportFragmentManager())\n                .setTitle(\"iOS Style\")\n                .setMessage(\"This is iOS style dialog!\")\n                .setAnimStyle(R.style.LDialogScaleAnimation)\n                .setNegativeButton(\"取消\", new View.OnClickListener() {\n                    @Override\n                    public void onClick(View v) {\n                        Toast.makeText(JavaDemo.this, \"关闭了弹窗\", Toast.LENGTH_SHORT).show();\n                    }\n                }, Color.RED)\n                .setPositiveButton(\"确定\", new View.OnClickListener() {\n                    @Override\n                    public void onClick(View v) {\n                        Toast.makeText(JavaDemo.this, \"点击了确定\", Toast.LENGTH_SHORT).show();\n                    }\n                })\n                .setDismissListener(new OnDialogDismissListener() {\n                    @Override\n                    public void onDismiss(DialogInterface dialog) {\n                        Toast.makeText(JavaDemo.this, \"dialog dismiss\", Toast.LENGTH_SHORT).show();\n                    }\n                })\n                .setCancelableOutside(true)\n                .show();\n\n        MaterialMsgDialog.Companion.init(getSupportFragmentManager())\n                .setTitle(\"Material Style\")\n                .setMessage(\"This is Material Design dialog!\")\n                .setNegativeButton(\"Decline\", new View.OnClickListener() {\n                    @Override\n                    public void onClick(View v) {\n                        Toast.makeText(JavaDemo.this, \"Decline\", Toast.LENGTH_SHORT).show();\n                    }\n                })\n                .setPositiveButton(\"Accept\", new View.OnClickListener() {\n                    @Override\n                    public void onClick(View v) {\n                        Toast.makeText(JavaDemo.this, \"Accept\", Toast.LENGTH_SHORT).show();\n                    }\n                })\n                .show();\n\n\n        LDialog.Companion.init(getSupportFragmentManager())\n                .setLayoutRes(R.layout.ldialog_share)\n                .setBackgroundDrawableRes(R.drawable.shape_share_dialog_bg)\n                .setGravity(Gravity.BOTTOM)\n                .setWidthScale(0.95f)\n                .setVerticalMargin(0.015f)\n                .setAnimStyle(R.style.LDialogBottomAnimation)\n                .setViewHandlerListener(new ViewHandlerListener() {\n                    @Override\n                    public void convertView(@NotNull ViewHolder holder, @NotNull BaseLDialog<?> dialog) {\n                        dialog.dismiss();\n                    }\n                })\n                .show();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/top/limuyang2/ldialogdemo/kotlin/ExKotlinLdialog.kt",
    "content": "package top.limuyang2.ldialogdemo.kotlin\n\nimport android.view.View\nimport top.limuyang2.ldialog.base.BaseLDialog\nimport top.limuyang2.ldialog.base.ViewHandlerListener\nimport top.limuyang2.ldialog.base.ViewHolder\nimport top.limuyang2.ldialogdemo.R\n\nclass ExKotlinLdialog : BaseLDialog<ExKotlinLdialog>() {\n\n    override fun layoutRes(): Int = R.layout.ldialog_share\n\n    override fun layoutView(): View? = null\n\n    /**\n     * 必须\n     * 如果【需要】考虑横竖屏旋转，则控件的相关属性在此设置\n     * @return\n     */\n    override fun viewHandler(): ViewHandlerListener? {\n        return object : ViewHandlerListener() {\n            override fun convertView(holder: ViewHolder, dialog: BaseLDialog<*>) {\n\n            }\n        }\n    }\n\n    /**\n     * 可选\n     * 如果【不】考虑横竖屏旋转，也可以在此设置控件属性\n     * @param view\n     */\n    override fun initView(view: View) {\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/top/limuyang2/ldialogdemo/kotlin/activity/MainActivity.kt",
    "content": "package top.limuyang2.ldialogdemo.kotlin.activity\n\nimport android.content.DialogInterface\nimport android.content.Intent\nimport android.graphics.Color\nimport android.os.Bundle\nimport android.os.Handler\nimport android.view.Gravity\nimport android.view.View\nimport android.widget.EditText\nimport android.widget.Toast\nimport androidx.appcompat.app.AppCompatActivity\nimport kotlinx.android.synthetic.main.activity_main.*\nimport top.limuyang2.customldialog.BottomTextListDialog\nimport top.limuyang2.customldialog.IOSMsgDialog\nimport top.limuyang2.customldialog.MaterialMsgDialog\nimport top.limuyang2.customldialog.adapter.BottomTextListAdapter\nimport top.limuyang2.ldialog.LDialog\nimport top.limuyang2.ldialog.base.*\nimport top.limuyang2.ldialogdemo.R\nimport top.limuyang2.ldialogdemo.kotlin.fragment.FragmentActivity\n\n\nclass MainActivity : AppCompatActivity() {\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_main)\n\n        goToFragment.setOnClickListener {\n            startActivity(Intent(this@MainActivity, FragmentActivity::class.java))\n            finish()\n        }\n\n\n        /*** CustomLDialog Library ***/\n        ios_dialog_btn.setOnClickListener {\n            IOSMsgDialog.init(supportFragmentManager)\n                    .setTitle(\"iOS Style\")\n                    .setMessage(\"This is iOS style dialog!\")\n                    .setAnimStyle(R.style.LDialogScaleAnimation)\n                    .setNegativeButton(\"取消\", View.OnClickListener {\n                        Toast.makeText(this@MainActivity, \"关闭了弹窗\", Toast.LENGTH_SHORT).show()\n                    }, Color.RED)\n                    .setPositiveButton(\"确定\", View.OnClickListener {\n                        Toast.makeText(this@MainActivity, \"点击了确定\", Toast.LENGTH_SHORT).show()\n                    })\n                    .setDismissListener(object : OnDialogDismissListener() {\n                        override fun onDismiss(dialog: DialogInterface?) {\n                            Toast.makeText(this@MainActivity, \"dialog dismiss\", Toast.LENGTH_SHORT).show()\n                        }\n                    })\n                    .setCancelableOutside(true)\n                    .show()\n        }\n\n        material_dialog_btn.setOnClickListener {\n            MaterialMsgDialog.init(supportFragmentManager)\n                    .setTitle(\"Material Style\")\n                    .setMessage(\"This is Material Design dialog!\")\n                    .setNegativeButton(\"Decline\", View.OnClickListener {\n                        Toast.makeText(this@MainActivity, \"Decline\", Toast.LENGTH_SHORT).show()\n                    })\n                    .setPositiveButton(\"Accept\", View.OnClickListener {\n                        Toast.makeText(this@MainActivity, \"Accept\", Toast.LENGTH_SHORT).show()\n                    })\n                    .show()\n\n        }\n\n        bottom_textList_dialog_btn.setOnClickListener {\n            val list = ArrayList<String>()\n            for (i in 0..10) {\n                list.add(\"Test item $i\")\n            }\n            BottomTextListDialog.init(supportFragmentManager)\n                    .setTextList(list)\n                    .setHeightScale(0.6f)\n                    .setKeepHeightScale(true)\n                    .setOnItemClickListener(object : BottomTextListAdapter.OnItemClickListener {\n                        override fun onClick(view: View, position: Int) {\n                            Toast.makeText(this@MainActivity, list[position], Toast.LENGTH_SHORT).show()\n                        }\n                    })\n                    .show()\n        }\n\n        /*** LDialog Library ***/\n        editText_dialog_btn.setOnClickListener {\n            LDialog.init(supportFragmentManager)\n                    .setLayoutRes(R.layout.ldialog_edittext)\n                    .setWidthScale(1f)\n                    .setGravity(Gravity.BOTTOM)\n                    .setViewHandlerListener(object : ViewHandlerListener() {\n                        override fun convertView(holder: ViewHolder, dialog: BaseLDialog<*>) {\n                            val editText = holder.getView<EditText>(R.id.input_editText)\n                            holder.setOnClickListener(R.id.sendBtn, View.OnClickListener {\n                                Toast.makeText(this@MainActivity, editText.text, Toast.LENGTH_SHORT).show()\n                                dialog.dismiss()\n                            })\n\n                        }\n                    })\n                    .setNeedKeyboardEditTextId(R.id.input_editText)\n                    .show()\n        }\n\n        share_dialog_btn.setOnClickListener {\n            LDialog.init(supportFragmentManager)\n                    .setLayoutRes(R.layout.ldialog_share)\n                    .setBackgroundDrawableRes(R.drawable.shape_share_dialog_bg)\n                    .setGravity(Gravity.BOTTOM)\n                    .setWidthScale(0.95f)\n                    .setVerticalMargin(0.015f)\n                    .setAnimStyle(R.style.LDialogBottomAnimation)\n                    .setViewHandlerListener(object : ViewHandlerListener() {\n                        override fun convertView(holder: ViewHolder, dialog: BaseLDialog<*>) {\n                            holder.setOnClickListener(R.id.cancelBtn, View.OnClickListener {\n                                dialog.dismiss()\n                            })\n                        }\n                    })\n                    .show()\n\n        }\n\n        topTips_dialog_btn.setOnClickListener {\n            val handler = Handler()\n            val dialog = LDialog.init(supportFragmentManager)\n                    .setTag(\"topTips\")\n                    .setLayoutRes(R.layout.ldialog_top_tips)\n                    .setGravity(Gravity.TOP)\n                    .setWidthScale(1f)\n                    .setKeepWidthScale(true)\n                    .setAnimStyle(R.style.LDialogHorizontalAnimation)\n                    .setViewHandlerListener(object : ViewHandlerListener() {\n                        override fun convertView(holder: ViewHolder, dialog: BaseLDialog<*>) {\n                            handler.postDelayed({\n                                                    dialog.dismiss()\n                                                }, 3000)\n                        }\n                    })\n                    .show()\n\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/top/limuyang2/ldialogdemo/kotlin/fragment/FragmentActivity.kt",
    "content": "package top.limuyang2.ldialogdemo.kotlin.fragment\n\nimport android.os.Bundle\nimport androidx.appcompat.app.AppCompatActivity\nimport top.limuyang2.ldialogdemo.R\n\n/**\n *\n * Date 2018/7/3\n * @author limuyang\n */\nclass FragmentActivity : AppCompatActivity() {\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_fragment)\n\n        supportFragmentManager\n                .beginTransaction()\n                .replace(R.id.fragmentLayout, MyFragment())\n                .commit()\n    }\n\n}"
  },
  {
    "path": "app/src/main/java/top/limuyang2/ldialogdemo/kotlin/fragment/MyFragment.kt",
    "content": "package top.limuyang2.ldialogdemo.kotlin.fragment\n\nimport android.content.Context\nimport android.content.Intent\nimport android.graphics.Color\nimport android.os.Bundle\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.Toast\nimport androidx.fragment.app.Fragment\nimport kotlinx.android.synthetic.main.fragment_my.view.*\nimport top.limuyang2.customldialog.IOSMsgDialog\nimport top.limuyang2.ldialogdemo.R\nimport top.limuyang2.ldialogdemo.kotlin.activity.MainActivity\n\n/**\n *\n * Date 2018/7/3\n * @author limuyang\n */\nclass MyFragment : Fragment() {\n\n    private lateinit var mContext: Context\n\n    override fun onAttach(context: Context) {\n        super.onAttach(context)\n        mContext = context\n    }\n\n    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {\n        super.onCreateView(inflater, container, savedInstanceState)\n        return inflater.inflate(R.layout.fragment_my, container, false)\n    }\n\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n        view.goToActivity.setOnClickListener {\n            startActivity(Intent(activity, MainActivity::class.java))\n            activity?.finish()\n        }\n\n\n        view.ios_dialog_btn.setOnClickListener {\n            IOSMsgDialog.init(childFragmentManager)\n                    .setTitle(\"IOS Style\")\n                    .setMessage(\"这是一个仿IOS弹窗\")\n                    .setNegativeButton(\"取消\", View.OnClickListener {\n                        Toast.makeText(mContext, \"关闭了弹窗\", Toast.LENGTH_SHORT).show()\n                    }, Color.RED)\n                    .setPositiveButton(\"确定\", View.OnClickListener {\n                        Toast.makeText(mContext, \"点击了确定\", Toast.LENGTH_SHORT).show()\n                    })\n//                    .setWidthScale(1f)\n//                    .setCancelableAll(false)\n                    .setCancelableOutside(false)\n                    .show()\n        }\n\n    }\n}"
  },
  {
    "path": "app/src/main/res/anim/horizontal_in_anim.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:duration=\"300\">\n    <translate\n        android:fromXDelta=\"100%p\"\n        android:toXDelta=\"0%p\" />\n\n</set>"
  },
  {
    "path": "app/src/main/res/anim/horizontal_out_anim.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:duration=\"300\">\n    <translate\n        android:duration=\"@android:integer/config_mediumAnimTime\"\n        android:fromXDelta=\"0%p\"\n        android:toXDelta=\"100%p\" />\n\n</set>"
  },
  {
    "path": "app/src/main/res/anim/scale_in_anim.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:interpolator=\"@android:anim/anticipate_overshoot_interpolator\"\n    android:duration=\"300\">\n    <scale\n        android:fromXScale=\"50%\"\n        android:fromYScale=\"50%\"\n        android:pivotX=\"50%\"\n        android:pivotY=\"50%\"\n        android:toXScale=\"100%\"\n        android:toYScale=\"100%\"/>\n\n    <alpha\n        android:fromAlpha=\"0.0\"\n        android:toAlpha=\"1.0\" />\n\n</set>"
  },
  {
    "path": "app/src/main/res/anim/scale_out_anim.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:duration=\"300\"\n    android:interpolator=\"@android:anim/decelerate_interpolator\">\n    <scale\n        android:fromXScale=\"100%\"\n        android:fromYScale=\"100%\"\n        android:pivotX=\"50%\"\n        android:pivotY=\"50%\"\n        android:toXScale=\"50%\"\n        android:toYScale=\"50%\" />\n\n    <alpha\n        android:fromAlpha=\"1.0\"\n        android:toAlpha=\"0\" />\n</set>"
  },
  {
    "path": "app/src/main/res/drawable/ic_facebook.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"56dp\"\n    android:height=\"56dp\"\n    android:viewportWidth=\"1024\"\n    android:viewportHeight=\"1024\">\n  <path\n      android:pathData=\"M544.06,959.27h-64.95c-228.63,0 -415.7,-187.06 -415.7,-415.7v-64.95c0,-228.63 187.06,-415.7 415.7,-415.7h64.95c228.63,0 415.7,187.06 415.7,415.7v64.95C959.76,772.2 772.69,959.27 544.06,959.27z\"\n      android:fillColor=\"#3C599B\"/>\n  <path\n      android:pathData=\"M541.54,743.52h-96.56V510.07h-48.26v-80.48h48.26v-48.29c0,-65.61 27.25,-104.68 104.63,-104.68h64.44v80.48h-40.26c-30.14,0 -32.14,11.26 -32.14,32.23l-0.11,40.26h72.98l-8.55,80.48h-64.43V743.52z\"\n      android:fillColor=\"#FFFFFF\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_github.xml",
    "content": "<vector android:height=\"56dp\" android:viewportHeight=\"1024\"\n    android:viewportWidth=\"1024\" android:width=\"56dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"#171515\" android:pathData=\"M544.06,959.27h-64.95c-228.63,0 -415.7,-187.06 -415.7,-415.7v-64.95c0,-228.63 187.06,-415.7 415.7,-415.7h64.95c228.63,0 415.7,187.06 415.7,415.7v64.95C959.76,772.2 772.69,959.27 544.06,959.27z\"/>\n    <path android:fillColor=\"#FFFFFF\" android:pathData=\"M510.25,263.81c-136,0 -246.29,110.27 -246.29,246.32 0,108.81 70.57,201.13 168.45,233.7 12.32,2.26 16.81,-5.34 16.81,-11.87 0,-5.85 -0.21,-21.34 -0.33,-41.89 -68.51,14.88 -82.97,-33.02 -82.97,-33.02 -11.2,-28.45 -27.35,-36.03 -27.35,-36.03 -22.36,-15.28 1.69,-14.97 1.69,-14.97 24.72,1.74 37.73,25.38 37.73,25.38 21.97,37.64 57.65,26.77 71.68,20.47 2.24,-15.92 8.6,-26.77 15.64,-32.93 -54.69,-6.22 -112.19,-27.35 -112.19,-121.73 0,-26.89 9.6,-48.88 25.35,-66.09 -2.53,-6.23 -10.99,-31.27 2.41,-65.18 0,0 20.68,-6.62 67.73,25.25 19.65,-5.46 40.72,-8.2 61.66,-8.29 20.92,0.1 41.99,2.83 61.66,8.29 47.02,-31.87 67.66,-25.25 67.66,-25.25 13.44,33.91 4.98,58.95 2.45,65.18 15.79,17.22 25.32,39.2 25.32,66.09 0,94.62 -57.59,115.44 -112.46,121.54 8.84,7.6 16.72,22.64 16.72,45.61 0,32.93 -0.3,59.49 -0.3,67.57 0,6.59 4.44,14.25 16.94,11.84 97.79,-32.63 168.3,-124.89 168.3,-233.67C756.57,374.08 646.28,263.81 510.25,263.81z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_google_plus.xml",
    "content": "<vector android:height=\"56dp\" android:viewportHeight=\"1024\"\n    android:viewportWidth=\"1024\" android:width=\"56dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"#DD4B39\" android:pathData=\"M544.06,959.27h-64.95c-228.63,0 -415.7,-187.06 -415.7,-415.7v-64.95c0,-228.63 187.06,-415.7 415.7,-415.7h64.95c228.63,0 415.7,187.06 415.7,415.7v64.95C959.76,772.2 772.69,959.27 544.06,959.27z\"/>\n    <path android:fillColor=\"#FFFFFF\" android:pathData=\"M404.64,481l169.9,0 0,71.09 -169.9,0 0,-71.09Z\"/>\n    <path android:fillColor=\"#FFFFFF\" android:pathData=\"M798.2,484.76L735.57,484.76 735.57,422.54 690.89,422.54 690.89,484.76 628.25,484.76 628.25,529.86 690.89,529.86 690.89,592.49 735.57,592.49 735.57,529.86 798.2,529.86Z\"/>\n    <path android:fillColor=\"#FFFFFF\" android:pathData=\"M506.51,536.73c-8.98,50.68 -53.21,87.93 -106.46,87.93 -44.89,0 -100.64,-41.35 -100.64,-106.9 0,-60.97 43.64,-108.16 100.64,-108.16 27.78,0 53.11,10.48 72.26,27.7l52.59,-51.76c-31.87,-29.75 -74.64,-47.97 -121.68,-47.97 -98.5,0 -178.36,79.85 -178.36,178.36s79.85,178.36 178.36,178.36c92.23,0 160.87,-57.94 171.31,-142.18L506.51,536.73z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_launcher_background.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"108dp\"\n    android:height=\"108dp\"\n    android:viewportHeight=\"108\"\n    android:viewportWidth=\"108\">\n    <path\n        android:fillColor=\"#26A69A\"\n        android:pathData=\"M0,0h108v108h-108z\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M9,0L9,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,0L19,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M29,0L29,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M39,0L39,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M49,0L49,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M59,0L59,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M69,0L69,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M79,0L79,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M89,0L89,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M99,0L99,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,9L108,9\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,19L108,19\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,29L108,29\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,39L108,39\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,49L108,49\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,59L108,59\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,69L108,69\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,79L108,79\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,89L108,89\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,99L108,99\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,29L89,29\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,39L89,39\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,49L89,49\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,59L89,59\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,69L89,69\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,79L89,79\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M29,19L29,89\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M39,19L39,89\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M49,19L49,89\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M59,19L59,89\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M69,19L69,89\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M79,19L79,89\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_qq.xml",
    "content": "<vector android:height=\"56dp\" android:viewportHeight=\"1024\"\n    android:viewportWidth=\"1024\" android:width=\"56dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"#5EAADE\" android:pathData=\"M544.06,959.27h-64.95c-228.63,0 -415.7,-187.06 -415.7,-415.7v-64.95c0,-228.63 187.06,-415.7 415.7,-415.7h64.95c228.63,0 415.7,187.06 415.7,415.7v64.95c-0,228.63 -187.06,415.7 -415.7,415.7z\"/>\n    <path android:fillColor=\"#FFFFFF\" android:pathData=\"M729.46,627.3c-3.16,-39.63 -24.04,-83.75 -32.62,-105.91l-22.08,-57.05c-0.7,-23.73 6.31,-78.32 -30.51,-146.61s-110.82,-74.44 -124.5,-75.15c-13.68,-0.7 -99.25,-1.4 -141.33,72.94 -42.08,74.35 -30.74,148.81 -30.74,148.81l-23.52,57.48c-0,0 -10.96,26.22 -20.43,58.14 -9.47,31.91 -18.94,82.06 -9.47,92.23 9.47,10.17 43.84,-46.64 46.99,-51.9 0,0 2.46,27.18 8.94,41.38l0.81,1.78 0.33,0.72 0.38,0.83 0.3,0.65 0.44,0.96 0.2,0.44a281.47,281.47 0,0 0,1.92 4.02l0.19,0.39c0.23,0.47 0.47,0.95 0.71,1.44l0.15,0.29c6.89,13.81 18.61,33.82 37.44,50.42l0.02,0.02 -1.18,0.39c-10.67,3.52 -31.69,11.21 -40.62,19.82 -1.72,1.66 -2.99,3.35 -3.65,5.05 -5.38,13.79 4.21,15.43 20.57,16.37 16.37,0.93 94.92,3.04 132.56,-2.22 0.41,-0.06 0.79,-0.11 1.17,-0.17 2.71,0.09 5.32,0.14 7.83,0.16l0.15,0c0.84,0.01 1.66,0.01 2.47,0.01 0.5,0 1.01,-0 1.54,-0.01l0.21,-0a222.59,222.59 0,0 0,5.46 -0.11c0.26,0.04 0.51,0.08 0.78,0.11 37.64,5.26 116.2,3.16 132.56,2.22 16.37,-0.93 25.95,-2.57 20.57,-16.37 -4.3,-11.04 -34.17,-21.62 -45.96,-25.41a141.39,141.39 0,0 0,7.96 -7.65l0.24,-0.24a142.49,142.49 0,0 0,2.53 -2.7c42.43,-46.64 38.93,-76.1 40.68,-92.93 0,0 35.78,51.55 43.49,53.31 7.71,1.75 10.17,-6.31 7.01,-45.94z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_qzone.xml",
    "content": "<vector android:height=\"56dp\" android:viewportHeight=\"1024\"\n    android:viewportWidth=\"1024\" android:width=\"56dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"#0985DD\" android:pathData=\"M544.06,959.27h-64.95c-228.63,0 -415.7,-187.06 -415.7,-415.7v-64.95c0,-228.63 187.06,-415.7 415.7,-415.7h64.95c228.63,0 415.7,187.06 415.7,415.7v64.95C959.76,772.2 772.69,959.27 544.06,959.27z\"/>\n    <path android:fillColor=\"#FFFFFF\" android:pathData=\"M722.38,595.24c22.49,-4.06 11.35,-12.42 2.16,-11.35 -16.69,1.72 -40.43,1.92 -66.56,1.28l3.03,17.79c20.58,-1.6 41.07,-4.17 61.4,-7.7L722.38,595.24zM791.33,420.33c-0.64,-2 -2.4,-3.43 -4.49,-3.65l-188.42,-27.39 -84.33,-170.63c-1.92,-3.59 -7.96,-3.59 -9.86,0l-84.35,170.63 -188.42,27.39c-2.07,0.24 -3.82,1.66 -4.47,3.65 -0.6,1.99 -0.02,4.14 1.49,5.57l136.36,132.92L332.76,746.33c-0.43,2.06 0.41,4.18 2.13,5.39 1.69,1.28 3.85,1.46 5.78,0.38l168.65,-88.41 168.52,88.64 2.57,0.64 3.21,-1.08c1.72,-1.28 2.57,-3.21 2.13,-5.34l-24.59,-143.65c-27.21,2.16 -54.37,3.18 -76.42,3.18 -77.27,0 -135.08,-3.65 -135.95,-3.65 -6.91,-0.42 -12.81,-5.12 -14.79,-11.76 -1.97,-6.59 0.43,-13.7 5.98,-17.76l155.43,-113.05c-99.96,-7.91 -183.87,-6.42 -184.72,-6.42 -13.5,0.64 -25.67,-3.65 0.64,-14.38 4.52,-1.69 109.2,-23.72 230.36,-7.44 6.67,0.85 12.01,5.75 13.73,12.19 1.59,6.5 -0.88,13.32 -6.26,17.3L497.2,571.6c27.83,5.8 100.37,12.01 160.74,13.5l-4.52,-26.31 136.31,-132.97c1.55,-1.39 2.15,-3.55 1.54,-5.54L791.33,420.33z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_send.xml",
    "content": "<vector android:height=\"24dp\" android:viewportHeight=\"1024.0\"\n    android:viewportWidth=\"1024.0\" android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"#FF000000\" android:pathData=\"M704,864c-6.4,0 -12.8,0 -19.2,-6.4l-153.6,-102.4L454.4,832c-6.4,6.4 -25.6,12.8 -32,6.4 -12.8,-6.4 -19.2,-19.2 -19.2,-32l0,-140.8c0,-6.4 0,-12.8 6.4,-19.2L652.8,384c12.8,-12.8 32,-12.8 44.8,0 12.8,12.8 12.8,32 0,44.8l-236.8,256 0,51.2 44.8,-38.4c12.8,-12.8 25.6,-12.8 38.4,-6.4l140.8,89.6 108.8,-531.2L256,512l121.6,76.8C390.4,595.2 396.8,620.8 384,633.6c-6.4,12.8 -32,19.2 -44.8,12.8L172.8,537.6C166.4,531.2 160,524.8 160,512c0,-12.8 6.4,-19.2 19.2,-25.6l640,-320c12.8,-6.4 25.6,-6.4 32,0 12.8,6.4 12.8,19.2 12.8,32l-128,640c0,12.8 -6.4,19.2 -19.2,25.6C710.4,864 710.4,864 704,864z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_share.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"32dp\"\n    android:height=\"32dp\"\n    android:viewportWidth=\"1024\"\n    android:viewportHeight=\"1024\">\n  <path\n      android:pathData=\"M967.11,512A455.11,455.11 0,1 1,56.89 512a455.11,455.11 0,0 1,910.22 0\"\n      android:fillColor=\"#33B8B8\"/>\n  <path\n      android:pathData=\"M621.91,631.47a95,95 0,0 0,-65.25 36.86l-138.47,-66.16a114.06,114.06 0,0 0,-10.81 -89.03L481.85,448.8a133.4,133.4 0,1 0,-24.29 -29.35l-74.52,64.4a114.29,114.29 0,1 0,18.55 152.63l138.47,66.16a95.18,95.18 0,1 0,186.99 13.14,95.35 95.35,0 0,0 -105.13,-84.31m-60.87,-376.15a95.23,95.23 0,1 1,20.94 189.33,95.23 95.23,0 0,1 -20.94,-189.33m-244.39,390.71a76.23,76.23 0,1 1,-16.67 -151.61,76.23 76.23,0 0,1 16.67,151.61m321.93,136.99a57.12,57.12 0,1 1,-12.52 -113.55,57.12 57.12,0 0,1 12.52,113.55\"\n      android:fillColor=\"#FFFFFF\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_twitter.xml",
    "content": "<vector android:height=\"56dp\" android:viewportHeight=\"1024\"\n    android:viewportWidth=\"1024\" android:width=\"56dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"#5EAADE\" android:pathData=\"M544.06,959.27h-64.95c-228.63,0 -415.7,-187.06 -415.7,-415.7v-64.95c0,-228.63 187.06,-415.7 415.7,-415.7h64.95c228.63,0 415.7,187.06 415.7,415.7v64.95C959.76,772.2 772.69,959.27 544.06,959.27z\"/>\n    <path android:fillColor=\"#FFFFFF\" android:pathData=\"M749.74,364.63c-17.59,7.81 -36.51,13.09 -56.37,15.46 20.27,-12.15 35.84,-31.39 43.16,-54.31 -18.97,11.26 -39.96,19.42 -62.32,23.82 -17.89,-19.08 -43.41,-31 -71.64,-31 -54.2,0 -98.14,43.94 -98.14,98.16 0,7.69 0.86,15.19 2.54,22.37 -81.57,-4.09 -153.88,-43.17 -202.28,-102.56 -8.44,14.5 -13.28,31.36 -13.28,49.35 0,34.05 17.33,64.1 43.66,81.7 -16.09,-0.51 -31.22,-4.92 -44.45,-12.28 -0.01,0.41 -0.01,0.82 -0.01,1.24 0,47.56 33.82,87.23 78.72,96.25 -8.23,2.24 -16.91,3.45 -25.85,3.45 -6.33,0 -12.48,-0.62 -18.47,-1.77 12.48,39 48.73,67.38 91.67,68.17 -33.58,26.33 -75.9,42.02 -121.88,42.02 -7.92,0 -15.74,-0.46 -23.41,-1.37 43.43,27.84 95.01,44.1 150.44,44.1 180.5,0 279.22,-149.58 279.22,-279.29 0,-4.26 -0.09,-8.49 -0.28,-12.71C719.95,401.6 736.58,384.32 749.74,364.63z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_wechat.xml",
    "content": "<vector android:height=\"56dp\" android:viewportHeight=\"1024\"\n    android:viewportWidth=\"1024\" android:width=\"56dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"#2DC100\" android:pathData=\"M544.06,959.27h-64.95c-228.63,0 -415.7,-187.06 -415.7,-415.7v-64.95c0,-228.63 187.06,-415.7 415.7,-415.7h64.95c228.63,0 415.7,187.06 415.7,415.7v64.95C959.76,772.2 772.69,959.27 544.06,959.27z\"/>\n    <path android:fillColor=\"#FFFFFF\" android:pathData=\"M618.87,424.81c-52.68,2.76 -98.5,18.75 -135.7,54.9 -37.59,36.5 -54.74,81.26 -50.05,136.73 -20.59,-2.58 -39.34,-5.37 -58.2,-6.97 -6.55,-0.52 -14.29,0.26 -19.79,3.35 -18.32,10.32 -35.86,22.03 -56.7,35.09 3.82,-17.28 6.29,-32.51 10.68,-47.03 3.17,-10.73 1.7,-16.69 -8.15,-23.66 -63.26,-44.73 -89.91,-111.65 -69.96,-180.58 18.47,-63.72 63.8,-102.42 125.38,-122.54 84.1,-27.5 178.52,0.57 229.65,67.41 18.73,24.01 30.11,52.94 32.76,83.28L618.87,424.81zM737.23,753.79c-16.69,-7.43 -31.99,-18.57 -48.24,-20.3 -16.25,-1.7 -33.33,7.69 -50.31,9.42 -51.72,5.29 -98.03,-9.13 -136.26,-44.53 -72.65,-67.33 -62.28,-170.52 21.8,-225.73 74.74,-49.02 184.32,-32.66 237,35.34 45.97,59.39 40.55,138.2 -15.56,188.07 -16.25,14.45 -22.11,26.31 -11.69,45.33 1.91,3.51 2.14,7.95 3.25,12.38L737.23,753.79zM376.4,403.35c0.52,-12.64 -10.42,-23.99 -23.37,-24.35 -13.03,-0.53 -24.02,9.59 -24.55,22.62 -0,0.08 -0.01,0.16 -0.01,0.24 -0.51,12.87 9.5,23.72 22.37,24.23 0.24,0.01 0.48,0.02 0.72,0.02C364.66,426.58 375.73,416.45 376.4,403.35zM502.91,379c-13,0.26 -23.99,11.35 -23.73,23.99 0.28,13.1 11.13,23.5 24.24,23.22 0.04,-0 0.08,-0 0.12,-0 12.87,0.1 23.38,-10.24 23.48,-23.1 0,-0.28 0,-0.56 -0.01,-0.84 -0.11,-12.97 -10.71,-23.39 -23.67,-23.28C503.19,378.99 503.05,378.99 502.91,379zM547.33,569.64c10.63,0 19.35,-8.33 19.76,-18.83 0.38,-10.92 -8.16,-20.09 -19.08,-20.47 -0.18,-0.01 -0.35,-0.01 -0.53,-0.01 -11.04,0.07 -19.94,9.08 -19.87,20.12 0,0.09 0,0.18 0,0.26C528.09,561.26 536.76,569.6 547.33,569.64zM669.74,530.35c-10.45,0.09 -19.01,8.34 -19.48,18.78 -0.57,10.67 7.62,19.78 18.29,20.35 0.31,0.02 0.62,0.03 0.93,0.03 10.65,0 19.09,-8.07 19.48,-18.7 0.53,-10.77 -7.78,-19.93 -18.55,-20.46 -0.22,-0.01 -0.45,-0.02 -0.67,-0.02V530.35z\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_weibo.xml",
    "content": "<vector android:height=\"56dp\" android:viewportHeight=\"1024\"\n    android:viewportWidth=\"1024\" android:width=\"56dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"#E6162D\" android:pathData=\"M544.06,959.27h-64.95c-228.63,0 -415.7,-187.06 -415.7,-415.7v-64.95c0,-228.63 187.06,-415.7 415.7,-415.7h64.95c228.63,0 415.7,187.06 415.7,415.7v64.95C959.76,772.2 772.69,959.27 544.06,959.27z\"/>\n    <path android:fillColor=\"#FFFFFF\" android:pathData=\"M466.55,688.79c-91.16,9.19 -169.93,-32.73 -175.86,-93.52 -5.91,-60.86 63.24,-117.53 154.37,-126.72 91.21,-9.19 169.95,32.73 175.81,93.52 6.01,60.86 -63.16,117.61 -154.27,126.72M648.92,486.85c-7.76,-2.4 -13.1,-3.93 -9.07,-14.28 8.82,-22.49 9.77,-41.87 0.15,-55.77 -17.86,-25.95 -66.79,-24.54 -122.89,-0.7 0,0 -17.66,7.81 -13.1,-6.34 8.59,-28.18 7.26,-51.72 -6.09,-65.37 -30.4,-31.01 -111.35,1.13 -180.72,71.63 -51.89,52.74 -82.07,108.77 -82.07,157.15 0,92.51 116.81,148.81 231.06,148.81 149.77,0 249.44,-88.41 249.44,-158.61 0.07,-42.45 -35.11,-66.54 -66.74,-76.51M748.4,317.5c-34.57,-39.26 -87.68,-56.73 -138.8,-45.66 -11.45,2.6 -18.67,13.94 -16.18,25.42 2.27,11.39 13.35,18.79 24.75,16.52 0.1,-0.02 0.2,-0.04 0.3,-0.06 35.01,-7.59 72.93,3.46 98.62,32.43 24.86,28.12 33.09,67.25 21.66,103.01 -3.61,11.27 2.5,23.29 13.57,26.95 11.06,3.57 22.91,-2.51 26.48,-13.56 0.02,-0.07 0.05,-0.14 0.07,-0.21v-0.05c16.07,-50.26 4.48,-105.26 -30.5,-144.76\"/>\n    <path android:fillColor=\"#FFFFFF\" android:pathData=\"M692.85,368.47c-16.83,-19.11 -42.69,-27.59 -67.57,-22.16 -9.89,2.24 -16.14,12.02 -14.03,21.94 2.15,9.92 11.82,16.28 21.54,14.1 11.7,-2.55 24.47,1.15 33.06,10.82 8.59,9.72 10.94,22.92 7.26,34.51 -3.08,9.63 2.1,19.96 11.67,23.24 9.53,3.07 19.75,-2.17 22.81,-11.71 0.02,-0.05 0.03,-0.11 0.05,-0.16 7.51,-23.72 2.83,-50.74 -14.78,-70.58M471.56,578.64c-3.16,5.59 -10.22,8.21 -15.7,5.89 -5.46,-2.25 -7.14,-8.51 -4.01,-13.9 3.18,-5.38 9.94,-8.01 15.33,-5.86 5.51,2 7.46,8.26 4.41,13.9M442.53,616.53c-8.84,14.28 -27.8,20.54 -41.97,13.98 -14.03,-6.51 -18.18,-23.09 -9.37,-37.07 8.77,-13.9 27,-20.09 41.12,-14.03 14.28,6.26 18.86,22.66 10.19,37.12M475.61,515.35c-43.4,-11.52 -92.41,10.52 -111.27,49.34 -19.28,39.64 -0.63,83.65 43.15,98.02 45.46,14.9 98.93,-7.96 117.58,-50.66 18.38,-41.82 -4.56,-84.9 -49.49,-96.67\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/shape_share_cancel_btn_bg.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <size\n        android:width=\"50dp\"\n        android:height=\"50dp\" />\n    <corners android:radius=\"50dp\" />\n\n    <!--<gradient-->\n        <!--android:angle=\"90\"-->\n        <!--android:endColor=\"#ededed\"-->\n        <!--android:startColor=\"#cccccc\" />-->\n\n    <stroke android:width=\"0.5dp\"\n        android:color=\"#a1a1a1\"/>\n\n</shape>"
  },
  {
    "path": "app/src/main/res/drawable/shape_share_dialog_bg.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <size\n        android:width=\"50dp\"\n        android:height=\"50dp\" />\n    <corners android:radius=\"10dp\" />\n\n    <gradient\n        android:angle=\"90\"\n        android:endColor=\"#fff\"\n        android:startColor=\"#cccccc\" />\n\n</shape>"
  },
  {
    "path": "app/src/main/res/drawable-v24/ic_launcher_foreground.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:aapt=\"http://schemas.android.com/aapt\"\n    android:width=\"108dp\"\n    android:height=\"108dp\"\n    android:viewportHeight=\"108\"\n    android:viewportWidth=\"108\">\n    <path\n        android:fillType=\"evenOdd\"\n        android:pathData=\"M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z\"\n        android:strokeColor=\"#00000000\"\n        android:strokeWidth=\"1\">\n        <aapt:attr name=\"android:fillColor\">\n            <gradient\n                android:endX=\"78.5885\"\n                android:endY=\"90.9159\"\n                android:startX=\"48.7653\"\n                android:startY=\"61.0927\"\n                android:type=\"linear\">\n                <item\n                    android:color=\"#44000000\"\n                    android:offset=\"0.0\" />\n                <item\n                    android:color=\"#00000000\"\n                    android:offset=\"1.0\" />\n            </gradient>\n        </aapt:attr>\n    </path>\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:fillType=\"nonZero\"\n        android:pathData=\"M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z\"\n        android:strokeColor=\"#00000000\"\n        android:strokeWidth=\"1\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_fragment.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <FrameLayout\n        android:id=\"@+id/fragmentLayout\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\" />\n\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/activity_main.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<ScrollView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:gravity=\"center_horizontal\"\n    tools:context=\".kotlin.activity.MainActivity\">\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:gravity=\"center_horizontal\"\n        android:orientation=\"vertical\">\n\n        <LinearLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:orientation=\"horizontal\"\n            android:padding=\"8dp\">\n\n            <TextView\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:layout_weight=\"1\"\n                android:text=\"This is Activity\"\n                android:textStyle=\"bold\" />\n\n            <Button\n                android:id=\"@+id/goToFragment\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:text=\"go to Fragment\"\n                android:textAllCaps=\"false\" />\n        </LinearLayout>\n\n        <View\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"1dp\"\n            android:background=\"#e7e7e7\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_margin=\"8dp\"\n            android:text=\"CustomLDialog Library\" />\n\n        <Button\n            android:id=\"@+id/ios_dialog_btn\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"iOS Message Dialog\"\n            android:textAllCaps=\"false\" />\n\n        <Button\n            android:id=\"@+id/material_dialog_btn\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"Material Message Dialog\"\n            android:textAllCaps=\"false\" />\n\n        <Button\n            android:id=\"@+id/bottom_textList_dialog_btn\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"底部列表 BottomList\"\n            android:textAllCaps=\"false\" />\n\n        <View\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"1dp\"\n            android:layout_marginTop=\"8dp\"\n            android:background=\"#e7e7e7\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_margin=\"8dp\"\n            android:text=\"LDialog Library\" />\n\n        <Button\n            android:id=\"@+id/editText_dialog_btn\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"输入框 EditText\"\n            android:textAllCaps=\"false\" />\n\n        <Button\n            android:id=\"@+id/share_dialog_btn\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"分享 Share\"\n            android:textAllCaps=\"false\" />\n\n        <Button\n            android:id=\"@+id/topTips_dialog_btn\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"TopTips\"\n            android:textAllCaps=\"false\" />\n    </LinearLayout>\n</ScrollView>\n"
  },
  {
    "path": "app/src/main/res/layout/fragment_my.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:gravity=\"center_horizontal\"\n    android:orientation=\"vertical\">\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"horizontal\"\n        android:padding=\"8dp\">\n\n        <TextView\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:text=\"This is Fragment\"\n            android:textStyle=\"bold\" />\n\n        <Button\n            android:id=\"@+id/goToActivity\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"go to Activity\"\n            android:textAllCaps=\"false\" />\n    </LinearLayout>\n\n\n    <Button\n        android:id=\"@+id/ios_dialog_btn\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"iOS风格消息弹框\"\n        android:textAllCaps=\"false\" />\n\n\n    <TextView\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_margin=\"16dp\"\n        android:text=\"Use the same as Activity\"\n        android:textColor=\"#333333\"\n        android:textSize=\"16sp\" />\n\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/ldialog_edittext.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:gravity=\"center_vertical\"\n    android:orientation=\"horizontal\"\n    android:paddingRight=\"8dp\"\n    android:paddingTop=\"10dp\"\n    android:paddingBottom=\"25dp\"\n    android:paddingLeft=\"8dp\">\n\n    <EditText\n        android:id=\"@+id/input_editText\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_weight=\"1\"\n        android:background=\"#e7e7e7\"\n        android:hint=\"Input content\"\n        android:padding=\"8dp\"\n        android:textSize=\"14sp\" />\n\n    <ImageView\n        android:tint=\"@color/colorPrimaryDark\"\n        android:id=\"@+id/sendBtn\"\n        android:layout_width=\"30dp\"\n        android:layout_height=\"30dp\"\n        android:layout_marginLeft=\"8dp\"\n        android:src=\"@drawable/ic_send\" />\n\n    <!--<LinearLayout-->\n    <!--android:layout_width=\"wrap_content\"-->\n    <!--android:layout_height=\"wrap_content\"-->\n    <!--android:layout_gravity=\"right\"-->\n    <!--android:gravity=\"right\">-->\n\n    <!--<Button-->\n    <!--android:id=\"@+id/close_btn\"-->\n    <!--style=\"@style/Widget.AppCompat.Button.Borderless\"-->\n    <!--android:layout_width=\"wrap_content\"-->\n    <!--android:layout_height=\"wrap_content\"-->\n    <!--android:text=\"取消\" />-->\n\n    <!--<Button-->\n    <!--android:id=\"@+id/ok_btn\"-->\n    <!--style=\"@style/Widget.AppCompat.Button.Borderless\"-->\n    <!--android:layout_width=\"wrap_content\"-->\n    <!--android:layout_height=\"wrap_content\"-->\n    <!--android:text=\"确定\"-->\n    <!--android:textColor=\"@color/colorPrimaryDark\" />-->\n    <!--</LinearLayout>-->\n\n\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/ldialog_share.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:orientation=\"vertical\">\n\n    <TextView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginBottom=\"8dp\"\n        android:layout_marginLeft=\"24dp\"\n        android:layout_marginTop=\"8dp\"\n        android:drawableLeft=\"@drawable/ic_share\"\n        android:drawablePadding=\"8dp\"\n        android:gravity=\"center_vertical\"\n        android:text=\"Share\"\n        android:textColor=\"#333333\" />\n\n    <View\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"0.5dp\"\n        android:background=\"#a1a1a1\" />\n\n    <TableLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginTop=\"8dp\"\n        android:stretchColumns=\"*\">\n\n        <TableRow\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\">\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:drawableTop=\"@drawable/ic_github\"\n                android:gravity=\"center\"\n                android:text=\"Github\"\n                android:textSize=\"12sp\" />\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:drawableTop=\"@drawable/ic_qq\"\n                android:gravity=\"center\"\n                android:text=\"QQ\"\n                android:textSize=\"12sp\" />\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:drawableTop=\"@drawable/ic_wechat\"\n                android:gravity=\"center\"\n                android:text=\"WeChat\"\n                android:textSize=\"12sp\" />\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:drawableTop=\"@drawable/ic_qzone\"\n                android:gravity=\"center\"\n                android:text=\"QZone\"\n                android:textSize=\"12sp\" />\n\n        </TableRow>\n\n        <TableRow android:layout_marginTop=\"8dp\">\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:drawableTop=\"@drawable/ic_twitter\"\n                android:gravity=\"center\"\n                android:text=\"Twitter\"\n                android:textSize=\"12sp\" />\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:drawableTop=\"@drawable/ic_weibo\"\n                android:gravity=\"center\"\n                android:text=\"Weibo\"\n                android:textSize=\"12sp\" />\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:drawableTop=\"@drawable/ic_facebook\"\n                android:gravity=\"center\"\n                android:text=\"FaceBook\"\n                android:textSize=\"12sp\" />\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:drawableTop=\"@drawable/ic_google_plus\"\n                android:gravity=\"center\"\n                android:text=\"Google+\"\n                android:textSize=\"12sp\" />\n        </TableRow>\n    </TableLayout>\n\n    <Button\n        android:id=\"@+id/cancelBtn\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"48dp\"\n        android:layout_marginBottom=\"8dp\"\n        android:layout_marginLeft=\"16dp\"\n        android:layout_marginRight=\"16dp\"\n        android:layout_marginTop=\"8dp\"\n        android:background=\"@drawable/shape_share_cancel_btn_bg\"\n        android:text=\"Cancel\"\n        android:textAllCaps=\"false\"\n        android:textColor=\"@color/colorPrimaryDark\" />\n\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/ldialog_top_tips.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<TextView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:background=\"#fdc13e\"\n    android:padding=\"16dp\"\n    android:text=\"This is top dialogFragment\"\n    android:textColor=\"#fff\" />\n"
  },
  {
    "path": "app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <background android:drawable=\"@drawable/ic_launcher_background\" />\n    <foreground android:drawable=\"@drawable/ic_launcher_foreground\" />\n</adaptive-icon>"
  },
  {
    "path": "app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <background android:drawable=\"@drawable/ic_launcher_background\" />\n    <foreground android:drawable=\"@drawable/ic_launcher_foreground\" />\n</adaptive-icon>"
  },
  {
    "path": "app/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"colorPrimary\">#03a9f4</color>\n    <color name=\"colorPrimaryDark\">#039be5</color>\n    <color name=\"colorAccent\">#00acc1</color>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">LDialogDemo</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.DarkActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"colorPrimary\">@color/colorPrimary</item>\n        <item name=\"colorPrimaryDark\">@color/colorPrimaryDark</item>\n        <item name=\"colorAccent\">@color/colorAccent</item>\n    </style>\n\n    <!--缩放动画-->\n    <style name=\"LDialogScaleAnimation\" parent=\"android:Animation\">\n        <item name=\"android:windowEnterAnimation\">@anim/scale_in_anim</item>\n        <item name=\"android:windowExitAnimation\">@anim/scale_out_anim</item>\n    </style>\n\n    <style name=\"LDialogHorizontalAnimation\" parent=\"android:Animation\">\n        <item name=\"android:windowEnterAnimation\">@anim/horizontal_in_anim</item>\n        <item name=\"android:windowExitAnimation\">@anim/horizontal_out_anim</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "app/src/test/java/top/limuyang2/ldialogdemo/ExampleUnitTest.kt",
    "content": "package top.limuyang2.ldialogdemo\n\nimport org.junit.Test\n\nimport org.junit.Assert.*\n\n/**\n * Example local unit test, which will execute on the development machine (host).\n *\n * See [testing documentation](http://d.android.com/tools/testing).\n */\nclass ExampleUnitTest {\n    @Test\n    fun addition_isCorrect() {\n        assertEquals(4, 2 + 2)\n    }\n}\n"
  },
  {
    "path": "build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    ext.kotlin_version = '1.3.72'\n\n    repositories {\n        google()\n        jcenter()\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:4.1.0'\n        classpath \"org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version\"\n        classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nallprojects {\n    repositories {\n        google()\n        jcenter()\n        maven { url 'https://jitpack.io' }\n    }\n}\n\ntask clean(type: Delete) {\n    delete rootProject.buildDir\n}\n"
  },
  {
    "path": "custom_ldialog/.gitignore",
    "content": "/build\n"
  },
  {
    "path": "custom_ldialog/build.gradle",
    "content": "apply plugin: 'com.android.library'\napply plugin: 'kotlin-android'\napply plugin: 'kotlin-android-extensions'\n\n\nandroid {\n    compileSdkVersion 28\n\n    defaultConfig {\n        minSdkVersion 16\n        targetSdkVersion 28\n        versionCode 1\n        versionName \"1.0.2@androidx\"\n\n        testInstrumentationRunner \"android.support.test.runner.AndroidJUnitRunner\"\n\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            consumerProguardFiles 'proguard-rules.pro'\n        }\n    }\n\n}\n\ndependencies {\n    implementation fileTree(dir: 'libs', include: ['*.jar'])\n    implementation\"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version\"\n    implementation \"androidx.appcompat:appcompat:1.2.0\"\n    implementation \"com.google.android.material:material:1.2.1\"\n\n    testImplementation 'junit:junit:4.13'\n    androidTestImplementation 'androidx.test:runner:1.2.0'\n    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'\n    api \"androidx.recyclerview:recyclerview:1.1.0\"\n    api project(':ldialog')\n}\n\nrepositories {\n    mavenCentral()\n}\n\n// 打包源码jar\ntask sourcesJar(type: Jar) {\n    from android.sourceSets.main.java.srcDirs\n    classifier = 'sources'\n}\ntask javadoc(type: Javadoc) {\n    failOnError  false\n    source = android.sourceSets.main.java.sourceFiles\n    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))\n    classpath += configurations.compile\n}\n\n// 打包文档jar\ntask javadocJar(type: Jar, dependsOn: javadoc) {\n    classifier = 'javadoc'\n    from javadoc.destinationDir\n}\n\nartifacts {\n    archives sourcesJar\n    archives javadocJar\n}"
  },
  {
    "path": "custom_ldialog/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile\n"
  },
  {
    "path": "custom_ldialog/src/androidTest/java/top/limuyang2/customldialog/ExampleInstrumentedTest.java",
    "content": "package top.limuyang2.customldialog;\n\nimport android.content.Context;\nimport android.support.test.InstrumentationRegistry;\nimport android.support.test.runner.AndroidJUnit4;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\n\nimport static org.junit.Assert.*;\n\n/**\n * Instrumented test, which will execute on an Android device.\n *\n * @see <a href=\"http://d.android.com/tools/testing\">Testing documentation</a>\n */\n@RunWith(AndroidJUnit4.class)\npublic class ExampleInstrumentedTest {\n    @Test\n    public void useAppContext() {\n        // Context of the app under test.\n        Context appContext = InstrumentationRegistry.getTargetContext();\n\n        assertEquals(\"top.limuyang2.customldialog.test\", appContext.getPackageName());\n    }\n}\n"
  },
  {
    "path": "custom_ldialog/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"top.limuyang2.customldialog\" />\n"
  },
  {
    "path": "custom_ldialog/src/main/java/top/limuyang2/customldialog/BottomTextListDialog.kt",
    "content": "package top.limuyang2.customldialog\n\nimport android.view.Gravity\nimport android.view.View\nimport androidx.fragment.app.FragmentManager\nimport androidx.recyclerview.widget.LinearLayoutManager\nimport androidx.recyclerview.widget.RecyclerView\nimport top.limuyang2.customldialog.adapter.BottomTextListAdapter\nimport top.limuyang2.ldialog.base.BaseLDialog\nimport top.limuyang2.ldialog.base.ViewHandlerListener\nimport top.limuyang2.ldialog.base.ViewHolder\n\n/**\n *\n * Date 2018/7/3\n * @author limuyang\n */\nclass BottomTextListDialog : BaseLDialog<BottomTextListDialog>() {\n\n    init {\n        setWidthScale(1f)\n        setKeepWidthScale(true)\n        setGravity(Gravity.BOTTOM)\n        setAnimStyle(R.style.LDialogBottomAnimation)\n    }\n\n    private val textList = ArrayList<String>()\n\n    private var onItemClickListener: BottomTextListAdapter.OnItemClickListener? = null\n\n    override fun layoutRes(): Int = R.layout.layout_bottom_text_list_dialog\n\n    override fun layoutView(): View? = null\n\n    override fun viewHandler(): ViewHandlerListener? {\n        return object : ViewHandlerListener() {\n            override fun convertView(holder: ViewHolder, dialog: BaseLDialog<*>) {\n                holder.getView<RecyclerView>(R.id.item_recyclerView).apply {\n                    layoutManager = LinearLayoutManager(mContext)\n                    val mAdapter = BottomTextListAdapter(textList)\n                    mAdapter.setOnItemClickListener(onItemClickListener)\n                    adapter = mAdapter\n                }\n            }\n        }\n    }\n\n    fun setTextList(textList: List<String>): BottomTextListDialog {\n        this.textList.apply {\n            clear()\n            addAll(textList)\n        }\n        return this\n    }\n\n    fun setOnItemClickListener(onItemClickListener: BottomTextListAdapter.OnItemClickListener): BottomTextListDialog {\n        this.onItemClickListener = onItemClickListener\n        return this\n    }\n\n    companion object {\n        fun init(fragmentManager: FragmentManager): BottomTextListDialog {\n            val dialog = BottomTextListDialog()\n            dialog.setFragmentManager(fragmentManager)\n            return dialog\n        }\n    }\n}"
  },
  {
    "path": "custom_ldialog/src/main/java/top/limuyang2/customldialog/IOSMsgDialog.kt",
    "content": "package top.limuyang2.customldialog\n\n\nimport android.graphics.Color\nimport android.view.View\nimport android.widget.Button\nimport android.widget.TextView\nimport androidx.annotation.ColorInt\nimport androidx.fragment.app.FragmentManager\nimport top.limuyang2.ldialog.base.BaseLDialog\nimport top.limuyang2.ldialog.base.ViewHandlerListener\nimport top.limuyang2.ldialog.base.ViewHolder\n\n/**\n * iOS Style Dialog\n * Date 2018/6/26\n * @author limuyang\n */\nclass IOSMsgDialog : BaseLDialog<IOSMsgDialog>() {\n\n    private var isShowTitle = false\n    private var isShowPosBtn = false\n    private var isShowNegBtn = false\n\n    private var titleText: CharSequence = \"\"\n\n    private var messageText: CharSequence = \"\"\n\n    private var negativeButtonText: CharSequence = \"\"\n    private var negativeButtonClickListener: View.OnClickListener? = null\n    private var negativeButtonColor: Int = Color.parseColor(\"#0079fd\")\n\n    private var positiveButtonText: CharSequence = \"\"\n    private var positiveButtonClickListener: View.OnClickListener? = null\n    private var positiveButtonColor: Int = Color.parseColor(\"#0079fd\")\n\n    /**\n     * View Handler\n     * The management of the relevant state of the view is written here\n     */\n    override fun viewHandler(): ViewHandlerListener? {\n        return object : ViewHandlerListener() {\n            override fun convertView(holder: ViewHolder, dialog: BaseLDialog<*>) {\n                holder.getView<TextView>(R.id.title_tv).apply {\n                    visibility = if (isShowTitle) View.VISIBLE else View.GONE\n                    text = titleText\n                }\n\n                holder.getView<TextView>(R.id.msg_tv).apply {\n                    text = messageText\n                }\n\n                holder.getView<Button>(R.id.neg_btn).apply {\n                    visibility = if (isShowNegBtn) View.VISIBLE else View.GONE\n                    text = negativeButtonText\n                    setTextColor(negativeButtonColor)\n                    setOnClickListener {\n                        negativeButtonClickListener?.onClick(it)\n                        dialog.dismiss()\n                    }\n                }\n\n                holder.getView<Button>(R.id.pos_btn).apply {\n                    visibility = if (isShowPosBtn) View.VISIBLE else View.GONE\n                    text = positiveButtonText\n                    setTextColor(positiveButtonColor)\n                    setOnClickListener {\n                        positiveButtonClickListener?.onClick(it)\n                        dialog.dismiss()\n                    }\n                }\n\n            }\n        }\n    }\n\n    override fun layoutRes(): Int = R.layout.layout_message_ios_dialog\n\n    override fun layoutView(): View? = null\n\n    /**\n     * Title Text(Support Rich text)\n     */\n    fun setTitle(title: CharSequence): IOSMsgDialog {\n        isShowTitle = true\n        titleText = title\n        return this\n    }\n\n    /**\n     * Message Text(Support Rich text)\n     */\n    fun setMessage(msg: CharSequence): IOSMsgDialog {\n        messageText = msg\n        return this\n    }\n\n    /**\n     * Left Button\n     */\n    @JvmOverloads\n    fun setNegativeButton(text: CharSequence,\n                          listener: View.OnClickListener? = null,\n                          @ColorInt color: Int = negativeButtonColor): IOSMsgDialog {\n        isShowNegBtn = true\n        negativeButtonText = text\n        negativeButtonClickListener = listener\n        negativeButtonColor = color\n        return this\n    }\n\n    /**\n     * Right Button\n     */\n    @JvmOverloads\n    fun setPositiveButton(text: CharSequence,\n                          listener: View.OnClickListener? = null,\n                          @ColorInt color: Int = positiveButtonColor): IOSMsgDialog {\n        isShowPosBtn = true\n        positiveButtonText = text\n        positiveButtonClickListener = listener\n        positiveButtonColor = color\n        return this\n    }\n\n    companion object {\n        fun init(fragmentManager: FragmentManager): IOSMsgDialog {\n            val dialog = IOSMsgDialog()\n            dialog.setFragmentManager(fragmentManager)\n            dialog.setBackgroundDrawableRes(R.drawable.shape_ios_dialog_bg)\n            return dialog\n        }\n    }\n\n}\n\n\n\n"
  },
  {
    "path": "custom_ldialog/src/main/java/top/limuyang2/customldialog/MaterialMsgDialog.kt",
    "content": "package top.limuyang2.customldialog\n\nimport android.view.View\nimport android.widget.Button\nimport android.widget.LinearLayout\nimport android.widget.TextView\nimport androidx.annotation.ColorInt\nimport androidx.fragment.app.FragmentManager\nimport top.limuyang2.ldialog.base.BaseLDialog\nimport top.limuyang2.ldialog.base.ViewHandlerListener\nimport top.limuyang2.ldialog.base.ViewHolder\n\n/**\n *\n * Date 2018/7/5\n * @author limuyang\n */\nclass MaterialMsgDialog : BaseLDialog<MaterialMsgDialog>() {\n\n    private var isShowTitle = false\n    private var isShowPosBtn = false\n    private var isShowNegBtn = false\n\n    private var titleText: CharSequence = \"\"\n\n    private var messageText: CharSequence = \"\"\n\n    private var negativeButtonText: CharSequence = \"\"\n    private var negativeButtonClickListener: View.OnClickListener? = null\n    private var negativeButtonColor: Int = 0\n\n    private var positiveButtonText: CharSequence = \"\"\n    private var positiveButtonClickListener: View.OnClickListener? = null\n    private var positiveButtonColor: Int = 0\n\n    init {\n        setWidthDp(56f * 5.5f)\n        setBackgroundDrawableRes(R.drawable.def_dialog_bg)\n    }\n\n\n    /**\n     * View Handler\n     * The management of the relevant state of the view is written here\n     */\n    override fun viewHandler(): ViewHandlerListener? {\n        return object : ViewHandlerListener() {\n            override fun convertView(holder: ViewHolder, dialog: BaseLDialog<*>) {\n                holder.getView<TextView>(R.id.title_tv).apply {\n                    visibility = if (isShowTitle) View.VISIBLE else View.GONE\n                    text = titleText\n                }\n\n                holder.getView<TextView>(R.id.msg_tv).apply {\n                    text = messageText\n                }\n\n                if (!isShowNegBtn && !isShowPosBtn) {\n                    holder.getView<LinearLayout>(R.id.bottomBtnLayout).visibility = View.GONE\n                } else {\n                    holder.getView<Button>(R.id.neg_btn).apply {\n                        visibility = if (isShowNegBtn) View.VISIBLE else View.GONE\n                        text = negativeButtonText\n                        if (negativeButtonColor != 0) {\n                            setTextColor(negativeButtonColor)\n                        }\n                        setOnClickListener {\n                            negativeButtonClickListener?.onClick(it)\n                            dialog.dismiss()\n                        }\n                    }\n\n                    holder.getView<Button>(R.id.pos_btn).apply {\n                        visibility = if (isShowPosBtn) View.VISIBLE else View.GONE\n                        text = positiveButtonText\n                        if (positiveButtonColor != 0) {\n                            setTextColor(positiveButtonColor)\n                        }\n                        setOnClickListener {\n                            positiveButtonClickListener?.onClick(it)\n                            dialog.dismiss()\n                        }\n                    }\n                }\n\n            }\n        }\n    }\n\n    override fun layoutRes(): Int = R.layout.layout_materia_dialog\n\n    override fun layoutView(): View? = null\n\n    /**\n     * Title Text(Support Rich text)\n     */\n    fun setTitle(title: CharSequence): MaterialMsgDialog {\n        isShowTitle = true\n        titleText = title\n        return this\n    }\n\n    /**\n     * Message Text(Support Rich text)\n     */\n    fun setMessage(msg: CharSequence): MaterialMsgDialog {\n        messageText = msg\n        return this\n    }\n\n    /**\n     * Left Button\n     */\n    @JvmOverloads\n    fun setNegativeButton(text: CharSequence,\n                          listener: View.OnClickListener? = null,\n                          @ColorInt color: Int = negativeButtonColor): MaterialMsgDialog {\n        isShowNegBtn = true\n        negativeButtonText = text\n        negativeButtonClickListener = listener\n        negativeButtonColor = color\n        return this\n    }\n\n    /**\n     * Right Button\n     */\n    @JvmOverloads\n    fun setPositiveButton(text: CharSequence,\n                          listener: View.OnClickListener? = null,\n                          @ColorInt color: Int = positiveButtonColor): MaterialMsgDialog {\n        isShowPosBtn = true\n        positiveButtonText = text\n        positiveButtonClickListener = listener\n        positiveButtonColor = color\n        return this\n    }\n\n    companion object {\n        fun init(fragmentManager: FragmentManager): MaterialMsgDialog {\n            val dialog = MaterialMsgDialog()\n            dialog.setFragmentManager(fragmentManager)\n            return dialog\n        }\n    }\n\n}"
  },
  {
    "path": "custom_ldialog/src/main/java/top/limuyang2/customldialog/adapter/BottomTextListAdapter.kt",
    "content": "package top.limuyang2.customldialog.adapter\n\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.TextView\nimport androidx.recyclerview.widget.RecyclerView\nimport top.limuyang2.customldialog.R\n\n/**\n * Date 2018/7/4\n *\n * @author limuyang\n */\nclass BottomTextListAdapter(private val data: List<String>) : RecyclerView.Adapter<BottomTextListAdapter.ViewHolder>() {\n\n    private var onItemClickListener: OnItemClickListener? = null\n\n    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {\n        val view = LayoutInflater.from(parent.context).inflate(R.layout.item_bottom_text_list_dialog, parent, false)\n        return ViewHolder(view)\n    }\n\n    override fun onBindViewHolder(holder: ViewHolder, position: Int) {\n        holder.name.text = data[position]\n\n        holder.itemView.setOnClickListener {\n            onItemClickListener?.onClick(it, position)\n        }\n    }\n\n    override fun getItemCount(): Int {\n        return data.size\n    }\n\n    fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) {\n        this.onItemClickListener = onItemClickListener\n    }\n\n    class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {\n        val name: TextView = itemView.findViewById(R.id.dialog_item_tv)\n    }\n\n    interface OnItemClickListener {\n        fun onClick(view: View, position: Int)\n    }\n}\n"
  },
  {
    "path": "custom_ldialog/src/main/res/anim/bottom_in_anim.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:duration=\"300\">\n    <translate\n        android:fromYDelta=\"100%p\"\n        android:toYDelta=\"0%p\" />\n\n    <alpha\n        android:fromAlpha=\"0.0\"\n        android:toAlpha=\"1.0\" />\n</set>"
  },
  {
    "path": "custom_ldialog/src/main/res/anim/bottom_out_anim.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:duration=\"300\">\n    <translate\n        android:duration=\"@android:integer/config_mediumAnimTime\"\n        android:fromYDelta=\"0%p\"\n        android:toYDelta=\"100%p\" />\n\n    <alpha\n        android:duration=\"@android:integer/config_mediumAnimTime\"\n        android:fromAlpha=\"1.0\"\n        android:toAlpha=\"0.3\" />\n</set>"
  },
  {
    "path": "custom_ldialog/src/main/res/drawable/selector_ios_dialog_left.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <item android:drawable=\"@color/ios_dialog_btn_pressed\" android:state_pressed=\"true\" />\n    <item android:drawable=\"@color/ios_dialog_btn_normal\" />\n\n</selector>"
  },
  {
    "path": "custom_ldialog/src/main/res/drawable/selector_ios_dialog_right.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <item android:drawable=\"@color/ios_dialog_btn_pressed\" android:state_pressed=\"true\" />\n    <item android:drawable=\"@color/ios_dialog_btn_normal\" />\n\n</selector>"
  },
  {
    "path": "custom_ldialog/src/main/res/drawable/shape_ios_dialog_bg.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <size\n        android:width=\"50dp\"\n        android:height=\"50dp\" />\n    <corners android:radius=\"10dp\" />\n    <solid android:color=\"#fff\" />\n</shape>"
  },
  {
    "path": "custom_ldialog/src/main/res/layout/item_bottom_text_list_dialog.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:orientation=\"vertical\">\n\n    <TextView\n        android:id=\"@+id/dialog_item_tv\"\n        tools:text=\"test\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"50dp\"\n        android:layout_gravity=\"center\"\n        android:gravity=\"center\"\n        android:textColor=\"#333333\" />\n\n    <View\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"1dp\"\n        android:background=\"@color/bottom_text_list_dialog_divide_line_color\" />\n\n</LinearLayout>"
  },
  {
    "path": "custom_ldialog/src/main/res/layout/layout_bottom_text_list_dialog.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\">\n\n\n    <androidx.recyclerview.widget.RecyclerView\n        android:id=\"@+id/item_recyclerView\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\" />\n\n\n</LinearLayout>"
  },
  {
    "path": "custom_ldialog/src/main/res/layout/layout_materia_dialog.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    style=\"@style/Theme.AppCompat.Dialog.MinWidth\"\n    android:orientation=\"vertical\">\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_margin=\"24dp\"\n        android:orientation=\"vertical\">\n\n        <!--android:textColor=\"@color/material_dialog_title_color\"-->\n        <!--android:textSize=\"@dimen/material_dialog_title_size\"-->\n        <!--android:textStyle=\"bold\"-->\n        <TextView\n            android:id=\"@+id/title_tv\"\n            android:textStyle=\"bold\"\n            android:layout_width=\"match_parent\"\n            android:textSize=\"@dimen/material_dialog_title_size\"\n            android:layout_height=\"wrap_content\"\n            android:textColor=\"#1B1B1B\"\n            android:gravity=\"left\"\n            tools:text=\"Title\" />\n\n        <TextView\n            android:id=\"@+id/msg_tv\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"8dp\"\n            android:gravity=\"left\"\n            android:textColor=\"#1B1B1B\"\n            android:textSize=\"@dimen/material_dialog_msg_size\"\n            tools:text=\"Message\" />\n    </LinearLayout>\n\n\n    <LinearLayout\n        android:id=\"@+id/bottomBtnLayout\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginBottom=\"4dp\"\n        android:gravity=\"right|center_vertical\"\n        android:orientation=\"horizontal\"\n        android:paddingLeft=\"16dp\"\n        android:paddingRight=\"16dp\">\n\n        <Button\n            android:id=\"@+id/neg_btn\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:textAllCaps=\"false\"\n            style=\"@style/Widget.AppCompat.Button.ButtonBar.AlertDialog\"\n            android:textColor=\"@color/material_dialog_neg_button_color\"\n            android:textSize=\"@dimen/material_dialog_neg_btn_text_size\"\n            tools:text=\"Close\" />\n\n        <Button\n            android:id=\"@+id/pos_btn\"\n            style=\"@style/Widget.AppCompat.Button.ButtonBar.AlertDialog\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:textAllCaps=\"false\"\n            android:textColor=\"@color/material_dialog_pos_button_color\"\n            android:textSize=\"@dimen/material_dialog_pos_btn_text_size\"\n            tools:text=\"ok\" />\n    </LinearLayout>\n\n</LinearLayout>"
  },
  {
    "path": "custom_ldialog/src/main/res/layout/layout_message_ios_dialog.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:orientation=\"vertical\">\n\n    <TextView\n        android:id=\"@+id/title_tv\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"15dp\"\n        android:layout_marginRight=\"15dp\"\n        android:layout_marginTop=\"15dp\"\n        android:gravity=\"center\"\n        android:textColor=\"@color/ios_dialog_title_color\"\n        android:textSize=\"@dimen/ios_dialog_title_size\"\n        android:textStyle=\"bold\"\n        tools:text=\"Title\" />\n\n    <TextView\n        android:id=\"@+id/msg_tv\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"15dp\"\n        android:layout_marginRight=\"15dp\"\n        android:layout_marginTop=\"15dp\"\n        android:gravity=\"center\"\n        android:textColor=\"@color/ios_dialog_msg_color\"\n        android:textSize=\"@dimen/ios_dialog_msg_size\"\n        tools:text=\"Message\" />\n\n    <View\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"0.5dp\"\n        android:layout_marginTop=\"20dp\"\n        android:background=\"#d9d9d9\" />\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"horizontal\">\n\n        <Button\n            android:id=\"@+id/neg_btn\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"43dp\"\n            android:layout_weight=\"1\"\n            android:background=\"@drawable/selector_ios_dialog_left\"\n            android:gravity=\"center\"\n            android:textColor=\"@color/ios_dialog_button_def_color\"\n            android:textSize=\"15sp\" />\n\n        <View\n            android:id=\"@+id/line_view\"\n            android:layout_width=\"0.5dp\"\n            android:layout_height=\"43dp\"\n            android:background=\"#d9d9d9\" />\n\n        <Button\n            android:id=\"@+id/pos_btn\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"43dp\"\n            android:layout_weight=\"1\"\n            android:background=\"@drawable/selector_ios_dialog_right\"\n            android:gravity=\"center\"\n            android:textColor=\"@color/ios_dialog_button_def_color\"\n            android:textSize=\"15sp\" />\n    </LinearLayout>\n\n</LinearLayout>"
  },
  {
    "path": "custom_ldialog/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <color name=\"colorPrimaryDark\">#039be5</color>\n\n    <color name=\"dialog_text_color\">#333333</color>\n    <color name=\"dialog_msg_color\">#444444</color>\n\n    <color name=\"ios_dialog_title_color\">@color/dialog_text_color</color>\n    <color name=\"ios_dialog_msg_color\">@color/dialog_text_color</color>\n    <color name=\"ios_dialog_button_def_color\">#0079fd</color>\n    <color name=\"ios_dialog_btn_normal\">#00ffffff</color>\n    <color name=\"ios_dialog_btn_pressed\">#f4f4f4</color>\n\n    <color name=\"bottom_text_list_dialog_divide_line_color\">#e4e4e4</color>\n\n    <color name=\"material_dialog_title_color\">@color/dialog_text_color</color>\n    <color name=\"material_dialog_msg_color\">@color/dialog_msg_color</color>\n    <color name=\"material_dialog_pos_button_color\">@color/colorPrimaryDark</color>\n    <color name=\"material_dialog_neg_button_color\">@color/dialog_text_color</color>\n\n\n</resources>\n"
  },
  {
    "path": "custom_ldialog/src/main/res/values/dimens.xml",
    "content": "<resources>\n\n    <dimen name=\"ios_dialog_title_size\">16sp</dimen>\n    <dimen name=\"ios_dialog_msg_size\">14sp</dimen>\n    <dimen name=\"ios_dialog_left_btn_text_size\">14sp</dimen>\n    <dimen name=\"ios_dialog_right_btn_text_size\">14sp</dimen>\n\n    <dimen name=\"material_dialog_title_size\">20sp</dimen>\n    <dimen name=\"material_dialog_msg_size\">16sp</dimen>\n    <dimen name=\"material_dialog_neg_btn_text_size\">14sp</dimen>\n    <dimen name=\"material_dialog_pos_btn_text_size\">14sp</dimen>\n\n</resources>\n"
  },
  {
    "path": "custom_ldialog/src/main/res/values/strings.xml",
    "content": "<resources>\n</resources>\n"
  },
  {
    "path": "custom_ldialog/src/main/res/values/styles.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <style name=\"LDialogBottomAnimation\" parent=\"android:Animation\">\n        <item name=\"android:windowEnterAnimation\">@anim/bottom_in_anim</item>\n        <item name=\"android:windowExitAnimation\">@anim/bottom_out_anim</item>\n    </style>\n\n</resources>"
  },
  {
    "path": "custom_ldialog/src/test/java/top/limuyang2/customldialog/ExampleUnitTest.java",
    "content": "package top.limuyang2.customldialog;\n\nimport org.junit.Test;\n\nimport static org.junit.Assert.*;\n\n/**\n * Example local unit test, which will execute on the development machine (host).\n *\n * @see <a href=\"http://d.android.com/tools/testing\">Testing documentation</a>\n */\npublic class ExampleUnitTest {\n    @Test\n    public void addition_isCorrect() {\n        assertEquals(4, 2 + 2);\n    }\n}"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "content": "#Tue Oct 20 14:42:32 CST 2020\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.5-all.zip\n"
  },
  {
    "path": "gradlew",
    "content": "#!/usr/bin/env sh\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS=\"\"\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin, switch paths to Windows format before running java\nif $cygwin ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=$((i+1))\n    done\n    case $i in\n        (0) set -- ;;\n        (1) set -- \"$args0\" ;;\n        (2) set -- \"$args0\" \"$args1\" ;;\n        (3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        (4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        (5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        (6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        (7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        (8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        (9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=$(save \"$@\")\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\n# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong\nif [ \"$(uname)\" = \"Darwin\" ] && [ \"$HOME\" = \"$PWD\" ]; then\n  cd \"$(dirname \"$0\")\"\nfi\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "gradlew.bat",
    "content": "@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto init\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto init\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:init\n@rem Get command-line arguments, handling Windows variants\n\nif not \"%OS%\" == \"Windows_NT\" goto win9xME_args\n\n:win9xME_args\n@rem Slurp the command line arguments.\nset CMD_LINE_ARGS=\nset _SKIP=2\n\n:win9xME_args_slurp\nif \"x%~1\" == \"x\" goto execute\n\nset CMD_LINE_ARGS=%*\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "ldialog/.gitignore",
    "content": "/build\n"
  },
  {
    "path": "ldialog/build.gradle",
    "content": "apply plugin: 'com.android.library'\napply plugin: 'kotlin-android'\napply plugin: 'kotlin-android-extensions'\n\nandroid {\n    compileSdkVersion 28\n\n    defaultConfig {\n        minSdkVersion 16\n        targetSdkVersion 28\n        versionCode 1\n        versionName \"1.0.2@androidx\"\n\n        testInstrumentationRunner \"android.support.test.runner.AndroidJUnitRunner\"\n\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            consumerProguardFiles 'proguard-rules.pro'\n        }\n    }\n\n}\n\nandroidExtensions {\n    experimental = true\n}\n\ndependencies {\n    implementation fileTree(dir: 'libs', include: ['*.jar'])\n    implementation \"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version\"\n\n    implementation \"androidx.appcompat:appcompat:1.2.0\"\n    testImplementation 'junit:junit:4.13'\n    androidTestImplementation 'androidx.test:runner:1.2.0'\n    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'\n}\n\nrepositories {\n    mavenCentral()\n}\n\n// 打包源码jar\ntask sourcesJar(type: Jar) {\n    from android.sourceSets.main.java.srcDirs\n    classifier = 'sources'\n}\ntask javadoc(type: Javadoc) {\n    failOnError  false\n    source = android.sourceSets.main.java.sourceFiles\n    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))\n    classpath += configurations.compile\n}\n\n// 打包文档jar\ntask javadocJar(type: Jar, dependsOn: javadoc) {\n    classifier = 'javadoc'\n    from javadoc.destinationDir\n}\n\nartifacts {\n    archives sourcesJar\n    archives javadocJar\n}"
  },
  {
    "path": "ldialog/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile\n-keep class top.limuyang2.ldialog.base.ViewHandlerListener { *; }\n-keep class top.limuyang2.ldialog.base.OnDialogDismissListener { *; }"
  },
  {
    "path": "ldialog/src/androidTest/java/top/limuyang2/ldialog/ExampleInstrumentedTest.java",
    "content": "package top.limuyang2.ldialog;\n\nimport android.content.Context;\nimport android.support.test.InstrumentationRegistry;\nimport android.support.test.runner.AndroidJUnit4;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\n\nimport static org.junit.Assert.*;\n\n/**\n * Instrumented test, which will execute on an Android device.\n *\n * @see <a href=\"http://d.android.com/tools/testing\">Testing documentation</a>\n */\n@RunWith(AndroidJUnit4.class)\npublic class ExampleInstrumentedTest {\n    @Test\n    public void useAppContext() {\n        // Context of the app under test.\n        Context appContext = InstrumentationRegistry.getTargetContext();\n\n        assertEquals(\"top.limuyang2.ldialog.test\", appContext.getPackageName());\n    }\n}\n"
  },
  {
    "path": "ldialog/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"top.limuyang2.ldialog\" />\n"
  },
  {
    "path": "ldialog/src/main/java/top/limuyang2/ldialog/LDialog.kt",
    "content": "package top.limuyang2.ldialog\n\nimport android.view.View\nimport androidx.annotation.LayoutRes\nimport androidx.fragment.app.FragmentManager\nimport top.limuyang2.ldialog.base.BaseLDialog\nimport top.limuyang2.ldialog.base.ViewHandlerListener\n\n/**\n *\n * Date 2018/6/27\n * @author limuyang\n */\nclass LDialog : BaseLDialog<LDialog>() {\n\n    override fun layoutRes(): Int = 0\n\n    override fun layoutView(): View? = null\n\n    override fun viewHandler(): ViewHandlerListener? {\n        return null\n    }\n\n    fun setLayoutRes(@LayoutRes layoutRes: Int): LDialog {\n        baseParams.layoutRes = layoutRes\n        return this\n    }\n\n    fun setLayoutView(view: View): LDialog {\n        baseParams.view = view\n        return this\n    }\n\n    fun setViewHandlerListener(viewHandlerListener: ViewHandlerListener): LDialog {\n        this@LDialog.viewHandlerListener = viewHandlerListener\n        return this\n    }\n\n    companion object {\n        fun init(fragmentManager: FragmentManager): LDialog {\n            val dialog = LDialog()\n            dialog.setFragmentManager(fragmentManager)\n            return dialog\n        }\n    }\n}"
  },
  {
    "path": "ldialog/src/main/java/top/limuyang2/ldialog/base/BaseLDialog.kt",
    "content": "package top.limuyang2.ldialog.base\n\n\nimport android.content.Context\nimport android.content.DialogInterface\nimport android.content.res.Configuration\nimport android.graphics.Point\nimport android.os.Bundle\nimport android.os.IBinder\nimport android.os.Parcelable\nimport android.view.*\nimport android.view.inputmethod.InputMethodManager\nimport android.widget.EditText\nimport androidx.annotation.DrawableRes\nimport androidx.annotation.FloatRange\nimport androidx.annotation.LayoutRes\nimport androidx.annotation.StyleRes\nimport androidx.fragment.app.DialogFragment\nimport androidx.fragment.app.FragmentManager\nimport kotlinx.android.parcel.Parcelize\nimport top.limuyang2.ldialog.R\n\n\n/**\n * BaseDialog(Can inherit this class)\n * Date 2018/6/26\n * @author limuyang\n */\n@Suppress(\"UNCHECKED_CAST\")\nabstract class BaseLDialog<T : BaseLDialog<T>> : DialogFragment() {\n\n    protected var baseParams: BaseDialogParams\n\n    protected var viewHandlerListener: ViewHandlerListener? = null\n\n    private var onDialogDismissListener: OnDialogDismissListener? = null\n\n    protected lateinit var mContext: Context\n\n    init {\n        setStyle(STYLE_NORMAL, R.style.LDialogStyle)\n        baseParams = BaseDialogParams().apply {\n            layoutRes = layoutRes()\n            view = layoutView()\n        }\n    }\n\n    @LayoutRes\n    protected abstract fun layoutRes(): Int\n\n    protected abstract fun layoutView(): View?\n\n    protected abstract fun viewHandler(): ViewHandlerListener?\n\n    open fun initView(view: View) {}\n\n    override fun onAttach(context: Context) {\n        super.onAttach(context)\n        mContext = context\n    }\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n\n        //Restore UI status\n        savedInstanceState?.let {\n            baseParams = it.getParcelable(KEY_PARAMS) ?: BaseDialogParams()\n            viewHandlerListener = savedInstanceState.getParcelable(KEY_VIEW_HANDLER)\n            onDialogDismissListener = savedInstanceState.getParcelable(KEY_DISMISS_LISTENER)\n        }\n\n        if (viewHandlerListener == null) {\n            viewHandlerListener = this.viewHandler()\n        }\n\n\n    }\n\n\n    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {\n        super.onCreateView(inflater, container, savedInstanceState)\n        //Clear the title of Android4.4\n        dialog?.requestWindowFeature(Window.FEATURE_NO_TITLE)\n        return when {\n            baseParams.layoutRes > 0 -> inflater.inflate(baseParams.layoutRes, container)\n            baseParams.view != null -> baseParams.view!!\n            else ->\n                throw IllegalArgumentException(\"请先设置LayoutRes或View!\")\n        }\n    }\n\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n        viewHandlerListener?.convertView(ViewHolder.create(view), this)\n        initView(view)\n\n        //Set open Keyboard\n        if (this.resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT && baseParams.needKeyboardViewId != 0) {\n            val editText = view.findViewById<EditText>(baseParams.needKeyboardViewId)\n\n            editText.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {\n                override fun onGlobalLayout() {\n                    val imm = context?.getSystemService(Context.INPUT_METHOD_SERVICE) as? InputMethodManager\n                            ?: return\n                    editText.isFocusable = true\n                    editText.isFocusableInTouchMode = true\n                    editText.requestFocus()\n                    if (imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT)) {\n                        editText.viewTreeObserver.removeOnGlobalLayoutListener(this)\n                    }\n                }\n            })\n        }\n    }\n\n    //save UI state\n    override fun onSaveInstanceState(outState: Bundle) {\n        super.onSaveInstanceState(outState)\n        outState.apply {\n            putParcelable(KEY_PARAMS, baseParams)\n            putParcelable(KEY_VIEW_HANDLER, viewHandlerListener)\n            putParcelable(KEY_DISMISS_LISTENER, onDialogDismissListener)\n        }\n    }\n\n    override fun onStart() {\n        super.onStart()\n\n        //Get screen size\n        val point = Point()\n        val windowManager = activity?.getSystemService(Context.WINDOW_SERVICE) as? WindowManager\n        windowManager?.defaultDisplay?.getSize(point)\n\n        //Set window\n        dialog?.window?.let {\n            val params = it.attributes\n            params.gravity = baseParams.gravity\n            it.attributes\n            //Set dialog width\n            when {\n                baseParams.widthScale > 0f -> {\n                    if ((this.resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE && baseParams.keepWidthScale)\n                            || this.resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT) {\n                        //横屏并且保持比例 或者 竖屏\n                        params.width = (point.x * baseParams.widthScale).toInt()\n                    }\n                }\n                baseParams.widthDp > 0f -> params.width = dp2px(mContext, baseParams.widthDp)\n            }\n\n            //Set dialog height\n            when {\n                baseParams.heightScale > 0f -> {\n                    if ((this.resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE && baseParams.keepHeightScale)\n                            || this.resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT) {\n                        //横屏并且保持比例 或者 竖屏\n                        params.height = (point.y * baseParams.heightScale).toInt()\n                    }\n                }\n                baseParams.heightDp > 0f -> params.height = dp2px(mContext, baseParams.heightDp)\n            }\n            //Set Window verticalMargin\n            params.verticalMargin = baseParams.verticalMargin\n\n            it.attributes = params\n            if (baseParams.backgroundDrawableRes == 0) {\n                it.setBackgroundDrawable(null)\n            } else {\n                it.setBackgroundDrawableResource(baseParams.backgroundDrawableRes)\n            }\n            it.setWindowAnimations(baseParams.animStyle)\n        }\n\n        //Set touch cancelable\n        if (!baseParams.cancelable) {\n            isCancelable = baseParams.cancelable\n        } else {\n            dialog?.setCanceledOnTouchOutside(baseParams.cancelableOutside)\n        }\n    }\n\n    override fun onDismiss(dialog: DialogInterface) {\n        if (baseParams.needKeyboardViewId != 0) {\n            val editText = view?.findViewById<EditText>(baseParams.needKeyboardViewId)\n            val imm = context?.getSystemService(Context.INPUT_METHOD_SERVICE) as? InputMethodManager\n                    ?: return\n            imm.hideSoftInputFromWindow(editText?.windowToken, 0)\n        }\n\n        super.onDismiss(dialog)\n        onDialogDismissListener?.onDismiss(dialog)\n    }\n\n\n    protected fun setFragmentManager(fragmentManager: FragmentManager) {\n        baseParams.fragmentManager = fragmentManager\n    }\n\n    /*** Set Params  (start) [External call]***/\n    fun setTag(tag: String): T {\n        baseParams.tag = tag\n        return this as T\n    }\n\n    fun setDismissListener(onDialogDismissListener: OnDialogDismissListener): T {\n        this.onDialogDismissListener = onDialogDismissListener\n        return this as T\n    }\n\n    fun setGravity(gravity: Int): T {\n        baseParams.gravity = gravity\n        return this as T\n    }\n\n    /**\n     * Dialog occupies the proportion of the screen\n     * {setWidthScale()} priority is higher than {setWidthDp()}\n     * @param scale Float\n     * @return T\n     */\n    fun setWidthScale(@FloatRange(from = 0.0, to = 1.0) scale: Float): T {\n        baseParams.widthScale = scale\n        return this as T\n    }\n\n    fun setWidthDp(dp: Float): T {\n        baseParams.widthDp = dp\n        return this as T\n    }\n\n    fun setHeightScale(@FloatRange(from = 0.0, to = 1.0) scale: Float): T {\n        baseParams.heightScale = scale\n        return this as T\n    }\n\n    fun setHeightDp(dp: Float): T {\n        baseParams.heightDp = dp\n        return this as T\n    }\n\n    /**\n     * Whether to maintain the {setWidthScale()} when the screen is rotated\n     * If not set {setWidthScale()}, This item does not take effect\n     * @param isKeep Boolean [Default false]\n     * @return T\n     */\n    fun setKeepWidthScale(isKeep: Boolean): T {\n        baseParams.keepWidthScale = isKeep\n        return this as T\n    }\n\n    /**\n     * Whether to maintain the {setHeightScale()} when the screen is rotated\n     * If not set {setHeightScale()}, This item does not take effect\n     * @param isKeep Boolean [Default false]\n     * @return T\n     */\n    fun setKeepHeightScale(isKeep: Boolean): T {\n        baseParams.keepHeightScale = isKeep\n        return this as T\n    }\n\n    fun setVerticalMargin(@FloatRange(from = 0.0, to = 0.1) verticalMargin: Float): T {\n        baseParams.verticalMargin = verticalMargin\n        return this as T\n    }\n\n\n    fun setCancelableAll(cancelable: Boolean): T {\n        baseParams.cancelable = cancelable\n        return this as T\n    }\n\n\n    fun setCancelableOutside(cancelableOutside: Boolean): T {\n        baseParams.cancelableOutside = cancelableOutside\n        return this as T\n    }\n\n    fun setBackgroundDrawableRes(@DrawableRes resId: Int): T {\n        baseParams.backgroundDrawableRes = resId\n        return this as T\n    }\n\n    fun setAnimStyle(@StyleRes animStyleRes: Int): T {\n        baseParams.animStyle = animStyleRes\n        return this as T\n    }\n\n    /**\n     * auto open keyboard, (only EditText)\n     * @param id Int EditTextView ID\n     * @return T\n     */\n    fun setNeedKeyboardEditTextId(id: Int): T {\n        baseParams.needKeyboardViewId = id\n        return this as T\n    }\n\n    fun show(): T {\n        baseParams.fragmentManager?.let { show(it, baseParams.tag) }\n        return this as T\n    }\n\n    /*** Set Params  (end)***/\n\n    companion object {\n        private const val KEY_PARAMS = \"key_params\"\n        private const val KEY_VIEW_HANDLER = \"view_handler\"\n        private const val KEY_DISMISS_LISTENER = \"dismiss_listener\"\n\n        private fun dp2px(context: Context, dipValue: Float): Int {\n            val scale = context.resources.displayMetrics.density\n            return (dipValue * scale + 0.5f).toInt()\n        }\n\n    }\n\n    abstract class UnParcelableParams(var fragmentManager: FragmentManager? = null,\n                                      var view: View? = null)\n\n    @Parcelize\n    class BaseDialogParams(\n            @LayoutRes var layoutRes: Int = 0,\n            var widthScale: Float = 0f,\n            var widthDp: Float = 0f,\n\n            var heightScale: Float = 0f,\n            var heightDp: Float = 0f,\n            var keepWidthScale: Boolean = false,\n            var keepHeightScale: Boolean = false,\n            var verticalMargin: Float = 0f,\n\n            var gravity: Int = Gravity.CENTER,\n            var tag: String = \"LDialog\",\n            var cancelable: Boolean = true,\n            var cancelableOutside: Boolean = true,\n            var backgroundDrawableRes: Int = R.drawable.def_dialog_bg,\n            var animStyle: Int = 0,\n            var needKeyboardViewId: Int = 0\n    ) : UnParcelableParams(), Parcelable\n\n}\n"
  },
  {
    "path": "ldialog/src/main/java/top/limuyang2/ldialog/base/OnDialogDismissListener.kt",
    "content": "package top.limuyang2.ldialog.base\n\nimport android.content.DialogInterface\nimport android.os.Parcel\nimport android.os.Parcelable\n\n/**\n *\n * Date 2018/7/3\n * @author limuyang\n */\nabstract class OnDialogDismissListener : DialogInterface.OnDismissListener, Parcelable {\n\n    override fun describeContents(): Int = 0\n\n    override fun writeToParcel(dest: Parcel, flags: Int) {}\n\n    constructor()\n\n    protected constructor(source: Parcel)\n\n    companion object {\n        @JvmField\n        val CREATOR: Parcelable.Creator<OnDialogDismissListener> = object : Parcelable.Creator<OnDialogDismissListener> {\n            override fun createFromParcel(source: Parcel): OnDialogDismissListener {\n                return object : OnDialogDismissListener(source) {\n                    override fun onDismiss(dialog: DialogInterface) {\n\n                    }\n                }\n            }\n\n            override fun newArray(size: Int): Array<OnDialogDismissListener?> {\n                return arrayOfNulls(size)\n            }\n        }\n    }\n}"
  },
  {
    "path": "ldialog/src/main/java/top/limuyang2/ldialog/base/ViewHandlerListener.kt",
    "content": "package top.limuyang2.ldialog.base\n\nimport android.os.Parcel\nimport android.os.Parcelable\n\n\n/**\n *\n * Date 2018/7/2\n * @author limuyang\n */\n\nabstract class ViewHandlerListener : Parcelable {\n\n    abstract fun convertView(holder: ViewHolder, dialog: BaseLDialog<*>)\n\n    override fun describeContents(): Int {\n        return 0\n    }\n\n    override fun writeToParcel(dest: Parcel, flags: Int) {\n    }\n\n    constructor()\n\n    protected constructor(source: Parcel)\n\n    companion object {\n        @JvmField\n        val CREATOR: Parcelable.Creator<ViewHandlerListener> = object : Parcelable.Creator<ViewHandlerListener> {\n            override fun createFromParcel(source: Parcel): ViewHandlerListener {\n                return object : ViewHandlerListener(source) {\n                    override fun convertView(holder: ViewHolder, dialog: BaseLDialog<*>) {\n\n                    }\n                }\n            }\n\n            override fun newArray(size: Int): Array<ViewHandlerListener?> {\n                return arrayOfNulls(size)\n            }\n        }\n    }\n}"
  },
  {
    "path": "ldialog/src/main/java/top/limuyang2/ldialog/base/ViewHolder.kt",
    "content": "package top.limuyang2.ldialog.base\n\nimport android.util.SparseArray\nimport android.view.View\nimport android.widget.TextView\n\n/**\n * Date 2018/6/29\n *\n * @author limuyang\n */\n@Suppress(\"UNCHECKED_CAST\")\nclass ViewHolder private constructor(private val convertView: View) {\n    private val views: SparseArray<View> = SparseArray()\n\n    fun <T : View> getView(viewId: Int): T {\n        var view: View? = views.get(viewId)\n        if (view == null) {\n            view = convertView.findViewById(viewId)\n            views.put(viewId, view)\n        }\n        return view as T\n    }\n\n    companion object {\n\n        fun create(view: View): ViewHolder {\n            return ViewHolder(view)\n        }\n    }\n}\n\nfun ViewHolder.setText(viewId: Int, textId: Int) {\n    val textView = getView<TextView>(viewId)\n    textView.setText(textId)\n}\n\nfun ViewHolder.setText(viewId: Int, text: CharSequence) {\n    val textView = getView<TextView>(viewId)\n    textView.text = text\n}\n\nfun ViewHolder.setTextColor(viewId: Int, colorId: Int) {\n    val textView = getView<TextView>(viewId)\n    textView.setTextColor(colorId)\n}\n\nfun ViewHolder.setOnClickListener(viewId: Int, clickListener: View.OnClickListener?) {\n    val view = getView<View>(viewId)\n    view.setOnClickListener(clickListener)\n}\n\nfun ViewHolder.setBackgroundResource(viewId: Int, resId: Int) {\n    val view = getView<View>(viewId)\n    view.setBackgroundResource(resId)\n}\n\nfun ViewHolder.setBackgroundColor(viewId: Int, colorId: Int) {\n    val view = getView<View>(viewId)\n    view.setBackgroundColor(colorId)\n}"
  },
  {
    "path": "ldialog/src/main/res/drawable/def_dialog_bg.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <corners android:radius=\"2dp\" />\n    <solid android:color=\"#fff\" />\n</shape>"
  },
  {
    "path": "ldialog/src/main/res/values/styles.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <style name=\"LDialogStyle\" parent=\"@style/Theme.AppCompat.Light.Dialog\">\n        <!-- 背景透明 -->\n        <item name=\"android:windowBackground\">@android:color/transparent</item>\n        <item name=\"android:windowContentOverlay\">@null</item>\n        <!-- 浮于Activity之上 -->\n        <item name=\"android:windowIsFloating\">true</item>\n        <!-- 边框 -->\n        <item name=\"android:windowFrame\">@null</item>\n        <!-- 无标题 -->\n        <item name=\"android:windowNoTitle\">true</item>\n    </style>\n</resources>"
  },
  {
    "path": "ldialog/src/test/java/top/limuyang2/ldialog/ExampleUnitTest.java",
    "content": "package top.limuyang2.ldialog;\n\nimport org.junit.Test;\n\nimport static org.junit.Assert.*;\n\n/**\n * Example local unit test, which will execute on the development machine (host).\n *\n * @see <a href=\"http://d.android.com/tools/testing\">Testing documentation</a>\n */\npublic class ExampleUnitTest {\n    @Test\n    public void addition_isCorrect() {\n        assertEquals(4, 2 + 2);\n    }\n}"
  },
  {
    "path": "screenshot/screenshot.txt",
    "content": "\n"
  },
  {
    "path": "settings.gradle",
    "content": "include ':app', ':ldialog', ':custom_ldialog'\n"
  }
]