kandi background
Explore Kits

Conversations | open source XMPP/Jabber client | Messaging library

 by   iNPUTmice Java Version: 2.10.4 License: GPL-3.0

 by   iNPUTmice Java Version: 2.10.4 License: GPL-3.0

Download this library from

kandi X-RAY | Conversations Summary

Conversations is a Java library typically used in Telecommunications, Media, Telecom, Messaging applications. Conversations has no bugs, it has no vulnerabilities, it has build file available, it has a Strong Copyleft License and it has medium support. You can download it from GitHub.
Conversations: the very last word in instant messaging.
Support
Support
Quality
Quality
Security
Security
License
License
Reuse
Reuse

kandi-support Support

  • Conversations has a medium active ecosystem.
  • It has 4018 star(s) with 1243 fork(s). There are 264 watchers for this library.
  • There were 2 major release(s) in the last 12 months.
  • There are 140 open issues and 3191 have been closed. On average issues are closed in 78 days. There are 16 open pull requests and 0 closed requests.
  • It has a neutral sentiment in the developer community.
  • The latest version of Conversations is 2.10.4
Conversations Support
Best in #Messaging
Average in #Messaging
Conversations Support
Best in #Messaging
Average in #Messaging

quality kandi Quality

  • Conversations has 0 bugs and 0 code smells.
Conversations Quality
Best in #Messaging
Average in #Messaging
Conversations Quality
Best in #Messaging
Average in #Messaging

securitySecurity

  • Conversations has no vulnerabilities reported, and its dependent libraries have no vulnerabilities reported.
  • Conversations code analysis shows 0 unresolved vulnerabilities.
  • There are 0 security hotspots that need review.
Conversations Security
Best in #Messaging
Average in #Messaging
Conversations Security
Best in #Messaging
Average in #Messaging

license License

  • Conversations is licensed under the GPL-3.0 License. This license is Strong Copyleft.
  • Strong Copyleft licenses enforce sharing, and you can use them when creating open source projects.
Conversations License
Best in #Messaging
Average in #Messaging
Conversations License
Best in #Messaging
Average in #Messaging

buildReuse

  • Conversations releases are available to install and integrate.
  • Build file is available. You can build the component from source.
  • Installation instructions are not available. Examples and code snippets are available.
  • It has 100613 lines of code, 5065 functions and 655 files.
  • It has high code complexity. Code complexity directly impacts maintainability of the code.
Conversations Reuse
Best in #Messaging
Average in #Messaging
Conversations Reuse
Best in #Messaging
Average in #Messaging
Top functions reviewed by kandi - BETA

kandi has reviewed Conversations and discovered the below as its top functions. This is intended to give you an instant insight into Conversations implemented functionality, and help decide if they suit your requirements.

  • Called when a message is received .
    • On upgrade .
      • Delivers a message to an existing JID .
        • Update the account information .
          • Process stream .
            • Populate view .
              • Process a presence presence packet .
                • Display status indicator .
                  • Update the view of the MUC .
                    • Publish new bundles .

                      Get all kandi verified functions for this library.

                      Get all kandi verified functions for this library.

                      Conversations Key Features

                      End-to-end encryption with OMEMO or OpenPGP

                      Send and receive images as well as other kind of files

                      Encrypted audio and video calls (DTLS-SRTP)

                      Share your location

                      Send voice messages

                      Indication when your contact has read your message

                      Intuitive UI that follows Android Design guidelines

                      Pictures / Avatars for your Contacts

                      Synchronizes with desktop client

                      Conferences (with support for bookmarks)

                      Address book integration

                      Multiple accounts / unified inbox

                      Very low impact on battery life

                      Development

                      copy iconCopydownload iconDownload
                      git clone https://github.com/inputmice/Conversations.git
                      cd Conversations
                      ./gradlew assembleConversationsFreeSystemDebug
                      

                      android:exported needs to be explicitly specified for <activity>. Apps targeting Android 12 and higher are required to specify

                      copy iconCopydownload iconDownload
                      <receiver android:name="<name_of_the_entry>"
                                      android:exported="false or true"
                                      tools:node="merge" />
                      
                           <activity
                                      android:name="<activity which is giving error>"
                                      android:exported="true"
                                      tools:node="merge" />
                      
                      <activity android:name="name_of_the_activity_inside_library>"
                          android:exported="false|true"
                          tools:node="merge" />
                      
                      debugImplementation "androidx.fragment:fragment-testing:<version>"
                      
                      androidTestImplementation "androidx.fragment:fragment-testing:<version>"
                      
                      debugImplementation "androidx.fragment:fragment-testing:<version>"
                      
                      androidTestImplementation "androidx.fragment:fragment-testing:<version>"
                      
                       android:exported="true"
                      
                      androidTestImplementation "androidx.test.ext:junit:1.1.3"
                      androidTestImplementation "androidx.compose.ui:ui-test-junit4:1.0.4"
                      
                      > java.util.concurrent.ExecutionException: com.android.builder.testing.api.DeviceException: com.android.ddmlib.InstallException: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED: Failed parse during installPackageLI: /data/app/xxxxx.tmp/base.apk (at Binary XML file line #129): YOUR.FULLY.QUALIFIED.NAME.FAILING.ACTIVITY: Targeting S+ (version 31 and above) requires that an explicit value for android:exported be defined when intent filters are present
                      
                      <activity android:name="androidx.test.core.app.InstrumentationActivityInvoker$BootstrapActivity"
                      android:exported="true"
                      tools:node="merge"/>
                      
                      <activity android:name="androidx.test.core.app.InstrumentationActivityInvoker$EmptyActivity"
                      android:exported="true"
                      tools:node="merge"/>
                      
                      <activity android:name="androidx.test.core.app.InstrumentationActivityInvoker$EmptyFloatingActivity"
                      android:exported="true"
                      tools:node="merge"/>
                      
                       <activity
                              android:name="com.test.activity.SplashActivity"
                              android:clearTaskOnLaunch="true"
                              android:label="@string/app_name"
                              android:launchMode="singleTop"
                              android:noHistory="true"
                              android:screenOrientation="portrait"
                              android:theme="@style/AppTheme.NoActionBar"
                              android:exported="true">
                      
                         <receiver
                              android:name="com.test.receiver.ShareReceiver"
                              android:exported="true">
                              <intent-filter>
                                  <action android:name="com.test.fcm.android.action.broadcast" />
                              </intent-filter>
                          </receiver>
                      
                         <service
                              android:name="com.google.android.gms.tagmanager.InstallReferrerService"
                              android:exported="true" />
                      
                      testImplementation 'junit:junit:4.13.2' 
                      androidTestImplementation 'androidx.test:runner:1.4.0'
                      androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
                      implementation 'com.razorpay:checkout:1.6.15'
                      
                       <activity
                              android:name="com.test.activity.SplashActivity"
                              android:clearTaskOnLaunch="true"
                              android:label="@string/app_name"
                              android:launchMode="singleTop"
                              android:noHistory="true"
                              android:screenOrientation="portrait"
                              android:theme="@style/AppTheme.NoActionBar"
                              android:exported="true">
                      
                         <receiver
                              android:name="com.test.receiver.ShareReceiver"
                              android:exported="true">
                              <intent-filter>
                                  <action android:name="com.test.fcm.android.action.broadcast" />
                              </intent-filter>
                          </receiver>
                      
                         <service
                              android:name="com.google.android.gms.tagmanager.InstallReferrerService"
                              android:exported="true" />
                      
                      testImplementation 'junit:junit:4.13.2' 
                      androidTestImplementation 'androidx.test:runner:1.4.0'
                      androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
                      implementation 'com.razorpay:checkout:1.6.15'
                      
                       <activity
                              android:name="com.test.activity.SplashActivity"
                              android:clearTaskOnLaunch="true"
                              android:label="@string/app_name"
                              android:launchMode="singleTop"
                              android:noHistory="true"
                              android:screenOrientation="portrait"
                              android:theme="@style/AppTheme.NoActionBar"
                              android:exported="true">
                      
                         <receiver
                              android:name="com.test.receiver.ShareReceiver"
                              android:exported="true">
                              <intent-filter>
                                  <action android:name="com.test.fcm.android.action.broadcast" />
                              </intent-filter>
                          </receiver>
                      
                         <service
                              android:name="com.google.android.gms.tagmanager.InstallReferrerService"
                              android:exported="true" />
                      
                      testImplementation 'junit:junit:4.13.2' 
                      androidTestImplementation 'androidx.test:runner:1.4.0'
                      androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
                      implementation 'com.razorpay:checkout:1.6.15'
                      
                      "com.google.dagger:hilt-android:2.38.1"
                      "com.google.dagger:hilt-android-gradle-plugin:2.38.1"
                      "com.google.dagger:hilt-android-compiler:2.38.1"
                      "com.google.dagger:hilt-android-testing:2.38.1"
                      
                      "com.google.dagger:hilt-android:2.40.5"
                      "com.google.dagger:hilt-android-gradle-plugin:2.40.5"
                      "com.google.dagger:hilt-android-compiler:2.40.5"
                      "com.google.dagger:hilt-android-testing:2.40.5" 
                      
                      "com.google.dagger:hilt-android:2.38.1"
                      "com.google.dagger:hilt-android-gradle-plugin:2.38.1"
                      "com.google.dagger:hilt-android-compiler:2.38.1"
                      "com.google.dagger:hilt-android-testing:2.38.1"
                      
                      "com.google.dagger:hilt-android:2.40.5"
                      "com.google.dagger:hilt-android-gradle-plugin:2.40.5"
                      "com.google.dagger:hilt-android-compiler:2.40.5"
                      "com.google.dagger:hilt-android-testing:2.40.5" 
                      
                      <receiver
                          android:name="com.razorpay.RzpTokenReceiver"
                          android:exported="false">
                          <intent-filter>
                              <action android:name="rzp.device_token.share" />
                          </intent-filter>
                      </receiver>
                      
                      <activity
                          android:name="com.razorpay.CheckoutActivity"
                          android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
                          android:exported="true"
                          android:theme="@style/CheckoutTheme">
                          <intent-filter>
                              <action android:name="android.intent.action.MAIN" />
                              <data
                                  android:host="rzp.io"
                                  android:scheme="io.rzp" />
                          </intent-filter>
                      </activity>
                      
                      android:exported="true" <!-- or false as required -->
                      
                      <activity
                           android:name=".MainActivity"
                           android:exported="true" <** add this line on AndroidManifest.xml**
                           android:launchMode="singleTop"
                           android:theme="@style/LaunchTheme"
                       </activity>
                      

                      string does not contain a valid string resource. Android Studio

                      copy iconCopydownload iconDownload
                      <string name="string_html"><![CDATA[<b>Html text</b>]]></string> 
                      
                      <string name="string_html">&lt;b&gt;Html text&lt;br&gt;&lt;font color=\"#fe2e68\"&gt;text example&lt;/font&gt;&lt;/b&gt;</string>
                      
                      <string name="string_html"><![CDATA[<b>Html text</b>]]></string> 
                      
                      <string name="string_html">&lt;b&gt;Html text&lt;br&gt;&lt;font color=\"#fe2e68\"&gt;text example&lt;/font&gt;&lt;/b&gt;</string>
                      

                      React: hiding vs removing components

                      copy iconCopydownload iconDownload
                      const FadeContainer = ({ show: showProp, children }) => {
                        const [show, setShow] = useState(showProp);
                        const timeoutRef = useRef();
                      
                        useEffect(() => {
                          if (showProp) {
                            setShow(true);
                          } else {
                            timeoutRef.current = setTimeout(() => setShow(false), 500);
                          }
                          return () => clearTimeout(timeoutRef.current);
                        }, [showProp])
                      
                        return show && (
                          <div style={{ opacity: showProp ? 1 : 0, transition: "opacity 0.5s ease" }}>
                            {children}
                          </div>
                        );
                      }
                      
                        isShown && <div />
                      
                       <div style={{ display: isShown ? 'block' : 'none' }} />
                      
                        isShown && <div />
                      
                       <div style={{ display: isShown ? 'block' : 'none' }} />
                      
                           <div style={{ display: "none" }}>
                              <img src="https://picsum.photos/200/300" />
                            </div>
                      

                      Rails is breaking SQL query when modifying order

                      copy iconCopydownload iconDownload
                      Conversation.preload(post: :category)
                                  .from(distinct, :sub)
                                  .select('sub.*, profiles.status AS interlocutor_status')
                                  .joins('LEFT OUTER JOIN users ON interlocutor_id = users.id')
                                  .joins('LEFT OUTER JOIN profiles ON interlocutor_id = profiles.user_id')
                                  .where.not('profiles.status' => :pending)
                                  .order('sub.unread_counter DESC, sub.last_activity_on DESC')
                      
                      -- Query 1
                      SELECT sub.*, profiles.status AS interlocutor_status
                      FROM (
                        SELECT DISTINCT
                        ....
                      
                      -- Query 2
                      SELECT "posts".* FROM "posts" WHERE "posts"."id" IN (............)
                      
                      -- Query 3
                      SELECT "categories".* FROM "categories" WHERE "categories"."id" IN (..........)
                      
                      Conversation.preload(post: :category)
                                  .from(distinct, :sub)
                                  .select('sub.*, profiles.status AS interlocutor_status')
                                  .joins('LEFT OUTER JOIN users ON interlocutor_id = users.id')
                                  .joins('LEFT OUTER JOIN profiles ON interlocutor_id = profiles.user_id')
                                  .where.not('profiles.status' => :pending)
                                  .order('sub.unread_counter DESC, sub.last_activity_on DESC')
                      
                      -- Query 1
                      SELECT sub.*, profiles.status AS interlocutor_status
                      FROM (
                        SELECT DISTINCT
                        ....
                      
                      -- Query 2
                      SELECT "posts".* FROM "posts" WHERE "posts"."id" IN (............)
                      
                      -- Query 3
                      SELECT "categories".* FROM "categories" WHERE "categories"."id" IN (..........)
                      

                      slack get message sender name for messages return from conversation.history api

                      copy iconCopydownload iconDownload
                      const channelId = 'C02TSNCQ2Q2';
                      const channelHistory = await client.conversations.history({
                        channel: channelId,
                      });
                      
                      // Get the user ids from the history and populate an array with the user details
                      const userList = [];
                      for await (let message of channelHistory.messages) {
                        const userAdded = userList.find(user => user.id === message.user);
                        if (!userAdded) {
                          const response = await slackClient.users.info({
                            user: message.user,
                          });
                      
                          if (response.ok) {
                            const { id, name, real_name, profile, is_bot } = response.user;
                            userList.push({ id, name, real_name, profile, is_bot });
                          }
                        }
                      }
                      
                      console.log(`There are ${userList.length} users in the channel conversation:\n${userList.map(user => `${(user.is_bot ? '🤖' : '👤')} ${user.name}`).join('\n')}`);
                      
                      

                      Bot Framework Composer Skill Host Endpoint 401 Unauthorized

                      copy iconCopydownload iconDownload
                      private void AddOrUpdateContinuationParameters(ITurnContext turnContext)
                      {
                          var continuationParameters = new ContinuationParameters
                          {
                              ClaimsIdentity = turnContext.TurnState.Get<IIdentity>(BotAdapter.BotIdentityKey),
                              ConversationReference = turnContext.Activity.GetConversationReference(),
                              OAuthScope = turnContext.TurnState.Get<string>(BotAdapter.OAuthScopeKey)
                          };
                      
                              _continuationParametersStore.AddOrUpdate(continuationParameters.ConversationReference.Conversation.Id, continuationParameters, (_, __) => continuationParameters);
                      }
                      
                      await _botFrameworkAdapter.ContinueConversationAsync(
                                (ClaimsIdentity)continuationParameters.ClaimsIdentity,
                                conversationRec.ConversationReference, 
                                continuationParameters.OAuthScope, 
                                (ITurnContext turnContext, CancellationToken cancellationToken) => turnContext.SendActivityAsync(MessageFactory.Text(backendMessage), cancellationToken),
                                default);
                      
                      private void AddOrUpdateContinuationParameters(ITurnContext turnContext)
                      {
                          var continuationParameters = new ContinuationParameters
                          {
                              ClaimsIdentity = turnContext.TurnState.Get<IIdentity>(BotAdapter.BotIdentityKey),
                              ConversationReference = turnContext.Activity.GetConversationReference(),
                              OAuthScope = turnContext.TurnState.Get<string>(BotAdapter.OAuthScopeKey)
                          };
                      
                              _continuationParametersStore.AddOrUpdate(continuationParameters.ConversationReference.Conversation.Id, continuationParameters, (_, __) => continuationParameters);
                      }
                      
                      await _botFrameworkAdapter.ContinueConversationAsync(
                                (ClaimsIdentity)continuationParameters.ClaimsIdentity,
                                conversationRec.ConversationReference, 
                                continuationParameters.OAuthScope, 
                                (ITurnContext turnContext, CancellationToken cancellationToken) => turnContext.SendActivityAsync(MessageFactory.Text(backendMessage), cancellationToken),
                                default);
                      

                      Updating a Composable Function with a Lambda

                      copy iconCopydownload iconDownload
                      @Composable
                      fun MyScreenContent(names: List<String> = listOf("Android", "there")) {
                          val counterState = remember { mutableStateOf(0) }
                      
                          Column(modifier = Modifier.fillMaxHeight()) {
                      
                              Counter(
                                  count = counterState.value,
                                  updateCount = { newCount ->
                                      counterState.value = newCount
                                  }
                              )
                          }
                      }
                      
                      
                      @Composable
                      fun Counter(count: Int, updateCount: (Int) -> Unit) {
                          Button(
                              onClick = { updateCount(count + 1) },
                      
                          ) {
                              Text("I've been clicked $count times")
                          }
                      }
                      
                      class MainActivity : ComponentActivity() {
                          override fun onCreate(savedInstanceState: Bundle?) {
                              super.onCreate(savedInstanceState)
                              setContent {
                      
                                  val counterState = remember { mutableStateOf(0) }
                      
                                  WorkTimerTheme {
                                      Conversation(SampleData.conversationSample)
                                      ClickCounter(clicks = counterState.value) {
                                              counterState.value++
                                      }
                                  }
                              }
                          }
                      }
                      

                      MySQL/Mariadb problem: `Order by DESC` before `Group by`

                      copy iconCopydownload iconDownload
                      SELECT
                          main.*
                      FROM
                      (
                          SELECT
                              sub.*
                          FROM
                          (
                              SELECT
                              conversation.id AS conversation_id,
                              CONCAT(user2.first_name, " ", user2.last_name) AS conversation_name,
                              conversation.is_group AS conversation_isgroup,
                              (SELECT user_id FROM conversation_member WHERE conversation_id = conversation.id AND user_id != 1) AS conversation_owner_id,
                              
                              message.id AS message_id,
                              message.type AS message_type,
                              message.body AS message_body,
                              message.filename AS message_filename,
                              message.created_at AS message_time,
                      
                              message.user_id AS message_user_id,
                              CONCAT(user.first_name, " ", user.last_name) AS message_user_name
                          FROM
                              conversation
                          INNER JOIN
                              conversation_member
                              ON
                                  conversation_member.conversation_id = conversation.id
                          LEFT JOIN
                              message
                              ON
                                  message.conversation_id = conversation.id
                          LEFT JOIN
                              user
                              ON
                                  user.id = message.user_id
                          LEFT JOIN
                              user as user2
                              ON
                                  user2.id = conversation.owner2_id
                                  OR
                                  user2.id = conversation.owner_id
                          WHERE
                              user2.id != 1
                              AND
                              name IS NULL
                              AND
                              conversation_member.user_id = 1
                              AND
                              conversation.is_group = 0
                          ) AS sub
                          GROUP BY sub.message_id desc
                      ) as main
                      GROUP BY main.conversation_id
                      
                      (
                          SELECT
                              mm.*
                          FROM
                          (
                              (
                                  SELECT
                                      sub1.*
                                  FROM
                                  (
                                      SELECT
                                          conversation.id AS conversation_id,
                                          conversation.name AS conversation_name,
                                          conversation.is_group AS conversation_isgroup,
                                          conversation.owner_id AS conversation_owner_id,
                      
                                          message.id AS message_id,
                                          message.type AS message_type,
                                          message.body AS message_body,
                                          message.filename AS message_filename,
                                          message.created_at AS message_time,
                      
                                          message.user_id AS message_user_id,
                                          CONCAT(user.first_name, " ", user.last_name) AS message_user_name
                                      FROM
                                          conversation
                                      INNER JOIN
                                          conversation_member
                                          ON
                                              conversation_member.conversation_id = conversation.id
                                      LEFT JOIN
                                          message
                                          ON
                                              message.conversation_id = conversation.id
                                      LEFT JOIN
                                          user
                                          ON
                                              user.id = message.user_id
                                      WHERE
                                          conversation_member.user_id = 1
                                          AND
                                          conversation.is_group = 1
                                  ) AS sub1
                                  GROUP BY sub1.message_id desc
                              )
                              UNION
                              (
                                  SELECT
                                      sub2.*
                                  FROM
                                  (
                                      SELECT
                                          conversation.id AS conversation_id,
                                          CONCAT(user2.first_name, " ", user2.last_name) AS conversation_name,
                                          conversation.is_group AS conversation_isgroup,
                                          (SELECT user_id FROM conversation_member WHERE conversation_id = conversation.id AND user_id != 1) AS conversation_owner_id,
                      
                                          message.id AS message_id,
                                          message.type AS message_type,
                                          message.body AS message_body,
                                          message.filename AS message_filename,
                                          message.created_at AS message_time,
                      
                                          message.user_id AS message_user_id,
                                          CONCAT(user.first_name, " ", user.last_name) AS message_user_name
                                      FROM
                                          conversation
                                      INNER JOIN
                                          conversation_member
                                          ON
                                              conversation_member.conversation_id = conversation.id
                                      LEFT JOIN
                                          message
                                          ON
                                              message.conversation_id = conversation.id
                                      LEFT JOIN
                                          user
                                          ON
                                              user.id = message.user_id
                                      LEFT JOIN
                                          user as user2
                                          ON
                                              user2.id = conversation.owner2_id
                                              OR
                                              user2.id = conversation.owner_id
                                      WHERE
                                          user2.id != 1
                                          AND
                                          name IS NULL
                                          AND
                                          conversation_member.user_id = 1
                                          AND
                                          conversation.is_group = 0
                                  ) AS sub2
                                  GROUP BY sub2.message_id desc
                              )
                          ) AS mm
                          GROUP BY mm.conversation_id desc
                      )
                      ;
                      
                      SELECT
                          main.*
                      FROM
                      (
                          SELECT
                              sub.*
                          FROM
                          (
                              SELECT
                              conversation.id AS conversation_id,
                              CONCAT(user2.first_name, " ", user2.last_name) AS conversation_name,
                              conversation.is_group AS conversation_isgroup,
                              (SELECT user_id FROM conversation_member WHERE conversation_id = conversation.id AND user_id != 1) AS conversation_owner_id,
                              
                              message.id AS message_id,
                              message.type AS message_type,
                              message.body AS message_body,
                              message.filename AS message_filename,
                              message.created_at AS message_time,
                      
                              message.user_id AS message_user_id,
                              CONCAT(user.first_name, " ", user.last_name) AS message_user_name
                          FROM
                              conversation
                          INNER JOIN
                              conversation_member
                              ON
                                  conversation_member.conversation_id = conversation.id
                          LEFT JOIN
                              message
                              ON
                                  message.conversation_id = conversation.id
                          LEFT JOIN
                              user
                              ON
                                  user.id = message.user_id
                          LEFT JOIN
                              user as user2
                              ON
                                  user2.id = conversation.owner2_id
                                  OR
                                  user2.id = conversation.owner_id
                          WHERE
                              user2.id != 1
                              AND
                              name IS NULL
                              AND
                              conversation_member.user_id = 1
                              AND
                              conversation.is_group = 0
                          ) AS sub
                          GROUP BY sub.message_id desc
                      ) as main
                      GROUP BY main.conversation_id
                      
                      (
                          SELECT
                              mm.*
                          FROM
                          (
                              (
                                  SELECT
                                      sub1.*
                                  FROM
                                  (
                                      SELECT
                                          conversation.id AS conversation_id,
                                          conversation.name AS conversation_name,
                                          conversation.is_group AS conversation_isgroup,
                                          conversation.owner_id AS conversation_owner_id,
                      
                                          message.id AS message_id,
                                          message.type AS message_type,
                                          message.body AS message_body,
                                          message.filename AS message_filename,
                                          message.created_at AS message_time,
                      
                                          message.user_id AS message_user_id,
                                          CONCAT(user.first_name, " ", user.last_name) AS message_user_name
                                      FROM
                                          conversation
                                      INNER JOIN
                                          conversation_member
                                          ON
                                              conversation_member.conversation_id = conversation.id
                                      LEFT JOIN
                                          message
                                          ON
                                              message.conversation_id = conversation.id
                                      LEFT JOIN
                                          user
                                          ON
                                              user.id = message.user_id
                                      WHERE
                                          conversation_member.user_id = 1
                                          AND
                                          conversation.is_group = 1
                                  ) AS sub1
                                  GROUP BY sub1.message_id desc
                              )
                              UNION
                              (
                                  SELECT
                                      sub2.*
                                  FROM
                                  (
                                      SELECT
                                          conversation.id AS conversation_id,
                                          CONCAT(user2.first_name, " ", user2.last_name) AS conversation_name,
                                          conversation.is_group AS conversation_isgroup,
                                          (SELECT user_id FROM conversation_member WHERE conversation_id = conversation.id AND user_id != 1) AS conversation_owner_id,
                      
                                          message.id AS message_id,
                                          message.type AS message_type,
                                          message.body AS message_body,
                                          message.filename AS message_filename,
                                          message.created_at AS message_time,
                      
                                          message.user_id AS message_user_id,
                                          CONCAT(user.first_name, " ", user.last_name) AS message_user_name
                                      FROM
                                          conversation
                                      INNER JOIN
                                          conversation_member
                                          ON
                                              conversation_member.conversation_id = conversation.id
                                      LEFT JOIN
                                          message
                                          ON
                                              message.conversation_id = conversation.id
                                      LEFT JOIN
                                          user
                                          ON
                                              user.id = message.user_id
                                      LEFT JOIN
                                          user as user2
                                          ON
                                              user2.id = conversation.owner2_id
                                              OR
                                              user2.id = conversation.owner_id
                                      WHERE
                                          user2.id != 1
                                          AND
                                          name IS NULL
                                          AND
                                          conversation_member.user_id = 1
                                          AND
                                          conversation.is_group = 0
                                  ) AS sub2
                                  GROUP BY sub2.message_id desc
                              )
                          ) AS mm
                          GROUP BY mm.conversation_id desc
                      )
                      ;
                      
                      SELECT
                        main.*
                      FROM
                      (
                          SELECT
                              sub.*
                          FROM
                          (
                              SELECT
                              conversation.id AS conversation_id,
                              CONCAT(user2.first_name, " ", user2.last_name) AS conversation_name,
                              conversation.is_group AS conversation_isgroup,
                              (SELECT user_id FROM conversation_member WHERE conversation_id = conversation.id AND user_id != 1) AS conversation_owner_id,
                          
                              message.id AS message_id,
                              message.type AS message_type,
                              message.body AS message_body,
                              message.filename AS message_filename,
                              message.created_at AS message_time,
                      
                              message.user_id AS message_user_id,
                              CONCAT(user01.first_name, " ", user01.last_name) AS message_user_name
                          FROM
                              conversation
                          INNER JOIN
                              conversation_member
                              ON
                                  conversation_member.conversation_id = conversation.id
                          LEFT JOIN
                              message
                              ON
                                  message.conversation_id = conversation.id
                          LEFT JOIN
                              user01
                              ON
                                  user01.id = message.user_id
                          LEFT JOIN
                              user01 as user2
                              ON
                                  user2.id = conversation.owner2_id
                                  OR
                                  user2.id = conversation.owner_id
                          WHERE
                              user2.id != 1
                              AND
                              name IS NULL
                              AND
                              conversation_member.user_id = 1
                              AND
                              conversation.is_group = 0
                          ) AS sub
                          ORDER BY
                            sub.message_id DESC limit 10 
                      ) as main
                       GROUP BY
                       main.conversation_id;
                      

                      LateInitializationError: Field 'chatRoomStream' has not been initialized

                      copy iconCopydownload iconDownload
                      late Stream chatRoomStream;
                      
                      Stream chatRoomStream;
                      
                      late Stream chatRoomStream;
                      
                      Stream chatRoomStream;
                      

                      Framerate lag spikes from network requests on main thread

                      copy iconCopydownload iconDownload
                      Task<byte[]> ParseJsonData (string rawJson)
                      {
                          try
                          {
                              return Task.Run(() =>
                              {
                                  jsonData = JSON.Parse(rawJson);
                                  string stringData = jsonData["audioContent"]["data"].ToString();
                                  return AudioHelpers.ConvertToByteStream(stringData);
                              });
                          }
                          catch (Exception e)
                          {
                              UnityEngine.Debug.LogException(e);
                              throw;
                          }
                      }
                      
                      IEnumerator getResponse(Conversation conversation)
                      {
                          WWWForm form = new WWWForm();
                          form.AddField("id", this.id);
                          var www = UnityWebRequest.Post("http://" + Datastore.Instance.host + ":3000/generate", form);
                      
                          yield return www.SendWebRequest();
                      
                          if (interrupted) yield break;
                      
                          if (www.isNetworkError)
                          {
                              Debug.Log(www.error);
                          }
                          else
                          {
                              if (www.GetResponseHeaders().Count > 0)
                              {
                                  ParseJsonData(rawJson)
                                      .ContinueWith(ParseAudioData);
                                  ParseAudioData(www.downloadHandler.text).ContinueWith((rawData) =>
                                  {
                                      // https://github.com/PimDeWitte/UnityMainThreadDispatcher
                                      UnityMainThreadDispatcher.Instance.Enqueue(() =>
                                      {
                                          AudioClip clip = AudioHelpers.ConvertToAudioClip(rawData);
                                          StartCoroutine(PlayDialog(clip));
                                          Debug.Log("Response Recieved");
                                      });
                              }
                          }
                      }
                      
                      IEnumerator PlayDialog (AudioClip clip)
                      {
                          this.audioSource.clip = clip;
                          this.audioSource.Play();
                          this.animator.SetBool(this.talkingBoolHash, true);
                          yield return new WaitForSeconds(clip.length);
                          if (interrupted) yield break;
                          this.conversation.currentSpeaker = jsonData["nextSpeaker"].ToString().Replace("\"", "");
                          this.conversation.processing = false;
                          this.animator.SetBool(this.talkingBoolHash, false);
                      }
                      
                      Task<byte[]> ParseJsonData (string rawJson)
                      {
                          try
                          {
                              return Task.Run(() =>
                              {
                                  jsonData = JSON.Parse(rawJson);
                                  string stringData = jsonData["audioContent"]["data"].ToString();
                                  return AudioHelpers.ConvertToByteStream(stringData);
                              });
                          }
                          catch (Exception e)
                          {
                              UnityEngine.Debug.LogException(e);
                              throw;
                          }
                      }
                      
                      IEnumerator getResponse(Conversation conversation)
                      {
                          WWWForm form = new WWWForm();
                          form.AddField("id", this.id);
                          var www = UnityWebRequest.Post("http://" + Datastore.Instance.host + ":3000/generate", form);
                      
                          yield return www.SendWebRequest();
                      
                          if (interrupted) yield break;
                      
                          if (www.isNetworkError)
                          {
                              Debug.Log(www.error);
                          }
                          else
                          {
                              if (www.GetResponseHeaders().Count > 0)
                              {
                                  ParseJsonData(rawJson)
                                      .ContinueWith(ParseAudioData);
                                  ParseAudioData(www.downloadHandler.text).ContinueWith((rawData) =>
                                  {
                                      // https://github.com/PimDeWitte/UnityMainThreadDispatcher
                                      UnityMainThreadDispatcher.Instance.Enqueue(() =>
                                      {
                                          AudioClip clip = AudioHelpers.ConvertToAudioClip(rawData);
                                          StartCoroutine(PlayDialog(clip));
                                          Debug.Log("Response Recieved");
                                      });
                              }
                          }
                      }
                      
                      IEnumerator PlayDialog (AudioClip clip)
                      {
                          this.audioSource.clip = clip;
                          this.audioSource.Play();
                          this.animator.SetBool(this.talkingBoolHash, true);
                          yield return new WaitForSeconds(clip.length);
                          if (interrupted) yield break;
                          this.conversation.currentSpeaker = jsonData["nextSpeaker"].ToString().Replace("\"", "");
                          this.conversation.processing = false;
                          this.animator.SetBool(this.talkingBoolHash, false);
                      }
                      

                      Community Discussions

                      Trending Discussions on Conversations
                      • android:exported needs to be explicitly specified for &lt;activity&gt;. Apps targeting Android 12 and higher are required to specify
                      • string does not contain a valid string resource. Android Studio
                      • Which model/technique to use for specific sentence extraction?
                      • React: hiding vs removing components
                      • Bot is mixing up prompts from concurrent users
                      • Rails is breaking SQL query when modifying order
                      • slack get message sender name for messages return from conversation.history api
                      • Bot Framework Composer Skill Host Endpoint 401 Unauthorized
                      • Updating a Composable Function with a Lambda
                      • MySQL/Mariadb problem: `Order by DESC` before `Group by`
                      Trending Discussions on Conversations

                      QUESTION

                      android:exported needs to be explicitly specified for &lt;activity&gt;. Apps targeting Android 12 and higher are required to specify

                      Asked 2022-Feb-23 at 14:13

                      After upgrading to android 12, the application is not compiling. It shows

                      "Manifest merger failed with multiple errors, see logs"

                      Error showing in Merged manifest:

                      Merging Errors: Error: android:exported needs to be explicitly specified for . Apps targeting Android 12 and higher are required to specify an explicit value for android:exported when the corresponding component has an intent filter defined. See https://developer.android.com/guide/topics/manifest/activity-element#exported for details. main manifest (this file)

                      I have set all the activity with android:exported="false". But it is still showing this issue.

                      My manifest file:

                      <?xml version="1.0" encoding="utf-8"?>
                      <manifest xmlns:android="http://schemas.android.com/apk/res/android"
                          xmlns:tools="http://schemas.android.com/tools"
                          package="eu.siacs.conversations">
                      
                          <uses-sdk tools:overrideLibrary="net.ypresto.androidtranscoder" />
                      
                          <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
                          <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
                          <uses-permission android:name="android.permission.READ_CONTACTS" />
                          <uses-permission android:name="android.permission.READ_PROFILE" />
                          <uses-permission
                              android:name="android.permission.READ_PHONE_STATE"
                              android:maxSdkVersion="22" />
                          <uses-permission android:name="android.permission.INTERNET" />
                          <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
                          <uses-permission android:name="android.permission.WAKE_LOCK" />
                          <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
                          <uses-permission android:name="android.permission.VIBRATE" />
                          <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
                          <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
                          <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
                          <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
                          <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
                          <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
                      
                          <uses-feature
                              android:name="android.hardware.location"
                              android:required="false" />
                          <uses-feature
                              android:name="android.hardware.location.gps"
                              android:required="false" />
                          <uses-feature
                              android:name="android.hardware.location.network"
                              android:required="false" />
                      
                          <uses-permission android:name="android.permission.CAMERA" />
                          <uses-permission android:name="android.permission.RECORD_AUDIO" />
                          <uses-permission android:name="android.permission.BLUETOOTH" />
                          <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
                          <uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
                          <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
                      
                          <uses-feature
                              android:name="android.hardware.camera"
                              android:required="false" />
                          <uses-feature
                              android:name="android.hardware.camera.autofocus"
                              android:required="false" />
                          <uses-feature
                              android:name="android.hardware.microphone"
                              android:required="false" />
                      
                          <application
                              android:name=".Application"
                              android:allowBackup="false"
                              android:allowClearUserData="true"
                              android:appCategory="social"
                              android:hardwareAccelerated="true"
                              android:icon="@mipmap/ic_app_launch"
                              android:label="@string/app_name"
                              android:largeHeap="true"
                              android:networkSecurityConfig="@xml/network_security_configuration"
                              android:requestLegacyExternalStorage="true"
                              android:roundIcon="@mipmap/ic_app_launch_round"
                              android:theme="@style/ConversationsTheme"
                              android:usesCleartextTraffic="true"
                              android:windowSoftInputMode="adjustPan|adjustResize"
                              tools:replace="android:label"
                              tools:targetApi="q">
                              <activity
                                  android:name=".ui.search.GroupSearchActivity"
                                  android:exported="true" />
                              <activity
                                  android:name=".ui.profileUpdating.FavouritesActivity"
                                  android:exported="true" />
                              <activity
                                  android:name=".ui.profileUpdating.NameActivity"
                                  android:exported="true" />
                              <activity
                                  android:name=".ui.CompulsoryUpdateActivity"
                                  android:exported="true" />
                              <activity android:name=".ui.payments.doPayment.DoPaymentActivity"
                                  android:exported="true" />
                              <activity android:name=".ui.individualList.IndividualListActivity"
                                  android:exported="true" />
                              <activity android:name=".ui.payments.setPayment.SetPaymentActivity"
                                  android:exported="true" />
                              <activity android:name=".ui.login.otpActivity.OTPActivity"
                                  android:exported="true" />
                              <activity android:name=".ui.login.loginActivity.LoginActivity"
                                  android:exported="true" />
                      
                              <service android:name=".services.XmppConnectionService" android:exported="true" />
                      
                              <receiver android:name=".services.EventReceiver"
                                  android:exported="true">
                                  <intent-filter>
                                      <action android:name="android.intent.action.BOOT_COMPLETED" />
                                      <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
                                      <action android:name="android.intent.action.ACTION_SHUTDOWN" />
                                      <action android:name="android.media.RINGER_MODE_CHANGED" />
                                  </intent-filter>
                              </receiver>
                      
                              <activity
                                  android:name=".ui.ShareLocationActivity"
                                  android:label="@string/title_activity_share_location"
                                  android:exported="true"/>
                              <activity
                                  android:name=".ui.SearchActivity"
                                  android:label="@string/search_messages"
                                  android:exported="true" />
                              <activity
                                  android:name=".ui.RecordingActivity"
                                  android:configChanges="orientation|screenSize"
                                  android:theme="@style/ConversationsTheme.Dialog"
                                  android:exported="true" />
                              <activity
                                  android:name=".ui.ShowLocationActivity"
                                  android:label="@string/title_activity_show_location"
                                  android:exported="true" />
                              <activity
                                  android:name=".ui.SplashActivity"
                                  android:theme="@style/SplashTheme"
                                  android:exported="true">
                                  <intent-filter>
                                      <action android:name="android.intent.action.MAIN" />
                      
                                      <category android:name="android.intent.category.LAUNCHER" />
                                  </intent-filter>
                              </activity>
                              <activity
                                  android:name=".ui.ConversationsActivity"
                                  android:label="@string/app_name"
                                  android:launchMode="singleTask"
                                  android:minWidth="300dp"
                                  android:minHeight="300dp"
                                  android:exported="true"
                                  android:windowSoftInputMode="stateHidden" />
                              <activity
                                  android:name=".ui.ScanActivity"
                                  android:screenOrientation="portrait"
                                  android:exported="true"
                                  android:theme="@style/ConversationsTheme.FullScreen"
                                  android:windowSoftInputMode="stateAlwaysHidden" />
                              <activity
                                  android:name=".ui.UriHandlerActivity"
                                  android:label="@string/app_name"
                                  android:exported="true">
                                  <intent-filter>
                                      <action android:name="android.intent.action.VIEW" />
                      
                                      <category android:name="android.intent.category.DEFAULT" />
                                      <category android:name="android.intent.category.BROWSABLE" />
                      
                                      <data android:scheme="xmpp" />
                                  </intent-filter>
                                  <intent-filter android:autoVerify="true">
                                      <action android:name="android.intent.action.VIEW" />
                      
                                      <category android:name="android.intent.category.DEFAULT" />
                                      <category android:name="android.intent.category.BROWSABLE" />
                      
                                      <data android:scheme="https" />
                                      <data android:host="im.app.in" />
                                      <data android:pathPrefix="/i/" />
                                      <data android:pathPrefix="/j/" />
                                  </intent-filter>
                                  <intent-filter>
                                      <action android:name="android.intent.action.SENDTO" />
                      
                                      <category android:name="android.intent.category.DEFAULT" />
                      
                                      <data android:scheme="imto" />
                                      <data android:host="jabber" />
                                  </intent-filter>
                              </activity>
                              <activity
                                  android:name=".ui.StartConversationActivity"
                                  android:label="@string/title_activity_start_conversation"
                                  android:launchMode="singleTop"
                                  android:exported="true">
                                  <intent-filter>
                                      <action android:name="android.intent.action.VIEW" />
                                  </intent-filter>
                              </activity>
                              <activity
                                  android:name=".ui.SettingsActivity"
                                  android:label="@string/title_activity_settings"
                                  android:exported="true">
                                  <intent-filter>
                                      <action android:name="android.intent.action.MAIN" />
                      
                                      <category android:name="android.intent.category.NOTIFICATION_PREFERENCES" />
                                  </intent-filter>
                              </activity>
                              <activity
                                  android:name=".ui.ChooseContactActivity"
                                  android:label="@string/title_activity_choose_contact"
                                  android:exported="true" />
                              <activity
                                  android:name=".ui.BlocklistActivity"
                                  android:label="@string/title_activity_block_list"
                                  android:exported="true"/>
                              <activity
                                  android:name=".ui.ChangePasswordActivity"
                                  android:label="@string/change_password_on_server"
                                  android:exported="true"/>
                              <activity
                                  android:name=".ui.ChooseAccountForProfilePictureActivity"
                                  android:enabled="false"
                                  android:label="@string/choose_account"
                                  android:exported="true">
                                  <intent-filter android:label="@string/set_profile_picture">
                                      <action android:name="android.intent.action.ATTACH_DATA" />
                      
                                      <category android:name="android.intent.category.DEFAULT" />
                      
                                      <data android:mimeType="image/*" />
                                  </intent-filter>
                              </activity>
                              <activity
                                  android:name=".ui.ShareViaAccountActivity"
                                  android:label="@string/title_activity_share_via_account"
                                  android:launchMode="singleTop"
                                  android:exported="true" />
                              <activity
                                  android:name=".ui.EditAccountActivity"
                                  android:launchMode="singleTop"
                                  android:exported="true"
                                  android:windowSoftInputMode="stateHidden|adjustResize" />
                              <activity
                                  android:name=".ui.ConferenceDetailsActivity"
                                  android:label="@string/action_muc_details"
                                  android:exported="true"
                                  android:windowSoftInputMode="stateHidden" />
                              <activity
                                  android:name=".ui.ContactDetailsActivity"
                                  android:exported="true"
                                  android:windowSoftInputMode="stateHidden" />
                              <activity
                                  android:name=".ui.PublishProfilePictureActivity"
                                  android:label="@string/mgmt_account_publish_avatar"
                                  android:exported="true"
                                  android:windowSoftInputMode="stateHidden" />
                              <activity
                                  android:name=".ui.PublishGroupChatProfilePictureActivity"
                                  android:exported="true"
                                  android:label="@string/group_chat_avatar" />
                              <activity
                                  android:name=".ui.ShareWithActivity"
                                  android:label="@string/app_name"
                                  android:launchMode="singleTop"
                                  android:exported="true">
                                  <intent-filter>
                                      <action android:name="android.intent.action.SEND" />
                                      <action android:name="android.intent.action.SEND_MULTIPLE" />
                      
                                      <category android:name="android.intent.category.DEFAULT" />
                      
                                      <data android:mimeType="text/plain" />
                                  </intent-filter>
                                  <intent-filter>
                                      <action android:name="android.intent.action.SEND" />
                                      <action android:name="android.intent.action.SEND_MULTIPLE" />
                      
                                      <category android:name="android.intent.category.DEFAULT" />
                      
                                      <data android:mimeType="*/*" />
                                  </intent-filter>
                      
                                  <!-- the value here needs to be the full class name; independent of the configured applicationId -->
                                  <meta-data
                                      android:name="android.service.chooser.chooser_target_service"
                                      android:value="eu.siacs.conversations.services.ContactChooserTargetService" />
                              </activity>
                              <activity
                                  android:name=".ui.TrustKeysActivity"
                                  android:label="@string/trust_omemo_fingerprints"
                                  android:exported="true"
                                  android:windowSoftInputMode="stateAlwaysHidden" />
                              <activity
                                  android:name="com.theartofdev.edmodo.cropper.CropImageActivity"
                                  android:exported="true"
                                  android:theme="@style/Base.Theme.AppCompat" />
                              <activity android:name=".ui.MemorizingActivity"
                                  android:exported="true" />
                              <activity
                                  android:name=".ui.MediaBrowserActivity"
                                  android:exported="true"
                                  android:label="@string/media_browser" />
                      
                              <service android:name=".services.ExportBackupService" android:exported="true"/>
                              <service android:name=".services.ImportBackupService" android:exported="true"/>
                              <service
                                  android:name=".services.ContactChooserTargetService"
                                  android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE"
                                  android:exported="true">
                                  <intent-filter>
                                      <action android:name="android.service.chooser.ChooserTargetService" />
                                  </intent-filter>
                              </service>
                              <service android:name=".services.CompulsoryUpdateService" android:exported="true"/>
                      
                              <provider
                                  android:name="androidx.core.content.FileProvider"
                                  android:authorities="${applicationId}.files"
                                  android:exported="false"
                                  android:grantUriPermissions="true">
                                  <meta-data
                                      android:name="android.support.FILE_PROVIDER_PATHS"
                                      android:resource="@xml/file_paths" />
                              </provider>
                              <provider
                                  android:name=".services.BarcodeProvider"
                                  android:authorities="${applicationId}.barcodes"
                                  android:exported="false"
                                  android:grantUriPermissions="true" />
                      
                              <activity
                                  android:name=".ui.ShortcutActivity"
                                  android:label="@string/contact"
                                  android:exported="true">
                                  <intent-filter>
                                      <action android:name="android.intent.action.CREATE_SHORTCUT" />
                                  </intent-filter>
                              </activity>
                              <activity
                                  android:name=".ui.MucUsersActivity"
                                  android:exported="true"
                                  android:label="@string/group_chat_members" />
                              <activity
                                  android:name=".ui.ChannelDiscoveryActivity"
                                  android:exported="true"
                                  android:label="@string/discover_channels" />
                              <activity
                                  android:name=".ui.RtpSessionActivity"
                                  android:autoRemoveFromRecents="true"
                                  android:exported="true"
                                  android:launchMode="singleInstance"
                                  android:supportsPictureInPicture="true" />
                          </application>
                      
                      </manifest>
                      

                      My second manifest file:

                      <?xml version="1.0" encoding="utf-8"?>
                      <manifest xmlns:android="http://schemas.android.com/apk/res/android"
                          xmlns:tools="http://schemas.android.com/tools"
                          package="eu.siacs.conversations">
                      
                          <application tools:ignore="GoogleAppIndexingWarning">
                              <activity
                                  android:name=".ui.ManageAccountActivity"
                                  android:label="@string/title_activity_manage_accounts"
                                  android:launchMode="singleTask"
                                  android:exported="true"/>
                              <activity
                                  android:name=".ui.MagicCreateActivity"
                                  android:label="@string/create_new_account"
                                  android:launchMode="singleTask"
                                  android:exported="true"/>
                              <activity
                                  android:name=".ui.EasyOnboardingInviteActivity"
                                  android:label="@string/invite_to_app"
                                  android:launchMode="singleTask" />
                              <activity
                                  android:name=".ui.ImportBackupActivity"
                                  android:label="@string/restore_backup"
                                  android:launchMode="singleTask"
                                  android:exported="true">
                                  <intent-filter>
                                      <action android:name="android.intent.action.VIEW" />
                                      <category android:name="android.intent.category.DEFAULT" />
                      
                                      <data android:mimeType="application/vnd.conversations.backup" />
                                      <data android:scheme="content" />
                                  </intent-filter>
                                  <intent-filter>
                                      <action android:name="android.intent.action.VIEW" />
                                      <category android:name="android.intent.category.DEFAULT" />
                      
                                      <data android:mimeType="application/vnd.conversations.backup" />
                                      <data android:scheme="file" />
                                  </intent-filter>
                                  <intent-filter>
                                      <action android:name="android.intent.action.VIEW" />
                      
                                      <category android:name="android.intent.category.DEFAULT" />
                                      <category android:name="android.intent.category.BROWSABLE" />
                      
                                      <data android:scheme="content" />
                                      <data android:host="*" />
                                      <data android:mimeType="*/*" />
                                      <data android:pathPattern=".*\\.ceb" />
                                      <data android:pathPattern=".*\\..*\\.ceb" />
                                      <data android:pathPattern=".*\\..*\\..*\\.ceb" />
                                      <data android:pathPattern=".*\\..*\\..*\\..*\\.ceb" />
                                      <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.ceb" />
                                      <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\.ceb" />
                                      <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\..*\\.ceb" />
                                  </intent-filter>
                                  <intent-filter>
                                      <action android:name="android.intent.action.VIEW" />
                      
                                      <category android:name="android.intent.category.DEFAULT" />
                                      <category android:name="android.intent.category.BROWSABLE" />
                      
                                      <data android:scheme="file" />
                                      <data android:host="*" />
                                      <data android:mimeType="*/*" />
                                      <data android:pathPattern=".*\\.ceb" />
                                      <data android:pathPattern=".*\\..*\\.ceb" />
                                      <data android:pathPattern=".*\\..*\\..*\\.ceb" />
                                      <data android:pathPattern=".*\\..*\\..*\\..*\\.ceb" />
                                      <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.ceb" />
                                      <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\.ceb" />
                                      <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\..*\\.ceb" />
                                  </intent-filter>
                              </activity>
                          </application>
                      </manifest>
                      
                      

                      My gradle file:

                      import com.android.build.OutputFile
                      
                      // Top-level build file where you can add configuration options common to all
                      // sub-projects/modules.
                      buildscript {
                          ext.kotlin_version = "1.5.21"
                          repositories {
                              google()
                              mavenCentral()
                              maven { url 'https://jitpack.io' }
                              gradlePluginPortal()
                          }
                          dependencies {
                              classpath 'com.android.tools.build:gradle:4.2.2'
                              classpath 'com.google.gms:google-services:4.3.8'
                              classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
                          }
                      }
                      
                      apply plugin: 'com.android.application'
                      apply plugin: 'kotlin-android'
                      apply plugin: 'kotlin-kapt'
                      apply plugin: 'com.google.gms.google-services'
                      
                      repositories {
                          google()
                          mavenCentral()
                          jcenter()
                          maven { url 'https://jitpack.io' }
                      }
                      
                      configurations {
                          conversationsFreeCompatImplementation
                      }
                      
                      dependencies {
                          implementation 'androidx.viewpager:viewpager:1.0.0'
                          implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
                      
                          implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
                      
                          implementation 'org.sufficientlysecure:openpgp-api:10.0'
                          implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0'
                          implementation 'androidx.appcompat:appcompat:1.3.1'
                          implementation 'androidx.exifinterface:exifinterface:1.3.2'
                          implementation 'androidx.cardview:cardview:1.0.0'
                          implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
                          implementation 'androidx.emoji:emoji:1.1.0'
                          implementation 'com.google.android.material:material:1.4.0'
                          conversationsFreeCompatImplementation 'androidx.emoji:emoji-bundled:1.1.0'
                          implementation 'org.bouncycastle:bcmail-jdk15on:1.64'
                          //zxing stopped supporting Java 7 so we have to stick with 3.3.3
                          //https://github.com/zxing/zxing/issues/1170
                          implementation 'com.google.zxing:core:3.4.1'
                          implementation 'de.measite.minidns:minidns-hla:0.2.4'
                          implementation 'me.leolin:ShortcutBadger:1.1.22@aar'
                          implementation 'org.whispersystems:signal-protocol-java:2.8.1'
                          implementation 'com.makeramen:roundedimageview:2.3.0'
                          implementation "com.wefika:flowlayout:0.4.1"
                          implementation 'net.ypresto.androidtranscoder:android-transcoder:0.3.0'
                          implementation 'org.jxmpp:jxmpp-jid:1.0.1'
                          implementation 'org.osmdroid:osmdroid-android:6.1.10'
                          implementation 'org.hsluv:hsluv:0.2'
                          implementation 'org.conscrypt:conscrypt-android:2.5.2'
                          implementation 'me.drakeet.support:toastcompat:1.1.0'
                          implementation "com.leinardi.android:speed-dial:3.2.0"
                      
                          implementation "com.squareup.retrofit2:retrofit:2.9.0"
                          implementation "com.squareup.retrofit2:converter-gson:2.9.0"
                          implementation "com.squareup.okhttp3:okhttp:5.0.0-alpha.2"
                          implementation 'com.squareup.okhttp3:logging-interceptor:5.0.0-alpha.2'
                      
                          implementation 'com.google.guava:guava:30.1.1-android'
                          implementation 'org.webrtc:google-webrtc:1.0.32006'
                      
                          // Lifecycle Helper
                          implementation "androidx.activity:activity-ktx:1.3.0-rc02"
                          implementation "androidx.fragment:fragment-ktx:1.3.6"
                      
                          //Navigation
                          implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5'
                          implementation 'androidx.navigation:navigation-ui-ktx:2.3.5'
                      
                          //CardView
                          implementation "androidx.cardview:cardview:1.0.0"
                      
                          //Country Code Picker
                          implementation 'com.hbb20:ccp:2.5.3'
                      
                          //Firebase
                          implementation 'com.google.firebase:firebase-bom:28.3.0'
                          implementation 'com.google.firebase:firebase-auth-ktx:21.0.1'
                          implementation 'androidx.browser:browser:1.3.0'
                      
                          //OTP view
                          implementation 'com.github.mukeshsolanki:android-otpview-pinview:2.1.2'
                      
                          //Retrofit
                          implementation 'com.squareup.retrofit2:retrofit:2.9.0'
                          implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
                      
                          //Gson
                          implementation 'com.google.code.gson:gson:2.8.7'
                      
                          //Multidex
                          implementation 'androidx.multidex:multidex:2.0.1'
                      
                          //Round Image
                          implementation 'de.hdodenhof:circleimageview:3.1.0'
                      
                          // Button with image and text
                          implementation 'com.github.Omega-R:OmegaCenterIconButton:0.0.4@aar'
                      
                          //Razor pay
                          implementation 'com.razorpay:checkout:1.6.10'
                      
                          //Mixpanel Tracking
                          implementation 'com.mixpanel.android:mixpanel-android:5.9.1'
                      
                          //Loading screen
                          implementation 'com.wang.avi:library:2.1.3'
                      
                          //Loading
                          implementation 'com.wang.avi:library:2.1.3'
                      
                          //Form
                          implementation 'com.quickbirdstudios:surveykit:1.1.0'
                      }
                      
                      ext {
                          travisBuild = System.getenv("TRAVIS") == "true"
                          preDexEnabled = System.getProperty("pre-dex", "true")
                          abiCodes = ['armeabi-v7a': 1, 'x86': 2, 'x86_64': 3, 'arm64-v8a': 4]
                      }
                      
                      android {
                          compileSdkVersion 31
                      
                          defaultConfig {
                              minSdkVersion 24
                              targetSdkVersion 31
                              versionCode 44
                              versionName "2.0.4"
                              multiDexEnabled = true
                              archivesBaseName += "-$versionName"
                              applicationId "com.app.app"
                              resValue "string", "applicationId", applicationId
                              def appName = "app"
                              resValue "string", "app_name", appName
                              buildConfigField "String", "APP_NAME", "\"$appName\""
                          }
                      
                          splits {
                              abi {
                                  universalApk true
                                  enable true
                              }
                          }
                      
                          configurations {
                              compile.exclude group: 'org.jetbrains' , module:'annotations'
                          }
                      
                          dataBinding {
                              enabled true
                          }
                      
                          dexOptions {
                              // Skip pre-dexing when running on Travis CI or when disabled via -Dpre-dex=false.
                              preDexLibraries = preDexEnabled && !travisBuild
                              jumboMode true
                          }
                      
                          compileOptions {
                              sourceCompatibility JavaVersion.VERSION_1_8
                              targetCompatibility JavaVersion.VERSION_1_8
                          }
                      
                          flavorDimensions("mode", "distribution", "emoji")
                      
                          productFlavors {
                      
                              conversations {
                                  dimension "mode"
                              }
                              free {
                                  dimension "distribution"
                                  versionNameSuffix "+f"
                              }
                              compat {
                                  dimension "emoji"
                                  versionNameSuffix "c"
                              }
                          }
                      
                          sourceSets {
                              conversationsFreeCompat {
                                  java {
                                      srcDir 'src/freeCompat/java'
                                      srcDir 'src/conversationsFree/java'
                                  }
                              }
                          }
                      
                          buildTypes {
                              release {
                                  shrinkResources true
                                  minifyEnabled true
                                  proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                                  versionNameSuffix "r"
                              }
                              debug {
                                  shrinkResources true
                                  minifyEnabled true
                                  proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                                  versionNameSuffix "d"
                              }
                          }
                      
                      
                          if (new File("signing.properties").exists()) {
                              Properties props = new Properties()
                              props.load(new FileInputStream(file("signing.properties")))
                      
                              signingConfigs {
                                  release {
                                      storeFile file(props['keystore'])
                                      storePassword props['keystore.password']
                                      keyAlias props['keystore.alias']
                                      keyPassword props['keystore.password']
                                  }
                              }
                              buildTypes.release.signingConfig = signingConfigs.release
                          }
                      
                          lintOptions {
                              disable 'MissingTranslation', 'InvalidPackage','AppCompatResource'
                          }
                      
                          subprojects {
                      
                              afterEvaluate {
                                  if (getPlugins().hasPlugin('android') ||
                                          getPlugins().hasPlugin('android-library')) {
                      
                                      configure(android.lintOptions) {
                                          disable 'AndroidGradlePluginVersion', 'MissingTranslation'
                                      }
                                  }
                      
                              }
                          }
                      
                          packagingOptions {
                              exclude 'META-INF/BCKEY.DSA'
                              exclude 'META-INF/BCKEY.SF'
                          }
                      
                          android.applicationVariants.all { variant ->
                              variant.outputs.each { output ->
                                  def baseAbiVersionCode = project.ext.abiCodes.get(output.getFilter(OutputFile.ABI))
                                  if (baseAbiVersionCode != null) {
                                      output.versionCodeOverride = (100 * variant.versionCode) + baseAbiVersionCode
                                  }
                              }
                      
                          }
                      }
                      

                      ANSWER

                      Answered 2021-Aug-04 at 09:18

                      I'm not sure what you're using to code, but in order to set it in Android Studio, open the manifest of your project and under the "activity" section, put android:exported="true"(or false if that is what you prefer). I have attached an example.

                      Source https://stackoverflow.com/questions/68554294

                      Community Discussions, Code Snippets contain sources that include Stack Exchange Network

                      Vulnerabilities

                      No vulnerabilities reported

                      Install Conversations

                      You can download it from GitHub.
                      You can use Conversations like any standard Java library. Please include the the jar files in your classpath. You can also use any IDE and you can run and debug the Conversations component as you would do with any other Java program. Best practice is to use a build tool that supports dependency management such as Maven or Gradle. For Maven installation, please refer maven.apache.org. For Gradle installation, please refer gradle.org .

                      Support

                      For any new features, suggestions and bugs create an issue on GitHub. If you have any questions check and ask questions on community page Stack Overflow .

                      DOWNLOAD this Library from

                      Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from
                      over 430 million Knowledge Items
                      Find more libraries
                      Reuse Solution Kits and Libraries Curated by Popular Use Cases
                      Explore Kits

                      Save this library and start creating your kit

                      Share this Page

                      share link
                      Consider Popular Messaging Libraries
                      Try Top Libraries by iNPUTmice
                      Compare Messaging Libraries with Highest Support
                      Compare Messaging Libraries with Highest Quality
                      Compare Messaging Libraries with Highest Security
                      Compare Messaging Libraries with Permissive License
                      Compare Messaging Libraries with Highest Reuse
                      Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from
                      over 430 million Knowledge Items
                      Find more libraries
                      Reuse Solution Kits and Libraries Curated by Popular Use Cases
                      Explore Kits

                      Save this library and start creating your kit

                      • © 2022 Open Weaver Inc.