Merge branch 'audiorecorder-1.1.46'

This commit is contained in:
Alexey Kuznetsov 2016-07-21 14:25:13 +03:00
commit 9e0faede72
15 changed files with 212 additions and 54 deletions

View file

@ -8,8 +8,8 @@ android {
applicationId "com.github.axet.audiorecorder"
minSdkVersion 16
targetSdkVersion 23
versionCode 67
versionName "1.1.45"
versionCode 68
versionName "1.1.46"
}
signingConfigs {
release {

View file

@ -177,10 +177,10 @@ public class MainActivity extends AppCompatActivity implements AbsListView.OnScr
time.setText(s.format(new Date(f.lastModified())));
TextView dur = (TextView) convertView.findViewById(R.id.recording_duration);
dur.setText(MainApplication.formatDuration(durations.get(f)));
dur.setText(MainApplication.formatDuration(getContext(), durations.get(f)));
TextView size = (TextView) convertView.findViewById(R.id.recording_size);
size.setText(MainApplication.formatSize(f.length()));
size.setText(MainApplication.formatSize(getContext(), f.length()));
final View playerBase = convertView.findViewById(R.id.recording_player);
playerBase.setOnClickListener(new View.OnClickListener() {
@ -193,9 +193,9 @@ public class MainActivity extends AppCompatActivity implements AbsListView.OnScr
@Override
public void run() {
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setTitle("Delete Recording");
builder.setMessage("...\\" + f.getName() + "\n\n" + "Are you sure ? ");
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
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();
@ -211,7 +211,7 @@ public class MainActivity extends AppCompatActivity implements AbsListView.OnScr
});
}
});
builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
builder.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
@ -225,7 +225,7 @@ public class MainActivity extends AppCompatActivity implements AbsListView.OnScr
@Override
public void run() {
final OpenFileDialog.EditTextDialog e = new OpenFileDialog.EditTextDialog(getContext());
e.setTitle("Rename Recording");
e.setTitle(getString(R.string.rename_recording));
e.setText(Storage.getNameNoExt(f));
e.setPositiveButton(new DialogInterface.OnClickListener() {
@Override
@ -281,7 +281,7 @@ public class MainActivity extends AppCompatActivity implements AbsListView.OnScr
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, "Shared via Audio Recorder");
emailIntent.putExtra(Intent.EXTRA_TEXT, getString(R.string.shared_via, getString(R.string.app_name)));
shareProvider.setShareIntent(emailIntent);
@ -347,7 +347,7 @@ public class MainActivity extends AppCompatActivity implements AbsListView.OnScr
if (player == null)
player = MediaPlayer.create(getContext(), Uri.fromFile(f));
if (player == null) {
Toast.makeText(MainActivity.this, "File not found", Toast.LENGTH_SHORT).show();
Toast.makeText(MainActivity.this, R.string.file_not_found, Toast.LENGTH_SHORT).show();
return;
}
player.start();
@ -443,11 +443,11 @@ public class MainActivity extends AppCompatActivity implements AbsListView.OnScr
}
});
start.setText(MainApplication.formatDuration(c));
start.setText(MainApplication.formatDuration(getContext(), c));
bar.setMax(d);
bar.setKeyProgressIncrement(1);
bar.setProgress(c);
end.setText("-" + MainApplication.formatDuration(d - c));
end.setText("-" + MainApplication.formatDuration(getContext(), d - c));
return playing;
}
@ -557,7 +557,7 @@ public class MainActivity extends AppCompatActivity implements AbsListView.OnScr
if (intent.resolveActivityInfo(getPackageManager(), 0) != null) {
startActivity(intent);
} else {
Toast.makeText(this, "No folder view application installed", Toast.LENGTH_SHORT).show();
Toast.makeText(this, R.string.no_folder_app, Toast.LENGTH_SHORT).show();
}
}
@ -630,7 +630,7 @@ public class MainActivity extends AppCompatActivity implements AbsListView.OnScr
load();
checkPending();
} else {
Toast.makeText(this, "Not permitted", Toast.LENGTH_SHORT).show();
Toast.makeText(this, R.string.not_permitted, Toast.LENGTH_SHORT).show();
}
}
}

View file

@ -132,7 +132,7 @@ public class RecordingActivity extends AppCompatActivity {
case TelephonyManager.CALL_STATE_OFFHOOK:
wasRinging = true;
if (thread != null) {
stopRecording("pause (hold by call)");
stopRecording(getString(R.string.hold_by_call));
pausedByCall = true;
}
break;
@ -230,7 +230,7 @@ public class RecordingActivity extends AppCompatActivity {
done.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopRecording("encoding");
stopRecording(getString(R.string.encoding));
encoding(new Runnable() {
@Override
public void run() {
@ -244,7 +244,7 @@ public class RecordingActivity extends AppCompatActivity {
if (a != null && a.equals(START_PAUSE)) {
// pretend we already start it
start = false;
stopRecording("pause");
stopRecording(getString(R.string.pause));
}
receiver = new RecordingReceiver();
@ -298,7 +298,7 @@ public class RecordingActivity extends AppCompatActivity {
void pauseButton() {
if (thread != null) {
stopRecording("pause");
stopRecording(getString(R.string.pause));
} else {
editCut();
@ -374,7 +374,7 @@ public class RecordingActivity extends AppCompatActivity {
void edit(boolean show, boolean animate) {
if (show) {
setState("edit");
setState(getString(R.string.edit));
editPlay(false);
View box = findViewById(R.id.recording_edit_box);
@ -409,7 +409,7 @@ public class RecordingActivity extends AppCompatActivity {
});
} else {
editSample = -1;
setState("pause");
setState(getString(R.string.pause));
editPlay(false);
pitch.edit(-1);
pitch.stop();
@ -431,7 +431,7 @@ public class RecordingActivity extends AppCompatActivity {
long perSec = (c * m * rate);
long sec = free / perSec * 1000;
state.setText(s + " (" + ((MainApplication) getApplication()).formatFree(free, sec) + ")");
state.setText(s + "\n(" + ((MainApplication) getApplication()).formatFree(free, sec) + ")");
}
void editPlay(boolean show) {
@ -509,15 +509,15 @@ public class RecordingActivity extends AppCompatActivity {
void cancelDialog(final Runnable run) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Confirm cancel");
builder.setMessage("Are you sure you want to cancel?");
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
builder.setTitle(R.string.confirm_cancel);
builder.setMessage(R.string.are_you_sure_cancel);
builder.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
run.run();
}
});
builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
builder.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
@ -551,7 +551,7 @@ public class RecordingActivity extends AppCompatActivity {
edit(false, true);
pitch.setOnTouchListener(null);
setState("recording");
setState(getString(R.string.recording));
sound.silent();
@ -712,7 +712,7 @@ public class RecordingActivity extends AppCompatActivity {
void updateSamples(long samplesTime) {
long ms = samplesTime / sampleRate * 1000;
time.setText(MainApplication.formatDuration(ms));
time.setText(MainApplication.formatDuration(this, ms));
}
@Override
@ -724,7 +724,7 @@ public class RecordingActivity extends AppCompatActivity {
if (permitted(permissions)) {
startRecording();
} else {
Toast.makeText(this, "Not permitted", Toast.LENGTH_SHORT).show();
Toast.makeText(this, R.string.not_permitted, Toast.LENGTH_SHORT).show();
finish();
}
}
@ -784,7 +784,7 @@ public class RecordingActivity extends AppCompatActivity {
encoder = new FileEncoder(this, in, e);
final ProgressDialog d = new ProgressDialog(this);
d.setTitle("Encoding...");
d.setTitle(getString(R.string.encoding_title));
d.setMessage(".../" + targetFile.getName());
d.setMax(100);
d.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

View file

@ -192,7 +192,7 @@ public class SettingsActivity extends AppCompatPreferenceActivity implements Sha
if (permitted(this, permissions))
;
else
Toast.makeText(this, "Not permitted", Toast.LENGTH_SHORT).show();
Toast.makeText(this, R.string.not_permitted, Toast.LENGTH_SHORT).show();
}
}

View file

@ -74,23 +74,23 @@ public class MainApplication extends Application {
str = getResources().getQuantityString(R.plurals.seconds, diffSeconds, diffSeconds);
}
return String.format("%s free ~ %s left", MainApplication.formatSize(free), str);
return getString(R.string.title_header, MainApplication.formatSize(this, free), str);
}
public static String formatSize(long s) {
public static String formatSize(Context context, long s) {
if (s > 0.1 * 1024 * 1024 * 1024) {
float f = s / 1024f / 1024f / 1024f;
return String.format("%.1f GB", f);
return context.getString(R.string.size_gb, f);
} else if (s > 0.1 * 1024 * 1024) {
float f = s / 1024f / 1024f;
return String.format("%.1f MB", f);
return context.getString(R.string.size_mb, f);
} else {
float f = s / 1024f;
return String.format("%.1f kb", f);
return context.getString(R.string.size_kb, f);
}
}
static public String formatDuration(long diff) {
static public String formatDuration(Context context, long diff) {
int diffMilliseconds = (int) (diff % 1000);
int diffSeconds = (int) (diff / 1000 % 60);
int diffMinutes = (int) (diff / (60 * 1000) % 60);
@ -100,7 +100,7 @@ public class MainApplication extends Application {
String str = "";
if (diffDays > 0)
str = diffDays + "d " + formatTime(diffHours) + ":" + formatTime(diffMinutes) + ":" + formatTime(diffSeconds);
str = diffDays + context.getString(R.string.days_symbol) + " " + formatTime(diffHours) + ":" + formatTime(diffMinutes) + ":" + formatTime(diffSeconds);
else if (diffHours > 0)
str = formatTime(diffHours) + ":" + formatTime(diffMinutes) + ":" + formatTime(diffSeconds);
else

View file

@ -149,7 +149,7 @@ public class RecordingService extends Service {
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
.setOngoing(true)
.setContentTitle("Recording")
.setContentTitle(getString(R.string.recording_title))
.setSmallIcon(R.drawable.ic_mic_24dp)
.setContent(view);

View file

@ -273,7 +273,7 @@ public class PitchView extends ViewGroup {
public PitchCurrentView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
text = "100 dB";
text = "100 " + getContext().getString(R.string.db);
textBounds = new Rect();
textPaint = new Paint();
@ -314,7 +314,7 @@ public class PitchView extends ViewGroup {
String str = "";
str = Integer.toString((int) getDB(end)) + " dB";
str = Integer.toString((int) getDB(end)) + " " + getContext().getString(R.string.db);
setText(str);
}

View file

@ -29,6 +29,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:text="preparing" />
</LinearLayout>

View file

@ -35,7 +35,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:text="Recording List is Empty\n\nClick Record to Start Recording"
android:text="@string/recording_list_is_empty"
android:textAlignment="center"></TextView>
</LinearLayout>

View file

@ -5,11 +5,11 @@
<item
android:id="@+id/action_rename"
android:orderInCategory="100"
android:title="Rename"
android:title="@string/rename"
app:showAsAction="never" />
<item
android:id="@+id/action_delete"
android:orderInCategory="200"
android:title="Delete"
android:title="@string/delete"
app:showAsAction="never" />
</menu>

View file

@ -5,7 +5,7 @@
<item
android:id="@+id/action_show_folder"
android:orderInCategory="100"
android:title="Open Recording Folder"
android:title="@string/open_recording_folder"
app:showAsAction="never" />
<item
android:id="@+id/action_settings"

View file

@ -0,0 +1,78 @@
<resources>
<string name="app_name">Аудио Рекордер</string>
<string-array name="themes_text">
<item>Тема Светлая (по умолчанию)</item>
<item>Тема Темная</item>
</string-array>
<string-array name="sample_rate_text">
<item>48 kHz</item>
<item>44.1 kHz (CD)</item>
<item>32 kHz</item>
<item>22 kHz</item>
<item>16 kHz (по умолчанию)</item>
<item>11 kHz</item>
<item>8 kHz (телефон)</item>
</string-array>
<string-array name="encodings_text">
<item>.wav (по умолчанию)</item>
<item>.m4a</item>
</string-array>
<string name="title_activity_main">Аудио Рекордер</string>
<string name="action_settings">Настройки</string>
<string name="not_permitted">Доступ запрещен</string>
<string name="no_folder_app">Программа для просмотра папок не установлена</string>
<string name="file_not_found">Файл не найден</string>
<string name="shared_via">"Создано с помощью: %1$s"</string>
<string name="rename_recording">Переименовать запись</string>
<string name="no">Нет</string>
<string name="yes">Да</string>
<string name="are_you_sure">Вы уверены?</string>
<string name="delete_recording">Удалить запись</string>
<string name="hold_by_call">пауза (звонок)</string>
<string name="encoding">кодировка</string>
<string name="pause">пауза</string>
<string name="edit">редактор</string>
<string name="confirm_cancel">Отменить запись</string>
<string name="are_you_sure_cancel">Вы уверены?</string>
<string name="recording">запись</string>
<string name="encoding_title">Кодирование...</string>
<string name="recording_title">Запись</string>
<string name="db">дБ</string>
<string name="days_symbol">д</string>
<string name="title_header">%1$s свободно ~ %2$s осталось</string>
<string name="size_gb">%1$.1f ГБ</string>
<string name="size_mb">%1$.1f МБ</string>
<string name="size_kb">%1$.1f кб</string>
<string name="rename">Переименовать</string>
<string name="delete">Удалить</string>
<string name="open_recording_folder">Открыть папку с записями</string>
<string name="recording_list_is_empty">Список записей пуст\n\nНажмите на "Микрофон" чтобы начать запись</string>
<plurals name="days">
<item quantity="one">%d день</item>
<item quantity="few">%d дня </item>
<item quantity="many">%d дней</item>
</plurals>
<plurals name="hours">
<item quantity="one">%d час</item>
<item quantity="few">%d часа</item>
<item quantity="many">%d часов</item>
</plurals>
<plurals name="minutes">
<item quantity="one">%d минута</item>
<item quantity="few">%d минуты</item>
<item quantity="many">%d минут</item>
</plurals>
<plurals name="seconds">
<item quantity="one">%d секунда</item>
<item quantity="few">%d секунды</item>
<item quantity="many">%d секунд</item>
</plurals>
</resources>

View file

@ -1,7 +1,7 @@
<resources>
<string name="app_name">Audio Recorder</string>
<string-array name="sample_rate">
<string-array name="sample_rate_text">
<item>48 kHz</item>
<item>44.1 kHz (CD)</item>
<item>32 kHz</item>
@ -11,7 +11,7 @@
<item>8 kHz (telephone)</item>
</string-array>
<string-array name="sample_rate_values">
<string-array name="sample_rate_values" translatable="false">
<item>48000</item>
<item>44100</item>
<item>32000</item>
@ -21,28 +21,56 @@
<item>8000</item>
</string-array>
<string-array name="encodings">
<string-array name="encodings_text">
<item>.wav (default)</item>
<item>.m4a</item>
</string-array>
<string-array name="encodings_values">
<string-array name="encodings_values" translatable="false">
<item>wav</item>
<item>m4a</item>
</string-array>
<string-array name="themes">
<string-array name="themes_text">
<item>Theme White (default)</item>
<item>Theme Dark</item>
</string-array>
<string-array name="themes_values">
<string-array name="themes_values" translatable="false">
<item>Theme_White</item>
<item>Theme_Dark</item>
</string-array>
<string name="title_activity_main">Audio Recorder</string>
<string name="action_settings">Settings</string>
<string name="not_permitted">Not permitted</string>
<string name="no_folder_app">No folder view application installed</string>
<string name="file_not_found">File not found</string>
<string name="shared_via">"Shared via %1$s"</string>
<string name="rename_recording">Rename Recording</string>
<string name="no">No</string>
<string name="yes">Yes</string>
<string name="are_you_sure">"Are you sure ? "</string>
<string name="delete_recording">Delete Recording</string>
<string name="hold_by_call">pause (hold by call)</string>
<string name="encoding">encoding</string>
<string name="pause">pause</string>
<string name="edit">edit</string>
<string name="confirm_cancel">Confirm cancel</string>
<string name="are_you_sure_cancel">Are you sure you want to cancel?</string>
<string name="recording">recording</string>
<string name="encoding_title">Encoding...</string>
<string name="recording_title">Recording</string>
<string name="db">dB</string>
<string name="days_symbol">"d"</string>
<string name="title_header">%1$s free ~ %2$s left</string>
<string name="size_gb">%1$.1f GB</string>
<string name="size_mb">%1$.1f MB</string>
<string name="size_kb">%1$.1f kb</string>
<string name="rename">Rename</string>
<string name="delete">Delete</string>
<string name="open_recording_folder">Open Recording Folder</string>
<string name="recording_list_is_empty">Recording List is Empty\n\nClick Record to Start Recording</string>
<plurals name="days">
<item quantity="one">%d day</item>

View file

@ -0,0 +1,51 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<com.github.axet.androidlibrary.widgets.StoragePathPreference
android:defaultValue="Аудио Рекордер"
android:key="storage_path"
android:summary="/sdcard/some/"
android:title="Папка для хранения" />
<ListPreference
android:defaultValue="16000"
android:entries="@array/sample_rate_text"
android:entryValues="@array/sample_rate_values"
android:key="sample_rate"
android:negativeButtonText="@null"
android:positiveButtonText="@null"
android:summary="44100"
android:title="Частота записи" />
<ListPreference
android:defaultValue="wav"
android:entries="@array/encodings_text"
android:entryValues="@array/encodings_values"
android:key="encoding"
android:negativeButtonText="@null"
android:positiveButtonText="@null"
android:summary="Формат выходного файла (.wav, .m4a, ...)"
android:title="Кодировка" />
<SwitchPreference
android:defaultValue="true"
android:key="call"
android:summary="Останавливать запись на время разговора по телефону"
android:title="Пауза на время разговора" />
<SwitchPreference
android:defaultValue="true"
android:key="silence"
android:summary="Включать беззвучный режим на время записи"
android:title="Режим тишины" />
<ListPreference
android:defaultValue="Theme_White"
android:entries="@array/themes_text"
android:entryValues="@array/themes_values"
android:key="theme"
android:negativeButtonText="@null"
android:positiveButtonText="@null"
android:summary="Установить тему приложения (темная / светлая)"
android:title="Тема приложения" />
</PreferenceScreen>

View file

@ -8,7 +8,7 @@
<ListPreference
android:defaultValue="16000"
android:entries="@array/sample_rate"
android:entries="@array/sample_rate_text"
android:entryValues="@array/sample_rate_values"
android:key="sample_rate"
android:negativeButtonText="@null"
@ -18,7 +18,7 @@
<ListPreference
android:defaultValue="wav"
android:entries="@array/encodings"
android:entries="@array/encodings_text"
android:entryValues="@array/encodings_values"
android:key="encoding"
android:negativeButtonText="@null"
@ -40,7 +40,7 @@
<ListPreference
android:defaultValue="Theme_White"
android:entries="@array/themes"
android:entries="@array/themes_text"
android:entryValues="@array/themes_values"
android:key="theme"
android:negativeButtonText="@null"