diff --git a/app/WikiSpot/app/src/main/AndroidManifest.xml b/app/WikiSpot/app/src/main/AndroidManifest.xml index 29b8096..98d09a2 100644 --- a/app/WikiSpot/app/src/main/AndroidManifest.xml +++ b/app/WikiSpot/app/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ diff --git a/app/WikiSpot/app/src/main/java/com/example/wikispot/activities/MainActivity.kt b/app/WikiSpot/app/src/main/java/com/example/wikispot/activities/MainActivity.kt index 1062422..259df80 100644 --- a/app/WikiSpot/app/src/main/java/com/example/wikispot/activities/MainActivity.kt +++ b/app/WikiSpot/app/src/main/java/com/example/wikispot/activities/MainActivity.kt @@ -230,6 +230,10 @@ class MainActivity : AppCompatActivity() { "settingsFragment" -> { mainBottomNavigationView.selectedItemId = R.id.settingsFragment } + "debugFragment" -> { + StartDirections.settingsFragmentStartDirection = "debugFragment" + mainBottomNavigationView.selectedItemId = R.id.settingsFragment + } } } diff --git a/app/WikiSpot/app/src/main/java/com/example/wikispot/adapters/FileViewsAdapter.kt b/app/WikiSpot/app/src/main/java/com/example/wikispot/adapters/FileViewsAdapter.kt index 4fa6e91..b9a576b 100644 --- a/app/WikiSpot/app/src/main/java/com/example/wikispot/adapters/FileViewsAdapter.kt +++ b/app/WikiSpot/app/src/main/java/com/example/wikispot/adapters/FileViewsAdapter.kt @@ -1,23 +1,31 @@ package com.example.wikispot.adapters import android.content.Context +import android.content.Intent import android.graphics.Bitmap +import android.net.Uri import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.animation.Animation import android.view.animation.AnimationUtils +import androidx.core.content.ContextCompat.startActivity import androidx.recyclerview.widget.RecyclerView import com.example.wikispot.R import com.example.wikispot.ServerManagement import com.example.wikispot.modelsForAdapters.FileView import kotlinx.android.synthetic.main.file_view.view.* +import java.io.File +import java.io.FileOutputStream +import java.net.URL class FileViewsAdapter(private val context: Context, private val fileViews: Array) : RecyclerView.Adapter() { private val rotateOpen: Animation by lazy { AnimationUtils.loadAnimation(context, R.anim.open_rotation_anim) } private val rotateClose: Animation by lazy { AnimationUtils.loadAnimation(context, R.anim.close_rotation_anim) } + private val fadeIn: Animation by lazy {AnimationUtils.loadAnimation(context, R.anim.fade_in) } + private val fadeOut: Animation by lazy {AnimationUtils.loadAnimation(context, R.anim.fade_out) } inner class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView){ @@ -31,6 +39,8 @@ class FileViewsAdapter(private val context: Context, private val fileViews: Arra init { itemView.setOnClickListener { if (!opened) { + itemView.downloadFileBtn.visibility = View.VISIBLE + itemView.downloadFileBtn.startAnimation(fadeIn) itemView.showFileBtn.startAnimation(rotateOpen) fileView?.let { @@ -60,18 +70,46 @@ class FileViewsAdapter(private val context: Context, private val fileViews: Arra } pdfUrl?.let { itemView.pdfContent.visibility = View.VISIBLE - ServerManagement.serverManager.loadPdfView(itemView.pdfContent, pdfUrl!!) + ServerManagement.serverManager.loadPdfView(itemView.pdfContent, pdfUrl!!, true) + println("current page is: ${itemView.pdfContent.currentPage}") } } } else { itemView.showFileBtn.startAnimation(rotateClose) itemView.textContent.textSize = 0F + + val downloadBtnVanishActionThread = Thread(DownloadBtnVanishAction()) + downloadBtnVanishActionThread.start() + itemView.imageContent.visibility = View.GONE itemView.pdfContent.visibility = View.GONE } opened = !opened } + + itemView.downloadFileBtn.setOnClickListener { + textInfo?.let { + val textInformation = textInfo!!.split("|||||") + val url = "${ServerManagement.baseUrl}files/${textInformation[0]}/${textInformation[1]}" + + val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) + startActivity(context, browserIntent, null) + } + + imgInfo?.let { + val imgInformation = imgInfo!!.split("|||||") + val url = "${ServerManagement.baseUrl}files/${imgInformation[0]}/${imgInformation[1]}" + + val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) + startActivity(context, browserIntent, null) + } + + pdfUrl?.let { + val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(pdfUrl)) + startActivity(context, browserIntent, null) + } + } } fun setData(fileView: FileView?, pos: Int) { @@ -92,6 +130,24 @@ class FileViewsAdapter(private val context: Context, private val fileViews: Arra this.fileView = fileView this.pos = pos } + + inner class DownloadBtnVanishAction: Runnable { + override fun run() { + + itemView.post { + itemView.downloadFileBtn.startAnimation(fadeOut) + } + + Thread.sleep(600) + + itemView.post { + itemView.downloadFileBtn.clearAnimation() + itemView.downloadFileBtn.visibility = View.GONE + } + + } + + } } override fun onBindViewHolder(holder: MyViewHolder, position: Int) { diff --git a/app/WikiSpot/app/src/main/java/com/example/wikispot/fragments/chatFragment.kt b/app/WikiSpot/app/src/main/java/com/example/wikispot/fragments/chatFragment.kt index 9f735d7..89d47ed 100644 --- a/app/WikiSpot/app/src/main/java/com/example/wikispot/fragments/chatFragment.kt +++ b/app/WikiSpot/app/src/main/java/com/example/wikispot/fragments/chatFragment.kt @@ -5,6 +5,7 @@ import androidx.fragment.app.Fragment import android.view.View import androidx.recyclerview.widget.LinearLayoutManager import com.example.wikispot.R +import com.example.wikispot.ServerManagement import com.example.wikispot.adapters.ChatMessagesAdapter import com.example.wikispot.adapters.FileViewsAdapter import com.example.wikispot.modelsForAdapters.MessagesSupplier @@ -20,16 +21,33 @@ class chatFragment : Fragment(R.layout.fragment_chat) { updateRecyclerView() } + override fun onResume() { + super.onResume() + + val dataReceiver: (String) -> Unit = {data: String -> + println("[debug][chat connection] data: $data") + } + + ServerManagement.serverManager.addReceiverConnection(dataReceiver, requireContext(), "chatConnection", 0, ServerManagement.chat_keyword) + } + + override fun onPause() { + super.onPause() + ServerManagement.serverManager.deleteConnection("chatConnection") + } + private fun updateRecyclerView() { - chat_messages_recycler_view.post { - val layoutManager = LinearLayoutManager(context) - layoutManager.orientation = LinearLayoutManager.VERTICAL - chat_messages_recycler_view.layoutManager = layoutManager + try { + chat_messages_recycler_view.post { + val layoutManager = LinearLayoutManager(context) + layoutManager.orientation = LinearLayoutManager.VERTICAL + chat_messages_recycler_view.layoutManager = layoutManager - val adapter = context?.let { ChatMessagesAdapter(it, MessagesSupplier.messages) } - chat_messages_recycler_view.adapter = adapter - } + val adapter = context?.let { ChatMessagesAdapter(it, MessagesSupplier.messages) } + chat_messages_recycler_view.adapter = adapter + } + } catch (e: Throwable) { println("[debug] e5 Exception: $e") } } diff --git a/app/WikiSpot/app/src/main/java/com/example/wikispot/fragments/debugFragment.kt b/app/WikiSpot/app/src/main/java/com/example/wikispot/fragments/debugFragment.kt index 0b304f8..c166835 100644 --- a/app/WikiSpot/app/src/main/java/com/example/wikispot/fragments/debugFragment.kt +++ b/app/WikiSpot/app/src/main/java/com/example/wikispot/fragments/debugFragment.kt @@ -1,20 +1,21 @@ package com.example.wikispot.fragments import android.annotation.SuppressLint +import android.content.Intent import android.os.Bundle import android.view.View import androidx.fragment.app.Fragment import androidx.navigation.Navigation +import com.example.wikispot.IntentsKeys import com.example.wikispot.R import com.example.wikispot.ServerManagement +import com.example.wikispot.activities.MainActivity import com.example.wikispot.modelClasses.JsonManager import kotlinx.android.synthetic.main.fragment_debug.* class debugFragment : Fragment(R.layout.fragment_debug) { - private lateinit var jsonManager: JsonManager - @SuppressLint("SetTextI18n") override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -27,30 +28,31 @@ class debugFragment : Fragment(R.layout.fragment_debug) { outputText.text = ServerManagement.totalNumberOfRequestsSent.toString() } - val pdfRequestThread = Thread(PdfRequest()) - pdfRequestThread.start() + clearServerConnectionsBtn.setOnClickListener { + ServerManagement.serverManager.clearConnections() + } + editTextIp.setText(ServerManagement.baseUrl) + changeIpBtn.setOnClickListener { + ServerManagement.baseUrl = editTextIp.text.toString() + restartAppPartially() + } + + restartAppPartiallyBtn.setOnClickListener { + restartAppPartially() + } } - inner class PdfRequest : Runnable { + private fun restartAppPartially() { + val intent = Intent(context?.applicationContext, MainActivity::class.java) - override fun run() { - val inputStream = java.net.URL("${ServerManagement.baseUrl}files/1/sample.pdf").openStream() + intent.putExtra(IntentsKeys.startFragment, "debugFragment") - Thread.sleep(500) + ServerManagement.serverManager.clearConnections() - pdfContent.post { - pdfContent.fromStream(inputStream).load() - pdfContent.zoomTo(pdfContent.width / 490.0F) - println("[debug] zoom is ${pdfContent.width / 490.0F}") - println(pdfContent.width) - Thread.sleep(1000) - println(pdfContent.currentPage) - } - - ServerManagement.totalNumberOfRequestsSent += 1 - } + startActivity(intent) + activity?.finish() } } \ No newline at end of file diff --git a/app/WikiSpot/app/src/main/java/com/example/wikispot/fragments/infoFragment.kt b/app/WikiSpot/app/src/main/java/com/example/wikispot/fragments/infoFragment.kt index 3385ad7..e32fc23 100644 --- a/app/WikiSpot/app/src/main/java/com/example/wikispot/fragments/infoFragment.kt +++ b/app/WikiSpot/app/src/main/java/com/example/wikispot/fragments/infoFragment.kt @@ -65,7 +65,7 @@ class infoFragment : Fragment(R.layout.fragment_info) { val json = JsonManager(requireContext(), data) json.findJsonObjectByAttribute("ID", serverId) - mainImage?.let { + mainTitle?.let { mainTitle.post { mainTitle.text = json.getAttributeContentByPath("description/title") } @@ -177,7 +177,7 @@ class infoFragment : Fragment(R.layout.fragment_info) { val adapter = context?.let { LabeledValuesAdapter(it, LabeledValuesSupplier.labeledValues) } labeled_values_recycler_view.adapter = adapter } - } catch (e: Throwable) { println("[debug] e3 that i couldnt fix so try catch Exception: $e") } + } catch (e: Throwable) { println("[debug] e3 Exception: $e") } } @@ -192,7 +192,7 @@ class infoFragment : Fragment(R.layout.fragment_info) { val adapter = context?.let { FileViewsAdapter(it, FileViewsSupplier.fileViews) } file_views_recycler_view.adapter = adapter } - } catch (e: Throwable) { println("[debug] e2 that i couldnt fix so try catch Exception: $e") } + } catch (e: Throwable) { println("[debug] e2 Exception: $e") } } diff --git a/app/WikiSpot/app/src/main/java/com/example/wikispot/fragments/mapFragment.kt b/app/WikiSpot/app/src/main/java/com/example/wikispot/fragments/mapFragment.kt index 618e998..1b2ce5d 100644 --- a/app/WikiSpot/app/src/main/java/com/example/wikispot/fragments/mapFragment.kt +++ b/app/WikiSpot/app/src/main/java/com/example/wikispot/fragments/mapFragment.kt @@ -62,7 +62,8 @@ class mapFragment : Fragment(), GoogleMap.OnMarkerClickListener { // loading other markers for (n in PlaceSupplier.places.indices) { val coordinates = PlaceSupplier.places[n]?.location!!.split(",") - googleMap.addMarker(MarkerOptions().position(LatLng(coordinates[0].toDouble(), coordinates[1].toDouble())).title(PlaceSupplier.places[n]?.title)) + googleMap.addMarker(MarkerOptions().position(LatLng(coordinates[0].toDouble(), coordinates[1].toDouble())).title(PlaceSupplier.places[n]?.title) + .snippet(PlaceSupplier.places[n]!!.description)) } googleMap.setOnMarkerClickListener(this) diff --git a/app/WikiSpot/app/src/main/java/com/example/wikispot/fragments/settingsFragment.kt b/app/WikiSpot/app/src/main/java/com/example/wikispot/fragments/settingsFragment.kt index 4e05b5e..b1cd330 100644 --- a/app/WikiSpot/app/src/main/java/com/example/wikispot/fragments/settingsFragment.kt +++ b/app/WikiSpot/app/src/main/java/com/example/wikispot/fragments/settingsFragment.kt @@ -5,10 +5,7 @@ import android.os.Bundle import androidx.fragment.app.Fragment import android.view.View import androidx.navigation.Navigation -import com.example.wikispot.IntentsKeys -import com.example.wikispot.R -import com.example.wikispot.ServerManagement -import com.example.wikispot.ThemeOptions +import com.example.wikispot.* import com.example.wikispot.activities.MainActivity import com.example.wikispot.modelClasses.ServerManager import com.example.wikispot.modelClasses.SettingsSaveManager @@ -22,6 +19,15 @@ class settingsFragment : Fragment(R.layout.fragment_settings) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + StartDirections.settingsFragmentStartDirection?.let { + when (StartDirections.settingsFragmentStartDirection) { + "debugFragment" -> { + Navigation.findNavController(debugBtn).navigate(R.id.navigateToDebugFragment) + StartDirections.settingsFragmentStartDirection = null + } + } + } + settingsSaveManager = SettingsSaveManager(requireContext()) loadSettings() diff --git a/app/WikiSpot/app/src/main/java/com/example/wikispot/modelClasses/ServerManager.kt b/app/WikiSpot/app/src/main/java/com/example/wikispot/modelClasses/ServerManager.kt index 7b2ed5b..db44eec 100644 --- a/app/WikiSpot/app/src/main/java/com/example/wikispot/modelClasses/ServerManager.kt +++ b/app/WikiSpot/app/src/main/java/com/example/wikispot/modelClasses/ServerManager.kt @@ -128,16 +128,16 @@ class ServerManager { } } - fun loadPdfView(view: PDFView, url: String) { - val pdfLoadingRequestThread = Thread(PdfLoadingRequest(view, url)) + fun loadPdfView(view: PDFView, url: String, swipeHorizontal: Boolean=false) { + val pdfLoadingRequestThread = Thread(PdfLoadingRequest(view, url, swipeHorizontal)) pdfLoadingRequestThread.start() } - inner class PdfLoadingRequest(val view: PDFView, val url: String): Runnable { + inner class PdfLoadingRequest(val view: PDFView, val url: String, private val swipeHorizontal: Boolean=false): Runnable { override fun run() { val inputStream = java.net.URL(url).openStream() view.post { - view.fromStream(inputStream).load() + view.fromStream(inputStream).swipeHorizontal(swipeHorizontal).load() view.zoomTo(view.width / 490.0F) } } @@ -150,15 +150,15 @@ class ServerManager { for (i in 0 until receiverConnections.size) { try { receiverConnections[i].running = false - receiverConnections.removeAt(i) } catch (e: Throwable) { println("In clearConnections: $e") } } + receiverConnections = mutableListOf() for (i in 0 until viewConnections.size) { try { viewConnections[i].running = false - viewConnections.removeAt(i) } catch (e: Throwable) { println("In clearConnections: $e") } } + viewConnections = mutableListOf() } fun checkIfConnectionAlreadyExists(connectionName: String, connectionType: String="any"): Boolean{ diff --git a/app/WikiSpot/app/src/main/java/com/example/wikispot/modelsForAdapters/ExploreListModel.kt b/app/WikiSpot/app/src/main/java/com/example/wikispot/modelsForAdapters/ExploreListModel.kt index 28f7994..b6509d9 100644 --- a/app/WikiSpot/app/src/main/java/com/example/wikispot/modelsForAdapters/ExploreListModel.kt +++ b/app/WikiSpot/app/src/main/java/com/example/wikispot/modelsForAdapters/ExploreListModel.kt @@ -2,16 +2,11 @@ package com.example.wikispot.modelsForAdapters import android.content.Context import android.graphics.Bitmap -import android.media.Image -import com.example.wikispot.ScreenParameters import com.example.wikispot.getStringFromSharedPreferences import com.example.wikispot.modelClasses.JsonManager import com.example.wikispot.modelClasses.JsonManagerLite import com.example.wikispot.saveString -import com.google.android.gms.maps.model.LatLng import org.json.JSONArray -import java.lang.IndexOutOfBoundsException -import java.lang.NullPointerException data class PlacePreview(var title: String, var description: String, var location: String? = null, var img: Bitmap? = null, val id: Int?=null) { @@ -41,9 +36,9 @@ object PlaceSupplier { var controlJson: JsonManagerLite? = null var places = arrayOf( - PlacePreview("River", "", "39.94071648123733,-85.9346308193051"), - PlacePreview("Velky Manin", "", "49.12590793522579,18.49571849264312"), - PlacePreview("Klapy", "", "49.161527643132175,18.41231657316252") + PlacePreview("River", "", "39.94071648123733,-85.9346308193051", null, 12), + PlacePreview("Velky Manin", "", "49.12590793522579,18.49571849264312", null, 16), + PlacePreview("Klapy", "", "49.161527643132175,18.41231657316252", null, 18) ) fun appendPlace(place: PlacePreview) { @@ -88,6 +83,7 @@ object PlaceSupplier { val jsonManager = JsonManager(context, save) for (n in 0 until jsonManager.getLengthOfJsonArray()) { val savedData = jsonManager.jsonArray?.get(n).toString().split("|||||") + println("[debug] saved data is $savedData") val place = PlacePreview(savedData[0], savedData[1], savedData[2], null, savedData[3].toInt()) if (!checkIfContains(place)) { appendPlace(place) diff --git a/app/WikiSpot/app/src/main/java/com/example/wikispot/modelsForAdapters/FilesListModel.kt b/app/WikiSpot/app/src/main/java/com/example/wikispot/modelsForAdapters/FilesListModel.kt index 307b074..7ad7407 100644 --- a/app/WikiSpot/app/src/main/java/com/example/wikispot/modelsForAdapters/FilesListModel.kt +++ b/app/WikiSpot/app/src/main/java/com/example/wikispot/modelsForAdapters/FilesListModel.kt @@ -1,7 +1,5 @@ package com.example.wikispot.modelsForAdapters -import android.graphics.Bitmap - data class FileView(val filetype: String, val filename: String, var textInfo: String? = null, var imgInfo: String? = null, var pdfUrl: String? = null) diff --git a/app/WikiSpot/app/src/main/java/com/example/wikispot/modelsForAdapters/MessagesListModel.kt b/app/WikiSpot/app/src/main/java/com/example/wikispot/modelsForAdapters/MessagesListModel.kt index 5a0b4e5..02d28dd 100644 --- a/app/WikiSpot/app/src/main/java/com/example/wikispot/modelsForAdapters/MessagesListModel.kt +++ b/app/WikiSpot/app/src/main/java/com/example/wikispot/modelsForAdapters/MessagesListModel.kt @@ -13,6 +13,10 @@ object MessagesSupplier { messages = array } + fun checkIfContains(message: Message) { + + } + fun wipeData() { messages = arrayOf() } diff --git a/app/WikiSpot/app/src/main/java/com/example/wikispot/projectScopeVariables.kt b/app/WikiSpot/app/src/main/java/com/example/wikispot/projectScopeVariables.kt index a861fda..e14b848 100644 --- a/app/WikiSpot/app/src/main/java/com/example/wikispot/projectScopeVariables.kt +++ b/app/WikiSpot/app/src/main/java/com/example/wikispot/projectScopeVariables.kt @@ -24,10 +24,11 @@ object ServerManagement { const val viewConnectionOnCheckWait: Long = 5000 const val dataRequestOnAttemptWait: Long = 2000 const val imageRequestOnAttemptWait: Long = 2000 - const val baseUrl = "http://192.168.1.156:8000/" + var baseUrl = "http://192.168.1.156:8000/" var selectedServerId = 0 const val sensors_keyword = "_[{(S,e,n,s,o,r,s)}]_" + const val chat_keyword = "_[{(C,h,a,t)}]_" var totalNumberOfRequestsSent = 0 } @@ -50,7 +51,9 @@ object CustomBackstackVariables { object ThemeOptions { - var darkTheme = false - +} + +object StartDirections { + var settingsFragmentStartDirection: String? = null } diff --git a/app/WikiSpot/app/src/main/res/anim/fade_in.xml b/app/WikiSpot/app/src/main/res/anim/fade_in.xml new file mode 100644 index 0000000..14271d4 --- /dev/null +++ b/app/WikiSpot/app/src/main/res/anim/fade_in.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/WikiSpot/app/src/main/res/anim/fade_out.xml b/app/WikiSpot/app/src/main/res/anim/fade_out.xml new file mode 100644 index 0000000..8b1628e --- /dev/null +++ b/app/WikiSpot/app/src/main/res/anim/fade_out.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/WikiSpot/app/src/main/res/drawable/ic_sharp_arrow_drop_up_24.xml b/app/WikiSpot/app/src/main/res/drawable/ic_baseline_arrow_drop_down_24.xml similarity index 86% rename from app/WikiSpot/app/src/main/res/drawable/ic_sharp_arrow_drop_up_24.xml rename to app/WikiSpot/app/src/main/res/drawable/ic_baseline_arrow_drop_down_24.xml index dcd2b09..ce58346 100644 --- a/app/WikiSpot/app/src/main/res/drawable/ic_sharp_arrow_drop_up_24.xml +++ b/app/WikiSpot/app/src/main/res/drawable/ic_baseline_arrow_drop_down_24.xml @@ -6,5 +6,5 @@ android:tint="?attr/colorControlNormal"> + android:pathData="M7,10l5,5 5,-5z"/> diff --git a/app/WikiSpot/app/src/main/res/drawable/ic_baseline_download_24.xml b/app/WikiSpot/app/src/main/res/drawable/ic_baseline_download_24.xml new file mode 100644 index 0000000..1f61509 --- /dev/null +++ b/app/WikiSpot/app/src/main/res/drawable/ic_baseline_download_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/WikiSpot/app/src/main/res/drawable/map_fragment_gradient_background.xml b/app/WikiSpot/app/src/main/res/drawable/map_fragment_gradient_background.xml deleted file mode 100644 index bb7c2ec..0000000 --- a/app/WikiSpot/app/src/main/res/drawable/map_fragment_gradient_background.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/WikiSpot/app/src/main/res/layout/file_view.xml b/app/WikiSpot/app/src/main/res/layout/file_view.xml index 08570c1..4f16098 100644 --- a/app/WikiSpot/app/src/main/res/layout/file_view.xml +++ b/app/WikiSpot/app/src/main/res/layout/file_view.xml @@ -33,7 +33,7 @@ android:scaleY="4" card_view:layout_constraintEnd_toEndOf="parent" card_view:layout_constraintTop_toTopOf="parent" - card_view:srcCompat="@drawable/ic_sharp_arrow_drop_up_24" /> + card_view:srcCompat="@drawable/ic_baseline_arrow_drop_down_24" /> + + \ No newline at end of file diff --git a/app/WikiSpot/app/src/main/res/layout/fragment_debug.xml b/app/WikiSpot/app/src/main/res/layout/fragment_debug.xml index ea198c2..aa9855f 100644 --- a/app/WikiSpot/app/src/main/res/layout/fragment_debug.xml +++ b/app/WikiSpot/app/src/main/res/layout/fragment_debug.xml @@ -31,12 +31,13 @@ + android:layout_marginTop="16dp" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.5" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/clearServerConnectionsBtn"> - + + + +