Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d063668f authored by cketti's avatar cketti
Browse files

Convert `ViewIntentFinder` to Kotlin

parent db413f38
Loading
Loading
Loading
Loading
+40 −64
Original line number Diff line number Diff line
package com.fsck.k9.ui.messageview;


import java.util.List;

import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.net.Uri;

import androidx.annotation.WorkerThread;
import com.fsck.k9.helper.MimeTypeUtil;
import com.fsck.k9.provider.AttachmentTempFileProvider;
package com.fsck.k9.ui.messageview

import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import androidx.annotation.WorkerThread
import com.fsck.k9.helper.MimeTypeUtil
import com.fsck.k9.provider.AttachmentTempFileProvider

/**
 * Tries to find an {@link Intent#ACTION_VIEW} Intent that can be used to view an attachment.
 * Tries to find an [Intent.ACTION_VIEW] Intent that can be used to view an attachment.
 */
class ViewIntentFinder {
    private final Context context;

    public ViewIntentFinder(Context context) {
        this.context = context;
    }

internal class ViewIntentFinder(private val context: Context) {
    @WorkerThread
    public Intent getBestViewIntent(Uri contentUri, String displayName, String mimeType) {
        String inferredMimeType = MimeTypeUtil.getMimeTypeByExtension(displayName);
    fun getBestViewIntent(contentUri: Uri, displayName: String?, mimeType: String): Intent {
        val inferredMimeType = MimeTypeUtil.getMimeTypeByExtension(displayName)

        IntentAndResolvedActivitiesCount resolvedIntentInfo;
        var resolvedIntentInfo: IntentAndResolvedActivitiesCount
        if (MimeTypeUtil.isDefaultMimeType(mimeType)) {
            resolvedIntentInfo = getViewIntentForMimeType(contentUri, inferredMimeType);
            resolvedIntentInfo = getViewIntentForMimeType(contentUri, inferredMimeType)
        } else {
            resolvedIntentInfo = getViewIntentForMimeType(contentUri, mimeType);
            if (!resolvedIntentInfo.hasResolvedActivities() && !inferredMimeType.equals(mimeType)) {
                resolvedIntentInfo = getViewIntentForMimeType(contentUri, inferredMimeType);
            resolvedIntentInfo = getViewIntentForMimeType(contentUri, mimeType)
            if (!resolvedIntentInfo.hasResolvedActivities() && inferredMimeType != mimeType) {
                resolvedIntentInfo = getViewIntentForMimeType(contentUri, inferredMimeType)
            }
        }

        if (!resolvedIntentInfo.hasResolvedActivities()) {
            resolvedIntentInfo = getViewIntentForMimeType(contentUri, MimeTypeUtil.DEFAULT_ATTACHMENT_MIME_TYPE);
            resolvedIntentInfo = getViewIntentForMimeType(contentUri, MimeTypeUtil.DEFAULT_ATTACHMENT_MIME_TYPE)
        }

        return resolvedIntentInfo.getIntent();
        return resolvedIntentInfo.intent
    }

    private IntentAndResolvedActivitiesCount getViewIntentForMimeType(Uri contentUri, String mimeType) {
        Intent contentUriIntent = createViewIntentForAttachmentProviderUri(contentUri, mimeType);
        int contentUriActivitiesCount = getResolvedIntentActivitiesCount(contentUriIntent);
    private fun getViewIntentForMimeType(contentUri: Uri, mimeType: String): IntentAndResolvedActivitiesCount {
        val contentUriIntent = createViewIntentForAttachmentProviderUri(contentUri, mimeType)
        val contentUriActivitiesCount = getResolvedIntentActivitiesCount(contentUriIntent)

        return new IntentAndResolvedActivitiesCount(contentUriIntent, contentUriActivitiesCount);
        return IntentAndResolvedActivitiesCount(contentUriIntent, contentUriActivitiesCount)
    }

    private Intent createViewIntentForAttachmentProviderUri(Uri contentUri, String mimeType) {
        Uri uri = AttachmentTempFileProvider.getMimeTypeUri(contentUri, mimeType);

        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(uri, mimeType);
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        addUiIntentFlags(intent);
    private fun createViewIntentForAttachmentProviderUri(contentUri: Uri, mimeType: String): Intent {
        val uri = AttachmentTempFileProvider.getMimeTypeUri(contentUri, mimeType)

        return intent;
    }
        val intent = Intent(Intent.ACTION_VIEW)
        intent.setDataAndType(uri, mimeType)
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
        addUiIntentFlags(intent)

    private void addUiIntentFlags(Intent intent) {
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
        return intent
    }

    private int getResolvedIntentActivitiesCount(Intent intent) {
        PackageManager packageManager = context.getPackageManager();

        List<ResolveInfo> resolveInfos =
            packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);

        return resolveInfos.size();
    private fun addUiIntentFlags(intent: Intent) {
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET)
    }

    private static class IntentAndResolvedActivitiesCount {
        private Intent intent;
        private int activitiesCount;
    private fun getResolvedIntentActivitiesCount(intent: Intent): Int {
        val packageManager = context.packageManager

        IntentAndResolvedActivitiesCount(Intent intent, int activitiesCount) {
            this.intent = intent;
            this.activitiesCount = activitiesCount;
        }
        val resolveInfos =
            packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY)

        public Intent getIntent() {
            return intent;
        return resolveInfos.size
    }

        public boolean hasResolvedActivities() {
            return activitiesCount > 0;
    private class IntentAndResolvedActivitiesCount(val intent: Intent, private val activitiesCount: Int) {
        fun hasResolvedActivities(): Boolean {
            return activitiesCount > 0
        }
    }
}