summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortom79 <tschneider.ac@gmail.com>2020-04-11 18:14:20 +0200
committertom79 <tschneider.ac@gmail.com>2020-04-11 18:14:20 +0200
commit7f656e1ec16e54f41756b87278cc7f5e1fc8aa34 (patch)
tree685ca9d22c3c3372cd8e19f4c8c663623a6dfeca
parentfd6028eaf904fe9a8bc78950db504b0547653c04 (diff)
Gif support for keyboard + bug fix
-rw-r--r--app/src/main/assets/changelogs/359.txt4
-rw-r--r--app/src/main/java/app/fedilab/android/activities/TootActivity.java30
-rw-r--r--app/src/main/java/app/fedilab/android/helper/MastalabAutoCompleteTextView.java78
-rw-r--r--app/src/main/java/app/fedilab/android/sqlite/TimelineCacheDAO.java12
4 files changed, 116 insertions, 8 deletions
diff --git a/app/src/main/assets/changelogs/359.txt b/app/src/main/assets/changelogs/359.txt
index 6ec945165..ae4001f19 100644
--- a/app/src/main/assets/changelogs/359.txt
+++ b/app/src/main/assets/changelogs/359.txt
@@ -1,5 +1,5 @@
-Changed:
-
+Added:
+- Gif support for some keyboards.
Fixed:
- Crash when Youtube videos in timelines
diff --git a/app/src/main/java/app/fedilab/android/activities/TootActivity.java b/app/src/main/java/app/fedilab/android/activities/TootActivity.java
index 711a90095..b83648fb2 100644
--- a/app/src/main/java/app/fedilab/android/activities/TootActivity.java
+++ b/app/src/main/java/app/fedilab/android/activities/TootActivity.java
@@ -805,6 +805,35 @@ public class TootActivity extends BaseActivity implements UploadStatusDelegate,
poll_action = findViewById(R.id.poll_action);
+ toot_content.setKeyBoardInputCallbackListener((inputContentInfo, flags, opts) -> {
+ SharedPreferences sharedpreferences1 = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
+ boolean photo_editor = sharedpreferences1.getBoolean(Helper.SET_PHOTO_EDITOR, true);
+
+ if( inputContentInfo != null ) {
+ Uri uri = inputContentInfo.getContentUri();
+ String filename = Helper.getFileName(TootActivity.this, uri);
+ ContentResolver cr = getContentResolver();
+ String mime = cr.getType(uri);
+ if (mime != null && (mime.toLowerCase().contains("video") || mime.toLowerCase().contains("gif"))) {
+ prepareUpload(TootActivity.this, uri, filename, uploadReceiver);
+ } else if (mime != null && mime.toLowerCase().contains("image")) {
+ if (photo_editor) {
+ Intent intent = new Intent(TootActivity.this, PhotoEditorActivity.class);
+ Bundle b = new Bundle();
+ intent.putExtra("imageUri", uri.toString());
+ intent.putExtras(b);
+ startActivity(intent);
+ } else {
+ prepareUpload(TootActivity.this, uri, filename, uploadReceiver);
+ }
+ } else if (mime != null && mime.toLowerCase().contains("audio")) {
+ prepareUpload(TootActivity.this, uri, filename, uploadReceiver);
+ } else {
+ Toasty.error(TootActivity.this, getString(R.string.toot_select_image_error), Toast.LENGTH_LONG).show();
+ }
+ }
+ });
+
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(TootActivity.this);
int iconColor = prefs.getInt("theme_icons_color", -1);
if (iconColor != -1) {
@@ -1513,6 +1542,7 @@ public class TootActivity extends BaseActivity implements UploadStatusDelegate,
Toasty.error(TootActivity.this, getString(R.string.toot_select_image_error), Toast.LENGTH_LONG).show();
return;
}
+
if (clipData != null) {
ArrayList<Uri> mArrayUri = new ArrayList<>();
for (int i = 0; i < clipData.getItemCount(); i++) {
diff --git a/app/src/main/java/app/fedilab/android/helper/MastalabAutoCompleteTextView.java b/app/src/main/java/app/fedilab/android/helper/MastalabAutoCompleteTextView.java
index 7b1f1cedf..c7ab1a932 100644
--- a/app/src/main/java/app/fedilab/android/helper/MastalabAutoCompleteTextView.java
+++ b/app/src/main/java/app/fedilab/android/helper/MastalabAutoCompleteTextView.java
@@ -5,12 +5,19 @@ import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.TypedArray;
import android.graphics.Paint;
+import android.os.Bundle;
import android.util.AttributeSet;
import android.view.KeyEvent;
+import android.view.inputmethod.EditorInfo;
+import android.view.inputmethod.InputConnection;
import androidx.annotation.CallSuper;
import androidx.annotation.DimenRes;
import androidx.annotation.Px;
+import androidx.core.os.BuildCompat;
+import androidx.core.view.inputmethod.EditorInfoCompat;
+import androidx.core.view.inputmethod.InputConnectionCompat;
+import androidx.core.view.inputmethod.InputContentInfoCompat;
import com.vanniktech.emoji.EmojiManager;
import com.vanniktech.emoji.emoji.Emoji;
@@ -26,6 +33,7 @@ public class MastalabAutoCompleteTextView extends androidx.appcompat.widget.AppC
public MastalabAutoCompleteTextView(Context context) {
super(context);
+ initView();
}
public MastalabAutoCompleteTextView(Context context, AttributeSet attrs) {
@@ -48,12 +56,82 @@ public class MastalabAutoCompleteTextView extends androidx.appcompat.widget.AppC
}
setText(getText());
+ initView();
}
public MastalabAutoCompleteTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
+ initView();
}
+
+ private String[] imgTypeString;
+ private KeyBoardInputCallbackListener keyBoardInputCallbackListener;
+ @Override
+ public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
+ final InputConnection ic = super.onCreateInputConnection(outAttrs);
+ EditorInfoCompat.setContentMimeTypes(outAttrs,
+ imgTypeString);
+ return InputConnectionCompat.createWrapper(ic, outAttrs, callback);
+ }
+
+ private void initView() {
+ imgTypeString = new String[]{"image/png",
+ "image/gif",
+ "image/jpeg",
+ "image/webp"};
+ }
+ final InputConnectionCompat.OnCommitContentListener callback =
+ new InputConnectionCompat.OnCommitContentListener() {
+ @Override
+ public boolean onCommitContent(InputContentInfoCompat inputContentInfo,
+ int flags, Bundle opts) {
+
+ // read and display inputContentInfo asynchronously
+ if (BuildCompat.isAtLeastNMR1() && (flags &
+ InputConnectionCompat.INPUT_CONTENT_GRANT_READ_URI_PERMISSION) != 0) {
+ try {
+ inputContentInfo.requestPermission();
+ } catch (Exception e) {
+ return false; // return false if failed
+ }
+ }
+ boolean supported = false;
+ for (final String mimeType : imgTypeString) {
+ if (inputContentInfo.getDescription().hasMimeType(mimeType)) {
+ supported = true;
+ break;
+ }
+ }
+ if (!supported) {
+ return false;
+ }
+
+ if (keyBoardInputCallbackListener != null) {
+ keyBoardInputCallbackListener.onCommitContent(inputContentInfo, flags, opts);
+ }
+ return true; // return true if succeeded
+ }
+ };
+
+ public interface KeyBoardInputCallbackListener {
+ void onCommitContent(InputContentInfoCompat inputContentInfo,
+ int flags, Bundle opts);
+ }
+
+ public void setKeyBoardInputCallbackListener(KeyBoardInputCallbackListener keyBoardInputCallbackListener) {
+ this.keyBoardInputCallbackListener = keyBoardInputCallbackListener;
+ }
+
+ public String[] getImgTypeString() {
+ return imgTypeString;
+ }
+
+ public void setImgTypeString(String[] imgTypeString) {
+ this.imgTypeString = imgTypeString;
+ }
+
+
@Override
@CallSuper
protected void onTextChanged(final CharSequence text, final int start, final int lengthBefore, final int lengthAfter) {
diff --git a/app/src/main/java/app/fedilab/android/sqlite/TimelineCacheDAO.java b/app/src/main/java/app/fedilab/android/sqlite/TimelineCacheDAO.java
index f3b0f8b8e..fd06b6952 100644
--- a/app/src/main/java/app/fedilab/android/sqlite/TimelineCacheDAO.java
+++ b/app/src/main/java/app/fedilab/android/sqlite/TimelineCacheDAO.java
@@ -104,24 +104,24 @@ public class TimelineCacheDAO {
/***
* Remove stored status
- * @return int
*/
- public int removeAfterDate(String date) {
+ public void removeAfterDate(String date) {
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
String instance = Helper.getLiveInstance(context);
- return db.delete(Sqlite.TABLE_TIMELINE_CACHE, Sqlite.COL_DATE + " < \"" + date + "\" AND " + Sqlite.COL_INSTANCE + " = \"" + instance + "\" AND " + Sqlite.COL_USER_ID + " = \"" + userId + "\"", null);
+ try {
+ db.delete(Sqlite.TABLE_TIMELINE_CACHE, Sqlite.COL_DATE + " < \"" + date + "\" AND " + Sqlite.COL_INSTANCE + " = \"" + instance + "\" AND " + Sqlite.COL_USER_ID + " = \"" + userId + "\"", null);
+ }catch (Exception ignored){}
}
/***
* Remove stored status
- * @return int
*/
- public int removeAllConnected() {
+ public void removeAllConnected() {
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
String instance = Helper.getLiveInstance(context);
- return db.delete(Sqlite.TABLE_TIMELINE_CACHE, Sqlite.COL_INSTANCE + " = \"" + instance + "\" AND " + Sqlite.COL_USER_ID + " = \"" + userId + "\"", null);
+ db.delete(Sqlite.TABLE_TIMELINE_CACHE, Sqlite.COL_INSTANCE + " = \"" + instance + "\" AND " + Sqlite.COL_USER_ID + " = \"" + userId + "\"", null);
}