Home > Net >  EkoJitsiPluginActivity.kt (224, 28) : Type mismatch: inferred type is String? but String was expecte
EkoJitsiPluginActivity.kt (224, 28) : Type mismatch: inferred type is String? but String was expecte

Time:10-24

Eco Jitsi plugin create a problem when I want to build. It's show me this type error

///
///
Note: Recompile with -Xlint:unchecked for details.
e: /usr/local/Caskroom/flutter/3.3.4/flutter/.pub-cache/hosted/pub.dartlang.org/eko_jitsi-1.3.4/android/src/main/kotlin/com/ekodemy/eko_jitsi/EkoJitsiPluginActivity.kt: (224, 28): Type mismatch: inferred type is String? but String was expected

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':eko_jitsi:compileReleaseKotlin'.
> Compilation error. See log for more details

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 1m 22s
Running Gradle task 'assembleRelease'...                           83.1s
Gradle task assembleRelease failed with exit code 1
ABIR BuddyBee %

Here is EkoJitsiPluginActivity.kt:

package com.ekodemy.eko_jitsi

import android.app.AlertDialog
import android.app.KeyguardManager
import android.content.*
import android.content.BroadcastReceiver
import android.content.res.Configuration
import android.graphics.Color
import android.os.Build
import android.os.Bundle
import android.util.Log
import android.view.*
import android.webkit.WebView
import android.webkit.WebViewClient
import android.widget.*
import com.ekodemy.eko_jitsi.EkoJitsiPlugin.Companion.EKO_JITSI_CLOSE
import com.ekodemy.eko_jitsi.EkoJitsiPlugin.Companion.EKO_JITSI_TAG
import com.facebook.react.ReactRootView
import com.facebook.react.views.text.ReactTextView
import com.facebook.react.views.view.ReactViewGroup
import org.jitsi.meet.sdk.*
import java.util.*


/**
 * Activity extending JitsiMeetActivity in order to override the conference events
 */
class EkoJitsiPluginActivity : JitsiMeetActivity() {
    companion object {

        var classroomLogo: String? = null;
        var whiteboardUrl: String? = null;
        var classroomLogoId: Int? = null;
        var context: Context? = null;

        @JvmStatic
        fun launchActivity(
            context: Context?,
            options: JitsiMeetConferenceOptions
        ) {
            var intent = Intent(context, EkoJitsiPluginActivity::class.java).apply {
                action = "org.jitsi.meet.CONFERENCE"
                putExtra("JitsiMeetConferenceOptions", options)
            }
            context?.startActivity(intent)
            this.context = context;
        }

        @JvmStatic
        fun setData(classroomLogo: String?, whiteboardUrl: String?): Unit {
            this.classroomLogo = classroomLogo;
            this.whiteboardUrl = whiteboardUrl;
            if (this.classroomLogo != null) {
                this.classroomLogoId = this.context!!.resources.getIdentifier(
                    this.classroomLogo,
                    "drawable",
                    context!!.packageName
                );
            }
            Log.i(
                EKO_JITSI_TAG,
                "classroomLogo ["   classroomLogo   "] whiteboardUrl ["   whiteboardUrl   "]"
            );
        }
    }

    var onStopCalled: Boolean = false;
    var ekoLayout: LinearLayout? = null;


    override fun onPictureInPictureModeChanged(
        isInPictureInPictureMode: Boolean,
        newConfig: Configuration?
    ) {
        super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig)
        if (isInPictureInPictureMode) {
            EkoJitsiEventStreamHandler.instance.onPictureInPictureWillEnter()
            this.ekoLayout!!.setVisibility(LinearLayout.GONE);
        } else {
            EkoJitsiEventStreamHandler.instance.onPictureInPictureTerminated()
            this.ekoLayout!!.setVisibility(LinearLayout.VISIBLE);
        }
        if (isInPictureInPictureMode == false && onStopCalled) {
            // Picture-in-Picture mode has been closed, we can (should !) end the call
            getJitsiView().leave()
        }
    }

    private val myReceiver: BroadcastReceiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context, intent: Intent) {
            when (intent?.action) {
                EKO_JITSI_CLOSE -> finish()
            }
        }
    }

    override fun onStop() {
        super.onStop()
        onStopCalled = true;
        unregisterReceiver(myReceiver)
    }

    override fun onResume() {
        super.onResume()
        onStopCalled = false
        registerReceiver(myReceiver, IntentFilter(EKO_JITSI_CLOSE))
    }

    override fun onConferenceWillJoin(data: HashMap<String, Any>?) {
        Log.d(EKO_JITSI_TAG, String.format("EkoJitsiPluginActivity.onConferenceWillJoin: %s", data))
        EkoJitsiEventStreamHandler.instance.onConferenceWillJoin(data)
        super.onConferenceWillJoin(data)
    }

    override fun onConferenceJoined(data: HashMap<String, Any>?) {
        Log.d(EKO_JITSI_TAG, String.format("EkoJitsiPluginActivity.onConferenceJoined: %s", data))
        EkoJitsiEventStreamHandler.instance.onConferenceJoined(data)
        super.onConferenceJoined(data)
        this.test();
    }

    override fun onConferenceTerminated(data: HashMap<String, Any>?) {

        Log.d(
            EKO_JITSI_TAG,
            String.format("EkoJitsiPluginActivity.onConferenceTerminated: %s", data)
        )
        EkoJitsiEventStreamHandler.instance.onConferenceTerminated(data)
        super.onConferenceTerminated(data)
    }

    override fun onParticipantLeft(data: HashMap<String, Any>?) {
        Log.d(EKO_JITSI_TAG, String.format("EkoJitsiPluginActivity.onParticipantLeft: %s", data))
        EkoJitsiEventStreamHandler.instance.onParticipantLeft(data)
        super.onConferenceTerminated(data)
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        turnScreenOnAndKeyguardOff();
    }

    override fun onPostCreate(savedInstanceState: Bundle?) {
        Log.i(EKO_JITSI_TAG, "ABC Post Create");
        super.onPostCreate(savedInstanceState);
//        logContentView(getWindow().getDecorView(), "");
        val view = window.decorView as ViewGroup;
        Log.d(EKO_JITSI_TAG, "ABC "   view.javaClass.canonicalName);
        val layout: LinearLayout = view.getChildAt(0) as LinearLayout;
        prepareWhiteboardLayout(layout);

    }

    fun test() {
        if(true){
            return;
        }
        try {
            var jitsiView: JitsiMeetView = jitsiView;
            Log.d(EKO_JITSI_TAG, "ABC "   jitsiView.javaClass.canonicalName);
            var ab = jitsiView.getRootReactView(jitsiView);
            Log.d(EKO_JITSI_TAG, "ABC "   ab.javaClass.canonicalName);
            var rootReactView: ReactRootView = ab as ReactRootView;
            Log.d(EKO_JITSI_TAG, "ABC "   rootReactView.javaClass.canonicalName);
            logContentView(rootReactView.rootViewGroup, "");
        } catch (ex: Exception) {
            Log.e(EKO_JITSI_TAG, "ABC Error", ex);
        }
//        var jitsiFragment: Fragment? = getSupportFragmentManager().findFragmentById(R.id.jitsiFragment);
    }

    fun prepareWhiteboardLayout(layout: LinearLayout) {
        this.ekoLayout = LinearLayout(this);
        this.ekoLayout!!.layoutParams = LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT
        );
        this.ekoLayout!!.setPadding(25, 25, 25, 25)

        this.ekoLayout!!.gravity = Gravity.LEFT;
        var logoParentlayout: LinearLayout = LinearLayout(this);
        logoParentlayout.layoutParams = LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT
        );
        logoParentlayout.gravity = Gravity.LEFT;
        val logoImage = ImageView(this);
        //logoImage.setImageURI(Uri.parse("https://www.ekodemy.in/wp-content/uploads/2021/02/vidyartham@2x_1.png"));
        if (EkoJitsiPluginActivity.classroomLogoId != null) {
            logoImage.setImageResource(EkoJitsiPluginActivity.classroomLogoId!!);
        }
        logoImage.layoutParams = LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT,
            100
        );
        logoImage.id = View.generateViewId();
        logoImage.scaleType = ImageView.ScaleType.FIT_START;
        logoImage.adjustViewBounds = true;

        var btnParentlayout: LinearLayout = LinearLayout(this);
        btnParentlayout.layoutParams = LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT
        );
        btnParentlayout.gravity = Gravity.RIGHT;

        val btnTag = Button(this)
        btnTag.layoutParams = LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT,
            100
        );
        btnTag.text = "Whiteboard";
        btnTag.id = View.generateViewId();
        btnTag.setBackgroundColor(Color.BLACK);
        if (EkoJitsiPluginActivity.whiteboardUrl != null) {
            btnTag.setTextColor(Color.WHITE);
            btnTag.setOnClickListener {
                EkoJitsiEventStreamHandler.instance.onWhiteboardClicked();
//                Toast.makeText(this, "Whiteboard", Toast.LENGTH_SHORT).show()
                val alert: AlertDialog.Builder = AlertDialog.Builder(this)
                alert.setTitle("Whiteboard")

                val wv = WebView(this)
                wv.loadUrl(whiteboardUrl)
                wv.webViewClient = object : WebViewClient() {
                    override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
                        view.loadUrl(url)
                        return true
                    }
                }
                wv.settings.javaScriptEnabled = true;
                wv.settings.javaScriptCanOpenWindowsAutomatically = true;
                wv.settings.domStorageEnabled = true;

                alert.setView(wv)
                alert.setNegativeButton("Close",
                    DialogInterface.OnClickListener { dialog, id -> dialog.dismiss() });
                alert.show()
            }

        } else {
            btnTag.setTextColor(Color.BLACK);
        }

        layout.setBackgroundColor(Color.BLACK);
        logoParentlayout.addView(logoImage);
        btnParentlayout.addView(btnTag);
        this.ekoLayout!!.addView(logoParentlayout);
        this.ekoLayout!!.addView(btnParentlayout);
        layout.addView(ekoLayout, 0);
    }

    fun logContentView(parent: View, indent: String) {
        if (parent is ReactViewGroup) {
            var abc = parent as ReactViewGroup;
            Log.i("ABC test", indent   parent.javaClass.name   " - Tag "  abc.tag)
        } else if (parent is ReactTextView) {
            var abc = parent as ReactTextView;
            Log.i("ABC test", indent   parent.javaClass.name   " - Text "   abc.text)
        } else {
            Log.i("ABC test", indent   parent.javaClass.name)
        }
        if (parent is ViewGroup) {
            val group = parent
            for (i in 0 until group.childCount) logContentView(group.getChildAt(i), "$indent ")
        }
    }

    override fun onDestroy() {
        super.onDestroy()
        turnScreenOffAndKeyguardOn();
    }

    private fun turnScreenOnAndKeyguardOff() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
            // For newer than Android Oreo: call setShowWhenLocked, setTurnScreenOn
            setShowWhenLocked(true)
            setTurnScreenOn(true)

            // If you want to display the keyguard to prompt the user to unlock the phone:
            val keyguardManager = getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
            keyguardManager?.requestDismissKeyguard(this, null)
        } else {
            // For older versions, do it as you did before.
            window.addFlags(
                WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
                        or WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
                        or WindowManager.LayoutParams.FLAG_FULLSCREEN
                        or WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
                        or WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
                        or WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON
            )
        }
    }

    private fun turnScreenOffAndKeyguardOn() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
            setShowWhenLocked(false)
            setTurnScreenOn(false)
        } else {
            window.clearFlags(
                WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
                        or WindowManager.LayoutParams.FLAG_FULLSCREEN
                        or WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
                        or WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
                        or WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
                        or WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON
            )
        }
    }
}

fun BaseReactView<JitsiMeetViewListener>.getRootReactView(view: JitsiMeetView): Any {

    return BaseReactView::class.java.getDeclaredField("reactRootView").let {
        it.isAccessible = true;
        val value = it.get(view);
        //todo
        return@let value;
    }

//    return this.reactRootView;
}

It creates a problem when want to build but when use flutter run then it's ok. How can I solve this problem ?

CodePudding user response:

In your error message EkoJitsiPluginActivity.kt (224, 28), 224 refers to the line number. So that's how you can find out where the error is. If I'm not mistaken that should be on the line that says

wv.loadUrl(whiteboardUrl)

loadUrl needs a String but whiteboardUrl is a String?. To promote it to a String you can write

wv.loadUrl(whiteboardUrl!!)
  • Related