Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions android/.idea/codeStyles/Project.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.net.Uri;
import androidx.browser.customtabs.CustomTabsIntent;
import android.widget.Toast;
import androidx.browser.customtabs.CustomTabsIntent;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
Expand All @@ -16,7 +16,7 @@

class CustomTabsAndroid extends ReactContextBaseJavaModule {

private ReactApplicationContext context;
private final ReactApplicationContext context;


CustomTabsAndroid(ReactApplicationContext reactContext) {
Expand Down
8 changes: 4 additions & 4 deletions android/app/src/main/java/com/zulipmobile/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ import android.content.Intent
import android.os.Bundle
import android.webkit.WebView
import com.facebook.react.ReactActivity
import com.facebook.react.ReactActivityDelegate;
import com.facebook.react.ReactRootView;
import com.facebook.react.ReactActivityDelegate
import com.facebook.react.ReactApplication
import com.facebook.react.ReactRootView
import com.facebook.react.bridge.ReactContext
import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView;
import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView
import com.zulipmobile.notifications.*
import com.zulipmobile.sharing.handleSend
import expo.modules.ReactActivityDelegateWrapper;
import expo.modules.ReactActivityDelegateWrapper

// A convenience shortcut.
fun ReactApplication.tryGetReactContext(): ReactContext? =
Expand Down
6 changes: 3 additions & 3 deletions android/app/src/main/java/com/zulipmobile/ShareFileAndroid.kt
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package com.zulipmobile

import android.content.Intent
import android.net.Uri
import androidx.core.content.FileProvider
import com.facebook.react.bridge.Promise
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.bridge.ReactContextBaseJavaModule
import com.facebook.react.bridge.ReactMethod
import android.content.Intent
import android.net.Uri
import com.facebook.react.bridge.Promise
import java.io.File

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
package com.zulipmobile;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.content.ComponentName;
import android.os.Bundle;
import android.content.ComponentName
import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity

/// The activity for when a user shares to Zulip from another app.
///
Expand All @@ -13,7 +12,8 @@ import android.os.Bundle;
class ShareToZulipActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
intent.component = ComponentName(applicationContext.packageName, "com.zulipmobile.MainActivity")
intent.component =
ComponentName(applicationContext.packageName, "com.zulipmobile.MainActivity")
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
finish()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ public void decompress(String input, Promise promise) {
inflater.end();
outputStream.close();
promise.resolve(outputStream.toString("UTF-8"));
} catch(java.io.UnsupportedEncodingException e) {
} catch (java.io.UnsupportedEncodingException e) {
promise.reject("UNSUPPORTED_ENCODING_EXCEPTION", e);
} catch (IOException e) {
promise.reject("IO_EXCEPTION", e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ data class Identity(

/// This user's ID within the server. Useful mainly in the case where
/// the user has multiple accounts in the same org.
val userId: Int?
val userId: Int?,
)

/**
Expand All @@ -35,7 +35,7 @@ data class Sender(
val id: Int,
val email: String,
val avatarURL: URL,
val fullName: String
val fullName: String,
)

/**
Expand All @@ -51,7 +51,7 @@ sealed class Recipient {
* pmUsers: the user IDs of all users in the conversation.
*/
data class GroupPm(val pmUsers: Set<Int>) : Recipient() {
fun getPmUsersString() = pmUsers.sorted().joinToString(separator=",") { it.toString() }
fun getPmUsersString() = pmUsers.sorted().joinToString(separator = ",") { it.toString() }
}

/** A stream message. */
Expand Down Expand Up @@ -102,7 +102,7 @@ data class MessageFcmMessage(
val zulipMessageId: Int,
val recipient: Recipient,
val content: String,
val timeMs: Long
val timeMs: Long,
) : FcmMessage() {

/**
Expand Down Expand Up @@ -139,7 +139,8 @@ data class MessageFcmMessage(
"stream" ->
Recipient.Stream(
data.require("stream"),
data.require("topic"))
data.require("topic")
)
"private" ->
data["pm_users"]?.parseCommaSeparatedInts("pm_users")?.let {
Recipient.GroupPm(it.toSet())
Expand Down Expand Up @@ -169,7 +170,7 @@ data class MessageFcmMessage(

data class RemoveFcmMessage(
val identity: Identity,
val messageIds: Set<Int>
val messageIds: Set<Int>,
) : FcmMessage() {
companion object {
fun fromFcmData(data: Map<String, String>): RemoveFcmMessage {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ fun Context.resourceUrl(resourceId: Int): Uri = with(resources) {
}

private enum class NotificationSound constructor(
val resourceId: Int, val fileDisplayName: String) {
val resourceId: Int, val fileDisplayName: String,
) {
chime2(R.raw.chime2, "Zulip - Low Chime.m4a"),
chime3(R.raw.chime3, "Zulip - Chime.m4a"),
chime4(R.raw.chime4, "Zulip - High Chime.m4a"),
Expand Down Expand Up @@ -81,7 +82,8 @@ private fun ensureInitNotificationSounds(context: Context): Uri {
// First, look to see what notification sounds we've already stored,
// and check against our list of sounds we have.

val soundsTodo = NotificationSound.values().map { it.fileDisplayName to it }.toMap().toMutableMap()
val soundsTodo =
NotificationSound.values().map { it.fileDisplayName to it }.toMap().toMutableMap()
// Query and cursor-loop based on: https://developer.android.com/training/data-storage/shared/media#query-collection
val cursor = resolver.query(
collection,
Expand All @@ -102,7 +104,8 @@ private fun ensureInitNotificationSounds(context: Context): Uri {
// default sound, then use it as the default sound.
val ownerPackageName = cursor.getString(ownerColumn)
if (name == kDefaultNotificationSound.fileDisplayName
&& ownerPackageName == context.packageName) {
&& ownerPackageName == context.packageName
) {
val id = cursor.getLong(idColumn)
defaultSoundUrl = ContentUris.withAppendedId(collection, id)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,21 @@
package com.zulipmobile.notifications

import android.app.Notification
import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.media.AudioAttributes
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.provider.Settings
import android.util.Log
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
import androidx.core.app.Person
import androidx.core.graphics.drawable.IconCompat
import com.zulipmobile.MainActivity
import com.zulipmobile.BuildConfig
import com.zulipmobile.MainActivity
import com.zulipmobile.R
import com.zulipmobile.ZLog
import java.io.IOException
Expand Down Expand Up @@ -146,7 +142,8 @@ private fun removeNotification(context: Context, fcmMessage: RemoveFcmMessage) {
if (fcmMessage.messageIds.contains(lastMessageId)) {
// The latest Zulip message in this conversation was read.
// That's our cue to cancel the notification for the conversation.
NotificationManagerCompat.from(context).cancel(statusBarNotification.tag, statusBarNotification.id)
NotificationManagerCompat.from(context)
.cancel(statusBarNotification.tag, statusBarNotification.id)
} else {
// This notification is for another conversation that's still unread.
// We won't cancel the summary notification.
Expand Down Expand Up @@ -230,7 +227,8 @@ fun fetchBitmap(url: URL): Bitmap? {

/** Handle a MessageFcmMessage, adding or extending notifications in the UI. */
private fun updateNotification(
context: Context, fcmMessage: MessageFcmMessage) {
context: Context, fcmMessage: MessageFcmMessage,
) {
// We have an FCM message telling us about a Zulip message. We'll add
// a message (in the Android NotificationCompat.MessagingStyle.Message sense)
// to the notification for that Zulip message's conversation. We create
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
package com.zulipmobile.notifications;

import android.os.Bundle;
import androidx.annotation.Nullable;
import android.util.Log;
import com.facebook.react.bridge.*;
import androidx.annotation.Nullable;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.google.firebase.iid.FirebaseInstanceId;

import static com.zulipmobile.notifications.NotificationUiManager.TAG;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

package com.zulipmobile.sharing

import android.content.Intent
import android.content.ContentResolver
import android.content.Intent
import android.net.Uri
import android.provider.OpenableColumns
import android.util.Log
Expand All @@ -18,7 +18,11 @@ import com.zulipmobile.notifications.emit
@JvmField
val TAG = "ShareToZulip"

internal fun handleSend(intent: Intent, reactContext: ReactContext?, contentResolver: ContentResolver) {
internal fun handleSend(
intent: Intent,
reactContext: ReactContext?,
contentResolver: ContentResolver,
) {
val params: WritableMap = try {
getParamsFromIntent(intent, contentResolver)
} catch (e: ShareParamsParseException) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ package com.zulipmobile.sharing

import com.facebook.react.bridge.*

internal class SharingModule(reactContext: ReactApplicationContext)
: ReactContextBaseJavaModule(reactContext) {
internal class SharingModule(reactContext: ReactApplicationContext) :
ReactContextBaseJavaModule(reactContext) {

override fun getName(): String {
return "Sharing"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ import com.facebook.react.bridge.NativeModule
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.uimanager.ViewManager

import java.util.ArrayList

class SharingPackage : ReactPackage {
override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> {
return emptyList()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,12 +55,13 @@ class FcmMessageTest : FcmMessageTestBase() {
class RecipientTest : FcmMessageTestBase() {
@Test
fun `GroupPm#getPmUsersString gives the correct string`() {
expect.that(Recipient.GroupPm(pmUsers = setOf(123,234,345)).getPmUsersString())
expect.that(Recipient.GroupPm(pmUsers = setOf(123, 234, 345)).getPmUsersString())
.isEqualTo("123,234,345")
}

@Test
fun `GroupPm#getPmUsersString correctly reorders user ids`() {
expect.that(Recipient.GroupPm(pmUsers = setOf(234,123,23,345)).getPmUsersString())
expect.that(Recipient.GroupPm(pmUsers = setOf(234, 123, 23, 345)).getPmUsersString())
.isEqualTo("23,123,234,345")
}
}
Expand Down