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 0000000..d5e1048 Binary files /dev/null and b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-hdpi/ic_file_dialog_record_audio.png differ diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-hdpi/ic_file_dialog_record_audio_pressed.png b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-hdpi/ic_file_dialog_record_audio_pressed.png new file mode 100644 index 0000000..9b08305 Binary files /dev/null and b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-hdpi/ic_file_dialog_record_audio_pressed.png differ 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 0000000..3324bd5 Binary files /dev/null and b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-mdpi/ic_file_dialog_record_audio.png differ 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 0000000..755594e Binary files /dev/null and b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-mdpi/ic_file_dialog_record_audio_pressed.png differ 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 0000000..4f97e21 Binary files /dev/null and b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-xhdpi/ic_file_dialog_record_audio.png differ diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-xhdpi/ic_file_dialog_record_audio_pressed.png b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-xhdpi/ic_file_dialog_record_audio_pressed.png new file mode 100644 index 0000000..7cde8f5 Binary files /dev/null and b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-xhdpi/ic_file_dialog_record_audio_pressed.png differ 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 0000000..1fca9d7 Binary files /dev/null and b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-xxhdpi/ic_file_dialog_record_audio.png differ diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-xxhdpi/ic_file_dialog_record_audio_pressed.png b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-xxhdpi/ic_file_dialog_record_audio_pressed.png new file mode 100644 index 0000000..da5be38 Binary files /dev/null and b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-xxhdpi/ic_file_dialog_record_audio_pressed.png differ diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-xxxhdpi/ic_file_dialog_record_audio.png b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-xxxhdpi/ic_file_dialog_record_audio.png new file mode 100644 index 0000000..efd87fc Binary files /dev/null and b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-xxxhdpi/ic_file_dialog_record_audio.png differ diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-xxxhdpi/ic_file_dialog_record_audio_pressed.png b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-xxxhdpi/ic_file_dialog_record_audio_pressed.png new file mode 100644 index 0000000..6da490c Binary files /dev/null and b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/mipmap-xxxhdpi/ic_file_dialog_record_audio_pressed.png differ diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/values/colors.xml b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/values/colors.xml index 04842b9..0c20164 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/values/colors.xml +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/values/colors.xml @@ -20,4 +20,5 @@ #636363 #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