introduce media browser activity
This commit is contained in:
parent
06972ec95c
commit
7a0c53aa71
|
@ -235,6 +235,9 @@
|
||||||
android:theme="@style/Base.Theme.AppCompat"/>
|
android:theme="@style/Base.Theme.AppCompat"/>
|
||||||
<activity android:name=".ui.MemorizingActivity"/>
|
<activity android:name=".ui.MemorizingActivity"/>
|
||||||
|
|
||||||
|
<activity android:name=".ui.MediaBrowserActivity"
|
||||||
|
android:label="@string/media_browser"/>
|
||||||
|
|
||||||
<service android:name=".services.ExportLogsService"/>
|
<service android:name=".services.ExportLogsService"/>
|
||||||
<service
|
<service
|
||||||
android:name=".services.ContactChooserTargetService"
|
android:name=".services.ContactChooserTargetService"
|
||||||
|
|
|
@ -775,10 +775,10 @@ public class DatabaseBackend extends SQLiteOpenHelper {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<FilePath> getRelativeFilePaths(Account account, Jid jid, int limit) {
|
public List<FilePath> getRelativeFilePaths(String account, Jid jid, int limit) {
|
||||||
SQLiteDatabase db = this.getReadableDatabase();
|
SQLiteDatabase db = this.getReadableDatabase();
|
||||||
final String SQL = "select uuid,relativeFilePath from messages where type in (1,2) and conversationUuid=(select uuid from conversations where accountUuid=? and (contactJid=? or contactJid like ?)) order by timeSent desc";
|
final String SQL = "select uuid,relativeFilePath from messages where type in (1,2) and conversationUuid=(select uuid from conversations where accountUuid=? and (contactJid=? or contactJid like ?)) order by timeSent desc";
|
||||||
final String[] args = {account.getUuid(), jid.asBareJid().toEscapedString(), jid.asBareJid().toEscapedString()+"/%"};
|
final String[] args = {account, jid.toEscapedString(), jid.toEscapedString()+"/%"};
|
||||||
Cursor cursor = db.rawQuery(SQL+(limit > 0 ? " limit "+String.valueOf(limit) : ""), args);
|
Cursor cursor = db.rawQuery(SQL+(limit > 0 ? " limit "+String.valueOf(limit) : ""), args);
|
||||||
List<FilePath> filesPaths = new ArrayList<>();
|
List<FilePath> filesPaths = new ArrayList<>();
|
||||||
while(cursor.moveToNext()) {
|
while(cursor.moveToNext()) {
|
||||||
|
|
|
@ -2425,8 +2425,12 @@ public class XmppConnectionService extends Service {
|
||||||
getAttachments(conversation.getAccount(), conversation.getJid().asBareJid(), limit, onMediaLoaded);
|
getAttachments(conversation.getAccount(), conversation.getJid().asBareJid(), limit, onMediaLoaded);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void getAttachments(final Account account, final Jid jid, final int limit, final OnMediaLoaded onMediaLoaded) {
|
||||||
|
getAttachments(account.getUuid(),jid.asBareJid(),limit, onMediaLoaded);
|
||||||
|
}
|
||||||
|
|
||||||
public void getAttachments(final Account account, final Jid jid, final int limit, final OnMediaLoaded onMediaLoaded) {
|
|
||||||
|
public void getAttachments(final String account, final Jid jid, final int limit, final OnMediaLoaded onMediaLoaded) {
|
||||||
new Thread(() -> onMediaLoaded.onMediaLoaded(fileBackend.convertToAttachments(databaseBackend.getRelativeFilePaths(account, jid, limit)))).start();
|
new Thread(() -> onMediaLoaded.onMediaLoaded(fileBackend.convertToAttachments(databaseBackend.getRelativeFilePaths(account, jid, limit)))).start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -488,6 +488,7 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
|
||||||
if (this.mConversation != null) {
|
if (this.mConversation != null) {
|
||||||
final int limit = GridManager.getCurrentColumnCount(this.binding.media);
|
final int limit = GridManager.getCurrentColumnCount(this.binding.media);
|
||||||
xmppConnectionService.getAttachments(this.mConversation, limit, this);
|
xmppConnectionService.getAttachments(this.mConversation, limit, this);
|
||||||
|
this.binding.showMedia.setOnClickListener((v)->MediaBrowserActivity.launch(this,mConversation));
|
||||||
updateView();
|
updateView();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package eu.siacs.conversations.ui;
|
package eu.siacs.conversations.ui;
|
||||||
|
|
||||||
import android.content.ActivityNotFoundException;
|
import android.content.ActivityNotFoundException;
|
||||||
import android.content.Context;
|
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
@ -12,18 +11,13 @@ import android.preference.PreferenceManager;
|
||||||
import android.provider.ContactsContract.CommonDataKinds;
|
import android.provider.ContactsContract.CommonDataKinds;
|
||||||
import android.provider.ContactsContract.Contacts;
|
import android.provider.ContactsContract.Contacts;
|
||||||
import android.provider.ContactsContract.Intents;
|
import android.provider.ContactsContract.Intents;
|
||||||
import android.support.v4.content.ContextCompat;
|
|
||||||
import android.support.v7.app.AlertDialog;
|
import android.support.v7.app.AlertDialog;
|
||||||
import android.support.v7.widget.GridLayoutManager;
|
|
||||||
import android.support.v7.widget.RecyclerView;
|
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
import android.util.Log;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
import android.view.ViewTreeObserver;
|
|
||||||
import android.widget.CompoundButton;
|
import android.widget.CompoundButton;
|
||||||
import android.widget.CompoundButton.OnCheckedChangeListener;
|
import android.widget.CompoundButton.OnCheckedChangeListener;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
@ -488,6 +482,7 @@ public class ContactDetailsActivity extends OmemoActivity implements OnAccountUp
|
||||||
|
|
||||||
final int limit = GridManager.getCurrentColumnCount(this.binding.media);
|
final int limit = GridManager.getCurrentColumnCount(this.binding.media);
|
||||||
xmppConnectionService.getAttachments(account, contact.getJid().asBareJid(), limit, this);
|
xmppConnectionService.getAttachments(account, contact.getJid().asBareJid(), limit, this);
|
||||||
|
this.binding.showMedia.setOnClickListener((v)->MediaBrowserActivity.launch(this,contact));
|
||||||
populateView();
|
populateView();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,77 @@
|
||||||
|
package eu.siacs.conversations.ui;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.databinding.DataBindingUtil;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.support.v7.widget.Toolbar;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import eu.siacs.conversations.R;
|
||||||
|
import eu.siacs.conversations.entities.Account;
|
||||||
|
import eu.siacs.conversations.entities.Contact;
|
||||||
|
import eu.siacs.conversations.entities.Conversation;
|
||||||
|
|
||||||
|
import eu.siacs.conversations.databinding.ActivityMediaBrowserBinding;
|
||||||
|
import eu.siacs.conversations.ui.adapter.MediaAdapter;
|
||||||
|
import eu.siacs.conversations.ui.interfaces.OnMediaLoaded;
|
||||||
|
import eu.siacs.conversations.ui.util.Attachment;
|
||||||
|
import eu.siacs.conversations.ui.util.GridManager;
|
||||||
|
import rocks.xmpp.addr.Jid;
|
||||||
|
|
||||||
|
public class MediaBrowserActivity extends XmppActivity implements OnMediaLoaded {
|
||||||
|
|
||||||
|
private ActivityMediaBrowserBinding binding;
|
||||||
|
|
||||||
|
private MediaAdapter mMediaAdapter;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(final Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
this.binding = DataBindingUtil.setContentView(this,R.layout.activity_media_browser);
|
||||||
|
setSupportActionBar((Toolbar) binding.toolbar);
|
||||||
|
configureActionBar(getSupportActionBar());
|
||||||
|
mMediaAdapter = new MediaAdapter(this, R.dimen.media_size);
|
||||||
|
this.binding.media.setAdapter(mMediaAdapter);
|
||||||
|
GridManager.setupLayoutManager(this, this.binding.media, R.dimen.browser_media_size);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void refreshUiReal() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void onBackendConnected() {
|
||||||
|
Intent intent = getIntent();
|
||||||
|
String account = intent == null ? null : intent.getStringExtra("account");
|
||||||
|
String jid = intent == null ? null : intent.getStringExtra("jid");
|
||||||
|
if (account != null && jid != null) {
|
||||||
|
xmppConnectionService.getAttachments(account, Jid.of(jid), 0, this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void launch(Context context, Contact contact) {
|
||||||
|
launch(context, contact.getAccount(), contact.getJid().asBareJid().toEscapedString());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void launch(Context context, Conversation conversation) {
|
||||||
|
launch(context, conversation.getAccount(), conversation.getJid().asBareJid().toEscapedString());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void launch(Context context, Account account, String jid) {
|
||||||
|
final Intent intent = new Intent(context, MediaBrowserActivity.class);
|
||||||
|
intent.putExtra("account",account.getUuid());
|
||||||
|
intent.putExtra("jid",jid);
|
||||||
|
context.startActivity(intent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMediaLoaded(List<Attachment> attachments) {
|
||||||
|
runOnUiThread(()->{
|
||||||
|
mMediaAdapter.setAttachments(attachments);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
24
src/main/res/layout/activity_media_browser.xml
Normal file
24
src/main/res/layout/activity_media_browser.xml
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<layout xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="?attr/color_background_primary"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<include
|
||||||
|
android:id="@+id/toolbar"
|
||||||
|
layout="@layout/toolbar"/>
|
||||||
|
|
||||||
|
<android.support.v7.widget.RecyclerView
|
||||||
|
android:id="@+id/media"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:clipToPadding="false"
|
||||||
|
android:padding="2dp"
|
||||||
|
android:scrollbars="vertical"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
</layout>
|
|
@ -13,6 +13,7 @@
|
||||||
|
|
||||||
<dimen name="media_preview_size">80dp</dimen>
|
<dimen name="media_preview_size">80dp</dimen>
|
||||||
<dimen name="media_size">64dp</dimen>
|
<dimen name="media_size">64dp</dimen>
|
||||||
|
<dimen name="browser_media_size">96dp</dimen>
|
||||||
<dimen name="toolbar_elevation">4dp</dimen>
|
<dimen name="toolbar_elevation">4dp</dimen>
|
||||||
|
|
||||||
<dimen name="publish_avatar_top_margin">8dp</dimen>
|
<dimen name="publish_avatar_top_margin">8dp</dimen>
|
||||||
|
|
|
@ -735,4 +735,5 @@
|
||||||
<string name="pref_more_notification_settings_summary">Importance, Sound, Vibrate</string>
|
<string name="pref_more_notification_settings_summary">Importance, Sound, Vibrate</string>
|
||||||
<string name="video_compression_channel_name">Video compression</string>
|
<string name="video_compression_channel_name">Video compression</string>
|
||||||
<string name="show_media">Show media</string>
|
<string name="show_media">Show media</string>
|
||||||
|
<string name="media_browser">Media browser</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
Loading…
Reference in a new issue