diff options
Diffstat (limited to 'src/main/java/de/thedevstack/conversationsplus/ui/listeners')
4 files changed, 209 insertions, 0 deletions
diff --git a/src/main/java/de/thedevstack/conversationsplus/ui/listeners/ContactPictureOnClickListener.java b/src/main/java/de/thedevstack/conversationsplus/ui/listeners/ContactPictureOnClickListener.java new file mode 100644 index 00000000..e3c85fdf --- /dev/null +++ b/src/main/java/de/thedevstack/conversationsplus/ui/listeners/ContactPictureOnClickListener.java @@ -0,0 +1,48 @@ +package de.thedevstack.conversationsplus.ui.listeners; + +import android.app.Activity; +import android.content.Intent; +import android.view.View; +import android.widget.Toast; + +import de.thedevstack.conversationsplus.R; +import de.thedevstack.conversationsplus.entities.Account; +import de.thedevstack.conversationsplus.entities.Conversation; +import de.thedevstack.conversationsplus.entities.Message; +import de.thedevstack.conversationsplus.ui.ConversationActivity; +import de.thedevstack.conversationsplus.ui.EditAccountActivity; + +/** + */ +public class ContactPictureOnClickListener implements View.OnClickListener { + private final ConversationActivity activity; + private final Message message; + + public ContactPictureOnClickListener(ConversationActivity activity, Message message) { + this.activity = activity; + this.message = message; + } + + @Override + public void onClick(View view) { + if (message.getStatus() <= Message.STATUS_RECEIVED) { // What does this mean? + if (message.getConversation().getMode() == Conversation.MODE_MULTI) { + if (message.getCounterpart() != null) { + String user = message.getCounterpart().isBareJid() ? message.getCounterpart().toString() : message.getCounterpart().getResourcepart(); + if (!message.getConversation().getMucOptions().isUserInRoom(user)) { + Toast.makeText(activity, activity.getString(R.string.user_has_left_conference,user),Toast.LENGTH_SHORT).show(); + } + this.activity.highlightNickInConference(user); + } + } else { + this.activity.switchToContactDetails(message.getContact(), message.getFingerprint()); + } + } else { + Account account = message.getConversation().getAccount(); + Intent intent = new Intent(activity, EditAccountActivity.class); + intent.putExtra("jid", account.getJid().toBareJid().toString()); + intent.putExtra("fingerprint", message.getFingerprint()); + this.activity.startActivity(intent); + } + } +} diff --git a/src/main/java/de/thedevstack/conversationsplus/ui/listeners/ContactPictureOnLongClickListener.java b/src/main/java/de/thedevstack/conversationsplus/ui/listeners/ContactPictureOnLongClickListener.java new file mode 100644 index 00000000..49ff764b --- /dev/null +++ b/src/main/java/de/thedevstack/conversationsplus/ui/listeners/ContactPictureOnLongClickListener.java @@ -0,0 +1,43 @@ +package de.thedevstack.conversationsplus.ui.listeners; + +import android.view.View; +import android.widget.Toast; + +import de.thedevstack.conversationsplus.R; +import de.thedevstack.conversationsplus.entities.Conversation; +import de.thedevstack.conversationsplus.entities.Message; +import de.thedevstack.conversationsplus.ui.ConversationActivity; +import de.thedevstack.conversationsplus.utils.ui.QrCodeUtil; + +/** + */ +public class ContactPictureOnLongClickListener implements View.OnLongClickListener { + private final ConversationActivity activity; + private final Message message; + + public ContactPictureOnLongClickListener(ConversationActivity activity, Message message) { + this.activity = activity; + this.message = message; + } + + @Override + public boolean onLongClick(View view) { + if (message.getStatus() <= Message.STATUS_RECEIVED) { + if (message.getConversation().getMode() == Conversation.MODE_MULTI) { + if (message.getCounterpart() != null) { + String user = message.getCounterpart().getResourcepart(); + if (user != null) { + if (message.getConversation().getMucOptions().isUserInRoom(user)) { + this.activity.privateMessageWith(message.getCounterpart()); + } else { + Toast.makeText(activity, activity.getString(R.string.user_has_left_conference, user), Toast.LENGTH_SHORT).show(); + } + } + } + } + } else { + QrCodeUtil.showQrCode(this.activity); + } + return true; + } +} diff --git a/src/main/java/de/thedevstack/conversationsplus/ui/listeners/OpenFileOnClickListener.java b/src/main/java/de/thedevstack/conversationsplus/ui/listeners/OpenFileOnClickListener.java new file mode 100644 index 00000000..e0dcd4bf --- /dev/null +++ b/src/main/java/de/thedevstack/conversationsplus/ui/listeners/OpenFileOnClickListener.java @@ -0,0 +1,81 @@ +package de.thedevstack.conversationsplus.ui.listeners; + +import android.app.Activity; +import android.content.ActivityNotFoundException; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.net.Uri; +import android.view.View; +import android.widget.Toast; + +import java.util.List; + +import de.thedevstack.conversationsplus.ConversationsPlusApplication; +import de.thedevstack.conversationsplus.R; +import de.thedevstack.conversationsplus.entities.DownloadableFile; +import de.thedevstack.conversationsplus.entities.Message; +import de.thedevstack.conversationsplus.persistance.FileBackend; +import de.thedevstack.conversationsplus.providers.ConversationsPlusFileProvider; + +/** + */ +public class OpenFileOnClickListener implements View.OnClickListener { + private final Activity activity; + private final Message message; + + public OpenFileOnClickListener(Activity activity, Message message) { + this.activity = activity; + this.message = message; + } + + @Override + public void onClick(View view) { + this.openFile(); + } + + public void openFile() { + DownloadableFile file = FileBackend.getFile(message); + if (!file.exists()) { + Toast.makeText(this.activity, R.string.file_deleted, Toast.LENGTH_SHORT).show(); + return; + } + boolean bInPrivateStorage = false; + if (file.getAbsolutePath().startsWith(FileBackend.getPrivateFileDirectoryPath())) { + bInPrivateStorage = true; + } + Intent openIntent = new Intent(Intent.ACTION_VIEW); + String mime = file.getMimeType(); + if (mime == null) { + mime = "*/*"; + } + Uri uri; + if (bInPrivateStorage) { + uri = ConversationsPlusFileProvider.createUriForPrivateFile(file); + } else { + uri = Uri.fromFile(file); + } + openIntent.setDataAndType(uri, mime); + PackageManager manager = this.activity.getPackageManager(); + List<ResolveInfo> infos = manager.queryIntentActivities(openIntent, 0); + if (bInPrivateStorage) { + for (ResolveInfo info : infos) { + ConversationsPlusApplication.getAppContext().grantUriPermission(info.activityInfo.packageName, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION); + } + } + if (infos.size() == 0) { + openIntent.setDataAndType(uri, "*/*"); + } + if (bInPrivateStorage) { + openIntent.putExtra(Intent.EXTRA_STREAM, uri); + openIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + } + try { + this.activity.startActivity(openIntent); + return; + } catch (ActivityNotFoundException e) { + //ignored + } + Toast.makeText(this.activity, R.string.no_application_found_to_open_file, Toast.LENGTH_SHORT).show(); + } +} diff --git a/src/main/java/de/thedevstack/conversationsplus/ui/listeners/OpenLocationOnClickListener.java b/src/main/java/de/thedevstack/conversationsplus/ui/listeners/OpenLocationOnClickListener.java new file mode 100644 index 00000000..8e0b7893 --- /dev/null +++ b/src/main/java/de/thedevstack/conversationsplus/ui/listeners/OpenLocationOnClickListener.java @@ -0,0 +1,37 @@ +package de.thedevstack.conversationsplus.ui.listeners; + +import android.app.Activity; +import android.content.Intent; +import android.view.View; +import android.widget.Toast; + +import de.thedevstack.conversationsplus.R; +import de.thedevstack.conversationsplus.entities.Message; +import de.thedevstack.conversationsplus.utils.GeoHelper; + +/** + */ +public class OpenLocationOnClickListener implements View.OnClickListener { + private final Activity activity; + private final Message message; + + public OpenLocationOnClickListener(Activity activity, Message message) { + this.activity = activity; + this.message = message; + } + + @Override + public void onClick(View view) { + this.showLocation(); + } + + private void showLocation() { + for (Intent intent : GeoHelper.createGeoIntentsFromMessage(this.message)) { + if (intent.resolveActivity(this.activity.getPackageManager()) != null) { // Only if the intent can be opened + this.activity.startActivity(intent); + return; + } + } + Toast.makeText(this.activity, R.string.no_application_found_to_display_location, Toast.LENGTH_SHORT).show(); + } +} |