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 dc44578..0000000
Binary files a/app/src/main/res/drawable-hdpi/pause.png and /dev/null differ
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 fb28541..0000000
Binary files a/app/src/main/res/drawable-hdpi/share.png and /dev/null differ
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 1c0d4a0..0000000
Binary files a/app/src/main/res/drawable-hdpi/trash.png and /dev/null differ
diff --git a/app/src/main/res/drawable-mdpi/pause.png b/app/src/main/res/drawable-mdpi/pause.png
deleted file mode 100644
index 2e37814..0000000
Binary files a/app/src/main/res/drawable-mdpi/pause.png and /dev/null differ
diff --git a/app/src/main/res/drawable-mdpi/share.png b/app/src/main/res/drawable-mdpi/share.png
deleted file mode 100644
index 0851982..0000000
Binary files a/app/src/main/res/drawable-mdpi/share.png and /dev/null differ
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 f26fc3b..0000000
Binary files a/app/src/main/res/drawable-mdpi/trash.png and /dev/null differ
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 3a43472..0000000
Binary files a/app/src/main/res/drawable-xhdpi/pause.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/share.png b/app/src/main/res/drawable-xhdpi/share.png
deleted file mode 100644
index 95418b6..0000000
Binary files a/app/src/main/res/drawable-xhdpi/share.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/trash.png b/app/src/main/res/drawable-xhdpi/trash.png
deleted file mode 100644
index 1949187..0000000
Binary files a/app/src/main/res/drawable-xhdpi/trash.png and /dev/null differ
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 5a6d71b..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/pause.png and /dev/null differ
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 6000077..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/share.png and /dev/null differ
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 f32286d..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/trash.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxxhdpi/play.png b/app/src/main/res/drawable-xxxhdpi/play.png
deleted file mode 100644
index 7282d17..0000000
Binary files a/app/src/main/res/drawable-xxxhdpi/play.png and /dev/null differ
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