From ba01f8003d121701008ab6aaa9f7cd7664f1400d Mon Sep 17 00:00:00 2001 From: Alexey Kuznetsov Date: Fri, 24 Feb 2017 10:37:32 +0300 Subject: [PATCH] split main src and lib --- android-audio-library/.gitignore | 1 + android-audio-library/build.gradle | 38 ++ android-audio-library/proguard-rules.pro | 17 + .../audiolibrary/ExampleInstrumentedTest.java | 26 + .../src/main/AndroidManifest.xml | 9 + .../animations/RecordingAnimation.java | 5 +- .../audiolibrary/app/MainApplication.java | 83 ++++ .../axet/audiolibrary}/app/RawSamples.java | 4 +- .../axet/audiolibrary/app/Recordings.java | 447 +++++++++++++++++ .../github/axet/audiolibrary}/app/Sound.java | 5 +- .../axet/audiolibrary}/app/Storage.java | 5 +- .../axet/audiolibrary}/encoders/Encoder.java | 2 +- .../audiolibrary}/encoders/EncoderInfo.java | 2 +- .../axet/audiolibrary}/encoders/Factory.java | 6 +- .../audiolibrary}/encoders/FileEncoder.java | 4 +- .../audiolibrary}/encoders/Format3GP.java | 3 +- .../audiolibrary}/encoders/FormatM4A.java | 2 +- .../audiolibrary}/encoders/FormatMKA.java | 2 +- .../audiolibrary}/encoders/FormatOGG.java | 2 +- .../audiolibrary}/encoders/FormatWAV.java | 4 +- .../axet/audiolibrary}/encoders/MuxerMP4.java | 2 +- .../audiolibrary}/widgets/FFTBarView.java | 8 +- .../audiolibrary}/widgets/FFTChartView.java | 10 +- .../axet/audiolibrary}/widgets/FFTView.java | 4 +- .../axet/audiolibrary}/widgets/PitchView.java | 7 +- .../ic_create_black_24dp.xml | 0 .../res/drawable-xxxhdpi}/ic_mic_24dp.xml | 0 .../res/drawable-xxxhdpi}/ic_pause_24dp.xml | 0 .../drawable-xxxhdpi}/round_button_dark.xml | 0 .../drawable-xxxhdpi}/round_button_light.xml | 0 .../res/drawable/ic_delete_black_24dp.xml | 9 + .../main/res/drawable/ic_pause_black_24dp.xml | 9 + .../res/drawable/ic_play_arrow_black_24dp.xml | 9 + .../main/res/drawable/ic_share_black_24dp.xml | 9 + .../res/layout/notifictaion_recording.xml | 2 +- .../layout/notifictaion_recording_dark.xml | 0 .../layout/notifictaion_recording_light.xml | 0 .../src/main/res/layout/recording.xml | 6 +- .../src/main/res/menu/menu_context.xml | 0 .../src/main/res/values-ru/strings.xml | 17 + .../src/main/res/values/attrs.xml | 6 + .../src/main/res/values/colors.xml | 8 + .../src/main/res/values/strings.xml | 23 + .../src/main/res/values/styles.xml | 48 ++ .../axet/audiolibrary/ExampleUnitTest.java | 17 + app/build.gradle | 7 +- .../axet/audiorecorder/ApplicationTest.java | 3 - .../activities/MainActivity.java | 454 +----------------- .../activities/RecordingActivity.java | 20 +- .../activities/SettingsActivity.java | 2 +- .../audiorecorder/app/MainApplication.java | 73 +-- .../services/RecordingService.java | 3 +- app/src/main/res/drawable-hdpi/pause.png | Bin 149 -> 0 bytes app/src/main/res/drawable-hdpi/share.png | Bin 441 -> 0 bytes app/src/main/res/drawable-hdpi/trash.png | Bin 513 -> 0 bytes app/src/main/res/drawable-mdpi/pause.png | Bin 127 -> 0 bytes app/src/main/res/drawable-mdpi/share.png | Bin 295 -> 0 bytes app/src/main/res/drawable-mdpi/trash.png | Bin 349 -> 0 bytes app/src/main/res/drawable-xhdpi/pause.png | Bin 164 -> 0 bytes app/src/main/res/drawable-xhdpi/share.png | Bin 552 -> 0 bytes app/src/main/res/drawable-xhdpi/trash.png | Bin 624 -> 0 bytes app/src/main/res/drawable-xxhdpi/pause.png | Bin 226 -> 0 bytes app/src/main/res/drawable-xxhdpi/share.png | Bin 893 -> 0 bytes app/src/main/res/drawable-xxhdpi/trash.png | Bin 976 -> 0 bytes app/src/main/res/drawable-xxxhdpi/play.png | Bin 1227 -> 0 bytes .../main/res/layout/activity_recording.xml | 4 +- app/src/main/res/values-ru/strings.xml | 15 - app/src/main/res/values/attrs.xml | 3 - app/src/main/res/values/colors.xml | 5 - app/src/main/res/values/strings.xml | 19 - app/src/main/res/values/styles.xml | 46 -- settings.gradle | 2 +- 72 files changed, 835 insertions(+), 682 deletions(-) create mode 100644 android-audio-library/.gitignore create mode 100644 android-audio-library/build.gradle create mode 100644 android-audio-library/proguard-rules.pro create mode 100644 android-audio-library/src/androidTest/java/com/github/axet/audiolibrary/ExampleInstrumentedTest.java create mode 100644 android-audio-library/src/main/AndroidManifest.xml rename {app/src/main/java/com/github/axet/audiorecorder => android-audio-library/src/main/java/com/github/axet/audiolibrary}/animations/RecordingAnimation.java (96%) create mode 100644 android-audio-library/src/main/java/com/github/axet/audiolibrary/app/MainApplication.java rename {app/src/main/java/com/github/axet/audiorecorder => android-audio-library/src/main/java/com/github/axet/audiolibrary}/app/RawSamples.java (97%) create mode 100644 android-audio-library/src/main/java/com/github/axet/audiolibrary/app/Recordings.java rename {app/src/main/java/com/github/axet/audiorecorder => android-audio-library/src/main/java/com/github/axet/audiolibrary}/app/Sound.java (94%) rename {app/src/main/java/com/github/axet/audiorecorder => android-audio-library/src/main/java/com/github/axet/audiolibrary}/app/Storage.java (98%) rename {app/src/main/java/com/github/axet/audiorecorder => android-audio-library/src/main/java/com/github/axet/audiolibrary}/encoders/Encoder.java (64%) rename {app/src/main/java/com/github/axet/audiorecorder => android-audio-library/src/main/java/com/github/axet/audiolibrary}/encoders/EncoderInfo.java (84%) rename {app/src/main/java/com/github/axet/audiorecorder => android-audio-library/src/main/java/com/github/axet/audiolibrary}/encoders/Factory.java (95%) rename {app/src/main/java/com/github/axet/audiorecorder => android-audio-library/src/main/java/com/github/axet/audiolibrary}/encoders/FileEncoder.java (95%) rename {app/src/main/java/com/github/axet/audiorecorder => android-audio-library/src/main/java/com/github/axet/audiolibrary}/encoders/Format3GP.java (90%) rename {app/src/main/java/com/github/axet/audiorecorder => android-audio-library/src/main/java/com/github/axet/audiolibrary}/encoders/FormatM4A.java (91%) rename {app/src/main/java/com/github/axet/audiorecorder => android-audio-library/src/main/java/com/github/axet/audiolibrary}/encoders/FormatMKA.java (96%) rename {app/src/main/java/com/github/axet/audiorecorder => android-audio-library/src/main/java/com/github/axet/audiolibrary}/encoders/FormatOGG.java (91%) rename {app/src/main/java/com/github/axet/audiorecorder => android-audio-library/src/main/java/com/github/axet/audiolibrary}/encoders/FormatWAV.java (94%) rename {app/src/main/java/com/github/axet/audiorecorder => android-audio-library/src/main/java/com/github/axet/audiolibrary}/encoders/MuxerMP4.java (96%) rename {app/src/main/java/com/github/axet/audiorecorder => android-audio-library/src/main/java/com/github/axet/audiolibrary}/widgets/FFTBarView.java (91%) rename {app/src/main/java/com/github/axet/audiorecorder => android-audio-library/src/main/java/com/github/axet/audiolibrary}/widgets/FFTChartView.java (88%) rename {app/src/main/java/com/github/axet/audiorecorder => android-audio-library/src/main/java/com/github/axet/audiolibrary}/widgets/FFTView.java (97%) rename {app/src/main/java/com/github/axet/audiorecorder => android-audio-library/src/main/java/com/github/axet/audiolibrary}/widgets/PitchView.java (99%) rename {app/src/main/res/drawable => android-audio-library/src/main/res/drawable-xxxhdpi}/ic_create_black_24dp.xml (100%) rename {app/src/main/res/drawable => android-audio-library/src/main/res/drawable-xxxhdpi}/ic_mic_24dp.xml (100%) rename {app/src/main/res/drawable => android-audio-library/src/main/res/drawable-xxxhdpi}/ic_pause_24dp.xml (100%) rename {app/src/main/res/drawable => android-audio-library/src/main/res/drawable-xxxhdpi}/round_button_dark.xml (100%) rename {app/src/main/res/drawable => android-audio-library/src/main/res/drawable-xxxhdpi}/round_button_light.xml (100%) create mode 100644 android-audio-library/src/main/res/drawable/ic_delete_black_24dp.xml create mode 100644 android-audio-library/src/main/res/drawable/ic_pause_black_24dp.xml create mode 100644 android-audio-library/src/main/res/drawable/ic_play_arrow_black_24dp.xml create mode 100644 android-audio-library/src/main/res/drawable/ic_share_black_24dp.xml rename {app => android-audio-library}/src/main/res/layout/notifictaion_recording.xml (97%) rename {app => android-audio-library}/src/main/res/layout/notifictaion_recording_dark.xml (100%) rename {app => android-audio-library}/src/main/res/layout/notifictaion_recording_light.xml (100%) rename {app => android-audio-library}/src/main/res/layout/recording.xml (96%) rename {app => android-audio-library}/src/main/res/menu/menu_context.xml (100%) create mode 100644 android-audio-library/src/main/res/values-ru/strings.xml create mode 100644 android-audio-library/src/main/res/values/attrs.xml create mode 100644 android-audio-library/src/main/res/values/colors.xml create mode 100644 android-audio-library/src/main/res/values/strings.xml create mode 100644 android-audio-library/src/main/res/values/styles.xml create mode 100644 android-audio-library/src/test/java/com/github/axet/audiolibrary/ExampleUnitTest.java delete mode 100644 app/src/main/res/drawable-hdpi/pause.png delete mode 100644 app/src/main/res/drawable-hdpi/share.png delete mode 100644 app/src/main/res/drawable-hdpi/trash.png delete mode 100644 app/src/main/res/drawable-mdpi/pause.png delete mode 100644 app/src/main/res/drawable-mdpi/share.png delete mode 100644 app/src/main/res/drawable-mdpi/trash.png delete mode 100644 app/src/main/res/drawable-xhdpi/pause.png delete mode 100644 app/src/main/res/drawable-xhdpi/share.png delete mode 100644 app/src/main/res/drawable-xhdpi/trash.png delete mode 100644 app/src/main/res/drawable-xxhdpi/pause.png delete mode 100644 app/src/main/res/drawable-xxhdpi/share.png delete mode 100644 app/src/main/res/drawable-xxhdpi/trash.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/play.png diff --git a/android-audio-library/.gitignore b/android-audio-library/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/android-audio-library/.gitignore @@ -0,0 +1 @@ +/build diff --git a/android-audio-library/build.gradle b/android-audio-library/build.gradle new file mode 100644 index 0000000..23c150a --- /dev/null +++ b/android-audio-library/build.gradle @@ -0,0 +1,38 @@ +apply plugin: 'com.android.library' + +android { + compileSdkVersion 25 + buildToolsVersion "25.0.2" + + defaultConfig { + minSdkVersion 9 + targetSdkVersion 25 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + compile fileTree(dir: 'libs', include: ['*.jar']) + androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { + exclude group: 'com.android.support', module: 'support-annotations' + }) + compile 'com.android.support:design:25.2.0' + compile 'com.android.support:appcompat-v7:25.2.0' + compile 'com.google.android.gms:play-services-appindexing:9.8.0' + compile 'org.apache.commons:commons-math3:3.6.1' + compile 'com.github.axet:android-library:1.9.9' //compile project(':android-library') + compile 'com.github.axet:jebml:0.0.2' // compile project(':jebml') + compile 'com.github.axet:vorbis:1.0.0' // compile project(':vorbis') + testCompile 'junit:junit:4.12' + compile project(path: ':android-library') +} diff --git a/android-audio-library/proguard-rules.pro b/android-audio-library/proguard-rules.pro new file mode 100644 index 0000000..f45cfad --- /dev/null +++ b/android-audio-library/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /Users/axet/Library/Android/sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/android-audio-library/src/androidTest/java/com/github/axet/audiolibrary/ExampleInstrumentedTest.java b/android-audio-library/src/androidTest/java/com/github/axet/audiolibrary/ExampleInstrumentedTest.java new file mode 100644 index 0000000..886cace --- /dev/null +++ b/android-audio-library/src/androidTest/java/com/github/axet/audiolibrary/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.github.axet.audiolibrary; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumentation test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("com.github.axet.audiolibrary.test", appContext.getPackageName()); + } +} diff --git a/android-audio-library/src/main/AndroidManifest.xml b/android-audio-library/src/main/AndroidManifest.xml new file mode 100644 index 0000000..dbe8071 --- /dev/null +++ b/android-audio-library/src/main/AndroidManifest.xml @@ -0,0 +1,9 @@ + + + + + + + diff --git a/app/src/main/java/com/github/axet/audiorecorder/animations/RecordingAnimation.java b/android-audio-library/src/main/java/com/github/axet/audiolibrary/animations/RecordingAnimation.java similarity index 96% rename from app/src/main/java/com/github/axet/audiorecorder/animations/RecordingAnimation.java rename to android-audio-library/src/main/java/com/github/axet/audiolibrary/animations/RecordingAnimation.java index eb13e12..d7d8f93 100644 --- a/app/src/main/java/com/github/axet/audiorecorder/animations/RecordingAnimation.java +++ b/android-audio-library/src/main/java/com/github/axet/audiolibrary/animations/RecordingAnimation.java @@ -1,15 +1,14 @@ -package com.github.axet.audiorecorder.animations; +package com.github.axet.audiolibrary.animations; import android.annotation.TargetApi; import android.os.Build; import android.os.Handler; -import android.util.Log; import android.view.View; import android.view.animation.Transformation; import android.widget.ListView; import com.github.axet.androidlibrary.animations.MarginAnimation; -import com.github.axet.audiorecorder.R; +import com.github.axet.audiolibrary.R; public class RecordingAnimation extends MarginAnimation { ListView list; diff --git a/android-audio-library/src/main/java/com/github/axet/audiolibrary/app/MainApplication.java b/android-audio-library/src/main/java/com/github/axet/audiolibrary/app/MainApplication.java new file mode 100644 index 0000000..b5494f8 --- /dev/null +++ b/android-audio-library/src/main/java/com/github/axet/audiolibrary/app/MainApplication.java @@ -0,0 +1,83 @@ +package com.github.axet.audiolibrary.app; + +import android.app.Application; +import android.content.Context; +import android.content.SharedPreferences; +import android.media.AudioFormat; +import android.preference.PreferenceManager; + +import com.github.axet.androidlibrary.app.MainLibrary; +import com.github.axet.audiolibrary.R; + +public class MainApplication extends Application { + public static final String PREFERENCE_STORAGE = "storage_path"; + public static final String PREFERENCE_RATE = "sample_rate"; + public static final String PREFERENCE_CALL = "call"; + public static final String PREFERENCE_SILENT = "silence"; + public static final String PREFERENCE_ENCODING = "encoding"; + public static final String PREFERENCE_LAST = "last_recording"; + public static final String PREFERENCE_THEME = "theme"; + public static final String PREFERENCE_CHANNELS = "channels"; + + + @Override + public void onCreate() { + super.onCreate(); + Context context = this; + context.setTheme(getUserTheme()); + } + + public int getUserTheme() { + return getTheme(this, R.style.AppThemeLight, R.style.AppThemeDark); + } + + public static int getTheme(Context context, int light, int dark) { + final SharedPreferences shared = PreferenceManager.getDefaultSharedPreferences(context); + String theme = shared.getString(PREFERENCE_THEME, ""); + if (theme.equals("Theme_Dark")) { + return dark; + } else { + return light; + } + } + + public String formatFree(long free, long left) { + String str = ""; + + long diff = left; + + int diffSeconds = (int) (diff / 1000 % 60); + int diffMinutes = (int) (diff / (60 * 1000) % 60); + int diffHours = (int) (diff / (60 * 60 * 1000) % 24); + int diffDays = (int) (diff / (24 * 60 * 60 * 1000)); + + if (diffDays > 0) { + str = getResources().getQuantityString(R.plurals.days, diffDays, diffDays); + } else if (diffHours > 0) { + str = getResources().getQuantityString(R.plurals.hours, diffHours, diffHours); + } else if (diffMinutes > 0) { + str = getResources().getQuantityString(R.plurals.minutes, diffMinutes, diffMinutes); + } else if (diffSeconds > 0) { + str = getResources().getQuantityString(R.plurals.seconds, diffSeconds, diffSeconds); + } + + return getString(R.string.title_header, MainLibrary.formatSize(this, free), str); + } + + public static int getChannels(Context context) { + final SharedPreferences shared = PreferenceManager.getDefaultSharedPreferences(context); + int i = Integer.parseInt(shared.getString(MainApplication.PREFERENCE_CHANNELS, "1")); + return i; + } + + public static int getMode(Context context) { + switch (getChannels(context)) { + case 1: + return AudioFormat.CHANNEL_IN_MONO; + case 2: + return AudioFormat.CHANNEL_IN_STEREO; + default: + throw new RuntimeException("unknown mode"); + } + } +} diff --git a/app/src/main/java/com/github/axet/audiorecorder/app/RawSamples.java b/android-audio-library/src/main/java/com/github/axet/audiolibrary/app/RawSamples.java similarity index 97% rename from app/src/main/java/com/github/axet/audiorecorder/app/RawSamples.java rename to android-audio-library/src/main/java/com/github/axet/audiolibrary/app/RawSamples.java index 8d6245a..bd565da 100644 --- a/app/src/main/java/com/github/axet/audiorecorder/app/RawSamples.java +++ b/android-audio-library/src/main/java/com/github/axet/audiolibrary/app/RawSamples.java @@ -1,10 +1,8 @@ -package com.github.axet.audiorecorder.app; +package com.github.axet.audiolibrary.app; import android.media.AudioFormat; import android.util.Log; -import com.github.axet.audiorecorder.activities.RecordingActivity; - import org.apache.commons.math3.complex.Complex; import org.apache.commons.math3.transform.DftNormalization; import org.apache.commons.math3.transform.FastFourierTransformer; diff --git a/android-audio-library/src/main/java/com/github/axet/audiolibrary/app/Recordings.java b/android-audio-library/src/main/java/com/github/axet/audiolibrary/app/Recordings.java new file mode 100644 index 0000000..c2dd900 --- /dev/null +++ b/android-audio-library/src/main/java/com/github/axet/audiolibrary/app/Recordings.java @@ -0,0 +1,447 @@ +package com.github.axet.audiolibrary.app; + +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.media.MediaPlayer; +import android.net.Uri; +import android.os.Handler; +import android.support.v7.app.AlertDialog; +import android.support.v7.widget.PopupMenu; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AbsListView; +import android.widget.ArrayAdapter; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.SeekBar; +import android.widget.TextView; +import android.widget.Toast; + +import com.github.axet.androidlibrary.animations.RemoveItemAnimation; +import com.github.axet.androidlibrary.app.MainLibrary; +import com.github.axet.androidlibrary.widgets.OpenFileDialog; +import com.github.axet.androidlibrary.widgets.PopupShareActionProvider; +import com.github.axet.audiolibrary.R; +import com.github.axet.audiolibrary.animations.RecordingAnimation; +import com.github.axet.audiolibrary.encoders.Factory; + +import java.io.File; +import java.text.SimpleDateFormat; +import java.util.Comparator; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +public class Recordings extends ArrayAdapter implements AbsListView.OnScrollListener { + public static String TAG = Recordings.class.getSimpleName(); + + static final int TYPE_COLLAPSED = 0; + static final int TYPE_EXPANDED = 1; + static final int TYPE_DELETED = 2; + + public static class SortFiles implements Comparator { + @Override + public int compare(File file, File file2) { + if (file.isDirectory() && file2.isFile()) + return -1; + else if (file.isFile() && file2.isDirectory()) + return 1; + else + return file.getPath().compareTo(file2.getPath()); + } + } + + Handler handler; + Storage storage; + MediaPlayer player; + Runnable updatePlayer; + int selected = -1; + ListView list; + PopupShareActionProvider shareProvider; + int scrollState; + + Map durations = new TreeMap<>(); + + public Recordings(Context context, ListView list) { + super(context, 0); + this.list = list; + this.handler = new Handler(); + this.storage = new Storage(context); + this.list.setOnScrollListener(this); + } + + + @Override + public void onScrollStateChanged(AbsListView view, int scrollState) { + this.scrollState = scrollState; + } + + @Override + public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { + } + + public void scan(File dir) { + setNotifyOnChange(false); + clear(); + durations.clear(); + + List ff = storage.scan(dir); + + for (File f : ff) { + if (f.isFile()) { + MediaPlayer mp = null; + try { + mp = MediaPlayer.create(getContext(), Uri.fromFile(f)); + } catch (IllegalStateException e) { + Log.d(TAG, f.toString(), e); + } + if (mp != null) { + int d = mp.getDuration(); + mp.release(); + durations.put(f, d); + add(f); + } else { + Log.e(TAG, f.toString()); + } + } + } + + sort(new SortFiles()); + notifyDataSetChanged(); + } + + public void close() { + if (player != null) { + player.release(); + player = null; + } + if (updatePlayer != null) { + handler.removeCallbacks(updatePlayer); + updatePlayer = null; + } + } + + public void load() { + scan(storage.getStoragePath()); + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + LayoutInflater inflater = LayoutInflater.from(getContext()); + + if (convertView == null) { + convertView = inflater.inflate(R.layout.recording, parent, false); + convertView.setTag(-1); + } + + final View view = convertView; + final View base = convertView.findViewById(R.id.recording_base); + + if ((int) convertView.getTag() == TYPE_DELETED) { + RemoveItemAnimation.restore(base); + convertView.setTag(-1); + } + + final File f = getItem(position); + + TextView title = (TextView) convertView.findViewById(R.id.recording_title); + title.setText(f.getName()); + + SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + TextView time = (TextView) convertView.findViewById(R.id.recording_time); + time.setText(s.format(new Date(f.lastModified()))); + + TextView dur = (TextView) convertView.findViewById(R.id.recording_duration); + dur.setText(MainLibrary.formatDuration(getContext(), durations.get(f))); + + TextView size = (TextView) convertView.findViewById(R.id.recording_size); + size.setText(MainLibrary.formatSize(getContext(), f.length())); + + final View playerBase = convertView.findViewById(R.id.recording_player); + playerBase.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + } + }); + + final Runnable delete = new Runnable() { + @Override + public void run() { + AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); + builder.setTitle(R.string.delete_recording); + builder.setMessage("...\\" + f.getName() + "\n\n" + getContext().getString(R.string.are_you_sure)); + builder.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + playerStop(); + dialog.cancel(); + RemoveItemAnimation.apply(list, base, new Runnable() { + @Override + public void run() { + f.delete(); + view.setTag(TYPE_DELETED); + select(-1); + load(); + } + }); + } + }); + builder.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.cancel(); + } + }); + builder.show(); + } + }; + + final Runnable rename = new Runnable() { + @Override + public void run() { + final OpenFileDialog.EditTextDialog e = new OpenFileDialog.EditTextDialog(getContext()); + e.setTitle(getContext().getString(R.string.rename_recording)); + e.setText(Storage.getNameNoExt(f)); + e.setPositiveButton(new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + String ext = Storage.getExt(f); + String s = String.format("%s.%s", e.getText(), ext); + File ff = new File(f.getParent(), s); + f.renameTo(ff); + load(); + } + }); + e.show(); + + } + }; + + if (selected == position) { + RecordingAnimation.apply(list, convertView, true, scrollState == SCROLL_STATE_IDLE && (int) convertView.getTag() == TYPE_COLLAPSED); + convertView.setTag(TYPE_EXPANDED); + + updatePlayerText(convertView, f); + + final View play = convertView.findViewById(R.id.recording_player_play); + play.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (player == null) { + playerPlay(playerBase, f); + } else if (player.isPlaying()) { + playerPause(playerBase, f); + } else { + playerPlay(playerBase, f); + } + } + }); + + final View edit = convertView.findViewById(R.id.recording_player_edit); + edit.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + rename.run(); + } + }); + + final View share = convertView.findViewById(R.id.recording_player_share); + share.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + shareProvider = new PopupShareActionProvider(getContext(), share); + + Intent emailIntent = new Intent(Intent.ACTION_SEND); + emailIntent.setType(Factory.MP4A); + emailIntent.putExtra(Intent.EXTRA_EMAIL, ""); + emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(f)); + emailIntent.putExtra(Intent.EXTRA_SUBJECT, f.getName()); + emailIntent.putExtra(Intent.EXTRA_TEXT, getContext().getString(R.string.shared_via, getContext().getString(R.string.app_name))); + + shareProvider.setShareIntent(emailIntent); + + shareProvider.show(); + } + }); + + View trash = convertView.findViewById(R.id.recording_player_trash); + trash.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + delete.run(); + } + }); + + convertView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + select(-1); + } + }); + } else { + RecordingAnimation.apply(list, convertView, false, scrollState == SCROLL_STATE_IDLE && (int) convertView.getTag() == TYPE_EXPANDED); + convertView.setTag(TYPE_COLLAPSED); + + convertView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + select(position); + } + }); + } + + convertView.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + PopupMenu popup = new PopupMenu(getContext(), v); + MenuInflater inflater = popup.getMenuInflater(); + inflater.inflate(R.menu.menu_context, popup.getMenu()); + popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + if (item.getItemId() == R.id.action_delete) { + delete.run(); + return true; + } + if (item.getItemId() == R.id.action_rename) { + rename.run(); + return true; + } + return false; + } + }); + popup.show(); + return true; + } + }); + + return convertView; + } + + void playerPlay(View v, File f) { + if (player == null) + player = MediaPlayer.create(getContext(), Uri.fromFile(f)); + if (player == null) { + Toast.makeText(getContext(), R.string.file_not_found, Toast.LENGTH_SHORT).show(); + return; + } + player.start(); + + updatePlayerRun(v, f); + } + + void playerPause(View v, File f) { + if (player != null) { + player.pause(); + } + if (updatePlayer != null) { + handler.removeCallbacks(updatePlayer); + updatePlayer = null; + } + updatePlayerText(v, f); + } + + void playerStop() { + if (updatePlayer != null) { + handler.removeCallbacks(updatePlayer); + updatePlayer = null; + } + if (player != null) { + player.stop(); + player.release(); + player = null; + } + } + + void updatePlayerRun(final View v, final File f) { + boolean playing = updatePlayerText(v, f); + + if (updatePlayer != null) { + handler.removeCallbacks(updatePlayer); + updatePlayer = null; + } + + if (!playing) { + playerStop(); // clear player instance + updatePlayerText(v, f); // update length + return; + } + + updatePlayer = new Runnable() { + @Override + public void run() { + updatePlayerRun(v, f); + } + }; + handler.postDelayed(updatePlayer, 200); + } + + boolean updatePlayerText(final View v, final File f) { + ImageView i = (ImageView) v.findViewById(R.id.recording_player_play); + + final boolean playing = player != null && player.isPlaying(); + + i.setImageResource(playing ? R.drawable.ic_pause_24dp : R.drawable.ic_play_arrow_black_24dp); + + TextView start = (TextView) v.findViewById(R.id.recording_player_start); + SeekBar bar = (SeekBar) v.findViewById(R.id.recording_player_seek); + TextView end = (TextView) v.findViewById(R.id.recording_player_end); + + int c = 0; + int d = durations.get(f); + + if (player != null) { + c = player.getCurrentPosition(); + d = player.getDuration(); + } + + bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + if (!fromUser) + return; + + if (player == null) + playerPlay(v, f); + + if (player != null) { + player.seekTo(progress); + if (!player.isPlaying()) + playerPlay(v, f); + } + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + } + }); + + start.setText(MainLibrary.formatDuration(getContext(), c)); + bar.setMax(d); + bar.setKeyProgressIncrement(1); + bar.setProgress(c); + end.setText("-" + MainLibrary.formatDuration(getContext(), d - c)); + + return playing; + } + + public void select(int pos) { + selected = pos; + notifyDataSetChanged(); + playerStop(); + } + + public int getSelected() { + return selected; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/github/axet/audiorecorder/app/Sound.java b/android-audio-library/src/main/java/com/github/axet/audiolibrary/app/Sound.java similarity index 94% rename from app/src/main/java/com/github/axet/audiorecorder/app/Sound.java rename to android-audio-library/src/main/java/com/github/axet/audiolibrary/app/Sound.java index d865da0..c8934c9 100644 --- a/app/src/main/java/com/github/axet/audiorecorder/app/Sound.java +++ b/android-audio-library/src/main/java/com/github/axet/audiolibrary/app/Sound.java @@ -1,15 +1,12 @@ -package com.github.axet.audiorecorder.app; +package com.github.axet.audiolibrary.app; import android.content.Context; import android.content.SharedPreferences; import android.media.AudioFormat; import android.media.AudioManager; -import android.media.AudioRecord; import android.media.AudioTrack; import android.preference.PreferenceManager; -import java.util.Arrays; - public class Sound extends com.github.axet.androidlibrary.sound.Sound { public Sound(Context context) { diff --git a/app/src/main/java/com/github/axet/audiorecorder/app/Storage.java b/android-audio-library/src/main/java/com/github/axet/audiolibrary/app/Storage.java similarity index 98% rename from app/src/main/java/com/github/axet/audiorecorder/app/Storage.java rename to android-audio-library/src/main/java/com/github/axet/audiolibrary/app/Storage.java index efefa77..0319f30 100644 --- a/app/src/main/java/com/github/axet/audiorecorder/app/Storage.java +++ b/android-audio-library/src/main/java/com/github/axet/audiolibrary/app/Storage.java @@ -1,4 +1,4 @@ -package com.github.axet.audiorecorder.app; +package com.github.axet.audiolibrary.app; import android.Manifest; import android.content.Context; @@ -9,8 +9,7 @@ import android.os.StatFs; import android.preference.PreferenceManager; import android.support.v4.content.ContextCompat; -import com.github.axet.audiorecorder.R; -import com.github.axet.audiorecorder.encoders.Factory; +import com.github.axet.audiolibrary.encoders.Factory; import java.io.File; import java.io.FileInputStream; diff --git a/app/src/main/java/com/github/axet/audiorecorder/encoders/Encoder.java b/android-audio-library/src/main/java/com/github/axet/audiolibrary/encoders/Encoder.java similarity index 64% rename from app/src/main/java/com/github/axet/audiorecorder/encoders/Encoder.java rename to android-audio-library/src/main/java/com/github/axet/audiolibrary/encoders/Encoder.java index d3f2678..69620fb 100644 --- a/app/src/main/java/com/github/axet/audiorecorder/encoders/Encoder.java +++ b/android-audio-library/src/main/java/com/github/axet/audiolibrary/encoders/Encoder.java @@ -1,4 +1,4 @@ -package com.github.axet.audiorecorder.encoders; +package com.github.axet.audiolibrary.encoders; public interface Encoder { void encode(short[] buf, int len); diff --git a/app/src/main/java/com/github/axet/audiorecorder/encoders/EncoderInfo.java b/android-audio-library/src/main/java/com/github/axet/audiolibrary/encoders/EncoderInfo.java similarity index 84% rename from app/src/main/java/com/github/axet/audiorecorder/encoders/EncoderInfo.java rename to android-audio-library/src/main/java/com/github/axet/audiolibrary/encoders/EncoderInfo.java index a5636b6..3213f8a 100644 --- a/app/src/main/java/com/github/axet/audiorecorder/encoders/EncoderInfo.java +++ b/android-audio-library/src/main/java/com/github/axet/audiolibrary/encoders/EncoderInfo.java @@ -1,4 +1,4 @@ -package com.github.axet.audiorecorder.encoders; +package com.github.axet.audiolibrary.encoders; public class EncoderInfo { public int channels; diff --git a/app/src/main/java/com/github/axet/audiorecorder/encoders/Factory.java b/android-audio-library/src/main/java/com/github/axet/audiolibrary/encoders/Factory.java similarity index 95% rename from app/src/main/java/com/github/axet/audiorecorder/encoders/Factory.java rename to android-audio-library/src/main/java/com/github/axet/audiolibrary/encoders/Factory.java index 005b18e..bcaa45f 100644 --- a/app/src/main/java/com/github/axet/audiorecorder/encoders/Factory.java +++ b/android-audio-library/src/main/java/com/github/axet/audiolibrary/encoders/Factory.java @@ -1,11 +1,11 @@ -package com.github.axet.audiorecorder.encoders; +package com.github.axet.audiolibrary.encoders; import android.content.Context; import android.media.AudioFormat; import android.os.Build; -import com.github.axet.audiorecorder.R; -import com.github.axet.audiorecorder.app.RawSamples; +import com.github.axet.audiolibrary.R; +import com.github.axet.audiolibrary.app.RawSamples; import java.io.File; import java.util.ArrayList; diff --git a/app/src/main/java/com/github/axet/audiorecorder/encoders/FileEncoder.java b/android-audio-library/src/main/java/com/github/axet/audiolibrary/encoders/FileEncoder.java similarity index 95% rename from app/src/main/java/com/github/axet/audiorecorder/encoders/FileEncoder.java rename to android-audio-library/src/main/java/com/github/axet/audiolibrary/encoders/FileEncoder.java index 31014cb..a3f538e 100644 --- a/app/src/main/java/com/github/axet/audiorecorder/encoders/FileEncoder.java +++ b/android-audio-library/src/main/java/com/github/axet/audiolibrary/encoders/FileEncoder.java @@ -1,10 +1,10 @@ -package com.github.axet.audiorecorder.encoders; +package com.github.axet.audiolibrary.encoders; import android.content.Context; import android.os.Handler; import android.util.Log; -import com.github.axet.audiorecorder.app.RawSamples; +import com.github.axet.audiolibrary.app.RawSamples; import java.io.File; diff --git a/app/src/main/java/com/github/axet/audiorecorder/encoders/Format3GP.java b/android-audio-library/src/main/java/com/github/axet/audiolibrary/encoders/Format3GP.java similarity index 90% rename from app/src/main/java/com/github/axet/audiorecorder/encoders/Format3GP.java rename to android-audio-library/src/main/java/com/github/axet/audiolibrary/encoders/Format3GP.java index c333c8b..dd77c0a 100755 --- a/app/src/main/java/com/github/axet/audiorecorder/encoders/Format3GP.java +++ b/android-audio-library/src/main/java/com/github/axet/audiolibrary/encoders/Format3GP.java @@ -1,7 +1,6 @@ -package com.github.axet.audiorecorder.encoders; +package com.github.axet.audiolibrary.encoders; import android.annotation.TargetApi; -import android.media.MediaCodecList; import android.media.MediaFormat; import java.io.File; diff --git a/app/src/main/java/com/github/axet/audiorecorder/encoders/FormatM4A.java b/android-audio-library/src/main/java/com/github/axet/audiolibrary/encoders/FormatM4A.java similarity index 91% rename from app/src/main/java/com/github/axet/audiorecorder/encoders/FormatM4A.java rename to android-audio-library/src/main/java/com/github/axet/audiolibrary/encoders/FormatM4A.java index bdfb786..f03eff4 100755 --- a/app/src/main/java/com/github/axet/audiorecorder/encoders/FormatM4A.java +++ b/android-audio-library/src/main/java/com/github/axet/audiolibrary/encoders/FormatM4A.java @@ -1,4 +1,4 @@ -package com.github.axet.audiorecorder.encoders; +package com.github.axet.audiolibrary.encoders; import android.annotation.TargetApi; import android.media.MediaCodecInfo; diff --git a/app/src/main/java/com/github/axet/audiorecorder/encoders/FormatMKA.java b/android-audio-library/src/main/java/com/github/axet/audiolibrary/encoders/FormatMKA.java similarity index 96% rename from app/src/main/java/com/github/axet/audiorecorder/encoders/FormatMKA.java rename to android-audio-library/src/main/java/com/github/axet/audiolibrary/encoders/FormatMKA.java index 226b32b..80f86a9 100755 --- a/app/src/main/java/com/github/axet/audiorecorder/encoders/FormatMKA.java +++ b/android-audio-library/src/main/java/com/github/axet/audiolibrary/encoders/FormatMKA.java @@ -1,4 +1,4 @@ -package com.github.axet.audiorecorder.encoders; +package com.github.axet.audiolibrary.encoders; import android.annotation.TargetApi; import android.media.MediaCodec; diff --git a/app/src/main/java/com/github/axet/audiorecorder/encoders/FormatOGG.java b/android-audio-library/src/main/java/com/github/axet/audiolibrary/encoders/FormatOGG.java similarity index 91% rename from app/src/main/java/com/github/axet/audiorecorder/encoders/FormatOGG.java rename to android-audio-library/src/main/java/com/github/axet/audiolibrary/encoders/FormatOGG.java index fcde098..3a94ac0 100755 --- a/app/src/main/java/com/github/axet/audiorecorder/encoders/FormatOGG.java +++ b/android-audio-library/src/main/java/com/github/axet/audiolibrary/encoders/FormatOGG.java @@ -1,4 +1,4 @@ -package com.github.axet.audiorecorder.encoders; +package com.github.axet.audiolibrary.encoders; import com.github.axet.vorbisjni.Vorbis; diff --git a/app/src/main/java/com/github/axet/audiorecorder/encoders/FormatWAV.java b/android-audio-library/src/main/java/com/github/axet/audiolibrary/encoders/FormatWAV.java similarity index 94% rename from app/src/main/java/com/github/axet/audiorecorder/encoders/FormatWAV.java rename to android-audio-library/src/main/java/com/github/axet/audiolibrary/encoders/FormatWAV.java index 09a2df9..4dad027 100755 --- a/app/src/main/java/com/github/axet/audiorecorder/encoders/FormatWAV.java +++ b/android-audio-library/src/main/java/com/github/axet/audiolibrary/encoders/FormatWAV.java @@ -1,9 +1,7 @@ -package com.github.axet.audiorecorder.encoders; +package com.github.axet.audiolibrary.encoders; // based on http://soundfile.sapp.org/doc/WaveFormat/ -import android.util.Log; - import java.io.*; import java.nio.ByteBuffer; import java.nio.ByteOrder; diff --git a/app/src/main/java/com/github/axet/audiorecorder/encoders/MuxerMP4.java b/android-audio-library/src/main/java/com/github/axet/audiolibrary/encoders/MuxerMP4.java similarity index 96% rename from app/src/main/java/com/github/axet/audiorecorder/encoders/MuxerMP4.java rename to android-audio-library/src/main/java/com/github/axet/audiolibrary/encoders/MuxerMP4.java index aea3563..e460a34 100755 --- a/app/src/main/java/com/github/axet/audiorecorder/encoders/MuxerMP4.java +++ b/android-audio-library/src/main/java/com/github/axet/audiolibrary/encoders/MuxerMP4.java @@ -1,4 +1,4 @@ -package com.github.axet.audiorecorder.encoders; +package com.github.axet.audiolibrary.encoders; import android.annotation.TargetApi; import android.media.MediaCodec; diff --git a/app/src/main/java/com/github/axet/audiorecorder/widgets/FFTBarView.java b/android-audio-library/src/main/java/com/github/axet/audiolibrary/widgets/FFTBarView.java similarity index 91% rename from app/src/main/java/com/github/axet/audiorecorder/widgets/FFTBarView.java rename to android-audio-library/src/main/java/com/github/axet/audiolibrary/widgets/FFTBarView.java index e18e38e..63aad5c 100644 --- a/app/src/main/java/com/github/axet/audiorecorder/widgets/FFTBarView.java +++ b/android-audio-library/src/main/java/com/github/axet/audiolibrary/widgets/FFTBarView.java @@ -1,16 +1,10 @@ -package com.github.axet.audiorecorder.widgets; +package com.github.axet.audiolibrary.widgets; import android.content.Context; import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Rect; import android.util.AttributeSet; -import android.util.TypedValue; -import android.view.View; import com.github.axet.androidlibrary.widgets.ThemeUtils; -import com.github.axet.audiorecorder.app.RawSamples; public class FFTBarView extends FFTView { public static final String TAG = FFTBarView.class.getSimpleName(); diff --git a/app/src/main/java/com/github/axet/audiorecorder/widgets/FFTChartView.java b/android-audio-library/src/main/java/com/github/axet/audiolibrary/widgets/FFTChartView.java similarity index 88% rename from app/src/main/java/com/github/axet/audiorecorder/widgets/FFTChartView.java rename to android-audio-library/src/main/java/com/github/axet/audiolibrary/widgets/FFTChartView.java index dfcd50e..86d60e7 100644 --- a/app/src/main/java/com/github/axet/audiorecorder/widgets/FFTChartView.java +++ b/android-audio-library/src/main/java/com/github/axet/audiolibrary/widgets/FFTChartView.java @@ -1,17 +1,11 @@ -package com.github.axet.audiorecorder.widgets; +package com.github.axet.audiolibrary.widgets; import android.content.Context; -import android.content.res.Resources; import android.graphics.Canvas; import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Rect; -import android.os.Build; import android.util.AttributeSet; -import android.util.TypedValue; -import android.view.View; -import com.github.axet.audiorecorder.app.RawSamples; +import com.github.axet.audiolibrary.app.RawSamples; public class FFTChartView extends FFTView { public static final String TAG = FFTChartView.class.getSimpleName(); diff --git a/app/src/main/java/com/github/axet/audiorecorder/widgets/FFTView.java b/android-audio-library/src/main/java/com/github/axet/audiolibrary/widgets/FFTView.java similarity index 97% rename from app/src/main/java/com/github/axet/audiorecorder/widgets/FFTView.java rename to android-audio-library/src/main/java/com/github/axet/audiolibrary/widgets/FFTView.java index 276441e..508eabd 100644 --- a/app/src/main/java/com/github/axet/audiorecorder/widgets/FFTView.java +++ b/android-audio-library/src/main/java/com/github/axet/audiolibrary/widgets/FFTView.java @@ -1,15 +1,13 @@ -package com.github.axet.audiorecorder.widgets; +package com.github.axet.audiolibrary.widgets; import android.content.Context; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.util.AttributeSet; -import android.util.TypedValue; import android.view.View; import com.github.axet.androidlibrary.widgets.ThemeUtils; -import com.github.axet.audiorecorder.app.RawSamples; import org.apache.commons.math3.complex.Complex; import org.apache.commons.math3.transform.DftNormalization; diff --git a/app/src/main/java/com/github/axet/audiorecorder/widgets/PitchView.java b/android-audio-library/src/main/java/com/github/axet/audiolibrary/widgets/PitchView.java similarity index 99% rename from app/src/main/java/com/github/axet/audiorecorder/widgets/PitchView.java rename to android-audio-library/src/main/java/com/github/axet/audiolibrary/widgets/PitchView.java index c3816c3..f0e04d7 100644 --- a/app/src/main/java/com/github/axet/audiorecorder/widgets/PitchView.java +++ b/android-audio-library/src/main/java/com/github/axet/audiolibrary/widgets/PitchView.java @@ -1,4 +1,4 @@ -package com.github.axet.audiorecorder.widgets; +package com.github.axet.audiolibrary.widgets; import android.content.Context; import android.graphics.Canvas; @@ -7,13 +7,12 @@ import android.graphics.Paint; import android.graphics.Rect; import android.os.Handler; import android.util.AttributeSet; -import android.util.Log; import android.view.View; import android.view.ViewGroup; import com.github.axet.androidlibrary.widgets.ThemeUtils; -import com.github.axet.audiorecorder.R; -import com.github.axet.audiorecorder.app.RawSamples; +import com.github.axet.audiolibrary.R; +import com.github.axet.audiolibrary.app.RawSamples; import java.util.LinkedList; import java.util.List; diff --git a/app/src/main/res/drawable/ic_create_black_24dp.xml b/android-audio-library/src/main/res/drawable-xxxhdpi/ic_create_black_24dp.xml similarity index 100% rename from app/src/main/res/drawable/ic_create_black_24dp.xml rename to android-audio-library/src/main/res/drawable-xxxhdpi/ic_create_black_24dp.xml diff --git a/app/src/main/res/drawable/ic_mic_24dp.xml b/android-audio-library/src/main/res/drawable-xxxhdpi/ic_mic_24dp.xml similarity index 100% rename from app/src/main/res/drawable/ic_mic_24dp.xml rename to android-audio-library/src/main/res/drawable-xxxhdpi/ic_mic_24dp.xml diff --git a/app/src/main/res/drawable/ic_pause_24dp.xml b/android-audio-library/src/main/res/drawable-xxxhdpi/ic_pause_24dp.xml similarity index 100% rename from app/src/main/res/drawable/ic_pause_24dp.xml rename to android-audio-library/src/main/res/drawable-xxxhdpi/ic_pause_24dp.xml diff --git a/app/src/main/res/drawable/round_button_dark.xml b/android-audio-library/src/main/res/drawable-xxxhdpi/round_button_dark.xml similarity index 100% rename from app/src/main/res/drawable/round_button_dark.xml rename to android-audio-library/src/main/res/drawable-xxxhdpi/round_button_dark.xml diff --git a/app/src/main/res/drawable/round_button_light.xml b/android-audio-library/src/main/res/drawable-xxxhdpi/round_button_light.xml similarity index 100% rename from app/src/main/res/drawable/round_button_light.xml rename to android-audio-library/src/main/res/drawable-xxxhdpi/round_button_light.xml diff --git a/android-audio-library/src/main/res/drawable/ic_delete_black_24dp.xml b/android-audio-library/src/main/res/drawable/ic_delete_black_24dp.xml new file mode 100644 index 0000000..39e64d6 --- /dev/null +++ b/android-audio-library/src/main/res/drawable/ic_delete_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/android-audio-library/src/main/res/drawable/ic_pause_black_24dp.xml b/android-audio-library/src/main/res/drawable/ic_pause_black_24dp.xml new file mode 100644 index 0000000..8356ff5 --- /dev/null +++ b/android-audio-library/src/main/res/drawable/ic_pause_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/android-audio-library/src/main/res/drawable/ic_play_arrow_black_24dp.xml b/android-audio-library/src/main/res/drawable/ic_play_arrow_black_24dp.xml new file mode 100644 index 0000000..81a8f74 --- /dev/null +++ b/android-audio-library/src/main/res/drawable/ic_play_arrow_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/android-audio-library/src/main/res/drawable/ic_share_black_24dp.xml b/android-audio-library/src/main/res/drawable/ic_share_black_24dp.xml new file mode 100644 index 0000000..e3fe874 --- /dev/null +++ b/android-audio-library/src/main/res/drawable/ic_share_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/notifictaion_recording.xml b/android-audio-library/src/main/res/layout/notifictaion_recording.xml similarity index 97% rename from app/src/main/res/layout/notifictaion_recording.xml rename to android-audio-library/src/main/res/layout/notifictaion_recording.xml index 7caff47..02e7083 100644 --- a/app/src/main/res/layout/notifictaion_recording.xml +++ b/android-audio-library/src/main/res/layout/notifictaion_recording.xml @@ -54,7 +54,7 @@ android:id="@+id/notification_pause" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:src="@drawable/pause" /> + android:src="@drawable/ic_pause_black_24dp" /> diff --git a/app/src/main/res/layout/notifictaion_recording_dark.xml b/android-audio-library/src/main/res/layout/notifictaion_recording_dark.xml similarity index 100% rename from app/src/main/res/layout/notifictaion_recording_dark.xml rename to android-audio-library/src/main/res/layout/notifictaion_recording_dark.xml diff --git a/app/src/main/res/layout/notifictaion_recording_light.xml b/android-audio-library/src/main/res/layout/notifictaion_recording_light.xml similarity index 100% rename from app/src/main/res/layout/notifictaion_recording_light.xml rename to android-audio-library/src/main/res/layout/notifictaion_recording_light.xml diff --git a/app/src/main/res/layout/recording.xml b/android-audio-library/src/main/res/layout/recording.xml similarity index 96% rename from app/src/main/res/layout/recording.xml rename to android-audio-library/src/main/res/layout/recording.xml index 39c9e40..6348a79 100644 --- a/app/src/main/res/layout/recording.xml +++ b/android-audio-library/src/main/res/layout/recording.xml @@ -120,7 +120,7 @@ android:id="@+id/recording_player_play" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:src="@drawable/play" + android:src="@drawable/ic_play_arrow_black_24dp" android:tint="?attr/colorAccent" /> diff --git a/app/src/main/res/menu/menu_context.xml b/android-audio-library/src/main/res/menu/menu_context.xml similarity index 100% rename from app/src/main/res/menu/menu_context.xml rename to android-audio-library/src/main/res/menu/menu_context.xml diff --git a/android-audio-library/src/main/res/values-ru/strings.xml b/android-audio-library/src/main/res/values-ru/strings.xml new file mode 100644 index 0000000..42ea624 --- /dev/null +++ b/android-audio-library/src/main/res/values-ru/strings.xml @@ -0,0 +1,17 @@ + + + .wav (по умолчанию) + + + %1$s свободно ~ %2$s + дБ + Нет + Да + Вы уверены? + Удалить запись + Переименовать запись + "Создано с помощью: %1$s" + Файл не найден + Переименовать + Удалить + diff --git a/android-audio-library/src/main/res/values/attrs.xml b/android-audio-library/src/main/res/values/attrs.xml new file mode 100644 index 0000000..4a34715 --- /dev/null +++ b/android-audio-library/src/main/res/values/attrs.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/android-audio-library/src/main/res/values/colors.xml b/android-audio-library/src/main/res/values/colors.xml new file mode 100644 index 0000000..cb49d2e --- /dev/null +++ b/android-audio-library/src/main/res/values/colors.xml @@ -0,0 +1,8 @@ + + + #3F51B5 + #303F9F + #33333333 + #FF4081 + #a4a4a4 + diff --git a/android-audio-library/src/main/res/values/strings.xml b/android-audio-library/src/main/res/values/strings.xml new file mode 100644 index 0000000..11b27e9 --- /dev/null +++ b/android-audio-library/src/main/res/values/strings.xml @@ -0,0 +1,23 @@ + + Audio Library + + + .wav (default) + + + + wav + + + %1$s free ~ %2$s left + dB + No + Yes + "Are you sure ? " + Delete Recording + Rename Recording + "Shared via %1$s" + File not found + Rename + Delete + diff --git a/android-audio-library/src/main/res/values/styles.xml b/android-audio-library/src/main/res/values/styles.xml new file mode 100644 index 0000000..a86375b --- /dev/null +++ b/android-audio-library/src/main/res/values/styles.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + diff --git a/android-audio-library/src/test/java/com/github/axet/audiolibrary/ExampleUnitTest.java b/android-audio-library/src/test/java/com/github/axet/audiolibrary/ExampleUnitTest.java new file mode 100644 index 0000000..7e1eec6 --- /dev/null +++ b/android-audio-library/src/test/java/com/github/axet/audiolibrary/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package com.github.axet.audiolibrary; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() throws Exception { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index d644e64..95db191 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -45,10 +45,5 @@ dependencies { testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:25.2.0' compile 'com.android.support:support-v4:25.2.0' - compile 'com.android.support:design:25.2.0' - compile 'com.google.android.gms:play-services-appindexing:9.8.0' - compile 'org.apache.commons:commons-math3:3.6.1' - compile 'com.github.axet:android-library:1.9.9' //compile project(':android-library') - compile 'com.github.axet:jebml:0.0.2' // compile project(':jebml') - compile 'com.github.axet:vorbis:1.0.0' // compile project(':vorbis') + compile project(':android-audio-library') } diff --git a/app/src/androidTest/java/com/github/axet/audiorecorder/ApplicationTest.java b/app/src/androidTest/java/com/github/axet/audiorecorder/ApplicationTest.java index 0e33c79..df0797a 100644 --- a/app/src/androidTest/java/com/github/axet/audiorecorder/ApplicationTest.java +++ b/app/src/androidTest/java/com/github/axet/audiorecorder/ApplicationTest.java @@ -2,9 +2,6 @@ package com.github.axet.audiorecorder; import android.app.Application; import android.test.ApplicationTestCase; -import android.util.Log; - -import com.github.axet.audiorecorder.app.RawSamples; /** * Testing Fundamentals diff --git a/app/src/main/java/com/github/axet/audiorecorder/activities/MainActivity.java b/app/src/main/java/com/github/axet/audiorecorder/activities/MainActivity.java index b21c602..5f28261 100644 --- a/app/src/main/java/com/github/axet/audiorecorder/activities/MainActivity.java +++ b/app/src/main/java/com/github/axet/audiorecorder/activities/MainActivity.java @@ -1,14 +1,11 @@ package com.github.axet.audiorecorder.activities; import android.Manifest; -import android.app.AlertDialog; import android.content.Context; -import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.content.res.Configuration; -import android.media.MediaPlayer; import android.net.Uri; import android.os.Build; import android.os.Bundle; @@ -18,67 +15,39 @@ import android.support.design.widget.FloatingActionButton; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.PopupMenu; import android.support.v7.widget.Toolbar; import android.util.Log; -import android.view.LayoutInflater; import android.view.Menu; -import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; -import android.view.ViewGroup; -import android.widget.AbsListView; -import android.widget.ArrayAdapter; -import android.widget.ImageView; import android.widget.ListView; -import android.widget.SeekBar; import android.widget.TextView; import android.widget.Toast; -import com.github.axet.androidlibrary.animations.RemoveItemAnimation; -import com.github.axet.androidlibrary.app.MainLibrary; -import com.github.axet.androidlibrary.widgets.OpenFileDialog; -import com.github.axet.androidlibrary.widgets.PopupShareActionProvider; +import com.github.axet.audiolibrary.app.Recordings; +import com.github.axet.audiolibrary.app.Storage; import com.github.axet.audiorecorder.R; -import com.github.axet.audiorecorder.animations.RecordingAnimation; import com.github.axet.audiorecorder.app.MainApplication; -import com.github.axet.audiorecorder.app.Storage; -import com.github.axet.audiorecorder.encoders.Factory; import com.google.android.gms.appindexing.Action; import com.google.android.gms.appindexing.AppIndex; import com.google.android.gms.common.api.GoogleApiClient; import java.io.File; -import java.text.SimpleDateFormat; -import java.util.Comparator; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; -public class MainActivity extends AppCompatActivity implements AbsListView.OnScrollListener { +public class MainActivity extends AppCompatActivity { public final static String TAG = MainActivity.class.getSimpleName(); - static final int TYPE_COLLAPSED = 0; - static final int TYPE_EXPANDED = 1; - static final int TYPE_DELETED = 2; - /** * ATTENTION: This was auto-generated to implement the App Indexing API. * See https://g.co/AppIndexing/AndroidStudio for more information. */ private GoogleApiClient client; FloatingActionButton fab; + Handler handler = new Handler(); - final int[] ALL = {TYPE_COLLAPSED, TYPE_EXPANDED}; - - int scrollState; - + ListView list; Recordings recordings; Storage storage; - ListView list; - Handler handler; - PopupShareActionProvider shareProvider; int themeId; @@ -89,381 +58,6 @@ public class MainActivity extends AppCompatActivity implements AbsListView.OnScr context.startActivity(i); } - static class SortFiles implements Comparator { - @Override - public int compare(File file, File file2) { - if (file.isDirectory() && file2.isFile()) - return -1; - else if (file.isFile() && file2.isDirectory()) - return 1; - else - return file.getPath().compareTo(file2.getPath()); - } - } - - public class Recordings extends ArrayAdapter { - MediaPlayer player; - Runnable updatePlayer; - int selected = -1; - - Map durations = new TreeMap<>(); - - public Recordings(Context context) { - super(context, 0); - } - - public void scan(File dir) { - setNotifyOnChange(false); - clear(); - durations.clear(); - - List ff = storage.scan(dir); - - for (File f : ff) { - if (f.isFile()) { - MediaPlayer mp = null; - try { - mp = MediaPlayer.create(getContext(), Uri.fromFile(f)); - } catch (IllegalStateException e) { - Log.d(TAG, f.toString(), e); - } - if (mp != null) { - int d = mp.getDuration(); - mp.release(); - durations.put(f, d); - add(f); - } else { - Log.e(TAG, f.toString()); - } - } - } - - sort(new SortFiles()); - notifyDataSetChanged(); - } - - public void close() { - if (player != null) { - player.release(); - player = null; - } - if (updatePlayer != null) { - handler.removeCallbacks(updatePlayer); - updatePlayer = null; - } - } - - @Override - public View getView(final int position, View convertView, ViewGroup parent) { - LayoutInflater inflater = LayoutInflater.from(getContext()); - - if (convertView == null) { - convertView = inflater.inflate(R.layout.recording, parent, false); - convertView.setTag(-1); - } - - final View view = convertView; - final View base = convertView.findViewById(R.id.recording_base); - - if ((int) convertView.getTag() == TYPE_DELETED) { - RemoveItemAnimation.restore(base); - convertView.setTag(-1); - } - - final File f = getItem(position); - - TextView title = (TextView) convertView.findViewById(R.id.recording_title); - title.setText(f.getName()); - - SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - TextView time = (TextView) convertView.findViewById(R.id.recording_time); - time.setText(s.format(new Date(f.lastModified()))); - - TextView dur = (TextView) convertView.findViewById(R.id.recording_duration); - dur.setText(MainLibrary.formatDuration(getContext(), durations.get(f))); - - TextView size = (TextView) convertView.findViewById(R.id.recording_size); - size.setText(MainLibrary.formatSize(getContext(), f.length())); - - final View playerBase = convertView.findViewById(R.id.recording_player); - playerBase.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - } - }); - - final Runnable delete = new Runnable() { - @Override - public void run() { - AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); - builder.setTitle(R.string.delete_recording); - builder.setMessage("...\\" + f.getName() + "\n\n" + getString(R.string.are_you_sure)); - builder.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - playerStop(); - dialog.cancel(); - RemoveItemAnimation.apply(list, base, new Runnable() { - @Override - public void run() { - f.delete(); - view.setTag(TYPE_DELETED); - select(-1); - load(); - } - }); - } - }); - builder.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.cancel(); - } - }); - builder.show(); - } - }; - - final Runnable rename = new Runnable() { - @Override - public void run() { - final OpenFileDialog.EditTextDialog e = new OpenFileDialog.EditTextDialog(getContext()); - e.setTitle(getString(R.string.rename_recording)); - e.setText(Storage.getNameNoExt(f)); - e.setPositiveButton(new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - String ext = Storage.getExt(f); - String s = String.format("%s.%s", e.getText(), ext); - File ff = new File(f.getParent(), s); - f.renameTo(ff); - load(); - } - }); - e.show(); - - } - }; - - if (selected == position) { - RecordingAnimation.apply(list, convertView, true, scrollState == SCROLL_STATE_IDLE && (int) convertView.getTag() == TYPE_COLLAPSED); - convertView.setTag(TYPE_EXPANDED); - - updatePlayerText(convertView, f); - - final View play = convertView.findViewById(R.id.recording_player_play); - play.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (player == null) { - playerPlay(playerBase, f); - } else if (player.isPlaying()) { - playerPause(playerBase, f); - } else { - playerPlay(playerBase, f); - } - } - }); - - final View edit = convertView.findViewById(R.id.recording_player_edit); - edit.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - rename.run(); - } - }); - - final View share = convertView.findViewById(R.id.recording_player_share); - share.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - shareProvider = new PopupShareActionProvider(getContext(), share); - - Intent emailIntent = new Intent(Intent.ACTION_SEND); - emailIntent.setType(Factory.MP4A); - emailIntent.putExtra(Intent.EXTRA_EMAIL, ""); - emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(f)); - emailIntent.putExtra(Intent.EXTRA_SUBJECT, f.getName()); - emailIntent.putExtra(Intent.EXTRA_TEXT, getString(R.string.shared_via, getString(R.string.app_name))); - - shareProvider.setShareIntent(emailIntent); - - shareProvider.show(); - } - }); - - View trash = convertView.findViewById(R.id.recording_player_trash); - trash.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - delete.run(); - } - }); - - convertView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - select(-1); - } - }); - } else { - RecordingAnimation.apply(list, convertView, false, scrollState == SCROLL_STATE_IDLE && (int) convertView.getTag() == TYPE_EXPANDED); - convertView.setTag(TYPE_COLLAPSED); - - convertView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - select(position); - } - }); - } - - convertView.setOnLongClickListener(new View.OnLongClickListener() { - @Override - public boolean onLongClick(View v) { - PopupMenu popup = new PopupMenu(getContext(), v); - MenuInflater inflater = popup.getMenuInflater(); - inflater.inflate(R.menu.menu_context, popup.getMenu()); - popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(MenuItem item) { - if (item.getItemId() == R.id.action_delete) { - delete.run(); - return true; - } - if (item.getItemId() == R.id.action_rename) { - rename.run(); - return true; - } - return false; - } - }); - popup.show(); - return true; - } - }); - - return convertView; - } - - void playerPlay(View v, File f) { - if (player == null) - player = MediaPlayer.create(getContext(), Uri.fromFile(f)); - if (player == null) { - Toast.makeText(MainActivity.this, R.string.file_not_found, Toast.LENGTH_SHORT).show(); - return; - } - player.start(); - - updatePlayerRun(v, f); - } - - void playerPause(View v, File f) { - if (player != null) { - player.pause(); - } - if (updatePlayer != null) { - handler.removeCallbacks(updatePlayer); - updatePlayer = null; - } - updatePlayerText(v, f); - } - - void playerStop() { - if (updatePlayer != null) { - handler.removeCallbacks(updatePlayer); - updatePlayer = null; - } - if (player != null) { - player.stop(); - player.release(); - player = null; - } - } - - void updatePlayerRun(final View v, final File f) { - boolean playing = updatePlayerText(v, f); - - if (updatePlayer != null) { - handler.removeCallbacks(updatePlayer); - updatePlayer = null; - } - - if (!playing) { - playerStop(); // clear player instance - updatePlayerText(v, f); // update length - return; - } - - updatePlayer = new Runnable() { - @Override - public void run() { - updatePlayerRun(v, f); - } - }; - handler.postDelayed(updatePlayer, 200); - } - - boolean updatePlayerText(final View v, final File f) { - ImageView i = (ImageView) v.findViewById(R.id.recording_player_play); - - final boolean playing = player != null && player.isPlaying(); - - i.setImageResource(playing ? R.drawable.pause : R.drawable.play); - - TextView start = (TextView) v.findViewById(R.id.recording_player_start); - SeekBar bar = (SeekBar) v.findViewById(R.id.recording_player_seek); - TextView end = (TextView) v.findViewById(R.id.recording_player_end); - - int c = 0; - int d = durations.get(f); - - if (player != null) { - c = player.getCurrentPosition(); - d = player.getDuration(); - } - - bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { - @Override - public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { - if (!fromUser) - return; - - if (player == null) - playerPlay(v, f); - - if (player != null) { - player.seekTo(progress); - if (!player.isPlaying()) - playerPlay(v, f); - } - } - - @Override - public void onStartTrackingTouch(SeekBar seekBar) { - } - - @Override - public void onStopTrackingTouch(SeekBar seekBar) { - } - }); - - start.setText(MainLibrary.formatDuration(getContext(), c)); - bar.setMax(d); - bar.setKeyProgressIncrement(1); - bar.setProgress(c); - end.setText("-" + MainLibrary.formatDuration(getContext(), d - c)); - - return playing; - } - - public void select(int pos) { - selected = pos; - notifyDataSetChanged(); - playerStop(); - } - } - public void setAppTheme(int id) { super.setTheme(id); themeId = id; @@ -480,25 +74,19 @@ public class MainActivity extends AppCompatActivity implements AbsListView.OnScr setContentView(R.layout.activity_main); + storage = new Storage(this); + // ATTENTION: This was auto-generated to implement the App Indexing API. // See https://g.co/AppIndexing/AndroidStudio for more information. client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build(); - storage = new Storage(this); - handler = new Handler(); - Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); -// if (Build.VERSION.SDK_INT >= 16) -// toolbar.setBackground(new ColorDrawable(MainApplication.getActionbarColor(this))); -// else -// toolbar.setBackgroundDrawable(new ColorDrawable(MainApplication.getActionbarColor(this))); setSupportActionBar(toolbar); fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - fab.setClickable(false); recordings.select(-1); RecordingActivity.startActivity(MainActivity.this, false); // Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) @@ -506,10 +94,8 @@ public class MainActivity extends AppCompatActivity implements AbsListView.OnScr } }); - recordings = new Recordings(this); - list = (ListView) findViewById(R.id.list); - list.setOnScrollListener(this); + recordings = new Recordings(this, list); list.setAdapter(recordings); list.setEmptyView(findViewById(R.id.empty_list)); @@ -525,11 +111,6 @@ public class MainActivity extends AppCompatActivity implements AbsListView.OnScr } } - // load recordings - void load() { - recordings.scan(storage.getStoragePath()); - } - @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); @@ -578,16 +159,14 @@ public class MainActivity extends AppCompatActivity implements AbsListView.OnScr } if (permitted(PERMISSIONS)) - load(); + recordings.load(); else - load(); + recordings.load(); checkPending(); updateHeader(); - fab.setClickable(true); - final int selected = getLastRecording(); handler.post(new Runnable() { @Override @@ -631,7 +210,7 @@ public class MainActivity extends AppCompatActivity implements AbsListView.OnScr case 1: if (permitted(permissions)) { storage.migrateLocalStorage(); - load(); + recordings.load(); checkPending(); } else { Toast.makeText(this, R.string.not_permitted, Toast.LENGTH_SHORT).show(); @@ -666,15 +245,6 @@ public class MainActivity extends AppCompatActivity implements AbsListView.OnScr return true; } - @Override - public void onScrollStateChanged(AbsListView view, int scrollState) { - this.scrollState = scrollState; - } - - @Override - public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { - } - @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); @@ -682,7 +252,7 @@ public class MainActivity extends AppCompatActivity implements AbsListView.OnScr handler.post(new Runnable() { @Override public void run() { - list.smoothScrollToPosition(recordings.selected); + list.smoothScrollToPosition(recordings.getSelected()); } }); } diff --git a/app/src/main/java/com/github/axet/audiorecorder/activities/RecordingActivity.java b/app/src/main/java/com/github/axet/audiorecorder/activities/RecordingActivity.java index 34abcf3..ae40150 100644 --- a/app/src/main/java/com/github/axet/audiorecorder/activities/RecordingActivity.java +++ b/app/src/main/java/com/github/axet/audiorecorder/activities/RecordingActivity.java @@ -38,15 +38,15 @@ import com.github.axet.androidlibrary.animations.MarginBottomAnimation; import com.github.axet.androidlibrary.app.MainLibrary; import com.github.axet.audiorecorder.R; import com.github.axet.audiorecorder.app.MainApplication; -import com.github.axet.audiorecorder.app.RawSamples; -import com.github.axet.audiorecorder.app.Sound; -import com.github.axet.audiorecorder.app.Storage; -import com.github.axet.audiorecorder.encoders.Encoder; -import com.github.axet.audiorecorder.encoders.EncoderInfo; -import com.github.axet.audiorecorder.encoders.Factory; -import com.github.axet.audiorecorder.encoders.FileEncoder; +import com.github.axet.audiolibrary.app.RawSamples; +import com.github.axet.audiolibrary.app.Sound; +import com.github.axet.audiolibrary.app.Storage; +import com.github.axet.audiolibrary.encoders.Encoder; +import com.github.axet.audiolibrary.encoders.EncoderInfo; +import com.github.axet.audiolibrary.encoders.Factory; +import com.github.axet.audiolibrary.encoders.FileEncoder; import com.github.axet.audiorecorder.services.RecordingService; -import com.github.axet.audiorecorder.widgets.PitchView; +import com.github.axet.audiolibrary.widgets.PitchView; import java.io.File; @@ -439,7 +439,7 @@ public class RecordingActivity extends AppCompatActivity { final ImageView playButton = (ImageView) box.findViewById(R.id.recording_play); if (show) { - playButton.setImageResource(R.drawable.pause); + playButton.setImageResource(R.drawable.ic_pause_24dp); playIndex = editSample; @@ -478,7 +478,7 @@ public class RecordingActivity extends AppCompatActivity { play = null; } pitch.play(-1); - playButton.setImageResource(R.drawable.play); + playButton.setImageResource(R.drawable.ic_play_arrow_black_24dp); } } diff --git a/app/src/main/java/com/github/axet/audiorecorder/activities/SettingsActivity.java b/app/src/main/java/com/github/axet/audiorecorder/activities/SettingsActivity.java index d814944..1c0075b 100644 --- a/app/src/main/java/com/github/axet/audiorecorder/activities/SettingsActivity.java +++ b/app/src/main/java/com/github/axet/audiorecorder/activities/SettingsActivity.java @@ -26,7 +26,7 @@ import android.widget.Toast; import com.github.axet.audiorecorder.R; import com.github.axet.audiorecorder.app.MainApplication; -import com.github.axet.audiorecorder.encoders.Factory; +import com.github.axet.audiolibrary.encoders.Factory; import java.lang.reflect.Array; import java.util.ArrayList; diff --git a/app/src/main/java/com/github/axet/audiorecorder/app/MainApplication.java b/app/src/main/java/com/github/axet/audiorecorder/app/MainApplication.java index 8d6fdbe..6bd228d 100644 --- a/app/src/main/java/com/github/axet/audiorecorder/app/MainApplication.java +++ b/app/src/main/java/com/github/axet/audiorecorder/app/MainApplication.java @@ -10,83 +10,12 @@ import com.github.axet.androidlibrary.app.MainLibrary; import com.github.axet.androidlibrary.widgets.ThemeUtils; import com.github.axet.audiorecorder.R; -public class MainApplication extends Application { - public static final String PREFERENCE_STORAGE = "storage_path"; - public static final String PREFERENCE_RATE = "sample_rate"; - public static final String PREFERENCE_CALL = "call"; - public static final String PREFERENCE_SILENT = "silence"; - public static final String PREFERENCE_ENCODING = "encoding"; - public static final String PREFERENCE_LAST = "last_recording"; - public static final String PREFERENCE_THEME = "theme"; - public static final String PREFERENCE_CHANNELS = "channels"; +public class MainApplication extends com.github.axet.audiolibrary.app.MainApplication { @Override public void onCreate() { super.onCreate(); - PreferenceManager.setDefaultValues(this, R.xml.pref_general, false); - - Context context = this; - context.setTheme(getUserTheme()); } - public static int getTheme(Context context, int light, int dark) { - final SharedPreferences shared = PreferenceManager.getDefaultSharedPreferences(context); - String theme = shared.getString(PREFERENCE_THEME, ""); - if (theme.equals("Theme_Dark")) { - return dark; - } else { - return light; - } - } - - public static int getActionbarColor(Context context) { - int colorId = MainApplication.getTheme(context, R.attr.colorPrimary, R.attr.secondBackground); - int color = ThemeUtils.getThemeColor(context, colorId); - return color; - } - - public int getUserTheme() { - return getTheme(this, R.style.AppThemeLight, R.style.AppThemeDark); - } - - public String formatFree(long free, long left) { - String str = ""; - - long diff = left; - - int diffSeconds = (int) (diff / 1000 % 60); - int diffMinutes = (int) (diff / (60 * 1000) % 60); - int diffHours = (int) (diff / (60 * 60 * 1000) % 24); - int diffDays = (int) (diff / (24 * 60 * 60 * 1000)); - - if (diffDays > 0) { - str = getResources().getQuantityString(R.plurals.days, diffDays, diffDays); - } else if (diffHours > 0) { - str = getResources().getQuantityString(R.plurals.hours, diffHours, diffHours); - } else if (diffMinutes > 0) { - str = getResources().getQuantityString(R.plurals.minutes, diffMinutes, diffMinutes); - } else if (diffSeconds > 0) { - str = getResources().getQuantityString(R.plurals.seconds, diffSeconds, diffSeconds); - } - - return getString(R.string.title_header, MainLibrary.formatSize(this, free), str); - } - - public static int getChannels(Context context) { - final SharedPreferences shared = PreferenceManager.getDefaultSharedPreferences(context); - int i = Integer.parseInt(shared.getString(MainApplication.PREFERENCE_CHANNELS, "1")); - return i; - } - - public static int getMode(Context context) { - switch (getChannels(context)) { - case 1: - return AudioFormat.CHANNEL_IN_MONO; - case 2: - return AudioFormat.CHANNEL_IN_STEREO; - default: - throw new RuntimeException("unknown mode"); - } - } } diff --git a/app/src/main/java/com/github/axet/audiorecorder/services/RecordingService.java b/app/src/main/java/com/github/axet/audiorecorder/services/RecordingService.java index 5155167..9e6b351 100644 --- a/app/src/main/java/com/github/axet/audiorecorder/services/RecordingService.java +++ b/app/src/main/java/com/github/axet/audiorecorder/services/RecordingService.java @@ -68,7 +68,6 @@ public class RecordingService extends Service { public void onCreate() { super.onCreate(); Log.d(TAG, "onCreate"); - receiver = new RecordingReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_SCREEN_ON); @@ -142,7 +141,7 @@ public class RecordingService extends Service { view.setOnClickPendingIntent(R.id.status_bar_latest_event_content, main); view.setTextViewText(R.id.notification_text, ".../" + targetFile); view.setOnClickPendingIntent(R.id.notification_pause, pe); - view.setImageViewResource(R.id.notification_pause, !recording ? R.drawable.play : R.drawable.pause); + view.setImageViewResource(R.id.notification_pause, !recording ? R.drawable.ic_play_arrow_black_24dp : R.drawable.ic_pause_24dp); NotificationCompat.Builder builder = new NotificationCompat.Builder(this) .setOngoing(true) diff --git a/app/src/main/res/drawable-hdpi/pause.png b/app/src/main/res/drawable-hdpi/pause.png deleted file mode 100644 index dc4457869a1cd294585fb18366f99c557c73621e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUt7*7|+kcwMxZ*1f}pupqmcr208 z?X$_6DRX@;1v@wjmiQO_oVaeOi07m)%|^!eUU!G9|K7E+U%27@!}O20Qtq35lLZ=r h1|D>+clDf9vVd`W&h9S{!bK%O@}91KF6*2UngD&zF`57X diff --git a/app/src/main/res/drawable-hdpi/share.png b/app/src/main/res/drawable-hdpi/share.png deleted file mode 100644 index fb285418b4418a45eb41363e77f4c364dd41bc8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 441 zcmV;q0Y?6bP) z8^}Ni>oQa5oD*~4YbI0te@MD~wk|yEpunG6@Ww?PgXp=6! z3ob0-E~ikIY~Y}Q_>^6#;``t;gMnx0lxScvgZPwji3V137?_f1U@3=zVM)RVU_ayf zPdJAr3Br4li~?_#xI1`nApQkLB^0W4c(Q~&nnIO~O*=&_C{6y6G}aBGQrg&pX2 z{_QY(VjH$#{?`ha$=@}Yfx$ZCC0KwfOZW%uL4T1mT7{!Jo9_gM%s&%m)7j(4FjDk7 zu9!9X(`I`xM(l5Ag|1=8z+sM@eF?K7QlB;ZS#$OVv`DL%lR0L8Sz^goZ$S4FQoo6< z8lX3gsxM?-93}qvFgGWr8=>|%?ahV8n=7R^mwKPtD(V|sx?79to4dw=yX1C jI7W0nF@*>bB1H5J3MMdn676Tz00000NkvXXu0mjfDwV=% diff --git a/app/src/main/res/drawable-hdpi/trash.png b/app/src/main/res/drawable-hdpi/trash.png deleted file mode 100644 index 1c0d4a070846fb9907fa8ef327d1989971f6ae43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 513 zcmV+c0{;DpP)7+w7E$p~AV{!CK?e_BiVhw;S_B0d)IkV5^$mg!Qm2ZJUWCxPd5Hz_pdfT< zt*q~4zk&A<(w~iH-Wg+FcrLp;FTV$wopCl4vSrJbt$$OK$z&cRzaatUObx#R9>CiV zT$?IT2@qcJ45B6q>{CDwEPcZEtO(qEaesAY1V9)#AVrhcF-`y>;$Q06*ZQ4T4WST@C?HV(@7^4uOF}fdPj=PoY4ML!ba|6@(W(3!IZV z3wFT?Xwok;3J`Qe&o*hS=#e#LEr`;4KSOV;Wx}OvNmJGUv2k0F*l$sYatc(z3uuE= zPy>6Q3`(F#3)Dx7bgxX$)@W>-dR0x_dH#k9r@*EHfh|sfk^+Ger@)#5fpt!SyaItd zr$A1DK#o%&qd*|TDUebikm3}Gfw9E!qF0PlAOapG3W#12?)}hEqQFqchOR47psPcm zBT=BEL!c#5pru2gAyJ^AL*PoHz@-j>Lx}`{Qv(y zojpm^X2x8ZtxGHzmVD%qTjSJsE0Dd%D&Y#_Vm^t|11p%_WDQ<5C_Zgy%$?NR6ljpd Z!0ktVM6jRe*R45T8N9EkMjd56hW=cnzB6FdRn@2WaB39E6wB z!vThP9I%eomMa7C1UwF?rj^AKK->Vtr-1k<5O+Y?$d+#cVi9UvEC9p>Kzs~pVLiw( zP&r*7t_9+LAWj2fesU~e0b+NkC2>G3j+Dm}f%pK_cYUDXr?&67fOsBSFdhQpY#`nN z<VO|k)Rln#n!`6w82001$>>tsc{$i4so002ovPDHLkV1j&qa>@Vz diff --git a/app/src/main/res/drawable-mdpi/trash.png b/app/src/main/res/drawable-mdpi/trash.png deleted file mode 100644 index f26fc3b13a0bfc806b3136b4e657c0de36a8e12a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 349 zcmV-j0iyniP)z1p46if`T6cL$H%C@gO4tMZW~rAOd1S z`fmc}TtNj1RRfs?{F9brym4P41q4VDw>;`E^7|rAP+1V!U>qm z@i_84k$0Bl#+ied@}tIUvolzMF&M~{w?R{A%i2J4Ozwp#a8S&^fhn+22yB=FONGFa zDX>roESLgQg}{_4Fj5GNm;$y!z-9{c6aqb_KuaOeVhUIa0gEY6RtS`s0%6bq+YcI> voVuy`*PSp4vgZB=Dne1#lEIHl5Z}ff56ew*%18ck00000NkvXXu0mjfhwO?7 diff --git a/app/src/main/res/drawable-xhdpi/pause.png b/app/src/main/res/drawable-xhdpi/pause.png deleted file mode 100644 index 3a434724a345183647a498f7fe87f4af37b5844d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=*`6+rAr-gY-nz)iARy8fn0({J zr?Oo)7+g>Od{w{qm5sOOBo)s|CgCnm_HEi(^ZOlV!^ecXF*|F;fqIDnry1(&CxMJu Zay^@AL!U+Tgv0zGeV(pbhL<=Eh3Lljy_-G6$)+vk;EETa;5fw}m#L6P5h=q^FN6xV3Mx2xYOXyU?i^#VA%6~pIY90jGu$JOXf$wg~7-xSO(2yKHCW7{r_#I z1$3#lHNdmOdMjIMTot@^(B{f77zHcf)??xeGh3)hhK_O zPQR)hV9RG8p9Mp%RqVkEmZ^L2?h{TtwOAWP_DtGs{XEaXk(VfpLE3zyWX2` zS_UvjWoMSP3?L-|5D9?&U%<8qK2j-yyq7`tjgYj$)o+IONoJ1hqxHF+d<=4@eQ zdnjrMg6FZgAqbuqBZeTVxf)AQSuOZpj_Lr|UyrjNkYGO|!+S_dhroAC&eJmU9hB4| q@Ew&kG)Me~r9~o1dWsaVWkms}pfd;4Ru{0Jr|qEC1?=W&+h=(JpbFHQSspYJ=Cjih0`SFa zKsOi%3*g{OQLo^wz)A29?0|VN2D(h&Qj2zh05}5AMb7$#@I>ngGnPwA@m_FW!lJWb z#`H=Ma8ZWhKe><~;Hr!Qu2g^k0kJX)h)ED&?%!c>%UJj=jp>whE35{+U<&Mk%U|5{ zbMZ!f?NQ%mjOt2R6gfaE=m$O!q$@WEqF|Yb(y=hL@zFWvT!-$cRLIp1a_r*Jb3;&~ zfCrGK<*<1Mm;gh-LqFvv&_D$^vQS5Dn&=!4^S>| zQ9x3nfCQs}ghTU_ zfJ6a)Mge|_0!A1Gj7StPz$joqq5u!00FOigZHxliBnogd3UEslP|ql!L81UVqX4_q zjnOni@h_5hhEogzQj!I5>(2ugk^3F%hR@o7Bd%9X99MG#ZUYqtR$IrO5|66&zrtmT4yd0000< KMNUMnLSTZ9R0_@j diff --git a/app/src/main/res/drawable-xxhdpi/pause.png b/app/src/main/res/drawable-xxhdpi/pause.png deleted file mode 100644 index 5a6d71b714f587867ffe68e786ea4989e8f3d46d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoD?MEtLn>~)y|a;%L4n8Bar-Hs zn^)&9%1cnzy3>50eVu>yBo$8>$_)!OoX#$0f44w5LG~8EPW>)Mpb<0y9~2t4PleeF bbii3Q^~41NC)P7Q0$Jzj>gTe~DWM4fHJdG} diff --git a/app/src/main/res/drawable-xxhdpi/share.png b/app/src/main/res/drawable-xxhdpi/share.png deleted file mode 100644 index 6000077d11b60dc3aedeba795a632d8811a6a41f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 893 zcmV-@1A_dCP)*@4@d9W-9PrPjyv&)zx)%2qANV_;k{Ublhv6&OT4SW{Denh0*+=6;A{@&C+xw|Z066XvFj=2rD(ue z_W*Y0Xnw*PoOKVN+d}{caMnG5J01c!gR|}dJoFGiH_o~TaN9!wr*YOjfO8%K*oU)j z<}VP}Jp|B%yXj;9&MMb^(s&}q<8pc9CyB%2lLzAyw&V0j;~T{;@z$g9#!asN;l^8G zWwUsmV%&FeL42&i{8wT&t`C{NPTX@a?y6WGe`j@-tD?`uLR=p-vB_~{bGKYcQGc5w zE{dNHZP+j8l$e6?QM5?(h#x7YJr$d*drE0!p`x}zb!k4&>JM$EUXUDRWI6ipRJD(qS)-NA6khM<@hMRRSO9AB}$;*zZ#irr$d zV;d8#>f|t_v`N+pF&*OvH#7C7RG#dncS|(?r7PGL_sIh(?Q~gpf$@W;?ax^9`xXB} z8sawU#fG@xo%X#ewu_Ci;E-{hHB4+SixzRi;j>m$Y31fPJb=BPr~SzUs6A~+Iad4p zevih#j)#=2yHp6E$CL3kq&#RlmT|eV`L@>nC1>NUz2gii-2&L+;mSXXv+e*2F-9U~_IDLA0?wJ&bt>4`>7s1dk{M z5(E$F1rh|0sRj}R4{8Sx0!I}T8~}%P6dVA@)f5~62R0QP07sS;8~}&*1u!Sz*vf)K z;NaGR1K{Z507BsK?f^pI`1$}s-~|o=gup9I0t$nd_#lK3LI@#*5JCtcG+Ol=hB`!s T-G#2400000NkvXXu0mjfC+wF^ diff --git a/app/src/main/res/drawable-xxhdpi/trash.png b/app/src/main/res/drawable-xxhdpi/trash.png deleted file mode 100644 index f32286d02bc8863db550402566669fce8a622be6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 976 zcmV;>126oEP)!*402%`TSzpEhG>!$vKSf=u@;gd=t2yP z6e=7Djmm7y|H!<8^PcB{-$w7f=gj-l`*H5QXCe`XVHk#C7=~dOhG7_n zVf@b4)>fHNBOD7sy-?0-1~2{*;kB?KY=+>cFfW{7Rf7o_4q5nordZWr0_F=W;ES-I zmEF65Hw6~(RXD)P{<{G4A8{@KuPC6f0v-okzmEb6E8t$h^>0!@X$4%T01D72z!Xt9 zj4R{@bAbgK@Uuf$h5`Z(IaCX$h08dAe#$H04;ksxa+9;iu8p3awYf zX5j3GkQUyT_yR45KBUp71|J9F>V#H|4JCy!+=9#sYXvCs8n!i$Z70!|X|vYL0l5IX ztr(sWiVJ6i7U8_mAzaC$1HWs*vT>{%Q@cB19NguwkEOpR=(6!4Dbpw1NgLBFU=;_( zRh)U;7S0OCg{orgt8r|pLYuAVLwZ}^K5G{6;V)+^-*L9GfOGMeLPmIsA?*~-U=q8K z#Il1}H-iVYrm^iT+WJ#JK57=Q;J}60f@T3T4hWdlEMUR`0TY@9j5;7-RI`8)2Lz00 z7Lam4KuWWKgaZN+ng#SbAfR8ffL;d#^lBE+?SO!8%>p_d5YVYvK)VA1+BFMkc0fS0 zW&uqO2x!tQAnt&GxMl%$4hX2%ETGx}0o9rX#0vDR&;P>oEv8vO<+gjTHe&i#sab$| zLvq<-0n6%V*pd&pXt99Bi1t|i!p58r0;Vh$Fy(^)o8Ooj_d!6~VgYF%1Poa$V8{mn z4=fgt^g+OY#R3L=5YT6_fIB`2=&@Kpj}HR6EEdq^gMf<`3%KBefJRFvZ_25fDQg!A z!xjp767eONS~6o%@n3j1t)+b6eK;VOa(MckaLx23;%o4FXd8A**&-A@i?-VM2K`PM zWta)qOs;wtFLX@eFLg!uhWS2od0%g`fuF5onH8)viEZ>_Dg%C%Nk}hH+$=b?~IE80000j6#adl5DTp3mo1X7HNslU$}AsgBATyHM{0WvCKRYy=~%LXE~Le0?W(&r zwmnQN8Qh}Q9$S_ux;~<$%uUhtu~BK5rlc(yYDo`u>Hp@=Ip@y#=bpJU_x`ep6=_Ry zBmn?y(WtP^R>eN!t2tI~VkA7Y%ACZQ$S^Sbxyl;;IAwK+f~f660Lb>A0fDonRI5o4 zp|RnFejB3Qx69?0j(-8b#i3y#Tg6XI=h_R3wo#jd+gsaqclWAp9-1bG6p+|emyfNz zOOIY!wS-CzxzxS(9^}x;>(;wzNjH_NwRQgwcyi-ZLQ_}n=+^Q(*v${T5{OuFps*=QcMdcJPm zsHs0Rtlr(j+accuH3s48myF!|ukQ|Xpw>WgKBY3iFOu#2m!;(4A3SW!NT?x?H~3bA zZ=6zzJ9Y1#=;78%ioe^4_|n}DnA`5yk4HaxGI!?YumgN@@DEx7u1w&LZ^wF9jNjCm zZ{ddl797)NXLWWF}> z&!dL9o|^H;%#1}Dt4`0FG_Z(gUwT?pF=?GBYIp1Tx%;1!?iHZHAvce1T2>WkZ7UIR zLpP^|QWmVj*zTrkAR%7a;J&fA+a(U0@#fyZ4PIQ3ODUVZMwlBDunM2zV{9?$rpMm;W)A!}DG3BSP>s=5w`xQ7uPfND*BCK~p4A+Kp;;|wk zPt$ibC_5cm-sCJ`6Q6Ui8OB@SkP}H8Nb|5!gXyc2QYbS*o8@lX3r`wHW?jY0Xslvi zF}WkKQZtipDc9cNV9yjY`w;Wt%k}~%eUKEISN!3H)wI~?osm7!ihMOTBy3!1(XCDJ zrtl?PIJ3Ckm_>fssIP<9+aWx^ltc=Dq?gm_#7Kvx2d6%?1V7cbNbqslEyw@re@a0V zz8U9tLX;(#0yD+VHNc*_aQ?=TRT59;kE)y#`4+dPT{~>Jx5vme!8C@>JB94kZqNiF z=6#pYEV9fn;kSoufLo{DFJ4Guklz@BW(il4xMRDf?Y$oXp=J$YmJAQAdPNcxje13n zzNsV$7V76CYgS6fiGu5g#|;^i?{OAeJ%T9w-(|zxIT4lB2TSSz^a%SCG59APX1478f9WHSI diff --git a/app/src/main/res/layout/activity_recording.xml b/app/src/main/res/layout/activity_recording.xml index 0fc1ab9..b2812c4 100644 --- a/app/src/main/res/layout/activity_recording.xml +++ b/app/src/main/res/layout/activity_recording.xml @@ -34,7 +34,7 @@ - + android:src="@drawable/ic_play_arrow_black_24dp" /> 8 kHz (телефон) - - .wav (по умолчанию) - - Моно (по умолчанию) Стерео @@ -28,13 +24,6 @@ Настройки Доступ запрещен Программа для просмотра папок не установлена - Файл не найден - "Создано с помощью: %1$s" - Переименовать запись - Нет - Да - Вы уверены? - Удалить запись пауза (звонок) кодировка пауза @@ -44,10 +33,6 @@ запись Кодирование... Запись - дБ - %1$s свободно ~ %2$s - Переименовать - Удалить Открыть папку с записями Список записей пуст.\n\nНажмите на \'Микрофон\' чтобы начать запись. diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 4a34715..045e125 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -1,6 +1,3 @@ - - - diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index cb49d2e..045e125 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -1,8 +1,3 @@ - #3F51B5 - #303F9F - #33333333 - #FF4081 - #a4a4a4 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index eb7e5e8..8017c1f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -21,14 +21,6 @@ 8000 - - .wav (default) - - - - wav - - Theme White (default) Theme Dark @@ -52,13 +44,6 @@ Settings Not permitted No folder view application installed - File not found - "Shared via %1$s" - Rename Recording - No - Yes - "Are you sure ? " - Delete Recording pause (hold by call) encoding pause @@ -68,10 +53,6 @@ recording Encoding... Recording - %1$s free ~ %2$s left - dB - Rename - Delete Open Recording Folder Recording List is Empty\n\nClick Record to Start Recording diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index a86375b..8542005 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,48 +1,2 @@ - - - - - - - - - - - - - - - - - diff --git a/settings.gradle b/settings.gradle index 9b5374c..5a0bf98 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1 @@ -include ':app', ':android-library', ':jebml' \ No newline at end of file +include ':app', ':android-library', ':jebml', ':android-audio-library' \ No newline at end of file