.
This commit is contained in:
@@ -6,6 +6,7 @@ buildscript {
|
||||
repositories {
|
||||
mavenCentral()
|
||||
maven { url 'https://maven.fabric.io/public' }
|
||||
maven { url 'https://maven.google.com' }
|
||||
}
|
||||
|
||||
dependencies {
|
||||
@@ -81,22 +82,17 @@ dependencies {
|
||||
androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
|
||||
exclude group: 'com.android.support', module: 'support-annotations'
|
||||
})
|
||||
// Android support libraries
|
||||
// Butter Knife
|
||||
// Dagger
|
||||
// Rx Java
|
||||
// Retrofit
|
||||
// OkHttp
|
||||
// Glide
|
||||
// Circle ImageView
|
||||
|
||||
implementation('com.github.bumptech.glide:glide:4.7.1') {
|
||||
exclude group: 'com.android.support'
|
||||
}
|
||||
|
||||
implementation('com.crashlytics.sdk.android:crashlytics:2.6.6@aar') {
|
||||
transitive = true
|
||||
}
|
||||
// Secure Preferences
|
||||
// Firebase
|
||||
// emojis
|
||||
// circle progress
|
||||
// event bus
|
||||
|
||||
annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'
|
||||
|
||||
implementation 'com.android.support:appcompat-v7:27.1.1'
|
||||
implementation 'com.android.support:design:27.1.1'
|
||||
implementation 'com.jakewharton:butterknife:8.8.1'
|
||||
@@ -109,8 +105,8 @@ dependencies {
|
||||
implementation 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
|
||||
implementation 'com.squareup.okhttp3:okhttp:3.7.0'
|
||||
implementation 'com.squareup.okhttp3:logging-interceptor:3.4.1'
|
||||
implementation 'com.github.bumptech.glide:glide:3.7.0'
|
||||
implementation 'de.hdodenhof:circleimageview:2.1.0'
|
||||
|
||||
//implementation 'de.hdodenhof:circleimageview:2.1.0'
|
||||
implementation 'com.scottyab:secure-preferences-lib:0.1.4'
|
||||
implementation 'com.google.firebase:firebase-messaging:17.0.0'
|
||||
implementation 'com.google.firebase:firebase-core:16.0.0'
|
||||
|
||||
@@ -5,6 +5,7 @@ import android.util.Log;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
|
||||
import org.spongycastle.asn1.pkcs.RSAPublicKey;
|
||||
import org.spongycastle.openssl.PEMWriter;
|
||||
|
||||
import de.beyondsoft.ownchat.BewoplanerApplication;
|
||||
@@ -106,7 +107,7 @@ public class ApiModule {
|
||||
Request request = chain.request();
|
||||
|
||||
HttpUrl url = request.url();
|
||||
Log.d(LOG_TAG_NETWORK_INTERCEPTOR, "Pinning certificate for URL: " + url);
|
||||
//Log.d(LOG_TAG_NETWORK_INTERCEPTOR, "Pinning certificate for URL: " + url);
|
||||
|
||||
List<Certificate> certificates = chain.connection().handshake().peerCertificates();
|
||||
|
||||
@@ -117,6 +118,7 @@ public class ApiModule {
|
||||
X509Certificate x509 = (X509Certificate) cert;
|
||||
|
||||
String name = x509.getIssuerX500Principal().getName();
|
||||
String serialNumber = x509.getSerialNumber().toString();
|
||||
|
||||
StringWriter writer = new StringWriter();
|
||||
|
||||
@@ -128,14 +130,21 @@ public class ApiModule {
|
||||
String writerAsString = writer.toString();
|
||||
String base64EncodedKey = writerAsString.split("-----BEGIN PUBLIC KEY-----")[1].split("-----END PUBLIC KEY-----")[0].replaceAll(System.getProperty("line.separator"), "");
|
||||
|
||||
if(name.contains("O=Let's Encrypt")) {
|
||||
|
||||
Log.i(LOG_TAG_NETWORK_INTERCEPTOR, "\nSSL certificates:\nName: " + name + "\nSerial number: " + serialNumber + "\nUrl: " + url + "\nPublic key: " + base64EncodedKey);
|
||||
}
|
||||
|
||||
if(name.contains("O=Let's Encrypt") && base64EncodedKey.equals(Constants.PUBLIC_KEY)) {
|
||||
isVerified = true;
|
||||
break;
|
||||
} else {
|
||||
//Log.e(LOG_TAG_NETWORK_INTERCEPTOR, "\nSSL certificates are invalid:\nName: " + name + "\\nUrl: " + url + "\n Expected public key: " + Constants.PUBLIC_KEY + "\nActual public key: " + base64EncodedKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!isVerified) {
|
||||
if(!isVerified && !BuildConfig.DEBUG) {
|
||||
Log.e(LOG_TAG_NETWORK_INTERCEPTOR, "SSL certificates are invalid!");
|
||||
throw new SSLHandshakeException("Invalid SSL certificates");
|
||||
}
|
||||
|
||||
@@ -16,7 +16,6 @@ import com.bumptech.glide.RequestManager;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
import de.beyondsoft.ownchat.R;
|
||||
@@ -27,10 +26,6 @@ import de.beyondsoft.ownchat.filepicker.models.Media;
|
||||
import de.beyondsoft.ownchat.filepicker.utils.AndroidLifecycleUtils;
|
||||
import de.beyondsoft.ownchat.filepicker.utils.MediaStoreHelper;
|
||||
|
||||
/**
|
||||
* Created by Lyndon on 27-Oct-2017.
|
||||
*/
|
||||
|
||||
public class MediaDetailsActivity extends BaseFilePickerActivity implements FileAdapterListener {
|
||||
private static final int SCROLL_THRESHOLD = 30;
|
||||
private RecyclerView recyclerView;
|
||||
@@ -129,7 +124,7 @@ public class MediaDetailsActivity extends BaseFilePickerActivity implements File
|
||||
photoGridAdapter.setData(medias);
|
||||
photoGridAdapter.notifyDataSetChanged();
|
||||
} else {
|
||||
photoGridAdapter = new ImageGridAdapter(this, mGlideRequestManager, medias,PickerManager.getInstance().getSelectedPhotos(),false, this);
|
||||
photoGridAdapter = new ImageGridAdapter(this, medias,PickerManager.getInstance().getSelectedPhotos(),false, this);
|
||||
recyclerView.setAdapter(photoGridAdapter);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package de.beyondsoft.ownchat.filepicker.adapters;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.LayoutInflater;
|
||||
@@ -10,13 +11,6 @@ import android.view.WindowManager;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.bumptech.glide.RequestManager;
|
||||
import com.bumptech.glide.load.resource.bitmap.GlideBitmapDrawable;
|
||||
import com.bumptech.glide.load.resource.drawable.GlideDrawable;
|
||||
import com.bumptech.glide.load.resource.gif.GifDrawable;
|
||||
import com.bumptech.glide.request.RequestListener;
|
||||
import com.bumptech.glide.request.target.Target;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
|
||||
@@ -24,15 +18,11 @@ import de.beyondsoft.ownchat.R;
|
||||
import de.beyondsoft.ownchat.filepicker.PickerManager;
|
||||
import de.beyondsoft.ownchat.filepicker.models.ImageDirectory;
|
||||
import de.beyondsoft.ownchat.filepicker.utils.AndroidLifecycleUtils;
|
||||
import de.beyondsoft.ownchat.utils.ui.GlideApp;
|
||||
|
||||
/**
|
||||
* Created by Lyndon on 26-Oct-2017.
|
||||
*/
|
||||
|
||||
public class FolderGridAdapter extends SelectableAdapter<FolderGridAdapter.ImageViewHolder, ImageDirectory> implements RequestListener<File, GlideDrawable> {
|
||||
public class FolderGridAdapter extends SelectableAdapter<FolderGridAdapter.ImageViewHolder, ImageDirectory> {
|
||||
|
||||
private final Context context;
|
||||
private final RequestManager glide;
|
||||
private final boolean showCamera;
|
||||
private int imageSize;
|
||||
|
||||
@@ -40,36 +30,21 @@ public class FolderGridAdapter extends SelectableAdapter<FolderGridAdapter.Image
|
||||
private final static int ITEM_TYPE_PHOTO = 101;
|
||||
private FolderGridAdapterListener folderGridAdapterListener;
|
||||
|
||||
@Override
|
||||
public boolean onException(Exception e, File model, Target<GlideDrawable> target, boolean isFirstResource) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onResourceReady(GlideDrawable resource, File model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
|
||||
if(resource.isAnimated()) {
|
||||
target.onResourceReady(new GlideBitmapDrawable(null, ((GifDrawable) resource).getFirstFrame()), null);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public interface FolderGridAdapterListener{
|
||||
void onCameraClicked();
|
||||
void onFolderClicked(ImageDirectory photoDirectory);
|
||||
}
|
||||
|
||||
public FolderGridAdapter(Context context, RequestManager requestManager, ArrayList<ImageDirectory> photos, ArrayList<String> selectedPaths, boolean showCamera) {
|
||||
public FolderGridAdapter(Context context, ArrayList<ImageDirectory> photos, ArrayList<String> selectedPaths, boolean showCamera) {
|
||||
super(photos, selectedPaths);
|
||||
this.context = context;
|
||||
this.glide = requestManager;
|
||||
this.showCamera = showCamera;
|
||||
setColumnNumber(context,3);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public ImageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
View itemView = LayoutInflater.from(context).inflate(R.layout.item_folder_layout, parent, false);
|
||||
|
||||
return new ImageViewHolder(itemView);
|
||||
@@ -85,15 +60,16 @@ public class FolderGridAdapter extends SelectableAdapter<FolderGridAdapter.Image
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(final ImageViewHolder holder, int position) {
|
||||
public void onBindViewHolder(@NonNull final ImageViewHolder holder, int position) {
|
||||
if(getItemViewType(position) == ITEM_TYPE_PHOTO) {
|
||||
final ImageDirectory photoDirectory = getItems().get(showCamera?position-1:position);
|
||||
|
||||
if(AndroidLifecycleUtils.canLoadImage(holder.imageView.getContext())) {
|
||||
glide.load(new File(photoDirectory.getCoverPath()))
|
||||
GlideApp.with(holder.imageView.getContext())
|
||||
.asBitmap()
|
||||
.load(new File(photoDirectory.getCoverPath()))
|
||||
.override(imageSize, imageSize)
|
||||
.thumbnail(0.25f)
|
||||
.listener(this)
|
||||
.thumbnail(.25f)
|
||||
.into(holder.imageView);
|
||||
}
|
||||
|
||||
@@ -123,7 +99,9 @@ public class FolderGridAdapter extends SelectableAdapter<FolderGridAdapter.Image
|
||||
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
|
||||
DisplayMetrics metrics = new DisplayMetrics();
|
||||
|
||||
wm.getDefaultDisplay().getMetrics(metrics);
|
||||
if(wm != null) {
|
||||
wm.getDefaultDisplay().getMetrics(metrics);
|
||||
}
|
||||
|
||||
int widthPixels = metrics.widthPixels;
|
||||
imageSize = widthPixels / columnNum;
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package de.beyondsoft.ownchat.filepicker.adapters;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.LayoutInflater;
|
||||
@@ -10,11 +12,9 @@ import android.view.WindowManager;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import com.bumptech.glide.RequestManager;
|
||||
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
||||
import com.bumptech.glide.load.resource.bitmap.GlideBitmapDrawable;
|
||||
import com.bumptech.glide.load.resource.drawable.GlideDrawable;
|
||||
import com.bumptech.glide.load.resource.gif.GifDrawable;
|
||||
|
||||
import com.bumptech.glide.load.DataSource;
|
||||
import com.bumptech.glide.load.engine.GlideException;
|
||||
import com.bumptech.glide.request.RequestListener;
|
||||
import com.bumptech.glide.request.target.Target;
|
||||
|
||||
@@ -26,14 +26,10 @@ import de.beyondsoft.ownchat.filepicker.FilePickerConst;
|
||||
import de.beyondsoft.ownchat.filepicker.PickerManager;
|
||||
import de.beyondsoft.ownchat.filepicker.models.Media;
|
||||
import de.beyondsoft.ownchat.filepicker.utils.AndroidLifecycleUtils;
|
||||
import de.beyondsoft.ownchat.utils.ui.GlideApp;
|
||||
|
||||
/**
|
||||
* Created by Lyndon on 26-Oct-2017.
|
||||
*/
|
||||
|
||||
public class ImageGridAdapter extends SelectableAdapter<ImageGridAdapter.ImageViewHolder, Media> implements RequestListener<File, GlideDrawable> {
|
||||
public class ImageGridAdapter extends SelectableAdapter<ImageGridAdapter.ImageViewHolder, Media> {
|
||||
private final Context context;
|
||||
private final RequestManager glide;
|
||||
private final boolean showCamera;
|
||||
private final FileAdapterListener mListener;
|
||||
private int imageSize;
|
||||
@@ -42,10 +38,9 @@ public class ImageGridAdapter extends SelectableAdapter<ImageGridAdapter.ImageVi
|
||||
private final static int ITEM_TYPE_PHOTO = 101;
|
||||
private View.OnClickListener cameraOnClickListener;
|
||||
|
||||
public ImageGridAdapter(Context context, RequestManager requestManager, ArrayList<Media> medias, ArrayList<String> selectedPaths, boolean showCamera, FileAdapterListener photoGridAdapterListener) {
|
||||
public ImageGridAdapter(Context context, ArrayList<Media> medias, ArrayList<String> selectedPaths, boolean showCamera, FileAdapterListener photoGridAdapterListener) {
|
||||
super(medias, selectedPaths);
|
||||
this.context = context;
|
||||
this.glide = requestManager;
|
||||
this.showCamera = showCamera;
|
||||
this.mListener = photoGridAdapterListener;
|
||||
setColumnNumber(context,4);
|
||||
@@ -73,10 +68,11 @@ public class ImageGridAdapter extends SelectableAdapter<ImageGridAdapter.ImageVi
|
||||
final Media media = getItems().get(showCamera ? position - 1 : position);
|
||||
|
||||
if(AndroidLifecycleUtils.canLoadImage(holder.imageView.getContext())) {
|
||||
glide.load(new File(media.getPath()))
|
||||
GlideApp.with(holder.imageView.getContext())
|
||||
.asBitmap()
|
||||
.load(new File(media.getPath()))
|
||||
.override(imageSize, imageSize)
|
||||
.thumbnail(0.25f)
|
||||
.listener(this)
|
||||
.thumbnail(.25f)
|
||||
.into(holder.imageView);
|
||||
}
|
||||
|
||||
@@ -157,21 +153,6 @@ public class ImageGridAdapter extends SelectableAdapter<ImageGridAdapter.ImageVi
|
||||
this.cameraOnClickListener = onClickListener;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onException(Exception e, File model, Target<GlideDrawable> target, boolean isFirstResource) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onResourceReady(GlideDrawable resource, File model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
|
||||
if(resource.isAnimated()) {
|
||||
target.onResourceReady(new GlideBitmapDrawable(null, ((GifDrawable) resource).getFirstFrame()), null);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static class ImageViewHolder extends RecyclerView.ViewHolder {
|
||||
CheckBox checkBox;
|
||||
|
||||
|
||||
@@ -171,7 +171,7 @@ public class MediaDetailPickerFragment extends BaseFragment implements FileAdapt
|
||||
photoGridAdapter.setData(medias);
|
||||
photoGridAdapter.notifyDataSetChanged();
|
||||
} else {
|
||||
photoGridAdapter = new ImageGridAdapter(getActivity(), mGlideRequestManager, medias, PickerManager.getInstance().getSelectedPhotos(),(fileType==FilePickerConst.MEDIA_TYPE_IMAGE) && PickerManager.getInstance().isEnableCamera(), this);
|
||||
photoGridAdapter = new ImageGridAdapter(getActivity(), medias, PickerManager.getInstance().getSelectedPhotos(),(fileType==FilePickerConst.MEDIA_TYPE_IMAGE) && PickerManager.getInstance().isEnableCamera(), this);
|
||||
recyclerView.setAdapter(photoGridAdapter);
|
||||
photoGridAdapter.setCameraListener(v -> {
|
||||
try {
|
||||
|
||||
@@ -183,7 +183,7 @@ public class MediaFolderPickerFragment extends BaseFragment implements FolderGri
|
||||
photoGridAdapter.setData(dirs);
|
||||
photoGridAdapter.notifyDataSetChanged();
|
||||
} else {
|
||||
photoGridAdapter = new FolderGridAdapter(getActivity(), mGlideRequestManager, (ArrayList<ImageDirectory>) dirs, null, (fileType== FilePickerConst.MEDIA_TYPE_IMAGE) && PickerManager.getInstance().isEnableCamera());
|
||||
photoGridAdapter = new FolderGridAdapter(getActivity(), (ArrayList<ImageDirectory>) dirs, null, (fileType== FilePickerConst.MEDIA_TYPE_IMAGE) && PickerManager.getInstance().isEnableCamera());
|
||||
recyclerView.setAdapter(photoGridAdapter);
|
||||
|
||||
photoGridAdapter.setFolderGridAdapterListener(this);
|
||||
|
||||
@@ -1,16 +1,5 @@
|
||||
package de.beyondsoft.ownchat.page.chat;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
||||
import com.github.lzyzsd.circleprogress.DonutProgress;
|
||||
|
||||
import butterknife.OnItemLongClick;
|
||||
import butterknife.OnLongClick;
|
||||
import de.beyondsoft.ownchat.R;
|
||||
import de.beyondsoft.ownchat.model.Message;
|
||||
import de.beyondsoft.ownchat.utils.DateUtils;
|
||||
import de.beyondsoft.ownchat.utils.ui.ViewUtils;
|
||||
|
||||
import android.net.Uri;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
@@ -19,9 +8,11 @@ import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
||||
import com.github.lzyzsd.circleprogress.DonutProgress;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
@@ -33,11 +24,13 @@ import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import butterknife.OnClick;
|
||||
import butterknife.Optional;
|
||||
import de.beyondsoft.ownchat.R;
|
||||
import de.beyondsoft.ownchat.model.Message;
|
||||
import de.beyondsoft.ownchat.utils.DateUtils;
|
||||
import de.beyondsoft.ownchat.utils.ui.GlideApp;
|
||||
import de.beyondsoft.ownchat.utils.ui.ViewUtils;
|
||||
import hani.momanii.supernova_emoji_library.Helper.EmojiconTextView;
|
||||
|
||||
/**
|
||||
* Created by Rares Teodorescu on 21/02/2017.
|
||||
*/
|
||||
abstract class BaseChatAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||
|
||||
final static int DATE_TYPE = 0;
|
||||
@@ -76,17 +69,17 @@ abstract class BaseChatAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
|
||||
mLastDay = Calendar.getInstance();
|
||||
mIsRetrying = false;
|
||||
|
||||
if (!messages.isEmpty()) {
|
||||
if(!messages.isEmpty()) {
|
||||
mPositionOffset.add(0);
|
||||
mDateList.add(new Date(messages.get(0).createdAt));
|
||||
}
|
||||
|
||||
int messageSize = messages.size();
|
||||
|
||||
for (int i = 1; i < messageSize; i++) {
|
||||
for(int i = 1; i < messageSize; i++) {
|
||||
mCurrentDay.setTimeInMillis(messages.get(i).createdAt);
|
||||
mLastDay.setTimeInMillis(messages.get(i - 1).createdAt);
|
||||
if (mCurrentDay.get(Calendar.DAY_OF_YEAR) != mLastDay.get(Calendar.DAY_OF_YEAR)) {
|
||||
if(mCurrentDay.get(Calendar.DAY_OF_YEAR) != mLastDay.get(Calendar.DAY_OF_YEAR)) {
|
||||
mDatePositions.add(i + mLastOffset);
|
||||
mPositionOffset.add(0);
|
||||
mDateList.add(mLastDay.getTime());
|
||||
@@ -102,7 +95,7 @@ abstract class BaseChatAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
|
||||
}
|
||||
|
||||
void addMessages(ArrayList<Message> messages) {
|
||||
if (messages == null || messages.isEmpty() || mMessages.equals(messages)) {
|
||||
if(messages == null || messages.isEmpty() || mMessages.equals(messages)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -112,7 +105,7 @@ abstract class BaseChatAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTimeInMillis(messages.get(0).createdAt);
|
||||
|
||||
if (mCurrentDay.get(Calendar.DAY_OF_YEAR) != calendar.get(Calendar.DAY_OF_YEAR)) {
|
||||
if(mCurrentDay.get(Calendar.DAY_OF_YEAR) != calendar.get(Calendar.DAY_OF_YEAR)) {
|
||||
mDatePositions.add(currentMessagesCount + mLastOffset);
|
||||
datesInserted++;
|
||||
mDateList.add(new Date(messages.get(0).createdAt));
|
||||
@@ -124,11 +117,11 @@ abstract class BaseChatAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
|
||||
mDateList.add(new Date(messages.get(0).createdAt));
|
||||
int messageSize = messages.size();
|
||||
|
||||
for (int i = 1; i < messageSize; i++) {
|
||||
for(int i = 1; i < messageSize; i++) {
|
||||
mCurrentDay.setTimeInMillis(messages.get(i).createdAt);
|
||||
mLastDay.setTimeInMillis(messages.get(i - 1).createdAt);
|
||||
|
||||
if (mCurrentDay.get(Calendar.DAY_OF_YEAR) != mLastDay.get(Calendar.DAY_OF_YEAR)) {
|
||||
if(mCurrentDay.get(Calendar.DAY_OF_YEAR) != mLastDay.get(Calendar.DAY_OF_YEAR)) {
|
||||
mDatePositions.add(currentMessagesCount + mLastOffset + i);
|
||||
datesInserted++;
|
||||
mPositionOffset.add(0);
|
||||
@@ -160,7 +153,7 @@ abstract class BaseChatAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
|
||||
}
|
||||
|
||||
void addMessage(Message message) {
|
||||
if (mMessages.contains(message)) {
|
||||
if(mMessages.contains(message)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -172,14 +165,14 @@ abstract class BaseChatAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
|
||||
|
||||
Calendar lastDay = Calendar.getInstance();
|
||||
|
||||
if (mMessages.size() > 1) {
|
||||
if(mMessages.size() > 1) {
|
||||
lastDay.setTimeInMillis(mMessages.get(1).createdAt);
|
||||
}
|
||||
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTimeInMillis(message.createdAt);
|
||||
|
||||
if (calendar.get(Calendar.DAY_OF_YEAR) != lastDay.get(Calendar.DAY_OF_YEAR)) {
|
||||
if(calendar.get(Calendar.DAY_OF_YEAR) != lastDay.get(Calendar.DAY_OF_YEAR)) {
|
||||
// New date inserted
|
||||
setMessages(new ArrayList<>(mMessages));
|
||||
return;
|
||||
@@ -200,12 +193,12 @@ abstract class BaseChatAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
|
||||
List<Integer> currentDatePositions = new ArrayList<>();
|
||||
boolean newDateAdded = false;
|
||||
|
||||
if (calendar.get(Calendar.DAY_OF_YEAR) != lastDay.get(Calendar.DAY_OF_YEAR)) {
|
||||
if(calendar.get(Calendar.DAY_OF_YEAR) != lastDay.get(Calendar.DAY_OF_YEAR)) {
|
||||
currentDatePositions.add(1);
|
||||
newDateAdded = true;
|
||||
}
|
||||
|
||||
for (int i = 0, size = mDatePositions.size(); i < size; i++) {
|
||||
for(int i = 0, size = mDatePositions.size(); i < size; i++) {
|
||||
currentDatePositions.add(mDatePositions.get(i) + (newDateAdded ? 2 : 1));
|
||||
}
|
||||
|
||||
@@ -218,7 +211,7 @@ abstract class BaseChatAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
|
||||
void setLoading(boolean loading) {
|
||||
mIsLoading = loading;
|
||||
|
||||
if (loading) {
|
||||
if(loading) {
|
||||
notifyItemRangeInserted(getItemCount(), 1);
|
||||
} else {
|
||||
notifyItemRemoved(getItemCount() - 1);
|
||||
@@ -232,14 +225,14 @@ abstract class BaseChatAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
|
||||
|
||||
void updateMessage(Message newMessage, String oldMessageId) {
|
||||
int index = -1;
|
||||
for (int i = 0; i < mMessages.size(); i++) {
|
||||
if (oldMessageId.equals(mMessages.get(i).id)) {
|
||||
for(int i = 0; i < mMessages.size(); i++) {
|
||||
if(oldMessageId.equals(mMessages.get(i).id)) {
|
||||
index = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (index == -1) {
|
||||
if(index == -1) {
|
||||
Log.e("BaseChatAdapter", "message not found!! " + newMessage.toString());
|
||||
return;
|
||||
}
|
||||
@@ -250,11 +243,11 @@ abstract class BaseChatAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
|
||||
|
||||
@Override
|
||||
public int getItemViewType(int position) {
|
||||
if (mDatePositions.contains(position)) {
|
||||
if(mDatePositions.contains(position)) {
|
||||
return DATE_TYPE;
|
||||
}
|
||||
|
||||
if (position == mMessages.size() + mLastOffset) {
|
||||
if(position == mMessages.size() + mLastOffset) {
|
||||
return LOADING_TYPE;
|
||||
}
|
||||
|
||||
@@ -270,9 +263,9 @@ abstract class BaseChatAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
|
||||
mIsRetrying = false;
|
||||
Message myMessage = null;
|
||||
int index = -1;
|
||||
for (int i = 0; i < mMessages.size(); i++) {
|
||||
for(int i = 0; i < mMessages.size(); i++) {
|
||||
Message message = mMessages.get(i);
|
||||
if (messageId.equals(message.id)) {
|
||||
if(messageId.equals(message.id)) {
|
||||
index = i;
|
||||
myMessage = message;
|
||||
myMessage.status = Message.Status.FAILED;
|
||||
@@ -280,7 +273,7 @@ abstract class BaseChatAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
|
||||
}
|
||||
}
|
||||
|
||||
if (myMessage == null) {
|
||||
if(myMessage == null) {
|
||||
Log.e("BaseChatAdapter", "message not found!! " + messageId);
|
||||
return;
|
||||
}
|
||||
@@ -298,13 +291,13 @@ abstract class BaseChatAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
|
||||
}
|
||||
|
||||
private void setMessage(MessageViewHolder viewHolder, Message message, int position, boolean isGroup, boolean isLeft) {
|
||||
if (isGroup) {
|
||||
if(isGroup) {
|
||||
viewHolder.timeTextView.setText(String.format(Locale.getDefault(), "%s | %s", isLeft ? message.senderName : viewHolder.timeTextView.getContext().getString(R.string.chat_you_name), DateUtils.toHourFormatHour(message.createdAt)));
|
||||
|
||||
if (TextUtils.isEmpty(message.senderAvatar)) {
|
||||
if(TextUtils.isEmpty(message.senderAvatar)) {
|
||||
viewHolder.contactImageView.setImageResource(R.drawable.avatar);
|
||||
} else {
|
||||
Glide.with(viewHolder.contactImageView.getContext())
|
||||
GlideApp.with(viewHolder.contactImageView.getContext())
|
||||
.load(message.senderAvatar)
|
||||
.placeholder(R.drawable.avatar)
|
||||
.diskCacheStrategy(DiskCacheStrategy.ALL)
|
||||
@@ -314,16 +307,16 @@ abstract class BaseChatAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
|
||||
viewHolder.timeTextView.setText(DateUtils.toHourFormatHour(message.createdAt));
|
||||
}
|
||||
|
||||
if (!TextUtils.isEmpty(message.filePath)) {
|
||||
if(!TextUtils.isEmpty(message.filePath)) {
|
||||
viewHolder.messageTextView.setVisibility(View.GONE);
|
||||
|
||||
if (mDownloadProgressMap.containsKey(position)) {
|
||||
if(mDownloadProgressMap.containsKey(position)) {
|
||||
viewHolder.fileImageView.setVisibility(View.GONE);
|
||||
viewHolder.donutProgress.setVisibility(View.VISIBLE);
|
||||
viewHolder.donutProgress.setProgress(mDownloadProgressMap.get(position));
|
||||
viewHolder.donutProgress.setText(String.format(Locale.getDefault(), "%d %%", mDownloadProgressMap.get(position)));
|
||||
|
||||
if (!message.filePath.toLowerCase().endsWith(".png") && !message.filePath.toLowerCase().endsWith(".jpg")) {
|
||||
if(!message.filePath.toLowerCase().endsWith(".png") && !message.filePath.toLowerCase().endsWith(".jpg")) {
|
||||
viewHolder.filenameTextView.setVisibility(View.VISIBLE);
|
||||
viewHolder.filenameTextView.setText(message.originalFilename);
|
||||
} else {
|
||||
@@ -335,19 +328,19 @@ abstract class BaseChatAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
|
||||
viewHolder.filenameTextView.setVisibility(View.GONE);
|
||||
viewHolder.fileImageView.setImageDrawable(null);
|
||||
|
||||
Glide.with(viewHolder.fileImageView.getContext())
|
||||
GlideApp.with(viewHolder.fileImageView.getContext())
|
||||
.asBitmap()
|
||||
.load(TextUtils.isEmpty(message.smallerImage) ? message.filePath : message.smallerImage)
|
||||
.placeholder(R.drawable.document)
|
||||
.dontAnimate()
|
||||
.override(500, 500)
|
||||
.diskCacheStrategy(DiskCacheStrategy.ALL)
|
||||
.into(viewHolder.fileImageView);
|
||||
}
|
||||
|
||||
if (!TextUtils.isEmpty(message.message)) {
|
||||
viewHolder.messageTextView.setVisibility(View.VISIBLE);
|
||||
viewHolder.messageTextView.setText(message.message);
|
||||
}
|
||||
if(!TextUtils.isEmpty(message.message)) {
|
||||
viewHolder.messageTextView.setVisibility(View.VISIBLE);
|
||||
viewHolder.messageTextView.setText(message.message);
|
||||
}
|
||||
} else {
|
||||
viewHolder.donutProgress.setVisibility(View.GONE);
|
||||
viewHolder.fileImageView.setVisibility(View.GONE);
|
||||
|
||||
@@ -6,6 +6,7 @@ import de.beyondsoft.ownchat.R;
|
||||
import de.beyondsoft.ownchat.model.Group;
|
||||
import de.beyondsoft.ownchat.model.Message;
|
||||
import de.beyondsoft.ownchat.utils.Constants;
|
||||
import de.beyondsoft.ownchat.utils.ui.GlideApp;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
@@ -110,9 +111,10 @@ public class SingleChatActivity extends BaseChatActivity {
|
||||
if (TextUtils.isEmpty(mGroup.avatar)) {
|
||||
mChatImageView.setImageResource(mGroup.onlyEmployees ? de.beyondsoft.ownchat.R.drawable.avatar : R.drawable.avatar_help);
|
||||
} else {
|
||||
Glide.with(this).load(mGroup.avatar)
|
||||
.placeholder(de.beyondsoft.ownchat.R.drawable.avatar)
|
||||
.dontAnimate()
|
||||
GlideApp.with(this)
|
||||
.asBitmap()
|
||||
.load(mGroup.avatar)
|
||||
.placeholder(R.drawable.avatar)
|
||||
.into(mChatImageView);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,8 @@
|
||||
package de.beyondsoft.ownchat.page.chatmembers;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
||||
import de.beyondsoft.ownchat.R;
|
||||
import de.beyondsoft.ownchat.model.User;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.text.TextUtils;
|
||||
@@ -16,17 +12,18 @@ import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Locale;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import butterknife.OnClick;
|
||||
import de.hdodenhof.circleimageview.CircleImageView;
|
||||
import de.beyondsoft.ownchat.R;
|
||||
import de.beyondsoft.ownchat.model.User;
|
||||
import de.beyondsoft.ownchat.utils.ui.GlideApp;
|
||||
|
||||
/**
|
||||
* Created by imarneanu on 2/24/17.
|
||||
*/
|
||||
class ChatMembersAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||
|
||||
private ArrayList<User> mUsers;
|
||||
@@ -35,14 +32,15 @@ class ChatMembersAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||
mUsers = users;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_chat_member, parent, false);
|
||||
return new ContactViewHolder(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
|
||||
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
|
||||
ContactViewHolder viewHolder = (ContactViewHolder) holder;
|
||||
User user = mUsers.get(position);
|
||||
viewHolder.contactTextView.setText(String.format(Locale.getDefault(), "%s %s", user.firstName, user.lastName));
|
||||
@@ -54,10 +52,11 @@ class ChatMembersAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||
return;
|
||||
}
|
||||
|
||||
Glide.with(viewHolder.avatarCircleImageView.getContext())
|
||||
GlideApp.with(viewHolder.avatarCircleImageView.getContext())
|
||||
.asBitmap()
|
||||
.load(user.avatar)
|
||||
.placeholder(R.drawable.avatar)
|
||||
.dontAnimate()
|
||||
.circleCrop()
|
||||
.diskCacheStrategy(DiskCacheStrategy.ALL)
|
||||
.into(viewHolder.avatarCircleImageView);
|
||||
}
|
||||
@@ -69,7 +68,7 @@ class ChatMembersAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||
|
||||
class ContactViewHolder extends RecyclerView.ViewHolder {
|
||||
@BindView(R.id.chat_member_avatar)
|
||||
CircleImageView avatarCircleImageView;
|
||||
ImageView avatarCircleImageView;
|
||||
@BindView(R.id.chat_member_name)
|
||||
TextView contactTextView;
|
||||
@BindView(R.id.chat_member_phone)
|
||||
@@ -82,9 +81,7 @@ class ChatMembersAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||
|
||||
@OnClick(R.id.chat_member_phone)
|
||||
void onPhoneClicked() {
|
||||
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.fromParts("tel",
|
||||
mUsers.get(getAdapterPosition()).mobile,
|
||||
null));
|
||||
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.fromParts("tel", mUsers.get(getAdapterPosition()).mobile, null));
|
||||
phoneImageView.getContext().startActivity(intent);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package de.beyondsoft.ownchat.page.contacts;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
||||
import de.beyondsoft.ownchat.R;
|
||||
import de.beyondsoft.ownchat.model.Group;
|
||||
import de.beyondsoft.ownchat.utils.DateUtils;
|
||||
import de.beyondsoft.ownchat.utils.ui.GlideApp;
|
||||
import de.beyondsoft.ownchat.utils.ui.ViewUtils;
|
||||
|
||||
import android.graphics.Typeface;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.text.TextUtils;
|
||||
@@ -19,17 +19,15 @@ import android.widget.ImageView;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import butterknife.OnClick;
|
||||
import de.hdodenhof.circleimageview.CircleImageView;
|
||||
import hani.momanii.supernova_emoji_library.Helper.EmojiconTextView;
|
||||
|
||||
/**
|
||||
* Created by imarneanu on 2/21/17.
|
||||
*/
|
||||
class ContactsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||
|
||||
private static final int GROUP_TYPE = 0;
|
||||
@@ -70,14 +68,15 @@ class ContactsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||
return CONTACT_TYPE;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_contact, parent, false);
|
||||
return new ContactViewHolder(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
|
||||
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
|
||||
Group group = mGroups.get(position);
|
||||
ContactViewHolder viewHolder = (ContactViewHolder) holder;
|
||||
setLastMessage(group, viewHolder);
|
||||
@@ -100,9 +99,11 @@ class ContactsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||
|
||||
viewHolder.name.setText(group.name);
|
||||
|
||||
Glide.with(viewHolder.avatar.getContext()).load(group.avatar)
|
||||
GlideApp.with(viewHolder.avatar.getContext())
|
||||
.asBitmap()
|
||||
.load(group.avatar)
|
||||
.placeholder(group.onlyEmployees ? R.drawable.avatar_list : R.drawable.avatar_help)
|
||||
.dontAnimate()
|
||||
.circleCrop()
|
||||
.diskCacheStrategy(DiskCacheStrategy.ALL)
|
||||
.into(viewHolder.avatar);
|
||||
}
|
||||
@@ -153,7 +154,7 @@ class ContactsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||
|
||||
class ContactViewHolder extends RecyclerView.ViewHolder {
|
||||
@BindView(R.id.contact_avatar)
|
||||
CircleImageView avatar;
|
||||
ImageView avatar;
|
||||
|
||||
@BindView(R.id.contact_name)
|
||||
TextView name;
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
package de.beyondsoft.ownchat.page.fileconfirmation;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.graphics.Bitmap;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.annotation.StringRes;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
@@ -14,35 +15,30 @@ import android.widget.ProgressBar;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.load.DataSource;
|
||||
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
||||
import com.bumptech.glide.load.resource.drawable.GlideDrawable;
|
||||
import com.bumptech.glide.load.engine.GlideException;
|
||||
import com.bumptech.glide.request.RequestListener;
|
||||
import com.bumptech.glide.request.target.GlideDrawableImageViewTarget;
|
||||
import com.bumptech.glide.request.target.BitmapImageViewTarget;
|
||||
import com.bumptech.glide.request.target.Target;
|
||||
|
||||
import butterknife.OnClick;
|
||||
import de.beyondsoft.ownchat.R;
|
||||
import de.beyondsoft.ownchat.data.AppPrefsConstants;
|
||||
import de.beyondsoft.ownchat.data.prefs.BooleanPreference;
|
||||
import de.beyondsoft.ownchat.data.prefs.StringPreference;
|
||||
import de.beyondsoft.ownchat.di.InjectionHelper;
|
||||
import de.beyondsoft.ownchat.model.Group;
|
||||
import de.beyondsoft.ownchat.utils.Constants;
|
||||
import de.beyondsoft.ownchat.utils.FileUtils;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import butterknife.OnClick;
|
||||
import de.beyondsoft.ownchat.R;
|
||||
import de.beyondsoft.ownchat.di.InjectionHelper;
|
||||
import de.beyondsoft.ownchat.model.Group;
|
||||
import de.beyondsoft.ownchat.utils.Constants;
|
||||
import de.beyondsoft.ownchat.utils.ui.GlideApp;
|
||||
import de.beyondsoft.ownchat.utils.ui.ViewUtils;
|
||||
import hani.momanii.supernova_emoji_library.Actions.EmojIconActions;
|
||||
import hani.momanii.supernova_emoji_library.Helper.EmojiconEditText;
|
||||
|
||||
public class FileConfirmationActivity extends AppCompatActivity implements FileConfirmationView, RequestListener<String, GlideDrawable> {
|
||||
public class FileConfirmationActivity extends AppCompatActivity implements FileConfirmationView {
|
||||
|
||||
@BindView(R.id.file_message)
|
||||
EmojiconEditText mMessageEmojiconEditText;
|
||||
@@ -103,13 +99,27 @@ public class FileConfirmationActivity extends AppCompatActivity implements FileC
|
||||
|
||||
showLoading();
|
||||
|
||||
Glide.with(this)
|
||||
.load(fileUri)
|
||||
.dontAnimate()
|
||||
.placeholder(R.drawable.document)
|
||||
.diskCacheStrategy(DiskCacheStrategy.ALL)
|
||||
.listener(this)
|
||||
.into(new GlideDrawableImageViewTarget(mFileImageView));
|
||||
GlideApp.with(this)
|
||||
.asBitmap()
|
||||
.load(fileUri)
|
||||
.placeholder(R.drawable.document)
|
||||
.diskCacheStrategy(DiskCacheStrategy.ALL)
|
||||
.listener(new RequestListener<Bitmap>() {
|
||||
@Override
|
||||
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Bitmap> target, boolean isFirstResource) {
|
||||
hideLoading();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) {
|
||||
hideLoading();
|
||||
|
||||
return false;
|
||||
}
|
||||
})
|
||||
.into(new BitmapImageViewTarget(mFileImageView));
|
||||
|
||||
mGroup = getIntent().getParcelableExtra(Constants.EXTRA_GROUP);
|
||||
setToolBar();
|
||||
@@ -139,9 +149,10 @@ public class FileConfirmationActivity extends AppCompatActivity implements FileC
|
||||
if (TextUtils.isEmpty(mGroup.avatar)) {
|
||||
mChatImageView.setImageResource(mGroup.onlyEmployees ? de.beyondsoft.ownchat.R.drawable.avatar : R.drawable.avatar_help);
|
||||
} else {
|
||||
Glide.with(this).load(mGroup.avatar)
|
||||
GlideApp.with(this)
|
||||
.asBitmap()
|
||||
.load(mGroup.avatar)
|
||||
.placeholder(de.beyondsoft.ownchat.R.drawable.avatar)
|
||||
.dontAnimate()
|
||||
.into(mChatImageView);
|
||||
}
|
||||
}
|
||||
@@ -213,18 +224,4 @@ public class FileConfirmationActivity extends AppCompatActivity implements FileC
|
||||
public void showError(String message) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
|
||||
hideLoading();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
|
||||
hideLoading();
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -385,7 +385,7 @@ public class LoginPresenter extends MVPAbstractPresenter<LoginView> implements L
|
||||
private void checkTypeAndCustomerIdError(Throwable throwable) {
|
||||
getView().showContent();
|
||||
|
||||
if (mSystemUtils.isNetworkUnavailable()) {
|
||||
if(mSystemUtils.isNetworkUnavailable()) {
|
||||
getView().showError(R.string.error_no_internet_connection);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
package de.beyondsoft.ownchat.page.main;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
|
||||
import de.beyondsoft.ownchat.R;
|
||||
import de.beyondsoft.ownchat.data.AppPrefsConstants;
|
||||
import de.beyondsoft.ownchat.data.events.InvalidTokenEvent;
|
||||
@@ -42,6 +40,7 @@ import android.support.v7.app.AppCompatActivity;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.view.View;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.ListView;
|
||||
import android.widget.Toast;
|
||||
|
||||
@@ -52,11 +51,8 @@ import javax.inject.Named;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import de.hdodenhof.circleimageview.CircleImageView;
|
||||
import de.beyondsoft.ownchat.utils.ui.GlideApp;
|
||||
|
||||
/**
|
||||
* Created by imarneanu on 2/9/17.
|
||||
*/
|
||||
public class MainActivity extends AppCompatActivity implements MainNavigation, LogoutNavigation {
|
||||
|
||||
private static final String REDIRECT_TO_CHAT = "redirect_to_chat";
|
||||
@@ -117,14 +113,20 @@ public class MainActivity extends AppCompatActivity implements MainNavigation, L
|
||||
setSupportActionBar(mToolbar);
|
||||
|
||||
View headerLayout = mNavigationView.getHeaderView(0);
|
||||
CircleImageView avatar = headerLayout.findViewById(R.id.menu_profile_imageView);
|
||||
Glide.with(this).load(mAvatarPreference.get()).into(avatar);
|
||||
ImageView avatar = headerLayout.findViewById(R.id.menu_profile_imageView);
|
||||
GlideApp.with(this)
|
||||
.load(mAvatarPreference.get())
|
||||
.circleCrop()
|
||||
.into(avatar);
|
||||
|
||||
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, mDrawer, mToolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close) {
|
||||
@Override
|
||||
public void onDrawerOpened(View drawerView) {
|
||||
super.onDrawerOpened(drawerView);
|
||||
Glide.with(MainActivity.this).load(mAvatarPreference.get()).into(avatar);
|
||||
GlideApp.with(MainActivity.this)
|
||||
.load(mAvatarPreference.get())
|
||||
.circleCrop()
|
||||
.into(avatar);
|
||||
Utils.hideKeyboard(MainActivity.this);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -4,6 +4,7 @@ import de.beyondsoft.ownchat.R;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
@@ -15,9 +16,6 @@ import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import butterknife.OnClick;
|
||||
|
||||
/**
|
||||
* Created by imarneanu on 2/13/17.
|
||||
*/
|
||||
class NavigationMenuAdapter extends ArrayAdapter<String> {
|
||||
private final static int IMPRESSUM = 3;
|
||||
|
||||
@@ -32,8 +30,9 @@ class NavigationMenuAdapter extends ArrayAdapter<String> {
|
||||
mListener = listener;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public View getView(int position, View view, ViewGroup parent) {
|
||||
public View getView(int position, View view, @NonNull ViewGroup parent) {
|
||||
ViewHolder holder;
|
||||
|
||||
if (view != null) {
|
||||
|
||||
@@ -7,7 +7,6 @@ import de.beyondsoft.ownchat.data.prefs.LongPreference;
|
||||
import de.beyondsoft.ownchat.data.prefs.StringPreference;
|
||||
import de.beyondsoft.ownchat.di.InjectionHelper;
|
||||
import de.beyondsoft.ownchat.model.User;
|
||||
import de.beyondsoft.ownchat.utils.Constants;
|
||||
import de.beyondsoft.ownchat.utils.DialogHandler;
|
||||
import de.beyondsoft.ownchat.utils.FileUtils;
|
||||
import de.beyondsoft.ownchat.utils.RuntimePermissionBaseFragment;
|
||||
@@ -27,6 +26,7 @@ import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import android.widget.EditText;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
@@ -40,18 +40,15 @@ import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import butterknife.OnClick;
|
||||
import butterknife.OnTextChanged;
|
||||
import de.beyondsoft.ownchat.utils.ui.GlideApp;
|
||||
import de.beyondsoft.ownchat.utils.ui.ViewUtils;
|
||||
import de.hdodenhof.circleimageview.CircleImageView;
|
||||
|
||||
/**
|
||||
* Created by imarneanu on 2/13/17.
|
||||
*/
|
||||
public class ProfileFragment extends RuntimePermissionBaseFragment implements ProfileView {
|
||||
|
||||
private final static int SELECT_FILE = 5055;
|
||||
|
||||
@BindView(R.id.profile_avatar)
|
||||
CircleImageView mAvatarImageview;
|
||||
ImageView mAvatarImageview;
|
||||
|
||||
@BindView(R.id.profile_name)
|
||||
TextView mNameTextView;
|
||||
@@ -107,18 +104,19 @@ public class ProfileFragment extends RuntimePermissionBaseFragment implements Pr
|
||||
ButterKnife.bind(this, view);
|
||||
getActivity().setTitle(R.string.title_profile);
|
||||
|
||||
Glide.with(getActivity())
|
||||
GlideApp.with(getActivity())
|
||||
.load(mAvatarPreference.get())
|
||||
.placeholder(R.drawable.avatar)
|
||||
.circleCrop()
|
||||
.into(mAvatarImageview);
|
||||
|
||||
ViewUtils.setProgressBarColor(mProgressBar, R.color.colorDefault);
|
||||
|
||||
if (!TextUtils.isEmpty(mPhoneNumberPreference.get())) {
|
||||
if(!TextUtils.isEmpty(mPhoneNumberPreference.get())) {
|
||||
mPhoneNumberEditText.setText(mPhoneNumberPreference.get());
|
||||
}
|
||||
|
||||
if (!TextUtils.isEmpty(mProfileNamePreference.get())) {
|
||||
if(!TextUtils.isEmpty(mProfileNamePreference.get())) {
|
||||
mNameTextView.setText(mProfileNamePreference.get());
|
||||
}
|
||||
|
||||
@@ -207,9 +205,10 @@ public class ProfileFragment extends RuntimePermissionBaseFragment implements Pr
|
||||
public void refreshImage(String imageUrl) {
|
||||
mProgressBar.setVisibility(View.GONE);
|
||||
|
||||
Glide.with(getContext())
|
||||
GlideApp.with(getContext())
|
||||
.load(imageUrl)
|
||||
.error(R.drawable.avatar)
|
||||
.circleCrop()
|
||||
.into(mAvatarImageview);
|
||||
|
||||
mAvatarPreference.set(imageUrl);
|
||||
|
||||
@@ -8,9 +8,6 @@ import dagger.Module;
|
||||
import dagger.Provides;
|
||||
import retrofit2.Retrofit;
|
||||
|
||||
/**
|
||||
* Created by imarneanu on 2/23/17.
|
||||
*/
|
||||
@Module
|
||||
class ProfileModule {
|
||||
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
package de.beyondsoft.ownchat.page.sharing;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -17,11 +18,7 @@ import butterknife.ButterKnife;
|
||||
import butterknife.OnClick;
|
||||
import de.beyondsoft.ownchat.R;
|
||||
import de.beyondsoft.ownchat.model.Group;
|
||||
import de.hdodenhof.circleimageview.CircleImageView;
|
||||
|
||||
/**
|
||||
* Created by Lyndon on 03-Nov-2017.
|
||||
*/
|
||||
import de.beyondsoft.ownchat.utils.ui.GlideApp;
|
||||
|
||||
public class SharingContactsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||
private static final int GROUP_TYPE = 0;
|
||||
@@ -60,14 +57,15 @@ public class SharingContactsAdapter extends RecyclerView.Adapter<RecyclerView.Vi
|
||||
return CONTACT_TYPE;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_sharing_contact, parent, false);
|
||||
return new SharingContactsAdapter.SharingContactViewHolder(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
|
||||
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
|
||||
Group group = mGroups.get(position);
|
||||
SharingContactsAdapter.SharingContactViewHolder viewHolder = (SharingContactsAdapter.SharingContactViewHolder) holder;
|
||||
|
||||
@@ -89,9 +87,11 @@ public class SharingContactsAdapter extends RecyclerView.Adapter<RecyclerView.Vi
|
||||
|
||||
viewHolder.name.setText(group.name);
|
||||
|
||||
Glide.with(viewHolder.avatar.getContext()).load(group.avatar)
|
||||
GlideApp.with(viewHolder.avatar.getContext())
|
||||
.asBitmap()
|
||||
.load(group.avatar)
|
||||
.circleCrop()
|
||||
.placeholder(group.onlyEmployees ? R.drawable.avatar_list : R.drawable.avatar_help)
|
||||
.dontAnimate()
|
||||
.diskCacheStrategy(DiskCacheStrategy.ALL)
|
||||
.into(viewHolder.avatar);
|
||||
}
|
||||
@@ -103,7 +103,7 @@ public class SharingContactsAdapter extends RecyclerView.Adapter<RecyclerView.Vi
|
||||
|
||||
class SharingContactViewHolder extends RecyclerView.ViewHolder {
|
||||
@BindView(R.id.sharing_contact_avatar)
|
||||
CircleImageView avatar;
|
||||
ImageView avatar;
|
||||
|
||||
@BindView(R.id.sharing_contact_name)
|
||||
TextView name;
|
||||
|
||||
@@ -45,4 +45,6 @@ public interface Constants {
|
||||
"y0UYUQnwiQpD8WQSztyal58eyqkFSzWA3SZfyOaxSpnnGpge5VEfNhkG5Ufkzqk1" +
|
||||
"NoP+R0w3rFsPhw6/cH+++6LOPFQyZ/VkbmkFtUkjOrF0lmoHZUywksKO3ag8/2Tx" +
|
||||
"NQIDAQAB";
|
||||
|
||||
String DICTIONARY_PUBLIC_KEY = "";
|
||||
}
|
||||
@@ -6,11 +6,6 @@ import android.support.design.widget.Snackbar;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
|
||||
/**
|
||||
* Custom behavior for View.
|
||||
* <p>
|
||||
* Created by laszloffiferenc on 2/21/17.
|
||||
*/
|
||||
public class LayoutBehavior extends CoordinatorLayout.Behavior<View> {
|
||||
|
||||
public LayoutBehavior(Context context, AttributeSet attrs) {
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
android:padding="5dp"
|
||||
android:src="@drawable/back" />
|
||||
|
||||
<de.hdodenhof.circleimageview.CircleImageView
|
||||
<ImageView
|
||||
android:id="@+id/chat_toolbar_image_view"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/profile_avatar_margin">
|
||||
|
||||
<de.hdodenhof.circleimageview.CircleImageView
|
||||
<ImageView
|
||||
android:id="@+id/profile_avatar"
|
||||
android:layout_width="@dimen/profile_avatar"
|
||||
android:layout_height="@dimen/profile_avatar"
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true">
|
||||
|
||||
<de.hdodenhof.circleimageview.CircleImageView
|
||||
<ImageView
|
||||
android:id="@+id/chat_member_avatar"
|
||||
android:layout_width="@dimen/avatar_size"
|
||||
android:layout_height="@dimen/avatar_size"
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
android:paddingLeft="@dimen/activity_horizontal_margin"
|
||||
android:paddingRight="@dimen/activity_horizontal_margin">
|
||||
|
||||
<de.hdodenhof.circleimageview.CircleImageView
|
||||
<ImageView
|
||||
android:id="@+id/contact_avatar"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
android:paddingStart="0dp"
|
||||
android:paddingBottom="0dp">
|
||||
|
||||
<de.hdodenhof.circleimageview.CircleImageView
|
||||
<ImageView
|
||||
android:id="@+id/chat_item_contact_image"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
android:paddingEnd="40dp"
|
||||
android:paddingStart="0dp">
|
||||
|
||||
<de.hdodenhof.circleimageview.CircleImageView
|
||||
<ImageView
|
||||
android:id="@+id/chat_item_contact_image"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
android:paddingLeft="@dimen/activity_horizontal_margin"
|
||||
android:paddingRight="@dimen/activity_horizontal_margin">
|
||||
|
||||
<de.hdodenhof.circleimageview.CircleImageView
|
||||
<ImageView
|
||||
android:id="@+id/sharing_contact_avatar"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
|
||||
@@ -5,10 +5,11 @@
|
||||
android:layout_marginTop="@dimen/nav_padding_top"
|
||||
android:gravity="center">
|
||||
|
||||
<de.hdodenhof.circleimageview.CircleImageView
|
||||
<ImageView
|
||||
android:id="@+id/menu_profile_imageView"
|
||||
android:layout_width="@dimen/nav_avatar"
|
||||
android:layout_height="@dimen/nav_avatar"
|
||||
android:scaleType="centerCrop"
|
||||
android:src="@drawable/avatar" />
|
||||
android:src="@drawable/avatar"
|
||||
android:contentDescription="@null" />
|
||||
</LinearLayout>
|
||||
Reference in New Issue
Block a user