Browse Source

Initial commit.

Arpan Sarkar 3 years ago
commit
68b0ea136e
100 changed files with 1516 additions and 0 deletions
  1. 14 0
      .gitignore
  2. 1 0
      .idea/.name
  3. 122 0
      .idea/codeStyles/Project.xml
  4. 5 0
      .idea/codeStyles/codeStyleConfig.xml
  5. 22 0
      .idea/gradle.xml
  6. 25 0
      .idea/jarRepositories.xml
  7. 4 0
      .idea/markdown-navigator
  8. 29 0
      .idea/markdown-navigator-enh.xml
  9. 58 0
      .idea/markdown-navigator.xml
  10. 14 0
      .idea/misc.xml
  11. 6 0
      .idea/vcs.xml
  12. 7 0
      README.md
  13. 1 0
      app/.gitignore
  14. 40 0
      app/build.gradle
  15. 21 0
      app/proguard-rules.pro
  16. 25 0
      app/src/main/AndroidManifest.xml
  17. BIN
      app/src/main/assets/font/Poppins-Regular.ttf
  18. BIN
      app/src/main/assets/font/Roboto-Bold.ttf
  19. BIN
      app/src/main/assets/font/Roboto-Light.ttf
  20. BIN
      app/src/main/assets/font/Roboto-Regular.ttf
  21. 154 0
      app/src/main/assets/index.html
  22. BIN
      app/src/main/assets/rca.db
  23. 33 0
      app/src/main/java/com/chinaappsremover/AppController.java
  24. 84 0
      app/src/main/java/com/chinaappsremover/adapter/ItemlistAdapter.java
  25. 64 0
      app/src/main/java/com/chinaappsremover/dbhandler/DataBaseHelper.java
  26. 55 0
      app/src/main/java/com/chinaappsremover/dbhandler/DbUtils.java
  27. 5 0
      app/src/main/java/com/chinaappsremover/listener/OnItemClickListener.java
  28. 12 0
      app/src/main/java/com/chinaappsremover/receiver/AppUninstalledreceiver.java
  29. 327 0
      app/src/main/java/com/chinaappsremover/ui/MainActivity.java
  30. 33 0
      app/src/main/java/com/chinaappsremover/ui/Splash.java
  31. 15 0
      app/src/main/java/com/chinaappsremover/utils/Preference.java
  32. 41 0
      app/src/main/java/com/chinaappsremover/utils/uihelper/CustomFontButton.java
  33. 40 0
      app/src/main/java/com/chinaappsremover/utils/uihelper/CustomFontTextView.java
  34. 12 0
      app/src/main/java/com/chinaappsremover/wrapper/AppInfo.java
  35. 6 0
      app/src/main/res/drawable-anydpi-v21/check_mark.xml
  36. 4 0
      app/src/main/res/drawable-anydpi-v21/delete_24_px.xml
  37. 8 0
      app/src/main/res/drawable-anydpi-v21/ic_done_icon.xml
  38. 4 0
      app/src/main/res/drawable-anydpi-v21/ic_icon_with_dragon.xml
  39. 8 0
      app/src/main/res/drawable-anydpi-v21/logo.xml
  40. 199 0
      app/src/main/res/drawable-anydpi-v21/one_touch_icon.xml
  41. 7 0
      app/src/main/res/drawable-anydpi-v21/scaner.xml
  42. 4 0
      app/src/main/res/drawable-anydpi-v21/share_24_px.xml
  43. 7 0
      app/src/main/res/drawable-anydpi-v21/vine.xml
  44. BIN
      app/src/main/res/drawable-hdpi/background.png
  45. BIN
      app/src/main/res/drawable-hdpi/check_mark.png
  46. BIN
      app/src/main/res/drawable-hdpi/delete_24_px.png
  47. BIN
      app/src/main/res/drawable-hdpi/design_ic_visibility.png
  48. BIN
      app/src/main/res/drawable-hdpi/design_ic_visibility_off.png
  49. BIN
      app/src/main/res/drawable-hdpi/ic_done_icon.png
  50. BIN
      app/src/main/res/drawable-hdpi/ic_icon_with_dragon.png
  51. BIN
      app/src/main/res/drawable-hdpi/logo.png
  52. BIN
      app/src/main/res/drawable-hdpi/one_touch_icon.png
  53. BIN
      app/src/main/res/drawable-hdpi/scaner.png
  54. BIN
      app/src/main/res/drawable-hdpi/share_24_px.png
  55. BIN
      app/src/main/res/drawable-hdpi/splash.png
  56. BIN
      app/src/main/res/drawable-hdpi/vine.png
  57. BIN
      app/src/main/res/drawable-ldpi/background.png
  58. BIN
      app/src/main/res/drawable-ldpi/check_mark.png
  59. BIN
      app/src/main/res/drawable-ldpi/delete_24_px.png
  60. BIN
      app/src/main/res/drawable-ldpi/ic_done_icon.png
  61. BIN
      app/src/main/res/drawable-ldpi/ic_icon_with_dragon.png
  62. BIN
      app/src/main/res/drawable-ldpi/logo.png
  63. BIN
      app/src/main/res/drawable-ldpi/one_touch_icon.png
  64. BIN
      app/src/main/res/drawable-ldpi/scaner.png
  65. BIN
      app/src/main/res/drawable-ldpi/share_24_px.png
  66. BIN
      app/src/main/res/drawable-ldpi/splash.png
  67. BIN
      app/src/main/res/drawable-ldpi/vine.png
  68. BIN
      app/src/main/res/drawable-xhdpi/background.png
  69. BIN
      app/src/main/res/drawable-xhdpi/check_mark.png
  70. BIN
      app/src/main/res/drawable-xhdpi/delete_24_px.png
  71. BIN
      app/src/main/res/drawable-xhdpi/design_ic_visibility.png
  72. BIN
      app/src/main/res/drawable-xhdpi/design_ic_visibility_off.png
  73. BIN
      app/src/main/res/drawable-xhdpi/ic_done_icon.png
  74. BIN
      app/src/main/res/drawable-xhdpi/ic_icon_with_dragon.png
  75. BIN
      app/src/main/res/drawable-xhdpi/logo.png
  76. BIN
      app/src/main/res/drawable-xhdpi/one_touch_icon.png
  77. BIN
      app/src/main/res/drawable-xhdpi/scaner.png
  78. BIN
      app/src/main/res/drawable-xhdpi/share_24_px.png
  79. BIN
      app/src/main/res/drawable-xhdpi/splash.png
  80. BIN
      app/src/main/res/drawable-xhdpi/vine.png
  81. BIN
      app/src/main/res/drawable-xxhdpi/background.png
  82. BIN
      app/src/main/res/drawable-xxhdpi/check_mark.png
  83. BIN
      app/src/main/res/drawable-xxhdpi/delete_24_px.png
  84. BIN
      app/src/main/res/drawable-xxhdpi/design_ic_visibility.png
  85. BIN
      app/src/main/res/drawable-xxhdpi/design_ic_visibility_off.png
  86. BIN
      app/src/main/res/drawable-xxhdpi/ic_done_icon.png
  87. BIN
      app/src/main/res/drawable-xxhdpi/ic_icon_with_dragon.png
  88. BIN
      app/src/main/res/drawable-xxhdpi/logo.png
  89. BIN
      app/src/main/res/drawable-xxhdpi/one_touch_icon.png
  90. BIN
      app/src/main/res/drawable-xxhdpi/scaner.png
  91. BIN
      app/src/main/res/drawable-xxhdpi/share_24_px.png
  92. BIN
      app/src/main/res/drawable-xxhdpi/splash.png
  93. BIN
      app/src/main/res/drawable-xxhdpi/vine.png
  94. BIN
      app/src/main/res/drawable-xxxhdpi/background.png
  95. BIN
      app/src/main/res/drawable-xxxhdpi/check_mark.png
  96. BIN
      app/src/main/res/drawable-xxxhdpi/delete_24_px.png
  97. BIN
      app/src/main/res/drawable-xxxhdpi/design_ic_visibility.png
  98. BIN
      app/src/main/res/drawable-xxxhdpi/design_ic_visibility_off.png
  99. BIN
      app/src/main/res/drawable-xxxhdpi/ic_done_icon.png
  100. BIN
      app/src/main/res/drawable-xxxhdpi/ic_icon_with_dragon.png

+ 14 - 0
.gitignore

@@ -0,0 +1,14 @@
+*.iml
+.gradle
+/local.properties
+/.idea/caches
+/.idea/libraries
+/.idea/modules.xml
+/.idea/workspace.xml
+/.idea/navEditor.xml
+/.idea/assetWizardSettings.xml
+.DS_Store
+/build
+/captures
+.externalNativeBuild
+.cxx

+ 1 - 0
.idea/.name

@@ -0,0 +1 @@
+Remove China Apps

+ 122 - 0
.idea/codeStyles/Project.xml

@@ -0,0 +1,122 @@
+<component name="ProjectCodeStyleConfiguration">
+  <code_scheme name="Project" version="173">
+    <JetCodeStyleSettings>
+      <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
+    </JetCodeStyleSettings>
+    <codeStyleSettings language="XML">
+      <indentOptions>
+        <option name="CONTINUATION_INDENT_SIZE" value="4" />
+      </indentOptions>
+      <arrangement>
+        <rules>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>xmlns:android</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>^$</XML_NAMESPACE>
+                </AND>
+              </match>
+            </rule>
+          </section>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>xmlns:.*</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>^$</XML_NAMESPACE>
+                </AND>
+              </match>
+              <order>BY_NAME</order>
+            </rule>
+          </section>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>.*:id</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
+                </AND>
+              </match>
+            </rule>
+          </section>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>.*:name</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
+                </AND>
+              </match>
+            </rule>
+          </section>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>name</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>^$</XML_NAMESPACE>
+                </AND>
+              </match>
+            </rule>
+          </section>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>style</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>^$</XML_NAMESPACE>
+                </AND>
+              </match>
+            </rule>
+          </section>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>.*</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>^$</XML_NAMESPACE>
+                </AND>
+              </match>
+              <order>BY_NAME</order>
+            </rule>
+          </section>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>.*</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
+                </AND>
+              </match>
+              <order>ANDROID_ATTRIBUTE_ORDER</order>
+            </rule>
+          </section>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>.*</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>.*</XML_NAMESPACE>
+                </AND>
+              </match>
+              <order>BY_NAME</order>
+            </rule>
+          </section>
+        </rules>
+      </arrangement>
+    </codeStyleSettings>
+    <codeStyleSettings language="kotlin">
+      <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
+    </codeStyleSettings>
+  </code_scheme>
+</component>

+ 5 - 0
.idea/codeStyles/codeStyleConfig.xml

@@ -0,0 +1,5 @@
+<component name="ProjectCodeStyleConfiguration">
+  <state>
+    <option name="USE_PER_PROJECT_SETTINGS" value="true" />
+  </state>
+</component>

+ 22 - 0
.idea/gradle.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="GradleMigrationSettings" migrationVersion="1" />
+  <component name="GradleSettings">
+    <option name="linkedExternalProjectsSettings">
+      <GradleProjectSettings>
+        <option name="testRunner" value="PLATFORM" />
+        <option name="distributionType" value="DEFAULT_WRAPPED" />
+        <option name="externalProjectPath" value="$PROJECT_DIR$" />
+        <option name="gradleHome" value="/usr/local/gradle" />
+        <option name="gradleJvm" value="1.8" />
+        <option name="modules">
+          <set>
+            <option value="$PROJECT_DIR$" />
+            <option value="$PROJECT_DIR$/app" />
+          </set>
+        </option>
+        <option name="resolveModulePerSourceSet" value="false" />
+      </GradleProjectSettings>
+    </option>
+  </component>
+</project>

+ 25 - 0
.idea/jarRepositories.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="RemoteRepositoriesConfiguration">
+    <remote-repository>
+      <option name="id" value="central" />
+      <option name="name" value="Maven Central repository" />
+      <option name="url" value="https://repo1.maven.org/maven2" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="jboss.community" />
+      <option name="name" value="JBoss Community repository" />
+      <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="BintrayJCenter" />
+      <option name="name" value="BintrayJCenter" />
+      <option name="url" value="https://jcenter.bintray.com/" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="Google" />
+      <option name="name" value="Google" />
+      <option name="url" value="https://dl.google.com/dl/android/maven2/" />
+    </remote-repository>
+  </component>
+</project>

+ 4 - 0
.idea/markdown-navigator

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="MarkdownNavigator.ProfileManager" plain-text-search-scope="Project Files" />
+</project>

+ 29 - 0
.idea/markdown-navigator-enh.xml

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="MarkdownEnhProjectSettings">
+    <AnnotatorSettings targetHasSpaces="true" linkCaseMismatch="true" wikiCaseMismatch="true" wikiLinkHasDashes="true" notUnderWikiHome="true" targetNotWikiPageExt="true" notUnderSourceWikiHome="true" targetNameHasAnchor="true" targetPathHasAnchor="true" wikiLinkHasSlash="true" wikiLinkHasSubdir="true" wikiLinkHasOnlyAnchor="true" linkTargetsWikiHasExt="true" linkTargetsWikiHasBadExt="true" notUnderSameRepo="true" targetNotUnderVcs="false" linkNeedsExt="true" linkHasBadExt="true" linkTargetNeedsExt="true" linkTargetHasBadExt="true" wikiLinkNotInWiki="true" imageTargetNotInRaw="true" repoRelativeAcrossVcsRoots="true" multipleWikiTargetsMatch="true" unresolvedLinkReference="true" linkIsIgnored="true" anchorIsIgnored="true" anchorIsUnresolved="true" anchorLineReferenceIsUnresolved="true" anchorLineReferenceFormat="true" anchorHasDuplicates="true" abbreviationDuplicates="true" abbreviationNotUsed="true" attributeIdDuplicateDefinition="true" attributeIdNotUsed="true" footnoteDuplicateDefinition="true" footnoteUnresolved="true" footnoteDuplicates="true" footnoteNotUsed="true" macroDuplicateDefinition="true" macroUnresolved="true" macroDuplicates="true" macroNotUsed="true" referenceDuplicateDefinition="true" referenceUnresolved="true" referenceDuplicates="true" referenceNotUsed="true" referenceUnresolvedNumericId="true" enumRefDuplicateDefinition="true" enumRefUnresolved="true" enumRefDuplicates="true" enumRefNotUsed="true" enumRefLinkUnresolved="true" enumRefLinkDuplicates="true" simTocUpdateNeeded="true" simTocTitleSpaceNeeded="true" />
+    <HtmlExportSettings updateOnSave="false" parentDir="" targetDir="" cssDir="css" scriptDir="js" plainHtml="false" imageDir="" copyLinkedImages="false" imagePathType="0" targetPathType="2" targetExt="" useTargetExt="false" noCssNoScripts="false" useElementStyleAttribute="false" linkToExportedHtml="true" exportOnSettingsChange="true" regenerateOnProjectOpen="false" linkFormatType="HTTP_ABSOLUTE" />
+    <LinkMapSettings>
+      <textMaps />
+    </LinkMapSettings>
+  </component>
+  <component name="MarkdownNavigatorHistory">
+    <PasteImageHistory checkeredTransparentBackground="false" filename="image" directory="" onPasteImageTargetRef="3" onPasteLinkText="0" onPasteImageElement="1" onPasteLinkElement="1" onPasteReferenceElement="2" cornerRadius="20" borderColor="0" transparentColor="16777215" borderWidth="1" trimTop="0" trimBottom="0" trimLeft="0" trimRight="0" transparent="false" roundCorners="false" showPreview="true" bordered="false" scaled="false" cropped="false" hideInapplicableOperations="false" preserveLinkFormat="false" scale="50" scalingInterpolation="1" transparentTolerance="0" saveAsDefaultOnOK="false" linkFormat="0" addHighlights="false" showHighlightCoordinates="true" showHighlights="false" mouseSelectionAddsHighlight="false" outerFilled="false" outerFillColor="0" outerFillTransparent="true" outerFillAlpha="30">
+      <highlightList />
+      <directories />
+      <filenames />
+    </PasteImageHistory>
+    <CopyImageHistory checkeredTransparentBackground="false" filename="image" directory="" onPasteImageTargetRef="3" onPasteLinkText="0" onPasteImageElement="1" onPasteLinkElement="1" onPasteReferenceElement="2" cornerRadius="20" borderColor="0" transparentColor="16777215" borderWidth="1" trimTop="0" trimBottom="0" trimLeft="0" trimRight="0" transparent="false" roundCorners="false" showPreview="true" bordered="false" scaled="false" cropped="false" hideInapplicableOperations="false" preserveLinkFormat="false" scale="50" scalingInterpolation="1" transparentTolerance="0" saveAsDefaultOnOK="false" linkFormat="0" addHighlights="false" showHighlightCoordinates="true" showHighlights="false" mouseSelectionAddsHighlight="false" outerFilled="false" outerFillColor="0" outerFillTransparent="true" outerFillAlpha="30">
+      <highlightList />
+      <directories />
+      <filenames />
+    </CopyImageHistory>
+    <PasteLinkHistory onPasteImageTargetRef="3" onPasteTargetRef="1" onPasteLinkText="0" onPasteImageElement="1" onPasteLinkElement="1" onPasteWikiElement="2" onPasteReferenceElement="2" hideInapplicableOperations="false" preserveLinkFormat="false" useHeadingForLinkText="false" linkFormat="0" saveAsDefaultOnOK="false" />
+    <TableToJsonHistory>
+      <entries />
+    </TableToJsonHistory>
+    <TableSortHistory>
+      <entries />
+    </TableSortHistory>
+  </component>
+</project>

+ 58 - 0
.idea/markdown-navigator.xml

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="FlexmarkProjectSettings">
+    <FlexmarkHtmlSettings flexmarkSpecExampleRendering="0" flexmarkSpecExampleRenderHtml="false">
+      <flexmarkSectionLanguages>
+        <option name="1" value="Markdown" />
+        <option name="2" value="HTML" />
+        <option name="3" value="flexmark-ast:1" />
+      </flexmarkSectionLanguages>
+    </FlexmarkHtmlSettings>
+  </component>
+  <component name="MarkdownProjectSettings">
+    <PreviewSettings splitEditorLayout="SPLIT" splitEditorPreview="PREVIEW" useGrayscaleRendering="false" zoomFactor="1.0" maxImageWidth="0" synchronizePreviewPosition="true" highlightPreviewType="NONE" highlightFadeOut="5" highlightOnTyping="true" synchronizeSourcePosition="true" verticallyAlignSourceAndPreviewSyncPosition="true" showSearchHighlightsInPreview="false" showSelectionInPreview="true" lastLayoutSetsDefault="false">
+      <PanelProvider>
+        <provider providerId="com.vladsch.md.nav.editor.swing.html.panel" providerName="Default - Swing" />
+      </PanelProvider>
+    </PreviewSettings>
+    <ParserSettings gitHubSyntaxChange="false" correctedInvalidSettings="false" emojiShortcuts="1" emojiImages="0">
+      <PegdownExtensions>
+        <option name="ANCHORLINKS" value="true" />
+        <option name="ATXHEADERSPACE" value="true" />
+        <option name="AUTOLINKS" value="true" />
+        <option name="FENCED_CODE_BLOCKS" value="true" />
+        <option name="INTELLIJ_DUMMY_IDENTIFIER" value="true" />
+        <option name="RELAXEDHRULES" value="true" />
+        <option name="STRIKETHROUGH" value="true" />
+        <option name="TABLES" value="true" />
+        <option name="TASKLISTITEMS" value="true" />
+        <option name="WIKILINKS" value="true" />
+      </PegdownExtensions>
+      <ParserOptions>
+        <option name="COMMONMARK_LISTS" value="true" />
+        <option name="EMOJI_SHORTCUTS" value="true" />
+        <option name="GFM_TABLE_RENDERING" value="true" />
+        <option name="GITHUB_WIKI_LINKS" value="true" />
+        <option name="PRODUCTION_SPEC_PARSER" value="true" />
+        <option name="SIM_TOC_BLANK_LINE_SPACER" value="true" />
+      </ParserOptions>
+    </ParserSettings>
+    <HtmlSettings headerTopEnabled="false" headerBottomEnabled="false" bodyTopEnabled="false" bodyBottomEnabled="false" addPageHeader="true" imageUriSerials="false" addDocTypeHtml="true" noParaTags="false" plantUmlConversion="0">
+      <GeneratorProvider>
+        <provider providerId="com.vladsch.md.nav.editor.swing.html.generator" providerName="Default Swing HTML Generator" />
+      </GeneratorProvider>
+      <headerTop />
+      <headerBottom />
+      <bodyTop />
+      <bodyBottom />
+    </HtmlSettings>
+    <CssSettings previewScheme="UI_SCHEME" cssUri="" isCssUriEnabled="false" isCssUriSerial="true" isCssTextEnabled="false" isDynamicPageWidth="true">
+      <StylesheetProvider>
+        <provider providerId="com.vladsch.md.nav.editor.swing.html.css" providerName="Default Swing Stylesheet" />
+      </StylesheetProvider>
+      <ScriptProviders />
+      <cssText />
+      <cssUriHistory />
+    </CssSettings>
+  </component>
+</project>

+ 14 - 0
.idea/misc.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CMakeSettings">
+    <configurations>
+      <configuration PROFILE_NAME="Debug" CONFIG_NAME="Debug" />
+    </configurations>
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/build/classes" />
+  </component>
+  <component name="ProjectType">
+    <option name="id" value="Android" />
+  </component>
+</project>

+ 6 - 0
.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>

+ 7 - 0
README.md

@@ -0,0 +1,7 @@
+
+## \[ Remove China Apps - Reverse Engineering 👷‍️⛏👷🔧️👷🔧 \]
+
+
+> Source code of [Remove China Apps][0], an Android app that claims to identify China-made apps on your Android phone and remove them, has gone viral in India.
+
+[0]: https://play.google.com/store/apps/details?id=com.chinaappsremover

+ 1 - 0
app/.gitignore

@@ -0,0 +1 @@
+/build

+ 40 - 0
app/build.gradle

@@ -0,0 +1,40 @@
+apply plugin: 'com.android.application'
+
+android {
+    compileSdkVersion 29
+    buildToolsVersion "29.0.3"
+
+    defaultConfig {
+        applicationId "com.chinaappsremover"
+        minSdkVersion 15
+        targetSdkVersion 29
+        versionCode 1
+        versionName "1.0"
+
+        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+    }
+
+    buildTypes {
+        release {
+            minifyEnabled false
+            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+        }
+    }
+}
+
+dependencies {
+    implementation fileTree(dir: "libs", include: ["*.jar"])
+
+    implementation 'androidx.appcompat:appcompat:1.1.0'
+    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
+    implementation 'com.google.android.material:material:1.1.0'
+    implementation "androidx.recyclerview:recyclerview:1.1.0"
+
+    implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
+
+    implementation 'com.google.android.play:core:1.7.3'
+
+    testImplementation 'junit:junit:4.13'
+    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
+    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
+}

+ 21 - 0
app/proguard-rules.pro

@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+#   http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+#   public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile

+ 25 - 0
app/src/main/AndroidManifest.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.chinaappsremover">
+
+    <uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES"/>
+    <uses-permission android:name="android.permission.INTERNET"/>
+
+    <application
+        android:name=".AppController"
+        android:allowBackup="true"
+        android:icon="@mipmap/ic_launcher"
+        android:label="@string/app_name"
+        android:supportsRtl="true"
+        android:theme="@style/AppTheme">
+        <activity android:name=".ui.Splash">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+        <activity android:name=".ui.MainActivity"/>
+    </application>
+
+</manifest>

BIN
app/src/main/assets/font/Poppins-Regular.ttf


BIN
app/src/main/assets/font/Roboto-Bold.ttf


BIN
app/src/main/assets/font/Roboto-Light.ttf


BIN
app/src/main/assets/font/Roboto-Regular.ttf


+ 154 - 0
app/src/main/assets/index.html

@@ -0,0 +1,154 @@
+<!DOCTYPE html>
+<html >
+  <head>
+    <meta charset="UTF-8">
+    <title>Loading dots</title>
+    <script src="http://s.codepen.io/assets/libs/modernizr.js" type="text/javascript"></script>
+
+
+    
+    <link rel="stylesheet" href="css/normalize.css">
+
+    
+        <style>
+      @import url(http://fonts.googleapis.com/css?family=Roboto);
+
+html , body {
+  width: 100%;
+  height: 100%;
+  background-color: #FFF;
+  font-family: 'Roboto', sans-serif;
+  font-size: 100%;
+  line-height: 1.3em;
+  margin: 0;
+  padding: 0;
+}
+
+.loading {
+  width: 100%;
+  height: 100%;
+  background: #16171d;
+  opacity: 0.9;
+  position: fixed;
+}
+
+.loading > div {
+  width: 60px;
+  height: 60px;
+  position: absolute;
+  left: 50%;
+  margin-left: -30px;
+  top: 50%;
+  margin-top: -30px;
+}
+
+
+.loading > div > div {
+  content: '';
+  position: absolute;
+  width: 16px;
+  height: 16px;
+  background: #FF0000;
+  top: 10px;
+  left: 10px;
+  transform-origin: 20px 20px;
+  border-radius: 8px;
+  animation: spin-a 1s infinite cubic-bezier(0.5, 0, 0.5, 1);
+}
+
+.loading > div > .c2 {
+  top: 10px;
+  left: auto;
+  right: 10px;
+  transform-origin: -4px 20px;
+  animation: spin-b 1s infinite cubic-bezier(0.5, 0, 0.5, 1);
+}
+.loading > div > .c3 {
+  top: auto;
+  left: auto;
+  right: 10px;
+  bottom: 10px;
+  transform-origin: -4px -4px;
+  animation: spin-c 1s infinite cubic-bezier(0.5, 0, 0.5, 1);
+}
+.loading > div > .c4 {
+  top: auto;
+  bottom: 10px;
+  transform-origin: 20px -4px;
+  animation: spin-d 1s infinite cubic-bezier(0.5, 0, 0.5, 1);
+}
+
+@keyframes spin-a {
+  0%   { transform: rotate(90deg); }
+  0%  { transform: rotate(90deg); }
+  50%  { transform: rotate(180deg); }
+  75%  { transform: rotate(270deg); }
+  100% { transform: rotate(360deg); }
+}
+@keyframes spin-b {
+  0%   { transform: rotate(90deg); }
+  25%  { transform: rotate(90deg); }
+  25%  { transform: rotate(180deg); }
+  75%  { transform: rotate(270deg); }
+  100% { transform: rotate(360deg); }
+}
+@keyframes spin-c {
+  0%   { transform: rotate(90deg); }
+  25%  { transform: rotate(90deg); }
+  50%  { transform: rotate(180deg); }
+  50%  { transform: rotate(270deg); }
+  100% { transform: rotate(360deg); }
+}
+@keyframes spin-d {
+  0%   { transform: rotate(90deg); }
+  25%  { transform: rotate(90deg); }
+  50%  { transform: rotate(180deg); }
+  75%  { transform: rotate(270deg); }
+  75% { transform: rotate(360deg); }
+  100% { transform: rotate(360deg); }
+}
+
+
+.loading > span {
+  width: 100px;
+  height: 30px;
+  position: absolute;
+  left: 50%;
+  margin-left: -50px;
+  top: 50%;
+  margin-top: 30px;
+  color: #ff8c00;
+  font-size: 12px;
+  text-align: center;
+}
+
+.content { padding: 1.5em; }
+    </style>
+
+    
+        <script src="js/prefixfree.min.js"></script>
+
+    
+  </head>
+
+  <body>
+
+    <div class="loading">
+  <div>
+    <div class="c1"></div>
+    <div class="c2"></div>
+    <div class="c3"></div>
+    <div class="c4"></div>
+  </div>
+  <span style="color: red">Please wait...</span>
+</div>
+
+<!-- CONTENT -->
+
+    
+    
+    
+    
+    
+  </body>
+</html>

BIN
app/src/main/assets/rca.db


+ 33 - 0
app/src/main/java/com/chinaappsremover/AppController.java

@@ -0,0 +1,33 @@
+package com.chinaappsremover;
+
+import android.app.Application;
+import android.content.Context;
+import android.content.SharedPreferences;
+
+import com.chinaappsremover.dbhandler.DataBaseHelper;
+
+public class AppController extends Application {
+    private static DataBaseHelper dataBaseHelper;
+    private static AppController instace;
+    private final String DEFAULT_PREF = "default_pref";
+    private SharedPreferences default_prefs;
+
+    public static AppController getInstace() {
+        return instace;
+    }
+
+    public void onCreate() {
+        super.onCreate();
+        instace = this;
+        default_prefs = getSharedPreferences(DEFAULT_PREF, Context.MODE_PRIVATE);
+        dataBaseHelper = new DataBaseHelper(this);
+    }
+
+    public static DataBaseHelper getDbHelper() {
+        return dataBaseHelper;
+    }
+
+    public SharedPreferences getDefaultPreference() {
+        return this.default_prefs;
+    }
+}

+ 84 - 0
app/src/main/java/com/chinaappsremover/adapter/ItemlistAdapter.java

@@ -0,0 +1,84 @@
+package com.chinaappsremover.adapter;
+
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.chinaappsremover.R;
+import com.chinaappsremover.listener.OnItemClickListener;
+import com.chinaappsremover.wrapper.AppInfo;
+
+import java.util.List;
+
+public class ItemlistAdapter extends RecyclerView.Adapter<ItemlistAdapter.ViewHolder> {
+    private List<AppInfo> appInfos;
+    private Context context;
+    private OnItemClickListener onItemClickListener;
+    private RecyclerView.RecycledViewPool viewPool = new RecyclerView.RecycledViewPool();
+
+    public ItemlistAdapter(Context ctx, List<AppInfo> appInfoList, OnItemClickListener clickListener) {
+        context = ctx;
+        appInfos = appInfoList;
+        onItemClickListener = clickListener;
+    }
+
+
+    @NonNull
+    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
+        return new ViewHolder(LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.adapter_item, viewGroup, false));
+    }
+
+    public void onBindViewHolder(ViewHolder viewHolder, final int position) {
+        final AppInfo item = getItem(position);
+        viewHolder.appsName.setText(item.appName);
+        viewHolder.size.setText(item.size);
+        viewHolder.img.setImageDrawable(item.icon);
+        viewHolder.delete.setOnClickListener(new View.OnClickListener() {
+            public void onClick(View view) {
+
+                onItemClickListener.onItemClick(position);
+
+                Uri packageUri = Uri.parse("package:" + item.packageName);
+
+                Intent intent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE);
+                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
+                intent.setData(packageUri);
+
+                if (intent.resolveActivity(context.getPackageManager()) != null) {
+                    context.startActivity(intent);
+                }
+            }
+        });
+    }
+
+    public AppInfo getItem(int position) {
+        return appInfos.get(position);
+    }
+
+    public int getItemCount() {
+        return appInfos.size();
+    }
+
+    public static class ViewHolder extends RecyclerView.ViewHolder {
+        TextView appsName;
+        ImageView delete;
+        ImageView img;
+        TextView size;
+
+        public ViewHolder(View view) {
+            super(view);
+            appsName = view.findViewById(R.id.appsName);
+            size = view.findViewById(R.id.size);
+            img = view.findViewById(R.id.img);
+            delete = view.findViewById(R.id.delete);
+        }
+    }
+}

+ 64 - 0
app/src/main/java/com/chinaappsremover/dbhandler/DataBaseHelper.java

@@ -0,0 +1,64 @@
+package com.chinaappsremover.dbhandler;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+import android.util.Log;
+
+import com.chinaappsremover.wrapper.AppInfo;
+
+import java.io.File;
+import java.util.List;
+
+public class DataBaseHelper extends SQLiteOpenHelper {
+    public static final String DATABASE_NAME = "rca.db";
+    public static final int DATABASE_VERSION = 1;
+    private Context myContext;
+    private SQLiteDatabase sqLiteDatabase = getWritableDatabase();
+
+    public DataBaseHelper(Context context) {
+        super(context, DATABASE_NAME, null, DATABASE_VERSION);
+        myContext = context;
+    }
+
+    public void onCreate(SQLiteDatabase sQLiteDatabase) {
+        Log.w("Db oncrate called", "Db oncreate called");
+        sQLiteDatabase.execSQL("create table apps (id integer primary key autoincrement, p_name text, a_name text);");
+    }
+
+    public void onUpgrade(SQLiteDatabase sQLiteDatabase, int i, int i2) {
+        myContext.getDatabasePath("dest.sqLiteDatabase");
+    }
+
+    public boolean attach(File file, boolean z) {
+        try {
+            sqLiteDatabase.execSQL("attach database ? as sqLiteDatabase", new String[]{file.getAbsolutePath()});
+            if (!z) {
+                sqLiteDatabase.delete("apps", null, null);
+            }
+            sqLiteDatabase.execSQL("INSERT INTO apps (p_name, a_name) SELECT  p_name, a_name FROM sqLiteDatabase.apps");
+            return file.delete();
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    public List<AppInfo> isExist(List<AppInfo> list, List<AppInfo> list2) {
+        list2.clear();
+        for (AppInfo next : list) {
+            Cursor rawQuery = sqLiteDatabase.rawQuery("select * from  apps where p_name ='" + next.packageName + "'", null);
+            if (rawQuery != null && rawQuery.moveToFirst()) {
+                list2.add(next);
+                while (rawQuery.moveToNext()) {
+                    list2.add(next);
+                }
+            }
+            if (rawQuery != null) {
+                rawQuery.close();
+            }
+        }
+        return list2;
+    }
+}

+ 55 - 0
app/src/main/java/com/chinaappsremover/dbhandler/DbUtils.java

@@ -0,0 +1,55 @@
+package com.chinaappsremover.dbhandler;
+
+import android.content.Context;
+import android.util.Log;
+
+import com.chinaappsremover.AppController;
+import com.chinaappsremover.utils.Preference;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+public class DbUtils {
+    public File getDatabasePath(Context context, String str) {
+        return context.getDatabasePath(str);
+    }
+
+    public static void attachDB(Context context) {
+        File databasePath = context.getDatabasePath("dest.sqLiteDatabase");
+        if (getDbFile(context, DataBaseHelper.DATABASE_NAME, databasePath.getAbsolutePath()) && AppController.getDbHelper().attach(databasePath, false)) {
+            Preference.setAttachedDb();
+        }
+    }
+
+    public static boolean getDbFile(Context context, String str, String str2) {
+        try {
+            InputStream open = context.getAssets().open(str);
+            FileOutputStream fileOutputStream = new FileOutputStream(str2);
+            Log.v("Tag assets", fileOutputStream.toString());
+            byte[] bArr = new byte[1024];
+            while (true) {
+                int read = open.read(bArr);
+                if (read > 0) {
+                    fileOutputStream.write(bArr, 0, read);
+                } else {
+                    open.close();
+                    fileOutputStream.flush();
+                    fileOutputStream.close();
+                    return true;
+                }
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    public boolean isDatabaseAttached(Context context, String str) {
+        if (getDatabasePath(context, str) == null) {
+            return false;
+        }
+        return Preference.isDBAttached();
+    }
+}

+ 5 - 0
app/src/main/java/com/chinaappsremover/listener/OnItemClickListener.java

@@ -0,0 +1,5 @@
+package com.chinaappsremover.listener;
+
+public interface OnItemClickListener {
+    void onItemClick(int i);
+}

+ 12 - 0
app/src/main/java/com/chinaappsremover/receiver/AppUninstalledreceiver.java

@@ -0,0 +1,12 @@
+package com.chinaappsremover.receiver;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import androidx.localbroadcastmanager.content.LocalBroadcastManager;
+
+public class AppUninstalledreceiver extends BroadcastReceiver {
+    public void onReceive(Context context, Intent intent) {
+        LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
+    }
+}

+ 327 - 0
app/src/main/java/com/chinaappsremover/ui/MainActivity.java

@@ -0,0 +1,327 @@
+package com.chinaappsremover.ui;
+
+import android.content.ActivityNotFoundException;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentSender;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
+import android.content.res.Resources;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.os.Handler;
+import android.text.Html;
+import android.util.Log;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.ProgressBar;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.recyclerview.widget.DefaultItemAnimator;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.chinaappsremover.AppController;
+import com.chinaappsremover.R;
+import com.chinaappsremover.adapter.ItemlistAdapter;
+import com.chinaappsremover.listener.OnItemClickListener;
+import com.chinaappsremover.wrapper.AppInfo;
+import com.google.android.material.snackbar.Snackbar;
+import com.google.android.play.core.appupdate.AppUpdateInfo;
+import com.google.android.play.core.appupdate.AppUpdateManager;
+import com.google.android.play.core.appupdate.AppUpdateManagerFactory;
+import com.google.android.play.core.install.InstallState;
+import com.google.android.play.core.install.InstallStateUpdatedListener;
+import com.google.android.play.core.install.model.AppUpdateType;
+import com.google.android.play.core.install.model.InstallStatus;
+import com.google.android.play.core.install.model.UpdateAvailability;
+import com.google.android.play.core.tasks.OnSuccessListener;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+public class MainActivity extends AppCompatActivity implements OnItemClickListener {
+
+    private static final int RC_APP_UPDATE = 201;
+
+    private TextView app_found_count;
+    private ImageView doneIcon;
+    private ImageView dragonIcon;
+    private RelativeLayout listLayout;
+    private RelativeLayout noappsfoundLayout;
+    private ProgressBar progressBar;
+    private RecyclerView recycler_view;
+    private Button rescan_now;
+    private Button scan_now;
+    private RelativeLayout scan_ui;
+    private ImageView shareIcon;
+
+    private List<AppInfo> appInfos = new ArrayList<>();
+
+    InstallStateUpdatedListener installStateUpdatedListener = new InstallStateUpdatedListener() {
+        public void onStateUpdate(InstallState installState) {
+            try {
+                if (installState.installStatus() == InstallStatus.DOWNLOADED) {
+                    popupSnackbarForCompleteUpdate();
+                } else if (installState.installStatus() != InstallStatus.INSTALLED) {
+                    Log.i("MainActivity", "InstallStateUpdatedListener: state: " + installState.installStatus());
+                } else if (mAppUpdateManager != null) {
+                    mAppUpdateManager.unregisterListener(installStateUpdatedListener);
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    };
+
+    private ItemlistAdapter itemlistAdapter;
+    AppUpdateManager mAppUpdateManager;
+
+    private boolean isDeleteClick;
+
+
+    protected void onCreate(Bundle bundle) {
+        super.onCreate(bundle);
+        setContentView(R.layout.activity_main);
+
+        ActionBar supportActionBar = getSupportActionBar();
+        if (supportActionBar != null) {
+            supportActionBar.setHomeAsUpIndicator(R.mipmap.ic_launcher);
+        }
+
+        progressBar = findViewById(R.id.progressBar);
+        dragonIcon = findViewById(R.id.dragonIcon);
+        doneIcon = findViewById(R.id.doneIcon);
+        shareIcon = findViewById(R.id.shareIcon);
+        scan_now = findViewById(R.id.scan_now);
+        recycler_view = findViewById(R.id.recycler_view);
+        listLayout = findViewById(R.id.listLayout);
+        scan_ui = findViewById(R.id.scan_ui);
+        noappsfoundLayout = findViewById(R.id.noappsfoundLayout);
+        app_found_count = findViewById(R.id.app_found_count);
+        rescan_now = findViewById(R.id.rescan_now);
+
+        itemlistAdapter = new ItemlistAdapter(this, appInfos, this);
+        recycler_view.setLayoutManager(new LinearLayoutManager(this));
+        recycler_view.setItemAnimator(new DefaultItemAnimator());
+        recycler_view.setAdapter(itemlistAdapter);
+
+        ((TextView) findViewById(R.id.scan_now_txt)).setText(Html.fromHtml(getResources().getString(R.string.clickscantext)));
+
+        scan_now.setOnClickListener(new View.OnClickListener() {
+            public void onClick(View view) {
+                getApps();
+            }
+        });
+        rescan_now.setOnClickListener(new View.OnClickListener() {
+            public void onClick(View view) {
+                getApps();
+            }
+        });
+        checkAppUpdate();
+        shareIcon.setOnClickListener(new View.OnClickListener() {
+            public void onClick(View view) {
+                shareApp();
+            }
+        });
+    }
+
+    private void checkAppUpdate() {
+        try {
+            mAppUpdateManager = AppUpdateManagerFactory.create(this);
+            mAppUpdateManager.registerListener(installStateUpdatedListener);
+            mAppUpdateManager.getAppUpdateInfo().addOnSuccessListener(new OnSuccessListener<AppUpdateInfo>() {
+                public void onSuccess(AppUpdateInfo appUpdateInfo) {
+                    if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)) {
+                        try {
+                            mAppUpdateManager.startUpdateFlowForResult(appUpdateInfo, AppUpdateType.FLEXIBLE, MainActivity.this, RC_APP_UPDATE);
+                        } catch (IntentSender.SendIntentException e) {
+                            e.printStackTrace();
+                        }
+                    } else if (appUpdateInfo.installStatus() == InstallStatus.DOWNLOADED) {
+                        popupSnackbarForCompleteUpdate();
+                    } else {
+                        Log.e("MainActivity", "checkForAppUpdateAvailability: something else");
+                    }
+                }
+            });
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+        if (requestCode == RC_APP_UPDATE && resultCode != RESULT_OK
+        ) {
+            Log.e("onActivityResult", "onActivityResult: app download failed");
+        }
+    }
+
+    private void popupSnackbarForCompleteUpdate() {
+        try {
+            Snackbar make = Snackbar.make(findViewById(R.id.scan_ui), "An update has just been downloaded.", Snackbar.LENGTH_INDEFINITE);
+            make.setAction("RESTART", new View.OnClickListener() {
+                public void onClick(View view) {
+                    if (mAppUpdateManager != null) {
+                        mAppUpdateManager.completeUpdate();
+                    }
+                }
+            });
+            make.setActionTextColor(getResources().getColor(R.color.green));
+            make.show();
+        } catch (Resources.NotFoundException e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    private void getApps() {
+        new GetAppsAsync().execute();
+    }
+
+
+    protected void onResume() {
+        super.onResume();
+        if (isDeleteClick) {
+            new Handler().postDelayed(new Runnable() {
+                public void run() {
+                    getApps();
+                }
+            }, 1500);
+        }
+        isDeleteClick = false;
+    }
+
+    public void onItemClick(int i) {
+        isDeleteClick = true;
+    }
+
+    class AppUninstalledreceiver extends BroadcastReceiver {
+        AppUninstalledreceiver() {
+        }
+
+        public void onReceive(Context context, Intent intent) {
+            getApps();
+        }
+    }
+
+    class GetAppsAsync extends AsyncTask<Void, Void, List<AppInfo>> {
+
+        protected void onPreExecute() {
+            super.onPreExecute();
+            progressBar.setVisibility(View.VISIBLE);
+            scan_ui.setVisibility(View.GONE);
+        }
+
+        protected List<AppInfo> doInBackground(Void... voidArr) {
+            return AppController.getDbHelper().isExist(getInstalledApps(), appInfos);
+        }
+
+        protected void onPostExecute(List<AppInfo> list) {
+            super.onPostExecute(list);
+            progressBar.setVisibility(View.GONE);
+            scan_ui.setVisibility(View.GONE);
+            if (list.size() > 0) {
+                listLayout.setVisibility(View.VISIBLE);
+                noappsfoundLayout.setVisibility(View.GONE);
+                app_found_count.setText(Html.fromHtml(getResources().getString(R.string.app_found_count, list.size())));
+            } else {
+                listLayout.setVisibility(View.GONE);
+                noappsfoundLayout.setVisibility(View.VISIBLE);
+            }
+            dragonIcon.setVisibility(View.GONE);
+            doneIcon.setVisibility(View.VISIBLE);
+            itemlistAdapter.notifyDataSetChanged();
+            if (list.size() == 0) {
+                Collections.sort(appInfos, new Comparator<AppInfo>() {
+                    public int compare(AppInfo appInfo, AppInfo appInfo2) {
+                        return appInfo.appName.compareToIgnoreCase(appInfo2.appName);
+                    }
+                });
+            }
+        }
+    }
+
+    public boolean onCreateOptionsMenu(Menu menu) {
+        getMenuInflater().inflate(R.menu.main, menu);
+        return super.onCreateOptionsMenu(menu);
+    }
+
+    public boolean onOptionsItemSelected(MenuItem menuItem) {
+        int itemId = menuItem.getItemId();
+        if (itemId == R.id.contact_us) {
+            openUrl(getResources().getString(R.string.contact_us_url));
+            return true;
+        } else if (itemId == R.id.privacy_policy) {
+            openUrl(getResources().getString(R.string.privacy_policy_url));
+            return true;
+        } else if (itemId != R.id.rate_us) {
+            return super.onOptionsItemSelected(menuItem);
+        } else {
+            rateus();
+            return true;
+        }
+    }
+
+    private void openUrl(String str) {
+        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(str)));
+    }
+
+    private void rateus() {
+        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + getPackageName()));
+        try {
+            startActivity(intent);
+        } catch (ActivityNotFoundException unused) {
+            startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + getPackageName())));
+        }
+    }
+
+    public void shareApp() {
+        try {
+            Intent intent = new Intent("android.intent.action.SEND");
+            intent.setType("text/plain");
+            intent.putExtra("android.intent.extra.SUBJECT", getResources().getString(R.string.app_name));
+            intent.putExtra("android.intent.extra.TEXT", "\nHey, I am using Remove China Apps to get rid of Chinese apps. If you want the same try using the app by clicking\n\n" + "https://play.google.com/store/apps/details?id=" + getPackageName() + "\n\n");
+            startActivity(Intent.createChooser(intent, "choose one"));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private boolean isSystemPackage(PackageInfo packageInfo) {
+        return (packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0;
+    }
+
+    public List<AppInfo> getInstalledApps() {
+        ArrayList<AppInfo> arrayList = new ArrayList<>();
+        List<PackageInfo> installedPackages = getPackageManager().getInstalledPackages(0);
+        for (int i = 0; i < installedPackages.size(); i++) {
+            PackageInfo packageInfo = installedPackages.get(i);
+            if (!isSystemPackage(packageInfo)) {
+                AppInfo appInfo = new AppInfo();
+                appInfo.appName = packageInfo.applicationInfo.loadLabel(getPackageManager()).toString();
+                appInfo.packageName = packageInfo.packageName;
+                appInfo.versionName = packageInfo.versionName;
+                appInfo.versionCode = packageInfo.versionCode;
+                appInfo.icon = packageInfo.applicationInfo.loadIcon(getPackageManager());
+                appInfo.size = (new File(packageInfo.applicationInfo.publicSourceDir).length() / 1024 * 1024) + " MB";
+                arrayList.add(appInfo);
+            }
+        }
+        return arrayList;
+    }
+}

+ 33 - 0
app/src/main/java/com/chinaappsremover/ui/Splash.java

@@ -0,0 +1,33 @@
+package com.chinaappsremover.ui;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Handler;
+
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.chinaappsremover.R;
+import com.chinaappsremover.dbhandler.DbUtils;
+
+public class Splash extends AppCompatActivity {
+
+    protected void onCreate(Bundle bundle) {
+        super.onCreate(bundle);
+        setContentView(R.layout.activity_splash);
+
+        ActionBar supportActionBar = getSupportActionBar();
+        if (supportActionBar != null) {
+            supportActionBar.hide();
+        }
+
+        DbUtils.attachDB(this);
+        new Handler().postDelayed(new Runnable() {
+            public void run() {
+                Splash splash = Splash.this;
+                splash.startActivity(new Intent(splash, MainActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK));
+                Splash.this.finish();
+            }
+        }, 2500);
+    }
+}

+ 15 - 0
app/src/main/java/com/chinaappsremover/utils/Preference.java

@@ -0,0 +1,15 @@
+package com.chinaappsremover.utils;
+
+import com.chinaappsremover.AppController;
+
+public class Preference {
+    private static final String isDBAttached = "isDBAttached";
+
+    public static boolean isDBAttached() {
+        return AppController.getInstace().getDefaultPreference().getBoolean(isDBAttached, false);
+    }
+
+    public static void setAttachedDb() {
+        AppController.getInstace().getDefaultPreference().edit().putBoolean(isDBAttached, false).apply();
+    }
+}

+ 41 - 0
app/src/main/java/com/chinaappsremover/utils/uihelper/CustomFontButton.java

@@ -0,0 +1,41 @@
+package com.chinaappsremover.utils.uihelper;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Typeface;
+import android.util.AttributeSet;
+import android.util.Log;
+
+import androidx.appcompat.widget.AppCompatButton;
+
+import com.chinaappsremover.R;
+
+public class CustomFontButton extends AppCompatButton {
+
+    public CustomFontButton(Context context, AttributeSet attributeSet) {
+        super(context, attributeSet);
+        applyCustomFont(context, attributeSet);
+    }
+
+    public CustomFontButton(Context context, AttributeSet attributeSet, int i) {
+        super(context, attributeSet, i);
+        applyCustomFont(context, attributeSet);
+    }
+
+    private void applyCustomFont(Context context, AttributeSet attributeSet) {
+        if (attributeSet != null) {
+            TypedArray a = getContext().obtainStyledAttributes(attributeSet, R.styleable.CustomFontButton);
+            String fontName = a.getString(R.styleable.CustomFontButton_custom_font_btn);
+            if (fontName != null) {
+                try {
+                    Typeface myTypeface = Typeface.createFromAsset(getContext().getAssets(), "fonts/" + fontName + ".ttf");
+                    setTypeface(myTypeface);
+                } catch (Exception e) {
+                    Log.e("failed", e.getMessage());
+                }
+            }
+            a.recycle();
+        }
+    }
+
+}

+ 40 - 0
app/src/main/java/com/chinaappsremover/utils/uihelper/CustomFontTextView.java

@@ -0,0 +1,40 @@
+package com.chinaappsremover.utils.uihelper;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Typeface;
+import android.util.AttributeSet;
+import android.util.Log;
+
+import androidx.appcompat.widget.AppCompatTextView;
+
+import com.chinaappsremover.R;
+
+public class CustomFontTextView extends AppCompatTextView {
+
+    public CustomFontTextView(Context context, AttributeSet attributeSet) {
+        super(context, attributeSet);
+        applyCustomFont(context, attributeSet);
+    }
+
+    public CustomFontTextView(Context context, AttributeSet attributeSet, int i) {
+        super(context, attributeSet, i);
+        applyCustomFont(context, attributeSet);
+    }
+
+    private void applyCustomFont(Context context, AttributeSet attributeSet) {
+        if (attributeSet != null) {
+            TypedArray a = getContext().obtainStyledAttributes(attributeSet, R.styleable.CustomFontTextView);
+            String fontName = a.getString(R.styleable.CustomFontTextView_custom_font);
+            if (fontName != null) {
+                try {
+                    Typeface myTypeface = Typeface.createFromAsset(getContext().getAssets(), "fonts/" + fontName + ".ttf");
+                    setTypeface(myTypeface);
+                } catch (Exception e) {
+                    Log.e("failed", e.getMessage());
+                }
+            }
+            a.recycle();
+        }
+    }
+}

+ 12 - 0
app/src/main/java/com/chinaappsremover/wrapper/AppInfo.java

@@ -0,0 +1,12 @@
+package com.chinaappsremover.wrapper;
+
+import android.graphics.drawable.Drawable;
+
+public class AppInfo {
+    public String appName;
+    public Drawable icon;
+    public String packageName;
+    public String size;
+    public int versionCode;
+    public String versionName;
+}

+ 6 - 0
app/src/main/res/drawable-anydpi-v21/check_mark.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:aapt="http://schemas.android.com/aapt" android:height="82.4dp" android:width="82.4dp" android:viewportWidth="82.4" android:viewportHeight="82.4">
+    <group android:translateX="8.273" android:translateY="13.627">
+        <path android:fillColor="#04ee3b" android:pathData="M22.627 41.993l-14.42 -14.42L3.4 32.38l19.227 19.227 41.2 -41.2L59.02 5.6z"/>
+    </group>
+</vector>

+ 4 - 0
app/src/main/res/drawable-anydpi-v21/delete_24_px.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:aapt="http://schemas.android.com/aapt" android:height="24dp" android:width="24dp" android:viewportWidth="24" android:viewportHeight="24">
+    <path android:fillColor="#fa0606" android:pathData="M6 19a2.006 2.006 0 0 0 2 2h8a2.006 2.006 0 0 0 2 -2V7H6zM19 4h-3.5l-1 -1h-5l-1 1H5v2h14z"/>
+</vector>

+ 8 - 0
app/src/main/res/drawable-anydpi-v21/ic_done_icon.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:aapt="http://schemas.android.com/aapt" android:height="151dp" android:width="151dp" android:viewportWidth="151" android:viewportHeight="151">
+    <path android:fillColor="#fff" android:pathData="M75.5,75.5m-75.5,0a75.5,75.5 0,1 1,151 0a75.5,75.5 0,1 1,-151 0" android:strokeColor="#00000000" android:strokeWidth="8"/>
+    <path android:fillColor="#00000000" android:pathData="M75.5,75.5m-71.5,0a71.5,71.5 0,1 1,143 0a71.5,71.5 0,1 1,-143 0" android:strokeColor="#000000" android:strokeWidth="8"/>
+    <path android:fillColor="#fff" android:pathData="M75.5,75.5m-75.5,0a75.5,75.5 0,1 1,151 0a75.5,75.5 0,1 1,-151 0" android:strokeColor="#00000000" android:strokeWidth="11"/>
+    <path android:fillColor="#00000000" android:pathData="M75.5,75.5m-70,0a70,70 0,1 1,140 0a70,70 0,1 1,-140 0" android:strokeColor="#fa9f06" android:strokeWidth="11"/>
+    <path android:fillColor="#04ee3b" android:pathData="M64.9,90.62l-14.42,-14.42L45.673,81.007l19.227,19.227 41.2,-41.2L101.293,54.227z"/>
+</vector>

File diff suppressed because it is too large
+ 4 - 0
app/src/main/res/drawable-anydpi-v21/ic_icon_with_dragon.xml


File diff suppressed because it is too large
+ 8 - 0
app/src/main/res/drawable-anydpi-v21/logo.xml


+ 199 - 0
app/src/main/res/drawable-anydpi-v21/one_touch_icon.xml

@@ -0,0 +1,199 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:aapt="http://schemas.android.com/aapt" android:height="25.427dp" android:width="20.587dp" android:viewportWidth="20.587" android:viewportHeight="25.427">
+    <group android:pivotX="9.214" android:pivotY="4.579" android:rotation="-14">
+        <group android:translateX="-6.32" android:translateY="-51.613">
+            <path android:fillColor="#2da8bb" android:pathData="M21.385 64.926a1.457 1.457 0 0 0 -1.04 0.108l0.232 -0.866a1.628 1.628 0 0 0 -2.41 -1.817 1.628 1.628 0 0 0 -2.424 -1.525l0.995 -3.713a1.628 1.628 0 1 0 -3.145 -0.842L10.9 66.326 9.737 64.32a1.831 1.831 0 1 0 -3.172 1.831l3.566 6.178a6.1 6.1 0 0 0 11.183 -1.474l1.108 -4.137a1.464 1.464 0 0 0 -1.037 -1.792zm-0.828 6.174a5.453 5.453 0 0 1 -9.862 0.9l-3.566 -6.175a1.18 1.18 0 1 1 2.044 -1.18l1.457 2.521a0.4 0.4 0 0 0 0.246 0.189 0.408 0.408 0 0 0 0.5 -0.291l2.847 -10.621a0.977 0.977 0 0 1 1.887 0.506l-2.25 8.4a0.407 0.407 0 1 0 0.785 0.211l0.955 -3.564a0.977 0.977 0 0 1 1.887 0.5l-0.848 3.165a0.407 0.407 0 1 0 0.786 0.211l0.637 -2.378a0.977 0.977 0 0 1 1.887 0.5l-0.749 2.784a0.407 0.407 0 1 0 0.786 0.211l0.23 -0.858a0.814 0.814 0 1 1 1.573 0.42z"/>
+        </group>
+        <group android:translateX="3.764">
+            <group android:translateX="5.987" android:translateY="0.156">
+                <path android:fillColor="#2da8bb" android:pathData="M0.652 0.326A0.326 0.326 0 0 1 0 0.326A0.326 0.326 0 0 1 0.652 0.326Z"/>
+            </group>
+            <group android:translateX="5.774" android:translateY="1.338">
+                <path android:fillColor="#2da8bb" android:pathData="M0.488 0.244A0.244 0.244 0 0 1 0 0.244A0.244 0.244 0 0 1 0.488 0.244Z"/>
+            </group>
+            <group android:translateX="5.613" android:translateY="2.324">
+                <path android:fillColor="#2da8bb" android:pathData="M0.324 0.162A0.162 0.162 0 0 1 0 0.162A0.162 0.162 0 0 1 0.324 0.162Z"/>
+            </group>
+            <group android:translateX="6.916" android:translateY="0.512">
+                <path android:fillColor="#2da8bb" android:pathData="M0.652 0.326A0.326 0.326 0 0 1 0 0.326A0.326 0.326 0 0 1 0.652 0.326Z"/>
+            </group>
+            <group android:translateX="6.481" android:translateY="1.609">
+                <path android:fillColor="#2da8bb" android:pathData="M0.488 0.244A0.244 0.244 0 0 1 0 0.244A0.244 0.244 0 0 1 0.488 0.244Z"/>
+            </group>
+            <group android:translateX="6.138" android:translateY="2.525">
+                <path android:fillColor="#2da8bb" android:pathData="M0.324 0.162A0.162 0.162 0 0 1 0 0.162A0.162 0.162 0 0 1 0.324 0.162Z"/>
+            </group>
+            <group android:translateX="7.752" android:translateY="1.054">
+                <path android:fillColor="#2da8bb" android:pathData="M0.652 0.326A0.326 0.326 0 0 1 0 0.326A0.326 0.326 0 0 1 0.652 0.326Z"/>
+            </group>
+            <group android:translateX="7.115" android:translateY="2.021">
+                <path android:fillColor="#2da8bb" android:pathData="M0.488 0.244A0.244 0.244 0 0 1 0 0.244A0.244 0.244 0 0 1 0.488 0.244Z"/>
+            </group>
+            <group android:translateX="6.608" android:translateY="2.831">
+                <path android:fillColor="#2da8bb" android:pathData="M0.324 0.162A0.162 0.162 0 0 1 0 0.162A0.162 0.162 0 0 1 0.324 0.162Z"/>
+            </group>
+            <group android:translateX="8.455" android:translateY="1.758">
+                <path android:fillColor="#2da8bb" android:pathData="M0.652 0.326A0.326 0.326 0 0 1 0 0.326A0.326 0.326 0 0 1 0.652 0.326Z"/>
+            </group>
+            <group android:translateX="7.651" android:translateY="2.557">
+                <path android:fillColor="#2da8bb" android:pathData="M0.488 0.244A0.244 0.244 0 0 1 0 0.244A0.244 0.244 0 0 1 0.488 0.244Z"/>
+            </group>
+            <group android:translateX="7.005" android:translateY="3.228">
+                <path android:fillColor="#2da8bb" android:pathData="M0.324 0.162A0.162 0.162 0 0 1 0 0.162A0.162 0.162 0 0 1 0.324 0.162Z"/>
+            </group>
+            <group android:translateX="8.998" android:translateY="2.593">
+                <path android:fillColor="#2da8bb" android:pathData="M0.652 0.326A0.326 0.326 0 0 1 0 0.326A0.326 0.326 0 0 1 0.652 0.326Z"/>
+            </group>
+            <group android:translateX="8.063" android:translateY="3.192">
+                <path android:fillColor="#2da8bb" android:pathData="M0.488 0.244A0.244 0.244 0 0 1 0 0.244A0.244 0.244 0 0 1 0.488 0.244Z"/>
+            </group>
+            <group android:translateX="7.311" android:translateY="3.699">
+                <path android:fillColor="#2da8bb" android:pathData="M0.324 0.162A0.162 0.162 0 0 1 0 0.162A0.162 0.162 0 0 1 0.324 0.162Z"/>
+            </group>
+            <group android:translateX="9.354" android:translateY="3.522">
+                <path android:fillColor="#2da8bb" android:pathData="M0.652 0.326A0.326 0.326 0 0 1 0 0.326A0.326 0.326 0 0 1 0.652 0.326Z"/>
+            </group>
+            <group android:translateX="8.335" android:translateY="3.899">
+                <path android:fillColor="#2da8bb" android:pathData="M0.488 0.244A0.244 0.244 0 0 1 0 0.244A0.244 0.244 0 0 1 0.488 0.244Z"/>
+            </group>
+            <group android:translateX="7.513" android:translateY="4.223">
+                <path android:fillColor="#2da8bb" android:pathData="M0.324 0.162A0.162 0.162 0 0 1 0 0.162A0.162 0.162 0 0 1 0.324 0.162Z"/>
+            </group>
+            <group android:translateX="9.51" android:translateY="4.505">
+                <path android:fillColor="#2da8bb" android:pathData="M0.652 0.326A0.326 0.326 0 0 1 0 0.326A0.326 0.326 0 0 1 0.652 0.326Z"/>
+            </group>
+            <group android:translateX="8.453" android:translateY="4.647">
+                <path android:fillColor="#2da8bb" android:pathData="M0.488 0.244A0.244 0.244 0 0 1 0 0.244A0.244 0.244 0 0 1 0.488 0.244Z"/>
+            </group>
+            <group android:translateX="7.6" android:translateY="4.777">
+                <path android:fillColor="#2da8bb" android:pathData="M0.324 0.162A0.162 0.162 0 0 1 0 0.162A0.162 0.162 0 0 1 0.324 0.162Z"/>
+            </group>
+            <group android:translateX="9.457" android:translateY="5.5">
+                <path android:fillColor="#2da8bb" android:pathData="M0.652 0.326A0.326 0.326 0 0 1 0 0.326A0.326 0.326 0 0 1 0.652 0.326Z"/>
+            </group>
+            <group android:translateX="8.414" android:translateY="5.403">
+                <path android:fillColor="#2da8bb" android:pathData="M0.488 0.244A0.244 0.244 0 0 1 0 0.244A0.244 0.244 0 0 1 0.488 0.244Z"/>
+            </group>
+            <group android:translateX="7.571" android:translateY="5.338">
+                <path android:fillColor="#2da8bb" android:pathData="M0.324 0.162A0.162 0.162 0 0 1 0 0.162A0.162 0.162 0 0 1 0.324 0.162Z"/>
+            </group>
+            <group android:translateX="9.2" android:translateY="6.461">
+                <path android:fillColor="#2da8bb" android:pathData="M0.652 0.326A0.326 0.326 0 0 1 0 0.326A0.326 0.326 0 0 1 0.652 0.326Z"/>
+            </group>
+            <group android:translateX="8.218" android:translateY="6.135">
+                <path android:fillColor="#2da8bb" android:pathData="M0.488 0.244A0.244 0.244 0 0 1 0 0.244A0.244 0.244 0 0 1 0.488 0.244Z"/>
+            </group>
+            <group android:translateX="7.426" android:translateY="5.88">
+                <path android:fillColor="#2da8bb" android:pathData="M0.324 0.162A0.162 0.162 0 0 1 0 0.162A0.162 0.162 0 0 1 0.324 0.162Z"/>
+            </group>
+            <group android:translateX="8.748" android:translateY="7.348">
+                <path android:fillColor="#2da8bb" android:pathData="M0.652 0.326A0.326 0.326 0 0 1 0 0.326A0.326 0.326 0 0 1 0.652 0.326Z"/>
+            </group>
+            <group android:translateX="7.874" android:translateY="6.809">
+                <path android:fillColor="#2da8bb" android:pathData="M0.488 0.244A0.244 0.244 0 0 1 0 0.244A0.244 0.244 0 0 1 0.488 0.244Z"/>
+            </group>
+            <group android:translateX="7.171" android:translateY="6.381">
+                <path android:fillColor="#2da8bb" android:pathData="M0.324 0.162A0.162 0.162 0 0 1 0 0.162A0.162 0.162 0 0 1 0.324 0.162Z"/>
+            </group>
+            <group android:translateX="8.122" android:translateY="8.122">
+                <path android:fillColor="#2da8bb" android:pathData="M0.652 0.326A0.326 0.326 0 0 1 0 0.326A0.326 0.326 0 0 1 0.652 0.326Z"/>
+            </group>
+            <group android:translateX="7.397" android:translateY="7.397">
+                <path android:fillColor="#2da8bb" android:pathData="M0.488 0.244A0.244 0.244 0 0 1 0 0.244A0.244 0.244 0 0 1 0.488 0.244Z"/>
+            </group>
+            <group android:translateX="6.817" android:translateY="6.817">
+                <path android:fillColor="#2da8bb" android:pathData="M0.324 0.162A0.162 0.162 0 0 1 0 0.162A0.162 0.162 0 0 1 0.324 0.162Z"/>
+            </group>
+            <group android:translateX="5.004">
+                <path android:fillColor="#2da8bb" android:pathData="M0.652 0.326A0.326 0.326 0 0 1 0 0.326A0.326 0.326 0 0 1 0.652 0.326Z"/>
+            </group>
+            <group android:translateX="5.026" android:translateY="1.219">
+                <path android:fillColor="#2da8bb" android:pathData="M0.488 0.244A0.244 0.244 0 0 1 0 0.244A0.244 0.244 0 0 1 0.488 0.244Z"/>
+            </group>
+            <group android:translateX="5.058" android:translateY="2.236">
+                <path android:fillColor="#2da8bb" android:pathData="M0.324 0.162A0.162 0.162 0 0 1 0 0.162A0.162 0.162 0 0 1 0.324 0.162Z"/>
+            </group>
+            <group android:translateX="4.01" android:translateY="0.052">
+                <path android:fillColor="#2da8bb" android:pathData="M0.652 0.326A0.326 0.326 0 0 1 0 0.326A0.326 0.326 0 0 1 0.652 0.326Z"/>
+            </group>
+            <group android:translateX="4.27" android:translateY="1.259">
+                <path android:fillColor="#2da8bb" android:pathData="M0.488 0.244A0.244 0.244 0 0 1 0 0.244A0.244 0.244 0 0 1 0.488 0.244Z"/>
+            </group>
+            <group android:translateX="4.498" android:translateY="2.265">
+                <path android:fillColor="#2da8bb" android:pathData="M0.324 0.162A0.162 0.162 0 0 1 0 0.162A0.162 0.162 0 0 1 0.324 0.162Z"/>
+            </group>
+            <group android:translateX="3.048" android:translateY="0.31">
+                <path android:fillColor="#2da8bb" android:pathData="M0.652 0.326A0.326 0.326 0 0 1 0 0.326A0.326 0.326 0 0 1 0.652 0.326Z"/>
+            </group>
+            <group android:translateX="3.538" android:translateY="1.455">
+                <path android:fillColor="#2da8bb" android:pathData="M0.488 0.244A0.244 0.244 0 0 1 0 0.244A0.244 0.244 0 0 1 0.488 0.244Z"/>
+            </group>
+            <group android:translateX="3.955" android:translateY="2.41">
+                <path android:fillColor="#2da8bb" android:pathData="M0.324 0.162A0.162 0.162 0 0 1 0 0.162A0.162 0.162 0 0 1 0.324 0.162Z"/>
+            </group>
+            <group android:translateX="2.161" android:translateY="0.761">
+                <path android:fillColor="#2da8bb" android:pathData="M0.652 0.326A0.326 0.326 0 0 1 0 0.326A0.326 0.326 0 0 1 0.652 0.326Z"/>
+            </group>
+            <group android:translateX="2.864" android:translateY="1.799">
+                <path android:fillColor="#2da8bb" android:pathData="M0.488 0.244A0.244 0.244 0 0 1 0 0.244A0.244 0.244 0 0 1 0.488 0.244Z"/>
+            </group>
+            <group android:translateX="3.455" android:translateY="2.665">
+                <path android:fillColor="#2da8bb" android:pathData="M0.324 0.162A0.162 0.162 0 0 1 0 0.162A0.162 0.162 0 0 1 0.324 0.162Z"/>
+            </group>
+            <group android:translateX="1.388" android:translateY="1.388">
+                <path android:fillColor="#2da8bb" android:pathData="M0.652 0.326A0.326 0.326 0 0 1 0 0.326A0.326 0.326 0 0 1 0.652 0.326Z"/>
+            </group>
+            <group android:translateX="2.275" android:translateY="2.276">
+                <path android:fillColor="#2da8bb" android:pathData="M0.488 0.244A0.244 0.244 0 0 1 0 0.244A0.244 0.244 0 0 1 0.488 0.244Z"/>
+            </group>
+            <group android:translateX="3.019" android:translateY="3.019">
+                <path android:fillColor="#2da8bb" android:pathData="M0.324 0.162A0.162 0.162 0 0 1 0 0.162A0.162 0.162 0 0 1 0.324 0.162Z"/>
+            </group>
+            <group android:translateX="0.761" android:translateY="2.161">
+                <path android:fillColor="#2da8bb" android:pathData="M0.652 0.326A0.326 0.326 0 0 1 0 0.326A0.326 0.326 0 0 1 0.652 0.326Z"/>
+            </group>
+            <group android:translateX="1.798" android:translateY="2.864">
+                <path android:fillColor="#2da8bb" android:pathData="M0.488 0.244A0.244 0.244 0 0 1 0 0.244A0.244 0.244 0 0 1 0.488 0.244Z"/>
+            </group>
+            <group android:translateX="2.665" android:translateY="3.455">
+                <path android:fillColor="#2da8bb" android:pathData="M0.324 0.162A0.162 0.162 0 0 1 0 0.162A0.162 0.162 0 0 1 0.324 0.162Z"/>
+            </group>
+            <group android:translateX="0.31" android:translateY="3.049">
+                <path android:fillColor="#2da8bb" android:pathData="M0.652 0.326A0.326 0.326 0 0 1 0 0.326A0.326 0.326 0 0 1 0.652 0.326Z"/>
+            </group>
+            <group android:translateX="1.455" android:translateY="3.538">
+                <path android:fillColor="#2da8bb" android:pathData="M0.488 0.244A0.244 0.244 0 0 1 0 0.244A0.244 0.244 0 0 1 0.488 0.244Z"/>
+            </group>
+            <group android:translateX="2.41" android:translateY="3.955">
+                <path android:fillColor="#2da8bb" android:pathData="M0.324 0.162A0.162 0.162 0 0 1 0 0.162A0.162 0.162 0 0 1 0.324 0.162Z"/>
+            </group>
+            <group android:translateX="0.052" android:translateY="4.01">
+                <path android:fillColor="#2da8bb" android:pathData="M0.652 0.326A0.326 0.326 0 0 1 0 0.326A0.326 0.326 0 0 1 0.652 0.326Z"/>
+            </group>
+            <group android:translateX="1.259" android:translateY="4.27">
+                <path android:fillColor="#2da8bb" android:pathData="M0.488 0.244A0.244 0.244 0 0 1 0 0.244A0.244 0.244 0 0 1 0.488 0.244Z"/>
+            </group>
+            <group android:translateX="2.265" android:translateY="4.498">
+                <path android:fillColor="#2da8bb" android:pathData="M0.324 0.162A0.162 0.162 0 0 1 0 0.162A0.162 0.162 0 0 1 0.324 0.162Z"/>
+            </group>
+            <group android:translateY="5.004">
+                <path android:fillColor="#2da8bb" android:pathData="M0.652 0.326A0.326 0.326 0 0 1 0 0.326A0.326 0.326 0 0 1 0.652 0.326Z"/>
+            </group>
+            <group android:translateX="1.219" android:translateY="5.026">
+                <path android:fillColor="#2da8bb" android:pathData="M0.488 0.244A0.244 0.244 0 0 1 0 0.244A0.244 0.244 0 0 1 0.488 0.244Z"/>
+            </group>
+            <group android:translateX="2.236" android:translateY="5.058">
+                <path android:fillColor="#2da8bb" android:pathData="M0.324 0.162A0.162 0.162 0 0 1 0 0.162A0.162 0.162 0 0 1 0.324 0.162Z"/>
+            </group>
+            <group android:translateX="0.155" android:translateY="5.987">
+                <path android:fillColor="#2da8bb" android:pathData="M0.652 0.326A0.326 0.326 0 0 1 0 0.326A0.326 0.326 0 0 1 0.652 0.326Z"/>
+            </group>
+            <group android:translateX="1.338" android:translateY="5.774">
+                <path android:fillColor="#2da8bb" android:pathData="M0.488 0.244A0.244 0.244 0 0 1 0 0.244A0.244 0.244 0 0 1 0.488 0.244Z"/>
+            </group>
+            <group android:translateX="2.324" android:translateY="5.613">
+                <path android:fillColor="#2da8bb" android:pathData="M0.324 0.162A0.162 0.162 0 0 1 0 0.162A0.162 0.162 0 0 1 0.324 0.162Z"/>
+            </group>
+        </group>
+    </group>
+</vector>

+ 7 - 0
app/src/main/res/drawable-anydpi-v21/scaner.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:aapt="http://schemas.android.com/aapt" android:height="31.97dp" android:width="32dp" android:viewportWidth="32" android:viewportHeight="31.97">
+    <path android:fillColor="#000000" android:pathData="M0.88 0.871h5.456V0H0.005v6.327H0.88z"/>
+    <path android:fillColor="#000000" android:pathData="M25.672 0v0.871h5.457v5.456H32V0z"/>
+    <path android:fillColor="#000000" android:pathData="M0.871 25.641H0v6.327h6.327v-0.871H0.871z"/>
+    <path android:fillColor="#000000" android:pathData="M31.12 31.1h-5.457v0.871h6.328v-6.33h-0.871z"/>
+</vector>

+ 4 - 0
app/src/main/res/drawable-anydpi-v21/share_24_px.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:aapt="http://schemas.android.com/aapt" android:height="24dp" android:width="24dp" android:viewportWidth="24" android:viewportHeight="24">
+    <path android:fillColor="#2da8bb" android:pathData="M18 16.08a2.912 2.912 0 0 0 -1.96 0.77L8.91 12.7A3.274 3.274 0 0 0 9 12a3.274 3.274 0 0 0 -0.09 -0.7l7.05 -4.11A2.993 2.993 0 1 0 15 5a3.274 3.274 0 0 0 0.09 0.7L8.04 9.81a3 3 0 1 0 0 4.38l7.12 4.16a2.821 2.821 0 0 0 -0.08 0.65A2.92 2.92 0 1 0 18 16.08z"/>
+</vector>

+ 7 - 0
app/src/main/res/drawable-anydpi-v21/vine.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:aapt="http://schemas.android.com/aapt" android:height="24dp" android:width="24dp" android:viewportWidth="24" android:viewportHeight="24">
+    <path android:fillColor="#01b488" android:pathData="M0 0H24V24H0z"/>
+    <group android:translateX="-88.407" android:translateY="-67.14">
+        <path android:fillColor="#ffffff" android:pathData="M102.2 76.856c-0.039 -0.367 -0.237 -2.043 0.789 -2.043s0.454 2.663 0.454 2.663h1.715a6.6 6.6 0 0 0 0.2 -1.653c0 -2.158 -1.322 -2.916 -2.25 -2.916s-2.625 0.436 -2.625 3.444a4.192 4.192 0 0 0 1.993 3.949 14.786 14.786 0 0 1 -1.895 3.076c-2.487 -3.26 -2.822 -8.609 -2.822 -8.609l-1.759 0.06c1.154 10.123 4.581 10.545 4.581 10.545 1.52 -0.292 3.453 -4.591 3.453 -4.591a6.03 6.03 0 0 0 1.283 -0.184v-1.492c-2.584 0.666 -3.077 -1.882 -3.117 -2.249z"/>
+    </group>
+</vector>

BIN
app/src/main/res/drawable-hdpi/background.png


BIN
app/src/main/res/drawable-hdpi/check_mark.png


BIN
app/src/main/res/drawable-hdpi/delete_24_px.png


BIN
app/src/main/res/drawable-hdpi/design_ic_visibility.png


BIN
app/src/main/res/drawable-hdpi/design_ic_visibility_off.png


BIN
app/src/main/res/drawable-hdpi/ic_done_icon.png


BIN
app/src/main/res/drawable-hdpi/ic_icon_with_dragon.png


BIN
app/src/main/res/drawable-hdpi/logo.png


BIN
app/src/main/res/drawable-hdpi/one_touch_icon.png


BIN
app/src/main/res/drawable-hdpi/scaner.png


BIN
app/src/main/res/drawable-hdpi/share_24_px.png


BIN
app/src/main/res/drawable-hdpi/splash.png


BIN
app/src/main/res/drawable-hdpi/vine.png


BIN
app/src/main/res/drawable-ldpi/background.png


BIN
app/src/main/res/drawable-ldpi/check_mark.png


BIN
app/src/main/res/drawable-ldpi/delete_24_px.png


BIN
app/src/main/res/drawable-ldpi/ic_done_icon.png


BIN
app/src/main/res/drawable-ldpi/ic_icon_with_dragon.png


BIN
app/src/main/res/drawable-ldpi/logo.png


BIN
app/src/main/res/drawable-ldpi/one_touch_icon.png


BIN
app/src/main/res/drawable-ldpi/scaner.png


BIN
app/src/main/res/drawable-ldpi/share_24_px.png


BIN
app/src/main/res/drawable-ldpi/splash.png


BIN
app/src/main/res/drawable-ldpi/vine.png


BIN
app/src/main/res/drawable-xhdpi/background.png


BIN
app/src/main/res/drawable-xhdpi/check_mark.png


BIN
app/src/main/res/drawable-xhdpi/delete_24_px.png


BIN
app/src/main/res/drawable-xhdpi/design_ic_visibility.png


BIN
app/src/main/res/drawable-xhdpi/design_ic_visibility_off.png


BIN
app/src/main/res/drawable-xhdpi/ic_done_icon.png


BIN
app/src/main/res/drawable-xhdpi/ic_icon_with_dragon.png


BIN
app/src/main/res/drawable-xhdpi/logo.png


BIN
app/src/main/res/drawable-xhdpi/one_touch_icon.png


BIN
app/src/main/res/drawable-xhdpi/scaner.png


BIN
app/src/main/res/drawable-xhdpi/share_24_px.png


BIN
app/src/main/res/drawable-xhdpi/splash.png


BIN
app/src/main/res/drawable-xhdpi/vine.png


BIN
app/src/main/res/drawable-xxhdpi/background.png


BIN
app/src/main/res/drawable-xxhdpi/check_mark.png


BIN
app/src/main/res/drawable-xxhdpi/delete_24_px.png


BIN
app/src/main/res/drawable-xxhdpi/design_ic_visibility.png


BIN
app/src/main/res/drawable-xxhdpi/design_ic_visibility_off.png


BIN
app/src/main/res/drawable-xxhdpi/ic_done_icon.png


BIN
app/src/main/res/drawable-xxhdpi/ic_icon_with_dragon.png


BIN
app/src/main/res/drawable-xxhdpi/logo.png


BIN
app/src/main/res/drawable-xxhdpi/one_touch_icon.png


BIN
app/src/main/res/drawable-xxhdpi/scaner.png


BIN
app/src/main/res/drawable-xxhdpi/share_24_px.png


BIN
app/src/main/res/drawable-xxhdpi/splash.png


BIN
app/src/main/res/drawable-xxhdpi/vine.png


BIN
app/src/main/res/drawable-xxxhdpi/background.png


BIN
app/src/main/res/drawable-xxxhdpi/check_mark.png


BIN
app/src/main/res/drawable-xxxhdpi/delete_24_px.png


BIN
app/src/main/res/drawable-xxxhdpi/design_ic_visibility.png


BIN
app/src/main/res/drawable-xxxhdpi/design_ic_visibility_off.png


BIN
app/src/main/res/drawable-xxxhdpi/ic_done_icon.png


BIN
app/src/main/res/drawable-xxxhdpi/ic_icon_with_dragon.png


Some files were not shown because too many files changed in this diff