Navigation is now there. Some logos are missing and also file clicking does nothing.

This commit is contained in:
AlbYoda 2025-03-13 16:35:09 +01:00
parent 0a2de2cd06
commit e0e0e973b5
Signed by untrusted user who does not match committer: AlbYoda
GPG key ID: A539D876452F16FF
10 changed files with 421 additions and 201 deletions

View file

@ -6,15 +6,13 @@ import android.os.Bundle
import android.util.Log
import android.widget.Toast
import androidx.activity.ComponentActivity
import androidx.activity.addCallback
import androidx.activity.compose.setContent
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.core.net.toUri
import androidx.lifecycle.LiveData
import androidx.navigation.compose.rememberNavController
import com.bbc.denadrive.apihandlers.DriveResponseBody
import com.bbc.denadrive.apihandlers.ResponsesHandler
import com.bbc.denadrive.apihandlers.makeDriveApiCall
import com.bbc.denadrive.home.ScaffoldWithSidebar
@ -30,17 +28,60 @@ import net.openid.appauth.ResponseTypeValues
class MainActivity : ComponentActivity() {
private lateinit var responsesHandler: ResponsesHandler
private var currentPath: String = "root"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val authPersistence = AuthStatePersistence
val authState = authPersistence.retrieveAuthState(this)
responsesHandler = ResponsesHandler()
onBackPressedDispatcher.addCallback(this) {
if (currentPath != "root") makeNewRequest("", false)
else finish()
}
makeNewRequest(parentFolder = "root", forward = true, isFirstRequest = true)
setContent {
ScaffoldWithSidebar(
responsesHandler,
{ name ->
Toast.makeText(
this,
"You pressed the file $name",
Toast.LENGTH_SHORT
).show()
},
{ parent -> makeNewRequest(parent, true) }) {
}
}
}
private fun makeNewRequest(
parentFolder: String, forward: Boolean, isFirstRequest: Boolean = false
) {
responsesHandler.lastResponseBody.value = null
val authPersistence = AuthStatePersistence
val authState = authPersistence.retrieveAuthState(this)
val actualFolder: String
if (!isFirstRequest) {
if (forward) {
currentPath += "/$parentFolder"
actualFolder = parentFolder
} else {
currentPath = currentPath.substringBeforeLast("/")
actualFolder =
if (currentPath != "root") currentPath.substringAfterLast("/")
else "root"
}
} else actualFolder = parentFolder
// val path = if (parentFolder != "root") "root/$parentFolder" else parentFolder
Log.e("WAAAT", "makeNewRequest: $actualFolder")
Log.e("WAAAT", "makeNewRequest: $currentPath")
val myUrl = "https://www.googleapis.com/drive/v3/files?trashed=false&orderBy=folder"
makeDriveApiCall(this, authState, myUrl, "root") {
response, exception ->
makeDriveApiCall(this, authState, myUrl, actualFolder) {
response, exception ->
if (exception != null) {
Log.e("ECCOLO", "${exception.cause}")
Log.e("ECCOLO", "${exception.message}")
@ -51,37 +92,6 @@ class MainActivity : ComponentActivity() {
}
}
authPersistence.putAuthState(this, authState)
setContent {
val navController = rememberNavController()
ScaffoldWithSidebar(navController, responsesHandler) {
Log.e("LETTINGYOUKNOW", "authstate: ${authState.jsonSerializeString()}")
}
}
}
private fun handleAuthStuff() {
val serviceConfig = retrieveAuthServConf()
// val authState = AuthState(serviceConfig)
val authRequestBuilder = AuthorizationRequest.Builder(
serviceConfig,
"722393551256-pum20gbvb1es723kt3ek9lmtrdimr0os.apps.googleusercontent.com",
ResponseTypeValues.CODE,
"com.bbc.denadrive:/oauth2redirect".toUri()
)
val authRequest = authRequestBuilder
.setScope("https://www.googleapis.com/auth/drive")
.build()
val authService = AuthorizationService(this)
authService.performAuthorizationRequest(
authRequest,
PendingIntent.getActivity(this, 0, Intent(this,
TestActivity::class.java), PendingIntent.FLAG_MUTABLE),
PendingIntent.getActivity(this, 0, Intent(this,
TestBah::class.java), PendingIntent.FLAG_MUTABLE)
)
}
override fun onNewIntent(intent: Intent) {

View file

@ -1,32 +1,34 @@
package com.bbc.denadrive
import androidx.compose.runtime.Composable
import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel
import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import com.bbc.denadrive.apihandlers.DriveResponseBody
import com.bbc.denadrive.apihandlers.ResponsesHandler
import com.bbc.denadrive.home.DetailsScreen
import com.bbc.denadrive.home.HomeScreen
import com.bbc.denadrive.home.MyListVisualizer
@Composable
fun NavigationGraph(navController: NavHostController, responsesHandler: ResponsesHandler) {
// Create a NavHost that defines the navigation graph
NavHost(navController = navController, startDestination = "prova") {
// Define the home screen destination
composable("home") { HomeScreen(navController) }
// Define the details screen destination with an argument
composable("details/{itemId}") { backStackEntry ->
// Retrieve the argument from the back stack entry
val itemId = backStackEntry.arguments?.getString("itemId")
// Pass the argument to the DetailsScreen
DetailsScreen(itemId, navController)
}
composable("prova") { MyListVisualizer(responsesHandler) }
}
}
//@Composable
//fun NavigationGraph(navController: NavHostController,
// responsesHandler: ResponsesHandler,
// onFileClick: (String) -> Unit,
// onFolderClick: (String) -> Unit) {
// // Create a NavHost that defines the navigation graph
// NavHost(navController = navController, startDestination = "path/root") {
// // Define the home screen destination
// composable("home") { HomeScreen(navController) }
//
// // Define the details screen destination with an argument
// composable("details/{itemId}") { backStackEntry ->
// // Retrieve the argument from the back stack entry
// val itemId = backStackEntry.arguments?.getString("itemId")
// // Pass the argument to the DetailsScreen
// DetailsScreen(itemId, navController)
// }
//
// composable("path/{parentFolder}") { backStackEntry ->
// val parentFolder = backStackEntry.arguments!!.getString("parentFolder")
// onFolderClick(parentFolder!!)
// MyListVisualizer(responsesHandler, onFileClick, onFolderClick)
// }
// }
//}

View file

@ -9,7 +9,7 @@ data class DriveResponseBody(
val incompleteSearch: Boolean,
val files: List<MyFile>
) {
fun toList(): List<String> {
return files.map { it.name }
fun toList(): List<MyFile> {
return files
}
}

View file

@ -1,18 +1,13 @@
package com.bbc.denadrive.apihandlers
import android.util.Log
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf
//import androidx.lifecycle.LiveData
//import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import kotlinx.serialization.SerializationException
import kotlinx.serialization.json.Json
class ResponsesHandler: ViewModel() {
// private val _lastResponseBody = MutableLiveData<DriveResponseBody?>(null)
// val lastResponseBody: LiveData<DriveResponseBody?> get() = _lastResponseBody
val lastResponseBody: MutableState<DriveResponseBody?> = mutableStateOf(null)
private var lastResponse: String = ""
@ -23,23 +18,17 @@ class ResponsesHandler: ViewModel() {
if (isComplete && response != null) {
respBuilder = StringBuilder(response)
updateCompleteness()
Log.e("OLE", "newResponseArrived: $response")
}
else if (response != null) {
respBuilder.append(response)
Log.e("OLE2", "newResponseArrived: $response")
updateCompleteness()
}
}
private fun checkForCompleteness(): Pair<Boolean, DriveResponseBody?> {
return try {
Log.e("ASSURDO", "newResponseArrived: $respBuilder")
Pair(true, Json.decodeFromString<DriveResponseBody>(respBuilder.toString()))
} catch (e: SerializationException) {
Log.e("EDECCOCE", "newResponseArrived: $respBuilder")
Log.e("EDECCOCE", "errore: ${e.cause}")
Log.e("EDECCOCE", "errore: ${e.message}")
Pair(false, null)
}
}
@ -49,7 +38,6 @@ class ResponsesHandler: ViewModel() {
isComplete = pair.first
if (isComplete) {
lastResponse = respBuilder.toString()
Log.e("NONSOCHESUCCEDA", "${pair.second}", )
lastResponseBody.value = pair.second
}
}

View file

@ -1,7 +1,5 @@
package com.bbc.denadrive.home
import android.media.tv.TvContract.Channels.Logo
import android.util.Log
import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.foundation.background
import androidx.compose.material3.Button
@ -28,31 +26,19 @@ import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.foundation.Image
import androidx.compose.foundation.clickable
import androidx.compose.ui.res.painterResource
import com.bbc.denadrive.NavigationGraph
import com.bbc.denadrive.R
import com.bbc.denadrive.apihandlers.MyFile
import com.bbc.denadrive.apihandlers.ResponsesHandler
@Composable
fun HomeScreen(navController: NavHostController) {
Button(onClick = { navController.navigate("details/1") }) {
Text("Go to Details")
}
}
@Composable
fun DetailsScreen(itemId: String?, navController: NavHostController) {
Text(text = "Details for item: $itemId")
}
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun ScaffoldWithSidebar(
navController: NavHostController,
responsesHandler: ResponsesHandler,
onFileClick: (String) -> Unit,
onFolderClick: (String) -> Unit,
doIt: () -> Unit,
// toBeDisplayed: @Composable () -> Unit
) {
// State to control the drawer
val drawerState = rememberDrawerState(initialValue = DrawerValue.Closed)
@ -81,7 +67,7 @@ fun ScaffoldWithSidebar(
Scaffold(
topBar = {
TopAppBar(
title = { Text("My App") },
title = { Text("DeNa Drive") },
navigationIcon = {
IconButton(onClick = {
scope.launch {
@ -106,11 +92,13 @@ fun ScaffoldWithSidebar(
.fillMaxSize()
.padding(innerPadding)
.padding(16.dp),
contentAlignment = Alignment.TopCenter,
contentAlignment = Alignment.Center,
) {
NavigationGraph(navController, responsesHandler)
// toBeDisplayed()
// Text("Main Content", fontSize = 24.sp)
MyListVisualizer(
responsesHandler = responsesHandler,
onFileClick = onFileClick,
onFolderClick = onFolderClick
)
}
}
)
@ -153,56 +141,70 @@ fun RectangularButton(
}
@Composable
fun MyListVisualizer(responsesHandler: ResponsesHandler) {
Log.e("CHECKING", "MyListVisualizer: REDRAWN", )
val fileList = mutableListOf<String>()
fun MyListVisualizer(responsesHandler: ResponsesHandler,
onFileClick: (String) -> Unit,
onFolderClick: (String) -> Unit) {
val fileList = mutableListOf<MyFile>()
if (responsesHandler.lastResponseBody.value == null) {
fileList.clear()
fileList.addAll(
listOf("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n",
"o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z")
)
Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
Text(text = "Loading...", style = MaterialTheme.typography.titleLarge)
}
} else {
fileList.clear()
fileList.addAll(
responsesHandler.lastResponseBody.value!!.toList()
)
}
// val fileList = driveResponseBody.value?.toList()
// ?: listOf("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n",
// "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z")
// LazyColumn {
// items(fileList) { name -> Text(text=name, fontSize = 30.sp) }
// }
LazyColumn {
items(fileList) { name ->
val logo = painterResource(id = R.drawable.vecchiaicona_)
LogoTextBox(logo, name)
Box (modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.TopCenter) {
LazyColumn {
items(fileList) { file ->
val logo = painterResource(id = getId(file.mimeType))
val isFolder = file.mimeType.endsWith("folder")
val onClick = if (isFolder) onFolderClick
else onFileClick
LogoTextBox(logo, file.name) { onClick(
if (isFolder) file.id else file.name) }
}
}
}
}
}
fun getId(mimeType: String): Int {
val extracted = mimeType.drop("application/vnd.google-apps.".length)
return when (extracted) {
"document" -> R.drawable.docslogo_ok
"presentation" -> R.drawable.slideslogo_ok
"folder" -> R.drawable.folderlogo_ok
else -> R.drawable.nuovaicona_
}
}
@Composable
fun LogoTextBox(logoPainter: Painter, text: String) {
fun LogoTextBox(
logoPainter: Painter,
text: String,
onClick: () -> Unit) {
Card(
modifier = Modifier
.fillMaxWidth()
.padding(16.dp),
.padding(16.dp)
.clickable(onClick = onClick),
shape = RoundedCornerShape(8.dp),
elevation = CardDefaults.cardElevation(defaultElevation = 4.dp)
) {
Row(
modifier = Modifier
.padding(16.dp)
.padding(horizontal = 16.dp)
.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically
) {
// Logo on the left
Image(
painter = logoPainter,
contentDescription = "Logo",
contentDescription = "Item Logo",
modifier = Modifier
.size(40.dp) // Adjust size as needed
.size(60.dp) // Adjust size as needed
.padding(end = 16.dp) // Space between logo and text
)
@ -215,83 +217,3 @@ fun LogoTextBox(logoPainter: Painter, text: String) {
}
}
}
//@Composable
//fun MyApp() {
// ScaffoldWithSidebar()
//}
//@Composable
//fun MainActivityContent() {
// MyApp()
//}
//@OptIn(ExperimentalMaterial3Api::class)
//@Composable
//fun ScaffoldWithSidebar() {
// // State to control the drawer
// var isDrawerOpen by remember { mutableStateOf(false) }
//
// // Main Scaffold
// Scaffold(
// topBar = {
// TopAppBar(
// title = { Text("My App") },
// navigationIcon = {
// IconButton(onClick = { isDrawerOpen = true }) {
// // Icon for the menu (three horizontal lines)
// Icon(Icons.Filled.Menu, contentDescription = "Menu")
// }
// },
// actions = {
// IconButton(onClick = { /* Handle settings click */ }) {
// // Icon for the settings (three vertical dots)
// Icon(Icons.Filled.MoreVert, contentDescription = "Settings")
// }
// }
// )
// },
// drawerContent = {
// // Drawer content
// Column(
// modifier = Modifier
// .fillMaxSize()
// .padding(16.dp)
// ) {
// Text("Item 1", modifier = Modifier.clickable { /* Handle click */ })
// Spacer(modifier = Modifier.height(8.dp))
// Text("Item 2", modifier = Modifier.clickable { /* Handle click */ })
// Spacer(modifier = Modifier.height(8.dp))
// Text("Item 3", modifier = Modifier.clickable { /* Handle click */ })
// }
// },
// drawerGesturesEnabled = true,
// drawerShape = MaterialTheme.shapes.large,
// drawerContentColor = MaterialTheme.colorScheme.background,
// drawerContainerColor = MaterialTheme.colorScheme.surface,
// content = { padding ->
// // Main content of the screen
// Box(
// modifier = Modifier
// .fillMaxSize()
// .padding(padding)
// .background(Color.White),
// contentAlignment = Alignment.Center
// ) {
// Text("Main Content", fontSize = 24.sp)
// }
// }
// )
//
// // Handle drawer state
// if (isDrawerOpen) {
// // Close the drawer when clicking outside
// Box(
// modifier = Modifier
// .fillMaxSize()
// .background(Color.Black.copy(alpha = 0.5f))
// .clickable { isDrawerOpen = false }
// )
// }
//}

View file

@ -57,6 +57,7 @@ class NeverLoggedInLogic : ComponentActivity() {
}
}
}
finish()
}
}

View file

@ -0,0 +1,81 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="85.381"
android:viewportHeight="85.381">
<path
android:pathData="m47.68,20.95h-18.312c-1.362,0 -2.459,1.281 -2.459,2.873v37.736c0,1.591 1.097,2.873 2.459,2.873h26.644c1.362,0 2.459,-1.281 2.459,-2.873v-29.842"
android:fillColor="#2684fc"/>
<path
android:pathData="m47.68,20.95v10.766h10.791z"
android:fillColor="#0066da"/>
<path
android:pathData="m32.889,45.403h1.883v2.669q-0.442,0.145 -0.892,0.213 -0.45,0.069 -1.022,0.069 -0.846,0 -1.426,-0.335 -0.579,-0.343 -0.884,-0.968 -0.297,-0.633 -0.297,-1.494 0,-0.854 0.335,-1.479 0.335,-0.625 0.961,-0.968 0.633,-0.351 1.525,-0.351 0.457,0 0.862,0.084 0.412,0.084 0.762,0.236l-0.259,0.595q-0.29,-0.13 -0.656,-0.221 -0.358,-0.091 -0.747,-0.091 -0.976,0 -1.525,0.587 -0.541,0.587 -0.541,1.609 0,0.648 0.206,1.151 0.213,0.496 0.663,0.778 0.45,0.274 1.182,0.274 0.358,0 0.61,-0.038t0.457,-0.091v-1.616h-1.197z"
android:strokeLineJoin="round"
android:strokeWidth=".28854"
android:fillColor="#fff"
android:strokeLineCap="round"/>
<path
android:pathData="m39.538,46.227q0,1.014 -0.518,1.571 -0.511,0.557 -1.388,0.557 -0.541,0 -0.968,-0.244 -0.419,-0.252 -0.663,-0.724 -0.244,-0.48 -0.244,-1.159 0,-1.014 0.511,-1.563t1.388,-0.549q0.557,0 0.976,0.252 0.427,0.244 0.663,0.717 0.244,0.465 0.244,1.144zM36.45,46.227q0,0.724 0.282,1.151 0.29,0.419 0.915,0.419 0.618,0 0.907,-0.419 0.29,-0.427 0.29,-1.151t-0.29,-1.136q-0.29,-0.412 -0.915,-0.412t-0.907,0.412q-0.282,0.412 -0.282,1.136z"
android:strokeLineJoin="round"
android:strokeWidth=".28854"
android:fillColor="#fff"
android:strokeLineCap="round"/>
<path
android:pathData="m44.15,46.227q0,1.014 -0.518,1.571 -0.511,0.557 -1.388,0.557 -0.541,0 -0.968,-0.244 -0.419,-0.252 -0.663,-0.724 -0.244,-0.48 -0.244,-1.159 0,-1.014 0.511,-1.563t1.388,-0.549q0.557,0 0.976,0.252 0.427,0.244 0.663,0.717 0.244,0.465 0.244,1.144zM41.062,46.227q0,0.724 0.282,1.151 0.29,0.419 0.915,0.419 0.618,0 0.907,-0.419 0.29,-0.427 0.29,-1.151t-0.29,-1.136q-0.29,-0.412 -0.915,-0.412t-0.907,0.412q-0.282,0.412 -0.282,1.136z"
android:strokeLineJoin="round"
android:strokeWidth=".28854"
android:fillColor="#fff"
android:strokeLineCap="round"/>
<path
android:pathData="m46.659,44.115q0.404,0 0.724,0.152 0.328,0.152 0.557,0.465h0.038l0.091,-0.541h0.534v4.155q0,0.877 -0.45,1.319 -0.442,0.442 -1.38,0.442 -0.9,0 -1.472,-0.259v-0.618q0.602,0.32 1.51,0.32 0.526,0 0.823,-0.313 0.305,-0.305 0.305,-0.839v-0.16q0,-0.091 0.008,-0.259 0.008,-0.175 0.015,-0.244h-0.031q-0.412,0.618 -1.266,0.618 -0.793,0 -1.243,-0.557 -0.442,-0.557 -0.442,-1.555 0,-0.976 0.442,-1.548 0.45,-0.579 1.235,-0.579zM46.751,44.679q-0.511,0 -0.793,0.412 -0.282,0.404 -0.282,1.159 0,0.755 0.274,1.159 0.282,0.396 0.816,0.396 0.618,0 0.9,-0.328 0.282,-0.335 0.282,-1.075v-0.16q0,-0.839 -0.29,-1.197 -0.29,-0.366 -0.907,-0.366z"
android:strokeLineJoin="round"
android:strokeWidth=".28854"
android:fillColor="#fff"
android:strokeLineCap="round"/>
<path
android:pathData="m50.57,48.278h-0.671v-5.795h0.671z"
android:strokeLineJoin="round"
android:strokeWidth=".28854"
android:fillColor="#fff"
android:strokeLineCap="round"/>
<path
android:pathData="m53.445,44.115q0.526,0 0.9,0.229 0.381,0.229 0.579,0.648 0.206,0.412 0.206,0.968v0.404h-2.798q0.015,0.694 0.351,1.06 0.343,0.358 0.953,0.358 0.389,0 0.686,-0.069 0.305,-0.076 0.625,-0.213v0.587q-0.313,0.137 -0.618,0.198 -0.305,0.069 -0.724,0.069 -0.579,0 -1.029,-0.236 -0.442,-0.236 -0.694,-0.701 -0.244,-0.473 -0.244,-1.151 0,-0.671 0.221,-1.151 0.229,-0.48 0.633,-0.74 0.412,-0.259 0.953,-0.259zM53.438,44.664q-0.48,0 -0.762,0.313 -0.274,0.305 -0.328,0.854h2.082q-0.008,-0.518 -0.244,-0.839 -0.236,-0.328 -0.747,-0.328z"
android:strokeLineJoin="round"
android:strokeWidth=".28854"
android:fillColor="#fff"
android:strokeLineCap="round"/>
<path
android:pathData="m34.887,55.033q0,1.38 -0.755,2.082 -0.747,0.694 -2.089,0.694h-1.517v-5.444h1.677q0.823,0 1.426,0.305 0.602,0.305 0.93,0.9 0.328,0.587 0.328,1.464zM34.163,55.056q0,-1.09 -0.541,-1.594 -0.534,-0.511 -1.517,-0.511h-0.892v4.27h0.74q2.211,0 2.211,-2.165z"
android:strokeLineJoin="round"
android:strokeWidth=".28854"
android:fillColor="#fff"
android:strokeLineCap="round"/>
<path
android:pathData="m39.553,55.758q0,1.014 -0.518,1.571 -0.511,0.557 -1.388,0.557 -0.541,0 -0.968,-0.244 -0.419,-0.252 -0.663,-0.724 -0.244,-0.48 -0.244,-1.159 0,-1.014 0.511,-1.563t1.388,-0.549q0.557,0 0.976,0.252 0.427,0.244 0.663,0.717 0.244,0.465 0.244,1.144zM36.465,55.758q0,0.724 0.282,1.151 0.29,0.419 0.915,0.419 0.618,0 0.907,-0.419 0.29,-0.427 0.29,-1.151t-0.29,-1.136q-0.29,-0.412 -0.915,-0.412t-0.907,0.412q-0.282,0.412 -0.282,1.136z"
android:strokeLineJoin="round"
android:strokeWidth=".28854"
android:fillColor="#fff"
android:strokeLineCap="round"/>
<path
android:pathData="m42.252,57.885q-0.541,0 -0.968,-0.221 -0.419,-0.221 -0.663,-0.686 -0.236,-0.465 -0.236,-1.189 0,-0.755 0.252,-1.228t0.679,-0.694q0.435,-0.221 0.984,-0.221 0.313,0 0.602,0.069 0.29,0.061 0.473,0.152l-0.206,0.557q-0.183,-0.069 -0.427,-0.13 -0.244,-0.061 -0.457,-0.061 -1.205,0 -1.205,1.548 0,0.74 0.29,1.136 0.297,0.389 0.877,0.389 0.335,0 0.587,-0.069 0.259,-0.069 0.473,-0.168v0.595q-0.206,0.107 -0.457,0.16 -0.244,0.061 -0.595,0.061z"
android:strokeLineJoin="round"
android:strokeWidth=".28854"
android:fillColor="#fff"
android:strokeLineCap="round"/>
<path
android:pathData="m46.933,56.68q0,0.595 -0.442,0.9t-1.189,0.305q-0.427,0 -0.74,-0.069 -0.305,-0.069 -0.541,-0.191v-0.61q0.244,0.122 0.587,0.229 0.351,0.099 0.709,0.099 0.511,0 0.74,-0.16 0.229,-0.168 0.229,-0.442 0,-0.152 -0.084,-0.274 -0.084,-0.122 -0.305,-0.244 -0.213,-0.122 -0.618,-0.274 -0.396,-0.152 -0.679,-0.305 -0.282,-0.152 -0.435,-0.366t-0.152,-0.549q0,-0.518 0.419,-0.801 0.427,-0.282 1.113,-0.282 0.374,0 0.694,0.076 0.328,0.069 0.61,0.198l-0.229,0.534q-0.259,-0.107 -0.541,-0.183 -0.282,-0.076 -0.579,-0.076 -0.412,0 -0.633,0.137 -0.213,0.13 -0.213,0.358 0,0.168 0.099,0.29 0.099,0.114 0.328,0.229 0.236,0.107 0.625,0.259 0.389,0.145 0.663,0.297 0.274,0.152 0.419,0.374 0.145,0.213 0.145,0.541z"
android:strokeLineJoin="round"
android:strokeWidth=".28854"
android:fillColor="#fff"
android:strokeLineCap="round"/>
<path
android:pathData="M30.719,27.366h14.816v1.858h-14.816z"
android:fillColor="#fff"/>
<path
android:pathData="M30.718,32.386h14.816v1.858h-14.816z"
android:fillColor="#fff"/>
<path
android:pathData="M30.718,37.406h10.665v1.858h-10.665z"
android:fillColor="#fff"/>
</vector>

View file

@ -0,0 +1,72 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="85.381"
android:viewportHeight="85.381">
<path
android:strokeWidth="1"
android:pathData="m21.558,20.95c-3.247,0 -5.861,2.614 -5.861,5.861l0,5.12c0,0.043 0.002,0.086 0.003,0.129 -0.001,0.043 -0.003,0.085 -0.003,0.128l0,26.381c0,3.247 2.614,5.861 5.861,5.861l42.266,0c3.247,0 5.861,-2.614 5.861,-5.861l0,-26.381c0,-3.247 -2.614,-5.861 -5.861,-5.861l-21.521,0l-5.377,-5.377z"
android:fillColor="#649a92"
android:strokeColor="#00000000"/>
<path
android:pathData="m58.403,49.306 l-5.577,9.66l-20.272,0l10.359,-9.66z"
android:strokeLineJoin="round"
android:strokeWidth="0.21"
android:fillColor="#00000000"
android:strokeColor="#fff"/>
<path
android:pathData="m58.403,49.306 l-5.577,9.66l-20.272,0l10.359,-9.66z"
android:strokeLineJoin="round"
android:strokeWidth="0.21"
android:fillColor="#4385f6"
android:strokeColor="#00000000"/>
<path
android:pathData="m37.113,31.749l11.154,0l10.136,17.556 -13.545,-4.141z"
android:strokeLineJoin="round"
android:strokeWidth="0.21"
android:fillColor="#00000000"
android:strokeColor="#fff"/>
<path
android:pathData="m37.113,31.749l11.154,0l10.136,17.556 -13.545,-4.141z"
android:strokeLineJoin="round"
android:strokeWidth="0.21"
android:fillColor="#facb49"
android:strokeColor="#00000000"/>
<path
android:pathData="m32.554,58.966 l-5.577,-9.66 10.136,-17.556 3.186,13.801z"
android:strokeLineJoin="round"
android:strokeWidth="0.21"
android:fillColor="#00000000"
android:strokeColor="#fff"/>
<path
android:pathData="m32.554,58.966 l-5.577,-9.66 10.136,-17.556 3.186,13.801z"
android:strokeLineJoin="round"
android:strokeWidth="0.21"
android:fillColor="#15a862"
android:strokeColor="#00000000"/>
<path
android:strokeWidth="1"
android:pathData="m40.299,45.551 l2.391,-4.141 -5.577,-9.66z"
android:fillColor="#14945b"
android:strokeColor="#00000000"/>
<path
android:strokeWidth="1"
android:pathData="m42.913,49.306l-4.782,0l-5.577,9.66z"
android:fillColor="#2f6dd4"
android:strokeColor="#00000000"/>
<path
android:strokeWidth="1"
android:pathData="m44.858,45.165 l2.391,4.141l11.154,0z"
android:fillColor="#e1b741"
android:strokeColor="#00000000"/>
<path
android:pathData="m47.249,49.306 l-4.559,-7.896 -4.559,7.896z"
android:strokeWidth="0.21"
android:fillColor="#00000000"
android:strokeColor="#fff"/>
<path
android:pathData="m47.249,49.306 l-4.559,-7.896 -4.559,7.896z"
android:strokeWidth="0.21"
android:fillColor="#00000000"
android:strokeColor="#00000000"/>
</vector>

View file

@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="85.381"
android:viewportHeight="85.381">
<path
android:pathData="m18.169,23.894 l16.432,-9.487 32.695,18.682 -16.432,9.487z"
android:strokeWidth="1.3552"
android:fillColor="#ffc107"/>
<path
android:pathData="m34.201,70.974 l0.158,-18.87 32.936,-19.016 -0.084,18.828z"
android:strokeWidth="1.3552"
android:fillColor="#1976d2"/>
<path
android:pathData="m18.085,61.695 l16.116,9.279 0.315,-37.74 -16.347,-9.341z"
android:strokeWidth="1.3552"
android:fillColor="#4caf50"/>
</vector>

View file

@ -0,0 +1,126 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="85.381"
android:viewportHeight="85.381">
<path
android:pathData="m47.68,20.95l-18.312,0c-1.362,0 -2.459,1.281 -2.459,2.873l0,37.736c0,1.591 1.097,2.873 2.459,2.873l26.644,0c1.362,0 2.459,-1.281 2.459,-2.873l0,-29.841"
android:fillColor="#f5b80f"/>
<path
android:strokeWidth="1"
android:pathData="m47.68,20.95l0,10.766l10.791,0z"
android:fillColor="#fadb84"
android:strokeColor="#00000000"/>
<path
android:pathData="m32.889,45.403l1.883,0l0,2.669q-0.442,0.145 -0.892,0.213 -0.45,0.069 -1.022,0.069 -0.846,0 -1.426,-0.335 -0.579,-0.343 -0.884,-0.968 -0.297,-0.633 -0.297,-1.494 0,-0.854 0.335,-1.479 0.335,-0.625 0.961,-0.968 0.633,-0.351 1.525,-0.351 0.457,0 0.862,0.084 0.412,0.084 0.762,0.236l-0.259,0.595q-0.29,-0.13 -0.656,-0.221 -0.358,-0.091 -0.747,-0.091 -0.976,0 -1.525,0.587 -0.541,0.587 -0.541,1.609 0,0.648 0.206,1.151 0.213,0.496 0.663,0.778 0.45,0.274 1.182,0.274 0.358,0 0.61,-0.038t0.457,-0.091l0,-1.616l-1.197,0z"
android:strokeLineJoin="round"
android:strokeWidth="0.289"
android:fillColor="#fff"
android:strokeLineCap="round"/>
<path
android:pathData="m39.538,46.227q0,1.014 -0.518,1.571 -0.511,0.557 -1.388,0.557 -0.541,0 -0.968,-0.244 -0.419,-0.252 -0.663,-0.724 -0.244,-0.48 -0.244,-1.159 0,-1.014 0.511,-1.563 0.511,-0.549 1.388,-0.549 0.557,0 0.976,0.252 0.427,0.244 0.663,0.717 0.244,0.465 0.244,1.144zM36.45,46.227q0,0.724 0.282,1.151 0.29,0.419 0.915,0.419 0.618,0 0.907,-0.419 0.29,-0.427 0.29,-1.151t-0.29,-1.136q-0.29,-0.412 -0.915,-0.412t-0.907,0.412q-0.282,0.412 -0.282,1.136z"
android:strokeLineJoin="round"
android:strokeWidth="0.289"
android:fillColor="#fff"
android:strokeLineCap="round"/>
<path
android:pathData="m44.151,46.227q0,1.014 -0.518,1.571 -0.511,0.557 -1.388,0.557 -0.541,0 -0.968,-0.244 -0.419,-0.252 -0.663,-0.724 -0.244,-0.48 -0.244,-1.159 0,-1.014 0.511,-1.563 0.511,-0.549 1.388,-0.549 0.557,0 0.976,0.252 0.427,0.244 0.663,0.717 0.244,0.465 0.244,1.144zM41.063,46.227q0,0.724 0.282,1.151 0.29,0.419 0.915,0.419 0.618,0 0.907,-0.419 0.29,-0.427 0.29,-1.151t-0.29,-1.136q-0.29,-0.412 -0.915,-0.412t-0.907,0.412q-0.282,0.412 -0.282,1.136z"
android:strokeLineJoin="round"
android:strokeWidth="0.289"
android:fillColor="#fff"
android:strokeLineCap="round"/>
<path
android:pathData="m46.659,44.115q0.404,0 0.724,0.152 0.328,0.152 0.557,0.465l0.038,0l0.091,-0.541l0.534,0l0,4.155q0,0.877 -0.45,1.319 -0.442,0.442 -1.38,0.442 -0.9,0 -1.472,-0.259l0,-0.618q0.602,0.32 1.51,0.32 0.526,0 0.823,-0.313 0.305,-0.305 0.305,-0.839l0,-0.16q0,-0.091 0.008,-0.259 0.008,-0.175 0.015,-0.244l-0.03,0q-0.412,0.618 -1.266,0.618 -0.793,0 -1.243,-0.557 -0.442,-0.557 -0.442,-1.555 0,-0.976 0.442,-1.548 0.45,-0.579 1.235,-0.579zM46.75,44.679q-0.511,0 -0.793,0.412 -0.282,0.404 -0.282,1.159t0.274,1.159q0.282,0.396 0.816,0.396 0.618,0 0.9,-0.328 0.282,-0.335 0.282,-1.075l0,-0.16q0,-0.839 -0.29,-1.197 -0.29,-0.366 -0.907,-0.366z"
android:strokeLineJoin="round"
android:strokeWidth="0.289"
android:fillColor="#fff"
android:strokeLineCap="round"/>
<path
android:pathData="m50.57,48.278l-0.671,0l0,-5.795l0.671,0z"
android:strokeLineJoin="round"
android:strokeWidth="0.289"
android:fillColor="#fff"
android:strokeLineCap="round"/>
<path
android:pathData="m53.445,44.115q0.526,0 0.9,0.229 0.381,0.229 0.579,0.648 0.206,0.412 0.206,0.968l0,0.404l-2.798,0q0.015,0.694 0.351,1.06 0.343,0.358 0.953,0.358 0.389,0 0.686,-0.069 0.305,-0.076 0.625,-0.213l0,0.587q-0.313,0.137 -0.618,0.198 -0.305,0.069 -0.724,0.069 -0.579,0 -1.029,-0.236 -0.442,-0.236 -0.694,-0.701 -0.244,-0.473 -0.244,-1.151 0,-0.671 0.221,-1.151 0.229,-0.48 0.633,-0.74 0.412,-0.259 0.953,-0.259zM53.437,44.664q-0.48,0 -0.762,0.313 -0.274,0.305 -0.328,0.854l2.082,0q-0.008,-0.518 -0.244,-0.839 -0.236,-0.328 -0.747,-0.328z"
android:strokeLineJoin="round"
android:strokeWidth="0.289"
android:fillColor="#fff"
android:strokeLineCap="round"/>
<path
android:pathData="m33.613,56.352q0,0.724 -0.526,1.128t-1.418,0.404q-0.457,0 -0.846,-0.069 -0.389,-0.069 -0.648,-0.191l0,-0.656q0.274,0.122 0.679,0.221 0.412,0.099 0.846,0.099 0.61,0 0.915,-0.236 0.313,-0.236 0.313,-0.64 0,-0.267 -0.114,-0.45 -0.114,-0.183 -0.396,-0.335 -0.274,-0.16 -0.77,-0.335 -0.694,-0.252 -1.052,-0.618 -0.351,-0.366 -0.351,-0.999 0,-0.435 0.221,-0.74 0.221,-0.313 0.61,-0.48 0.396,-0.168 0.907,-0.168 0.45,0 0.823,0.084t0.679,0.221l-0.213,0.587q-0.282,-0.122 -0.618,-0.206 -0.328,-0.084 -0.686,-0.084 -0.511,0 -0.77,0.221 -0.259,0.213 -0.259,0.572 0,0.274 0.114,0.457t0.374,0.328 0.701,0.313q0.48,0.175 0.808,0.381 0.335,0.198 0.503,0.48 0.175,0.282 0.175,0.709z"
android:strokeLineJoin="round"
android:strokeWidth="0.289"
android:fillColor="#fff"
android:strokeLineCap="round"/>
<path
android:pathData="m35.291,57.808l-0.671,0l0,-5.795l0.671,0z"
android:strokeLineJoin="round"
android:strokeWidth="0.289"
android:fillColor="#fff"
android:strokeLineCap="round"/>
<path
android:pathData="m36.93,52.189q0.152,0 0.267,0.107 0.122,0.099 0.122,0.32 0,0.213 -0.122,0.32 -0.114,0.107 -0.267,0.107 -0.168,0 -0.282,-0.107t-0.114,-0.32q0,-0.221 0.114,-0.32 0.114,-0.107 0.282,-0.107zM37.258,53.722l0,4.087l-0.671,0l0,-4.087z"
android:strokeLineJoin="round"
android:strokeWidth="0.289"
android:fillColor="#fff"
android:strokeLineCap="round"/>
<path
android:pathData="m40.003,57.885q-0.762,0 -1.22,-0.526 -0.457,-0.534 -0.457,-1.586t0.457,-1.586q0.465,-0.541 1.228,-0.541 0.473,0 0.77,0.175 0.305,0.175 0.496,0.427l0.046,0q-0.008,-0.099 -0.03,-0.29 -0.015,-0.198 -0.015,-0.313l0,-1.632l0.671,0l0,5.795l-0.541,0l-0.099,-0.549l-0.03,0q-0.183,0.259 -0.488,0.442 -0.305,0.183 -0.785,0.183zM40.109,57.328q0.648,0 0.907,-0.351 0.267,-0.358 0.267,-1.075l0,-0.122q0,-0.762 -0.252,-1.167 -0.252,-0.412 -0.93,-0.412 -0.541,0 -0.816,0.435 -0.267,0.427 -0.267,1.151 0,0.732 0.267,1.136 0.274,0.404 0.823,0.404z"
android:strokeLineJoin="round"
android:strokeWidth="0.289"
android:fillColor="#fff"
android:strokeLineCap="round"/>
<path
android:pathData="m44.821,53.646q0.526,0 0.9,0.229 0.381,0.229 0.579,0.648 0.206,0.412 0.206,0.968l0,0.404l-2.798,0q0.015,0.694 0.351,1.06 0.343,0.358 0.953,0.358 0.389,0 0.686,-0.069 0.305,-0.076 0.625,-0.213l0,0.587q-0.313,0.137 -0.618,0.198 -0.305,0.069 -0.724,0.069 -0.579,0 -1.029,-0.236 -0.442,-0.236 -0.694,-0.701 -0.244,-0.473 -0.244,-1.151 0,-0.671 0.221,-1.151 0.229,-0.48 0.633,-0.74 0.412,-0.259 0.953,-0.259zM44.814,54.195q-0.48,0 -0.762,0.313 -0.274,0.305 -0.328,0.854l2.082,0q-0.008,-0.518 -0.244,-0.839 -0.236,-0.328 -0.747,-0.328z"
android:strokeLineJoin="round"
android:strokeWidth="0.289"
android:fillColor="#fff"
android:strokeLineCap="round"/>
<path
android:pathData="m50.204,56.68q0,0.595 -0.442,0.9t-1.189,0.305q-0.427,0 -0.74,-0.069 -0.305,-0.069 -0.541,-0.191l0,-0.61q0.244,0.122 0.587,0.229 0.351,0.099 0.709,0.099 0.511,0 0.74,-0.16 0.229,-0.168 0.229,-0.442 0,-0.152 -0.084,-0.274t-0.305,-0.244q-0.213,-0.122 -0.618,-0.274 -0.396,-0.152 -0.679,-0.305t-0.435,-0.366 -0.152,-0.549q0,-0.518 0.419,-0.801 0.427,-0.282 1.113,-0.282 0.374,0 0.694,0.076 0.328,0.069 0.61,0.198l-0.229,0.534q-0.259,-0.107 -0.541,-0.183t-0.579,-0.076q-0.412,0 -0.633,0.137 -0.213,0.13 -0.213,0.358 0,0.168 0.099,0.29 0.099,0.114 0.328,0.229 0.236,0.107 0.625,0.259 0.389,0.145 0.663,0.297t0.419,0.374q0.145,0.213 0.145,0.541z"
android:strokeLineJoin="round"
android:strokeWidth="0.289"
android:fillColor="#fff"
android:strokeLineCap="round"/>
<path
android:pathData="M32.41,24.801L43.282,24.801A1.088,1.088 0,0 1,44.37 25.888L44.37,27.067A1.088,1.088 0,0 1,43.282 28.155L32.41,28.155A1.088,1.088 0,0 1,31.323 27.067L31.323,25.888A1.088,1.088 0,0 1,32.41 24.801z"
android:strokeWidth="0.438"
android:fillColor="#00000000"
android:strokeColor="#fff"/>
<path
android:pathData="M32.41,24.801L43.282,24.801A1.088,1.088 0,0 1,44.37 25.888L44.37,27.067A1.088,1.088 0,0 1,43.282 28.155L32.41,28.155A1.088,1.088 0,0 1,31.323 27.067L31.323,25.888A1.088,1.088 0,0 1,32.41 24.801z"
android:strokeWidth="0.438"
android:fillColor="#fff"
android:strokeColor="#00000000"/>
<path
android:pathData="M32.41,34.469L43.282,34.469A1.088,1.088 0,0 1,44.37 35.557L44.37,36.736A1.088,1.088 0,0 1,43.282 37.823L32.41,37.823A1.088,1.088 0,0 1,31.323 36.736L31.323,35.557A1.088,1.088 0,0 1,32.41 34.469z"
android:strokeWidth="0.438"
android:fillColor="#00000000"
android:strokeColor="#fff"/>
<path
android:pathData="M32.41,34.469L43.282,34.469A1.088,1.088 0,0 1,44.37 35.557L44.37,36.736A1.088,1.088 0,0 1,43.282 37.823L32.41,37.823A1.088,1.088 0,0 1,31.323 36.736L31.323,35.557A1.088,1.088 0,0 1,32.41 34.469z"
android:strokeWidth="0.438"
android:fillColor="#fff"
android:strokeColor="#00000000"/>
<path
android:pathData="M31.952,26.481L31.952,26.481A1.087,0.722 90,0 1,32.674 27.568L32.674,35.056A1.087,0.722 90,0 1,31.952 36.142L31.952,36.142A1.087,0.722 90,0 1,31.23 35.056L31.23,27.568A1.087,0.722 90,0 1,31.952 26.481z"
android:strokeWidth="0.253"
android:fillColor="#00000000"
android:strokeColor="#fff"/>
<path
android:pathData="M31.952,26.481L31.952,26.481A1.087,0.722 90,0 1,32.674 27.568L32.674,35.056A1.087,0.722 90,0 1,31.952 36.142L31.952,36.142A1.087,0.722 90,0 1,31.23 35.056L31.23,27.568A1.087,0.722 90,0 1,31.952 26.481z"
android:strokeWidth="0.253"
android:fillColor="#fff"
android:strokeColor="#00000000"/>
<path
android:pathData="M43.718,26.481L43.718,26.481A1.087,0.722 90,0 1,44.44 27.568L44.44,35.056A1.087,0.722 90,0 1,43.718 36.142L43.718,36.142A1.087,0.722 90,0 1,42.996 35.056L42.996,27.568A1.087,0.722 90,0 1,43.718 26.481z"
android:strokeWidth="0.253"
android:fillColor="#00000000"
android:strokeColor="#fff"/>
<path
android:pathData="M43.718,26.481L43.718,26.481A1.087,0.722 90,0 1,44.44 27.568L44.44,35.056A1.087,0.722 90,0 1,43.718 36.142L43.718,36.142A1.087,0.722 90,0 1,42.996 35.056L42.996,27.568A1.087,0.722 90,0 1,43.718 26.481z"
android:strokeWidth="0.253"
android:fillColor="#fff"
android:strokeColor="#00000000"/>
</vector>