From 44dfc43e7ead81d4e5fdabac515bf8f9bd791aec Mon Sep 17 00:00:00 2001 From: Lyndon Date: Tue, 21 Nov 2017 13:29:27 +0100 Subject: [PATCH] Bigger thumbnail size Audio recording --- .../bewoplaner-chat-android/app/build.gradle | 6 + .../app/src/main/AndroidManifest.xml | 6 +- .../filepicker/FilePickerActivity.java | 49 ++++--- .../filepicker/MediaDetailsActivity.java | 40 ++---- .../filepicker/adapters/FileListAdapter.java | 33 ++--- .../adapters/FolderGridAdapter.java | 4 +- .../filepicker/adapters/ImageGridAdapter.java | 9 +- .../adapters/SelectableAdapter.java | 6 +- .../ownchat/page/chat/BaseChatActivity.java | 127 +++++++++++++++++- .../beyondsoft/ownchat/utils/Constants.java | 2 + .../beyondsoft/ownchat/utils/FileUtils.java | 32 +++++ .../ownchat/utils/ui/TouchableImageView.java | 28 ++++ .../main/res/layout/dialog_file_chooser.xml | 66 +++++++++ .../main/res/layout/file_chooser_dialog.xml | 30 ----- .../src/main/res/layout/fragment_profile.xml | 3 +- .../main/res/layout/item_single_chat_left.xml | 8 +- .../res/layout/item_single_chat_right.xml | 6 +- .../ic_file_dialog_record_audio.png | Bin 0 -> 3044 bytes .../ic_file_dialog_record_audio_pressed.png | Bin 0 -> 3017 bytes .../ic_file_dialog_record_audio.png | Bin 0 -> 1907 bytes .../ic_file_dialog_record_audio_pressed.png | Bin 0 -> 1883 bytes .../ic_file_dialog_record_audio.png | Bin 0 -> 4374 bytes .../ic_file_dialog_record_audio_pressed.png | Bin 0 -> 4374 bytes .../ic_file_dialog_record_audio.png | Bin 0 -> 6944 bytes .../ic_file_dialog_record_audio_pressed.png | Bin 0 -> 6988 bytes .../ic_file_dialog_record_audio.png | Bin 0 -> 10164 bytes .../ic_file_dialog_record_audio_pressed.png | Bin 0 -> 10237 bytes .../app/src/main/res/values/colors.xml | 1 + .../app/src/main/res/values/styles.xml | 6 + .../bewoplaner-chat-android/gradle.properties | 2 + 30 files changed, 344 insertions(+), 120 deletions(-) create mode 100644 BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/utils/ui/TouchableImageView.java create mode 100644 BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/layout/dialog_file_chooser.xml delete mode 100644 BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/layout/file_chooser_dialog.xml create mode 100644 BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-hdpi/ic_file_dialog_record_audio.png create mode 100644 BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-hdpi/ic_file_dialog_record_audio_pressed.png create mode 100644 BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-mdpi/ic_file_dialog_record_audio.png create mode 100644 BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-mdpi/ic_file_dialog_record_audio_pressed.png create mode 100644 BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-xhdpi/ic_file_dialog_record_audio.png create mode 100644 BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-xhdpi/ic_file_dialog_record_audio_pressed.png create mode 100644 BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-xxhdpi/ic_file_dialog_record_audio.png create mode 100644 BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-xxhdpi/ic_file_dialog_record_audio_pressed.png create mode 100644 BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-xxxhdpi/ic_file_dialog_record_audio.png create mode 100644 BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-xxxhdpi/ic_file_dialog_record_audio_pressed.png diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/build.gradle b/BeWoPlanerChat/bewoplaner-chat-android/app/build.gradle index 412ea2a..31e0fda 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/build.gradle +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/build.gradle @@ -16,6 +16,8 @@ buildscript { apply plugin: 'com.android.application' apply plugin: 'io.fabric' + + repositories { maven { url 'https://maven.fabric.io/public' } maven { url "https://dl.bintray.com/hani-momanii/maven" } @@ -67,6 +69,10 @@ android { abortOnError false disable 'InvalidPackage' } + + dexOptions { + javaMaxHeapSize "12g" + } } dependencies { diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/AndroidManifest.xml b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/AndroidManifest.xml index ad07d71..6587dee 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/AndroidManifest.xml +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/AndroidManifest.xml @@ -8,6 +8,7 @@ + - @@ -63,7 +63,9 @@ android:theme="@style/AppTheme.NoActionBar" android:screenOrientation="portrait" /> - diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/filepicker/FilePickerActivity.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/filepicker/FilePickerActivity.java index b82680b..43805a0 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/filepicker/FilePickerActivity.java +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/filepicker/FilePickerActivity.java @@ -41,14 +41,14 @@ public class FilePickerActivity extends BaseFilePickerActivity implements protected void initView() { Intent intent = getIntent(); if (intent != null) { - if(getSupportActionBar()!=null) + if(getSupportActionBar() != null) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); + } ArrayList selectedPaths = intent.getStringArrayListExtra(FilePickerConst.KEY_SELECTED_MEDIA); type = intent.getIntExtra(FilePickerConst.EXTRA_PICKER_TYPE, FilePickerConst.MEDIA_PICKER); if(selectedPaths!=null) { - if (PickerManager.getInstance().getMaxCount() == 1) { selectedPaths.clear(); } @@ -59,8 +59,9 @@ public class FilePickerActivity extends BaseFilePickerActivity implements PickerManager.getInstance().add(selectedPaths, FilePickerConst.FILE_TYPE_DOCUMENT); } } - else + else { selectedPaths = new ArrayList<>(); + } setToolbarTitle(PickerManager.getInstance().getCurrentCount()); openSpecificFragment(type, selectedPaths); @@ -72,8 +73,9 @@ public class FilePickerActivity extends BaseFilePickerActivity implements MediaPickerFragment photoFragment = MediaPickerFragment.newInstance(); FragmentUtil.addFragment(this, R.id.container, photoFragment); } else { - if(PickerManager.getInstance().isDocSupport()) + if(PickerManager.getInstance().isDocSupport()) { PickerManager.getInstance().addDocTypes(); + } DocPickerFragment photoFragment = DocPickerFragment.newInstance(selectedPaths); FragmentUtil.addFragment(this, R.id.container, photoFragment); @@ -82,14 +84,15 @@ public class FilePickerActivity extends BaseFilePickerActivity implements private void setToolbarTitle(int count) { ActionBar actionBar = getSupportActionBar(); - if(actionBar!=null) { - if (PickerManager.getInstance().getMaxCount() > 1) + if(actionBar != null) { + if (PickerManager.getInstance().getMaxCount() > 1) { actionBar.setTitle(String.format(getString(R.string.attachments_title_text), count, PickerManager.getInstance().getMaxCount())); - else { - if (type == FilePickerConst.MEDIA_PICKER) + } else { + if (type == FilePickerConst.MEDIA_PICKER) { actionBar.setTitle(R.string.select_photo_text); - else + } else { actionBar.setTitle(R.string.select_doc_text); + } } } @@ -106,43 +109,46 @@ public class FilePickerActivity extends BaseFilePickerActivity implements public boolean onOptionsItemSelected(MenuItem item) { int i = item.getItemId(); if (i == R.id.action_done) { - if (type == FilePickerConst.MEDIA_PICKER) + if (type == FilePickerConst.MEDIA_PICKER) { returnData(PickerManager.getInstance().getSelectedPhotos()); - else + } else { returnData(PickerManager.getInstance().getSelectedFiles()); + } return true; } else if (i == android.R.id.home) { onBackPressed(); return true; } + return super.onOptionsItemSelected(item); } @Override public void onBackPressed() { super.onBackPressed(); + setResult(RESULT_CANCELED); + finish(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); - switch (requestCode) - { + + switch (requestCode) { case FilePickerConst.REQUEST_CODE_MEDIA_DETAIL: - if(resultCode== Activity.RESULT_OK) - { - if (type == FilePickerConst.MEDIA_PICKER) + if(resultCode== Activity.RESULT_OK) { + if (type == FilePickerConst.MEDIA_PICKER) { returnData(PickerManager.getInstance().getSelectedPhotos()); - else + } else { returnData(PickerManager.getInstance().getSelectedFiles()); - } - else - { + } + } else { setToolbarTitle(PickerManager.getInstance().getCurrentCount()); } + break; } } @@ -164,7 +170,8 @@ public class FilePickerActivity extends BaseFilePickerActivity implements public void onItemSelected() { setToolbarTitle(PickerManager.getInstance().getCurrentCount()); - if(PickerManager.getInstance().getMaxCount()==1) + if(PickerManager.getInstance().getMaxCount() == 1) { returnData(type == FilePickerConst.MEDIA_PICKER ? PickerManager.getInstance().getSelectedPhotos() : PickerManager.getInstance().getSelectedFiles()); + } } } diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/filepicker/MediaDetailsActivity.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/filepicker/MediaDetailsActivity.java index 59d52da..226a067 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/filepicker/MediaDetailsActivity.java +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/filepicker/MediaDetailsActivity.java @@ -42,7 +42,6 @@ public class MediaDetailsActivity extends BaseFilePickerActivity implements File @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState, R.layout.activity_media_details); - } @Override @@ -66,8 +65,8 @@ public class MediaDetailsActivity extends BaseFilePickerActivity implements File } private void setUpView(ImageDirectory photoDirectory) { - recyclerView = (RecyclerView) findViewById(R.id.recyclerview); - emptyView = (TextView) findViewById(R.id.empty_view); + recyclerView = findViewById(R.id.recyclerview); + emptyView = findViewById(R.id.empty_view); StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(3, OrientationHelper.VERTICAL); layoutManager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS); @@ -77,13 +76,14 @@ public class MediaDetailsActivity extends BaseFilePickerActivity implements File recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); - // Log.d(">>> Picker >>>", "dy = " + dy); + if (Math.abs(dy) > SCROLL_THRESHOLD) { mGlideRequestManager.pauseRequests(); } else { resumeRequestsIfNotDestroyed(); } } + @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { if (newState == RecyclerView.SCROLL_STATE_IDLE) { resumeRequestsIfNotDestroyed(); @@ -102,13 +102,9 @@ public class MediaDetailsActivity extends BaseFilePickerActivity implements File mediaStoreArgs.putInt(FilePickerConst.EXTRA_FILE_TYPE, fileType); if(fileType==FilePickerConst.MEDIA_TYPE_IMAGE) { - MediaStoreHelper.getPhotoDirs(this, mediaStoreArgs, - dirs -> updateList(dirs)); - } - else if(fileType==FilePickerConst.MEDIA_TYPE_VIDEO) - { - MediaStoreHelper.getVideoDirs(this, mediaStoreArgs, - dirs -> updateList(dirs)); + MediaStoreHelper.getPhotoDirs(this, mediaStoreArgs, this::updateList); + } else if(fileType==FilePickerConst.MEDIA_TYPE_VIDEO) { + MediaStoreHelper.getVideoDirs(this, mediaStoreArgs, this::updateList); } } @@ -118,31 +114,22 @@ public class MediaDetailsActivity extends BaseFilePickerActivity implements File medias.addAll(dirs.get(i).getMedias()); } - Collections.sort(medias,new Comparator() { - @Override - public int compare(Media a, Media b) { - return b.getId() - a.getId(); - } - }); + Collections.sort(medias, (a, b) -> b.getId() - a.getId()); - if(medias.size()>0) { + if(medias.size() > 0) { emptyView.setVisibility(View.GONE); recyclerView.setVisibility(View.VISIBLE); - } - else { + } else { emptyView.setVisibility(View.VISIBLE); recyclerView.setVisibility(View.GONE); return; } - if(photoGridAdapter!=null) - { + if(photoGridAdapter!=null) { photoGridAdapter.setData(medias); photoGridAdapter.notifyDataSetChanged(); - } - else - { - photoGridAdapter = new ImageGridAdapter(this, mGlideRequestManager, (ArrayList) medias,PickerManager.getInstance().getSelectedPhotos(),false, this); + } else { + photoGridAdapter = new ImageGridAdapter(this, mGlideRequestManager, medias,PickerManager.getInstance().getSelectedPhotos(),false, this); recyclerView.setAdapter(photoGridAdapter); } @@ -175,6 +162,7 @@ public class MediaDetailsActivity extends BaseFilePickerActivity implements File onBackPressed(); return true; } + return super.onOptionsItemSelected(item); } diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/filepicker/adapters/FileListAdapter.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/filepicker/adapters/FileListAdapter.java index 5eda8d9..099cf57 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/filepicker/adapters/FileListAdapter.java +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/filepicker/adapters/FileListAdapter.java @@ -46,20 +46,10 @@ public class FileListAdapter extends SelectableAdapter onItemClicked(document,holder)); holder.checkBox.setOnCheckedChangeListener(null); - holder.checkBox.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - onItemClicked(document,holder); - } - }); + holder.checkBox.setOnClickListener(view -> onItemClicked(document,holder)); holder.checkBox.setChecked(isSelected(document)); @@ -81,10 +71,11 @@ public class FileListAdapter extends SelectableAdapter medias, ArrayList selectedPaths, boolean showCamera, FileAdapterListener photoGridAdapterListener) { @@ -47,7 +48,7 @@ public class ImageGridAdapter extends SelectableAdapter extends RecyclerView.Adapter implements Selectable { private List items; - protected List selectedPhotos; + private List selectedPhotos; - public SelectableAdapter(List items, List selectedPaths) { + SelectableAdapter(List items, List selectedPaths) { this.items = items; selectedPhotos = new ArrayList<>(); @@ -65,7 +65,7 @@ public abstract class SelectableAdapter getItems() + List getItems() { return items; } diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/chat/BaseChatActivity.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/chat/BaseChatActivity.java index 00ce2f2..77045de 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/chat/BaseChatActivity.java +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/chat/BaseChatActivity.java @@ -11,6 +11,7 @@ import de.beyondsoft.ownchat.di.InjectionHelper; import de.beyondsoft.ownchat.filepicker.FilePickerBuilder; import de.beyondsoft.ownchat.filepicker.FilePickerConst; import de.beyondsoft.ownchat.filepicker.utils.Orientation; +import de.beyondsoft.ownchat.utils.ui.TouchableImageView; import de.beyondsoft.ownchat.model.Group; import de.beyondsoft.ownchat.model.Message; import de.beyondsoft.ownchat.page.common.RuntimePermissionActivity; @@ -22,7 +23,6 @@ import de.beyondsoft.ownchat.utils.Constants; import de.beyondsoft.ownchat.utils.EndlessScrollListener; import de.beyondsoft.ownchat.utils.FileUtils; import de.beyondsoft.ownchat.utils.SystemUtils; -import de.beyondsoft.ownchat.utils.Utils; import de.beyondsoft.ownchat.utils.ui.EmptyLayout; import org.greenrobot.eventbus.EventBus; @@ -34,9 +34,11 @@ import android.app.Activity; import android.app.Dialog; import android.content.Intent; import android.graphics.Rect; +import android.media.MediaRecorder; import android.net.Uri; import android.os.Build; import android.os.Bundle; +import android.os.CountDownTimer; import android.os.Environment; import android.support.annotation.Nullable; import android.support.annotation.StringRes; @@ -50,15 +52,24 @@ import android.support.v7.widget.RecyclerView; import android.support.v7.widget.SimpleItemAnimator; import android.text.Editable; import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.MotionEvent; import android.view.View; +import android.view.ViewGroup; import android.view.ViewTreeObserver; +import android.view.Window; import android.view.WindowManager; import android.widget.ImageView; +import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import java.io.File; +import java.io.IOException; +import java.text.DecimalFormat; import java.util.ArrayList; +import java.util.Locale; import javax.inject.Inject; import javax.inject.Named; @@ -121,6 +132,10 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha @Named(AppPrefsConstants.USER_ID) LongPreference mUserIdPreference; + @Inject + @Named(AppPrefsConstants.UPLOAD_MAX_SIZE) + LongPreference mUploadMaxSize; + @Inject ChatPresenter mChatPresenter; @@ -143,6 +158,7 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha protected EndlessScrollListener mEndlessScrollListener; protected BaseChatAdapter mBaseChatAdapter; private Snackbar mSnackbar; + MediaRecorder mMediaRecorder; @Inject @Named(AppPrefsConstants.CHAT_OPENED) @@ -308,7 +324,7 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha @OnClick(R.id.chat_attachment) void attachmentClicked() { - requestAppPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, + requestAppPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.RECORD_AUDIO}, R.string.permission_storage_explained, STORAGE_REQUEST_CODE, this::selectFile); @@ -330,17 +346,25 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha mSendMessageImageView.setEnabled(!TextUtils.isEmpty(editable.toString()) && editable.toString().trim().length() > 0); } + private String mAudioFilePath; private void selectFile(int requestCode) { final String[] zipFileTypes = {".zip", ".rar", ".7z"}; final String[] pdfFileTypes = {".pdf"}; final String[] docFileTypes = {".txt", ".doc", ".xls", ".docx", ".xlsx", ".odt"}; - final Dialog dialog = new Dialog(this); - dialog.setContentView(R.layout.file_chooser_dialog); + dialog.setContentView(R.layout.dialog_file_chooser); + + Window window = dialog.getWindow(); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.dimAmount = 0; + layoutParams.gravity = Gravity.BOTTOM; + window.setAttributes(layoutParams); ImageView attachFromGalleryImageView = dialog.findViewById(R.id.attachFromGalleryBtn); ImageView attachDocumentImageView = dialog.findViewById(R.id.attachDocumentBtn); + TouchableImageView attachRecordAudioImageView = dialog.findViewById(R.id.attachRecordAudioBtn); + TextView limitTextView = dialog.findViewById(R.id.audioRecordingLimitTextView); attachDocumentImageView.setOnClickListener(v -> { FilePickerBuilder.getInstance().setMaxCount(1) @@ -367,9 +391,104 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha dialog.dismiss(); }); + final long duration = (mUploadMaxSize.get() / 256000L) * 1000; + CountDownTimer countDownTimer = new CountDownTimer(duration, 10) { + @Override + public void onTick(long millisecondsUntilFinished) { + limitTextView.setText(String.format(Locale.getDefault(), "%.2fs", (double) (millisecondsUntilFinished / 1000.0))); + } + + @Override + public void onFinish() { + attachRecordAudioImageView.setImageResource(R.mipmap.ic_file_dialog_record_audio); + limitTextView.setVisibility(View.INVISIBLE); + limitTextView.setText(""); + attachDocumentImageView.setVisibility(View.VISIBLE); + attachFromGalleryImageView.setVisibility(View.VISIBLE); + + try { + mMediaRecorder.stop(); + } catch (IllegalStateException e) { + e.printStackTrace(); + } + } + }; + + + + attachRecordAudioImageView.setOnTouchListener((v, event) -> { + try { + attachRecordAudioImageView.performClick(); + + float prevX = 0f, prevY = 0f; + + switch(event.getAction()) { + case MotionEvent.ACTION_DOWN: + attachRecordAudioImageView.setImageResource(R.mipmap.ic_file_dialog_record_audio_pressed); + limitTextView.setVisibility(View.VISIBLE); + attachDocumentImageView.setVisibility(View.INVISIBLE); + attachFromGalleryImageView.setVisibility(View.INVISIBLE); + + mAudioFilePath = FileUtils.generateAudioRecordingFileName(this); + setupMediaRecorder(mAudioFilePath); + + countDownTimer.start(); + + prevX = event.getX(); + prevY = event.getY(); + + Log.d("ON_TOUCH", "" + prevX + "/" + prevY); + + try { + mMediaRecorder.setMaxFileSize(mUploadMaxSize.get()); + mMediaRecorder.prepare(); + mMediaRecorder.start(); + } catch (IllegalStateException | IOException e) { + e.printStackTrace(); + } + + return true; + case MotionEvent.ACTION_UP: + attachRecordAudioImageView.setImageResource(R.mipmap.ic_file_dialog_record_audio); + + countDownTimer.cancel(); + + mMediaRecorder.stop(); + + if (!mChatPresenter.isAttached()) { + mChatPresenter.attachView(this); + } + + //mCallback.sendFile(Uri.fromFile(new File(mAudioFilePath)), null); + + dialog.dismiss(); + return true; + + case MotionEvent.ACTION_MOVE: + + Log.d("ON_TOUCH", "" + prevX + "/" + prevY + " vs current position: " + event.getX() + "/" + event.getY()); + + return true; + } + } catch (Exception e) { + e.printStackTrace(); + } + + return false; + }); + dialog.show(); } + private void setupMediaRecorder(String audioFilePath) { + mMediaRecorder = new MediaRecorder(); + mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); + mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); + mMediaRecorder.setAudioEncodingBitRate(32000); + mMediaRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB); + mMediaRecorder.setOutputFile(audioFilePath); + } + @Override protected void onResume() { super.onResume(); diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/utils/Constants.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/utils/Constants.java index 2f6c56f..fcd90e2 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/utils/Constants.java +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/utils/Constants.java @@ -34,4 +34,6 @@ public interface Constants { String TMP_FILE_DIR = "tmp_files"; String HAS_OPEN_CHAT = "has_open_chat"; + + String AUDIO_RECORDINGS_DIR = "audio_recordings"; } \ No newline at end of file diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/utils/FileUtils.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/utils/FileUtils.java index 2cd522e..75c2f4f 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/utils/FileUtils.java +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/utils/FileUtils.java @@ -36,9 +36,14 @@ import java.io.File; import java.io.FileFilter; import java.io.FileOutputStream; import java.io.IOException; +import java.text.DateFormat; import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.Calendar; import java.util.Comparator; +import java.util.Date; import java.util.HashMap; +import java.util.Locale; import java.util.Map; /** @@ -1237,4 +1242,31 @@ public class FileUtils { return tmpFile; } + + public static String generateAudioRecordingFileName(Context context) { + String audioDirectoryPath = context.getExternalFilesDir(null) + File.separator + Constants.AUDIO_RECORDINGS_DIR; + + File audioDir = new File(audioDirectoryPath); + if(!audioDir.exists()) { + audioDir.mkdir(); + } + + String fileName = "rec_"; + String fileSuffix = ".m4a"; + + Date today = Calendar.getInstance().getTime(); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("YYYYmmddHHMMss", Locale.GERMAN); + + fileName += simpleDateFormat.format(today); + + fileName = audioDirectoryPath + File.separator + fileName; + String newFileName = fileName; + + int i = 1; + while((new File(newFileName + fileSuffix)).exists()) { + newFileName = fileName + "_" + i; + } + + return newFileName + fileSuffix; + } } \ No newline at end of file diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/utils/ui/TouchableImageView.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/utils/ui/TouchableImageView.java new file mode 100644 index 0000000..00e8c3a --- /dev/null +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/utils/ui/TouchableImageView.java @@ -0,0 +1,28 @@ +package de.beyondsoft.ownchat.utils.ui; + +import android.content.Context; +import android.support.annotation.Nullable; +import android.util.AttributeSet; + +/** + * Created by Lyndon on 15-Nov-2017. + */ + +public class TouchableImageView extends android.support.v7.widget.AppCompatImageView { + public TouchableImageView(Context context) { + super(context); + } + + public TouchableImageView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + } + + public TouchableImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + @Override + public boolean performClick() { + return super.performClick(); + } +} diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/layout/dialog_file_chooser.xml b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/layout/dialog_file_chooser.xml new file mode 100644 index 0000000..c0f2d10 --- /dev/null +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/layout/dialog_file_chooser.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/layout/file_chooser_dialog.xml b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/layout/file_chooser_dialog.xml deleted file mode 100644 index b445a05..0000000 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/layout/file_chooser_dialog.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/layout/fragment_profile.xml b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/layout/fragment_profile.xml index a9a2bd5..b535360 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/layout/fragment_profile.xml +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/layout/fragment_profile.xml @@ -19,7 +19,8 @@ android:layout_height="@dimen/profile_avatar" android:layout_gravity="center_horizontal" android:scaleType="centerCrop" - android:src="@drawable/avatar" /> + android:src="@drawable/avatar" + tools:src="@drawable/sasha_grey"/> @@ -27,13 +27,13 @@ diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/layout/item_single_chat_right.xml b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/layout/item_single_chat_right.xml index b7e1cf0..7fe8b05 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/layout/item_single_chat_right.xml +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/layout/item_single_chat_right.xml @@ -70,14 +70,14 @@ diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-hdpi/ic_file_dialog_record_audio.png b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-hdpi/ic_file_dialog_record_audio.png new file mode 100644 index 0000000000000000000000000000000000000000..d5e1048347238e07e2dc98ad8d1e08cd5d5a505c GIT binary patch literal 3044 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 LNkvXXu0mjfIsC7Q literal 0 HcmV?d00001 diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-mdpi/ic_file_dialog_record_audio.png b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-mdpi/ic_file_dialog_record_audio.png new file mode 100644 index 0000000000000000000000000000000000000000..3324bd52b39a8859b744b82594b9fef24cf47749 GIT binary patch literal 1907 zcmV-(2aNcMP)P^B>l0=7_z5Pk}^Ej>zGdUNA@yR$!cy>h#E*CLy|+}`ZWo9~-> z@6DUp1qkxu0Abt;UHGdILBD?M>*`WlxKkI;1PhOY@OD5(b34Rv2Mm^k?y<~gUDQFk z?kI4c2E+JVn2*0(+z$AeIp7RSgKBpg)RE9VmC-Y*BkB(8bRsnM9;5642LjxWz?}HY z5u{-eZT6E6lLQ(rPe`*7D*wsoQpA&e!Qok}klCvK-aMp5@Gsa}0`+Xndv#!SdL-glNfiF}NMjTs-@u*~pGV+GO zr-gA=nxg^tmf~%uoE-aSt$1IT3`_Oc{KolPX)sQ4SW{-Rb|PmkSNjC$+3Ino%!vlE z#SX5EHkfeRbwY3V$hu7Du*OI2yZ74%ugLDz<|359P;Z0Z5SqmsYa7!+?|)4-9kbD< zaEpHe2R=0&oye3B7r$tQMLtbQVT98Yg`;1g#%8mj&gMFTnzjSaF6%MMtK-iT9;%W*E z#Y#>kg#F(L5GG8)xicA@rL$p_y0|G}3B7!QNEZT66FQQBoPxW_j84Tvx*AfI8E8m` zFHOh&PA1@zlSqCp5w?Ra#iuK*F&Pfs4Fu@-vK0;^W-XK!#X)qF9k+pZ0Rb}eYc{C* z@KLx=C2(vOJaj7+t{5h;bslF0A8?lYmS_3F&Hf2cqNi_@_pYpK>s-SGuG^q`TO15h z36#%(*j78#8YWQswG5`A2BU*TEC1#l{{(WDcxJ9mPPzO@u3-WVDNy%q91K?p6i
lL)RMF1Ben8nv6wnHwGY0zk+Y0}TKyG|X~|#yN>c>3Pn1KcbbUVs1~%KJqYq;Q zGRJG6_N?)ImXqN-Bc-zJbkDj4>$K;qo-j-RL;lrG6ChS4upAxYW~vD%o)^y9`4e)- zH)=Us9OLo!vaymwzG z3vnj;`EN%ff4W#}SCTF3GO>`Im;*V8IYPoNQi-tRb6}B@e;ZCG7WR-wUjai=DSs7b zZw_i(cj;i+`JMlIl3o~Xd|!Zq2`4`=6_!aWu|Ac^ej3K$rs2BjWRA??@GdWhMZ3RL zAp<12Tq&37>-@4)Zfkr`ASH9SKW@l+9L9?UI9#7jM_)~X!hq6gG6C|53xE1w2dEC! zHE1^8>2$@5P>fjb_1Fq1eo!(47Q4)vkzOd0WKEHeP^zmm&{xiKw)Z3XnSp5IWAxoP z`tBw)pFMGs`Gk9HE0yipllQ}bIvZ35yrtC3-t`&*N)>`UdZh4q{$)5bx|f_nwAt7T zM)wp>hZU_N_YP`r5IO?-(O*p%eVz~L7{y$&LU~YI%McP!Z9f5iM{NBGU|xI2jDlI@ zhH;R98~hgOSTRsj3IPGM1Q$h~+9YUMGa9Uft$eJX7a)Q}uYJ$KI*Pe8eH6k>1E8#v z(g~96Hv+MH3Y+f66yW)jA&W5iJz7*k6H=uq>UU%&?4Ug;msdd60Y~b$1J7sxi>5;^ zVIfS0-`WU&ps5;sbQTndnUJQmqrod?Lwz2e2|pl)A%rE*^g9B%K_p7-q32=eO+kX3 z%GCicI9%cd2lYW_Q#ef;`G*NZkrC7Jb%};VVo?5MOBSvX&D5FX7a<~|11{;R!9H>) zS=LjZL4nts6K;LFk{vD|1<9uqpqyrdB9xAZ*@IvyFet!D7wJ3|59M!I3z)~8#%ENA>QWnQJ6!1K zMmjU$&U`aLWO@o9>GDdMIri};6DnBSvN9b|F-}D002ovPDHLkV1hCia8m#P literal 0 HcmV?d00001 diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-mdpi/ic_file_dialog_record_audio_pressed.png b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-mdpi/ic_file_dialog_record_audio_pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..755594e84c9b770e23e5ed663ae9f8e1d0b1b837 GIT binary patch literal 1883 zcmV-h2c-CkP)wzf^%)cB`=`iDQX+7=UQtk&4pN26$};;WV>tqHbP z(@-EShy*lBgMlT^7)roN&2!=FIoa zIdjgLxf>EP%8PSuBAHAQhQB)6yW65~$V6Q<_#~3h5#B|RM3T%Gg8PUO+J-{cgaW7k z7m=(ZIq7sdFEhp(Ni1~V0l__<;T_tDwu{D{2u$xa%kc!NfTWv*6G+`6`V>G1$qZj( z1QWPP^>1;%i9pnQfp$6^4yH%Y){9U*bgFAYSi=-7@ROzcmkD&G1RQ|uOu4v08P=En zuf!O>#tsJftpwa54ekg4v`-Pbm~buJZyhxWxg#k&q0YLPHD|EEd%2)p{eNg^=w!eo zGo6Tv+&T@HS>h0|< zeHaMfZ%a!{Ibqg9>7`4TBKrIL8y^M&aC58Gdh6)XqjTH@s;jG?phR&`H-XD3oSoUl zS>BhP&r>)0CxAjv?sNXIqU-XHx(Rf4c3M(XQ={Ajs;a7@DS@@?CUD|i14PvGJ=o|WtR>B{rtak>f6dhN)`$yw|sP+VNR&=7&#y;^bBRI5F2X`s@1%E;h9 zn95nJS!@6IpIY&EHqj7)w6wGsH-Wsoyr(INS#%R<_)P_IXT)*AR!@PPG4W2{zW`A$XUWtW#A8IarWQ8p6{=mbz$g>pz@rn5pR4{TyfZA>9Nh8{dkLkAGCI=fY{zP-Z9!Rc33mclZs?`g?}A z!84!FyE!}fn%4hHuAwm6)YMc-n5WByTqwoXR6_*3cV97xbap>ymRrNy-n*$R{*ALeN%wXd z*%vrzt@6Uc!W|+LYo$bbdirw81)YYAIk>~OZ+k6R^83#gC;%ZlqLpWIoA2IH`Wi@L zDCWr3yONTUUJ(g6R4%6@s3I*2sGNoiU`^~=;y(|d4ch8-8}D+uzP`Sgu+H+>3aIO# zq@?6yhoaaSP*sXZQd6KDp=^uNKyRPVS>|@-osMYZ1H6+kI;q^@=gysj`-FOIE7k4U ziWMuKA`>+Pyrq;SbB9I%rNStW9uYn%`ZO+Ewk*o$#$GU*T2xfD2WK&^o%Cq-2EijB z&;EX3^m#rcF^ar<_iojwww6I8Ao>0ugzZTH%+Ai9e7{q<@MFi0#nJ|UP#h~dCW-)g zf&-DKy}f<#z<~pCz($2+4=eTM-X#izJT@!s5((jKnjxss{JuGZM1l9Zf+7V z`8`@xLsMK_98C0hMMXsh_MmjJQEhYr1J5vl6zj8q1(eUOv5-yXD zHF(u+FlKpq`7eaw8DJUF@BMt>2q%dyEiKKYYSl#oiwaR~3})T+fdgZ}Z73RI<`)2i zE8_-oiH;x<1wW)5F(8g-oWUX@0e9(YYik?G%F6l*V~z^E>`pN;F;n1&v~O5*>pd$bP literal 0 HcmV?d00001 diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-xhdpi/ic_file_dialog_record_audio.png b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-xhdpi/ic_file_dialog_record_audio.png new file mode 100644 index 0000000000000000000000000000000000000000..4f97e211cae62a270551d5219c98d28b2886756f GIT binary patch literal 4374 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 QPXGV_07*qoM6N<$f>L8}QUCw| literal 0 HcmV?d00001 diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-xxhdpi/ic_file_dialog_record_audio.png b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-xxhdpi/ic_file_dialog_record_audio.png new file mode 100644 index 0000000000000000000000000000000000000000..1fca9d7d195d06dd489f2e2e62b007bb04c20f64 GIT binary patch literal 6944 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�EC1#t5ywFhzA^^hGt+;u3@FpAAbLa1!N65S@ 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 #515151 #94333232 + #00000000 diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/values/styles.xml b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/values/styles.xml index af69dd8..9107a32 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/values/styles.xml +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/values/styles.xml @@ -116,4 +116,10 @@ 0dp + + diff --git a/BeWoPlanerChat/bewoplaner-chat-android/gradle.properties b/BeWoPlanerChat/bewoplaner-chat-android/gradle.properties index 015fe44..aa95255 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/gradle.properties +++ b/BeWoPlanerChat/bewoplaner-chat-android/gradle.properties @@ -15,3 +15,5 @@ org.gradle.jvmargs=-Xmx1536m # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true +org.gradle.parallel=true +org.gradle.deamon=true \ No newline at end of file