├── app ├── .gitignore ├── src │ ├── main │ │ ├── res │ │ │ ├── font │ │ │ │ └── brandy.ttf │ │ │ ├── drawable │ │ │ │ ├── empty_logo.png │ │ │ │ ├── header_bg_day.jpg │ │ │ │ ├── nav_header_img.png │ │ │ │ ├── header_bg_night.jpg │ │ │ │ ├── cat_listening_music.png │ │ │ │ ├── shape_for_dialog_box.xml │ │ │ │ ├── border_style.xml │ │ │ │ ├── done_24.xml │ │ │ │ ├── arrow_upward.xml │ │ │ │ ├── arrow_downward.xml │ │ │ │ ├── delete_24.xml │ │ │ │ ├── arrow_back_24.xml │ │ │ │ ├── info.xml │ │ │ │ ├── play_arrow_24.xml │ │ │ │ ├── error.xml │ │ │ │ ├── play_circle_24.xml │ │ │ │ ├── stop_circle_24.xml │ │ │ │ ├── pause_24.xml │ │ │ │ ├── done_icon.xml │ │ │ │ ├── mode_edit_24.xml │ │ │ │ ├── keyboard_voice.xml │ │ │ │ ├── search_24.xml │ │ │ │ ├── update_24.xml │ │ │ │ ├── round_transparent_ripple_button.xml │ │ │ │ ├── select_all_24.xml │ │ │ │ ├── deselect_24.xml │ │ │ │ ├── share_24.xml │ │ │ │ ├── skip_backward.xml │ │ │ │ ├── skip_forward.xml │ │ │ │ ├── facebook.xml │ │ │ │ ├── settings_24.xml │ │ │ │ ├── telegram.xml │ │ │ │ ├── github.xml │ │ │ │ ├── donation.xml │ │ │ │ └── browser_icon.xml │ │ │ ├── mipmap-hdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_round.png │ │ │ │ └── ic_launcher_foreground.png │ │ │ ├── mipmap-mdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_round.png │ │ │ │ └── ic_launcher_foreground.png │ │ │ ├── mipmap-xhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_round.png │ │ │ │ └── ic_launcher_foreground.png │ │ │ ├── mipmap-xxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_round.png │ │ │ │ └── ic_launcher_foreground.png │ │ │ ├── xml │ │ │ │ ├── provider_paths.xml │ │ │ │ ├── shortcuts.xml │ │ │ │ └── root_preferences.xml │ │ │ ├── mipmap-xxxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_round.png │ │ │ │ └── ic_launcher_foreground.png │ │ │ ├── values │ │ │ │ ├── ic_launcher_background.xml │ │ │ │ ├── custom_styles.xml │ │ │ │ ├── dimens.xml │ │ │ │ ├── attr.xml │ │ │ │ ├── colors.xml │ │ │ │ ├── arrays.xml │ │ │ │ ├── themes.xml │ │ │ │ └── strings.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ ├── ic_launcher.xml │ │ │ │ └── ic_launcher_round.xml │ │ │ ├── layout │ │ │ │ ├── settings_activity.xml │ │ │ │ ├── toolbar.xml │ │ │ │ ├── sample_recording_item_design.xml │ │ │ │ ├── dialog_rename_file.xml │ │ │ │ ├── header_layout.xml │ │ │ │ ├── dialog_multiple_selected_files_options.xml │ │ │ │ ├── activity_main.xml │ │ │ │ ├── dialog_single_file_options.xml │ │ │ │ ├── dialog_audio_player.xml │ │ │ │ └── dialog_file_properties.xml │ │ │ ├── menu │ │ │ │ ├── speed_menu.xml │ │ │ │ ├── action_bar_menu.xml │ │ │ │ └── nav_drawer_menu.xml │ │ │ └── values-night │ │ │ │ └── themes.xml │ │ ├── ic_launcher-playstore.png │ │ ├── java │ │ │ └── zoro │ │ │ │ └── benojir │ │ │ │ └── callrecorder │ │ │ │ ├── receivers │ │ │ │ └── ActionReceiver.java │ │ │ │ ├── helpers │ │ │ │ ├── ContactsHelper.java │ │ │ │ ├── RecorderHelper.java │ │ │ │ ├── SingleFileOptionsHelper.java │ │ │ │ └── CustomFunctions.java │ │ │ │ ├── dialogs │ │ │ │ ├── MultipleFilesControlDialog.java │ │ │ │ ├── SingleFileControlDialog.java │ │ │ │ ├── FileInfoDialog.java │ │ │ │ └── AudioPlayerDialog.java │ │ │ │ ├── activities │ │ │ │ └── SettingsActivity.java │ │ │ │ └── services │ │ │ │ └── MyInCallService.java │ │ └── AndroidManifest.xml │ ├── test │ │ └── java │ │ │ └── zoro │ │ │ └── benojir │ │ │ └── callrecorder │ │ │ └── ExampleUnitTest.java │ └── androidTest │ │ └── java │ │ └── zoro │ │ └── benojir │ │ └── callrecorder │ │ └── ExampleInstrumentedTest.java ├── proguard-rules.pro └── build.gradle ├── .idea ├── .name ├── .gitignore ├── compiler.xml ├── vcs.xml ├── render.experimental.xml ├── deploymentTargetDropDown.xml ├── migrations.xml ├── deploymentTargetSelector.xml ├── gradle.xml ├── inspectionProfiles │ └── Project_Default.xml ├── misc.xml └── other.xml ├── magisk ├── updater-script ├── updates │ └── release │ │ ├── changelog.txt │ │ └── info.json └── update-binary ├── magisk-module ├── META-INF │ └── com │ │ └── google │ │ └── android │ │ ├── updater-script │ │ └── update-binary ├── system │ ├── priv-app │ │ └── zoro.benojir.callrecorder │ │ │ └── app-release.apk │ ├── etc │ │ └── permissions │ │ │ └── privapp-permissions-zoro.benojir.callrecorder.xml │ └── addon.d │ │ └── 51-zoro.benojir.callrecorder.sh └── module.prop ├── README.md ├── screenshots ├── 1.png ├── 2.png ├── 3.png ├── 4.png ├── 5.png └── 6.png ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── .gitignore ├── settings.gradle ├── gradle.properties ├── gradlew.bat └── gradlew /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | Call Recorder -------------------------------------------------------------------------------- /magisk/updater-script: -------------------------------------------------------------------------------- 1 | #MAGISK 2 | -------------------------------------------------------------------------------- /magisk-module/META-INF/com/google/android/updater-script: -------------------------------------------------------------------------------- 1 | #MAGISK 2 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benojir/Android-Call-Recorder/HEAD/README.md -------------------------------------------------------------------------------- /screenshots/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benojir/Android-Call-Recorder/HEAD/screenshots/1.png -------------------------------------------------------------------------------- /screenshots/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benojir/Android-Call-Recorder/HEAD/screenshots/2.png -------------------------------------------------------------------------------- /screenshots/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benojir/Android-Call-Recorder/HEAD/screenshots/3.png -------------------------------------------------------------------------------- /screenshots/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benojir/Android-Call-Recorder/HEAD/screenshots/4.png -------------------------------------------------------------------------------- /screenshots/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benojir/Android-Call-Recorder/HEAD/screenshots/5.png -------------------------------------------------------------------------------- /screenshots/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benojir/Android-Call-Recorder/HEAD/screenshots/6.png -------------------------------------------------------------------------------- /magisk/updates/release/changelog.txt: -------------------------------------------------------------------------------- 1 | ### Version 1.5 2 | 3 | * Fixed known issues 4 | * Updated UI to material 3 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/font/brandy.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benojir/Android-Call-Recorder/HEAD/app/src/main/res/font/brandy.ttf -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benojir/Android-Call-Recorder/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benojir/Android-Call-Recorder/HEAD/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/empty_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benojir/Android-Call-Recorder/HEAD/app/src/main/res/drawable/empty_logo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/header_bg_day.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benojir/Android-Call-Recorder/HEAD/app/src/main/res/drawable/header_bg_day.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable/nav_header_img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benojir/Android-Call-Recorder/HEAD/app/src/main/res/drawable/nav_header_img.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benojir/Android-Call-Recorder/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benojir/Android-Call-Recorder/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/header_bg_night.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benojir/Android-Call-Recorder/HEAD/app/src/main/res/drawable/header_bg_night.jpg -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benojir/Android-Call-Recorder/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benojir/Android-Call-Recorder/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/xml/provider_paths.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/cat_listening_music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benojir/Android-Call-Recorder/HEAD/app/src/main/res/drawable/cat_listening_music.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benojir/Android-Call-Recorder/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benojir/Android-Call-Recorder/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benojir/Android-Call-Recorder/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benojir/Android-Call-Recorder/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benojir/Android-Call-Recorder/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benojir/Android-Call-Recorder/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benojir/Android-Call-Recorder/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benojir/Android-Call-Recorder/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benojir/Android-Call-Recorder/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benojir/Android-Call-Recorder/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benojir/Android-Call-Recorder/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FC2258 4 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /magisk-module/system/priv-app/zoro.benojir.callrecorder/app-release.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benojir/Android-Call-Recorder/HEAD/magisk-module/system/priv-app/zoro.benojir.callrecorder/app-release.apk -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/render.experimental.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/deploymentTargetDropDown.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Sat Mar 26 11:04:25 IST 2022 2 | distributionBase=GRADLE_USER_HOME 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip 4 | distributionPath=wrapper/dists 5 | zipStorePath=wrapper/dists 6 | zipStoreBase=GRADLE_USER_HOME 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_for_dialog_box.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 8 | -------------------------------------------------------------------------------- /.idea/migrations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /magisk-module/module.prop: -------------------------------------------------------------------------------- 1 | id=zoro.benojir.callrecorder 2 | name=Call Recorder 3 | version=v1.5 4 | versionCode=5 5 | author=Benojir Sultana 6 | description=Record calls automatically without announcement. 7 | updateJson=https://raw.githubusercontent.com/Benojir/Android-Call-Recorder/main/magisk/updates/release/info.json -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /magisk/updates/release/info.json: -------------------------------------------------------------------------------- 1 | { 2 | "zipUrl": "https://github.com/Benojir/Android-Call-Recorder/releases/download/1.5/Call-Recorder_v1.5-Magisk.zip", 3 | "changelog": "https://github.com/Benojir/Android-Call-Recorder/raw/master/magisk/updates/release/changelog.txt", 4 | "version": "1.5", 5 | "versionCode": 5 6 | } 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/caches 5 | /.idea/libraries 6 | /.idea/modules.xml 7 | /.idea/workspace.xml 8 | /.idea/navEditor.xml 9 | /.idea/assetWizardSettings.xml 10 | .DS_Store 11 | /build 12 | /captures 13 | .externalNativeBuild 14 | .cxx 15 | local.properties 16 | zzz.bat 17 | app/release 18 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/border_style.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/values/custom_styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 20dp 4 | 20dp 5 | 10dp 6 | 5dp 7 | 10dp 8 | -------------------------------------------------------------------------------- /.idea/deploymentTargetSelector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/done_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/arrow_upward.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/arrow_downward.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /magisk-module/system/etc/permissions/privapp-permissions-zoro.benojir.callrecorder.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/delete_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /magisk-module/system/addon.d/51-zoro.benojir.callrecorder.sh: -------------------------------------------------------------------------------- 1 | #!/sbin/sh 2 | # ADDOND_VERSION=2 3 | 4 | . /tmp/backuptool.functions 5 | 6 | files="priv-app/zoro.benojir.callrecorder/app-release.apk etc/permissions/privapp-permissions-zoro.benojir.callrecorder.xml" 7 | 8 | case "${1}" in 9 | backup|restore) 10 | for f in ${files}; do 11 | "${1}_file" "${S}/${f}" 12 | done 13 | ;; 14 | esac -------------------------------------------------------------------------------- /app/src/main/res/values/attr.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | gradlePluginPortal() 4 | google() 5 | mavenCentral() 6 | } 7 | } 8 | dependencyResolutionManagement { 9 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) 10 | repositories { 11 | google() 12 | mavenCentral() 13 | } 14 | } 15 | rootProject.name = "Call Recorder" 16 | include ':app' 17 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/arrow_back_24.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/info.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/play_arrow_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/error.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/play_circle_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/stop_circle_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/pause_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/done_icon.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/mode_edit_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/test/java/zoro/benojir/callrecorder/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | package zoro.benojir.callrecorder; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.junit.Assert.*; 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * @see Testing documentation 11 | */ 12 | public class ExampleUnitTest { 13 | @Test 14 | public void addition_isCorrect() { 15 | assertEquals(4, 2 + 2); 16 | } 17 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable/keyboard_voice.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/layout/settings_activity.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 9 | 10 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/search_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/update_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/round_transparent_ripple_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/select_all_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/menu/speed_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 11 | 14 | 17 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/java/zoro/benojir/callrecorder/receivers/ActionReceiver.java: -------------------------------------------------------------------------------- 1 | package zoro.benojir.callrecorder.receivers; 2 | 3 | import android.content.BroadcastReceiver; 4 | import android.content.Context; 5 | import android.content.Intent; 6 | import android.os.Bundle; 7 | 8 | import zoro.benojir.callrecorder.services.MyInCallService; 9 | 10 | public class ActionReceiver extends BroadcastReceiver { 11 | 12 | @Override 13 | public void onReceive(Context context, Intent intent) { 14 | 15 | Bundle intentExtras = intent.getExtras(); 16 | 17 | if (intentExtras.containsKey("stopRecording")){ 18 | context.stopService(new Intent(context, MyInCallService.class)); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/deselect_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/share_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/layout/toolbar.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FF3700B3 4 | #FF03DAC5 5 | #04BAA8 6 | #FF018786 7 | #FF000000 8 | #FFFFFFFF 9 | 10 | #007ADC 11 | #1E1E1E 12 | 13 | #F1D8DF 14 | #FFC107 15 | #3E3D3D 16 | #888888 17 | #2196F3 18 | #3AA8FF 19 | #00C708 20 | #E0DEDE 21 | -------------------------------------------------------------------------------- /app/src/main/res/values/arrays.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Device default 5 | Dark mode 6 | Light mode 7 | 8 | 9 | 10 | device_default 11 | dark_mode 12 | light_mode 13 | 14 | 15 | 16 | Newest 17 | Oldest 18 | A-Z (Ascending) 19 | Z-A (Descending) 20 | 21 | 22 | 23 | sort_by_new 24 | sort_by_old 25 | sort_by_name_ascending 26 | sort_by_name_descending 27 | 28 | -------------------------------------------------------------------------------- /app/src/androidTest/java/zoro/benojir/callrecorder/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package zoro.benojir.callrecorder; 2 | 3 | import android.content.Context; 4 | 5 | import androidx.test.platform.app.InstrumentationRegistry; 6 | import androidx.test.ext.junit.runners.AndroidJUnit4; 7 | 8 | import org.junit.Test; 9 | import org.junit.runner.RunWith; 10 | 11 | import static org.junit.Assert.*; 12 | 13 | /** 14 | * Instrumented test, which will execute on an Android device. 15 | * 16 | * @see Testing documentation 17 | */ 18 | @RunWith(AndroidJUnit4.class) 19 | public class ExampleInstrumentedTest { 20 | @Test 21 | public void useAppContext() { 22 | // Context of the app under test. 23 | Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); 24 | assertEquals("com.hiddenpirates.callrecorder", appContext.getPackageName()); 25 | } 26 | } -------------------------------------------------------------------------------- /app/src/main/res/menu/action_bar_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 12 | 13 | 19 | 20 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/skip_backward.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/skip_forward.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/facebook.xml: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/values-night/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 21 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | 23 | # Please add these rules to your existing keep rules in order to suppress warnings. 24 | # This is generated automatically by the Android Gradle plugin. 25 | -dontwarn javax.annotation.Nullable 26 | -dontwarn javax.annotation.ParametersAreNonnullByDefault 27 | -dontwarn javax.annotation.WillClose -------------------------------------------------------------------------------- /app/src/main/res/xml/shortcuts.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 13 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/settings_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /magisk/update-binary: -------------------------------------------------------------------------------- 1 | #!/sbin/sh 2 | 3 | OUTFD=${2} 4 | ZIPFILE=${3} 5 | 6 | umask 022 7 | 8 | ui_print() { 9 | printf "ui_print %s\nui_print\n" "${*}" > /proc/self/fd/"${OUTFD}" 10 | } 11 | 12 | if [ -f /sbin/recovery ] || [ -f /system/bin/recovery ]; then 13 | # Installing via recovery. Always do a direct install. 14 | set -exu 15 | 16 | ui_print 'Mounting system' 17 | if mount /system_root; then 18 | mount -o remount,rw /system_root 19 | root_dir=/system_root 20 | else 21 | mount /system 22 | mount -o remount,rw /system 23 | root_dir=/ 24 | fi 25 | 26 | ui_print 'Extracting files' 27 | 28 | # Just overwriting isn't sufficient because the apk filenames are different 29 | # between debug and release builds 30 | app_id=$(unzip -p "${ZIPFILE}" module.prop | grep '^id=' | cut -d= -f2) 31 | 32 | # rm on some custom recoveries doesn't exit with 0 on ENOENT, even with -f 33 | rm -rf "${root_dir}/system/priv-app/${app_id}" || : 34 | 35 | unzip -o "${ZIPFILE}" 'system/*' -d "${root_dir}" 36 | 37 | ui_print 'Done!' 38 | else 39 | # Installing via Magisk Manager. 40 | 41 | . /data/adb/magisk/util_functions.sh 42 | 43 | install_module 44 | fi 45 | -------------------------------------------------------------------------------- /magisk-module/META-INF/com/google/android/update-binary: -------------------------------------------------------------------------------- 1 | #!/sbin/sh 2 | 3 | OUTFD=${2} 4 | ZIPFILE=${3} 5 | 6 | umask 022 7 | 8 | ui_print() { 9 | printf "ui_print %s\nui_print\n" "${*}" > /proc/self/fd/"${OUTFD}" 10 | } 11 | 12 | if [ -f /sbin/recovery ] || [ -f /system/bin/recovery ]; then 13 | # Installing via recovery. Always do a direct install. 14 | set -exu 15 | 16 | ui_print 'Mounting system' 17 | if mount /system_root; then 18 | mount -o remount,rw /system_root 19 | root_dir=/system_root 20 | else 21 | mount /system 22 | mount -o remount,rw /system 23 | root_dir=/ 24 | fi 25 | 26 | ui_print 'Extracting files' 27 | 28 | # Just overwriting isn't sufficient because the apk filenames are different 29 | # between debug and release builds 30 | app_id=$(unzip -p "${ZIPFILE}" module.prop | grep '^id=' | cut -d= -f2) 31 | 32 | # rm on some custom recoveries doesn't exit with 0 on ENOENT, even with -f 33 | rm -rf "${root_dir}/system/priv-app/${app_id}" || : 34 | 35 | unzip -o "${ZIPFILE}" 'system/*' -d "${root_dir}" 36 | 37 | ui_print 'Done!' 38 | else 39 | # Installing via Magisk Manager. 40 | 41 | . /data/adb/magisk/util_functions.sh 42 | 43 | install_module 44 | fi 45 | -------------------------------------------------------------------------------- /app/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 21 | 22 | 25 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | # IDE (e.g. Android Studio) users: 3 | # Gradle settings configured through the IDE *will override* 4 | # any settings specified in this file. 5 | # For more details on how to configure your build environment visit 6 | # http://www.gradle.org/docs/current/userguide/build_environment.html 7 | # Specifies the JVM arguments used for the daemon process. 8 | # The setting is particularly useful for tweaking memory settings. 9 | org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 10 | # When configured, Gradle will run in incubating parallel mode. 11 | # This option should only be used with decoupled projects. More details, visit 12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 13 | # org.gradle.parallel=true 14 | # AndroidX package structure to make it clearer which packages are bundled with the 15 | # Android operating system, and which are packaged with your app"s APK 16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 17 | android.useAndroidX=true 18 | # Enables namespacing of each library's R class so that its R class includes only the 19 | # resources declared in the library itself and none from the library's dependencies, 20 | # thereby reducing the size of the R class for that library 21 | android.nonTransitiveRClass=true 22 | android.defaults.buildfeatures.buildconfig=true 23 | android.nonFinalResIds=false -------------------------------------------------------------------------------- /app/src/main/res/drawable/telegram.xml: -------------------------------------------------------------------------------- 1 | 7 | 13 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'com.android.application' 3 | } 4 | 5 | android { 6 | compileSdk 34 7 | 8 | defaultConfig { 9 | applicationId "zoro.benojir.callrecorder" 10 | minSdk 29 11 | //noinspection OldTargetApi 12 | targetSdk 34 13 | versionCode 5 14 | versionName "1.5" 15 | 16 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 17 | } 18 | 19 | buildTypes { 20 | release { 21 | minifyEnabled true 22 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 23 | } 24 | } 25 | compileOptions { 26 | sourceCompatibility JavaVersion.VERSION_1_8 27 | targetCompatibility JavaVersion.VERSION_1_8 28 | } 29 | buildFeatures { 30 | viewBinding true 31 | buildConfig true 32 | } 33 | namespace 'zoro.benojir.callrecorder' 34 | } 35 | 36 | dependencies { 37 | 38 | implementation 'androidx.appcompat:appcompat:1.7.0' 39 | implementation 'com.google.android.material:material:1.12.0' 40 | implementation 'androidx.constraintlayout:constraintlayout:2.1.4' 41 | implementation 'androidx.preference:preference:1.2.1' 42 | testImplementation 'junit:junit:4.13.2' 43 | androidTestImplementation 'androidx.test.ext:junit:1.2.1' 44 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1' 45 | 46 | implementation 'org.jsoup:jsoup:1.16.1' 47 | implementation 'commons-io:commons-io:2.13.0' 48 | 49 | implementation 'androidx.media3:media3-exoplayer:1.4.0' 50 | implementation 'androidx.media3:media3-exoplayer-dash:1.4.0' 51 | implementation 'androidx.media3:media3-ui:1.4.0' 52 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable/github.xml: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/menu/nav_drawer_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 8 | 9 | 13 | 14 | 15 | 17 | 18 | 22 | 23 | 27 | 28 | 29 | 31 | 32 | 36 | 37 | 41 | 42 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /app/src/main/res/xml/root_preferences.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 17 | 18 | 24 | 25 | 26 | 27 | 28 | 29 | 36 | 37 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /app/src/main/java/zoro/benojir/callrecorder/helpers/ContactsHelper.java: -------------------------------------------------------------------------------- 1 | package zoro.benojir.callrecorder.helpers; 2 | 3 | import android.Manifest; 4 | import android.content.Context; 5 | import android.content.pm.PackageManager; 6 | import android.database.Cursor; 7 | import android.net.Uri; 8 | import android.provider.ContactsContract; 9 | import android.telephony.PhoneNumberUtils; 10 | import android.widget.Toast; 11 | 12 | import androidx.core.content.ContextCompat; 13 | 14 | public class ContactsHelper { 15 | 16 | public static String getContactNameByPhoneNumber(Context context, String phoneNumber) { 17 | String contactName = ""; 18 | 19 | if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED) { 20 | 21 | Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; 22 | String[] projection = new String[]{ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER}; 23 | 24 | Cursor cursor = context.getContentResolver().query(uri, projection, null, null, null); 25 | 26 | if (cursor != null) { 27 | while (cursor.moveToNext()) { 28 | String storedNumber = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER)); 29 | if (PhoneNumberUtils.compare(storedNumber, phoneNumber)) { 30 | contactName = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 31 | break; 32 | } 33 | } 34 | cursor.close(); 35 | } 36 | } else { 37 | Toast.makeText(context, "Please grant contacts permission", Toast.LENGTH_SHORT).show(); 38 | } 39 | 40 | if (contactName.isEmpty()){ 41 | contactName = "Unknown"; 42 | } 43 | 44 | return contactName; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /app/src/main/res/layout/sample_recording_item_design.xml: -------------------------------------------------------------------------------- 1 | 2 | 14 | 15 | 21 | 22 | 31 | 32 | 39 | 40 | 41 | 51 | 52 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_rename_file.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 20 | 21 | 34 | 35 | 43 | 44 |