Skip to content

Commit 4c6c5c7

Browse files
committed
code cleanup
Signed-off-by: alperozturk <[email protected]>
1 parent 5ba1721 commit 4c6c5c7

File tree

4 files changed

+65
-68
lines changed

4 files changed

+65
-68
lines changed

app/src/main/java/com/nextcloud/ui/composeActivity/ComposeActivity.kt

Lines changed: 23 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
*/
88
package com.nextcloud.ui.composeActivity
99

10-
import android.annotation.SuppressLint
1110
import android.os.Bundle
1211
import android.view.MenuItem
1312
import android.view.View
@@ -19,7 +18,6 @@ import androidx.compose.runtime.getValue
1918
import androidx.compose.runtime.mutableStateOf
2019
import androidx.compose.runtime.remember
2120
import androidx.compose.runtime.setValue
22-
import com.nextcloud.android.lib.resources.clientintegration.ClientIntegrationUI
2321
import com.nextcloud.client.assistant.AssistantScreen
2422
import com.nextcloud.client.assistant.AssistantViewModel
2523
import com.nextcloud.client.assistant.conversation.ConversationViewModel
@@ -29,6 +27,7 @@ import com.nextcloud.client.assistant.repository.remote.AssistantRemoteRepositor
2927
import com.nextcloud.client.database.NextcloudDatabase
3028
import com.nextcloud.common.NextcloudClient
3129
import com.nextcloud.ui.ClientIntegrationScreen
30+
import com.nextcloud.utils.extensions.getParcelableArgument
3231
import com.owncloud.android.R
3332
import com.owncloud.android.databinding.ActivityComposeBinding
3433
import com.owncloud.android.ui.activity.DrawerActivity
@@ -39,42 +38,44 @@ class ComposeActivity : DrawerActivity() {
3938

4039
companion object {
4140
const val DESTINATION = "DESTINATION"
42-
const val TITLE = "TITLE"
43-
const val TITLE_STRING = "TITLE_STRING"
44-
const val ARGS_CLIENT_INTEGRATION_UI = "ARGS_ClIENT_INTEGRATION_UI"
4541
}
4642

4743
override fun onCreate(savedInstanceState: Bundle?) {
4844
super.onCreate(savedInstanceState)
4945
binding = ActivityComposeBinding.inflate(layoutInflater)
5046
setContentView(binding.root)
5147

52-
val destinationId = intent.getIntExtra(DESTINATION, -1)
53-
val titleId = intent.getIntExtra(TITLE, R.string.empty)
48+
val destination =
49+
intent.getParcelableArgument(DESTINATION, ComposeDestination::class.java) ?: throw IllegalArgumentException(
50+
"destination is not exists"
51+
)
5452

55-
if (destinationId == 0) {
56-
setupDrawer()
57-
58-
setupToolbarShowOnlyMenuButtonAndTitle(getString(titleId)) {
59-
openDrawer()
60-
}
61-
} else {
62-
setSupportActionBar(null)
63-
if (findViewById<View?>(R.id.appbar) != null) {
64-
findViewById<View?>(R.id.appbar)?.visibility = View.GONE
65-
}
66-
}
53+
setupActivityUIFor(destination)
6754

6855
binding.composeView.setContent {
6956
MaterialTheme(
7057
colorScheme = viewThemeUtils.getColorScheme(this),
7158
content = {
72-
Content(ComposeDestination.fromId(destinationId))
59+
Content(destination)
7360
}
7461
)
7562
}
7663
}
7764

65+
private fun setupActivityUIFor(destination: ComposeDestination) {
66+
if (destination is ComposeDestination.AssistantScreen) {
67+
setupDrawer()
68+
setupToolbarShowOnlyMenuButtonAndTitle(destination.title) {
69+
openDrawer()
70+
}
71+
} else {
72+
setSupportActionBar(null)
73+
findViewById<View?>(R.id.appbar)?.let {
74+
it.visibility = View.GONE
75+
}
76+
}
77+
}
78+
7879
override fun onOptionsItemSelected(item: MenuItem): Boolean = when (item.itemId) {
7980
android.R.id.home -> {
8081
toggleDrawer()
@@ -83,7 +84,6 @@ class ComposeActivity : DrawerActivity() {
8384
else -> super.onOptionsItemSelected(item)
8485
}
8586

86-
@SuppressLint("CoroutineCreationDuringComposition")
8787
@Composable
8888
private fun Content(destination: ComposeDestination) {
8989
val currentScreen by ComposeNavigation.currentScreen.collectAsState()
@@ -121,12 +121,8 @@ class ComposeActivity : DrawerActivity() {
121121

122122
is ComposeDestination.ClientIntegrationScreen -> {
123123
binding.bottomNavigation.visibility = View.GONE
124-
125-
val clientIntegrationUI: ClientIntegrationUI? = intent.getParcelableExtra(ARGS_CLIENT_INTEGRATION_UI)
126-
127-
clientIntegrationUI?.let {
128-
ClientIntegrationScreen(clientIntegrationUI, nextcloudClient?.baseUri.toString())
129-
}
124+
val integrationScreen = (currentScreen as ComposeDestination.ClientIntegrationScreen)
125+
ClientIntegrationScreen(integrationScreen.data, nextcloudClient?.baseUri.toString())
130126
}
131127

132128
else -> Unit

app/src/main/java/com/nextcloud/ui/composeActivity/ComposeDestination.kt

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,25 @@
77
*/
88
package com.nextcloud.ui.composeActivity
99

10-
sealed class ComposeDestination(val id: Int) {
11-
data class AssistantScreen(val sessionId: Long?) : ComposeDestination(0)
12-
data class ClientIntegrationScreen(val sessionId: Long?) : ComposeDestination(1)
10+
import android.content.Context
11+
import android.os.Parcelable
12+
import com.nextcloud.android.lib.resources.clientintegration.ClientIntegrationUI
13+
import com.owncloud.android.R
14+
import kotlinx.parcelize.Parcelize
15+
16+
@Parcelize
17+
sealed class ComposeDestination(val id: Int) : Parcelable {
18+
@Parcelize
19+
data class AssistantScreen(val title: String, val sessionId: Long?) : ComposeDestination(0)
20+
21+
@Parcelize
22+
data class ClientIntegrationScreen(val title: String, val data: ClientIntegrationUI) : ComposeDestination(1)
1323

1424
companion object {
15-
fun fromId(id: Int): ComposeDestination = when (id) {
16-
0 -> AssistantScreen(null)
17-
1 -> ClientIntegrationScreen(null)
18-
else -> throw IllegalArgumentException("Unknown destination: $id")
19-
}
25+
/**
26+
* Creates a assistant screen without selected chat
27+
*/
28+
fun getAssistantScreen(context: Context): AssistantScreen =
29+
AssistantScreen(context.getString(R.string.assistant_screen_top_bar_title), null)
2030
}
2131
}

app/src/main/java/com/nextcloud/ui/fileactions/ClientIntegration.kt

Lines changed: 16 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,14 @@ import android.content.Context
1111
import android.content.Intent
1212
import android.graphics.Canvas
1313
import android.graphics.drawable.PictureDrawable
14+
import android.os.Bundle
1415
import android.view.LayoutInflater
1516
import android.view.View
1617
import androidx.appcompat.content.res.AppCompatResources
1718
import androidx.core.graphics.createBitmap
1819
import androidx.core.graphics.drawable.toDrawable
1920
import androidx.core.net.toUri
20-
import com.google.gson.Gson
21+
import androidx.lifecycle.lifecycleScope
2122
import com.google.gson.GsonBuilder
2223
import com.google.gson.JsonElement
2324
import com.google.gson.JsonParser
@@ -27,7 +28,6 @@ import com.nextcloud.android.lib.resources.clientintegration.ClientIntegrationUI
2728
import com.nextcloud.android.lib.resources.clientintegration.Element
2829
import com.nextcloud.android.lib.resources.clientintegration.ElementTypeAdapter
2930
import com.nextcloud.android.lib.resources.clientintegration.Endpoint
30-
import com.nextcloud.android.lib.resources.clientintegration.TooltipResponse
3131
import com.nextcloud.client.account.User
3232
import com.nextcloud.common.JSONRequestBody
3333
import com.nextcloud.operations.GetMethod
@@ -44,7 +44,6 @@ import com.owncloud.android.lib.ocs.ServerResponse
4444
import com.owncloud.android.lib.resources.status.Method
4545
import com.owncloud.android.utils.DisplayUtils
4646
import com.owncloud.android.utils.theme.ViewThemeUtils
47-
import kotlinx.coroutines.CoroutineScope
4847
import kotlinx.coroutines.Dispatchers
4948
import kotlinx.coroutines.launch
5049
import kotlinx.coroutines.withContext
@@ -58,7 +57,6 @@ class ClientIntegration(
5857
private var context: Context
5958
) {
6059

61-
// @RequiresApi(Build.VERSION_CODES.Q)
6260
fun inflateClientIntegrationActionView(
6361
endpoint: Endpoint,
6462
layoutInflater: LayoutInflater,
@@ -83,7 +81,7 @@ class ClientIntegration(
8381
text.text = endpoint.name
8482

8583
if (endpoint.icon != null) {
86-
CoroutineScope(Dispatchers.IO).launch {
84+
sheet.lifecycleScope.launch {
8785
val client = OwnCloudClientManagerFactory.getDefaultSingleton()
8886
.getNextcloudClientFor(user.toOwnCloudAccount(), context)
8987

@@ -125,7 +123,7 @@ class ClientIntegration(
125123
}
126124

127125
private fun requestClientIntegration(endpoint: Endpoint, fileId: String, filePath: String) {
128-
CoroutineScope(Dispatchers.IO).launch {
126+
sheet.lifecycleScope.launch {
129127
val client = OwnCloudClientManagerFactory.getDefaultSingleton()
130128
.getNextcloudClientFor(user.toOwnCloudAccount(), context)
131129

@@ -172,14 +170,8 @@ class ClientIntegration(
172170
var output: ClientIntegrationUI?
173171
try {
174172
output = parseClientIntegrationResult(response)
175-
if (output.root != null) {
176-
startClientIntegration(endpoint, output)
177-
} else {
178-
val tooltipResponse = parseTooltipResult(response)
179-
180-
context.showToast(tooltipResponse.tooltip)
181-
}
182-
} catch (e: JsonSyntaxException) {
173+
startClientIntegration(endpoint, output)
174+
} catch (_: JsonSyntaxException) {
183175
if (result == HttpStatus.SC_OK) {
184176
context.showToast(context.resources.getString(R.string.action_triggered))
185177
} else {
@@ -191,12 +183,17 @@ class ClientIntegration(
191183
}
192184

193185
private fun startClientIntegration(endpoint: Endpoint, clientIntegrationUI: ClientIntegrationUI) {
194-
CoroutineScope(Dispatchers.IO).launch {
195-
val composeActivity = Intent(context, ComposeActivity::class.java)
196-
composeActivity.putExtra(ComposeActivity.DESTINATION, ComposeDestination.ClientIntegrationScreen(null).id)
197-
composeActivity.putExtra(ComposeActivity.ARGS_CLIENT_INTEGRATION_UI, clientIntegrationUI)
186+
sheet.lifecycleScope.launch {
187+
val integrationScreen = ComposeDestination.ClientIntegrationScreen(endpoint.name, clientIntegrationUI)
188+
189+
val bundle = Bundle().apply {
190+
putParcelable(ComposeActivity.DESTINATION, integrationScreen)
191+
}
192+
193+
val composeActivity = Intent(context, ComposeActivity::class.java).apply {
194+
putExtras(bundle)
195+
}
198196

199-
composeActivity.putExtra(ComposeActivity.TITLE, endpoint.name)
200197
context.startActivity(composeActivity)
201198
sheet.dismiss()
202199
}
@@ -214,12 +211,4 @@ class ClientIntegration(
214211
.ocs
215212
.data
216213
}
217-
218-
private fun parseTooltipResult(response: String?): TooltipResponse {
219-
val element: JsonElement = JsonParser.parseString(response)
220-
return Gson()
221-
.fromJson(element, object : TypeToken<ServerResponse<TooltipResponse>>() {})
222-
.ocs
223-
.data
224-
}
225214
}

app/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,7 @@ private void showTopBanner(ConstraintLayout banner) {
431431
moreView.setOnClickListener(v -> LinkHelper.INSTANCE.openAppStore("Nextcloud", true, this));
432432
assistantView.setOnClickListener(v -> {
433433
DrawerActivity.menuItemId = Menu.NONE;
434-
startComposeActivity(new ComposeDestination.AssistantScreen(null), R.string.assistant_screen_top_bar_title);
434+
startAssistantScreen();
435435
});
436436
if (getCapabilities() != null && getCapabilities().getAssistant().isTrue()) {
437437
assistantView.setVisibility(View.VISIBLE);
@@ -583,7 +583,7 @@ private void onNavigationItemClicked(final MenuItem menuItem) {
583583
startRecentlyModifiedSearch(menuItem);
584584
} else if (itemId == R.id.nav_assistant) {
585585
resetOnlyPersonalAndOnDevice();
586-
startComposeActivity(new ComposeDestination.AssistantScreen(null), R.string.assistant_screen_top_bar_title);
586+
startAssistantScreen();
587587
} else if (itemId == R.id.nav_groupfolders) {
588588
resetOnlyPersonalAndOnDevice();
589589
Intent intent = new Intent(getApplicationContext(), FileDisplayActivity.class);
@@ -621,7 +621,7 @@ private void handleBottomNavigationViewClicks() {
621621
} else if (menuItemId == R.id.nav_favorites) {
622622
openFavoritesTab();
623623
} else if (menuItemId == R.id.nav_assistant && !(this instanceof ComposeActivity)) {
624-
startComposeActivity(new ComposeDestination.AssistantScreen(null), R.string.assistant_screen_top_bar_title);
624+
startAssistantScreen();
625625
} else if (menuItemId == R.id.nav_gallery) {
626626
openMediaTab(menuItem.getItemId());
627627
}
@@ -648,10 +648,12 @@ private void resetFileDepthAndConfigureMenuItem() {
648648
}
649649
}
650650

651-
private void startComposeActivity(ComposeDestination destination, int titleId) {
651+
private void startAssistantScreen() {
652+
final var destination = ComposeDestination.Companion.getAssistantScreen(this);
652653
Intent composeActivity = new Intent(getApplicationContext(), ComposeActivity.class);
653-
composeActivity.putExtra(ComposeActivity.DESTINATION, destination.getId());
654-
composeActivity.putExtra(ComposeActivity.TITLE, titleId);
654+
final Bundle bundle = new Bundle();
655+
bundle.putParcelable(ComposeActivity.DESTINATION, destination);
656+
composeActivity.putExtras(bundle);
655657
startActivity(composeActivity);
656658
}
657659

0 commit comments

Comments
 (0)