Clean files

This commit is contained in:
ganfra 2020-05-29 19:03:54 +02:00
parent 64cfd4d81a
commit 959b679086
31 changed files with 89 additions and 102 deletions

View file

@ -154,7 +154,12 @@ class RxSession(private val session: Session) {
}
}
fun liveRoomWidgets(roomId: String, widgetId: QueryStringValue, widgetTypes: Set<String>? = null, excludedTypes: Set<String>? = null): Observable<List<Widget>> {
fun liveRoomWidgets(
roomId: String,
widgetId: QueryStringValue,
widgetTypes: Set<String>? = null,
excludedTypes: Set<String>? = null
): Observable<List<Widget>> {
return session.widgetService().getRoomWidgetsLive(roomId, widgetId, widgetTypes, excludedTypes).asObservable()
.startWithCallable {
session.widgetService().getRoomWidgets(roomId, widgetId, widgetTypes, excludedTypes)

View file

@ -18,21 +18,20 @@ package im.vector.matrix.android.api.session.integrationmanager
import im.vector.matrix.android.api.MatrixCallback
import im.vector.matrix.android.api.util.Cancelable
import im.vector.matrix.android.internal.session.integrationmanager.IntegrationManager
interface IntegrationManagerService {
interface Listener {
fun onIsEnabledChanged(enabled: Boolean) {
//No-op
// No-op
}
fun onConfigurationChanged(configs: List<IntegrationManagerConfig>) {
//No-op
// No-op
}
fun onWidgetPermissionsChanged(widgets: Map<String, Boolean>) {
//No-op
// No-op
}
}

View file

@ -27,5 +27,4 @@ interface WidgetURLFormatter {
forceFetchScalarToken: Boolean = false,
bypassWhitelist: Boolean
): String
}

View file

@ -18,7 +18,6 @@ package im.vector.matrix.android.api.session.widgets.model
import im.vector.matrix.android.api.session.events.model.Event
import im.vector.matrix.android.api.session.room.sender.SenderInfo
import im.vector.matrix.android.api.session.widgets.model.WidgetContent
data class Widget(
val widgetContent: WidgetContent,
@ -34,4 +33,3 @@ data class Widget(
val name = widgetContent.getHumanName()
}

View file

@ -34,7 +34,7 @@ sealed class WidgetType(open val preferred: String, open val legacy: String) {
return type == preferred || type == legacy
}
fun values(): Set<String>{
fun values(): Set<String> {
return setOf(preferred, legacy)
}

View file

@ -25,5 +25,4 @@ internal open class ScalarTokenEntity(
) : RealmObject() {
companion object
}

View file

@ -32,7 +32,6 @@ internal class IntegrationManagerConfigExtractor @Inject constructor() {
if (apiUrl != null
&& apiUrl.startsWith("https://")
&& uiUrl!!.startsWith("https://")) {
return WellknownIntegrationManagerConfigEntity(
apiUrl = apiUrl,
uiUrl = uiUrl

View file

@ -20,7 +20,6 @@ import im.vector.matrix.android.api.pushrules.ContainsDisplayNameCondition
import im.vector.matrix.android.api.pushrules.EventMatchCondition
import im.vector.matrix.android.api.pushrules.RoomMemberCountCondition
import im.vector.matrix.android.api.pushrules.SenderNotificationPermissionCondition
import im.vector.matrix.android.api.query.QueryStringValue
import im.vector.matrix.android.api.session.events.model.Event
import im.vector.matrix.android.api.session.events.model.EventType
import im.vector.matrix.android.api.session.events.model.toModel

View file

@ -57,7 +57,6 @@ import im.vector.matrix.android.api.session.room.model.relation.RelationDefaultC
import im.vector.matrix.android.api.session.room.model.relation.ReplyToContent
import im.vector.matrix.android.api.session.room.timeline.TimelineEvent
import im.vector.matrix.android.api.session.room.timeline.getLastMessageContent
import im.vector.matrix.android.api.util.JsonDict
import im.vector.matrix.android.internal.di.UserId
import im.vector.matrix.android.internal.extensions.subStringBetween
import im.vector.matrix.android.internal.session.content.ThumbnailExtractor

View file

@ -19,7 +19,6 @@ package im.vector.matrix.android.internal.session.widgets
import com.zhuinden.monarchy.Monarchy
import im.vector.matrix.android.api.session.events.model.Content
import im.vector.matrix.android.api.session.events.model.EventType
import im.vector.matrix.android.api.session.widgets.WidgetService
import im.vector.matrix.android.internal.database.awaitNotEmptyResult
import im.vector.matrix.android.internal.database.model.CurrentStateEventEntity
import im.vector.matrix.android.internal.database.model.CurrentStateEventEntityFields

View file

@ -30,7 +30,8 @@ import java.util.HashMap
import javax.inject.Inject
internal class DefaultWidgetPostAPIMediator @Inject constructor(private val moshi: Moshi,
private val widgetPostMessageAPIProvider: WidgetPostMessageAPIProvider) : WidgetPostAPIMediator {
private val widgetPostMessageAPIProvider: WidgetPostMessageAPIProvider)
: WidgetPostAPIMediator {
private val jsonAdapter = moshi.adapter<JsonDict>(JSON_DICT_PARAMETERIZED_TYPE)

View file

@ -29,7 +29,8 @@ import javax.inject.Inject
internal class DefaultWidgetService @Inject constructor(private val widgetManager: WidgetManager,
private val widgetURLFormatter: WidgetURLFormatter,
private val widgetPostAPIMediator: WidgetPostAPIMediator) : WidgetService {
private val widgetPostAPIMediator: WidgetPostAPIMediator)
: WidgetService {
override fun getWidgetURLFormatter(): WidgetURLFormatter {
return widgetURLFormatter
@ -39,27 +40,52 @@ internal class DefaultWidgetService @Inject constructor(private val widgetManage
return widgetPostAPIMediator
}
override fun getRoomWidgets(roomId: String, widgetId: QueryStringValue, widgetTypes: Set<String>?, excludedTypes: Set<String>?): List<Widget> {
override fun getRoomWidgets(
roomId: String,
widgetId: QueryStringValue,
widgetTypes: Set<String>?,
excludedTypes: Set<String>?
): List<Widget> {
return widgetManager.getRoomWidgets(roomId, widgetId, widgetTypes, excludedTypes)
}
override fun getRoomWidgetsLive(roomId: String, widgetId: QueryStringValue, widgetTypes: Set<String>?, excludedTypes: Set<String>?): LiveData<List<Widget>> {
override fun getRoomWidgetsLive(
roomId: String,
widgetId: QueryStringValue,
widgetTypes: Set<String>?,
excludedTypes: Set<String>?
): LiveData<List<Widget>> {
return widgetManager.getRoomWidgetsLive(roomId, widgetId, widgetTypes, excludedTypes)
}
override fun getUserWidgetsLive(widgetTypes: Set<String>?, excludedTypes: Set<String>?): LiveData<List<Widget>> {
override fun getUserWidgetsLive(
widgetTypes: Set<String>?,
excludedTypes: Set<String>?
): LiveData<List<Widget>> {
return widgetManager.getUserWidgetsLive(widgetTypes, excludedTypes)
}
override fun getUserWidgets(widgetTypes: Set<String>?, excludedTypes: Set<String>?): List<Widget> {
override fun getUserWidgets(
widgetTypes: Set<String>?,
excludedTypes: Set<String>?
): List<Widget> {
return widgetManager.getUserWidgets(widgetTypes, excludedTypes)
}
override fun createRoomWidget(roomId: String, widgetId: String, content: Content, callback: MatrixCallback<Widget>): Cancelable {
override fun createRoomWidget(
roomId: String,
widgetId: String,
content: Content,
callback: MatrixCallback<Widget>
): Cancelable {
return widgetManager.createRoomWidget(roomId, widgetId, content, callback)
}
override fun destroyRoomWidget(roomId: String, widgetId: String, callback: MatrixCallback<Unit>): Cancelable {
override fun destroyRoomWidget(
roomId: String,
widgetId: String,
callback: MatrixCallback<Unit>
): Cancelable {
return widgetManager.destroyRoomWidget(roomId, widgetId, callback)
}

View file

@ -113,5 +113,3 @@ internal class DefaultWidgetURLFormatter @Inject constructor(private val integra
return this
}
}

View file

@ -75,7 +75,11 @@ internal class WidgetManager @Inject constructor(private val integrationManager:
excludedTypes: Set<String>? = null
): LiveData<List<Widget>> {
// Get all im.vector.modular.widgets state events in the room
val liveWidgetEvents = stateEventDataSource.getStateEventsLive(roomId, setOf(EventType.STATE_ROOM_WIDGET, EventType.STATE_ROOM_WIDGET_LEGACY), widgetId)
val liveWidgetEvents = stateEventDataSource.getStateEventsLive(
roomId = roomId,
eventTypes = setOf(EventType.STATE_ROOM_WIDGET, EventType.STATE_ROOM_WIDGET_LEGACY),
stateKey = widgetId
)
return Transformations.map(liveWidgetEvents) { widgetEvents ->
widgetEvents.mapEventsToWidgets(widgetTypes, excludedTypes)
}
@ -88,7 +92,11 @@ internal class WidgetManager @Inject constructor(private val integrationManager:
excludedTypes: Set<String>? = null
): List<Widget> {
// Get all im.vector.modular.widgets state events in the room
val widgetEvents: List<Event> = stateEventDataSource.getStateEvents(roomId, setOf(EventType.STATE_ROOM_WIDGET, EventType.STATE_ROOM_WIDGET_LEGACY), widgetId)
val widgetEvents: List<Event> = stateEventDataSource.getStateEvents(
roomId = roomId,
eventTypes = setOf(EventType.STATE_ROOM_WIDGET, EventType.STATE_ROOM_WIDGET_LEGACY),
stateKey = widgetId
)
return widgetEvents.mapEventsToWidgets(widgetTypes, excludedTypes)
}
@ -183,7 +191,11 @@ internal class WidgetManager @Inject constructor(private val integrationManager:
}
fun hasPermissionsToHandleWidgets(roomId: String): Boolean {
val powerLevelsEvent = stateEventDataSource.getStateEvent(roomId, EventType.STATE_ROOM_POWER_LEVELS, QueryStringValue.NoCondition)
val powerLevelsEvent = stateEventDataSource.getStateEvent(
roomId = roomId,
eventType = EventType.STATE_ROOM_POWER_LEVELS,
stateKey = QueryStringValue.NoCondition
)
val powerLevelsContent = powerLevelsEvent?.content?.toModel<PowerLevelsContent>() ?: return false
return PowerLevelsHelper(powerLevelsContent).isAllowedToSend(true, null, userId)
}

View file

@ -34,4 +34,4 @@ internal interface WidgetsAPI {
@GET("account")
fun validateToken(@Query("scalar_token") scalarToken: String?, @Query("v") version: String?): Call<Unit>
}
}

View file

@ -516,5 +516,4 @@ interface FragmentModule {
@IntoMap
@FragmentKey(WidgetFragment::class)
fun bindWidgetFragment(fragment: WidgetFragment): Fragment
}

View file

@ -17,7 +17,6 @@
package im.vector.riotx.features.attachments
import im.vector.matrix.android.api.session.content.ContentAttachmentData
import im.vector.matrix.android.api.session.room.model.message.MessageStickerContent
import im.vector.riotx.multipicker.entity.MultiPickerAudioType
import im.vector.riotx.multipicker.entity.MultiPickerBaseType
import im.vector.riotx.multipicker.entity.MultiPickerContactType

View file

@ -243,7 +243,6 @@ class DefaultNavigator @Inject constructor(
context.startActivity(WidgetActivity.newIntent(context, widgetArgs))
}
override fun openImageViewer(activity: Activity, mediaData: ImageContentRenderer.Data, view: View, options: ((MutableList<Pair<View, String>>) -> Unit)?) {
val intent = ImageMediaViewerActivity.newIntent(activity, mediaData, ViewCompat.getTransitionName(view))
val pairs = ArrayList<Pair<View, String>>()
@ -277,4 +276,3 @@ class DefaultNavigator @Inject constructor(
}
}
}

View file

@ -94,5 +94,4 @@ interface Navigator {
fun openImageViewer(activity: Activity, mediaData: ImageContentRenderer.Data, view: View, options: ((MutableList<Pair<View, String>>) -> Unit)?)
fun openVideoViewer(activity: Activity, mediaData: VideoContentRenderer.Data)
}

View file

@ -213,7 +213,7 @@ class VectorSettingsGeneralFragment : VectorSettingsBaseFragment() {
(findPreference(VectorPreferences.SETTINGS_ALLOW_INTEGRATIONS_KEY) as? VectorSwitchPreference)?.let {
it.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue ->
//Disable it while updating the state, will be re-enabled by the account data listener.
// Disable it while updating the state, will be re-enabled by the account data listener.
it.isEnabled = false
session.integrationManagerService().setIntegrationEnabled(newValue as Boolean, NoOpMatrixCallback())
true

View file

@ -23,8 +23,8 @@ interface WebViewEventListener {
*
* @param url The url about to be rendered.
*/
fun pageWillStart(url: String){
//NO-OP
fun pageWillStart(url: String) {
// NO-OP
}
/**
@ -32,8 +32,8 @@ interface WebViewEventListener {
*
* @param url The rendering url.
*/
fun onPageStarted(url: String){
//NO-OP
fun onPageStarted(url: String) {
// NO-OP
}
/**
@ -41,8 +41,8 @@ interface WebViewEventListener {
*
* @param url The finished url.
*/
fun onPageFinished(url: String){
//NO-OP
fun onPageFinished(url: String) {
// NO-OP
}
/**
@ -52,8 +52,8 @@ interface WebViewEventListener {
* @param errorCode The error code.
* @param description The error description.
*/
fun onPageError(url: String, errorCode: Int, description: String){
//NO-OP
fun onPageError(url: String, errorCode: Int, description: String) {
// NO-OP
}
/**
@ -63,8 +63,8 @@ interface WebViewEventListener {
* @param errorCode The error code.
* @param description The error description.
*/
fun onHttpError(url: String, errorCode: Int, description: String){
//NO-OP
fun onHttpError(url: String, errorCode: Int, description: String) {
// NO-OP
}
/**
@ -73,7 +73,7 @@ interface WebViewEventListener {
* @param url The url about to be rendered.
* @return true if the method needs to manage some custom handling
*/
fun shouldOverrideUrlLoading(url: String): Boolean{
fun shouldOverrideUrlLoading(url: String): Boolean {
return false
}
}

View file

@ -61,7 +61,7 @@ class WidgetArgsBuilder @Inject constructor(private val sessionHolder: ActiveSes
fun buildRoomWidgetArgs(roomId: String, widget: Widget): WidgetArgs {
val widgetId = widget.widgetId
val baseUrl = widget.computedUrl?: throw IllegalStateException()
val baseUrl = widget.computedUrl ?: throw IllegalStateException()
return WidgetArgs(
baseUrl = baseUrl,
kind = WidgetKind.ROOM,

View file

@ -171,7 +171,7 @@ class WidgetFragment @Inject constructor() : VectorBaseFragment(), WebViewEventL
Timber.v("Invalidate state: $state")
when (state.status) {
WidgetStatus.UNKNOWN -> {
//Hide all?
// Hide all?
widgetWebView.isVisible = false
}
WidgetStatus.WIDGET_NOT_ALLOWED -> {
@ -211,7 +211,7 @@ class WidgetFragment @Inject constructor() : VectorBaseFragment(), WebViewEventL
}
}
is Fail -> {
//we need to show Error
// we need to show Error
widgetWebView.isInvisible = true
widgetProgressBar.isVisible = false
setStateError(state.formattedURL.error.message)

View file

@ -357,7 +357,7 @@ class WidgetPostAPIHandler @AssistedInject constructor(@Assisted private val roo
val level = eventData["level"] as Int
if (level >= 0) {
// TODO
//room.updateUserPowerLevels(userId, level, WidgetApiCallback(eventData, description))
// room.updateUserPowerLevels(userId, level, WidgetApiCallback(eventData, description))
} else {
Timber.e("## setBotPower() : Power level must be positive integer.")
widgetPostAPIMediator.sendError(stringProvider.getString(R.string.widget_integration_positive_power_level), eventData)
@ -458,5 +458,3 @@ class WidgetPostAPIHandler @AssistedInject constructor(@Assisted private val roo
return WidgetAPICallback(widgetPostAPIMediator, eventData, stringProvider)
}
}

View file

@ -178,7 +178,6 @@ class WidgetViewModel @AssistedInject constructor(@Assisted val initialState: Wi
} catch (failure: Throwable) {
_viewEvents.post(WidgetViewEvents.Failure(failure))
}
}
}
@ -191,7 +190,10 @@ class WidgetViewModel @AssistedInject constructor(@Assisted val initialState: Wi
setWidgetStatus(WidgetStatus.WIDGET_NOT_ALLOWED)
return
}
val roomWidget = widgetService.getRoomWidgets(initialState.roomId, widgetId = QueryStringValue.Equals(widgetId, QueryStringValue.Case.SENSITIVE)).firstOrNull()
val roomWidget = widgetService.getRoomWidgets(
roomId = initialState.roomId,
widgetId = QueryStringValue.Equals(widgetId, QueryStringValue.Case.SENSITIVE)
).firstOrNull()
if (roomWidget == null) {
setWidgetStatus(WidgetStatus.WIDGET_NOT_ALLOWED)
return

View file

@ -103,14 +103,14 @@ class RoomWidgetPermissionBottomSheet : VectorBaseBottomSheetDialogFragment() {
@OnClick(R.id.bottom_sheet_widget_permission_decline_button)
fun doDecline() {
viewModel.handle(RoomWidgetPermissionActions.BlockWidget)
//optimistic dismiss
// optimistic dismiss
dismiss()
}
@OnClick(R.id.bottom_sheet_widget_permission_continue_button)
fun doAccept() {
viewModel.handle(RoomWidgetPermissionActions.AllowWidget)
//optimistic dismiss
// optimistic dismiss
dismiss()
}

View file

@ -55,8 +55,8 @@ class RoomWidgetPermissionViewModel @AssistedInject constructor(@Assisted val in
} catch (e: Throwable) {
null
}
//TODO check from widget urls the perms that should be shown?
//For now put all
// TODO check from widget urls the perms that should be shown?
// For now put all
val infoShared = listOf(
R.string.room_widget_permission_display_name,
R.string.room_widget_permission_avatar_url,
@ -91,7 +91,7 @@ class RoomWidgetPermissionViewModel @AssistedInject constructor(@Assisted val in
if (state.permissionData()?.isWebviewWidget.orFalse()) {
WidgetPermissionsHelper(integrationManagerService, widgetService).changePermission(state.roomId, widgetId, false)
} else {
//TODO JITSI
// TODO JITSI
}
} catch (failure: Throwable) {
Timber.v("Failure revoking widget: ${state.widgetId}")
@ -109,7 +109,7 @@ class RoomWidgetPermissionViewModel @AssistedInject constructor(@Assisted val in
if (state.permissionData()?.isWebviewWidget.orFalse()) {
WidgetPermissionsHelper(integrationManagerService, widgetService).changePermission(state.roomId, widgetId, true)
} else {
//TODO JITSI
// TODO JITSI
}
} catch (failure: Throwable) {
Timber.v("Failure allowing widget: ${state.widgetId}")

View file

@ -40,5 +40,3 @@ data class RoomWidgetPermissionViewState(
val widgetDomain: String? = null
)
}

View file

@ -32,12 +32,11 @@ object WebviewPermissionUtils {
AlertDialog.Builder(context)
.setTitle(title)
.setMultiChoiceItems(
request.resources.map { webPermissionToHumanReadable(it, context) }.toTypedArray()
, null
request.resources.map { webPermissionToHumanReadable(it, context) }.toTypedArray(), null
) { _, which, isChecked ->
allowedPermissions[which] = allowedPermissions[which].first to isChecked
}
.setPositiveButton(R.string.room_widget_resource_grant_permission) { _, _->
.setPositiveButton(R.string.room_widget_resource_grant_permission) { _, _ ->
request.grant(allowedPermissions.mapNotNull { perm ->
perm.first.takeIf { perm.second }
}.toTypedArray())
@ -56,5 +55,4 @@ object WebviewPermissionUtils {
else -> permission
}
}
}

View file

@ -1,19 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rootConstraintLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="AdminWidgetFragment"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -1,18 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/rootConstraintLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="RoomWidgetsFragment"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>