aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/de/pixart/messenger/ui/util
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/de/pixart/messenger/ui/util')
-rw-r--r--src/main/java/de/pixart/messenger/ui/util/Attachment.java166
-rw-r--r--src/main/java/de/pixart/messenger/ui/util/AttachmentTool.java60
-rw-r--r--src/main/java/de/pixart/messenger/ui/util/ConversationMenuConfigurator.java5
-rw-r--r--src/main/java/de/pixart/messenger/ui/util/Drawable.java43
-rw-r--r--src/main/java/de/pixart/messenger/ui/util/GridManager.java76
-rw-r--r--src/main/java/de/pixart/messenger/ui/util/PendingItem.java6
-rw-r--r--src/main/java/de/pixart/messenger/ui/util/SendButtonAction.java17
-rw-r--r--src/main/java/de/pixart/messenger/ui/util/SendButtonTool.java27
-rw-r--r--src/main/java/de/pixart/messenger/ui/util/StyledAttributes.java (renamed from src/main/java/de/pixart/messenger/ui/util/Color.java)18
-rw-r--r--src/main/java/de/pixart/messenger/ui/util/ViewUtil.java72
10 files changed, 371 insertions, 119 deletions
diff --git a/src/main/java/de/pixart/messenger/ui/util/Attachment.java b/src/main/java/de/pixart/messenger/ui/util/Attachment.java
new file mode 100644
index 000000000..96159c1bd
--- /dev/null
+++ b/src/main/java/de/pixart/messenger/ui/util/Attachment.java
@@ -0,0 +1,166 @@
+/*
+ * Copyright (c) 2018, Daniel Gultsch All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation and/or
+ * other materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its contributors
+ * may be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package de.pixart.messenger.ui.util;
+
+import android.content.ClipData;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.Log;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.UUID;
+
+import de.pixart.messenger.Config;
+import de.pixart.messenger.utils.MimeUtils;
+
+public class Attachment implements Parcelable {
+ public static final Creator<Attachment> CREATOR = new Parcelable.Creator<Attachment>() {
+ @Override
+ public Attachment createFromParcel(Parcel in) {
+ return new Attachment(in);
+ }
+
+ @Override
+ public Attachment[] newArray(int size) {
+ return new Attachment[size];
+ }
+ };
+ private final Uri uri;
+ private final Type type;
+ private final UUID uuid;
+ private final String mime;
+
+ Attachment(Parcel in) {
+ uri = in.readParcelable(Uri.class.getClassLoader());
+ mime = in.readString();
+ uuid = UUID.fromString(in.readString());
+ type = Type.valueOf(in.readString());
+ }
+
+ private Attachment(UUID uuid, Uri uri, Type type, String mime) {
+ this.uri = uri;
+ this.type = type;
+ this.mime = mime;
+ this.uuid = uuid;
+ }
+
+ private Attachment(Uri uri, Type type, String mime) {
+ this.uri = uri;
+ this.type = type;
+ this.mime = mime;
+ this.uuid = UUID.randomUUID();
+ }
+
+ public static List<Attachment> of(final Context context, Uri uri, Type type) {
+ final String mime = type == Type.LOCATION ? null : MimeUtils.guessMimeTypeFromUri(context, uri);
+ return Collections.singletonList(new Attachment(uri, type, mime));
+ }
+
+ public static List<Attachment> of(final Context context, List<Uri> uris) {
+ List<Attachment> attachments = new ArrayList<>();
+ for (Uri uri : uris) {
+ final String mime = MimeUtils.guessMimeTypeFromUri(context, uri);
+ attachments.add(new Attachment(uri, mime != null && mime.startsWith("image/") ? Type.IMAGE : Type.FILE, mime));
+ }
+ return attachments;
+ }
+
+ public static Attachment of(UUID uuid, final File file, String mime) {
+ return new Attachment(uuid, Uri.fromFile(file), mime != null && (mime.startsWith("image/") || mime.startsWith("video/")) ? Type.IMAGE : Type.FILE, mime);
+ }
+
+ public static List<Attachment> extractAttachments(final Context context, final Intent intent, Type type) {
+ List<Attachment> uris = new ArrayList<>();
+ if (intent == null) {
+ return uris;
+ }
+ final String contentType = intent.getType();
+ final Uri data = intent.getData();
+ if (data == null) {
+ final ClipData clipData = intent.getClipData();
+ if (clipData != null) {
+ for (int i = 0; i < clipData.getItemCount(); ++i) {
+ final Uri uri = clipData.getItemAt(i).getUri();
+ Log.d(Config.LOGTAG, "uri=" + uri + " contentType=" + contentType);
+ final String mime = contentType != null ? contentType : MimeUtils.guessMimeTypeFromUri(context, uri);
+ Log.d(Config.LOGTAG, "mime=" + mime);
+ uris.add(new Attachment(uri, type, mime));
+ }
+ }
+ } else {
+ final String mime = contentType != null ? contentType : MimeUtils.guessMimeTypeFromUri(context, data);
+ uris.add(new Attachment(data, type, mime));
+ }
+ return uris;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeParcelable(uri, flags);
+ dest.writeString(mime);
+ dest.writeString(uuid.toString());
+ dest.writeString(type.toString());
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ public String getMime() {
+ return mime;
+ }
+
+ public Type getType() {
+ return type;
+ }
+
+ public boolean renderThumbnail() {
+ return type == Type.IMAGE || (type == Type.FILE && mime != null && (mime.startsWith("video/") || mime.startsWith("image/")));
+ }
+
+ public Uri getUri() {
+ return uri;
+ }
+
+ public UUID getUuid() {
+ return uuid;
+ }
+
+ public enum Type {
+ FILE, IMAGE, LOCATION, RECORDING
+ }
+} \ No newline at end of file
diff --git a/src/main/java/de/pixart/messenger/ui/util/AttachmentTool.java b/src/main/java/de/pixart/messenger/ui/util/AttachmentTool.java
deleted file mode 100644
index c56f27ebf..000000000
--- a/src/main/java/de/pixart/messenger/ui/util/AttachmentTool.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2018, Daniel Gultsch All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation and/or
- * other materials provided with the distribution.
- *
- * 3. Neither the name of the copyright holder nor the names of its contributors
- * may be used to endorse or promote products derived from this software without
- * specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-package de.pixart.messenger.ui.util;
-
-import android.annotation.SuppressLint;
-import android.content.ClipData;
-import android.content.Intent;
-import android.net.Uri;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class AttachmentTool {
- @SuppressLint("NewApi")
- public static List<Uri> extractUriFromIntent(final Intent intent) {
- List<Uri> uris = new ArrayList<>();
- if (intent == null) {
- return uris;
- }
- final Uri uri = intent.getData();
- if (uri == null) {
- final ClipData clipData = intent.getClipData();
- if (clipData != null) {
- for (int i = 0; i < clipData.getItemCount(); ++i) {
- uris.add(clipData.getItemAt(i).getUri());
- }
- }
- } else {
- uris.add(uri);
- }
- return uris;
- }
-} \ No newline at end of file
diff --git a/src/main/java/de/pixart/messenger/ui/util/ConversationMenuConfigurator.java b/src/main/java/de/pixart/messenger/ui/util/ConversationMenuConfigurator.java
index 5c86b4a1b..edca88f78 100644
--- a/src/main/java/de/pixart/messenger/ui/util/ConversationMenuConfigurator.java
+++ b/src/main/java/de/pixart/messenger/ui/util/ConversationMenuConfigurator.java
@@ -65,12 +65,13 @@ public class ConversationMenuConfigurator {
menu.findItem(R.id.attach_location).setVisible(locationAvailable);
}
- public static void configureAttachmentMenu(@NonNull Conversation conversation, Menu menu, Boolean Quick_share_attachment_choice) {
+ public static void configureAttachmentMenu(@NonNull Conversation conversation, Menu menu, Boolean Quick_share_attachment_choice, boolean hasAttachments) {
final MenuItem menuAttach = menu.findItem(R.id.action_attach_file);
- if (Quick_share_attachment_choice) {
+ if (Quick_share_attachment_choice && !hasAttachments) {
menuAttach.setVisible(false);
return;
}
+
final boolean visible;
if (conversation.getMode() == Conversation.MODE_MULTI) {
visible = conversation.getAccount().httpUploadAvailable() && conversation.getMucOptions().participating();
diff --git a/src/main/java/de/pixart/messenger/ui/util/Drawable.java b/src/main/java/de/pixart/messenger/ui/util/Drawable.java
deleted file mode 100644
index 5e0c770d4..000000000
--- a/src/main/java/de/pixart/messenger/ui/util/Drawable.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2018, Daniel Gultsch All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation and/or
- * other materials provided with the distribution.
- *
- * 3. Neither the name of the copyright holder nor the names of its contributors
- * may be used to endorse or promote products derived from this software without
- * specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-package de.pixart.messenger.ui.util;
-
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.support.annotation.AttrRes;
-
-public class Drawable {
- public static android.graphics.drawable.Drawable get(Context context, @AttrRes int id) {
- TypedArray typedArray = context.obtainStyledAttributes(new int[]{id});
- android.graphics.drawable.Drawable drawable = typedArray.getDrawable(0);
- typedArray.recycle();
- return drawable;
- }
-} \ No newline at end of file
diff --git a/src/main/java/de/pixart/messenger/ui/util/GridManager.java b/src/main/java/de/pixart/messenger/ui/util/GridManager.java
new file mode 100644
index 000000000..ae615b051
--- /dev/null
+++ b/src/main/java/de/pixart/messenger/ui/util/GridManager.java
@@ -0,0 +1,76 @@
+package de.pixart.messenger.ui.util;
+
+import android.content.Context;
+import android.support.annotation.DimenRes;
+import android.support.v7.widget.GridLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.util.Log;
+import android.view.ViewTreeObserver;
+
+import de.pixart.messenger.Config;
+import de.pixart.messenger.ui.adapter.MediaAdapter;
+
+public class GridManager {
+
+ public static void setupLayoutManager(final Context context, RecyclerView recyclerView, @DimenRes int desiredSize) {
+ int maxWidth = context.getResources().getDisplayMetrics().widthPixels;
+ ColumnInfo columnInfo = calculateColumnCount(context, maxWidth, desiredSize);
+ Log.d(Config.LOGTAG, "preliminary count=" + columnInfo.count);
+ MediaAdapter.setMediaSize(recyclerView, columnInfo.width);
+ recyclerView.setLayoutManager(new GridLayoutManager(context, columnInfo.count));
+ recyclerView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
+ @Override
+ public void onGlobalLayout() {
+ recyclerView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
+ final int availableWidth = recyclerView.getMeasuredWidth();
+ if (availableWidth == 0) {
+ Log.e(Config.LOGTAG, "GridManager: available width was 0; probably because layout was hidden");
+ return;
+ }
+ final ColumnInfo columnInfo = calculateColumnCount(context, recyclerView.getMeasuredWidth(), desiredSize);
+ Log.d(Config.LOGTAG, "final count " + columnInfo.count);
+ if (recyclerView.getAdapter().getItemCount() != 0) {
+ Log.e(Config.LOGTAG, "adapter already has items; just go with it now");
+ return;
+ }
+ setupLayoutManagerInternal(recyclerView, columnInfo);
+ MediaAdapter.setMediaSize(recyclerView, columnInfo.width);
+ }
+ });
+ }
+
+ private static void setupLayoutManagerInternal(RecyclerView recyclerView, final ColumnInfo columnInfo) {
+ RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
+ if (layoutManager instanceof GridLayoutManager) {
+ ((GridLayoutManager) layoutManager).setSpanCount(columnInfo.count);
+ }
+ }
+
+ private static ColumnInfo calculateColumnCount(Context context, int availableWidth, @DimenRes int desiredSize) {
+ final float desiredWidth = context.getResources().getDimension(desiredSize);
+ final int columns = Math.round(availableWidth / desiredWidth);
+ final int realWidth = availableWidth / columns;
+ Log.d(Config.LOGTAG, "desired=" + desiredWidth + " real=" + realWidth);
+ return new ColumnInfo(columns, realWidth);
+ }
+
+ public static int getCurrentColumnCount(RecyclerView recyclerView) {
+ RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
+ if (layoutManager instanceof GridLayoutManager) {
+ return ((GridLayoutManager) layoutManager).getSpanCount();
+ } else {
+ return 0;
+ }
+ }
+
+ public static class ColumnInfo {
+ private final int count;
+ private final int width;
+
+ private ColumnInfo(int count, int width) {
+ this.count = count;
+ this.width = width;
+ }
+ }
+
+} \ No newline at end of file
diff --git a/src/main/java/de/pixart/messenger/ui/util/PendingItem.java b/src/main/java/de/pixart/messenger/ui/util/PendingItem.java
index eaddf3a8c..d06f5bfc9 100644
--- a/src/main/java/de/pixart/messenger/ui/util/PendingItem.java
+++ b/src/main/java/de/pixart/messenger/ui/util/PendingItem.java
@@ -46,4 +46,10 @@ public class PendingItem<T> {
public synchronized T peek() {
return item;
}
+
+ public synchronized boolean clear() {
+ boolean notNull = this.item != null;
+ this.item = null;
+ return notNull;
+ }
} \ No newline at end of file
diff --git a/src/main/java/de/pixart/messenger/ui/util/SendButtonAction.java b/src/main/java/de/pixart/messenger/ui/util/SendButtonAction.java
index 9f9fabc5a..c7feb2105 100644
--- a/src/main/java/de/pixart/messenger/ui/util/SendButtonAction.java
+++ b/src/main/java/de/pixart/messenger/ui/util/SendButtonAction.java
@@ -33,10 +33,11 @@ import static de.pixart.messenger.ui.ConversationFragment.ATTACHMENT_CHOICE;
import static de.pixart.messenger.ui.ConversationFragment.ATTACHMENT_CHOICE_CHOOSE_IMAGE;
import static de.pixart.messenger.ui.ConversationFragment.ATTACHMENT_CHOICE_LOCATION;
import static de.pixart.messenger.ui.ConversationFragment.ATTACHMENT_CHOICE_RECORD_VOICE;
-import static de.pixart.messenger.ui.ConversationFragment.ATTACHMENT_CHOICE_TAKE_FROM_CAMERA;
+import static de.pixart.messenger.ui.ConversationFragment.ATTACHMENT_CHOICE_RECORD_VIDEO;
+import static de.pixart.messenger.ui.ConversationFragment.ATTACHMENT_CHOICE_TAKE_PHOTO;
public enum SendButtonAction {
- TEXT, TAKE_FROM_CAMERA, SEND_LOCATION, RECORD_VOICE, CANCEL, CHOOSE_PICTURE, CHOOSE_ATTACHMENT;
+ TEXT, TAKE_PHOTO, SEND_LOCATION, RECORD_VOICE, CANCEL, CHOOSE_PICTURE, RECORD_VIDEO, CHOOSE_ATTACHMENT;
public static SendButtonAction valueOfOrDefault(String setting, SendButtonAction text) {
try {
@@ -52,8 +53,10 @@ public enum SendButtonAction {
return SEND_LOCATION;
case ATTACHMENT_CHOICE_RECORD_VOICE:
return RECORD_VOICE;
- case ATTACHMENT_CHOICE_TAKE_FROM_CAMERA:
- return TAKE_FROM_CAMERA;
+ case ATTACHMENT_CHOICE_RECORD_VIDEO:
+ return RECORD_VIDEO;
+ case ATTACHMENT_CHOICE_TAKE_PHOTO:
+ return TAKE_PHOTO;
case ATTACHMENT_CHOICE_CHOOSE_IMAGE:
return CHOOSE_PICTURE;
case ATTACHMENT_CHOICE:
@@ -65,8 +68,10 @@ public enum SendButtonAction {
public int toChoice() {
switch (this) {
- case TAKE_FROM_CAMERA:
- return ATTACHMENT_CHOICE_TAKE_FROM_CAMERA;
+ case TAKE_PHOTO:
+ return ATTACHMENT_CHOICE_TAKE_PHOTO;
+ case RECORD_VIDEO:
+ return ATTACHMENT_CHOICE_RECORD_VIDEO;
case SEND_LOCATION:
return ATTACHMENT_CHOICE_LOCATION;
case RECORD_VOICE:
diff --git a/src/main/java/de/pixart/messenger/ui/util/SendButtonTool.java b/src/main/java/de/pixart/messenger/ui/util/SendButtonTool.java
index b4b0ecc28..96bcad183 100644
--- a/src/main/java/de/pixart/messenger/ui/util/SendButtonTool.java
+++ b/src/main/java/de/pixart/messenger/ui/util/SendButtonTool.java
@@ -44,7 +44,6 @@ import de.pixart.messenger.utils.UIHelper;
public class SendButtonTool {
public static SendButtonAction getAction(Activity activity, Conversation c, String text) {
- final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(activity);
final boolean empty = text.length() == 0;
final boolean conference = c.getMode() == Conversation.MODE_MULTI;
if (c.getCorrectingMessage() != null && (empty || text.equals(c.getCorrectingMessage().getBody()))) {
@@ -57,14 +56,14 @@ public class SendButtonTool {
}
} else {
if (empty) {
+ final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(activity);
if (conference && c.getNextCounterpart() != null) {
return SendButtonAction.CANCEL;
} else {
- boolean quickShareChoice = preferences.getBoolean(SettingsActivity.QUICK_SHARE_ATTACHMENT_CHOICE, activity.getResources().getBoolean(R.bool.quick_share_attachment_choice));
String setting = preferences.getString("quick_action", activity.getResources().getString(R.string.quick_action));
- if (quickShareChoice && AttachmentsVisible(c)) {
+ if (quickShareChoice(activity) && AttachmentsVisible(c)) {
return SendButtonAction.CHOOSE_ATTACHMENT;
- } else if (quickShareChoice && !AttachmentsVisible(c)) {
+ } else if (quickShareChoice(activity) && !AttachmentsVisible(c)) {
return SendButtonAction.TEXT;
} else {
if (!setting.equals("none") && UIHelper.receivedLocationQuestion(c.getLatestMessage())) {
@@ -106,7 +105,20 @@ public class SendButtonTool {
default:
return getThemeResource(activity, R.attr.ic_send_text_offline, R.drawable.ic_send_text_offline);
}
- case TAKE_FROM_CAMERA:
+ case RECORD_VIDEO:
+ switch (status) {
+ case CHAT:
+ case ONLINE:
+ return R.drawable.ic_send_videocam_online;
+ case AWAY:
+ return R.drawable.ic_send_videocam_away;
+ case XA:
+ case DND:
+ return R.drawable.ic_send_videocam_dnd;
+ default:
+ return getThemeResource(activity, R.attr.ic_send_videocam_offline, R.drawable.ic_send_videocam_offline);
+ }
+ case TAKE_PHOTO:
switch (status) {
case CHAT:
case ONLINE:
@@ -198,4 +210,9 @@ public class SendButtonTool {
return res;
}
+
+ public static boolean quickShareChoice(Activity activity) {
+ final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(activity);
+ return preferences.getBoolean(SettingsActivity.QUICK_SHARE_ATTACHMENT_CHOICE, activity.getResources().getBoolean(R.bool.quick_share_attachment_choice));
+ }
} \ No newline at end of file
diff --git a/src/main/java/de/pixart/messenger/ui/util/Color.java b/src/main/java/de/pixart/messenger/ui/util/StyledAttributes.java
index 58ce6a465..cd4ad3e49 100644
--- a/src/main/java/de/pixart/messenger/ui/util/Color.java
+++ b/src/main/java/de/pixart/messenger/ui/util/StyledAttributes.java
@@ -35,14 +35,26 @@ import android.content.res.TypedArray;
import android.support.annotation.AttrRes;
import android.support.annotation.ColorInt;
-public class Color {
+public class StyledAttributes {
+ public static android.graphics.drawable.Drawable getDrawable(Context context, @AttrRes int id) {
+ TypedArray typedArray = context.obtainStyledAttributes(new int[]{id});
+ android.graphics.drawable.Drawable drawable = typedArray.getDrawable(0);
+ typedArray.recycle();
+ return drawable;
+ }
+
+ public static float getFloat(Context context, @AttrRes int id) {
+ TypedArray typedArray = context.obtainStyledAttributes(new int[]{id});
+ float value = typedArray.getFloat(0, 0f);
+ typedArray.recycle();
+ return value;
+ }
public static @ColorInt
- int get(Context context, @AttrRes int attr) {
+ int getColor(Context context, @AttrRes int attr) {
TypedArray typedArray = context.obtainStyledAttributes(new int[]{attr});
int color = typedArray.getColor(0, 0);
typedArray.recycle();
return color;
}
-
} \ No newline at end of file
diff --git a/src/main/java/de/pixart/messenger/ui/util/ViewUtil.java b/src/main/java/de/pixart/messenger/ui/util/ViewUtil.java
new file mode 100644
index 000000000..b1905479b
--- /dev/null
+++ b/src/main/java/de/pixart/messenger/ui/util/ViewUtil.java
@@ -0,0 +1,72 @@
+package de.pixart.messenger.ui.util;
+
+import android.content.ActivityNotFoundException;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.net.Uri;
+import android.util.Log;
+import android.widget.Toast;
+
+import java.io.File;
+import java.util.List;
+
+import de.pixart.messenger.Config;
+import de.pixart.messenger.R;
+import de.pixart.messenger.persistance.FileBackend;
+import de.pixart.messenger.ui.ShowFullscreenMessageActivity;
+
+public class ViewUtil {
+
+ public static void view(Context context, Attachment attachment) {
+ File file = new File(attachment.getUri().getPath());
+ final String mime = attachment.getMime() == null ? "*/*" : attachment.getMime();
+ view(context, file, mime);
+ }
+
+ public static void view(Context context, File file, String mime) {
+ Uri uri;
+ try {
+ uri = FileBackend.getUriForFile(context, file);
+ } catch (SecurityException e) {
+ Log.d(Config.LOGTAG, "No permission to access " + file.getAbsolutePath(), e);
+ Toast.makeText(context, context.getString(R.string.no_permission_to_access_x, file.getAbsolutePath()), Toast.LENGTH_SHORT).show();
+ return;
+ }
+ // use internal viewer for images and videos
+ if (mime.startsWith("image/")) {
+ Intent intent = new Intent(context, ShowFullscreenMessageActivity.class);
+ intent.putExtra("image", Uri.fromFile(file));
+ try {
+ context.startActivity(intent);
+ return;
+ } catch (ActivityNotFoundException e) {
+ //ignored
+ }
+ } else if (mime.startsWith("video/")) {
+ Intent intent = new Intent(context, ShowFullscreenMessageActivity.class);
+ intent.putExtra("video", Uri.fromFile(file));
+ try {
+ context.startActivity(intent);
+ return;
+ } catch (ActivityNotFoundException e) {
+ //ignored
+ }
+ } else {
+ Intent openIntent = new Intent(Intent.ACTION_VIEW);
+ openIntent.setDataAndType(uri, mime);
+ openIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ PackageManager manager = context.getPackageManager();
+ List<ResolveInfo> info = manager.queryIntentActivities(openIntent, 0);
+ if (info.size() == 0) {
+ openIntent.setDataAndType(uri, "*/*");
+ }
+ try {
+ context.startActivity(openIntent);
+ } catch (ActivityNotFoundException e) {
+ Toast.makeText(context, R.string.no_application_found_to_open_file, Toast.LENGTH_SHORT).show();
+ }
+ }
+ }
+} \ No newline at end of file