[
  {
    "path": ".gitignore",
    "content": "*.iml\n.gradle\n/local.properties\n/.idea/workspace.xml\n/.idea/libraries\n.DS_Store\n/build\n/captures\n.externalNativeBuild\n"
  },
  {
    "path": ".idea/compiler.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"CompilerConfiguration\">\n    <option name=\"DEFAULT_COMPILER\" value=\"Javac\" />\n    <resourceExtensions />\n    <wildcardResourcePatterns>\n      <entry name=\"!?*.java\" />\n      <entry name=\"!?*.form\" />\n      <entry name=\"!?*.class\" />\n      <entry name=\"!?*.groovy\" />\n      <entry name=\"!?*.scala\" />\n      <entry name=\"!?*.flex\" />\n      <entry name=\"!?*.kt\" />\n      <entry name=\"!?*.clj\" />\n    </wildcardResourcePatterns>\n    <annotationProcessing>\n      <profile default=\"true\" name=\"Default\" enabled=\"false\">\n        <processorPath useClasspath=\"true\" />\n      </profile>\n    </annotationProcessing>\n  </component>\n</project>"
  },
  {
    "path": ".idea/copyright/profiles_settings.xml",
    "content": "<component name=\"CopyrightManager\">\n  <settings default=\"\" />\n</component>"
  },
  {
    "path": ".idea/dictionaries/vivian.xml",
    "content": "<component name=\"ProjectDictionaryState\">\n  <dictionary name=\"vivian\" />\n</component>"
  },
  {
    "path": ".idea/encodings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"Encoding\">\n    <file url=\"PROJECT\" charset=\"UTF-8\" />\n  </component>\n</project>"
  },
  {
    "path": ".idea/gradle.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"GradleSettings\">\n    <option name=\"linkedExternalProjectsSettings\">\n      <GradleProjectSettings>\n        <option name=\"distributionType\" value=\"DEFAULT_WRAPPED\" />\n        <option name=\"externalProjectPath\" value=\"$PROJECT_DIR$\" />\n        <option name=\"modules\">\n          <set>\n            <option value=\"$PROJECT_DIR$\" />\n            <option value=\"$PROJECT_DIR$/app\" />\n          </set>\n        </option>\n        <option name=\"resolveModulePerSourceSet\" value=\"false\" />\n      </GradleProjectSettings>\n    </option>\n  </component>\n</project>"
  },
  {
    "path": ".idea/inspectionProfiles/Project_Default.xml",
    "content": "<component name=\"InspectionProjectProfileManager\">\n  <profile version=\"1.0\">\n    <option name=\"myName\" value=\"Project Default\" />\n    <option name=\"myLocal\" value=\"true\" />\n    <inspection_tool class=\"AndroidLintAaptCrash\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintAccidentalOctal\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintAdapterViewChildren\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintAddJavascriptInterface\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintAllowBackup\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintAlwaysShowAction\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintAppCompatMethod\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintAppCompatResource\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintAssert\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintButtonCase\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintButtonOrder\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintButtonStyle\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintByteOrderMark\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintCommitPrefEdits\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintCommitTransaction\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintContentDescription\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintCustomViewStyleable\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintCutPasteId\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintDeprecated\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintDeviceAdmin\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintDisableBaselineAlignment\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintDrawAllocation\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintDuplicateActivity\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintDuplicateDefinition\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintDuplicateIds\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintDuplicateIncludedIds\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintDuplicateUsesFeature\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintEnforceUTF8\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintExportedContentProvider\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintExportedPreferenceActivity\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintExportedReceiver\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintExportedService\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintExtraText\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintExtraTranslation\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintGetInstance\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintGifUsage\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintGradleCompatible\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintGradleCompatiblePlugin\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintGradleDependency\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintGradleDeprecated\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintGradleDynamicVersion\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintGradleGetter\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintGradleIdeError\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintGradleOverrides\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintGradlePath\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintGrantAllUris\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintGridLayout\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintHandlerLeak\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintHardcodedDebugMode\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintHardcodedText\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintIconColors\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintIconDensities\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintIconDipSize\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintIconDuplicates\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintIconDuplicatesConfig\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintIconExtension\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintIconLauncherShape\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintIconLocation\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintIconMissingDensityFolder\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintIconMixedNinePatch\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintIconNoDpi\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintIconXmlAndPng\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintIllegalResourceRef\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintImpliedQuantity\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintInOrMmUsage\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintIncludeLayoutParam\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintInconsistentArrays\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintInconsistentLayout\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintInefficientWeight\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintInflateParams\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintInlinedApi\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintInnerclassSeparator\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintInvalidId\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintInvalidResourceFolder\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintJavascriptInterface\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintLabelFor\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintLibraryCustomView\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintLocalSuppress\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintLocaleFolder\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintLogTagMismatch\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintLongLogTag\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintMangledCRLF\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintManifestOrder\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintMenuTitle\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintMergeRootFrame\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintMipmapIcons\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintMissingApplicationIcon\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintMissingId\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintMissingPrefix\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintMissingQuantity\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintMissingSuperCall\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintMissingTranslation\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintMissingVersion\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintMockLocation\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintMultipleUsesSdk\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintNestedScrolling\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintNestedWeights\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintNewApi\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintNfcTechWhitespace\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintNotSibling\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintObsoleteLayoutParam\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintOldTargetApi\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintOrientation\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintOverdraw\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintOverride\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintOverrideAbstract\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintPackageManagerGetSignatures\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintPackagedPrivateKey\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintParcelCreator\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintPluralsCandidate\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintProguard\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintProguardSplit\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintPropertyEscape\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintProtectedPermissions\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintPxUsage\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintRecycle\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintReferenceType\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintRegistered\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintRelativeOverlap\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintRequiredSize\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintResAuto\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintResourceAsColor\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintResourceCycle\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintResourceName\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintRtlCompat\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintRtlEnabled\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintRtlHardcoded\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintRtlSymmetry\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintScrollViewCount\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintScrollViewSize\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintSdCardPath\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintServiceCast\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintSetJavaScriptEnabled\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintShowToast\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintSignatureOrSystemPermissions\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintSimpleDateFormat\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintSmallSp\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintSpUsage\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintStateListReachable\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintStringFormatCount\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintStringFormatInvalid\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintStringFormatMatches\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintStringShouldBeInt\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintSuspicious0dp\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintSuspiciousImport\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintTextFields\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintTextViewEdits\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintTooDeepLayout\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintTooManyViews\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintTypographyDashes\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintTypographyEllipsis\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintTypographyFractions\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintTypographyOther\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintTypos\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintUniquePermission\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintUnknownId\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintUnknownIdInLayout\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintUnlocalizedSms\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintUnusedAttribute\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintUnusedQuantity\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintUnusedResources\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintUseAlpha2\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintUseCheckPermission\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintUseCompoundDrawables\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintUseSparseArrays\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintUseValueOf\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintUselessLeaf\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintUselessParent\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintUsesMinSdkAttributes\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintUsingHttp\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintValidFragment\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintViewConstructor\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintViewHolder\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintWebViewLayout\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintWorldReadableFiles\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintWorldWriteableFiles\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintWrongCall\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintWrongCase\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintWrongFolder\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintWrongRegion\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"AndroidLintWrongViewCast\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\" />\n    <inspection_tool class=\"LoggerInitializedWithForeignClass\" enabled=\"false\" level=\"WARNING\" enabled_by_default=\"false\">\n      <option name=\"loggerClassName\" value=\"org.apache.log4j.Logger,org.slf4j.LoggerFactory,org.apache.commons.logging.LogFactory,java.util.logging.Logger\" />\n      <option name=\"loggerFactoryMethodName\" value=\"getLogger,getLogger,getLog,getLogger\" />\n    </inspection_tool>\n  </profile>\n</component>"
  },
  {
    "path": ".idea/inspectionProfiles/profiles_settings.xml",
    "content": "<component name=\"InspectionProjectProfileManager\">\n  <settings>\n    <option name=\"PROJECT_PROFILE\" value=\"Project Default\" />\n    <option name=\"USE_PROJECT_PROFILE\" value=\"true\" />\n    <version value=\"1.0\" />\n  </settings>\n</component>"
  },
  {
    "path": ".idea/misc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"EntryPointsManager\">\n    <entry_points version=\"2.0\" />\n  </component>\n  <component name=\"MavenImportPreferences\">\n    <option name=\"generalSettings\">\n      <MavenGeneralSettings>\n        <option name=\"mavenHome\" value=\"Bundled (Maven 3)\" />\n      </MavenGeneralSettings>\n    </option>\n  </component>\n  <component name=\"NullableNotNullManager\">\n    <option name=\"myDefaultNullable\" value=\"android.support.annotation.Nullable\" />\n    <option name=\"myDefaultNotNull\" value=\"android.support.annotation.NonNull\" />\n    <option name=\"myNullables\">\n      <value>\n        <list size=\"4\">\n          <item index=\"0\" class=\"java.lang.String\" itemvalue=\"org.jetbrains.annotations.Nullable\" />\n          <item index=\"1\" class=\"java.lang.String\" itemvalue=\"javax.annotation.Nullable\" />\n          <item index=\"2\" class=\"java.lang.String\" itemvalue=\"edu.umd.cs.findbugs.annotations.Nullable\" />\n          <item index=\"3\" class=\"java.lang.String\" itemvalue=\"android.support.annotation.Nullable\" />\n        </list>\n      </value>\n    </option>\n    <option name=\"myNotNulls\">\n      <value>\n        <list size=\"4\">\n          <item index=\"0\" class=\"java.lang.String\" itemvalue=\"org.jetbrains.annotations.NotNull\" />\n          <item index=\"1\" class=\"java.lang.String\" itemvalue=\"javax.annotation.Nonnull\" />\n          <item index=\"2\" class=\"java.lang.String\" itemvalue=\"edu.umd.cs.findbugs.annotations.NonNull\" />\n          <item index=\"3\" class=\"java.lang.String\" itemvalue=\"android.support.annotation.NonNull\" />\n        </list>\n      </value>\n    </option>\n  </component>\n  <component name=\"ProjectInspectionProfilesVisibleTreeState\">\n    <entry key=\"Project Default\">\n      <profile-state>\n        <expanded-state>\n          <State>\n            <id />\n          </State>\n          <State>\n            <id>Abstraction issuesJava</id>\n          </State>\n          <State>\n            <id>Android</id>\n          </State>\n          <State>\n            <id>Android Lint</id>\n          </State>\n          <State>\n            <id>Class metricsJava</id>\n          </State>\n          <State>\n            <id>Code style issuesJava</id>\n          </State>\n          <State>\n            <id>Declaration redundancyJava</id>\n          </State>\n          <State>\n            <id>Error handlingJava</id>\n          </State>\n          <State>\n            <id>Groovy</id>\n          </State>\n          <State>\n            <id>Java</id>\n          </State>\n          <State>\n            <id>Method MetricsGroovy</id>\n          </State>\n          <State>\n            <id>Method metricsJava</id>\n          </State>\n          <State>\n            <id>Naming ConventionsGroovy</id>\n          </State>\n          <State>\n            <id>Naming conventionsJava</id>\n          </State>\n          <State>\n            <id>Security issuesJava</id>\n          </State>\n        </expanded-state>\n      </profile-state>\n    </entry>\n  </component>\n  <component name=\"ProjectLevelVcsManager\" settingsEditedManually=\"false\">\n    <OptionsSetting value=\"true\" id=\"Add\" />\n    <OptionsSetting value=\"true\" id=\"Remove\" />\n    <OptionsSetting value=\"true\" id=\"Checkout\" />\n    <OptionsSetting value=\"true\" id=\"Update\" />\n    <OptionsSetting value=\"true\" id=\"Status\" />\n    <OptionsSetting value=\"true\" id=\"Edit\" />\n    <ConfirmationsSetting value=\"0\" id=\"Add\" />\n    <ConfirmationsSetting value=\"0\" id=\"Remove\" />\n  </component>\n  <component name=\"ProjectRootManager\" version=\"2\" languageLevel=\"JDK_1_8\" assert-keyword=\"true\" jdk-15=\"true\" project-jdk-name=\"1.8\" project-jdk-type=\"JavaSDK\">\n    <output url=\"file://$PROJECT_DIR$/build/classes\" />\n  </component>\n  <component name=\"ProjectType\">\n    <option name=\"id\" value=\"Android\" />\n  </component>\n  <component name=\"masterDetails\">\n    <states>\n      <state key=\"Copyright.UI\">\n        <settings>\n          <splitter-proportions>\n            <option name=\"proportions\">\n              <list>\n                <option value=\"0.2\" />\n              </list>\n            </option>\n          </splitter-proportions>\n        </settings>\n      </state>\n      <state key=\"ProjectJDKs.UI\">\n        <settings>\n          <last-edited>1.8</last-edited>\n          <splitter-proportions>\n            <option name=\"proportions\">\n              <list>\n                <option value=\"0.2\" />\n              </list>\n            </option>\n          </splitter-proportions>\n        </settings>\n      </state>\n      <state key=\"ScopeChooserConfigurable.UI\">\n        <settings>\n          <splitter-proportions>\n            <option name=\"proportions\">\n              <list>\n                <option value=\"0.2\" />\n              </list>\n            </option>\n          </splitter-proportions>\n        </settings>\n      </state>\n    </states>\n  </component>\n</project>"
  },
  {
    "path": ".idea/modules.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ProjectModuleManager\">\n    <modules>\n      <module fileurl=\"file://$PROJECT_DIR$/ShadeDemo.iml\" filepath=\"$PROJECT_DIR$/ShadeDemo.iml\" />\n      <module fileurl=\"file://$PROJECT_DIR$/app/app.iml\" filepath=\"$PROJECT_DIR$/app/app.iml\" />\n    </modules>\n  </component>\n</project>"
  },
  {
    "path": ".idea/runConfigurations.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"RunConfigurationProducerService\">\n    <option name=\"ignoredProducers\">\n      <set>\n        <option value=\"org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer\" />\n        <option value=\"org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer\" />\n        <option value=\"org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer\" />\n      </set>\n    </option>\n  </component>\n</project>"
  },
  {
    "path": ".idea/vcs.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"VcsDirectoryMappings\">\n    <mapping directory=\"$PROJECT_DIR$\" vcs=\"Git\" />\n  </component>\n</project>"
  },
  {
    "path": "README.md",
    "content": "# CardView\n类似小票效果的卡片列表，并且可以修改阴影颜色\n\n# Usage\n可以直接引用CardView\n```\nCardView cardView=new CardView(context);\n//修改CardView的主题颜色\ncardView.changeTheme(0xff01a3a1);\n```\n# 原理\n用paint.setShadowLayer来设置阴影颜色和尺寸，进行阴影绘制，用path来画出drawable的形状。\n封装了changeTheme的方法，可以直接设置主题的颜色。\n\n本示例中为了更好地实现效果，用了```TopDrawable、CenterDrawable、BottomDrawable```三部分拼接而成，也可以用来实现打印小票的视觉效果。另外添加了一个类似<b>FloatingButton</b>效果的```CircleShadowDrawable```。\n# 效果图\n<div>\n<img hspace=\"20\" src=\"https://github.com/vivian8725118/ShadeDemo/blob/master/art/S61201-155859.jpg\" width=\"40%\"/>\n<img src=\"https://github.com/vivian8725118/ShadeDemo/blob/master/art/S61201-163058.jpg\" width=\"40%\"/>\n</div>\n"
  },
  {
    "path": "app/.gitignore",
    "content": "/build\n"
  },
  {
    "path": "app/build.gradle",
    "content": "apply plugin: 'com.android.application'\n\nandroid {\n    compileSdkVersion 25\n    buildToolsVersion \"24.0.3\"\n    defaultConfig {\n        applicationId \"com.vivian.shadedemo\"\n        minSdkVersion 14\n        targetSdkVersion 25\n        versionCode 1\n        versionName \"1.0\"\n        testInstrumentationRunner \"android.support.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    compile fileTree(include: ['*.jar'], dir: 'libs')\n    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {\n        exclude group: 'com.android.support', module: 'support-annotations'\n    })\n    compile 'com.android.support:appcompat-v7:25.0.0'\n    testCompile 'junit:junit:4.12'\n    compile 'com.android.support:recyclerview-v7:25.0.0'\n}\n"
  },
  {
    "path": "app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /Users/vivian/Documents/android-sdk/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\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"
  },
  {
    "path": "app/src/androidTest/java/com/vivian/shadedemo/ExampleInstrumentedTest.java",
    "content": "package com.vivian.shadedemo;\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 * Instrumentation 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() throws Exception {\n        // Context of the app under test.\n        Context appContext = InstrumentationRegistry.getTargetContext();\n\n        assertEquals(\"com.vivian.shadedemo\", appContext.getPackageName());\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=\"com.vivian.shadedemo\">\n\n    <application\n        android:allowBackup=\"true\"\n        android:icon=\"@mipmap/ic_launcher\"\n        android:label=\"@string/app_name\"\n        android:supportsRtl=\"true\"\n        android:theme=\"@style/AppTheme\">\n        <activity android:name=\".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    </application>\n\n</manifest>"
  },
  {
    "path": "app/src/main/java/com/vivian/shadedemo/MainActivity.java",
    "content": "package com.vivian.shadedemo;\n\nimport android.os.Bundle;\nimport android.support.v7.app.AppCompatActivity;\nimport android.support.v7.widget.LinearLayoutManager;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.LayoutInflater;\nimport android.widget.LinearLayout;\n\nimport com.vivian.shadedemo.adapter.CardViewAdapter;\nimport com.vivian.shadedemo.entity.Card;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class MainActivity extends AppCompatActivity {\n    RecyclerView mRecyclerView;\n    LinearLayoutManager mLayoutManager;\n    CardViewAdapter mAdapter;\n    List<Card> mList = new ArrayList<>();\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        initViewRecyclerView();\n    }\n\n    public void initViewRecyclerView() {\n        LinearLayout view = (LinearLayout) LayoutInflater.from(this).inflate(R.layout.activity_main_recyclerview, null);\n        setContentView(view);\n\n        mRecyclerView = (RecyclerView) findViewById(R.id.recyclerview);\n        mLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);\n        mRecyclerView.setLayoutManager(mLayoutManager);\n        mAdapter = new CardViewAdapter(this);\n        mRecyclerView.setAdapter(mAdapter);\n        //模拟数据\n        for (int i = 0; i < 10; i++) {\n            Card card = new Card();\n            String content = \"刘雯、何穗、奚梦瑶、雎晓雯......在公开的 52 位模特名单里，一下子出现了四位中国模特。要知道，一年一度的顶级维密大秀可是为“国际超模”四个字加持的大秀啊。接下来，时间将印证这四位模特的未来身价和职业生涯。\";\n            card.setContent(content);\n            mList.add(card);\n        }\n        mAdapter.setData(mList);\n        mAdapter.notifyDataSetChanged();\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/vivian/shadedemo/adapter/CardViewAdapter.java",
    "content": "package com.vivian.shadedemo.adapter;\n\nimport android.content.Context;\nimport android.support.v7.widget.RecyclerView;\nimport android.text.Editable;\nimport android.text.TextWatcher;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.EditText;\nimport android.widget.ImageView;\nimport android.widget.RelativeLayout;\nimport android.widget.TextView;\n\nimport com.vivian.shadedemo.R;\nimport com.vivian.shadedemo.entity.Card;\nimport com.vivian.shadedemo.widget.CardView;\n\nimport java.util.List;\n\n/**\n * *          _       _\n * *   __   _(_)_   _(_) __ _ _ __\n * *   \\ \\ / / \\ \\ / / |/ _` | '_ \\\n * *    \\ V /| |\\ V /| | (_| | | | |\n * *     \\_/ |_| \\_/ |_|\\__,_|_| |_|\n * <p>\n * Created by vivian on 2016/12/1.\n */\n\npublic class CardViewAdapter extends RecyclerView.Adapter<CardViewAdapter.ViewHolder> {\n    List<Card> mData;\n    Context mContext;\n    int[] colors = {0xff01a3a1, 0xff91bbeb, 0xff01b1bf, 0xffff9d62, 0xff2d3867, 0xffee697e};//颜色组\n\n    public void setData(List<Card> list) {\n        this.mData = list;\n    }\n\n    public CardViewAdapter(Context context) {\n        mContext = context;\n    }\n\n    @Override\n    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {\n        View view = new CardView(mContext);\n        ViewHolder holder = new ViewHolder(view);\n        return holder;\n    }\n\n    @Override\n    public void onBindViewHolder(final ViewHolder holder, int position) {\n        holder.content.setText(mData.get(position).getContent());\n        holder.comment.setText(mData.get(position).getComment());\n        holder.comment.addTextChangedListener(new TextWatcher() {\n            @Override\n            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {\n\n            }\n\n            @Override\n            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {\n                mData.get(holder.getAdapterPosition()).setComment(charSequence.toString());\n            }\n\n            @Override\n            public void afterTextChanged(Editable editable) {\n\n            }\n        });\n        //设置颜色变化\n        ((CardView) holder.itemView).changeTheme(colors[position % 6]);\n    }\n\n    @Override\n    public int getItemCount() {\n        return mData.size();\n    }\n\n\n    static class ViewHolder extends RecyclerView.ViewHolder {\n        RelativeLayout top;\n        ImageView center;\n        EditText comment;\n        TextView content;\n\n        ViewHolder(View view) {\n            super(view);\n            top = (RelativeLayout) view.findViewById(R.id.top);\n            center = (ImageView) view.findViewById(R.id.center);\n            comment = (EditText) view.findViewById(R.id.comment);\n            content = (TextView) view.findViewById(R.id.content);\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/vivian/shadedemo/anim/RecyclerViewItemAnimator.java",
    "content": "package com.vivian.shadedemo.anim;\n\nimport android.support.annotation.NonNull;\nimport android.support.annotation.Nullable;\nimport android.support.v7.widget.RecyclerView;\n\n/**\n * *          _       _\n * *   __   _(_)_   _(_) __ _ _ __\n * *   \\ \\ / / \\ \\ / / |/ _` | '_ \\\n * *    \\ V /| |\\ V /| | (_| | | | |\n * *     \\_/ |_| \\_/ |_|\\__,_|_| |_|\n * <p>\n * Created by vivian on 2016/12/1.\n */\n\npublic class RecyclerViewItemAnimator extends RecyclerView.ItemAnimator{\n    @Override\n    public boolean animateDisappearance(@NonNull RecyclerView.ViewHolder viewHolder, @NonNull ItemHolderInfo preLayoutInfo, @Nullable ItemHolderInfo postLayoutInfo) {\n        return false;\n    }\n\n    @Override\n    public boolean animateAppearance(@NonNull RecyclerView.ViewHolder viewHolder, @Nullable ItemHolderInfo preLayoutInfo, @NonNull ItemHolderInfo postLayoutInfo) {\n        return false;\n    }\n\n    @Override\n    public boolean animatePersistence(@NonNull RecyclerView.ViewHolder viewHolder, @NonNull ItemHolderInfo preLayoutInfo, @NonNull ItemHolderInfo postLayoutInfo) {\n        return false;\n    }\n\n    @Override\n    public boolean animateChange(@NonNull RecyclerView.ViewHolder oldHolder, @NonNull RecyclerView.ViewHolder newHolder, @NonNull ItemHolderInfo preLayoutInfo, @NonNull ItemHolderInfo postLayoutInfo) {\n        return false;\n    }\n\n    @Override\n    public void runPendingAnimations() {\n\n    }\n\n    @Override\n    public void endAnimation(RecyclerView.ViewHolder item) {\n\n    }\n\n    @Override\n    public void endAnimations() {\n\n    }\n\n    @Override\n    public boolean isRunning() {\n        return false;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/vivian/shadedemo/drawable/BottomDrawable.java",
    "content": "package com.vivian.shadedemo.drawable;\n\nimport android.graphics.Canvas;\nimport android.graphics.Color;\nimport android.graphics.ColorFilter;\nimport android.graphics.Paint;\nimport android.graphics.Path;\nimport android.graphics.PixelFormat;\nimport android.graphics.Rect;\nimport android.graphics.RectF;\nimport android.graphics.drawable.Drawable;\n\n/**\n * *          _       _\n * *   __   _(_)_   _(_) __ _ _ __\n * *   \\ \\ / / \\ \\ / / |/ _` | '_ \\\n * *    \\ V /| |\\ V /| | (_| | | | |\n * *     \\_/ |_| \\_/ |_|\\__,_|_| |_|\n * <p>\n * Created by vivian on 2016/11/30.\n */\n\npublic class BottomDrawable extends Drawable {\n    Paint paint;\n    Paint paintShadow;\n    Path path;\n    RectF rectF;\n    int x = 20;\n    int y = 0;\n    int color = 0x2601a3a1;\n\n    public BottomDrawable() {\n        paint = new Paint();\n        paint.setColor(Color.WHITE);\n        paint.setAntiAlias(true);\n\n        paintShadow = new Paint();\n        paintShadow.setColor(Color.WHITE);\n        paintShadow.setAntiAlias(true);\n\n        path = new Path();\n    }\n\n    public void setColor(int color) {\n        this.color = color;\n        // 设定阴影(柔边, X 轴位移, Y 轴位移, 阴影颜色)\n        paintShadow.setShadowLayer(21, 0, 10, color & 0x26ffffff);\n        invalidateSelf();\n    }\n\n    @Override\n    public void draw(Canvas canvas) {\n        canvas.drawPath(path, paintShadow);\n        canvas.drawRect(x, y, getBounds().width() - x, y + 21, paint);\n    }\n\n    @Override\n    protected void onBoundsChange(Rect bounds) {\n        super.onBoundsChange(bounds);\n        path.reset();\n        rectF = new RectF(x, y, bounds.width() - x, y + bounds.height() - 21);\n        path.addRoundRect(rectF, new float[]{0, 0, 0, 0, 10, 10, 10, 10}, Path.Direction.CW);\n    }\n\n    @Override\n    public void setAlpha(int i) {\n\n    }\n\n    @Override\n    public void setColorFilter(ColorFilter colorFilter) {\n    }\n\n    @Override\n    public int getOpacity() {\n        return PixelFormat.TRANSLUCENT;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/vivian/shadedemo/drawable/CenterDrawable.java",
    "content": "package com.vivian.shadedemo.drawable;\n\nimport android.graphics.Bitmap;\nimport android.graphics.Canvas;\nimport android.graphics.Color;\nimport android.graphics.ColorFilter;\nimport android.graphics.DashPathEffect;\nimport android.graphics.Paint;\nimport android.graphics.Path;\nimport android.graphics.PathEffect;\nimport android.graphics.PixelFormat;\nimport android.graphics.Rect;\nimport android.graphics.drawable.Drawable;\n\n/**\n * *          _       _\n * *   __   _(_)_   _(_) __ _ _ __\n * *   \\ \\ / / \\ \\ / / |/ _` | '_ \\\n * *    \\ V /| |\\ V /| | (_| | | | |\n * *     \\_/ |_| \\_/ |_|\\__,_|_| |_|\n * <p>\n * Created by vivian on 2016/11/30.\n */\n\npublic class CenterDrawable extends Drawable {\n    Paint paint;\n    Paint paintShadow;\n    Paint paintLine;\n    Path path;\n\n    Bitmap bitmap;\n    int color=0x2601a3a1;\n\n    PathEffect effects = new DashPathEffect(new float[]{ 6, 8}, 1);\n\n    public CenterDrawable(Bitmap bitmap) {\n        this.bitmap=bitmap;\n\n        paint = new Paint();\n        paint.setColor(Color.WHITE);\n        paint.setAntiAlias(true);\n\n        paintShadow = new Paint();\n        paintShadow.setColor(Color.WHITE);\n        paintShadow.setAntiAlias(true);\n\n        path = new Path();\n\n        paintLine = new Paint();\n        paintLine.setColor(Color.GRAY);\n        paintLine.setAntiAlias(true);\n\n        paintLine.setPathEffect(effects);\n        paintLine.setStyle(Paint.Style.FILL);\n        paintLine.setStrokeWidth(1);\n    }\n\n    public void setColor(int color){\n        this.color=color;\n        // 设定阴影(柔边, X 轴位移, Y 轴位移, 阴影颜色)\n        paintShadow.setShadowLayer(21, 0, 10, color&0x26ffffff);\n        invalidateSelf();\n    }\n\n    @Override\n    public void onBoundsChange(Rect bounds){\n        int x = bounds.left + 20;\n        int y = bounds.top;\n\n        path.reset();\n        path.moveTo(x, y);\n        path.lineTo(bounds.right - x, y);\n        path.quadTo(bounds.right - x - bounds.bottom * 0.8f, bounds.bottom / 2, bounds.right - x, bounds.bottom);\n        path.lineTo(x, bounds.bottom);\n        path.quadTo(x + bounds.bottom * 0.8f, bounds.bottom / 2, x, y);\n        path.close();\n    }\n\n    @Override\n    public void draw(Canvas canvas) {\n        int x = getBounds().left + 20;\n        int y = getBounds().top;\n\n        //画背景\n        canvas.drawPath(path, paintShadow);\n\n        //画一半虚线\n        canvas.drawLine(x+getBounds().bottom*0.8f, getBounds().bottom/2, (getBounds().right - x - getBounds().bottom * 0.8f)/2-bitmap.getWidth(), getBounds().bottom/2, paintLine);\n\n        //画引号\n        canvas.drawBitmap(bitmap,getBounds().right/2-bitmap.getWidth(),y,new Paint());\n\n        //画另一半虚线\n        canvas.drawLine((getBounds().right - x - getBounds().bottom * 0.8f)/2+bitmap.getWidth()*3/2, getBounds().bottom/2,  getBounds().right - x - getBounds().bottom * 0.8f, getBounds().bottom/2, paintLine);\n    }\n\n    @Override\n    public void setAlpha(int i) {\n\n    }\n\n    @Override\n    public void setColorFilter(ColorFilter colorFilter) {\n    }\n\n    @Override\n    public int getOpacity() {\n        return PixelFormat.TRANSLUCENT;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/vivian/shadedemo/drawable/CircleShadowDrawable.java",
    "content": "package com.vivian.shadedemo.drawable;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\nimport android.graphics.Canvas;\nimport android.graphics.Color;\nimport android.graphics.ColorFilter;\nimport android.graphics.Paint;\nimport android.graphics.drawable.Drawable;\n\nimport com.vivian.shadedemo.R;\n\n/**\n * *          _       _\n * *   __   _(_)_   _(_) __ _ _ __\n * *   \\ \\ / / \\ \\ / / |/ _` | '_ \\\n * *    \\ V /| |\\ V /| | (_| | | | |\n * *     \\_/ |_| \\_/ |_|\\__,_|_| |_|\n * <p>\n * Created by vivian on 2016/11/30.\n */\n\npublic class CircleShadowDrawable extends Drawable {\n    private Bitmap bitmap = null;\n    Context mContext;\n    // 建立Paint 物件\n    Paint paint3 = new Paint();\n\n    public CircleShadowDrawable(Context context){\n        mContext=context;\n//        bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.top_selector);\n    }\n    @Override\n    public void draw(Canvas canvas) {\n        paint3.setColor(Color.RED);\n        // 设定阴影(柔边, X 轴位移, Y 轴位移, 阴影颜色)\n        paint3.setShadowLayer(300, 0, 0, Color.RED);\n        // 实心矩形& 其阴影\n        canvas.drawCircle(400, 500, 300, paint3);\n    }\n\n    @Override\n    public void setAlpha(int i) {\n\n    }\n\n    @Override\n    public void setColorFilter(ColorFilter colorFilter) {\n\n    }\n\n    @Override\n    public int getOpacity() {\n        return 0;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/vivian/shadedemo/drawable/TopDrawable.java",
    "content": "package com.vivian.shadedemo.drawable;\n\nimport android.graphics.Canvas;\nimport android.graphics.Color;\nimport android.graphics.ColorFilter;\nimport android.graphics.Paint;\nimport android.graphics.Path;\nimport android.graphics.PixelFormat;\nimport android.graphics.Rect;\nimport android.graphics.RectF;\nimport android.graphics.drawable.Drawable;\n\n/**\n * *          _       _\n * *   __   _(_)_   _(_) __ _ _ __\n * *   \\ \\ / / \\ \\ / / |/ _` | '_ \\\n * *    \\ V /| |\\ V /| | (_| | | | |\n * *     \\_/ |_| \\_/ |_|\\__,_|_| |_|\n * <p>\n * Created by vivian on 2016/11/30.\n */\n\npublic class TopDrawable extends Drawable {\n    Paint paint;\n    Paint paintShadow;\n    Path path;\n    RectF rectF;\n    int x = 20;\n    int y = 20;\n    int color = 0x2601a3a1;\n\n    public TopDrawable() {\n        paint = new Paint();\n        paint.setColor(Color.WHITE);\n        paint.setAntiAlias(true);\n\n        paintShadow = new Paint();\n        paintShadow.setColor(Color.WHITE);\n        paintShadow.setAntiAlias(true);\n\n        path = new Path();\n    }\n\n    public void setColor(int color) {\n        this.color = color;\n        // 设定阴影(柔边, X 轴位移, Y 轴位移, 阴影颜色)\n        paintShadow.setShadowLayer(21, 0, 10, color & 0x26ffffff);//0x2600A4A0\n        invalidateSelf();\n    }\n\n    @Override\n    public void draw(Canvas canvas) {\n        canvas.drawPath(path, paintShadow);\n        canvas.drawRect(x, getBounds().height(), getBounds().width() - x, getBounds().height() + 21, paint);\n    }\n\n    @Override\n    public void onBoundsChange(Rect bounds) {\n        path.reset();\n        rectF = new RectF(x, y, bounds.width() - x, bounds.height());\n        path.addRoundRect(rectF, new float[]{6, 6, 6, 6, 0, 0, 0, 0}, Path.Direction.CW);\n    }\n\n    @Override\n    public void setAlpha(int i) {\n\n    }\n\n    @Override\n    public void setColorFilter(ColorFilter colorFilter) {\n    }\n\n    @Override\n    public int getOpacity() {\n        return PixelFormat.TRANSLUCENT;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/vivian/shadedemo/entity/Card.java",
    "content": "package com.vivian.shadedemo.entity;\n\n/**\n * *          _       _\n * *   __   _(_)_   _(_) __ _ _ __\n * *   \\ \\ / / \\ \\ / / |/ _` | '_ \\\n * *    \\ V /| |\\ V /| | (_| | | | |\n * *     \\_/ |_| \\_/ |_|\\__,_|_| |_|\n * <p>\n * Created by vivian on 2016/12/1.\n */\n\npublic class Card {\n    private String content;\n    private String comment = \"\";\n\n    public String getComment() {\n        return comment;\n    }\n\n    public void setComment(String comment) {\n        this.comment = comment;\n    }\n\n    public String getContent() {\n        return content;\n    }\n\n    public void setContent(String content) {\n        this.content = content;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/vivian/shadedemo/util/CardThemeUtil.java",
    "content": "package com.vivian.shadedemo.util;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.graphics.Canvas;\nimport android.graphics.Color;\nimport android.graphics.ColorMatrix;\nimport android.graphics.ColorMatrixColorFilter;\nimport android.graphics.drawable.BitmapDrawable;\nimport android.graphics.drawable.Drawable;\nimport android.support.v4.content.ContextCompat;\nimport android.util.Log;\n\n/**\n * *          _       _\n * *   __   _(_)_   _(_) __ _ _ __\n * *   \\ \\ / / \\ \\ / / |/ _` | '_ \\\n * *    \\ V /| |\\ V /| | (_| | | | |\n * *     \\_/ |_| \\_/ |_|\\__,_|_| |_|\n * <p>\n * Created by vivian on 2016/12/1.\n */\n\npublic class CardThemeUtil {\n\n    public Drawable colorMatrixFilter(Context context,int res, int color) {\n        int r = Color.red(color);\n        int g = Color.green(color);\n        int b = Color.blue(color);\n        //定义RGBA的矩阵\n        float[] src = new float[]{\n                0, 0, 0, 0, r,\n                0, 0, 0, 0, g,\n                0, 0, 0, 0, b,\n                0, 0, 0, 1, 0};\n        ColorMatrix matrix = new ColorMatrix(src);\n        ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);\n        Drawable drawable = ContextCompat.getDrawable(context,res);\n        drawable.setColorFilter(filter);\n        return drawable;\n    }\n\n\n    /**\n     * Usage:很耗性能\n     * topLayout.setBackground(colorFilter(R.drawable.top));\n     * centerLayout.setBackground(colorFilter(R.drawable.center));\n     * bottomLayout.setBackground(colorFilter(R.drawable.bottom));\n     *\n     * @param res\n     * @return\n     */\n    public Drawable colorFilter(Context context,int res) {\n        Drawable drawable = context.getDrawable(res);\n        Bitmap bitmap = drawableToBitmap(drawable);\n\n        int width = bitmap.getWidth();\n        int height = bitmap.getHeight();\n        int[] pixels = new int[width * height];\n        for (int y = 0; y < height; y++) {\n            for (int x = 0; x < width; x++) {\n                int color = bitmap.getPixel(x, y);\n                if (color != 0xffffffff) {\n                    Log.e(\"color:\", \"alpha:\" + Color.alpha(color));\n                    Log.e(\"color:\", \"red:\" + Color.red(color));\n                    Log.e(\"color:\", \"green:\" + Color.green(color));\n                    Log.e(\"color:\", \"blue:\" + Color.blue(color) + \"\\n\");\n                    int alpha = Color.alpha(color);\n                    int color2 = Color.argb(alpha, 249, 39, 54);\n                    pixels[y * width + x] = color2;\n                } else {\n                    pixels[y * width + x] = 0xffffffff;\n                }\n            }\n        }\n\n        bitmap = Bitmap.createBitmap(pixels, width, height, Bitmap.Config.ARGB_4444);\n        Drawable d = new BitmapDrawable(context.getResources(), bitmap);\n        return d;\n    }\n\n    public static Bitmap drawableToBitmap(Drawable drawable) {\n        if (drawable instanceof BitmapDrawable) {\n            return ((BitmapDrawable) drawable).getBitmap();\n        }\n\n        Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);\n        Canvas canvas = new Canvas(bitmap);\n        drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());\n        drawable.draw(canvas);\n\n        return bitmap;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/vivian/shadedemo/util/ScreenShotUtil.java",
    "content": "package com.vivian.shadedemo.util;\n\nimport android.content.ContentResolver;\nimport android.content.ContentValues;\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.graphics.Canvas;\nimport android.net.Uri;\nimport android.os.Environment;\nimport android.provider.MediaStore;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport java.io.File;\nimport java.io.FileNotFoundException;\nimport java.io.IOException;\nimport java.io.OutputStream;\n\n/**\n * *          _       _\n * *   __   _(_)_   _(_) __ _ _ __\n * *   \\ \\ / / \\ \\ / / |/ _` | '_ \\\n * *    \\ V /| |\\ V /| | (_| | | | |\n * *     \\_/ |_| \\_/ |_|\\__,_|_| |_|\n * <p>\n * Created by vivian on 2016/12/1.\n */\n\npublic class ScreenShotUtil {\n    /**\n     * 截图\n     *\n     * @param view\n     * @return\n     */\n    public static Bitmap convertViewToBitmap(View view) {\n        view.setDrawingCacheEnabled(true);\n        view.buildDrawingCache();  //启用DrawingCache并创建位图\n        Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache()); //创建一个DrawingCache的拷贝，因为DrawingCache得到的位图在禁用后会被回收\n        view.setDrawingCacheEnabled(false);  //禁用DrawingCahce否则会影响性能\n        view.destroyDrawingCache();\n        return bitmap;\n    }\n    /**\n     * 截取长图\n     *\n     * @param view\n     * @return\n     */\n    public static Bitmap getScrollViewBitmap(ViewGroup view) {\n        int h = 0;\n        for (int i = 0; i < view.getChildCount(); i++) {\n            h += view.getChildAt(i).getHeight();\n        }\n        Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), h, Bitmap.Config.ARGB_8888);\n        final Canvas canvas = new Canvas(bitmap);\n        view.draw(canvas);\n        return bitmap;\n    }\n\n    /**\n     * 保存到本地图库\n     *\n     * @param context\n     * @param bitmap\n     */\n    public static void saveImageToGallery(Context context, Bitmap bitmap) {\n        // Create screenshot directory if it doesn't exist\n        String dirName = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM) + File.separator + \"TMT\";\n        File fileDir = new File(dirName);\n        if (!fileDir.exists()) {\n            fileDir.mkdir();\n        }\n        long mImageTime = System.currentTimeMillis();//取当前系统时间\n        // media provider uses seconds for DATE_MODIFIED and DATE_ADDED, but milliseconds\n        // for DATE_TAKEN\n        long dateSeconds = mImageTime / 1000;\n        String mImageFileName = dateSeconds + \".png\"; //以保存时间命名\n        String mImageFilePath = dirName + File.separator + mImageFileName; //注意这里的mImageFilePath是： 目录名称+文件名\n        int mImageWidth = bitmap.getWidth();\n        int mImageHeight = bitmap.getHeight();\n\n        // Save the screenshot to the MediaStore\n        ContentValues values = new ContentValues();\n        ContentResolver resolver = context.getContentResolver();\n        values.put(MediaStore.Images.ImageColumns.DATA, mImageFilePath);\n        values.put(MediaStore.Images.ImageColumns.TITLE, mImageFileName);\n        values.put(MediaStore.Images.ImageColumns.DISPLAY_NAME, mImageFileName);\n        values.put(MediaStore.Images.ImageColumns.DATE_TAKEN, mImageTime);\n        values.put(MediaStore.Images.ImageColumns.DATE_ADDED, dateSeconds);\n        values.put(MediaStore.Images.ImageColumns.DATE_MODIFIED, dateSeconds);\n        values.put(MediaStore.Images.ImageColumns.MIME_TYPE, \"image/png\");\n        values.put(MediaStore.Images.ImageColumns.WIDTH, mImageWidth);\n        values.put(MediaStore.Images.ImageColumns.HEIGHT, mImageHeight);\n        Uri uri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);\n\n        try {\n            OutputStream out = resolver.openOutputStream(uri);\n            bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);\n            out.flush();\n            out.close();\n        } catch (FileNotFoundException e) {\n            e.printStackTrace();\n        } catch (IOException e) {\n            e.printStackTrace();\n        }\n        // update file size in the database\n        values.clear();\n        values.put(MediaStore.Images.ImageColumns.SIZE, new File(mImageFilePath).length());\n        resolver.update(uri, values, null, null);\n    }\n\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/vivian/shadedemo/util/ScreenSizeUtil.java",
    "content": "package com.vivian.shadedemo.util;\n\nimport android.app.Activity;\nimport android.content.Context;\nimport android.util.DisplayMetrics;\nimport android.util.TypedValue;\n\npublic class ScreenSizeUtil {\n\n\tprivate static DisplayMetrics metrics;\n\n\t/**\n\t * 根据绝对尺寸得到相对尺寸，在不同的分辨率设备上有一致的显示效果, dip->pix\n\t * \n\t * @param context\n\t * @param givenAbsSize\n\t *            绝对尺寸\n\t * @return\n\t */\n\tpublic static int getSizeByGivenAbsSize(Context context, int givenAbsSize) {\n\t\treturn (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, givenAbsSize, context.getResources().getDisplayMetrics());\n\t}\n\n\tprivate static DisplayMetrics getDisplayMetrics(Context context) {\n\t\tif (metrics != null) {\n\t\t\treturn metrics;\n\t\t}\n\t\tmetrics = new DisplayMetrics();\n\t\t((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(metrics);\n\t\treturn metrics;\n\t}\n\n\tpublic static int getScreenWidth(Context context) {\n\t\treturn getDisplayMetrics(context).widthPixels; // 屏幕宽度（像素）\n\t}\n\n\tpublic static int getScreenHeight(Context context) {\n\t\treturn getDisplayMetrics(context).heightPixels;// 屏幕高度（像素）\n\t}\n\n\tpublic static float getScreenDensity(Context context) {\n\t\treturn getDisplayMetrics(context).density; // 屏幕密度（0.75 / 1.0 / 1.5）\n\t}\n\n\tpublic static int getScreenDensityDpi(Context context) {\n\t\treturn getDisplayMetrics(context).densityDpi;// 屏幕密度DPI（120 / 160 / 240）\n\t}\n\n\tpublic static int Dp2Px(Context context, float dp) {\n\t\tfinal float scale = context.getResources().getDisplayMetrics().density;\n\t\treturn (int) (dp * scale + 0.5f);\n\t}\n\n\tpublic static int Px2Dp(Context context, float px) {\n\t\tfinal float scale = context.getResources().getDisplayMetrics().density;\n\t\treturn (int) (px / scale + 0.5f);\n\t}\n\n\t/**\n\t * 将px值转换为sp值，保证文字大小不变\n\t * \n\t * @param pxValue\n\t * @return\n\t */\n\tpublic static int px2sp(float pxValue, Context context) {\n\t\treturn (int) (pxValue / context.getResources().getDisplayMetrics().scaledDensity + 0.5f);\n\t}\n\n\t/**\n\t * 将sp值转换为px值，保证文字大小不变\n\t * \n\t * @param spValue\n\t * @return\n\t */\n\tpublic static int sp2px(float spValue, Context context) {\n\t\treturn (int) (spValue * context.getResources().getDisplayMetrics().scaledDensity + 0.5f);\n\t}\n}\n"
  },
  {
    "path": "app/src/main/java/com/vivian/shadedemo/view/ShadowView.java",
    "content": "package com.vivian.shadedemo.view;\n\nimport android.content.Context;\nimport android.graphics.Canvas;\nimport android.graphics.Color;\nimport android.graphics.Paint;\nimport android.view.View;\n\n/**\n * *          _       _\n * *   __   _(_)_   _(_) __ _ _ __\n * *   \\ \\ / / \\ \\ / / |/ _` | '_ \\\n * *    \\ V /| |\\ V /| | (_| | | | |\n * *     \\_/ |_| \\_/ |_|\\__,_|_| |_|\n * <p>\n * Created by vivian on 2016/11/30.\n */\n\npublic class ShadowView extends View {\n//    private Bitmap bitmap = null;\n\n    public ShadowView(Context context) {\n        super(context);\n//        bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.top);\n        setLayerType(View.LAYER_TYPE_SOFTWARE, null);//没有这句不显示\n    }\n\n    @Override\n    protected void onDraw(Canvas canvas) {\n        super.onDraw(canvas);\n        // 建立Paint 物件\n        Paint paint3 = new Paint();\n        paint3.setColor(Color.WHITE);\n        paint3.setAntiAlias(true);\n        // 设定阴影(柔边, X 轴位移, Y 轴位移, 阴影颜色)\n        paint3.setShadowLayer(21, 0, 10, 0x2600A4A0);\n        // 实心矩形& 其阴影\n        canvas.drawCircle(400, 500, 96, paint3);\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/vivian/shadedemo/view/TopShadowView.java",
    "content": "package com.vivian.shadedemo.view;\n\nimport android.content.Context;\nimport android.graphics.Canvas;\nimport android.graphics.Color;\nimport android.graphics.Paint;\nimport android.graphics.Path;\nimport android.graphics.RectF;\nimport android.util.AttributeSet;\nimport android.view.View;\n\n/**\n * *          _       _\n * *   __   _(_)_   _(_) __ _ _ __\n * *   \\ \\ / / \\ \\ / / |/ _` | '_ \\\n * *    \\ V /| |\\ V /| | (_| | | | |\n * *     \\_/ |_| \\_/ |_|\\__,_|_| |_|\n * <p>\n * Created by vivian on 2016/11/30.\n */\n\npublic class TopShadowView extends View {\n    int width = 400;\n    int height = 400;\n\n    int x=50;\n    int y=50;\n\n    public TopShadowView(Context context) {\n        super(context);\n        init(context);\n    }\n\n    public TopShadowView(Context context, AttributeSet attrs) {\n        super(context, attrs);\n        init(context);\n    }\n\n    public TopShadowView(Context context, AttributeSet attrs, int defStyleAttr) {\n        super(context, attrs, defStyleAttr);\n        init(context);\n    }\n\n    public TopShadowView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {\n        super(context, attrs, defStyleAttr, defStyleRes);\n        init(context);\n    }\n\n    public void init(Context context) {\n        setLayerType(View.LAYER_TYPE_SOFTWARE, null);//没有这句不显示\n    }\n\n    @Override\n    protected void onDraw(Canvas canvas) {\n        super.onDraw(canvas);\n        width=getWidth()-x*2;\n        height=getHeight()-y*2;\n        Paint paint = new Paint();\n        paint.setColor(Color.WHITE);\n        paint.setAntiAlias(true);\n        // 建立Paint 物件\n        Paint paint3 = new Paint();\n        paint3.setColor(Color.WHITE);\n        paint3.setAntiAlias(true);\n        // 设定阴影(柔边, X 轴位移, Y 轴位移, 阴影颜色)\n        paint3.setShadowLayer(21, 0, 10, 0x2600A4A0);\n        // 实心矩形& 其阴影\n        RectF rectF = new RectF(100, 100, width, height);\n\n        Path path=new Path();\n        path.addRoundRect(x,y,width,height,new float[]{10,10,10,10,0,0,0,0}, Path.Direction.CW);\n        canvas.drawPath(path, paint3);\n\n        canvas.drawRect(x,height,width,height+21,paint);\n\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/com/vivian/shadedemo/widget/CardView.java",
    "content": "package com.vivian.shadedemo.widget;\n\nimport android.content.Context;\nimport android.graphics.BitmapFactory;\nimport android.graphics.drawable.GradientDrawable;\nimport android.util.AttributeSet;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.widget.EditText;\nimport android.widget.ImageView;\nimport android.widget.LinearLayout;\nimport android.widget.RelativeLayout;\nimport android.widget.TextView;\n\nimport com.vivian.shadedemo.R;\nimport com.vivian.shadedemo.drawable.BottomDrawable;\nimport com.vivian.shadedemo.drawable.CenterDrawable;\nimport com.vivian.shadedemo.drawable.TopDrawable;\nimport com.vivian.shadedemo.util.ScreenSizeUtil;\n\n/**\n * *          _       _\n * *   __   _(_)_   _(_) __ _ _ __\n * *   \\ \\ / / \\ \\ / / |/ _` | '_ \\\n * *    \\ V /| |\\ V /| | (_| | | | |\n * *     \\_/ |_| \\_/ |_|\\__,_|_| |_|\n * <p>\n * Created by vivian on 2016/12/1.\n */\n\npublic class CardView extends LinearLayout {\n    RelativeLayout topLayout;\n    ImageView centerLayout;\n    TextView content;\n    EditText comment;\n\n    TopDrawable topDrawable;\n    CenterDrawable centerDrawable;\n    BottomDrawable bottomDrawable;\n    GradientDrawable myGrad;\n\n    public CardView(Context context) {\n        super(context);\n        init(context);\n    }\n\n    public CardView(Context context, AttributeSet attrs) {\n        super(context, attrs);\n        init(context);\n    }\n\n    public CardView(Context context, AttributeSet attrs, int defStyleAttr) {\n        super(context, attrs, defStyleAttr);\n        init(context);\n    }\n\n    public CardView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {\n        super(context, attrs, defStyleAttr, defStyleRes);\n        init(context);\n    }\n\n    public void init(final Context context) {\n        LinearLayout layout = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.card, null);\n        layout.setLayoutParams(new LinearLayout.LayoutParams(ScreenSizeUtil.Dp2Px(getContext(), 285), LayoutParams.WRAP_CONTENT));\n        layout.setLayerType(View.LAYER_TYPE_SOFTWARE, null);//没有这句不显示\n\n        topLayout = (RelativeLayout) layout.findViewById(R.id.top);\n        centerLayout = (ImageView) layout.findViewById(R.id.center);\n        content = (TextView) layout.findViewById(R.id.content);\n        comment = (EditText) layout.findViewById(R.id.comment);\n        myGrad = (GradientDrawable) content.getBackground();\n\n        topDrawable = new TopDrawable();\n        topLayout.setBackground(topDrawable);\n\n        centerDrawable = new CenterDrawable(BitmapFactory.decodeResource(getResources(), R.drawable.quote));\n        centerLayout.setBackground(centerDrawable);\n\n        bottomDrawable = new BottomDrawable();\n        comment.setBackground(bottomDrawable);\n\n        addView(layout);\n    }\n\n    public void changeTheme(final int color) {\n        //文字背景颜色\n        myGrad.setColor(color);\n        //顶部阴影颜色\n        topDrawable.setColor(color);\n//        中部阴影颜色\n        centerDrawable.setColor(color);\n//        //底部阴影颜色\n        bottomDrawable.setColor(color);\n    }\n\n    @Override\n    public boolean hasOverlappingRendering() {\n        return false;\n    }\n}\n"
  },
  {
    "path": "app/src/main/res/drawable/circle.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <item>\n        <shape>\n            <solid android:color=\"#3EA2A0\"/>\n            <corners android:radius=\"200dp\"/>\n            <padding android:bottom=\"15dp\"/>\n            <padding android:top=\"15dp\"/>\n            <padding android:left=\"15dp\"/>\n            <padding android:right=\"15dp\"/>\n        </shape>\n    </item>\n</selector>"
  },
  {
    "path": "app/src/main/res/drawable/circle_retangle.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <corners android:radius=\"3px\"/>\n    <solid android:color=\"#3EA2A0\"/>\n</shape>\n"
  },
  {
    "path": "app/src/main/res/layout/activity_main_recyclerview.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    <android.support.v7.widget.RecyclerView\n        android:id=\"@+id/recyclerview\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"/>\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/card.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n              android:layout_width=\"285dp\"\n              android:layout_height=\"wrap_content\"\n              android:gravity=\"center_horizontal\"\n              android:orientation=\"vertical\"\n              android:paddingTop=\"20dp\">\n\n    <RelativeLayout\n        android:id=\"@+id/top\"\n        android:layout_width=\"285dp\"\n        android:layout_height=\"286dp\"\n        android:layout_gravity=\"center_horizontal\"\n        android:layout_marginLeft=\"50dp\"\n        android:layout_marginRight=\"50dp\">\n\n        <TextView\n            android:id=\"@+id/content\"\n            android:layout_width=\"271dp\"\n            android:layout_height=\"246dp\"\n            android:layout_marginLeft=\"17dp\"\n            android:layout_marginRight=\"17dp\"\n            android:layout_marginTop=\"17dp\"\n            android:background=\"@drawable/circle_retangle\"\n            android:gravity=\"center\"\n            android:padding=\"20dp\"\n            android:text=\"B站发展至今，已经不只是一个亚文化兴趣社群，已已经成为了一个为有创造力的年轻人提供创作环境和连接已经成为了一个为有创造力的年轻人提供创作环境和连接经成为了一个为有创造力的年轻人提供创作环境和连接功能的服务平台。如果想要了解现在的年轻人，去 B 站补番刷梗，可能会是最快的办法。如果想要成为一个有创造力的公司。\"\n            android:textColor=\"@android:color/white\"/>\n\n    </RelativeLayout>\n\n    <ImageView\n        android:id=\"@+id/center\"\n        android:layout_width=\"285dp\"\n        android:layout_marginLeft=\"50dp\"\n        android:layout_marginRight=\"50dp\"\n        android:layout_height=\"10dp\"\n        android:scaleType=\"matrix\"\n        android:layout_gravity=\"center_horizontal\"></ImageView>\n\n    <EditText\n        android:id=\"@+id/comment\"\n        android:layout_width=\"285dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center_horizontal\"\n        android:layout_marginBottom=\"20dp\"\n        android:layout_marginLeft=\"50dp\"\n        android:layout_marginRight=\"50dp\"\n        android:gravity=\"left\"\n        android:hint=\"请输入评论\"\n        android:maxLines=\"5\"\n        android:minLines=\"2\"\n        android:padding=\"20dp\"\n        android:textSize=\"12sp\"/>\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/icons.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:id=\"@+id/activity_main\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:paddingBottom=\"@dimen/activity_vertical_margin\"\n    android:paddingLeft=\"@dimen/activity_horizontal_margin\"\n    android:paddingRight=\"@dimen/activity_horizontal_margin\"\n    android:paddingTop=\"@dimen/activity_vertical_margin\"\n    tools:context=\"com.vivian.shadedemo.MainActivity\">\n\n    <ImageView\n        android:id=\"@+id/like\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:src=\"@drawable/like\"\n        android:background=\"@drawable/circle\"\n        android:tint=\"@color/colorAccent\"\n        android:backgroundTint=\"@android:color/white\"\n        android:tintMode=\"src_in\"\n        android:elevation=\"5dp\"\n        android:layout_alignParentTop=\"true\"\n        android:layout_toRightOf=\"@+id/share\"\n        android:layout_toEndOf=\"@+id/share\"\n        android:layout_marginLeft=\"53dp\"\n        android:layout_marginStart=\"53dp\"/>\n\n    <ImageView\n        android:id=\"@+id/share\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:src=\"@drawable/share\"\n        android:backgroundTint=\"@color/colorAccent\"\n        android:background=\"@drawable/circle\"\n        android:tint=\"@color/colorAccent\"\n        android:elevation=\"5dp\"\n        android:tintMode=\"add\"\n        android:layout_below=\"@+id/share2\"\n        android:layout_alignParentLeft=\"true\"\n        android:layout_alignParentStart=\"true\"\n        android:layout_marginTop=\"27dp\"/>\n\n    <ImageView\n        android:id=\"@+id/share2\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:src=\"@drawable/share_shade\"\n        android:tint=\"@color/colorAccent\"\n        android:tintMode=\"multiply\"\n        android:layout_alignParentTop=\"true\"\n        android:layout_alignParentLeft=\"true\"\n        android:layout_alignParentStart=\"true\"/>\n\n    <ImageView\n        android:id=\"@+id/share3\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:src=\"@drawable/share\"\n        android:scaleType=\"center\"\n        android:padding=\"15dp\"\n        android:background=\"@drawable/oval\"\n        android:backgroundTint=\"@color/colorAccent\"\n        android:tint=\"@color/colorAccent\"\n        android:tintMode=\"add\"\n        android:layout_alignTop=\"@+id/share\"\n        android:layout_alignLeft=\"@+id/like\"\n        android:layout_alignStart=\"@+id/like\"/>\n\n    <!--<ScrollView-->\n    <!--android:layout_width=\"match_parent\"-->\n    <!--android:layout_height=\"wrap_content\">-->\n\n    <!--<LinearLayout-->\n    <!--android:layout_width=\"wrap_content\"-->\n    <!--android:layout_height=\"wrap_content\"-->\n    <!--android:orientation=\"horizontal\">-->\n\n    <!--<ImageView-->\n    <!--android:id=\"@+id/imageView\"-->\n    <!--android:layout_width=\"100dp\"-->\n    <!--android:layout_height=\"200dp\"-->\n    <!--android:layout_alignParentLeft=\"true\"-->\n    <!--android:layout_alignParentStart=\"true\"-->\n    <!--android:layout_alignParentTop=\"true\"-->\n    <!--android:src=\"@drawable/img_8658\"-->\n    <!--android:tint=\"@color/colorAccent\"-->\n    <!--android:tintMode=\"screen\"/>-->\n\n    <!--<ImageView-->\n    <!--android:id=\"@+id/imageView\"-->\n    <!--android:layout_width=\"100dp\"-->\n    <!--android:layout_height=\"200dp\"-->\n    <!--android:layout_alignParentLeft=\"true\"-->\n    <!--android:layout_alignParentStart=\"true\"-->\n    <!--android:layout_alignParentTop=\"true\"-->\n    <!--android:src=\"@drawable/img_8658\"-->\n    <!--android:tint=\"@color/colorAccent\"-->\n    <!--android:tintMode=\"add\"/>-->\n\n    <!--<ImageView-->\n    <!--android:id=\"@+id/imageView\"-->\n    <!--android:layout_width=\"100dp\"-->\n    <!--android:layout_height=\"200dp\"-->\n    <!--android:layout_alignParentLeft=\"true\"-->\n    <!--android:layout_alignParentStart=\"true\"-->\n    <!--android:layout_alignParentTop=\"true\"-->\n    <!--android:src=\"@drawable/img_8658\"-->\n    <!--android:tint=\"@color/colorAccent\"-->\n    <!--android:tintMode=\"multiply\"/>-->\n    <!--<ImageView-->\n    <!--android:id=\"@+id/imageView\"-->\n    <!--android:layout_width=\"100dp\"-->\n    <!--android:layout_height=\"200dp\"-->\n    <!--android:layout_alignParentLeft=\"true\"-->\n    <!--android:layout_alignParentStart=\"true\"-->\n    <!--android:layout_alignParentTop=\"true\"-->\n    <!--android:src=\"@drawable/img_8658\"-->\n    <!--android:tint=\"@color/colorAccent\"-->\n    <!--android:tintMode=\"src_atop\"/>-->\n    <!--</LinearLayout>-->\n    <!--</ScrollView>-->\n\n    <!--<ImageView-->\n    <!--android:layout_width=\"wrap_content\"-->\n    <!--android:layout_height=\"wrap_content\"-->\n    <!--android:layout_alignParentLeft=\"true\"-->\n    <!--android:layout_alignParentStart=\"true\"-->\n    <!--android:layout_centerVertical=\"true\"-->\n    <!--android:layout_marginLeft=\"16dp\"-->\n    <!--android:layout_marginStart=\"16dp\"-->\n    <!--android:src=\"@mipmap/ic_launcher\"-->\n    <!--android:tint=\"@color/colorPrimary\"-->\n    <!--android:visibility=\"gone\"-->\n    <!--/>-->\n\n</RelativeLayout>\n"
  },
  {
    "path": "app/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"colorPrimary\">#3F51B5</color>\n    <color name=\"colorPrimaryDark\">#303F9F</color>\n    <color name=\"colorAccent\">#FF4081</color>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"activity_horizontal_margin\">16dp</dimen>\n    <dimen name=\"activity_vertical_margin\">16dp</dimen>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">ShadeDemo</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</resources>\n"
  },
  {
    "path": "app/src/main/res/values-w820dp/dimens.xml",
    "content": "<resources>\n    <!-- Example customization of dimensions originally defined in res/values/dimens.xml\n         (such as screen margins) for screens with more than 820dp of available right. This\n         would include 7\" and 10\" devices in landscape (~960dp and ~1280dp respectively). -->\n    <dimen name=\"activity_horizontal_margin\">64dp</dimen>\n</resources>\n"
  },
  {
    "path": "app/src/test/java/com/vivian/shadedemo/ExampleUnitTest.java",
    "content": "package com.vivian.shadedemo;\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() throws Exception {\n        assertEquals(4, 2 + 2);\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    repositories {\n        jcenter()\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:2.2.1'\n\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        jcenter()\n    }\n}\n\ntask clean(type: Delete) {\n    delete rootProject.buildDir\n}\n"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "content": "#Mon Dec 28 10:00:20 PST 2015\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-2.14.1-all.zip\n"
  },
  {
    "path": "gradle.properties",
    "content": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\norg.gradle.jvmargs=-Xmx1536m\n\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true\n"
  },
  {
    "path": "gradlew",
    "content": "#!/usr/bin/env bash\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\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\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\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\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\nesac\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\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\" ] ; 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# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules\nfunction splitJvmOpts() {\n    JVM_OPTS=(\"$@\")\n}\neval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS\nJVM_OPTS[${#JVM_OPTS[*]}]=\"-Dorg.gradle.appname=$APP_BASE_NAME\"\n\nexec \"$JAVACMD\" \"${JVM_OPTS[@]}\" -classpath \"$CLASSPATH\" org.gradle.wrapper.GradleWrapperMain \"$@\"\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\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\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\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 Windowz variants\n\nif not \"%OS%\" == \"Windows_NT\" goto win9xME_args\nif \"%@eval[2+2]\" == \"4\" goto 4NT_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=%*\ngoto execute\n\n:4NT_args\n@rem Get arguments from the 4NT Shell from JP Software\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": "settings.gradle",
    "content": "include ':app'\n"
  }
]