├── settings.gradle ├── app ├── src │ └── main │ │ ├── res │ │ ├── drawable │ │ │ ├── ic_italy.png │ │ │ ├── header_day.png │ │ │ ├── ic_poland.png │ │ │ ├── header_night.png │ │ │ ├── about_javiertoro.png │ │ │ └── about_javiersantos.png │ │ ├── drawable-hdpi │ │ │ ├── ic_send.png │ │ │ ├── ic_sort.png │ │ │ ├── ic_star.png │ │ │ ├── ic_android.png │ │ │ ├── ic_archive.png │ │ │ ├── ic_delete.png │ │ │ ├── ic_person.png │ │ │ ├── ic_search.png │ │ │ ├── ic_settings.png │ │ │ ├── ic_lock_open.png │ │ │ ├── ic_visibility.png │ │ │ ├── ic_filter_list.png │ │ │ ├── ic_lock_outline.png │ │ │ ├── ic_open_in_new.png │ │ │ ├── ic_remove_circle.png │ │ │ ├── ic_star_border.png │ │ │ ├── ic_account_circle.png │ │ │ ├── ic_visibility_off.png │ │ │ └── ic_remove_circle_outline.png │ │ ├── drawable-mdpi │ │ │ ├── ic_send.png │ │ │ ├── ic_sort.png │ │ │ ├── ic_star.png │ │ │ ├── ic_android.png │ │ │ ├── ic_archive.png │ │ │ ├── ic_delete.png │ │ │ ├── ic_person.png │ │ │ ├── ic_search.png │ │ │ ├── ic_settings.png │ │ │ ├── ic_lock_open.png │ │ │ ├── ic_visibility.png │ │ │ ├── ic_filter_list.png │ │ │ ├── ic_lock_outline.png │ │ │ ├── ic_open_in_new.png │ │ │ ├── ic_remove_circle.png │ │ │ ├── ic_star_border.png │ │ │ ├── ic_account_circle.png │ │ │ ├── ic_visibility_off.png │ │ │ └── ic_remove_circle_outline.png │ │ ├── drawable-xhdpi │ │ │ ├── ic_send.png │ │ │ ├── ic_sort.png │ │ │ ├── ic_star.png │ │ │ ├── ic_android.png │ │ │ ├── ic_archive.png │ │ │ ├── ic_delete.png │ │ │ ├── ic_person.png │ │ │ ├── ic_search.png │ │ │ ├── ic_lock_open.png │ │ │ ├── ic_settings.png │ │ │ ├── ic_filter_list.png │ │ │ ├── ic_lock_outline.png │ │ │ ├── ic_open_in_new.png │ │ │ ├── ic_star_border.png │ │ │ ├── ic_visibility.png │ │ │ ├── ic_account_circle.png │ │ │ ├── ic_remove_circle.png │ │ │ ├── ic_visibility_off.png │ │ │ └── ic_remove_circle_outline.png │ │ ├── drawable-xxhdpi │ │ │ ├── ic_delete.png │ │ │ ├── ic_person.png │ │ │ ├── ic_search.png │ │ │ ├── ic_send.png │ │ │ ├── ic_sort.png │ │ │ ├── ic_star.png │ │ │ ├── ic_android.png │ │ │ ├── ic_archive.png │ │ │ ├── ic_settings.png │ │ │ ├── ic_filter_list.png │ │ │ ├── ic_lock_open.png │ │ │ ├── ic_open_in_new.png │ │ │ ├── ic_star_border.png │ │ │ ├── ic_visibility.png │ │ │ ├── ic_lock_outline.png │ │ │ ├── ic_remove_circle.png │ │ │ ├── ic_account_circle.png │ │ │ ├── ic_visibility_off.png │ │ │ └── ic_remove_circle_outline.png │ │ ├── drawable-xxxhdpi │ │ │ ├── ic_send.png │ │ │ ├── ic_sort.png │ │ │ ├── ic_star.png │ │ │ ├── ic_android.png │ │ │ ├── ic_archive.png │ │ │ ├── ic_delete.png │ │ │ ├── ic_person.png │ │ │ ├── ic_search.png │ │ │ ├── ic_lock_open.png │ │ │ ├── ic_settings.png │ │ │ ├── ic_visibility.png │ │ │ ├── ic_filter_list.png │ │ │ ├── ic_lock_outline.png │ │ │ ├── ic_open_in_new.png │ │ │ ├── ic_star_border.png │ │ │ ├── ic_account_circle.png │ │ │ ├── ic_remove_circle.png │ │ │ ├── ic_visibility_off.png │ │ │ └── ic_remove_circle_outline.png │ │ ├── mipmap-hdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ │ └── ic_launcher.png │ │ ├── xml │ │ │ ├── search.xml │ │ │ └── settings.xml │ │ ├── anim │ │ │ ├── slide_in_right.xml │ │ │ ├── slide_out_right.xml │ │ │ ├── fade_back.xml │ │ │ └── fade_forward.xml │ │ ├── layout │ │ │ ├── view_toolbar.xml │ │ │ ├── activity_settings.xml │ │ │ ├── view_information.xml │ │ │ ├── view_quick_actions.xml │ │ │ ├── view_button.xml │ │ │ ├── activity_main.xml │ │ │ ├── view_button_switch.xml │ │ │ ├── activity_storage.xml │ │ │ ├── activity_app.xml │ │ │ ├── adapter_app.xml │ │ │ └── activity_about.xml │ │ ├── values-w820dp │ │ │ └── dimens.xml │ │ ├── menu │ │ │ ├── menu_app.xml │ │ │ └── menu_main.xml │ │ ├── values │ │ │ ├── dimens.xml │ │ │ ├── arrays.xml │ │ │ ├── colors.xml │ │ │ ├── styles.xml │ │ │ └── strings.xml │ │ ├── values-v21 │ │ │ └── styles.xml │ │ ├── values-pl │ │ │ └── strings.xml │ │ ├── values-ja │ │ │ └── strings.xml │ │ ├── values-pt │ │ │ └── strings.xml │ │ ├── values-es │ │ │ └── strings.xml │ │ ├── values-zh-rTW │ │ │ └── strings.xml │ │ ├── values-ro │ │ │ └── strings.xml │ │ ├── values-ru │ │ │ └── strings.xml │ │ └── values-it │ │ │ └── strings.xml │ │ ├── java │ │ └── com │ │ │ └── dkanada │ │ │ └── openapk │ │ │ ├── interfaces │ │ │ └── PackageStatsListener.java │ │ │ ├── views │ │ │ ├── InformationView.java │ │ │ ├── ButtonSwitchView.java │ │ │ └── ButtonView.java │ │ │ ├── activities │ │ │ ├── ThemeActivity.java │ │ │ ├── SettingsActivity.java │ │ │ ├── AboutActivity.java │ │ │ ├── StorageActivity.java │ │ │ └── AppActivity.java │ │ │ ├── App.java │ │ │ ├── async │ │ │ ├── DeleteFileAsync.java │ │ │ └── CopyFileAsync.java │ │ │ ├── utils │ │ │ ├── PackageList.java │ │ │ ├── PackageStatsHelper.java │ │ │ ├── DialogUtils.java │ │ │ ├── AppPreferences.java │ │ │ ├── FileOperations.java │ │ │ ├── ShellCommands.java │ │ │ ├── OtherUtils.java │ │ │ └── Actions.java │ │ │ ├── models │ │ │ └── AppItem.java │ │ │ ├── fragments │ │ │ └── SettingsFragment.java │ │ │ └── adapters │ │ │ └── AppAdapter.java │ │ ├── aidl │ │ └── android │ │ │ └── content │ │ │ └── pm │ │ │ ├── PackageStats.aidl │ │ │ └── IPackageStatsObserver.aidl │ │ └── AndroidManifest.xml └── build.gradle ├── .gitignore ├── docs └── launcher.svg ├── README.md └── CHANGELOG.md /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_italy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable/ic_italy.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/header_day.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable/header_day.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_poland.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable/ic_poland.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_send.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-hdpi/ic_send.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_sort.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-hdpi/ic_sort.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-hdpi/ic_star.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_send.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-mdpi/ic_send.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_sort.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-mdpi/ic_sort.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-mdpi/ic_star.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_send.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xhdpi/ic_send.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_sort.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xhdpi/ic_sort.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xhdpi/ic_star.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/header_night.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable/header_night.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_android.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-hdpi/ic_android.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_archive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-hdpi/ic_archive.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-hdpi/ic_delete.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_person.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-hdpi/ic_person.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-hdpi/ic_search.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-hdpi/ic_settings.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_android.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-mdpi/ic_android.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_archive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-mdpi/ic_archive.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-mdpi/ic_delete.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_person.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-mdpi/ic_person.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-mdpi/ic_search.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-mdpi/ic_settings.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_android.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xhdpi/ic_android.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_archive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xhdpi/ic_archive.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xhdpi/ic_delete.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_person.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xhdpi/ic_person.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xhdpi/ic_search.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxhdpi/ic_delete.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_person.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxhdpi/ic_person.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxhdpi/ic_search.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_send.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxhdpi/ic_send.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_sort.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxhdpi/ic_sort.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxhdpi/ic_star.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_send.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxxhdpi/ic_send.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_sort.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxxhdpi/ic_sort.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxxhdpi/ic_star.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/about_javiertoro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable/about_javiertoro.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_lock_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-hdpi/ic_lock_open.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_visibility.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-hdpi/ic_visibility.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_lock_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-mdpi/ic_lock_open.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_visibility.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-mdpi/ic_visibility.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_lock_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xhdpi/ic_lock_open.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xhdpi/ic_settings.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_android.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxhdpi/ic_android.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_archive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxhdpi/ic_archive.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxhdpi/ic_settings.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_android.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxxhdpi/ic_android.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_archive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxxhdpi/ic_archive.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxxhdpi/ic_delete.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_person.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxxhdpi/ic_person.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxxhdpi/ic_search.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/about_javiersantos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable/about_javiersantos.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_filter_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-hdpi/ic_filter_list.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_lock_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-hdpi/ic_lock_outline.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_open_in_new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-hdpi/ic_open_in_new.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_remove_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-hdpi/ic_remove_circle.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_star_border.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-hdpi/ic_star_border.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_filter_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-mdpi/ic_filter_list.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_lock_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-mdpi/ic_lock_outline.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_open_in_new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-mdpi/ic_open_in_new.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_remove_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-mdpi/ic_remove_circle.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_star_border.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-mdpi/ic_star_border.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_filter_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xhdpi/ic_filter_list.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_lock_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xhdpi/ic_lock_outline.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_open_in_new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xhdpi/ic_open_in_new.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_star_border.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xhdpi/ic_star_border.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_visibility.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xhdpi/ic_visibility.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_filter_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxhdpi/ic_filter_list.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_lock_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxhdpi/ic_lock_open.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_open_in_new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxhdpi/ic_open_in_new.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_star_border.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxhdpi/ic_star_border.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_visibility.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxhdpi/ic_visibility.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_lock_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxxhdpi/ic_lock_open.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxxhdpi/ic_settings.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_visibility.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxxhdpi/ic_visibility.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_account_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-hdpi/ic_account_circle.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_visibility_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-hdpi/ic_visibility_off.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_account_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-mdpi/ic_account_circle.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_visibility_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-mdpi/ic_visibility_off.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_account_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xhdpi/ic_account_circle.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_remove_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xhdpi/ic_remove_circle.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_visibility_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xhdpi/ic_visibility_off.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_lock_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxhdpi/ic_lock_outline.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_remove_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxhdpi/ic_remove_circle.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_filter_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxxhdpi/ic_filter_list.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_lock_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxxhdpi/ic_lock_outline.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_open_in_new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxxhdpi/ic_open_in_new.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_star_border.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxxhdpi/ic_star_border.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_account_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxhdpi/ic_account_circle.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_visibility_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxhdpi/ic_visibility_off.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_account_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxxhdpi/ic_account_circle.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_remove_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxxhdpi/ic_remove_circle.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_visibility_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxxhdpi/ic_visibility_off.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_remove_circle_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-hdpi/ic_remove_circle_outline.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_remove_circle_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-mdpi/ic_remove_circle_outline.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_remove_circle_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xhdpi/ic_remove_circle_outline.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_remove_circle_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxhdpi/ic_remove_circle_outline.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_remove_circle_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dkanada/openapk/HEAD/app/src/main/res/drawable-xxxhdpi/ic_remove_circle_outline.png -------------------------------------------------------------------------------- /app/src/main/res/xml/search.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/java/com/dkanada/openapk/interfaces/PackageStatsListener.java: -------------------------------------------------------------------------------- 1 | package com.dkanada.openapk.interfaces; 2 | 3 | import android.content.pm.PackageStats; 4 | 5 | public interface PackageStatsListener { 6 | void onPackageStats(PackageStats packageStats); 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_in_right.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_out_right.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | *.apk 3 | *.class 4 | *.db 5 | *.log 6 | *.dex 7 | *.pro 8 | *.yml 9 | 10 | bin/ 11 | build/ 12 | gen/ 13 | proguard/ 14 | androidTest/ 15 | test/ 16 | gradle/ 17 | 18 | .idea/ 19 | .externalNativeBuild/ 20 | .gradle/ 21 | 22 | local.properties 23 | gradle.properties 24 | gradlew 25 | gradlew.bat 26 | -------------------------------------------------------------------------------- /docs/launcher.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/layout/view_toolbar.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_app.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 16dp 5 | 16dp 6 | 7 | 8 | 16dp 9 | 20dp 10 | 22dp 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_main.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/values-v21/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/anim/fade_back.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/anim/fade_forward.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_settings.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 9 | 10 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/aidl/android/content/pm/PackageStats.aidl: -------------------------------------------------------------------------------- 1 | /* //device/java/android/android/view/WindowManager.aidl 2 | ** 3 | ** Copyright 2007, The Android Open Source Project 4 | ** 5 | ** Licensed under the Apache License, Version 2.0 (the "License"); 6 | ** you may not use this file except in compliance with the License. 7 | ** You may obtain a copy of the License at 8 | ** 9 | ** http://www.apache.org/licenses/LICENSE-2.0 10 | ** 11 | ** Unless required by applicable law or agreed to in writing, software 12 | ** distributed under the License is distributed on an "AS IS" BASIS, 13 | ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | ** See the License for the specific language governing permissions and 15 | ** limitations under the License. 16 | */ 17 | 18 | package android.content.pm; 19 | 20 | parcelable PackageStats; 21 | -------------------------------------------------------------------------------- /app/src/main/aidl/android/content/pm/IPackageStatsObserver.aidl: -------------------------------------------------------------------------------- 1 | /* 2 | ** 3 | ** Copyright 2007, The Android Open Source Project 4 | ** 5 | ** Licensed under the Apache License, Version 2.0 (the "License"); 6 | ** you may not use this file except in compliance with the License. 7 | ** You may obtain a copy of the License at 8 | ** 9 | ** http://www.apache.org/licenses/LICENSE-2.0 10 | ** 11 | ** Unless required by applicable law or agreed to in writing, software 12 | ** distributed under the License is distributed on an "AS IS" BASIS, 13 | ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | ** See the License for the specific language governing permissions and 15 | ** limitations under the License. 16 | */ 17 | 18 | package android.content.pm; 19 | 20 | import android.content.pm.PackageStats; 21 | 22 | /** 23 | * API for package data change related callbacks from the Package Manager. 24 | * Some usage scenarios include deletion of cache directory, generate 25 | * statistics related to code, data, cache usage(TODO) 26 | * {@hide} 27 | */ 28 | 29 | oneway interface IPackageStatsObserver { 30 | void onGetStatsCompleted(in PackageStats pStats, boolean succeeded); 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/res/layout/view_information.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 18 | 19 | 31 | 32 | -------------------------------------------------------------------------------- /app/src/main/res/values/arrays.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | @string/layout_package 6 | @string/layout_label 7 | 8 | 9 | 10 | 0 11 | 1 12 | 13 | 14 | 15 | @string/layout_label 16 | @string/layout_package 17 | @string/layout_install 18 | @string/layout_update 19 | 20 | 21 | 22 | 0 23 | 1 24 | 2 25 | 3 26 | 27 | 28 | 29 | @string/light 30 | @string/dark 31 | 32 | 33 | 34 | 0 35 | 1 36 | 37 | 38 | -------------------------------------------------------------------------------- /app/src/main/java/com/dkanada/openapk/views/InformationView.java: -------------------------------------------------------------------------------- 1 | package com.dkanada.openapk.views; 2 | 3 | import android.content.Context; 4 | import android.view.LayoutInflater; 5 | import android.view.View; 6 | import android.widget.RelativeLayout; 7 | import android.widget.TextView; 8 | 9 | import com.dkanada.openapk.App; 10 | import com.dkanada.openapk.R; 11 | 12 | public class InformationView extends RelativeLayout { 13 | public InformationView(Context context, String title, String summary, boolean alternate) { 14 | super(context); 15 | 16 | LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 17 | View view = inflater.inflate(R.layout.view_information, null); 18 | addView(view); 19 | 20 | TextView titleView = (TextView) view.findViewById(R.id.title); 21 | TextView summaryView = (TextView) view.findViewById(R.id.summary); 22 | titleView.setText(title); 23 | summaryView.setText(summary); 24 | 25 | if (App.getAppPreferences().getTheme().equals("0") && alternate) { 26 | setBackgroundColor(getResources().getColor(R.color.grey_one)); 27 | } else if (alternate) { 28 | setBackgroundColor(getResources().getColor(R.color.grey_three)); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/java/com/dkanada/openapk/activities/ThemeActivity.java: -------------------------------------------------------------------------------- 1 | package com.dkanada.openapk.activities; 2 | 3 | import android.content.Intent; 4 | import android.os.Bundle; 5 | import android.support.v7.app.AppCompatActivity; 6 | 7 | import com.dkanada.openapk.App; 8 | import com.dkanada.openapk.R; 9 | import com.dkanada.openapk.utils.AppPreferences; 10 | 11 | public abstract class ThemeActivity extends AppCompatActivity { 12 | 13 | private AppPreferences appPreferences; 14 | private String currentTheme; 15 | 16 | @Override 17 | protected void onCreate(Bundle savedInstanceState) { 18 | appPreferences = App.getAppPreferences(); 19 | currentTheme = appPreferences.getTheme(); 20 | if (appPreferences.getTheme().equals("0")) { 21 | setTheme(R.style.Light); 22 | } else { 23 | setTheme(R.style.Dark); 24 | setTheme(R.style.DrawerDark); 25 | } 26 | super.onCreate(savedInstanceState); 27 | } 28 | 29 | @Override 30 | protected void onResume() { 31 | super.onResume(); 32 | if (!appPreferences.getTheme().equals(currentTheme)) { 33 | restart(); 34 | } 35 | } 36 | 37 | protected void restart() { 38 | Intent intent = new Intent(this, getClass()); 39 | intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 40 | overridePendingTransition(0, 0); 41 | startActivity(intent); 42 | } 43 | } -------------------------------------------------------------------------------- /app/src/main/java/com/dkanada/openapk/App.java: -------------------------------------------------------------------------------- 1 | package com.dkanada.openapk; 2 | 3 | import android.app.Application; 4 | import android.content.pm.PackageInfo; 5 | import android.content.pm.PackageManager; 6 | import android.graphics.drawable.Drawable; 7 | 8 | import com.dkanada.openapk.utils.AppPreferences; 9 | import com.mikepenz.google_material_typeface_library.GoogleMaterial; 10 | import com.mikepenz.iconics.Iconics; 11 | 12 | public class App extends Application { 13 | private static AppPreferences appPreferences; 14 | private static PackageManager packageManager; 15 | private static int currentAdapter; 16 | 17 | @Override 18 | public void onCreate() { 19 | super.onCreate(); 20 | 21 | // set fields 22 | appPreferences = new AppPreferences(this); 23 | packageManager = getPackageManager(); 24 | currentAdapter = 0; 25 | 26 | // register custom fonts 27 | Iconics.registerFont(new GoogleMaterial()); 28 | } 29 | 30 | public static AppPreferences getAppPreferences() { 31 | return appPreferences; 32 | } 33 | 34 | public static String getPackageName(PackageInfo packageInfo) { 35 | return packageManager.getApplicationLabel(packageInfo.applicationInfo).toString(); 36 | } 37 | 38 | public static Drawable getPackageIcon(PackageInfo packageInfo) { 39 | return packageManager.getApplicationIcon(packageInfo.applicationInfo); 40 | } 41 | 42 | public static int getCurrentAdapter() { 43 | return currentAdapter; 44 | } 45 | 46 | public static void setCurrentAdapter(int value) { 47 | currentAdapter = value; 48 | } 49 | } -------------------------------------------------------------------------------- /app/src/main/java/com/dkanada/openapk/views/ButtonSwitchView.java: -------------------------------------------------------------------------------- 1 | package com.dkanada.openapk.views; 2 | 3 | import android.content.Context; 4 | import android.support.constraint.ConstraintLayout; 5 | import android.view.LayoutInflater; 6 | import android.view.View; 7 | import android.widget.LinearLayout; 8 | import android.widget.TextView; 9 | 10 | import com.dkanada.openapk.App; 11 | import com.dkanada.openapk.R; 12 | 13 | public class ButtonSwitchView extends ConstraintLayout { 14 | public ButtonSwitchView(Context context, String title, String summary, View object) { 15 | super(context); 16 | 17 | LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 18 | View view = inflater.inflate(R.layout.view_button_switch, null); 19 | addView(view); 20 | 21 | LinearLayout container = (LinearLayout) findViewById(R.id.container); 22 | container.addView(object); 23 | 24 | TextView titleView = (TextView) view.findViewById(R.id.title); 25 | TextView summaryView = (TextView) view.findViewById(R.id.summary); 26 | titleView.setText(title); 27 | if (summary == null) { 28 | summaryView.setVisibility(GONE); 29 | } else { 30 | summaryView.setText(summary); 31 | } 32 | 33 | View divider = findViewById(R.id.divider); 34 | if (App.getAppPreferences().getTheme().equals("0")) { 35 | divider.setBackgroundColor(getResources().getColor(R.color.grey_one)); 36 | } else { 37 | divider.setBackgroundColor(getResources().getColor(R.color.grey_three)); 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /app/src/main/java/com/dkanada/openapk/async/DeleteFileAsync.java: -------------------------------------------------------------------------------- 1 | package com.dkanada.openapk.async; 2 | 3 | import android.content.Context; 4 | import android.os.AsyncTask; 5 | 6 | import com.afollestad.materialdialogs.MaterialDialog; 7 | import com.dkanada.openapk.R; 8 | import com.dkanada.openapk.utils.DialogUtils; 9 | import com.dkanada.openapk.utils.OtherUtils; 10 | import com.dkanada.openapk.utils.ShellCommands; 11 | 12 | public class DeleteFileAsync extends AsyncTask { 13 | private Context context; 14 | private MaterialDialog dialog; 15 | private String source; 16 | 17 | public DeleteFileAsync(Context context, MaterialDialog dialog, String source) { 18 | this.context = context; 19 | this.dialog = dialog; 20 | this.source = source; 21 | } 22 | 23 | @Override 24 | protected Boolean doInBackground(Void... voids) { 25 | Boolean status = false; 26 | if (OtherUtils.checkPermissions(context) && ShellCommands.isRoot()) { 27 | status = ShellCommands.rmDataPartition(source); 28 | } 29 | return status; 30 | } 31 | 32 | @Override 33 | protected void onPostExecute(Boolean status) { 34 | super.onPostExecute(status); 35 | dialog.dismiss(); 36 | if (!ShellCommands.isRoot()) { 37 | DialogUtils.dialogMessage(context, context.getResources().getString(R.string.dialog_root_required), context.getResources().getString(R.string.dialog_root_required_description)); 38 | } else if (!status) { 39 | DialogUtils.toastMessage(context, context.getResources().getString(R.string.error_generic)); 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #3F51B5 5 | #303F9F 6 | #1976D2 7 | 8 | #212121 9 | #FAFAFA 10 | 11 | #E0E0E0 12 | #424242 13 | 14 | #FFFFFF 15 | #00BED4 16 | #8CC24A 17 | #DE6262 18 | #FF7043 19 | #BDBDBD 20 | #616161 21 | #424242 22 | #212121 23 | 24 | 25 | @color/text_dark 26 | @color/text_dark 27 | @color/text_dark 28 | @color/text_dark 29 | @color/grey_two 30 | 31 | 32 | @color/md_dark_background 33 | @color/grey_four 34 | @color/text_dark 35 | @color/md_dark_background 36 | 37 | -------------------------------------------------------------------------------- /app/src/main/res/layout/view_quick_actions.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 15 | 16 | 23 | 24 | 31 | 32 | 39 | 40 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /app/src/main/java/com/dkanada/openapk/async/CopyFileAsync.java: -------------------------------------------------------------------------------- 1 | package com.dkanada.openapk.async; 2 | 3 | import android.content.Context; 4 | import android.os.AsyncTask; 5 | 6 | import com.afollestad.materialdialogs.MaterialDialog; 7 | import com.dkanada.openapk.R; 8 | import com.dkanada.openapk.utils.DialogUtils; 9 | import com.dkanada.openapk.utils.OtherUtils; 10 | import com.dkanada.openapk.utils.ShellCommands; 11 | 12 | public class CopyFileAsync extends AsyncTask { 13 | private Context context; 14 | private MaterialDialog dialog; 15 | private String source; 16 | private String destination; 17 | 18 | public CopyFileAsync(Context context, MaterialDialog dialog, String source, String destination) { 19 | this.context = context; 20 | this.dialog = dialog; 21 | this.source = source; 22 | this.destination = destination; 23 | } 24 | 25 | @Override 26 | protected Boolean doInBackground(Void... voids) { 27 | Boolean status = false; 28 | if (OtherUtils.checkPermissions(context) && ShellCommands.isRoot()) { 29 | status = ShellCommands.cpDataPartition(source, destination); 30 | } 31 | return status; 32 | } 33 | 34 | @Override 35 | protected void onPostExecute(Boolean status) { 36 | super.onPostExecute(status); 37 | dialog.dismiss(); 38 | if (!ShellCommands.isRoot()) { 39 | DialogUtils.dialogMessage(context, context.getResources().getString(R.string.dialog_root_required), context.getResources().getString(R.string.dialog_root_required_description)); 40 | } else if (!status) { 41 | DialogUtils.toastMessage(context, context.getResources().getString(R.string.error_generic)); 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /app/src/main/java/com/dkanada/openapk/utils/PackageList.java: -------------------------------------------------------------------------------- 1 | package com.dkanada.openapk.utils; 2 | 3 | import android.content.Context; 4 | 5 | import com.dkanada.openapk.models.AppItem; 6 | import com.google.gson.Gson; 7 | import com.google.gson.stream.JsonReader; 8 | 9 | import java.io.File; 10 | import java.io.FileInputStream; 11 | import java.io.IOException; 12 | import java.io.InputStreamReader; 13 | import java.util.ArrayList; 14 | import java.util.List; 15 | 16 | public class PackageList { 17 | private Context context; 18 | 19 | public PackageList(Context context) { 20 | this.context = context; 21 | } 22 | 23 | public List getHiddenList() { 24 | return getAppList(context.getCacheDir().toString() + "/hidden"); 25 | } 26 | 27 | public void setHiddenList(List appList) { 28 | setAppList(context.getCacheDir().toString() + "/hidden", appList); 29 | } 30 | 31 | public List getAppList(String folder) { 32 | List appList = new ArrayList<>(); 33 | File file = new File(folder); 34 | /*try { 35 | JsonReader reader = new JsonReader(new InputStreamReader(new FileInputStream(folder))); 36 | reader.beginArray(); 37 | while (reader.hasNext()) { 38 | Gson gson = new Gson(); 39 | appList.add((AppItem) gson.fromJson(reader, AppItem.class)); 40 | } 41 | } catch (IOException e) { 42 | e.printStackTrace(); 43 | }*/ 44 | return appList; 45 | } 46 | 47 | public void setAppList(String file, List appList) { 48 | Gson gson = new Gson(); 49 | String content = gson.toJson(appList); 50 | FileOperations.writeToFile(context, file, content); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /app/src/main/java/com/dkanada/openapk/views/ButtonView.java: -------------------------------------------------------------------------------- 1 | package com.dkanada.openapk.views; 2 | 3 | import android.content.Context; 4 | import android.view.LayoutInflater; 5 | import android.view.View; 6 | import android.widget.RelativeLayout; 7 | import android.widget.TextView; 8 | 9 | import com.dkanada.openapk.App; 10 | import com.dkanada.openapk.R; 11 | 12 | public class ButtonView extends RelativeLayout { 13 | public ButtonView(Context context, String title, String summary, OnClickListener onClickListener) { 14 | super(context); 15 | this.setOnClickListener(onClickListener); 16 | 17 | LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 18 | View view = inflater.inflate(R.layout.view_button, null); 19 | addView(view); 20 | 21 | TextView titleView = (TextView) view.findViewById(R.id.title); 22 | TextView summaryView = (TextView) view.findViewById(R.id.summary); 23 | titleView.setText(title); 24 | if (summary == null) { 25 | summaryView.setVisibility(GONE); 26 | } else { 27 | summaryView.setText(summary); 28 | } 29 | 30 | View dividerTop = findViewById(R.id.divider_top); 31 | View dividerBottom = findViewById(R.id.divider_bottom); 32 | if (App.getAppPreferences().getTheme().equals("0")) { 33 | dividerTop.setBackgroundColor(getResources().getColor(R.color.grey_one)); 34 | dividerBottom.setBackgroundColor(getResources().getColor(R.color.grey_one)); 35 | } else { 36 | dividerTop.setBackgroundColor(getResources().getColor(R.color.grey_three)); 37 | dividerBottom.setBackgroundColor(getResources().getColor(R.color.grey_three)); 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 25 5 | buildToolsVersion '25.0.3' 6 | 7 | defaultConfig { 8 | minSdkVersion 23 9 | targetSdkVersion 25 10 | versionCode 35 11 | versionName "1.2.1" 12 | } 13 | 14 | buildTypes { 15 | release { 16 | minifyEnabled false 17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 18 | } 19 | debug { 20 | versionNameSuffix '-debug' 21 | } 22 | } 23 | 24 | lintOptions { 25 | disable 'MissingTranslation' 26 | } 27 | 28 | packagingOptions { 29 | exclude 'META-INF/LICENSE.txt' 30 | exclude 'META-INF/NOTICE.txt' 31 | } 32 | } 33 | 34 | repositories { 35 | mavenCentral() 36 | maven { url "https://jitpack.io" } 37 | } 38 | 39 | dependencies { 40 | compile fileTree(dir: 'libs', include: ['*.jar']) 41 | compile 'com.android.support:appcompat-v7:25.3.1' 42 | compile 'com.android.support:recyclerview-v7:25.3.1' 43 | compile 'com.android.support:cardview-v7:25.3.1' 44 | compile 'com.android.support:support-v4:25.3.1' 45 | compile 'commons-io:commons-io:2.4' 46 | compile 'com.github.navasmdc:MaterialDesign:1.5@aar' 47 | compile('com.github.afollestad.material-dialogs:core:0.8.5.3@aar') { transitive = true; } 48 | compile('com.github.afollestad.material-dialogs:commons:0.8.5.3@aar') { transitive = true; } 49 | compile('com.mikepenz:materialdrawer:4.6.1@aar') { transitive = true; } 50 | compile 'com.mikepenz:google-material-typeface:1.2.0.1@aar' 51 | compile 'com.jaredrummler:colorpicker:1.0.0' 52 | compile 'com.android.support.constraint:constraint-layout:1.0.2' 53 | compile 'com.google.code.gson:gson:2.8.0' 54 | } 55 | -------------------------------------------------------------------------------- /app/src/main/java/com/dkanada/openapk/utils/PackageStatsHelper.java: -------------------------------------------------------------------------------- 1 | package com.dkanada.openapk.utils; 2 | 3 | import android.app.Activity; 4 | import android.content.Context; 5 | import android.content.pm.IPackageStatsObserver; 6 | import android.content.pm.PackageInfo; 7 | import android.content.pm.PackageManager; 8 | import android.content.pm.PackageStats; 9 | import android.os.RemoteException; 10 | 11 | import com.dkanada.openapk.interfaces.PackageStatsListener; 12 | 13 | import java.lang.reflect.InvocationTargetException; 14 | import java.lang.reflect.Method; 15 | 16 | public class PackageStatsHelper { 17 | public static void getPackageStats(Context context, PackageInfo packageInfo, final PackageStatsListener packageStatsListener) { 18 | try { 19 | final Activity activity = (Activity) context; 20 | Method getPackageSize = PackageManager.class.getMethod("getPackageSizeInfo", String.class, IPackageStatsObserver.class); 21 | getPackageSize.invoke(context.getPackageManager(), packageInfo.applicationInfo.packageName, new IPackageStatsObserver.Stub() { 22 | @Override 23 | public void onGetStatsCompleted(final android.content.pm.PackageStats pStats, final boolean succeeded) throws RemoteException { 24 | activity.runOnUiThread(new Runnable() { 25 | @Override 26 | public void run() { 27 | packageStatsListener.onPackageStats(pStats); 28 | } 29 | }); 30 | } 31 | }); 32 | } catch (NoSuchMethodException e) { 33 | e.printStackTrace(); 34 | } catch (IllegalAccessException e) { 35 | e.printStackTrace(); 36 | } catch (InvocationTargetException e) { 37 | e.printStackTrace(); 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 11 | 18 | 19 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /app/src/main/res/layout/view_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 15 | 16 | 27 | 28 | 32 | 33 | 37 | 38 | 39 | 40 | 47 | 48 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 8 | 9 | 14 | 15 | 22 | 23 | 28 | 29 | 35 | 36 | 37 | 38 | 42 | 43 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /app/src/main/res/layout/view_button_switch.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 19 | 20 | 24 | 25 | 29 | 30 | 31 | 32 | 41 | 42 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /app/src/main/java/com/dkanada/openapk/activities/SettingsActivity.java: -------------------------------------------------------------------------------- 1 | package com.dkanada.openapk.activities; 2 | 3 | import android.app.FragmentManager; 4 | import android.app.FragmentTransaction; 5 | import android.os.Build; 6 | import android.os.Bundle; 7 | import android.support.v7.widget.Toolbar; 8 | import android.view.View; 9 | import android.view.WindowManager; 10 | 11 | import com.dkanada.openapk.App; 12 | import com.dkanada.openapk.R; 13 | import com.dkanada.openapk.fragments.SettingsFragment; 14 | import com.dkanada.openapk.utils.AppPreferences; 15 | import com.dkanada.openapk.utils.OtherUtils; 16 | 17 | public class SettingsActivity extends ThemeActivity { 18 | @Override 19 | public void onCreate(Bundle savedInstanceState) { 20 | super.onCreate(savedInstanceState); 21 | setContentView(R.layout.activity_settings); 22 | 23 | setInitialConfiguration(); 24 | 25 | FragmentManager fragmentManager = getFragmentManager(); 26 | FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 27 | SettingsFragment fragment = new SettingsFragment(); 28 | fragmentTransaction.add(R.id.fragment_container, fragment); 29 | fragmentTransaction.commit(); 30 | } 31 | 32 | private void setInitialConfiguration() { 33 | Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 34 | toolbar.setNavigationOnClickListener(new View.OnClickListener() { 35 | @Override 36 | public void onClick(View view) { 37 | onBackPressed(); 38 | } 39 | }); 40 | toolbar.setBackgroundColor(AppPreferences.get(this).getPrimaryColor()); 41 | 42 | setSupportActionBar(toolbar); 43 | getSupportActionBar().setDisplayHomeAsUpEnabled(true); 44 | getSupportActionBar().setTitle(R.string.settings); 45 | 46 | getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 47 | getWindow().setStatusBarColor(OtherUtils.dark(AppPreferences.get(this).getPrimaryColor(), 0.8)); 48 | getWindow().setNavigationBarColor(AppPreferences.get(this).getPrimaryColor()); 49 | } 50 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

OpenAPK

2 | 3 |

4 |

A modern, easy and customizable app manager for Android with root features and material design.

5 | 6 | This is a fork of MLManager 1.X made by Javier Santos, which is now unmaintained. If you have any ideas or feature requests add them to the issues page. Pull requests are welcome and a materialized app icon would be great from someone who knows how to create svg files. 7 | 8 | 9 | 10 | ## Features 11 | * Extract installed or system apps and save them locally. 12 | * Organize your applications and mark them as favorites. 13 | * Easily uninstall apps. 14 | * Customizations available in the settings. 15 | * No root required. 16 | * Material design interface. 17 | 18 | ## Root Features 19 | * Hide or disable apps from the device launcher. 20 | * Remove the cache for apps or remove all the data entirely. 21 | * Uninstall system apps. 22 | 23 | ## Translations 24 | Currently supported languages: 25 | * English 26 | * Spanish 27 | * Japanese 28 | * Portuguese 29 | * Italian 30 | * Polish 31 | * Russian 32 | 33 | ## Third Party Libraries 34 | * [Material Design Library](https://github.com/navasmdc/MaterialDesignLibrary) 35 | * [Material Dialogs](https://github.com/afollestad/material-dialogs) 36 | * [Material Drawer](https://github.com/mikepenz/MaterialDrawer) 37 | 38 | ## License 39 | 40 | Copyright 2015 Javier Santos 41 | 42 | This program is free software: you can redistribute it and/or modify 43 | it under the terms of the GNU General Public License as published by 44 | the Free Software Foundation, either version 3 of the License, or 45 | (at your option) any later version. 46 | 47 | This program is distributed in the hope that it will be useful, 48 | but WITHOUT ANY WARRANTY; without even the implied warranty of 49 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 50 | GNU General Public License for more details. 51 | 52 | You should have received a copy of the GNU General Public License 53 | along with this program. If not, see . 54 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | 22 | 23 | 28 | 29 | 40 | 41 | -------------------------------------------------------------------------------- /app/src/main/java/com/dkanada/openapk/activities/AboutActivity.java: -------------------------------------------------------------------------------- 1 | package com.dkanada.openapk.activities; 2 | 3 | import android.os.Bundle; 4 | import android.support.v4.content.ContextCompat; 5 | import android.support.v7.widget.Toolbar; 6 | import android.view.View; 7 | import android.view.WindowManager; 8 | import android.widget.ImageView; 9 | import android.widget.TextView; 10 | 11 | import com.dkanada.openapk.R; 12 | import com.dkanada.openapk.utils.AppPreferences; 13 | import com.dkanada.openapk.utils.OtherUtils; 14 | 15 | public class AboutActivity extends ThemeActivity { 16 | @Override 17 | protected void onCreate(Bundle savedInstanceState) { 18 | super.onCreate(savedInstanceState); 19 | setContentView(R.layout.activity_about); 20 | 21 | setInitialConfiguration(); 22 | setScreenElements(); 23 | } 24 | 25 | private void setInitialConfiguration() { 26 | Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 27 | toolbar.setNavigationOnClickListener(new View.OnClickListener() { 28 | @Override 29 | public void onClick(View view) { 30 | onBackPressed(); 31 | } 32 | }); 33 | toolbar.setBackgroundColor(AppPreferences.get(this).getPrimaryColor()); 34 | 35 | setSupportActionBar(toolbar); 36 | getSupportActionBar().setDisplayHomeAsUpEnabled(true); 37 | getSupportActionBar().setTitle(R.string.about); 38 | 39 | getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 40 | getWindow().setStatusBarColor(OtherUtils.dark(AppPreferences.get(this).getPrimaryColor(), 0.8)); 41 | getWindow().setNavigationBarColor(AppPreferences.get(this).getPrimaryColor()); 42 | } 43 | 44 | private void setScreenElements() { 45 | TextView header = (TextView) findViewById(R.id.header); 46 | TextView text = (TextView) findViewById(R.id.app_name); 47 | ImageView icon = (ImageView) findViewById(R.id.about_icon); 48 | 49 | header.setBackgroundColor(AppPreferences.get(this).getPrimaryColor()); 50 | text.setText(String.format("%s %s", getResources().getString(R.string.app_name), OtherUtils.getAppVersionName(getApplicationContext()))); 51 | if (AppPreferences.get(this).getTheme().equals("0")) { 52 | icon.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.grey_two)); 53 | } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_storage.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 8 | 9 | 13 | 14 | 18 | 19 | 29 | 30 | 36 | 37 | 48 | 49 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /app/src/main/java/com/dkanada/openapk/utils/DialogUtils.java: -------------------------------------------------------------------------------- 1 | package com.dkanada.openapk.utils; 2 | 3 | import android.app.Activity; 4 | import android.content.Context; 5 | import android.view.View; 6 | 7 | import com.afollestad.materialdialogs.MaterialDialog; 8 | import com.dkanada.openapk.App; 9 | import com.gc.materialdesign.widgets.SnackBar; 10 | import com.dkanada.openapk.R; 11 | 12 | public class DialogUtils { 13 | public static MaterialDialog dialogMessage(Context context, String title, String content) { 14 | return dialogFixBackground(context, new MaterialDialog.Builder(context) 15 | .title(title) 16 | .content(content) 17 | .cancelable(true) 18 | .positiveText(context.getResources().getString(android.R.string.ok))); 19 | } 20 | 21 | public static MaterialDialog dialogProgress(Context context, String title, String content) { 22 | return dialogFixBackground(context, new MaterialDialog.Builder(context) 23 | .title(title) 24 | .content(content) 25 | .cancelable(false) 26 | .progress(true, 0)); 27 | } 28 | 29 | public static void dialogSystemAction(Context context) { 30 | dialogFixBackground(context, new MaterialDialog.Builder(context) 31 | .title(context.getResources().getString(R.string.dialog_system_action)) 32 | .content(context.getResources().getString(R.string.dialog_system_action_description)) 33 | .positiveText(context.getResources().getString(android.R.string.ok)) 34 | .negativeText(context.getResources().getString(android.R.string.cancel)) 35 | .cancelable(false)); 36 | } 37 | 38 | public static void toastMessage(Context context, String text) { 39 | new SnackBar((Activity) context, text, null, null).show(); 40 | } 41 | 42 | public static void toastAction(Context context, String text, String buttonText, View.OnClickListener onClickListener) { 43 | new SnackBar((Activity) context, text, buttonText, onClickListener).show(); 44 | } 45 | 46 | public static MaterialDialog dialogFixBackground(Context context, MaterialDialog.Builder dialog) { 47 | if (App.getAppPreferences().getTheme().equals("1")) { 48 | dialog.backgroundColor(context.getResources().getColor(R.color.grey_three)); 49 | } 50 | return dialog.show(); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /app/src/main/res/values-pl/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Nowoczesny, łatwy w obsłudze i personalizowany menadżer aplikacji na Androida 4 | Ustawienia 5 | O 6 | Udostępnij 7 | Zainstalowane aplikacje 8 | Aplikacje systemowe 9 | Ulubione 10 | Ukryte aplikacje 11 | Ukryj 12 | Wyślij 13 | Szukaj 14 | Szukaj według nazwy… 15 | Nic nie znaleziono 16 | \"%1$s\" plik APK zapisano w folderze \"MLManager\" pod nazwą: %2$s 17 | Otwórz 18 | Usuń cache 19 | Pliki cache %s zostały usunięte 20 | Wyczyść dane 21 | Wszystkie dane aplikacji %s zostały usunięte 22 | Musisz uruchomić ponownie swoje urządzenie, aby zmiany zostały pokazane. Czy chcesz teraz uruchomić ponownie swoje urządzenie? 23 | Cofnij 24 | Uruchom ponownie 25 | Domyślna nazwa pliku dla rozpakowanych APK 26 | Sortuj aplikacje według 27 | Personalizacja 28 | Kolor podstawowy 29 | Ustal kolor podstawowy dla paska narzędzi i paska nawigacyjnego. Wymaga Androida 5.0+ 30 | Kolor pływającego przycisku 31 | Ustal kolor dla pływającego przycisku akcji (FAB) 32 | Pokaż pasek nawigacji w kolorze czarnym 33 | Nie używaj własnego koloru dla paska nawigacyjnego. 34 | Utworzono z \u2665 w Hiszpanii 35 | Deweloper aplikacji 36 | Projektant ikon 37 | Dotknij ponownie aby zamknąć aplikację 38 | -------------------------------------------------------------------------------- /app/src/main/res/values-ja/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Android 用のモダンで、簡単、そしてカスタマイズ可能なアプリ マネージャー 4 | 設定 5 | アプリについて 6 | 共有 7 | インストール済みのアプリ 8 | システムアプリ 9 | お気に入り 10 | 非表示にするアプリ 11 | 非表示にする 12 | 次を使用して 13 | 検索 14 | 名前で検索… 15 | 検索条件に一致する結果が見つかりませんでした 16 | クリップボードにコピーしました 17 | \"%1$s\" APK は \"MLManager\" フォルダーに次の名前で保存されました: %2$s 18 | 開く 19 | キャッシュの削除 20 | %s のキャッシュを削除しました 21 | データの削除 22 | %s のデータをすべて削除しました 23 | root が必要です 24 | お使いのデバイスを root 化して、root 権限が必要です。アクセスが拒否された場合、SuperUser アプリで ML Manager にアクセス許可を与えてください。 25 | 変更を反映するには再起動が必要です。今すぐ再起動しますか? 26 | アンインストールしてもよろしいですか? 27 | システムアプリを削除しようとしています。システムに詳しくない人は削除しないでください。デバイスが誤動作する可能性があります。 28 | 抽出 29 | 元に戻す 30 | 再起動 31 | アンインストール 32 | 抽出された APK 用のユーザー設定フォルダー 33 | 抽出された APK のデフォルトのファイル名 34 | アプリを並び替え 35 | カスタマイズ 36 | プライマリ色 37 | ツールバー、ナビゲーション バーのプライマリ色を設定します。Android 5.0 以降が必要です 38 | フローティング ボタンの色 39 | フローティング アクション ボタン (FAB) の色を設定します 40 | ナビゲーション バーを黒で表示 41 | ナビゲーション バーにユーザー設定の色を使用しません。 42 | スペインの \u2665 で作りました 43 | アプリ開発者 44 | アイコン デザイナー 45 | もう一度タップすると、アプリを閉じます 46 | -------------------------------------------------------------------------------- /app/src/main/java/com/dkanada/openapk/utils/AppPreferences.java: -------------------------------------------------------------------------------- 1 | package com.dkanada.openapk.utils; 2 | 3 | import android.content.Context; 4 | import android.content.SharedPreferences; 5 | import android.os.Environment; 6 | import android.preference.PreferenceManager; 7 | 8 | import com.dkanada.openapk.R; 9 | 10 | public class AppPreferences { 11 | private SharedPreferences sharedPreferences; 12 | private Context context; 13 | 14 | public static final int CODE_PERMISSION = 10; 15 | public static final int CODE_UNINSTALL = 11; 16 | 17 | public AppPreferences(Context context) { 18 | this.sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); 19 | this.context = context; 20 | } 21 | 22 | public static AppPreferences get(Context context) { 23 | return new AppPreferences(context); 24 | } 25 | 26 | public String getCustomPath() { 27 | return sharedPreferences.getString(context.getString(R.string.pref_custom_path), Environment.getExternalStorageDirectory() + "/" + context.getString(R.string.app_name)); 28 | } 29 | 30 | public String getFilename() { 31 | return sharedPreferences.getString(context.getString(R.string.pref_custom_file), "0"); 32 | } 33 | 34 | public String getSortMethod() { 35 | return sharedPreferences.getString(context.getString(R.string.pref_sort_method), "0"); 36 | } 37 | 38 | public String getTheme() { 39 | return sharedPreferences.getString(context.getString(R.string.pref_theme), "1"); 40 | } 41 | 42 | public int getPrimaryColor() { 43 | return sharedPreferences.getInt(context.getString(R.string.pref_primary_color), context.getResources().getColor(R.color.primary)); 44 | } 45 | 46 | public int getAccentColor() { 47 | return sharedPreferences.getInt(context.getString(R.string.pref_accent_color), context.getResources().getColor(R.color.accent)); 48 | } 49 | 50 | public Boolean getDoubleTap() { 51 | return sharedPreferences.getBoolean(context.getString(R.string.pref_double_tap), false); 52 | } 53 | 54 | public Boolean getRootEnabled() { 55 | return sharedPreferences.getBoolean(context.getString(R.string.pref_enable_root), false); 56 | } 57 | 58 | public boolean getInitialSetup() { 59 | return sharedPreferences.getBoolean(context.getString(R.string.pref_initial_setup), false); 60 | } 61 | 62 | public void setInitialSetup(boolean value) { 63 | SharedPreferences.Editor editor = sharedPreferences.edit(); 64 | editor.putBoolean(context.getString(R.string.pref_initial_setup), value); 65 | editor.apply(); 66 | } 67 | 68 | public int getRootStatus() { 69 | return sharedPreferences.getInt(context.getString(R.string.pref_root), 0); 70 | } 71 | 72 | public void setRootStatus(int value) { 73 | SharedPreferences.Editor editor = sharedPreferences.edit(); 74 | editor.putInt(context.getString(R.string.pref_root), value); 75 | editor.apply(); 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /app/src/main/res/xml/settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 11 | 12 | 18 | 19 | 25 | 26 | 27 | 28 | 29 | 30 | 36 | 37 | 44 | 45 | 52 | 53 | 54 | 55 | 56 | 57 | 62 | 63 | 68 | 69 | 73 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ### 1.2.1 2 | ###### Released: December 10, 2017 3 | * add russian translation 4 | * main activity updates on resume 5 | * fix sd card install issue 6 | * add detailed storage view 7 | 8 | ### 1.2 9 | ###### Released: August 14, 2017 10 | * fix extract filenames 11 | * add sort by package name 12 | * lots of changes behind the scenes 13 | 14 | ### 1.1.5 15 | ###### Released: July 26, 2017 16 | * add button to go to app settings 17 | * changes to the app activity for new features 18 | * speed up initial start and database refresh 19 | * add romanian translation 20 | * fix material dialogs in dark theme 21 | 22 | ### 1.1.4 23 | ###### Released: June 7, 2017 24 | * add scroll view in app activity for smaller devices 25 | * add material color picker in preferences 26 | * remove some async classes 27 | 28 | ### 1.1.3 29 | ###### Released: May 5, 2017 30 | * optimize some database queries 31 | * fix an issue checking certain database values 32 | 33 | ### 1.1.2 34 | ###### Released: April 20, 2017 35 | * fix some scaling issues on smaller screens 36 | * modify the quick action buttons for the light theme 37 | 38 | ### 1.1.1 39 | ###### Released: April 16, 2017 40 | * add option to use custom directory for saved files 41 | * changes to dialogs throughout the app 42 | * fix file name preference 43 | * add customization to quick actions 44 | * automatically update the database when opened 45 | 46 | ### 1.1 47 | ###### Released: March 17, 2017 48 | * complete redesign of the app layout 49 | * update settings page 50 | * fix broken root actions in async methods 51 | * fix build issue for f-droid release 52 | * fix sort by installation and update 53 | * bug fixes and other small changes 54 | 55 | ### 1.0.1 56 | ###### Released: March 9, 2017 57 | * all tasks are ran in the background now 58 | * fix for hidden apps getting removed from the database 59 | * minor changes to strings for new tasks 60 | * fix refresh animation ending too early 61 | 62 | ### 1.0 63 | ###### Released: March 3, 2017 64 | * lots of code optimizations 65 | * the app lists refresh much faster now 66 | * current app list is not reset on refresh 67 | * root must be manually enabled in settings 68 | * add setting for double tap to exit 69 | * change refresh animation 70 | * hidden and disabled apps no longer show up in normal lists 71 | * disabled apps persist even after database refresh 72 | 73 | ### 0.9 74 | ###### Released: February 5, 2017 75 | * include a dark theme 76 | * change animations for navigating through the app 77 | * modify some of the icons 78 | * fix progress bar for initial app list refresh 79 | * lots of bug fixes 80 | 81 | ### 0.8.3 82 | ###### Released: February 3, 2017 83 | * add a small text view to show that initial scan is happening 84 | * include more comments in code for clarity 85 | 86 | ### 0.8.2 87 | ###### Released: February 2, 2017 88 | * extraction folder not created until needed 89 | * fix important bug that broke disabling and hiding system apps 90 | 91 | ### 0.8.1 92 | ###### Released: February 1, 2017 93 | * set toolbar title to currently open adapter 94 | * update icons for lots of actions 95 | * remove custom extraction folder temporarily 96 | 97 | ### 0.8 98 | ###### Released: January 28, 2017 99 | * add option to disable apps in the app activity 100 | * change pull to refresh animation 101 | * merge the pro and basic versions 102 | * remove several libraries from the code 103 | -------------------------------------------------------------------------------- /app/src/main/res/values-pt/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Um gestor de aplicações moderno e intuitivo para Android 4 | Definições 5 | Sobre 6 | Partilhar 7 | Aplicações instaladas 8 | Aplicações do sistema 9 | Favoritas 10 | Aplicações ocultas 11 | Ocultar 12 | Enviar 13 | Pesquisar 14 | Pesquisar por nome… 15 | Não foram encontrados resultados. 16 | Copiado para a área de transferência 17 | \"%1$s\" foi guardada no diretório \"ML Manager\" com o nome: %2$s 18 | Abrir 19 | Limpar cache 20 | A cache de %s foi limpa 21 | Limpar dados 22 | Todos os dados de %s foram removidos 23 | Requer root 24 | O seu dispositivo tem que ter root. Se alguma vez tiver recusado as permissões root ao ML Manager, aceda à aplicação SuperUser e conceda-nos as permissões de root. 25 | Tem que reiniciar o dispositivo para mostrar as alterações. Reiniciar agora? 26 | Tem a certeza de que quer desinstalar? 27 | Está prestes a remover uma aplicação do sistema. Não efetue esta ação, a não ser que tenha a certeza que a sua remoção não afeta o seu sistema. 28 | Extrair 29 | Desfazer 30 | Reiniciar 31 | Desinstalar 32 | Pasta personalizada para as APK 33 | Nome de ficheiro para APK extraídas 34 | Ordenar aplicações por 35 | Personalizações 36 | Cor primária 37 | Define a cor primária da barra de navegação e da barra de ferramentas. Apenas Android 5.0+ 38 | Cor do botão flutuante 39 | Define a cor do botão flutuante (FAB) 40 | Mostrar barra de navegação a preto 41 | Não utilizar cor personalizada na barra de nagevação 42 | Criado com \u2665 de Espanha 43 | Programador da aplicação 44 | Criador do ícone 45 | Toque novamente para fechar 46 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_app.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 8 | 9 | 13 | 14 | 18 | 19 | 24 | 25 | 31 | 32 | 43 | 44 | 55 | 56 | 57 | 58 | 64 | 65 | 71 | 72 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | -------------------------------------------------------------------------------- /app/src/main/java/com/dkanada/openapk/utils/FileOperations.java: -------------------------------------------------------------------------------- 1 | package com.dkanada.openapk.utils; 2 | 3 | import android.content.Context; 4 | import android.graphics.Bitmap; 5 | import android.graphics.BitmapFactory; 6 | import android.graphics.drawable.BitmapDrawable; 7 | import android.graphics.drawable.Drawable; 8 | 9 | import com.dkanada.openapk.App; 10 | import com.dkanada.openapk.R; 11 | 12 | import java.io.File; 13 | import java.io.FileOutputStream; 14 | import java.io.IOException; 15 | import java.io.OutputStreamWriter; 16 | 17 | public class FileOperations { 18 | // copy files that do not require root access 19 | public static boolean cpExternalPartition(String input, String output) { 20 | createFolder(App.getAppPreferences().getCustomPath()); 21 | File inputFile = new File(input); 22 | File outputFile = new File(output); 23 | try { 24 | org.apache.commons.io.FileUtils.copyFile(inputFile, outputFile); 25 | return true; 26 | } catch (IOException e) { 27 | e.printStackTrace(); 28 | } 29 | return false; 30 | } 31 | 32 | public static void createFolder(String path) { 33 | File file = new File(path); 34 | if (!file.exists()) { 35 | file.mkdir(); 36 | } 37 | } 38 | 39 | public static void deleteFolder(String path) { 40 | File file = new File(path); 41 | if (file.exists()) { 42 | file.delete(); 43 | } 44 | } 45 | 46 | // save app icon to cache folder 47 | public static boolean saveIconToCache(Context context, String packageName) { 48 | boolean result = false; 49 | try { 50 | FileOutputStream out = new FileOutputStream(new File(context.getCacheDir(), packageName + ".png")); 51 | Drawable icon = context.getPackageManager().getApplicationIcon(packageName); 52 | BitmapDrawable iconBitmap = (BitmapDrawable) icon; 53 | iconBitmap.getBitmap().compress(Bitmap.CompressFormat.PNG, 100, out); 54 | result = true; 55 | } catch (Exception e) { 56 | e.printStackTrace(); 57 | } 58 | return result; 59 | } 60 | 61 | // delete app icon from cache folder 62 | public static boolean removeIconFromCache(Context context, String packageName) { 63 | File file = new File(context.getCacheDir(), packageName + ".png"); 64 | return file.delete(); 65 | } 66 | 67 | // get app icon from cache folder 68 | public static Drawable getIconFromCache(Context context, String packageName) { 69 | Drawable result; 70 | try { 71 | File file = new File(context.getCacheDir(), packageName + ".png"); 72 | Bitmap bitmap = BitmapFactory.decodeFile(file.getPath()); 73 | result = new BitmapDrawable(context.getResources(), bitmap); 74 | } catch (Exception e) { 75 | e.printStackTrace(); 76 | result = context.getResources().getDrawable(R.drawable.ic_android); 77 | } 78 | return result; 79 | } 80 | 81 | public static void writeToFile(Context context, String file, String content) { 82 | try { 83 | OutputStreamWriter outputStreamWriter = new OutputStreamWriter(context.openFileOutput(file, Context.MODE_PRIVATE)); 84 | outputStreamWriter.write(content); 85 | outputStreamWriter.close(); 86 | } catch (IOException e) { 87 | e.printStackTrace(); 88 | } 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /app/src/main/res/values-es/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Moderno, sencillo y personalizable gestor de aplicaciones para Android 4 | Ajustes 5 | Acerca de 6 | Compartir 7 | Aplicaciones Instaladas 8 | Aplicaciones del Sistema 9 | Favoritas 10 | Aplicaciones Ocultas 11 | Ocultar 12 | Enviar 13 | Buscar 14 | Buscar por nombre… 15 | No se encontraron resultados para esa búsqueda 16 | Copiado al portapapeles 17 | El APK \"%1$s\" ha sido guardado en la carpeta \"MLManager\" con nombre: %2$s 18 | Iniciar 19 | Eliminar caché 20 | La caché de %s ha sido eliminada 21 | Limpiar datos 22 | Todos los datos de %s han sido eliminados 23 | Acceso Root necesario 24 | Para eliminar datos del dispositivo necesitas root con los permisos dados. Si has rechazado el acceso una vez: dirígete a la app SuperUser para dar acceso a ML Manager. 25 | Es necesario reiniciar para mostrar los cambios. ¿Quieres reiniciar ahora? 26 | ¿Seguro que quieres desinstalar? 27 | Estás a un solo paso de eliminar una aplicación del sistema. No desinstales si no estás seguro, podría ocasionar un mal funcionamiento del dispositivo. 28 | Extraer 29 | Deshacer 30 | Reiniciar 31 | Desinstalar 32 | Carpeta personalizada para APK extraídos 33 | Nombre de los archivos APK extraídos 34 | Ordenar aplicaciones por 35 | Personalizaciones 36 | Color principal 37 | Ajustar el color primario para la barra de herramientas y navegación. Requiere Android 5.0 o superior 38 | Color del botón flotante 39 | Ajustar el color para el botón flotante (FAB) 40 | Mostrar barra de navegación en negro 41 | No usar un color personalizado para la barra de navegación. 42 | Hecho con \u2665 en España 43 | Desarrollador 44 | Icono 45 | Pulsa de nuevo para salir 46 | -------------------------------------------------------------------------------- /app/src/main/java/com/dkanada/openapk/models/AppItem.java: -------------------------------------------------------------------------------- 1 | package com.dkanada.openapk.models; 2 | 3 | import android.content.pm.PackageInfo; 4 | import android.graphics.Bitmap; 5 | import android.os.Parcel; 6 | import android.os.Parcelable; 7 | 8 | import com.dkanada.openapk.App; 9 | import com.dkanada.openapk.utils.OtherUtils; 10 | 11 | public class AppItem implements Parcelable { 12 | private Bitmap icon; 13 | private String packageLabel; 14 | private String packageName; 15 | private String versionName; 16 | private String versionCode; 17 | private String data; 18 | private String source; 19 | private String install; 20 | private String update; 21 | public boolean system; 22 | public boolean disable; 23 | public boolean hide; 24 | public boolean favorite; 25 | 26 | public AppItem(PackageInfo packageInfo) { 27 | icon = OtherUtils.drawableToBitmap(App.getPackageIcon(packageInfo)); 28 | packageLabel = App.getPackageName(packageInfo); 29 | packageName = packageInfo.packageName; 30 | versionName = packageInfo.versionName; 31 | versionCode = Integer.toString(packageInfo.versionCode); 32 | data = packageInfo.applicationInfo.dataDir; 33 | source = packageInfo.applicationInfo.sourceDir; 34 | install = Long.toString(packageInfo.firstInstallTime); 35 | update = Long.toString(packageInfo.lastUpdateTime); 36 | } 37 | 38 | public AppItem(Parcel parcel) { 39 | icon = parcel.readParcelable(getClass().getClassLoader()); 40 | packageLabel = parcel.readString(); 41 | packageName = parcel.readString(); 42 | versionName = parcel.readString(); 43 | versionCode = parcel.readString(); 44 | data = parcel.readString(); 45 | source = parcel.readString(); 46 | install = parcel.readString(); 47 | update = parcel.readString(); 48 | boolean[] flags = new boolean[4]; 49 | parcel.readBooleanArray(flags); 50 | system = flags[0]; 51 | disable = flags[1]; 52 | hide = flags[2]; 53 | favorite = flags[3]; 54 | } 55 | 56 | public Bitmap getIcon() { 57 | return icon; 58 | } 59 | 60 | public String getPackageLabel() { 61 | return packageLabel; 62 | } 63 | 64 | public String getPackageName() { 65 | return packageName; 66 | } 67 | 68 | public String getVersionName() { 69 | return versionName; 70 | } 71 | 72 | public String getVersionCode() { 73 | return versionCode; 74 | } 75 | 76 | public String getData() { 77 | return data; 78 | } 79 | 80 | public String getSource() { 81 | return source; 82 | } 83 | 84 | public String getInstall() { 85 | return install; 86 | } 87 | 88 | public String getUpdate() { 89 | return update; 90 | } 91 | 92 | public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { 93 | public AppItem createFromParcel(Parcel parcel) { 94 | return new AppItem(parcel); 95 | } 96 | public AppItem[] newArray(int size) { 97 | return new AppItem[size]; 98 | } 99 | }; 100 | 101 | @Override 102 | public int describeContents() { 103 | return 0; 104 | } 105 | 106 | @Override 107 | public void writeToParcel(Parcel parcel, int flags) { 108 | parcel.writeParcelable(icon, flags); 109 | parcel.writeString(packageLabel); 110 | parcel.writeString(packageName); 111 | parcel.writeString(versionName); 112 | parcel.writeString(versionCode); 113 | parcel.writeString(data); 114 | parcel.writeString(source); 115 | parcel.writeString(install); 116 | parcel.writeString(update); 117 | parcel.writeBooleanArray(new boolean[]{ system, disable, hide, favorite }); 118 | } 119 | } 120 | -------------------------------------------------------------------------------- /app/src/main/res/layout/adapter_app.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 12 | 13 | 16 | 17 | 29 | 30 | 42 | 43 | 55 | 56 | 62 | 63 |